Skip to content

Commit

Permalink
better tribes bot weapon decisions, jet Z tweak,
Browse files Browse the repository at this point in the history
  • Loading branch information
videoP committed Mar 5, 2024
1 parent ddf712c commit 375e215
Show file tree
Hide file tree
Showing 4 changed files with 186 additions and 52 deletions.
194 changes: 159 additions & 35 deletions codemp/game/ai_main.c
Expand Up @@ -6715,6 +6715,159 @@ float NewBotAI_GetSpeedTowardsEnemy(bot_state_t *bs)
return 0;
}


int NewBotAI_GetTribesWeapon(bot_state_t *bs)
{
const int /*hisHealth = bs->currentEnemy->health,*/ distance = bs->frame_Enemy_Len;
int hisWeapon = WP_SABER;
int bestWeapon = bs->cur_ps.weapon;
const int forcedFireMode = level.clients[bs->client].forcedFireMode;

bs->doAltAttack = 0;

if (bs->currentEnemy->client)
hisWeapon = bs->currentEnemy->client->ps.weapon;

//Dependant on distance from enemy, enemys health, enemys weapon, and our health?


if (distance > 3000) {
if (BotWeaponSelectable(bs, WP_DISRUPTOR))
bestWeapon = WP_DISRUPTOR;
else if (BotWeaponSelectable(bs, WP_BLASTER) && (bs->cur_ps.weapon != WP_BLASTER && bs->cur_ps.jetpackFuel == 100) || (bs->cur_ps.weapon == WP_BLASTER && bs->cur_ps.jetpackFuel > 10)) {
bestWeapon = WP_BLASTER;
}
else if (BotWeaponSelectableAltFire(bs, WP_BRYAR_OLD) && (bs->cur_ps.weapon == WP_BRYAR_OLD && bs->cur_ps.jetpackFuel == 100) || (bs->cur_ps.weapon == WP_BRYAR_OLD && bs->cur_ps.jetpackFuel > 10)) { //logic to let us run down to 0 but nto switch to 0
bestWeapon = WP_BRYAR_OLD;
bs->doAltAttack = 1;
bs->altChargeTime = 800;
}
else if (BotWeaponSelectable(bs, WP_REPEATER) && forcedFireMode != 2)
bestWeapon = WP_REPEATER;
else if (BotWeaponSelectableAltFire(bs, WP_DEMP2) && forcedFireMode != 1) {
bestWeapon = WP_DEMP2;
bs->doAltAttack = 1;
bs->altChargeTime = 2100;
}
else if (BotWeaponSelectable(bs, WP_CONCUSSION) && bs->cur_ps.fd.forcePower > 90 && forcedFireMode != 1) {
bestWeapon = WP_CONCUSSION;
bs->doAltAttack = 1;
}
else if (BotWeaponSelectable(bs, WP_CONCUSSION) && forcedFireMode != 2) {
bestWeapon = WP_CONCUSSION;
}
else if (BotWeaponSelectable(bs, WP_ROCKET_LAUNCHER) && forcedFireMode != 2) {
bestWeapon = WP_ROCKET_LAUNCHER;
}
else if (BotWeaponSelectable(bs, WP_FLECHETTE)) {
bestWeapon = WP_FLECHETTE;
bs->doAltAttack = 1;
}
else if (bs->cur_ps.stats[STAT_WEAPONS] & (1 << WP_SABER))
bestWeapon = WP_SABER;
}
else if (distance > 800 && distance < 2800) { //Have some padding between distance tiers so we dont weaponswitch spam
if (BotWeaponSelectableAltFire(bs, WP_BLASTER) && (bs->cur_ps.weapon != WP_BLASTER && bs->cur_ps.jetpackFuel == 100) || (bs->cur_ps.weapon == WP_BLASTER && bs->cur_ps.jetpackFuel > 10)) {
bestWeapon = WP_BLASTER;
}
else if (BotWeaponSelectable(bs, WP_REPEATER) && forcedFireMode != 2)
bestWeapon = WP_REPEATER;
else if (BotWeaponSelectableAltFire(bs, WP_BRYAR_OLD) && (bs->cur_ps.weapon == WP_BRYAR_OLD && bs->cur_ps.jetpackFuel == 100) || (bs->cur_ps.weapon == WP_BRYAR_OLD && bs->cur_ps.jetpackFuel > 10)) {
bestWeapon = WP_BRYAR_OLD;
bs->doAltAttack = 1;
bs->altChargeTime = 800;
}
else if (BotWeaponSelectableAltFire(bs, WP_BOWCASTER)) {
bestWeapon = WP_BOWCASTER;
bs->doAltAttack = 1;
}
else if (BotWeaponSelectable(bs, WP_CONCUSSION) && bs->cur_ps.fd.forcePower > 90 && forcedFireMode != 1) {
bestWeapon = WP_CONCUSSION;
bs->doAltAttack = 1;
}
else if (BotWeaponSelectable(bs, WP_CONCUSSION) && forcedFireMode != 2) {
bestWeapon = WP_CONCUSSION;
}
else if (BotWeaponSelectable(bs, WP_ROCKET_LAUNCHER) && forcedFireMode != 2) {
bestWeapon = WP_ROCKET_LAUNCHER;
}
else if (BotWeaponSelectable(bs, WP_DISRUPTOR))
bestWeapon = WP_DISRUPTOR;
else if (BotWeaponSelectableAltFire(bs, WP_DEMP2) && forcedFireMode != 2) {
bestWeapon = WP_DEMP2;
}
else if (BotWeaponSelectableAltFire(bs, WP_DEMP2) && forcedFireMode != 1) {
bestWeapon = WP_DEMP2;
bs->doAltAttack = 1;
bs->altChargeTime = 2100;
}
else if (BotWeaponSelectable(bs, WP_FLECHETTE)) {
bestWeapon = WP_FLECHETTE;
bs->doAltAttack = 1;
}
else if (bs->cur_ps.stats[STAT_WEAPONS] & (1 << WP_SABER))
bestWeapon = WP_SABER;
}
else if (distance < 600) { //Most DPS!
if (BotWeaponSelectableAltFire(bs, WP_THERMAL) && (bs->currentEnemy->client->ps.powerups[PW_REDFLAG] || bs->currentEnemy->client->ps.powerups[PW_BLUEFLAG] || bs->currentEnemy->client->ps.powerups[PW_NEUTRALFLAG])) {
bestWeapon = WP_THERMAL;
}
if (BotWeaponSelectableAltFire(bs, WP_BLASTER) && (bs->cur_ps.weapon == WP_BLASTER != bs->cur_ps.jetpackFuel == 100) || (bs->cur_ps.weapon == WP_BLASTER && bs->cur_ps.jetpackFuel > 10)) {
bestWeapon = WP_BLASTER;
bs->doAltAttack = 1;
}
else if (BotWeaponSelectable(bs, WP_FLECHETTE))
bestWeapon = WP_FLECHETTE;
else if (BotWeaponSelectable(bs, WP_ROCKET_LAUNCHER))
bestWeapon = WP_ROCKET_LAUNCHER;
else if (BotWeaponSelectable(bs, WP_CONCUSSION) && forcedFireMode != 2)
bestWeapon = WP_CONCUSSION;
else if (BotWeaponSelectableAltFire(bs, WP_BOWCASTER)) {
bestWeapon = WP_BOWCASTER;
bs->doAltAttack = 1;
}
else if (BotWeaponSelectableAltFire(bs, WP_DEMP2) && forcedFireMode != 2) {
bestWeapon = WP_DEMP2;
}
else if (BotWeaponSelectable(bs, WP_DISRUPTOR))
bestWeapon = WP_DISRUPTOR;
else if (BotWeaponSelectableAltFire(bs, WP_BRYAR_OLD)) {
bestWeapon = WP_BRYAR_OLD;
bs->doAltAttack = 1;
bs->altChargeTime = 800;
}
else if (BotWeaponSelectableAltFire(bs, WP_BRYAR_PISTOL)) {
bestWeapon = WP_BRYAR_PISTOL;
bs->doAltAttack = 1;
bs->altChargeTime = 1200;
}
else if (BotWeaponSelectable(bs, WP_CONCUSSION) && bs->cur_ps.fd.forcePower > 90 && forcedFireMode != 1) {
bestWeapon = WP_CONCUSSION;
bs->doAltAttack = 1;
}
else if (BotWeaponSelectableAltFire(bs, WP_DEMP2) && forcedFireMode != 1) {
bestWeapon = WP_DEMP2;
bs->doAltAttack = 1;
bs->altChargeTime = 2100;
}
else if (bs->cur_ps.stats[STAT_WEAPONS] & (1 << WP_SABER))
bestWeapon = WP_SABER;
}


if (bs->currentEnemy->client && bs->currentEnemy->client->ps.weapon == WP_DEMP2) //dont charge if they can cancel it
bs->altChargeTime = 50;

if (forcedFireMode == 1)
bs->doAltAttack = 0;
else if (forcedFireMode == 2)
bs->doAltAttack = 1;

//todo- weapon table.

return bestWeapon;
}

