sub_80462AC

This commit is contained in:
DizzyEggg
2025-03-11 12:12:42 +01:00
parent 6f59dcb655
commit 5003db440b
4 changed files with 109 additions and 377 deletions

View File

@@ -6,380 +6,6 @@
.text
thumb_func_start sub_80461C8
sub_80461C8:
push {r4-r7,lr}
adds r2, r0, 0
lsls r1, 24
lsrs r7, r1, 24
movs r1, 0
ldrsh r0, [r2, r1]
movs r3, 0x2
ldrsh r1, [r2, r3]
bl GetTileMut
adds r6, r0, 0
ldr r5, [r6, 0x14]
cmp r5, 0
beq _080461EE
adds r0, r5, 0
bl GetEntityType
cmp r0, 0x3
beq _080461F2
_080461EE:
movs r0, 0
b _08046284
_080461F2:
adds r0, r5, 0
bl GetItemData
adds r4, r0, 0
ldrh r1, [r6]
movs r0, 0x20
ands r0, r1
cmp r0, 0
beq _0804624E
ldrb r0, [r4, 0x2]
bl CanSellItem
lsls r0, 24
cmp r0, 0
beq _0804624E
ldrb r1, [r4]
movs r0, 0x2
ands r0, r1
cmp r0, 0
beq _08046238
cmp r7, 0
beq _0804624E
adds r0, r4, 0
bl GetStackBuyPrice
ldr r1, _08046230
ldr r2, [r1]
ldr r1, _08046234
adds r2, r1
b _08046248
.align 2, 0
_08046230: .4byte gDungeon
_08046234: .4byte 0x0000068c
_08046238:
adds r0, r4, 0
bl GetStackSellPrice
ldr r1, _0804628C
ldr r2, [r1]
movs r3, 0xD2
lsls r3, 3
adds r2, r3
_08046248:
ldr r1, [r2]
subs r1, r0
str r1, [r2]
_0804624E:
movs r0, 0
str r0, [r6, 0x14]
str r0, [r5]
movs r6, 0
movs r4, 0
_08046258:
ldr r5, _0804628C
ldr r0, [r5]
lsls r1, r4, 2
ldr r2, _08046290
adds r0, r2
adds r0, r1
ldr r0, [r0]
bl EntityIsValid
lsls r0, 24
adds r1, r4, 0x1
cmp r0, 0
beq _08046274
adds r6, r1, 0
_08046274:
adds r4, r1, 0
cmp r4, 0x3F
ble _08046258
ldr r0, [r5]
ldr r3, _08046294
adds r0, r3
strh r6, [r0]
movs r0, 0x1
_08046284:
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_0804628C: .4byte gDungeon
_08046290: .4byte 0x0001361c
_08046294: .4byte 0x00003904
thumb_func_end sub_80461C8
thumb_func_start sub_8046298
sub_8046298:
ldrb r0, [r0, 0x2]
ldr r1, _080462A8
ldr r1, [r1]
lsls r0, 5
adds r0, r1
ldrb r0, [r0, 0xD]
bx lr
.align 2, 0
_080462A8: .4byte gItemParametersData
thumb_func_end sub_8046298
thumb_func_start sub_80462AC
sub_80462AC:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x8
adds r4, r0, 0
ldr r0, [sp, 0x28]
lsls r1, 24
lsrs r1, 24
mov r10, r1
lsls r2, 24
lsrs r5, r2, 24
lsls r3, 24
lsrs r3, 24
mov r9, r3
lsls r0, 24
lsrs r0, 24
str r0, [sp]
movs r0, 0
str r0, [sp, 0x4]
adds r0, r4, 0
bl EntityIsValid
lsls r0, 24
cmp r0, 0
bne _080462E4
b _08046498
_080462E4:
cmp r5, 0
beq _08046316
movs r1, 0x4
ldrsh r0, [r4, r1]
movs r2, 0x6
ldrsh r1, [r4, r2]
bl GetTile
ldrh r0, [r0]
movs r1, 0x3
ands r1, r0
cmp r1, 0
bne _08046300
b _08046498
_08046300:
cmp r1, 0x2
bne _08046308
movs r3, 0x1
str r3, [sp, 0x4]
_08046308:
adds r0, r4, 0
bl sub_8045888
lsls r0, 24
cmp r0, 0
bne _08046316
b _08046498
_08046316:
ldr r1, [r4, 0xC]
cmp r1, 0
bge _0804631E
adds r1, 0xFF
_0804631E:
asrs r1, 8
ldr r0, _080463A4
ldr r2, [r0]
ldr r5, _080463A8
adds r0, r2, r5
movs r3, 0
ldrsh r0, [r0, r3]
subs r6, r1, r0
ldr r3, [r4, 0x10]
ldr r0, [r4, 0x1C]
subs r1, r3, r0
cmp r1, 0
bge _0804633A
adds r1, 0xFF
_0804633A:
asrs r1, 8
ldr r5, _080463AC
adds r0, r2, r5
movs r5, 0
ldrsh r2, [r0, r5]
subs r1, r2
mov r8, r1
adds r0, r3, 0
cmp r0, 0
bge _08046350
adds r0, 0xFF
_08046350:
asrs r0, 8
subs r0, r2
adds r7, r0, 0
adds r7, 0x8
lsrs r0, r7, 31
adds r0, r7, r0
asrs r7, r0, 1
movs r0, 0x20
negs r0, r0
cmp r6, r0
bge _08046368
b _08046498
_08046368:
cmp r8, r0
bge _0804636E
b _08046498
_0804636E:
movs r0, 0x88
lsls r0, 1
cmp r6, r0
ble _08046378
b _08046498
_08046378:
mov r0, r8
cmp r0, 0xC0
ble _08046380
b _08046498
_08046380:
ldr r5, _080463B0
ldrh r1, [r5, 0x2]
ldr r0, _080463B4
ands r0, r1
strh r0, [r5, 0x2]
mov r1, r10
cmp r1, 0
beq _080463BC
movs r2, 0x17
mov r10, r2
movs r2, 0xA0
lsls r2, 8
ldrh r1, [r5, 0x4]
ldr r0, _080463B8
ands r0, r1
orrs r0, r2
strh r0, [r5, 0x4]
b _08046408
.align 2, 0
_080463A4: .4byte gDungeon
_080463A8: .4byte 0x000181f0
_080463AC: .4byte 0x000181f2
_080463B0: .4byte gUnknown_202EDC0
_080463B4: .4byte 0x0000c1ff
_080463B8: .4byte 0x00000fff
_080463BC:
ldr r0, [r4, 0x70]
bl sub_8046298
mov r10, r0
mov r3, r9
cmp r3, 0xFF
beq _080463EE
cmp r0, 0
bne _080463EE
ldr r0, _08046478
add r0, r9
ldrb r0, [r0]
mov r10, r0
ldr r0, _0804647C
add r0, r9
ldrb r1, [r0]
lsls r1, 3
movs r0, 0x1F
ands r1, r0
lsls r1, 9
ldrh r2, [r5, 0x2]
ldr r0, _08046480
ands r0, r2
orrs r0, r1
strh r0, [r5, 0x2]
_080463EE:
ldr r0, [r4, 0x70]
ldrb r0, [r0, 0x2]
bl GetItemPalette
movs r1, 0xF
ands r0, r1
lsls r0, 12
ldr r3, _08046484
ldrh r2, [r3, 0x4]
ldr r1, _08046488
ands r1, r2
orrs r1, r0
strh r1, [r3, 0x4]
_08046408:
ldr r1, _08046488
mov r5, r8
ands r1, r5
lsls r1, 4
ldr r4, _08046484
ldrh r2, [r4, 0x6]
movs r0, 0xF
ands r0, r2
orrs r0, r1
strh r0, [r4, 0x6]
ldr r0, _0804648C
ands r6, r0
ldrh r1, [r4, 0x2]
movs r0, 0xFE
lsls r0, 8
ands r0, r1
orrs r0, r6
strh r0, [r4, 0x2]
ldr r0, [sp, 0x4]
lsls r3, r0, 10
ldrh r2, [r4]
ldr r1, _08046490
adds r0, r1, 0
ands r0, r2
orrs r0, r3
strh r0, [r4]
movs r2, 0xC0
lsls r2, 4
ldrh r0, [r4, 0x4]
ands r1, r0
orrs r1, r2
mov r2, r10
lsls r0, r2, 2
movs r3, 0xD0
lsls r3, 1
adds r0, r3
ldr r2, _08046494
ands r0, r2
movs r2, 0xFC
lsls r2, 8
ands r1, r2
orrs r1, r0
strh r1, [r4, 0x4]
ldr r5, [sp]
cmp r5, 0
bne _08046466
movs r7, 0x1
_08046466:
adds r0, r4, 0
adds r1, r7, 0
movs r2, 0
movs r3, 0
bl AddSprite
movs r0, 0x1
b _0804649A
.align 2, 0
_08046478: .4byte gUnknown_203B420
_0804647C: .4byte gUnknown_203B428
_08046480: .4byte 0x0000c1ff
_08046484: .4byte gUnknown_202EDC0
_08046488: .4byte 0x00000fff
_0804648C: .4byte 0x000001ff
_08046490: .4byte 0x0000f3ff
_08046494: .4byte 0x000003ff
_08046498:
movs r0, 0
_0804649A:
add sp, 0x8
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_80462AC
thumb_func_start sub_80464AC
sub_80464AC:
push {r4,lr}

