func_80105C40 almost OK, more OKs

This commit is contained in:
mzxrules
2022-08-04 22:55:05 -04:00
parent cdabbfdbde
commit 5ece255647
7 changed files with 235 additions and 68 deletions
+2 -2
View File
@@ -1683,8 +1683,8 @@ s16 func_80105318(void);
// void func_8010534C(void);
void func_8010549C(PlayState* play, void* segmentAddress);
void func_8010565C(PlayState* play, s32 num, void* segmentAddress);
void func_80105818(PlayState* play, u32 uParm2, TransitionActorEntry* puParm3);
void func_80105A40(void);
void func_80105818(PlayState* play, s32 num, TransitionActorEntry* transitionActorList);
void func_80105A40(PlayState* play);
void func_80105B34(PlayState* play);
void func_80105C40(s16 arg0);
// void func_80105FE0(void);
+1 -1
View File
@@ -37,7 +37,6 @@
#include "z64effect.h"
#include "z64item.h"
#include "z64light.h"
#include "z64map.h"
#include "z64math.h"
#include "z64message.h"
#include "z64object.h"
@@ -45,6 +44,7 @@
#include "z64player.h"
#include "z64save.h"
#include "z64scene.h"
#include "z64map.h"
#include "z64schedule.h"
#include "z64skin.h"
#include "z64subs.h"
+8 -42
View File
@@ -1,40 +1,14 @@
#ifndef Z64MAP_H
#define Z64MAP_H
#include "ultra64.h"
#include "z64scene.h"
#define FLOOR_INDEX_MAX 4
/* z_scene */
typedef struct {
/* 0x00 */ u16 unk0;
/* 0x02 */ s16 unk2;
/* 0x04 */ UNK_TYPE2 unk4;
/* 0x06 */ s16 unk6;
/* 0x08 */ u16 unk8;
} MinimapEntry; // size = 0xA
typedef struct {
/* 0x00 */ MinimapEntry* entry;
/* 0x04 */ s32 unk4;
} MinimapList; // size = 0x8
typedef struct {
/* 0x00 */ MinimapEntry* entry;
/* 0x04 */ s16 unk4;
} MinimapList2; // size = 0x8
typedef struct {
/* 0x00 */ UNK_TYPE2 unk0;
/* 0x02 */ UNK_TYPE2 unk2;
/* 0x04 */ UNK_TYPE2 unk4;
/* 0x06 */ UNK_TYPE2 unk6;
/* 0x08 */ UNK_TYPE2 unk8;
} MinimapChest; // size = 0xA
/* z_map_data */
typedef struct {
/* 0x00 */ s32 unk0;
/* 0x00 */ TexturePtr lmapTex; //minimap texture
/* 0x04 */ u8 unk4;
/* 0x05 */ u8 unk5;
/* 0x06 */ u8 unk6;
@@ -78,15 +52,15 @@ typedef struct {
/* 0x0A */ s16 unkA;
/* 0x0C */ s16 unkC;
/* 0x0E */ s16 unkE;
/* 0x10 */ TexturePtr unk10;
/* 0x10 */ TexturePtr unk10; // gameplay cur minimap room
/* 0x14 */ s32 unk14; //unk4 same type as unk14
/* 0x18 */ TexturePtr unk18;
/* 0x1C */ s16 unk1C; //same as 0C
/* 0x1E */ s16 unk1E; //same as 0E
/* 0x20 */ s32 unk20;
/* 0x24 */ s32 unk24;
/* 0x28 */ void* unk28;
/* 0x2C */ void* unk2C;
/* 0x28 */ TexturePtr unk28; //unk type
/* 0x2C */ TexturePtr unk2C; //unk type
/* 0x30 */ s16 unk30; //scene minBounds.x
/* 0x32 */ s16 unk32; //scene minBounds.z
/* 0x34 */ s16 unk34; //scene boundsWidth.x
@@ -111,17 +85,6 @@ typedef struct {
/* 0x02 */ s16 unk2;
} T_801BEC5C;
typedef struct{
/* 0x00 */ s16 unk0;
/* 0x02 */ s16 unk2;
/* 0x04 */ s16 unk4;
/* 0x06 */ UNK_TYPE2 unk6;
/* 0x08 */ s16 unk8;
/* 0x0A */ UNK_TYPE2 unkA;
/* 0x0C */ UNK_TYPE2 unkC;
/* 0x0E */ u16 unkE;
} T_801F53B0;
typedef struct {
/* 0x00 */ s32 unk0[5];
} T_801BEC70;
@@ -141,6 +104,9 @@ typedef struct {
} T_801F56B0;
/* z_map_data */
TexturePtr func_8010958C(s32);
s32 func_80109714(s32);
s32 func_80109CBC(s32);
s32 func_80109A98(s32);
s32 func_80109AD8(s32);
+26 -1
View File
@@ -4,7 +4,6 @@
#include "ultra64.h"
#include "z64dma.h"
#include "z64cutscene.h"
#include "z64map.h"
#include "unk.h"
#define SPAWN_ROT_FLAGS(rotation, flags) (((rotation) << 7) | (flags))
@@ -305,6 +304,32 @@ typedef struct {
/* 0x04 */ TransitionActorEntry* transitionActorList;
} DoorContext;
typedef struct {
/* 0x00 */ u16 unk0;
/* 0x02 */ s16 unk2;
/* 0x04 */ UNK_TYPE2 unk4;
/* 0x06 */ s16 unk6;
/* 0x08 */ u16 unk8;
} MinimapEntry; // size = 0xA
typedef struct {
/* 0x00 */ MinimapEntry* entry;
/* 0x04 */ s32 unk4;
} MinimapList; // size = 0x8
typedef struct {
/* 0x00 */ MinimapEntry* entry;
/* 0x04 */ s16 unk4;
} MinimapList2; // size = 0x8
typedef struct {
/* 0x00 */ UNK_TYPE2 unk0;
/* 0x02 */ UNK_TYPE2 unk2;
/* 0x04 */ UNK_TYPE2 unk4;
/* 0x06 */ UNK_TYPE2 unk6;
/* 0x08 */ UNK_TYPE2 unk8;
} MinimapChest; // size = 0xA
typedef struct {
/* 0x0 */ s16 id;
/* 0x2 */ Vec3s pos;
+2 -2
View File
@@ -40,8 +40,8 @@ s16 func_8010956C(s32 arg0) {
return D_801BED4C[arg0].unkA;
}
s32 func_8010958C(s32 arg0) {
return D_801BED4C[arg0].unk0;
TexturePtr func_8010958C(s32 arg0) {
return D_801BED4C[arg0].lmapTex;
}
void func_801095AC(s32 arg0, s32 *arg1, s32 *arg2) {
+194 -18
View File
@@ -1,6 +1,6 @@
#include "global.h"
#include "z64map.h"
void func_801068D8(PlayState* play);
void func_801068B4(PlayState* play);
void func_80103090(MinimapEntry*, s32*, s32*);
void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot);
@@ -28,11 +28,12 @@ extern u32 D_801BEB18;
extern u32 D_801BEB28;
extern TexturePtr D_801BEB38;
extern T_801BEBB8 D_801BEBB8;
extern s16 D_801BEBFA;
extern s16 D_801BEC10;
extern MinimapList D_801BEC14; //D_801F5130
extern s32 D_801BEC1C; //current scene's no. of rooms
extern s32 D_801BEC20; //MinimapChest count
extern u8 D_801BEC24;
extern DoorContext D_801BEC24;
extern Color_RGBA8 D_801BEC2C[]; // cat colors
extern T_801BEC5C D_801BEC5C[5];
extern T_801BEC70 D_801BEC70;
@@ -41,10 +42,9 @@ extern u16 D_801BECA4[0x10]; //palette 1
extern u16 D_801BECC4[0x10]; //palette 2
extern T_801BED24 D_801BED24[2];
extern MinimapEntry D_801F5130[0x50];
extern MinimapChest D_801F5270[32];
extern T_801F53B0 D_801F53B0[];
extern TransitionActorEntry D_801F53B0[48];
extern T_801F56B0 D_801F56B0;
extern TexturePtr D_801F57B4[32]; //unconfirmed length
extern s32 D_801F5834;
@@ -62,7 +62,7 @@ void func_80102E90(PlayState* play, s16* arg1) {
*arg1 = -1;
}
void func_80102EA4(UNK_TYPE4 arg0, UNK_TYPE4 arg1) {
void func_80102EA4(PlayState* play, s16* arg1) {
}
@@ -619,7 +619,7 @@ s32 func_80105328(s32 arg0) {
#ifdef NON_MATCHING
// https://decomp.me/scratch/F3QhH
void func_8010534C(PlayState* play) {
T_801F53B0* var_s0;
TransitionActorEntry* var_s0;
s16 temp_a0;
s16 temp_a2;
s16 temp_v0;
@@ -628,22 +628,22 @@ void func_8010534C(PlayState* play) {
s16* temp_v1;
s32 var_s2;
for (var_s2 = 0; var_s2 < D_801BEC24; var_s2++) {
for (var_s2 = 0; var_s2 < D_801BEC24.numTransitionActors; var_s2++) {
var_s0 = &D_801F53B0[var_s2];
if (func_80105328(var_s0->unkE) != 0) {
if (var_s0->unk4 < 0) {
var_v1 = -var_s0->unk4;
if (func_80105328(var_s0->params) != 0) {
if (var_s0->id < 0) {
var_v1 = -var_s0->id;
}
else {
var_v1 = var_s0->unk4;
var_v1 = var_s0->id;
}
if (var_v1 != 0x18) {
for (var_v0 = 0; var_v0 < D_801BEBB8.unk40; var_v0++) {
if (((var_v0 == D_801BEBB8.unk40 - 1) && (var_s0->unk8 >= (D_801BEBB8.unk48[var_v0] - 5)))
if (((var_v0 == D_801BEBB8.unk40 - 1) && (var_s0->pos.y >= (D_801BEBB8.unk48[var_v0] - 5)))
|| (
(var_v0 != D_801BEBB8.unk40 - 1) &&
(var_s0->unk8 >= (D_801BEBB8.unk48[var_v0] - 5)) &&
(var_s0->unk8 < (D_801BEBB8.unk48[var_v0+1] - 5))
(var_s0->pos.y >= (D_801BEBB8.unk48[var_v0] - 5)) &&
(var_s0->pos.y < (D_801BEBB8.unk48[var_v0+1] - 5))
)) {
D_801BEBB8.unk58 = var_v0;
return;
@@ -709,14 +709,190 @@ void func_8010565C(PlayState* play, s32 num, void* segmentAddress) {
D_801BEBB8.unk50 = D_801BEC20;
}
void func_80105818(PlayState* play, s32 num, TransitionActorEntry* transitionActorList) {
s32 i;
#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80105818.s")
if (Map_IsInBossArea(play) == 0) {
D_801BEC24.numTransitionActors = num;
for (i = 0; i < num; i++)
{
D_801F53B0[i] = transitionActorList[i];
}
D_801BEC24.transitionActorList = D_801F53B0;
}
}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80105A40.s")
void func_80105A40(PlayState* play) {
s32 i;
#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80105B34.s")
D_801BEBB8.unk0 = NULL;
D_801BEBB8.unk4 = -1;
D_801BEBB8.unkC = 0xD2;
D_801BEBB8.unkE = 0x8C;
D_801BEBB8.unk10 = NULL;
D_801BEBB8.unk14 = -1;
D_801BEBB8.unk18 = NULL;
D_801BEBB8.unk1C = 0;
D_801BEBB8.unk1E = 0;
D_801BEBB8.unk20 = 0;
D_801BEBB8.unk24 = 0;
D_801BEBB8.unk28 = NULL;
D_801BEBB8.unk2C = NULL;
for (i = 0; i < D_801BEC1C; i++) {
func_80102EA4(play, &D_801BEBB8.unk3C[i]);
}
D_801BEBB8.unk3C = NULL;
D_801BEBB8.unk40 = 0;
D_801BEBB8.unk42 = 0;
D_801BEBB8.unk44 = 0;
D_801BEBB8.unk4C = 0;
D_801BEBB8.unk48 = NULL;
D_801BEBB8.unk50 = 0;
D_801BEBB8.unk54 = NULL;
func_801068D8(play);
D_801BEBB8.unk5A = 0;
}
void func_80105B34(PlayState* play) {
s16 temp_a0;
s16 temp_a0_2;
s16 temp_v1;
s16 temp_v1_2;
s32 temp_v0;
if ((D_801BEBB8.unk0 != NULL) && (D_801BEC1C != 0)) {
D_801BEBFA = 8 - play->pauseCtx.unk_256;
if (D_801BEBB8.unk14 != -1) {
temp_v0 = D_801BEBB8.unk24;
if (temp_v0 > 0) {
temp_v1 = D_801BEBB8.unk8;
temp_a0 = D_801BEBB8.unkC;
if (temp_v1 != temp_a0) {
D_801BEBB8.unkC = (s16) (s32) (((f32) (temp_v1 - temp_a0) / (f32) temp_v0) + (f32) temp_a0);
}
temp_v1_2 = D_801BEBB8.unkA;
temp_a0_2 = D_801BEBB8.unkE;
if (temp_v1_2 != temp_a0_2) {
D_801BEBB8.unkE = (s16) (s32) (((f32) (temp_v1_2 - temp_a0_2) / (f32) temp_v0) + (f32) temp_a0_2);
}
D_801BEBB8.unk24 = temp_v0 - 1;
return;
}
D_801BEBB8.unk14 = -1;
D_801BEBB8.unk24 = 0;
D_801BEBB8.unkC = D_801BEBB8.unk8;
D_801BEBB8.unkE = D_801BEBB8.unkA;
return;
}
D_801BEBB8.unk24 = 0;
}
}
#ifdef NON_MATCHING
//https://decomp.me/scratch/oK0wd
void func_80105C40(s16 arg0) {
MinimapEntry* temp_s0;
MinimapEntry* sp58;
s32 sp54;
s32 sp50;
s32 sp4C;
s32 sp48;
s32 sp44;
s32 sp40;
s32 sp3C;
s32 sp38;
s32 var_v0;
s32 pad;
s32 sp2C;
if ((D_801BEBB8.unk0 != NULL) && (D_801BEC1C != 0) && (arg0 != -1)) {
temp_s0 = &D_801BEBB8.unk0->entry[arg0];
if ( ( temp_s0->unk0 < 5) || (( temp_s0->unk0 >= 0x100) && ( temp_s0->unk0 < 0x162)) || temp_s0->unk0 == 0xFFFF) {
D_801BEBB8.unk14 = D_801BEBB8.unk4;
D_801BEBB8.unk4 = arg0;
D_801BEBB8.unk24 = 0x14;
D_801BEBB8.unk18 = D_801BEBB8.unk10;
sp54 = D_801BEBB8.unk8;
sp50 = D_801BEBB8.unkA;
temp_s0 = &D_801BEBB8.unk0->entry[D_801BEBB8.unk4];
if (temp_s0->unk0 == 0xFFFF) {
D_801BEBB8.unk1E = 0;
D_801BEBB8.unk8 = 0xD2;
D_801BEBB8.unkA = 0x8C;
D_801BEBB8.unkC = 0xD2;
D_801BEBB8.unkE = 0x8C;
D_801BEBB8.unk10 = NULL;
D_801BEBB8.unk1C = D_801BEBB8.unk1E;
return;
}
func_801030F4(temp_s0, &sp44, &sp40);
func_80103090(temp_s0, &sp4C, &sp48);
D_801BEBB8.unk8 = 0x127 - sp4C;
D_801BEBB8.unkA = 0xDC - sp48;
if (D_801BEBB8.unk14 != -1) {
sp58 = &D_801BEBB8.unk0->entry[D_801BEBB8.unk14];
if (sp58->unk0 == 0xFFFF) {
D_801BEBB8.unk1E = 0;
D_801BEBB8.unk10 = NULL;
D_801BEBB8.unk1C = D_801BEBB8.unk1E;
D_801BEBB8.unkC = D_801BEBB8.unk8;
D_801BEBB8.unkE = D_801BEBB8.unkA;
return;
}
func_801030F4(sp58, &sp3C, &sp38);
//temp_a0 = ;
var_v0 = D_801BEBB8.unk0->unk4;
if (D_801BEBB8.unk0->unk4 == 0) {
var_v0 = 0x14;
} else if (D_801BEBB8.unk0->unk4 == -1) {
func_801030B4(temp_s0, &sp2C);
var_v0 = sp2C;
}
//temp_fv0 = ;
D_801BEBB8.unk1C = (s16) (s32) (((f32) sp44 + (((f32) sp58->unk2 - (f32) temp_s0->unk2) * (1.0f / var_v0))) - (f32) sp3C);
D_801BEBB8.unk1E = (s16) (s32) (((f32) sp40 + (((f32) sp58->unk6 - (f32) temp_s0->unk6) * (1.0f / var_v0))) - (f32) sp38);
D_801BEBB8.unkC = sp54 - D_801BEBB8.unk1C;
D_801BEBB8.unkE = sp50 - D_801BEBB8.unk1E;
}
else {
D_801BEBB8.unk1C = D_801BEBB8.unk1E = 0;
D_801BEBB8.unkC = D_801BEBB8.unk8;
D_801BEBB8.unkE = D_801BEBB8.unkA;
}
D_801BEBB8.unk10 = NULL;
switch (func_80109714(temp_s0->unk0)) {
case 0:
D_801BEBB8.unk10 = func_8010958C(temp_s0->unk0);
return;
case 1:
if (D_801BEBB8.unk18 == D_801BEBB8.unk28) {
D_801BEBB8.unk10 = D_801BEBB8.unk2C;
} else {
D_801BEBB8.unk10 = D_801BEBB8.unk28;
}
if (func_801096D4(temp_s0->unk0) != 0) {
func_80178E3C(SEGMENT_ROM_START(map_grand_static),
temp_s0->unk0 - 0x100,
(s32) D_801BEBB8.unk10,
func_801096D4(temp_s0->unk0));
}
break;
}
}
}
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80105C40.s")
#endif
#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80105FE0.s")
@@ -810,7 +986,7 @@ void func_801068B4(PlayState* play) {
func_8010683C();
}
void func_801068D8(s32 arg0) {
void func_801068D8(PlayState* play) {
func_8010683C();
}
+2 -2
View File
@@ -169,8 +169,8 @@ void Map_InitRoomData(PlayState* play, s16 room) {
}
}
void Map_Destroy(void) {
func_80105A40();
void Map_Destroy(PlayState* play) {
func_80105A40(play);
}
void Map_Init(PlayState* play) {