Rename chr array symbols and write chr documentation
This commit is contained in:
parent
54ec3a84f6
commit
7e544a5b6f
|
@ -0,0 +1,65 @@
|
|||
# Characters (chrs)
|
||||
|
||||
Chrs generally represent a person in the game. All of the following have chr structs allocated for them:
|
||||
|
||||
* Human guards and allies
|
||||
* Maians
|
||||
* Skedar
|
||||
* Any players (Joanna/Velvet)
|
||||
* Multiplayer simulants
|
||||
|
||||
Surprisingly, the eyespy also has its own chr struct.
|
||||
|
||||
And lastly, chr structs are allocated for every background (10xx) and environmental (14xx) AI list in the stage. These AI list types don't run in the context of a real chr, but still need a chr struct to save information to. These chrs are referred to as background chrs, or BG chrs. They have no models or positional data and will never be seen in the stage.
|
||||
|
||||
Because BG chrs are very different to regular chrs, they are stored in different arrays.
|
||||
|
||||
## The `g_ChrSlots` Array
|
||||
|
||||
The `g_ChrSlots` array holds an allocation of chr structs which is used for all chrs except BG chrs. Its allocated size is determined when the stage is loaded and is never changed until the stage is unloaded. The array can contain free slots, which can be identified by the chrnum being `-1`. The array is not sorted in any way; free slots can occur anywhere.
|
||||
|
||||
The allocation is:
|
||||
|
||||
* Sum of chrs to be placed in the stage according to its setup file
|
||||
* Plus 1 for the player
|
||||
* Plus however many is needed for a co-op player, co-op buddies or counter-op player
|
||||
* Plus 10 spare
|
||||
|
||||
When the stage is started there will be 10 free slots. When chrs are spawned a slot becomes used, and when corpses are reaped (removed) their slot becomes free. Chrs cannot be spawned if there are no free slots.
|
||||
|
||||
## The `g_Chrnums` and `g_ChrIndexes` Arrays
|
||||
|
||||
These are two arrays which work together to allow the engine to quickly resolve a chr number to its struct.
|
||||
|
||||
* The `g_Chrnums` array is a list of chr numbers, kept in ascending order. It is kept in sync with `g_ChrSlots`, so every used slot in `g_ChrSlots` will have its chrnum in `g_Chrnums`.
|
||||
* The `g_ChrIndexes` array mirrors the `g_Chrnums` array but stores the slot index of the chr struct. Whenever `g_Chrnums` is resorted, `g_ChrIndexes` is also updated with the same movements.
|
||||
|
||||
To resolve a chr number to its struct, the `g_Chrnums` array is bisected until the chrnum is found. The index of that chrnum in the `g_Chrnums` array is then used to grab the `g_ChrIndexes` value. That value is the index into `g_ChrSlots`.
|
||||
|
||||
## The `g_BgChrs` Array
|
||||
|
||||
The `g_BgChrs` array is similar to `g_ChrSlots` in that it stores entire chr structs. Its size is also determined when the stage is loaded.
|
||||
|
||||
The allocation is:
|
||||
|
||||
* Sum of background (10xx) and environmental (14xx) AI lists from the stage's setup file
|
||||
* Plus 1 for something reserved
|
||||
|
||||
There are no free slots in this allocation, and slots are not changed during gameplay. The use of the reserved slot is not yet known.
|
||||
|
||||
## Chr Numbers and Registration
|
||||
|
||||
Registration is the term given when a slot and chrnum are assigned. Likewise, deregistration is the term given for when a chr slot and chrnum are marked as free.
|
||||
|
||||
Chr numbers are signed shorts which means they have a range of -32,768 to 32,767, however anything negative is considered to be a free slot.
|
||||
|
||||
* **0 to 3,999** are for manual allocation (ie. most/all guards)
|
||||
* **4,000 to 4,899** are for BG chrs
|
||||
* **4,900** is the ID of the reserved BG chr
|
||||
* **5,000 to 32,767** are for automatic allocation
|
||||
|
||||
Whenever a chr is registered, a chrnum is automatically generated for it in the 5,000+ range. In most cases the game then assigns a manual chrnum to the chr (from zero onwards). This happens for all placed guards in a setup file. For chrs that spawn during gameplay it's up to the AI list scripting to assign a new chrnum if it wants to.
|
||||
|
||||
When an automatic chrnum is allocated, a "next" global variable is incremented. So if a chr is given chrnum 5010 then is reassigned to a low number, the next chr will be given 5011 even though 5010 is available. For this reason it's common to have the player have a chrnum of 5060 or so when 5000-5059 are not used.
|
||||
|
||||
If you repeatedly kill and spawn enough chrs to reach the 32,767 limit the number will wrap around to 5,000 again. And at this point, the game ensures the automatic chrnum is not in use before assigning it.
|
|
@ -115,9 +115,9 @@ void func0f01e250(void)
|
|||
} while (!done);
|
||||
}
|
||||
|
||||
s32 getNumChrs(void)
|
||||
s32 getNumChrSlots(void)
|
||||
{
|
||||
return g_NumChrsA;
|
||||
return g_NumChrSlots;
|
||||
}
|
||||
|
||||
void chrSetChrnum(struct chrdata *chr, s16 chrnum)
|
||||
|
@ -127,9 +127,9 @@ void chrSetChrnum(struct chrdata *chr, s16 chrnum)
|
|||
s16 tmp;
|
||||
|
||||
// Set the new chrnum
|
||||
for (i = 0; i < g_NumChrsC; i++) {
|
||||
if (g_ChrnumsC[i] == chr->chrnum) {
|
||||
g_ChrnumsC[i] = chrnum;
|
||||
for (i = 0; i < g_NumChrs; i++) {
|
||||
if (g_Chrnums[i] == chr->chrnum) {
|
||||
g_Chrnums[i] = chrnum;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -137,19 +137,19 @@ void chrSetChrnum(struct chrdata *chr, s16 chrnum)
|
|||
|
||||
chr->chrnum = chrnum;
|
||||
|
||||
// Sort the g_ChrnumsC and g_ChrIndexesC arrays
|
||||
// Sort the g_Chrnums and g_ChrIndexes arrays
|
||||
do {
|
||||
modified = false;
|
||||
|
||||
for (i = 0; i < g_NumChrsC - 1; i++) {
|
||||
if (g_ChrnumsC[i] > g_ChrnumsC[i + 1]) {
|
||||
tmp = g_ChrnumsC[i];
|
||||
g_ChrnumsC[i] = g_ChrnumsC[i + 1];
|
||||
g_ChrnumsC[i + 1] = tmp;
|
||||
for (i = 0; i < g_NumChrs - 1; i++) {
|
||||
if (g_Chrnums[i] > g_Chrnums[i + 1]) {
|
||||
tmp = g_Chrnums[i];
|
||||
g_Chrnums[i] = g_Chrnums[i + 1];
|
||||
g_Chrnums[i + 1] = tmp;
|
||||
|
||||
tmp = g_ChrIndexesC[i];
|
||||
g_ChrIndexesC[i] = g_ChrIndexesC[i + 1];
|
||||
g_ChrIndexesC[i + 1] = tmp;
|
||||
tmp = g_ChrIndexes[i];
|
||||
g_ChrIndexes[i] = g_ChrIndexes[i + 1];
|
||||
g_ChrIndexes[i + 1] = tmp;
|
||||
|
||||
modified = true;
|
||||
}
|
||||
|
@ -157,44 +157,44 @@ void chrSetChrnum(struct chrdata *chr, s16 chrnum)
|
|||
} while (modified);
|
||||
}
|
||||
|
||||
void chrInsertToChrsC(s32 chrnum, s32 chrindex)
|
||||
void chrRegister(s32 chrnum, s32 chrindex)
|
||||
{
|
||||
s32 i;
|
||||
s16 tmp;
|
||||
|
||||
for (i = 0; i < g_NumChrsC; i++) {
|
||||
if (g_ChrnumsC[i] > chrnum) {
|
||||
tmp = g_ChrnumsC[i];
|
||||
g_ChrnumsC[i] = chrnum;
|
||||
for (i = 0; i < g_NumChrs; i++) {
|
||||
if (g_Chrnums[i] > chrnum) {
|
||||
tmp = g_Chrnums[i];
|
||||
g_Chrnums[i] = chrnum;
|
||||
chrnum = tmp;
|
||||
|
||||
tmp = g_ChrIndexesC[i];
|
||||
g_ChrIndexesC[i] = chrindex;
|
||||
tmp = g_ChrIndexes[i];
|
||||
g_ChrIndexes[i] = chrindex;
|
||||
chrindex = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
g_ChrnumsC[g_NumChrsC] = chrnum;
|
||||
g_ChrIndexesC[g_NumChrsC] = chrindex;
|
||||
g_NumChrsC++;
|
||||
g_Chrnums[g_NumChrs] = chrnum;
|
||||
g_ChrIndexes[g_NumChrs] = chrindex;
|
||||
g_NumChrs++;
|
||||
}
|
||||
|
||||
void chrRemoveFromChrsC(s32 chrnum)
|
||||
void chrDeregister(s32 chrnum)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < g_NumChrsC; i++) {
|
||||
if (g_ChrnumsC[i] == chrnum) {
|
||||
for (i = 0; i < g_NumChrs; i++) {
|
||||
if (g_Chrnums[i] == chrnum) {
|
||||
s32 j = i + 1;
|
||||
|
||||
while (j < g_NumChrsC) {
|
||||
g_ChrnumsC[i] = g_ChrnumsC[j];
|
||||
g_ChrIndexesC[i] = g_ChrIndexesC[j];
|
||||
while (j < g_NumChrs) {
|
||||
g_Chrnums[i] = g_Chrnums[j];
|
||||
g_ChrIndexes[i] = g_ChrIndexes[j];
|
||||
i++;
|
||||
j++;
|
||||
}
|
||||
|
||||
g_NumChrsC--;
|
||||
g_NumChrs--;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -2248,13 +2248,13 @@ glabel var7f1a8720
|
|||
/* f020534: 24020001 */ addiu $v0,$zero,0x1
|
||||
);
|
||||
|
||||
s32 chrsGetNumFree(void)
|
||||
s32 getNumFreeChrSlots(void)
|
||||
{
|
||||
s32 count = 0;
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < g_NumChrsA; i++) {
|
||||
if (g_ChrsA[i].chrnum < 0) {
|
||||
for (i = 0; i < g_NumChrSlots; i++) {
|
||||
if (g_ChrSlots[i].chrnum < 0) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
@ -2286,22 +2286,22 @@ f32 chrGetArmor(struct chrdata *chr)
|
|||
return 0;
|
||||
}
|
||||
|
||||
s16 getLowestUnusedChrId(void)
|
||||
s16 getNextUnusedChrnum(void)
|
||||
{
|
||||
s32 chr_id;
|
||||
s32 chrnum;
|
||||
struct chrdata *chr;
|
||||
|
||||
do {
|
||||
chr_id = ++g_NextChrId;
|
||||
chrnum = ++g_NextChrnum;
|
||||
|
||||
if (chr_id > 32767) {
|
||||
chr_id = g_NextChrId = 5000;
|
||||
if (chrnum > 32767) {
|
||||
chrnum = g_NextChrnum = 5000;
|
||||
}
|
||||
|
||||
chr = chrFindByLiteralId((s16)chr_id);
|
||||
chr = chrFindByLiteralId((s16)chrnum);
|
||||
} while (chr);
|
||||
|
||||
return chr_id;
|
||||
return chrnum;
|
||||
}
|
||||
|
||||
void chrInit(struct prop *prop, u8 *ailist)
|
||||
|
@ -2309,16 +2309,16 @@ void chrInit(struct prop *prop, u8 *ailist)
|
|||
s32 i;
|
||||
struct chrdata *chr = NULL;
|
||||
|
||||
for (i = 0; i < g_NumChrsA; i++) {
|
||||
if (g_ChrsA[i].chrnum < 0) {
|
||||
chr = &g_ChrsA[i];
|
||||
for (i = 0; i < g_NumChrSlots; i++) {
|
||||
if (g_ChrSlots[i].chrnum < 0) {
|
||||
chr = &g_ChrSlots[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
prop->chr = chr;
|
||||
chr->chrnum = getLowestUnusedChrId();
|
||||
chrInsertToChrsC(chr->chrnum, i);
|
||||
chr->chrnum = getNextUnusedChrnum();
|
||||
chrRegister(chr->chrnum, i);
|
||||
|
||||
chr->headnum = 0;
|
||||
chr->bodynum = 0;
|
||||
|
@ -2638,7 +2638,7 @@ void func0f020d44(struct prop *prop, bool removechr)
|
|||
chr->model = NULL;
|
||||
|
||||
if (removechr) {
|
||||
chrRemoveFromChrsC(chr->chrnum);
|
||||
chrDeregister(chr->chrnum);
|
||||
|
||||
if (chr->cover != -1) {
|
||||
coverSetFlag0002(chr->cover, false);
|
||||
|
@ -2671,13 +2671,13 @@ void propClearReferences(s32 propnum)
|
|||
s32 j;
|
||||
struct prop *prop = &g_Vars.props[propnum];
|
||||
|
||||
for (i = 0; i < g_NumChrsA; i++) {
|
||||
if (g_ChrsA[i].target == propnum) {
|
||||
if (propGetIndexByChrId(&g_ChrsA[i], g_ChrsA[i].chrpreset1) == propnum) {
|
||||
g_ChrsA[i].chrpreset1 = -1;
|
||||
for (i = 0; i < g_NumChrSlots; i++) {
|
||||
if (g_ChrSlots[i].target == propnum) {
|
||||
if (propGetIndexByChrId(&g_ChrSlots[i], g_ChrSlots[i].chrpreset1) == propnum) {
|
||||
g_ChrSlots[i].chrpreset1 = -1;
|
||||
}
|
||||
|
||||
g_ChrsA[i].target = -1;
|
||||
g_ChrSlots[i].target = -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2700,9 +2700,9 @@ void func0f0211a8(f32 arg0)
|
|||
|
||||
var80062968 = arg0;
|
||||
|
||||
for (i = 0; i < g_NumChrsA; i++) {
|
||||
if (g_ChrsA[i].model) {
|
||||
modelSetAnimPlaySpeed(g_ChrsA[i].model, var80062968, 600);
|
||||
for (i = 0; i < g_NumChrSlots; i++) {
|
||||
if (g_ChrSlots[i].model) {
|
||||
modelSetAnimPlaySpeed(g_ChrSlots[i].model, var80062968, 600);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -10167,23 +10167,23 @@ void func0f028590(f32 arg0)
|
|||
s32 i;
|
||||
f32 add = 0.075f;
|
||||
|
||||
for (i = 0; i < g_NumChrsA; i++) {
|
||||
if (g_ChrsA[i].model) {
|
||||
struct prop *prop = g_ChrsA[i].prop;
|
||||
for (i = 0; i < g_NumChrSlots; i++) {
|
||||
if (g_ChrSlots[i].model) {
|
||||
struct prop *prop = g_ChrSlots[i].prop;
|
||||
|
||||
if (prop && prop->type == PROPTYPE_CHR &&
|
||||
chrGetTargetProp(&g_ChrsA[i]) == g_Vars.currentplayer->prop) {
|
||||
chrGetTargetProp(&g_ChrSlots[i]) == g_Vars.currentplayer->prop) {
|
||||
|
||||
f32 distance = chrGetDistanceToCurrentPlayer(&g_ChrsA[i]);
|
||||
f32 distance = chrGetDistanceToCurrentPlayer(&g_ChrSlots[i]);
|
||||
|
||||
if (distance == 0) {
|
||||
distance = 2;
|
||||
} else {
|
||||
distance = (arg0 * 100 * g_ChrsA[i].hearingscale * (1.0f + add)) / distance;
|
||||
distance = (arg0 * 100 * g_ChrSlots[i].hearingscale * (1.0f + add)) / distance;
|
||||
}
|
||||
|
||||
if (distance > 1.0f) {
|
||||
chrRecordLastHearTargetTime(&g_ChrsA[i]);
|
||||
chrRecordLastHearTargetTime(&g_ChrSlots[i]);
|
||||
#if PIRACYCHECKS
|
||||
{
|
||||
s32 *i = (s32 *)&func00002078;
|
||||
|
@ -10210,17 +10210,17 @@ void func0f028590(f32 arg0)
|
|||
struct chrdata *chrFindByLiteralId(s32 chrnum)
|
||||
{
|
||||
s32 lower = 0;
|
||||
s32 upper = g_NumChrsC;
|
||||
s32 upper = g_NumChrs;
|
||||
s32 i;
|
||||
|
||||
while (upper >= lower) {
|
||||
i = (lower + upper) / 2;
|
||||
|
||||
if (chrnum == g_ChrnumsC[i]) {
|
||||
return &g_ChrsA[g_ChrIndexesC[i]];
|
||||
if (chrnum == g_Chrnums[i]) {
|
||||
return &g_ChrSlots[g_ChrIndexes[i]];
|
||||
}
|
||||
|
||||
if (chrnum < g_ChrnumsC[i]) {
|
||||
if (chrnum < g_Chrnums[i]) {
|
||||
upper = i - 1;
|
||||
} else {
|
||||
lower = i + 1;
|
||||
|
|
|
@ -12855,7 +12855,7 @@ void chrAlertOthersOfInjury(struct chrdata *chr, bool dying)
|
|||
{
|
||||
s32 index = 0;
|
||||
s32 numinrange = 0;
|
||||
s32 numchrs = getNumChrs();
|
||||
s32 numchrs = getNumChrSlots();
|
||||
|
||||
if (g_Vars.antiplayernum >= 0 && chr->prop == g_Vars.anti->prop) {
|
||||
return;
|
||||
|
@ -12870,7 +12870,7 @@ void chrAlertOthersOfInjury(struct chrdata *chr, bool dying)
|
|||
}
|
||||
|
||||
for (; index < numchrs && numinrange < 7; index++) {
|
||||
struct chrdata *loopchr = &g_ChrsA[index];
|
||||
struct chrdata *loopchr = &g_ChrSlots[index];
|
||||
|
||||
if (loopchr->model && loopchr->prop && (loopchr->prop->flags & PROPFLAG_TANGIBLE)) {
|
||||
f32 xdiff = loopchr->prop->pos.x - chr->prop->pos.x;
|
||||
|
@ -23473,9 +23473,9 @@ void func0f0482cc(u32 ailistid)
|
|||
prop = prop->next;
|
||||
}
|
||||
|
||||
g_ChrsB[g_NumChrsB - 1].ailist = ailistFindById(ailistid);
|
||||
g_ChrsB[g_NumChrsB - 1].aioffset = 0;
|
||||
g_ChrsB[g_NumChrsB - 1].aireturnlist = -1;
|
||||
g_BgChrs[g_NumBgChrs - 1].ailist = ailistFindById(ailistid);
|
||||
g_BgChrs[g_NumBgChrs - 1].aioffset = 0;
|
||||
g_BgChrs[g_NumBgChrs - 1].aireturnlist = -1;
|
||||
}
|
||||
|
||||
u32 var80068454 = 0;
|
||||
|
@ -23494,7 +23494,7 @@ glabel func0f048398
|
|||
/* f0483b4: afb30024 */ sw $s3,0x24($sp)
|
||||
/* f0483b8: afb20020 */ sw $s2,0x20($sp)
|
||||
/* f0483bc: afb1001c */ sw $s1,0x1c($sp)
|
||||
/* f0483c0: 0fc07934 */ jal getNumChrs
|
||||
/* f0483c0: 0fc07934 */ jal getNumChrSlots
|
||||
/* f0483c4: afb00018 */ sw $s0,0x18($sp)
|
||||
/* f0483c8: 3c1e8006 */ lui $s8,%hi(var80062cb0)
|
||||
/* f0483cc: 27de2cb0 */ addiu $s8,$s8,%lo(var80062cb0)
|
||||
|
@ -23518,8 +23518,8 @@ glabel func0f048398
|
|||
/* f048414: 24170006 */ addiu $s7,$zero,0x6
|
||||
/* f048418: 24140003 */ addiu $s4,$zero,0x3
|
||||
.L0f04841c:
|
||||
/* f04841c: 3c0f8006 */ lui $t7,%hi(g_ChrsA)
|
||||
/* f048420: 8def2988 */ lw $t7,%lo(g_ChrsA)($t7)
|
||||
/* f04841c: 3c0f8006 */ lui $t7,%hi(g_ChrSlots)
|
||||
/* f048420: 8def2988 */ lw $t7,%lo(g_ChrSlots)($t7)
|
||||
/* f048424: 026f8021 */ addu $s0,$s3,$t7
|
||||
/* f048428: 8e180020 */ lw $t8,0x20($s0)
|
||||
/* f04842c: 5300004b */ beqzl $t8,.L0f04855c
|
||||
|
@ -23643,15 +23643,15 @@ glabel func0f048398
|
|||
/* f0485d4: 240c0001 */ addiu $t4,$zero,0x1
|
||||
/* f0485d8: a02ca493 */ sb $t4,%lo(g_Vars+0x4d3)($at)
|
||||
.L0f0485dc:
|
||||
/* f0485dc: 3c038006 */ lui $v1,%hi(g_NumChrsB)
|
||||
/* f0485e0: 8c637e60 */ lw $v1,%lo(g_NumChrsB)($v1)
|
||||
/* f0485dc: 3c038006 */ lui $v1,%hi(g_NumBgChrs)
|
||||
/* f0485e0: 8c637e60 */ lw $v1,%lo(g_NumBgChrs)($v1)
|
||||
/* f0485e4: 00009825 */ or $s3,$zero,$zero
|
||||
/* f0485e8: 18600013 */ blez $v1,.L0f048638
|
||||
.L0f0485ec:
|
||||
/* f0485ec: 3c0d800a */ lui $t5,%hi(g_Vars+0x4d3)
|
||||
/* f0485f0: 81ada493 */ lb $t5,%lo(g_Vars+0x4d3)($t5)
|
||||
/* f0485f4: 3c028006 */ lui $v0,%hi(g_ChrsB)
|
||||
/* f0485f8: 8c427e58 */ lw $v0,%lo(g_ChrsB)($v0)
|
||||
/* f0485f4: 3c028006 */ lui $v0,%hi(g_BgChrs)
|
||||
/* f0485f8: 8c427e58 */ lw $v0,%lo(g_BgChrs)($v0)
|
||||
/* f0485fc: 11a00005 */ beqz $t5,.L0f048614
|
||||
/* f048600: 00537021 */ addu $t6,$v0,$s3
|
||||
/* f048604: 95cf0192 */ lhu $t7,0x192($t6)
|
||||
|
@ -23661,8 +23661,8 @@ glabel func0f048398
|
|||
.L0f048614:
|
||||
/* f048614: 0fc11f20 */ jal chrTick
|
||||
/* f048618: 02622021 */ addu $a0,$s3,$v0
|
||||
/* f04861c: 3c038006 */ lui $v1,%hi(g_NumChrsB)
|
||||
/* f048620: 8c637e60 */ lw $v1,%lo(g_NumChrsB)($v1)
|
||||
/* f04861c: 3c038006 */ lui $v1,%hi(g_NumBgChrs)
|
||||
/* f048620: 8c637e60 */ lw $v1,%lo(g_NumBgChrs)($v1)
|
||||
/* f048624: 26b50001 */ addiu $s5,$s5,0x1
|
||||
.L0f048628:
|
||||
/* f048628: 02a3082a */ slt $at,$s5,$v1
|
||||
|
@ -23678,8 +23678,8 @@ glabel func0f048398
|
|||
/* f04864c: 24170005 */ addiu $s7,$zero,0x5
|
||||
/* f048650: 27b1007c */ addiu $s1,$sp,0x7c
|
||||
.L0f048654:
|
||||
/* f048654: 3c088006 */ lui $t0,%hi(g_ChrsA)
|
||||
/* f048658: 8d082988 */ lw $t0,%lo(g_ChrsA)($t0)
|
||||
/* f048654: 3c088006 */ lui $t0,%hi(g_ChrSlots)
|
||||
/* f048658: 8d082988 */ lw $t0,%lo(g_ChrSlots)($t0)
|
||||
/* f04865c: 02682021 */ addu $a0,$s3,$t0
|
||||
/* f048660: 8c890020 */ lw $t1,0x20($a0)
|
||||
/* f048664: 51200046 */ beqzl $t1,.L0f048780
|
||||
|
@ -23800,8 +23800,8 @@ glabel func0f048398
|
|||
/* f048804: 00009825 */ or $s3,$zero,$zero
|
||||
/* f048808: 27b400a4 */ addiu $s4,$sp,0xa4
|
||||
.L0f04880c:
|
||||
/* f04880c: 3c0e8006 */ lui $t6,%hi(g_ChrsA)
|
||||
/* f048810: 8dce2988 */ lw $t6,%lo(g_ChrsA)($t6)
|
||||
/* f04880c: 3c0e8006 */ lui $t6,%hi(g_ChrSlots)
|
||||
/* f048810: 8dce2988 */ lw $t6,%lo(g_ChrSlots)($t6)
|
||||
/* f048814: 026e2021 */ addu $a0,$s3,$t6
|
||||
/* f048818: 8c8d0020 */ lw $t5,0x20($a0)
|
||||
/* f04881c: 51a0006d */ beqzl $t5,.L0f0489d4
|
||||
|
@ -23945,7 +23945,7 @@ glabel func0f048398
|
|||
// Mismatch because it uses the stack differently.
|
||||
//void func0f048398(void)
|
||||
//{
|
||||
// s32 numchrs = getNumChrs(); // e0
|
||||
// s32 numchrs = getNumChrSlots(); // e0
|
||||
// s32 numalivewithpropflag80; // dc
|
||||
// struct chrdata *spb8[10];
|
||||
// struct chrdata *spa4[5]; // a4
|
||||
|
@ -23968,7 +23968,7 @@ glabel func0f048398
|
|||
// // 400
|
||||
// if (g_Vars.normmplayerisrunning == false) {
|
||||
// for (i = 0; i < numchrs; i++) {
|
||||
// struct chrdata *chr = &g_ChrsA[i]; // s0
|
||||
// struct chrdata *chr = &g_ChrSlots[i]; // s0
|
||||
//
|
||||
// if (chr->model && chr->prop && chrIsDead(chr) == false) {
|
||||
// struct prop *targetprop = chrGetTargetProp(chr);
|
||||
|
@ -24017,9 +24017,9 @@ glabel func0f048398
|
|||
// g_Vars.unk0004d3 = 1;
|
||||
// }
|
||||
//
|
||||
// for (i = 0; i < g_NumChrsB; i++) {
|
||||
// if (g_Vars.unk0004d3 == 0 || (g_ChrsB[i].hidden2 & CHRH2FLAG_0010)) {
|
||||
// chrTick(&g_ChrsB[i]);
|
||||
// for (i = 0; i < g_NumBgChrs; i++) {
|
||||
// if (g_Vars.unk0004d3 == 0 || (g_BgChrs[i].hidden2 & CHRH2FLAG_0010)) {
|
||||
// chrTick(&g_BgChrs[i]);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
|
@ -24028,7 +24028,7 @@ glabel func0f048398
|
|||
// s2len = 0;
|
||||
//
|
||||
// for (i = 0; i < numchrs; i++) {
|
||||
// struct chrdata *chr = &g_ChrsA[i];
|
||||
// struct chrdata *chr = &g_ChrSlots[i];
|
||||
//
|
||||
// // 664
|
||||
// if (chr->model && chr->prop) {
|
||||
|
@ -24094,7 +24094,7 @@ glabel func0f048398
|
|||
// s2len = 0;
|
||||
//
|
||||
// for (i = 0; i < numchrs; i++) {
|
||||
// struct chrdata *chr = &g_ChrsA[i];
|
||||
// struct chrdata *chr = &g_ChrSlots[i];
|
||||
//
|
||||
// if (chr->model) {
|
||||
// if (chr->actiontype == ACT_DEAD
|
||||
|
@ -24680,23 +24680,23 @@ void chrsClearRefsToPlayer(s32 playernum)
|
|||
playerpropnum = g_Vars.coop->prop - g_Vars.props;
|
||||
}
|
||||
|
||||
for (i = 0; i < getNumChrs(); i++) {
|
||||
if (g_ChrsA[i].p1p2 == playernum) {
|
||||
g_ChrsA[i].p1p2 = otherplayernum;
|
||||
for (i = 0; i < getNumChrSlots(); i++) {
|
||||
if (g_ChrSlots[i].p1p2 == playernum) {
|
||||
g_ChrSlots[i].p1p2 = otherplayernum;
|
||||
}
|
||||
|
||||
if (g_ChrsA[i].target == playerpropnum) {
|
||||
g_ChrsA[i].target = -1;
|
||||
if (g_ChrSlots[i].target == playerpropnum) {
|
||||
g_ChrSlots[i].target = -1;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < g_NumChrsB; i++) {
|
||||
if (g_ChrsB[i].p1p2 == playernum) {
|
||||
g_ChrsB[i].p1p2 = otherplayernum;
|
||||
for (i = 0; i < g_NumBgChrs; i++) {
|
||||
if (g_BgChrs[i].p1p2 == playernum) {
|
||||
g_BgChrs[i].p1p2 = otherplayernum;
|
||||
}
|
||||
|
||||
if (g_ChrsB[i].target == playerpropnum) {
|
||||
g_ChrsB[i].target = -1;
|
||||
if (g_BgChrs[i].target == playerpropnum) {
|
||||
g_BgChrs[i].target = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24816,16 +24816,16 @@ struct chrdata *chrFindById(struct chrdata *basechr, s32 chrnum)
|
|||
}
|
||||
|
||||
lower = 0;
|
||||
upper = g_NumChrsB;
|
||||
upper = g_NumBgChrs;
|
||||
|
||||
while (upper >= lower) {
|
||||
i = (lower + upper) / 2;
|
||||
|
||||
if (chrnum == g_ChrnumsB[i]) {
|
||||
return &g_ChrsB[i];
|
||||
if (chrnum == g_BgChrnums[i]) {
|
||||
return &g_BgChrs[i];
|
||||
}
|
||||
|
||||
if (chrnum < g_ChrnumsB[i]) {
|
||||
if (chrnum < g_BgChrnums[i]) {
|
||||
upper = i - 1;
|
||||
} else {
|
||||
lower = i + 1;
|
||||
|
@ -26060,7 +26060,7 @@ struct prop *chrSpawnAtCoord(s32 bodynum, s32 headnum, struct coord *pos, s16 *r
|
|||
s16 rooms2[8];
|
||||
s32 stack;
|
||||
|
||||
if (chrsGetNumFree() > 1) {
|
||||
if (getNumFreeChrSlots() > 1) {
|
||||
if (headnum < 0) {
|
||||
headnum = bodyChooseHead(bodynum);
|
||||
}
|
||||
|
@ -26102,20 +26102,20 @@ struct prop *chrSpawnAtCoord(s32 bodynum, s32 headnum, struct coord *pos, s16 *r
|
|||
}
|
||||
|
||||
// Low memory - find a corpse to reap
|
||||
if (chrsGetNumFree() < 4) {
|
||||
if (getNumFreeChrSlots() < 4) {
|
||||
s32 stack2;
|
||||
struct chrdata *replacechr = NULL;
|
||||
s32 startindex = random() % g_NumChrsA;
|
||||
s32 startindex = random() % g_NumChrSlots;
|
||||
s32 index = startindex;
|
||||
|
||||
do {
|
||||
if (g_ChrsA[index].chrnum >= 0 && g_ChrsA[index].model && g_ChrsA[index].prop) {
|
||||
if (g_ChrsA[index].actiontype == ACT_DEAD
|
||||
|| (g_ChrsA[index].actiontype == ACT_DRUGGEDKO && (g_ChrsA[index].chrflags & CHRCFLAG_KEEPCORPSEKO) == 0)) {
|
||||
if (g_ChrSlots[index].chrnum >= 0 && g_ChrSlots[index].model && g_ChrSlots[index].prop) {
|
||||
if (g_ChrSlots[index].actiontype == ACT_DEAD
|
||||
|| (g_ChrSlots[index].actiontype == ACT_DRUGGEDKO && (g_ChrSlots[index].chrflags & CHRCFLAG_KEEPCORPSEKO) == 0)) {
|
||||
// If we've found a chr that's ready to be reaped, great.
|
||||
// Bail out of the loop.
|
||||
if (g_ChrsA[index].act_dead.reaptimer >= 120) {
|
||||
replacechr = &g_ChrsA[index];
|
||||
if (g_ChrSlots[index].act_dead.reaptimer >= 120) {
|
||||
replacechr = &g_ChrSlots[index];
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -26123,12 +26123,12 @@ struct prop *chrSpawnAtCoord(s32 bodynum, s32 headnum, struct coord *pos, s16 *r
|
|||
// last resort, so store them and keep looping in search of
|
||||
// a better chr.
|
||||
if (replacechr == NULL) {
|
||||
replacechr = &g_ChrsA[index];
|
||||
replacechr = &g_ChrSlots[index];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
index = (index + 1) % g_NumChrsA;
|
||||
index = (index + 1) % g_NumChrSlots;
|
||||
} while (index != startindex);
|
||||
|
||||
if (replacechr) {
|
||||
|
@ -27300,20 +27300,20 @@ GLOBAL_ASM(
|
|||
glabel rebuildTeams
|
||||
/* f04cc04: 27bdffc0 */ addiu $sp,$sp,-64
|
||||
/* f04cc08: afbf0014 */ sw $ra,0x14($sp)
|
||||
/* f04cc0c: 0fc07934 */ jal getNumChrs
|
||||
/* f04cc0c: 0fc07934 */ jal getNumChrSlots
|
||||
/* f04cc10: 00000000 */ nop
|
||||
/* f04cc14: 3c0e8007 */ lui $t6,%hi(var8006845c)
|
||||
/* f04cc18: 25ce845c */ addiu $t6,$t6,%lo(var8006845c)
|
||||
/* f04cc1c: 8dc10000 */ lw $at,0x0($t6)
|
||||
/* f04cc20: 27ab0024 */ addiu $t3,$sp,0x24
|
||||
/* f04cc24: 3c0c8006 */ lui $t4,%hi(g_ChrsA)
|
||||
/* f04cc24: 3c0c8006 */ lui $t4,%hi(g_ChrSlots)
|
||||
/* f04cc28: ad610000 */ sw $at,0x0($t3)
|
||||
/* f04cc2c: 8dd90004 */ lw $t9,0x4($t6)
|
||||
/* f04cc30: 3c098006 */ lui $t1,%hi(g_TeamList)
|
||||
/* f04cc34: 00405025 */ or $t2,$v0,$zero
|
||||
/* f04cc38: 24070007 */ addiu $a3,$zero,0x7
|
||||
/* f04cc3c: 25297e64 */ addiu $t1,$t1,%lo(g_TeamList)
|
||||
/* f04cc40: 258c2988 */ addiu $t4,$t4,%lo(g_ChrsA)
|
||||
/* f04cc40: 258c2988 */ addiu $t4,$t4,%lo(g_ChrSlots)
|
||||
/* f04cc44: 00004025 */ or $t0,$zero,$zero
|
||||
/* f04cc48: 241f0008 */ addiu $ra,$zero,0x8
|
||||
/* f04cc4c: 240dfffe */ addiu $t5,$zero,-2
|
||||
|
@ -27374,14 +27374,14 @@ GLOBAL_ASM(
|
|||
glabel rebuildSquadrons
|
||||
/* f04cd04: 27bdffe0 */ addiu $sp,$sp,-32
|
||||
/* f04cd08: afbf001c */ sw $ra,0x1c($sp)
|
||||
/* f04cd0c: 0fc07934 */ jal getNumChrs
|
||||
/* f04cd0c: 0fc07934 */ jal getNumChrSlots
|
||||
/* f04cd10: afb00018 */ sw $s0,0x18($sp)
|
||||
/* f04cd14: 3c0c8006 */ lui $t4,%hi(g_ChrsA)
|
||||
/* f04cd14: 3c0c8006 */ lui $t4,%hi(g_ChrSlots)
|
||||
/* f04cd18: 3c0a8006 */ lui $t2,%hi(g_SquadronList)
|
||||
/* f04cd1c: 00405825 */ or $t3,$v0,$zero
|
||||
/* f04cd20: 2408000f */ addiu $t0,$zero,0xf
|
||||
/* f04cd24: 254a7e68 */ addiu $t2,$t2,%lo(g_SquadronList)
|
||||
/* f04cd28: 258c2988 */ addiu $t4,$t4,%lo(g_ChrsA)
|
||||
/* f04cd28: 258c2988 */ addiu $t4,$t4,%lo(g_ChrSlots)
|
||||
/* f04cd2c: 00004825 */ or $t1,$zero,$zero
|
||||
/* f04cd30: 24100010 */ addiu $s0,$zero,0x10
|
||||
/* f04cd34: 241ffffe */ addiu $ra,$zero,-2
|
||||
|
|
|
@ -4322,7 +4322,7 @@ bool aiDuplicateChr(void)
|
|||
|
||||
if (cloneprop) {
|
||||
clone = cloneprop->chr;
|
||||
chrSetChrnum(clone, getLowestUnusedChrId());
|
||||
chrSetChrnum(clone, getNextUnusedChrnum());
|
||||
chr->chrdup = clone->chrnum;
|
||||
|
||||
srcweapon0prop = chrGetEquippedWeaponProp(chr, 0);
|
||||
|
@ -10913,18 +10913,18 @@ bool aiShowCutsceneChrs(void)
|
|||
s32 i;
|
||||
|
||||
if (show) {
|
||||
for (i = getNumChrs() - 1; i >= 0; i--) {
|
||||
if (g_ChrsA[i].chrnum >= 0 && g_ChrsA[i].prop && (g_ChrsA[i].hidden2 & CHRH2FLAG_0001)) {
|
||||
g_ChrsA[i].hidden2 &= ~CHRH2FLAG_0001;
|
||||
g_ChrsA[i].chrflags &= ~CHRCFLAG_HIDDEN;
|
||||
for (i = getNumChrSlots() - 1; i >= 0; i--) {
|
||||
if (g_ChrSlots[i].chrnum >= 0 && g_ChrSlots[i].prop && (g_ChrSlots[i].hidden2 & CHRH2FLAG_0001)) {
|
||||
g_ChrSlots[i].hidden2 &= ~CHRH2FLAG_0001;
|
||||
g_ChrSlots[i].chrflags &= ~CHRCFLAG_HIDDEN;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (i = getNumChrs() - 1; i >= 0; i--) {
|
||||
if (g_ChrsA[i].chrnum >= 0 && g_ChrsA[i].prop &&
|
||||
(g_ChrsA[i].chrflags & (CHRCFLAG_UNPLAYABLE | CHRCFLAG_HIDDEN)) == 0) {
|
||||
g_ChrsA[i].hidden2 |= CHRH2FLAG_0001;
|
||||
g_ChrsA[i].chrflags |= CHRCFLAG_HIDDEN;
|
||||
for (i = getNumChrSlots() - 1; i >= 0; i--) {
|
||||
if (g_ChrSlots[i].chrnum >= 0 && g_ChrSlots[i].prop &&
|
||||
(g_ChrSlots[i].chrflags & (CHRCFLAG_UNPLAYABLE | CHRCFLAG_HIDDEN)) == 0) {
|
||||
g_ChrSlots[i].hidden2 |= CHRH2FLAG_0001;
|
||||
g_ChrSlots[i].chrflags |= CHRCFLAG_HIDDEN;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,13 +26,13 @@ u32 var80062974 = 0x00000000;
|
|||
u32 var80062978 = 0x00000000;
|
||||
u32 var8006297c = 0;
|
||||
u32 var80062980 = 0;
|
||||
s32 g_NextChrId = 5000;
|
||||
s32 g_NextChrnum = 5000;
|
||||
|
||||
// 80062988
|
||||
struct chrdata *g_ChrsA = NULL;
|
||||
struct chrdata *g_ChrSlots = NULL;
|
||||
|
||||
// 8006298c
|
||||
s32 g_NumChrsA = 0;
|
||||
s32 g_NumChrSlots = 0;
|
||||
|
||||
u32 var80062990 = 0x00000000;
|
||||
u32 var80062994 = 0x00000000;
|
||||
|
@ -1671,9 +1671,9 @@ u32 var80067e50 = (u32) &var80067e48;
|
|||
// 80067e54
|
||||
u32 g_StageFlags = 0;
|
||||
|
||||
struct chrdata *g_ChrsB = NULL;
|
||||
s16 *g_ChrnumsB = NULL;
|
||||
s32 g_NumChrsB = 0;
|
||||
struct chrdata *g_BgChrs = NULL;
|
||||
s16 *g_BgChrnums = NULL;
|
||||
s32 g_NumBgChrs = 0;
|
||||
|
||||
s16 *g_TeamList = NULL;
|
||||
s16 *g_SquadronList = NULL;
|
||||
|
|
|
@ -155,22 +155,22 @@ void explosionAlertChrs(f32 *radius, struct coord *noisepos)
|
|||
s32 *end = (s32 *)&func0f084e58;
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < g_NumChrsA; i++) {
|
||||
if (g_ChrsA[i].model
|
||||
&& chrGetTargetProp(&g_ChrsA[i]) == g_Vars.currentplayer->prop
|
||||
&& g_ChrsA[i].prop
|
||||
&& g_ChrsA[i].prop->type == PROPTYPE_CHR
|
||||
&& (g_ChrsA[i].prop->flags & PROPFLAG_TANGIBLE)) {
|
||||
f32 distance = chrGetDistanceToCoord(&g_ChrsA[i], noisepos);
|
||||
for (i = 0; i < g_NumChrSlots; i++) {
|
||||
if (g_ChrSlots[i].model
|
||||
&& chrGetTargetProp(&g_ChrSlots[i]) == g_Vars.currentplayer->prop
|
||||
&& g_ChrSlots[i].prop
|
||||
&& g_ChrSlots[i].prop->type == PROPTYPE_CHR
|
||||
&& (g_ChrSlots[i].prop->flags & PROPFLAG_TANGIBLE)) {
|
||||
f32 distance = chrGetDistanceToCoord(&g_ChrSlots[i], noisepos);
|
||||
|
||||
if (distance == 0) {
|
||||
distance = 2;
|
||||
} else {
|
||||
distance = (10.0f * *radius * g_ChrsA[i].hearingscale) / distance;
|
||||
distance = (10.0f * *radius * g_ChrSlots[i].hearingscale) / distance;
|
||||
}
|
||||
|
||||
if (distance > 1) {
|
||||
chrRecordLastHearTargetTime(&g_ChrsA[i]);
|
||||
chrRecordLastHearTargetTime(&g_ChrSlots[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,9 +43,9 @@ void func0f00b510(void)
|
|||
var80062974 = 0;
|
||||
var80062978 = 0;
|
||||
var8006297c = 0;
|
||||
g_NextChrId = 5000;
|
||||
g_ChrsA = NULL;
|
||||
g_NumChrsA = 0;
|
||||
g_NextChrnum = 5000;
|
||||
g_ChrSlots = NULL;
|
||||
g_NumChrSlots = 0;
|
||||
|
||||
var80062a8c = malloc(sizeof(struct var80062a8c) * 20, 4);
|
||||
|
||||
|
@ -54,9 +54,9 @@ void func0f00b510(void)
|
|||
}
|
||||
|
||||
var80062a90 = 0;
|
||||
g_NumChrsC = 0;
|
||||
g_ChrnumsC = NULL;
|
||||
g_ChrIndexesC = NULL;
|
||||
g_NumChrs = 0;
|
||||
g_Chrnums = NULL;
|
||||
g_ChrIndexes = NULL;
|
||||
var80062960 = malloc(0x1470, 4);
|
||||
|
||||
for (i = 0; i < 20; i++) {
|
||||
|
@ -72,21 +72,21 @@ void func0f00b62c(s32 numchrs)
|
|||
{
|
||||
s32 i;
|
||||
|
||||
g_NumChrsA = PLAYERCOUNT() + numchrs + 10;
|
||||
g_ChrsA = malloc(ALIGN16(g_NumChrsA * sizeof(struct chrdata)), 4);
|
||||
g_NumChrSlots = PLAYERCOUNT() + numchrs + 10;
|
||||
g_ChrSlots = malloc(ALIGN16(g_NumChrSlots * sizeof(struct chrdata)), 4);
|
||||
|
||||
for (i = 0; i < g_NumChrsA; i++) {
|
||||
g_ChrsA[i].chrnum = -1;
|
||||
g_ChrsA[i].model = NULL;
|
||||
g_ChrsA[i].prop = NULL;
|
||||
for (i = 0; i < g_NumChrSlots; i++) {
|
||||
g_ChrSlots[i].chrnum = -1;
|
||||
g_ChrSlots[i].model = NULL;
|
||||
g_ChrSlots[i].prop = NULL;
|
||||
}
|
||||
|
||||
g_NumChrsC = 0;
|
||||
g_ChrnumsC = malloc(ALIGN16(g_NumChrsA * 2), 4);
|
||||
g_ChrIndexesC = malloc(ALIGN16(g_NumChrsA * 2), 4);
|
||||
g_NumChrs = 0;
|
||||
g_Chrnums = malloc(ALIGN16(g_NumChrSlots * 2), 4);
|
||||
g_ChrIndexes = malloc(ALIGN16(g_NumChrSlots * 2), 4);
|
||||
|
||||
for (i = 0; i < g_NumChrsA; i++) {
|
||||
g_ChrnumsC[i] = -1;
|
||||
g_ChrIndexesC[i] = -1;
|
||||
for (i = 0; i < g_NumChrSlots; i++) {
|
||||
g_Chrnums[i] = -1;
|
||||
g_ChrIndexes[i] = -1;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -379,12 +379,12 @@ glabel func0f00bbc8
|
|||
/* f00bbd0: 27bdf8f0 */ addiu $sp,$sp,-1808
|
||||
/* f00bbd4: 8d450018 */ lw $a1,0x18($t2)
|
||||
/* f00bbd8: afb00018 */ sw $s0,0x18($sp)
|
||||
/* f00bbdc: 3c108006 */ lui $s0,%hi(g_ChrnumsB)
|
||||
/* f00bbe0: 3c078006 */ lui $a3,%hi(g_NumChrsB)
|
||||
/* f00bbe4: 3c088006 */ lui $t0,%hi(g_ChrsB)
|
||||
/* f00bbe8: 25087e58 */ addiu $t0,$t0,%lo(g_ChrsB)
|
||||
/* f00bbec: 24e77e60 */ addiu $a3,$a3,%lo(g_NumChrsB)
|
||||
/* f00bbf0: 26107e5c */ addiu $s0,$s0,%lo(g_ChrnumsB)
|
||||
/* f00bbdc: 3c108006 */ lui $s0,%hi(g_BgChrnums)
|
||||
/* f00bbe0: 3c078006 */ lui $a3,%hi(g_NumBgChrs)
|
||||
/* f00bbe4: 3c088006 */ lui $t0,%hi(g_BgChrs)
|
||||
/* f00bbe8: 25087e58 */ addiu $t0,$t0,%lo(g_BgChrs)
|
||||
/* f00bbec: 24e77e60 */ addiu $a3,$a3,%lo(g_NumBgChrs)
|
||||
/* f00bbf0: 26107e5c */ addiu $s0,$s0,%lo(g_BgChrnums)
|
||||
/* f00bbf4: afbf001c */ sw $ra,0x1c($sp)
|
||||
/* f00bbf8: ad000000 */ sw $zero,0x0($t0)
|
||||
/* f00bbfc: ae000000 */ sw $zero,0x0($s0)
|
||||
|
@ -445,11 +445,11 @@ glabel func0f00bbc8
|
|||
/* f00bcc8: 39c4000f */ xori $a0,$t6,0xf
|
||||
/* f00bccc: 0c0048f2 */ jal malloc
|
||||
/* f00bcd0: 00003025 */ or $a2,$zero,$zero
|
||||
/* f00bcd4: 3c078006 */ lui $a3,%hi(g_NumChrsB)
|
||||
/* f00bcd8: 24e77e60 */ addiu $a3,$a3,%lo(g_NumChrsB)
|
||||
/* f00bcd4: 3c078006 */ lui $a3,%hi(g_NumBgChrs)
|
||||
/* f00bcd8: 24e77e60 */ addiu $a3,$a3,%lo(g_NumBgChrs)
|
||||
/* f00bcdc: 8ce40000 */ lw $a0,0x0($a3)
|
||||
/* f00bce0: 3c088006 */ lui $t0,%hi(g_ChrsB)
|
||||
/* f00bce4: 25087e58 */ addiu $t0,$t0,%lo(g_ChrsB)
|
||||
/* f00bce0: 3c088006 */ lui $t0,%hi(g_BgChrs)
|
||||
/* f00bce4: 25087e58 */ addiu $t0,$t0,%lo(g_BgChrs)
|
||||
/* f00bce8: 0004c840 */ sll $t9,$a0,0x1
|
||||
/* f00bcec: 2724000f */ addiu $a0,$t9,0xf
|
||||
/* f00bcf0: 3498000f */ ori $t8,$a0,0xf
|
||||
|
@ -461,9 +461,9 @@ glabel func0f00bbc8
|
|||
/* f00bd08: 254ad030 */ addiu $t2,$t2,%lo(g_StageSetup)
|
||||
/* f00bd0c: 8d450018 */ lw $a1,0x18($t2)
|
||||
/* f00bd10: ae020000 */ sw $v0,0x0($s0)
|
||||
/* f00bd14: 3c088006 */ lui $t0,%hi(g_ChrsB)
|
||||
/* f00bd14: 3c088006 */ lui $t0,%hi(g_BgChrs)
|
||||
/* f00bd18: 8caf0000 */ lw $t7,0x0($a1)
|
||||
/* f00bd1c: 25087e58 */ addiu $t0,$t0,%lo(g_ChrsB)
|
||||
/* f00bd1c: 25087e58 */ addiu $t0,$t0,%lo(g_BgChrs)
|
||||
/* f00bd20: 8fa603a0 */ lw $a2,0x3a0($sp)
|
||||
/* f00bd24: 8fa9039c */ lw $t1,0x39c($sp)
|
||||
/* f00bd28: 11e00049 */ beqz $t7,.L0f00be50
|
||||
|
|
|
@ -1173,7 +1173,7 @@ glabel var7f1a827c
|
|||
/* f0122b0: 24450394 */ addiu $a1,$v0,0x394
|
||||
/* f0122b4: 0fc30709 */ jal currentPlayerSetCamPropertiesWithRoom
|
||||
/* f0122b8: 24460388 */ addiu $a2,$v0,0x388
|
||||
/* f0122bc: 0fc07934 */ jal getNumChrs
|
||||
/* f0122bc: 0fc07934 */ jal getNumChrSlots
|
||||
/* f0122c0: 00000000 */ nop
|
||||
/* f0122c4: 18400026 */ blez $v0,.L0f012360
|
||||
/* f0122c8: 00402025 */ or $a0,$v0,$zero
|
||||
|
@ -1183,8 +1183,8 @@ glabel var7f1a827c
|
|||
/* f0122d8: 00a42823 */ subu $a1,$a1,$a0
|
||||
/* f0122dc: 00052880 */ sll $a1,$a1,0x2
|
||||
/* f0122e0: 00a42821 */ addu $a1,$a1,$a0
|
||||
/* f0122e4: 3c068006 */ lui $a2,%hi(g_ChrsA)
|
||||
/* f0122e8: 24c62988 */ addiu $a2,$a2,%lo(g_ChrsA)
|
||||
/* f0122e4: 3c068006 */ lui $a2,%hi(g_ChrSlots)
|
||||
/* f0122e8: 24c62988 */ addiu $a2,$a2,%lo(g_ChrSlots)
|
||||
/* f0122ec: 000528c0 */ sll $a1,$a1,0x3
|
||||
/* f0122f0: 00001025 */ or $v0,$zero,$zero
|
||||
/* f0122f4: 24080048 */ addiu $t0,$zero,0x48
|
||||
|
@ -1591,11 +1591,11 @@ glabel var7f1a827c
|
|||
// g_Vars.currentplayer->prop->rooms[1] = -1;
|
||||
// currentPlayerSetCamPropertiesWithRoom(&pos, &g_Vars.currentplayer->unk0394, &g_Vars.currentplayer->unk0388, rooms[0]);
|
||||
//
|
||||
// numchrs = getNumChrs();
|
||||
// numchrs = getNumChrSlots();
|
||||
//
|
||||
// for (i = 0; i < numchrs; i++) {
|
||||
// if (g_ChrsA[i].target == -2) {
|
||||
// g_ChrsA[i].target = g_Vars.currentplayer->prop - g_Vars.props;
|
||||
// if (g_ChrSlots[i].target == -2) {
|
||||
// g_ChrSlots[i].target = g_Vars.currentplayer->prop - g_Vars.props;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
|
|
|
@ -18,14 +18,14 @@ void func0f014f10(void)
|
|||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < g_NumChrsA; i++) {
|
||||
if (g_ChrsA[i].chrnum >= 0
|
||||
&& g_ChrsA[i].prop
|
||||
&& g_ChrsA[i].prop->type == PROPTYPE_CHR) {
|
||||
func0f020d44(g_ChrsA[i].prop, true);
|
||||
func0f0605c4(g_ChrsA[i].prop);
|
||||
propHide(g_ChrsA[i].prop);
|
||||
propFree(g_ChrsA[i].prop);
|
||||
for (i = 0; i < g_NumChrSlots; i++) {
|
||||
if (g_ChrSlots[i].chrnum >= 0
|
||||
&& g_ChrSlots[i].prop
|
||||
&& g_ChrSlots[i].prop->type == PROPTYPE_CHR) {
|
||||
func0f020d44(g_ChrSlots[i].prop, true);
|
||||
func0f0605c4(g_ChrSlots[i].prop);
|
||||
propHide(g_ChrSlots[i].prop);
|
||||
propFree(g_ChrSlots[i].prop);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -852,14 +852,14 @@ glabel chrUnpack
|
|||
/* f02daac: a0c302b1 */ sb $v1,0x2b1($a2)
|
||||
/* f02dab0: 92090029 */ lbu $t1,0x29($s0)
|
||||
.L0f02dab4:
|
||||
/* f02dab4: 3c0d8006 */ lui $t5,%hi(g_ChrsA)
|
||||
/* f02dab4: 3c0d8006 */ lui $t5,%hi(g_ChrSlots)
|
||||
/* f02dab8: 24010368 */ addiu $at,$zero,0x368
|
||||
/* f02dabc: a0c902e3 */ sb $t1,0x2e3($a2)
|
||||
/* f02dac0: 860a0022 */ lh $t2,0x22($s0)
|
||||
/* f02dac4: acca02e4 */ sw $t2,0x2e4($a2)
|
||||
/* f02dac8: 920b002a */ lbu $t3,0x2a($s0)
|
||||
/* f02dacc: a0cb02fc */ sb $t3,0x2fc($a2)
|
||||
/* f02dad0: 8dad2988 */ lw $t5,%lo(g_ChrsA)($t5)
|
||||
/* f02dad0: 8dad2988 */ lw $t5,%lo(g_ChrSlots)($t5)
|
||||
/* f02dad4: 920f002b */ lbu $t7,0x2b($s0)
|
||||
/* f02dad8: 00cd7023 */ subu $t6,$a2,$t5
|
||||
/* f02dadc: 01c1001a */ div $zero,$t6,$at
|
||||
|
@ -969,7 +969,7 @@ struct prop *propAllocateEyespy(struct pad *pad, s16 room)
|
|||
func0f0604bc(prop);
|
||||
propShow(prop);
|
||||
chr = prop->chr;
|
||||
chrSetChrnum(chr, getLowestUnusedChrId());
|
||||
chrSetChrnum(chr, getNextUnusedChrnum());
|
||||
chr->bodynum = BODY_EYESPY;
|
||||
chr->padpreset1 = 0;
|
||||
chr->chrpreset1 = 0;
|
||||
|
|
|
@ -5210,7 +5210,7 @@ glabel func0f064a24
|
|||
/* f064a84: 24010016 */ addiu $at,$zero,0x16
|
||||
/* f064a88: 1441007e */ bne $v0,$at,.L0f064c84
|
||||
/* f064a8c: 00000000 */ nop
|
||||
/* f064a90: 0fc07934 */ jal getNumChrs
|
||||
/* f064a90: 0fc07934 */ jal getNumChrSlots
|
||||
/* f064a94: 00000000 */ nop
|
||||
/* f064a98: 2443ffff */ addiu $v1,$v0,-1
|
||||
/* f064a9c: 04600079 */ bltz $v1,.L0f064c84
|
||||
|
@ -5220,11 +5220,11 @@ glabel func0f064a24
|
|||
/* f064aac: 02639823 */ subu $s3,$s3,$v1
|
||||
/* f064ab0: 00139880 */ sll $s3,$s3,0x2
|
||||
/* f064ab4: 02639821 */ addu $s3,$s3,$v1
|
||||
/* f064ab8: 3c158006 */ lui $s5,%hi(g_ChrsA)
|
||||
/* f064ab8: 3c158006 */ lui $s5,%hi(g_ChrSlots)
|
||||
/* f064abc: 3c12800a */ lui $s2,%hi(g_Vars)
|
||||
/* f064ac0: 4480d000 */ mtc1 $zero,$f26
|
||||
/* f064ac4: 26529fc0 */ addiu $s2,$s2,%lo(g_Vars)
|
||||
/* f064ac8: 26b52988 */ addiu $s5,$s5,%lo(g_ChrsA)
|
||||
/* f064ac8: 26b52988 */ addiu $s5,$s5,%lo(g_ChrSlots)
|
||||
/* f064acc: 001398c0 */ sll $s3,$s3,0x3
|
||||
/* f064ad0: 241e001e */ addiu $s8,$zero,0x1e
|
||||
/* f064ad4: 24170004 */ addiu $s7,$zero,0x4
|
||||
|
|
|
@ -2139,29 +2139,29 @@ void currentPlayerSpawn(void)
|
|||
func0f0b8ba0();
|
||||
}
|
||||
|
||||
for (i = 0; i < getNumChrs(); i++) {
|
||||
if (g_ChrsA[i].model
|
||||
&& g_ChrsA[i].prop
|
||||
&& (g_ChrsA[i].hidden & CHRHFLAG_00400000)
|
||||
&& (g_ChrsA[i].chrflags & CHRCFLAG_HIDDEN) == 0
|
||||
&& g_ChrsA[i].prop->type == PROPTYPE_CHR
|
||||
&& !chrIsDead(&g_ChrsA[i])
|
||||
&& (g_ChrsA[i].prop->flags & PROPFLAG_TANGIBLE)) {
|
||||
for (i = 0; i < getNumChrSlots(); i++) {
|
||||
if (g_ChrSlots[i].model
|
||||
&& g_ChrSlots[i].prop
|
||||
&& (g_ChrSlots[i].hidden & CHRHFLAG_00400000)
|
||||
&& (g_ChrSlots[i].chrflags & CHRCFLAG_HIDDEN) == 0
|
||||
&& g_ChrSlots[i].prop->type == PROPTYPE_CHR
|
||||
&& !chrIsDead(&g_ChrSlots[i])
|
||||
&& (g_ChrSlots[i].prop->flags & PROPFLAG_TANGIBLE)) {
|
||||
if (g_Vars.bond->prop) {
|
||||
xdiff = g_ChrsA[i].prop->pos.x - g_Vars.bond->prop->pos.x;
|
||||
ydiff = g_ChrsA[i].prop->pos.y - g_Vars.bond->prop->pos.y;
|
||||
zdiff = g_ChrsA[i].prop->pos.z - g_Vars.bond->prop->pos.z;
|
||||
xdiff = g_ChrSlots[i].prop->pos.x - g_Vars.bond->prop->pos.x;
|
||||
ydiff = g_ChrSlots[i].prop->pos.y - g_Vars.bond->prop->pos.y;
|
||||
zdiff = g_ChrSlots[i].prop->pos.z - g_Vars.bond->prop->pos.z;
|
||||
} else {
|
||||
xdiff = g_ChrsA[i].prop->pos.x - g_Vars.currentplayer->prop->pos.x;
|
||||
ydiff = g_ChrsA[i].prop->pos.y - g_Vars.currentplayer->prop->pos.y;
|
||||
zdiff = g_ChrsA[i].prop->pos.z - g_Vars.currentplayer->prop->pos.z;
|
||||
xdiff = g_ChrSlots[i].prop->pos.x - g_Vars.currentplayer->prop->pos.x;
|
||||
ydiff = g_ChrSlots[i].prop->pos.y - g_Vars.currentplayer->prop->pos.y;
|
||||
zdiff = g_ChrSlots[i].prop->pos.z - g_Vars.currentplayer->prop->pos.z;
|
||||
}
|
||||
|
||||
sqdist = xdiff * xdiff + ydiff * ydiff + zdiff * zdiff;
|
||||
|
||||
if (g_Vars.lvframenum > 0
|
||||
&& (g_ChrsA[i].hidden & CHRHFLAG_00800000)
|
||||
&& func0f06b39c(&sp78, &sp90, &g_ChrsA[i].prop->pos, func0001af80(g_ChrsA[i].model))
|
||||
&& (g_ChrSlots[i].hidden & CHRHFLAG_00800000)
|
||||
&& func0f06b39c(&sp78, &sp90, &g_ChrSlots[i].prop->pos, func0001af80(g_ChrSlots[i].model))
|
||||
&& (random() % 8)) {
|
||||
sqdist += 1000000;
|
||||
}
|
||||
|
@ -2186,7 +2186,7 @@ void currentPlayerSpawn(void)
|
|||
}
|
||||
|
||||
// Write new sqdist
|
||||
sortedchrs[j] = &g_ChrsA[i];
|
||||
sortedchrs[j] = &g_ChrSlots[i];
|
||||
sorteddists[j] = sqdist;
|
||||
|
||||
if (numsqdists < 9) {
|
||||
|
|
|
@ -139,11 +139,11 @@ void *func0f12955c(s32 count, s32 index, s32 arg2, s32 arg3)
|
|||
// reaping on a random corpose and replace its entry in the array.
|
||||
// So at the end, we'll have an array of up to six unreapable corpses and
|
||||
// all other corpses will be flagged for reaping.
|
||||
numchrs = getNumChrs();
|
||||
numchrs = getNumChrSlots();
|
||||
tally = 0;
|
||||
|
||||
for (i = 0; i < numchrs; i++) {
|
||||
struct chrdata *chr = &g_ChrsA[i];
|
||||
struct chrdata *chr = &g_ChrSlots[i];
|
||||
|
||||
if (chr->model
|
||||
&& chr->prop
|
||||
|
|
|
@ -427,7 +427,7 @@ glabel func0f066310
|
|||
/* f066404: 0000b825 */ or $s7,$zero,$zero
|
||||
/* f066408: 02a09025 */ or $s2,$s5,$zero
|
||||
.L0f06640c:
|
||||
/* f06640c: 0fc07934 */ jal getNumChrs
|
||||
/* f06640c: 0fc07934 */ jal getNumChrSlots
|
||||
/* f066410: 00008025 */ or $s0,$zero,$zero
|
||||
/* f066414: 8e8a006c */ lw $t2,0x6c($s4)
|
||||
/* f066418: 00406025 */ or $t4,$v0,$zero
|
||||
|
@ -506,8 +506,8 @@ glabel func0f066310
|
|||
/* f066510: 00000000 */ nop
|
||||
/* f066514: 1840000f */ blez $v0,.L0f066554
|
||||
/* f066518: 00008025 */ or $s0,$zero,$zero
|
||||
/* f06651c: 3c028006 */ lui $v0,%hi(g_ChrsA)
|
||||
/* f066520: 8c422988 */ lw $v0,%lo(g_ChrsA)($v0)
|
||||
/* f06651c: 3c028006 */ lui $v0,%hi(g_ChrSlots)
|
||||
/* f066520: 8c422988 */ lw $v0,%lo(g_ChrSlots)($v0)
|
||||
.L0f066524:
|
||||
/* f066524: 8c4f001c */ lw $t7,0x1c($v0)
|
||||
/* f066528: 26100001 */ addiu $s0,$s0,0x1
|
||||
|
@ -5826,7 +5826,7 @@ glabel func0f06ad2c
|
|||
/* f06b0cc: 00095280 */ sll $t2,$t1,0xa
|
||||
/* f06b0d0: 05430033 */ bgezl $t2,.L0f06b1a0
|
||||
/* f06b0d4: 8e4e0318 */ lw $t6,0x318($s2)
|
||||
/* f06b0d8: 0fc07934 */ jal getNumChrs
|
||||
/* f06b0d8: 0fc07934 */ jal getNumChrSlots
|
||||
/* f06b0dc: 00000000 */ nop
|
||||
/* f06b0e0: 8e2b0040 */ lw $t3,0x40($s1)
|
||||
/* f06b0e4: 3c01ffdf */ lui $at,0xffdf
|
||||
|
@ -5841,8 +5841,8 @@ glabel func0f06ad2c
|
|||
/* f06b108: 00c23023 */ subu $a2,$a2,$v0
|
||||
/* f06b10c: 00063080 */ sll $a2,$a2,0x2
|
||||
/* f06b110: 00c23021 */ addu $a2,$a2,$v0
|
||||
/* f06b114: 3c048006 */ lui $a0,%hi(g_ChrsA)
|
||||
/* f06b118: 24842988 */ addiu $a0,$a0,%lo(g_ChrsA)
|
||||
/* f06b114: 3c048006 */ lui $a0,%hi(g_ChrSlots)
|
||||
/* f06b118: 24842988 */ addiu $a0,$a0,%lo(g_ChrSlots)
|
||||
/* f06b11c: 000630c0 */ sll $a2,$a2,0x3
|
||||
/* f06b120: 00001825 */ or $v1,$zero,$zero
|
||||
/* f06b124: 24100048 */ addiu $s0,$zero,0x48
|
||||
|
@ -21779,7 +21779,7 @@ glabel var7f1aa580
|
|||
/* f07908c: 10000007 */ b .L0f0790ac
|
||||
/* f079090: 8ca5c530 */ lw $a1,%lo(g_MpNumPlayers)($a1)
|
||||
.L0f079094:
|
||||
/* f079094: 0fc07934 */ jal getNumChrs
|
||||
/* f079094: 0fc07934 */ jal getNumChrSlots
|
||||
/* f079098: afa800ac */ sw $t0,0xac($sp)
|
||||
/* f07909c: 3c09800a */ lui $t1,%hi(g_Vars)
|
||||
/* f0790a0: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
|
||||
|
@ -21793,7 +21793,7 @@ glabel var7f1aa580
|
|||
/* f0790b4: a50a00aa */ sh $t2,0xaa($t0)
|
||||
/* f0790b8: 850300aa */ lh $v1,0xaa($t0)
|
||||
/* f0790bc: 8fad00a8 */ lw $t5,0xa8($sp)
|
||||
/* f0790c0: 3c198006 */ lui $t9,%hi(g_ChrsA)
|
||||
/* f0790c0: 3c198006 */ lui $t9,%hi(g_ChrSlots)
|
||||
/* f0790c4: 0065082a */ slt $at,$v1,$a1
|
||||
/* f0790c8: 14200004 */ bnez $at,.L0f0790dc
|
||||
/* f0790cc: 0003c0c0 */ sll $t8,$v1,0x3
|
||||
|
@ -21834,7 +21834,7 @@ glabel var7f1aa580
|
|||
/* f079154: 1000ffd7 */ b .L0f0790b4
|
||||
/* f079158: 246a0001 */ addiu $t2,$v1,0x1
|
||||
.L0f07915c:
|
||||
/* f07915c: 8f392988 */ lw $t9,%lo(g_ChrsA)($t9)
|
||||
/* f07915c: 8f392988 */ lw $t9,%lo(g_ChrSlots)($t9)
|
||||
/* f079160: 0018c080 */ sll $t8,$t8,0x2
|
||||
/* f079164: 0303c021 */ addu $t8,$t8,$v1
|
||||
/* f079168: 0018c0c0 */ sll $t8,$t8,0x3
|
||||
|
@ -28308,11 +28308,11 @@ s32 objTick(struct prop *prop)
|
|||
tagnum = objGetTagNum(obj);
|
||||
|
||||
if (tagnum >= 0) {
|
||||
numchrs = getNumChrs();
|
||||
numchrs = getNumChrSlots();
|
||||
|
||||
for (i = 0; i < numchrs; i++) {
|
||||
if (g_ChrsA[i].myspecial == tagnum) {
|
||||
g_ChrsA[i].myspecial = -1;
|
||||
if (g_ChrSlots[i].myspecial == tagnum) {
|
||||
g_ChrSlots[i].myspecial = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -41201,7 +41201,7 @@ glabel func0f08acb0
|
|||
/* f08acc0: afb30020 */ sw $s3,0x20($sp)
|
||||
/* f08acc4: afb2001c */ sw $s2,0x1c($sp)
|
||||
/* f08acc8: afb10018 */ sw $s1,0x18($sp)
|
||||
/* f08accc: 0fc07934 */ jal getNumChrs
|
||||
/* f08accc: 0fc07934 */ jal getNumChrSlots
|
||||
/* f08acd0: afb00014 */ sw $s0,0x14($sp)
|
||||
/* f08acd4: 1840002c */ blez $v0,.L0f08ad88
|
||||
/* f08acd8: 00008825 */ or $s1,$zero,$zero
|
||||
|
@ -41211,8 +41211,8 @@ glabel func0f08acb0
|
|||
/* f08ace8: 02a2a823 */ subu $s5,$s5,$v0
|
||||
/* f08acec: 0015a880 */ sll $s5,$s5,0x2
|
||||
/* f08acf0: 02a2a821 */ addu $s5,$s5,$v0
|
||||
/* f08acf4: 3c138006 */ lui $s3,%hi(g_ChrsA)
|
||||
/* f08acf8: 26732988 */ addiu $s3,$s3,%lo(g_ChrsA)
|
||||
/* f08acf4: 3c138006 */ lui $s3,%hi(g_ChrSlots)
|
||||
/* f08acf8: 26732988 */ addiu $s3,$s3,%lo(g_ChrSlots)
|
||||
/* f08acfc: 0015a8c0 */ sll $s5,$s5,0x3
|
||||
/* f08ad00: 27b20040 */ addiu $s2,$sp,0x40
|
||||
/* f08ad04: 8e6e0000 */ lw $t6,0x0($s3)
|
||||
|
|
|
@ -14612,9 +14612,9 @@ u8 *var8009ccb0[2] = {NULL, NULL};
|
|||
u32 var8009ccb8 = 0;
|
||||
u32 var8009ccbc = 0;
|
||||
void *var8009ccc0[20] = {0};
|
||||
s32 g_NumChrsC = 0;
|
||||
s16 *g_ChrnumsC = NULL;
|
||||
s16 *g_ChrIndexesC = NULL;
|
||||
s32 g_NumChrs = 0;
|
||||
s16 *g_Chrnums = NULL;
|
||||
s16 *g_ChrIndexes = NULL;
|
||||
u32 var8009cd1c = 0;
|
||||
s32 g_NumActiveHeadsPerGender = 0;
|
||||
u32 var8009cd24 = 0;
|
||||
|
|
|
@ -5,12 +5,12 @@
|
|||
|
||||
void func0f01e250(void);
|
||||
void chrSetChrnum(struct chrdata *chr, s16 chrnum);
|
||||
void chrRemoveFromChrsC(s32 chrnum);
|
||||
void chrDeregister(s32 chrnum);
|
||||
u32 func0f01e7f4(void);
|
||||
bool func0f01f264(struct chrdata *chr, struct coord *pos, s16 *room, f32 arg3, bool arg4);
|
||||
void func0f01f378(void);
|
||||
s32 chrsGetNumFree(void);
|
||||
s16 getLowestUnusedChrId(void);
|
||||
s32 getNumFreeChrSlots(void);
|
||||
s16 getNextUnusedChrnum(void);
|
||||
struct prop *func0f020b14(struct prop *prop, struct model *model, struct coord *pos, s16 *rooms, f32 arg3, u8 *ailist);
|
||||
void func0f020d44(struct prop *prop, bool removechr);
|
||||
void chrUpdateAimProperties(struct chrdata *chr);
|
||||
|
@ -62,8 +62,8 @@ u32 func0f02bdf8(void);
|
|||
u32 func0f02c6e0(void);
|
||||
u32 func0f02c9b0(void);
|
||||
u32 func0f02ccb4(void);
|
||||
s32 getNumChrs(void);
|
||||
void chrInsertToChrsC(s32 chrnum, s32 chrindex);
|
||||
s32 getNumChrSlots(void);
|
||||
void chrRegister(s32 chrnum, s32 chrindex);
|
||||
void func0f01e760(s32 arg0);
|
||||
void setVar8006297c(u32 arg0);
|
||||
u32 getVar8006297c(void);
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
extern s32 g_StageNum;
|
||||
extern u64 rand_seed;
|
||||
|
||||
extern struct chrdata *g_ChrsA; // pointer to first element of chrs array
|
||||
extern s32 g_NumChrsA;
|
||||
extern struct chrdata *g_ChrSlots; // pointer to first element of chrs array
|
||||
extern s32 g_NumChrSlots;
|
||||
extern u32 var8005ce60;
|
||||
extern u32 var8005ce64;
|
||||
extern u32 var8005ce68;
|
||||
|
|
|
@ -97,7 +97,7 @@ extern u32 var80062974;
|
|||
extern u32 var80062978;
|
||||
extern u32 var8006297c;
|
||||
extern u32 var80062980;
|
||||
extern s32 g_NextChrId;
|
||||
extern s32 g_NextChrnum;
|
||||
extern u32 var80062990;
|
||||
extern u32 var80062998;
|
||||
extern u32 var800629d8;
|
||||
|
@ -171,9 +171,9 @@ extern struct animfloats var80067c08[];
|
|||
extern struct animfloats var80067d28[];
|
||||
extern struct animfloats var80067d70[];
|
||||
extern u32 var80067e50;
|
||||
extern struct chrdata *g_ChrsB;
|
||||
extern s16 *g_ChrnumsB;
|
||||
extern s32 g_NumChrsB;
|
||||
extern struct chrdata *g_BgChrs;
|
||||
extern s16 *g_BgChrnums;
|
||||
extern s32 g_NumBgChrs;
|
||||
extern s16 *g_TeamList;
|
||||
extern s16 *g_SquadronList;
|
||||
extern struct var80067e6c *var80067fdc[5];
|
||||
|
|
|
@ -545,9 +545,9 @@ extern u8 *var8009cca8[2];
|
|||
extern u8 *var8009ccb0[2];
|
||||
extern u32 var8009ccb8;
|
||||
extern void *var8009ccc0[20];
|
||||
extern s32 g_NumChrsC;
|
||||
extern s16 *g_ChrnumsC;
|
||||
extern s16 *g_ChrIndexesC;
|
||||
extern s32 g_NumChrs;
|
||||
extern s16 *g_Chrnums;
|
||||
extern s16 *g_ChrIndexes;
|
||||
extern s32 g_NumActiveHeadsPerGender;
|
||||
extern u32 g_ActiveMaleHeads[8];
|
||||
extern u32 g_ActiveFemaleHeads[8];
|
||||
|
|
Loading…
Reference in New Issue