Decompile botTickUnpaused
This commit is contained in:
parent
43ffa8f77a
commit
01272b8f4d
2
Makefile
2
Makefile
|
@ -202,7 +202,7 @@ CFLAGS = $(C_DEFINES) \
|
||||||
$(LOOPUNROLL) \
|
$(LOOPUNROLL) \
|
||||||
-Wab,-r4300_mul \
|
-Wab,-r4300_mul \
|
||||||
-non_shared \
|
-non_shared \
|
||||||
-Olimit 1000 \
|
-Olimit 2000 \
|
||||||
-G 0 \
|
-G 0 \
|
||||||
-Xcpluscomm \
|
-Xcpluscomm \
|
||||||
-w2 \
|
-w2 \
|
||||||
|
|
4595
src/game/bot.c
4595
src/game/bot.c
File diff suppressed because it is too large
Load Diff
|
@ -48,7 +48,8 @@ s32 botactGetClipCapacityByFunction(s32 weaponnum, u32 funcnum)
|
||||||
void botactReload(struct chrdata *chr, s32 handnum, bool withsound)
|
void botactReload(struct chrdata *chr, s32 handnum, bool withsound)
|
||||||
{
|
{
|
||||||
struct aibot *aibot = chr->aibot;
|
struct aibot *aibot = chr->aibot;
|
||||||
aibot->unk02c[handnum] = 0;
|
|
||||||
|
aibot->timeuntilreload60[handnum] = 0;
|
||||||
aibot->maulercharge[handnum] = 0;
|
aibot->maulercharge[handnum] = 0;
|
||||||
|
|
||||||
if (chr->weapons_held[handnum] && !botactIsWeaponThrowable(aibot->weaponnum, aibot->gunfunc)) {
|
if (chr->weapons_held[handnum] && !botactIsWeaponThrowable(aibot->weaponnum, aibot->gunfunc)) {
|
||||||
|
@ -284,7 +285,7 @@ s32 botactGetWeaponModel(s32 weapon)
|
||||||
return weaponGetModel(weapon);
|
return weaponGetModel(weapon);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool botactIsWeaponThrowable(u32 weaponnum, bool is_secondary)
|
bool botactIsWeaponThrowable(s32 weaponnum, bool is_secondary)
|
||||||
{
|
{
|
||||||
switch (weaponnum) {
|
switch (weaponnum) {
|
||||||
case WEAPON_LAPTOPGUN:
|
case WEAPON_LAPTOPGUN:
|
||||||
|
@ -403,9 +404,9 @@ void botact0f19a37c(struct chrdata *chr)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the fire rate of the given weapon?
|
* Get the shoot interval of the given weapon, in time60.
|
||||||
*/
|
*/
|
||||||
s32 botact0f19a60c(s32 weaponnum, s32 funcnum)
|
s32 botactGetShootInterval60(s32 weaponnum, s32 funcnum)
|
||||||
{
|
{
|
||||||
s32 stack[2];
|
s32 stack[2];
|
||||||
s32 result = 1;
|
s32 result = 1;
|
||||||
|
|
|
@ -565,12 +565,12 @@ void botinvScoreWeapon(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 arg3
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WEAPON_CYCLONE:
|
case WEAPON_CYCLONE:
|
||||||
if (funcnum == (chr->aibot->rand % 2)) {
|
if (funcnum == (chr->aibot->random1 % 2)) {
|
||||||
score1--;
|
score1--;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WEAPON_CALLISTO:
|
case WEAPON_CALLISTO:
|
||||||
if (funcnum == (chr->aibot->rand % 2)) {
|
if (funcnum == (chr->aibot->random1 % 2)) {
|
||||||
score1--;
|
score1--;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -578,8 +578,8 @@ void botinvScoreWeapon(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 arg3
|
||||||
if (chr->aibot->cloakdeviceenabled == false
|
if (chr->aibot->cloakdeviceenabled == false
|
||||||
&& botactGetAmmoQuantityByWeapon(chr->aibot, WEAPON_RCP120, FUNC_PRIMARY, true) > 500
|
&& botactGetAmmoQuantityByWeapon(chr->aibot, WEAPON_RCP120, FUNC_PRIMARY, true) > 500
|
||||||
&& chr->aibot->config->difficulty > BOTDIFF_MEAT) {
|
&& chr->aibot->config->difficulty > BOTDIFF_MEAT) {
|
||||||
score1 += chr->aibot->rand % 10;
|
score1 += chr->aibot->random1 % 10;
|
||||||
score2 += chr->aibot->rand % 10;
|
score2 += chr->aibot->random1 % 10;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WEAPON_LAPTOPGUN:
|
case WEAPON_LAPTOPGUN:
|
||||||
|
@ -596,12 +596,12 @@ void botinvScoreWeapon(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 arg3
|
||||||
break;
|
break;
|
||||||
case WEAPON_SUPERDRAGON:
|
case WEAPON_SUPERDRAGON:
|
||||||
if (chr->aibot->config->type != BOTDIFF_HARD
|
if (chr->aibot->config->type != BOTDIFF_HARD
|
||||||
&& (chr->aibot->rand % 2) == funcnum) {
|
&& (chr->aibot->random1 % 2) == funcnum) {
|
||||||
score1 -= 15;
|
score1 -= 15;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WEAPON_SHOTGUN:
|
case WEAPON_SHOTGUN:
|
||||||
if (funcnum == (chr->aibot->rand % 2)) {
|
if (funcnum == (chr->aibot->random1 % 2)) {
|
||||||
score1--;
|
score1--;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -618,7 +618,7 @@ void botinvScoreWeapon(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 arg3
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WEAPON_ROCKETLAUNCHER:
|
case WEAPON_ROCKETLAUNCHER:
|
||||||
if (funcnum == (chr->aibot->rand % 2)) {
|
if (funcnum == (chr->aibot->random1 % 2)) {
|
||||||
score1--;
|
score1--;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -629,7 +629,7 @@ void botinvScoreWeapon(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 arg3
|
||||||
if (comparewithtarget) {
|
if (comparewithtarget) {
|
||||||
if (chr->target != -1
|
if (chr->target != -1
|
||||||
&& chr->aibot->chrsinsight[mpPlayerGetIndex(chrGetTargetProp(chr)->chr)] == 0
|
&& chr->aibot->chrsinsight[mpPlayerGetIndex(chrGetTargetProp(chr)->chr)] == 0
|
||||||
&& (chr->aibot->rand % 2) == 0) {
|
&& (chr->aibot->random1 % 2) == 0) {
|
||||||
score1 += 10;
|
score1 += 10;
|
||||||
} else {
|
} else {
|
||||||
score1 -= 10;
|
score1 -= 10;
|
||||||
|
@ -646,7 +646,7 @@ void botinvScoreWeapon(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 arg3
|
||||||
if (comparewithtarget) {
|
if (comparewithtarget) {
|
||||||
if (chr->target != -1
|
if (chr->target != -1
|
||||||
&& chr->aibot->chrsinsight[mpPlayerGetIndex(chrGetTargetProp(chr)->chr)] == 0
|
&& chr->aibot->chrsinsight[mpPlayerGetIndex(chrGetTargetProp(chr)->chr)] == 0
|
||||||
&& (chr->aibot->rand % 2) == 0) {
|
&& (chr->aibot->random1 % 2) == 0) {
|
||||||
score1 = 178;
|
score1 = 178;
|
||||||
score2 = 188;
|
score2 = 188;
|
||||||
} else {
|
} else {
|
||||||
|
@ -698,11 +698,11 @@ void botinvScoreWeapon(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 arg3
|
||||||
if (chr->aibot->config->difficulty <= BOTDIFF_MEAT) {
|
if (chr->aibot->config->difficulty <= BOTDIFF_MEAT) {
|
||||||
score1 = 0;
|
score1 = 0;
|
||||||
score2 = 0;
|
score2 = 0;
|
||||||
} else if (bluramount > PALDOWN(3500) && (chr->aibot->rand % 2) == 0) {
|
} else if (bluramount > PALDOWN(3500) && (chr->aibot->random1 % 2) == 0) {
|
||||||
score1 = chr->aibot->rand % 140 + 48;
|
score1 = chr->aibot->random1 % 140 + 48;
|
||||||
score2 = 188;
|
score2 = 188;
|
||||||
} else if (chr->aibot->rand % 10 == 0) {
|
} else if (chr->aibot->random1 % 10 == 0) {
|
||||||
score1 = chr->aibot->rand % 140 + 48;
|
score1 = chr->aibot->random1 % 140 + 48;
|
||||||
score2 = 188;
|
score2 = 188;
|
||||||
} else {
|
} else {
|
||||||
score1 = 0;
|
score1 = 0;
|
||||||
|
@ -712,7 +712,7 @@ void botinvScoreWeapon(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 arg3
|
||||||
if (bluramount >= PALDOWN(5000)) {
|
if (bluramount >= PALDOWN(5000)) {
|
||||||
score2 = 48;
|
score2 = 48;
|
||||||
|
|
||||||
if (chr->aibot->rand % 2) {
|
if (chr->aibot->random1 % 2) {
|
||||||
score1 = 0;
|
score1 = 0;
|
||||||
score2 = 0;
|
score2 = 0;
|
||||||
}
|
}
|
||||||
|
@ -727,10 +727,10 @@ void botinvScoreWeapon(struct chrdata *chr, s32 weaponnum, s32 funcnum, s32 arg3
|
||||||
value *= value;
|
value *= value;
|
||||||
value *= value;
|
value *= value;
|
||||||
|
|
||||||
if (value < chr->aibot->rand) {
|
if (value < chr->aibot->random1) {
|
||||||
score2 = 48;
|
score2 = 48;
|
||||||
|
|
||||||
if (chr->aibot->rand % 2) {
|
if (chr->aibot->random1 % 2) {
|
||||||
score1 = 0;
|
score1 = 0;
|
||||||
score2 = 0;
|
score2 = 0;
|
||||||
}
|
}
|
||||||
|
@ -905,19 +905,19 @@ void botinvTick(struct chrdata *chr)
|
||||||
|
|
||||||
// Every 2-12 seconds, generate a new random value which is used as a factor
|
// Every 2-12 seconds, generate a new random value which is used as a factor
|
||||||
// in various aibot logic.
|
// in various aibot logic.
|
||||||
aibot->randttl60 -= g_Vars.lvupdate240_60;
|
aibot->random1ttl60 -= g_Vars.lvupdate240_60;
|
||||||
|
|
||||||
if (aibot->randttl60 < 0) {
|
if (aibot->random1ttl60 < 0) {
|
||||||
aibot->randttl60 = PALDOWN(120) + random() % PALDOWN(600);
|
aibot->random1ttl60 = PALDOWN(120) + random() % PALDOWN(600);
|
||||||
aibot->rand = random();
|
aibot->random1 = random();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (aibot->unk0c4[1] == 0
|
if (aibot->cyclonedischarging[HAND_LEFT] == 0
|
||||||
&& aibot->unk0c4[0] == 0
|
&& aibot->cyclonedischarging[HAND_RIGHT] == 0
|
||||||
&& aibot->unk04d[1] <= 0
|
&& aibot->burstsdone[HAND_LEFT] <= 0
|
||||||
&& aibot->unk04d[0] <= 0
|
&& aibot->burstsdone[HAND_RIGHT] <= 0
|
||||||
&& aibot->unk0e0[1] <= 0
|
&& aibot->reaperspeed[HAND_LEFT] <= 0
|
||||||
&& aibot->unk0e0[0] <= 0
|
&& aibot->reaperspeed[HAND_RIGHT] <= 0
|
||||||
&& aibot->skrocket == NULL) {
|
&& aibot->skrocket == NULL) {
|
||||||
if (chr->myaction == MA_AIBOTDOWNLOAD) {
|
if (chr->myaction == MA_AIBOTDOWNLOAD) {
|
||||||
keepcurrentweapon = true;
|
keepcurrentweapon = true;
|
||||||
|
@ -1037,12 +1037,12 @@ bool botinvSwitchToWeapon(struct chrdata *chr, s32 weaponnum, s32 funcnum)
|
||||||
changingfunc = funcnum != aibot->gunfunc;
|
changingfunc = funcnum != aibot->gunfunc;
|
||||||
|
|
||||||
if (changinggun) {
|
if (changinggun) {
|
||||||
aibot->unk0cc = PALDOWN(60);
|
aibot->changeguntimer60 = PALDOWN(60);
|
||||||
|
|
||||||
for (i = 0; i < 2; i++) {
|
for (i = 0; i < 2; i++) {
|
||||||
aibot->unk0c4[i] = 0;
|
aibot->cyclonedischarging[i] = false;
|
||||||
aibot->unk04d[i] = 0;
|
aibot->burstsdone[i] = 0;
|
||||||
aibot->unk0e0[i] = 0;
|
aibot->reaperspeed[i] = 0;
|
||||||
|
|
||||||
if (chr->weapons_held[i]) {
|
if (chr->weapons_held[i]) {
|
||||||
chr->weapons_held[i]->obj->hidden |= OBJHFLAG_REAPABLE;
|
chr->weapons_held[i]->obj->hidden |= OBJHFLAG_REAPABLE;
|
||||||
|
|
|
@ -112,45 +112,45 @@ void botmgrAllocateBot(s32 chrnum, s32 aibotnum)
|
||||||
|
|
||||||
switch (g_BotConfigsArray[aibotnum].difficulty) {
|
switch (g_BotConfigsArray[aibotnum].difficulty) {
|
||||||
case BOTDIFF_MEAT:
|
case BOTDIFF_MEAT:
|
||||||
aibot->unk000 = 0;
|
aibot->followchance = 0;
|
||||||
break;
|
break;
|
||||||
case BOTDIFF_EASY:
|
case BOTDIFF_EASY:
|
||||||
aibot->unk000 = 10;
|
aibot->followchance = 10;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
case BOTDIFF_NORMAL:
|
case BOTDIFF_NORMAL:
|
||||||
aibot->unk000 = 20;
|
aibot->followchance = 20;
|
||||||
break;
|
break;
|
||||||
case BOTDIFF_HARD:
|
case BOTDIFF_HARD:
|
||||||
aibot->unk000 = 40;
|
aibot->followchance = 40;
|
||||||
break;
|
break;
|
||||||
case BOTDIFF_PERFECT:
|
case BOTDIFF_PERFECT:
|
||||||
aibot->unk000 = 60;
|
aibot->followchance = 60;
|
||||||
break;
|
break;
|
||||||
case BOTDIFF_DARK:
|
case BOTDIFF_DARK:
|
||||||
aibot->unk000 = 0;
|
aibot->followchance = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
aibot->aibotnum = aibotnum;
|
aibot->aibotnum = aibotnum;
|
||||||
aibot->unk064 = 0;
|
aibot->unk064 = 0;
|
||||||
aibot->fetchprop = NULL;
|
aibot->gotoprop = NULL;
|
||||||
aibot->unk02c[0] = 0;
|
aibot->timeuntilreload60[0] = 0;
|
||||||
aibot->unk02c[1] = 0;
|
aibot->timeuntilreload60[1] = 0;
|
||||||
aibot->unk034 = 0;
|
aibot->throwtimer60 = 0;
|
||||||
aibot->unk040 = 0.0f;
|
aibot->unk040 = 0.0f;
|
||||||
aibot->loadedammo[0] = 0;
|
aibot->loadedammo[0] = 0;
|
||||||
aibot->loadedammo[1] = 0;
|
aibot->loadedammo[1] = 0;
|
||||||
aibot->unk058 = 0;
|
aibot->unk058 = 0;
|
||||||
aibot->unk059 = 0;
|
aibot->unk059 = 0;
|
||||||
aibot->unk05c = 0;
|
aibot->nextbullettimer60[0] = 0;
|
||||||
aibot->unk060 = 0;
|
aibot->nextbullettimer60[1] = 0;
|
||||||
#if !PAL
|
#if !PAL
|
||||||
aibot->unk030 = 301;
|
aibot->unk030 = 301;
|
||||||
#endif
|
#endif
|
||||||
aibot->unk038 = 0;
|
aibot->unk038 = 0;
|
||||||
aibot->unk03e = -1;
|
aibot->punchtimer60[HAND_LEFT] = -1;
|
||||||
aibot->unk03c = 0;
|
aibot->punchtimer60[HAND_RIGHT] = 0;
|
||||||
aibot->attackingplayernum = -1;
|
aibot->attackingplayernum = -1;
|
||||||
aibot->followingplayernum = -1;
|
aibot->followingplayernum = -1;
|
||||||
aibot->dangerouspropnum = -1;
|
aibot->dangerouspropnum = -1;
|
||||||
|
@ -159,7 +159,7 @@ void botmgrAllocateBot(s32 chrnum, s32 aibotnum)
|
||||||
aibot->unk070 = 0.0f;
|
aibot->unk070 = 0.0f;
|
||||||
aibot->distmode = -1;
|
aibot->distmode = -1;
|
||||||
aibot->lastkilledbyplayernum = -1;
|
aibot->lastkilledbyplayernum = -1;
|
||||||
aibot->unk114 = -1;
|
aibot->feudplayernum = -1;
|
||||||
aibot->command = AIBOTCMD_NORMAL;
|
aibot->command = AIBOTCMD_NORMAL;
|
||||||
aibot->unk098 = 0.0f;
|
aibot->unk098 = 0.0f;
|
||||||
|
|
||||||
|
@ -169,35 +169,35 @@ void botmgrAllocateBot(s32 chrnum, s32 aibotnum)
|
||||||
|
|
||||||
aibot->weaponnum = WEAPON_UNARMED;
|
aibot->weaponnum = WEAPON_UNARMED;
|
||||||
|
|
||||||
aibot->unk04d[0] = 0;
|
aibot->burstsdone[0] = 0;
|
||||||
aibot->unk04d[1] = 0;
|
aibot->burstsdone[1] = 0;
|
||||||
aibot->skrocket = NULL;
|
aibot->skrocket = NULL;
|
||||||
aibot->unk0a0 = 0;
|
aibot->unk0a0 = 0;
|
||||||
|
|
||||||
aibot->gunfunc = 0;
|
aibot->gunfunc = FUNC_PRIMARY;
|
||||||
aibot->iscloserangeweapon = true;
|
aibot->iscloserangeweapon = true;
|
||||||
aibot->teamisonlyai = 0;
|
aibot->teamisonlyai = false;
|
||||||
aibot->unk09c_00 = 0;
|
aibot->hasbriefcase = false;
|
||||||
aibot->unk09c_01 = 0;
|
aibot->hascase = false;
|
||||||
aibot->cloakdeviceenabled = false;
|
aibot->cloakdeviceenabled = false;
|
||||||
aibot->rcp120cloakenabled = false;
|
aibot->rcp120cloakenabled = false;
|
||||||
aibot->unk04c_04 = 0;
|
aibot->unk04c_04 = false;
|
||||||
aibot->unk04c_03 = 0;
|
aibot->unk04c_03 = false;
|
||||||
aibot->unk04c_05 = 0;
|
aibot->hasuplink = false;
|
||||||
aibot->unk04c_00 = 0;
|
aibot->unk04c_00 = false;
|
||||||
|
|
||||||
aibot->unk048 = -1;
|
aibot->unk048 = -1;
|
||||||
aibot->unk04a = -1;
|
aibot->unk04a = -1;
|
||||||
|
|
||||||
aibot->unk0bc = -1;
|
aibot->lastknownhill = -1;
|
||||||
aibot->unk0c4[HAND_LEFT] = 0;
|
aibot->cyclonedischarging[HAND_LEFT] = false;
|
||||||
aibot->unk0c4[HAND_RIGHT] = 0;
|
aibot->cyclonedischarging[HAND_RIGHT] = false;
|
||||||
aibot->unk0cc = 0;
|
aibot->changeguntimer60 = 0;
|
||||||
aibot->distmodettl60 = 0;
|
aibot->distmodettl60 = 0;
|
||||||
aibot->unk0d8 = 0;
|
aibot->forcemainloop = false;
|
||||||
aibot->unk0dc = 0;
|
aibot->returntodefendtimer60 = 0;
|
||||||
aibot->unk0e0[HAND_LEFT] = 0;
|
aibot->reaperspeed[HAND_LEFT] = 0;
|
||||||
aibot->unk0e0[HAND_RIGHT] = 0;
|
aibot->reaperspeed[HAND_RIGHT] = 0;
|
||||||
aibot->maulercharge[HAND_LEFT] = 0.0f;
|
aibot->maulercharge[HAND_LEFT] = 0.0f;
|
||||||
aibot->maulercharge[HAND_RIGHT] = 0.0f;
|
aibot->maulercharge[HAND_RIGHT] = 0.0f;
|
||||||
aibot->unk0a4 = model0001ae44(chr->model);
|
aibot->unk0a4 = model0001ae44(chr->model);
|
||||||
|
@ -210,8 +210,8 @@ void botmgrAllocateBot(s32 chrnum, s32 aibotnum)
|
||||||
aibot->shotspeed.x = 0.0f;
|
aibot->shotspeed.x = 0.0f;
|
||||||
aibot->shotspeed.y = 0.0f;
|
aibot->shotspeed.y = 0.0f;
|
||||||
aibot->shotspeed.z = 0.0f;
|
aibot->shotspeed.z = 0.0f;
|
||||||
aibot->unk118 = 0;
|
aibot->commandtimer60 = 0;
|
||||||
aibot->targethotness = 0;
|
aibot->shootdelaytimer60 = 0;
|
||||||
aibot->targetlastseen60 = -1;
|
aibot->targetlastseen60 = -1;
|
||||||
aibot->lastseenanytarget60 = -1;
|
aibot->lastseenanytarget60 = -1;
|
||||||
aibot->targetinsight = false;
|
aibot->targetinsight = false;
|
||||||
|
@ -232,10 +232,10 @@ void botmgrAllocateBot(s32 chrnum, s32 aibotnum)
|
||||||
aibot->unk1d0 = 0;
|
aibot->unk1d0 = 0;
|
||||||
aibot->unk1d4 = 0.0f;
|
aibot->unk1d4 = 0.0f;
|
||||||
aibot->unk1e4 = -1;
|
aibot->unk1e4 = -1;
|
||||||
aibot->unk1e8 = 0;
|
aibot->waypoints[0] = NULL;
|
||||||
aibot->unk208 = 0;
|
aibot->unk208 = 0;
|
||||||
aibot->rand = random();
|
aibot->random1 = random();
|
||||||
aibot->randttl60 = 0;
|
aibot->random1ttl60 = 0;
|
||||||
|
|
||||||
for (i = 0; i < 6; i++) {
|
for (i = 0; i < 6; i++) {
|
||||||
aibot->killsbygunfunc[i][0] = 0.0f;
|
aibot->killsbygunfunc[i][0] = 0.0f;
|
||||||
|
@ -254,12 +254,11 @@ void botmgrAllocateBot(s32 chrnum, s32 aibotnum)
|
||||||
aibot->dampensuicidesttl60 = 0;
|
aibot->dampensuicidesttl60 = 0;
|
||||||
aibot->unk2c4 = 0.0f;
|
aibot->unk2c4 = 0.0f;
|
||||||
aibot->targetcloaktimer60 = 0;
|
aibot->targetcloaktimer60 = 0;
|
||||||
|
aibot->canseecloaked = false;
|
||||||
|
|
||||||
aibot->unk09c_03 = 0;
|
aibot->random2ttl60 = 0;
|
||||||
|
aibot->random2 = random();
|
||||||
aibot->unk2cc = 0;
|
aibot->randomfrac = random() * (1.0f / U32_MAX);
|
||||||
aibot->unk2d0 = random();
|
|
||||||
aibot->unk2d4 = random() * (1.0f / U32_MAX);
|
|
||||||
aibot->cheap = false;
|
aibot->cheap = false;
|
||||||
#if VERSION >= VERSION_NTSC_1_0
|
#if VERSION >= VERSION_NTSC_1_0
|
||||||
aibot->unk078 = 0;
|
aibot->unk078 = 0;
|
||||||
|
|
|
@ -5106,11 +5106,11 @@ void chrDie(struct chrdata *chr, s32 aplayernum)
|
||||||
botinvDropAll(chr, chr->aibot->weaponnum);
|
botinvDropAll(chr, chr->aibot->weaponnum);
|
||||||
|
|
||||||
#if VERSION >= VERSION_NTSC_1_0
|
#if VERSION >= VERSION_NTSC_1_0
|
||||||
chr->aibot->unk09c_00 = 0;
|
chr->aibot->hasbriefcase = false;
|
||||||
chr->aibot->unk09c_01 = 0;
|
chr->aibot->hascase = false;
|
||||||
chr->aibot->unk04c_04 = 0;
|
chr->aibot->unk04c_04 = false;
|
||||||
chr->aibot->unk04c_03 = 0;
|
chr->aibot->unk04c_03 = false;
|
||||||
chr->aibot->unk04c_05 = 0;
|
chr->aibot->hasuplink = false;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15639,7 +15639,7 @@ glabel var7f1a9184
|
||||||
// if (chr->aibot
|
// if (chr->aibot
|
||||||
// && chr->aibot->weaponnum == WEAPON_REAPER
|
// && chr->aibot->weaponnum == WEAPON_REAPER
|
||||||
// && chr->aibot->gunfunc == FUNC_PRIMARY) {
|
// && chr->aibot->gunfunc == FUNC_PRIMARY) {
|
||||||
// sp208 = (PALDOWN(90) - chr->aibot->unk0e0[handnum]);
|
// sp208 = (PALDOWN(90) - chr->aibot->reaperspeed[handnum]);
|
||||||
// sp208 *= 1.0f / 1.8f;
|
// sp208 *= 1.0f / 1.8f;
|
||||||
// tickspershot *= sp208 + 1;
|
// tickspershot *= sp208 + 1;
|
||||||
// }
|
// }
|
||||||
|
@ -15731,7 +15731,7 @@ glabel var7f1a9184
|
||||||
// vector.f[2] = cosf(sp200) * cosf(aimangle);
|
// vector.f[2] = cosf(sp200) * cosf(aimangle);
|
||||||
//
|
//
|
||||||
// if (isaibot) {
|
// if (isaibot) {
|
||||||
// bgun0f0a0fac(&vector, chr->aibot->weaponnum, chr->aibot->gunfunc, chr->aibot->unk04d[handnum], botGuessCrouchPos(chr), chr->weapons_held[0] && chr->weapons_held[1]);
|
// bgun0f0a0fac(&vector, chr->aibot->weaponnum, chr->aibot->gunfunc, chr->aibot->burstsdone[handnum], botGuessCrouchPos(chr), chr->weapons_held[0] && chr->weapons_held[1]);
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
|
@ -21792,7 +21792,7 @@ bool chrIsTargetInFov(struct chrdata *chr, u8 arg1, u8 reverse)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool func0f04911c(struct chrdata *chr, struct coord *pos, u8 arg2)
|
bool chrIsLookingAtPos(struct chrdata *chr, struct coord *pos, u8 arg2)
|
||||||
{
|
{
|
||||||
f32 angle = chrGetAngleToPos(chr, pos);
|
f32 angle = chrGetAngleToPos(chr, pos);
|
||||||
|
|
||||||
|
@ -23671,14 +23671,14 @@ glabel chrAssignCoverByCriteria
|
||||||
// f32 sqdist;
|
// f32 sqdist;
|
||||||
// f32 y = chr->prop->pos.y + 170;
|
// f32 y = chr->prop->pos.y + 170;
|
||||||
// s32 currefdist = refdist;
|
// s32 currefdist = refdist;
|
||||||
// struct prop *fetchprop;
|
// struct prop *gotoprop;
|
||||||
//
|
//
|
||||||
// if (criteria & COVERCRITERIA_DISTTOFETCHPROP) {
|
// if (criteria & COVERCRITERIA_DISTTOFETCHPROP) {
|
||||||
// if (!chr->aibot || !chr->aibot->fetchprop) {
|
// if (!chr->aibot || !chr->aibot->gotoprop) {
|
||||||
// return -1;
|
// return -1;
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// fetchprop = chr->aibot->fetchprop;
|
// gotoprop = chr->aibot->gotoprop;
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// if (chr == NULL) {
|
// if (chr == NULL) {
|
||||||
|
@ -23733,7 +23733,7 @@ glabel chrAssignCoverByCriteria
|
||||||
// } else if (criteria & COVERCRITERIA_DISTTOTARGET) {
|
// } else if (criteria & COVERCRITERIA_DISTTOTARGET) {
|
||||||
// sqdist = coordGetSquaredDistanceToCoord(&target->pos, cover.pos);
|
// sqdist = coordGetSquaredDistanceToCoord(&target->pos, cover.pos);
|
||||||
// } else if (criteria & COVERCRITERIA_DISTTOFETCHPROP) {
|
// } else if (criteria & COVERCRITERIA_DISTTOFETCHPROP) {
|
||||||
// sqdist = coordGetSquaredDistanceToCoord(&fetchprop->pos, cover.pos);
|
// sqdist = coordGetSquaredDistanceToCoord(&gotoprop->pos, cover.pos);
|
||||||
// } else if (userandomdist) {
|
// } else if (userandomdist) {
|
||||||
// sqdist = random() % 0xf000;
|
// sqdist = random() % 0xf000;
|
||||||
// } else {
|
// } else {
|
||||||
|
|
|
@ -906,9 +906,9 @@ void scenarioHtbTick(void)
|
||||||
if (g_ScenarioData.htb.token == NULL) {
|
if (g_ScenarioData.htb.token == NULL) {
|
||||||
for (i = PLAYERCOUNT(); i < g_MpNumChrs; i++) {
|
for (i = PLAYERCOUNT(); i < g_MpNumChrs; i++) {
|
||||||
#if VERSION >= VERSION_NTSC_1_0
|
#if VERSION >= VERSION_NTSC_1_0
|
||||||
if (g_MpAllChrPtrs[i]->prop && g_MpAllChrPtrs[i]->aibot->unk09c_00)
|
if (g_MpAllChrPtrs[i]->prop && g_MpAllChrPtrs[i]->aibot->hasbriefcase)
|
||||||
#else
|
#else
|
||||||
if (g_MpAllChrPtrs[i]->aibot->unk09c_00)
|
if (g_MpAllChrPtrs[i]->aibot->hasbriefcase)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
g_ScenarioData.htb.token = g_MpAllChrPtrs[i]->prop;
|
g_ScenarioData.htb.token = g_MpAllChrPtrs[i]->prop;
|
||||||
|
@ -936,7 +936,7 @@ void scenarioHtbTick(void)
|
||||||
void scenarioHtbCallback14(struct chrdata *chr)
|
void scenarioHtbCallback14(struct chrdata *chr)
|
||||||
{
|
{
|
||||||
if (chr) {
|
if (chr) {
|
||||||
if (chr->aibot->unk09c_00) {
|
if (chr->aibot->hasbriefcase) {
|
||||||
chr->aibot->unk0a0 += g_Vars.lvupdate240;
|
chr->aibot->unk0a0 += g_Vars.lvupdate240;
|
||||||
|
|
||||||
if (chr->aibot->unk0a0 >= PALDOWN(7200)) {
|
if (chr->aibot->unk0a0 >= PALDOWN(7200)) {
|
||||||
|
@ -1413,7 +1413,7 @@ void scenarioCtcInit(void)
|
||||||
|
|
||||||
for (i = 0; i < 4; i++) {
|
for (i = 0; i < 4; i++) {
|
||||||
s32 j;
|
s32 j;
|
||||||
g_ScenarioData.ctc.spawnpadsperteam[i].teamindex = i;
|
g_ScenarioData.ctc.spawnpadsperteam[i].homepad = i;
|
||||||
g_ScenarioData.ctc.spawnpadsperteam[i].numspawnpads = 0;
|
g_ScenarioData.ctc.spawnpadsperteam[i].numspawnpads = 0;
|
||||||
|
|
||||||
for (j = 0; j < 6; j++) {
|
for (j = 0; j < 6; j++) {
|
||||||
|
@ -2496,7 +2496,7 @@ void mpCtcAddPad(s32 *cmd)
|
||||||
s32 i;
|
s32 i;
|
||||||
|
|
||||||
if (cmd[0] == INTROCMD_CASE) {
|
if (cmd[0] == INTROCMD_CASE) {
|
||||||
g_ScenarioData.ctc.spawnpadsperteam[cmd[1]].teamindex = cmd[2];
|
g_ScenarioData.ctc.spawnpadsperteam[cmd[1]].homepad = cmd[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cmd[0] == INTROCMD_CASERESPAWN) {
|
if (cmd[0] == INTROCMD_CASERESPAWN) {
|
||||||
|
@ -4752,7 +4752,7 @@ void func0f182bf4(void)
|
||||||
g_ScenarioData.htm.unk002 = 0;
|
g_ScenarioData.htm.unk002 = 0;
|
||||||
g_ScenarioData.htm.unk138 = 0;
|
g_ScenarioData.htm.unk138 = 0;
|
||||||
g_ScenarioData.htm.unk0d0 = -1;
|
g_ScenarioData.htm.unk0d0 = -1;
|
||||||
g_ScenarioData.htm.unk0d2 = -1;
|
g_ScenarioData.htm.uplinkingplayernum = -1;
|
||||||
g_ScenarioData.htm.unk0d4 = -1;
|
g_ScenarioData.htm.unk0d4 = -1;
|
||||||
g_ScenarioData.htm.unk140 = 0;
|
g_ScenarioData.htm.unk140 = 0;
|
||||||
|
|
||||||
|
@ -5332,7 +5332,7 @@ void scenarioHtmTick(void)
|
||||||
// Check if a simulant is holding it
|
// Check if a simulant is holding it
|
||||||
if (g_ScenarioData.htm.uplink == NULL) {
|
if (g_ScenarioData.htm.uplink == NULL) {
|
||||||
for (i = PLAYERCOUNT(); i < g_MpNumChrs; i++) {
|
for (i = PLAYERCOUNT(); i < g_MpNumChrs; i++) {
|
||||||
if (g_MpAllChrPtrs[i]->aibot->unk04c_05) {
|
if (g_MpAllChrPtrs[i]->aibot->hasuplink) {
|
||||||
g_ScenarioData.htm.uplink = g_MpAllChrPtrs[i]->prop;
|
g_ScenarioData.htm.uplink = g_MpAllChrPtrs[i]->prop;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -9940,7 +9940,7 @@ void mpPrepareScenario(void)
|
||||||
break;
|
break;
|
||||||
case MPSCENARIO_CAPTURETHECASE:
|
case MPSCENARIO_CAPTURETHECASE:
|
||||||
for (i = 0; i < ARRAYCOUNT(g_ScenarioData.ctc.spawnpadsperteam); i++) {
|
for (i = 0; i < ARRAYCOUNT(g_ScenarioData.ctc.spawnpadsperteam); i++) {
|
||||||
g_ScenarioData.ctc.spawnpadsperteam[i].teamindex = -1;
|
g_ScenarioData.ctc.spawnpadsperteam[i].homepad = -1;
|
||||||
g_ScenarioData.ctc.spawnpadsperteam[i].numspawnpads = 0;
|
g_ScenarioData.ctc.spawnpadsperteam[i].numspawnpads = 0;
|
||||||
|
|
||||||
for (j = 0; j < ARRAYCOUNT(g_ScenarioData.ctc.spawnpadsperteam[i].spawnpads); j++) {
|
for (j = 0; j < ARRAYCOUNT(g_ScenarioData.ctc.spawnpadsperteam[i].spawnpads); j++) {
|
||||||
|
@ -12501,7 +12501,7 @@ s32 chrGiveUplink(struct chrdata *chr, struct prop *prop)
|
||||||
if (chr->aibot) {
|
if (chr->aibot) {
|
||||||
propPlayPickupSound(prop, WEAPON_DATAUPLINK);
|
propPlayPickupSound(prop, WEAPON_DATAUPLINK);
|
||||||
botinvGiveSingleWeapon(chr, WEAPON_DATAUPLINK);
|
botinvGiveSingleWeapon(chr, WEAPON_DATAUPLINK);
|
||||||
chr->aibot->unk04c_05 = true;
|
chr->aibot->hasuplink = true;
|
||||||
|
|
||||||
#if VERSION >= VERSION_NTSC_1_0
|
#if VERSION >= VERSION_NTSC_1_0
|
||||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||||
|
|
|
@ -6047,8 +6047,8 @@ void objFree(struct defaultobj *obj, bool freeprop, bool canregen)
|
||||||
s32 i;
|
s32 i;
|
||||||
|
|
||||||
for (i = 0; i < g_MpNumChrs; i++) {
|
for (i = 0; i < g_MpNumChrs; i++) {
|
||||||
if (g_MpAllChrPtrs[i]->aibot && g_MpAllChrPtrs[i]->aibot->fetchprop == obj->prop) {
|
if (g_MpAllChrPtrs[i]->aibot && g_MpAllChrPtrs[i]->aibot->gotoprop == obj->prop) {
|
||||||
g_MpAllChrPtrs[i]->aibot->fetchprop = NULL;
|
g_MpAllChrPtrs[i]->aibot->gotoprop = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -640,6 +640,7 @@
|
||||||
#define COVERFLAG_0020 0x0020
|
#define COVERFLAG_0020 0x0020
|
||||||
#define COVERFLAG_0040 0x0040
|
#define COVERFLAG_0040 0x0040
|
||||||
#define COVERFLAG_0080 0x0080
|
#define COVERFLAG_0080 0x0080
|
||||||
|
#define COVERFLAG_0100 0x0100
|
||||||
|
|
||||||
// L/C/R = left/centered/right
|
// L/C/R = left/centered/right
|
||||||
// big/med/sml is the font size
|
// big/med/sml is the font size
|
||||||
|
@ -3063,6 +3064,7 @@
|
||||||
#define PADFLAG_AIDUCK 0x4000
|
#define PADFLAG_AIDUCK 0x4000
|
||||||
#define PADFLAG_8000 0x8000
|
#define PADFLAG_8000 0x8000
|
||||||
#define PADFLAG_10000 0x10000
|
#define PADFLAG_10000 0x10000
|
||||||
|
#define PADFLAG_20000 0x20000
|
||||||
|
|
||||||
#define PAK010_00 0
|
#define PAK010_00 0
|
||||||
#define PAK010_01 1
|
#define PAK010_01 1
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
#include "data.h"
|
#include "data.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
bool bot0f190260(struct chrdata *chr);
|
bool botIsDizzy(struct chrdata *chr);
|
||||||
void botReset(struct chrdata *chr, u8 respawning);
|
void botReset(struct chrdata *chr, u8 respawning);
|
||||||
void botSpawn(struct chrdata *chr, u8 full);
|
void botSpawn(struct chrdata *chr, u8 full);
|
||||||
void botSpawnAll(void);
|
void botSpawnAll(void);
|
||||||
|
@ -14,7 +14,7 @@ bool botTestPropForPickup(struct prop *prop, struct chrdata *chr);
|
||||||
void botCheckPickups(struct chrdata *chr);
|
void botCheckPickups(struct chrdata *chr);
|
||||||
s32 botGuessCrouchPos(struct chrdata *chr);
|
s32 botGuessCrouchPos(struct chrdata *chr);
|
||||||
bool botApplyMovement(struct chrdata *chr);
|
bool botApplyMovement(struct chrdata *chr);
|
||||||
bool bot0f191638(struct chrdata *chr, bool arg1);
|
bool botIsAboutToAttack(struct chrdata *chr, bool arg1);
|
||||||
s32 botTick(struct prop *prop);
|
s32 botTick(struct prop *prop);
|
||||||
f32 botCalculateMaxSpeed(struct chrdata *chr);
|
f32 botCalculateMaxSpeed(struct chrdata *chr);
|
||||||
|
|
||||||
|
@ -32,8 +32,8 @@ void bot0f192a74(struct chrdata *chr);
|
||||||
bool botPassesPeaceCheck(struct chrdata *botchr, struct chrdata *otherchr);
|
bool botPassesPeaceCheck(struct chrdata *botchr, struct chrdata *otherchr);
|
||||||
bool botPassesCowardCheck(struct chrdata *botchr, struct chrdata *otherchr);
|
bool botPassesCowardCheck(struct chrdata *botchr, struct chrdata *otherchr);
|
||||||
void botChooseGeneralTarget(struct chrdata *chr);
|
void botChooseGeneralTarget(struct chrdata *chr);
|
||||||
void bot0f19369c(struct chrdata *chr, s32 arg1);
|
void botScheduleReload(struct chrdata *chr, s32 handnum);
|
||||||
s32 bot0f1937a4(struct chrdata *chr, s32 arg1);
|
struct prop *botFindPickup(struct chrdata *chr, s32 arg1);
|
||||||
s32 botGetNumOpponentsInHill(struct chrdata *chr);
|
s32 botGetNumOpponentsInHill(struct chrdata *chr);
|
||||||
void botTickUnpaused(struct chrdata *chr);
|
void botTickUnpaused(struct chrdata *chr);
|
||||||
s32 botIsObjCollectable(struct defaultobj *obj);
|
s32 botIsObjCollectable(struct defaultobj *obj);
|
||||||
|
@ -46,15 +46,15 @@ void botApplyProtect(struct chrdata *chr, struct prop *prop);
|
||||||
void botApplyDefend(struct chrdata *chr, struct coord *pos, s16 *room, f32 arg3);
|
void botApplyDefend(struct chrdata *chr, struct coord *pos, s16 *room, f32 arg3);
|
||||||
void botApplyHold(struct chrdata *chr, struct coord *pos, s16 *room, f32 arg3);
|
void botApplyHold(struct chrdata *chr, struct coord *pos, s16 *room, f32 arg3);
|
||||||
void botApplyScenarioCommand(struct chrdata *chr, u32 arg1);
|
void botApplyScenarioCommand(struct chrdata *chr, u32 arg1);
|
||||||
bool botIsFollowing(struct chrdata *leader, struct chrdata *follower);
|
bool botCanFollow(struct chrdata *leader, struct chrdata *follower);
|
||||||
s32 bot0f193530(struct chrdata *chr, f32 range);
|
s32 botFindTeammateToFollow(struct chrdata *chr, f32 range);
|
||||||
bool bot0f194670(struct chrdata *chr);
|
bool bot0f194670(struct chrdata *chr);
|
||||||
s32 bot0f194694(struct chrdata *chr);
|
struct prop *botFindNecessaryPickup(struct chrdata *chr);
|
||||||
s32 bot0f1946b4(struct chrdata *chr);
|
struct prop *botFindUnnecessaryPickup(struct chrdata *chr);
|
||||||
s32 botGetNumPlayerTeammates(struct chrdata *chr);
|
s32 botGetTeamSize(struct chrdata *chr);
|
||||||
s32 botCountByCommand(struct chrdata *self, u32 command, bool includeself);
|
s32 botGetCountInTeamDoingCommand(struct chrdata *self, u32 command, bool includeself);
|
||||||
s32 botIsChrsTokenHeld(struct chrdata *chr);
|
s32 botIsChrsCtcTokenHeld(struct chrdata *chr);
|
||||||
bool bot0f19489c(struct chrdata *chr);
|
bool botShouldReturnCtcToken(struct chrdata *chr);
|
||||||
s32 botGetNumTeammatesDefendingHill(struct chrdata *bot);
|
s32 botGetNumTeammatesDefendingHill(struct chrdata *bot);
|
||||||
void botCheckFetch(struct chrdata *chr);
|
void botCheckFetch(struct chrdata *chr);
|
||||||
|
|
||||||
|
|
|
@ -13,11 +13,11 @@ s32 botactTryRemoveAmmoFromReserve(struct aibot *aibot, s32 weaponnum, s32 funcn
|
||||||
void botactGiveAmmoByWeapon(struct aibot *aibot, s32 weaponnum, s32 funcnum, s32 qty);
|
void botactGiveAmmoByWeapon(struct aibot *aibot, s32 weaponnum, s32 funcnum, s32 qty);
|
||||||
void botactGiveAmmoByType(struct aibot *aibot, u32 ammotype, s32 quantity);
|
void botactGiveAmmoByType(struct aibot *aibot, u32 ammotype, s32 quantity);
|
||||||
bool botactShootFarsight(struct chrdata *chr, s32 arg1, struct coord *arg2, struct coord *arg3);
|
bool botactShootFarsight(struct chrdata *chr, s32 arg1, struct coord *arg2, struct coord *arg3);
|
||||||
bool botactIsWeaponThrowable(u32 weaponnum, bool is_secondary);
|
bool botactIsWeaponThrowable(s32 weaponnum, bool is_secondary);
|
||||||
u32 botactGetProjectileThrowInterval(u32 weapon);
|
u32 botactGetProjectileThrowInterval(u32 weapon);
|
||||||
u32 botactGetWeaponByAmmoType(u32 ammotype);
|
u32 botactGetWeaponByAmmoType(u32 ammotype);
|
||||||
void botact0f19a37c(struct chrdata *chr);
|
void botact0f19a37c(struct chrdata *chr);
|
||||||
s32 botact0f19a60c(s32 weaponnum, s32 funcnum);
|
s32 botactGetShootInterval60(s32 weaponnum, s32 funcnum);
|
||||||
bool botactFindRocketRoute(struct chrdata *chr, struct coord *frompos, struct coord *topos, s16 *fromrooms, s16 *torooms, struct projectile *projectile);
|
bool botactFindRocketRoute(struct chrdata *chr, struct coord *frompos, struct coord *topos, s16 *fromrooms, s16 *torooms, struct projectile *projectile);
|
||||||
void botactGetRocketSpawnPos(u16 padnum, struct coord *pos);
|
void botactGetRocketSpawnPos(u16 padnum, struct coord *pos);
|
||||||
void botactCreateSlayerRocket(struct chrdata *chr);
|
void botactCreateSlayerRocket(struct chrdata *chr);
|
||||||
|
|
|
@ -188,7 +188,7 @@ bool chrIsInTargetsFovX(struct chrdata *chr, u8 fov360);
|
||||||
bool chrIsVerticalAngleToTargetWithin(struct chrdata *chr, u8 arg1);
|
bool chrIsVerticalAngleToTargetWithin(struct chrdata *chr, u8 arg1);
|
||||||
f32 func0f048fcc(struct chrdata *chr, u8 reverse);
|
f32 func0f048fcc(struct chrdata *chr, u8 reverse);
|
||||||
bool chrIsTargetInFov(struct chrdata *chr, u8 arg1, u8 reverse);
|
bool chrIsTargetInFov(struct chrdata *chr, u8 arg1, u8 reverse);
|
||||||
bool func0f04911c(struct chrdata *chr, struct coord *pos, u8 arg2);
|
bool chrIsLookingAtPos(struct chrdata *chr, struct coord *pos, u8 arg2);
|
||||||
f32 chrGetSameFloorDistanceToPad(struct chrdata *chr, s32 pad_id);
|
f32 chrGetSameFloorDistanceToPad(struct chrdata *chr, s32 pad_id);
|
||||||
void chrsClearRefsToPlayer(s32 playernum);
|
void chrsClearRefsToPlayer(s32 playernum);
|
||||||
s32 chrResolveId(struct chrdata *ref, s32 id);
|
s32 chrResolveId(struct chrdata *ref, s32 id);
|
||||||
|
|
|
@ -9,7 +9,7 @@ extern struct mpconfigfull *g_MpCurrentChallengeConfig;
|
||||||
extern struct challenge g_MpChallenges[NUM_CHALLENGES];
|
extern struct challenge g_MpChallenges[NUM_CHALLENGES];
|
||||||
|
|
||||||
bool ai0176(void);
|
bool ai0176(void);
|
||||||
u32 func0f19ab70(void);
|
bool func0f19ab70(s32 room, struct coord *arg1, s32 *arg2, s32 *arg3, s32 *arg4);
|
||||||
void mpDetermineUnlockedFeatures(void);
|
void mpDetermineUnlockedFeatures(void);
|
||||||
void mpPerformSanityChecks(void);
|
void mpPerformSanityChecks(void);
|
||||||
char *mpGetChallengeNameBySlot(s32 slot);
|
char *mpGetChallengeNameBySlot(s32 slot);
|
||||||
|
|
|
@ -407,7 +407,7 @@ struct explosion;
|
||||||
struct prop {
|
struct prop {
|
||||||
/*0x00*/ u8 type;
|
/*0x00*/ u8 type;
|
||||||
/*0x01*/ u8 flags;
|
/*0x01*/ u8 flags;
|
||||||
/*0x02*/ s16 timetoregen; // ticks down
|
/*0x02*/ s16 timetoregen; // 0 when available, ticks down when unavailable
|
||||||
|
|
||||||
/*0x04*/
|
/*0x04*/
|
||||||
union {
|
union {
|
||||||
|
@ -830,24 +830,23 @@ struct waypoint {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct aibot {
|
struct aibot {
|
||||||
/*0x000*/ u8 unk000;
|
/*0x000*/ u8 followchance;
|
||||||
/*0x002*/ s16 aibotnum;
|
/*0x002*/ s16 aibotnum;
|
||||||
/*0x004*/ struct mpbotconfig *config;
|
/*0x004*/ struct mpbotconfig *config;
|
||||||
/*0x008*/ s16 attackingplayernum;
|
/*0x008*/ s16 attackingplayernum;
|
||||||
/*0x00a*/ s16 followingplayernum;
|
/*0x00a*/ s16 followingplayernum;
|
||||||
/*0x00c*/ s16 dangerouspropnum; // index into g_DangerousProps
|
/*0x00c*/ s16 dangerouspropnum; // index into g_DangerousProps
|
||||||
/*0x010*/ struct prop *fetchprop;
|
/*0x010*/ struct prop *gotoprop;
|
||||||
/*0x014*/ struct invitem *items;
|
/*0x014*/ struct invitem *items;
|
||||||
/*0x018*/ s8 maxitems;
|
/*0x018*/ s8 maxitems;
|
||||||
/*0x01c*/ s32 *ammoheld;
|
/*0x01c*/ s32 *ammoheld;
|
||||||
/*0x020*/ s32 weaponnum;
|
/*0x020*/ s32 weaponnum;
|
||||||
/*0x024*/ s32 loadedammo[2]; // amount of ammo in current clip
|
/*0x024*/ s32 loadedammo[2]; // amount of ammo in current clip
|
||||||
/*0x02c*/ s16 unk02c[2];
|
/*0x02c*/ s16 timeuntilreload60[2];
|
||||||
/*0x030*/ u32 unk030; // timer of some sort
|
/*0x030*/ u32 unk030; // timer of some sort
|
||||||
/*0x034*/ u32 unk034;
|
/*0x034*/ s32 throwtimer60;
|
||||||
/*0x038*/ u32 unk038;
|
/*0x038*/ u32 unk038;
|
||||||
/*0x03c*/ u16 unk03c;
|
/*0x03c*/ s16 punchtimer60[2];
|
||||||
/*0x03e*/ s16 unk03e;
|
|
||||||
/*0x040*/ f32 unk040;
|
/*0x040*/ f32 unk040;
|
||||||
/*0x044*/ struct prop *skrocket;
|
/*0x044*/ struct prop *skrocket;
|
||||||
/*0x048*/ s16 unk048;
|
/*0x048*/ s16 unk048;
|
||||||
|
@ -857,24 +856,15 @@ struct aibot {
|
||||||
/*0x04c*/ u8 gunfunc : 1;
|
/*0x04c*/ u8 gunfunc : 1;
|
||||||
/*0x04c*/ u8 unk04c_03 : 1;
|
/*0x04c*/ u8 unk04c_03 : 1;
|
||||||
/*0x04c*/ u8 unk04c_04 : 1;
|
/*0x04c*/ u8 unk04c_04 : 1;
|
||||||
/*0x04c*/ u8 unk04c_05 : 1;
|
/*0x04c*/ u8 hasuplink : 1;
|
||||||
/*0x04c*/ u8 cloakdeviceenabled : 1;
|
/*0x04c*/ u8 cloakdeviceenabled : 1;
|
||||||
/*0x04c*/ u8 unk04c_07 : 1;
|
/*0x04d*/ u8 burstsdone[2];
|
||||||
/*0x04d*/ u8 unk04d[2];
|
|
||||||
/*0x04f*/ u8 teamisonlyai : 1;
|
/*0x04f*/ u8 teamisonlyai : 1;
|
||||||
/*0x04f*/ u8 unk04f_01 : 1;
|
|
||||||
/*0x04f*/ u8 unk04f_02 : 1;
|
|
||||||
/*0x04f*/ u8 unk04f_03 : 1;
|
|
||||||
/*0x04f*/ u8 unk04f_04 : 1;
|
|
||||||
/*0x04f*/ u8 unk04f_05 : 1;
|
|
||||||
/*0x04f*/ u8 unk04f_06 : 1;
|
|
||||||
/*0x04f*/ u8 unk04f_07 : 1;
|
|
||||||
/*0x050*/ struct prop *unk050;
|
/*0x050*/ struct prop *unk050;
|
||||||
/*0x054*/ u32 unk054;
|
/*0x054*/ u32 unk054;
|
||||||
/*0x058*/ u8 unk058; // related to fireslots
|
/*0x058*/ u8 unk058; // related to fireslots
|
||||||
/*0x059*/ u8 unk059;
|
/*0x059*/ u8 unk059;
|
||||||
/*0x05c*/ u32 unk05c;
|
/*0x05c*/ s32 nextbullettimer60[2];
|
||||||
/*0x060*/ u32 unk060;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 0x0001 = has unlimited ammo (darksim?)
|
* 0x0001 = has unlimited ammo (darksim?)
|
||||||
|
@ -891,17 +881,17 @@ struct aibot {
|
||||||
/*0x076*/ s16 lastkilledbyplayernum;
|
/*0x076*/ s16 lastkilledbyplayernum;
|
||||||
/*0x078*/ u8 unk078;
|
/*0x078*/ u8 unk078;
|
||||||
/*0x079*/ u8 command;
|
/*0x079*/ u8 command;
|
||||||
/*0x07a*/ s16 rooms[1];
|
/*0x07a*/ s16 defendholdrooms[1];
|
||||||
/*0x07c*/ u32 unk07c;
|
/*0x07c*/ u32 unk07c;
|
||||||
/*0x080*/ u32 unk080;
|
/*0x080*/ u32 unk080;
|
||||||
/*0x084*/ u32 unk084;
|
/*0x084*/ u32 unk084;
|
||||||
/*0x088*/ u32 unk088;
|
/*0x088*/ u32 unk088;
|
||||||
/*0x08c*/ struct coord defendholdpos;
|
/*0x08c*/ struct coord defendholdpos;
|
||||||
/*0x098*/ f32 unk098;
|
/*0x098*/ f32 unk098;
|
||||||
/*0x09c*/ u8 unk09c_00 : 1;
|
/*0x09c*/ u8 hasbriefcase : 1; // htb
|
||||||
/*0x09c*/ u8 unk09c_01 : 1;
|
/*0x09c*/ u8 hascase : 1; // ctc
|
||||||
/*0x09c*/ u8 rcp120cloakenabled : 1;
|
/*0x09c*/ u8 rcp120cloakenabled : 1;
|
||||||
/*0x09c*/ u8 unk09c_03 : 1;
|
/*0x09c*/ u8 canseecloaked : 1;
|
||||||
/*0x09c*/ u8 unk09c_04 : 1;
|
/*0x09c*/ u8 unk09c_04 : 1;
|
||||||
/*0x09c*/ u8 unk09c_05 : 1;
|
/*0x09c*/ u8 unk09c_05 : 1;
|
||||||
/*0x09c*/ u8 unk09c_06 : 1;
|
/*0x09c*/ u8 unk09c_06 : 1;
|
||||||
|
@ -914,27 +904,22 @@ struct aibot {
|
||||||
/*0x0b0*/ f32 unk0b0; // likely to be the turn angle to 360 degrees, in radians
|
/*0x0b0*/ f32 unk0b0; // likely to be the turn angle to 360 degrees, in radians
|
||||||
/*0x0b4*/ f32 unk0b4;
|
/*0x0b4*/ f32 unk0b4;
|
||||||
/*0x0b8*/ f32 unk0b8;
|
/*0x0b8*/ f32 unk0b8;
|
||||||
/*0x0bc*/ s32 unk0bc;
|
/*0x0bc*/ s32 lastknownhill;
|
||||||
/*0x0c0*/ s32 attackpropnum;
|
/*0x0c0*/ s32 attackpropnum;
|
||||||
/*0x0c4*/ u32 unk0c4[2];
|
/*0x0c4*/ bool cyclonedischarging[2];
|
||||||
/*0x0cc*/ u32 unk0cc; // Timer? Related to weapon switching
|
/*0x0cc*/ s32 changeguntimer60;
|
||||||
/*0x0d0*/ s32 distmodettl60;
|
/*0x0d0*/ s32 distmodettl60;
|
||||||
/*0x0d4*/ s32 followprotectpropnum;
|
/*0x0d4*/ s32 followprotectpropnum;
|
||||||
/*0x0d8*/ s32 unk0d8;
|
/*0x0d8*/ bool forcemainloop;
|
||||||
/*0x0dc*/ u32 unk0dc;
|
/*0x0dc*/ s32 returntodefendtimer60;
|
||||||
/*0x0e0*/ s16 unk0e0[2];
|
/*0x0e0*/ s16 reaperspeed[2];
|
||||||
/*0x0e4*/ f32 maulercharge[2];
|
/*0x0e4*/ f32 maulercharge[2];
|
||||||
/*0x0ec*/ u32 unk0ec;
|
/*0x0ec*/ struct coord gotopos;
|
||||||
/*0x0f0*/ u32 unk0f0;
|
/*0x0f8*/ s16 gotorooms[8];
|
||||||
/*0x0f4*/ u32 unk0f4;
|
|
||||||
/*0x0f8*/ u32 unk0f8;
|
|
||||||
/*0x0fc*/ u32 unk0fc;
|
|
||||||
/*0x100*/ u32 unk100;
|
|
||||||
/*0x104*/ u32 unk104;
|
|
||||||
/*0x108*/ struct coord shotspeed; // "boost" when aibot is shot
|
/*0x108*/ struct coord shotspeed; // "boost" when aibot is shot
|
||||||
/*0x114*/ s32 unk114;
|
/*0x114*/ s32 feudplayernum;
|
||||||
/*0x118*/ u32 unk118;
|
/*0x118*/ s32 commandtimer60;
|
||||||
/*0x11c*/ s32 targethotness; // ticks up when target onscreen, down when offscreen, always >= 0
|
/*0x11c*/ s32 shootdelaytimer60; // ticks up when target onscreen, down when offscreen, always >= 0
|
||||||
/*0x120*/ s32 targetlastseen60;
|
/*0x120*/ s32 targetlastseen60;
|
||||||
/*0x124*/ s32 lastseenanytarget60;
|
/*0x124*/ s32 lastseenanytarget60;
|
||||||
/*0x128*/ bool targetinsight;
|
/*0x128*/ bool targetinsight;
|
||||||
|
@ -950,21 +935,14 @@ struct aibot {
|
||||||
/*0x1cc*/ s32 unk1cc;
|
/*0x1cc*/ s32 unk1cc;
|
||||||
/*0x1d0*/ u32 unk1d0;
|
/*0x1d0*/ u32 unk1d0;
|
||||||
/*0x1d4*/ f32 unk1d4;
|
/*0x1d4*/ f32 unk1d4;
|
||||||
/*0x1d8*/ u32 unk1d8;
|
/*0x1d8*/ s32 abortattacktimer60;
|
||||||
/*0x1dc*/ u32 unk1dc;
|
/*0x1dc*/ bool canbreakdefend;
|
||||||
/*0x1e0*/ u32 unk1e0;
|
/*0x1e0*/ bool canbreakfollow;
|
||||||
/*0x1e4*/ s32 unk1e4;
|
/*0x1e4*/ s32 unk1e4;
|
||||||
/*0x1e8*/ u32 unk1e8;
|
/*0x1e8*/ struct waypoint *waypoints[8];
|
||||||
/*0x1ec*/ u32 unk1ec;
|
|
||||||
/*0x1f0*/ u32 unk1f0;
|
|
||||||
/*0x1f4*/ u32 unk1f4;
|
|
||||||
/*0x1f8*/ u32 unk1f8;
|
|
||||||
/*0x1fc*/ u32 unk1fc;
|
|
||||||
/*0x200*/ u32 unk200;
|
|
||||||
/*0x204*/ u32 unk204;
|
|
||||||
/*0x208*/ s32 unk208;
|
/*0x208*/ s32 unk208;
|
||||||
/*0x20c*/ s32 randttl60;
|
/*0x20c*/ s32 random1ttl60;
|
||||||
/*0x210*/ u32 rand;
|
/*0x210*/ u32 random1;
|
||||||
/*0x214*/ f32 killsbygunfunc[6][2];
|
/*0x214*/ f32 killsbygunfunc[6][2];
|
||||||
/*0x244*/ f32 suicidesbygunfunc[6][2];
|
/*0x244*/ f32 suicidesbygunfunc[6][2];
|
||||||
/*0x274*/ s32 equipdurations60[6][2];
|
/*0x274*/ s32 equipdurations60[6][2];
|
||||||
|
@ -987,9 +965,9 @@ struct aibot {
|
||||||
*/
|
*/
|
||||||
/*0x2c8*/ s32 targetcloaktimer60;
|
/*0x2c8*/ s32 targetcloaktimer60;
|
||||||
|
|
||||||
/*0x2cc*/ u32 unk2cc;
|
/*0x2cc*/ s32 random2ttl60;
|
||||||
/*0x2d0*/ u32 unk2d0;
|
/*0x2d0*/ u32 random2;
|
||||||
/*0x2d4*/ f32 unk2d4;
|
/*0x2d4*/ f32 randomfrac;
|
||||||
/*0x2d8*/ u32 unk2d8;
|
/*0x2d8*/ u32 unk2d8;
|
||||||
/*0x2dc*/ u32 unk2dc;
|
/*0x2dc*/ u32 unk2dc;
|
||||||
};
|
};
|
||||||
|
@ -4796,7 +4774,7 @@ struct scenariodata_htm {
|
||||||
/*0x800ac114*/ s16 padnums[60];
|
/*0x800ac114*/ s16 padnums[60];
|
||||||
/*0x800ac18c*/ struct htmthing unk07c[7]; // only the first element is used?
|
/*0x800ac18c*/ struct htmthing unk07c[7]; // only the first element is used?
|
||||||
/*0x800ac1e0*/ s16 unk0d0;
|
/*0x800ac1e0*/ s16 unk0d0;
|
||||||
/*0x800ac1e2*/ s16 unk0d2;
|
/*0x800ac1e2*/ s16 uplinkingplayernum;
|
||||||
/*0x800ac1e4*/ s32 unk0d4;
|
/*0x800ac1e4*/ s32 unk0d4;
|
||||||
/*0x800ac1e8*/ u32 unk0d8[12];
|
/*0x800ac1e8*/ u32 unk0d8[12];
|
||||||
/*0x800ac218*/ u32 unk108[12];
|
/*0x800ac218*/ u32 unk108[12];
|
||||||
|
@ -4830,7 +4808,7 @@ struct scenariodata_koh {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ctcspawnpadsperteam {
|
struct ctcspawnpadsperteam {
|
||||||
s16 teamindex;
|
s16 homepad;
|
||||||
s16 numspawnpads;
|
s16 numspawnpads;
|
||||||
s16 spawnpads[6];
|
s16 spawnpads[6];
|
||||||
};
|
};
|
||||||
|
@ -5168,15 +5146,15 @@ struct modelstate {
|
||||||
u16 scale;
|
u16 scale;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct simdifficulty {
|
struct botdifficulty {
|
||||||
u8 unk00;
|
u8 shootdelay;
|
||||||
f32 unk04;
|
f32 unk04;
|
||||||
f32 unk08;
|
f32 unk08;
|
||||||
u16 unk0c;
|
u16 unk0c;
|
||||||
f32 unk10;
|
f32 unk10;
|
||||||
f32 unk14;
|
f32 unk14;
|
||||||
f32 unk18;
|
f32 unk18;
|
||||||
s32 blurdrugamount;
|
s32 dizzyamount;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct animtablerow {
|
struct animtablerow {
|
||||||
|
@ -6959,8 +6937,8 @@ struct aibotweaponpreference {
|
||||||
u16 unk08;
|
u16 unk08;
|
||||||
u16 unk0a;
|
u16 unk0a;
|
||||||
u16 unk0c;
|
u16 unk0c;
|
||||||
u16 unk0e_00 : 3;
|
u16 reloaddelay : 3; // in seconds
|
||||||
u16 unk0e_03 : 1;
|
u16 allowpartialreloaddelay : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct handweaponinfo {
|
struct handweaponinfo {
|
||||||
|
|
Loading…
Reference in New Issue