Merge pull request #535 from hatal175/sub_080878CC

This commit is contained in:
notyourav
2022-07-22 11:18:11 -07:00
committed by GitHub
6 changed files with 176 additions and 557 deletions
-314
View File
@@ -1,314 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
adds r6, r0, #0
adds r7, r1, #0
bl GetInventoryValue
adds r5, r0, #0
lsls r1, r6, #3
ldr r0, _08054010 @ =gItemMetaData
adds r4, r1, r0
cmp r5, #0
bne _08054014
ldrh r0, [r4, #4]
mov r8, r0
b _08054018
.align 2, 0
_08054010: .4byte gItemMetaData
_08054014:
ldrh r2, [r4, #6]
mov r8, r2
_08054018:
adds r0, r6, #0
bl ItemIsBottle
cmp r0, #0
bne _08054034
adds r0, r6, #0
bl PutItemOnSlot
cmp r5, #0
bne _08054034
adds r0, r6, #0
movs r1, #1
bl SetInventoryValue
_08054034:
ldrb r0, [r4, #1]
cmp r0, #0x12
bls _0805403C
b _0805427C
_0805403C:
lsls r0, r0, #2
ldr r1, _08054048 @ =_0805404C
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08054048: .4byte _0805404C
_0805404C: @ jump table
.4byte _0805427C @ case 0
.4byte _08054098 @ case 1
.4byte _080540A6 @ case 2
.4byte _080540C0 @ case 3
.4byte _08054104 @ case 4
.4byte _0805414C @ case 5
.4byte _08054154 @ case 6
.4byte _08054194 @ case 7
.4byte _080541B6 @ case 8
.4byte _080541F0 @ case 9
.4byte _08054212 @ case 10
.4byte _080541F8 @ case 11
.4byte _08054238 @ case 12
.4byte _08054174 @ case 13
.4byte _08054240 @ case 14
.4byte _0805425C @ case 15
.4byte _08054264 @ case 16
.4byte _080541B0 @ case 17
.4byte _0805417C @ case 18
_08054098:
ldrb r0, [r4, #2]
bl ModHealth
movs r0, #0x71
bl SoundReq
b _0805427C
_080540A6:
ldr r0, _080540BC @ =gUnk_080FD5A8
ldrb r1, [r4, #2]
lsls r1, r1, #1
adds r1, r1, r0
ldrh r0, [r1]
bl ModRupees
movs r0, #0x6f
bl SoundReq
b _0805427C
.align 2, 0
_080540BC: .4byte gUnk_080FD5A8
_080540C0:
movs r5, #0
movs r4, #0x1c
b _080540CA
_080540C6:
adds r4, r1, #1
adds r5, #1
_080540CA:
cmp r5, #3
bls _080540D0
b _0805427C
_080540D0:
adds r0, r4, #0
bl GetInventoryValue
adds r1, r4, #0
cmp r0, #0
bne _080540C6
adds r6, r4, #0
ldr r0, _08054100 @ =gSave
adds r0, #0xb6
adds r1, r5, r0
ldrb r0, [r1]
cmp r0, #0
bne _080540EE
movs r0, #0x20
strb r0, [r1]
_080540EE:
adds r0, r6, #0
movs r1, #1
bl SetInventoryValue
adds r0, r6, #0
bl PutItemOnSlot
b _0805427C
.align 2, 0
_08054100: .4byte gSave
_08054104:
movs r5, #0
ldr r0, _08054144 @ =gSave
adds r2, r0, #0
adds r2, #0xb6
ldrb r1, [r2]
adds r3, r0, #0
cmp r1, #0x20
beq _08054126
adds r1, r2, #0
_08054116:
adds r5, #1
cmp r5, #3
bls _0805411E
b _0805427C
_0805411E:
adds r0, r5, r1
ldrb r0, [r0]
cmp r0, #0x20
bne _08054116
_08054126:
cmp r5, #3
bls _0805412C
b _0805427C
_0805412C:
adds r0, r3, #0
adds r0, #0xb6
adds r0, r5, r0
strb r6, [r0]
adds r0, r6, #0
movs r1, #1
bl SetInventoryValue
ldr r0, _08054148 @ =0x00000109
bl SoundReq
b _0805427C
.align 2, 0
_08054144: .4byte gSave
_08054148: .4byte 0x00000109
_0805414C:
movs r0, #1
bl sub_080526F8
b _0805424E
_08054154:
ldr r1, _08054168 @ =gSave
ldr r0, _0805416C @ =gArea
ldr r2, _08054170 @ =0x0000046C
adds r1, r1, r2
ldrb r0, [r0, #3]
adds r1, r1, r0
ldrb r0, [r1]
ldrb r2, [r4, #2]
orrs r0, r2
b _0805427A
.align 2, 0
_08054168: .4byte gSave
_0805416C: .4byte gArea
_08054170: .4byte 0x0000046C
_08054174:
movs r0, #0x72
bl sub_0801E738
b _0805427C
_0805417C:
cmp r6, #0xb
bne _0805418A
movs r0, #0xc
movs r1, #0
bl SetInventoryValue
b _080541B0
_0805418A:
movs r0, #0xb
movs r1, #0
bl SetInventoryValue
b _080541B0
_08054194:
cmp r6, #7
bne _080541A2
movs r0, #8
movs r1, #0
bl SetInventoryValue
b _080541AA
_080541A2:
movs r0, #7
movs r1, #0
bl SetInventoryValue
_080541AA:
movs r0, #0x63
bl ModBombs
_080541B0:
bl LoadItemGfx
b _0805427C
_080541B6:
cmp r5, #0
bne _080541CA
movs r0, #7
movs r1, #1
bl SetInventoryValue
movs r0, #7
bl PutItemOnSlot
b _080541E2
_080541CA:
ldr r0, _080541EC @ =gSave
adds r1, r0, #0
adds r1, #0xae
ldrb r0, [r1]
adds r0, #1
strb r0, [r1]
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #3
bls _080541E2
movs r0, #3
strb r0, [r1]
_080541E2:
movs r0, #0x63
bl ModBombs
b _0805427C
.align 2, 0
_080541EC: .4byte gSave
_080541F0:
ldrb r0, [r4, #2]
bl ModBombs
b _0805424E
_080541F8:
movs r0, #0x66
bl GetInventoryValue
cmp r0, #0
bne _0805420A
movs r0, #0x66
movs r1, #1
bl SetInventoryValue
_0805420A:
movs r0, #0x63
bl ModArrows
b _080541B0
_08054212:
ldr r0, _08054234 @ =gSave
adds r1, r0, #0
adds r1, #0xaf
ldrb r0, [r1]
adds r0, #1
strb r0, [r1]
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #3
bls _0805422A
movs r0, #3
strb r0, [r1]
_0805422A:
movs r0, #0x63
bl ModArrows
b _0805427C
.align 2, 0
_08054234: .4byte gSave
_08054238:
ldrb r0, [r4, #2]
bl ModArrows
b _0805424E
_08054240:
movs r0, #0x3f
movs r1, #1
bl SetInventoryValue
adds r0, r7, #0
bl ModShells
_0805424E:
ldr r0, _08054258 @ =0x00000103
bl SoundReq
b _0805427C
.align 2, 0
_08054258: .4byte 0x00000103
_0805425C:
adds r0, r7, #0
bl sub_0801E738
b _0805427C
_08054264:
ldr r0, _08054284 @ =gSave
adds r1, r0, #0
adds r1, #0xa8
ldrb r0, [r1]
adds r0, #1
strb r0, [r1]
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #3
bls _0805427C
movs r0, #3
_0805427A:
strb r0, [r1]
_0805427C:
mov r0, r8
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}
.align 2, 0
_08054284: .4byte gSave
.syntax divided
-104
View File
@@ -1,104 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0x10
adds r7, r0, #0
movs r1, #0x2e
ldrsh r0, [r7, r1]
str r0, [sp]
movs r0, #0x32
ldrsh r2, [r7, r0]
str r2, [sp, #4]
adds r0, r7, #0
adds r0, #0x38
ldrb r0, [r0]
mov r8, r0
movs r0, #0x10
rsbs r0, r0, #0
mov r1, r8
lsls r1, r1, #0x18
str r1, [sp, #8]
_080878F8:
movs r2, #0x10
rsbs r2, r2, #0
mov sb, r2
ldr r1, [sp]
adds r1, r1, r0
mov sl, r1
adds r0, #0x10
str r0, [sp, #0xc]
mov r6, sl
_0808790A:
ldr r2, _0808795C @ =gRoomControls
ldrh r0, [r2, #6]
subs r0, r6, r0
lsrs r4, r0, #4
movs r0, #0x3f
ands r4, r0
ldr r5, [sp, #4]
add r5, sb
ldrh r0, [r2, #8]
subs r0, r5, r0
lsrs r0, r0, #4
movs r1, #0x3f
ands r0, r1
lsls r0, r0, #6
orrs r4, r0
adds r0, r4, #0
ldr r2, [sp, #8]
lsrs r1, r2, #0x18
bl sub_080B1AE0
cmp r0, #0x2e
bne _08087970
adds r0, r4, #0
mov r1, r8
bl GetTileType
adds r1, r0, #0
movs r0, #0xda
lsls r0, r0, #2
cmp r1, r0
bhi _08087960
subs r0, #1
cmp r1, r0
blo _08087960
adds r0, r7, #0
movs r1, #3
adds r2, r6, #0
adds r3, r5, #0
bl sub_08008796
b _0808797C
.align 2, 0
_0808795C: .4byte gRoomControls
_08087960:
ldr r0, _0808796C @ =0x00004022
adds r1, r4, #0
mov r2, r8
bl SetTile
b _0808797C
.align 2, 0
_0808796C: .4byte 0x00004022
_08087970:
adds r0, r7, #0
movs r1, #3
mov r2, sl
adds r3, r5, #0
bl sub_08008796
_0808797C:
movs r0, #0x10
add sb, r0
mov r1, sb
cmp r1, #0x10
ble _0808790A
ldr r0, [sp, #0xc]
cmp r0, #0x10
ble _080878F8
add sp, #0x10
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7, pc}
.syntax divided
@@ -1,110 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
adds r6, r0, #0
ldr r0, _08079C68 @ =gPlayerState
ldrb r1, [r0, #0x14]
adds r7, r0, #0
cmp r1, #0
beq _08079C44
b _08079D40
_08079C44:
ldr r1, [r7, #0x30]
movs r0, #2
ands r0, r1
cmp r0, #0
bne _08079D40
movs r0, #0x80
ands r1, r0
cmp r1, #0
bne _08079D36
ldrb r0, [r7, #0x13]
subs r0, #0xd
cmp r0, #0x1d
bhi _08079CE8
lsls r0, r0, #2
ldr r1, _08079C6C @ =_08079C70
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08079C68: .4byte gPlayerState
_08079C6C: .4byte _08079C70
_08079C70: @ jump table
.4byte _08079D36 @ case 0
.4byte _08079D36 @ case 1
.4byte _08079D36 @ case 2
.4byte _08079D36 @ case 3
.4byte _08079CE8 @ case 4
.4byte _08079CE8 @ case 5
.4byte _08079CE8 @ case 6
.4byte _08079D36 @ case 7
.4byte _08079CE8 @ case 8
.4byte _08079CE8 @ case 9
.4byte _08079D36 @ case 10
.4byte _08079CE8 @ case 11
.4byte _08079CE8 @ case 12
.4byte _08079CE8 @ case 13
.4byte _08079CE8 @ case 14
.4byte _08079CE8 @ case 15
.4byte _08079CE8 @ case 16
.4byte _08079CE8 @ case 17
.4byte _08079CE8 @ case 18
.4byte _08079CE8 @ case 19
.4byte _08079CE8 @ case 20
.4byte _08079CE8 @ case 21
.4byte _08079CE8 @ case 22
.4byte _08079CE8 @ case 23
.4byte _08079CE8 @ case 24
.4byte _08079CE8 @ case 25
.4byte _08079CE8 @ case 26
.4byte _08079CE8 @ case 27
.4byte _08079CE8 @ case 28
.4byte _08079D36 @ case 29
_08079CE8:
mov r8, r7
mov r0, r8
ldrb r4, [r0, #0x12]
movs r2, #1
rsbs r2, r2, #0
adds r0, r6, #0
movs r1, #0
bl GetRelativeCollisionTile
ldr r5, _08079D3C @ =gUnk_08007CAC
adds r1, r5, #0
bl sub_08007DD6
cmp r4, r0
bne _08079D40
mov r0, r8
ldrb r4, [r0, #0x12]
adds r0, r6, #0
movs r1, #2
movs r2, #0
bl GetRelativeCollisionTile
adds r1, r5, #0
bl sub_08007DD6
cmp r4, r0
bne _08079D40
ldrb r4, [r7, #0x12]
movs r1, #2
rsbs r1, r1, #0
adds r0, r6, #0
movs r2, #0
bl GetRelativeCollisionTile
adds r1, r5, #0
bl sub_08007DD6
cmp r4, r0
bne _08079D40
_08079D36:
movs r0, #1
b _08079D42
.align 2, 0
_08079D3C: .4byte gUnk_08007CAC
_08079D40:
movs r0, #0
_08079D42:
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}
.syntax divided
+148 -1
View File
@@ -82,6 +82,7 @@ extern u8 gUpdateVisibleTiles;
extern u16 gUnk_020178E0[];
extern u8 gUnk_02024090[];
extern const u16 gUnk_080FD5A8[];
extern void** gAreaTilesets[];
extern void** gAreaRoomMaps[];
@@ -157,6 +158,9 @@ static void InitAllRoomResInfo(void);
static void InitRoomResInfo(RoomResInfo* info, RoomHeader* hdr, u32 area, u32 room);
static void sub_080532E4(void);
static void ResetTimerFlags(void);
bool32 ItemIsBottle(u32);
void ModArrows(s32);
void ModShells(s32);
typedef struct {
u8 dest_off[8];
@@ -2249,7 +2253,150 @@ s32 GetItemPrice(u32 item) {
return ptr[0];
}
ASM_FUNC("asm/non_matching/game/GiveItem.inc", u32 GiveItem(u32 a, u32 b))
u32 GiveItem(Item item, u32 param_2) {
u32 uVar4;
u32 result;
u32 uVar9;
const ItemMetaData* metaData;
uVar4 = GetInventoryValue(item);
metaData = &gItemMetaData[item];
if (uVar4 == 0) {
result = *(u16*)&metaData->textId;
} else {
result = *(u16*)&metaData->unk6;
}
if (!ItemIsBottle(item)) {
PutItemOnSlot(item);
if (uVar4 == 0) {
SetInventoryValue(item, 1);
}
}
switch (metaData->unk1) {
case 0:
default:
break;
case 1:
ModHealth(metaData->unk2);
SoundReq(SFX_HEART_GET);
break;
case 2:
ModRupees((u32)gUnk_080FD5A8[metaData->unk2]);
SoundReq(SFX_RUPEE_GET);
break;
case 3:
uVar9 = 0;
while (TRUE) {
if (3 < uVar9) {
return result;
}
if (GetInventoryValue(ITEM_BOTTLE1 + uVar9) == 0)
break;
uVar9++;
}
item = ITEM_BOTTLE1 + uVar9;
if (gSave.stats.bottles[uVar9] == 0) {
gSave.stats.bottles[uVar9] = 0x20;
}
SetInventoryValue(item, 1);
PutItemOnSlot(item);
break;
case 4:
uVar9 = 0;
while (gSave.stats.bottles[uVar9] != 0x20) {
uVar9++;
if (3 < uVar9) {
return result;
}
}
if (3 < uVar9) {
break;
}
gSave.stats.bottles[uVar9] = (u8)item;
SetInventoryValue(item, 1);
SoundReq(SFX_ITEM_GET);
break;
case 5:
sub_080526F8(1);
SoundReq(SFX_103);
break;
case 6:
gSave.unk46C[gArea.dungeon_idx] |= metaData->unk2;
break;
case 0xd:
sub_0801E738(0x72);
break;
case 0x12:
if (item == ITEM_BOOMERANG) {
SetInventoryValue(ITEM_MAGIC_BOOMERANG, 0);
} else {
SetInventoryValue(ITEM_BOOMERANG, 0);
}
case 0x11:
LoadItemGfx();
break;
case 7:
if (item == ITEM_BOMBS) {
SetInventoryValue(ITEM_REMOTE_BOMBS, 0);
} else {
SetInventoryValue(ITEM_BOMBS, 0);
}
ModBombs(99);
LoadItemGfx();
break;
case 8:
if (uVar4 == 0) {
SetInventoryValue(ITEM_BOMBS, 1);
PutItemOnSlot(7);
} else {
gSave.stats.bombBagType++;
if (3 < gSave.stats.bombBagType) {
gSave.stats.bombBagType = 3;
}
}
ModBombs(99);
break;
case 9:
ModBombs(metaData->unk2);
SoundReq(SFX_103);
break;
case 0xb:
if (GetInventoryValue(ITEM_LARGE_QUIVER) == 0) {
SetInventoryValue(ITEM_LARGE_QUIVER, 1);
}
ModArrows(99);
LoadItemGfx();
break;
case 0xa:
gSave.stats.quiverType++;
if (3 < gSave.stats.quiverType) {
gSave.stats.quiverType = 3;
}
ModArrows(99);
break;
case 0xc:
ModArrows(metaData->unk2);
SoundReq(SFX_103);
break;
case 0x0e:
SetInventoryValue(ITEM_SHELLS, 1);
ModShells(param_2);
SoundReq(SFX_103);
break;
case 0x0f:
sub_0801E738(param_2);
break;
case 0x10:
gSave.stats.walletType++;
if (gSave.stats.walletType < 4) {
break;
}
gSave.stats.walletType = 3;
break;
}
return result;
}
// TODO Adapt ItemMetaData struct
void sub_08054288(s32 param_1) {
+10 -10
View File
@@ -59,13 +59,12 @@ void sub_08087888(Entity* this) {
}
}
NONMATCH("asm/non_matching/object20/sub_080878CC.inc", void sub_080878CC(Entity* this)) {
void sub_080878CC(Entity* this) {
s32 x;
s32 y;
s32 itX;
s32 itY;
u32 layer;
u32 tileType;
u32 pos;
x = this->x.HALF.HI;
@@ -74,13 +73,15 @@ NONMATCH("asm/non_matching/object20/sub_080878CC.inc", void sub_080878CC(Entity*
for (itX = -0x10; itX < 0x11; itX += 0x10) {
for (itY = -0x10; itY < 0x11; itY += 0x10) {
pos = TILE((u32)x + itX, (u32)y + itY);
if (sub_080B1AE0(pos, layer) == 0x2e) {
tileType = GetTileType(pos, layer);
if (tileType == 0x368 || tileType == 0x367
/*(tileType < 0x369) && (0x366 < tileType)*/) {
sub_08008796(this, 3, x + itX, y + itY);
} else {
SetTile(0x4022, pos, layer);
if (sub_080B1AE0(pos, (u8)layer) == 0x2e) {
switch (GetTileType(pos, layer)) {
case 0x368:
case 0x367:
sub_08008796(this, 3, x + itX, y + itY);
break;
default:
SetTile(0x4022, pos, layer);
break;
}
} else {
sub_08008796(this, 3, x + itX, y + itY);
@@ -88,4 +89,3 @@ NONMATCH("asm/non_matching/object20/sub_080878CC.inc", void sub_080878CC(Entity*
}
}
}
END_NONMATCH
+18 -18
View File
@@ -1185,7 +1185,7 @@ void ClearPlayerState(void) {
gPlayerState.field_0xe = 0;
gPlayerState.field_0x11 = 0;
gPlayerState.floor_type = SURFACE_NORMAL;
gPlayerState.floor_type_last = 0;
gPlayerState.floor_type_last = SURFACE_NORMAL;
gPlayerState.field_0x14 = 0;
gPlayerState.sword_state = 0;
gPlayerState.dash_state = 0;
@@ -1610,34 +1610,34 @@ void sub_08079BD8(Entity* this) {
this->spritePriority.b0 = gPlayerEntity.spritePriority.b0;
}
NONMATCH("asm/non_matching/playerUtils/sub_08079C30.inc", bool32 sub_08079C30(Entity* this)) {
if ((gPlayerState.field_0x14 == 0) && ((gPlayerState.flags & PL_FLAGS2) == 0)) {
bool32 sub_08079C30(Entity* param_1) {
if (gPlayerState.field_0x14 == 0 && (gPlayerState.flags & PL_FLAGS2) == 0) {
if ((gPlayerState.flags & PL_MINISH) != 0) {
return TRUE;
}
switch (gPlayerState.floor_type_last) {
case 0xd:
case 0x0e:
case 0x0f:
case 0x10:
case 0x14:
case 0x17:
case 0x2a:
case SURFACE_D:
case SURFACE_E:
case SURFACE_F:
case SURFACE_10:
case SURFACE_14:
case SURFACE_ICE:
case SURFACE_AUTO_LADDER:
return TRUE;
}
if (gPlayerState.floor_type == sub_08007DD6(GetRelativeCollisionTile(this, 0, -1), (u16*)gUnk_08007CAC)) {
if (gPlayerState.floor_type == sub_08007DD6(GetRelativeCollisionTile(this, 2, 0), (u16*)gUnk_08007CAC)) {
if (gPlayerState.floor_type ==
sub_08007DD6(GetRelativeCollisionTile(this, -2, 0), (u16*)gUnk_08007CAC)) {
return TRUE;
}
}
if (gPlayerState.floor_type != sub_08007DD6(GetRelativeCollisionTile(param_1, 0, -1), (u16*)gUnk_08007CAC))
return FALSE;
if (gPlayerState.floor_type != sub_08007DD6(GetRelativeCollisionTile(param_1, 2, 0), (u16*)gUnk_08007CAC))
return FALSE;
if (gPlayerState.floor_type == sub_08007DD6(GetRelativeCollisionTile(param_1, -2, 0), (u16*)gUnk_08007CAC)) {
return TRUE;
}
}
return FALSE;
}
END_NONMATCH
bool32 sub_08079D48(void) {
if (!sub_08079C30(&gPlayerEntity)) {