Various renames

This commit is contained in:
Ryan Dwyer 2023-11-18 17:17:55 +10:00
parent 31bc17b39d
commit 5372712126
14 changed files with 179 additions and 183 deletions

View File

@ -1128,9 +1128,9 @@ f32 botCalculateMaxSpeed(struct chrdata *chr)
}
#if VERSION >= VERSION_NTSC_1_0
void bot0f1921f8(struct chrdata *chr, f32 *move, s32 numupdates, f32 arg3)
void botUpdateLateral(struct chrdata *chr, f32 *move, s32 numupdates, f32 arg3)
#else
void bot0f1921f8(struct chrdata *chr, f32 *move)
void botUpdateLateral(struct chrdata *chr, f32 *move)
#endif
{
s32 i;
@ -1812,9 +1812,9 @@ s32 botFindTeammateToFollow(struct chrdata *chr, f32 range)
void botScheduleReload(struct chrdata *chr, s32 handnum)
{
chr->aibot->timeuntilreload60[handnum] = g_AibotWeaponPreferences[chr->aibot->weaponnum].reloaddelay * (PAL ? 50 : 60);
chr->aibot->timeuntilreload60[handnum] = g_BotWeaponConfigs[chr->aibot->weaponnum].reloaddelay * (PAL ? 50 : 60);
if (g_AibotWeaponPreferences[chr->aibot->weaponnum].allowpartialreloaddelay) {
if (g_BotWeaponConfigs[chr->aibot->weaponnum].allowpartialreloaddelay) {
s32 capacity = botactGetClipCapacityByFunction(chr->aibot->weaponnum, chr->aibot->gunfunc);
chr->aibot->timeuntilreload60[handnum] *= capacity - chr->aibot->loadedammo[handnum];
@ -1822,8 +1822,8 @@ void botScheduleReload(struct chrdata *chr, s32 handnum)
}
}
#define HASENOUGHPRI(aibot, weaponnum, goal) (g_AibotWeaponPreferences[weaponnum].haspriammogoal && botactGetAmmoQuantityByWeapon(aibot, weaponnum, FUNC_PRIMARY, true) >= (goal))
#define HASENOUGHSEC(aibot, weaponnum, goal) (g_AibotWeaponPreferences[weaponnum].hassecammogoal && botactGetAmmoQuantityByWeapon(aibot, weaponnum, FUNC_SECONDARY, true) >= (goal))
#define HASENOUGHPRI(aibot, weaponnum, goal) (g_BotWeaponConfigs[weaponnum].haspriammogoal && botactGetAmmoQuantityByWeapon(aibot, weaponnum, FUNC_PRIMARY, true) >= (goal))
#define HASENOUGHSEC(aibot, weaponnum, goal) (g_BotWeaponConfigs[weaponnum].hassecammogoal && botactGetAmmoQuantityByWeapon(aibot, weaponnum, FUNC_SECONDARY, true) >= (goal))
/**
* Find a prop for the bot to pick up.
@ -2009,15 +2009,14 @@ struct prop *botFindPickup(struct chrdata *chr, s32 criteria)
for (i = 0; i < ARRAYCOUNT(weaponnums); i++) {
if (1);
if ((botinvAllowsWeapon(chr, weaponnums[i], FUNC_PRIMARY) || botinvAllowsWeapon(chr, weaponnums[i], FUNC_SECONDARY))
&& (g_AibotWeaponPreferences[weaponnums[i]].haspriammogoal || g_AibotWeaponPreferences[weaponnums[i]].hassecammogoal)
&& (g_BotWeaponConfigs[weaponnums[i]].haspriammogoal || g_BotWeaponConfigs[weaponnums[i]].hassecammogoal)
&& scores1[i] > bestscore1) {
bestscore1 = scores1[i];
}
}
// Decide if the bot wants to find a shield, based on the amount of health
// and shield the bot currently has. This shield logic is done prior to
// weapons and ammo, so a shield takes precedence.
// and shield the bot currently has.
// Note that max health and shield is 8 each, and that the bot must be under
// BOTH the limits for a shield to be fetched.
for (i = 0; i < ARRAYCOUNT(weaponnums) && !done; i++) {
@ -2120,8 +2119,8 @@ struct prop *botFindPickup(struct chrdata *chr, s32 criteria)
for (i = 0; i < ARRAYCOUNT(weaponnums) && !done; i++) {
if (weaponnums[i] != WEAPON_MPSHIELD
&& invitems[i] != NULL
&& (g_AibotWeaponPreferences[weaponnums[i]].haspriammogoal
|| g_AibotWeaponPreferences[weaponnums[i]].hassecammogoal)
&& (g_BotWeaponConfigs[weaponnums[i]].haspriammogoal
|| g_BotWeaponConfigs[weaponnums[i]].hassecammogoal)
&& scores2[i] >= bestscore1) {
s32 desiredpriammo;
s32 desiredsecammo;
@ -2145,13 +2144,13 @@ struct prop *botFindPickup(struct chrdata *chr, s32 criteria)
// If the bot's team is only barely controlling the hill,
// don't leave it unless the bot is out of ammo, and even then
// just get one ammo pickup
desiredpriammo = g_AibotWeaponPreferences[weaponnums[i]].criticalammopri;
desiredpriammo = g_BotWeaponConfigs[weaponnums[i]].criticalammopri;
if (desiredpriammo > 1) {
desiredpriammo = 1;
}
desiredsecammo = g_AibotWeaponPreferences[weaponnums[i]].criticalammosec;
desiredsecammo = g_BotWeaponConfigs[weaponnums[i]].criticalammosec;
if (desiredsecammo > 1) {
desiredsecammo = 1;
@ -2168,9 +2167,9 @@ struct prop *botFindPickup(struct chrdata *chr, s32 criteria)
desiredsecammo = bgunGetCapacityByAmmotype(botactGetAmmoTypeByFunction(weaponnums[i], FUNC_SECONDARY));
// If bot has max ammo for both weapon's functions
if ((g_AibotWeaponPreferences[weaponnums[i]].haspriammogoal == false
if ((g_BotWeaponConfigs[weaponnums[i]].haspriammogoal == false
|| botactGetAmmoQuantityByWeapon(aibot, weaponnums[i], FUNC_PRIMARY, false) >= desiredpriammo)
&& (g_AibotWeaponPreferences[weaponnums[i]].hassecammogoal == false
&& (g_BotWeaponConfigs[weaponnums[i]].hassecammogoal == false
|| botactGetAmmoQuantityByWeapon(aibot, weaponnums[i], FUNC_SECONDARY, false) >= desiredsecammo)) {
// Consider next weapon
continue;
@ -2179,8 +2178,8 @@ struct prop *botFindPickup(struct chrdata *chr, s32 criteria)
include_equipped = false;
} else if (criteria == PICKUPCRITERIA_DEFAULT) {
// Default - use the target ammo amount
desiredpriammo = g_AibotWeaponPreferences[weaponnums[i]].targetammopri;
desiredsecammo = g_AibotWeaponPreferences[weaponnums[i]].targetammosec;
desiredpriammo = g_BotWeaponConfigs[weaponnums[i]].targetammopri;
desiredsecammo = g_BotWeaponConfigs[weaponnums[i]].targetammosec;
if (HASENOUGHPRI(aibot, weaponnums[i], desiredpriammo) || HASENOUGHSEC(aibot, weaponnums[i], desiredsecammo)) {
done = true;
@ -2188,8 +2187,8 @@ struct prop *botFindPickup(struct chrdata *chr, s32 criteria)
}
} else if (criteria == PICKUPCRITERIA_CRITICAL) {
// Critical - use the critical ammo amount
desiredpriammo = g_AibotWeaponPreferences[weaponnums[i]].criticalammopri;
desiredsecammo = g_AibotWeaponPreferences[weaponnums[i]].criticalammosec;
desiredpriammo = g_BotWeaponConfigs[weaponnums[i]].criticalammopri;
desiredsecammo = g_BotWeaponConfigs[weaponnums[i]].criticalammosec;
if (HASENOUGHPRI(aibot, weaponnums[i], desiredpriammo) || HASENOUGHSEC(aibot, weaponnums[i], desiredsecammo)) {
done = true;

View File

@ -18,122 +18,118 @@
#include "data.h"
#include "types.h"
struct aibotweaponpreference g_AibotWeaponPreferences[] = {
// haspriammogoal
// | hassecammogoal
// | | pridistconfig
// | | | secdistconfig
// | | | | targetammopri
// | | | | | targetammosec
// | | | | | | criticalammopri
// | | | | | | | criticalammosec
// | | | | | | | | reloaddelay (seconds)
// | | | | | | | | | allowpartialreloaddelay
// | | | | | | | | | |
/*0x00*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 0, 0 }, // WEAPON_NONE
/*0x01*/ { 13, 13, 13, 13, 1, 1, BOTDISTCFG_CLOSE, BOTDISTCFG_CLOSE, 0, 0, 0, 0, 0, 0 }, // WEAPON_UNARMED
/*0x02*/ { 56, 60, 84, 88, 1, 1, BOTDISTCFG_PISTOL, BOTDISTCFG_CLOSE, 30, 0, 10, 0, 1, 0 }, // WEAPON_FALCON2
/*0x03*/ { 52, 60, 80, 88, 1, 1, BOTDISTCFG_PISTOL, BOTDISTCFG_CLOSE, 30, 0, 10, 0, 1, 0 }, // WEAPON_FALCON2_SILENCER
/*0x04*/ { 60, 60, 88, 88, 1, 1, BOTDISTCFG_PISTOL, BOTDISTCFG_CLOSE, 30, 0, 10, 0, 1, 0 }, // WEAPON_FALCON2_SCOPE
/*0x05*/ { 76, 88, 104, 120, 1, 1, BOTDISTCFG_PISTOL, BOTDISTCFG_DEFAULT, 30, 30, 10, 10, 1, 0 }, // WEAPON_MAGSEC4
/*0x06*/ { 64, 88, 92, 120, 1, 1, BOTDISTCFG_PISTOL, BOTDISTCFG_DEFAULT, 30, 30, 10, 10, 1, 0 }, // WEAPON_MAULER
/*0x07*/ { 72, 76, 100, 120, 1, 1, BOTDISTCFG_PISTOL, BOTDISTCFG_DEFAULT, 30, 30, 10, 10, 2, 0 }, // WEAPON_PHOENIX
/*0x08*/ { 68, 76, 96, 120, 1, 1, BOTDISTCFG_PISTOL, BOTDISTCFG_CLOSE, 30, 0, 8, 0, 3, 0 }, // WEAPON_DY357MAGNUM
/*0x09*/ { 180, 188, 184, 188, 1, 1, BOTDISTCFG_PISTOL, BOTDISTCFG_CLOSE, 20, 0, 6, 0, 3, 0 }, // WEAPON_DY357LX
/*0x0a*/ { 116, 128, 136, 152, 1, 1, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 100, 100, 30, 30, 2, 0 }, // WEAPON_CMP150
/*0x0b*/ { 120, 128, 132, 140, 1, 1, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 150, 150, 50, 50, 2, 0 }, // WEAPON_CYCLONE
/*0x0c*/ { 152, 176, 0, 0, 1, 1, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 100, 70, 25, 15, 2, 0 }, // WEAPON_CALLISTO
/*0x0d*/ { 172, 188, 0, 0, 1, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 300, 0, 40, 0, 2, 0 }, // WEAPON_RCP120
/*0x0e*/ { 128, 140, 0, 0, 1, 1, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 100, 0, 30, 0, 3, 0 }, // WEAPON_LAPTOPGUN
/*0x0f*/ { 124, 148, 0, 0, 1, 1, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 90, 0, 30, 0, 1, 0 }, // WEAPON_DRAGON
/*0x10*/ { 156, 180, 0, 0, 1, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 150, 0, 40, 0, 2, 0 }, // WEAPON_K7AVENGER
/*0x11*/ { 148, 176, 0, 0, 1, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 120, 0, 40, 0, 2, 0 }, // WEAPON_AR34
/*0x12*/ { 164, 188, 0, 0, 1, 1, BOTDISTCFG_DEFAULT, BOTDISTCFG_SHOOTEXPLOSIVE, 120, 20, 30, 6, 1, 0 }, // WEAPON_SUPERDRAGON
/*0x13*/ { 140, 156, 0, 0, 1, 1, BOTDISTCFG_PISTOL, BOTDISTCFG_PISTOL, 18, 18, 8, 8, 6, 1 }, // WEAPON_SHOTGUN
/*0x14*/ { 144, 176, 0, 0, 1, 1, BOTDISTCFG_DEFAULT, BOTDISTCFG_CLOSE, 400, 0, 80, 0, 3, 0 }, // WEAPON_REAPER
/*0x15*/ { 28, 40, 0, 0, 1, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 30, 30, 10, 10, 2, 0 }, // WEAPON_SNIPERRIFLE
/*0x16*/ { 188, 188, 0, 0, 1, 0, BOTDISTCFG_SHOOTEXPLOSIVE, BOTDISTCFG_FARSIGHT, 16, 0, 4, 0, 2, 0 }, // WEAPON_FARSIGHT
/*0x17*/ { 176, 188, 0, 0, 1, 1, BOTDISTCFG_SHOOTEXPLOSIVE, BOTDISTCFG_SHOOTEXPLOSIVE, 20, 20, 4, 4, 2, 0 }, // WEAPON_DEVASTATOR
/*0x18*/ { 160, 188, 0, 0, 1, 1, BOTDISTCFG_SHOOTEXPLOSIVE, BOTDISTCFG_SHOOTEXPLOSIVE, 2, 2, 1, 1, 2, 0 }, // WEAPON_ROCKETLAUNCHER
/*0x19*/ { 168, 188, 0, 0, 1, 1, BOTDISTCFG_SHOOTEXPLOSIVE, BOTDISTCFG_SHOOTEXPLOSIVE, 2, 2, 1, 1, 3, 0 }, // WEAPON_SLAYER
struct botweaponconfig g_BotWeaponConfigs[] = {
// score1
// | score2 targetammosec
// | | dualscore1 | criticalammopri
// | | | dualscore2 | | criticalammosec
// | | | | haspriammogoal | | | reloaddelay (seconds)
// | | | | | hassecammogoal | | | | allowpartialreloaddelay
// | | | | | | pridistconfig secdistconfig targetammopri | | | | |
/*WEAPON_NONE */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 0, 0 },
/*WEAPON_UNARMED */ { 13, 13, 13, 13, 1, 1, BOTDISTCFG_CLOSE, BOTDISTCFG_CLOSE, 0, 0, 0, 0, 0, 0 },
/*WEAPON_FALCON2 */ { 56, 60, 84, 88, 1, 1, BOTDISTCFG_PISTOL, BOTDISTCFG_CLOSE, 30, 0, 10, 0, 1, 0 },
/*WEAPON_FALCON2_SILENCER */ { 52, 60, 80, 88, 1, 1, BOTDISTCFG_PISTOL, BOTDISTCFG_CLOSE, 30, 0, 10, 0, 1, 0 },
/*WEAPON_FALCON2_SCOPE */ { 60, 60, 88, 88, 1, 1, BOTDISTCFG_PISTOL, BOTDISTCFG_CLOSE, 30, 0, 10, 0, 1, 0 },
/*WEAPON_MAGSEC4 */ { 76, 88, 104, 120, 1, 1, BOTDISTCFG_PISTOL, BOTDISTCFG_DEFAULT, 30, 30, 10, 10, 1, 0 },
/*WEAPON_MAULER */ { 64, 88, 92, 120, 1, 1, BOTDISTCFG_PISTOL, BOTDISTCFG_DEFAULT, 30, 30, 10, 10, 1, 0 },
/*WEAPON_PHOENIX */ { 72, 76, 100, 120, 1, 1, BOTDISTCFG_PISTOL, BOTDISTCFG_DEFAULT, 30, 30, 10, 10, 2, 0 },
/*WEAPON_DY357MAGNUM */ { 68, 76, 96, 120, 1, 1, BOTDISTCFG_PISTOL, BOTDISTCFG_CLOSE, 30, 0, 8, 0, 3, 0 },
/*WEAPON_DY357LX */ { 180, 188, 184, 188, 1, 1, BOTDISTCFG_PISTOL, BOTDISTCFG_CLOSE, 20, 0, 6, 0, 3, 0 },
/*WEAPON_CMP150 */ { 116, 128, 136, 152, 1, 1, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 100, 100, 30, 30, 2, 0 },
/*WEAPON_CYCLONE */ { 120, 128, 132, 140, 1, 1, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 150, 150, 50, 50, 2, 0 },
/*WEAPON_CALLISTO */ { 152, 176, 0, 0, 1, 1, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 100, 70, 25, 15, 2, 0 },
/*WEAPON_RCP120 */ { 172, 188, 0, 0, 1, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 300, 0, 40, 0, 2, 0 },
/*WEAPON_LAPTOPGUN */ { 128, 140, 0, 0, 1, 1, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 100, 0, 30, 0, 3, 0 },
/*WEAPON_DRAGON */ { 124, 148, 0, 0, 1, 1, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 90, 0, 30, 0, 1, 0 },
/*WEAPON_K7AVENGER */ { 156, 180, 0, 0, 1, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 150, 0, 40, 0, 2, 0 },
/*WEAPON_AR34 */ { 148, 176, 0, 0, 1, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 120, 0, 40, 0, 2, 0 },
/*WEAPON_SUPERDRAGON */ { 164, 188, 0, 0, 1, 1, BOTDISTCFG_DEFAULT, BOTDISTCFG_SHOOTEXPLOSIVE, 120, 20, 30, 6, 1, 0 },
/*WEAPON_SHOTGUN */ { 140, 156, 0, 0, 1, 1, BOTDISTCFG_PISTOL, BOTDISTCFG_PISTOL, 18, 18, 8, 8, 6, 1 },
/*WEAPON_REAPER */ { 144, 176, 0, 0, 1, 1, BOTDISTCFG_DEFAULT, BOTDISTCFG_CLOSE, 400, 0, 80, 0, 3, 0 },
/*WEAPON_SNIPERRIFLE */ { 28, 40, 0, 0, 1, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 30, 30, 10, 10, 2, 0 },
/*WEAPON_FARSIGHT */ { 188, 188, 0, 0, 1, 0, BOTDISTCFG_SHOOTEXPLOSIVE, BOTDISTCFG_FARSIGHT, 16, 0, 4, 0, 2, 0 },
/*WEAPON_DEVASTATOR */ { 176, 188, 0, 0, 1, 1, BOTDISTCFG_SHOOTEXPLOSIVE, BOTDISTCFG_SHOOTEXPLOSIVE, 20, 20, 4, 4, 2, 0 },
/*WEAPON_ROCKETLAUNCHER */ { 160, 188, 0, 0, 1, 1, BOTDISTCFG_SHOOTEXPLOSIVE, BOTDISTCFG_SHOOTEXPLOSIVE, 2, 2, 1, 1, 2, 0 },
/*WEAPON_SLAYER */ { 168, 188, 0, 0, 1, 1, BOTDISTCFG_SHOOTEXPLOSIVE, BOTDISTCFG_SHOOTEXPLOSIVE, 2, 2, 1, 1, 3, 0 },
#if VERSION == VERSION_JPN_FINAL
/*0x1a*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_COMBATKNIFE
/*WEAPON_COMBATKNIFE */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
#else
/*0x1a*/ { 20, 40, 24, 40, 1, 1, BOTDISTCFG_CLOSE, BOTDISTCFG_DEFAULT, 0, 5, 0, 1, 1, 0 }, // WEAPON_COMBATKNIFE
/*WEAPON_COMBATKNIFE */ { 20, 40, 24, 40, 1, 1, BOTDISTCFG_CLOSE, BOTDISTCFG_DEFAULT, 0, 5, 0, 1, 1, 0 },
#endif
/*0x1b*/ { 108, 176, 0, 0, 1, 1, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 15, 15, 5, 5, 4, 1 }, // WEAPON_CROSSBOW
/*0x1c*/ { 48, 188, 0, 0, 1, 1, BOTDISTCFG_DEFAULT, BOTDISTCFG_CLOSE, 20, 24, 6, 8, 1, 0 }, // WEAPON_TRANQUILIZER
/*0x1d*/ { 112, 112, 0, 0, 1, 1, BOTDISTCFG_DEFAULT, BOTDISTCFG_CLOSE, 0, 0, 0, 0, 1, 0 }, // WEAPON_LASER
/*0x1e*/ { 36, 172, 0, 0, 1, 1, BOTDISTCFG_THROWEXPLOSIVE, BOTDISTCFG_THROWEXPLOSIVE, 6, 6, 2, 2, 1, 0 }, // WEAPON_GRENADE
/*0x1f*/ { 32, 188, 0, 0, 1, 1, BOTDISTCFG_THROWEXPLOSIVE, BOTDISTCFG_THROWEXPLOSIVE, 3, 3, 1, 1, 1, 0 }, // WEAPON_NBOMB
/*0x20*/ { 12, 12, 0, 0, 0, 0, BOTDISTCFG_THROWEXPLOSIVE, BOTDISTCFG_DEFAULT, 5, 5, 1, 1, 1, 0 }, // WEAPON_TIMEDMINE
/*0x21*/ { 40, 176, 0, 0, 0, 0, BOTDISTCFG_THROWEXPLOSIVE, BOTDISTCFG_DEFAULT, 5, 5, 1, 1, 1, 0 }, // WEAPON_PROXIMITYMINE
/*0x22*/ { 44, 156, 0, 0, 1, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 5, 5, 2, 2, 1, 0 }, // WEAPON_REMOTEMINE
/*0x23*/ { 8, 8, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_COMBATBOOST
/*0x24*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_PP9I
/*0x25*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_CC13
/*0x26*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_KL01313
/*0x27*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_KF7SPECIAL
/*0x28*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_ZZT
/*0x29*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_DMC
/*0x2a*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_AR53
/*0x2b*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_RCP45
/*0x2c*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_PSYCHOSISGUN
/*0x2d*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_NIGHTVISION
/*0x2e*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_EYESPY
/*0x2f*/ { 4, 4, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_XRAYSCANNER
/*0x30*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_IRSCANNER
/*WEAPON_CROSSBOW */ { 108, 176, 0, 0, 1, 1, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 15, 15, 5, 5, 4, 1 },
/*WEAPON_TRANQUILIZER */ { 48, 188, 0, 0, 1, 1, BOTDISTCFG_DEFAULT, BOTDISTCFG_CLOSE, 20, 24, 6, 8, 1, 0 },
/*WEAPON_LASER */ { 112, 112, 0, 0, 1, 1, BOTDISTCFG_DEFAULT, BOTDISTCFG_CLOSE, 0, 0, 0, 0, 1, 0 },
/*WEAPON_GRENADE */ { 36, 172, 0, 0, 1, 1, BOTDISTCFG_THROWEXPLOSIVE, BOTDISTCFG_THROWEXPLOSIVE, 6, 6, 2, 2, 1, 0 },
/*WEAPON_NBOMB */ { 32, 188, 0, 0, 1, 1, BOTDISTCFG_THROWEXPLOSIVE, BOTDISTCFG_THROWEXPLOSIVE, 3, 3, 1, 1, 1, 0 },
/*WEAPON_TIMEDMINE */ { 12, 12, 0, 0, 0, 0, BOTDISTCFG_THROWEXPLOSIVE, BOTDISTCFG_DEFAULT, 5, 5, 1, 1, 1, 0 },
/*WEAPON_PROXIMITYMINE */ { 40, 176, 0, 0, 0, 0, BOTDISTCFG_THROWEXPLOSIVE, BOTDISTCFG_DEFAULT, 5, 5, 1, 1, 1, 0 },
/*WEAPON_REMOTEMINE */ { 44, 156, 0, 0, 1, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 5, 5, 2, 2, 1, 0 },
/*WEAPON_COMBATBOOST */ { 8, 8, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_PP9I */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_CC13 */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_KL01313 */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_KF7SPECIAL */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_ZZT */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_DMC */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_AR53 */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_RCP45 */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_PSYCHOSISGUN */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_NIGHTVISION */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_EYESPY */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_XRAYSCANNER */ { 4, 4, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_IRSCANNER */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
#if VERSION >= VERSION_PAL_FINAL
/*0x31*/ { 218, 218, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, TICKS(1200), 0, 0, 0, 1, 0 }, // WEAPON_CLOAKINGDEVICE
/*WEAPON_CLOAKINGDEVICE */ { 218, 218, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, TICKS(1200), 0, 0, 0, 1, 0 },
#else
/*0x31*/ { 218, 218, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 1200, 0, 0, 0, 1, 0 }, // WEAPON_CLOAKINGDEVICE
/*WEAPON_CLOAKINGDEVICE */ { 218, 218, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 1200, 0, 0, 0, 1, 0 },
#endif
/*0x32*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_HORIZONSCANNER
/*0x33*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_TESTER
/*0x34*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_ROCKETLAUNCHER_34
/*0x35*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_ECMMINE
/*0x36*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_DATAUPLINK
/*0x37*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_RTRACKER
/*0x38*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_PRESIDENTSCANNER
/*0x39*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_DOORDECODER
/*0x3a*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_AUTOSURGEON
/*0x3b*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_EXPLOSIVES
/*0x3c*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_SKEDARBOMB
/*0x3d*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_COMMSRIDER
/*0x3e*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_TRACERBUG
/*0x3f*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_TARGETAMPLIFIER
/*0x40*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_DISGUISE40
/*0x41*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_DISGUISE41
/*0x42*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_FLIGHTPLANS
/*0x43*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_RESEARCHTAPE
/*0x44*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_BACKUPDISK
/*0x45*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_KEYCARD45
/*0x46*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_KEYCARD46
/*0x47*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_KEYCARD47
/*0x48*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_KEYCARD48
/*0x49*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_KEYCARD49
/*0x4a*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_KEYCARD4A
/*0x4b*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_KEYCARD4B
/*0x4c*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_KEYCARD4C
/*0x4d*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_SUITCASE
/*0x4e*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_BRIEFCASE
/*WEAPON_HORIZONSCANNER */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_TESTER */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_KINGSCEPTRE */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_ECMMINE */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_DATAUPLINK */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_RTRACKER */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_PRESIDENTSCANNER */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_DOORDECODER */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_AUTOSURGEON */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_EXPLOSIVES */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_SKEDARBOMB */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_COMMSRIDER */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_TRACERBUG */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_TARGETAMPLIFIER */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_DISGUISE40 */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_DISGUISE41 */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_FLIGHTPLANS */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_RESEARCHTAPE */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_BACKUPDISK */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_KEYCARD45 */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_KEYCARD46 */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_KEYCARD47 */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_KEYCARD48 */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_KEYCARD49 */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_KEYCARD4A */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_KEYCARD4B */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_KEYCARD4C */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_SUITCASE */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_BRIEFCASE */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
#if VERSION >= VERSION_NTSC_1_0
/*0x4f*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_SHIELDTECHITEM
/*WEAPON_SHIELDTECHITEM */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
#endif
/*0x50*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_NECKLACE
/*0x51*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_HAMMER
/*0x52*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_SCREWDRIVER
/*0x53*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_ROCKET
/*0x54*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_HOMINGROCKET
/*0x55*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_GRENADEROUND
/*0x56*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_BOLT
/*0x57*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_BRIEFCASE2
/*0x58*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_SKROCKET
/*0x59*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_CHOPPERGUN
/*0x5a*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_WATCHLASER
/*0x5b*/ { 220, 220, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_MPSHIELD
/*0x5c*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_DISABLED
/*0x5d*/ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 }, // WEAPON_SUICIDEPILL
/*WEAPON_NECKLACE */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_HAMMER */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_SCREWDRIVER */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_ROCKET */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_HOMINGROCKET */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_GRENADEROUND */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_BOLT */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_BRIEFCASE2 */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_SKROCKET */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_CHOPPERGUN */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_WATCHLASER */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_MPSHIELD */ { 220, 220, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_DISABLED */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
/*WEAPON_SUICIDEPILL */ { 0, 0, 0, 0, 0, 0, BOTDISTCFG_DEFAULT, BOTDISTCFG_DEFAULT, 0, 0, 0, 0, 1, 0 },
};
/**
@ -464,7 +460,7 @@ s32 mpGetWeaponSlotByWeaponNum(s32 weaponnum)
* Weapon scoring is used to determine if a weapon is better than another,
* which affects whether the bot engages in combat or seeks a better weapon.
*/
void botinvScoreWeapon(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 arg3, bool arg4, s32 *dst1, s32 *dst2, bool comparewithtarget, bool arg8)
void botinvScoreWeapon(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 ifammo, bool dual, s32 *dst1, s32 *dst2, bool comparewithtarget, bool learn)
{
s32 score1 = 0;
s32 score2 = 0;
@ -472,15 +468,15 @@ void botinvScoreWeapon(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 arg3
// @dangerous: Array overflow can occur if more weapons are added to the
// game without extending the preferences table
if (arg3 < 0
|| (!funcnum && arg3 == g_AibotWeaponPreferences[weaponnum].haspriammogoal)
|| (funcnum && arg3 == g_AibotWeaponPreferences[weaponnum].hassecammogoal)) {
if (arg4) {
score1 = g_AibotWeaponPreferences[weaponnum].unk02;
score2 = g_AibotWeaponPreferences[weaponnum].unk03;
if (ifammo < 0
|| (funcnum == FUNC_PRIMARY && ifammo == g_BotWeaponConfigs[weaponnum].haspriammogoal)
|| (funcnum != FUNC_PRIMARY && ifammo == g_BotWeaponConfigs[weaponnum].hassecammogoal)) {
if (dual) {
score1 = g_BotWeaponConfigs[weaponnum].dualscore1;
score2 = g_BotWeaponConfigs[weaponnum].dualscore2;
} else {
score1 = g_AibotWeaponPreferences[weaponnum].unk00;
score2 = g_AibotWeaponPreferences[weaponnum].unk01;
score1 = g_BotWeaponConfigs[weaponnum].score1;
score2 = g_BotWeaponConfigs[weaponnum].score2;
}
if (chr && chr->aibot) {
@ -551,7 +547,7 @@ void botinvScoreWeapon(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 arg3
break;
case WEAPON_MAGSEC4:
if (funcnum == FUNC_PRIMARY) {
score1 = arg4 ? 91 : 63;
score1 = dual ? 91 : 63;
}
break;
case WEAPON_PHOENIX:
@ -563,7 +559,7 @@ void botinvScoreWeapon(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 arg3
score2 = 150;
}
} else {
score1 = arg4 ? 90 : 62;
score1 = dual ? 90 : 62;
}
}
break;
@ -761,7 +757,8 @@ void botinvScoreWeapon(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 arg3
break;
}
if (arg8) {
if (learn) {
// Learn from recent usage stats
s32 weaponindex;
s32 extra = 0;
f32 float1;
@ -816,14 +813,14 @@ void botinvScoreWeapon(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 arg3
*dst2 = score2;
}
void botinvScoreWeaponAgainstTarget(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 arg3, bool arg4, s32 *dst1, s32 *dst2)
void botinvScoreWeaponAgainstTarget(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 ifammo, bool dual, s32 *dst1, s32 *dst2)
{
botinvScoreWeapon(chr, weaponnum, funcnum, arg3, arg4, dst1, dst2, true, true);
botinvScoreWeapon(chr, weaponnum, funcnum, ifammo, dual, dst1, dst2, true, true);
}
void botinvScoreWeaponByItself(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 arg3, bool arg4, s32 *dst1, s32 *dst2)
void botinvScoreWeaponByItself(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 ifammo, bool dual, s32 *dst1, s32 *dst2)
{
botinvScoreWeapon(chr, weaponnum, funcnum, arg3, arg4, dst1, dst2, false, true);
botinvScoreWeapon(chr, weaponnum, funcnum, ifammo, dual, dst1, dst2, false, true);
}
/**
@ -833,10 +830,10 @@ void botinvScoreWeaponByItself(struct chrdata *chr, s32 weaponnum, s32 funcnum,
s32 botinvGetDistConfig(s32 weaponnum, s32 funcnum)
{
if (funcnum != FUNC_PRIMARY) {
return g_AibotWeaponPreferences[weaponnum].secdistconfig;
return g_BotWeaponConfigs[weaponnum].secdistconfig;
}
return g_AibotWeaponPreferences[weaponnum].pridistconfig;
return g_BotWeaponConfigs[weaponnum].pridistconfig;
}
/**
@ -849,11 +846,11 @@ bool botinvAllowsWeapon(struct chrdata *chr, s32 weaponnum, s32 funcnum)
if (chr->aibot->config->type == BOTTYPE_FIST) {
if (funcnum != FUNC_PRIMARY) {
if (g_AibotWeaponPreferences[weaponnum].secdistconfig != BOTDISTCFG_CLOSE) {
if (g_BotWeaponConfigs[weaponnum].secdistconfig != BOTDISTCFG_CLOSE) {
allow = false;
}
} else {
if (g_AibotWeaponPreferences[weaponnum].pridistconfig != BOTDISTCFG_CLOSE) {
if (g_BotWeaponConfigs[weaponnum].pridistconfig != BOTDISTCFG_CLOSE) {
allow = false;
}
}
@ -967,9 +964,9 @@ void botinvTick(struct chrdata *chr)
if (weaponnum >= 0) {
for (j = 1; j >= 0; j--) {
if (j != FUNC_PRIMARY) {
canuse = g_AibotWeaponPreferences[weaponnum].hassecammogoal;
canuse = g_BotWeaponConfigs[weaponnum].hassecammogoal;
} else {
canuse = g_AibotWeaponPreferences[weaponnum].haspriammogoal;
canuse = g_BotWeaponConfigs[weaponnum].haspriammogoal;
}
if (canuse && botinvAllowsWeapon(chr, weaponnum, j)) {

View File

@ -580,7 +580,7 @@ bool chr0f01f378(struct model *model, struct coord *arg1, struct coord *arg2, f3
// forceslowupdates is set when the bot is being saved from
// falling out of bounds due to high lag. It forces them to
// update in smaller increments, which gives a higher chance
// of their collision detecting working correctly.
// of their collision detection working correctly.
if (chr->prop->flags & PROPFLAG_ONANYSCREENPREVTICK) {
chr->aibot->forceslowupdates = 0;
} else {
@ -600,9 +600,9 @@ bool chr0f01f378(struct model *model, struct coord *arg1, struct coord *arg2, f3
lvupdate240 = 16;
}
bot0f1921f8(chr, move, lvupdate240, lvupdate60freal);
botUpdateLateral(chr, move, lvupdate240, lvupdate60freal);
#else
bot0f1921f8(chr, move);
botUpdateLateral(chr, move);
#endif
}

View File

@ -2436,7 +2436,7 @@ void chrAttackWalk(struct chrdata *chr, bool run)
}
if (weapon->weaponnum == WEAPON_ROCKETLAUNCHER
|| weapon->weaponnum == WEAPON_ROCKETLAUNCHER_34
|| weapon->weaponnum == WEAPON_KINGSCEPTRE
|| weapon->weaponnum == WEAPON_SLAYER
|| weapon->weaponnum == WEAPON_DEVASTATOR
|| (
@ -2601,7 +2601,7 @@ void chrAttackRoll(struct chrdata *chr, bool toleft)
}
if (weapon->weaponnum == WEAPON_ROCKETLAUNCHER
|| weapon->weaponnum == WEAPON_ROCKETLAUNCHER_34
|| weapon->weaponnum == WEAPON_KINGSCEPTRE
|| weapon->weaponnum == WEAPON_SLAYER
|| weapon->weaponnum == WEAPON_DEVASTATOR
|| (
@ -2854,7 +2854,7 @@ void chrAttack(struct chrdata *chr, struct attackanimgroup **animgroups, bool fl
// (Foster from the firing range) can fire multiple shots with
// the magnum.
if (weapon->weaponnum == WEAPON_ROCKETLAUNCHER
|| weapon->weaponnum == WEAPON_ROCKETLAUNCHER_34
|| weapon->weaponnum == WEAPON_KINGSCEPTRE
|| weapon->weaponnum == WEAPON_SLAYER
|| weapon->weaponnum == WEAPON_DEVASTATOR
|| (
@ -6383,7 +6383,7 @@ bool chrHasLosToEntity(struct chrdata *chr, struct coord *chrpos, RoomNum *chrro
if (weapon->weaponnum == WEAPON_ROCKETLAUNCHER
|| weapon->weaponnum == WEAPON_SLAYER
|| weapon->weaponnum == WEAPON_ROCKETLAUNCHER_34) {
|| weapon->weaponnum == WEAPON_KINGSCEPTRE) {
types = CDTYPE_DOORSWITHOUTFLAG | CDTYPE_OBJSIMMUNETOEXPLOSIONS | CDTYPE_ALL;
} else {
types = CDTYPE_DOORSWITHOUTFLAG | CDTYPE_OBJSIMMUNETOGUNFIRE | CDTYPE_ALL;
@ -10060,7 +10060,7 @@ void chrTickShoot(struct chrdata *chr, s32 handnum)
|| (gset.weaponnum == WEAPON_SUPERDRAGON && gset.weaponfunc == FUNC_SECONDARY)
|| gset.weaponnum == WEAPON_DEVASTATOR
|| gset.weaponnum == WEAPON_CROSSBOW
|| gset.weaponnum == WEAPON_ROCKETLAUNCHER_34) {
|| gset.weaponnum == WEAPON_KINGSCEPTRE) {
makebeam = false;
// Solo chrs won't fire their projectile weapon
@ -10078,7 +10078,7 @@ void chrTickShoot(struct chrdata *chr, s32 handnum)
// Handle creating the projectile
if (gset.weaponnum == WEAPON_ROCKETLAUNCHER
|| gset.weaponnum == WEAPON_ROCKETLAUNCHER_34
|| gset.weaponnum == WEAPON_KINGSCEPTRE
|| gset.weaponnum == WEAPON_SLAYER) {
s32 rocketweaponnum = WEAPON_ROCKET;
@ -10125,7 +10125,7 @@ void chrTickShoot(struct chrdata *chr, s32 handnum)
if (gset.weaponfunc == FUNC_PRIMARY &&
(gset.weaponnum == WEAPON_ROCKETLAUNCHER
|| gset.weaponnum == WEAPON_ROCKETLAUNCHER_34
|| gset.weaponnum == WEAPON_KINGSCEPTRE
|| gset.weaponnum == WEAPON_SLAYER)) {
if (targetprop->type == PROPTYPE_CHR || targetprop->type == PROPTYPE_PLAYER) {
// Rockets - aim at target's feet

View File

@ -6070,7 +6070,7 @@ struct weapon invitem_keycard = {
WEAPONFLAG_UNDROPPABLE,
};
struct weaponfunc_shootprojectile invfunc_rocketlauncher34_primary = {
struct weaponfunc_shootprojectile invfunc_kingsceptre_primary = {
INVENTORYFUNCTYPE_SHOOT_PROJECTILE,
L_GUN_000, // name
0, // unused
@ -6101,7 +6101,7 @@ struct weaponfunc_shootprojectile invfunc_rocketlauncher34_primary = {
SFX_LAUNCH_ROCKET_8053, // soundnum
};
struct inventory_ammo invammo_rocketlauncher34 = {
struct inventory_ammo invammo_kingsceptre = {
AMMOTYPE_ROCKET,
CASING_NONE,
1, // clip size
@ -6109,15 +6109,15 @@ struct inventory_ammo invammo_rocketlauncher34 = {
0, // flags
};
struct weapon invitem_rocketlauncher_34 = {
struct weapon invitem_kingsceptre = {
FILE_GDYROCKET, // hi model
FILE_GROCKETLOD, // lo model
NULL, // equip animation
NULL, // unequip animation
NULL, // pritosec animation
NULL, // sectopri animation
{ &invfunc_rocketlauncher34_primary, NULL }, // functions
&invammo_rocketlauncher34, // pri ammo
{ &invfunc_kingsceptre_primary, NULL }, // functions
&invammo_kingsceptre, // pri ammo
NULL, // sec ammo
&invaimsettings_rocketlauncher,
1, // muzzlez
@ -6247,7 +6247,7 @@ struct weapon *g_Weapons[] = {
&invitem_cloakingdevice,
&invitem_horizonscanner,
&invitem_tester,
&invitem_rocketlauncher_34,
&invitem_kingsceptre,
&invitem_ecmmine,
&invitem_datauplink,
&invitem_rtracker,

View File

@ -18608,7 +18608,7 @@ struct weaponobj *weaponCreateProjectileFromGset(s32 modelnum, struct gset *gset
case WEAPON_TIMEDMINE:
case WEAPON_PROXIMITYMINE:
case WEAPON_REMOTEMINE:
case WEAPON_ROCKETLAUNCHER_34:
case WEAPON_KINGSCEPTRE:
default:
weapon->base.modelnum = modelnum;

View File

@ -4372,7 +4372,7 @@ enum weaponnum {
/*0x31*/ WEAPON_CLOAKINGDEVICE,
/*0x32*/ WEAPON_HORIZONSCANNER,
/*0x33*/ WEAPON_TESTER,
/*0x34*/ WEAPON_ROCKETLAUNCHER_34,
/*0x34*/ WEAPON_KINGSCEPTRE,
/*0x35*/ WEAPON_ECMMINE,
/*0x36*/ WEAPON_DATAUPLINK,
/*0x37*/ WEAPON_RTRACKER,

View File

@ -495,7 +495,7 @@ extern struct mppreset g_MpPresets[];
extern u32 g_TeamColours[];
extern u32 var80087ce4[];
extern u8 g_BotCount;
extern struct aibotweaponpreference g_AibotWeaponPreferences[];
extern struct botweaponconfig g_BotWeaponConfigs[];
extern u32 var80087eb4;
extern struct challenge g_MpChallenges[30];
extern u8 g_FrIsValidWeapon;

View File

@ -21,9 +21,9 @@ s32 botTick(struct prop *prop);
f32 botCalculateMaxSpeed(struct chrdata *chr);
#if VERSION >= VERSION_NTSC_1_0
void bot0f1921f8(struct chrdata *chr, f32 *move, s32 numupdates, f32 arg3);
void botUpdateLateral(struct chrdata *chr, f32 *move, s32 numupdates, f32 arg3);
#else
void bot0f1921f8(struct chrdata *chr, f32 *move);
void botUpdateLateral(struct chrdata *chr, f32 *move);
#endif
void botDisarm(struct chrdata *chr, struct prop *attacker);

View File

@ -16,9 +16,9 @@ bool botinvGiveProp(struct chrdata *chr, struct prop *prop);
void botinvScoreAllWeapons(struct chrdata *chr, s32 *weaponnums, s32 *scores1, s32 *scores2);
bool mpHasShield(void);
s32 mpGetWeaponSlotByWeaponNum(s32 weaponnum);
void botinvScoreWeapon(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 arg3, bool arg4, s32 *dst1, s32 *dst2, bool arg7, bool arg8);
void botinvScoreWeaponAgainstTarget(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 arg3, bool arg4, s32 *dst1, s32 *dst2);
void botinvScoreWeaponByItself(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 arg3, bool arg4, s32 *dst1, s32 *dst2);
void botinvScoreWeapon(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 ifammo, bool dual, s32 *dst1, s32 *dst2, bool arg7, bool learn);
void botinvScoreWeaponAgainstTarget(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 ifammo, bool dual, s32 *dst1, s32 *dst2);
void botinvScoreWeaponByItself(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 ifammo, bool dual, s32 *dst1, s32 *dst2);
s32 botinvGetDistConfig(s32 weaponnum, s32 funcnum);
bool botinvAllowsWeapon(struct chrdata *chr, s32 weaponnum, s32 funcnum);
void botinvTick(struct chrdata *chr);

View File

@ -5538,11 +5538,11 @@ struct portalvertices {
struct coord vertices[1];
};
struct aibotweaponpreference {
u8 unk00;
u8 unk01;
u8 unk02;
u8 unk03;
struct botweaponconfig {
u8 score1;
u8 score2;
u8 dualscore1;
u8 dualscore2;
u16 haspriammogoal : 1;
u16 hassecammogoal : 1;
u16 pridistconfig : 4;

View File

@ -3365,7 +3365,7 @@ u8 func100f_check_drcaroll_dead[] = {
endlist
};
u8 func040f_miniskedar_send_clones[] = {
u8 func040d_miniskedar_send_clones[] = {
dprint 'D','E','T','E','C','T','E','D','\n',0,
set_self_chrflag(CHRCFLAG_CLONEABLE)
set_self_chrflag(CHRCFLAG_HIDDEN)
@ -4893,7 +4893,7 @@ struct ailist ailists[] = {
{ func040e_init_miniskedar, 0x040e },
{ func040f_miniskedar, 0x040f },
{ func0c02_outro, 0x0410 },
{ func040f_miniskedar_send_clones, 0x040d },
{ func040d_miniskedar_send_clones, 0x040d },
{ func040c_blonde, 0x040c },
{ func040b_init_elvis, 0x040b },
{ func0402_elvis_follow_and_reactive_teleportals, 0x0402 },

View File

@ -215,7 +215,7 @@ u32 props[] = {
chr(SPAWNFLAG_IGNORECOLLISION, 0x32, PAD_SHO_00CC, BODY_SKEDAR, HEAD_RANDOM, AILIST_MAULER_SKEDAR, -1, -1, 1000, 9, CHRFLAG0_HOLD_POSITION, CHRFLAG1_IGNORECOVER, TEAM_ENEMY, SQUADRON_01, -1, 0, 0, 0, 0, 0)
weapon(0x0100, MODEL_CHRMAULER, 0x0032, OBJFLAG_ASSIGNEDTOCHR, 0, 0, WEAPON_MAULER)
chr(0, 0x33, PAD_SHO_00CD, BODY_SKEDARKING, HEAD_RANDOM, AILIST_HIDE, -1, -1, 1000, 9, CHRFLAG0_HOLD_POSITION, 0, TEAM_ENEMY, SQUADRON_01, -1, 0, 0, 0, 0, 0)
weapon(0x0100, MODEL_KINGSCEPTRE, 0x0033, OBJFLAG_ASSIGNEDTOCHR, 0, 0, WEAPON_ROCKETLAUNCHER_34)
weapon(0x0100, MODEL_KINGSCEPTRE, 0x0033, OBJFLAG_ASSIGNEDTOCHR, 0, 0, WEAPON_KINGSCEPTRE)
chr(0, 0x34, PAD_SHO_00CE, BODY_SKEDAR, HEAD_RANDOM, AILIST_KING_SKEDAR_SPAWNER, -1, -1, 1000, 9, CHRFLAG0_GP1, 0, TEAM_ENEMY, SQUADRON_01, -1, 0, 0, 0, 0, 0)
ammocrate(0x0100, MODEL_CHRUZI, 0x0034, OBJFLAG_ASSIGNEDTOCHR, 0, 0, 1000, AMMOTYPE_FARSIGHT)
chr(0, 0x35, PAD_SHO_00CF, BODY_MINISKEDAR, HEAD_RANDOM, AILIST_KING_MINISKEDAR_SPAWNER, -1, -1, 1000, 9, CHRFLAG0_GP1, 0, TEAM_ENEMY, SQUADRON_01, -1, 0, 0, 0, 0, 0)

View File

@ -103,9 +103,9 @@ u32 props[] = {
chr(SPAWNFLAG_ONLYONPA, CHR_KING3, PAD_STAT_0094, BODY_SKEDARKING, HEAD_RANDOM, AILIST_INIT_KING, 0x0094, -1, 1000, 200, CHRFLAG0_SKIPSAFETYCHECKS, CHRFLAG1_ALLOWSOFTCOVER | CHRFLAG1_AIVSAI_ADVANTAGED | CHRFLAG1_NOOP_00200000 | CHRFLAG1_IGNORECOVER | CHRFLAG1_PUNCHHARDER, TEAM_ENEMY, SQUADRON_04, -1, 0, 0, 0, 0, 0)
#if VERSION >= VERSION_NTSC_1_0
weapon(0x0100, MODEL_KINGSCEPTRE, 0x0042, OBJFLAG_AIUNDROPPABLE | OBJFLAG_ASSIGNEDTOCHR | OBJFLAG_DEACTIVATED, 0, 0, WEAPON_ROCKETLAUNCHER_34)
weapon(0x0100, MODEL_KINGSCEPTRE, 0x0042, OBJFLAG_AIUNDROPPABLE | OBJFLAG_ASSIGNEDTOCHR | OBJFLAG_DEACTIVATED, 0, 0, WEAPON_KINGSCEPTRE)
#else
weapon(0x0100, MODEL_KINGSCEPTRE, 0x0042, OBJFLAG_ASSIGNEDTOCHR | OBJFLAG_DEACTIVATED, 0, 0, WEAPON_ROCKETLAUNCHER_34)
weapon(0x0100, MODEL_KINGSCEPTRE, 0x0042, OBJFLAG_ASSIGNEDTOCHR | OBJFLAG_DEACTIVATED, 0, 0, WEAPON_KINGSCEPTRE)
#endif
chr(SPAWNFLAG_IGNORECOLLISION | SPAWNFLAG_BASICGUARD, CHR_BLONDE, PAD_STAT_0077, BODY_SKEDAR, HEAD_MRBLONDE, AILIST_KING1_SKEDAR, 0x0022, -1, 1000, 200, CHRFLAG0_SKIPSAFETYCHECKS, CHRFLAG1_ALLOWSOFTCOVER | CHRFLAG1_AIVSAI_ADVANTAGED | CHRFLAG1_NOOP_00200000 | CHRFLAG1_IGNORECOVER | CHRFLAG1_PUNCHHARDER, TEAM_ENEMY, SQUADRON_04, -1, 0, 0, 0, 0, 0)