diff options
| author | Prakxo <87568477+Prakxo@users.noreply.github.com> | 2024-10-09 17:46:35 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-09 08:46:35 -0700 |
| commit | c7a6aa2b880c34fafc10fd8238ee3b7c222fee8c (patch) | |
| tree | fe8a760d848610f7b2168194cd0a647d3b80c59a /src/overlays/actors | |
| parent | 8639fa43c74e7052d94eaaa4c5b13218f5006621 (diff) | |
ac_arrange_room OK (#220)
* ac_arrange_room OK
* fix?
Diffstat (limited to 'src/overlays/actors')
| -rw-r--r-- | src/overlays/actors/ovl_Arrange_Room/ac_arrange_room.c | 204 | ||||
| -rw-r--r-- | src/overlays/actors/ovl_Arrange_Room/ac_arrange_room.h | 10 | ||||
| -rw-r--r-- | src/overlays/actors/ovl_Structure/ac_structure.c | 3 |
3 files changed, 197 insertions, 20 deletions
diff --git a/src/overlays/actors/ovl_Arrange_Room/ac_arrange_room.c b/src/overlays/actors/ovl_Arrange_Room/ac_arrange_room.c index 358044a..bb1721e 100644 --- a/src/overlays/actors/ovl_Arrange_Room/ac_arrange_room.c +++ b/src/overlays/actors/ovl_Arrange_Room/ac_arrange_room.c @@ -2,13 +2,16 @@ #include "m_actor_dlftbls.h" #include "m_object.h" #include "overlays/gamestates/ovl_play/m_play.h" +#include "m_common_data.h" +#include "segment_symbols.h" +#include "m_rcp.h" -void Arrange_Room_Actor_ct(Actor* thisx, Game_Play* game_play); -void Arrange_Room_Actor_dt(Actor* thisx, Game_Play* game_play); +void Arrange_Room_Actor_ct(Actor* actor, Game_Play* play); +void Arrange_Room_Actor_dt(Actor* actor, Game_Play* game_play); void Arrange_Room_Actor_move(Actor* thisx, Game_Play* game_play); -void Arrange_Room_Actor_draw(Actor* thisx, Game_Play* game_play); +void Arrange_Room_Actor_draw(Actor* actor, Game_Play* play); +void aAR_Redma(); -#if 0 ActorProfile Arrange_Room_Profile = { /* */ ACTOR_ARRANGE_ROOM, /* */ ACTOR_PART_5, @@ -22,26 +25,195 @@ ActorProfile Arrange_Room_Profile = { /* */ Arrange_Room_Actor_draw, /* */ NULL, }; -#endif -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/ovl_Arrange_Room/ac_arrange_room/func_80950E50_jp.s") +extern Gfx rom_myhome2_floor_model[]; +extern Gfx rom_myhome2_wall_model[]; +extern Gfx rom_myhome2_wall_modelT[]; -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/ovl_Arrange_Room/ac_arrange_room/func_80950EC8_jp.s") +#define AR_WALL_ROOM_SIZE 0x1020 +#define AR_FLOOR_ROOM_SIZE 0x2020 -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/ovl_Arrange_Room/ac_arrange_room/func_80950F1C_jp.s") +#define AR_TEXTURE_SIZE 0x800 -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/ovl_Arrange_Room/ac_arrange_room/func_80950F70_jp.s") +void* aAR_SecureDmaRam(Game_Play* play, s32 size) { + s32 id = 0; + u8* segment; + s32 num = play->objectExchangeBank.num; -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/ovl_Arrange_Room/ac_arrange_room/Arrange_Room_Actor_ct.s") + if (mSc_secure_exchange_keep_bank(&play->objectExchangeBank, id, ALIGN8(size))) { + segment = play->objectExchangeBank.status[num].segment; + return segment; + } else { + return NULL; + } +} -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/ovl_Arrange_Room/ac_arrange_room/Arrange_Room_Actor_dt.s") +// refactored to mRmTp_CopyWallData, name unknown -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/ovl_Arrange_Room/ac_arrange_room/func_80951124_jp.s") +void aAR_CopyWallData(void* vram, s32 idx) { + if (vram != NULL) { + DmaMgr_RequestSyncDebug(vram, SEGMENT_ROM_START(object_0182A000) + (AR_WALL_ROOM_SIZE * idx), AR_WALL_ROOM_SIZE, + "../ac_arrange_room.c", 169); + } +} -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/ovl_Arrange_Room/ac_arrange_room/func_809512C4_jp.s") +// refactored to mRmTp_CopyFloorData, name unknown -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/ovl_Arrange_Room/ac_arrange_room/Arrange_Room_Actor_draw.s") +void aAR_CopyFloorData(void* vram, s32 idx) { + if (vram != NULL) { + DmaMgr_RequestSyncDebug(vram, SEGMENT_ROM_START(object_017A1000) + (AR_FLOOR_ROOM_SIZE * idx), + AR_FLOOR_ROOM_SIZE, "../ac_arrange_room.c", 190); + } +} -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/ovl_Arrange_Room/ac_arrange_room/Arrange_Room_Actor_move.s") +void aAR_SetClip(Actor* actor, s32 flag) { + Arrange_Room* arrangeRoom = (Arrange_Room*)actor; -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/ovl_Arrange_Room/ac_arrange_room/func_80951480_jp.s") + if (flag != FALSE) { + arrangeRoom->clip.arrangeRoomActor = arrangeRoom; + arrangeRoom->clip.proc = aAR_Redma; + common_data.clip.arrangeRoomClip = &arrangeRoom->clip; + } else { + common_data.clip.arrangeRoomClip = NULL; + } +} + +void Arrange_Room_Actor_ct(Actor* actor, Game_Play* play) { + Arrange_Room* arrangeRoom = (Arrange_Room*)actor; + s16 wallFloorIdx; + s16 wallIdx; + s16 floorIdx; + UNUSED s32 pad; + + mNpc_RenewalNpcRoom(&wallFloorIdx); + actor->params = wallFloorIdx; + aAR_SetClip(actor, TRUE); + wallIdx = (wallFloorIdx >> 8) & 0xFF; + floorIdx = (u8)wallFloorIdx; + + if (floorIdx < 0) { + floorIdx = 0; + } else if (floorIdx >= 0x40) { + floorIdx = 0x3F; + } + + if (wallIdx < 0) { + wallIdx = 0; + } else if (wallIdx >= 0x40) { + wallIdx = 0x3F; + } + + arrangeRoom->vram = NULL; + arrangeRoom->wallDataPtr = NULL; + arrangeRoom->wallIdx = wallIdx; + arrangeRoom->floorDataPtr = NULL; + arrangeRoom->floorIdx = floorIdx; + + { + s32 size; + size = SEGMENT_ROM_SIZE(segment_013E7000); + size = ALIGN8(size); + arrangeRoom->vram = aAR_SecureDmaRam(play, size); + + if (arrangeRoom->vram != NULL) { + DmaMgr_RequestSyncDebug(arrangeRoom->vram, SEGMENT_ROM_START(segment_013E7000), size, + "../ac_arrange_room.c", 332); + } + } + + arrangeRoom->wallDataPtr = aAR_SecureDmaRam(play, AR_WALL_ROOM_SIZE); + + if (arrangeRoom->wallDataPtr != NULL) { + aAR_CopyWallData(arrangeRoom->wallDataPtr, arrangeRoom->wallIdx); + } + + arrangeRoom->floorDataPtr = aAR_SecureDmaRam(play, AR_FLOOR_ROOM_SIZE); + + if (arrangeRoom->floorDataPtr != NULL) { + aAR_CopyFloorData(arrangeRoom->floorDataPtr, arrangeRoom->floorIdx); + } +} + +void Arrange_Room_Actor_dt(Actor* actor, UNUSED Game_Play* play) { + aAR_SetClip(actor, FALSE); +} + +void aAR_DrawFloor(Actor* actor, Game_Play* play) { + u8* ptr; + UNUSED u8* ptr2; + UNUSED u8* ptr3; + UNUSED u8* ptr4; + UNUSED u8* ptr5; + Arrange_Room* arrangeRoom = (Arrange_Room*)actor; + UNUSED s32 pad; + + ptr = arrangeRoom->floorDataPtr; + _texture_z_light_fog_prim(play->state.gfxCtx); + + OPEN_DISPS(play->state.gfxCtx); + + Matrix_translate(0.0f, 0.0f, 0.0f, 0); + Matrix_scale(0.05f, 0.05f, 0.05f, 1); + + gSPMatrix(POLY_OPA_DISP++, _Matrix_to_Mtx_new(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gSPSegment(POLY_OPA_DISP++, G_MWO_SEGMENT_6, arrangeRoom->vram); + gSPSegment(POLY_OPA_DISP++, G_MWO_SEGMENT_C, ptr); + gSPSegment(POLY_OPA_DISP++, G_MWO_SEGMENT_8, ptr + (0x20 + (AR_TEXTURE_SIZE * 0))); + gSPSegment(POLY_OPA_DISP++, G_MWO_SEGMENT_9, ptr + (0x20 + (AR_TEXTURE_SIZE * 1))); + gSPSegment(POLY_OPA_DISP++, G_MWO_SEGMENT_A, ptr + (0x20 + (AR_TEXTURE_SIZE * 2))); + gSPSegment(POLY_OPA_DISP++, G_MWO_SEGMENT_B, ptr + (0x20 + (AR_TEXTURE_SIZE * 3))); + gSPDisplayList(POLY_OPA_DISP++, rom_myhome2_floor_model); + + CLOSE_DISPS(graph); +} + +void aAR_DrawWall(Actor* actor, Game_Play* play) { + Arrange_Room* arrangeRoom = (Arrange_Room*)actor; + u8* ptr; + UNUSED u8* ptr2; + UNUSED u8* ptr3; + UNUSED s32 pad; + + ptr = arrangeRoom->wallDataPtr; + + _texture_z_light_fog_prim(play->state.gfxCtx); + + OPEN_DISPS(play->state.gfxCtx); + + Matrix_translate(0.0f, 0.0f, 0.0f, 0); + Matrix_scale(0.05f, 0.05f, 0.05f, 1); + + gSPMatrix(POLY_OPA_DISP++, _Matrix_to_Mtx_new(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPSegment(POLY_OPA_DISP++, G_MWO_SEGMENT_6, arrangeRoom->vram); + gSPSegment(POLY_OPA_DISP++, G_MWO_SEGMENT_8, ptr + (0x20 + (AR_TEXTURE_SIZE * 0))); + gSPSegment(POLY_OPA_DISP++, G_MWO_SEGMENT_9, ptr + (0x20 + (AR_TEXTURE_SIZE * 1))); + gSPSegment(POLY_OPA_DISP++, G_MWO_SEGMENT_A, ptr); + + gSPDisplayList(POLY_OPA_DISP++, rom_myhome2_wall_model); + gSPDisplayList(POLY_OPA_DISP++, rom_myhome2_wall_modelT); + + CLOSE_DISPS(play->state.gfxCtx); +} + +void Arrange_Room_Actor_draw(Actor* actor, Game_Play* play) { + Global_kankyo_set_room_prim(play); + aAR_DrawFloor(actor, play); + aAR_DrawWall(actor, play); +} + +void Arrange_Room_Actor_move(UNUSED Actor* actor, UNUSED Game_Play* play) { +} + +void aAR_Redma() { + Arrange_Room* arrangeRoom = common_data.clip.arrangeRoomClip->arrangeRoomActor; + + if (arrangeRoom != NULL) { + u32 start = SEGMENT_ROM_START(segment_013E7000); + s32 size = ALIGN8(SEGMENT_ROM_SIZE(segment_013E7000)); + + DmaMgr_RequestSyncDebug(arrangeRoom->vram, start, size, "../ac_arrange_room.c", 545); + aAR_CopyWallData(arrangeRoom->wallDataPtr, arrangeRoom->wallIdx); + aAR_CopyFloorData(arrangeRoom->floorDataPtr, arrangeRoom->floorIdx); + } +} diff --git a/src/overlays/actors/ovl_Arrange_Room/ac_arrange_room.h b/src/overlays/actors/ovl_Arrange_Room/ac_arrange_room.h index 1e6de9e..603c955 100644 --- a/src/overlays/actors/ovl_Arrange_Room/ac_arrange_room.h +++ b/src/overlays/actors/ovl_Arrange_Room/ac_arrange_room.h @@ -4,15 +4,19 @@ #include "ultra64.h" #include "m_actor.h" #include "unk.h" +#include "m_clip.h" struct Game_Play; struct Arrange_Room; -typedef void (*Arrange_RoomActionFunc)(struct Arrange_Room*, struct Game_Play*); - typedef struct Arrange_Room { /* 0x000 */ Actor actor; - /* 0x174 */ UNK_TYPE1 unk_174[0x1C]; + /* 0x174 */ u8* vram; + /* 0x178 */ u8* wallDataPtr; + /* 0x17C */ s32 wallIdx; + /* 0x180 */ u8* floorDataPtr; + /* 0x184 */ s32 floorIdx; + /* 0x188 */ Arrange_RoomClip clip; } Arrange_Room; // size = 0x190 #endif diff --git a/src/overlays/actors/ovl_Structure/ac_structure.c b/src/overlays/actors/ovl_Structure/ac_structure.c index 635f06c..bec0ca9 100644 --- a/src/overlays/actors/ovl_Structure/ac_structure.c +++ b/src/overlays/actors/ovl_Structure/ac_structure.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "ac_structure.h" #include "macros.h" #include "m_actor_dlftbls.h" @@ -8,6 +7,8 @@ #include "m_object.h" #include "overlays/gamestates/ovl_play/m_play.h" #include "segment_symbols.h" +#include "prevent_bss_reordering2.h" +#include "prevent_bss_reordering.h" #define THIS ((Structure*)thisx) |