View File

@@ -6,6 +6,7 @@
#include "structs/str_pokemon.h"
#include "structs/subStruct_203B240.h"
extern ItemDataEntry *gItemParametersData;
extern TeamInventory *gTeamInventoryRef;
void LoadItemParameters(void);
@@ -25,7 +26,7 @@ s32 GetStackSellPrice(Item *param_1);
s32 GetItemBuyPrice(u8 id);
s32 GetItemSellPrice(u8 id);
s32 GetItemOrder(u8 id);
u8 GetItemPalette(u8 id);
s32 GetItemPalette(u8 id);
u32 GetItemActionType(u8 id);
u32 GetSpawnAmountRange(u8 id, u32 r1);
u8 *GetItemDescription(u8 id);

View File

@@ -28,7 +28,7 @@ extern struct unkStruct_8090F58 gUnknown_80F699C;
extern struct unkStruct_8090F58 gUnknown_80F69A8;
extern struct unkStruct_8090F58 gUnknown_80F6990;
extern bool8 sub_80461C8(DungeonPos *, u32);
bool8 sub_80461C8(DungeonPos *, bool8);
void sub_8045BF8(u8 *, Item *);
extern u32 sub_803D73C(u32);
bool8 sub_80460F8(DungeonPos *, Item *, bool8);
@@ -380,3 +380,108 @@ bool8 sub_80460F8(DungeonPos *pos, Item *item, bool8 a2)
gDungeon->numItems = count;
return TRUE;
}
bool8 sub_80461C8(DungeonPos *pos, bool8 a2)
{
s32 i, count;
Item *item;
Tile *tile = GetTileMut(pos->x, pos->y);
Entity *tileObject = tile->object;
if (tileObject == NULL || GetEntityType(tileObject) != ENTITY_ITEM)
return FALSE;
item = GetItemData(tileObject);
if ((tile->terrainType & TERRAIN_TYPE_SHOP) && CanSellItem(item->id)) {
if (item->flags & ITEM_FLAG_IN_SHOP) {
if (a2) {
gDungeon->unk644.unk48 -= GetStackBuyPrice(item);
}
}
else {
gDungeon->unk644.unk4C -= GetStackSellPrice(item);
}
}
tile->object = NULL;
tileObject->type = ENTITY_NOTHING;
count = 0;
for (i = 0; i < DUNGEON_MAX_ITEMS; i++) {
if (EntityIsValid(gDungeon->items[i])) {
count = i + 1;
}
}
gDungeon->numItems = count;
return TRUE;
}
s32 sub_8046298(Item *item)
{
return gItemParametersData[item->id].icon;
}
extern bool8 sub_8045888(Entity *);
extern SpriteOAM gUnknown_202EDC0;
extern u8 gUnknown_203B420[];
extern u8 gUnknown_203B428[];
bool8 sub_80462AC(Entity * entity, u8 a1, u8 a2, u8 a3, u8 a4)
{
s32 x, y, y2;
s32 objMode = 0;
if (!EntityIsValid(entity))
return FALSE;
if (a2) {
s32 terrainType = GetTerrainType(GetTile(entity->pos.x, entity->pos.y));
if (terrainType == TERRAIN_TYPE_WALL)
return FALSE;
if (terrainType == TERRAIN_TYPE_SECONDARY) {
objMode = 1;
}
if (!sub_8045888(entity))
return FALSE;
}
x = (entity->pixelPos.x / 256) - gDungeon->unk181e8.cameraPixelPos.x;
y = ((entity->pixelPos.y - entity->unk1C.raw) / 256) - gDungeon->unk181e8.cameraPixelPos.y;
y2 = ((entity->pixelPos.y / 256) - gDungeon->unk181e8.cameraPixelPos.y) + 8;
y2 /= 2;
if (x >= -32 && y >= -32 && x <= 272 && y <= 192) {
s32 tileNum;
SpriteSetMatrixNum(&gUnknown_202EDC0, 0);
if (a1) {
tileNum = 0x17;
SpriteSetPalNum(&gUnknown_202EDC0, 10);
}
else {
tileNum = sub_8046298(entity->axObj.info.item);
if (a3 != 0xFF && tileNum == 0) {
tileNum = gUnknown_203B420[a3];
SpriteSetMatrixNum(&gUnknown_202EDC0, gUnknown_203B428[a3] * 8);
}
SpriteSetPalNum(&gUnknown_202EDC0, GetItemPalette(entity->axObj.info.item->id));
}
SpriteSetY(&gUnknown_202EDC0, y);
SpriteSetX(&gUnknown_202EDC0, x);
SpriteSetObjMode(&gUnknown_202EDC0, objMode);
SpriteSetPriority(&gUnknown_202EDC0, 3);
SpriteSetTileNum(&gUnknown_202EDC0, 0x1A0 + tileNum * 4);
if (!a4) {
y2 = 1;
}
AddSprite(&gUnknown_202EDC0, y2, NULL, NULL);
return TRUE;
}
return FALSE;
}
//

View File

@@ -265,7 +265,7 @@ s32 GetItemOrder(u8 id)
return gItemParametersData[id].order;
}
u8 GetItemPalette(u8 id)
s32 GetItemPalette(u8 id)
{
return gItemParametersData[id].palette;
}