mirror of
https://github.com/pret/pmd-red.git
synced 2026-09-11 18:45:55 -05:00
sub_80462AC
This commit is contained in:
@@ -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}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
@@ -265,7 +265,7 @@ s32 GetItemOrder(u8 id)
|
||||
return gItemParametersData[id].order;
|
||||
}
|
||||
|
||||
u8 GetItemPalette(u8 id)
|
||||
s32 GetItemPalette(u8 id)
|
||||
{
|
||||
return gItemParametersData[id].palette;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user