Implemented rel building and loading
This commit is contained in:
parent
3b31d9fcfc
commit
d3b45cf2b4
14 changed files with 1045 additions and 922 deletions
File diff suppressed because it is too large
Load diff
|
|
@ -4,14 +4,14 @@
|
|||
#include "string.h"
|
||||
#include "version.h"
|
||||
|
||||
s16 GwLanguage = 1;
|
||||
s16 GwLanguageSave = -1;
|
||||
SHARED_SYM s16 GwLanguage = 1;
|
||||
SHARED_SYM s16 GwLanguageSave = -1;
|
||||
|
||||
GameStat GWGameStatDefault;
|
||||
GameStat GWGameStat;
|
||||
SystemState GWSystem;
|
||||
PlayerState GWPlayer[4];
|
||||
PlayerConfig GWPlayerCfg[4];
|
||||
SHARED_SYM GameStat GWGameStatDefault;
|
||||
SHARED_SYM GameStat GWGameStat;
|
||||
SHARED_SYM SystemState GWSystem;
|
||||
SHARED_SYM PlayerState GWPlayer[4];
|
||||
SHARED_SYM PlayerConfig GWPlayerCfg[4];
|
||||
|
||||
static inline void GWErase(void)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@ void main(void)
|
|||
GWPlayerCfg[i].character = -1;
|
||||
}
|
||||
|
||||
//omMasterInit(0, _ovltbl, OVL_COUNT, OVL_BOOT);
|
||||
omMasterInit(0, _ovltbl, OVL_COUNT, OVL_BOOT);
|
||||
VIWaitForRetrace();
|
||||
|
||||
if (VIGetNextField() == 0) {
|
||||
|
|
|
|||
|
|
@ -5,6 +5,10 @@
|
|||
typedef s32 (*DLLProlog)(void);
|
||||
typedef void (*DLLEpilog)(void);
|
||||
|
||||
#ifdef TARGET_PC
|
||||
typedef void (*DLLObjectSetup)(void);
|
||||
#endif
|
||||
|
||||
omDllData *omDLLinfoTbl[OM_DLL_MAX];
|
||||
|
||||
static FileListEntry *omDLLFileList;
|
||||
|
|
@ -31,6 +35,10 @@ s32 omDLLStart(s16 overlay, s16 flag)
|
|||
dllno = omDLLSearch(overlay);
|
||||
if(dllno >= 0 && !flag) {
|
||||
omDllData *dll = omDLLinfoTbl[dllno];
|
||||
#ifdef TARGET_PC
|
||||
// TODO PC
|
||||
OSReport("objdll>Already Loaded %s\n", dll->name);
|
||||
#else
|
||||
OSReport("objdll>Already Loaded %s(%08x %08x)\n", dll->name, dll->module, dll->bss);
|
||||
|
||||
omDLLInfoDump(&dll->module->info);
|
||||
|
|
@ -38,6 +46,7 @@ s32 omDLLStart(s16 overlay, s16 flag)
|
|||
memset(dll->bss, 0, dll->module->bssSize);
|
||||
HuMemDCFlushAll();
|
||||
dll->ret = ((DLLProlog)dll->module->prolog)();
|
||||
#endif
|
||||
OSReport("objdll> %s prolog end\n", dll->name);
|
||||
return dllno;
|
||||
} else {
|
||||
|
|
@ -80,8 +89,10 @@ void omDLLEnd(s16 dllno, s16 flag)
|
|||
} else {
|
||||
omDllData *dll;
|
||||
dll = omDLLinfoTbl[dllno];
|
||||
#ifdef __MWERKS__
|
||||
OSReport("objdll>Call Epilog\n");
|
||||
((DLLEpilog)dll->module->epilog)();
|
||||
#endif
|
||||
OSReport("objdll>End DLL stayed:%s\n", omDLLinfoTbl[dllno]->name);
|
||||
}
|
||||
OSReport("objdll>End DLL finish\n");
|
||||
|
|
@ -95,6 +106,12 @@ omDllData *omDLLLink(omDllData **dll_ptr, s16 overlay, s16 flag)
|
|||
dll = HuMemDirectMalloc(HEAP_SYSTEM, sizeof(omDllData));
|
||||
*dll_ptr = dll;
|
||||
dll->name = dllFile->name;
|
||||
#ifdef _WIN32
|
||||
dll->hModule = LoadLibrary(dllFile->name);
|
||||
if (dll->hModule == NULL) {
|
||||
OSReport("objdll>++++++++++++++++ DLL Link Failed\n");
|
||||
}
|
||||
#else
|
||||
dll->module = HuDvdDataReadDirect(dllFile->name, HEAP_SYSTEM);
|
||||
dll->bss = HuMemDirectMalloc(HEAP_SYSTEM, dll->module->bssSize);
|
||||
if(OSLink(&dll->module->info, dll->bss) != TRUE) {
|
||||
|
|
@ -103,9 +120,17 @@ omDllData *omDLLLink(omDllData **dll_ptr, s16 overlay, s16 flag)
|
|||
omDLLInfoDump(&dll->module->info);
|
||||
omDLLHeaderDump(dll->module);
|
||||
OSReport("objdll>LinkOK %08x %08x\n", dll->module, dll->bss);
|
||||
#endif
|
||||
if(flag == 1) {
|
||||
OSReport("objdll> %s prolog start\n", dllFile->name);
|
||||
#ifdef _WIN32
|
||||
{
|
||||
DLLObjectSetup objectSetup = (DLLObjectSetup)GetProcAddress(dll->hModule, "ObjectSetup");
|
||||
objectSetup();
|
||||
}
|
||||
#else
|
||||
dll->ret = ((DLLProlog)dll->module->prolog)();
|
||||
#endif
|
||||
OSReport("objdll> %s prolog end\n", dllFile->name);
|
||||
}
|
||||
return dll;
|
||||
|
|
@ -114,6 +139,9 @@ omDllData *omDLLLink(omDllData **dll_ptr, s16 overlay, s16 flag)
|
|||
void omDLLUnlink(omDllData *dll_ptr, s16 flag)
|
||||
{
|
||||
OSReport("odjdll>Unlink DLL:%s\n", dll_ptr->name);
|
||||
#ifdef _WIN32
|
||||
FreeLibrary(dll_ptr->hModule);
|
||||
#else
|
||||
if(flag == 1) {
|
||||
OSReport("objdll>Unlink DLL epilog\n");
|
||||
((DLLEpilog)dll_ptr->module->epilog)();
|
||||
|
|
@ -124,6 +152,7 @@ void omDLLUnlink(omDllData *dll_ptr, s16 flag)
|
|||
}
|
||||
HuMemDirectFree(dll_ptr->bss);
|
||||
HuMemDirectFree(dll_ptr->module);
|
||||
#endif
|
||||
HuMemDirectFree(dll_ptr);
|
||||
}
|
||||
|
||||
|
|
@ -169,4 +198,4 @@ void omDLLHeaderDump(OSModuleHeader *module)
|
|||
OSReport(" epilog func:0x%08x\n", module->epilog);
|
||||
OSReport(" unresolved func:0x%08x\n", module->unresolved);
|
||||
OSReport("================================\n");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,12 +1,13 @@
|
|||
#include "game/audio.h"
|
||||
#include "game/chrman.h"
|
||||
#include "game/esprite.h"
|
||||
#include "game/flag.h"
|
||||
#include "game/hsfdraw.h"
|
||||
#include "game/hsfman.h"
|
||||
#include "game/printfunc.h"
|
||||
#include "game/object.h"
|
||||
#include "game/pad.h"
|
||||
#include "game/flag.h"
|
||||
#include "game/printfunc.h"
|
||||
|
||||
|
||||
#define OM_OVL_HIS_MAX 16
|
||||
#define OM_MAX_GROUPS 10
|
||||
|
|
@ -33,21 +34,21 @@ typedef struct om_obj_man {
|
|||
omObjData *omDBGSysKeyObj;
|
||||
Process *omwatchproc;
|
||||
OverlayID omnextovl;
|
||||
OverlayID omcurovl;
|
||||
SHARED_SYM OverlayID omcurovl;
|
||||
s32 omcurdll;
|
||||
s32 omovlhisidx;
|
||||
s32 omovlevtno;
|
||||
SHARED_SYM s32 omovlhisidx;
|
||||
SHARED_SYM s32 omovlevtno;
|
||||
s32 omnextovlevtno;
|
||||
u32 omovlstat;
|
||||
SHARED_SYM u32 omovlstat;
|
||||
static s32 omnextovlstat;
|
||||
char omUPauseFlag;
|
||||
s16 omSysExitReq;
|
||||
SHARED_SYM s16 omSysExitReq;
|
||||
s16 omdispinfo;
|
||||
|
||||
static omOvlHisData omovlhis[OM_OVL_HIS_MAX];
|
||||
|
||||
u8 omSysPauseEnableFlag = TRUE;
|
||||
OverlayID omprevovl = OVL_INVALID;
|
||||
SHARED_SYM u8 omSysPauseEnableFlag = TRUE;
|
||||
SHARED_SYM OverlayID omprevovl = OVL_INVALID;
|
||||
|
||||
static void omWatchOverlayProc(void);
|
||||
static void omInsertObj(Process *objman_process, omObjData *object);
|
||||
|
|
@ -61,14 +62,17 @@ void omMasterInit(s32 prio, FileListEntry *ovl_list, s32 ovl_count, OverlayID st
|
|||
omovlhisidx = -1;
|
||||
omOvlCallEx(start_ovl, 1, 0, 0);
|
||||
omDBGSysKeyObj = NULL;
|
||||
#ifdef __MWERKS__
|
||||
// TODO PC
|
||||
omSysPauseEnable(TRUE);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void omWatchOverlayProc(void)
|
||||
{
|
||||
while(1) {
|
||||
if(omcurovl == OVL_INVALID) {
|
||||
if(omnextovl >= 0 && fadeStat == 0) {
|
||||
while (1) {
|
||||
if (omcurovl == OVL_INVALID) {
|
||||
if (omnextovl >= 0 && fadeStat == 0) {
|
||||
HuPrcSleep(0);
|
||||
OSReport("++++++++++++++++++++ Start New OVL %d (EVT:%d STAT:0x%08x) ++++++++++++++++++\n", omnextovl, omnextovlevtno, omnextovlstat);
|
||||
HuMemHeapDump(HuMemHeapPtrGet(HEAP_SYSTEM), -1);
|
||||
|
|
@ -79,28 +83,37 @@ static void omWatchOverlayProc(void)
|
|||
OSReport("objman>Init esp\n");
|
||||
espInit();
|
||||
OSReport("objman>Call objectsetup\n");
|
||||
#ifdef __MWERKS__
|
||||
// TODO PC
|
||||
HuAudVoiceInit(omnextovl);
|
||||
HuAudDllSndGrpSet(omnextovl);
|
||||
#endif
|
||||
omcurovl = omnextovl;
|
||||
omovlevtno = omnextovlevtno;
|
||||
omovlstat = omnextovlstat;
|
||||
omnextovl = OVL_INVALID;
|
||||
if(_CheckFlag(FLAG_ID_MAKE(1, 12))) {
|
||||
#ifdef __MWERKS__
|
||||
// TODO PC
|
||||
if (_CheckFlag(FLAG_ID_MAKE(1, 12))) {
|
||||
MGSeqPracticeInit();
|
||||
}
|
||||
omSysPauseEnable(TRUE);
|
||||
#endif
|
||||
omcurdll = omDLLStart(omcurovl, 0);
|
||||
OSReport("objman>ObjectSetup end\n");
|
||||
if(omcurovl != OVL_INVALID) {
|
||||
if (omcurovl != OVL_INVALID) {
|
||||
goto watch_child;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
} else {
|
||||
watch_child:
|
||||
}
|
||||
else {
|
||||
watch_child:
|
||||
HuPrcChildWatch();
|
||||
}
|
||||
}
|
||||
|
|
@ -109,7 +122,7 @@ static void omWatchOverlayProc(void)
|
|||
void omOvlCallEx(OverlayID overlay, s16 arg2, s32 event, s32 stat)
|
||||
{
|
||||
OSReport("objman>Call New Ovl %d(%d)\n", overlay, arg2);
|
||||
if(omovlhisidx >= OM_OVL_HIS_MAX) {
|
||||
if (omovlhisidx >= OM_OVL_HIS_MAX) {
|
||||
OSReport("objman>OVL Call over error\n");
|
||||
return;
|
||||
}
|
||||
|
|
@ -122,7 +135,7 @@ void omOvlCallEx(OverlayID overlay, s16 arg2, s32 event, s32 stat)
|
|||
void omOvlGotoEx(OverlayID overlay, s16 arg2, s32 event, s32 stat)
|
||||
{
|
||||
omprevovl = omcurovl;
|
||||
if(omcurovl >= 0) {
|
||||
if (omcurovl >= 0) {
|
||||
omOvlKill(arg2);
|
||||
}
|
||||
omnextovl = overlay;
|
||||
|
|
@ -134,7 +147,7 @@ void omOvlReturnEx(s16 level, s16 arg2)
|
|||
{
|
||||
omovlhisidx -= level;
|
||||
OSReport("objman>Ovl Return %d=%d(%d)\n", level, omovlhisidx, arg2);
|
||||
if(omovlhisidx < 0) {
|
||||
if (omovlhisidx < 0) {
|
||||
OSReport("objman>OVL under error\n");
|
||||
omovlhisidx = 0;
|
||||
}
|
||||
|
|
@ -143,10 +156,16 @@ void omOvlReturnEx(s16 level, s16 arg2)
|
|||
|
||||
void omOvlKill(s16 arg)
|
||||
{
|
||||
#ifdef __MWERKS__
|
||||
// TODO PC
|
||||
CharModelKill(-1);
|
||||
MGSeqKillAll();
|
||||
#endif
|
||||
Hu3DAllKill();
|
||||
#ifdef __MWERKS__
|
||||
// TODO PC
|
||||
HuWinAllKill();
|
||||
#endif
|
||||
HuSprClose();
|
||||
HuPrcChildKill(omwatchproc);
|
||||
HuMemDirectFreeNum(HEAP_SYSTEM, MEMORY_DEFAULT_NUM);
|
||||
|
|
@ -154,7 +173,10 @@ void omOvlKill(s16 arg)
|
|||
HuMemDirectFreeNum(HEAP_DVD, MEMORY_DEFAULT_NUM);
|
||||
HuMemDirectFreeNum(HEAP_DATA, MEMORY_DEFAULT_NUM);
|
||||
HuPadRumbleAllStop();
|
||||
#ifdef __MWERKS__
|
||||
// TODO PC
|
||||
HuAudFXListnerKill();
|
||||
#endif
|
||||
OSReport("OvlKill %d\n", arg);
|
||||
omSysExitReq = FALSE;
|
||||
omDLLNumEnd(omcurovl, arg);
|
||||
|
|
@ -165,11 +187,11 @@ void omOvlKill(s16 arg)
|
|||
void omOvlHisChg(s32 level, OverlayID overlay, s32 event, s32 stat)
|
||||
{
|
||||
omOvlHisData *history;
|
||||
if(omovlhisidx-level < 0 || omovlhisidx-level >= OM_OVL_HIS_MAX) {
|
||||
if (omovlhisidx - level < 0 || omovlhisidx - level >= OM_OVL_HIS_MAX) {
|
||||
OSReport("objman> omOvlHisChg: overlay 実行履歴の範囲外を変更しようとしました\n");
|
||||
return;
|
||||
}
|
||||
history = &omovlhis[omovlhisidx-level];
|
||||
history = &omovlhis[omovlhisidx - level];
|
||||
history->overlay = overlay;
|
||||
history->event = event;
|
||||
history->stat = stat;
|
||||
|
|
@ -177,11 +199,11 @@ void omOvlHisChg(s32 level, OverlayID overlay, s32 event, s32 stat)
|
|||
|
||||
omOvlHisData *omOvlHisGet(s32 level)
|
||||
{
|
||||
if(omovlhisidx-level < 0 || omovlhisidx-level >= OM_OVL_HIS_MAX) {
|
||||
if (omovlhisidx - level < 0 || omovlhisidx - level >= OM_OVL_HIS_MAX) {
|
||||
OSReport("objman> omOvlHisGet: overlay 実行履歴の範囲外を参照しようとしました\n");
|
||||
return NULL;
|
||||
}
|
||||
return &omovlhis[omovlhisidx-level];
|
||||
return &omovlhis[omovlhisidx - level];
|
||||
}
|
||||
|
||||
Process *omInitObjMan(s16 max_objs, s32 prio)
|
||||
|
|
@ -196,7 +218,7 @@ Process *omInitObjMan(s16 max_objs, s32 prio)
|
|||
max_objs += 2;
|
||||
omSysExitReq = FALSE;
|
||||
process = HuPrcChildCreate(omMain, prio, 16384, 0, omwatchproc);
|
||||
HuPrcSetStat(process, PROCESS_STAT_PAUSE_EN|PROCESS_STAT_UPAUSE_EN);
|
||||
HuPrcSetStat(process, PROCESS_STAT_PAUSE_EN | PROCESS_STAT_UPAUSE_EN);
|
||||
objman = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(omObjMan), MEMORY_DEFAULT_NUM);
|
||||
objman->max_objs = max_objs;
|
||||
process->user_data = objman;
|
||||
|
|
@ -205,24 +227,24 @@ Process *omInitObjMan(s16 max_objs, s32 prio)
|
|||
objman->next_idx = 0;
|
||||
objman->obj_last = -1;
|
||||
objman->obj_first = -1;
|
||||
obj_all = HuMemDirectMallocNum(HEAP_SYSTEM, max_objs*sizeof(omObjData), MEMORY_DEFAULT_NUM);
|
||||
objman->obj = obj_all;
|
||||
group_all = HuMemDirectMallocNum(HEAP_SYSTEM, OM_MAX_GROUPS*sizeof(omObjGroup), MEMORY_DEFAULT_NUM);
|
||||
obj_all = HuMemDirectMallocNum(HEAP_SYSTEM, max_objs * sizeof(omObjData), MEMORY_DEFAULT_NUM);
|
||||
objman->obj = obj_all;
|
||||
group_all = HuMemDirectMallocNum(HEAP_SYSTEM, OM_MAX_GROUPS * sizeof(omObjGroup), MEMORY_DEFAULT_NUM);
|
||||
objman->group = group_all;
|
||||
for(i=0; i<max_objs;i++) {
|
||||
for (i = 0; i < max_objs; i++) {
|
||||
obj = &obj_all[i];
|
||||
obj->stat = 1;
|
||||
obj->prio = obj->prev =obj->next = -1;
|
||||
obj->prio = obj->prev = obj->next = -1;
|
||||
obj->unk10 = 0;
|
||||
obj->trans.x = obj->trans.y = obj->trans.z = obj->rot.x = obj->rot.y = obj->rot.z = 0.0f;
|
||||
obj->scale.x = obj->scale.y = obj->scale.z = 1.0f;
|
||||
obj->model = obj->motion = NULL;
|
||||
obj->func = obj->data = NULL;
|
||||
obj->next_idx = i+1;
|
||||
obj->next_idx = i + 1;
|
||||
obj->mtncnt = 0;
|
||||
obj->motion = NULL;
|
||||
}
|
||||
for(i=0; i<OM_MAX_GROUPS;i++) {
|
||||
for (i = 0; i < OM_MAX_GROUPS; i++) {
|
||||
group_all[i].max_objs = 0;
|
||||
group_all[i].num_objs = 0;
|
||||
group_all[i].next_idx = 0;
|
||||
|
|
@ -250,7 +272,7 @@ omObjData *omAddObjEx(Process *objman_process, s16 prio, u16 mdlcnt, u16 mtncnt,
|
|||
s16 next_idx;
|
||||
omObjMan *objman = objman_process->user_data;
|
||||
omObjData *obj_base = objman->obj;
|
||||
if(objman->num_objs == objman->max_objs) {
|
||||
if (objman->num_objs == objman->max_objs) {
|
||||
return NULL;
|
||||
}
|
||||
next_idx = objman->next_idx;
|
||||
|
|
@ -258,26 +280,29 @@ omObjData *omAddObjEx(Process *objman_process, s16 prio, u16 mdlcnt, u16 mtncnt,
|
|||
object->next_idx_alloc = next_idx;
|
||||
object->prio = prio;
|
||||
omInsertObj(objman_process, object);
|
||||
if(mdlcnt) {
|
||||
object->model = HuMemDirectMallocNum(HEAP_SYSTEM, mdlcnt*sizeof(s16), MEMORY_DEFAULT_NUM);
|
||||
if (mdlcnt) {
|
||||
object->model = HuMemDirectMallocNum(HEAP_SYSTEM, mdlcnt * sizeof(s16), MEMORY_DEFAULT_NUM);
|
||||
object->mdlcnt = mdlcnt;
|
||||
for(i=0; i<mdlcnt; i++) {
|
||||
for (i = 0; i < mdlcnt; i++) {
|
||||
object->model[i] = -1;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
object->model = NULL;
|
||||
object->mdlcnt = 0;
|
||||
}
|
||||
if(mtncnt) {
|
||||
object->motion = HuMemDirectMallocNum(HEAP_SYSTEM, mtncnt*sizeof(s16), MEMORY_DEFAULT_NUM);
|
||||
if (mtncnt) {
|
||||
object->motion = HuMemDirectMallocNum(HEAP_SYSTEM, mtncnt * sizeof(s16), MEMORY_DEFAULT_NUM);
|
||||
object->mtncnt = mtncnt;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
object->motion = NULL;
|
||||
object->mtncnt = 0;
|
||||
}
|
||||
if(group >= 0) {
|
||||
if (group >= 0) {
|
||||
omAddMember(objman_process, group, object);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
object->group = group;
|
||||
object->group_idx = 0;
|
||||
}
|
||||
|
|
@ -302,31 +327,33 @@ static void omInsertObj(Process *objman_process, omObjData *object)
|
|||
s16 prio = object->prio;
|
||||
s16 obj_idx;
|
||||
s16 prev_idx;
|
||||
if(objman->obj_first == -1) {
|
||||
if (objman->obj_first == -1) {
|
||||
object->prev = -1;
|
||||
object->next = -1;
|
||||
objman->obj_first = next_idx_alloc;
|
||||
objman->obj_last = next_idx_alloc;
|
||||
(void)objman; //HACK for matching
|
||||
(void)objman; // HACK for matching
|
||||
return;
|
||||
}
|
||||
for(obj_idx = objman->obj_first; obj_idx != -1; obj_idx = obj_new->next) {
|
||||
for (obj_idx = objman->obj_first; obj_idx != -1; obj_idx = obj_new->next) {
|
||||
obj_new = &obj_all[obj_idx];
|
||||
if(obj_new->prio <= prio) {
|
||||
if (obj_new->prio <= prio) {
|
||||
break;
|
||||
}
|
||||
prev_idx = obj_idx;
|
||||
}
|
||||
if(obj_idx != -1) {
|
||||
if (obj_idx != -1) {
|
||||
object->prev = obj_new->prev;
|
||||
object->next = obj_idx;
|
||||
if(obj_new->prev != -1) {
|
||||
if (obj_new->prev != -1) {
|
||||
obj_all[obj_new->prev].next = next_idx_alloc;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
objman->obj_first = next_idx_alloc;
|
||||
}
|
||||
obj_new->prev = next_idx_alloc;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
object->next = -1;
|
||||
object->prev = prev_idx;
|
||||
obj_new->next = next_idx_alloc;
|
||||
|
|
@ -338,7 +365,7 @@ void omAddMember(Process *objman_process, u16 group, omObjData *object)
|
|||
{
|
||||
omObjMan *objman = objman_process->user_data;
|
||||
omObjGroup *group_ptr = &objman->group[group];
|
||||
if(group_ptr->num_objs != group_ptr->max_objs) {
|
||||
if (group_ptr->num_objs != group_ptr->max_objs) {
|
||||
object->group = group;
|
||||
object->group_idx = group_ptr->next_idx;
|
||||
group_ptr->obj[group_ptr->next_idx] = object;
|
||||
|
|
@ -352,40 +379,41 @@ void omDelObjEx(Process *objman_process, omObjData *object)
|
|||
omObjMan *objman = objman_process->user_data;
|
||||
omObjData *obj_all = objman->obj;
|
||||
s16 next_idx_alloc = object->next_idx_alloc;
|
||||
if(objman->num_objs == 0 || object->stat == 1) {
|
||||
if (objman->num_objs == 0 || object->stat == 1) {
|
||||
return;
|
||||
}
|
||||
objman->num_objs--;
|
||||
if(object->group >= 0) {
|
||||
if (object->group >= 0) {
|
||||
omDelMember(objman_process, object);
|
||||
}
|
||||
if(object->motion != NULL) {
|
||||
if (object->motion != NULL) {
|
||||
HuMemDirectFree(object->motion);
|
||||
object->motion = NULL;
|
||||
}
|
||||
if(object->model != NULL) {
|
||||
if (object->model != NULL) {
|
||||
HuMemDirectFree(object->model);
|
||||
object->model = NULL;
|
||||
}
|
||||
if(object->data != NULL) {
|
||||
if (object->data != NULL) {
|
||||
HuMemDirectFree(object->data);
|
||||
object->data = NULL;
|
||||
}
|
||||
object->stat = OM_STAT_DELETED;
|
||||
if(object->next >= 0) {
|
||||
if (object->next >= 0) {
|
||||
obj_all[object->next].prev = object->prev;
|
||||
}
|
||||
if(object->prev >= 0) {
|
||||
if (object->prev >= 0) {
|
||||
obj_all[object->prev].next = object->next;
|
||||
}
|
||||
if(objman->num_objs != 0) {
|
||||
if(object->prev < 0) {
|
||||
if (objman->num_objs != 0) {
|
||||
if (object->prev < 0) {
|
||||
objman->obj_first = obj_all[object->next].next_idx_alloc;
|
||||
}
|
||||
if(object->next < 0) {
|
||||
if (object->next < 0) {
|
||||
objman->obj_last = obj_all[object->prev].next_idx_alloc;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
objman->obj_first = objman->obj_last = -1;
|
||||
}
|
||||
object->next_idx = objman->next_idx;
|
||||
|
|
@ -394,7 +422,7 @@ void omDelObjEx(Process *objman_process, omObjData *object)
|
|||
|
||||
void omDelMember(Process *objman_process, omObjData *object)
|
||||
{
|
||||
if(object->group != -1) {
|
||||
if (object->group != -1) {
|
||||
omObjMan *objman = objman_process->user_data;
|
||||
omObjData *obj_all = objman->obj;
|
||||
omObjGroup *group = &objman->group[object->group];
|
||||
|
|
@ -411,20 +439,20 @@ void omMakeGroupEx(Process *objman_process, u16 group, u16 max_objs)
|
|||
s32 i;
|
||||
omObjMan *objman = objman_process->user_data;
|
||||
omObjGroup *group_ptr = &objman->group[group];
|
||||
if(group_ptr->obj != NULL) {
|
||||
if (group_ptr->obj != NULL) {
|
||||
HuMemDirectFree(group_ptr->obj);
|
||||
}
|
||||
if(group_ptr->next != NULL) {
|
||||
if (group_ptr->next != NULL) {
|
||||
HuMemDirectFree(group_ptr->next);
|
||||
}
|
||||
group_ptr->next_idx = 0;
|
||||
group_ptr->max_objs = max_objs;
|
||||
group_ptr->num_objs = 0;
|
||||
group_ptr->obj = HuMemDirectMallocNum(HEAP_SYSTEM, max_objs*sizeof(omObjData *), MEMORY_DEFAULT_NUM);
|
||||
group_ptr->next = HuMemDirectMallocNum(HEAP_SYSTEM, max_objs*sizeof(u16), MEMORY_DEFAULT_NUM);
|
||||
for(i=0; i<max_objs; i++) {
|
||||
group_ptr->obj = HuMemDirectMallocNum(HEAP_SYSTEM, max_objs * sizeof(omObjData *), MEMORY_DEFAULT_NUM);
|
||||
group_ptr->next = HuMemDirectMallocNum(HEAP_SYSTEM, max_objs * sizeof(u16), MEMORY_DEFAULT_NUM);
|
||||
for (i = 0; i < max_objs; i++) {
|
||||
group_ptr->obj[i] = NULL;
|
||||
group_ptr->next[i] = i+1;
|
||||
group_ptr->next[i] = i + 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -473,38 +501,38 @@ void omMain(void)
|
|||
omObjData *object;
|
||||
s16 obj_index;
|
||||
omDLLDBGOut();
|
||||
while(1) {
|
||||
if(omdispinfo) {
|
||||
while (1) {
|
||||
if (omdispinfo) {
|
||||
float scale = 1.5f;
|
||||
GXColor color;
|
||||
color.a = 96;
|
||||
color.r = 0;
|
||||
color.g = 0;
|
||||
color.b = 255;
|
||||
printWin(7, 23, 128*scale, 40*scale, &color);
|
||||
printWin(7, 23, 128 * scale, 40 * scale, &color);
|
||||
fontcolor = FONT_COLOR_YELLOW;
|
||||
print8(8, 24, scale, "\xFD\x01H:%08lX(%ld)", HuMemUsedMallocSizeGet(HEAP_SYSTEM), HuMemUsedMallocBlockGet(HEAP_SYSTEM));
|
||||
print8(8, 24+(8*scale), scale, "\xFD\x01M:%08lX(%ld)", HuMemUsedMallocSizeGet(HEAP_DATA), HuMemUsedMallocBlockGet(HEAP_DATA));
|
||||
print8(8, 24+(16*scale), scale, "\xFD\x01OBJ:%d/%d", objman->num_objs, objman->max_objs);
|
||||
print8(8, 24+(24*scale), scale, "\xFD\x01OVL:%ld(%ld<%ld)", omovlhisidx, omcurovl, omprevovl);
|
||||
print8(8, 24+(32*scale), scale, "\xFD\x01POL:%ld", totalPolyCnted);
|
||||
print8(8, 24 + (8 * scale), scale, "\xFD\x01M:%08lX(%ld)", HuMemUsedMallocSizeGet(HEAP_DATA), HuMemUsedMallocBlockGet(HEAP_DATA));
|
||||
print8(8, 24 + (16 * scale), scale, "\xFD\x01OBJ:%d/%d", objman->num_objs, objman->max_objs);
|
||||
print8(8, 24 + (24 * scale), scale, "\xFD\x01OVL:%ld(%ld<%ld)", omovlhisidx, omcurovl, omprevovl);
|
||||
print8(8, 24 + (32 * scale), scale, "\xFD\x01POL:%ld", totalPolyCnted);
|
||||
}
|
||||
obj_index = objman->obj_last;
|
||||
while(obj_index != -1) {
|
||||
while (obj_index != -1) {
|
||||
object = &obj_all[obj_index];
|
||||
obj_index = object->prev;
|
||||
if((object->stat & (OM_STAT_DELETED|OM_STAT_DISABLED)) == 0) {
|
||||
if(object->func != NULL && (object->stat & (0x40|0x8|OM_STAT_PAUSED)) == 0) {
|
||||
if ((object->stat & (OM_STAT_DELETED | OM_STAT_DISABLED)) == 0) {
|
||||
if (object->func != NULL && (object->stat & (0x40 | 0x8 | OM_STAT_PAUSED)) == 0) {
|
||||
object->func(object);
|
||||
}
|
||||
if(omcurovl == -1 || objman->obj_last == -1) {
|
||||
if (omcurovl == -1 || objman->obj_last == -1) {
|
||||
break;
|
||||
}
|
||||
if((object->stat & (OM_STAT_DELETED|OM_STAT_DISABLED)) == 0) {
|
||||
if((obj_all[obj_index].stat & (OM_STAT_DELETED|OM_STAT_DISABLED)) != 0) {
|
||||
if ((object->stat & (OM_STAT_DELETED | OM_STAT_DISABLED)) == 0) {
|
||||
if ((obj_all[obj_index].stat & (OM_STAT_DELETED | OM_STAT_DISABLED)) != 0) {
|
||||
obj_index = object->prev;
|
||||
}
|
||||
if(object->model != NULL && object->model[0] != -1 && !(object->stat & OM_STAT_MODEL_PAUSED)) {
|
||||
if (object->model != NULL && object->model[0] != -1 && !(object->stat & OM_STAT_MODEL_PAUSED)) {
|
||||
Hu3DModelPosSet(object->model[0], object->trans.x, object->trans.y, object->trans.z);
|
||||
Hu3DModelRotSet(object->model[0], object->rot.x, object->rot.y, object->rot.z);
|
||||
Hu3DModelScaleSet(object->model[0], object->scale.x, object->scale.y, object->scale.z);
|
||||
|
|
@ -516,7 +544,7 @@ void omMain(void)
|
|||
}
|
||||
}
|
||||
|
||||
//Dummy function to force string literals in binary
|
||||
// Dummy function to force string literals in binary
|
||||
static void omDumpObj(Process *objman_process)
|
||||
{
|
||||
omObjMan *objman = objman_process->user_data;
|
||||
|
|
@ -524,14 +552,12 @@ static void omDumpObj(Process *objman_process)
|
|||
s32 i;
|
||||
OSReport("=================== 現在登録されている OBJECT ==================\n");
|
||||
OSReport("STAT PRI GRPN MEMN PROG (TRA) (ROT) (SCA) mdlcnt mtncnt work[0] work[1] work[2] work[3] *data\n");
|
||||
for(i=0; i<objman->max_objs; i++) {
|
||||
for (i = 0; i < objman->max_objs; i++) {
|
||||
omObjData *object = &obj_all[i];
|
||||
OSReport("%04d:%04X %04X %d %d %08X (%.2f %.2f %.2f) (%.2f %.2f %.2f) (%.2f %.2f %.2f) %d %d %08X %08X %08X %08X %08X\n",
|
||||
object->stat, object->stat, object->prio, object->group, object->unk10, object->func,
|
||||
object->trans.x, object->trans.y, object->trans.z,
|
||||
object->rot.x, object->rot.y, object->rot.z,
|
||||
object->scale.x, object->scale.y, object->scale.z,
|
||||
object->mdlcnt, object->mtncnt, object->work[0], object->work[1], object->work[2], object->work[3], object->data);
|
||||
OSReport("%04d:%04X %04X %d %d %08X (%.2f %.2f %.2f) (%.2f %.2f %.2f) (%.2f %.2f %.2f) %d %d %08X %08X %08X %08X %08X\n", object->stat,
|
||||
object->stat, object->prio, object->group, object->unk10, object->func, object->trans.x, object->trans.y, object->trans.z, object->rot.x,
|
||||
object->rot.y, object->rot.z, object->scale.x, object->scale.y, object->scale.z, object->mdlcnt, object->mtncnt, object->work[0],
|
||||
object->work[1], object->work[2], object->work[3], object->data);
|
||||
}
|
||||
OSReport("================================================================\n");
|
||||
}
|
||||
|
|
@ -541,15 +567,16 @@ void omAllPause(BOOL pause)
|
|||
Process *objman_process = HuPrcCurrentGet();
|
||||
omObjMan *objman = objman_process->user_data;
|
||||
s32 i;
|
||||
if(pause) {
|
||||
for(i=0; i<objman->max_objs; i++) {
|
||||
if((objman->obj[i].stat & (OM_STAT_DELETED|OM_STAT_NOPAUSE)) == 0) {
|
||||
if (pause) {
|
||||
for (i = 0; i < objman->max_objs; i++) {
|
||||
if ((objman->obj[i].stat & (OM_STAT_DELETED | OM_STAT_NOPAUSE)) == 0) {
|
||||
omSetStatBit(&objman->obj[i], OM_STAT_PAUSED);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for(i=0; i<objman->max_objs; i++) {
|
||||
if((objman->obj[i].stat & (OM_STAT_DELETED|OM_STAT_NOPAUSE)) == 0) {
|
||||
}
|
||||
else {
|
||||
for (i = 0; i < objman->max_objs; i++) {
|
||||
if ((objman->obj[i].stat & (OM_STAT_DELETED | OM_STAT_NOPAUSE)) == 0) {
|
||||
omResetStatBit(&objman->obj[i], OM_STAT_PAUSED);
|
||||
}
|
||||
}
|
||||
|
|
@ -558,9 +585,10 @@ void omAllPause(BOOL pause)
|
|||
|
||||
char omPauseChk(void)
|
||||
{
|
||||
if(omDBGSysKeyObj == NULL) {
|
||||
if (omDBGSysKeyObj == NULL) {
|
||||
return 0;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
return omDBGSysKeyObj->work[0] & 0x1;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,15 @@
|
|||
#include "game/dvd.h"
|
||||
#include "game/object.h"
|
||||
|
||||
#define OVL_DEFINE(name, path) { path, 0 },
|
||||
#ifdef _WIN32
|
||||
#define OVL_DEFINE(name, path) { path ".dll", 0 },
|
||||
#else
|
||||
#define OVL_DEFINE(name, path) { "dll/" path ".rel", 0 },
|
||||
#endif
|
||||
|
||||
FileListEntry _ovltbl[OVL_COUNT+1] = {
|
||||
#include "ovl_table.h"
|
||||
{ NULL, -1 }
|
||||
};
|
||||
|
||||
#undef OVL_DEFINE
|
||||
#undef OVL_DEFINE
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
// Credits: Super Monkey Ball
|
||||
|
||||
void OSReport(const char *msg, ...)
|
||||
__declspec(dllexport) void OSReport(const char *msg, ...)
|
||||
{
|
||||
va_list args;
|
||||
va_start(args, msg);
|
||||
|
|
@ -353,7 +353,7 @@ BOOL OSInitFont(OSFontHeader *fontData)
|
|||
BOOL OSLink(OSModuleInfo *newModule, void *bss)
|
||||
{
|
||||
puts("OSLink is a stub");
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void OSLoadContext(OSContext *context)
|
||||
|
|
@ -699,7 +699,5 @@ void MGSeqMain(void)
|
|||
puts("MGSeqMain is a stub");
|
||||
}
|
||||
|
||||
void omMasterInit(s32 prio, FileListEntry *ovl_list, s32 ovl_count, OverlayID start_ovl)
|
||||
{
|
||||
puts("omMasterInit is a stub");
|
||||
}
|
||||
// TODO remove
|
||||
u8 fadeStat = 0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue