some d_map_path_fmap work

This commit is contained in:
TakaRikka 2023-01-30 22:52:13 -08:00
parent cbfdf6533c
commit ce13823586
9 changed files with 244 additions and 331 deletions

View File

@ -1,38 +0,0 @@
lbl_8003D790:
/* 8003D790 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 8003D794 7C 08 02 A6 */ mflr r0
/* 8003D798 90 01 00 24 */ stw r0, 0x24(r1)
/* 8003D79C 39 61 00 20 */ addi r11, r1, 0x20
/* 8003D7A0 48 32 4A 39 */ bl _savegpr_28
/* 8003D7A4 7C 7C 1B 78 */ mr r28, r3
/* 8003D7A8 7C 9D 23 78 */ mr r29, r4
/* 8003D7AC 7C BE 2B 78 */ mr r30, r5
/* 8003D7B0 83 E3 00 04 */ lwz r31, 4(r3)
/* 8003D7B4 38 60 00 0C */ li r3, 0xc
/* 8003D7B8 48 29 14 95 */ bl __nw__FUl
/* 8003D7BC 28 03 00 00 */ cmplwi r3, 0
/* 8003D7C0 41 82 00 10 */ beq lbl_8003D7D0
/* 8003D7C4 38 00 00 00 */ li r0, 0
/* 8003D7C8 90 03 00 00 */ stw r0, 0(r3)
/* 8003D7CC 90 03 00 04 */ stw r0, 4(r3)
lbl_8003D7D0:
/* 8003D7D0 80 1C 00 00 */ lwz r0, 0(r28)
/* 8003D7D4 28 00 00 00 */ cmplwi r0, 0
/* 8003D7D8 40 82 00 08 */ bne lbl_8003D7E0
/* 8003D7DC 90 7C 00 00 */ stw r3, 0(r28)
lbl_8003D7E0:
/* 8003D7E0 93 C3 00 00 */ stw r30, 0(r3)
/* 8003D7E4 38 00 00 00 */ li r0, 0
/* 8003D7E8 90 03 00 04 */ stw r0, 4(r3)
/* 8003D7EC 9B A3 00 08 */ stb r29, 8(r3)
/* 8003D7F0 28 1F 00 00 */ cmplwi r31, 0
/* 8003D7F4 41 82 00 08 */ beq lbl_8003D7FC
/* 8003D7F8 90 7F 00 04 */ stw r3, 4(r31)
lbl_8003D7FC:
/* 8003D7FC 90 7C 00 04 */ stw r3, 4(r28)
/* 8003D800 39 61 00 20 */ addi r11, r1, 0x20
/* 8003D804 48 32 4A 21 */ bl _restgpr_28
/* 8003D808 80 01 00 24 */ lwz r0, 0x24(r1)
/* 8003D80C 7C 08 03 A6 */ mtlr r0
/* 8003D810 38 21 00 20 */ addi r1, r1, 0x20
/* 8003D814 4E 80 00 20 */ blr

View File

@ -1,14 +0,0 @@
lbl_8003D92C:
/* 8003D92C 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 8003D930 7C 08 02 A6 */ mflr r0
/* 8003D934 90 01 00 14 */ stw r0, 0x14(r1)
/* 8003D938 88 C3 00 10 */ lbz r6, 0x10(r3)
/* 8003D93C 80 03 00 00 */ lwz r0, 0(r3)
/* 8003D940 28 00 00 00 */ cmplwi r0, 0
/* 8003D944 41 82 00 08 */ beq lbl_8003D94C
/* 8003D948 4B FF FF 21 */ bl buildTresTypeGroup__22dMenu_Fmap_room_data_cFiii
lbl_8003D94C:
/* 8003D94C 80 01 00 14 */ lwz r0, 0x14(r1)
/* 8003D950 7C 08 03 A6 */ mtlr r0
/* 8003D954 38 21 00 10 */ addi r1, r1, 0x10
/* 8003D958 4E 80 00 20 */ blr

View File

@ -1,101 +0,0 @@
lbl_8003D9D8:
/* 8003D9D8 94 21 FF 80 */ stwu r1, -0x80(r1)
/* 8003D9DC 7C 08 02 A6 */ mflr r0
/* 8003D9E0 90 01 00 84 */ stw r0, 0x84(r1)
/* 8003D9E4 DB E1 00 70 */ stfd f31, 0x70(r1)
/* 8003D9E8 F3 E1 00 78 */ psq_st f31, 120(r1), 0, 0 /* qr0 */
/* 8003D9EC DB C1 00 60 */ stfd f30, 0x60(r1)
/* 8003D9F0 F3 C1 00 68 */ psq_st f30, 104(r1), 0, 0 /* qr0 */
/* 8003D9F4 DB A1 00 50 */ stfd f29, 0x50(r1)
/* 8003D9F8 F3 A1 00 58 */ psq_st f29, 88(r1), 0, 0 /* qr0 */
/* 8003D9FC DB 81 00 40 */ stfd f28, 0x40(r1)
/* 8003DA00 F3 81 00 48 */ psq_st f28, 72(r1), 0, 0 /* qr0 */
/* 8003DA04 DB 61 00 30 */ stfd f27, 0x30(r1)
/* 8003DA08 F3 61 00 38 */ psq_st f27, 56(r1), 0, 0 /* qr0 */
/* 8003DA0C DB 41 00 20 */ stfd f26, 0x20(r1)
/* 8003DA10 F3 41 00 28 */ psq_st f26, 40(r1), 0, 0 /* qr0 */
/* 8003DA14 39 61 00 20 */ addi r11, r1, 0x20
/* 8003DA18 48 32 47 C1 */ bl _savegpr_28
/* 8003DA1C 7C 7C 1B 78 */ mr r28, r3
/* 8003DA20 7C 9D 23 78 */ mr r29, r4
/* 8003DA24 FF 40 08 90 */ fmr f26, f1
/* 8003DA28 FF 60 10 90 */ fmr f27, f2
/* 8003DA2C 83 E3 00 0C */ lwz r31, 0xc(r3)
/* 8003DA30 3C 60 80 45 */ lis r3, __float_max@ha /* 0x80450AE8@ha */
/* 8003DA34 C0 03 0A E8 */ lfs f0, __float_max@l(r3) /* 0x80450AE8@l */
/* 8003DA38 FF E0 00 90 */ fmr f31, f0
/* 8003DA3C FF C0 00 90 */ fmr f30, f0
/* 8003DA40 FC 00 00 50 */ fneg f0, f0
/* 8003DA44 FF A0 00 90 */ fmr f29, f0
/* 8003DA48 FF 80 00 90 */ fmr f28, f0
/* 8003DA4C 3B C0 00 00 */ li r30, 0
/* 8003DA50 48 00 00 74 */ b lbl_8003DAC4
lbl_8003DA54:
/* 8003DA54 7F E3 FB 78 */ mr r3, r31
/* 8003DA58 7F A4 EB 78 */ mr r4, r29
/* 8003DA5C 7F C5 F3 78 */ mr r5, r30
/* 8003DA60 FC 20 D0 90 */ fmr f1, f26
/* 8003DA64 FC 40 D8 90 */ fmr f2, f27
/* 8003DA68 C0 7C 00 14 */ lfs f3, 0x14(r28)
/* 8003DA6C C0 9C 00 18 */ lfs f4, 0x18(r28)
/* 8003DA70 4B FF FE BD */ bl buildFmapRoomData__22dMenu_Fmap_room_data_cFiiffff
/* 8003DA74 80 7F 00 00 */ lwz r3, 0(r31)
/* 8003DA78 80 63 00 04 */ lwz r3, 4(r3)
/* 8003DA7C C0 03 00 00 */ lfs f0, 0(r3)
/* 8003DA80 C0 23 00 04 */ lfs f1, 4(r3)
/* 8003DA84 C0 43 00 08 */ lfs f2, 8(r3)
/* 8003DA88 C0 63 00 0C */ lfs f3, 0xc(r3)
/* 8003DA8C FC 00 F8 40 */ fcmpo cr0, f0, f31
/* 8003DA90 40 80 00 08 */ bge lbl_8003DA98
/* 8003DA94 FF E0 00 90 */ fmr f31, f0
lbl_8003DA98:
/* 8003DA98 FC 01 F0 40 */ fcmpo cr0, f1, f30
/* 8003DA9C 40 80 00 08 */ bge lbl_8003DAA4
/* 8003DAA0 FF C0 08 90 */ fmr f30, f1
lbl_8003DAA4:
/* 8003DAA4 FC 02 E8 40 */ fcmpo cr0, f2, f29
/* 8003DAA8 40 81 00 08 */ ble lbl_8003DAB0
/* 8003DAAC FF A0 10 90 */ fmr f29, f2
lbl_8003DAB0:
/* 8003DAB0 FC 03 E0 40 */ fcmpo cr0, f3, f28
/* 8003DAB4 40 81 00 08 */ ble lbl_8003DABC
/* 8003DAB8 FF 80 18 90 */ fmr f28, f3
lbl_8003DABC:
/* 8003DABC 83 FF 00 08 */ lwz r31, 8(r31)
/* 8003DAC0 3B DE 00 01 */ addi r30, r30, 1
lbl_8003DAC4:
/* 8003DAC4 28 1F 00 00 */ cmplwi r31, 0
/* 8003DAC8 40 82 FF 8C */ bne lbl_8003DA54
/* 8003DACC 2C 1E 00 00 */ cmpwi r30, 0
/* 8003DAD0 40 81 00 18 */ ble lbl_8003DAE8
/* 8003DAD4 D3 FC 00 1C */ stfs f31, 0x1c(r28)
/* 8003DAD8 D3 DC 00 20 */ stfs f30, 0x20(r28)
/* 8003DADC D3 BC 00 24 */ stfs f29, 0x24(r28)
/* 8003DAE0 D3 9C 00 28 */ stfs f28, 0x28(r28)
/* 8003DAE4 48 00 00 18 */ b lbl_8003DAFC
lbl_8003DAE8:
/* 8003DAE8 C0 02 84 20 */ lfs f0, lit_3894(r2)
/* 8003DAEC D0 1C 00 1C */ stfs f0, 0x1c(r28)
/* 8003DAF0 D0 1C 00 20 */ stfs f0, 0x20(r28)
/* 8003DAF4 D0 1C 00 24 */ stfs f0, 0x24(r28)
/* 8003DAF8 D0 1C 00 28 */ stfs f0, 0x28(r28)
lbl_8003DAFC:
/* 8003DAFC 7F C3 F3 78 */ mr r3, r30
/* 8003DB00 E3 E1 00 78 */ psq_l f31, 120(r1), 0, 0 /* qr0 */
/* 8003DB04 CB E1 00 70 */ lfd f31, 0x70(r1)
/* 8003DB08 E3 C1 00 68 */ psq_l f30, 104(r1), 0, 0 /* qr0 */
/* 8003DB0C CB C1 00 60 */ lfd f30, 0x60(r1)
/* 8003DB10 E3 A1 00 58 */ psq_l f29, 88(r1), 0, 0 /* qr0 */
/* 8003DB14 CB A1 00 50 */ lfd f29, 0x50(r1)
/* 8003DB18 E3 81 00 48 */ psq_l f28, 72(r1), 0, 0 /* qr0 */
/* 8003DB1C CB 81 00 40 */ lfd f28, 0x40(r1)
/* 8003DB20 E3 61 00 38 */ psq_l f27, 56(r1), 0, 0 /* qr0 */
/* 8003DB24 CB 61 00 30 */ lfd f27, 0x30(r1)
/* 8003DB28 E3 41 00 28 */ psq_l f26, 40(r1), 0, 0 /* qr0 */
/* 8003DB2C CB 41 00 20 */ lfd f26, 0x20(r1)
/* 8003DB30 39 61 00 20 */ addi r11, r1, 0x20
/* 8003DB34 48 32 46 F1 */ bl _restgpr_28
/* 8003DB38 80 01 00 84 */ lwz r0, 0x84(r1)
/* 8003DB3C 7C 08 03 A6 */ mtlr r0
/* 8003DB40 38 21 00 80 */ addi r1, r1, 0x80
/* 8003DB44 4E 80 00 20 */ blr

