From 5003db440bbba66a9820ec41123c9e832c2629ea Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 11 Mar 2025 12:12:42 +0100 Subject: [PATCH] sub_80462AC --- asm/code_8045A00.s | 374 --------------------------------------------- include/items.h | 3 +- src/code_8045A00.c | 107 ++++++++++++- src/items.c | 2 +- 4 files changed, 109 insertions(+), 377 deletions(-) diff --git a/asm/code_8045A00.s b/asm/code_8045A00.s index 4ab77f462..79b0398d7 100644 --- a/asm/code_8045A00.s +++ b/asm/code_8045A00.s @@ -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} diff --git a/include/items.h b/include/items.h index 1dd09dd99..933aa5920 100644 --- a/include/items.h +++ b/include/items.h @@ -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); diff --git a/src/code_8045A00.c b/src/code_8045A00.c index f14880c6f..aa3be02d8 100644 --- a/src/code_8045A00.c +++ b/src/code_8045A00.c @@ -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; +} + +// diff --git a/src/items.c b/src/items.c index fa898c3b8..69349b080 100644 --- a/src/items.c +++ b/src/items.c @@ -265,7 +265,7 @@ s32 GetItemOrder(u8 id) return gItemParametersData[id].order; } -u8 GetItemPalette(u8 id) +s32 GetItemPalette(u8 id) { return gItemParametersData[id].palette; }