This commit is contained in:
Donkey Kong 2024-10-25 13:53:00 -05:00
parent 4581264827
commit 63182b6d08
12 changed files with 923 additions and 852 deletions

View File

@ -206,6 +206,7 @@ segments:
exclusive_ram_id: global_asm
subsegments:
- [0x2000000, c, code_0]
- [0x2000450, c, code_450]
- [0x2003C10, c, code_3C10]
- [0x2005650, c, code_5650]
- [0x2005A50, c, code_5A50]
@ -217,7 +218,7 @@ segments:
- [0x20104F0, c, code_104F0]
- [0x20131B0, c, code_131B0]
- [0x2014CF0, c, code_14CF0]
- [0x2015010, c, code_15010]
- [0x2015010, hasm, code_15010]
- [0x2015050, c, heap]
- [0x2016550, c, done/code_16550]
- [0x20166A0, c, done/rand]
@ -373,7 +374,7 @@ segments:
- [0x2145D70, c, audio/code_145D70]
- [0x2146010, bin, code_146010]
- [0x2149160, data, data_149160]
- [0x215B290, .rodata, code_0]
- [0x215B290, .rodata, code_450]
- [0x215B2E0, .rodata, code_3C10]
- [0x215B4B0, rodata] # code_6710 // TODO: Problem with 80756F08, might be an array of doubles?
- [0x215BD20, .rodata, code_104F0]

View File