View File

@ -1,55 +0,0 @@
lbl_8003D868:
/* 8003D868 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 8003D86C 7C 08 02 A6 */ mflr r0
/* 8003D870 90 01 00 24 */ stw r0, 0x24(r1)
/* 8003D874 39 61 00 20 */ addi r11, r1, 0x20
/* 8003D878 48 32 49 5D */ bl _savegpr_27
/* 8003D87C 7C 7B 1B 78 */ mr r27, r3
/* 8003D880 7C DC 33 78 */ mr r28, r6
/* 8003D884 80 63 00 00 */ lwz r3, 0(r3)
/* 8003D888 80 63 00 00 */ lwz r3, 0(r3)
/* 8003D88C 28 03 00 00 */ cmplwi r3, 0
/* 8003D890 41 82 00 84 */ beq lbl_8003D914
/* 8003D894 83 C3 00 00 */ lwz r30, 0(r3)
/* 8003D898 83 A3 00 04 */ lwz r29, 4(r3)
/* 8003D89C 80 1B 00 04 */ lwz r0, 4(r27)
/* 8003D8A0 28 00 00 00 */ cmplwi r0, 0
/* 8003D8A4 40 82 00 34 */ bne lbl_8003D8D8
/* 8003D8A8 38 60 00 88 */ li r3, 0x88
/* 8003D8AC 48 29 13 A1 */ bl __nw__FUl
/* 8003D8B0 7C 7F 1B 79 */ or. r31, r3, r3
/* 8003D8B4 41 82 00 20 */ beq lbl_8003D8D4
/* 8003D8B8 3C 80 80 04 */ lis r4, __ct__26fmpTresTypeGroupDataList_cFv@ha /* 0x8003EC90@ha */
/* 8003D8BC 38 84 EC 90 */ addi r4, r4, __ct__26fmpTresTypeGroupDataList_cFv@l /* 0x8003EC90@l */
/* 8003D8C0 3C A0 80 04 */ lis r5, __dt__26fmpTresTypeGroupDataList_cFv@ha /* 0x8003EB10@ha */
/* 8003D8C4 38 A5 EB 10 */ addi r5, r5, __dt__26fmpTresTypeGroupDataList_cFv@l /* 0x8003EB10@l */
/* 8003D8C8 38 C0 00 08 */ li r6, 8
/* 8003D8CC 38 E0 00 11 */ li r7, 0x11
/* 8003D8D0 48 32 44 91 */ bl __construct_array
lbl_8003D8D4:
/* 8003D8D4 93 FB 00 04 */ stw r31, 4(r27)
lbl_8003D8D8:
/* 8003D8D8 3B E0 00 00 */ li r31, 0
/* 8003D8DC 48 00 00 30 */ b lbl_8003D90C
lbl_8003D8E0:
/* 8003D8E0 9B 9D 00 01 */ stb r28, 1(r29)
/* 8003D8E4 88 7D 00 11 */ lbz r3, 0x11(r29)
/* 8003D8E8 48 05 EB C9 */ bl getTypeToTypeGroupNo__7dTres_cFUc
/* 8003D8EC 7C 64 1B 78 */ mr r4, r3
/* 8003D8F0 80 7B 00 04 */ lwz r3, 4(r27)
/* 8003D8F4 54 80 1D 78 */ rlwinm r0, r4, 3, 0x15, 0x1c
/* 8003D8F8 7C 63 02 14 */ add r3, r3, r0
/* 8003D8FC 7F A5 EB 78 */ mr r5, r29
/* 8003D900 4B FF FE 91 */ bl addTypeGroupData__26fmpTresTypeGroupDataList_cFUcPCQ27dTres_c6data_s
/* 8003D904 3B BD 00 14 */ addi r29, r29, 0x14
/* 8003D908 3B FF 00 01 */ addi r31, r31, 1
lbl_8003D90C:
/* 8003D90C 7C 1F F0 00 */ cmpw r31, r30
/* 8003D910 41 80 FF D0 */ blt lbl_8003D8E0
lbl_8003D914:
/* 8003D914 39 61 00 20 */ addi r11, r1, 0x20
/* 8003D918 48 32 49 09 */ bl _restgpr_27
/* 8003D91C 80 01 00 24 */ lwz r0, 0x24(r1)
/* 8003D920 7C 08 03 A6 */ mtlr r0
/* 8003D924 38 21 00 20 */ addi r1, r1, 0x20
/* 8003D928 4E 80 00 20 */ blr

