mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-12-26 03:34:15 +01:00
Decompile roulette_util.c (#434)
This commit is contained in:
parent
6068495619
commit
f3a25f83cf
1431
asm/roulette_util.s
1431
asm/roulette_util.s
File diff suppressed because it is too large
Load Diff
34
include/roulette.h
Executable file
34
include/roulette.h
Executable file
@ -0,0 +1,34 @@
|
|||||||
|
#ifndef GUARD_ROULETTE_H
|
||||||
|
#define GUARD_ROULETTE_H
|
||||||
|
|
||||||
|
struct UnkStruct1
|
||||||
|
{
|
||||||
|
u16 var00;
|
||||||
|
u16 var02;
|
||||||
|
u8 var04;
|
||||||
|
u8 var05;
|
||||||
|
u8 var06;
|
||||||
|
s8 var07_0:5;
|
||||||
|
s8 var07_5:2;
|
||||||
|
s8 var07_7:1;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct UnkStruct3
|
||||||
|
{
|
||||||
|
u8 var00_0:7;
|
||||||
|
u8 var00_7:1;
|
||||||
|
u8 var01;
|
||||||
|
s8 var02;
|
||||||
|
s8 var03;
|
||||||
|
struct UnkStruct1 var04;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct UnkStruct0
|
||||||
|
{
|
||||||
|
u8 var00;
|
||||||
|
u8 var01;
|
||||||
|
u16 var02; //flag for each UnkStruct3
|
||||||
|
struct UnkStruct3 var04[0x10];
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // GUARD_ROULETTE_H
|
@ -1,17 +1,46 @@
|
|||||||
#ifndef GUARD_ROULETTE_UTIL_H
|
#ifndef GUARD_ROULETTE_UTIL_H
|
||||||
#define GUARD_ROULETTE_UTIL_H
|
#define GUARD_ROULETTE_UTIL_H
|
||||||
|
|
||||||
|
struct InnerStruct203CF18_3
|
||||||
|
{
|
||||||
|
u16 unk0;
|
||||||
|
u16 unk2;
|
||||||
|
u8 unk4;
|
||||||
|
u8 unk5;
|
||||||
|
u8 unk6;
|
||||||
|
s8 unk7_0:4;
|
||||||
|
s8 unk7_4:2;
|
||||||
|
s8 unk7_6:1;
|
||||||
|
s8 unk7_7:1;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct InnerStruct203CF18_2
|
||||||
|
{
|
||||||
|
u8 unk0;
|
||||||
|
u8 unk1_0:4;
|
||||||
|
u8 unk1_4:1;
|
||||||
|
s8 unk1_5:1;
|
||||||
|
s8 unk1_6:1;
|
||||||
|
u32 unk1_7:1;
|
||||||
|
u8 unk2;
|
||||||
|
u8 unk3;
|
||||||
|
struct InnerStruct203CF18_3 unk4;
|
||||||
|
};
|
||||||
|
|
||||||
// structures
|
// structures
|
||||||
struct InnerStruct203CF18
|
struct InnerStruct203CF18
|
||||||
{
|
{
|
||||||
u8 filler[0xC4];
|
u16 unk0;
|
||||||
|
struct InnerStruct203CF18_2 unk4[16];
|
||||||
};
|
};
|
||||||
|
|
||||||
void sub_8151B68(struct InnerStruct203CF18 *, const u8*);
|
int sub_8151B68(struct InnerStruct203CF18 *, const struct InnerStruct203CF18_3 *);
|
||||||
void sub_8151B3C(struct InnerStruct203CF18 *);
|
void sub_8151B3C(struct InnerStruct203CF18 *);
|
||||||
void sub_8151CA8(struct InnerStruct203CF18 *, u8, u8);
|
void sub_8151CA8(struct InnerStruct203CF18 *, u16, u8);
|
||||||
void sub_8151C50(struct InnerStruct203CF18 *, u8, u8);
|
void sub_8151C50(struct InnerStruct203CF18 *, u16, u8);
|
||||||
void sub_8151D28(struct InnerStruct203CF18 *, u8, u8);
|
void sub_8151D28(struct InnerStruct203CF18 *, u16, u8);
|
||||||
void sub_8151E50(struct InnerStruct203CF18 *);
|
void sub_8151E50(struct InnerStruct203CF18 *);
|
||||||
|
void sub_8152008(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height);
|
||||||
|
void sub_8152058(u16 *dest, u16 *src, u8 left, u8 top, u8 width, u8 height);
|
||||||
|
|
||||||
#endif // GUARD_ROULETTE_UTIL_H
|
#endif // GUARD_ROULETTE_UTIL_H
|
||||||
|
@ -214,7 +214,7 @@ SECTIONS {
|
|||||||
src/battle_message.o(.text);
|
src/battle_message.o(.text);
|
||||||
asm/cable_car.o(.text);
|
asm/cable_car.o(.text);
|
||||||
src/math_util.o(.text);
|
src/math_util.o(.text);
|
||||||
asm/roulette_util.o(.text);
|
src/roulette_util.o(.text);
|
||||||
src/rom_81520A8.o(.text);
|
src/rom_81520A8.o(.text);
|
||||||
src/save.o(.text);
|
src/save.o(.text);
|
||||||
src/mystery_event_script.o(.text);
|
src/mystery_event_script.o(.text);
|
||||||
|
@ -32,7 +32,17 @@ static void sub_81BEA20(void);
|
|||||||
static void sub_81BEAD8(struct Sprite* sprite);
|
static void sub_81BEAD8(struct Sprite* sprite);
|
||||||
|
|
||||||
// rodata
|
// rodata
|
||||||
static const u8 gUnknown_08617E18[] = {0x3b, 0x43, 0x61, 0x00, 0x0f, 0x05, 0xff, 0x9b};
|
const struct InnerStruct203CF18_3 gUnknown_08617E18 = {
|
||||||
|
.unk0 = 0x433b,
|
||||||
|
.unk2 = 0x61,
|
||||||
|
.unk4 = 0x0F,
|
||||||
|
.unk5 = 0x05,
|
||||||
|
.unk6 = 0xFF,
|
||||||
|
.unk7_0 = 0xB,
|
||||||
|
.unk7_4 = 0x1,
|
||||||
|
.unk7_6 = 0,
|
||||||
|
.unk7_7 = 1,
|
||||||
|
};
|
||||||
|
|
||||||
static const union AnimCmd gSpriteAnim_8617E20[] =
|
static const union AnimCmd gSpriteAnim_8617E20[] =
|
||||||
{
|
{
|
||||||
@ -131,7 +141,7 @@ void sub_81BE6B8(void)
|
|||||||
|
|
||||||
gUnknown_0203CF18 = (struct Struct203CF18 *)AllocZeroed(sizeof(struct Struct203CF18));
|
gUnknown_0203CF18 = (struct Struct203CF18 *)AllocZeroed(sizeof(struct Struct203CF18));
|
||||||
sub_8151B3C(&(gUnknown_0203CF18->unk4));
|
sub_8151B3C(&(gUnknown_0203CF18->unk4));
|
||||||
sub_8151B68(&(gUnknown_0203CF18->unk4), gUnknown_08617E18);
|
sub_8151B68(&(gUnknown_0203CF18->unk4), &gUnknown_08617E18);
|
||||||
sub_8151CA8(&(gUnknown_0203CF18->unk4), 1, 1);
|
sub_8151CA8(&(gUnknown_0203CF18->unk4), 1, 1);
|
||||||
gUnknown_0203CF18->taskId = CreateTask(sub_81BE698, 0xFF);
|
gUnknown_0203CF18->taskId = CreateTask(sub_81BE698, 0xFF);
|
||||||
}
|
}
|
||||||
|
700
src/roulette_util.c
Executable file
700
src/roulette_util.c
Executable file
@ -0,0 +1,700 @@
|
|||||||
|
#include "global.h"
|
||||||
|
#include "palette.h"
|
||||||
|
#include "roulette.h"
|
||||||
|
#include "roulette_util.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
|
void sub_8151678(struct UnkStruct0 *r0)
|
||||||
|
{
|
||||||
|
r0->var00 = 0;
|
||||||
|
r0->var02 = 0;
|
||||||
|
memset(&r0->var04, 0, sizeof(r0->var04));
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 sub_815168C(struct UnkStruct0 *r0, u8 r1, struct UnkStruct1 *r2)
|
||||||
|
{
|
||||||
|
if (!(r1 < 16) || (r0->var04[r1].var00_7))
|
||||||
|
return 0xFF;
|
||||||
|
|
||||||
|
r0->var04[r1].var04.var00 = r2->var00;
|
||||||
|
r0->var04[r1].var04.var02 = r2->var02;
|
||||||
|
r0->var04[r1].var04.var04 = r2->var04;
|
||||||
|
r0->var04[r1].var04.var05 = r2->var05;
|
||||||
|
r0->var04[r1].var04.var06 = r2->var06;
|
||||||
|
r0->var04[r1].var04.var07_0 = r2->var07_0;
|
||||||
|
r0->var04[r1].var04.var07_5 = r2->var07_5;
|
||||||
|
r0->var04[r1].var04.var07_7 = r2->var07_7;
|
||||||
|
r0->var04[r1].var00_0 = 0;
|
||||||
|
r0->var04[r1].var00_7 = 1;
|
||||||
|
r0->var04[r1].var02 = 0;
|
||||||
|
r0->var04[r1].var01 = 0;
|
||||||
|
if (r0->var04[r1].var04.var07_7 < 0)
|
||||||
|
r0->var04[r1].var03 = 0xFF;
|
||||||
|
else
|
||||||
|
r0->var04[r1].var03 = 1;
|
||||||
|
|
||||||
|
return r1;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 sub_8151710(struct UnkStruct0 *r0, u8 r1)
|
||||||
|
{
|
||||||
|
if (r1 >= 16)
|
||||||
|
return 0xFF;
|
||||||
|
if (!r0->var04[r1].var00_7)
|
||||||
|
return 0xFF;
|
||||||
|
|
||||||
|
memset(&r0->var04[r1], 0, sizeof(r0->var04[r1]));
|
||||||
|
return r1;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 sub_8151744(struct UnkStruct3 *r0)
|
||||||
|
{
|
||||||
|
u8 i;
|
||||||
|
u8 returnval;
|
||||||
|
|
||||||
|
for (i = 0; i < r0->var04.var04; i++)
|
||||||
|
{
|
||||||
|
struct PlttData *faded = (struct PlttData *)&gPlttBufferFaded[r0->var04.var02 + i];
|
||||||
|
struct PlttData *unfaded = (struct PlttData *)&gPlttBufferUnfaded[r0->var04.var02 + i];
|
||||||
|
|
||||||
|
switch (r0->var00_0)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
if (faded->r + r0->var03 >= 0 && faded->r + r0->var03 < 32)
|
||||||
|
faded->r += r0->var03;
|
||||||
|
if (faded->g + r0->var03 >= 0 && faded->g + r0->var03 < 32)
|
||||||
|
faded->g += r0->var03;
|
||||||
|
if (faded->b + r0->var03 >= 0 && faded->b + r0->var03 < 32)
|
||||||
|
faded->b += r0->var03;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if (r0->var03 < 0)
|
||||||
|
{
|
||||||
|
if (faded->r + r0->var03 >= unfaded->r)
|
||||||
|
faded->r += r0->var03;
|
||||||
|
if (faded->g + r0->var03 >= unfaded->g)
|
||||||
|
faded->g += r0->var03;
|
||||||
|
if (faded->b + r0->var03 >= unfaded->b)
|
||||||
|
faded->b += r0->var03;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (faded->r + r0->var03 <= unfaded->r)
|
||||||
|
faded->r += r0->var03;
|
||||||
|
if (faded->g + r0->var03 <= unfaded->g)
|
||||||
|
faded->g += r0->var03;
|
||||||
|
if (faded->b + r0->var03 <= unfaded->b)
|
||||||
|
faded->b += r0->var03;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((u32)r0->var02++ != r0->var04.var07_0)
|
||||||
|
{
|
||||||
|
returnval = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
r0->var02 = 0;
|
||||||
|
r0->var03 *= -1;
|
||||||
|
if (r0->var00_0 == 1)
|
||||||
|
r0->var00_0++;
|
||||||
|
else
|
||||||
|
r0->var00_0--;
|
||||||
|
returnval = 1;
|
||||||
|
}
|
||||||
|
return returnval;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 sub_815194C(struct UnkStruct3 *r0)
|
||||||
|
{
|
||||||
|
u8 rg2 = 0;
|
||||||
|
|
||||||
|
switch (r0->var00_0)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
for (rg2 = 0; rg2 < r0->var04.var04; rg2++)
|
||||||
|
gPlttBufferFaded[r0->var04.var02 + rg2] = r0->var04.var00;
|
||||||
|
r0->var00_0++;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
for (rg2 = 0; rg2 < r0->var04.var04; rg2++)
|
||||||
|
gPlttBufferFaded[r0->var04.var02 + rg2] = gPlttBufferUnfaded[r0->var04.var02 + rg2];
|
||||||
|
r0->var00_0--;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void task_tutorial_controls_fadein(struct UnkStruct0 *r0)
|
||||||
|
{
|
||||||
|
u8 i = 0;
|
||||||
|
|
||||||
|
if (r0->var00)
|
||||||
|
{
|
||||||
|
for (i = 0; i < 16; i++)
|
||||||
|
{
|
||||||
|
if ((r0->var02 >> i) & 1)
|
||||||
|
{
|
||||||
|
if (--r0->var04[i].var01 == 0xFF) // if underflow ?
|
||||||
|
{
|
||||||
|
if (r0->var04[i].var04.var00 & 0x8000) // PlttData->unused_15 ?
|
||||||
|
sub_8151744(&r0->var04[i]);
|
||||||
|
else
|
||||||
|
sub_815194C(&r0->var04[i]);
|
||||||
|
|
||||||
|
r0->var04[i].var01 = r0->var04[i].var04.var05;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_8151A48(struct UnkStruct0 *r0, u16 r1)
|
||||||
|
{
|
||||||
|
u8 i = 0;
|
||||||
|
|
||||||
|
r0->var00++;
|
||||||
|
for (i = 0; i < 16; i++)
|
||||||
|
{
|
||||||
|
if ((r1 >> i) & 1)
|
||||||
|
{
|
||||||
|
if (r0->var04[i].var00_7)
|
||||||
|
{
|
||||||
|
r0->var02 |= 1 << i;
|
||||||
|
r0->var04[i].var00_0 = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_8151A9C(struct UnkStruct0 *r0, u16 r1)
|
||||||
|
{
|
||||||
|
u8 i;
|
||||||
|
|
||||||
|
for (i = 0; i < 16; i++)
|
||||||
|
{
|
||||||
|
if ((r0->var02 >> i) & 1)
|
||||||
|
{
|
||||||
|
if (r0->var04[i].var00_7)
|
||||||
|
{
|
||||||
|
if ((r1 >> i) & 1)
|
||||||
|
{
|
||||||
|
u32 offset = r0->var04[i].var04.var02;
|
||||||
|
u16 *faded = &gPlttBufferFaded[offset];
|
||||||
|
u16 *unfaded = &gPlttBufferUnfaded[offset];
|
||||||
|
memcpy(faded, unfaded, r0->var04[i].var04.var04 * 2);
|
||||||
|
r0->var04[i].var00_0 = 0;
|
||||||
|
r0->var04[i].var02 = 0;
|
||||||
|
r0->var04[i].var01 = 0;
|
||||||
|
if (r0->var04[i].var04.var07_7 < 0)
|
||||||
|
r0->var04[i].var03 = 0xFF;
|
||||||
|
else
|
||||||
|
r0->var04[i].var03 = 0x1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (r1 == 0xFFFF)
|
||||||
|
{
|
||||||
|
r0->var00 = 0;
|
||||||
|
r0->var02 = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
r0->var02 = r0->var02 & ~r1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_8151B3C(struct InnerStruct203CF18 *arg0)
|
||||||
|
{
|
||||||
|
u8 i = 0;
|
||||||
|
arg0->unk0 = 0;
|
||||||
|
memset(&arg0->unk4, 0, sizeof(arg0->unk4));
|
||||||
|
for (; i < 16; i++)
|
||||||
|
{
|
||||||
|
arg0->unk4[i].unk0 = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int sub_8151B68(struct InnerStruct203CF18 *arg0, const struct InnerStruct203CF18_3 *arg1)
|
||||||
|
{
|
||||||
|
u8 i = 0;
|
||||||
|
struct InnerStruct203CF18_2 *r4 = NULL;
|
||||||
|
|
||||||
|
if (!arg0->unk4[0].unk1_7)
|
||||||
|
{
|
||||||
|
r4 = &arg0->unk4[0];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
while (++i < 16)
|
||||||
|
{
|
||||||
|
if (!arg0->unk4[i].unk1_7)
|
||||||
|
{
|
||||||
|
r4 = &arg0->unk4[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (r4 == 0)
|
||||||
|
return 0xFF;
|
||||||
|
|
||||||
|
r4->unk1_0 = 0;
|
||||||
|
r4->unk1_4 = 0;
|
||||||
|
r4->unk1_6 = 1;
|
||||||
|
r4->unk1_7 = 1;
|
||||||
|
r4->unk2 = 0;
|
||||||
|
r4->unk3 = 0;
|
||||||
|
memcpy(&r4->unk4, arg1, sizeof(*arg1));
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_8151BD4(struct InnerStruct203CF18_2 *arg0)
|
||||||
|
{
|
||||||
|
u16 i;
|
||||||
|
|
||||||
|
if (!arg0->unk1_6 && arg0->unk4.unk7_6)
|
||||||
|
{
|
||||||
|
for (i = arg0->unk4.unk2; i < arg0->unk4.unk2 + arg0->unk4.unk4; i++)
|
||||||
|
gPlttBufferFaded[i] = gPlttBufferUnfaded[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(&arg0->unk4, 0, sizeof(arg0->unk4));
|
||||||
|
arg0->unk1_0 = 0;
|
||||||
|
arg0->unk1_4 = 0;
|
||||||
|
arg0->unk1_5 = 0;
|
||||||
|
arg0->unk1_6 = 1;
|
||||||
|
arg0->unk1_7 = 0;
|
||||||
|
arg0->unk3 = 0;
|
||||||
|
arg0->unk2 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_8151C50(struct InnerStruct203CF18 *arg0, u16 arg1, u8 arg2)
|
||||||
|
{
|
||||||
|
u16 i = 0;
|
||||||
|
|
||||||
|
if (!arg2)
|
||||||
|
{
|
||||||
|
sub_8151BD4(&arg0->unk4[arg1 & 0xF]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (i = 0; i < 16; i++)
|
||||||
|
{
|
||||||
|
if ((arg1 & 1) && arg0->unk4[i].unk1_7)
|
||||||
|
sub_8151BD4(&arg0->unk4[i]);
|
||||||
|
|
||||||
|
arg1 >>= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// there seems to be a temp var involved inside the first if block
|
||||||
|
void sub_8151CA8(struct InnerStruct203CF18 *arg0, u16 arg1, u8 arg2)
|
||||||
|
{
|
||||||
|
u8 i = 0;
|
||||||
|
|
||||||
|
if (!arg2)
|
||||||
|
{
|
||||||
|
i = arg1 & 0xF;
|
||||||
|
arg0->unk4[i].unk1_6 = 0;
|
||||||
|
arg0->unk0 |= 1 << i;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (i = 0; i < 16; i++)
|
||||||
|
{
|
||||||
|
if (!(arg1 & 1) || !arg0->unk4[i].unk1_7 || !arg0->unk4[i].unk1_6)
|
||||||
|
{
|
||||||
|
arg1 <<= 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
arg0->unk4[i].unk1_6 = 0;
|
||||||
|
arg0->unk0 |= 1 << i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_8151D28(struct InnerStruct203CF18 *arg0, u16 arg1, u8 arg2)
|
||||||
|
{
|
||||||
|
u16 i;
|
||||||
|
struct InnerStruct203CF18_2 *var0;
|
||||||
|
u8 j = 0;
|
||||||
|
|
||||||
|
if (!arg2)
|
||||||
|
{
|
||||||
|
var0 = &arg0->unk4[arg1 & 0xF];
|
||||||
|
if (!var0->unk1_6 && var0->unk1_7)
|
||||||
|
{
|
||||||
|
if (var0->unk4.unk7_6)
|
||||||
|
{
|
||||||
|
for (i = var0->unk4.unk2; i < var0->unk4.unk2 + var0->unk4.unk4; i++)
|
||||||
|
gPlttBufferFaded[i] = gPlttBufferUnfaded[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
var0->unk1_6 = 1;
|
||||||
|
arg0->unk0 &= ~(1 << j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (j = 0; j < 16; j++)
|
||||||
|
{
|
||||||
|
var0 = &arg0->unk4[j];
|
||||||
|
if (!(arg1 & 1) || var0->unk1_6 || !var0->unk1_7)
|
||||||
|
{
|
||||||
|
arg1 <<= 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (var0->unk4.unk7_6)
|
||||||
|
{
|
||||||
|
for (i = var0->unk4.unk2; i < var0->unk4.unk2 + var0->unk4.unk4; i++)
|
||||||
|
gPlttBufferFaded[i] = gPlttBufferUnfaded[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
var0->unk1_6 = 1;
|
||||||
|
arg0->unk0 &= ~(1 << j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef NONMATCHING
|
||||||
|
void sub_8151E50(struct InnerStruct203CF18 *arg0)
|
||||||
|
{
|
||||||
|
struct InnerStruct203CF18_2 *var0;
|
||||||
|
u8 i = 0;
|
||||||
|
|
||||||
|
if (arg0->unk0)
|
||||||
|
{
|
||||||
|
for (i = 0; i < 16; i++)
|
||||||
|
{
|
||||||
|
var0 = &arg0->unk4[i];
|
||||||
|
if ((!var0->unk1_6 && var0->unk1_7) && (!gPaletteFade.active || !var0->unk4.unk7_7))
|
||||||
|
{
|
||||||
|
if (--var0->unk2 == 0xFF)
|
||||||
|
{
|
||||||
|
var0->unk2 = var0->unk4.unk5;
|
||||||
|
BlendPalette(var0->unk4.unk2, var0->unk4.unk4, var0->unk1_0, var0->unk4.unk0);
|
||||||
|
switch (var0->unk4.unk7_4)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
if (var0->unk1_0++ == var0->unk4.unk7_0)
|
||||||
|
{
|
||||||
|
var0->unk3++;
|
||||||
|
var0->unk1_0 = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
if (var0->unk1_4)
|
||||||
|
{
|
||||||
|
if (--var0->unk1_0 == 0)
|
||||||
|
{
|
||||||
|
var0->unk3++;
|
||||||
|
var0->unk1_4 ^= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (var0->unk1_0++ == var0->unk4.unk7_0 - 1)
|
||||||
|
{
|
||||||
|
var0->unk3++;
|
||||||
|
var0->unk1_4 ^= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if (var0->unk1_4)
|
||||||
|
var0->unk1_0 = 0;
|
||||||
|
else
|
||||||
|
var0->unk1_0 = var0->unk4.unk7_0;
|
||||||
|
|
||||||
|
var0->unk1_4 ^= 1;
|
||||||
|
var0->unk3++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (var0->unk4.unk6 != 0xFF && var0->unk3 == 0xFF)
|
||||||
|
sub_8151D28(arg0, var0->unk0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
NAKED
|
||||||
|
void sub_8151E50(struct InnerStruct203CF18 *arg0)
|
||||||
|
{
|
||||||
|
asm_unified("\n\
|
||||||
|
push {r4-r7,lr}\n\
|
||||||
|
mov r7, r10\n\
|
||||||
|
mov r6, r9\n\
|
||||||
|
mov r5, r8\n\
|
||||||
|
push {r5-r7}\n\
|
||||||
|
sub sp, 0x4\n\
|
||||||
|
str r0, [sp]\n\
|
||||||
|
movs r0, 0\n\
|
||||||
|
mov r10, r0\n\
|
||||||
|
ldr r1, [sp]\n\
|
||||||
|
ldrh r0, [r1]\n\
|
||||||
|
cmp r0, 0\n\
|
||||||
|
bne _08151E6C\n\
|
||||||
|
b _08151FF6\n\
|
||||||
|
_08151E6C:\n\
|
||||||
|
movs r2, 0xF\n\
|
||||||
|
mov r9, r2\n\
|
||||||
|
movs r3, 0x10\n\
|
||||||
|
negs r3, r3\n\
|
||||||
|
mov r8, r3\n\
|
||||||
|
movs r7, 0x1\n\
|
||||||
|
_08151E78:\n\
|
||||||
|
mov r5, r10\n\
|
||||||
|
lsls r0, r5, 1\n\
|
||||||
|
add r0, r10\n\
|
||||||
|
lsls r0, 2\n\
|
||||||
|
adds r0, 0x4\n\
|
||||||
|
ldr r1, [sp]\n\
|
||||||
|
adds r4, r1, r0\n\
|
||||||
|
ldrb r2, [r4, 0x1]\n\
|
||||||
|
movs r3, 0xC0\n\
|
||||||
|
ands r3, r2\n\
|
||||||
|
cmp r3, 0x80\n\
|
||||||
|
beq _08151E92\n\
|
||||||
|
b _08151FE6\n\
|
||||||
|
_08151E92:\n\
|
||||||
|
ldr r0, =gPaletteFade\n\
|
||||||
|
ldrb r1, [r0, 0x7]\n\
|
||||||
|
adds r0, r3, 0\n\
|
||||||
|
ands r0, r1\n\
|
||||||
|
cmp r0, 0\n\
|
||||||
|
beq _08151EA8\n\
|
||||||
|
ldrb r0, [r4, 0xB]\n\
|
||||||
|
ands r3, r0\n\
|
||||||
|
cmp r3, 0\n\
|
||||||
|
beq _08151EA8\n\
|
||||||
|
b _08151FE6\n\
|
||||||
|
_08151EA8:\n\
|
||||||
|
ldrb r0, [r4, 0x2]\n\
|
||||||
|
subs r0, 0x1\n\
|
||||||
|
strb r0, [r4, 0x2]\n\
|
||||||
|
lsls r0, 24\n\
|
||||||
|
lsrs r0, 24\n\
|
||||||
|
cmp r0, 0xFF\n\
|
||||||
|
beq _08151EB8\n\
|
||||||
|
b _08151FE6\n\
|
||||||
|
_08151EB8:\n\
|
||||||
|
ldrb r0, [r4, 0x9]\n\
|
||||||
|
strb r0, [r4, 0x2]\n\
|
||||||
|
ldrh r0, [r4, 0x6]\n\
|
||||||
|
ldrb r1, [r4, 0x8]\n\
|
||||||
|
lsls r2, 28\n\
|
||||||
|
lsrs r2, 28\n\
|
||||||
|
ldrh r3, [r4, 0x4]\n\
|
||||||
|
bl BlendPalette\n\
|
||||||
|
ldrb r5, [r4, 0xB]\n\
|
||||||
|
lsls r0, r5, 26\n\
|
||||||
|
asrs r0, 30\n\
|
||||||
|
cmp r0, 0x1\n\
|
||||||
|
beq _08151F16\n\
|
||||||
|
cmp r0, 0x1\n\
|
||||||
|
bgt _08151EE4\n\
|
||||||
|
cmp r0, 0\n\
|
||||||
|
beq _08151EEA\n\
|
||||||
|
b _08151FD0\n\
|
||||||
|
.pool\n\
|
||||||
|
_08151EE4:\n\
|
||||||
|
cmp r0, 0x2\n\
|
||||||
|
beq _08151F92\n\
|
||||||
|
b _08151FD0\n\
|
||||||
|
_08151EEA:\n\
|
||||||
|
ldrb r2, [r4, 0x1]\n\
|
||||||
|
lsls r1, r2, 28\n\
|
||||||
|
lsrs r0, r1, 28\n\
|
||||||
|
adds r0, 0x1\n\
|
||||||
|
mov r3, r9\n\
|
||||||
|
ands r0, r3\n\
|
||||||
|
mov r6, r8\n\
|
||||||
|
adds r3, r6, 0\n\
|
||||||
|
ands r3, r2\n\
|
||||||
|
orrs r3, r0\n\
|
||||||
|
strb r3, [r4, 0x1]\n\
|
||||||
|
lsrs r1, 28\n\
|
||||||
|
lsls r0, r5, 28\n\
|
||||||
|
asrs r0, 28\n\
|
||||||
|
cmp r1, r0\n\
|
||||||
|
bne _08151FD0\n\
|
||||||
|
ldrb r0, [r4, 0x3]\n\
|
||||||
|
adds r0, 0x1\n\
|
||||||
|
strb r0, [r4, 0x3]\n\
|
||||||
|
ands r3, r6\n\
|
||||||
|
strb r3, [r4, 0x1]\n\
|
||||||
|
b _08151FD0\n\
|
||||||
|
_08151F16:\n\
|
||||||
|
ldrb r3, [r4, 0x1]\n\
|
||||||
|
movs r0, 0x10\n\
|
||||||
|
ands r0, r3\n\
|
||||||
|
cmp r0, 0\n\
|
||||||
|
beq _08151F54\n\
|
||||||
|
lsls r0, r3, 28\n\
|
||||||
|
lsrs r0, 28\n\
|
||||||
|
subs r0, 0x1\n\
|
||||||
|
mov r5, r9\n\
|
||||||
|
ands r0, r5\n\
|
||||||
|
mov r2, r8\n\
|
||||||
|
ands r2, r3\n\
|
||||||
|
orrs r2, r0\n\
|
||||||
|
strb r2, [r4, 0x1]\n\
|
||||||
|
cmp r0, 0\n\
|
||||||
|
bne _08151FD0\n\
|
||||||
|
ldrb r0, [r4, 0x3]\n\
|
||||||
|
adds r0, 0x1\n\
|
||||||
|
strb r0, [r4, 0x3]\n\
|
||||||
|
lsls r0, r2, 27\n\
|
||||||
|
lsrs r0, 31\n\
|
||||||
|
eors r0, r7\n\
|
||||||
|
ands r0, r7\n\
|
||||||
|
lsls r0, 4\n\
|
||||||
|
movs r3, 0x11\n\
|
||||||
|
negs r3, r3\n\
|
||||||
|
adds r1, r3, 0\n\
|
||||||
|
ands r2, r1\n\
|
||||||
|
orrs r2, r0\n\
|
||||||
|
strb r2, [r4, 0x1]\n\
|
||||||
|
b _08151FD0\n\
|
||||||
|
_08151F54:\n\
|
||||||
|
lsls r0, r5, 28\n\
|
||||||
|
asrs r0, 28\n\
|
||||||
|
subs r0, 0x1\n\
|
||||||
|
mov r5, r9\n\
|
||||||
|
ands r0, r5\n\
|
||||||
|
lsls r2, r3, 28\n\
|
||||||
|
lsrs r1, r2, 28\n\
|
||||||
|
adds r1, 0x1\n\
|
||||||
|
ands r1, r5\n\
|
||||||
|
mov r5, r8\n\
|
||||||
|
ands r3, r5\n\
|
||||||
|
orrs r3, r1\n\
|
||||||
|
strb r3, [r4, 0x1]\n\
|
||||||
|
lsrs r2, 28\n\
|
||||||
|
cmp r2, r0\n\
|
||||||
|
bne _08151FD0\n\
|
||||||
|
ldrb r0, [r4, 0x3]\n\
|
||||||
|
adds r0, 0x1\n\
|
||||||
|
strb r0, [r4, 0x3]\n\
|
||||||
|
lsls r0, r3, 27\n\
|
||||||
|
lsrs r0, 31\n\
|
||||||
|
eors r0, r7\n\
|
||||||
|
ands r0, r7\n\
|
||||||
|
lsls r0, 4\n\
|
||||||
|
movs r2, 0x11\n\
|
||||||
|
negs r2, r2\n\
|
||||||
|
adds r1, r2, 0\n\
|
||||||
|
ands r3, r1\n\
|
||||||
|
orrs r3, r0\n\
|
||||||
|
strb r3, [r4, 0x1]\n\
|
||||||
|
b _08151FD0\n\
|
||||||
|
_08151F92:\n\
|
||||||
|
ldrb r2, [r4, 0x1]\n\
|
||||||
|
movs r0, 0x10\n\
|
||||||
|
ands r0, r2\n\
|
||||||
|
cmp r0, 0\n\
|
||||||
|
beq _08151FA2\n\
|
||||||
|
mov r0, r8\n\
|
||||||
|
ands r0, r2\n\
|
||||||
|
b _08151FB0\n\
|
||||||
|
_08151FA2:\n\
|
||||||
|
lsls r1, r5, 28\n\
|
||||||
|
asrs r1, 28\n\
|
||||||
|
mov r3, r9\n\
|
||||||
|
ands r1, r3\n\
|
||||||
|
mov r0, r8\n\
|
||||||
|
ands r0, r2\n\
|
||||||
|
orrs r0, r1\n\
|
||||||
|
_08151FB0:\n\
|
||||||
|
strb r0, [r4, 0x1]\n\
|
||||||
|
ldrb r2, [r4, 0x1]\n\
|
||||||
|
lsls r0, r2, 27\n\
|
||||||
|
lsrs r0, 31\n\
|
||||||
|
eors r0, r7\n\
|
||||||
|
ands r0, r7\n\
|
||||||
|
lsls r0, 4\n\
|
||||||
|
movs r5, 0x11\n\
|
||||||
|
negs r5, r5\n\
|
||||||
|
adds r1, r5, 0\n\
|
||||||
|
ands r2, r1\n\
|
||||||
|
orrs r2, r0\n\
|
||||||
|
strb r2, [r4, 0x1]\n\
|
||||||
|
ldrb r0, [r4, 0x3]\n\
|
||||||
|
adds r0, 0x1\n\
|
||||||
|
strb r0, [r4, 0x3]\n\
|
||||||
|
_08151FD0:\n\
|
||||||
|
ldrb r1, [r4, 0xA]\n\
|
||||||
|
cmp r1, 0xFF\n\
|
||||||
|
beq _08151FE6\n\
|
||||||
|
ldrb r0, [r4, 0x3]\n\
|
||||||
|
cmp r0, r1\n\
|
||||||
|
bne _08151FE6\n\
|
||||||
|
ldrb r1, [r4]\n\
|
||||||
|
ldr r0, [sp]\n\
|
||||||
|
movs r2, 0\n\
|
||||||
|
bl sub_8151D28\n\
|
||||||
|
_08151FE6:\n\
|
||||||
|
mov r0, r10\n\
|
||||||
|
adds r0, 0x1\n\
|
||||||
|
lsls r0, 24\n\
|
||||||
|
lsrs r0, 24\n\
|
||||||
|
mov r10, r0\n\
|
||||||
|
cmp r0, 0xF\n\
|
||||||
|
bhi _08151FF6\n\
|
||||||
|
b _08151E78\n\
|
||||||
|
_08151FF6:\n\
|
||||||
|
add sp, 0x4\n\
|
||||||
|
pop {r3-r5}\n\
|
||||||
|
mov r8, r3\n\
|
||||||
|
mov r9, r4\n\
|
||||||
|
mov r10, r5\n\
|
||||||
|
pop {r4-r7}\n\
|
||||||
|
pop {r0}\n\
|
||||||
|
bx r0");
|
||||||
|
}
|
||||||
|
#endif // NONMATCHING
|
||||||
|
|
||||||
|
void sub_8152008(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height)
|
||||||
|
{
|
||||||
|
u16 *_dest;
|
||||||
|
u8 i;
|
||||||
|
u8 j;
|
||||||
|
i = 0;
|
||||||
|
dest = &dest[top * 32 + left];
|
||||||
|
for (; i < height; i++)
|
||||||
|
{
|
||||||
|
_dest = dest + i * 32;
|
||||||
|
for (j = 0; j < width; j++)
|
||||||
|
{
|
||||||
|
*_dest++ = src;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_8152058(u16 *dest, u16 *src, u8 left, u8 top, u8 width, u8 height)
|
||||||
|
{
|
||||||
|
u16 *_dest;
|
||||||
|
u16 *_src = src;
|
||||||
|
u8 i;
|
||||||
|
u8 j;
|
||||||
|
i = 0;
|
||||||
|
dest = &dest[top * 32 + left];
|
||||||
|
for (; i < height; i++)
|
||||||
|
{
|
||||||
|
_dest = dest + i * 32;
|
||||||
|
for (j = 0; j < width; j++)
|
||||||
|
{
|
||||||
|
*_dest++ = *_src++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user