Merge pull request #580 from nonmatch/patch-58

Match SetEntityObjPalette
This commit is contained in:
notyourav 2022-10-20 17:48:00 -07:00 committed by GitHub
commit 73527c63bb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 94 deletions

View File

@ -1,80 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
adds r4, r0, #0
adds r3, r1, #0
cmp r3, #0
bge _0801D1A8
movs r3, #0
_0801D1A8:
adds r0, r4, #0
adds r0, #0x28
ldrb r0, [r0]
subs r0, #1
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #0x7e
bls _0801D1BE
adds r0, r4, #0
adds r0, #0x27
strb r3, [r0]
_0801D1BE:
movs r0, #0xf
adds r1, r3, #0
ands r1, r0
ldrb r2, [r4, #0x1a]
movs r5, #0x10
rsbs r5, r5, #0
adds r0, r5, #0
ands r0, r2
orrs r0, r1
movs r2, #0xf
adds r1, r3, #0
ands r1, r2
lsls r1, r1, #4
ands r0, r2
orrs r0, r1
strb r0, [r4, #0x1a]
lsls r1, r3, #2
ldr r0, _0801D22C @ =gPaletteList
adds r4, r1, r0
ldr r0, [r4]
lsls r0, r0, #0x1c
lsrs r0, r0, #0x1c
cmp r0, #4
beq _0801D22A
ldrb r0, [r4, #1]
adds r0, #1
strb r0, [r4, #1]
ldr r0, [r4]
lsls r0, r0, #0x18
lsrs r3, r0, #0x1c
ldrb r1, [r4]
adds r0, r5, #0
ands r0, r1
movs r1, #3
orrs r0, r1
strb r0, [r4]
subs r3, #1
cmp r3, #0
beq _0801D22A
movs r7, #0xf
adds r6, r5, #0
movs r5, #2
_0801D212:
adds r4, #4
lsls r2, r3, #4
ldrb r1, [r4]
adds r0, r7, #0
ands r0, r1
orrs r0, r2
ands r0, r6
orrs r0, r5
strb r0, [r4]
subs r3, #1
cmp r3, #0
bne _0801D212
_0801D22A:
pop {r4, r5, r6, r7, pc}
.align 2, 0
_0801D22C: .4byte gPaletteList
.syntax divided

View File

@ -13,13 +13,20 @@ extern Palette gUnk_02001A3C;
void LoadObjPaletteAtIndex(u32 a1, u32 a2);
void CleanUpObjPalettes();
u32 FindFreeObjPalette(u32);
void SetEntityObjPalette(Entity*, u32);
void SetEntityObjPalette(Entity*, s32);
u32 sub_0801D458(u32);
void sub_0801D48C(u32, u32);
static void sub_0801CFD0(u32 a1);
extern union SplitWord gUnk_08133368[];
typedef struct {
u8 _0_0 : 4;
u8 _0_4 : 4;
u8 _1;
u16 _2;
} Palette2;
void ResetPaletteTable(u32 a1) {
u32 i;
@ -152,9 +159,11 @@ u32 FindFreeObjPalette(u32 paletteCount) {
return 0xffffffff;
}
NONMATCH("asm/non_matching/color/SetEntityObjPalette.inc", void SetEntityObjPalette(Entity* entity, u32 palette)) {
void SetEntityObjPalette(Entity* entity, s32 palette) {
u32 uVar1;
Palette* pal;
u32 mask;
FORCE_REGISTER(u32 tmp, r1);
Palette2* pPVar1;
if (palette < 0) {
palette = 0;
@ -162,21 +171,26 @@ NONMATCH("asm/non_matching/color/SetEntityObjPalette.inc", void SetEntityObjPale
if (0x7e < (u8)(entity->spriteAnimation[2] - 1)) {
entity->spriteAnimation[1] = palette;
}
entity->palette.b.b0 = palette;
entity->palette.b.b4 = palette;
pal = &gPaletteList[palette];
if ((s8)pal->_0_0 != 4) {
pal->_1++;
uVar1 = pal->_0_4;
pal->_0_0 = 3;
entity->palette.b.b0 = palette & 0xf;
mask = 0xF;
tmp = (palette & mask) << 4;
*(u8*)&entity->palette.b &= mask;
*(u8*)&entity->palette.b |= tmp;
pPVar1 = (Palette2*)&gPaletteList[palette];
if ((s8)pPVar1->_0_0 != 4) {
pPVar1->_1++;
uVar1 = pPVar1->_0_4;
pPVar1->_0_0 = 3;
while (uVar1 = uVar1 - 1, uVar1 != 0) {
pal = pal + 1;
pal->_0_4 = uVar1;
pal->_0_0 = 2;
pPVar1 = pPVar1 + 1;
pPVar1->_0_4 = uVar1;
pPVar1->_0_0 = 2;
}
}
}
END_NONMATCH
void UnloadOBJPalette(Entity* entity) {
u8* p = &entity->spriteAnimation[1];