mirror of
https://github.com/pmret/papermario.git
synced 2024-11-08 12:02:30 +01:00
Shiftability work (#778)
* move data includes * splat yaml comments * 8a160 data + funcs * naming things * 801b0 funcs * data stuff * BSS temp removal + new splat accommodations * git subrepo pull --force tools/splat subrepo: subdir: "tools/splat" merged: "e1abb4ece0" upstream: origin: "https://github.com/ethteck/splat.git" branch: "master" commit: "e1abb4ece0" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo" commit: "2f68596" * splat accommodations * git subrepo pull --force tools/splat subrepo: subdir: "tools/splat" merged: "20bffc4ffc" upstream: origin: "https://github.com/ethteck/splat.git" branch: "master" commit: "20bffc4ffc" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo" commit: "2f68596" * set vram for seg * git subrepo pull (merge) --force tools/splat subrepo: subdir: "tools/splat" merged: "c95002b315" upstream: origin: "https://github.com/ethteck/splat.git" branch: "master" commit: "c95002b315" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo" commit: "2f68596" * more goods * git subrepo pull --force tools/splat subrepo: subdir: "tools/splat" merged: "470c358834" upstream: origin: "https://github.com/ethteck/splat.git" branch: "master" commit: "470c358834" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo" commit: "2f68596" * git subrepo pull --force tools/splat subrepo: subdir: "tools/splat" merged: "df424333da" upstream: origin: "https://github.com/ethteck/splat.git" branch: "master" commit: "df424333da" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo" commit: "2f68596" * git subrepo pull (merge) --force tools/splat subrepo: subdir: "tools/splat" merged: "18eb9cb2e6" upstream: origin: "https://github.com/ethteck/splat.git" branch: "master" commit: "18eb9cb2e6" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo" commit: "2f68596" * git subrepo pull --force tools/splat subrepo: subdir: "tools/splat" merged: "285a549bc6" upstream: origin: "https://github.com/ethteck/splat.git" branch: "master" commit: "285a549bc6" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo" commit: "2f68596" * git subrepo pull --force tools/splat subrepo: subdir: "tools/splat" merged: "c523ce1a3a" upstream: origin: "https://github.com/ethteck/splat.git" branch: "master" commit: "c523ce1a3a" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo" commit: "2f68596" * hawaii push * shiftability work * DEG_TO_RAD * git subrepo pull tools/splat subrepo: subdir: "tools/splat" merged: "6c02ec5ecd" upstream: origin: "https://github.com/ethteck/splat.git" branch: "master" commit: "6c02ec5ecd" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo.git" commit: "2f68596"
This commit is contained in:
parent
1ad0f7b149
commit
2b40121739
@ -6,20 +6,24 @@
|
||||
#define SPRITE_ROM_START 0x1943000 + 0x10
|
||||
|
||||
extern s32 spr_allocateBtlComponentsOnWorldHeap;
|
||||
extern s32 D_802DFEB0[];
|
||||
extern s32 D_802DFEB8[];
|
||||
extern s32 PlayerRasterSetsLoaded;
|
||||
extern s32 PlayerRasterBufferSetOffsets[13];
|
||||
extern s32 D_802E0090[];
|
||||
extern s32 PlayerRasterHeader;
|
||||
extern s32 D_802E0C14[];
|
||||
extern s32 D_802E0C20[];
|
||||
extern s32 PlayerRasterCacheSize;
|
||||
extern s32 PlayerRasterMaxSize;
|
||||
extern s32 SpriteDataHeader[];
|
||||
extern s32 D_802E0C64;
|
||||
extern s32 D_802E0C68;
|
||||
extern PlayerSpriteCacheEntry PlayerRasterCache[18];
|
||||
|
||||
BSS s32 D_802DFEB0[2];
|
||||
BSS s32 D_802DFEB8[101];
|
||||
BSS s32 PlayerRasterSetsLoaded;
|
||||
BSS s32 PlayerRasterBufferSetOffsets[13];
|
||||
BSS s32 D_802D0084[3]; // unused?
|
||||
BSS s32 D_802E0090[0x2E0]; // correct length?
|
||||
|
||||
BSS s32 PlayerRasterHeader;
|
||||
BSS s32 D_802E0C14[3];
|
||||
BSS s32 D_802E0C20[14];
|
||||
BSS s32 PlayerRasterCacheSize;
|
||||
BSS s32 PlayerRasterMaxSize;
|
||||
BSS s32 SpriteDataHeader[1]; // ?
|
||||
BSS s32 D_802E0C64;
|
||||
BSS s32 D_802E0C68;
|
||||
BSS s32 D_802E0C6C; // unused?
|
||||
BSS PlayerSpriteCacheEntry PlayerRasterCache[18];
|
||||
|
||||
INCLUDE_ASM(s32, "101b90_len_8f0", spr_swizzle_anim_offsets);
|
||||
|
||||
|
@ -8,15 +8,25 @@ void func_800F0864(void);
|
||||
void func_800F09EC(void);
|
||||
void func_800F0B3C(void);
|
||||
|
||||
extern s32 D_80109480;
|
||||
s32 D_80109480 = 0;
|
||||
f32 D_80109484 = 0.0f;
|
||||
s16 D_80109488[] = {4, 0};
|
||||
f32 D_8010948C = 0.0f;
|
||||
s16 D_80109490 = 4;
|
||||
s16 D_80109492 = 5;
|
||||
s32 D_80109494 = 0;
|
||||
f32 D_80109498 = 0.0f;
|
||||
s16 D_8010949C = 4;
|
||||
s16 D_8010949E = 0;
|
||||
f32 D_801094A0 = 0.0f;
|
||||
s16 D_801094A4 = 4;
|
||||
s16 D_801094A6 = 0;
|
||||
s32 D_801094A8 = 0;
|
||||
s16 D_801094AC = 4;
|
||||
s16 D_801094AE = 4;
|
||||
|
||||
extern s32 D_8010CFF0;
|
||||
extern s32 D_8010CFF4;
|
||||
extern f32 D_8010948C;
|
||||
extern s16 D_80109490;
|
||||
extern s16 D_80109492;
|
||||
extern s32 D_80109494;
|
||||
extern s16 D_801094A4;
|
||||
extern s32 D_801094A8;
|
||||
|
||||
void func_800EFD00(void) {
|
||||
}
|
||||
@ -65,18 +75,16 @@ void func_800EFD08(void) {
|
||||
|
||||
INCLUDE_ASM(s32, "891b0_len_fb0", func_800EFE2C);
|
||||
|
||||
#ifdef NON_EQUIVALENT // requires data migration + float weirdness in the last if
|
||||
void func_800F0248(void) {
|
||||
PlayerStatus* playerStatus = &gPlayerStatus;
|
||||
f32 sin, cos, x, y, z;
|
||||
f32 t1;
|
||||
|
||||
if (playerStatus->actionState == ACTION_STATE_JUMP && playerStatus->timeInAir == 1 && D_80109492 == 5) {
|
||||
fx_flower_splash(
|
||||
playerStatus->position.x,
|
||||
playerStatus->position.y + 14.0f,
|
||||
playerStatus->position.z,
|
||||
D_8010948C
|
||||
);
|
||||
z = playerStatus->position.z; // TODO weird use of temps required to match
|
||||
x = playerStatus->position.y + 14.0f;
|
||||
y = D_8010948C;
|
||||
fx_flower_splash(playerStatus->position.x, x, z, y);
|
||||
D_8010948C = clamp_angle(D_8010948C + 35.0f);
|
||||
D_80109492 = 0;
|
||||
return;
|
||||
@ -96,41 +104,32 @@ void func_800F0248(void) {
|
||||
}
|
||||
|
||||
if (D_80109490++ > 0) {
|
||||
f32 colliderDiameter;
|
||||
D_80109490 = 0;
|
||||
sin_cos_rad(DEG_TO_RAD(clamp_angle(-playerStatus->currentYaw)), &sin, &cos);
|
||||
|
||||
x = (playerStatus->colliderDiameter * sin * -0.4f) + playerStatus->position.x;
|
||||
z = (playerStatus->colliderDiameter * cos * -0.4f) + playerStatus->position.z;
|
||||
colliderDiameter = playerStatus->colliderDiameter;
|
||||
|
||||
x = playerStatus->position.x + (colliderDiameter * sin * -0.4f);
|
||||
z = playerStatus->position.z + (colliderDiameter * cos * -0.4f);
|
||||
y = playerStatus->position.y + 15.5f;
|
||||
|
||||
fx_flower_trail(
|
||||
0,
|
||||
x,
|
||||
y,
|
||||
z,
|
||||
-playerStatus->currentYaw + rand_int(10) - 5.0f,
|
||||
D_80109494
|
||||
);
|
||||
fx_flower_trail(0, x, y, z, -playerStatus->currentYaw + rand_int(10) - 5.0f, D_80109494);
|
||||
D_80109494 = !D_80109494;
|
||||
}
|
||||
}
|
||||
#else
|
||||
INCLUDE_ASM(s32, "891b0_len_fb0", func_800F0248);
|
||||
#endif
|
||||
|
||||
INCLUDE_ASM(s32, "891b0_len_fb0", func_800F0490);
|
||||
|
||||
#ifdef NON_MATCHING // requires data migration
|
||||
void func_800F0864(void) {
|
||||
f32 sin, cos;
|
||||
PlayerStatus* playerStatus = &gPlayerStatus;
|
||||
f32 sin, cos;
|
||||
|
||||
if (
|
||||
(
|
||||
playerStatus->actionState != ACTION_STATE_WALK && playerStatus->actionState != ACTION_STATE_RUN &&
|
||||
!(playerStatus->actionState == ACTION_STATE_SPIN && playerStatus->actionSubstate == 0) &&
|
||||
playerStatus->actionState != ACTION_STATE_LAND && playerStatus->actionState != ACTION_STATE_IDLE
|
||||
) || playerStatus->flags >= 0
|
||||
if (playerStatus->actionState != ACTION_STATE_WALK &&
|
||||
playerStatus->actionState != ACTION_STATE_RUN &&
|
||||
(playerStatus->actionState != ACTION_STATE_SPIN || playerStatus->actionSubstate != 0) &&
|
||||
((playerStatus->actionState != ACTION_STATE_LAND && playerStatus->actionState != ACTION_STATE_IDLE) ||
|
||||
playerStatus->flags >= 0)
|
||||
) {
|
||||
D_801094A4 = 4;
|
||||
return;
|
||||
@ -149,13 +148,59 @@ void func_800F0864(void) {
|
||||
D_801094A8 = !D_801094A8;
|
||||
}
|
||||
}
|
||||
#else
|
||||
INCLUDE_ASM(s32, "891b0_len_fb0", func_800F0864);
|
||||
#endif
|
||||
|
||||
INCLUDE_ASM(s32, "891b0_len_fb0", func_800F09EC);
|
||||
void func_800F09EC(void) {
|
||||
PlayerStatus* playerStatus = &gPlayerStatus;
|
||||
f32 sin, cos;
|
||||
|
||||
INCLUDE_ASM(s32, "891b0_len_fb0", func_800F0B3C);
|
||||
if (playerStatus->actionState != ACTION_STATE_WALK &&
|
||||
playerStatus->actionState != ACTION_STATE_RUN &&
|
||||
(playerStatus->actionState != ACTION_STATE_SPIN || playerStatus->actionSubstate != 0) &&
|
||||
((playerStatus->actionState != ACTION_STATE_LAND && playerStatus->actionState != ACTION_STATE_IDLE) ||
|
||||
playerStatus->flags >= 0)
|
||||
) {
|
||||
D_801094AC = 4;
|
||||
return;
|
||||
}
|
||||
|
||||
if (D_801094AC++ >= 4) {
|
||||
D_801094AC = 0;
|
||||
sin_cos_rad(DEG_TO_RAD(clamp_angle(-playerStatus->currentYaw)), &sin, &cos);
|
||||
fx_falling_leaves(
|
||||
0,
|
||||
playerStatus->position.x + (playerStatus->colliderDiameter * sin * 0.2f),
|
||||
40.0f,
|
||||
playerStatus->position.z + (playerStatus->colliderDiameter * cos * 0.2f)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void func_800F0B3C(void) {
|
||||
PlayerStatus* playerStatus = &gPlayerStatus;
|
||||
f32 sin, cos;
|
||||
|
||||
if (playerStatus->actionState != ACTION_STATE_WALK &&
|
||||
playerStatus->actionState != ACTION_STATE_RUN &&
|
||||
(playerStatus->actionState != ACTION_STATE_SPIN || playerStatus->actionSubstate != 0) &&
|
||||
((playerStatus->actionState != ACTION_STATE_LAND && playerStatus->actionState != ACTION_STATE_IDLE) ||
|
||||
playerStatus->flags >= 0)
|
||||
) {
|
||||
D_801094AE = 4;
|
||||
return;
|
||||
}
|
||||
|
||||
if (D_801094AE++ >= 4) {
|
||||
D_801094AE = 0;
|
||||
sin_cos_rad(DEG_TO_RAD(clamp_angle(-playerStatus->currentYaw)), &sin, &cos);
|
||||
fx_rising_bubble(
|
||||
0,
|
||||
playerStatus->position.x + (playerStatus->colliderDiameter * sin * 0.2f),
|
||||
playerStatus->position.y + 0.0f,
|
||||
playerStatus->position.z + (playerStatus->colliderDiameter * cos * 0.2f),
|
||||
0.0f
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void func_800F0C9C(void) {
|
||||
}
|
||||
|
@ -1,55 +1,182 @@
|
||||
#include "common.h"
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u8 unk0;
|
||||
/* 0x01 */ u8 unk1;
|
||||
/* 0x02 */ u8 unk2;
|
||||
/* 0x03 */ char unk3[4];
|
||||
/* 0x07 */ s8 unk7;
|
||||
/* 0x08 */ f32 unk8;
|
||||
/* 0x0C */ f32 unkC;
|
||||
/* 0x10 */ char unk10[8];
|
||||
/* 0x18 */ f32 unk18;
|
||||
} sub_struct_func_800F0CB0;
|
||||
#include "A2960.png.inc.c"
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ sub_struct_func_800F0CB0 unk00[0x39];
|
||||
} struct_func_800F0CB0;
|
||||
Vp D_801096B0 = {
|
||||
.vp = {
|
||||
.vscale = { 640, 480, 511, 0 },
|
||||
.vtrans = { 640, 480, 511, 0 }
|
||||
}
|
||||
};
|
||||
|
||||
extern struct_func_800F0CB0 D_8010D000[];
|
||||
#include "A2B70.vtx.inc.c"
|
||||
|
||||
void func_800F0CB0(s32 arg0, f32 arg1, f32 arg2, f32 arg3) {
|
||||
struct_func_800F0CB0* temp_a1 = &D_8010D000[arg0];
|
||||
sub_struct_func_800F0CB0* phi_a1 = &temp_a1->unk00[0];
|
||||
s32 temp_v1 = 0x39;
|
||||
s32 phi_v1;
|
||||
#include "A2BC0.gfx.inc.c"
|
||||
#include "A2C88.gfx.inc.c"
|
||||
|
||||
u8 D_80109800[32] = {
|
||||
40, 90, 81, 72, 65, 59, 53, 47, 43, 38, 34, 31, 28, 25, 22, 20, 18, 16, 15, 13, 12, 10, 9, 8, 7, 7, 6, 5, 5, 4, 0, 0
|
||||
};
|
||||
|
||||
Vec2b D_80109820[56] = {
|
||||
{ 247, 105 }, { 239, 87 }, { 17, 87 }, { 9, 105 }, { 0, 122 }, { 230, 69 }, { 26, 69 }, { 221, 52 }, { 35, 52 },
|
||||
{ 202, 49 }, { 186, 255 }, { 200, 241 }, { 0, 200 }, { 56, 241 }, { 70, 255 }, { 54, 49 }, { 196, 222 },
|
||||
{ 239, 191 }, { 17, 191 }, { 60, 222 }, { 85, 13 }, { 74, 46 }, { 99, 27 }, { 93, 43 }, { 12, 33 }, { 12, 22 },
|
||||
{ 24, 22 }, { 24, 33 }, { 12, 10 }, { 24, 10 }, { 24, 45 }, { 232, 33 }, { 232, 22 }, { 232, 45 }, { 113, 40 },
|
||||
{ 193, 203 }, { 190, 183 }, { 182, 46 }, { 163, 43 }, { 35, 182 }, { 52, 173 }, { 12, 45 }, { 244, 22 },
|
||||
{ 244, 33 }, { 232, 10 }, { 244, 10 }, { 244, 45 }, { 204, 173 }, { 221, 182 }, { 186, 164 }, { 171, 13 },
|
||||
{ 157, 27 }, { 143, 40 }, { 63, 203 }, { 66, 183 }, { 70, 164 }
|
||||
};
|
||||
|
||||
typedef struct Unk8a160 {
|
||||
/* 0x00 */ u8 alive;
|
||||
/* 0x01 */ s8 timeLeft;
|
||||
/* 0x02 */ u8 lifetime;
|
||||
/* 0x03 */ Color_RGBA8 rgba;
|
||||
/* 0x07 */ s8 lodVal;
|
||||
/* 0x08 */ f32 x;
|
||||
/* 0x0C */ f32 y;
|
||||
/* 0x10 */ Vec2f vel;
|
||||
/* 0x18 */ f32 scale;
|
||||
} Unk8a160; // size = 0x1C
|
||||
|
||||
typedef struct Unk8a160Outer {
|
||||
/* 0x00 */ Unk8a160 subs[57]; // one base + 56 others?
|
||||
} Unk8a160Outer;
|
||||
|
||||
extern Unk8a160Outer D_8010D000[1];
|
||||
|
||||
void func_800F0CB0(s32 arg0, f32 x, f32 y, f32 scale) {
|
||||
Unk8a160Outer* outer = &D_8010D000[arg0];
|
||||
Unk8a160* sub = &outer->subs[0];
|
||||
s32 numSubstructs = ARRAY_COUNT(outer->subs);
|
||||
s32 i;
|
||||
|
||||
if (arg0 <= 0) {
|
||||
phi_a1->unk0 = 1;
|
||||
phi_a1->unk8 = arg1;
|
||||
phi_a1->unkC = arg2;
|
||||
phi_a1->unk18 = arg3;
|
||||
phi_a1->unk1 = 0x28;
|
||||
phi_a1->unk2 = 0;
|
||||
phi_a1 = &temp_a1->unk00[1];
|
||||
phi_v1 = 1;
|
||||
while (phi_v1 < temp_v1) {
|
||||
phi_a1->unk7 = (s32) (-(f32) phi_v1 * 0.0f) - 1;
|
||||
phi_v1++;
|
||||
phi_a1++;
|
||||
sub->alive = TRUE;
|
||||
sub->x = x;
|
||||
sub->y = y;
|
||||
sub->scale = scale;
|
||||
sub->timeLeft = 40;
|
||||
sub->lifetime = 0;
|
||||
sub = &outer->subs[1];
|
||||
|
||||
for (i = 1; i < numSubstructs; i++, sub++) {
|
||||
sub->lodVal = (s32) (-((f32) i) * 0.0f) - 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void func_800F0D5C(void) {
|
||||
struct_func_800F0CB0* temp = &D_8010D000[0];
|
||||
s32 i = 0;
|
||||
Unk8a160Outer* outer = &D_8010D000[0];
|
||||
s32 i;
|
||||
|
||||
for (i; i < 1; i++) {
|
||||
temp[i].unk00[0].unk0 = 0;
|
||||
for (i = 0; i < 1; i++) {
|
||||
outer[i].subs[0].alive = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
INCLUDE_ASM(s32, "8a160_len_700", func_800F0D80);
|
||||
void func_800F0D80(void) {
|
||||
Unk8a160Outer* outer;
|
||||
s32 i;
|
||||
s32 j;
|
||||
|
||||
INCLUDE_ASM(s32, "8a160_len_700", func_800F102C);
|
||||
for (i = 0; i < ARRAY_COUNT(D_8010D000); i++, outer++) {
|
||||
outer = &D_8010D000[i];
|
||||
|
||||
if (outer->subs[0].alive) {
|
||||
outer->subs[0].timeLeft--;
|
||||
outer->subs[0].lifetime++;
|
||||
|
||||
if (outer->subs[0].timeLeft < 0) {
|
||||
outer->subs[0].alive = FALSE;
|
||||
} else {
|
||||
Unk8a160* sub = &outer->subs[0];
|
||||
s32 baseTimeLeft = sub->timeLeft;
|
||||
f32 baseX = sub->x;
|
||||
f32 baseY = sub->y;
|
||||
|
||||
sub++;
|
||||
for (j = 1; j < ARRAY_COUNT(outer->subs); j++, sub++) {
|
||||
sub->lodVal++;
|
||||
if (sub->lodVal >= 30) {
|
||||
if (baseTimeLeft < 30) {
|
||||
sub->lodVal = -31;
|
||||
} else {
|
||||
sub->lodVal = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (sub->lodVal >= 0) {
|
||||
if (sub->lodVal == 0) {
|
||||
f32 tx = D_80109820[j - 1].x;
|
||||
f32 ty = D_80109820[j - 1].y;
|
||||
u8 t = 127;
|
||||
|
||||
sub->vel.x = tx * 0.1;
|
||||
sub->vel.y = -ty * 0.1;
|
||||
sub->x = baseX;
|
||||
sub->y = baseY;
|
||||
sub->scale = 1.0f;
|
||||
sub->rgba.r = rand_int(t);
|
||||
sub->rgba.g = rand_int(t - sub->rgba.r);
|
||||
sub->rgba.b = rand_int(t - sub->rgba.g - sub->rgba.r);
|
||||
sub->rgba.a = 255;
|
||||
sub->rgba.r += 128;
|
||||
sub->rgba.g += 128;
|
||||
sub->rgba.b += 128;
|
||||
}
|
||||
sub->x += sub->vel.x;
|
||||
sub->y += sub->vel.y;
|
||||
sub->vel.x *= 0.92;
|
||||
sub->vel.y *= 0.92;
|
||||
sub->scale = (f32) D_80109800[sub->lodVal] * 0.04;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void func_800F102C(void) {
|
||||
Matrix4f sp20, sp60;
|
||||
Unk8a160Outer* outer;
|
||||
s32 i;
|
||||
s32 j;
|
||||
|
||||
gDPPipeSync(gMasterGfxPos++);
|
||||
gSPSegment(gMasterGfxPos++, 0x00, 0x00000000);
|
||||
gDPSetScissor(gMasterGfxPos++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
|
||||
gSPViewport(gMasterGfxPos++, &D_801096B0);
|
||||
|
||||
guOrthoF(sp20, 0.0f, SCREEN_WIDTH, SCREEN_HEIGHT, 0.0f, -100.0f, 100.0f, 1.0f);
|
||||
guMtxF2L(sp20, &gDisplayContext->matrixStack[gMatrixListPos]);
|
||||
|
||||
gSPMatrix(gMasterGfxPos++, &gDisplayContext->matrixStack[gMatrixListPos++], G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
|
||||
gSPDisplayList(gMasterGfxPos++, D_80109710);
|
||||
gDPSetEnvColor(gMasterGfxPos++, 127, 127, 127, 127);
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(D_8010D000); i++, outer++) {
|
||||
outer = &D_8010D000[i];
|
||||
|
||||
if (outer->subs[0].alive) {
|
||||
Unk8a160* it = &outer->subs[0];
|
||||
f32 baseScale = it->scale;
|
||||
|
||||
it++;
|
||||
for (j = 1; j < ARRAY_COUNT(outer->subs); j++, it++) {
|
||||
if (it->lodVal >= 0) {
|
||||
guPositionF(sp60, 0.0f, 0.0f, gGameStatusPtr->frameCounter * 10, it->scale * baseScale,
|
||||
it->x, it->y, 0.0f);
|
||||
guMtxF2L(sp60, &gDisplayContext->matrixStack[gMatrixListPos]);
|
||||
|
||||
gSPMatrix(gMasterGfxPos++, &gDisplayContext->matrixStack[gMatrixListPos++],
|
||||
G_MTX_PUSH | G_MTX_MUL | G_MTX_MODELVIEW);
|
||||
gDPSetPrimColor(gMasterGfxPos++, 0, 80 - it->lodVal, it->rgba.r, it->rgba.g, it->rgba.b, it->rgba.a);
|
||||
gSPDisplayList(gMasterGfxPos++, D_801097D8);
|
||||
gSPPopMatrix(gMasterGfxPos++, G_MTX_MODELVIEW);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -15,7 +15,6 @@ extern s32 D_80294340;
|
||||
|
||||
s32 D_802A9852_4292C0[] = { 0, 25, 50, 75, 75, 0, 0, 0 };
|
||||
|
||||
BSS s32 air_lift_bss_pre[2];
|
||||
BSS s32 air_lift_bss_0;
|
||||
|
||||
ApiStatus func_802A9000_428A70(Evt* script, s32 isInitialCall) {
|
||||
|
@ -5,7 +5,6 @@
|
||||
|
||||
#define NAMESPACE b_area_isk_part_1_isk_04
|
||||
|
||||
BSS char N(pad)[8]; // BSS has bad alignment. Should be 0x10 aligned.
|
||||
BSS EffectInstance* N(D_80224D60);
|
||||
BSS EffectInstance* N(D_80224D64);
|
||||
|
||||
|
@ -4,7 +4,6 @@
|
||||
|
||||
#define NAMESPACE b_area_isk_part_1_isk_05
|
||||
|
||||
BSS char N(pad)[8]; // BSS has bad alignment. Should be 0x10 aligned.
|
||||
BSS EffectInstance* N(D_80224D70);
|
||||
BSS EffectInstance* N(D_80224D74);
|
||||
|
||||
|
@ -4,7 +4,6 @@
|
||||
|
||||
#define NAMESPACE b_area_isk_part_1_isk_06
|
||||
|
||||
BSS char N(pad)[8]; // BSS has bad alignment. Should be 0x10 aligned.
|
||||
BSS EffectInstance* N(D_80224D80);
|
||||
|
||||
ApiStatus func_80218A50_4E3190(Evt* script, s32 isInitialCall) {
|
||||
|
@ -5,7 +5,6 @@
|
||||
|
||||
#define NAMESPACE b_area_isk_part_1_isk_06b
|
||||
|
||||
BSS char N(pad)[8]; // BSS has bad alignment. Should be 0x10 aligned.
|
||||
BSS EffectInstance* N(D_80224DA0);
|
||||
|
||||
ApiStatus func_80218B30_4E3270(Evt* script, s32 isInitialCall) {
|
||||
|
@ -4,7 +4,6 @@
|
||||
|
||||
#define NAMESPACE b_area_isk_part_1_isk_07
|
||||
|
||||
BSS char N(pad)[8]; // BSS has bad alignment. Should be 0x10 aligned.
|
||||
BSS EffectInstance* N(D_80224D90);
|
||||
|
||||
ApiStatus func_80218AC0_4E3200(Evt* script, s32 isInitialCall) {
|
||||
|
@ -4,7 +4,6 @@
|
||||
|
||||
#define NAMESPACE b_area_isk_part_1_isk_08
|
||||
|
||||
BSS char N(pad)[8]; // BSS has bad alignment. Should be 0x10 aligned.
|
||||
BSS EffectInstance* N(D_80224DB0);
|
||||
|
||||
ApiStatus func_80218BA0_4E32E0(Evt* script, s32 isInitialCall) {
|
||||
|
@ -112,7 +112,6 @@ extern EvtScript N(handleEvent_8021D600);
|
||||
extern EvtScript N(nextTurn_8022A038);
|
||||
extern EvtScript N(copyPartner);
|
||||
|
||||
BSS char N(pad)[8]; // BSS Alignment Hack
|
||||
BSS s32 D_80232C20[12];
|
||||
BSS s32 D_80232C50;
|
||||
|
||||
|
@ -148,8 +148,6 @@ s32 N(idleAnimations_8022B6DC)[] = {
|
||||
|
||||
#include "common/StartRumbleWithParams.inc.c"
|
||||
|
||||
// TODO: This pad is here due to rodata having subalign 4, while bss is 0x10 aligned as normal.
|
||||
BSS static char pad;
|
||||
#include "common/UnkWhirlwindEffectFunc.inc.c"
|
||||
|
||||
#include "common/UnkEnemyFunc.inc.c"
|
||||
|
@ -25,8 +25,6 @@ extern EvtScript N(8021F630);
|
||||
extern EvtScript N(80222C44);
|
||||
extern EvtScript N(80223870);
|
||||
|
||||
// TODO: This pad is here due to rodata having subalign 4, while bss is 0x10 aligned as normal.
|
||||
BSS static char pad;
|
||||
BSS s32 D_80235FC0[31];
|
||||
|
||||
#include "common/StartRumbleWithParams.inc.c"
|
||||
|
@ -148,8 +148,6 @@ s32 N(idleAnimations_8022579C)[] = {
|
||||
|
||||
#include "common/StartRumbleWithParams.inc.c"
|
||||
|
||||
// TODO: This pad is here due to rodata having subalign 4, while bss is 0x10 aligned as normal.
|
||||
BSS static char pad;
|
||||
#include "common/UnkWhirlwindEffectFunc.inc.c"
|
||||
|
||||
#include "common/UnkEnemyFunc.inc.c"
|
||||
|
@ -148,8 +148,6 @@ s32 N(idleAnimations_8022873C)[] = {
|
||||
|
||||
#include "common/StartRumbleWithParams.inc.c"
|
||||
|
||||
// TODO: This pad is here due to rodata having subalign 4, while bss is 0x10 aligned as normal.
|
||||
BSS static char pad;
|
||||
#include "common/UnkWhirlwindEffectFunc.inc.c"
|
||||
|
||||
#include "common/UnkEnemyFunc.inc.c"
|
||||
|
@ -148,8 +148,6 @@ s32 N(idleAnimations_8022E67C)[] = {
|
||||
|
||||
#include "common/StartRumbleWithParams.inc.c"
|
||||
|
||||
// TODO: This pad is here due to rodata having subalign 4, while bss is 0x10 aligned as normal.
|
||||
BSS static char pad;
|
||||
#include "common/UnkWhirlwindEffectFunc.inc.c"
|
||||
|
||||
#include "common/UnkEnemyFunc.inc.c"
|
||||
|
@ -4,8 +4,6 @@
|
||||
#include "battle/item/mystery.png.h"
|
||||
#include "pause/pause_common.h"
|
||||
|
||||
BSS s32 D_802A25B8[2];
|
||||
|
||||
#include "ItemRefund.inc.c"
|
||||
|
||||
extern s32 D_802A25C8[7];
|
||||
|
@ -6,8 +6,6 @@
|
||||
#include "battle/item/strange_cake2.png.h"
|
||||
#include "battle/item/strange_cake3.png.h"
|
||||
|
||||
BSS s32 D_802A2DC8[2];
|
||||
|
||||
#include "ItemRefund.inc.c"
|
||||
|
||||
extern HudScript* N(D_802A2848_732B48)[];
|
||||
|
@ -5,9 +5,6 @@
|
||||
#include "common/UnkAngleFunc1.inc.c"
|
||||
|
||||
#include "speech_bubble.png.h"
|
||||
#include "speech_bubble.png.inc.c"
|
||||
#include "speech_bubble.pal.inc.c"
|
||||
#include "speech_bubble_dlist.gfx.inc.c"
|
||||
|
||||
typedef struct UnkE20EB0 {
|
||||
/* 0x00 */ Npc* unk_00;
|
||||
@ -24,6 +21,10 @@ typedef struct UnkE20EB0 {
|
||||
|
||||
BSS UnkE20EB0 D_802B79C0_E21870;
|
||||
|
||||
#include "speech_bubble.png.inc.c"
|
||||
#include "speech_bubble.pal.inc.c"
|
||||
#include "speech_bubble_dlist.gfx.inc.c"
|
||||
|
||||
UnkE20EB0* D_802B79A8_E21858 = &D_802B79C0_E21870;
|
||||
|
||||
void func_802B742C(void);
|
||||
|
@ -178,6 +178,7 @@ void lil_oink_appendGfx(void* effect) {
|
||||
shim_guPositionF(sp20, 0.0f, 180.0f - data->rot[i], 0.0f, 1.0f,
|
||||
data->x[i], data->y[i] + data->jumpOffset[i], data->z[i]);
|
||||
shim_guMtxF2L(sp20, &gDisplayContext->matrixStack[gMatrixListPos]);
|
||||
|
||||
gSPMatrix(gMasterGfxPos++, &gDisplayContext->matrixStack[gMatrixListPos++],
|
||||
G_MTX_PUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(gMasterGfxPos++, D_E0114718[data->type[i]]);
|
||||
|
@ -38,6 +38,7 @@ D_E00D8818_Entry D_E00D8818[] = {
|
||||
{ .unk_00 = 0x0000, .unk_02 = 0x00, .unk_03 = 0xAA },
|
||||
{ .unk_00 = 0x0000, .unk_02 = 0x00, .unk_03 = 0x78 },
|
||||
{ .unk_00 = 0x0000, .unk_02 = 0x00, .unk_03 = 0x3C },
|
||||
{ .unk_00 = 0x0000, .unk_02 = 0x00, .unk_03 = 0x00 },
|
||||
};
|
||||
|
||||
EffectInstance* tattle_window_main(s32 arg0, f32 x, f32 y, f32 z, f32 arg4, s32 arg5) {
|
||||
|
@ -193,7 +193,7 @@ void hud_element_load_script(HudElement* hudElement, HudScript* anim) {
|
||||
capacity = gHudElementCacheCapacity / 2;
|
||||
}
|
||||
ASSERT(capacity > *gHudElementCacheSize + gHudElementSizes[preset].size);
|
||||
nuPiReadRom((s32)icon_present_VRAM + raster, entry->data, gHudElementSizes[preset].size);
|
||||
nuPiReadRom((s32)icon_present_ROM_START + raster, entry->data, gHudElementSizes[preset].size);
|
||||
*gHudElementCacheSize += gHudElementSizes[preset].size;
|
||||
if (!gGameStatusPtr->isBattle) {
|
||||
*pos = i;
|
||||
@ -229,7 +229,7 @@ void hud_element_load_script(HudElement* hudElement, HudScript* anim) {
|
||||
capacity = gHudElementCacheCapacity / 2;
|
||||
}
|
||||
ASSERT(capacity > *gHudElementCacheSize + 32);
|
||||
nuPiReadRom((s32)icon_present_VRAM + palette, entry->data, 32);
|
||||
nuPiReadRom((s32)icon_present_ROM_START + palette, entry->data, 32);
|
||||
*gHudElementCacheSize += 32;
|
||||
if (!gGameStatusPtr->isBattle) {
|
||||
*pos = i;
|
||||
|
@ -1,7 +1,11 @@
|
||||
#include "common.h"
|
||||
#include "nu/nusys.h"
|
||||
|
||||
#ifdef VERSION_US
|
||||
s16 D_80074010 = 8; // might be an array, could be size 1-8
|
||||
#else
|
||||
extern s16 D_80074010;
|
||||
#endif
|
||||
|
||||
void gfxRetrace_Callback(s32);
|
||||
void gfxPreNMI_Callback(void);
|
||||
|
@ -251,12 +251,12 @@ void gfx_draw_frame(void) {
|
||||
void load_engine_data(void) {
|
||||
s32 i;
|
||||
|
||||
dma_copy(FEE30_ROM_START, FEE30_ROM_END, FEE30_VRAM);
|
||||
dma_copy(_759B0_ROM_START, _759B0_ROM_END, _759B0_VRAM);
|
||||
dma_copy(engine4_ROM_START, engine4_ROM_END, engine4_VRAM);
|
||||
dma_copy(engine1_ROM_START, engine1_ROM_END, engine1_VRAM);
|
||||
dma_copy(evt_ROM_START, evt_ROM_END, evt_VRAM);
|
||||
dma_copy(_102610_ROM_START, _102610_ROM_END, _102610_VRAM);
|
||||
dma_copy(A5DD0_ROM_START, A5DD0_ROM_END, A5DD0_VRAM);
|
||||
dma_copy(_10CC10_ROM_START, _10CC10_ROM_END, _10CC10_VRAM);
|
||||
dma_copy(entity_ROM_START, entity_ROM_END, entity_VRAM);
|
||||
dma_copy(engine2_ROM_START, engine2_ROM_END, engine2_VRAM);
|
||||
dma_copy(font_width_ROM_START, font_width_ROM_END, font_width_VRAM);
|
||||
|
||||
gOverrideFlags = 0;
|
||||
gGameStatusPtr->unk_79 = 0;
|
||||
|
@ -7,7 +7,7 @@
|
||||
extern u64 nuScStack[NU_SC_STACK_SIZE / sizeof(u64)];
|
||||
|
||||
// probably should be at 0x8009A630, unless D_8009A630 (what's technically used in boot_idle) isn't nuIdleFunc
|
||||
BSS void (*nuIdleFunc)(void);
|
||||
extern void (*nuIdleFunc)(void);
|
||||
|
||||
void nuBoot(void) {
|
||||
osInitialize();
|
||||
|
68
src/sprite.c
68
src/sprite.c
@ -1,20 +1,26 @@
|
||||
#include "sprite.h"
|
||||
|
||||
extern s32 spr_allocateBtlComponentsOnWorldHeap;
|
||||
extern s32 D_802DF540;
|
||||
extern SpriteAnimData* spr_playerSprites[13];
|
||||
extern s32 D_802DF57C;
|
||||
extern s32 spr_playerMaxComponents;
|
||||
extern PlayerCurrentAnimInfo spr_playerCurrentAnimInfo[3];
|
||||
extern SpriteAnimData* NpcSpriteData[0xEA];
|
||||
extern u8 NpcSpriteInstanceCount[0xEA];
|
||||
extern SpriteInstance SpriteInstances[51];
|
||||
|
||||
extern Quad* D_802DFE44;
|
||||
extern s32 D_802DFE48[22];
|
||||
extern s32 D_802DFEA0[3];
|
||||
extern s32 SpriteUpdateNotifyValue;
|
||||
extern s32 MaxLoadedSpriteInstanceID;
|
||||
BSS s32 D_802DF520; // unused?
|
||||
BSS s32 spr_allocateBtlComponentsOnWorldHeap;
|
||||
BSS s32 D_802DF528[2]; // unused?
|
||||
BSS s32 MaxLoadedSpriteInstanceID;
|
||||
BSS s32 D_802DF534[3]; // unused?
|
||||
BSS s32 D_802DF540;
|
||||
BSS s32 D_802DF544; // unused?
|
||||
BSS SpriteAnimData* spr_playerSprites[13];
|
||||
BSS s32 D_802DF57C;
|
||||
BSS s32 spr_playerMaxComponents;
|
||||
BSS s32 D_802DF584; // unused?
|
||||
BSS PlayerCurrentAnimInfo spr_playerCurrentAnimInfo[3];
|
||||
BSS s32 D_802DF5AC; // unused?
|
||||
BSS SpriteAnimData* NpcSpriteData[234];
|
||||
BSS u8 NpcSpriteInstanceCount[234];
|
||||
BSS s32 D_802DFA44; // unused?
|
||||
BSS SpriteInstance SpriteInstances[51];
|
||||
BSS Quad* D_802DFE44;
|
||||
BSS s32 D_802DFE48[22];
|
||||
BSS s32 D_802DFEA0[3];
|
||||
BSS s32 SpriteUpdateNotifyValue;
|
||||
|
||||
SpriteComponent** spr_allocate_components(s32);
|
||||
void spr_load_npc_extra_anims(SpriteAnimData*, u32*);
|
||||
@ -379,7 +385,7 @@ void spr_component_update_commands(SpriteComponent* comp, SpriteAnimComponent* a
|
||||
f32 rotX, rotY, rotZ;
|
||||
f32 scaleX, scaleY, scaleZ;
|
||||
s32 changedFlags;
|
||||
|
||||
|
||||
u16* bufPos;
|
||||
u16* gotoPos;
|
||||
s32 cmdValue;
|
||||
@ -389,19 +395,19 @@ void spr_component_update_commands(SpriteComponent* comp, SpriteAnimComponent* a
|
||||
scaleY = 1.0f;
|
||||
scaleX = 1.0f;
|
||||
changedFlags = 0;
|
||||
|
||||
|
||||
bufPos = comp->readPos;
|
||||
gotoPos = (u16*) -1;
|
||||
|
||||
|
||||
comp->waitTime -= spr_animUpdateTimeScale;
|
||||
|
||||
|
||||
while (comp->waitTime <= 0.0f) {
|
||||
// overflow check
|
||||
if (bufPos >= &anim->cmdList[anim->cmdListSize / 2]) {
|
||||
bufPos = anim->cmdList;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
switch (*bufPos & 0xF000) {
|
||||
// 0VVV
|
||||
// Wait
|
||||
@ -530,7 +536,7 @@ void spr_component_update_commands(SpriteComponent* comp, SpriteAnimComponent* a
|
||||
break;
|
||||
}
|
||||
} // end loop
|
||||
|
||||
|
||||
comp->readPos = bufPos;
|
||||
if (changedFlags & 1) {
|
||||
comp->posOffset.x = posX;
|
||||
@ -655,7 +661,7 @@ void spr_load_player_sprite(s32 spriteIndex) {
|
||||
void spr_init_sprites(s32 playerSpriteSet) {
|
||||
s32 loadedFlags;
|
||||
s32 i;
|
||||
|
||||
|
||||
spr_allocateBtlComponentsOnWorldHeap = FALSE;
|
||||
_heap_create(&gSpriteHeapPtr, 0x40000);
|
||||
fold_init();
|
||||
@ -730,13 +736,13 @@ s32 spr_draw_player_sprite(s32 spriteInstanceID, s32 yaw, s32 arg2, u16** palett
|
||||
|
||||
camRelativeYaw = yaw;
|
||||
spriteAnimIndex = spriteInstanceID & 0xFF;
|
||||
|
||||
|
||||
animID = spr_playerCurrentAnimInfo[spriteAnimIndex].animID;
|
||||
|
||||
if (animID == -1) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
spriteIndex = ((animID >> 0x10) & 0xFF) - 1;
|
||||
D_802DF57C = spriteIndex;
|
||||
if (spr_playerSprites[spriteIndex] == NULL) {
|
||||
@ -756,7 +762,7 @@ s32 spr_draw_player_sprite(s32 spriteInstanceID, s32 yaw, s32 arg2, u16** palett
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!(spriteInstanceID & 0x40000000)) {
|
||||
camRelativeYaw += (s32) -gCameras[gCurrentCamID].currentYaw;
|
||||
if (camRelativeYaw > 360) {
|
||||
@ -771,15 +777,15 @@ s32 spr_draw_player_sprite(s32 spriteInstanceID, s32 yaw, s32 arg2, u16** palett
|
||||
} else {
|
||||
zscale = 1.5f;
|
||||
}
|
||||
|
||||
|
||||
if (spriteInstanceID & 0x10000000) {
|
||||
zscale = 0.0f - zscale;
|
||||
}
|
||||
|
||||
|
||||
D_802DFEA0[0] = 0;
|
||||
D_802DFEA0[1] = camRelativeYaw;
|
||||
D_802DFEA0[2] = 0;
|
||||
|
||||
|
||||
if (spriteInstanceID & 0x80000000) {
|
||||
if (arg2 == 0) {
|
||||
return 0;
|
||||
@ -788,7 +794,7 @@ s32 spr_draw_player_sprite(s32 spriteInstanceID, s32 yaw, s32 arg2, u16** palett
|
||||
} else {
|
||||
alpha = 255;
|
||||
}
|
||||
|
||||
|
||||
compList = spr_playerCurrentAnimInfo[spriteAnimIndex].componentList;
|
||||
if (spriteInstanceID & 0x20000000) {
|
||||
drawPalettes = paletteList;
|
||||
@ -875,7 +881,7 @@ s32 spr_load_npc_sprite(s32 animID, u32* extraAnimList) {
|
||||
|
||||
s32 spriteIndex = (animID >> 0x10) & 0x7FFF;
|
||||
s32 useTailAlloc = (u32)animID >> 0x1F;
|
||||
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(SpriteInstances); i++) {
|
||||
if (SpriteInstances[i].spriteIndex == 0) {
|
||||
break;
|
||||
@ -924,7 +930,7 @@ s32 spr_update_sprite(s32 spriteInstanceID, s32 animID, f32 timeScale) {
|
||||
s32 palID;
|
||||
s32 i = spriteInstanceID & 0xFF;
|
||||
s32 animIndex = animID & 0xFF;
|
||||
|
||||
|
||||
animData = SpriteInstances[i].spriteData;
|
||||
compList = SpriteInstances[i].componentList;
|
||||
animList = &animData->animListStart[animIndex];
|
||||
|
@ -14,7 +14,7 @@ NUPiOverlaySegment D_8007798C = {
|
||||
.textStart = filemenu_TEXT_START,
|
||||
.textEnd = filemenu_TEXT_END,
|
||||
.dataStart = filemenu_DATA_START,
|
||||
.dataEnd = filemenu_DATA_END,
|
||||
.dataEnd = filemenu_RODATA_END,
|
||||
.bssStart = filemenu_BSS_START,
|
||||
.bssEnd = filemenu_BSS_END,
|
||||
};
|
||||
|
@ -14,7 +14,7 @@ NUPiOverlaySegment D_8007795C = {
|
||||
.textStart = pause_TEXT_START,
|
||||
.textEnd = pause_TEXT_END,
|
||||
.dataStart = pause_DATA_START,
|
||||
.dataEnd = pause_DATA_END,
|
||||
.dataEnd = pause_RODATA_END,
|
||||
.bssStart = pause_BSS_START,
|
||||
.bssEnd = pause_BSS_END,
|
||||
};
|
||||
|
@ -23,7 +23,6 @@ void action_update_hit_lava(void) {
|
||||
f32 componentSpeed;
|
||||
s32 completeAxes; // number of axes along which the 'return motion' is complete
|
||||
|
||||
static s32 pad[2]; // curious
|
||||
static f32 LaunchVelocity;
|
||||
static f32 LaunchInterpPhase; // used to interp launch velocity
|
||||
static f32 ReturnAngle;
|
||||
|
@ -6,7 +6,7 @@
|
||||
[subrepo]
|
||||
remote = https://github.com/ethteck/splat.git
|
||||
branch = master
|
||||
commit = b681843a788a48824ca60d5063a8f6494e444ddc
|
||||
parent = de8a76e84bb952636a1caee8408417bcedf4a326
|
||||
commit = 6c02ec5ecdc1c742ce8ad6cd57480ad65bc802cd
|
||||
parent = c09278de7a93519feec010692b0be377d5e860de
|
||||
method = merge
|
||||
cmdver = 0.4.3
|
||||
|
@ -1,5 +1,20 @@
|
||||
# splat Release Notes
|
||||
|
||||
### 0.10.0: The Linker Script Update
|
||||
|
||||
Linker scripts splat produces are now capable of being shift-friendly. Rom addresses will automatically shift, and ram addresses will still be hard-coded unless the new segment option `follows_vram` is specified. The value of this option should be the name of a segment (a) that this segment (b) should follow in memory. If a grows or shrinks, b's start address will also do so to accommodate it.
|
||||
|
||||
The `enable_ld_alignment_hack` option and corresponding behavior has been removed. This proved to add too much complexity to the linker script generation code and was becoming quite a burden to keep dealing with. Apologies for any inconvenience this may cause. But trust me: in the long run, it's good you won't be depending on that madness.
|
||||
|
||||
### 0.9.5
|
||||
* Changes have been made to the linker script such that it is more shiftable. Rather than setting the rom position to hard-coded addresses, it increments the position by the size of the previous segment. Some projects may experience some alignment-related issues after this change. If specified, the new segment option `align: n` will add an `ALIGN(n)` directive for that section's linker segment.
|
||||
|
||||
### 0.9.4
|
||||
* A new linker script section is now automatically created when the .bss section begins, using NOLOAD as opposed to the previous hacky rom rewinding we were previously doing. Additionally, `ld_section_labels` now includes `.rodata` by default.
|
||||
|
||||
### 0.9.3
|
||||
* Added `add_set_gp_64` option (true by default), which allows controlling whether to add ".set gp=64" to asm/hasm files
|
||||
|
||||
### 0.9.2
|
||||
* Added "palette" argument to ci4/ci8 segments so that segments' palettes can be manually specified
|
||||
|
||||
|
@ -2,7 +2,6 @@ from collections import OrderedDict
|
||||
from typing import Dict, List, Optional, Tuple
|
||||
import typing
|
||||
from segtypes.common.group import CommonSegGroup
|
||||
from segtypes.common.linker_section import dotless_type
|
||||
from segtypes.segment import RomAddr, Segment
|
||||
from util import log, options
|
||||
from util.range import Range
|
||||
@ -10,6 +9,11 @@ from util.symbols import Symbol
|
||||
|
||||
CODE_TYPES = ["c", "asm", "hasm"]
|
||||
|
||||
|
||||
def dotless_type(type: str) -> str:
|
||||
return type[1:] if type[0] == "." else type
|
||||
|
||||
|
||||
# code group
|
||||
class CommonSegCode(CommonSegGroup):
|
||||
def __init__(
|
||||
@ -50,6 +54,7 @@ class CommonSegCode(CommonSegGroup):
|
||||
self.jtbl_glabels_to_add = set()
|
||||
self.jumptables: Dict[int, Tuple[int, int]] = {}
|
||||
self.rodata_syms: Dict[int, List[Symbol]] = {}
|
||||
self.align = 0x10
|
||||
|
||||
@property
|
||||
def needs_symbols(self) -> bool:
|
||||
|
@ -1,5 +1,4 @@
|
||||
from typing import List, Optional
|
||||
from segtypes.common.linker_section import dotless_type
|
||||
from segtypes.common.segment import CommonSegment
|
||||
from segtypes.segment import RomAddr, Segment
|
||||
from util import log
|
||||
|
@ -1,12 +0,0 @@
|
||||
from dataclasses import dataclass
|
||||
|
||||
|
||||
def dotless_type(type: str) -> str:
|
||||
return type[1:] if type[0] == "." else type
|
||||
|
||||
|
||||
@dataclass
|
||||
class LinkerSection:
|
||||
name: str
|
||||
started: bool = False
|
||||
ended: bool = False
|
@ -1,7 +1,7 @@
|
||||
from typing import Union, List
|
||||
from dataclasses import dataclass
|
||||
from typing import Dict, Optional, OrderedDict, Union, List
|
||||
from pathlib import Path
|
||||
from segtypes.common.data import CommonSegData
|
||||
from segtypes.common.linker_section import LinkerSection, dotless_type
|
||||
from segtypes.n64.img import N64SegImg
|
||||
from segtypes.n64.palette import N64SegPalette
|
||||
from util import options
|
||||
@ -70,6 +70,19 @@ def get_segment_cname(segment: Segment) -> str:
|
||||
return to_cname(name)
|
||||
|
||||
|
||||
@dataclass
|
||||
class LinkerSection:
|
||||
name: str
|
||||
started: bool = False
|
||||
ended: bool = False
|
||||
|
||||
@property
|
||||
def section_type(self) -> str:
|
||||
if self.name == ".rdata":
|
||||
return ".rodata"
|
||||
return self.name
|
||||
|
||||
|
||||
class LinkerEntry:
|
||||
def __init__(
|
||||
self, segment: Segment, src_paths: List[Path], object_path: Path, section: str
|
||||
@ -84,6 +97,13 @@ class LinkerEntry:
|
||||
else:
|
||||
self.object_path = path_to_object_path(object_path)
|
||||
|
||||
@property
|
||||
def section_type(self) -> str:
|
||||
if self.section == ".rdata":
|
||||
return ".rodata"
|
||||
else:
|
||||
return self.section
|
||||
|
||||
|
||||
class LinkerWriter:
|
||||
def __init__(self):
|
||||
@ -98,64 +118,78 @@ class LinkerWriter:
|
||||
|
||||
self._writeln("SECTIONS")
|
||||
self._begin_block()
|
||||
self._writeln(f"__romPos = 0;")
|
||||
|
||||
if options.get_gp() is not None:
|
||||
self._writeln("_gp = " + f"0x{options.get_gp():X};")
|
||||
|
||||
def add(self, segment: Segment):
|
||||
# Adds all the entries of a segment to the linker script buffer
|
||||
def add(self, segment: Segment, next_segment: Optional[Segment]):
|
||||
entries = segment.get_linker_entries()
|
||||
self.entries.extend(entries)
|
||||
|
||||
self._begin_segment(segment)
|
||||
|
||||
seg_name = get_segment_cname(segment)
|
||||
|
||||
section_labels = [
|
||||
LinkerSection(l)
|
||||
for l in options.ld_section_labels()
|
||||
if l in options.get_section_order()
|
||||
]
|
||||
section_labels: OrderedDict[str, LinkerSection] = OrderedDict(
|
||||
{
|
||||
l: LinkerSection(l)
|
||||
for l in options.get_section_order()
|
||||
if l in options.ld_section_labels()
|
||||
}
|
||||
)
|
||||
|
||||
# Start the first linker section
|
||||
|
||||
self._write_symbol(f"{seg_name}_ROM_START", "__romPos")
|
||||
|
||||
if entries[0].section_type == ".bss":
|
||||
self._begin_bss_segment(segment, is_first=True)
|
||||
self._write_symbol(f"{seg_name}_BSS_START", ".")
|
||||
if ".bss" in section_labels:
|
||||
section_labels[".bss"].started = True
|
||||
else:
|
||||
self._begin_segment(segment)
|
||||
|
||||
last_seen_sections: Dict[LinkerEntry, str] = {}
|
||||
|
||||
# Find where sections are last seen
|
||||
for entry in reversed(entries):
|
||||
if (
|
||||
entry.section_type in section_labels.keys()
|
||||
and entry.section_type not in last_seen_sections.values()
|
||||
):
|
||||
last_seen_sections[entry] = entry.section_type
|
||||
|
||||
force_new_section = False
|
||||
cur_section = None
|
||||
|
||||
for i, entry in enumerate(entries):
|
||||
prev_section = None
|
||||
for entry in entries:
|
||||
entering_bss = False
|
||||
leaving_bss = False
|
||||
cur_section = entry.section
|
||||
|
||||
if cur_section == "linker": # TODO: isinstance is preferable
|
||||
if cur_section == "linker":
|
||||
self._end_block()
|
||||
self._begin_segment(entry.segment)
|
||||
continue
|
||||
elif cur_section == "linker_offset":
|
||||
self._write_symbol(
|
||||
f"{get_segment_cname(entry.segment)}_OFFSET",
|
||||
f". - {get_segment_cname(segment)}_ROM_START",
|
||||
)
|
||||
self._write_symbol(f"{get_segment_cname(entry.segment)}_OFFSET", f".")
|
||||
continue
|
||||
|
||||
for i, section in enumerate(section_labels):
|
||||
if not section.started and section.name == cur_section:
|
||||
if i > 0:
|
||||
if not section_labels[i - 1].ended:
|
||||
section_labels[i - 1].ended = True
|
||||
self._write_symbol(
|
||||
f"{seg_name}{section_labels[i - 1].name.upper()}_END",
|
||||
".",
|
||||
)
|
||||
section.started = True
|
||||
self._write_symbol(f"{seg_name}{section.name.upper()}_START", ".")
|
||||
for i, section in enumerate(section_labels.values()):
|
||||
# If we haven't seen this section yet
|
||||
if not section.started and section.section_type == entry.section_type:
|
||||
if prev_section == ".bss":
|
||||
leaving_bss = True
|
||||
elif cur_section == ".bss":
|
||||
entering_bss = True
|
||||
|
||||
if options.enable_ld_alignment_hack():
|
||||
start = entry.segment.rom_start
|
||||
if isinstance(start, int):
|
||||
# Create new sections for non-subalign alignment (hack)
|
||||
if start % 0x10 != 0 and i != 0 or force_new_section:
|
||||
self._end_block()
|
||||
self._begin_segment(entry.segment, mid_segment=True)
|
||||
force_new_section = False
|
||||
|
||||
if start % 0x10 != 0 and i != 0:
|
||||
force_new_section = True
|
||||
if not (
|
||||
entering_bss or leaving_bss
|
||||
): # Don't write a START symbol if we are about to end the section
|
||||
self._write_symbol(
|
||||
f"{seg_name}{entry.section_type.upper()}_START", "."
|
||||
)
|
||||
section_labels[entry.section_type].started = True
|
||||
|
||||
if (
|
||||
entry.object_path
|
||||
@ -170,24 +204,45 @@ class LinkerWriter:
|
||||
)
|
||||
self._write_symbol(path_cname, ".")
|
||||
|
||||
# Write out manual entries for images inside .data segments
|
||||
seg = entry.segment
|
||||
if isinstance(seg, CommonSegData):
|
||||
for subseg in seg.subsegments:
|
||||
if isinstance(subseg, N64SegImg):
|
||||
self._write_symbol(
|
||||
get_segment_cname(subseg), f"0x{subseg.rom_start:X}"
|
||||
)
|
||||
# Create new linker section for BSS
|
||||
if entering_bss or leaving_bss:
|
||||
# If this is the last entry of its type, add the END marker for the section we're ending
|
||||
if entry in last_seen_sections and section_labels[entry.section_type].started:
|
||||
self._write_symbol(
|
||||
f"{seg_name}{last_seen_sections[entry].upper()}_END", "."
|
||||
)
|
||||
section_labels[last_seen_sections[entry]].ended = True
|
||||
|
||||
self._writeln(f"{entry.object_path}({cur_section});")
|
||||
self._end_block()
|
||||
|
||||
for section in section_labels:
|
||||
if section.started and not section.ended:
|
||||
self._write_symbol(
|
||||
f"{seg_name}_{dotless_type(section.name).upper()}_END", "."
|
||||
)
|
||||
if entering_bss:
|
||||
self._begin_bss_segment(segment)
|
||||
else:
|
||||
self._begin_segment(segment)
|
||||
|
||||
self._end_segment(segment)
|
||||
self._write_symbol(f"{seg_name}{entry.section_type.upper()}_START", ".")
|
||||
section_labels[cur_section].started = True
|
||||
|
||||
# Write THIS linker entry
|
||||
self._writeln(f"{entry.object_path}({cur_section});")
|
||||
else:
|
||||
# Write THIS linker entry
|
||||
self._writeln(f"{entry.object_path}({cur_section});")
|
||||
|
||||
# If this is the last entry of its type, add the END marker for the section we're ending
|
||||
if entry in last_seen_sections:
|
||||
self._write_symbol(f"{seg_name}{cur_section.upper()}_END", ".")
|
||||
section_labels[cur_section].ended = True
|
||||
|
||||
prev_section = cur_section
|
||||
|
||||
# End all un-ended sections
|
||||
for section in section_labels.values():
|
||||
if (section.started and not section.ended):
|
||||
self._write_symbol(f"{seg_name}_{section.name.upper()}_END", ".")
|
||||
|
||||
all_bss = all(e.section == ".bss" for e in entries)
|
||||
self._end_segment(segment, next_segment, all_bss)
|
||||
|
||||
def save_linker_script(self):
|
||||
if self.linker_discard_section:
|
||||
@ -245,25 +300,14 @@ class LinkerWriter:
|
||||
if symbol not in self.symbols:
|
||||
self.symbols.append(symbol)
|
||||
|
||||
def _begin_segment(self, segment: Segment, mid_segment=False):
|
||||
# force location if not shiftable/auto
|
||||
if not self.shiftable and isinstance(segment.rom_start, int):
|
||||
self._writeln(f"__romPos = 0x{segment.rom_start:X};")
|
||||
def _begin_segment(self, segment: Segment):
|
||||
if segment.follows_vram_segment:
|
||||
vram_str = get_segment_cname(segment.follows_vram_segment) + "_VRAM_END "
|
||||
else:
|
||||
# TODO: align 0x10, preferably
|
||||
pass
|
||||
|
||||
self._writeln(f". = __romPos;")
|
||||
|
||||
vram = segment.vram_start
|
||||
vram_str = f"0x{vram:X} " if isinstance(vram, int) else ""
|
||||
vram_str = f"0x{segment.vram_start:X} " if isinstance(segment.vram_start, int) else ""
|
||||
|
||||
name = get_segment_cname(segment)
|
||||
|
||||
if mid_segment:
|
||||
name += to_cname(segment.type)
|
||||
|
||||
self._write_symbol(f"{name}_ROM_START", "__romPos")
|
||||
self._write_symbol(f"{name}_VRAM", f"ADDR(.{name})")
|
||||
|
||||
self._writeln(
|
||||
@ -271,21 +315,42 @@ class LinkerWriter:
|
||||
)
|
||||
self._begin_block()
|
||||
|
||||
def _end_segment(self, segment: Segment):
|
||||
def _begin_bss_segment(self, segment: Segment, is_first: bool = False):
|
||||
if segment.follows_vram_segment:
|
||||
vram_str = get_segment_cname(segment.follows_vram_segment) + "_VRAM_END "
|
||||
else:
|
||||
vram_str = f"0x{segment.vram_start:X} " if isinstance(segment.vram_start, int) else ""
|
||||
|
||||
name = get_segment_cname(segment) + "_bss"
|
||||
|
||||
self._write_symbol(f"{name}_VRAM", f"ADDR(.{name})")
|
||||
|
||||
if is_first:
|
||||
addr_str = vram_str + "(NOLOAD)"
|
||||
else:
|
||||
addr_str = "(NOLOAD)"
|
||||
|
||||
self._writeln(f".{name} {addr_str} : SUBALIGN({segment.subalign})")
|
||||
self._begin_block()
|
||||
|
||||
def _end_segment(
|
||||
self, segment: Segment, next_segment: Optional[Segment] = None, all_bss=False
|
||||
):
|
||||
self._end_block()
|
||||
|
||||
name = get_segment_cname(segment)
|
||||
|
||||
# force end if not shiftable/auto
|
||||
if (
|
||||
not self.shiftable
|
||||
and isinstance(segment.rom_start, int)
|
||||
and isinstance(segment.rom_end, int)
|
||||
):
|
||||
self._write_symbol(f"{name}_ROM_END", segment.rom_end)
|
||||
self._writeln(f"__romPos = 0x{segment.rom_end:X};")
|
||||
else:
|
||||
if not all_bss:
|
||||
self._writeln(f"__romPos += SIZEOF(.{name});")
|
||||
self._write_symbol(f"{name}_ROM_END", "__romPos")
|
||||
|
||||
# Align directive
|
||||
if segment.align:
|
||||
self._writeln(
|
||||
f"__romPos = (__romPos + {segment.align - 1}) & ~{segment.align - 1}; /* align {segment.align} */"
|
||||
)
|
||||
|
||||
self._write_symbol(f"{name}_ROM_END", "__romPos")
|
||||
|
||||
self._write_symbol(f"{name}_VRAM_END", ".")
|
||||
|
||||
self._writeln("")
|
||||
|
@ -13,7 +13,8 @@ class N64SegAsm(CommonSegAsm):
|
||||
ret.append("# assembler directives")
|
||||
ret.append(".set noat # allow manual use of $at")
|
||||
ret.append(".set noreorder # don't insert nops after branches")
|
||||
ret.append(".set gp=64 # allow use of 64-bit general purpose registers")
|
||||
if options.get_add_set_gp_64():
|
||||
ret.append(".set gp=64 # allow use of 64-bit general purpose registers")
|
||||
ret.append("")
|
||||
preamble = options.get_generated_s_preamble()
|
||||
if preamble:
|
||||
|
@ -13,7 +13,8 @@ class N64SegHasm(CommonSegHasm):
|
||||
ret.append("# assembler directives")
|
||||
ret.append(".set noat # allow manual use of $at")
|
||||
ret.append(".set noreorder # don't insert nops after branches")
|
||||
ret.append(".set gp=64 # allow use of 64-bit general purpose registers")
|
||||
if options.get_add_set_gp_64():
|
||||
ret.append(".set gp=64 # allow use of 64-bit general purpose registers")
|
||||
ret.append("")
|
||||
preamble = options.get_generated_s_preamble()
|
||||
if preamble:
|
||||
|
@ -23,6 +23,12 @@ def parse_segment_vram(segment: Union[dict, list]) -> Optional[int]:
|
||||
return None
|
||||
|
||||
|
||||
def parse_segment_align(segment: Union[dict, list]) -> Optional[int]:
|
||||
if isinstance(segment, dict) and "align" in segment:
|
||||
return int(segment["align"])
|
||||
return None
|
||||
|
||||
|
||||
def parse_segment_subalign(segment: Union[dict, list]) -> int:
|
||||
default = options.get_subalign()
|
||||
if isinstance(segment, dict):
|
||||
@ -37,6 +43,12 @@ def parse_segment_section_order(segment: Union[dict, list]) -> List[str]:
|
||||
return default
|
||||
|
||||
|
||||
def parse_segment_follows_vram(segment: Union[dict, list]) -> Optional[str]:
|
||||
if isinstance(segment, dict):
|
||||
return segment.get("follows_vram", None)
|
||||
return None
|
||||
|
||||
|
||||
class Segment:
|
||||
require_unique_name = True
|
||||
|
||||
@ -163,6 +175,7 @@ class Segment:
|
||||
self.vram_start = vram_start
|
||||
self.extract = extract
|
||||
|
||||
self.align: Optional[int] = None
|
||||
self.given_subalign = given_subalign
|
||||
self.exclusive_ram_id = exclusive_ram_id
|
||||
self.given_dir = given_dir
|
||||
@ -170,12 +183,14 @@ class Segment:
|
||||
int, List[Symbol]
|
||||
] = {} # Symbols known to be in this segment
|
||||
self.given_section_order: List[str] = options.get_section_order()
|
||||
self.follows_vram: Optional[str] = None
|
||||
|
||||
self.given_symbol_name_format = symbol_name_format
|
||||
self.given_symbol_name_format_no_rom = symbol_name_format_no_rom
|
||||
|
||||
self.parent: Optional[Segment] = None
|
||||
self.sibling: Optional[Segment] = None
|
||||
self.follows_vram_segment: Optional[Segment] = None
|
||||
|
||||
self.args: List[str] = args
|
||||
self.yaml = yaml
|
||||
@ -233,7 +248,13 @@ class Segment:
|
||||
args=args,
|
||||
yaml=yaml,
|
||||
)
|
||||
cls.given_section_order = parse_segment_section_order(yaml)
|
||||
ret.given_section_order = parse_segment_section_order(yaml)
|
||||
|
||||
if not ret.follows_vram:
|
||||
ret.follows_vram = parse_segment_follows_vram(yaml)
|
||||
|
||||
if not ret.align:
|
||||
ret.align = parse_segment_align(yaml)
|
||||
return ret
|
||||
|
||||
@property
|
||||
|
@ -1,7 +1,7 @@
|
||||
#! /usr/bin/env python3
|
||||
|
||||
import hashlib
|
||||
from typing import Dict, List, Union, Set, Any
|
||||
from typing import Dict, List, Optional, Union, Set, Any
|
||||
import argparse
|
||||
import spimdisasm
|
||||
import rabbitizer
|
||||
@ -20,7 +20,7 @@ from util.symbols import Symbol
|
||||
|
||||
from intervaltree import Interval, IntervalTree
|
||||
|
||||
VERSION = "0.9.2"
|
||||
VERSION = "0.10.0"
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Split a rom given a rom, a config, and output directory"
|
||||
@ -57,7 +57,7 @@ def initialize_segments(config_segments: Union[dict, list]) -> List[Segment]:
|
||||
segment_roms = IntervalTree()
|
||||
segment_rams = IntervalTree()
|
||||
|
||||
seen_segment_names: Set[str] = set()
|
||||
segments_by_name: Dict[str, Segment] = {}
|
||||
ret = []
|
||||
|
||||
for i, seg_yaml in enumerate(config_segments):
|
||||
@ -77,10 +77,10 @@ def initialize_segments(config_segments: Union[dict, list]) -> List[Segment]:
|
||||
)
|
||||
|
||||
if segment.require_unique_name:
|
||||
if segment.name in seen_segment_names:
|
||||
if segment.name in segments_by_name:
|
||||
log.error(f"segment name '{segment.name}' is not unique")
|
||||
|
||||
seen_segment_names.add(segment.name)
|
||||
segments_by_name[segment.name] = segment
|
||||
|
||||
ret.append(segment)
|
||||
if (
|
||||
@ -96,6 +96,14 @@ def initialize_segments(config_segments: Union[dict, list]) -> List[Segment]:
|
||||
):
|
||||
segment_rams.addi(segment.vram_start, segment.vram_end, segment)
|
||||
|
||||
for segment in ret:
|
||||
if segment.follows_vram:
|
||||
if segment.follows_vram not in segments_by_name:
|
||||
log.error(
|
||||
f"segment '{segment.name}' follows_vram segment'{segment.follows_vram}' does not exist"
|
||||
)
|
||||
segment.follows_vram_segment = segments_by_name[segment.follows_vram]
|
||||
|
||||
return ret
|
||||
|
||||
|
||||
@ -375,12 +383,17 @@ def main(config_path, base_dir, target_path, modes, verbose, use_cache=True):
|
||||
if options.mode_active("ld"):
|
||||
global linker_writer
|
||||
linker_writer = LinkerWriter()
|
||||
for segment in tqdm.tqdm(
|
||||
all_segments,
|
||||
total=len(all_segments),
|
||||
desc=f"Writing linker script {brief_seg_name(segment, 20)}",
|
||||
for i, segment in enumerate(
|
||||
tqdm.tqdm(
|
||||
all_segments,
|
||||
total=len(all_segments),
|
||||
desc=f"Writing linker script {brief_seg_name(segment, 20)}",
|
||||
)
|
||||
):
|
||||
linker_writer.add(segment)
|
||||
next_segment: Optional[Segment] = None
|
||||
if i < len(all_segments) - 1:
|
||||
next_segment = all_segments[i + 1]
|
||||
linker_writer.add(segment, next_segment)
|
||||
linker_writer.save_linker_script()
|
||||
linker_writer.save_symbol_header()
|
||||
|
||||
|
@ -256,14 +256,9 @@ def linker_discard_section() -> bool:
|
||||
return opts.get("linker_discard_section", True)
|
||||
|
||||
|
||||
# Determines whether to use a silly hack in the linker script to maybe help enforce alignment (DO NOT USE?)
|
||||
def enable_ld_alignment_hack() -> bool:
|
||||
return opts.get("enable_ld_alignment_hack", False)
|
||||
|
||||
|
||||
# Determines the list of section labels that are to be added to the linker script
|
||||
def ld_section_labels() -> List[str]:
|
||||
return opts.get("ld_section_labels", [".text", ".data", ".bss"])
|
||||
return opts.get("ld_section_labels", [".text", ".data", ".rodata", ".bss"])
|
||||
|
||||
|
||||
################################################################################
|
||||
@ -364,6 +359,11 @@ def get_mips_abi_float_regs() -> str:
|
||||
return opts.get("mips_abi_float_regs", "numeric")
|
||||
|
||||
|
||||
# Determines whether to ad ".set gp=64 to asm/hasm files"
|
||||
def get_add_set_gp_64() -> bool:
|
||||
return opts.get("add_set_gp_64", True)
|
||||
|
||||
|
||||
################################################################################
|
||||
# N64-specific options
|
||||
################################################################################
|
||||
|
@ -228,5 +228,5 @@ segments:
|
||||
- [0x4AC70, c, jp/4AC70]
|
||||
- [0x4E580, bin]
|
||||
- [0x1E00000, pm_map_data, mapfs]
|
||||
- [0x027BCB14, bin]
|
||||
- [0x27BCB14, bin]
|
||||
- [0x2800000]
|
||||
|
@ -1,66 +0,0 @@
|
||||
.include "macro.inc"
|
||||
|
||||
.section .data
|
||||
|
||||
dlabel D_80109480
|
||||
.word 0x00000000
|
||||
|
||||
dlabel D_80109484
|
||||
.float 0.0
|
||||
|
||||
dlabel D_80109488
|
||||
.short 0x0004, 0x0000
|
||||
|
||||
dlabel D_8010948C
|
||||
.word 0x00000000
|
||||
|
||||
dlabel D_80109490
|
||||
.short 0x0004
|
||||
|
||||
dlabel D_80109492
|
||||
.short 0x0005
|
||||
|
||||
dlabel D_80109494
|
||||
.word 0x00000000
|
||||
|
||||
dlabel D_80109498
|
||||
.word 0x00000000
|
||||
|
||||
dlabel D_8010949C
|
||||
.short 0x0004, 0x0000
|
||||
|
||||
dlabel D_801094A0
|
||||
.word 0x00000000
|
||||
|
||||
dlabel D_801094A4
|
||||
.short 0x0004, 0x0000
|
||||
|
||||
dlabel D_801094A8
|
||||
.word 0x00000000
|
||||
|
||||
dlabel D_801094AC
|
||||
.short 0x0004
|
||||
|
||||
dlabel D_801094AE
|
||||
.short 0x0004
|
||||
|
||||
dlabel D_801094B0
|
||||
.word 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000204, 0x02000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000306, 0x03000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010419, 0x04010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0002184E, 0x18020000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01044E8F, 0x4E040100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02187FAF, 0x7F180200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x044EAFFF, 0xAF4E0401, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0x187FDFFF, 0xDF7F1802, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000105, 0x5EAFFFFF, 0xFFAF5E05, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0001043E, 0x8FFFFFFF, 0xFFFF8F3E, 0x04010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01043D8F, 0xDFFFFFFF, 0xFFFFDF8F, 0x3D040100, 0x00000000, 0x00000000, 0x00000000, 0x00000102, 0x064E8FDF, 0xFFFFFFFF, 0xFFFFFFDF, 0x8F4E0602, 0x01000000, 0x00000000, 0x00000000, 0x01020419, 0x5F9FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF9F5F19, 0x04020100, 0x00000000, 0x00010203, 0x04184E7F, 0xAFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFAF7F, 0x4E180403, 0x02010000, 0x0002194E, 0x5F7FAFDF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFDF, 0xAF7F5F4E, 0x19020000
|
||||
|
||||
dlabel D_801096B0
|
||||
.word 0x028001E0, 0x01FF0000, 0x028001E0, 0x01FF0000
|
||||
|
||||
dlabel D_801096C0
|
||||
.word 0x00000005, 0x00000000, 0x0400FC00, 0xFFFFFF00, 0xFFFB0000, 0x00000000, 0xFC000400, 0xFFFFFF00, 0x00000000, 0x00000000, 0x04000400, 0xFFFFFFFF, 0x0000FFFB, 0x00000000, 0x04000C00, 0xFFFFFF00, 0x00050000, 0x00000000, 0x0C000400, 0xFFFFFF00
|
||||
|
||||
dlabel D_80109710
|
||||
.word 0xE7000000, 0x00000000, 0xD7000002, 0xFFFFFFFF, 0xE3000A01, 0x00100000, 0xE3000C00, 0x00000000, 0xE3000D01, 0x00000000, 0xE3000F00, 0x00000000, 0xE3001001, 0x00000000, 0xE3001201, 0x00002000, 0xE2001D00, 0x00000000, 0xE3001402, 0x00000C00, 0xE200001C, 0x0C184B50, 0xFC161209, 0x540DC93F, 0xFC16120B, 0x540DC93F, 0xE3001001, 0x00000000, 0xFD68001F, D_801094B0, 0xF5680800, 0x070D0250, 0xE6000000, 0x00000000, 0xF4000000, 0x0707C03C, 0xE7000000, 0x00000000, 0xF5680800, 0x000D0250, 0xF2000000, 0x0007C03C, 0xF2000000, 0x0007C07C, 0xD9FDF9FF, 0x00000000, 0xD9FFFFFF, 0x00200004, 0xDF000000, 0x00000000
|
||||
|
||||
dlabel D_801097D8
|
||||
.word 0x0100500A, D_801096C0, 0x06000204, 0x00020604, 0x06040608, 0x00000408, 0xE7000000, 0x00000000, 0xDF000000, 0x00000000
|
||||
|
||||
dlabel D_80109800
|
||||
.word 0x285A5148, 0x413B352F, 0x2B26221F, 0x1C191614, 0x12100F0D, 0x0C0A0908, 0x07070605, 0x05040000
|
||||
|
||||
dlabel D_80109820
|
||||
.word 0xF769EF57, 0x11570969, 0x007AE645, 0x1A45DD34, 0x2334CA31, 0xBAFFC8F1, 0x00C838F1, 0x46FF3631, 0xC4DEEFBF, 0x11BF3CDE, 0x550D4A2E, 0x631B5D2B, 0x0C210C16, 0x18161821, 0x0C0A180A, 0x182DE821, 0xE816E82D, 0x7128C1CB, 0xBEB7B62E, 0xA32B23B6, 0x34AD0C2D, 0xF416F421, 0xE80AF40A, 0xF42DCCAD, 0xDDB6BAA4, 0xAB0D9D1B, 0x8F283FCB, 0x42B746A4
|
@ -1,154 +0,0 @@
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
|
||||
glabel func_800F0248
|
||||
/* 896F8 800F0248 27BDFFB8 */ addiu $sp, $sp, -0x48
|
||||
/* 896FC 800F024C AFB00020 */ sw $s0, 0x20($sp)
|
||||
/* 89700 800F0250 3C108011 */ lui $s0, %hi(gPlayerStatus)
|
||||
/* 89704 800F0254 2610EFC8 */ addiu $s0, $s0, %lo(gPlayerStatus)
|
||||
/* 89708 800F0258 AFBF0028 */ sw $ra, 0x28($sp)
|
||||
/* 8970C 800F025C AFB10024 */ sw $s1, 0x24($sp)
|
||||
/* 89710 800F0260 F7B80040 */ sdc1 $f24, 0x40($sp)
|
||||
/* 89714 800F0264 F7B60038 */ sdc1 $f22, 0x38($sp)
|
||||
/* 89718 800F0268 F7B40030 */ sdc1 $f20, 0x30($sp)
|
||||
/* 8971C 800F026C 820300B4 */ lb $v1, 0xb4($s0)
|
||||
/* 89720 800F0270 24020003 */ addiu $v0, $zero, 3
|
||||
/* 89724 800F0274 1462001B */ bne $v1, $v0, .L800F02E4
|
||||
/* 89728 800F0278 24020001 */ addiu $v0, $zero, 1
|
||||
/* 8972C 800F027C 860300C0 */ lh $v1, 0xc0($s0)
|
||||
/* 89730 800F0280 14620018 */ bne $v1, $v0, .L800F02E4
|
||||
/* 89734 800F0284 24020005 */ addiu $v0, $zero, 5
|
||||
/* 89738 800F0288 3C118011 */ lui $s1, %hi(D_80109492)
|
||||
/* 8973C 800F028C 26319492 */ addiu $s1, $s1, %lo(D_80109492)
|
||||
/* 89740 800F0290 86230000 */ lh $v1, ($s1)
|
||||
/* 89744 800F0294 14620013 */ bne $v1, $v0, .L800F02E4
|
||||
/* 89748 800F0298 00000000 */ nop
|
||||
/* 8974C 800F029C C60C0028 */ lwc1 $f12, 0x28($s0)
|
||||
/* 89750 800F02A0 8E060030 */ lw $a2, 0x30($s0)
|
||||
/* 89754 800F02A4 C600002C */ lwc1 $f0, 0x2c($s0)
|
||||
/* 89758 800F02A8 3C014160 */ lui $at, 0x4160
|
||||
/* 8975C 800F02AC 44817000 */ mtc1 $at, $f14
|
||||
/* 89760 800F02B0 3C108011 */ lui $s0, %hi(D_8010948C)
|
||||
/* 89764 800F02B4 2610948C */ addiu $s0, $s0, %lo(D_8010948C)
|
||||
/* 89768 800F02B8 8E070000 */ lw $a3, ($s0)
|
||||
/* 8976C 800F02BC 0C01BEE4 */ jal fx_flower_splash
|
||||
/* 89770 800F02C0 460E0380 */ add.s $f14, $f0, $f14
|
||||
/* 89774 800F02C4 C6000000 */ lwc1 $f0, ($s0)
|
||||
/* 89778 800F02C8 3C01420C */ lui $at, 0x420c
|
||||
/* 8977C 800F02CC 44816000 */ mtc1 $at, $f12
|
||||
/* 89780 800F02D0 0C00A6C9 */ jal clamp_angle
|
||||
/* 89784 800F02D4 460C0300 */ add.s $f12, $f0, $f12
|
||||
/* 89788 800F02D8 E6000000 */ swc1 $f0, ($s0)
|
||||
/* 8978C 800F02DC 0803C11C */ j .L800F0470
|
||||
/* 89790 800F02E0 A6200000 */ sh $zero, ($s1)
|
||||
.L800F02E4:
|
||||
/* 89794 800F02E4 3C038011 */ lui $v1, %hi(D_80109492)
|
||||
/* 89798 800F02E8 24639492 */ addiu $v1, $v1, %lo(D_80109492)
|
||||
/* 8979C 800F02EC 94620000 */ lhu $v0, ($v1)
|
||||
/* 897A0 800F02F0 24420001 */ addiu $v0, $v0, 1
|
||||
/* 897A4 800F02F4 A4620000 */ sh $v0, ($v1)
|
||||
/* 897A8 800F02F8 00021400 */ sll $v0, $v0, 0x10
|
||||
/* 897AC 800F02FC 00021403 */ sra $v0, $v0, 0x10
|
||||
/* 897B0 800F0300 28420006 */ slti $v0, $v0, 6
|
||||
/* 897B4 800F0304 14400002 */ bnez $v0, .L800F0310
|
||||
/* 897B8 800F0308 24020005 */ addiu $v0, $zero, 5
|
||||
/* 897BC 800F030C A4620000 */ sh $v0, ($v1)
|
||||
.L800F0310:
|
||||
/* 897C0 800F0310 920200B4 */ lbu $v0, 0xb4($s0)
|
||||
/* 897C4 800F0314 2442FFFF */ addiu $v0, $v0, -1
|
||||
/* 897C8 800F0318 2C420002 */ sltiu $v0, $v0, 2
|
||||
/* 897CC 800F031C 1440000A */ bnez $v0, .L800F0348
|
||||
/* 897D0 800F0320 3C02FF00 */ lui $v0, 0xff00
|
||||
/* 897D4 800F0324 8E0300B4 */ lw $v1, 0xb4($s0)
|
||||
/* 897D8 800F0328 3442FF00 */ ori $v0, $v0, 0xff00
|
||||
/* 897DC 800F032C 00621824 */ and $v1, $v1, $v0
|
||||
/* 897E0 800F0330 3C021A00 */ lui $v0, 0x1a00
|
||||
/* 897E4 800F0334 10620004 */ beq $v1, $v0, .L800F0348
|
||||
/* 897E8 800F0338 00000000 */ nop
|
||||
/* 897EC 800F033C 3C018011 */ lui $at, %hi(D_80109490)
|
||||
/* 897F0 800F0340 0803C11C */ j .L800F0470
|
||||
/* 897F4 800F0344 A4209490 */ sh $zero, %lo(D_80109490)($at)
|
||||
.L800F0348:
|
||||
/* 897F8 800F0348 3C048011 */ lui $a0, %hi(D_80109490)
|
||||
/* 897FC 800F034C 24849490 */ addiu $a0, $a0, %lo(D_80109490)
|
||||
/* 89800 800F0350 94820000 */ lhu $v0, ($a0)
|
||||
/* 89804 800F0354 24430001 */ addiu $v1, $v0, 1
|
||||
/* 89808 800F0358 00021400 */ sll $v0, $v0, 0x10
|
||||
/* 8980C 800F035C 18400044 */ blez $v0, .L800F0470
|
||||
/* 89810 800F0360 A4830000 */ sh $v1, ($a0)
|
||||
/* 89814 800F0364 C60C0084 */ lwc1 $f12, 0x84($s0)
|
||||
/* 89818 800F0368 A4800000 */ sh $zero, ($a0)
|
||||
/* 8981C 800F036C 0C00A6C9 */ jal clamp_angle
|
||||
/* 89820 800F0370 46006307 */ neg.s $f12, $f12
|
||||
/* 89824 800F0374 3C0140C9 */ lui $at, 0x40c9
|
||||
/* 89828 800F0378 34210FD0 */ ori $at, $at, 0xfd0
|
||||
/* 8982C 800F037C 44811000 */ mtc1 $at, $f2
|
||||
/* 89830 800F0380 00000000 */ nop
|
||||
/* 89834 800F0384 46020002 */ mul.s $f0, $f0, $f2
|
||||
/* 89838 800F0388 00000000 */ nop
|
||||
/* 8983C 800F038C 27A50018 */ addiu $a1, $sp, 0x18
|
||||
/* 89840 800F0390 3C0143B4 */ lui $at, 0x43b4
|
||||
/* 89844 800F0394 44816000 */ mtc1 $at, $f12
|
||||
/* 89848 800F0398 27A6001C */ addiu $a2, $sp, 0x1c
|
||||
/* 8984C 800F039C 0C00A82D */ jal sin_cos_rad
|
||||
/* 89850 800F03A0 460C0303 */ div.s $f12, $f0, $f12
|
||||
/* 89854 800F03A4 860200B2 */ lh $v0, 0xb2($s0)
|
||||
/* 89858 800F03A8 C7A20018 */ lwc1 $f2, 0x18($sp)
|
||||
/* 8985C 800F03AC 44822000 */ mtc1 $v0, $f4
|
||||
/* 89860 800F03B0 00000000 */ nop
|
||||
/* 89864 800F03B4 46802120 */ cvt.s.w $f4, $f4
|
||||
/* 89868 800F03B8 46022082 */ mul.s $f2, $f4, $f2
|
||||
/* 8986C 800F03BC 00000000 */ nop
|
||||
/* 89870 800F03C0 C7A0001C */ lwc1 $f0, 0x1c($sp)
|
||||
/* 89874 800F03C4 46002102 */ mul.s $f4, $f4, $f0
|
||||
/* 89878 800F03C8 00000000 */ nop
|
||||
/* 8987C 800F03CC 3C01BECC */ lui $at, 0xbecc
|
||||
/* 89880 800F03D0 3421CCCD */ ori $at, $at, 0xcccd
|
||||
/* 89884 800F03D4 44810000 */ mtc1 $at, $f0
|
||||
/* 89888 800F03D8 00000000 */ nop
|
||||
/* 8988C 800F03DC 46001082 */ mul.s $f2, $f2, $f0
|
||||
/* 89890 800F03E0 00000000 */ nop
|
||||
/* 89894 800F03E4 46002102 */ mul.s $f4, $f4, $f0
|
||||
/* 89898 800F03E8 00000000 */ nop
|
||||
/* 8989C 800F03EC C6000028 */ lwc1 $f0, 0x28($s0)
|
||||
/* 898A0 800F03F0 46020600 */ add.s $f24, $f0, $f2
|
||||
/* 898A4 800F03F4 C6000030 */ lwc1 $f0, 0x30($s0)
|
||||
/* 898A8 800F03F8 C602002C */ lwc1 $f2, 0x2c($s0)
|
||||
/* 898AC 800F03FC 46040580 */ add.s $f22, $f0, $f4
|
||||
/* 898B0 800F0400 3C014178 */ lui $at, 0x4178
|
||||
/* 898B4 800F0404 44810000 */ mtc1 $at, $f0
|
||||
/* 898B8 800F0408 2404000A */ addiu $a0, $zero, 0xa
|
||||
/* 898BC 800F040C 0C00A67F */ jal rand_int
|
||||
/* 898C0 800F0410 46001500 */ add.s $f20, $f2, $f0
|
||||
/* 898C4 800F0414 0000202D */ daddu $a0, $zero, $zero
|
||||
/* 898C8 800F0418 44821000 */ mtc1 $v0, $f2
|
||||
/* 898CC 800F041C 00000000 */ nop
|
||||
/* 898D0 800F0420 468010A0 */ cvt.s.w $f2, $f2
|
||||
/* 898D4 800F0424 C6000084 */ lwc1 $f0, 0x84($s0)
|
||||
/* 898D8 800F0428 3C108011 */ lui $s0, %hi(D_80109494)
|
||||
/* 898DC 800F042C 26109494 */ addiu $s0, $s0, %lo(D_80109494)
|
||||
/* 898E0 800F0430 4405C000 */ mfc1 $a1, $f24
|
||||
/* 898E4 800F0434 4407B000 */ mfc1 $a3, $f22
|
||||
/* 898E8 800F0438 46000007 */ neg.s $f0, $f0
|
||||
/* 898EC 800F043C 46020000 */ add.s $f0, $f0, $f2
|
||||
/* 898F0 800F0440 3C0140A0 */ lui $at, 0x40a0
|
||||
/* 898F4 800F0444 44811000 */ mtc1 $at, $f2
|
||||
/* 898F8 800F0448 4406A000 */ mfc1 $a2, $f20
|
||||
/* 898FC 800F044C 46020001 */ sub.s $f0, $f0, $f2
|
||||
/* 89900 800F0450 C6020000 */ lwc1 $f2, ($s0)
|
||||
/* 89904 800F0454 468010A0 */ cvt.s.w $f2, $f2
|
||||
/* 89908 800F0458 E7A20014 */ swc1 $f2, 0x14($sp)
|
||||
/* 8990C 800F045C 0C01BEFC */ jal fx_flower_trail
|
||||
/* 89910 800F0460 E7A00010 */ swc1 $f0, 0x10($sp)
|
||||
/* 89914 800F0464 8E020000 */ lw $v0, ($s0)
|
||||
/* 89918 800F0468 2C420001 */ sltiu $v0, $v0, 1
|
||||
/* 8991C 800F046C AE020000 */ sw $v0, ($s0)
|
||||
.L800F0470:
|
||||
/* 89920 800F0470 8FBF0028 */ lw $ra, 0x28($sp)
|
||||
/* 89924 800F0474 8FB10024 */ lw $s1, 0x24($sp)
|
||||
/* 89928 800F0478 8FB00020 */ lw $s0, 0x20($sp)
|
||||
/* 8992C 800F047C D7B80040 */ ldc1 $f24, 0x40($sp)
|
||||
/* 89930 800F0480 D7B60038 */ ldc1 $f22, 0x38($sp)
|
||||
/* 89934 800F0484 D7B40030 */ ldc1 $f20, 0x30($sp)
|
||||
/* 89938 800F0488 03E00008 */ jr $ra
|
||||
/* 8993C 800F048C 27BD0048 */ addiu $sp, $sp, 0x48
|
@ -1,106 +0,0 @@
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
|
||||
glabel func_800F0864
|
||||
/* 89D14 800F0864 27BDFFD0 */ addiu $sp, $sp, -0x30
|
||||
/* 89D18 800F0868 AFB10024 */ sw $s1, 0x24($sp)
|
||||
/* 89D1C 800F086C 3C118011 */ lui $s1, %hi(gPlayerStatus)
|
||||
/* 89D20 800F0870 2631EFC8 */ addiu $s1, $s1, %lo(gPlayerStatus)
|
||||
/* 89D24 800F0874 AFBF0028 */ sw $ra, 0x28($sp)
|
||||
/* 89D28 800F0878 AFB00020 */ sw $s0, 0x20($sp)
|
||||
/* 89D2C 800F087C 922400B4 */ lbu $a0, 0xb4($s1)
|
||||
/* 89D30 800F0880 2482FFFF */ addiu $v0, $a0, -1
|
||||
/* 89D34 800F0884 2C420002 */ sltiu $v0, $v0, 2
|
||||
/* 89D38 800F0888 14400013 */ bnez $v0, .L800F08D8
|
||||
/* 89D3C 800F088C 3C02FF00 */ lui $v0, 0xff00
|
||||
/* 89D40 800F0890 8E2300B4 */ lw $v1, 0xb4($s1)
|
||||
/* 89D44 800F0894 3442FF00 */ ori $v0, $v0, 0xff00
|
||||
/* 89D48 800F0898 00621824 */ and $v1, $v1, $v0
|
||||
/* 89D4C 800F089C 3C021A00 */ lui $v0, 0x1a00
|
||||
/* 89D50 800F08A0 1062000D */ beq $v1, $v0, .L800F08D8
|
||||
/* 89D54 800F08A4 00041600 */ sll $v0, $a0, 0x18
|
||||
/* 89D58 800F08A8 00021E03 */ sra $v1, $v0, 0x18
|
||||
/* 89D5C 800F08AC 2402000A */ addiu $v0, $zero, 0xa
|
||||
/* 89D60 800F08B0 10620003 */ beq $v1, $v0, .L800F08C0
|
||||
/* 89D64 800F08B4 00000000 */ nop
|
||||
/* 89D68 800F08B8 14600004 */ bnez $v1, .L800F08CC
|
||||
/* 89D6C 800F08BC 24020004 */ addiu $v0, $zero, 4
|
||||
.L800F08C0:
|
||||
/* 89D70 800F08C0 8E220000 */ lw $v0, ($s1)
|
||||
/* 89D74 800F08C4 04400004 */ bltz $v0, .L800F08D8
|
||||
/* 89D78 800F08C8 24020004 */ addiu $v0, $zero, 4
|
||||
.L800F08CC:
|
||||
/* 89D7C 800F08CC 3C018011 */ lui $at, %hi(D_801094A4)
|
||||
/* 89D80 800F08D0 0803C276 */ j .L800F09D8
|
||||
/* 89D84 800F08D4 A42294A4 */ sh $v0, %lo(D_801094A4)($at)
|
||||
.L800F08D8:
|
||||
/* 89D88 800F08D8 3C048011 */ lui $a0, %hi(D_801094A4)
|
||||
/* 89D8C 800F08DC 248494A4 */ addiu $a0, $a0, %lo(D_801094A4)
|
||||
/* 89D90 800F08E0 94820000 */ lhu $v0, ($a0)
|
||||
/* 89D94 800F08E4 24430001 */ addiu $v1, $v0, 1
|
||||
/* 89D98 800F08E8 00021400 */ sll $v0, $v0, 0x10
|
||||
/* 89D9C 800F08EC 00021403 */ sra $v0, $v0, 0x10
|
||||
/* 89DA0 800F08F0 28420004 */ slti $v0, $v0, 4
|
||||
/* 89DA4 800F08F4 14400038 */ bnez $v0, .L800F09D8
|
||||
/* 89DA8 800F08F8 A4830000 */ sh $v1, ($a0)
|
||||
/* 89DAC 800F08FC C62C0084 */ lwc1 $f12, 0x84($s1)
|
||||
/* 89DB0 800F0900 A4800000 */ sh $zero, ($a0)
|
||||
/* 89DB4 800F0904 0C00A6C9 */ jal clamp_angle
|
||||
/* 89DB8 800F0908 46006307 */ neg.s $f12, $f12
|
||||
/* 89DBC 800F090C 3C0140C9 */ lui $at, 0x40c9
|
||||
/* 89DC0 800F0910 34210FD0 */ ori $at, $at, 0xfd0
|
||||
/* 89DC4 800F0914 44811000 */ mtc1 $at, $f2
|
||||
/* 89DC8 800F0918 00000000 */ nop
|
||||
/* 89DCC 800F091C 46020002 */ mul.s $f0, $f0, $f2
|
||||
/* 89DD0 800F0920 00000000 */ nop
|
||||
/* 89DD4 800F0924 27A6001C */ addiu $a2, $sp, 0x1c
|
||||
/* 89DD8 800F0928 3C0143B4 */ lui $at, 0x43b4
|
||||
/* 89DDC 800F092C 44816000 */ mtc1 $at, $f12
|
||||
/* 89DE0 800F0930 27A50018 */ addiu $a1, $sp, 0x18
|
||||
/* 89DE4 800F0934 0C00A82D */ jal sin_cos_rad
|
||||
/* 89DE8 800F0938 460C0303 */ div.s $f12, $f0, $f12
|
||||
/* 89DEC 800F093C 862200B2 */ lh $v0, 0xb2($s1)
|
||||
/* 89DF0 800F0940 C7A40018 */ lwc1 $f4, 0x18($sp)
|
||||
/* 89DF4 800F0944 44821000 */ mtc1 $v0, $f2
|
||||
/* 89DF8 800F0948 00000000 */ nop
|
||||
/* 89DFC 800F094C 468010A0 */ cvt.s.w $f2, $f2
|
||||
/* 89E00 800F0950 46041102 */ mul.s $f4, $f2, $f4
|
||||
/* 89E04 800F0954 00000000 */ nop
|
||||
/* 89E08 800F0958 C7A0001C */ lwc1 $f0, 0x1c($sp)
|
||||
/* 89E0C 800F095C 46001082 */ mul.s $f2, $f2, $f0
|
||||
/* 89E10 800F0960 00000000 */ nop
|
||||
/* 89E14 800F0964 3C013E4C */ lui $at, 0x3e4c
|
||||
/* 89E18 800F0968 3421CCCD */ ori $at, $at, 0xcccd
|
||||
/* 89E1C 800F096C 44810000 */ mtc1 $at, $f0
|
||||
/* 89E20 800F0970 00000000 */ nop
|
||||
/* 89E24 800F0974 46002102 */ mul.s $f4, $f4, $f0
|
||||
/* 89E28 800F0978 00000000 */ nop
|
||||
/* 89E2C 800F097C 46001082 */ mul.s $f2, $f2, $f0
|
||||
/* 89E30 800F0980 00000000 */ nop
|
||||
/* 89E34 800F0984 C62C0028 */ lwc1 $f12, 0x28($s1)
|
||||
/* 89E38 800F0988 46046300 */ add.s $f12, $f12, $f4
|
||||
/* 89E3C 800F098C C6200030 */ lwc1 $f0, 0x30($s1)
|
||||
/* 89E40 800F0990 3C108011 */ lui $s0, %hi(D_801094A8)
|
||||
/* 89E44 800F0994 261094A8 */ addiu $s0, $s0, %lo(D_801094A8)
|
||||
/* 89E48 800F0998 46020000 */ add.s $f0, $f0, $f2
|
||||
/* 89E4C 800F099C C6220084 */ lwc1 $f2, 0x84($s1)
|
||||
/* 89E50 800F09A0 3C013FC0 */ lui $at, 0x3fc0
|
||||
/* 89E54 800F09A4 44817000 */ mtc1 $at, $f14
|
||||
/* 89E58 800F09A8 46001087 */ neg.s $f2, $f2
|
||||
/* 89E5C 800F09AC 44060000 */ mfc1 $a2, $f0
|
||||
/* 89E60 800F09B0 C620002C */ lwc1 $f0, 0x2c($s1)
|
||||
/* 89E64 800F09B4 44071000 */ mfc1 $a3, $f2
|
||||
/* 89E68 800F09B8 460E0380 */ add.s $f14, $f0, $f14
|
||||
/* 89E6C 800F09BC C6000000 */ lwc1 $f0, ($s0)
|
||||
/* 89E70 800F09C0 46800020 */ cvt.s.w $f0, $f0
|
||||
/* 89E74 800F09C4 0C01BF44 */ jal fx_footprint
|
||||
/* 89E78 800F09C8 E7A00010 */ swc1 $f0, 0x10($sp)
|
||||
/* 89E7C 800F09CC 8E020000 */ lw $v0, ($s0)
|
||||
/* 89E80 800F09D0 2C420001 */ sltiu $v0, $v0, 1
|
||||
/* 89E84 800F09D4 AE020000 */ sw $v0, ($s0)
|
||||
.L800F09D8:
|
||||
/* 89E88 800F09D8 8FBF0028 */ lw $ra, 0x28($sp)
|
||||
/* 89E8C 800F09DC 8FB10024 */ lw $s1, 0x24($sp)
|
||||
/* 89E90 800F09E0 8FB00020 */ lw $s0, 0x20($sp)
|
||||
/* 89E94 800F09E4 03E00008 */ jr $ra
|
||||
/* 89E98 800F09E8 27BD0030 */ addiu $sp, $sp, 0x30
|
@ -1,92 +0,0 @@
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
|
||||
glabel func_800F09EC
|
||||
/* 89E9C 800F09EC 27BDFFE0 */ addiu $sp, $sp, -0x20
|
||||
/* 89EA0 800F09F0 AFB00018 */ sw $s0, 0x18($sp)
|
||||
/* 89EA4 800F09F4 3C108011 */ lui $s0, %hi(gPlayerStatus)
|
||||
/* 89EA8 800F09F8 2610EFC8 */ addiu $s0, $s0, %lo(gPlayerStatus)
|
||||
/* 89EAC 800F09FC AFBF001C */ sw $ra, 0x1c($sp)
|
||||
/* 89EB0 800F0A00 920400B4 */ lbu $a0, 0xb4($s0)
|
||||
/* 89EB4 800F0A04 2482FFFF */ addiu $v0, $a0, -1
|
||||
/* 89EB8 800F0A08 2C420002 */ sltiu $v0, $v0, 2
|
||||
/* 89EBC 800F0A0C 14400013 */ bnez $v0, .L800F0A5C
|
||||
/* 89EC0 800F0A10 3C02FF00 */ lui $v0, 0xff00
|
||||
/* 89EC4 800F0A14 8E0300B4 */ lw $v1, 0xb4($s0)
|
||||
/* 89EC8 800F0A18 3442FF00 */ ori $v0, $v0, 0xff00
|
||||
/* 89ECC 800F0A1C 00621824 */ and $v1, $v1, $v0
|
||||
/* 89ED0 800F0A20 3C021A00 */ lui $v0, 0x1a00
|
||||
/* 89ED4 800F0A24 1062000D */ beq $v1, $v0, .L800F0A5C
|
||||
/* 89ED8 800F0A28 00041600 */ sll $v0, $a0, 0x18
|
||||
/* 89EDC 800F0A2C 00021E03 */ sra $v1, $v0, 0x18
|
||||
/* 89EE0 800F0A30 2402000A */ addiu $v0, $zero, 0xa
|
||||
/* 89EE4 800F0A34 10620003 */ beq $v1, $v0, .L800F0A44
|
||||
/* 89EE8 800F0A38 00000000 */ nop
|
||||
/* 89EEC 800F0A3C 14600004 */ bnez $v1, .L800F0A50
|
||||
/* 89EF0 800F0A40 24020004 */ addiu $v0, $zero, 4
|
||||
.L800F0A44:
|
||||
/* 89EF4 800F0A44 8E020000 */ lw $v0, ($s0)
|
||||
/* 89EF8 800F0A48 04400004 */ bltz $v0, .L800F0A5C
|
||||
/* 89EFC 800F0A4C 24020004 */ addiu $v0, $zero, 4
|
||||
.L800F0A50:
|
||||
/* 89F00 800F0A50 3C018011 */ lui $at, %hi(D_801094AC)
|
||||
/* 89F04 800F0A54 0803C2CB */ j .L800F0B2C
|
||||
/* 89F08 800F0A58 A42294AC */ sh $v0, %lo(D_801094AC)($at)
|
||||
.L800F0A5C:
|
||||
/* 89F0C 800F0A5C 3C048011 */ lui $a0, %hi(D_801094AC)
|
||||
/* 89F10 800F0A60 248494AC */ addiu $a0, $a0, %lo(D_801094AC)
|
||||
/* 89F14 800F0A64 94820000 */ lhu $v0, ($a0)
|
||||
/* 89F18 800F0A68 24430001 */ addiu $v1, $v0, 1
|
||||
/* 89F1C 800F0A6C 00021400 */ sll $v0, $v0, 0x10
|
||||
/* 89F20 800F0A70 00021403 */ sra $v0, $v0, 0x10
|
||||
/* 89F24 800F0A74 28420004 */ slti $v0, $v0, 4
|
||||
/* 89F28 800F0A78 1440002C */ bnez $v0, .L800F0B2C
|
||||
/* 89F2C 800F0A7C A4830000 */ sh $v1, ($a0)
|
||||
/* 89F30 800F0A80 C60C0084 */ lwc1 $f12, 0x84($s0)
|
||||
/* 89F34 800F0A84 A4800000 */ sh $zero, ($a0)
|
||||
/* 89F38 800F0A88 0C00A6C9 */ jal clamp_angle
|
||||
/* 89F3C 800F0A8C 46006307 */ neg.s $f12, $f12
|
||||
/* 89F40 800F0A90 3C0140C9 */ lui $at, 0x40c9
|
||||
/* 89F44 800F0A94 34210FD0 */ ori $at, $at, 0xfd0
|
||||
/* 89F48 800F0A98 44811000 */ mtc1 $at, $f2
|
||||
/* 89F4C 800F0A9C 00000000 */ nop
|
||||
/* 89F50 800F0AA0 46020002 */ mul.s $f0, $f0, $f2
|
||||
/* 89F54 800F0AA4 00000000 */ nop
|
||||
/* 89F58 800F0AA8 27A50010 */ addiu $a1, $sp, 0x10
|
||||
/* 89F5C 800F0AAC 3C0143B4 */ lui $at, 0x43b4
|
||||
/* 89F60 800F0AB0 44816000 */ mtc1 $at, $f12
|
||||
/* 89F64 800F0AB4 27A60014 */ addiu $a2, $sp, 0x14
|
||||
/* 89F68 800F0AB8 0C00A82D */ jal sin_cos_rad
|
||||
/* 89F6C 800F0ABC 460C0303 */ div.s $f12, $f0, $f12
|
||||
/* 89F70 800F0AC0 860200B2 */ lh $v0, 0xb2($s0)
|
||||
/* 89F74 800F0AC4 C7A40010 */ lwc1 $f4, 0x10($sp)
|
||||
/* 89F78 800F0AC8 44821000 */ mtc1 $v0, $f2
|
||||
/* 89F7C 800F0ACC 00000000 */ nop
|
||||
/* 89F80 800F0AD0 468010A0 */ cvt.s.w $f2, $f2
|
||||
/* 89F84 800F0AD4 46041102 */ mul.s $f4, $f2, $f4
|
||||
/* 89F88 800F0AD8 00000000 */ nop
|
||||
/* 89F8C 800F0ADC C7A00014 */ lwc1 $f0, 0x14($sp)
|
||||
/* 89F90 800F0AE0 46001082 */ mul.s $f2, $f2, $f0
|
||||
/* 89F94 800F0AE4 00000000 */ nop
|
||||
/* 89F98 800F0AE8 3C013E4C */ lui $at, 0x3e4c
|
||||
/* 89F9C 800F0AEC 3421CCCD */ ori $at, $at, 0xcccd
|
||||
/* 89FA0 800F0AF0 44810000 */ mtc1 $at, $f0
|
||||
/* 89FA4 800F0AF4 00000000 */ nop
|
||||
/* 89FA8 800F0AF8 46002102 */ mul.s $f4, $f4, $f0
|
||||
/* 89FAC 800F0AFC 00000000 */ nop
|
||||
/* 89FB0 800F0B00 46001082 */ mul.s $f2, $f2, $f0
|
||||
/* 89FB4 800F0B04 00000000 */ nop
|
||||
/* 89FB8 800F0B08 C6000028 */ lwc1 $f0, 0x28($s0)
|
||||
/* 89FBC 800F0B0C 46040000 */ add.s $f0, $f0, $f4
|
||||
/* 89FC0 800F0B10 44050000 */ mfc1 $a1, $f0
|
||||
/* 89FC4 800F0B14 C6000030 */ lwc1 $f0, 0x30($s0)
|
||||
/* 89FC8 800F0B18 46020000 */ add.s $f0, $f0, $f2
|
||||
/* 89FCC 800F0B1C 3C064220 */ lui $a2, 0x4220
|
||||
/* 89FD0 800F0B20 44070000 */ mfc1 $a3, $f0
|
||||
/* 89FD4 800F0B24 0C01C244 */ jal fx_falling_leaves
|
||||
/* 89FD8 800F0B28 0000202D */ daddu $a0, $zero, $zero
|
||||
.L800F0B2C:
|
||||
/* 89FDC 800F0B2C 8FBF001C */ lw $ra, 0x1c($sp)
|
||||
/* 89FE0 800F0B30 8FB00018 */ lw $s0, 0x18($sp)
|
||||
/* 89FE4 800F0B34 03E00008 */ jr $ra
|
||||
/* 89FE8 800F0B38 27BD0020 */ addiu $sp, $sp, 0x20
|
@ -1,96 +0,0 @@
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
|
||||
glabel func_800F0B3C
|
||||
/* 89FEC 800F0B3C 27BDFFD8 */ addiu $sp, $sp, -0x28
|
||||
/* 89FF0 800F0B40 AFB00020 */ sw $s0, 0x20($sp)
|
||||
/* 89FF4 800F0B44 3C108011 */ lui $s0, %hi(gPlayerStatus)
|
||||
/* 89FF8 800F0B48 2610EFC8 */ addiu $s0, $s0, %lo(gPlayerStatus)
|
||||
/* 89FFC 800F0B4C AFBF0024 */ sw $ra, 0x24($sp)
|
||||
/* 8A000 800F0B50 920400B4 */ lbu $a0, 0xb4($s0)
|
||||
/* 8A004 800F0B54 2482FFFF */ addiu $v0, $a0, -1
|
||||
/* 8A008 800F0B58 2C420002 */ sltiu $v0, $v0, 2
|
||||
/* 8A00C 800F0B5C 14400013 */ bnez $v0, .L800F0BAC
|
||||
/* 8A010 800F0B60 3C02FF00 */ lui $v0, 0xff00
|
||||
/* 8A014 800F0B64 8E0300B4 */ lw $v1, 0xb4($s0)
|
||||
/* 8A018 800F0B68 3442FF00 */ ori $v0, $v0, 0xff00
|
||||
/* 8A01C 800F0B6C 00621824 */ and $v1, $v1, $v0
|
||||
/* 8A020 800F0B70 3C021A00 */ lui $v0, 0x1a00
|
||||
/* 8A024 800F0B74 1062000D */ beq $v1, $v0, .L800F0BAC
|
||||
/* 8A028 800F0B78 00041600 */ sll $v0, $a0, 0x18
|
||||
/* 8A02C 800F0B7C 00021E03 */ sra $v1, $v0, 0x18
|
||||
/* 8A030 800F0B80 2402000A */ addiu $v0, $zero, 0xa
|
||||
/* 8A034 800F0B84 10620003 */ beq $v1, $v0, .L800F0B94
|
||||
/* 8A038 800F0B88 00000000 */ nop
|
||||
/* 8A03C 800F0B8C 14600004 */ bnez $v1, .L800F0BA0
|
||||
/* 8A040 800F0B90 24020004 */ addiu $v0, $zero, 4
|
||||
.L800F0B94:
|
||||
/* 8A044 800F0B94 8E020000 */ lw $v0, ($s0)
|
||||
/* 8A048 800F0B98 04400004 */ bltz $v0, .L800F0BAC
|
||||
/* 8A04C 800F0B9C 24020004 */ addiu $v0, $zero, 4
|
||||
.L800F0BA0:
|
||||
/* 8A050 800F0BA0 3C018011 */ lui $at, %hi(D_801094AE)
|
||||
/* 8A054 800F0BA4 0803C323 */ j .L800F0C8C
|
||||
/* 8A058 800F0BA8 A42294AE */ sh $v0, %lo(D_801094AE)($at)
|
||||
.L800F0BAC:
|
||||
/* 8A05C 800F0BAC 3C048011 */ lui $a0, %hi(D_801094AE)
|
||||
/* 8A060 800F0BB0 248494AE */ addiu $a0, $a0, %lo(D_801094AE)
|
||||
/* 8A064 800F0BB4 94820000 */ lhu $v0, ($a0)
|
||||
/* 8A068 800F0BB8 24430001 */ addiu $v1, $v0, 1
|
||||
/* 8A06C 800F0BBC 00021400 */ sll $v0, $v0, 0x10
|
||||
/* 8A070 800F0BC0 00021403 */ sra $v0, $v0, 0x10
|
||||
/* 8A074 800F0BC4 28420004 */ slti $v0, $v0, 4
|
||||
/* 8A078 800F0BC8 14400030 */ bnez $v0, .L800F0C8C
|
||||
/* 8A07C 800F0BCC A4830000 */ sh $v1, ($a0)
|
||||
/* 8A080 800F0BD0 C60C0084 */ lwc1 $f12, 0x84($s0)
|
||||
/* 8A084 800F0BD4 A4800000 */ sh $zero, ($a0)
|
||||
/* 8A088 800F0BD8 0C00A6C9 */ jal clamp_angle
|
||||
/* 8A08C 800F0BDC 46006307 */ neg.s $f12, $f12
|
||||
/* 8A090 800F0BE0 3C0140C9 */ lui $at, 0x40c9
|
||||
/* 8A094 800F0BE4 34210FD0 */ ori $at, $at, 0xfd0
|
||||
/* 8A098 800F0BE8 44811000 */ mtc1 $at, $f2
|
||||
/* 8A09C 800F0BEC 00000000 */ nop
|
||||
/* 8A0A0 800F0BF0 46020002 */ mul.s $f0, $f0, $f2
|
||||
/* 8A0A4 800F0BF4 00000000 */ nop
|
||||
/* 8A0A8 800F0BF8 27A50018 */ addiu $a1, $sp, 0x18
|
||||
/* 8A0AC 800F0BFC 3C0143B4 */ lui $at, 0x43b4
|
||||
/* 8A0B0 800F0C00 44816000 */ mtc1 $at, $f12
|
||||
/* 8A0B4 800F0C04 27A6001C */ addiu $a2, $sp, 0x1c
|
||||
/* 8A0B8 800F0C08 0C00A82D */ jal sin_cos_rad
|
||||
/* 8A0BC 800F0C0C 460C0303 */ div.s $f12, $f0, $f12
|
||||
/* 8A0C0 800F0C10 860200B2 */ lh $v0, 0xb2($s0)
|
||||
/* 8A0C4 800F0C14 C7A40018 */ lwc1 $f4, 0x18($sp)
|
||||
/* 8A0C8 800F0C18 44821000 */ mtc1 $v0, $f2
|
||||
/* 8A0CC 800F0C1C 00000000 */ nop
|
||||
/* 8A0D0 800F0C20 468010A0 */ cvt.s.w $f2, $f2
|
||||
/* 8A0D4 800F0C24 46041102 */ mul.s $f4, $f2, $f4
|
||||
/* 8A0D8 800F0C28 00000000 */ nop
|
||||
/* 8A0DC 800F0C2C C7A0001C */ lwc1 $f0, 0x1c($sp)
|
||||
/* 8A0E0 800F0C30 46001082 */ mul.s $f2, $f2, $f0
|
||||
/* 8A0E4 800F0C34 00000000 */ nop
|
||||
/* 8A0E8 800F0C38 3C013E4C */ lui $at, 0x3e4c
|
||||
/* 8A0EC 800F0C3C 3421CCCD */ ori $at, $at, 0xcccd
|
||||
/* 8A0F0 800F0C40 44810000 */ mtc1 $at, $f0
|
||||
/* 8A0F4 800F0C44 00000000 */ nop
|
||||
/* 8A0F8 800F0C48 46002102 */ mul.s $f4, $f4, $f0
|
||||
/* 8A0FC 800F0C4C 00000000 */ nop
|
||||
/* 8A100 800F0C50 46001082 */ mul.s $f2, $f2, $f0
|
||||
/* 8A104 800F0C54 00000000 */ nop
|
||||
/* 8A108 800F0C58 44803000 */ mtc1 $zero, $f6
|
||||
/* 8A10C 800F0C5C C600002C */ lwc1 $f0, 0x2c($s0)
|
||||
/* 8A110 800F0C60 46060000 */ add.s $f0, $f0, $f6
|
||||
/* 8A114 800F0C64 44060000 */ mfc1 $a2, $f0
|
||||
/* 8A118 800F0C68 C6000028 */ lwc1 $f0, 0x28($s0)
|
||||
/* 8A11C 800F0C6C 46040000 */ add.s $f0, $f0, $f4
|
||||
/* 8A120 800F0C70 44050000 */ mfc1 $a1, $f0
|
||||
/* 8A124 800F0C74 C6000030 */ lwc1 $f0, 0x30($s0)
|
||||
/* 8A128 800F0C78 46020000 */ add.s $f0, $f0, $f2
|
||||
/* 8A12C 800F0C7C 44070000 */ mfc1 $a3, $f0
|
||||
/* 8A130 800F0C80 0000202D */ daddu $a0, $zero, $zero
|
||||
/* 8A134 800F0C84 0C01C16C */ jal fx_rising_bubble
|
||||
/* 8A138 800F0C88 E7A60010 */ swc1 $f6, 0x10($sp)
|
||||
.L800F0C8C:
|
||||
/* 8A13C 800F0C8C 8FBF0024 */ lw $ra, 0x24($sp)
|
||||
/* 8A140 800F0C90 8FB00020 */ lw $s0, 0x20($sp)
|
||||
/* 8A144 800F0C94 03E00008 */ jr $ra
|
||||
/* 8A148 800F0C98 27BD0028 */ addiu $sp, $sp, 0x28
|
@ -1,197 +0,0 @@
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
|
||||
.section .rodata
|
||||
|
||||
dlabel D_8010C310
|
||||
.double 0.1
|
||||
|
||||
dlabel D_8010C318
|
||||
.double 0.92
|
||||
|
||||
dlabel D_8010C320
|
||||
.double 0.04, 0.0
|
||||
|
||||
.section .text
|
||||
|
||||
glabel func_800F0D80
|
||||
/* 8A230 800F0D80 27BDFFA8 */ addiu $sp, $sp, -0x58
|
||||
/* 8A234 800F0D84 F7B60040 */ sdc1 $f22, 0x40($sp)
|
||||
/* 8A238 800F0D88 3C018011 */ lui $at, %hi(D_8010C310)
|
||||
/* 8A23C 800F0D8C D436C310 */ ldc1 $f22, %lo(D_8010C310)($at)
|
||||
/* 8A240 800F0D90 F7B40038 */ sdc1 $f20, 0x38($sp)
|
||||
/* 8A244 800F0D94 3C018011 */ lui $at, %hi(D_8010C318)
|
||||
/* 8A248 800F0D98 D434C318 */ ldc1 $f20, %lo(D_8010C318)($at)
|
||||
/* 8A24C 800F0D9C AFB40020 */ sw $s4, 0x20($sp)
|
||||
/* 8A250 800F0DA0 0000A02D */ daddu $s4, $zero, $zero
|
||||
/* 8A254 800F0DA4 AFBE0030 */ sw $fp, 0x30($sp)
|
||||
/* 8A258 800F0DA8 3C1E8011 */ lui $fp, %hi(D_80109820)
|
||||
/* 8A25C 800F0DAC 27DE9820 */ addiu $fp, $fp, %lo(D_80109820)
|
||||
/* 8A260 800F0DB0 AFB60028 */ sw $s6, 0x28($sp)
|
||||
/* 8A264 800F0DB4 2416007F */ addiu $s6, $zero, 0x7f
|
||||
/* 8A268 800F0DB8 AFB7002C */ sw $s7, 0x2c($sp)
|
||||
/* 8A26C 800F0DBC 3C178011 */ lui $s7, %hi(D_80109800)
|
||||
/* 8A270 800F0DC0 26F79800 */ addiu $s7, $s7, %lo(D_80109800)
|
||||
/* 8A274 800F0DC4 AFB3001C */ sw $s3, 0x1c($sp)
|
||||
/* 8A278 800F0DC8 0280982D */ daddu $s3, $s4, $zero
|
||||
/* 8A27C 800F0DCC AFBF0034 */ sw $ra, 0x34($sp)
|
||||
/* 8A280 800F0DD0 AFB50024 */ sw $s5, 0x24($sp)
|
||||
/* 8A284 800F0DD4 AFB20018 */ sw $s2, 0x18($sp)
|
||||
/* 8A288 800F0DD8 AFB10014 */ sw $s1, 0x14($sp)
|
||||
/* 8A28C 800F0DDC AFB00010 */ sw $s0, 0x10($sp)
|
||||
/* 8A290 800F0DE0 F7BA0050 */ sdc1 $f26, 0x50($sp)
|
||||
/* 8A294 800F0DE4 F7B80048 */ sdc1 $f24, 0x48($sp)
|
||||
.L800F0DE8:
|
||||
/* 8A298 800F0DE8 3C058011 */ lui $a1, %hi(D_8010D000)
|
||||
/* 8A29C 800F0DEC 24A5D000 */ addiu $a1, $a1, %lo(D_8010D000)
|
||||
/* 8A2A0 800F0DF0 02651821 */ addu $v1, $s3, $a1
|
||||
/* 8A2A4 800F0DF4 90620000 */ lbu $v0, ($v1)
|
||||
/* 8A2A8 800F0DF8 5040007A */ beql $v0, $zero, .L800F0FE4
|
||||
/* 8A2AC 800F0DFC 26940001 */ addiu $s4, $s4, 1
|
||||
/* 8A2B0 800F0E00 90620001 */ lbu $v0, 1($v1)
|
||||
/* 8A2B4 800F0E04 2442FFFF */ addiu $v0, $v0, -1
|
||||
/* 8A2B8 800F0E08 A0620001 */ sb $v0, 1($v1)
|
||||
/* 8A2BC 800F0E0C 90620002 */ lbu $v0, 2($v1)
|
||||
/* 8A2C0 800F0E10 80640001 */ lb $a0, 1($v1)
|
||||
/* 8A2C4 800F0E14 24420001 */ addiu $v0, $v0, 1
|
||||
/* 8A2C8 800F0E18 04810003 */ bgez $a0, .L800F0E28
|
||||
/* 8A2CC 800F0E1C A0620002 */ sb $v0, 2($v1)
|
||||
/* 8A2D0 800F0E20 0803C3F8 */ j .L800F0FE0
|
||||
/* 8A2D4 800F0E24 A0600000 */ sb $zero, ($v1)
|
||||
.L800F0E28:
|
||||
/* 8A2D8 800F0E28 0080A82D */ daddu $s5, $a0, $zero
|
||||
/* 8A2DC 800F0E2C 24120001 */ addiu $s2, $zero, 1
|
||||
/* 8A2E0 800F0E30 24700034 */ addiu $s0, $v1, 0x34
|
||||
/* 8A2E4 800F0E34 0000882D */ daddu $s1, $zero, $zero
|
||||
/* 8A2E8 800F0E38 C47A0008 */ lwc1 $f26, 8($v1)
|
||||
/* 8A2EC 800F0E3C C478000C */ lwc1 $f24, 0xc($v1)
|
||||
.L800F0E40:
|
||||
/* 8A2F0 800F0E40 9202FFEF */ lbu $v0, -0x11($s0)
|
||||
/* 8A2F4 800F0E44 24420001 */ addiu $v0, $v0, 1
|
||||
/* 8A2F8 800F0E48 A202FFEF */ sb $v0, -0x11($s0)
|
||||
/* 8A2FC 800F0E4C 00021600 */ sll $v0, $v0, 0x18
|
||||
/* 8A300 800F0E50 00021603 */ sra $v0, $v0, 0x18
|
||||
/* 8A304 800F0E54 2842001E */ slti $v0, $v0, 0x1e
|
||||
/* 8A308 800F0E58 14400006 */ bnez $v0, .L800F0E74
|
||||
/* 8A30C 800F0E5C 2AA2001E */ slti $v0, $s5, 0x1e
|
||||
/* 8A310 800F0E60 10400003 */ beqz $v0, .L800F0E70
|
||||
/* 8A314 800F0E64 2402FFE1 */ addiu $v0, $zero, -0x1f
|
||||
/* 8A318 800F0E68 0803C39D */ j .L800F0E74
|
||||
/* 8A31C 800F0E6C A202FFEF */ sb $v0, -0x11($s0)
|
||||
.L800F0E70:
|
||||
/* 8A320 800F0E70 A200FFEF */ sb $zero, -0x11($s0)
|
||||
.L800F0E74:
|
||||
/* 8A324 800F0E74 8202FFEF */ lb $v0, -0x11($s0)
|
||||
/* 8A328 800F0E78 04420055 */ bltzl $v0, .L800F0FD0
|
||||
/* 8A32C 800F0E7C 26310002 */ addiu $s1, $s1, 2
|
||||
/* 8A330 800F0E80 14400031 */ bnez $v0, .L800F0F48
|
||||
/* 8A334 800F0E84 023E1821 */ addu $v1, $s1, $fp
|
||||
/* 8A338 800F0E88 80620000 */ lb $v0, ($v1)
|
||||
/* 8A33C 800F0E8C 44821000 */ mtc1 $v0, $f2
|
||||
/* 8A340 800F0E90 00000000 */ nop
|
||||
/* 8A344 800F0E94 468010A0 */ cvt.s.w $f2, $f2
|
||||
/* 8A348 800F0E98 460010A1 */ cvt.d.s $f2, $f2
|
||||
/* 8A34C 800F0E9C 46361082 */ mul.d $f2, $f2, $f22
|
||||
/* 8A350 800F0EA0 00000000 */ nop
|
||||
/* 8A354 800F0EA4 80620001 */ lb $v0, 1($v1)
|
||||
/* 8A358 800F0EA8 44820000 */ mtc1 $v0, $f0
|
||||
/* 8A35C 800F0EAC 00000000 */ nop
|
||||
/* 8A360 800F0EB0 46800020 */ cvt.s.w $f0, $f0
|
||||
/* 8A364 800F0EB4 46000007 */ neg.s $f0, $f0
|
||||
/* 8A368 800F0EB8 46000021 */ cvt.d.s $f0, $f0
|
||||
/* 8A36C 800F0EBC 46360002 */ mul.d $f0, $f0, $f22
|
||||
/* 8A370 800F0EC0 00000000 */ nop
|
||||
/* 8A374 800F0EC4 3C013F80 */ lui $at, 0x3f80
|
||||
/* 8A378 800F0EC8 44812000 */ mtc1 $at, $f4
|
||||
/* 8A37C 800F0ECC 2404007F */ addiu $a0, $zero, 0x7f
|
||||
/* 8A380 800F0ED0 E61AFFF0 */ swc1 $f26, -0x10($s0)
|
||||
/* 8A384 800F0ED4 E618FFF4 */ swc1 $f24, -0xc($s0)
|
||||
/* 8A388 800F0ED8 E6040000 */ swc1 $f4, ($s0)
|
||||
/* 8A38C 800F0EDC 462010A0 */ cvt.s.d $f2, $f2
|
||||
/* 8A390 800F0EE0 E602FFF8 */ swc1 $f2, -8($s0)
|
||||
/* 8A394 800F0EE4 46200020 */ cvt.s.d $f0, $f0
|
||||
/* 8A398 800F0EE8 0C00A67F */ jal rand_int
|
||||
/* 8A39C 800F0EEC E600FFFC */ swc1 $f0, -4($s0)
|
||||
/* 8A3A0 800F0EF0 A202FFEB */ sb $v0, -0x15($s0)
|
||||
/* 8A3A4 800F0EF4 304400FF */ andi $a0, $v0, 0xff
|
||||
/* 8A3A8 800F0EF8 0C00A67F */ jal rand_int
|
||||
/* 8A3AC 800F0EFC 02C42023 */ subu $a0, $s6, $a0
|
||||
/* 8A3B0 800F0F00 A202FFEC */ sb $v0, -0x14($s0)
|
||||
/* 8A3B4 800F0F04 304400FF */ andi $a0, $v0, 0xff
|
||||
/* 8A3B8 800F0F08 9202FFEB */ lbu $v0, -0x15($s0)
|
||||
/* 8A3BC 800F0F0C 02C42023 */ subu $a0, $s6, $a0
|
||||
/* 8A3C0 800F0F10 0C00A67F */ jal rand_int
|
||||
/* 8A3C4 800F0F14 00822023 */ subu $a0, $a0, $v0
|
||||
/* 8A3C8 800F0F18 9203FFEB */ lbu $v1, -0x15($s0)
|
||||
/* 8A3CC 800F0F1C A202FFED */ sb $v0, -0x13($s0)
|
||||
/* 8A3D0 800F0F20 240200FF */ addiu $v0, $zero, 0xff
|
||||
/* 8A3D4 800F0F24 A202FFEE */ sb $v0, -0x12($s0)
|
||||
/* 8A3D8 800F0F28 9202FFEC */ lbu $v0, -0x14($s0)
|
||||
/* 8A3DC 800F0F2C 24630080 */ addiu $v1, $v1, 0x80
|
||||
/* 8A3E0 800F0F30 A203FFEB */ sb $v1, -0x15($s0)
|
||||
/* 8A3E4 800F0F34 9203FFED */ lbu $v1, -0x13($s0)
|
||||
/* 8A3E8 800F0F38 24420080 */ addiu $v0, $v0, 0x80
|
||||
/* 8A3EC 800F0F3C A202FFEC */ sb $v0, -0x14($s0)
|
||||
/* 8A3F0 800F0F40 24630080 */ addiu $v1, $v1, 0x80
|
||||
/* 8A3F4 800F0F44 A203FFED */ sb $v1, -0x13($s0)
|
||||
.L800F0F48:
|
||||
/* 8A3F8 800F0F48 C600FFF8 */ lwc1 $f0, -8($s0)
|
||||
/* 8A3FC 800F0F4C 46000021 */ cvt.d.s $f0, $f0
|
||||
/* 8A400 800F0F50 46340002 */ mul.d $f0, $f0, $f20
|
||||
/* 8A404 800F0F54 00000000 */ nop
|
||||
/* 8A408 800F0F58 C602FFFC */ lwc1 $f2, -4($s0)
|
||||
/* 8A40C 800F0F5C 460010A1 */ cvt.d.s $f2, $f2
|
||||
/* 8A410 800F0F60 46341082 */ mul.d $f2, $f2, $f20
|
||||
/* 8A414 800F0F64 00000000 */ nop
|
||||
/* 8A418 800F0F68 C608FFF0 */ lwc1 $f8, -0x10($s0)
|
||||
/* 8A41C 800F0F6C C604FFF8 */ lwc1 $f4, -8($s0)
|
||||
/* 8A420 800F0F70 C606FFF4 */ lwc1 $f6, -0xc($s0)
|
||||
/* 8A424 800F0F74 46044200 */ add.s $f8, $f8, $f4
|
||||
/* 8A428 800F0F78 C604FFFC */ lwc1 $f4, -4($s0)
|
||||
/* 8A42C 800F0F7C 8202FFEF */ lb $v0, -0x11($s0)
|
||||
/* 8A430 800F0F80 46043180 */ add.s $f6, $f6, $f4
|
||||
/* 8A434 800F0F84 00571021 */ addu $v0, $v0, $s7
|
||||
/* 8A438 800F0F88 E608FFF0 */ swc1 $f8, -0x10($s0)
|
||||
/* 8A43C 800F0F8C E606FFF4 */ swc1 $f6, -0xc($s0)
|
||||
/* 8A440 800F0F90 46200020 */ cvt.s.d $f0, $f0
|
||||
/* 8A444 800F0F94 462010A0 */ cvt.s.d $f2, $f2
|
||||
/* 8A448 800F0F98 E600FFF8 */ swc1 $f0, -8($s0)
|
||||
/* 8A44C 800F0F9C E602FFFC */ swc1 $f2, -4($s0)
|
||||
/* 8A450 800F0FA0 90420000 */ lbu $v0, ($v0)
|
||||
/* 8A454 800F0FA4 3C018011 */ lui $at, %hi(D_8010C320)
|
||||
/* 8A458 800F0FA8 D422C320 */ ldc1 $f2, %lo(D_8010C320)($at)
|
||||
/* 8A45C 800F0FAC 44820000 */ mtc1 $v0, $f0
|
||||
/* 8A460 800F0FB0 00000000 */ nop
|
||||
/* 8A464 800F0FB4 46800020 */ cvt.s.w $f0, $f0
|
||||
/* 8A468 800F0FB8 46000021 */ cvt.d.s $f0, $f0
|
||||
/* 8A46C 800F0FBC 46220002 */ mul.d $f0, $f0, $f2
|
||||
/* 8A470 800F0FC0 00000000 */ nop
|
||||
/* 8A474 800F0FC4 46200020 */ cvt.s.d $f0, $f0
|
||||
/* 8A478 800F0FC8 E6000000 */ swc1 $f0, ($s0)
|
||||
/* 8A47C 800F0FCC 26310002 */ addiu $s1, $s1, 2
|
||||
.L800F0FD0:
|
||||
/* 8A480 800F0FD0 26520001 */ addiu $s2, $s2, 1
|
||||
/* 8A484 800F0FD4 2A420039 */ slti $v0, $s2, 0x39
|
||||
/* 8A488 800F0FD8 1440FF99 */ bnez $v0, .L800F0E40
|
||||
/* 8A48C 800F0FDC 2610001C */ addiu $s0, $s0, 0x1c
|
||||
.L800F0FE0:
|
||||
/* 8A490 800F0FE0 26940001 */ addiu $s4, $s4, 1
|
||||
.L800F0FE4:
|
||||
/* 8A494 800F0FE4 1A80FF80 */ blez $s4, .L800F0DE8
|
||||
/* 8A498 800F0FE8 2673063C */ addiu $s3, $s3, 0x63c
|
||||
/* 8A49C 800F0FEC 8FBF0034 */ lw $ra, 0x34($sp)
|
||||
/* 8A4A0 800F0FF0 8FBE0030 */ lw $fp, 0x30($sp)
|
||||
/* 8A4A4 800F0FF4 8FB7002C */ lw $s7, 0x2c($sp)
|
||||
/* 8A4A8 800F0FF8 8FB60028 */ lw $s6, 0x28($sp)
|
||||
/* 8A4AC 800F0FFC 8FB50024 */ lw $s5, 0x24($sp)
|
||||
/* 8A4B0 800F1000 8FB40020 */ lw $s4, 0x20($sp)
|
||||
/* 8A4B4 800F1004 8FB3001C */ lw $s3, 0x1c($sp)
|
||||
/* 8A4B8 800F1008 8FB20018 */ lw $s2, 0x18($sp)
|
||||
/* 8A4BC 800F100C 8FB10014 */ lw $s1, 0x14($sp)
|
||||
/* 8A4C0 800F1010 8FB00010 */ lw $s0, 0x10($sp)
|
||||
/* 8A4C4 800F1014 D7BA0050 */ ldc1 $f26, 0x50($sp)
|
||||
/* 8A4C8 800F1018 D7B80048 */ ldc1 $f24, 0x48($sp)
|
||||
/* 8A4CC 800F101C D7B60040 */ ldc1 $f22, 0x40($sp)
|
||||
/* 8A4D0 800F1020 D7B40038 */ ldc1 $f20, 0x38($sp)
|
||||
/* 8A4D4 800F1024 03E00008 */ jr $ra
|
||||
/* 8A4D8 800F1028 27BD0058 */ addiu $sp, $sp, 0x58
|
@ -1,233 +0,0 @@
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
|
||||
glabel func_800F102C
|
||||
/* 8A4DC 800F102C 27BDFF28 */ addiu $sp, $sp, -0xd8
|
||||
/* 8A4E0 800F1030 3C090050 */ lui $t1, 0x50
|
||||
/* 8A4E4 800F1034 352903C0 */ ori $t1, $t1, 0x3c0
|
||||
/* 8A4E8 800F1038 3C0ADC08 */ lui $t2, 0xdc08
|
||||
/* 8A4EC 800F103C 354A0008 */ ori $t2, $t2, 8
|
||||
/* 8A4F0 800F1040 27A40020 */ addiu $a0, $sp, 0x20
|
||||
/* 8A4F4 800F1044 AFB100A4 */ sw $s1, 0xa4($sp)
|
||||
/* 8A4F8 800F1048 3C110001 */ lui $s1, 1
|
||||
/* 8A4FC 800F104C 36311630 */ ori $s1, $s1, 0x1630
|
||||
/* 8A500 800F1050 AFB700BC */ sw $s7, 0xbc($sp)
|
||||
/* 8A504 800F1054 0000B82D */ daddu $s7, $zero, $zero
|
||||
/* 8A508 800F1058 AFB600B8 */ sw $s6, 0xb8($sp)
|
||||
/* 8A50C 800F105C 27B60060 */ addiu $s6, $sp, 0x60
|
||||
/* 8A510 800F1060 3C02800A */ lui $v0, %hi(gDisplayContext)
|
||||
/* 8A514 800F1064 2442A674 */ addiu $v0, $v0, %lo(gDisplayContext)
|
||||
/* 8A518 800F1068 AFBE00C0 */ sw $fp, 0xc0($sp)
|
||||
/* 8A51C 800F106C 0040F02D */ daddu $fp, $v0, $zero
|
||||
/* 8A520 800F1070 3C028007 */ lui $v0, %hi(gMatrixListPos)
|
||||
/* 8A524 800F1074 244241F0 */ addiu $v0, $v0, %lo(gMatrixListPos)
|
||||
/* 8A528 800F1078 AFB300AC */ sw $s3, 0xac($sp)
|
||||
/* 8A52C 800F107C 0040982D */ daddu $s3, $v0, $zero
|
||||
/* 8A530 800F1080 AFB500B4 */ sw $s5, 0xb4($sp)
|
||||
/* 8A534 800F1084 3C150001 */ lui $s5, 1
|
||||
/* 8A538 800F1088 36B51630 */ ori $s5, $s5, 0x1630
|
||||
/* 8A53C 800F108C AFB400B0 */ sw $s4, 0xb0($sp)
|
||||
/* 8A540 800F1090 02E0A02D */ daddu $s4, $s7, $zero
|
||||
/* 8A544 800F1094 AFB000A0 */ sw $s0, 0xa0($sp)
|
||||
/* 8A548 800F1098 3C10800A */ lui $s0, %hi(gMasterGfxPos)
|
||||
/* 8A54C 800F109C 2610A66C */ addiu $s0, $s0, %lo(gMasterGfxPos)
|
||||
/* 8A550 800F10A0 3C02E700 */ lui $v0, 0xe700
|
||||
/* 8A554 800F10A4 AFBF00C4 */ sw $ra, 0xc4($sp)
|
||||
/* 8A558 800F10A8 AFB200A8 */ sw $s2, 0xa8($sp)
|
||||
/* 8A55C 800F10AC F7B600D0 */ sdc1 $f22, 0xd0($sp)
|
||||
/* 8A560 800F10B0 F7B400C8 */ sdc1 $f20, 0xc8($sp)
|
||||
/* 8A564 800F10B4 8E030000 */ lw $v1, ($s0)
|
||||
/* 8A568 800F10B8 3C0643A0 */ lui $a2, 0x43a0
|
||||
/* 8A56C 800F10BC 3C074370 */ lui $a3, 0x4370
|
||||
/* 8A570 800F10C0 44800000 */ mtc1 $zero, $f0
|
||||
/* 8A574 800F10C4 3C0142C8 */ lui $at, 0x42c8
|
||||
/* 8A578 800F10C8 44811000 */ mtc1 $at, $f2
|
||||
/* 8A57C 800F10CC 3C013F80 */ lui $at, 0x3f80
|
||||
/* 8A580 800F10D0 44812000 */ mtc1 $at, $f4
|
||||
/* 8A584 800F10D4 0060402D */ daddu $t0, $v1, $zero
|
||||
/* 8A588 800F10D8 44050000 */ mfc1 $a1, $f0
|
||||
/* 8A58C 800F10DC 3C01C2C8 */ lui $at, 0xc2c8
|
||||
/* 8A590 800F10E0 44810000 */ mtc1 $at, $f0
|
||||
/* 8A594 800F10E4 24630008 */ addiu $v1, $v1, 8
|
||||
/* 8A598 800F10E8 AE030000 */ sw $v1, ($s0)
|
||||
/* 8A59C 800F10EC AD020000 */ sw $v0, ($t0)
|
||||
/* 8A5A0 800F10F0 24620008 */ addiu $v0, $v1, 8
|
||||
/* 8A5A4 800F10F4 AD000004 */ sw $zero, 4($t0)
|
||||
/* 8A5A8 800F10F8 AE020000 */ sw $v0, ($s0)
|
||||
/* 8A5AC 800F10FC 3C02DB06 */ lui $v0, 0xdb06
|
||||
/* 8A5B0 800F1100 AC620000 */ sw $v0, ($v1)
|
||||
/* 8A5B4 800F1104 24620010 */ addiu $v0, $v1, 0x10
|
||||
/* 8A5B8 800F1108 AC600004 */ sw $zero, 4($v1)
|
||||
/* 8A5BC 800F110C AE020000 */ sw $v0, ($s0)
|
||||
/* 8A5C0 800F1110 3C02ED00 */ lui $v0, 0xed00
|
||||
/* 8A5C4 800F1114 AC620008 */ sw $v0, 8($v1)
|
||||
/* 8A5C8 800F1118 24620018 */ addiu $v0, $v1, 0x18
|
||||
/* 8A5CC 800F111C AC69000C */ sw $t1, 0xc($v1)
|
||||
/* 8A5D0 800F1120 AE020000 */ sw $v0, ($s0)
|
||||
/* 8A5D4 800F1124 4485B000 */ mtc1 $a1, $f22
|
||||
/* 8A5D8 800F1128 3C028011 */ lui $v0, %hi(D_801096B0)
|
||||
/* 8A5DC 800F112C 244296B0 */ addiu $v0, $v0, %lo(D_801096B0)
|
||||
/* 8A5E0 800F1130 AC6A0010 */ sw $t2, 0x10($v1)
|
||||
/* 8A5E4 800F1134 AC620014 */ sw $v0, 0x14($v1)
|
||||
/* 8A5E8 800F1138 E7A20018 */ swc1 $f2, 0x18($sp)
|
||||
/* 8A5EC 800F113C E7A4001C */ swc1 $f4, 0x1c($sp)
|
||||
/* 8A5F0 800F1140 AFA50010 */ sw $a1, 0x10($sp)
|
||||
/* 8A5F4 800F1144 0C018E44 */ jal guOrthoF
|
||||
/* 8A5F8 800F1148 E7A00014 */ swc1 $f0, 0x14($sp)
|
||||
/* 8A5FC 800F114C 27A40020 */ addiu $a0, $sp, 0x20
|
||||
/* 8A600 800F1150 96650000 */ lhu $a1, ($s3)
|
||||
/* 8A604 800F1154 8FC20000 */ lw $v0, ($fp)
|
||||
/* 8A608 800F1158 00052980 */ sll $a1, $a1, 6
|
||||
/* 8A60C 800F115C 00B12821 */ addu $a1, $a1, $s1
|
||||
/* 8A610 800F1160 0C019D40 */ jal guMtxF2L
|
||||
/* 8A614 800F1164 00452821 */ addu $a1, $v0, $a1
|
||||
/* 8A618 800F1168 3C03DA38 */ lui $v1, 0xda38
|
||||
/* 8A61C 800F116C 34630007 */ ori $v1, $v1, 7
|
||||
/* 8A620 800F1170 3C067F7F */ lui $a2, 0x7f7f
|
||||
/* 8A624 800F1174 34C67F7F */ ori $a2, $a2, 0x7f7f
|
||||
/* 8A628 800F1178 8E040000 */ lw $a0, ($s0)
|
||||
/* 8A62C 800F117C 96620000 */ lhu $v0, ($s3)
|
||||
/* 8A630 800F1180 0080282D */ daddu $a1, $a0, $zero
|
||||
/* 8A634 800F1184 24840008 */ addiu $a0, $a0, 8
|
||||
/* 8A638 800F1188 AE040000 */ sw $a0, ($s0)
|
||||
/* 8A63C 800F118C ACA30000 */ sw $v1, ($a1)
|
||||
/* 8A640 800F1190 24430001 */ addiu $v1, $v0, 1
|
||||
/* 8A644 800F1194 3042FFFF */ andi $v0, $v0, 0xffff
|
||||
/* 8A648 800F1198 00021180 */ sll $v0, $v0, 6
|
||||
/* 8A64C 800F119C A6630000 */ sh $v1, ($s3)
|
||||
/* 8A650 800F11A0 8FC30000 */ lw $v1, ($fp)
|
||||
/* 8A654 800F11A4 00511021 */ addu $v0, $v0, $s1
|
||||
/* 8A658 800F11A8 00621821 */ addu $v1, $v1, $v0
|
||||
/* 8A65C 800F11AC 24820008 */ addiu $v0, $a0, 8
|
||||
/* 8A660 800F11B0 ACA30004 */ sw $v1, 4($a1)
|
||||
/* 8A664 800F11B4 AE020000 */ sw $v0, ($s0)
|
||||
/* 8A668 800F11B8 3C02DE00 */ lui $v0, 0xde00
|
||||
/* 8A66C 800F11BC AC820000 */ sw $v0, ($a0)
|
||||
/* 8A670 800F11C0 3C028011 */ lui $v0, %hi(D_80109710)
|
||||
/* 8A674 800F11C4 24429710 */ addiu $v0, $v0, %lo(D_80109710)
|
||||
/* 8A678 800F11C8 AC820004 */ sw $v0, 4($a0)
|
||||
/* 8A67C 800F11CC 24820010 */ addiu $v0, $a0, 0x10
|
||||
/* 8A680 800F11D0 AE020000 */ sw $v0, ($s0)
|
||||
/* 8A684 800F11D4 3C02FB00 */ lui $v0, 0xfb00
|
||||
/* 8A688 800F11D8 AC820008 */ sw $v0, 8($a0)
|
||||
/* 8A68C 800F11DC AC86000C */ sw $a2, 0xc($a0)
|
||||
.L800F11E0:
|
||||
/* 8A690 800F11E0 3C0B8011 */ lui $t3, %hi(D_8010D000)
|
||||
/* 8A694 800F11E4 256BD000 */ addiu $t3, $t3, %lo(D_8010D000)
|
||||
/* 8A698 800F11E8 028B1821 */ addu $v1, $s4, $t3
|
||||
/* 8A69C 800F11EC 90620000 */ lbu $v0, ($v1)
|
||||
/* 8A6A0 800F11F0 5040005C */ beql $v0, $zero, .L800F1364
|
||||
/* 8A6A4 800F11F4 26F70001 */ addiu $s7, $s7, 1
|
||||
/* 8A6A8 800F11F8 C4740018 */ lwc1 $f20, 0x18($v1)
|
||||
/* 8A6AC 800F11FC 24120001 */ addiu $s2, $zero, 1
|
||||
/* 8A6B0 800F1200 3C11800A */ lui $s1, %hi(gMasterGfxPos)
|
||||
/* 8A6B4 800F1204 2631A66C */ addiu $s1, $s1, %lo(gMasterGfxPos)
|
||||
/* 8A6B8 800F1208 24700022 */ addiu $s0, $v1, 0x22
|
||||
.L800F120C:
|
||||
/* 8A6BC 800F120C 82020001 */ lb $v0, 1($s0)
|
||||
/* 8A6C0 800F1210 0440004F */ bltz $v0, .L800F1350
|
||||
/* 8A6C4 800F1214 02C0202D */ daddu $a0, $s6, $zero
|
||||
/* 8A6C8 800F1218 C6000012 */ lwc1 $f0, 0x12($s0)
|
||||
/* 8A6CC 800F121C 4405B000 */ mfc1 $a1, $f22
|
||||
/* 8A6D0 800F1220 3C028007 */ lui $v0, %hi(gGameStatusPtr)
|
||||
/* 8A6D4 800F1224 8C42419C */ lw $v0, %lo(gGameStatusPtr)($v0)
|
||||
/* 8A6D8 800F1228 4406B000 */ mfc1 $a2, $f22
|
||||
/* 8A6DC 800F122C 94430134 */ lhu $v1, 0x134($v0)
|
||||
/* 8A6E0 800F1230 46140002 */ mul.s $f0, $f0, $f20
|
||||
/* 8A6E4 800F1234 00000000 */ nop
|
||||
/* 8A6E8 800F1238 00031080 */ sll $v0, $v1, 2
|
||||
/* 8A6EC 800F123C 00431021 */ addu $v0, $v0, $v1
|
||||
/* 8A6F0 800F1240 00021040 */ sll $v0, $v0, 1
|
||||
/* 8A6F4 800F1244 44823000 */ mtc1 $v0, $f6
|
||||
/* 8A6F8 800F1248 00000000 */ nop
|
||||
/* 8A6FC 800F124C 468031A0 */ cvt.s.w $f6, $f6
|
||||
/* 8A700 800F1250 44073000 */ mfc1 $a3, $f6
|
||||
/* 8A704 800F1254 E7A00010 */ swc1 $f0, 0x10($sp)
|
||||
/* 8A708 800F1258 C6000002 */ lwc1 $f0, 2($s0)
|
||||
/* 8A70C 800F125C E7A00014 */ swc1 $f0, 0x14($sp)
|
||||
/* 8A710 800F1260 C6000006 */ lwc1 $f0, 6($s0)
|
||||
/* 8A714 800F1264 E7B6001C */ swc1 $f22, 0x1c($sp)
|
||||
/* 8A718 800F1268 0C018FC4 */ jal guPositionF
|
||||
/* 8A71C 800F126C E7A00018 */ swc1 $f0, 0x18($sp)
|
||||
/* 8A720 800F1270 02C0202D */ daddu $a0, $s6, $zero
|
||||
/* 8A724 800F1274 96650000 */ lhu $a1, ($s3)
|
||||
/* 8A728 800F1278 8FC20000 */ lw $v0, ($fp)
|
||||
/* 8A72C 800F127C 00052980 */ sll $a1, $a1, 6
|
||||
/* 8A730 800F1280 00B52821 */ addu $a1, $a1, $s5
|
||||
/* 8A734 800F1284 0C019D40 */ jal guMtxF2L
|
||||
/* 8A738 800F1288 00452821 */ addu $a1, $v0, $a1
|
||||
/* 8A73C 800F128C 3C08D838 */ lui $t0, 0xd838
|
||||
/* 8A740 800F1290 8E240000 */ lw $a0, ($s1)
|
||||
/* 8A744 800F1294 35080002 */ ori $t0, $t0, 2
|
||||
/* 8A748 800F1298 0080282D */ daddu $a1, $a0, $zero
|
||||
/* 8A74C 800F129C 24840008 */ addiu $a0, $a0, 8
|
||||
/* 8A750 800F12A0 AE240000 */ sw $a0, ($s1)
|
||||
/* 8A754 800F12A4 96620000 */ lhu $v0, ($s3)
|
||||
/* 8A758 800F12A8 3C03DA38 */ lui $v1, 0xda38
|
||||
/* 8A75C 800F12AC ACA30000 */ sw $v1, ($a1)
|
||||
/* 8A760 800F12B0 24430001 */ addiu $v1, $v0, 1
|
||||
/* 8A764 800F12B4 3042FFFF */ andi $v0, $v0, 0xffff
|
||||
/* 8A768 800F12B8 00021180 */ sll $v0, $v0, 6
|
||||
/* 8A76C 800F12BC A6630000 */ sh $v1, ($s3)
|
||||
/* 8A770 800F12C0 8FC30000 */ lw $v1, ($fp)
|
||||
/* 8A774 800F12C4 00551021 */ addu $v0, $v0, $s5
|
||||
/* 8A778 800F12C8 00621821 */ addu $v1, $v1, $v0
|
||||
/* 8A77C 800F12CC 24820008 */ addiu $v0, $a0, 8
|
||||
/* 8A780 800F12D0 ACA30004 */ sw $v1, 4($a1)
|
||||
/* 8A784 800F12D4 AE220000 */ sw $v0, ($s1)
|
||||
/* 8A788 800F12D8 82030001 */ lb $v1, 1($s0)
|
||||
/* 8A78C 800F12DC 24020050 */ addiu $v0, $zero, 0x50
|
||||
/* 8A790 800F12E0 00431023 */ subu $v0, $v0, $v1
|
||||
/* 8A794 800F12E4 304200FF */ andi $v0, $v0, 0xff
|
||||
/* 8A798 800F12E8 3C03FA00 */ lui $v1, 0xfa00
|
||||
/* 8A79C 800F12EC 00431025 */ or $v0, $v0, $v1
|
||||
/* 8A7A0 800F12F0 AC820000 */ sw $v0, ($a0)
|
||||
/* 8A7A4 800F12F4 9203FFFD */ lbu $v1, -3($s0)
|
||||
/* 8A7A8 800F12F8 9205FFFE */ lbu $a1, -2($s0)
|
||||
/* 8A7AC 800F12FC 9206FFFF */ lbu $a2, -1($s0)
|
||||
/* 8A7B0 800F1300 92070000 */ lbu $a3, ($s0)
|
||||
/* 8A7B4 800F1304 24820010 */ addiu $v0, $a0, 0x10
|
||||
/* 8A7B8 800F1308 AE220000 */ sw $v0, ($s1)
|
||||
/* 8A7BC 800F130C 3C02DE00 */ lui $v0, 0xde00
|
||||
/* 8A7C0 800F1310 AC820008 */ sw $v0, 8($a0)
|
||||
/* 8A7C4 800F1314 3C028011 */ lui $v0, %hi(D_801097D8)
|
||||
/* 8A7C8 800F1318 244297D8 */ addiu $v0, $v0, %lo(D_801097D8)
|
||||
/* 8A7CC 800F131C AC82000C */ sw $v0, 0xc($a0)
|
||||
/* 8A7D0 800F1320 24820018 */ addiu $v0, $a0, 0x18
|
||||
/* 8A7D4 800F1324 AE220000 */ sw $v0, ($s1)
|
||||
/* 8A7D8 800F1328 24020040 */ addiu $v0, $zero, 0x40
|
||||
/* 8A7DC 800F132C AC880010 */ sw $t0, 0x10($a0)
|
||||
/* 8A7E0 800F1330 AC820014 */ sw $v0, 0x14($a0)
|
||||
/* 8A7E4 800F1334 00031E00 */ sll $v1, $v1, 0x18
|
||||
/* 8A7E8 800F1338 00052C00 */ sll $a1, $a1, 0x10
|
||||
/* 8A7EC 800F133C 00651825 */ or $v1, $v1, $a1
|
||||
/* 8A7F0 800F1340 00063200 */ sll $a2, $a2, 8
|
||||
/* 8A7F4 800F1344 00661825 */ or $v1, $v1, $a2
|
||||
/* 8A7F8 800F1348 00671825 */ or $v1, $v1, $a3
|
||||
/* 8A7FC 800F134C AC830004 */ sw $v1, 4($a0)
|
||||
.L800F1350:
|
||||
/* 8A800 800F1350 26520001 */ addiu $s2, $s2, 1
|
||||
/* 8A804 800F1354 2A420039 */ slti $v0, $s2, 0x39
|
||||
/* 8A808 800F1358 1440FFAC */ bnez $v0, .L800F120C
|
||||
/* 8A80C 800F135C 2610001C */ addiu $s0, $s0, 0x1c
|
||||
/* 8A810 800F1360 26F70001 */ addiu $s7, $s7, 1
|
||||
.L800F1364:
|
||||
/* 8A814 800F1364 1AE0FF9E */ blez $s7, .L800F11E0
|
||||
/* 8A818 800F1368 2694063C */ addiu $s4, $s4, 0x63c
|
||||
/* 8A81C 800F136C 8FBF00C4 */ lw $ra, 0xc4($sp)
|
||||
/* 8A820 800F1370 8FBE00C0 */ lw $fp, 0xc0($sp)
|
||||
/* 8A824 800F1374 8FB700BC */ lw $s7, 0xbc($sp)
|
||||
/* 8A828 800F1378 8FB600B8 */ lw $s6, 0xb8($sp)
|
||||
/* 8A82C 800F137C 8FB500B4 */ lw $s5, 0xb4($sp)
|
||||
/* 8A830 800F1380 8FB400B0 */ lw $s4, 0xb0($sp)
|
||||
/* 8A834 800F1384 8FB300AC */ lw $s3, 0xac($sp)
|
||||
/* 8A838 800F1388 8FB200A8 */ lw $s2, 0xa8($sp)
|
||||
/* 8A83C 800F138C 8FB100A4 */ lw $s1, 0xa4($sp)
|
||||
/* 8A840 800F1390 8FB000A0 */ lw $s0, 0xa0($sp)
|
||||
/* 8A844 800F1394 D7B600D0 */ ldc1 $f22, 0xd0($sp)
|
||||
/* 8A848 800F1398 D7B400C8 */ ldc1 $f20, 0xc8($sp)
|
||||
/* 8A84C 800F139C 03E00008 */ jr $ra
|
||||
/* 8A850 800F13A0 27BD00D8 */ addiu $sp, $sp, 0xd8
|
||||
/* 8A854 800F13A4 00000000 */ nop
|
||||
/* 8A858 800F13A8 00000000 */ nop
|
||||
/* 8A85C 800F13AC 00000000 */ nop
|
File diff suppressed because it is too large
Load Diff
@ -27217,7 +27217,6 @@ D_802DFEB0 = 0x802DFEB0; // type:data
|
||||
D_802DFEB8 = 0x802DFEB8; // type:data
|
||||
PlayerRasterSetsLoaded = 0x802E004C; // type:data
|
||||
PlayerRasterBufferSetOffsets = 0x802E0050; // type:data
|
||||
D_802E0080 = 0x802E0080; // type:data
|
||||
D_802E0090 = 0x802E0090; // type:data
|
||||
PlayerRasterHeader = 0x802E0C10; // type:data
|
||||
D_802E0C14 = 0x802E0C14; // type:data
|
||||
|
@ -1148,36 +1148,7 @@ gWorldMapVars = 0x802DBCA8;
|
||||
gBattleMapVars = 0x802DBCE8;
|
||||
DoorModelsSwingCCW = 0x802DBD28;
|
||||
gBattleMapFlags = 0x802DBD34;
|
||||
spr_allocateBtlComponentsOnWorldHeap = 0x802DF524;
|
||||
MaxLoadedSpriteInstanceID = 0x802DF530;
|
||||
D_802DF540 = 0x802DF540;
|
||||
spr_playerSprites = 0x802DF548;
|
||||
D_802DF57C = 0x802DF57C;
|
||||
spr_playerMaxComponents = 0x802DF580;
|
||||
spr_playerCurrentAnimInfo = 0x802DF588;
|
||||
NpcSpriteData = 0x802DF5B0;
|
||||
NpcSpriteInstanceCount = 0x802DF958;
|
||||
SpriteInstances = 0x802DFA48;
|
||||
D_802DFE44 = 0x802DFE44;
|
||||
D_802DFE48 = 0x802DFE48;
|
||||
D_802DFE9C = 0x802DFE9C;
|
||||
D_802DFEA0 = 0x802DFEA0;
|
||||
SpriteUpdateNotifyValue = 0x802DFEAC;
|
||||
D_802DFEB0 = 0x802DFEB0;
|
||||
D_802DFEB8 = 0x802DFEB8;
|
||||
PlayerRasterSetsLoaded = 0x802E004C;
|
||||
PlayerRasterBufferSetOffsets = 0x802E0050;
|
||||
D_802E0080 = 0x802E0080;
|
||||
D_802E0090 = 0x802E0090;
|
||||
PlayerRasterHeader = 0x802E0C10;
|
||||
D_802E0C14 = 0x802E0C14;
|
||||
D_802E0C20 = 0x802E0C20;
|
||||
PlayerRasterCacheSize = 0x802E0C58;
|
||||
PlayerRasterMaxSize = 0x802E0C5C;
|
||||
SpriteDataHeader = 0x802E0C60;
|
||||
D_802E0C64 = 0x802E0C64;
|
||||
D_802E0C68 = 0x802E0C68;
|
||||
PlayerRasterCache = 0x802E0C70;
|
||||
|
||||
SaveBlockTutorialPrinterClosed = 0x802EB390;
|
||||
SaveBlockResultPrinterClosed = 0x802EB394;
|
||||
SaveBlockTutorialPrinter = 0x802EB398;
|
||||
|
Loading…
Reference in New Issue
Block a user