func_801031D0 decomped and some fixes

This commit is contained in:
mzxrules
2022-08-02 17:09:05 -04:00
parent 90d82ee195
commit 5c616b9066
4 changed files with 88 additions and 21 deletions
+1 -1
View File
@@ -1728,7 +1728,7 @@ void func_80106644(PlayState* play, s32 x, s32 z, s32 rot);
s32 func_80109124(s16 arg0);
// void func_801091F0(void);
// void func_80109428(void);
// void func_801094A0(void);
void func_801094A0(s32 arg0, Color_RGBA8* color);
// void func_801094C8(void);
// void func_801094F8(void);
// void func_80109528(void);
+2 -2
View File
@@ -72,9 +72,9 @@ typedef struct {
/* 0x0A */ s16 unkA;
/* 0x0C */ s16 unkC;
/* 0x0E */ s16 unkE;
/* 0x10 */ s32 unk10;
/* 0x10 */ TexturePtr unk10;
/* 0x14 */ s32 unk14; //unk4 same type as unk14
/* 0x18 */ s32 unk18;
/* 0x18 */ TexturePtr unk18;
/* 0x1C */ s16 unk1C; //same as 0C
/* 0x1E */ s16 unk1E; //same as 0E
/* 0x20 */ s32 unk20;
+3 -7
View File
@@ -7,17 +7,13 @@ extern s32 D_801BF15C[5];
extern T_801BF170 D_801BF170[];
typedef struct {
char unk0[4];
} T_801BED40; //size 0x04
extern T_801BED40 D_801BED40[];
extern Color_RGBA8 D_801BED40[];
extern s32 D_801BF3B4[];
extern s32 D_801BEFC8[];
void func_801094A0(s32 arg0, T_801BED40* arg1) {
*arg1 = D_801BED40[arg0];
void func_801094A0(s32 arg0, Color_RGBA8* color) {
*color = D_801BED40[arg0];
}
void func_801094C8(s32 arg0, s32 *arg1, s32 *arg2) {
+82 -11
View File
@@ -1,7 +1,6 @@
#include "global.h"
#include "z64map.h"
void func_801031D0(PlayState* play, s32, s32, s32, s32, f32);
void func_80103090(MinimapEntry*, s32*, s32*);
void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot);
void func_80106644(PlayState* play, s32 x, s32 z, s32 rot);
@@ -97,7 +96,70 @@ void func_801030F4(MinimapEntry* arg0, s32* arg1, s32* arg2) {
}
}
void func_801098A0(u16, s32*);
s32 func_80109908(u16);
#ifdef NON_MATCHING
// https://decomp.me/scratch/XPZfI
void func_801031D0(PlayState* play, TexturePtr arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5) {
MinimapEntry* spCC;
s32 spC8;
s32 spC4;
s16 var_a0_4;
s16 var_a3;
s32 var_t0;
s32 var_t1;
s32 var_v1_4;
s32 var_v1_5;
Color_RGBA8 spAC;
s32 spA8;
spCC = &D_801BEBB8.unk0->entry[arg4];
if ((spCC->unk0 != 0xFFFF) && (arg1 != 0)) {
func_80103090(spCC, &spC8, &spC4);
OPEN_DISPS(play->state.gfxCtx);
func_8012C654(play->state.gfxCtx);
func_801094A0(func_80109908(spCC->unk0), &spAC);
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, spAC.r, spAC.g, spAC.b, (s32)(play->interfaceCtx.minimapAlpha * arg5 * spAC.a / 255.0f));
func_801098A0(spCC->unk0, &spA8);
switch (spA8) {
case 1:
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
gDPLoadTextureBlock_4b(OVERLAY_DISP++, arg1, G_IM_FMT_IA, spC8, spC4, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK , G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
break;
case 3:
gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0);
gDPLoadTextureBlock_4b(OVERLAY_DISP++, arg1, G_IM_FMT_I, spC8, spC4, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK , G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
break;
default:
case 0:
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
gDPLoadTextureBlock_4b(OVERLAY_DISP++, arg1, G_IM_FMT_I, spC8, spC4, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK , G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
break;
}
var_t1 = (spCC->unk8 & 1) ? (spC8 - 1) << 5 : 0;
var_t0 = (spCC->unk8 & 2) ? 0 : (spC4 - 1) << 5;
var_v1_4 = (spCC->unk8 & 1) ? -1 : 1;
var_a3 = var_v1_4 << 0xA;
var_v1_5 = (spCC->unk8 & 2) ? 1 : -1;
if ((spCC->unk8 & 1) != 0) {
var_a3 = var_a3 & 0xFFFF;
}
if ((spCC->unk8 & 2) != 0) {
var_a0_4 = var_v1_5 << 0xA;
} else {
var_a0_4 = (var_v1_5 << 0xA) & 0xFFFF;
}
gSPTextureRectangle(OVERLAY_DISP++, arg2 << 2, arg3 << 2, (spC8 + arg2) << 2, (arg3 + spC4) << 2, G_TX_RENDERTILE, var_t1, var_t0, var_a3, var_a0_4);
CLOSE_DISPS(play->state.gfxCtx);
}
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801031D0.s")
#endif
s32 func_801039EC(PlayState *play) {
if (play->sceneNum == SCENE_35TAKI) {
@@ -114,6 +176,7 @@ s32 func_80103A10(PlayState* play) {
}
#ifdef NON_MATCHING
// https://decomp.me/scratch/TR5Jq
void func_80103A58(PlayState *play, Actor *actor) {
MinimapEntry *spDC;
s32 spD8;
@@ -245,6 +308,7 @@ void func_8010439C(PlayState *play) {
}
#ifdef NON_MATCHING
// https://decomp.me/scratch/vbnTA
void func_801045AC(PlayState* play, Actor* actor) { //4729
MinimapEntry* sp7C;
s32 sp78;
@@ -428,6 +492,7 @@ s32 func_80105328(s32 arg0) {
}
#ifdef NON_MATCHING
// https://decomp.me/scratch/F3QhH
void func_8010534C(PlayState* play) {
T_801F53B0* var_s0;
s16 temp_a0;
@@ -612,21 +677,22 @@ extern s32 D_801F5834;
| (a)) \
#ifdef NON_MATCHING
// https://decomp.me/scratch/3cGkW
void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5, s32 arg6) {
s32 var_a0;
s32 var_a0_2;
s32 var_a0_3;
s32 var_a0_4;
s32 var_a1_2;
s32 var_a1_4;
s32 var_a1_5;
s32 var_s2;
s32 var_v1;
s32 var_v1_2;
s32 var_v1_3;
s32 var_s2;
TexturePtr temp_s1;
s32 temp1;
s32 temp2;
D_801BECC4[1] = COLOR16(0, ((D_801F5834 * -120.0f) / 40.0f) + 200.0f, ((D_801F5834 * 115.0f) / 40.0f) + 140.0f, 1);
temp1 = ((D_801F5834 * -120.0f / 40.0f) + 200.0f) * 31.0f / 255.0f;
temp2 = ((D_801F5834 * 115.0f / 40.0f) + 140.0f) * 31.0f / 255.0f;
D_801BECC4[1] = (temp1 << 6) | (temp2 << 1) | 1; //COLOR16(0, ((D_801F5834 * -120.0f) / 40.0f) + 200.0f, ((D_801F5834 * 115.0f) / 40.0f) + 140.0f, 1);
// (
// 0 << 11
// | ((s32) (((((D_801F5834 * -120.0f) / 40.0f) + 200.0f) * 31.0f) / 255.0f) << 6)
@@ -659,6 +725,7 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32
s32 sp110;
s32 sp10C;
MinimapEntry* sp108;
s32 pad104;
s32 sp100;
s32 spFC;
s32 spF8;
@@ -666,10 +733,13 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32
s32 spF0;
s32 spEC;
s32 spE8;
s32 padE4;
s32 padE0;
sp108 = &D_801BEBB8.unk0->entry[var_s2];
if ((sp108->unk0 != 0xFFFF) && (sp108->unk0 < 0x162)) {
if ((D_801BEBB8.unk42 >= D_801BEBB8.unk3C[var_s2]) && ((D_801BEBB8.unk3C[var_s2] + ((sp108->unk8 >> 2) & 7)) >= D_801BEBB8.unk42)) {
if ((D_801BEBB8.unk42 >= D_801BEBB8.unk3C[var_s2])
&& ((D_801BEBB8.unk3C[var_s2] + ((sp108->unk8 >> 2) & 7)) >= D_801BEBB8.unk42)) {
temp_s1 = D_801F57B4[var_s2];
if (temp_s1 != NULL) {
spE8 = func_80109BA0(sp108->unk0);
@@ -695,8 +765,9 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32
spFC = 0;
spF4 = 0x400;
}
spF0 = (s32) (((((f32) sp108->unk2 - (f32) D_801BEBB8.unk38) * arg5) - (f32) sp110) + (f32) ((arg3 / 2) + arg1));
spEC = (s32) (((((f32) sp108->unk6 - (f32) D_801BEBB8.unk3A) * arg5) - (f32) sp10C) + (f32) ((arg4 / 2) + arg2));
spF0 = ((sp108->unk2 - (f32) D_801BEBB8.unk38) * arg5 - sp110) + ((arg3 / 2) + arg1);
spEC = ((sp108->unk6 - (f32) D_801BEBB8.unk3A) * arg5 - sp10C) + ((arg4 / 2) + arg2);
if (var_s2 == play->roomCtx.currRoom.num) {
if (Map_IsInBossArea(play) != 0) {
gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118, sp114, 1, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK , G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);