View File

@ -1,13 +0,0 @@
lbl_8003DB48:
/* 8003DB48 80 63 00 00 */ lwz r3, 0(r3)
/* 8003DB4C 38 A0 00 00 */ li r5, 0
/* 8003DB50 48 00 00 0C */ b lbl_8003DB5C
lbl_8003DB54:
/* 8003DB54 80 63 00 10 */ lwz r3, 0x10(r3)
/* 8003DB58 38 A5 00 01 */ addi r5, r5, 1
lbl_8003DB5C:
/* 8003DB5C 28 03 00 00 */ cmplwi r3, 0
/* 8003DB60 4D 82 00 20 */ beqlr
/* 8003DB64 7C 05 20 00 */ cmpw r5, r4
/* 8003DB68 41 80 FF EC */ blt lbl_8003DB54
/* 8003DB6C 4E 80 00 20 */ blr

View File

@ -41,8 +41,8 @@ public:
}; // Size: 0x1C
struct list_class {
/* 0x0 */ typeGroupData_c* field_0x0;
/* 0x4 */ typeGroupData_c* field_0x4;
/* 0x0 */ int field_0x0;
/* 0x4 */ data_s* field_0x4;
/* 0x8 */ u8 mNumber;
};
@ -60,7 +60,7 @@ public:
/* 8009C3B4 */ static typeGroupData_c* getNextData(dTres_c::typeGroupData_c const*);
/* 8009C3CC */ static void setPosition(int, u8, Vec const*, int);
/* 8009C49C */ static int getTypeGroupNoToType(u8);
/* 8009C4B0 */ static int getTypeToTypeGroupNo(u8);
/* 8009C4B0 */ static u8 getTypeToTypeGroupNo(u8);
static int getTypeGroupNumber(int index) {
return mTypeGroupListAll[index].mNumber;

View File

@ -264,7 +264,8 @@ dTres_c::typeGroupData_c* dTres_c::getFirstData(u8 listIdx) {
return NULL;
}
return mTypeGroupListAll[listIdx].field_0x0;
// this is wrong, fix later
return (dTres_c::typeGroupData_c*)mTypeGroupListAll[listIdx].field_0x0;
}
/* 8009C39C-8009C3B4 096CDC 0018+00 2/2 3/3 0/0 .text
@ -327,8 +328,8 @@ int dTres_c::getTypeGroupNoToType(u8 i_typeGroupNo) {
/* 8009C4B0-8009C4FC 096DF0 004C+00 1/1 3/3 0/0 .text getTypeToTypeGroupNo__7dTres_cFUc
*/
int dTres_c::getTypeToTypeGroupNo(u8 i_type) {
u8 groupNo = 17;
u8 dTres_c::getTypeToTypeGroupNo(u8 i_type) {
int groupNo = 17;
for (int i = 0; i < 17; i++) {
if (i_type == typeToTypeGroup[i][0]) {
groupNo = typeToTypeGroup[i][1];

View File

@ -4,8 +4,6 @@
//
#include "d/map/d_map_path.h"
#include "dol2asm.h"
#include "dolphin/types.h"
#include "d/com/d_com_inf_game.h"
#include "m_Do/m_Do_lib.h"
@ -42,25 +40,12 @@ extern "C" u8 m_texObjAgg__8dMpath_n[28];
// External References:
//
extern "C" void mDoLib_setResTimgObj__FPC7ResTIMGP9_GXTexObjUlP10_GXTlutObj();
extern "C" void draw__12dDlst_base_cFv();
extern "C" bool isDrawType__11dDrawPath_cFi();
extern "C" void __dt__18dRenderingFDAmap_cFv();
extern "C" void __dt__11dDrawPath_cFv();
extern "C" void getLineColor__11dDrawPath_cFii();
extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci();
extern "C" void* __nw__FUl();
extern "C" void __dl__FPv();
extern "C" void GXClearVtxDesc();
extern "C" void GXPixModeSync();
extern "C" void __register_global_object();
extern "C" void _savegpr_26();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" extern Mtx g_mDoMtx_identity;
//
// Declarations:
@ -93,7 +78,7 @@ void dMpath_n::dTexObjAggregate_c::remove() {
void dDrawPath_c::rendering(dDrawPath_c::line_class const* p_line) {
if (isDrawType(p_line->unk0)) {
int width = getLineWidth(p_line->unk1);
if (width > 0 && p_line->unk2 >= 2) {
GXSetLineWidth(width, GX_TO_ZERO);
GXSetTevColor(GX_TEVREG0, *getLineColor(p_line->unk0 & 0x3F, p_line->unk1));
@ -114,7 +99,7 @@ void dDrawPath_c::rendering(dDrawPath_c::line_class const* p_line) {
void dDrawPath_c::rendering(dDrawPath_c::poly_class const* p_poly) {
if (isDrawType(p_poly->field_0x0)) {
GXSetTevColor(GX_TEVREG0, *getColor(p_poly->field_0x0 & 0x3F));
if (p_poly->field_0x1 >= 3) {
GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, p_poly->field_0x1);
@ -169,7 +154,7 @@ void dDrawPath_c::rendering(dDrawPath_c::room_class const* p_room) {
if (floor != NULL) {
for (int i = 0; i < p_room->field_0x0; i++) {
if (isRenderingFloor(floor->field_0x0)) {
rendering(floor);
rendering(floor);
}
floor++;
}
@ -189,7 +174,7 @@ void dDrawPath_c::drawPath() {
/* 8003CD38-8003CDAC 037678 0074+00 0/0 3/3 0/0 .text
* makeResTIMG__15dRenderingMap_cCFP7ResTIMGUsUsPUcPUcUs */
void dRenderingMap_c::makeResTIMG(ResTIMG* p_image, u16 width, u16 height, u8* p_data,
u8* p_palette, u16 param_5) const {
u8* p_palette, u16 param_5) const {
p_image->format = GX_TF_CI14;
p_image->alphaEnabled = 2;
p_image->width = width;
@ -253,7 +238,8 @@ void dRenderingFDAmap_c::setTevSettingIntensityTextureToCI() const {
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_KONST, GX_CC_TEXC, GX_CC_C1);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_CPREV, GX_CC_C2, GX_CC_CPREV, GX_CC_ZERO);
GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_COMP_R8_GT, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_COMP_R8_GT, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE,
GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_TEXA);
@ -324,7 +310,7 @@ dMpath_n::dTexObjAggregate_c dMpath_n::m_texObjAgg;
* make the map look worse for extra speed in the emulator, especially in large
* areas such as hyrule field.
*/
//#define HYRULE_FIELD_SPEEDHACK
// #define HYRULE_FIELD_SPEEDHACK
/* 8003D3C0-8003D68C 037D00 02CC+00 0/0 2/2 0/0 .text
* renderingDecoration__18dRenderingFDAmap_cFPCQ211dDrawPath_c10line_class */
@ -333,6 +319,7 @@ void dRenderingFDAmap_c::renderingDecoration(dDrawPath_c::line_class const* p_li
if (width <= 0) {
return;
}
setTevSettingIntensityTextureToCI();
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_INDEX16);
@ -341,6 +328,7 @@ void dRenderingFDAmap_c::renderingDecoration(dDrawPath_c::line_class const* p_li
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_POS_XYZ, GX_F32, 0);
GXSetNumTevStages(1);
GXLoadTexObj(dMpath_n::m_texObjAgg.mp_texObj[6], GX_TEXMAP0);
u16* unk = p_line->unk4;
s32 unk2 = p_line->unk2;
GXSetLineWidth(width, GX_TO_ONE);
@ -349,6 +337,7 @@ void dRenderingFDAmap_c::renderingDecoration(dDrawPath_c::line_class const* p_li
GXSetTevColor(GX_TEVREG0, lineColor);
lineColor.r = lineColor.r - 4;
GXSetTevColor(GX_TEVREG1, lineColor);
for (int i = 0; i < unk2; unk++, i++) {
#ifndef HYRULE_FIELD_SPEEDHACK
if (i < unk2 - 1) {
@ -374,6 +363,7 @@ void dRenderingFDAmap_c::renderingDecoration(dDrawPath_c::line_class const* p_li
GXTexCoord2f32(0, 0);
i_GXEnd();
}
setTevSettingNonTextureDirectColor();
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_INDEX16);
@ -393,7 +383,7 @@ s32 dRenderingFDAmap_c::getDecorationLineWidth(int param_0) {
/* ############################################################################################## */
/* 803A7C90-803A7CF8 004DB0 0068+00 0/0 12/12 0/0 .data __vt__18dRenderingFDAmap_c */
SECTION_DATA extern void* __vt__18dRenderingFDAmap_c[26] = {
extern void* __vt__18dRenderingFDAmap_c[26] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)draw__12dDlst_base_cFv,
@ -423,7 +413,7 @@ SECTION_DATA extern void* __vt__18dRenderingFDAmap_c[26] = {
};
/* 803A7CF8-803A7D38 004E18 0040+00 0/0 15/15 0/0 .data __vt__11dDrawPath_c */
SECTION_DATA extern void* __vt__11dDrawPath_c[16] = {
extern void* __vt__11dDrawPath_c[16] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)draw__12dDlst_base_cFv,

View File

@ -4,78 +4,143 @@
//
#include "d/map/d_map_path_fmap.h"
#include "d/com/d_com_inf_game.h"
#include "dol2asm.h"
#include "dolphin/types.h"
//
// Types:
//
struct fmpTresTypeGroupData_c {
class fmpTresTypeGroupData_c {
public:
fmpTresTypeGroupData_c() {
mpTresData = NULL;
mpNext = NULL;
}
/* 8003EB70 */ ~fmpTresTypeGroupData_c();
};
struct dTres_c {
struct data_s {};
void setTypeGroupNo(u8 i_no) { mTypeGroupNo = i_no; }
void setNextData(fmpTresTypeGroupData_c* i_next) { mpNext = i_next; }
void setTresData(const dTres_c::data_s* i_data) { mpTresData = i_data; }
const dTres_c::data_s* getTresData() { return mpTresData; }
fmpTresTypeGroupData_c* getNextData() { return mpNext; }
struct typeGroupData_c {};
/* 0x0 */ const dTres_c::data_s* mpTresData;
/* 0x0 */ fmpTresTypeGroupData_c* mpNext;
/* 0x8 */ u8 mTypeGroupNo;
}; // Size: 0xC
/* 8009C360 */ void getFirstData(u8);
/* 8009C39C */ void getNextData(dTres_c::typeGroupData_c*);
/* 8009C49C */ void getTypeGroupNoToType(u8);
/* 8009C4B0 */ void getTypeToTypeGroupNo(u8);
};
struct fmpTresTypeGroupDataList_c {
class fmpTresTypeGroupDataList_c {
public:
/* 8003D790 */ void addTypeGroupData(u8, dTres_c::data_s const*);
/* 8003EB10 */ ~fmpTresTypeGroupDataList_c();
/* 8003EC90 */ fmpTresTypeGroupDataList_c();
/* 0x0 */ fmpTresTypeGroupData_c* mpTypeGroupDataHead;
/* 0x4 */ fmpTresTypeGroupData_c* mpNextData;
};
struct dSv_save_c {
/* 800350A8 */ void getSave2(int);
class fmpTresTypeGroupDataListAll_c {
public:
void addTypeGroupData(u8 i_typeGroupNo, const dTres_c::data_s* i_data) {
mpTypeGroupData[i_typeGroupNo].addTypeGroupData(i_typeGroupNo, i_data);
}
/* 0x0 */ fmpTresTypeGroupDataList_c mpTypeGroupData[17];
};
struct dSv_memory2_c {
/* 80034AEC */ void isVisitedRoom(int);
class dMenu_Fmap_data_c {
public:
dTres_c::list_class* getTresure() { return mp_tresure; }
f32 getFilelist2MinX() { return m_fileList2->mLeftRmX; }
f32 getFilelist2MinZ() { return m_fileList2->mInnerRmZ; }
f32 getFilelist2MaxX() { return m_fileList2->mRightRmX; }
f32 getFilelist2MaxZ() { return m_fileList2->mFrontRmZ; }
/* 0x0 */ dTres_c::list_class* mp_tresure;
/* 0x4 */ dStage_FileList2_dt_c* m_fileList2;
/* 0x8 */ dDrawPath_c::room_class* mp_mapPath;
/* 0xC */ void* mp_dzsData;
};
struct dSv_memBit_c {
/* 800347E8 */ void isTbox(int) const;
class dMenu_Fmap_stage_data_c;
class dMenu_Fmap_room_data_c {
public:
/* 8003D818 */ bool isArrival();
/* 8003D868 */ void buildTresTypeGroup(int, int, int);
/* 8003D92C */ void buildFmapRoomData(int, int, f32, f32, f32, f32);
f32 getFileList2MinX() { return mp_fmapData->getFilelist2MinX(); }
f32 getFileList2MinZ() { return mp_fmapData->getFilelist2MinZ(); }
f32 getFileList2MaxX() { return mp_fmapData->getFilelist2MaxX(); }
f32 getFileList2MaxZ() { return mp_fmapData->getFilelist2MaxZ(); }
dMenu_Fmap_room_data_c* getNextData() { return mp_nextData; }
int getRoomNo() { return m_roomNo; }
/* 0x00 */ dMenu_Fmap_data_c* mp_fmapData;
/* 0x04 */ fmpTresTypeGroupDataListAll_c* mp_fmpTresTypeGroupDataListAll;
/* 0x08 */ dMenu_Fmap_room_data_c* mp_nextData;
/* 0x0C */ dMenu_Fmap_stage_data_c* mp_parentStage;
/* 0x10 */ u8 m_roomNo;
};
struct dSv_info_c {
/* 80035360 */ void isSwitch(int, int) const;
class dMenu_Fmap_stage_arc_data_c {
public:
u8 getVisitedRoomSaveTableNo() { return mVisitedRoomSaveTableNo; }
/* 0x0 */ u8 field_0x0;
/* 0x1 */ u8 mSaveTableNo;
/* 0x2 */ u8 mVisitedRoomSaveTableNo;
};
struct dSv_event_flag_c {
static u8 saveBitLabels[1644 + 4 /* padding */];
class dMenu_Fmap_stage_data_c {
public:
/* 8003D95C */ bool isArrival();
/* 8003D9D8 */ int buildFmapStageData(int, f32, f32);
dMenu_Fmap_stage_arc_data_c* getStageArc() { return mpStageArc; }
dMenu_Fmap_stage_data_c* getNextData() { return mpNextData; }
/* 0x00 */ char name[8];
/* 0x08 */ dMenu_Fmap_stage_arc_data_c* mpStageArc;
/* 0x0C */ dMenu_Fmap_room_data_c* mp_roomTop;
/* 0x10 */ dMenu_Fmap_stage_data_c* mpNextData;
/* 0x14 */ f32 m_offsetX;
/* 0x18 */ f32 m_offsetZ;
/* 0x1C */ f32 m_stageMinX;
/* 0x20 */ f32 m_stageMinZ;
/* 0x24 */ f32 m_stageMaxX;
/* 0x28 */ f32 m_stageMaxZ;
/* 0x2C */ int m_stageCntNo;
};
struct dSv_event_c {
/* 800349BC */ void isEventBit(u16) const;
};
struct dMenu_Fmap_region_data_c {
/* 8003DB48 */ void getMenuFmapStageData(int);
class dMenu_Fmap_region_data_c {
public:
/* 8003DB48 */ dMenu_Fmap_stage_data_c* getMenuFmapStageData(int);
/* 8003DB70 */ void getPointStagePathInnerNo(f32, f32, int, int*, int*);
/* 8003DEE0 */ void buildFmapRegionData(int);
/* 0x00 */ dMenu_Fmap_stage_data_c* mpMenuFmapStageDataTop;
/* 0x04 */ dMenu_Fmap_region_data_c* mpNextData;
/* 0x08 */ f32 mRegionOffsetX;
/* 0x0C */ f32 mRegionOffsetZ;
/* 0x10 */ f32 mRegionMinX;
/* 0x14 */ f32 mRegionMaxX;
/* 0x18 */ f32 mRegionMinZ;
/* 0x1C */ f32 mRegionMaxZ;
/* 0x20 */ int mRegionNo;
};
struct dMenu_Fmap_world_data_c {
/* 8003E028 */ void create(dMenu_Fmap_region_data_c*);
/* 8003E04C */ void buildFmapWorldData();
};
struct dMenu_Fmap_stage_data_c {
/* 8003D95C */ void isArrival();
/* 8003D9D8 */ void buildFmapStageData(int, f32, f32);
};
struct dMenu_Fmap_room_data_c {
/* 8003D818 */ void isArrival();
/* 8003D868 */ void buildTresTypeGroup(int, int, int);
/* 8003D92C */ void buildFmapRoomData(int, int, f32, f32, f32, f32);
/* 0x00 */ dMenu_Fmap_region_data_c* mp_fmapRegionData;
/* 0x04 */ f32 m_worldMinX;
/* 0x08 */ f32 m_worldMinZ;
/* 0x0C */ f32 m_worldMaxX;
/* 0x10 */ f32 m_worldMaxZ;
};
struct dMenuFmapIconPointer_c {
@ -145,7 +210,6 @@ extern "C" void getTypeGroupNoToType__7dTres_cFUc();
extern "C" void getTypeToTypeGroupNo__7dTres_cFUc();
extern "C" void* __nw__FUl();
extern "C" void __dl__FPv();
extern "C" void PSVECCrossProduct();
extern "C" void __construct_array();
extern "C" void __save_gpr();
extern "C" void _savegpr_22();
@ -159,10 +223,7 @@ extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" void strcmp();
extern "C" u8 saveBitLabels__16dSv_event_flag_c[1644 + 4 /* padding */];
extern "C" extern u8 g_dComIfG_gameInfo[122384];
extern "C" extern u32 __float_max;
//
// Declarations:
@ -170,57 +231,98 @@ extern "C" extern u32 __float_max;
/* 8003D790-8003D818 0380D0 0088+00 1/1 0/0 0/0 .text
* addTypeGroupData__26fmpTresTypeGroupDataList_cFUcPCQ27dTres_c6data_s */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void fmpTresTypeGroupDataList_c::addTypeGroupData(u8 param_0, dTres_c::data_s const* param_1) {
nofralloc
#include "asm/d/map/d_map_path_fmap/addTypeGroupData__26fmpTresTypeGroupDataList_cFUcPCQ27dTres_c6data_s.s"
void fmpTresTypeGroupDataList_c::addTypeGroupData(u8 i_typeGroupNo,
dTres_c::data_s const* i_tresData) {
fmpTresTypeGroupData_c* next = mpNextData;
fmpTresTypeGroupData_c* fmpTresTypeGroupData_p = new fmpTresTypeGroupData_c();
if (mpTypeGroupDataHead == NULL) {
mpTypeGroupDataHead = fmpTresTypeGroupData_p;
}
fmpTresTypeGroupData_p->setTresData(i_tresData);
fmpTresTypeGroupData_p->setNextData(NULL);
fmpTresTypeGroupData_p->setTypeGroupNo(i_typeGroupNo);
if (next != NULL) {
next->setNextData(fmpTresTypeGroupData_p);
}
mpNextData = fmpTresTypeGroupData_p;
}
#pragma pop
/* 8003D818-8003D868 038158 0050+00 1/1 1/1 0/0 .text isArrival__22dMenu_Fmap_room_data_cFv */
#ifdef NONMATCHING
bool dMenu_Fmap_room_data_c::isArrival() {
u8 table_no = mp_parentStage->getStageArc()->getVisitedRoomSaveTableNo();
return dComIfGs_isSaveVisitedRoom(table_no, m_roomNo) != false;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void dMenu_Fmap_room_data_c::isArrival() {
asm bool dMenu_Fmap_room_data_c::isArrival() {
nofralloc
#include "asm/d/map/d_map_path_fmap/isArrival__22dMenu_Fmap_room_data_cFv.s"
}
#pragma pop
#endif
/* 8003D868-8003D92C 0381A8 00C4+00 1/1 0/0 0/0 .text
* buildTresTypeGroup__22dMenu_Fmap_room_data_cFiii */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void dMenu_Fmap_room_data_c::buildTresTypeGroup(int param_0, int param_1, int param_2) {
nofralloc
#include "asm/d/map/d_map_path_fmap/buildTresTypeGroup__22dMenu_Fmap_room_data_cFiii.s"
void dMenu_Fmap_room_data_c::buildTresTypeGroup(int param_0, int param_1, int param_2) {
dTres_c::list_class* tresure_p = mp_fmapData->getTresure();
if (tresure_p != NULL) {
int num = tresure_p->field_0x0;
dTres_c::data_s* data_p = tresure_p->field_0x4;
if (mp_fmpTresTypeGroupDataListAll == NULL) {
mp_fmpTresTypeGroupDataListAll = new fmpTresTypeGroupDataListAll_c();
}
for (int i = 0; i < num; i++) {
data_p->mRoomNo = param_2;
u8 typeGroupNo = dTres_c::getTypeToTypeGroupNo(data_p->mType);
mp_fmpTresTypeGroupDataListAll->addTypeGroupData(typeGroupNo, data_p);
data_p++;
}
}
}
#pragma pop
/* 8003D92C-8003D95C 03826C 0030+00 1/1 0/0 0/0 .text
* buildFmapRoomData__22dMenu_Fmap_room_data_cFiiffff */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void dMenu_Fmap_room_data_c::buildFmapRoomData(int param_0, int param_1, f32 param_2,
f32 param_3, f32 param_4, f32 param_5) {
nofralloc
#include "asm/d/map/d_map_path_fmap/buildFmapRoomData__22dMenu_Fmap_room_data_cFiiffff.s"
void dMenu_Fmap_room_data_c::buildFmapRoomData(int param_0, int param_1, f32 param_2, f32 param_3,
f32 param_4, f32 param_5) {
int roomNo = m_roomNo;
if (mp_fmapData != NULL) {
buildTresTypeGroup(param_0, param_1, roomNo);
}
}
#pragma pop
/* 8003D95C-8003D9D8 03829C 007C+00 1/1 0/0 0/0 .text isArrival__23dMenu_Fmap_stage_data_cFv */
#ifdef NONMATCHING
bool dMenu_Fmap_stage_data_c::isArrival() {
bool is_arrival = false;
dMenu_Fmap_room_data_c* room = mp_roomTop;
u8 table_no = mpStageArc->getVisitedRoomSaveTableNo();
for (; !is_arrival && room != NULL; room = room->getNextData()) {
is_arrival = dComIfGs_isSaveVisitedRoom(table_no, room->getRoomNo()) != false;
}
return is_arrival;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void dMenu_Fmap_stage_data_c::isArrival() {
asm bool dMenu_Fmap_stage_data_c::isArrival() {
nofralloc
#include "asm/d/map/d_map_path_fmap/isArrival__23dMenu_Fmap_stage_data_cFv.s"
}
#pragma pop
#endif
/* ############################################################################################## */
/* 80451E20-80451E28 000420 0004+04 5/5 0/0 0/0 .sdata2 @3894 */
@ -232,25 +334,66 @@ SECTION_SDATA2 static f32 lit_3894[1 + 1 /* padding */] = {
/* 8003D9D8-8003DB48 038318 0170+00 1/1 0/0 0/0 .text
* buildFmapStageData__23dMenu_Fmap_stage_data_cFiff */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void dMenu_Fmap_stage_data_c::buildFmapStageData(int param_0, f32 param_1, f32 param_2) {
nofralloc
#include "asm/d/map/d_map_path_fmap/buildFmapStageData__23dMenu_Fmap_stage_data_cFiff.s"
int dMenu_Fmap_stage_data_c::buildFmapStageData(int param_0, f32 param_1, f32 param_2) {
dMenu_Fmap_room_data_c* room = mp_roomTop;
f32 fvar3 = __float_max[0];
f32 fvar4 = __float_max[0];
f32 fvar5 = -__float_max[0];
f32 fvar6 = -__float_max[0];
int ivar = 0;
for (; room != NULL; room = room->getNextData()) {
room->buildFmapRoomData(param_0, ivar, param_1, param_2, m_offsetX, m_offsetZ);
f32 min_x = room->getFileList2MinX();
f32 min_z = room->getFileList2MinZ();
f32 max_x = room->getFileList2MaxX();
f32 max_z = room->getFileList2MaxZ();
if (min_x < fvar3) {
fvar3 = min_x;
}
if (min_z < fvar4) {
fvar4 = min_z;
}
if (max_x > fvar5) {
fvar5 = max_x;
}
if (max_z > fvar6) {
fvar6 = max_z;
}
ivar++;
}
if (ivar > 0) {
m_stageMinX = fvar3;
m_stageMinZ = fvar4;
m_stageMaxX = fvar5;
m_stageMaxZ = fvar6;
} else {
f32 tmp_0 = lit_3894[0];
m_stageMinX = tmp_0;
m_stageMinZ = tmp_0;
m_stageMaxX = tmp_0;
m_stageMaxZ = tmp_0;
}
return ivar;
}
#pragma pop
/* 8003DB48-8003DB70 038488 0028+00 0/0 1/1 0/0 .text
* getMenuFmapStageData__24dMenu_Fmap_region_data_cFi */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void dMenu_Fmap_region_data_c::getMenuFmapStageData(int param_0) {
nofralloc
#include "asm/d/map/d_map_path_fmap/getMenuFmapStageData__24dMenu_Fmap_region_data_cFi.s"
dMenu_Fmap_stage_data_c* dMenu_Fmap_region_data_c::getMenuFmapStageData(int param_0) {
dMenu_Fmap_stage_data_c* stage = mpMenuFmapStageDataTop;
for (int i = 0; stage != NULL && i < param_0; i++) {
stage = stage->getNextData();
}
return stage;
}
#pragma pop
/* 8003DB70-8003DEE0 0384B0 0370+00 0/0 1/1 0/0 .text
* getPointStagePathInnerNo__24dMenu_Fmap_region_data_cFffiPiPi */