@ -4,6 +4,34 @@
/* your struct definitions go here */
typedef struct OverlayInfoStruct {
s32 rom_code_start;
s32 rom_data_end;
void *rdram_start;
void *overlay_end;
void *rdram_code_end;
void *rdram_data_end;
} OverlayInfoStruct;
typedef struct Critter Critter;
typedef struct {
u8 unk0;
u8 unk1;
u8 unk2;
u8 unk3;
u16 unk4;
u8 unk6;
u8 unk7;
s32 unk8;
s32 unkC;
s32 unk10;
s32 unk14;
s16 unk18;
u8 unk1A;
u8 unk1B;
} MenuStruct80024000;
typedef struct {
s32 unk0;
s32 unk4;

View File

@ -2802,7 +2802,7 @@ us,asm,func_global_asm_8067B01C,228,no
us,asm,func_global_asm_806ED508,184,yes
us,asm,func_global_asm_806485A0,548,no
us,asm,func_global_asm_8062BA0C,104,yes
us,asm,func_global_asm_8061032C,36,no
us,asm,func_global_asm_8061032C,36,yes
us,asm,func_global_asm_806D2E9C,904,yes
us,asm,func_global_asm_806919E0,2044,no
us,asm,func_global_asm_806DA94C,200,yes
@ -2957,7 +2957,7 @@ us,asm,func_global_asm_806766E0,80,yes
us,asm,func_global_asm_80654CCC,440,no
us,asm,func_global_asm_806A921C,152,yes
us,asm,func_global_asm_80611D20,128,no
us,asm,func_global_asm_80610310,28,no
us,asm,func_global_asm_80610310,28,yes
us,asm,func_global_asm_8065E138,1276,no
us,asm,func_global_asm_8072E54C,88,yes
us,asm,func_global_asm_8064D880,248,yes

1 version section function length matching
2802 us asm func_global_asm_806ED508 184 yes
2803 us asm func_global_asm_806485A0 548 no
2804 us asm func_global_asm_8062BA0C 104 yes
2805 us asm func_global_asm_8061032C 36 no yes
2806 us asm func_global_asm_806D2E9C 904 yes
2807 us asm func_global_asm_806919E0 2044 no
2808 us asm func_global_asm_806DA94C 200 yes
2957 us asm func_global_asm_80654CCC 440 no
2958 us asm func_global_asm_806A921C 152 yes
2959 us asm func_global_asm_80611D20 128 no
2960 us asm func_global_asm_80610310 28 no yes
2961 us asm func_global_asm_8065E138 1276 no
2962 us asm func_global_asm_8072E54C 88 yes
2963 us asm func_global_asm_8064D880 248 yes

View File

@ -2802,7 +2802,7 @@ us,asm,func_global_asm_8067B01C,228,no
us,asm,func_global_asm_806ED508,184,yes
us,asm,func_global_asm_806485A0,548,no
us,asm,func_global_asm_8062BA0C,104,yes
us,asm,func_global_asm_8061032C,36,no
us,asm,func_global_asm_8061032C,36,yes
us,asm,func_global_asm_806D2E9C,904,yes
us,asm,func_global_asm_806919E0,2044,no
us,asm,func_global_asm_806DA94C,200,yes
@ -2957,7 +2957,7 @@ us,asm,func_global_asm_806766E0,80,yes
us,asm,func_global_asm_80654CCC,440,no
us,asm,func_global_asm_806A921C,152,yes
us,asm,func_global_asm_80611D20,128,no
us,asm,func_global_asm_80610310,28,no
us,asm,func_global_asm_80610310,28,yes
us,asm,func_global_asm_8065E138,1276,no
us,asm,func_global_asm_8072E54C,88,yes
us,asm,func_global_asm_8064D880,248,yes

1 version section function length matching
2802 us asm func_global_asm_806ED508 184 yes
2803 us asm func_global_asm_806485A0 548 no
2804 us asm func_global_asm_8062BA0C 104 yes
2805 us asm func_global_asm_8061032C 36 no yes
2806 us asm func_global_asm_806D2E9C 904 yes
2807 us asm func_global_asm_806919E0 2044 no
2808 us asm func_global_asm_806DA94C 200 yes
2957 us asm func_global_asm_80654CCC 440 no
2958 us asm func_global_asm_806A921C 152 yes
2959 us asm func_global_asm_80611D20 128 no
2960 us asm func_global_asm_80610310 28 no yes
2961 us asm func_global_asm_8065E138 1276 no
2962 us asm func_global_asm_8072E54C 88 yes
2963 us asm func_global_asm_8064D880 248 yes

View File

@ -17,7 +17,7 @@
<text x="38.5" y="14">global_asm</text>
</g>
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
<text x="111.5" y="15" fill="#010101" fill-opacity=".3">39.0086%</text>
<text x="110.5" y="14">39.0086%</text>
<text x="111.5" y="15" fill="#010101" fill-opacity=".3">39.0137%</text>
<text x="110.5" y="14">39.0137%</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -17,7 +17,7 @@
<text x="66.0" y="14">Donkey Kong 64 (US)</text>
</g>
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
<text x="166.5" y="15" fill="#010101" fill-opacity=".3">41.4180%</text>
<text x="165.5" y="14">41.4180%</text>
<text x="166.5" y="15" fill="#010101" fill-opacity=".3">41.4218%</text>
<text x="165.5" y="14">41.4218%</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -23,7 +23,7 @@ typedef struct CritterStruct5 {
u8 unk26[0x2C - 0x26];
} CritterStruct5;
typedef struct Critter {
struct Critter {
s16 unk0;
s16 unk2;
s16 unk4;
@ -57,7 +57,7 @@ typedef struct Critter {
u8 unk1E3;
s16 unk1E4[2];
void *unk1E8[2];
} Critter;
};
typedef struct CritterController {
u8 critter_count;

View File

@ -1,12 +1,6 @@
#include <ultra64.h>
#include "functions.h"
typedef struct {
void *unk0;
void *unk4;
u8 pad8[0x10];
} dk64_boot_struct_0;
extern u8 D_1050;
extern u8 D_11320;
extern u8 D_113F0;
@ -29,7 +23,7 @@ extern u8 D_1FED020;
extern s8 D_dk64_boot_8000DCB0;
extern s32 D_dk64_boot_8000DCB4;
extern dk64_boot_struct_0 D_8000DCC4[];
extern OverlayInfoStruct D_8000DCC4[];
extern OSViMode D_dk64_boot_8000EF20[];
extern s32 D_dk64_boot_8000DE74[3];

View File

@ -1,91 +1,81 @@
#include <ultra64.h>
#include "functions.h"
extern s32 D_dk64_boot_8000DDCC;
extern s32 D_dk64_boot_8000DDE4;
extern u8 D_global_asm_8074447C;
extern u8 D_global_asm_80744480;
extern u8 D_global_asm_80744484;
extern u8 D_global_asm_80744488;
extern f32 D_global_asm_807444B8;
extern f32 D_global_asm_807444BC;
extern f32 D_global_asm_807444C4;
extern f32 D_global_asm_807444C8;
extern u8 D_global_asm_807444F8;
extern u8 D_global_asm_80744500;
extern u8 D_global_asm_8074450C;
extern u8 D_global_asm_80745BDC[]; // Might be a struct array
extern s32 *D_global_asm_8076A080;
extern s32 D_global_asm_8076A084;
extern u8 D_global_asm_807467CC;
extern u8 D_global_asm_8076A0B2;
extern Mtx D_global_asm_80769018;
extern s32 D_global_asm_8076A090;
extern s32 D_global_asm_8076A094;
extern s32 D_global_asm_8076A098;
extern u16 D_global_asm_8076A09C;
extern u8 D_global_asm_8076A0B1; // map_state
extern u8 D_global_asm_8076A0B3; // cutscene_bar_state
extern u8 D_global_asm_80746830;
extern u8 D_global_asm_80750AC0; // number_of_players?
extern u16 D_global_asm_80750AC4;
extern Mtx D_global_asm_80767E68;
extern Mtx D_global_asm_80767CE8;
extern Mtx D_global_asm_80768E98;
extern s32 D_global_asm_8076A058;
extern s32 D_global_asm_8076A068;
extern s32 D_global_asm_8076A06C;
extern s32 *D_global_asm_8076A0A0;
extern u8 D_global_asm_8076A0A4;
extern s16 D_global_asm_8076A0AA;
extern u16 *D_global_asm_807ECDF4;
extern s32 D_global_asm_807FF100;
extern u8 D_global_asm_807F6008;
extern s32 D_global_asm_807F6010;
extern s32 next_exit;
extern f32 D_global_asm_807FD888; // loading_zone_fadeout_progress
extern f32 loading_zone_transition_speed;
extern u8 loading_zone_transition_type;
extern OSIoMesg D_global_asm_807ECE00;
extern OSMesgQueue D_global_asm_807655F0;
extern OSMesg D_global_asm_80765608;
extern OSMesgQueue D_global_asm_807656D0;
extern OSMesg D_global_asm_807656E8;
extern OSMesgQueue D_global_asm_807659E8;
extern OSMesg D_global_asm_80765A00;
extern OSMesg D_global_asm_8076A108;
extern OSMesg D_global_asm_8076A128;
extern OSTimer D_global_asm_8076A130;
void func_global_asm_8060B140(s32, s32*, s32*, s32, s32, s32, s32);
void func_global_asm_80712A40(void);
void func_global_asm_80605510(void);
void func_global_asm_80650E20(s32* arg0);
void func_global_asm_806886E0(s32* arg0, s32 arg1, s32 arg2);
void func_global_asm_80626264(void*);
void func_global_asm_806C7D40(s32 arg0);
void func_global_asm_80712BD4(void);
void func_global_asm_805FB944(u8);
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_0/func_global_asm_805FB300.s")
void func_global_asm_805FB5C4(OSMesgQueue *, s32);
void func_global_asm_805FBFF4(void *); /* extern */
extern void func_dk64_boot_80000450(s32 devAddr, s32 arg1, void *dramAddr);
extern OverlayInfoStruct D_8000DCC4[];
extern void func_arcade_80024000(void);
extern void func_boss_80024000(void);
extern void func_menu_80024000(MenuStruct80024000 *);
extern void func_jetpac_80024000(void);
extern Gfx *func_bonus_80024000(Gfx *, Actor *);
extern void func_race_80024000(void);
extern void func_critter_80024000(Critter *, u8 *, f32);
extern void func_minecart_80024000(u8, u8);
extern OSMesgQueue D_80761050;
extern void *D_80761068;
extern OSThread D_80761430;
extern u64 D_global_asm_80761680;
extern OSMesgQueue *D_global_asm_807655E0;
// Solely for pointers
extern s32 D_80010720;
extern s32 D_80016630;
extern s32 D_global_asm_807FF100;
extern s32 D_80027110;
extern s32 D_80027100;
extern s32 D_80028E20;
extern s32 D_80028E10;
extern s32 D_8002DF10;
extern s32 D_bonus_8002DEF0;
extern s32 D_80030170;
extern s32 D_80030160;
extern s32 D_8002A1E0;
extern s32 D_critter_8002A1B0;
extern s32 D_80036DF0;
extern s32 D_80036DC0;
extern s32 D_80045C00;
extern s32 D_jetpac_8002EC30;
extern s32 D_80033FD0;
extern s32 D_80033F10;
extern s32 D_8004C750;
extern s32 D_arcade_8004AC00;
#define setOverlay(i, start, ovl_end, code_end) \
D_8000DCC4[i].rdram_start = start; \
D_8000DCC4[i].overlay_end = ovl_end; \
D_8000DCC4[i].rdram_code_end = code_end; \
D_8000DCC4[i].rdram_data_end = ovl_end;
/*
void func_global_asm_805FB300(OSMesgQueue *arg0, s32 arg1) {
if (arg1 != 0) {
func_global_asm_805FB5C4(arg0, arg1);
}
D_global_asm_807655E0 = arg0;
setOverlay(0, func_dk64_boot_80000450, &D_80016630, &D_80010720); // Boot
setOverlay(1, func_global_asm_805FB300, &D_global_asm_807FF100, &D_80761050); // Global ASM
setOverlay(2, func_multiplayer_80024000, &D_80027110, &D_80027100); // Multiplayer
setOverlay(3, func_minecart_80024000, &D_80028E20, &D_80028E10); // Minecart
setOverlay(4, func_bonus_80024000, &D_8002DF10, &D_bonus_8002DEF0); // Bonus
setOverlay(5, func_race_80024000, &D_80030170, &D_80030160); // Race
setOverlay(6, func_critter_80024000, &D_8002A1E0, &D_critter_8002A1B0); // Critter
setOverlay(7, func_boss_80024000, &D_80036DF0, &D_80036DC0); // Boss
setOverlay(8, func_jetpac_80024000, &D_80045C00, &D_jetpac_8002EC30); // Jetpac
setOverlay(9, func_menu_80024000, &D_80033FD0, &D_80033F10); // Menu
setOverlay(10, func_arcade_80024000, &D_8004C750, &D_arcade_8004AC00); // Arcade
osDpSetStatus(4U);
osCreatePiManager(0x96, &D_80761050, &D_80761068, 0xF2);
D_global_asm_80761680 = 0x12345678;
osCreateThread(&D_80761430, 3, func_global_asm_805FBFF4, NULL, &D_global_asm_807655E0, 0xA);
osStartThread(&D_80761430);
}
*/
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_0/func_global_asm_805FB5C4.s")
typedef struct {
@ -102,13 +92,12 @@ extern Struct80744464 D_global_asm_80744464;
#define BUFFER_TIME OS_NSEC_TO_CYCLES(48484843)
/*
Close
void func_global_asm_805FB5C4(OSMesgQueue *arg0, s32 arg1) {
Struct80744464 sp34;
void *sp20;
OSTime temp_time;
OSTime target_time;
Struct80744464 sp34;
OSTime buffer_time;
u8 buffer[4];
void *sp20;
sp34 = D_global_asm_80744464;
if (arg1 == 2) {
@ -130,724 +119,4 @@ void func_global_asm_805FB5C4(OSMesgQueue *arg0, s32 arg1) {
func_global_asm_8060E930();
while (TRUE) {}
}
*/
void func_global_asm_805FB750(s32 arg0, s32 arg1, void* arg2) {
s32 sp2C;
sp2C = D_dk64_boot_8000DDCC;
osWritebackDCache(arg2, arg1);
osPiStartDma(&D_global_asm_807ECE00, 0, 0, sp2C + arg0, arg2, arg1, &D_global_asm_807655F0);
osRecvMesg(&D_global_asm_807655F0, 0, 1);
osInvalDCache(arg2, arg1);
}
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_0/func_global_asm_805FB7E4.s")
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_0/func_global_asm_805FB944.s")
void func_global_asm_805FB7E4(void);
void func_global_asm_80610350(u8, u8, s32);
extern OSViMode D_dk64_boot_8000EF20[];
extern s16 D_global_asm_80744494;
extern s16 D_global_asm_80744498;
extern s16 D_global_asm_8074449C;
extern s16 D_global_asm_807444A0;
extern s16 D_global_asm_807444A4;
extern s16 D_global_asm_807444A8;
extern s16 D_global_asm_807444AC;
extern s16 D_global_asm_807444B0;
extern s16 D_global_asm_807444B4;
extern u8 D_global_asm_8074450C;
extern s8 D_global_asm_80744510;
extern s32 D_global_asm_80744584[][2];
extern s8 D_global_asm_807445A0;
extern s8 D_global_asm_807445A4;
extern s16 D_global_asm_80744490;
/*
void func_global_asm_805FB944(u8 arg0) {
u8 var_a1 = 1;
s32 var_a2;
var_a2 = 0;
func_global_asm_806003EC(D_global_asm_8076A0AA);
if (current_map == MAP_NINTENDO_LOGO) {
D_global_asm_8074450C = 2;
} else {
D_global_asm_8074450C = 1;
}
switch (is_cutscene_active) {
case 3:
var_a1 = 9;
case 4:
if (var_a1 == 1) {
var_a1 = 0xA;
}
D_global_asm_80744498 = 0;
D_global_asm_8074449C = 0;
D_global_asm_807444A0 = (D_global_asm_8074450C * 0x140) - 1;
D_global_asm_807444A4 = (D_global_asm_8074450C * 0xF0) - 1;
break;
default:
var_a2 = func_global_asm_8060042C(current_map);
var_a1 = 1;
if (D_global_asm_807FBB64 & 1) {
var_a1 = 7;
} else if (D_global_asm_807FBB64 & 0x1000) {
var_a1 = 6;
} else if (D_global_asm_807FBB64 & 0x104000) {
var_a1 = 8;
} else if (D_global_asm_807FBB64 & 0x80000) {
var_a1 = 4;
} else if (D_global_asm_807FBB64 & 0x2000) {
var_a1 = 5;
} else if (D_global_asm_807FBB64 & 0x04000000) {
var_a1 = 3;
} else if (D_global_asm_807FBB64 & 0x40000000) {
var_a1 = 2;
}
D_global_asm_80744498 = D_global_asm_8074450C * 0xA;
D_global_asm_8074449C = D_global_asm_8074450C * 0xA;
D_global_asm_807444A0 = (D_global_asm_8074450C * 0x136) - 1;
D_global_asm_807444A4 = (D_global_asm_8074450C * 0xE6) - 1;
break;
}
func_global_asm_80610350(arg0, var_a1, var_a2);
if (D_global_asm_807445A4 == 0) {
s32 index = D_global_asm_80744584[osTvType][D_global_asm_8074450C];
osViSetMode(&D_dk64_boot_8000EF20[index]);
if (D_global_asm_807445A0 == 0) {
osViBlack(1U);
}
D_global_asm_80744510 = 0;
D_global_asm_807445A0 = 0;
} else {
D_global_asm_80744510 = 1;
D_global_asm_807445A0 = 1;
D_global_asm_807445A4 = 0;
func_global_asm_805FB7E4();
}
osViSetSpecialFeatures(0x42U);
D_global_asm_80744490 = D_global_asm_8074450C * 0x140;
D_global_asm_80744494 = D_global_asm_8074450C * 0xF0;
D_global_asm_807444AC = D_global_asm_8074449C + (D_global_asm_8074450C * 0x1E);
D_global_asm_807444B0 = D_global_asm_807444A4 - (D_global_asm_8074450C * 0x1E);
D_global_asm_807444A8 = D_global_asm_8074449C;
D_global_asm_807444B4 = D_global_asm_807444A4;
}
*/
// close
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_0/func_global_asm_805FBC5C.s")
extern s32 D_global_asm_8076A07C;
extern OSMesgQueue D_global_asm_8076A110;
extern s32 D_global_asm_80767CD8;
typedef struct {
u8 *unk0;
u8 *unk4;
u8 pad8[0x10];
} dk64_boot_struct_0;
extern dk64_boot_struct_0 D_dk64_boot_8000DCC4[];
void func_global_asm_8060EC80(OSMesgQueue *arg0, void *arg1, s32 arg2, s32 arg3, u8 arg4);
/*
// TODO: Pretty close
void func_global_asm_805FBC5C(void) {
D_global_asm_8076A084 = D_dk64_boot_8000DCC4[12].unk4 - D_dk64_boot_8000DCC4[12].unk0;
osCreateMesgQueue(&D_global_asm_807655F0, &D_global_asm_80765608, 0x32);
osCreateMesgQueue(&D_global_asm_807656D0, &D_global_asm_807656E8, 0xC0);
func_global_asm_8060EC80(&D_global_asm_80767A40, &D_global_asm_80767A40, 0x19, osTvType, 1);
osCreateMesgQueue(&D_global_asm_807659E8, &D_global_asm_80765A00, 0x10);
func_global_asm_8060ED6C(&D_global_asm_80767A40, &D_global_asm_80767CD8, &D_global_asm_807659E8, 1, 1);
current_map = next_map;
func_global_asm_805FB944(0);
D_global_asm_8076A07C = 5;
func_global_asm_8060FFF0();
func_global_asm_8060A900();
func_global_asm_80600D50();
setIntroStoryPlaying(0);
func_global_asm_8073239C();
osWriteBackDCacheAll();
osCreateMesgQueue(&D_global_asm_8076A110, &D_global_asm_8076A108, 2);
osSetTimer(&D_global_asm_8076A130, 0, 0xD693A4, &D_global_asm_8076A110, D_global_asm_8076A128);
playSound(0x23C, 0x7FFF, 63.0f, 1.0f, 0, 0);
}
*/
void func_global_asm_805FBE04(void) {
s32 stackpad1;
f32 FOV;
osWriteBackDCacheAll();
osInvalDCache((void*)0x80000000, 0x800000);
D_global_asm_8076A080 = &D_global_asm_807FF100;
func_global_asm_8060B140(D_dk64_boot_8000DDE4, D_global_asm_8076A080, &D_global_asm_8076A084, 0, 0, 0, 0);
D_global_asm_8076A0A4 = 0;
func_global_asm_8060AA04();
object_timer = 0;
D_global_asm_8076A068 = 0;
D_global_asm_807467CC = 0;
current_exit = 4;
global_properties_bitfield = 0x30030;
D_global_asm_8076A0B1 |= 1;
D_global_asm_8076A0B2 = 0;
D_global_asm_807FD888 = 31.0f; // loading_zone_fadeout_progress
D_global_asm_8076A0B1 |= 4;
func_global_asm_80631B80();
func_global_asm_806C9AE0();
func_global_asm_80731030(); // clearTemporaryFlags()
func_global_asm_805FF118();
func_global_asm_8063DB0C();
FOV = func_global_asm_8062A850(); // getFieldOfView()
guTranslate(&D_global_asm_80767E68, 0.0f, 0.0f, 0.0f);
guTranslate(&D_global_asm_80769018, 0.0f, 0.0f, 0.0f);
guPerspective(&D_global_asm_80767CE8, &D_global_asm_8076A09C, D_global_asm_807444B8, D_global_asm_807444BC * FOV, D_global_asm_807444C8, D_global_asm_807444C4, 1.0f);
guPerspective(&D_global_asm_80768E98, &D_global_asm_8076A09C, D_global_asm_807444B8, D_global_asm_807444BC * FOV, D_global_asm_807444C8, D_global_asm_807444C4, 1.0f);
}
// close, just missing some nops
// https://decomp.me/scratch/lJIx2
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_0/func_global_asm_805FBFF4.s")
extern s32 D_global_asm_8076A070;
extern s32 osTvType;
extern s8 D_global_asm_80744460;
extern u16 D_global_asm_8074682C;
extern u8 D_global_asm_80744504;
extern u8 D_global_asm_807F059C;
extern u64 D_global_asm_80761680;
extern s32 D_global_asm_807655E0;
extern u8 D_global_asm_807444F0;
extern s32 D_global_asm_80767CC0;
/*
void func_global_asm_805FBFF4(s32 arg0) {
s32 phi_s4;
OSMesg* sp38;
phi_s4 = 1;
if (osTvType == OS_TV_PAL) {
D_global_asm_807444BC = 1.25f;
}
func_global_asm_805FBC5C();
osViSetSpecialFeatures(0x42);
func_global_asm_805FBE04();
D_global_asm_8076A070 = D_global_asm_80767CC0 - 2;
osRecvMesg(&D_global_asm_8076A110, &sp38, 1);
while (TRUE) {
D_global_asm_8074682C = 0xC8;
while (D_global_asm_80744460) {}
if (D_global_asm_8076A0B1 & 1 && !D_global_asm_8076A0B2) {
func_global_asm_805FE7FC();
if (D_global_asm_807444F8 == 2) {
global_properties_bitfield |= 0x200;
D_global_asm_80744504 = 8;
}
}
switch (is_cutscene_active) {
case 6:
func_global_asm_8070A934(next_map, next_exit);
break;
case 3:
func_80024000();
break;
case 4:
func_80024000();
break;
case 5:
break;
default:
func_global_asm_805FC2B0();
break;
}
func_global_asm_80600B10();
func_global_asm_8066AF40();
func_global_asm_80610268(0x4D2);
if (D_global_asm_807F059C) {
func_global_asm_80610268(0x929);
}
func_global_asm_80600674(); // calculateLagBoost()
if ((is_cutscene_active == 0) || (is_cutscene_active == 1) || (is_cutscene_active == 7)) {
func_global_asm_80658CCC();
func_global_asm_80700BF4();
}
func_global_asm_80611730();
if (D_global_asm_80761680 != 0x12345678) {
raiseException(2, 0, 0, 0);
}
if (phi_s4) {
osSendMesg(D_global_asm_807655E0, 0x309, 1);
phi_s4 = 0;
}
if (D_global_asm_8076A0B1 & 1 && D_global_asm_807FD888 == 31.0f) {
D_global_asm_8076A0B2--;
}
D_global_asm_807444F0 = is_cutscene_active;
}
}
*/
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_0/func_global_asm_805FC2B0.s")
extern s32 *D_global_asm_8076A048;
extern s32 D_8076A150;
extern s32 D_global_asm_8076A088;
extern s32 D_global_asm_8076A08C;
/*
void func_global_asm_805FC2B0(void) {
s32 sp2C;
s32 sp28;
s32 temp_v0;
s32 phi_v0;
func_global_asm_8060A9BC();
if (D_global_asm_8076A0A4 != 0) {
phi_v0 = 0;
} else {
phi_v0 = 1;
}
//func_global_asm_80610044(((*0x807444FC * 4) + 0x80770000)->unk-5FB0, D_global_asm_8076A088, 3, phi_v0 & 0xFF, 0x4D2, 1);
if (D_global_asm_8076A0A4 != 0) {
//func_global_asm_80610044((D_global_asm_807444FC * 0x11B0) + 0xDB0 + &D_global_asm_80767CE8, D_global_asm_8076A08C, 0, 1, 0x929, 1);
}
D_global_asm_807444FC ^= 1;
object_timer++;
if ((global_properties_bitfield & 2) == 0) {
D_global_asm_8076A068++;
}
*D_global_asm_8076A048 = (D_global_asm_807444FC * 0x11B0) + &D_global_asm_80767CE8;
func_global_asm_8060AC7C();
if (func_global_asm_805FC668() != 0) {
func_global_asm_8065D1AC();
func_global_asm_806789E4();
func_global_asm_80715270(1);
func_global_asm_80603450();
func_global_asm_806057F8();
func_global_asm_806025D4();
func_global_asm_805FCA94(D_global_asm_8076A048);
} else {
func_global_asm_8065A648();
func_global_asm_806787CC();
func_global_asm_805FCA94(D_global_asm_8076A048);
func_global_asm_8065D1AC();
func_global_asm_8068A508();
func_global_asm_8066CDD0();
func_global_asm_8066CCD8();
func_global_asm_80661054();
func_global_asm_80678824();
func_global_asm_80663A80();
func_global_asm_80715270(0);
func_global_asm_80603450();
func_global_asm_806025D4();
func_global_asm_806057F8();
func_global_asm_806F6F28();
}
func_global_asm_8070DD44();
temp_v0 = D_global_asm_8076A050[D_global_asm_807444FC];
D_8076A150 = temp_v0;
if (((D_global_asm_8076A0B1 & 1) != 0) && (D_global_asm_807FD888 == 31.0f)) {
sp2C = temp_v0;
sp28 = D_global_asm_8076A048 + 0xDB0;
func_global_asm_8068C2EC();
} else {
func_global_asm_805FD088(D_global_asm_8076A048, &sp2C, &sp28);
}
if ((global_properties_bitfield & 0x100) != 0) {
global_properties_bitfield &= ~0x100;
func_global_asm_807094D0(2);
} else if ((global_properties_bitfield & 0x200) != 0) {
D_global_asm_80744504--;
if (D_global_asm_80744504 == 0) {
global_properties_bitfield &= ~0x200;
func_global_asm_807094D0(3);
}
} else {
sp2C = func_global_asm_80704484(sp2C, loading_zone_transition_type);
}
if ((D_global_asm_8076A0A4 != 0) && (is_cutscene_active != 6)) {
func_global_asm_805FE71C(sp2C, D_global_asm_807444FC, &D_global_asm_8076A088, 0);
func_global_asm_805FE7B4(sp28, D_global_asm_8076A048, &D_global_asm_8076A08C, 1);
return;
}
func_global_asm_805FE71C(sp2C, D_global_asm_807444FC, &D_global_asm_8076A088, 1);
}
*/
// OSTime stuff
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_0/func_global_asm_805FC668.s")
void func_global_asm_806FB2B8(); /* extern */
extern OSTime D_global_asm_807445B0;
extern OSTime D_global_asm_807445B8;
extern OSTime D_global_asm_807445C0;
extern s8 D_global_asm_807445C8;
/*
s32 func_global_asm_805FC668(void) {
Actor *temp_v0;
enum actors_e var_v0;
OSTime temp_time;
if ((current_map == MAP_MAIN_MENU) || ((func_global_asm_80714360() == 0) && (gameIsInAdventureMode() == 0) && (gameIsInMysteryMenuMinigameMode() == 0) && (gameIsInSnidesBonusGameMode() == 0))) {
global_properties_bitfield &= ~1;
}
if (global_properties_bitfield & 2) {
if ((global_properties_bitfield & 0x40) && ((gameIsInAdventureMode() != 0) || (gameIsInMysteryMenuMinigameMode() != 0))) {
func_global_asm_80602B60(0x22, 0U);
global_properties_bitfield &= 0xFFEBFFBD;
if (((s32) cc_number_of_players < 2) && (gameIsInMysteryMenuMinigameMode() == 0)) {
var_v0 = ACTOR_PAUSE_MENU;
} else {
var_v0 = ACTOR_PAUSE_MENU_MYSTERY_MENU;
}
temp_v0 = func_global_asm_8067ADB4(var_v0);
if (temp_v0) {
deleteActor(temp_v0);
}
D_global_asm_807445B0 = osGetTime() - D_global_asm_807445C0;
func_global_asm_806FB2B8();
}
} else {
D_global_asm_807445B8 += D_global_asm_807445B0;
D_global_asm_807445C0 = 0;
D_global_asm_807445B0 = 0;
if (D_global_asm_807445C8 > 0) {
if (!(global_properties_bitfield & 1)) {
D_global_asm_807445C8 = 0;
} else {
if (--D_global_asm_807445C8 <= 0) {
if (((gameIsInAdventureMode() != 0) || (gameIsInMysteryMenuMinigameMode() != 0)) && !(global_properties_bitfield & 0x40000)) {
playSong(0x22, 1.0f);
playSong(0x29, 1.0f);
if ((cc_number_of_players < 2) && (gameIsInMysteryMenuMinigameMode() == 0)) {
spawnActor(ACTOR_PAUSE_MENU, 0);
global_properties_bitfield |= 0x100000;
} else {
spawnActor(ACTOR_PAUSE_MENU_MYSTERY_MENU, 0);
}
last_spawned_actor->unk64 |= 2;
}
D_global_asm_807445C0 = osGetTime();
global_properties_bitfield ^= 1;
global_properties_bitfield |= 2;
}
}
}
if ((global_properties_bitfield & 1) && (D_global_asm_807445C8 <= 0)) {
func_global_asm_806FB290();
D_global_asm_807445C8 = 2;
}
}
return global_properties_bitfield & 2;
}
*/
extern OSTime D_global_asm_807445B8;
extern OSTime D_global_asm_807445C0;
extern u32 D_global_asm_80750AB0;
u32 func_global_asm_805FC98C(void) {
OSTime sp18;
OSTime temp_t8;
u32 temp_t7;
OSTime currentTime;
currentTime = osGetTime();
temp_t8 = (currentTime - D_global_asm_807445B8);
if (global_properties_bitfield & 2) {
temp_t8 = temp_t8 - currentTime + D_global_asm_807445C0;
}
return D_global_asm_80750AB0 + (u32)__ull_div(__ull_div(__ll_mul(temp_t8, 0x40), 3000), 1000000);
}
u8 func_global_asm_805FCA64(void) { // getCutsceneBarState()
return !(D_global_asm_8076A0B1 & 0x10) && !D_global_asm_8076A0B3;
}
// rodata, doable
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_0/func_global_asm_805FCA94.s")
Gfx *func_global_asm_805FCFD8(Gfx *dl) {
if (D_global_asm_8074450C == 2) {
gSPDisplayList(dl++, &D_1000068);
} else {
gSPDisplayList(dl++, &D_1000040);
}
return dl++;
}
Gfx *func_global_asm_805FD030(Gfx *dl) {
if (D_global_asm_8074450C == 2) {
gSPDisplayList(dl++, &D_1000030);
} else {
gSPDisplayList(dl++, &D_1000020);
}
return dl++;
}
// Displaylist stuff
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_0/func_global_asm_805FD088.s")
extern void *D_8076A060;
extern s16 D_global_asm_80744490;
extern s16 D_global_asm_80744494;
Gfx *func_global_asm_805FE398(Gfx *dl) {
gDPPipeSync(dl++);
gDPSetRenderMode(dl++, G_RM_NOOP, G_RM_NOOP2);
gDPSetCycleType(dl++, G_CYC_FILL);
gSPClearGeometryMode(dl++, G_ZBUFFER);
gDPSetDepthImage(dl++, osVirtualToPhysical(D_8076A060));
gDPSetColorImage(dl++, G_IM_FMT_RGBA, G_IM_SIZ_16b, D_global_asm_80744490, osVirtualToPhysical(D_8076A060));
gDPSetFillColor(dl++, 0xFFFCFFFC);
gDPFillRectangle(dl++, 0, 0, D_global_asm_80744490 - 1, D_global_asm_80744494 - 1);
gDPPipeSync(dl++);
return dl;
}
extern s32 D_global_asm_80744470[];
Gfx *func_global_asm_805FE4D4(Gfx *dl) {
gDPSetColorImage(dl++, 0, 2, D_global_asm_80744490, osVirtualToPhysical(D_global_asm_80744470[D_global_asm_807444FC]));
return dl;
}
void func_global_asm_805FE544(u8 arg0) {
if (D_global_asm_807FBB64 & 1) {
D_global_asm_8076A058 = 6000;
} else {
D_global_asm_8076A058 = arg0 * 3000;
}
D_global_asm_8076A050[0] = malloc(D_global_asm_8076A058 * sizeof(Gfx));
D_global_asm_8076A050[1] = malloc(D_global_asm_8076A058 * sizeof(Gfx));
func_global_asm_805FE71C(func_global_asm_805FE634(D_global_asm_8076A050[0], 0), 0, &D_global_asm_8076A088, 1);
func_global_asm_805FE71C(func_global_asm_805FE634(D_global_asm_8076A050[1], 1), 1, &D_global_asm_8076A088, 1);
}
Gfx *func_global_asm_805FE634(Gfx *dl, u8 arg1) {
gDPPipeSync(dl++);
gDPSetRenderMode(dl++, G_RM_NOOP, G_RM_NOOP2);
gDPSetCycleType(dl++, G_CYC_FILL);
gDPSetColorImage(dl++, G_IM_FMT_RGBA, G_IM_SIZ_16b, D_global_asm_80744490, D_global_asm_80744470[arg1]);
gDPSetFillColor(dl++, 0x00010001);
gDPPipeSync(dl++);
gDPFillRectangle(dl++, 0, 0, D_global_asm_80744490 - 1, D_global_asm_80744494 - 1);
return dl;
}
void func_global_asm_805FE71C(Gfx *dl, u8 arg1, s32 *arg2, u8 arg3) {
Gfx *dl2 = dl;
if (arg3) {
gDPFullSync(dl2++);
}
gSPEndDisplayList(dl2++);
*arg2 = (dl2 - D_global_asm_8076A050[arg1]);
if (*arg2 >= D_global_asm_8076A058) {
raiseException(0x12, 0, 0, 0);
}
}
void func_global_asm_805FE7B4(Gfx *dl, Gfx *arg1, s32 *arg2, u8 arg3) {
Gfx *dl2;
dl2 = dl;
if (arg3) {
gDPFullSync(dl2++);
}
gSPEndDisplayList(dl2++);
*arg2 = (((dl2 - 0x1B6) - arg1));
}
void func_global_asm_805FE7FC(void) {
s32 *mapGeometry;
void *sp28;
s32 *mapSetup;
f32 phi_f0;
Maps map;
u8 player_count;
D_global_asm_80746830 = 1;
D_global_asm_8076A090 = 0;
D_global_asm_8076A094 = 0;
D_global_asm_8076A098 = 0;
global_properties_bitfield &= 0xFFEB3FFC;
func_global_asm_80712A40();
D_global_asm_80750AC4 = 0;
D_global_asm_8076A0A4 = 0;
D_global_asm_807444FC = 0;
object_timer = 0;
D_global_asm_8076A068 = 0;
func_global_asm_80605510();
enemies_killed = 0;
*D_global_asm_807ECDF4 = 0;
func_global_asm_8068C080();
D_global_asm_8076A0B1 &= 0xFFCF;
func_global_asm_8070F570();
if (is_cutscene_active == 1) {
is_cutscene_active = 0;
}
D_global_asm_8076A06C = object_timer;
D_global_asm_80744500 = 0;
func_global_asm_80600950();
current_map = next_map;
map = current_map;
if (current_map != MAP_MAIN_MENU) {
if (current_map != MAP_TITLE_SCREEN_NOT_FOR_RESALE_VERSION) {
global_properties_bitfield |= 0x30030;
} else {
global_properties_bitfield &= 0xFFFCFFCF;
}
} else {
global_properties_bitfield &= 0xFFFEFFCF;
}
if (map == MAP_DK_ARCADE) {
is_cutscene_active = 3;
} else if (map == MAP_JETPAC) {
is_cutscene_active = 4;
} else {
is_cutscene_active = 0;
}
func_global_asm_805FB944(1);
if (D_global_asm_80750AC0 > 1) {
if (!(D_global_asm_807FBB64 & 0x4000000)) {
D_global_asm_80750AC0 = 1;
}
}
func_global_asm_806C7C10();
func_global_asm_806D0430(0.0f);
func_global_asm_805FE544(D_global_asm_80750AC0);
if (current_map != MAP_ENGUARDE_ARENA) {
if (current_map == MAP_RAMBI_ARENA) {
current_character_index[0] = 6;
}
} else {
current_character_index[0] = 7;
}
D_global_asm_807F6010 = 0;
func_global_asm_8066ADA0();
func_global_asm_806FBB58();
func_global_asm_806FD9A0();
func_global_asm_807040E0(0xFF, 0xFF, 0xFF);
func_global_asm_80704108(0xFF, 0xFF, 0xFF);
if (!is_cutscene_active) {
D_global_asm_8076A0A0 = getPointerTableFile(0x13, MAP_TEST_MAP, 1, 1);
func_global_asm_80705B30();
func_global_asm_807215EC();
func_global_asm_806F3760(current_map); // Load autowalk file
func_global_asm_8072ED90();
func_global_asm_80658BD0();
func_global_asm_80722E00(current_map); // Load path file
mapGeometry = getPointerTableFile(1, current_map, 1, 1);
func_global_asm_80630300();
func_global_asm_80650E20(mapGeometry);
func_global_asm_8062F050(mapGeometry);
loadExits(current_map);
func_global_asm_8065D170();
func_global_asm_806588E0(current_map); // Load per map file, pointer table 20
func_global_asm_80688940();
func_global_asm_80631C3C();
func_global_asm_8063643C();
mapSetup = getPointerTableFile(9, current_map, 1, 1);
func_global_asm_80631FAC(current_map, 1);
func_global_asm_806886E0(mapSetup, 0, 0);
func_global_asm_80663DA0();
func_global_asm_8065A570();
func_global_asm_80677D80();
func_global_asm_8068A7B0(); // spawnPersistentActors()
func_global_asm_8072E740(current_map);
func_global_asm_80626264(sp28 = getPointerTableFile(8, current_map, 1, 1));
if (sp28) {
func_global_asm_8066B434(sp28, 0x8D0, 2);
}
func_global_asm_80712B80();
func_global_asm_806C7D40(next_exit);
func_global_asm_80714670();
sp28 = getPointerTableFile(0x10, current_map, 1, 1);
func_global_asm_80724C78(sp28);
if (sp28) {
func_global_asm_8066B434(sp28, 0x8DD, 2);
}
func_global_asm_8061EA78();
func_global_asm_8068C2EC();
func_global_asm_806F4778();
func_global_asm_8070E8C8();
func_global_asm_8060098C(func_global_asm_806025AC, 2, 0, 0, 0);
if (D_global_asm_807FBB64 & 0x1000) {
sp28 = getPointerTableFile(0x16, current_map, 1, 1);
func_critter_80026FD0(sp28);
if (sp28) {
func_global_asm_8066B434(sp28, 0x8ED, 2);
}
}
if (D_global_asm_807FBB64 & 0x2000) {
setupRaceOnMapLoad(current_map);
}
func_global_asm_8066BDE0();
D_global_asm_807F6008 = 0;
if (!isIntroStoryPlaying() && is_cutscene_active != 2) {
if (current_map == MAP_HELM && isFlagSet(0x302, FLAG_TYPE_PERMANENT)) {
playSong(0x74, 1.0f);
} else {
phi_f0 = 1.0f;
if (D_global_asm_80745BDC[current_map * 4] == 6 || D_global_asm_80745BDC[current_map * 4] == 0x1F) {
phi_f0 = 0.549333155155f;
}
playSong(D_global_asm_80745BDC[current_map * 4], phi_f0);
}
}
if (current_map == MAP_DK_ISLES_OVERWORLD || current_map == MAP_ENGUARDE_ARENA) {
playSong(0x60, 1.0f);
}
func_global_asm_8060A4D0(0, 1.0f);
func_global_asm_8060A4D0(1, 1.0f);
func_global_asm_8060A4D0(2, 1.0f);
func_global_asm_805FFEF8(current_map);
func_global_asm_806641A0();
}
func_global_asm_80712BD4();
func_global_asm_805FF670();
D_global_asm_8076A0B1 ^= 1;
D_global_asm_807FD888 = 31.0f;
D_global_asm_8076A0B1 |= 4;
loading_zone_transition_speed = -1.0f;
if (D_global_asm_807444F8 != 2 && loading_zone_transition_type == 1) {
playSong(0x2B, 1.0f);
}
func_global_asm_80701C90();
func_global_asm_80629190();
func_global_asm_80664CB0(D_global_asm_8076A0AA);
func_global_asm_80600590(current_map);
D_global_asm_80746830 = 0;
}
void func_global_asm_805FEE84(u8 arg0, u8 arg1, u8 arg2, u8 arg3) {
D_global_asm_8074447C = arg0;
D_global_asm_80744480 = arg1;
D_global_asm_80744484 = arg2;
D_global_asm_80744488 = arg3;
}
void func_global_asm_805FEEB8(s32 *arg0, s32 arg1) {
s32 temp_hi;
temp_hi = *arg0 % arg1;
if (temp_hi) {
*arg0 += arg1 - temp_hi;
}
}
*/

View File

@ -1,8 +0,0 @@
#include <ultra64.h>
#include "functions.h"
// TODO: Can't auto decompile, unknown instruction
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_15010/func_global_asm_80610310.s")
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_15010/func_global_asm_8061032C.s")

804
src/global_asm/code_450.c Normal file
View File

@ -0,0 +1,804 @@
#include <ultra64.h>
#include "functions.h"
extern s32 D_dk64_boot_8000DDCC;
extern s32 D_dk64_boot_8000DDE4;
extern u8 D_global_asm_8074447C;
extern u8 D_global_asm_80744480;
extern u8 D_global_asm_80744484;
extern u8 D_global_asm_80744488;
extern f32 D_global_asm_807444B8;
extern f32 D_global_asm_807444BC;
extern f32 D_global_asm_807444C4;
extern f32 D_global_asm_807444C8;
extern u8 D_global_asm_807444F8;
extern u8 D_global_asm_80744500;
extern u8 D_global_asm_8074450C;
extern u8 D_global_asm_80745BDC[]; // Might be a struct array
extern s32 *D_global_asm_8076A080;
extern s32 D_global_asm_8076A084;
extern u8 D_global_asm_807467CC;
extern u8 D_global_asm_8076A0B2;
extern Mtx D_global_asm_80769018;
extern s32 D_global_asm_8076A090;
extern s32 D_global_asm_8076A094;
extern s32 D_global_asm_8076A098;
extern u16 D_global_asm_8076A09C;
extern u8 D_global_asm_8076A0B1; // map_state
extern u8 D_global_asm_8076A0B3; // cutscene_bar_state
extern u8 D_global_asm_80746830;
extern u8 D_global_asm_80750AC0; // number_of_players?
extern u16 D_global_asm_80750AC4;
extern Mtx D_global_asm_80767E68;
extern Mtx D_global_asm_80767CE8;
extern Mtx D_global_asm_80768E98;
extern s32 D_global_asm_8076A058;
extern s32 D_global_asm_8076A068;
extern s32 D_global_asm_8076A06C;
extern s32 *D_global_asm_8076A0A0;
extern u8 D_global_asm_8076A0A4;
extern s16 D_global_asm_8076A0AA;
extern u16 *D_global_asm_807ECDF4;
extern s32 D_global_asm_807FF100;
extern u8 D_global_asm_807F6008;
extern s32 D_global_asm_807F6010;
extern s32 next_exit;
extern f32 D_global_asm_807FD888; // loading_zone_fadeout_progress
extern f32 loading_zone_transition_speed;
extern u8 loading_zone_transition_type;
extern OSIoMesg D_global_asm_807ECE00;
extern OSMesgQueue D_global_asm_807655F0;
extern OSMesg D_global_asm_80765608;
extern OSMesgQueue D_global_asm_807656D0;
extern OSMesg D_global_asm_807656E8;
extern OSMesgQueue D_global_asm_807659E8;
extern OSMesg D_global_asm_80765A00;
extern OSMesg D_global_asm_8076A108;
extern OSMesg D_global_asm_8076A128;
extern OSTimer D_global_asm_8076A130;
void func_global_asm_8060B140(s32, s32*, s32*, s32, s32, s32, s32);
void func_global_asm_80712A40(void);
void func_global_asm_80605510(void);
void func_global_asm_80650E20(s32* arg0);
void func_global_asm_806886E0(s32* arg0, s32 arg1, s32 arg2);
void func_global_asm_80626264(void*);
void func_global_asm_806C7D40(s32 arg0);
void func_global_asm_80712BD4(void);
void func_global_asm_805FB944(u8);
void func_global_asm_805FB750(s32 arg0, s32 arg1, void* arg2) {
s32 sp2C;
sp2C = D_dk64_boot_8000DDCC;
osWritebackDCache(arg2, arg1);
osPiStartDma(&D_global_asm_807ECE00, 0, 0, sp2C + arg0, arg2, arg1, &D_global_asm_807655F0);
osRecvMesg(&D_global_asm_807655F0, 0, 1);
osInvalDCache(arg2, arg1);
}
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_450/func_global_asm_805FB7E4.s")
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_450/func_global_asm_805FB944.s")
void func_global_asm_805FB7E4(void);
void func_global_asm_80610350(u8, u8, s32);
extern OSViMode D_dk64_boot_8000EF20[];
extern s16 D_global_asm_80744494;
extern s16 D_global_asm_80744498;
extern s16 D_global_asm_8074449C;
extern s16 D_global_asm_807444A0;
extern s16 D_global_asm_807444A4;
extern s16 D_global_asm_807444A8;
extern s16 D_global_asm_807444AC;
extern s16 D_global_asm_807444B0;
extern s16 D_global_asm_807444B4;
extern u8 D_global_asm_8074450C;
extern s8 D_global_asm_80744510;
extern s32 D_global_asm_80744584[][2];
extern s8 D_global_asm_807445A0;
extern s8 D_global_asm_807445A4;
extern s16 D_global_asm_80744490;
/*
void func_global_asm_805FB944(u8 arg0) {
u8 var_a1 = 1;
s32 var_a2;
var_a2 = 0;
func_global_asm_806003EC(D_global_asm_8076A0AA);
if (current_map == MAP_NINTENDO_LOGO) {
D_global_asm_8074450C = 2;
} else {
D_global_asm_8074450C = 1;
}
switch (is_cutscene_active) {
case 3:
var_a1 = 9;
case 4:
if (var_a1 == 1) {
var_a1 = 0xA;
}
D_global_asm_80744498 = 0;
D_global_asm_8074449C = 0;
D_global_asm_807444A0 = (D_global_asm_8074450C * 0x140) - 1;
D_global_asm_807444A4 = (D_global_asm_8074450C * 0xF0) - 1;
break;
default:
var_a2 = func_global_asm_8060042C(current_map);
var_a1 = 1;
if (D_global_asm_807FBB64 & 1) {
var_a1 = 7;
} else if (D_global_asm_807FBB64 & 0x1000) {
var_a1 = 6;
} else if (D_global_asm_807FBB64 & 0x104000) {
var_a1 = 8;
} else if (D_global_asm_807FBB64 & 0x80000) {
var_a1 = 4;
} else if (D_global_asm_807FBB64 & 0x2000) {
var_a1 = 5;
} else if (D_global_asm_807FBB64 & 0x04000000) {
var_a1 = 3;
} else if (D_global_asm_807FBB64 & 0x40000000) {
var_a1 = 2;
}
D_global_asm_80744498 = D_global_asm_8074450C * 0xA;
D_global_asm_8074449C = D_global_asm_8074450C * 0xA;
D_global_asm_807444A0 = (D_global_asm_8074450C * 0x136) - 1;
D_global_asm_807444A4 = (D_global_asm_8074450C * 0xE6) - 1;
break;
}
func_global_asm_80610350(arg0, var_a1, var_a2);
if (D_global_asm_807445A4 == 0) {
s32 index = D_global_asm_80744584[osTvType][D_global_asm_8074450C];
osViSetMode(&D_dk64_boot_8000EF20[index]);
if (D_global_asm_807445A0 == 0) {
osViBlack(1U);
}
D_global_asm_80744510 = 0;
D_global_asm_807445A0 = 0;
} else {
D_global_asm_80744510 = 1;
D_global_asm_807445A0 = 1;
D_global_asm_807445A4 = 0;
func_global_asm_805FB7E4();
}
osViSetSpecialFeatures(0x42U);
D_global_asm_80744490 = D_global_asm_8074450C * 0x140;
D_global_asm_80744494 = D_global_asm_8074450C * 0xF0;
D_global_asm_807444AC = D_global_asm_8074449C + (D_global_asm_8074450C * 0x1E);
D_global_asm_807444B0 = D_global_asm_807444A4 - (D_global_asm_8074450C * 0x1E);
D_global_asm_807444A8 = D_global_asm_8074449C;
D_global_asm_807444B4 = D_global_asm_807444A4;
}
*/
// close
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_450/func_global_asm_805FBC5C.s")
extern s32 D_global_asm_8076A07C;
extern OSMesgQueue D_global_asm_8076A110;
extern s32 D_global_asm_80767CD8;
typedef struct {
u8 *unk0;
u8 *unk4;
u8 pad8[0x10];
} dk64_boot_struct_0;
extern dk64_boot_struct_0 D_dk64_boot_8000DCC4[];
void func_global_asm_8060EC80(OSMesgQueue *arg0, void *arg1, s32 arg2, s32 arg3, u8 arg4);
/*
// TODO: Pretty close
void func_global_asm_805FBC5C(void) {
D_global_asm_8076A084 = D_dk64_boot_8000DCC4[12].unk4 - D_dk64_boot_8000DCC4[12].unk0;
osCreateMesgQueue(&D_global_asm_807655F0, &D_global_asm_80765608, 0x32);
osCreateMesgQueue(&D_global_asm_807656D0, &D_global_asm_807656E8, 0xC0);
func_global_asm_8060EC80(&D_global_asm_80767A40, &D_global_asm_80767A40, 0x19, osTvType, 1);
osCreateMesgQueue(&D_global_asm_807659E8, &D_global_asm_80765A00, 0x10);
func_global_asm_8060ED6C(&D_global_asm_80767A40, &D_global_asm_80767CD8, &D_global_asm_807659E8, 1, 1);
current_map = next_map;
func_global_asm_805FB944(0);
D_global_asm_8076A07C = 5;
func_global_asm_8060FFF0();
func_global_asm_8060A900();
func_global_asm_80600D50();
setIntroStoryPlaying(0);
func_global_asm_8073239C();
osWriteBackDCacheAll();
osCreateMesgQueue(&D_global_asm_8076A110, &D_global_asm_8076A108, 2);
osSetTimer(&D_global_asm_8076A130, 0, 0xD693A4, &D_global_asm_8076A110, D_global_asm_8076A128);
playSound(0x23C, 0x7FFF, 63.0f, 1.0f, 0, 0);
}
*/
void func_global_asm_805FBE04(void) {
s32 stackpad1;
f32 FOV;
osWriteBackDCacheAll();
osInvalDCache((void*)0x80000000, 0x800000);
D_global_asm_8076A080 = &D_global_asm_807FF100;
func_global_asm_8060B140(D_dk64_boot_8000DDE4, D_global_asm_8076A080, &D_global_asm_8076A084, 0, 0, 0, 0);
D_global_asm_8076A0A4 = 0;
func_global_asm_8060AA04();
object_timer = 0;
D_global_asm_8076A068 = 0;
D_global_asm_807467CC = 0;
current_exit = 4;
global_properties_bitfield = 0x30030;
D_global_asm_8076A0B1 |= 1;
D_global_asm_8076A0B2 = 0;
D_global_asm_807FD888 = 31.0f; // loading_zone_fadeout_progress
D_global_asm_8076A0B1 |= 4;
func_global_asm_80631B80();
func_global_asm_806C9AE0();
func_global_asm_80731030(); // clearTemporaryFlags()
func_global_asm_805FF118();
func_global_asm_8063DB0C();
FOV = func_global_asm_8062A850(); // getFieldOfView()
guTranslate(&D_global_asm_80767E68, 0.0f, 0.0f, 0.0f);
guTranslate(&D_global_asm_80769018, 0.0f, 0.0f, 0.0f);
guPerspective(&D_global_asm_80767CE8, &D_global_asm_8076A09C, D_global_asm_807444B8, D_global_asm_807444BC * FOV, D_global_asm_807444C8, D_global_asm_807444C4, 1.0f);
guPerspective(&D_global_asm_80768E98, &D_global_asm_8076A09C, D_global_asm_807444B8, D_global_asm_807444BC * FOV, D_global_asm_807444C8, D_global_asm_807444C4, 1.0f);
}
// close, just missing some nops
// https://decomp.me/scratch/lJIx2
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_450/func_global_asm_805FBFF4.s")
extern s32 D_global_asm_8076A070;
extern s32 osTvType;
extern s8 D_global_asm_80744460;
extern u16 D_global_asm_8074682C;
extern u8 D_global_asm_80744504;
extern u8 D_global_asm_807F059C;
extern u64 D_global_asm_80761680;
extern s32 D_global_asm_807655E0;
extern u8 D_global_asm_807444F0;
extern s32 D_global_asm_80767CC0;
/*
void func_global_asm_805FBFF4(s32 arg0) {
s32 phi_s4;
OSMesg* sp38;
phi_s4 = 1;
if (osTvType == OS_TV_PAL) {
D_global_asm_807444BC = 1.25f;
}
func_global_asm_805FBC5C();
osViSetSpecialFeatures(0x42);
func_global_asm_805FBE04();
D_global_asm_8076A070 = D_global_asm_80767CC0 - 2;
osRecvMesg(&D_global_asm_8076A110, &sp38, 1);
while (TRUE) {
D_global_asm_8074682C = 0xC8;
while (D_global_asm_80744460) {}
if (D_global_asm_8076A0B1 & 1 && !D_global_asm_8076A0B2) {
func_global_asm_805FE7FC();
if (D_global_asm_807444F8 == 2) {
global_properties_bitfield |= 0x200;
D_global_asm_80744504 = 8;
}
}
switch (is_cutscene_active) {
case 6:
func_global_asm_8070A934(next_map, next_exit);
break;
case 3:
func_80024000();
break;
case 4:
func_80024000();
break;
case 5:
break;
default:
func_global_asm_805FC2B0();
break;
}
func_global_asm_80600B10();
func_global_asm_8066AF40();
func_global_asm_80610268(0x4D2);
if (D_global_asm_807F059C) {
func_global_asm_80610268(0x929);
}
func_global_asm_80600674(); // calculateLagBoost()
if ((is_cutscene_active == 0) || (is_cutscene_active == 1) || (is_cutscene_active == 7)) {
func_global_asm_80658CCC();
func_global_asm_80700BF4();
}
func_global_asm_80611730();
if (D_global_asm_80761680 != 0x12345678) {
raiseException(2, 0, 0, 0);
}
if (phi_s4) {
osSendMesg(D_global_asm_807655E0, 0x309, 1);
phi_s4 = 0;
}
if (D_global_asm_8076A0B1 & 1 && D_global_asm_807FD888 == 31.0f) {
D_global_asm_8076A0B2--;
}
D_global_asm_807444F0 = is_cutscene_active;
}
}
*/
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_450/func_global_asm_805FC2B0.s")
extern s32 *D_global_asm_8076A048;
extern s32 D_8076A150;
extern s32 D_global_asm_8076A088;
extern s32 D_global_asm_8076A08C;
/*
void func_global_asm_805FC2B0(void) {
s32 sp2C;
s32 sp28;
s32 temp_v0;
s32 phi_v0;
func_global_asm_8060A9BC();
if (D_global_asm_8076A0A4 != 0) {
phi_v0 = 0;
} else {
phi_v0 = 1;
}
//func_global_asm_80610044(((*0x807444FC * 4) + 0x80770000)->unk-5FB0, D_global_asm_8076A088, 3, phi_v0 & 0xFF, 0x4D2, 1);
if (D_global_asm_8076A0A4 != 0) {
//func_global_asm_80610044((D_global_asm_807444FC * 0x11B0) + 0xDB0 + &D_global_asm_80767CE8, D_global_asm_8076A08C, 0, 1, 0x929, 1);
}
D_global_asm_807444FC ^= 1;
object_timer++;
if ((global_properties_bitfield & 2) == 0) {
D_global_asm_8076A068++;
}
*D_global_asm_8076A048 = (D_global_asm_807444FC * 0x11B0) + &D_global_asm_80767CE8;
func_global_asm_8060AC7C();
if (func_global_asm_805FC668() != 0) {
func_global_asm_8065D1AC();
func_global_asm_806789E4();
func_global_asm_80715270(1);
func_global_asm_80603450();
func_global_asm_806057F8();
func_global_asm_806025D4();
func_global_asm_805FCA94(D_global_asm_8076A048);
} else {
func_global_asm_8065A648();
func_global_asm_806787CC();
func_global_asm_805FCA94(D_global_asm_8076A048);
func_global_asm_8065D1AC();
func_global_asm_8068A508();
func_global_asm_8066CDD0();
func_global_asm_8066CCD8();
func_global_asm_80661054();
func_global_asm_80678824();
func_global_asm_80663A80();
func_global_asm_80715270(0);
func_global_asm_80603450();
func_global_asm_806025D4();
func_global_asm_806057F8();
func_global_asm_806F6F28();
}
func_global_asm_8070DD44();
temp_v0 = D_global_asm_8076A050[D_global_asm_807444FC];
D_8076A150 = temp_v0;
if (((D_global_asm_8076A0B1 & 1) != 0) && (D_global_asm_807FD888 == 31.0f)) {
sp2C = temp_v0;
sp28 = D_global_asm_8076A048 + 0xDB0;
func_global_asm_8068C2EC();
} else {
func_global_asm_805FD088(D_global_asm_8076A048, &sp2C, &sp28);
}
if ((global_properties_bitfield & 0x100) != 0) {
global_properties_bitfield &= ~0x100;
func_global_asm_807094D0(2);
} else if ((global_properties_bitfield & 0x200) != 0) {
D_global_asm_80744504--;
if (D_global_asm_80744504 == 0) {
global_properties_bitfield &= ~0x200;
func_global_asm_807094D0(3);
}
} else {
sp2C = func_global_asm_80704484(sp2C, loading_zone_transition_type);
}
if ((D_global_asm_8076A0A4 != 0) && (is_cutscene_active != 6)) {
func_global_asm_805FE71C(sp2C, D_global_asm_807444FC, &D_global_asm_8076A088, 0);
func_global_asm_805FE7B4(sp28, D_global_asm_8076A048, &D_global_asm_8076A08C, 1);
return;
}
func_global_asm_805FE71C(sp2C, D_global_asm_807444FC, &D_global_asm_8076A088, 1);
}
*/
// OSTime stuff
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_450/func_global_asm_805FC668.s")
void func_global_asm_806FB2B8(); /* extern */
extern OSTime D_global_asm_807445B0;
extern OSTime D_global_asm_807445B8;
extern OSTime D_global_asm_807445C0;
extern s8 D_global_asm_807445C8;
/*
s32 func_global_asm_805FC668(void) {
Actor *temp_v0;
enum actors_e var_v0;
OSTime temp_time;
if ((current_map == MAP_MAIN_MENU) || ((func_global_asm_80714360() == 0) && (gameIsInAdventureMode() == 0) && (gameIsInMysteryMenuMinigameMode() == 0) && (gameIsInSnidesBonusGameMode() == 0))) {
global_properties_bitfield &= ~1;
}
if (global_properties_bitfield & 2) {
if ((global_properties_bitfield & 0x40) && ((gameIsInAdventureMode() != 0) || (gameIsInMysteryMenuMinigameMode() != 0))) {
func_global_asm_80602B60(0x22, 0U);
global_properties_bitfield &= 0xFFEBFFBD;
if (((s32) cc_number_of_players < 2) && (gameIsInMysteryMenuMinigameMode() == 0)) {
var_v0 = ACTOR_PAUSE_MENU;
} else {
var_v0 = ACTOR_PAUSE_MENU_MYSTERY_MENU;
}
temp_v0 = func_global_asm_8067ADB4(var_v0);
if (temp_v0) {
deleteActor(temp_v0);
}
D_global_asm_807445B0 = osGetTime() - D_global_asm_807445C0;
func_global_asm_806FB2B8();
}
} else {
D_global_asm_807445B8 += D_global_asm_807445B0;
D_global_asm_807445C0 = 0;
D_global_asm_807445B0 = 0;
if (D_global_asm_807445C8 > 0) {
if (!(global_properties_bitfield & 1)) {
D_global_asm_807445C8 = 0;
} else {
if (--D_global_asm_807445C8 <= 0) {
if (((gameIsInAdventureMode() != 0) || (gameIsInMysteryMenuMinigameMode() != 0)) && !(global_properties_bitfield & 0x40000)) {
playSong(0x22, 1.0f);
playSong(0x29, 1.0f);
if ((cc_number_of_players < 2) && (gameIsInMysteryMenuMinigameMode() == 0)) {
spawnActor(ACTOR_PAUSE_MENU, 0);
global_properties_bitfield |= 0x100000;
} else {
spawnActor(ACTOR_PAUSE_MENU_MYSTERY_MENU, 0);
}
last_spawned_actor->unk64 |= 2;
}
D_global_asm_807445C0 = osGetTime();
global_properties_bitfield ^= 1;
global_properties_bitfield |= 2;
}
}
}
if ((global_properties_bitfield & 1) && (D_global_asm_807445C8 <= 0)) {
func_global_asm_806FB290();
D_global_asm_807445C8 = 2;
}
}
return global_properties_bitfield & 2;
}
*/
extern OSTime D_global_asm_807445B8;
extern OSTime D_global_asm_807445C0;
extern u32 D_global_asm_80750AB0;
u32 func_global_asm_805FC98C(void) {
OSTime sp18;
OSTime temp_t8;
u32 temp_t7;
OSTime currentTime;
currentTime = osGetTime();
temp_t8 = (currentTime - D_global_asm_807445B8);
if (global_properties_bitfield & 2) {
temp_t8 = temp_t8 - currentTime + D_global_asm_807445C0;
}
return D_global_asm_80750AB0 + (u32)__ull_div(__ull_div(__ll_mul(temp_t8, 0x40), 3000), 1000000);
}
u8 func_global_asm_805FCA64(void) { // getCutsceneBarState()
return !(D_global_asm_8076A0B1 & 0x10) && !D_global_asm_8076A0B3;
}
// rodata, doable
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_450/func_global_asm_805FCA94.s")
Gfx *func_global_asm_805FCFD8(Gfx *dl) {
if (D_global_asm_8074450C == 2) {
gSPDisplayList(dl++, &D_1000068);
} else {
gSPDisplayList(dl++, &D_1000040);
}
return dl++;
}
Gfx *func_global_asm_805FD030(Gfx *dl) {
if (D_global_asm_8074450C == 2) {
gSPDisplayList(dl++, &D_1000030);
} else {
gSPDisplayList(dl++, &D_1000020);
}
return dl++;
}
// Displaylist stuff
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_450/func_global_asm_805FD088.s")
extern void *D_8076A060;
extern s16 D_global_asm_80744490;
extern s16 D_global_asm_80744494;
Gfx *func_global_asm_805FE398(Gfx *dl) {
gDPPipeSync(dl++);
gDPSetRenderMode(dl++, G_RM_NOOP, G_RM_NOOP2);
gDPSetCycleType(dl++, G_CYC_FILL);
gSPClearGeometryMode(dl++, G_ZBUFFER);
gDPSetDepthImage(dl++, osVirtualToPhysical(D_8076A060));
gDPSetColorImage(dl++, G_IM_FMT_RGBA, G_IM_SIZ_16b, D_global_asm_80744490, osVirtualToPhysical(D_8076A060));
gDPSetFillColor(dl++, 0xFFFCFFFC);
gDPFillRectangle(dl++, 0, 0, D_global_asm_80744490 - 1, D_global_asm_80744494 - 1);
gDPPipeSync(dl++);
return dl;
}
extern s32 D_global_asm_80744470[];
Gfx *func_global_asm_805FE4D4(Gfx *dl) {
gDPSetColorImage(dl++, 0, 2, D_global_asm_80744490, osVirtualToPhysical(D_global_asm_80744470[D_global_asm_807444FC]));
return dl;
}
void func_global_asm_805FE544(u8 arg0) {
if (D_global_asm_807FBB64 & 1) {
D_global_asm_8076A058 = 6000;
} else {
D_global_asm_8076A058 = arg0 * 3000;
}
D_global_asm_8076A050[0] = malloc(D_global_asm_8076A058 * sizeof(Gfx));
D_global_asm_8076A050[1] = malloc(D_global_asm_8076A058 * sizeof(Gfx));
func_global_asm_805FE71C(func_global_asm_805FE634(D_global_asm_8076A050[0], 0), 0, &D_global_asm_8076A088, 1);
func_global_asm_805FE71C(func_global_asm_805FE634(D_global_asm_8076A050[1], 1), 1, &D_global_asm_8076A088, 1);
}
Gfx *func_global_asm_805FE634(Gfx *dl, u8 arg1) {
gDPPipeSync(dl++);
gDPSetRenderMode(dl++, G_RM_NOOP, G_RM_NOOP2);
gDPSetCycleType(dl++, G_CYC_FILL);
gDPSetColorImage(dl++, G_IM_FMT_RGBA, G_IM_SIZ_16b, D_global_asm_80744490, D_global_asm_80744470[arg1]);
gDPSetFillColor(dl++, 0x00010001);
gDPPipeSync(dl++);
gDPFillRectangle(dl++, 0, 0, D_global_asm_80744490 - 1, D_global_asm_80744494 - 1);
return dl;
}
void func_global_asm_805FE71C(Gfx *dl, u8 arg1, s32 *arg2, u8 arg3) {
Gfx *dl2 = dl;
if (arg3) {
gDPFullSync(dl2++);
}
gSPEndDisplayList(dl2++);
*arg2 = (dl2 - D_global_asm_8076A050[arg1]);
if (*arg2 >= D_global_asm_8076A058) {
raiseException(0x12, 0, 0, 0);
}
}
void func_global_asm_805FE7B4(Gfx *dl, Gfx *arg1, s32 *arg2, u8 arg3) {
Gfx *dl2;
dl2 = dl;
if (arg3) {
gDPFullSync(dl2++);
}
gSPEndDisplayList(dl2++);
*arg2 = (((dl2 - 0x1B6) - arg1));
}
void func_global_asm_805FE7FC(void) {
s32 *mapGeometry;
void *sp28;
s32 *mapSetup;
f32 phi_f0;
Maps map;
u8 player_count;
D_global_asm_80746830 = 1;
D_global_asm_8076A090 = 0;
D_global_asm_8076A094 = 0;
D_global_asm_8076A098 = 0;
global_properties_bitfield &= 0xFFEB3FFC;
func_global_asm_80712A40();
D_global_asm_80750AC4 = 0;
D_global_asm_8076A0A4 = 0;
D_global_asm_807444FC = 0;
object_timer = 0;
D_global_asm_8076A068 = 0;
func_global_asm_80605510();
enemies_killed = 0;
*D_global_asm_807ECDF4 = 0;
func_global_asm_8068C080();
D_global_asm_8076A0B1 &= 0xFFCF;
func_global_asm_8070F570();
if (is_cutscene_active == 1) {
is_cutscene_active = 0;
}
D_global_asm_8076A06C = object_timer;
D_global_asm_80744500 = 0;
func_global_asm_80600950();
current_map = next_map;
map = current_map;
if (current_map != MAP_MAIN_MENU) {
if (current_map != MAP_TITLE_SCREEN_NOT_FOR_RESALE_VERSION) {
global_properties_bitfield |= 0x30030;
} else {
global_properties_bitfield &= 0xFFFCFFCF;
}
} else {
global_properties_bitfield &= 0xFFFEFFCF;
}
if (map == MAP_DK_ARCADE) {
is_cutscene_active = 3;
} else if (map == MAP_JETPAC) {
is_cutscene_active = 4;
} else {
is_cutscene_active = 0;
}
func_global_asm_805FB944(1);
if (D_global_asm_80750AC0 > 1) {
if (!(D_global_asm_807FBB64 & 0x4000000)) {
D_global_asm_80750AC0 = 1;
}
}
func_global_asm_806C7C10();
func_global_asm_806D0430(0.0f);
func_global_asm_805FE544(D_global_asm_80750AC0);
if (current_map != MAP_ENGUARDE_ARENA) {
if (current_map == MAP_RAMBI_ARENA) {
current_character_index[0] = 6;
}
} else {
current_character_index[0] = 7;
}
D_global_asm_807F6010 = 0;
func_global_asm_8066ADA0();
func_global_asm_806FBB58();
func_global_asm_806FD9A0();
func_global_asm_807040E0(0xFF, 0xFF, 0xFF);
func_global_asm_80704108(0xFF, 0xFF, 0xFF);
if (!is_cutscene_active) {
D_global_asm_8076A0A0 = getPointerTableFile(0x13, MAP_TEST_MAP, 1, 1);
func_global_asm_80705B30();
func_global_asm_807215EC();
func_global_asm_806F3760(current_map); // Load autowalk file
func_global_asm_8072ED90();
func_global_asm_80658BD0();
func_global_asm_80722E00(current_map); // Load path file
mapGeometry = getPointerTableFile(1, current_map, 1, 1);
func_global_asm_80630300();
func_global_asm_80650E20(mapGeometry);
func_global_asm_8062F050(mapGeometry);
loadExits(current_map);
func_global_asm_8065D170();
func_global_asm_806588E0(current_map); // Load per map file, pointer table 20
func_global_asm_80688940();
func_global_asm_80631C3C();
func_global_asm_8063643C();
mapSetup = getPointerTableFile(9, current_map, 1, 1);
func_global_asm_80631FAC(current_map, 1);
func_global_asm_806886E0(mapSetup, 0, 0);
func_global_asm_80663DA0();
func_global_asm_8065A570();
func_global_asm_80677D80();
func_global_asm_8068A7B0(); // spawnPersistentActors()
func_global_asm_8072E740(current_map);
func_global_asm_80626264(sp28 = getPointerTableFile(8, current_map, 1, 1));
if (sp28) {
func_global_asm_8066B434(sp28, 0x8D0, 2);
}
func_global_asm_80712B80();
func_global_asm_806C7D40(next_exit);
func_global_asm_80714670();
sp28 = getPointerTableFile(0x10, current_map, 1, 1);
func_global_asm_80724C78(sp28);
if (sp28) {
func_global_asm_8066B434(sp28, 0x8DD, 2);
}
func_global_asm_8061EA78();
func_global_asm_8068C2EC();
func_global_asm_806F4778();
func_global_asm_8070E8C8();
func_global_asm_8060098C(func_global_asm_806025AC, 2, 0, 0, 0);
if (D_global_asm_807FBB64 & 0x1000) {
sp28 = getPointerTableFile(0x16, current_map, 1, 1);
func_critter_80026FD0(sp28);
if (sp28) {
func_global_asm_8066B434(sp28, 0x8ED, 2);
}
}
if (D_global_asm_807FBB64 & 0x2000) {
setupRaceOnMapLoad(current_map);
}
func_global_asm_8066BDE0();
D_global_asm_807F6008 = 0;
if (!isIntroStoryPlaying() && is_cutscene_active != 2) {
if (current_map == MAP_HELM && isFlagSet(0x302, FLAG_TYPE_PERMANENT)) {
playSong(0x74, 1.0f);
} else {
phi_f0 = 1.0f;
if (D_global_asm_80745BDC[current_map * 4] == 6 || D_global_asm_80745BDC[current_map * 4] == 0x1F) {
phi_f0 = 0.549333155155f;
}
playSong(D_global_asm_80745BDC[current_map * 4], phi_f0);
}
}
if (current_map == MAP_DK_ISLES_OVERWORLD || current_map == MAP_ENGUARDE_ARENA) {
playSong(0x60, 1.0f);
}
func_global_asm_8060A4D0(0, 1.0f);
func_global_asm_8060A4D0(1, 1.0f);
func_global_asm_8060A4D0(2, 1.0f);
func_global_asm_805FFEF8(current_map);
func_global_asm_806641A0();
}
func_global_asm_80712BD4();
func_global_asm_805FF670();
D_global_asm_8076A0B1 ^= 1;
D_global_asm_807FD888 = 31.0f;
D_global_asm_8076A0B1 |= 4;
loading_zone_transition_speed = -1.0f;
if (D_global_asm_807444F8 != 2 && loading_zone_transition_type == 1) {
playSong(0x2B, 1.0f);
}
func_global_asm_80701C90();
func_global_asm_80629190();
func_global_asm_80664CB0(D_global_asm_8076A0AA);
func_global_asm_80600590(current_map);
D_global_asm_80746830 = 0;
}
void func_global_asm_805FEE84(u8 arg0, u8 arg1, u8 arg2, u8 arg3) {
D_global_asm_8074447C = arg0;
D_global_asm_80744480 = arg1;
D_global_asm_80744484 = arg2;
D_global_asm_80744488 = arg3;
}
void func_global_asm_805FEEB8(s32 *arg0, s32 arg1) {
s32 temp_hi;
temp_hi = *arg0 % arg1;
if (temp_hi) {
*arg0 += arg1 - temp_hi;
}
}

View File

@ -30,23 +30,6 @@ typedef struct {
extern Struct80032F48 D_menu_80032F48[];
extern s32 D_menu_800330A0[];
typedef struct {
u8 unk0;
u8 unk1;
u8 unk2;
u8 unk3;
u16 unk4;
u8 unk6;
u8 unk7;
s32 unk8;
s32 unkC;
s32 unk10;
s32 unk14;
s16 unk18;
u8 unk1A;
u8 unk1B;
} MenuStruct80024000;
void func_menu_80024000(MenuStruct80024000 *arg0) {
s32 temp_v1;