int NewBotAI_GetWeapon(bot_state_t *bs)
{
const int /*hisHealth = bs->currentEnemy->health,*/ distance = bs->frame_Enemy_Len;
Expand Down Expand Up @@ -6745,10 +6898,6 @@ int NewBotAI_GetWeapon(bot_state_t *bs)
else if (BotWeaponSelectable(bs, WP_BLASTER)) {
bestWeapon = WP_BLASTER;
}
else if (BotWeaponSelectable(bs, WP_REPEATER) && (g_tweakWeapons.integer & WT_TRIBES) && (g_tweakWeapons.integer & WT_INFINITE_AMMO) && forcedFireMode != 1) {
bestWeapon = WP_REPEATER;
bs->doAltAttack = 1;
}
else if (distance > 500 && BotWeaponSelectableAltFire(bs, WP_BRYAR_OLD)) {
bestWeapon = WP_BRYAR_OLD;
bs->doAltAttack = 1;
Expand Down Expand Up @@ -6786,10 +6935,6 @@ int NewBotAI_GetWeapon(bot_state_t *bs)
bestWeapon = WP_BLASTER;
bs->doAltAttack = 1;
}
else if (BotWeaponSelectable(bs, WP_ROCKET_LAUNCHER) && (g_tweakWeapons.integer & WT_TRIBES) && (g_tweakWeapons.integer & WT_INFINITE_AMMO))
bestWeapon = WP_ROCKET_LAUNCHER;
else if (BotWeaponSelectable(bs, WP_CONCUSSION) && (g_tweakWeapons.integer & WT_TRIBES) && (g_tweakWeapons.integer & WT_INFINITE_AMMO))
bestWeapon = WP_CONCUSSION;
else if (BotWeaponSelectableAltFire(bs, WP_BOWCASTER)) {
bestWeapon = WP_BOWCASTER;
bs->doAltAttack = 1;
Expand Down Expand Up @@ -6863,14 +7008,6 @@ int NewBotAI_GetWeapon(bot_state_t *bs)
}
else if (BotWeaponSelectable(bs, WP_BLASTER))
bestWeapon = WP_BLASTER;
else if (BotWeaponSelectable(bs, WP_ROCKET_LAUNCHER) && (g_tweakWeapons.integer & WT_TRIBES) && (g_tweakWeapons.integer & WT_INFINITE_AMMO))
bestWeapon = WP_ROCKET_LAUNCHER;
else if (BotWeaponSelectable(bs, WP_CONCUSSION) && (g_tweakWeapons.integer & WT_TRIBES) && (g_tweakWeapons.integer & WT_INFINITE_AMMO))
bestWeapon = WP_CONCUSSION;
else if (BotWeaponSelectable(bs, WP_REPEATER) && (g_tweakWeapons.integer & WT_TRIBES) && (g_tweakWeapons.integer & WT_INFINITE_AMMO) && forcedFireMode != 1) {
bestWeapon = WP_REPEATER;
bs->doAltAttack = 1;
}
else if (BotWeaponSelectableAltFire(bs, WP_BRYAR_OLD)) {
bestWeapon = WP_BRYAR_OLD;
bs->doAltAttack = 1;
Expand Down Expand Up @@ -6900,10 +7037,6 @@ int NewBotAI_GetWeapon(bot_state_t *bs)
else if (distance < 768 && BotWeaponSelectableAltFire(bs, WP_STUN_BATON) && (g_tweakWeapons.integer & WT_STUN_LG) && !(g_tweakWeapons.integer & WT_STUN_HEAL)) {
bestWeapon = WP_STUN_BATON;
}
else if (BotWeaponSelectable(bs, WP_ROCKET_LAUNCHER) && (g_tweakWeapons.integer & WT_TRIBES) && (g_tweakWeapons.integer & WT_INFINITE_AMMO))
bestWeapon = WP_ROCKET_LAUNCHER;
else if (BotWeaponSelectable(bs, WP_CONCUSSION) && (g_tweakWeapons.integer & WT_TRIBES) && (g_tweakWeapons.integer & WT_INFINITE_AMMO))
bestWeapon = WP_CONCUSSION;
else if (BotWeaponSelectableAltFire(bs, WP_BOWCASTER)) {
bestWeapon = WP_BOWCASTER;
bs->doAltAttack = 1;
Expand Down Expand Up @@ -6984,14 +7117,6 @@ int NewBotAI_GetWeapon(bot_state_t *bs)
bestWeapon = WP_DISRUPTOR;
else if (BotWeaponSelectable(bs, WP_BLASTER))
bestWeapon = WP_BLASTER;
else if (BotWeaponSelectable(bs, WP_ROCKET_LAUNCHER) && (g_tweakWeapons.integer & WT_TRIBES) && (g_tweakWeapons.integer & WT_INFINITE_AMMO))
bestWeapon = WP_ROCKET_LAUNCHER;
else if (BotWeaponSelectable(bs, WP_CONCUSSION) && (g_tweakWeapons.integer & WT_TRIBES) && (g_tweakWeapons.integer & WT_INFINITE_AMMO))
bestWeapon = WP_CONCUSSION;
else if (BotWeaponSelectable(bs, WP_REPEATER) && (g_tweakWeapons.integer & WT_TRIBES) && (g_tweakWeapons.integer & WT_INFINITE_AMMO) && forcedFireMode != 1) {
bestWeapon = WP_REPEATER;
bs->doAltAttack = 1;
}
else if (bs->cur_ps.stats[STAT_WEAPONS] & WP_SABER)
bestWeapon = WP_SABER;
else if (BotWeaponSelectableAltFire(bs, WP_BRYAR_OLD)) {
Expand Down Expand Up @@ -7026,10 +7151,6 @@ int NewBotAI_GetWeapon(bot_state_t *bs)
else if (BotWeaponSelectableAltFire(bs, WP_STUN_BATON) && (g_tweakWeapons.integer & WT_STUN_LG) && !(g_tweakWeapons.integer & WT_STUN_HEAL)) {
bestWeapon = WP_STUN_BATON;
}
else if (BotWeaponSelectable(bs, WP_ROCKET_LAUNCHER) && (g_tweakWeapons.integer & WT_TRIBES) && (g_tweakWeapons.integer & WT_INFINITE_AMMO))
bestWeapon = WP_ROCKET_LAUNCHER;
else if (BotWeaponSelectable(bs, WP_CONCUSSION) && (g_tweakWeapons.integer & WT_TRIBES) && (g_tweakWeapons.integer & WT_INFINITE_AMMO))
bestWeapon = WP_CONCUSSION;
else if (bs->cur_ps.stats[STAT_WEAPONS] & WP_SABER)
bestWeapon = WP_SABER;
else if (BotWeaponSelectableAltFire(bs, WP_BRYAR_OLD)) {
Expand Down Expand Up @@ -7160,7 +7281,10 @@ void NewBotAI_GetAttack(bot_state_t *bs)
int weapon;
//const float speed = NewBotAI_GetSpeedTowardsEnemy(bs);

weapon = NewBotAI_GetWeapon(bs);
if (g_tweakWeapons.integer & WT_TRIBES)
weapon = NewBotAI_GetTribesWeapon(bs);
else
weapon = NewBotAI_GetWeapon(bs);
BotSelectWeapon(bs->client, weapon);

if (bs->runningLikeASissy) //Dont attack when chasing them with strafe i guess
Expand Down Expand Up @@ -8289,7 +8413,6 @@ void NewBotAI_NF(bot_state_t *bs)

void NewBotAI_Tribes(bot_state_t *bs, float thinktime)
{
NewBotAI_GetAim(bs);

if (bs->cur_ps.eFlags & EF_JETPACK_FLAMING || bs->cur_ps.eFlags & EF_JETPACK_ACTIVE) {
//if (!(bs->cur_ps.pm_flags & PMF_JUMP_HELD))
Expand Down Expand Up @@ -8343,7 +8466,8 @@ void NewBotAI_Tribes(bot_state_t *bs, float thinktime)


StandardBotAI(bs, thinktime);
BotSelectWeapon(bs->client, NewBotAI_GetWeapon(bs));
NewBotAI_GetAim(bs);
NewBotAI_GetAttack(bs);

//NewBotAI_GetMovement(bs);
//NewBotAI_GetAttack(bs);
Expand Down
33 changes: 21 additions & 12 deletions codemp/game/bg_pmove.c
Expand Up @@ -13509,6 +13509,16 @@ void PmoveSingle (pmove_t *pmove) {
//Probably need to do something here to give it 2 stages. 1: Low velocity accel boost which fades away as you start getting fast.
if (pm->ps->velocity[2] > 0 && pm->ps->velocity[2] < 250) {
float hackscale = 250.0f / pm->ps->velocity[2];

if (hackscale > 1.4f)
hackscale = 1.4f;
else if (hackscale < 1)
hackscale = 1;

pm->ps->velocity[2] += 425.0f * pml.frametime * upScale * hackscale;//was 18 with no grav

#if 0
float hackscale = 250.0f / pm->ps->velocity[2];
float hackscale2 = (pm->ps->velocity[0]*pm->ps->velocity[0] + pm->ps->velocity[1]*pm->ps->velocity[1]) / (700 * 700);

if (hackscale2 < 1)
Expand All @@ -13522,26 +13532,24 @@ void PmoveSingle (pmove_t *pmove) {
hackscale = 1;

pm->ps->velocity[2] += 425.0f * pml.frametime * upScale * hackscale;//was 18 with no grav
#endif
}
else if (pm->ps->velocity[2] < 0) {
//This is fucked. Start at 1.25 and get higher based on Z speed. Don't take XY into account..?

if (1)
{
float hackscale = pm->ps->velocity[2] / -600;
float hackscale = pm->ps->velocity[2] / -600;


if (hackscale < 1.4f)
hackscale = 1.4f;
if (hackscale < 1.4f)
hackscale = 1.4f;

if (hackscale > 4.0f)
hackscale = 4.0f;
if (hackscale > 4.0f)
hackscale = 4.0f;

//Com_Printf("Hackscale z is %.2f\n", hackscale);
//Com_Printf("Hackscale z is %.2f\n", hackscale);

pm->ps->velocity[2] += 425.0f * pml.frametime * upScale * hackscale;//was 18 with no grav
}
else {
pm->ps->velocity[2] += 425.0f * pml.frametime * upScale * hackscale;//was 18 with no grav
#if 0
{

float hackscale = 1.25f;
float hackscale2 = (pm->ps->velocity[0] * pm->ps->velocity[0] + pm->ps->velocity[1] * pm->ps->velocity[1]) / (700 * 700);
Expand All @@ -13558,6 +13566,7 @@ void PmoveSingle (pmove_t *pmove) {

pm->ps->velocity[2] += 425.0f * pml.frametime * upScale * hackscale;//was 18 with no grav
}
#endif
}
else if (pm->ps->velocity[2] > 800) {
float hackscale = 800.0f / pm->ps->velocity[2];
Expand Down
9 changes: 5 additions & 4 deletions codemp/game/g_team.c
Expand Up @@ -903,9 +903,7 @@ int Team_TouchOurFlag( gentity_t *ent, gentity_t *other, int team ) {

percent = (enemyDist + myDist) ? (myDist / ((enemyDist + myDist)) * 100) : 1;
if (percent < 10) {
percent = 10;
points = (int)(CTF_RECOVERY_BONUS * percent*0.01f);
trap->SendServerCommand(-1, va("print \"%s^5 has returned the %s^5 flag ^3<10^5 percent of the way to enemy base for ^3%i^5 points\n\"", cl->pers.netname, team == 1 ? "^1red" : "^4blue", points));
trap->SendServerCommand(-1, va("print \"%s^5 has returned the %s^5 flag ^3<10^5 percent of the way to enemy base for ^30^5 points\n\"", cl->pers.netname, team == 1 ? "^1red" : "^4blue"));
}
else {
points = (int)(CTF_RECOVERY_BONUS * percent*0.01f);
Expand Down Expand Up @@ -1183,7 +1181,10 @@ int Team_TouchEnemyFlag( gentity_t *ent, gentity_t *other, int team ) {
points = 1;
if (speed > 2000)
points = 2;
trap->SendServerCommand(other->s.number, va("print \"You grabbed the %s^5 flag at ^3%.0f^5 for ^3%i^5 points\n\"", team == 2 ? "^1red" : "^4blue", speed, points));
if (points == 1)
trap->SendServerCommand(other->s.number, va("print \"You grabbed the %s^5 flag at ^3%.0f^5 ups for ^31^5 point\n\"", team == 2 ? "^1red" : "^4blue", speed));
else
trap->SendServerCommand(other->s.number, va("print \"You grabbed the %s^5 flag at ^3%.0f^5 ups for ^3%i^5 points\n\"", team == 2 ? "^1red" : "^4blue", speed, points));
}
PrintCTFMessage(other->s.number, team, CTFMESSAGE_PLAYER_GOT_FLAG);
}
Expand Down
2 changes: 1 addition & 1 deletion codemp/game/g_weapon.c
Expand Up @@ -250,7 +250,7 @@ static void WP_FireBryarPistol( gentity_t *ent, qboolean altFire, int seed )
charge = 400;
vel = 10440 * g_projectileVelocityScale.value;
if (ent->client->ps.jetpackFuel > 0)
ent->client->ps.jetpackFuel -= 9;
ent->client->ps.jetpackFuel -= 7;
if (ent->client->ps.jetpackFuel < 0)
ent->client->ps.jetpackFuel = 0;
}
Expand Down

0 comments on commit 375e215

Please sign in to comment.