fragment40

This commit is contained in:
Kelebek1 2025-04-07 22:59:44 +01:00
parent 8140d7b3d2
commit 710962b429
9 changed files with 723 additions and 29 deletions

View File

@ -5,3 +5,4 @@ def apply(config, args):
config['myimg'] = 'build/pokestadium-us.z64'
config['mapfile'] = 'build/pokestadium-us.map'
config['source_directories'] = ['.']
config["objdump_flags"] = ["-Mreg-names=32"]

View File

@ -40,4 +40,6 @@ void __ull_divremi(unsigned long long* div, unsigned long long* rem, unsigned lo
long long __ll_mod(long long a0, long long a1);
long long __ll_rshift(long long a0, long long a1);
f32 abs_asm(f32);
#endif

View File

@ -347,6 +347,9 @@ extern u8 D_04001BC0[];
extern u8 D_04001C28[];
extern u8 D_4001C90[];
extern u8 D_4001FB8[];
extern u8 D_30015E0[];
extern u8 D_30025E0[];
extern u8 D_3002C00[];
extern LEODiskID D_800818E0;

View File

@ -598,4 +598,7 @@ D_800FCE48 = 0x800FCE48; // size:0x20
D_800FCE68 = 0x800FCE68; // size:0x20
D_800FCE88 = 0x800FCE88; // size:0x20
D_800FCEB8 = 0x800FCEB8; // size:0x8
D_800FCEB6 = 0x800FCEB6; // size:0x2
D_800FCEB6 = 0x800FCEB6; // size:0x2
D_30015E0 = 0x30015E0;
D_30025E0 = 0x30025E0;
D_3002C00 = 0x3002C00;

View File

@ -132,7 +132,10 @@ void func_8001A654(u16* arg0, s32 a1, arg1_func_80010CA8 arg2) {
cond = arg1 >= 2;
arg1 -= 2;
// clang-format off
while (cond != 0) { *arg0 = func_80010CA8(*arg0, arg2); cond = arg1 >= 2; arg1 -= 2; arg0++; }
while (cond != 0) {
*arg0 = func_80010CA8(*arg0, arg2); cond = arg1 >= 2; arg1 -= 2;
arg0++;
}
// clang-format on
}

View File

@ -1,47 +1,674 @@
#include "global.h"
#include "fragment40.h"
#include "src/12D80.h"
#include "src/1C720.h"
#include "src/1CF30.h"
#include "src/20330.h"
#include "src/20470.h"
#include "src/3FB0.h"
#include "src/6A40.h"
#include "src/6BC0.h"
#include "src/F420.h"
#include "src/controller.h"
#include "src/memmap.h"
#include "src/memory.h"
#include "src/stage_loader.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/40/fragment40/func_83100020.s")
s32 func_83100578(s32, GraphNode*);
s32 func_83100180(s32, GraphNode*);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/40/fragment40/func_83100180.s")
typedef struct unk_D_83101E6C {
/* 0x00 */ s16 unk_00;
/* 0x04 */ f32 unk_04;
/* 0x08 */ s16 unk_08;
/* 0x0A */ s16 unk_0A;
/* 0x0C */ s16 unk_0C;
/* 0x0E */ s16 unk_0E;
/* 0x10 */ s16 unk_10;
/* 0x12 */ s16 unk_12;
} unk_D_83101E6C; // size = 0x14
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/40/fragment40/func_8310024C.s")
typedef struct unk_D_83102218 {
/* 0x00 */ s16 unk_00;
/* 0x02 */ s16 unk_02;
/* 0x04 */ s16 unk_04;
/* 0x08 */ f32 unk_08;
} unk_D_83102218; // size = 0xC
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/40/fragment40/func_83100578.s")
typedef struct unk_D_83102224 {
/* 0x00 */ s16 unk_00;
/* 0x02 */ s16 unk_02;
/* 0x04 */ s16 unk_04;
} unk_D_83102224; // size = 0x8
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/40/fragment40/func_831006D4.s")
static BinArchive* D_83101EE0;
static u8* D_83101EE4;
static s16 D_83101EE8;
static s16 D_83101EEA;
static s16 D_83101EEC;
static s16 D_83101EEE;
static s16 D_83101EF0;
static GraphNode* D_83101EF4;
static GraphNode* D_83101EF8;
static GraphNode* D_83101EFC;
static unk_D_83101F00 D_83101F00[2];
static unk_D_83101F00* D_83102210;
static unk_D_83101F00* D_83102214;
static unk_D_83102218 D_83102218;
static unk_D_83102224 D_83102224;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/40/fragment40/func_831006F4.s")
static Vtx D_83101BE0[] = {
VTX(-100, 14, 0, 0, 0, 0x78, 0x32, 0xFF, 0xFF), VTX(-100, 0, 0, 0, 448, 0xBB, 0x28, 0x8E, 0xFF),
VTX(100, 0, 0, 6400, 448, 0xBB, 0x28, 0x8E, 0xFF), VTX(100, 14, 0, 6400, 0, 0x78, 0x32, 0xFF, 0xFF),
VTX(-100, 0, 0, 0, 0, 0xBB, 0x28, 0x8E, 0xFF), VTX(-100, -14, 0, 0, 448, 0xFF, 0x1E, 0x1E, 0xFF),
VTX(100, -14, 0, 6400, 448, 0xFF, 0x1E, 0x1E, 0xFF), VTX(100, 0, 0, 6400, 0, 0xBB, 0x28, 0x8E, 0xFF),
};
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/40/fragment40/func_83100784.s")
static Gfx D_83101C60[] = {
gsSPSetGeometryMode(G_CULL_BACK),
gsDPSetCombineLERP(SHADE, 0, TEXEL0, 0, 0, 0, 0, TEXEL0, 0, 0, 0, COMBINED, 0, 0, 0, COMBINED),
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
gsSPVertex(D_83101BE0, 8, 0),
gsDPLoadTextureBlock(0x0F000000, G_IM_FMT_IA, G_IM_SIZ_8b, 200, 14, 0, G_TX_NOMIRROR | G_TX_CLAMP,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsDPLoadTextureBlock(0x0F000AF0, G_IM_FMT_IA, G_IM_SIZ_8b, 200, 14, 0, G_TX_NOMIRROR | G_TX_CLAMP,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsSPEndDisplayList(),
};
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/40/fragment40/func_83100C78.s")
static u32 D_83101D08[] = {
0x17000000, 0x00000000, 0x00000000, 0x00000000, D_83101BE0, 0x05000000, 0x22050000,
0x00000000, 0x08000000, func_83100180, 0x00000000, 0x06000000, 0x01000000, 0x00000000,
};
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/40/fragment40/func_83100CB8.s")
static Vtx D_83101D40[] = {
VTX(-64, 16, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(-64, -16, 0, 0, 1024, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(64, -16, 0, 4096, 1024, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(64, 16, 0, 4096, 0, 0xFF, 0xFF, 0xFF, 0xFF),
};
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/40/fragment40/func_83100CD4.s")
static Gfx D_83101D80[] = {
gsSPSetGeometryMode(G_CULL_BACK),
gsDPSetCombineMode(G_CC_BLENDPEDECALA, G_CC_PASS2),
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
gsSPVertex(D_83101D40, 4, 0),
gsDPLoadTextureBlock(0x0F000000, G_IM_FMT_IA, G_IM_SIZ_8b, 128, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSPEndDisplayList(),
};
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/40/fragment40/func_83100D4C.s")
static u32 D_83101DE8[] = {
0x17000000, 0x00000000, 0x00000000, 0x00000000, D_83101D40, 0x05000000, 0x22050000,
0x00000000, 0x08000000, func_83100578, 0x00000000, 0x06000000, 0x01000000,
};
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/40/fragment40/func_8310102C.s")
static u32 D_83101E1C[] = {
0x0C000000, 0x05000000, 0x0B00002D, 0x00000000, 0x028001E0, 0x00000000, 0xFDBD0000,
0x00000243, 0x05000000, 0x0D000000, 0x05000000, 0x0F000002, 0x05000000, 0x0A000000,
&D_800AC840, 0x06000000, 0x06000000, 0x06000000, 0x06000000, 0x01000000,
};
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/40/fragment40/func_83101074.s")
static unk_D_83101E6C D_83101E6C[] = {
{ 0xC, 0.0f, 0, 0, 0, 0, 0, 0 },
{ 4, 2.4f, 0xFF, 0, 0, 0, 0, 0 },
{ 4, 2.0f, 0xFF, 0xFF, 0xFF, 0xC8, 0x64, 0 },
{ -1, 2.0f, 0xC8, 0xC8, 0x1E, 0, 0, 0 },
};
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/40/fragment40/func_831010B0.s")
void func_83100020(unk_D_86002F58_004_000* arg0) {
unk_D_83101F00* ptr = (unk_D_83101F00*)arg0;
f32 temp_fv0;
s32 sp1C;
f32 var_fv0;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/40/fragment40/func_831010E0.s")
switch (ptr->unk_16A) {
case 1:
if (ptr->unk_180 >= 0.0f) {
ptr->unk_184 -= 0.065f;
} else {
ptr->unk_184 += 0.065f;
}
sp1C = 0;
temp_fv0 = ptr->unk_180;
ptr->unk_180 += ptr->unk_184;
if (((ptr->unk_180 * temp_fv0) < 0.0f) && (abs_asm(ptr->unk_184) < 0.13f)) {
sp1C = 1;
}
if (sp1C == 0) {
ptr->unk_184 *= 0.75f;
var_fv0 = (ptr->unk_180 * -520.0f) + 320.0f;
} else {
ptr->unk_16A = 2;
ptr->unk_16C = 0;
var_fv0 = 320.0f;
}
ptr->unk_000.unk_024.x = var_fv0 - 320.0f;
D_83101EEE = (s16)var_fv0 + 0xC8;
D_83101EF0 = 0xAC;
break;
case 0:
case 2:
case 3:
break;
}
}
s32 func_83100180(s32 arg0, UNUSED GraphNode* arg1) {
switch (arg0) {
case 0:
break;
case 2:
func_83100020(D_8006F09C);
break;
case 5:
gDPPipeSync(gDisplayListHead++);
gSPSegment(gDisplayListHead++, 0x0F, Memmap_GetSegmentVaddr(D_3000000));
gSPDisplayList(gDisplayListHead++, D_83101C60);
func_80015684();
break;
}
return 0;
}
void func_8310024C(unk_D_83101F00* arg0) {
unk_D_83101E6C* ptr1;
unk_D_83101E6C* ptr2;
f32 var_fv1;
switch (arg0->unk_16A) {
case 1:
arg0->unk_16C--;
ptr1 = &D_83101E6C[arg0->unk_170];
ptr2 = &D_83101E6C[arg0->unk_170 + 1];
arg0->unk_172 = ptr2->unk_08 + (((ptr1->unk_08 - ptr2->unk_08) * arg0->unk_16C) / arg0->unk_16E);
arg0->unk_174 = ptr2->unk_0A + (((ptr1->unk_0A - ptr2->unk_0A) * arg0->unk_16C) / arg0->unk_16E);
arg0->unk_176 = ptr2->unk_0C + (((ptr1->unk_0C - ptr2->unk_0C) * arg0->unk_16C) / arg0->unk_16E);
arg0->unk_178 = ptr2->unk_0E + (((ptr1->unk_0E - ptr2->unk_0E) * arg0->unk_16C) / arg0->unk_16E);
arg0->unk_17A = ptr2->unk_10 + (((ptr1->unk_10 - ptr2->unk_10) * arg0->unk_16C) / arg0->unk_16E);
arg0->unk_17C = ptr2->unk_12 + (((ptr1->unk_12 - ptr2->unk_12) * arg0->unk_16C) / arg0->unk_16E);
var_fv1 = ptr2->unk_04 + (((ptr1->unk_04 - ptr2->unk_04) * arg0->unk_16C) / arg0->unk_16E);
if (arg0->unk_16C <= 0) {
arg0->unk_170++;
ptr1 = &D_83101E6C[arg0->unk_170];
arg0->unk_16C = arg0->unk_16E = ptr1->unk_00;
arg0->unk_172 = ptr1->unk_08;
arg0->unk_174 = ptr1->unk_0A;
arg0->unk_176 = ptr1->unk_0C;
arg0->unk_178 = ptr1->unk_0E;
arg0->unk_17A = ptr1->unk_10;
arg0->unk_17C = ptr1->unk_12;
var_fv1 = ptr1->unk_04;
if (arg0->unk_16C == -1) {
arg0->unk_16E = 0;
arg0->unk_16A = 2;
arg0->unk_16C = arg0->unk_16E;
}
}
func_8000E88C(&arg0->unk_000.unk_030, var_fv1, var_fv1, var_fv1);
break;
case 0:
case 2:
case 3:
break;
}
}
s32 func_83100578(s32 arg0, GraphNode* arg1) {
unk_D_83101F00* ptr = (unk_D_83101F00*)D_8006F09C;
switch (arg0) {
case 0:
break;
case 2:
func_8310024C(ptr);
break;
case 5:
gDPPipeSync(gDisplayListHead++);
gSPSegment(gDisplayListHead++, 0x0F, Memmap_GetSegmentVaddr(D_30015E0));
gDPSetPrimColor(gDisplayListHead++, 0, 0, ptr->unk_172, ptr->unk_174, ptr->unk_176, 0xFF);
gDPSetEnvColor(gDisplayListHead++, ptr->unk_178, ptr->unk_17A, ptr->unk_17C, 0xFF);
gSPDisplayList(gDisplayListHead++, D_83101D80);
func_80015684();
break;
}
return 0;
}
void func_831006D4(void) {
D_83102218.unk_00 = 0;
D_83102218.unk_02 = 0;
D_83102218.unk_08 = 7.0f;
}
void func_831006F4(void) {
s32 tmp;
switch (D_83102218.unk_00) {
case 1:
D_83102218.unk_02--;
D_83102218.unk_08 = (D_83102218.unk_02 * 7.0f) / D_83102218.unk_04;
tmp = D_83102218.unk_02 <= 0;
if (tmp) {
D_83102218.unk_00 = 2;
D_83102218.unk_02 = D_83102218.unk_04 = 0;
D_83102218.unk_08 = 0.0f;
}
break;
case 0:
case 2:
break;
}
}
void func_83100784(void) {
s16 var_t0;
s16 var_t1;
s16 var_t3;
s16 var_t4;
s16 sp9E;
s16 sp9C;
s16 sp40;
s16 sp38;
s32 temp_ft2;
func_800060E0(&gDisplayListHead, 0, 0, 0x280, 0x1E0);
if (D_83102218.unk_00 == 0) {
return;
}
if ((D_83102218.unk_08 <= 0.0f) || (D_83102218.unk_00 == 2)) {
gSPDisplayList(gDisplayListHead++, D_8006F4C0);
gDPSetFillColor(gDisplayListHead++, 0x00010001);
gDPFillRectangle(gDisplayListHead++, 0, 0, 639, 479);
return;
}
temp_ft2 = ROUND_MAX(1024.0f / D_83102218.unk_08);
sp9E = ROUND_MAX(128.0f * D_83102218.unk_08);
sp9C = ROUND_MAX(128.0f * D_83102218.unk_08);
sp38 = (0x280 - sp9E) / 2;
sp40 = (0x1E0 - sp9C) / 2;
gSPDisplayList(gDisplayListHead++, D_8006F518);
gDPSetCombineLERP(gDisplayListHead++, 1, TEXEL0, ENVIRONMENT, 0, 1, TEXEL0, ENVIRONMENT, 0, 1, TEXEL0, ENVIRONMENT,
0, 1, TEXEL0, ENVIRONMENT, 0);
gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, 255);
gDPLoadTextureBlock_4b(gDisplayListHead++, D_3002C00, G_IM_FMT_I, 64, 64, 0, G_TX_MIRROR | G_TX_WRAP,
G_TX_MIRROR | G_TX_WRAP, 6, 6, G_TX_NOLOD, G_TX_NOLOD);
func_8001C330(sp38, sp40, sp9E, sp9C, 0, 0, temp_ft2, temp_ft2, 0);
var_t3 = sp38;
var_t0 = sp40;
gSPDisplayList(gDisplayListHead++, D_8006F4C0);
gDPSetFillColor(gDisplayListHead++, 0x00010001);
var_t4 = sp38 + sp9E;
var_t1 = sp40 + sp9C;
if (sp38 < 0) {
var_t3 = 0;
}
if (sp40 < 0) {
var_t0 = 0;
}
if (var_t4 >= 0x281) {
var_t4 = 0x280;
}
if (var_t1 >= 0x1E1) {
var_t1 = 0x1E0;
}
if (var_t0 > 0) {
gDPFillRectangle(gDisplayListHead++, 0, 0, 639, var_t0 - 1);
}
if (var_t1 < 0x1E0) {
gDPFillRectangle(gDisplayListHead++, 0, var_t1, 639, 479);
}
if ((var_t3 > 0) && (var_t0 >= 0) && (var_t1 < 0x1E1)) {
gDPFillRectangle(gDisplayListHead++, 0, var_t0, var_t3 - 1, var_t1 - 1);
}
if ((var_t4 < 0x281) && (var_t0 >= 0) && (var_t1 < 0x1E1)) {
gDPFillRectangle(gDisplayListHead++, var_t4, var_t0, 639, var_t1 - 1);
}
}
void func_83100C78(s16 arg0) {
if (arg0 > 0) {
D_83102218.unk_00 = 1;
D_83102218.unk_02 = D_83102218.unk_04 = arg0;
D_83102218.unk_08 = 7.0f;
}
}
void func_83100CB8(void) {
D_83102224.unk_00 = 0;
D_83102224.unk_02 = 0;
D_83102224.unk_04 = 0xC0;
}
void func_83100CD4(void) {
switch (D_83102224.unk_00) {
case 1:
D_83102224.unk_02--;
D_83102224.unk_04 = ((D_83102224.unk_02 * -0x3F) / 10) + 0xFF;
if (D_83102224.unk_02 <= 0) {
D_83102224.unk_00 = 2;
D_83102224.unk_02 = 0;
D_83102224.unk_04 = 0xFF;
}
break;
case 2:
break;
}
}
void func_83100D4C(u8* arg0, s16 arg1) {
s32 i;
s32 j;
gDPPipeSync(gDisplayListHead++);
gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE);
gDPSetRenderMode(gDisplayListHead++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
gDPSetTexturePersp(gDisplayListHead++, G_TP_NONE);
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, 0, 640, 480);
gDPSetCombineLERP(gDisplayListHead++, 0, 0, 0, TEXEL0, TEXEL0, 0, ENVIRONMENT, 0, 0, 0, 0, TEXEL0, TEXEL0, 0,
ENVIRONMENT, 0);
gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, arg1);
gDPPipeSync(gDisplayListHead++);
for (i = 0; i < 0x1E0; i += 0x20) {
for (j = 0; j < 0x280; j += 0x20) {
gDPLoadTextureBlock(gDisplayListHead++, arg0, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 16, 0,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK,
G_TX_NOLOD, G_TX_NOLOD);
gSPTextureRectangle(gDisplayListHead++, j << 2, i << 2, (j + 0x20) << 2, (i + 0x20) << 2, G_TX_RENDERTILE,
0, 0, 0x0200, 0x0200);
arg0 += 0x200;
}
}
}
void func_8310102C(void) {
if (D_83102224.unk_04 < 0xFF) {
func_83100D4C(D_83101EE4, D_83102224.unk_04);
} else {
func_8001D924(D_83101EE4);
}
}
void func_83101074(s16 arg0) {
D_83102224.unk_00 = arg0;
if (D_83102224.unk_00 == 1) {
D_83102224.unk_02 = 0xA;
D_83102224.unk_04 = 0xC0;
}
}
void func_831010B0(void) {
Cont_StartReadInputs();
Cont_ReadInputs();
func_8001F730();
}
void func_831010E0(unk_D_83101F00* arg0, s16 arg1) {
unk_D_83101E6C* ptr;
arg0->unk_16A = arg1;
if (arg0->unk_16A == 1) {
switch (arg0->unk_168) {
case 1:
arg0->unk_184 = 0.0f;
arg0->unk_180 = 1.0f;
break;
case 2:
arg0->unk_170 = 0;
ptr = &D_83101E6C[arg0->unk_170];
arg0->unk_16C = arg0->unk_16E = ptr->unk_00;
arg0->unk_172 = ptr->unk_08;
arg0->unk_174 = ptr->unk_0A;
arg0->unk_176 = ptr->unk_0C;
arg0->unk_178 = ptr->unk_0E;
arg0->unk_17A = ptr->unk_10;
arg0->unk_17C = ptr->unk_12;
func_8000E88C(&arg0->unk_000.unk_030, ptr->unk_04, ptr->unk_04, ptr->unk_04);
break;
}
}
}
#ifdef NON_MATCHING
void func_831011D4(s16 arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4, s16 arg5, s16 arg6, s16 arg7) {
gSPTextureRectangle(gDisplayListHead++, CLAMP_MIN(0, (s16)(arg0 << 2)), CLAMP_MIN(0, (s16)(arg1 << 2)),
CLAMP_MIN(0, (s16)(((arg0 + arg2) - 1) << 2)), CLAMP_MIN(0, (s16)(((arg1 + arg3) - 1) << 2)),
G_TX_RENDERTILE,
arg4 - ((arg0 << 2) < 0 ? arg6 < 0 ? CLAMP_MIN(0, ((arg0 << 2) * arg6) >> 7)
: CLAMP_MAX(0, ((arg0 << 2) * arg6) >> 7)
: 0),
arg5 - ((arg1 << 0x2) < 0 ? arg7 < 0 ? CLAMP_MIN(0, ((arg1 << 2) * arg7) >> 7)
: CLAMP_MAX(0, ((arg1 << 2) * arg7) >> 7)
: 0),
arg6, arg7);
}
#else
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/40/fragment40/func_831011D4.s")
#endif
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/40/fragment40/func_831013FC.s")
void func_831013FC(void) {
f32 v = 1.8f;
s16 temp_fa0;
s16 temp_ft2;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/40/fragment40/func_83101608.s")
gSPDisplayList(gDisplayListHead++, D_8006F518);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/40/fragment40/func_83101674.s")
temp_ft2 = ROUND_MAX(28 * v);
temp_fa0 = ROUND_MAX(1024.0f / v);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/40/fragment40/func_831016D0.s")
gDPLoadTextureBlock(gDisplayListHead++, D_30025E0, G_IM_FMT_RGBA, G_IM_SIZ_16b, 28, 28, 0,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
G_TX_NOLOD);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/40/fragment40/func_83101818.s")
func_831011D4(D_83101EEE, D_83101EF0, temp_ft2, temp_ft2, 0, 0, temp_fa0, temp_fa0);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/40/fragment40/func_83101870.s")
gSPDisplayList(gDisplayListHead++, D_8006F630);
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/40/fragment40/func_83101A98.s")
void func_83101608(void) {
D_83101EE8 = 0;
if (D_800AE540.unk_11F2 != 0) {
D_83101EEC = 1;
} else {
D_83101EEC = 0;
}
D_83101EF0 = -0x64;
D_83101EEE = D_83101EF0;
func_831006D4();
func_83100CB8();
}
void func_83101674(void) {
func_800079C4();
func_8310102C();
func_80015094(D_83101EF4);
if (D_83101EEC != 0) {
func_831013FC();
}
func_83100784();
func_80007778();
}
s32 func_831016D0(void) {
s32 sp1C = 1;
switch (D_83101EE8) {
case 0:
if (func_80007604() == 0) {
D_83101EE8 = 1;
D_83101EEA = 0;
func_831010E0(D_83102210, 1);
}
break;
case 1:
if (D_83102210->unk_16A == 2) {
switch (D_83102214->unk_16A) {
case 0:
func_831010E0(D_83102214, 1);
break;
case 2:
D_83101EEA += 1;
if (D_83101EEA == 1) {
func_83101074(1);
}
if (D_83101EEA >= 0x1E) {
D_83101EE8 = 2;
D_83101EEA = 0;
func_83100C78(0xF);
func_80007990(1);
}
break;
}
}
break;
case 2:
if (D_83102218.unk_00 == 2) {
sp1C = 0;
}
break;
}
return sp1C;
}
void func_83101818(void) {
func_83101608();
func_80006C6C(0xF);
do {
func_831010B0();
func_831006F4();
func_83100CD4();
func_83101674();
} while (func_831016D0() != 0);
}
void func_83101870(void) {
unk_D_83101F00* ptr;
MemoryBlock* temp_v0 = func_80002D10(main_pool_get_available(), 0);
s32 i;
D_83101EF4 = process_geo_layout(temp_v0, D_83101E1C);
D_83101EF8 = process_geo_layout(temp_v0, D_83101D08);
D_83101EFC = process_geo_layout(temp_v0, D_83101DE8);
func_80002D60(temp_v0);
func_8001BB20();
for (i = 0; i < 2; i++) {
ptr = &D_83101F00[i];
func_8001BB58(&ptr->unk_000);
ptr->unk_172 = ptr->unk_174 = ptr->unk_176 = 0;
ptr->unk_178 = ptr->unk_17A = ptr->unk_17C = 0;
ptr->unk_168 = 0;
ptr->unk_16A = 0;
ptr->unk_16C = 0;
ptr->unk_16E = 0;
ptr->unk_170 = 0;
ptr->unk_180 = 0.0f;
ptr->unk_184 = 0.0f;
switch (i) {
case 0:
func_8000E88C(&ptr->unk_000.unk_024, -520.0f, 44.0f, -579.0f);
func_8000E88C(&ptr->unk_000.unk_030, 2.0f, 2.0f, 2.0f);
func_8001BC34(&ptr->unk_000, 0, 0, D_83101EF8);
ptr->unk_168 = 1;
D_83102210 = ptr;
break;
case 1:
func_8000E88C(&ptr->unk_000.unk_024, 0.0, -24.0f, -579.0f);
func_8000E88C(&ptr->unk_000.unk_030, 0.0f, 0.0f, 0.0f);
func_8001BC34(&ptr->unk_000, 0, 0, D_83101EFC);
ptr->unk_168 = 2;
D_83102214 = ptr;
break;
}
}
}
s32 func_83101A98(UNUSED s32 arg0, UNUSED s32 arg1) {
unk_func_80007444* sp24;
main_pool_push_state('CLRG');
func_80005E40(0x10000, 0);
sp24 = func_80007444(1, 0, 2, 0, 2, 1);
func_8001E94C(0x10, 0);
ASSET_LOAD(D_1000000, common_menu1_ui, 0);
ASSET_LOAD(D_3000000, gym_leader_castle_clear_gfx, 0);
D_83101EE0 = ASSET_LOAD2(backgrounds, 1, 1);
D_83101EE4 = func_8000484C(D_83101EE0, 0xE);
func_83101870();
func_80007678(sp24);
func_83101818();
func_800077B4(2);
func_800076C0();
func_8001E9CC();
func_80005EAC();
main_pool_pop_state('CLRG');
return 0;
}

View File

@ -0,0 +1,48 @@
#ifndef _FRAGMENT40_H_
#define _FRAGMENT40_H_
#include "global.h"
#include "src/geo_layout.h"
typedef struct unk_D_83101F00 {
/* 0x000 */ unk_D_86002F58_004_000 unk_000;
/* 0x168 */ s16 unk_168;
/* 0x16A */ s16 unk_16A;
/* 0x16C */ s16 unk_16C;
/* 0x16E */ s16 unk_16E;
/* 0x170 */ s16 unk_170;
/* 0x172 */ s16 unk_172;
/* 0x174 */ s16 unk_174;
/* 0x176 */ s16 unk_176;
/* 0x178 */ s16 unk_178;
/* 0x17A */ s16 unk_17A;
/* 0x17C */ s16 unk_17C;
/* 0x180 */ f32 unk_180;
/* 0x184 */ f32 unk_184;
} unk_D_83101F00; // size = 0x188
void func_83100020(unk_D_86002F58_004_000* arg0);
s32 func_83100180(s32 arg0, UNUSED GraphNode* arg1);
void func_8310024C(unk_D_83101F00* arg0);
s32 func_83100578(s32 arg0, GraphNode* arg1);
void func_831006D4(void);
void func_831006F4(void);
void func_83100784(void);
void func_83100C78(s16 arg0);
void func_83100CB8(void);
void func_83100CD4(void);
void func_83100D4C(u8* arg0, s16 arg1);
void func_8310102C(void);
void func_83101074(s16 arg0);
void func_831010B0(void);
void func_831010E0(unk_D_83101F00* arg0, s16 arg1);
void func_831011D4(s16 arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4, s16 arg5, s16 arg6, s16 arg7);
void func_831013FC(void);
void func_83101608(void);
void func_83101674(void);
s32 func_831016D0(void);
void func_83101818(void);
void func_83101870(void);
s32 func_83101A98(UNUSED s32 arg0, UNUSED s32 arg1);
#endif // _FRAGMENT40_H_

View File

@ -3,6 +3,13 @@
#include "global.h"
void func_83700020(void);
void func_83700090(void);
void func_83700098(void);
s32 func_83700114(void);
s32 func_83700174(void);
void func_8370023C(void);
void func_8370026C(void);
s32 func_837002EC(UNUSED s32 arg0, UNUSED s32 arg1);
#endif // _FRAGMENT46_H_

View File

@ -1607,10 +1607,10 @@
subsegments:
- [0x285DC0, textbin, fragments/40/fragment40_header]
- [0x285DE0, c, fragments/40/fragment40]
- [0x2879A0, data, fragments/40/fragment40_data]
- [0x287C80, rodata, fragments/40/fragment40_rodata]
- [0x2879A0, .data, fragments/40/fragment40]
- [0x287C80, .rodata, fragments/40/fragment40]
- {vram: 0x83101EE0, type: bss, name: fragments/40/fragment40_bss}
- {vram: 0x83101EE0, type: .bss, name: fragments/40/fragment40}
- name: fragment40_relocs
type: code