From 327dff36bedfbf052b8bb450976d90bade9884b4 Mon Sep 17 00:00:00 2001 From: Pheenoh Date: Wed, 17 Feb 2021 13:01:00 -0500 Subject: [PATCH] fopOvlpReq_Request OK --- asm/data.s | 4 +-- include/f/f_op/f_op_overlap_req.h | 12 +++------ .../f_op/f_op_overlap_req/asm/func_8001E954.s | 4 +-- src/f/f_op/f_op_overlap_req.cpp | 27 ++++++++++++++----- 4 files changed, 28 insertions(+), 19 deletions(-) diff --git a/asm/data.s b/asm/data.s index 7f57eeb0c96..08eddef2430 100644 --- a/asm/data.s +++ b/asm/data.s @@ -140,8 +140,8 @@ lbl_803A37FC: .global lbl_803A382C lbl_803A382C: .incbin "baserom.dol", 0x3A082C, 0x64 -.global lbl_803A3890 -lbl_803A3890: +.global phaseMethod +phaseMethod: .incbin "baserom.dol", 0x3A0890, 0x38 .global lbl_803A38C8 lbl_803A38C8: diff --git a/include/f/f_op/f_op_overlap_req.h b/include/f/f_op/f_op_overlap_req.h index fbc097a3161..9a7c6c55868 100644 --- a/include/f/f_op/f_op_overlap_req.h +++ b/include/f/f_op/f_op_overlap_req.h @@ -1,9 +1,10 @@ #ifndef F_F_OP_OVERLAP_REQ_H_ #define F_F_OP_OVERLAP_REQ_H_ +#include "SComponent/c_phase.h" #include "SComponent/c_request.h" -#include "f/f_pc/f_pc_layer.h" #include "dolphin/types.h" +#include "f/f_pc/f_pc_layer.h" class overlap_request_class { public: @@ -18,14 +19,7 @@ public: u8 field_0x12; u8 field_0x13; int field_0x14; - u8 field_0x18; - u8 field_0x19; - u8 field_0x1a; - u8 field_0x1b; - u8 field_0x1c; - u8 field_0x1d; - u8 field_0x1e; - u8 field_0x1f; + request_of_phase_process_class field_0x18; u8* field_0x20; layer_class* pCurrentLayer; }; diff --git a/include/f/f_op/f_op_overlap_req/asm/func_8001E954.s b/include/f/f_op/f_op_overlap_req/asm/func_8001E954.s index 35247ac8094..97fb20c6921 100644 --- a/include/f/f_op/f_op_overlap_req/asm/func_8001E954.s +++ b/include/f/f_op/f_op_overlap_req/asm/func_8001E954.s @@ -16,8 +16,8 @@ lbl_8001E988: /* 8001E98C 0001B8CC 48 24 7E A5 */ bl cReq_Command__FP18request_base_classUc /* 8001E990 0001B8D0 B3 DD 00 10 */ sth r30, 0x10(r29) /* 8001E994 0001B8D4 38 7D 00 18 */ addi r3, r29, 0x18 -/* 8001E998 0001B8D8 3C 80 80 3A */ lis r4, lbl_803A3890@ha -/* 8001E99C 0001B8DC 38 84 38 90 */ addi r4, r4, lbl_803A3890@l +/* 8001E998 0001B8D8 3C 80 80 3A */ lis r4, phaseMethod@ha +/* 8001E99C 0001B8DC 38 84 38 90 */ addi r4, r4, phaseMethod@l /* 8001E9A0 0001B8E0 48 24 7C 91 */ bl cPhs_Set /* 8001E9A4 0001B8E4 7F A3 EB 78 */ mr r3, r29 /* 8001E9A8 0001B8E8 7F E4 FB 78 */ mr r4, r31 diff --git a/src/f/f_op/f_op_overlap_req.cpp b/src/f/f_op/f_op_overlap_req.cpp index 766a0e2b25b..d191be96ece 100644 --- a/src/f/f_op/f_op_overlap_req.cpp +++ b/src/f/f_op/f_op_overlap_req.cpp @@ -23,7 +23,6 @@ void fopOvlpReq_Handler__FP21overlap_request_class(void); void fopOvlpReq_phase_Done__FP21overlap_request_class(void); void fopOvlpReq_SetPeektime__FP21overlap_request_classUs(void); void fopOvlpReq_Is_PeektimeLimit__FP21overlap_request_class(void); -void fopOvlpReq_SetPeektime(void); void fopOvlpReq_phase_Done(void); void func_8001E748(void); void func_8001E794(void); @@ -33,9 +32,11 @@ void func_8001E8A4(void); void func_8001E904(void); } +void fopOvlpReq_SetPeektime(overlap_request_class*, u16); + // additional symbols needed for f_op_overlap_req.cpp // autogenerated by split.py v0.4 at 2021-02-15 20:24:53.163658 -extern u8 lbl_803A3890; +extern cPhs__Handler* phaseMethod[8]; int fopOvlpReq_phase_Done(overlap_request_class* pOvlpReq) { if (fpcM_Delete(pOvlpReq->field_0x20) == 1) { @@ -107,13 +108,27 @@ int fopOvlpReq_phase_IsCreated(overlap_request_class* pOvlpReq) { int fopOvlpReq_phase_Create(overlap_request_class* pOvlpReq) { fpcLy_SetCurrentLayer(pOvlpReq->pCurrentLayer); - pOvlpReq->field_0x14 = fpcSCtRq_Request(fpcLy_CurrentLayer(),pOvlpReq->field_0x10, 0,0,0); + pOvlpReq->field_0x14 = fpcSCtRq_Request(fpcLy_CurrentLayer(), pOvlpReq->field_0x10, 0, 0, 0); return 2; } -asm request_base_class* fopOvlpReq_Request(overlap_request_class*, s16, u16) { - nofralloc -#include "f/f_op/f_op_overlap_req/asm/func_8001E954.s" +request_base_class* fopOvlpReq_Request(overlap_request_class* pOvlpReq, s16 param_2, u16 param_3) { + if (pOvlpReq->field_0x4 == 1) { + pOvlpReq = 0; + return (request_base_class*)pOvlpReq; + } + + cReq_Command((request_base_class*)pOvlpReq, 1); + pOvlpReq->field_0x10 = param_2; + cPhs_Set(&pOvlpReq->field_0x18, (cPhs__Handler*)phaseMethod); + fopOvlpReq_SetPeektime(pOvlpReq, param_3); + pOvlpReq->field_0x4 = 1; + pOvlpReq->field_0x2 = 1; + pOvlpReq->field_0x20 = 0; + pOvlpReq->field_0x8 = 0; + pOvlpReq->field_0xc = 0; + pOvlpReq->pCurrentLayer = fpcLy_RootLayer(); + return (request_base_class*)pOvlpReq; } asm int fopOvlpReq_Handler(overlap_request_class*) {