Sunday, July 22, 2007

HOWTO: See Invisible Bullets and Actual Colors on Radar

Brought to you by Phasmophage :)

You may recall our previous post about being able to see Stealth tanks on radar. That's useful, we can do more to make ouur radar even more powerful. With this tip from Phasmophage, we can add the ability to see Invisible Bullets and see the actual tank colors of tanks when we have the Colorblindness flag.

For this, we're revisiting RadarRenderer.cxx in /src/bzflag/ of the extracted source. Search for " if (shot && (shot->getFlag() !=" and you will find this line:

if (shot && (shot->getFlag() != Flags::InvisibleBullet || iSeeAll)) {

Remove "&& (shot->getFlag() != Flags::InvisibleBullet || iSeeAll)" so that the edited line looks like this:

if (shot) {

Look at this entire section now (includes edited line from above):

if (shot) {
const float *shotcolor;
if (coloredShot) {
if (myTank->getFlag() == Flags::Colorblindness)
shotcolor = Team::getRadarColor(RogueTeam,rabbitMode);
else
shotcolor = Team::getRadarColor(player->getTeam(),rabbitMode);
const float cs = colorScale(shot->getPosition()[2], muzzleHeight);

Notice the fourth line in particular:

if (myTank->getFlag() == Flags::Colorblindness)

Let's remove the "== Flags::Colorblindness" so that the line now reads like this:

if (myTank->getFlag())

Next, remove this line:

shotcolor = Team::getRadarColor(RogueTeam,rabbitMode);

... and this:

else

... so that the modified section should now read like this:

if (shot) {
const float *shotcolor;
if (coloredShot) {
if (myTank->getFlag())
shotcolor = Team::getRadarColor(player->getTeam(),rabbitMode);
const float cs = colorScale(shot->getPosition()[2], muzzleHeight);

Save the file, compile your client, and you're done! To view Phasmophage's original instructions, take a look at his comment to "HOWTO: Reverse While Sealed with Oscillation Overthruster" as well as the update comment to this post, "HOWTO: See Invisible Bullets and Actual Colors on Radar".

As always...

Have fun!

Related posts:
HOWTO: Seeing STEALTH Tanks on Radar
HOWTO: Always See Actual Tank Colors

HOWTO: Always See Actual Tank Colors

Brought to you by Phasmophage :)

Here's an edit that will allow you to see the actual tank color of players even if they have Masquerade and/or if you have Colorblindness. For this, we will go to playing.cxx in /src/bzflag/ of the extracted source. Search for "const bool colorblind = (myTank->getFlag()", and you will come to this section:

const bool colorblind = (myTank->getFlag() == Flags::Colorblindness);
player[i]->addShots(scene, colorblind);

TeamColor effectiveTeam = RogueTeam;
if (!colorblind){
if ((player[i]->getFlag() == Flags::Masquerade)
&& (myTank->getFlag() != Flags::Seer)
&& (myTank->getTeam() != ObserverTeam)) {
effectiveTeam = myTank->getTeam();
}
else {
effectiveTeam = player[i]->getTeam();
}
}

const bool inCockpt = ROAM.isRoaming() && !devDriving &&

Look at the first line. Replace "(myTank->getFlag() == Flags::Colorblindness);
player[i]->addShots(scene, colorblind)" with "false" so that the edited line looks like this:

const bool colorblind = false;

Next, look at the line "TeamColor effectiveTeam = RogueTeam;". Replace "RogueTeam" with "player[i]->getTeam()" so that the edited line looks like this:

TeamColor effectiveTeam = player[i]->getTeam();

Remove the lines between the line above and "const bool inCockpt = ROAM.isRoaming() && !devDriving &&" so that the section will look like this:

TeamColor effectiveTeam = player[i]->getTeam();

const bool inCockpt = ROAM.isRoaming() && !devDriving &&

As Phasmophage said it, "This should color masqueraded tanks correctly, and take out some of the effects of colorblindness."

Save the file, compile your new client, and you're done. To view Phasmophage's original instructions, read his comment to "HOWTO: Reverse While Sealed with Oscillation Overthruster".

And,...

Have fun!

Related posts:
HOWTO: Seeing Cloaked Tanks
HOWTO: Seeing STEALTH Tanks on Radar
HOWTO: See Invisible Bullets and Actual Colors on Radar

Saturday, July 21, 2007

HOWTO: Reverse While Sealed with Oscillation Overthruster

Brought to you by Phaz :)

Tired of not being able to reverse into a building with your Oscillation Overthruster (OO) flag? If you poke out of a building to take a shot, can only back into the building by jumping backward which leaves you vulnerable. Or, let's say that you are sealed in a thin wall. If you want to backtrack, you will have to leave the safety of the building to turn around.

No longer!

Thanks to this tip from Phaz, you can back up while sealed with OO! Now you can pull out, snipe your shot, and simply back up into the safety of the building (or other obstacle where you can be sealed). That is, you are no longer limited to driving only in the forward direction.

For this edit, we are going to open LocalPlayer.cxx in /src/bzflag/ of the extracted source. First let's edit the sections that prevent us from being able to back up while sealed. Search for "if (expelled && phased)", and you will this section:

if (expelled && phased)
expelled = (obstacle->getType() == WallObstacle::getClassName() ||
obstacle->getType() == Teleporter::getClassName() ||
(getFlag() == Flags::OscillationOverthruster && desiredSpeed < 0.0f &&
p[2] == 0.0f));

Let's remove the portion "|| (getFlag() == Flags::OscillationOverthruster && desiredSpeed < 0.0f && p[2] == 0.0f)" so that the edited section now reads like this:

if (expelled && phased)
expelled = (obstacle->getType() == WallObstacle::getClassName() ||
obstacle->getType() == Teleporter::getClassName());

Next, search for "(expelled && phased)" again, and you will find this section:

if (expelled && phased)
expelled = (obstacle->getType() == WallObstacle::getClassName() ||
obstacle->getType() == Teleporter::getClassName() ||
(hasOOflag && desiredSpeed < 0.0f && p[2] == 0.0f));

Let's remove the portion "|| (hasOOflag && desiredSpeed < 0.0f && p[2] == 0.0f)" so that the edited section now reads like this:

if (expelled && phased)
expelled = (obstacle->getType() == WallObstacle::getClassName() ||
obstacle->getType() == Teleporter::getClassName());


Lastly, search for "oscillation overthruster tank in building can't" and you will find this section:

else if (fracOfMaxSpeed < -0.5f) fracOfMaxSpeed = -0.5f;

// oscillation overthruster tank in building can't back up
if (fracOfMaxSpeed < 0.0f && getLocation() == InBuilding &&
flag == Flags::OscillationOverthruster) {
fracOfMaxSpeed = 0.0f;
}

// boost speed for certain flags

Let's remove the portion about not being able to back up in a building so that the edited section now reads like this:

else if (fracOfMaxSpeed < -0.5f) fracOfMaxSpeed = -0.5f;

// boost speed for certain flags Save the file, compile your new client, and you're done!

For Phaz's original instructions, see his comment to "HOWTO: Drop Bad Flags Instantly".

Keep these tips rolling in! And as always...

Have fun!

Related posts:
HOWTO: Shoot While in a Building with Oscillation Overthruster
HOWTO: Flying Without Wings & Extended Jumping

HOWTO: Respawn Instantly

Brought to you by blogger, Someone :)

Someone actually brought this to us a while back, and I apologize for taking so long to post it. Anyway, here's a tip that will allow you to respawn instantly after exploding. In LocalPlayer.cxx (in /src/bzflag/ of the extracted source), search for "else if (location == Exploding)" and you will find this section:

} else if (location == Exploding) {
// see if explosing time has expired
if (lastTime - getExplodeTime() >= BZDB.eval(StateDatabase::BZDB_EXPLODETIME)) {
dt -= float((lastTime - getExplodeTime()) - BZDB.eval(StateDatabase::BZDB_EXPLODETIME));
if (dt <>
dt = 0.0f;
}
setStatus(PlayerState::DeadStatus);
location = Dead;
if (isAutoPilot()) {
CMDMGR.run("restart");
}
}

// can't control explosion motion
newVelocity[2] += BZDBCache::gravity * dt;
newAngVel = 0.0f; // or oldAngVel to spin while exploding
} else if ((location == OnGround) || (location == OnBuilding) ||


First, let's look at the first through eighth lines from above:

} else if (location == Exploding) {
// see if explosing time has expired
if (lastTime - getExplodeTime() >= BZDB.eval(StateDatabase::BZDB_EXPLODETIME)) {
dt -= float((lastTime - getExplodeTime()) - BZDB.eval(StateDatabase::BZDB_EXPLODETIME));
if (dt <>
dt = 0.0f;
}
setStatus(PlayerState::DeadStatus);


Let's remove the second through seventh lines so that it now reads like this:

} else if (location == Exploding) {
setStatus(PlayerState::DeadStatus);

In my personal edit, I aligned the fist "s" of " setStatus" just below the below the first "e" of "else if". Next, notice this section:

setStatus(PlayerState::DeadStatus);
location = Dead;
if (isAutoPilot()) {
CMDMGR.run("restart");

Let's remove "location = Dead;" and "if (isAutoPilot()) {". Below the line "location = Dead;", add the following (again, I aligned the lines vertically in my personal edit):

LocalPlayer *myTank = LocalPlayer::getMyTank();

Below that line, add this line:

myTank->setJumpPressed(false);

The above edits should now read like this (all aligned vertically in my pesonal edit):

setStatus(PlayerState::DeadStatus);
location = Dead;
LocalPlayer *myTank = LocalPlayer::getMyTank();
myTank->setJumpPressed(false);
CMDMGR.run("restart");

Next, notice this section:

CMDMGR.run("restart");
}
}

// can't control explosion motion
newVelocity[2] += BZDBCache::gravity * dt;
newAngVel = 0.0f; // or oldAngVel to spin while exploding
} else if ((location == OnGround) || (location == OnBuilding) ||

Let's remove the lines between "CMDMGR.run("restart");" and " } else if ((location == OnGround) || (location == OnBuilding) ||" so that the section now reads like this:

CMDMGR.run("restart");
} else if ((location == OnGround) || (location == OnBuilding) ||

In my personal edit, I vertically aligned "} else if ((location == OnGround) || (location == OnBuilding) ||" with the previous else if line "} else if (location == Exploding) {"

When you are finished, compile your client and you're done. To view Someone's original instructions, read his comment to "HOWTO: Drop Bad Flags Instantly".

As always...

Have fun!

Related posts:
HOWTO: Drop Bad Flags Instantly
HOWTO: Drop Bad Flags Like Regular Flags
HOWTO: Classic God Mode

HOWTO: Drop Bad Flags Like Regular Flags

Brought to you by Phaz :)

You may recall our earlier post about how to how to drop bad flags instantly. With that edit, you drop a bad flag as soon as you pick it up. You may not always want to do that especially on servers that do not allow players to drop bad flags since you may bring suspicion to yourself.

TIP: If you are not interested in cheating... On servers where dropping bad flags is not allowed, you can usually take advantage of the drop flag after pausing feature of BZFlag to drop your bad flag. Simply pause, and your flag will drop after a few seconds.

As an alternative to dropping bad flags instantly, Phaz has a simple edit for us that will allow a player to drop a bad flag like a regular flag. For this, we are going to edit clientCommands.cxx in /src/bzflag of the extracted source. Search for "flag->endurance != FlagSticky" and you will find this section:

if (myTank != NULL) {
FlagType* flag = myTank->getFlag();
if ((flag != Flags::Null) && !myTank->isPaused() &&
(flag->endurance != FlagSticky) && !myTank->isPhantomZoned() &&
!(flag == Flags::OscillationOverthruster &&
myTank->getLocation() == LocalPlayer::InBuilding)) {
serverLink->sendDropFlag(myTank->getPosition());

In particular, notice the fourth line:

(flag->endurance != FlagSticky) && !myTank->isPhantomZoned() &&

Remove "(flag->endurance != FlagSticky) && " so that the line now reads like this:

!myTank->isPhantomZoned() &&

Save the file, compile the client, and you're done! To see Phaz's original instructions, read his comment to HOWTO: Drop Bad Flags Instantly. As always...

Have fun!

Related post:
HOWTO: Drop Bad Flags Instantly

Friday, July 06, 2007

Is that really me?

Hi guys

It's good to know people still check out this site and post our link on the irc channels (it saves us a job).

I have noticed that alot of people think that I am CRW, although I would like to take credit for all the work he has done; it is infact, not me :)

Lord Jesus rulez :) keep up the good work, sorry I aint been around to cheat with you but I am too busy lately.

This is time for me to go back into hibernation. But I would like to end my post by paying my respects to the Duati league and thanking SportChick in all her benevolence; for the work she has done in passing it over unto the other side.