Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/SB/Core/x/xutil.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,7 @@ U32 xUtil_crc_update(U32 crc_accum, char* data, S32 datasize);
S32 xUtil_yesno(F32 wt_yes);
void xUtil_wtadjust(F32* wts, S32 cnt, F32 arbref);

template <typename T>
T* xUtil_select(T** arg0, S32 arg1, const F32* arg3);

#endif
92 changes: 92 additions & 0 deletions src/SB/Game/zNPCSpawner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -177,3 +177,95 @@ U8 zMovePoint::IsOn()
{
return this->on;
}

st_XORDEREDARRAY* zNPCSpawner::FillPending()
{
ClearPending();
ReFillPending();
return &this->actvlist;
}

st_XORDEREDARRAY* zNPCSpawner::ReFillPending()
{
s32 var_r28;
zNPCCommon* temp_r29;
zNPCSpawner* var_r30;

var_r28 = 0;
var_r30 = this;
do
{
temp_r29 = var_r30->npc_owner;
if (((zNPCCommon*)var_r30->npc_owner != NULL) && ((s32)temp_r29->flg_vuln == 1))
{
XOrdAppend(&this->pendlist, (void*)temp_r29);
temp_r29->flg_vuln = 2;
}
var_r28 += 1;
var_r30 += 0xC;
} while (var_r28 < 0x10);
return &this->actvlist;
Comment on lines +196 to +207
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is probably some sort of for loop over an array, with var_r29 and var_r30 being compiler generated variables related to indexing an array.

}

// void zNPCSpawner::ClearActive()
// {
// s32 var_r6;
// s32 var_r7;
// void *temp_r5;

// var_r7 = 0;
// var_r6 = 0;
// loop_4:
// if (var_r7 < (s32) this->cnt_cleanup) {
// temp_r5 = *(this->pendlist->list + var_r6);
// if (temp_r5 != NULL) {
// (u32) temp_r5[1] = 1;
// }
// var_r6 += 4;
// var_r7 += 1;
// goto loop_4;
// }
// XOrdReset__FP16st_XORDEREDARRAY(&this->unk1B0);
// }

SMNPCStatus* zNPCSpawner::NextPendingNPC(S32 arg0)
{
S32 temp_r4;
const F32* temp_ptr = NULL;

temp_r4 = this->pendlist.cnt;
if (temp_r4 < 1)
{
return NULL;
}
return xUtil_select<SMNPCStatus>((SMNPCStatus**)this->pendlist.list, temp_r4, temp_ptr);
}

/* zNPCSpawner::StatForNPC (zNPCCommon *) */
SMNPCStatus* zNPCSpawner::StatForNPC(zNPCCommon* npc)
{
s32 var_ctr;
SMNPCStatus* var_r6;
zNPCCommon* temp_r0;
zNPCCommon* temp_r0_2;
zNPCCommon* temp_r0_3;
zNPCCommon* temp_r0_4;
zNPCCommon* temp_r0_5;
zNPCCommon* temp_r0_6;
zNPCCommon* temp_r0_7;
zNPCCommon* temp_r0_8;
Comment on lines +250 to +256
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

eventually all these unused variables from decompiler output should be cleaned up


var_r6 = NULL;
var_ctr = 2;

for (var_ctr = 0; var_ctr < 16; var_ctr++)
{
temp_r0 = this->npcpool[var_ctr].npc;
if ((temp_r0 != NULL) && (temp_r0 == npc))
{
var_r6 = &this->npcpool[var_ctr];
}
}

return var_r6;
}
22 changes: 6 additions & 16 deletions src/SB/Game/zNPCSpawner.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,9 @@

#include "xRMemData.h"
#include "xordarray.h"
#include "xutil.h"

enum en_SM_NOTICES
{
SM_NOTE_NPCDIED,
SM_NOTE_NPCSTANDBY,
SM_NOTE_NPCALIVE,
SM_NOTE_DUPPAUSE,
SM_NOTE_DUPRESUME,
SM_NOTE_DUPSETDELAY,
SM_NOTE_DUPDEAD,
SM_NOTE_KILLKIDS,
SM_NOTE_NOMORE,
SM_NOTE_FORCE = 0x7fffffff
};
#include "zNPCTypeCommon.h"

enum en_SM_WAVE_MODE
{
Expand Down Expand Up @@ -50,8 +39,6 @@ enum en_SM_NPC_STATUS
SM_NPC_FORCE = 0x7fffffff
};

struct zNPCCommon;

struct SMDepot
{
st_XORDEREDARRAY spawners;
Expand Down Expand Up @@ -84,7 +71,7 @@ struct zNPCSpawner : RyzMemData
SMSPStatus sppool[16];
SMNPCStatus npcpool[16];
st_XORDEREDARRAY pendlist;
st_XORDEREDARRAY actvlist;
st_XORDEREDARRAY actvlist; //0x1A4
S32 cnt_cleanup;

void Subscribe(zNPCCommon* owner);
Expand All @@ -103,6 +90,9 @@ struct zNPCSpawner : RyzMemData
// NextPendingNPC.
void ClearActive();
void ClearPending();
SMNPCStatus* NextPendingNPC( S32 arg0 );
st_XORDEREDARRAY* FillPending();
st_XORDEREDARRAY* ReFillPending();

void SetNPCStatus(zNPCCommon* npc, en_SM_NPC_STATUS status);

Expand Down
15 changes: 14 additions & 1 deletion src/SB/Game/zNPCTypeCommon.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
#include "xSFX.h"

#include "zNPCSndTable.h"
#include "zNPCSpawner.h"
#include "zMovePoint.h"
#include "zShrapnel.h"

Expand Down Expand Up @@ -340,6 +339,20 @@ enum en_NPC_MSG_DATA
NPC_MDAT_FORCE = 0x7fffffff
};

enum en_SM_NOTICES
{
SM_NOTE_NPCDIED,
SM_NOTE_NPCSTANDBY,
SM_NOTE_NPCALIVE,
SM_NOTE_DUPPAUSE,
SM_NOTE_DUPRESUME,
SM_NOTE_DUPSETDELAY,
SM_NOTE_DUPDEAD,
SM_NOTE_KILLKIDS,
SM_NOTE_NOMORE,
SM_NOTE_FORCE = 0x7fffffff
};

struct zNPCLassoInfo
{
en_LASSO_STATUS stage;
Expand Down
2 changes: 1 addition & 1 deletion src/SB/Game/zNPCTypeDuplotron.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#ifndef ZNPCTYPEDUPLOTRON_H
#define ZNPCTYPEDUPLOTRON_H

#include "zNPCTypeCommon.h"
#include "zNPCSpawner.h"

struct zNPCDuplotron : zNPCCommon
{
Expand Down