mirror of
https://github.com/ReactionQuake3/reaction.git
synced 2024-11-14 08:50:33 +00:00
Recoded AI for weapon mode switching. Bots can now zoom with the sg
This commit is contained in:
parent
0f30bf6f6d
commit
287485115f
3 changed files with 138 additions and 6 deletions
|
@ -5,6 +5,9 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Log$
|
||||
// Revision 1.44 2002/06/15 15:02:05 makro
|
||||
// Recoded AI for weapon mode switching. Bots can now zoom with the sg
|
||||
//
|
||||
// Revision 1.43 2002/06/11 14:03:04 makro
|
||||
// Forgot (), heh
|
||||
//
|
||||
|
@ -411,6 +414,23 @@ int RQ3_Bot_GetWeaponMode(bot_state_t *bs, int weapon)
|
|||
return 0;
|
||||
}
|
||||
}
|
||||
case WP_SSG3000:
|
||||
{
|
||||
//6x
|
||||
if ( (bs->cur_ps.stats[STAT_RQ3] & RQ3_ZOOM_MED) == RQ3_ZOOM_MED &&
|
||||
(bs->cur_ps.stats[STAT_RQ3] & RQ3_ZOOM_LOW) == RQ3_ZOOM_LOW ) {
|
||||
return 3;
|
||||
//4x
|
||||
} else if ( (bs->cur_ps.stats[STAT_RQ3] & RQ3_ZOOM_MED) == RQ3_ZOOM_MED ) {
|
||||
return 2;
|
||||
//2x
|
||||
} else if ( (bs->cur_ps.stats[STAT_RQ3] & RQ3_ZOOM_LOW) == RQ3_ZOOM_LOW ) {
|
||||
return 1;
|
||||
//unzoomed
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
@ -424,18 +444,25 @@ Added by Makro
|
|||
==================
|
||||
*/
|
||||
void RQ3_Bot_SetWeaponMode(bot_state_t *bs, int weapon, int mode) {
|
||||
int i, modeCount, oldMode, press;
|
||||
//int i, modeCount, oldMode, press;
|
||||
float reactionTime = trap_Characteristic_BFloat(bs->character, CHARACTERISTIC_REACTIONTIME, 0, 1);
|
||||
|
||||
//invalid weapon
|
||||
if (weapon <= WP_NONE || weapon >= WP_NUM_WEAPONS)
|
||||
return;
|
||||
|
||||
/* Makro - old code
|
||||
//not holding the right weapon
|
||||
if (weapon != bs->cur_ps.weapon)
|
||||
return;
|
||||
*/
|
||||
|
||||
//too soon ?
|
||||
//TODO: array with weapon mode change times for individual weapons ?
|
||||
if (FloatTime() < bs->weapoModeChange_time + 2 - reactionTime)
|
||||
if (FloatTime() < bs->weaponModeChange_time + 2 - reactionTime)
|
||||
return;
|
||||
|
||||
/* Old code
|
||||
switch (bs->cur_ps.weapon) {
|
||||
case WP_PISTOL:
|
||||
case WP_KNIFE:
|
||||
|
@ -443,10 +470,12 @@ void RQ3_Bot_SetWeaponMode(bot_state_t *bs, int weapon, int mode) {
|
|||
break;
|
||||
case WP_MP5:
|
||||
case WP_M4:
|
||||
case WP_SSG3000:
|
||||
case WP_GRENADE:
|
||||
modeCount = 3;
|
||||
break;
|
||||
case WP_SSG3000:
|
||||
modeCount = 4;
|
||||
break;
|
||||
default:
|
||||
modeCount = 1;
|
||||
break;
|
||||
|
@ -468,8 +497,12 @@ void RQ3_Bot_SetWeaponMode(bot_state_t *bs, int weapon, int mode) {
|
|||
//Cmd_Weapon( &g_entities[bs->entitynum] );
|
||||
Cmd_New_Weapon( &g_entities[bs->entitynum] );
|
||||
}
|
||||
*/
|
||||
|
||||
bs->weapoModeChange_time = FloatTime();
|
||||
//new code
|
||||
bs->weapMode[weapon] = mode;
|
||||
|
||||
bs->weaponModeChange_time = FloatTime();
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2123,8 +2156,15 @@ BotChooseWeapon
|
|||
void BotChooseWeapon(bot_state_t *bs) {
|
||||
int newweaponnum;
|
||||
//distance from the enemy
|
||||
int dist = sqrt(bs->inventory[ENEMY_HORIZONTAL_DIST] * bs->inventory[ENEMY_HORIZONTAL_DIST] +
|
||||
int dist;
|
||||
|
||||
if (bs->enemy != -1) {
|
||||
dist = sqrt(bs->inventory[ENEMY_HORIZONTAL_DIST] * bs->inventory[ENEMY_HORIZONTAL_DIST] +
|
||||
bs->inventory[ENEMY_HEIGHT] * bs->inventory[ENEMY_HEIGHT]);
|
||||
} else {
|
||||
dist = 8;
|
||||
}
|
||||
|
||||
if (dist <= 0) {
|
||||
dist = 8;
|
||||
}
|
||||
|
@ -2150,6 +2190,14 @@ void BotChooseWeapon(bot_state_t *bs) {
|
|||
} else {
|
||||
RQ3_Bot_SetWeaponMode(bs, WP_GRENADE, 0);
|
||||
}
|
||||
} else if (bs->weaponnum == WP_SSG3000) {
|
||||
//2x
|
||||
if (bs->enemy != -1 && dist > 600) {
|
||||
RQ3_Bot_SetWeaponMode(bs, WP_SSG3000, 1);
|
||||
//unzoomed
|
||||
} else {
|
||||
RQ3_Bot_SetWeaponMode(bs, WP_SSG3000, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@ -2175,6 +2223,14 @@ void BotChooseWeapon(bot_state_t *bs) {
|
|||
} else {
|
||||
RQ3_Bot_SetWeaponMode(bs, WP_GRENADE, 0);
|
||||
}
|
||||
} else if (bs->weaponnum == WP_SSG3000) {
|
||||
//2x
|
||||
if (bs->enemy != -1 && dist > 600) {
|
||||
RQ3_Bot_SetWeaponMode(bs, WP_SSG3000, 1);
|
||||
//unzoomed
|
||||
} else {
|
||||
RQ3_Bot_SetWeaponMode(bs, WP_SSG3000, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2436,6 +2492,16 @@ void BotUpdateInventory(bot_state_t *bs) {
|
|||
}
|
||||
*/
|
||||
BotCheckItemPickup(bs, oldinventory);
|
||||
|
||||
//Makro - new weapon mode switching code
|
||||
if (RQ3_Bot_GetWeaponMode(bs, bs->cur_ps.weapon) != bs->weapMode[bs->cur_ps.weapon]) {
|
||||
if (bs->weaponModeClick_time + 0.1 < FloatTime()) {
|
||||
if (bs->cur_ps.weaponstate == WEAPON_READY) {
|
||||
Cmd_New_Weapon(&g_entities[bs->entitynum]);
|
||||
}
|
||||
bs->weaponModeClick_time = FloatTime();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2724,6 +2790,11 @@ void RQ3_Bot_IdleActions( bot_state_t *bs ) {
|
|||
int weapon = bs->cur_ps.weapon;
|
||||
//float reactiontime = trap_Characteristic_BFloat(bs->character, CHARACTERISTIC_REACTIONTIME, 0, 1);
|
||||
|
||||
//always unzoom SSG when idle
|
||||
if (RQ3_Bot_GetWeaponMode(bs, WP_SSG3000)) {
|
||||
RQ3_Bot_SetWeaponMode(bs, WP_SSG3000, 0);
|
||||
}
|
||||
|
||||
//too soon to reload/bandage again ?
|
||||
if (bs->idleAction_time > FloatTime())
|
||||
return;
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Log$
|
||||
// Revision 1.11 2002/06/15 15:02:05 makro
|
||||
// Recoded AI for weapon mode switching. Bots can now zoom with the sg
|
||||
//
|
||||
// Revision 1.10 2002/06/11 13:42:54 makro
|
||||
// Added a time limit for changing weapon modes for bots
|
||||
//
|
||||
|
@ -225,7 +228,10 @@ typedef struct bot_state_s
|
|||
float radioresponse_time; //Makro - the last time the bot responded to a radio message
|
||||
int radioresponse_count; //Makro - how many times the bot responded to radio messages
|
||||
float idleAction_time; //Makro - last time the bot did something while roaming around (reload/bandage)
|
||||
float weapoModeChange_time; //Makro - last time the bot changed weapon modes
|
||||
float weaponModeChange_time; //Makro - last time the bot changed weapon modes
|
||||
float weaponModeClick_time; //Makro - last time the bot "pressed" the weapon button
|
||||
|
||||
int weapMode[WP_NUM_WEAPONS]; //Makro - the weapon modes the bot wants to use
|
||||
|
||||
vec3_t aimtarget;
|
||||
vec3_t enemyvelocity; //enemy velocity 0.5 secs ago during battle
|
||||
|
|
|
@ -6,6 +6,61 @@
|
|||
--------------------Configuration: game - Win32 Release--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
Creating temporary file "D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSPA71.tmp" with contents
|
||||
[
|
||||
/nologo /G6 /ML /W4 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FR"c:\reactionoutput/" /Fp"c:\reactionoutput/game.pch" /YX /Fo"c:\reactionoutput/" /Fd"c:\reactionoutput/" /FD /c
|
||||
"C:\Games\Quake3\rq3source\reaction\game\ai_dmq3.c"
|
||||
]
|
||||
Creating command line "cl.exe @D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSPA71.tmp"
|
||||
Creating temporary file "D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSPA72.tmp" with contents
|
||||
[
|
||||
kernel32.lib user32.lib winmm.lib /nologo /base:"0x20000000" /subsystem:windows /dll /incremental:no /pdb:"c:\reactionoutput/qagamex86.pdb" /map:"c:\reactionoutput/qagamex86.map" /machine:I386 /def:".\game.def" /out:"..\Release/qagamex86.dll" /implib:"c:\reactionoutput/qagamex86.lib"
|
||||
\reactionoutput\ai_chat.obj
|
||||
\reactionoutput\ai_cmd.obj
|
||||
\reactionoutput\ai_dmnet.obj
|
||||
\reactionoutput\ai_dmq3.obj
|
||||
\reactionoutput\ai_main.obj
|
||||
\reactionoutput\ai_team.obj
|
||||
\reactionoutput\ai_vcmd.obj
|
||||
\reactionoutput\bg_misc.obj
|
||||
\reactionoutput\bg_pmove.obj
|
||||
\reactionoutput\bg_slidemove.obj
|
||||
\reactionoutput\g_active.obj
|
||||
\reactionoutput\g_arenas.obj
|
||||
\reactionoutput\g_bot.obj
|
||||
\reactionoutput\g_client.obj
|
||||
\reactionoutput\g_cmds.obj
|
||||
\reactionoutput\g_combat.obj
|
||||
\reactionoutput\g_fileio.obj
|
||||
\reactionoutput\g_items.obj
|
||||
\reactionoutput\g_main.obj
|
||||
\reactionoutput\g_matchmode.obj
|
||||
\reactionoutput\g_mem.obj
|
||||
\reactionoutput\g_misc.obj
|
||||
\reactionoutput\g_missile.obj
|
||||
\reactionoutput\g_mover.obj
|
||||
\reactionoutput\g_session.obj
|
||||
\reactionoutput\g_spawn.obj
|
||||
\reactionoutput\g_svcmds.obj
|
||||
\reactionoutput\g_syscalls.obj
|
||||
\reactionoutput\g_target.obj
|
||||
\reactionoutput\g_team.obj
|
||||
\reactionoutput\g_teamplay.obj
|
||||
\reactionoutput\g_trigger.obj
|
||||
\reactionoutput\g_utils.obj
|
||||
\reactionoutput\g_weapon.obj
|
||||
\reactionoutput\q_math.obj
|
||||
\reactionoutput\q_shared.obj
|
||||
\reactionoutput\rxn_game.obj
|
||||
\reactionoutput\zcam.obj
|
||||
\reactionoutput\zcam_target.obj
|
||||
]
|
||||
Creating command line "link.exe @D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSPA72.tmp"
|
||||
<h3>Output Window</h3>
|
||||
Compiling...
|
||||
ai_dmq3.c
|
||||
Linking...
|
||||
Creating library c:\reactionoutput/qagamex86.lib and object c:\reactionoutput/qagamex86.exp
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue