mirror of https://github.com/zeldaret/tmc.git
commit
5d90474ae8
|
@ -1,116 +0,0 @@
|
|||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
ldr r1, _080789BC @ =gCarriedEntity
|
||||
ldrb r0, [r1]
|
||||
cmp r0, #0
|
||||
beq _080789C0
|
||||
ldrb r0, [r1, #1]
|
||||
b _08078A88
|
||||
.align 2, 0
|
||||
_080789BC: .4byte gCarriedEntity
|
||||
_080789C0:
|
||||
ldr r0, _08078A5C @ =gPlayerState
|
||||
ldr r0, [r0, #0x30]
|
||||
movs r1, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _08078A56
|
||||
ldr r0, _08078A60 @ =gPlayerEntity
|
||||
bl sub_080B1B0C
|
||||
adds r4, r0, #0
|
||||
cmp r4, #0xf
|
||||
bls _080789E6
|
||||
ldr r0, _08078A64 @ =gUnk_080084BC
|
||||
adds r1, r4, #0
|
||||
subs r1, #0x10
|
||||
adds r1, r1, r0
|
||||
ldrb r0, [r1]
|
||||
cmp r0, #0xf
|
||||
beq _08078A56
|
||||
_080789E6:
|
||||
ldr r0, _08078A5C @ =gPlayerState
|
||||
ldrb r0, [r0, #0x12]
|
||||
cmp r0, #0x12
|
||||
beq _08078A56
|
||||
ldr r3, _08078A68 @ =gCarriedEntity
|
||||
movs r0, #1
|
||||
strb r0, [r3]
|
||||
ldrb r4, [r3, #2]
|
||||
cmp r4, #0
|
||||
beq _08078A2E
|
||||
ldr r2, _08078A60 @ =gPlayerEntity
|
||||
ldrb r1, [r2, #0x14]
|
||||
movs r0, #6
|
||||
ands r0, r1
|
||||
ldr r1, _08078A6C @ =gUnk_0811BFE0
|
||||
adds r6, r0, r1
|
||||
adds r7, r2, #0
|
||||
adds r3, #8
|
||||
mov r8, r3
|
||||
_08078A0C:
|
||||
lsls r0, r4, #2
|
||||
mov r1, r8
|
||||
adds r5, r0, r1
|
||||
ldr r1, [r5]
|
||||
cmp r1, #0
|
||||
beq _08078A26
|
||||
ldrb r2, [r6]
|
||||
ldrb r3, [r6, #1]
|
||||
adds r0, r7, #0
|
||||
bl sub_0807A180
|
||||
cmp r0, #0
|
||||
bne _08078A74
|
||||
_08078A26:
|
||||
subs r4, #1
|
||||
ldr r7, _08078A60 @ =gPlayerEntity
|
||||
cmp r4, #0
|
||||
bne _08078A0C
|
||||
_08078A2E:
|
||||
ldr r0, _08078A60 @ =gPlayerEntity
|
||||
ldrb r1, [r0, #0x14]
|
||||
movs r2, #6
|
||||
ands r2, r1
|
||||
ldr r1, _08078A70 @ =gUnk_08007DF4
|
||||
adds r2, r2, r1
|
||||
movs r1, #0
|
||||
ldrsb r1, [r2, r1]
|
||||
ldrb r2, [r2, #1]
|
||||
lsls r2, r2, #0x18
|
||||
asrs r2, r2, #0x18
|
||||
bl sub_080B1A0C
|
||||
ldr r4, _08078A68 @ =gCarriedEntity
|
||||
strh r0, [r4, #4]
|
||||
movs r1, #6
|
||||
bl sub_0806FC24
|
||||
cmp r0, #0
|
||||
bne _08078A84
|
||||
_08078A56:
|
||||
movs r0, #0
|
||||
b _08078A88
|
||||
.align 2, 0
|
||||
_08078A5C: .4byte gPlayerState
|
||||
_08078A60: .4byte gPlayerEntity
|
||||
_08078A64: .4byte gUnk_080084BC
|
||||
_08078A68: .4byte gCarriedEntity
|
||||
_08078A6C: .4byte gUnk_0811BFE0
|
||||
_08078A70: .4byte gUnk_08007DF4
|
||||
_08078A74:
|
||||
mov r0, r8
|
||||
subs r0, #8
|
||||
ldr r1, [r5]
|
||||
str r1, [r0, #8]
|
||||
movs r1, #2
|
||||
strb r1, [r0, #1]
|
||||
movs r0, #2
|
||||
b _08078A88
|
||||
_08078A84:
|
||||
movs r0, #1
|
||||
strb r0, [r4, #1]
|
||||
_08078A88:
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
|
@ -1,123 +0,0 @@
|
|||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
bl ClearBgAnimations
|
||||
bl sub_0807BFA8
|
||||
ldr r7, _0807C0B8 @ =0x0000FFFF
|
||||
ldr r6, _0807C0BC @ =gMapBottom+0x5004
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #5
|
||||
mov r8, r0
|
||||
adds r0, r7, #0
|
||||
adds r1, r6, #0
|
||||
mov r2, r8
|
||||
bl MemFill16
|
||||
movs r5, #0
|
||||
strh r5, [r6]
|
||||
ldr r4, _0807C0C0 @ =gMapTop+0x5004
|
||||
adds r0, r7, #0
|
||||
adds r1, r4, #0
|
||||
mov r2, r8
|
||||
bl MemFill16
|
||||
strh r5, [r4]
|
||||
ldr r2, _0807C0C4 @ =gRoomControls
|
||||
ldr r0, _0807C0C8 @ =gArea
|
||||
ldr r1, _0807C0CC @ =0x0000085C
|
||||
adds r4, r0, r1
|
||||
ldr r0, [r4]
|
||||
ldr r1, [r2, #0x34]
|
||||
ldr r0, [r0, #8]
|
||||
cmp r1, r0
|
||||
beq _0807C01C
|
||||
str r0, [r2, #0x34]
|
||||
bl sub_080197D4
|
||||
_0807C01C:
|
||||
ldr r0, [r4]
|
||||
ldr r0, [r0, #0x10]
|
||||
bl sub_080197D4
|
||||
ldr r1, _0807C0D0 @ =gPaletteBuffer
|
||||
adds r0, r1, #0
|
||||
adds r0, #0x60
|
||||
movs r2, #0xa8
|
||||
lsls r2, r2, #2
|
||||
adds r1, r1, r2
|
||||
movs r2, #0x20
|
||||
bl MemCopy
|
||||
ldr r2, _0807C0D4 @ =gUsedPalettes
|
||||
ldr r0, [r2]
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #0xe
|
||||
orrs r0, r1
|
||||
str r0, [r2]
|
||||
ldr r0, [r4]
|
||||
ldr r0, [r0, #0x14]
|
||||
cmp r0, #0
|
||||
beq _0807C04E
|
||||
bl LoadBgAnimations
|
||||
_0807C04E:
|
||||
adds r5, r6, #0
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #5
|
||||
adds r6, r5, r0
|
||||
adds r0, r7, #0
|
||||
adds r1, r6, #0
|
||||
mov r2, r8
|
||||
bl MemFill16
|
||||
movs r2, #0
|
||||
ldr r3, _0807C0D8 @ =0x000007FF
|
||||
adds r4, r7, #0
|
||||
_0807C066:
|
||||
ldrh r0, [r5]
|
||||
cmp r0, r3
|
||||
bhi _0807C078
|
||||
lsls r0, r0, #1
|
||||
adds r1, r0, r6
|
||||
ldrh r0, [r1]
|
||||
cmp r0, r4
|
||||
bne _0807C078
|
||||
strh r2, [r1]
|
||||
_0807C078:
|
||||
adds r2, #1
|
||||
adds r5, #2
|
||||
cmp r2, r3
|
||||
ble _0807C066
|
||||
movs r2, #0x80
|
||||
lsls r2, r2, #5
|
||||
ldr r5, _0807C0C0 @ =gMapTop+0x5004
|
||||
adds r6, r5, r2
|
||||
ldr r4, _0807C0B8 @ =0x0000FFFF
|
||||
adds r0, r4, #0
|
||||
adds r1, r6, #0
|
||||
bl MemFill16
|
||||
movs r2, #0
|
||||
ldr r3, _0807C0D8 @ =0x000007FF
|
||||
_0807C096:
|
||||
ldrh r0, [r5]
|
||||
cmp r0, r3
|
||||
bhi _0807C0A8
|
||||
lsls r0, r0, #1
|
||||
adds r1, r0, r6
|
||||
ldrh r0, [r1]
|
||||
cmp r0, r4
|
||||
bne _0807C0A8
|
||||
strh r2, [r1]
|
||||
_0807C0A8:
|
||||
adds r2, #1
|
||||
adds r5, #2
|
||||
cmp r2, r3
|
||||
ble _0807C096
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_0807C0B8: .4byte 0x0000FFFF
|
||||
_0807C0BC: .4byte gMapBottom+0x5004
|
||||
_0807C0C0: .4byte gMapTop+0x5004
|
||||
_0807C0C4: .4byte gRoomControls
|
||||
_0807C0C8: .4byte gArea
|
||||
_0807C0CC: .4byte 0x0000085C
|
||||
_0807C0D0: .4byte gPaletteBuffer
|
||||
_0807C0D4: .4byte gUsedPalettes
|
||||
_0807C0D8: .4byte 0x000007FF
|
||||
.syntax divided
|
|
@ -1,98 +0,0 @@
|
|||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, sb
|
||||
mov r6, r8
|
||||
push {r6, r7}
|
||||
mov r8, r0
|
||||
adds r4, r1, #0
|
||||
mov ip, r2
|
||||
mov r0, ip
|
||||
muls r0, r4, r0
|
||||
lsls r0, r0, #1
|
||||
add r0, r8
|
||||
subs r7, r0, #2
|
||||
mov r0, ip
|
||||
subs r0, #1
|
||||
lsls r0, r0, #7
|
||||
add r0, r8
|
||||
lsls r3, r4, #1
|
||||
subs r1, r3, #2
|
||||
adds r0, r0, r1
|
||||
movs r5, #0
|
||||
cmp r5, ip
|
||||
bhs _0807C906
|
||||
mov sb, r3
|
||||
_0807C8DE:
|
||||
movs r2, #0
|
||||
adds r6, r0, #0
|
||||
subs r6, #0x80
|
||||
cmp r2, r4
|
||||
bhs _0807C8FA
|
||||
adds r1, r7, #0
|
||||
adds r3, r0, #0
|
||||
_0807C8EC:
|
||||
ldrh r0, [r1]
|
||||
strh r0, [r3]
|
||||
subs r1, #2
|
||||
subs r3, #2
|
||||
adds r2, #1
|
||||
cmp r2, r4
|
||||
blo _0807C8EC
|
||||
_0807C8FA:
|
||||
adds r0, r6, #0
|
||||
mov r1, sb
|
||||
subs r7, r7, r1
|
||||
adds r5, #1
|
||||
cmp r5, ip
|
||||
blo _0807C8DE
|
||||
_0807C906:
|
||||
movs r0, #0x40
|
||||
subs r6, r0, r4
|
||||
movs r5, #0
|
||||
lsls r0, r4, #1
|
||||
mov r2, ip
|
||||
lsls r7, r2, #7
|
||||
mov r2, r8
|
||||
adds r1, r2, r0
|
||||
_0807C916:
|
||||
lsls r0, r5, #7
|
||||
adds r0, r1, r0
|
||||
movs r2, #0
|
||||
adds r3, r5, #1
|
||||
cmp r2, r6
|
||||
bhs _0807C92E
|
||||
movs r4, #0
|
||||
_0807C924:
|
||||
strh r4, [r0]
|
||||
adds r0, #2
|
||||
adds r2, #1
|
||||
cmp r2, r6
|
||||
blo _0807C924
|
||||
_0807C92E:
|
||||
adds r5, r3, #0
|
||||
cmp r5, #0x3f
|
||||
bls _0807C916
|
||||
movs r0, #0x40
|
||||
mov r1, ip
|
||||
subs r6, r0, r1
|
||||
mov r2, r8
|
||||
adds r0, r2, r7
|
||||
movs r5, #0
|
||||
cmp r5, r6
|
||||
bhs _0807C956
|
||||
adds r4, r0, #0
|
||||
_0807C946:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x80
|
||||
bl MemClear
|
||||
adds r4, #0x80
|
||||
adds r5, #1
|
||||
cmp r5, r6
|
||||
blo _0807C946
|
||||
_0807C956:
|
||||
pop {r3, r4}
|
||||
mov r8, r3
|
||||
mov sb, r4
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
|
@ -18,6 +18,7 @@
|
|||
#include "save.h"
|
||||
#include "screen.h"
|
||||
#include "screenTransitions.h"
|
||||
#include "main.h"
|
||||
|
||||
static void sub_08077E54(ItemBehavior* beh);
|
||||
|
||||
|
@ -25,7 +26,7 @@ extern void sub_0800857C(Entity*);
|
|||
extern void SetDefaultPriorityForKind(Entity*);
|
||||
extern void sub_0809D738(Entity*);
|
||||
extern s32 Mod(s32, s32);
|
||||
extern void sub_08003FDE(Entity*, u32, u32, u32);
|
||||
extern u32 sub_08003FDE(Entity*, Entity*, u32, u32);
|
||||
extern u32 sub_080B1B84(u32, u32);
|
||||
extern void sub_08080BC4(void);
|
||||
void sub_080790E4(Entity* this);
|
||||
|
@ -148,6 +149,23 @@ extern u32 sub_08004202(Entity*, u8*, u32);
|
|||
extern u32 gUnk_02022830[];
|
||||
extern u16* gUnk_0800823C[];
|
||||
|
||||
extern bool32 sub_0806FC24(u32, u32);
|
||||
|
||||
extern const u8 gUnk_0800845C[];
|
||||
extern const u8 gUnk_0811BFE0[];
|
||||
extern const u8 gUnk_08007DF4[];
|
||||
extern const u8 gUnk_080084BC[];
|
||||
|
||||
u32 sub_0807A180(Entity*, Entity*, u32, u32);
|
||||
|
||||
extern u32 gUsedPalettes;
|
||||
|
||||
extern void ClearBgAnimations(void);
|
||||
extern void sub_080197D4(const void*);
|
||||
extern void LoadBgAnimations(u16*);
|
||||
|
||||
void sub_0807BFA8(void);
|
||||
|
||||
void UpdateActiveItems(PlayerEntity* this) {
|
||||
u32 index;
|
||||
|
||||
|
@ -1277,7 +1295,53 @@ void FreeCarryEntity(Entity* this) {
|
|||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_080789A8.inc", u32 sub_080789A8())
|
||||
u32 sub_080789A8(void) {
|
||||
u32 uVar2;
|
||||
Entity* entity;
|
||||
u32 uVar4;
|
||||
const u8* ptr;
|
||||
const u8* ptr2;
|
||||
Entity** tmp1;
|
||||
|
||||
if (gCarriedEntity.unk_0)
|
||||
return (u32)gCarriedEntity.unk_1;
|
||||
|
||||
if (!(gPlayerState.flags & PL_MINISH)) {
|
||||
uVar4 = sub_080B1B0C(&gPlayerEntity);
|
||||
if (uVar4 >= 0x10 && (gUnk_080084BC[uVar4 - 0x10] == 0xf))
|
||||
return 0;
|
||||
if (gPlayerState.floor_type == 0x12)
|
||||
return 0;
|
||||
|
||||
gCarriedEntity.unk_0 = 1;
|
||||
uVar4 = (u32)gCarriedEntity.count;
|
||||
|
||||
if (uVar4 > 0) {
|
||||
ptr2 = &gUnk_0811BFE0[gPlayerEntity.animationState & 6];
|
||||
while (uVar4 > 0) {
|
||||
tmp1 = &gCarriedEntity.unk_8 + uVar4;
|
||||
entity = *tmp1;
|
||||
if ((entity != NULL) && (sub_0807A180(&gPlayerEntity, entity, ptr2[0], ptr2[1]) != 0)) {
|
||||
gCarriedEntity.unk_8 = *tmp1;
|
||||
gCarriedEntity.unk_1 = 2;
|
||||
return 2;
|
||||
}
|
||||
uVar4--;
|
||||
}
|
||||
}
|
||||
|
||||
ptr = &gUnk_08007DF4[gPlayerEntity.animationState & 6];
|
||||
gCarriedEntity.unk_4 = uVar2 = sub_080B1A0C(&gPlayerEntity, (s8)ptr[0], (s8)ptr[1]);
|
||||
|
||||
if (!sub_0806FC24(uVar2, 6))
|
||||
return 0;
|
||||
|
||||
} else
|
||||
return 0;
|
||||
|
||||
gCarriedEntity.unk_1 = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
void SetPlayerControl(PlayerControlMode mode) {
|
||||
if (gPlayerState.controlMode != CONTROL_DISABLED) {
|
||||
|
@ -2380,11 +2444,11 @@ bool32 HasSwordEquipped(void) {
|
|||
}
|
||||
}
|
||||
|
||||
void sub_0807A180(Entity* param_1, u32 param_2, u32 param_3, u32 param_4) {
|
||||
u32 sub_0807A180(Entity* param_1, Entity* param_2, u32 param_3, u32 param_4) {
|
||||
GenericEntity stackEntity;
|
||||
PositionRelative(param_1, &stackEntity.base, 0, -0x40000);
|
||||
stackEntity.base.animationState = param_1->animationState;
|
||||
sub_08003FDE(&stackEntity.base, param_2, param_3, param_4);
|
||||
return sub_08003FDE(&stackEntity.base, param_2, param_3, param_4);
|
||||
}
|
||||
|
||||
void UpdateFloorType(void) {
|
||||
|
@ -3520,7 +3584,54 @@ void sub_0807BFA8(void) {
|
|||
gRoomControls.height = (gArea.pCurrentRoomInfo)->pixel_height;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_0807BFD0.inc", void sub_0807BFD0())
|
||||
void sub_0807BFD0(void) {
|
||||
s32 index;
|
||||
u16* puVar2;
|
||||
u16* puVar3;
|
||||
u16* ptr;
|
||||
typeof(gMapTop)* newptr;
|
||||
|
||||
ClearBgAnimations();
|
||||
sub_0807BFA8();
|
||||
MemFill16(0xffff, gMapBottom.metatileTypes, 0x1000);
|
||||
gMapBottom.metatileTypes[0] = 0;
|
||||
MemFill16(0xffff, gMapTop.metatileTypes, 0x1000);
|
||||
gMapTop.metatileTypes[0] = 0;
|
||||
|
||||
if ((void*)gRoomControls.unk_34 != (gArea.pCurrentRoomInfo)->tileset) {
|
||||
gRoomControls.unk_34 = (u32)(gArea.pCurrentRoomInfo)->tileset;
|
||||
sub_080197D4((gArea.pCurrentRoomInfo)->tileset);
|
||||
}
|
||||
|
||||
sub_080197D4((gArea.pCurrentRoomInfo)->metatiles);
|
||||
ptr = gPaletteBuffer;
|
||||
MemCopy(&ptr[0x30], &ptr[0x150], 0x20);
|
||||
gUsedPalettes |= 0x200000;
|
||||
|
||||
if ((gArea.pCurrentRoomInfo)->bg_anim != NULL) {
|
||||
LoadBgAnimations((gArea.pCurrentRoomInfo)->bg_anim);
|
||||
}
|
||||
|
||||
puVar2 = gMapBottom.metatileTypes;
|
||||
puVar3 = gMapBottom.unkData2;
|
||||
MemFill16(0xffff, puVar3, 0x1000);
|
||||
|
||||
for (index = 0; index < 0x800; index++, puVar2++) {
|
||||
if ((*puVar2 < 0x800) && (puVar3[*puVar2] == 0xffff)) {
|
||||
puVar3[*puVar2] = index;
|
||||
}
|
||||
}
|
||||
|
||||
puVar2 = gMapTop.metatileTypes;
|
||||
puVar3 = gMapTop.unkData2;
|
||||
MemFill16(0xffff, puVar3, 0x1000);
|
||||
|
||||
for (index = 0; index < 0x800; index++, puVar2++) {
|
||||
if ((*puVar2 < 0x800) && (puVar3[*puVar2] == 0xffff)) {
|
||||
puVar3[*puVar2] = index;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LoadRoomGfx(void) {
|
||||
RoomControls* roomControls;
|
||||
|
@ -3888,7 +3999,45 @@ void sub_0807C898(void) {
|
|||
gRoomTransition.field2d = 0;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_0807C8B0.inc", void sub_0807C8B0(u16* a, u32 b, u32 c))
|
||||
void sub_0807C8B0(u16* data, u32 width, u32 height) {
|
||||
u16* dst_ptr;
|
||||
u16* src_ptr;
|
||||
u16* dst_ptr_cpy;
|
||||
u16* src_ptr_cpy;
|
||||
u32 innerIndex;
|
||||
u32 index;
|
||||
u16* prev_line;
|
||||
u32 diff;
|
||||
|
||||
src_ptr = data + width * height - 1;
|
||||
dst_ptr = data + (height - 1) * 0x40 + (width - 1);
|
||||
|
||||
for (index = 0; index < height; index++) {
|
||||
src_ptr_cpy = src_ptr; //[index * -width];
|
||||
dst_ptr_cpy = dst_ptr; //[index * -0x40];
|
||||
for (innerIndex = 0; innerIndex < width; innerIndex++) {
|
||||
dst_ptr_cpy[-innerIndex] = src_ptr_cpy[-innerIndex];
|
||||
}
|
||||
dst_ptr -= 0x40;
|
||||
src_ptr -= width;
|
||||
}
|
||||
|
||||
diff = 0x40 - width;
|
||||
for (index = 0; index < 0x40; index++) {
|
||||
dst_ptr = data + width - index * -0x40;
|
||||
|
||||
for (innerIndex = 0; innerIndex < diff; innerIndex++) {
|
||||
dst_ptr[innerIndex] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
diff = 0x40 - height;
|
||||
dst_ptr = data + height * 0x40;
|
||||
for (index = 0; index < diff; index++) {
|
||||
MemClear(&dst_ptr[index * 0x40], 0x80);
|
||||
// dst_ptr += 0x40;
|
||||
}
|
||||
}
|
||||
|
||||
void LoadCompressedMapData(void* dest, u32 offset) {
|
||||
void* src;
|
||||
|
|
Loading…
Reference in New Issue