diff --git a/asm/f/op/scene/f_op_scene_req.s b/asm/f/op/scene/f_op_scene_req.s index 3657769b4e2..104c2130447 100644 --- a/asm/f/op/scene/f_op_scene_req.s +++ b/asm/f/op/scene/f_op_scene_req.s @@ -205,8 +205,8 @@ lbl_8001F0E4: /* 8001F0F4 0001C034 38 21 00 20 */ addi r1, r1, 0x20 /* 8001F0F8 0001C038 4E 80 00 20 */ blr -.global fopScnRq_ReRequest -fopScnRq_ReRequest: +.global fopScnRq_ReRequest__FUisPv +fopScnRq_ReRequest__FUisPv: /* 8001F0FC 0001C03C 94 21 FF F0 */ stwu r1, -0x10(r1) /* 8001F100 0001C040 7C 08 02 A6 */ mflr r0 /* 8001F104 0001C044 90 01 00 14 */ stw r0, 0x14(r1) diff --git a/include/f/f_op/f_op_scene_mng.h b/include/f/f_op/f_op_scene_mng.h index 74b2e309284..f6259c5f5b6 100644 --- a/include/f/f_op/f_op_scene_mng.h +++ b/include/f/f_op/f_op_scene_mng.h @@ -5,9 +5,9 @@ void* fopScnM_SearchByID(unsigned int id); int fopScnM_ChangeReq(scene_class*, s16, s16, u16); -void fopScnM_DeleteReq(scene_class*); +unsigned int fopScnM_DeleteReq(scene_class*); void fopScnM_CreateReq(s16, s16, u16, u32); -void fopScnM_ReRequest(s16, u32) ; +u32 fopScnM_ReRequest(s16, u32); void fopScnM_Management(void); void fopScnM_Init(void); diff --git a/include/f/f_op/f_op_scene_req.h b/include/f/f_op/f_op_scene_req.h index 903058e795b..54b07cdea9a 100644 --- a/include/f/f_op/f_op_scene_req.h +++ b/include/f/f_op/f_op_scene_req.h @@ -7,5 +7,6 @@ void fopScnRq_ReRequest(void); } u32 fopScnRq_Request(int,scene_class*,s16,void*,s16,u16); +u32 fopScnRq_ReRequest(unsigned int, s16, void*); #endif \ No newline at end of file diff --git a/include/f/f_op_scene_mng/asm/func_8001EDCC.s b/include/f/f_op_scene_mng/asm/func_8001EDCC.s index d1d4014be65..bafa0400aa2 100644 --- a/include/f/f_op_scene_mng/asm/func_8001EDCC.s +++ b/include/f/f_op_scene_mng/asm/func_8001EDCC.s @@ -11,7 +11,7 @@ /* 8001EDF4 0001BD34 48 00 00 0C */ b lbl_8001EE00 lbl_8001EDF8: /* 8001EDF8 0001BD38 7C C4 33 78 */ mr r4, r6 -/* 8001EDFC 0001BD3C 48 00 03 01 */ bl fopScnRq_ReRequest +/* 8001EDFC 0001BD3C 48 00 03 01 */ bl fopScnRq_ReRequest__FUisPv lbl_8001EE00: /* 8001EE00 0001BD40 80 01 00 14 */ lwz r0, 0x14(r1) /* 8001EE04 0001BD44 7C 08 03 A6 */ mtlr r0 diff --git a/src/f/f_op/f_op_scene_mng.cpp b/src/f/f_op/f_op_scene_mng.cpp index 0663462f442..7af43e2cc3b 100644 --- a/src/f/f_op/f_op_scene_mng.cpp +++ b/src/f/f_op/f_op_scene_mng.cpp @@ -12,7 +12,7 @@ void fopScnRq_Request__FiP11scene_classsPvsUs(void); // additional symbols needed for f_op_scene_mng.cpp // autogenerated by split.py v0.4 at 2021-02-13 20:33:37.409412 -extern int l_scnRqID; +extern unsigned int l_scnRqID; // matches but is proabably wrong void* fopScnM_SearchByID(unsigned int id) { @@ -21,11 +21,10 @@ void* fopScnM_SearchByID(unsigned int id) { return fopScnIt_Judge(fpcSch_JudgeByID, (void*)local_8); } -// fopScnM_ChangeReq__FP11scene_classssUs -// fopScnM_ChangeReq(scene_class*, s16, s16, u16) int fopScnM_ChangeReq(scene_class* pScene, s16 param_2, s16 param_3, u16 param_4) { u32 sceneRequestID = fopScnRq_Request(2, pScene, param_2, 0, param_3, param_4); + // can't get a match unless the request id is unsigned if (sceneRequestID == -1) { return 0; } @@ -33,37 +32,45 @@ int fopScnM_ChangeReq(scene_class* pScene, s16 param_2, s16 param_3, u16 param_4 return 1; } -// fopScnM_DeleteReq__FP11scene_class -// fopScnM_DeleteReq(scene_class*) -asm void fopScnM_DeleteReq(scene_class*) { +#ifdef NONMATCHING +unsigned int fopScnM_DeleteReq(scene_class* pScene) { + u32 sceneRequestID = fopScnRq_Request(1, pScene, 0x7fff, 0, 0x7fff, 0); + u32 tmp = (-sceneRequestID - 1); + u32 tmp2 = (tmp + -1); + return tmp2; +} +#else +asm unsigned int fopScnM_DeleteReq(scene_class*) { nofralloc #include "f/f_op_scene_mng/asm/func_8001ED3C.s" } +#endif -// fopScnM_CreateReq__FssUsUl -// fopScnM_CreateReq(s16, s16, u16, u32) +#ifdef NONMATCHING +void fopScnM_CreateReq(s16 param_1, s16 param_2, u16 param_3, u32 param_4) { + u32 sceneRequestID = fopScnRq_Request(0, 0, param_1, (void*)param_4, param_2, param_3); + u32 tmp = (-sceneRequestID + -1); + return tmp - (sceneRequestID == 0) + (-sceneRequestID + -2) & 0xFF; +} +#else asm void fopScnM_CreateReq(s16, s16, u16, u32) { nofralloc #include "f/f_op_scene_mng/asm/func_8001ED84.s" } +#endif -// fopScnM_ReRequest__FsUl -// fopScnM_ReRequest(s16, u32) -asm void fopScnM_ReRequest(s16, u32) { - nofralloc -#include "f/f_op_scene_mng/asm/func_8001EDCC.s" +u32 fopScnM_ReRequest(s16 param_1, u32 param_2) { + if (l_scnRqID == -1) { + return 0; + } + + return fopScnRq_ReRequest(l_scnRqID, param_1, (void*)param_2); } -// fopScnM_Management__Fv -// fopScnM_Management(void) -asm void fopScnM_Management(void) { - nofralloc -#include "f/f_op_scene_mng/asm/func_8001EE10.s" +void fopScnM_Management(void) { + fopScnRq_Handler(); } -// fopScnM_Init__Fv -// fopScnM_Init(void) -asm void fopScnM_Init(void) { - nofralloc -#include "f/f_op_scene_mng/asm/func_8001EE30.s" +void fopScnM_Init(void) { + return; }