Merge branch 'master' of github.com:pret/pokediamond into unk_020023C0

This commit is contained in:
Rémi Calixte
2021-06-19 14:43:38 +02:00
9 changed files with 287 additions and 404 deletions
+1 -1
View File
@@ -264,7 +264,7 @@ Static arm9
Object unk_0206C700.o
Object unk_0206DE24.o
Object unk_0206E0F0.o
Object unk_0206E2F0.o
Object bag_view.o
##itemtool##
Object itemtool.o
+2 -2
View File
@@ -2326,9 +2326,9 @@ FUN_020362E4: ; 0x020362E4
bl FUN_0204652C
add r4, r0, #0x0
mov r0, #0xb
bl BagView_new
bl BagView_New
str r0, [sp, #0x8]
bl FUN_0206E308
bl BagView_sizeof
mov r1, #0x7e
lsl r1, r1, #0x2
add r2, r0, #0x0
-375
View File
@@ -1,375 +0,0 @@
.include "asm/macros.inc"
.include "global.inc"
.text
thumb_func_start BagView_new
BagView_new: ; 0x0206E2F0
push {r4, lr}
mov r1, #0x78
bl AllocFromHeap
mov r1, #0x0
mov r2, #0x78
add r4, r0, #0x0
bl memset
add r0, r4, #0x0
pop {r4, pc}
.balign 4
thumb_func_start FUN_0206E308
FUN_0206E308: ; 0x0206E308
mov r0, #0x78
bx lr
thumb_func_start FUN_0206E30C
FUN_0206E30C: ; 0x0206E30C
add r0, #0x65
strb r1, [r0, #0x0]
bx lr
.balign 4
thumb_func_start FUN_0206E314
FUN_0206E314: ; 0x0206E314
push {r4-r6, lr}
add r4, r1, #0x0
add r1, r2, #0x0
add r5, r0, #0x0
add r6, r3, #0x0
bl FUN_0206E30C
str r4, [r5, #0x0]
str r6, [r5, #0x6c]
mov r0, #0x0
add r5, #0x66
strh r0, [r5, #0x0]
pop {r4-r6, pc}
.balign 4
thumb_func_start BagView_setitem
BagView_setitem: ; 0x0206E330
push {r3-r4}
mov r4, #0xc
mul r4, r3
add r0, r0, r4
str r1, [r0, #0x4]
strb r2, [r0, #0xc]
pop {r3-r4}
bx lr
thumb_func_start FUN_0206E340
FUN_0206E340: ; 0x0206E340
add r1, r0, #0x0
add r1, #0x76
ldrh r2, [r1, #0x0]
mov r1, #0x1
add r0, #0x76
bic r2, r1
mov r1, #0x1
orr r1, r2
strh r1, [r0, #0x0]
bx lr
thumb_func_start FUN_0206E354
FUN_0206E354: ; 0x0206E354
str r1, [r0, #0x70]
bx lr
thumb_func_start FUN_0206E358
FUN_0206E358: ; 0x0206E358
add r0, #0x74
strb r1, [r0, #0x0]
bx lr
.balign 4
thumb_func_start FUN_0206E360
FUN_0206E360: ; 0x0206E360
add r2, r0, #0x0
add r2, #0x76
ldrh r3, [r2, #0x0]
ldr r2, _0206E378 ; =0xFFFF0001
lsl r1, r1, #0x11
and r2, r3
lsr r1, r1, #0x10
orr r1, r2
add r0, #0x76
strh r1, [r0, #0x0]
bx lr
nop
_0206E378: .word 0xFFFF0001
thumb_func_start FUN_0206E37C
FUN_0206E37C: ; 0x0206E37C
add r0, #0x66
ldrh r0, [r0, #0x0]
bx lr
.balign 4
thumb_func_start FUN_0206E384
FUN_0206E384: ; 0x0206E384
add r0, #0x68
ldrh r0, [r0, #0x0]
bx lr
.balign 4
thumb_func_start FUN_0206E38C
FUN_0206E38C: ; 0x0206E38C
add r0, #0x74
ldrb r0, [r0, #0x0]
bx lr
.balign 4
thumb_func_start FUN_0206E394
FUN_0206E394: ; 0x0206E394
add r0, #0x75
ldrb r0, [r0, #0x0]
bx lr
.balign 4
thumb_func_start FUN_0206E39C
FUN_0206E39C: ; 0x0206E39C
push {r3, lr}
bl Sav2_PlayerData_GetCoinsAddr
bl CheckCoins
pop {r3, pc}
thumb_func_start FUN_0206E3A8
FUN_0206E3A8: ; 0x0206E3A8
push {r4-r6, lr}
bl Sav2_SealCase_get
add r6, r0, #0x0
mov r5, #0x0
mov r4, #0x1
_0206E3B4:
add r0, r6, #0x0
add r1, r4, #0x0
bl FUN_02029E2C
add r4, r4, #0x1
add r5, r5, r0
cmp r4, #0x50
bls _0206E3B4
add r0, r5, #0x0
pop {r4-r6, pc}
thumb_func_start FUN_0206E3C8
FUN_0206E3C8: ; 0x0206E3C8
push {r3, lr}
bl FUN_02027E24
bl FUN_0202708C
bl FUN_02027168
pop {r3, pc}
thumb_func_start FUN_0206E3D8
FUN_0206E3D8: ; 0x0206E3D8
push {r3, lr}
bl FUN_02027E24
bl FUN_0202708C
bl FUN_02027184
pop {r3, pc}
thumb_func_start FUN_0206E3E8
FUN_0206E3E8: ; 0x0206E3E8
push {r3, lr}
bl FUN_0202A8D8
mov r1, #0x0
add r2, r1, #0x0
bl FUN_0202A3B4
pop {r3, pc}
thumb_func_start FUN_0206E3F8
FUN_0206E3F8: ; 0x0206E3F8
push {r4-r7, lr}
sub sp, #0xc
add r7, r0, #0x0
str r1, [sp, #0x8]
add r5, r2, #0x0
add r4, r3, #0x0
mov r0, #0x0
mov r1, #0x1a
mov r2, #0x7
bl NewMsgDataFromNarc
add r6, r0, #0x0
add r0, r4, #0x0
bl ScrStrBufs_new
add r4, r0, #0x0
cmp r5, #0x0
bne _0206E428
add r0, r6, #0x0
mov r1, #0x63
bl NewString_ReadMsgData
add r5, r0, #0x0
b _0206E4FA
_0206E428:
mov r1, #0x1b
lsl r1, r1, #0x4 ; ITEM_POINT_CARD
cmp r5, r1
bne _0206E454
add r0, r6, #0x0
mov r1, #0x61
bl NewString_ReadMsgData
add r5, r0, #0x0
add r0, r7, #0x0
bl FUN_0206E3E8
mov r1, #0x0
add r2, r0, #0x0
str r1, [sp, #0x0]
mov r0, #0x1
str r0, [sp, #0x4]
add r0, r4, #0x0
mov r3, #0x4
bl BufferIntegerAsString
b _0206E4FA
_0206E454:
add r2, r1, #0x2 ; ITEM_SEAL_CASE
cmp r5, r2
bne _0206E47E
add r0, r6, #0x0
mov r1, #0x5c
bl NewString_ReadMsgData
add r5, r0, #0x0
add r0, r7, #0x0
bl FUN_0206E3A8
mov r1, #0x0
add r2, r0, #0x0
str r1, [sp, #0x0]
mov r0, #0x1
str r0, [sp, #0x4]
add r0, r4, #0x0
mov r3, #0x4
bl BufferIntegerAsString
b _0206E4FA
_0206E47E:
add r2, r1, #0x3 ; ITEM_FASHION_CASE
cmp r5, r2
bne _0206E4C0
add r0, r6, #0x0
mov r1, #0x5d
bl NewString_ReadMsgData
add r5, r0, #0x0
add r0, r7, #0x0
bl FUN_0206E3C8
mov r1, #0x0
add r2, r0, #0x0
str r1, [sp, #0x0]
mov r0, #0x1
str r0, [sp, #0x4]
add r0, r4, #0x0
mov r3, #0x3
bl BufferIntegerAsString
add r0, r7, #0x0
bl FUN_0206E3D8
add r2, r0, #0x0
mov r0, #0x0
str r0, [sp, #0x0]
mov r1, #0x1
add r0, r4, #0x0
mov r3, #0x2
str r1, [sp, #0x4]
bl BufferIntegerAsString
b _0206E4FA
_0206E4C0:
add r1, #0xc ; ITEM_COIN_CASE
cmp r5, r1
bne _0206E4EA
add r0, r6, #0x0
mov r1, #0x39
bl NewString_ReadMsgData
add r5, r0, #0x0
add r0, r7, #0x0
bl FUN_0206E39C
mov r1, #0x0
add r2, r0, #0x0
str r1, [sp, #0x0]
mov r0, #0x1
str r0, [sp, #0x4]
add r0, r4, #0x0
mov r3, #0x5
bl BufferIntegerAsString
b _0206E4FA
_0206E4EA:
bl ScrStrBufs_delete
add r0, r6, #0x0
bl DestroyMsgData
add sp, #0xc
mov r0, #0x0
pop {r4-r7, pc}
_0206E4FA:
ldr r1, [sp, #0x8]
add r0, r4, #0x0
add r2, r5, #0x0
bl StringExpandPlaceholders
add r0, r5, #0x0
bl String_dtor
add r0, r4, #0x0
bl ScrStrBufs_delete
add r0, r6, #0x0
bl DestroyMsgData
mov r0, #0x1
add sp, #0xc
pop {r4-r7, pc}
thumb_func_start FUN_0206E51C
FUN_0206E51C: ; 0x0206E51C
push {r3-r7, lr}
add r5, r1, #0x0
str r0, [sp, #0x0]
ldr r4, [sp, #0x18]
cmp r3, #0x1
beq _0206E52E
cmp r3, #0x2
beq _0206E54C
b _0206E56A
_0206E52E:
mov r0, #0x1
mov r1, #0x1a
mov r2, #0x7
add r3, r4, #0x0
bl NewMsgDataFromNarc
add r4, r0, #0x0
mov r1, #0x38
add r2, r5, #0x0
bl ReadMsgDataIntoString
add r0, r4, #0x0
bl DestroyMsgData
pop {r3-r7, pc}
_0206E54C:
mov r0, #0x1
mov r1, #0x1a
mov r2, #0x7
add r3, r4, #0x0
bl NewMsgDataFromNarc
add r4, r0, #0x0
mov r1, #0x6f
add r2, r5, #0x0
bl ReadMsgDataIntoString
add r0, r4, #0x0
bl DestroyMsgData
pop {r3-r7, pc}
_0206E56A:
mov r0, #0x1
mov r1, #0x1a
mov r2, #0xc7
add r3, r4, #0x0
bl NewMsgDataFromNarc
add r7, r0, #0x0
add r0, r4, #0x0
bl ScrStrBufs_new
add r4, r0, #0x0
add r0, r7, #0x0
mov r1, #0x24
bl NewString_ReadMsgData
add r6, r0, #0x0
ldr r2, [sp, #0x0]
add r0, r4, #0x0
mov r1, #0x0
bl BufferPlayersName
add r0, r4, #0x0
add r1, r5, #0x0
add r2, r6, #0x0
bl StringExpandPlaceholders
add r0, r6, #0x0
bl String_dtor
add r0, r4, #0x0
bl ScrStrBufs_delete
add r0, r7, #0x0
bl DestroyMsgData
pop {r3-r7, pc}
.balign 4
+2 -2
View File
@@ -177,9 +177,9 @@ _02088BBA:
ldr r0, [r4, #0x0]
lsl r0, r0, #0x18
lsr r0, r0, #0x18
bl BagView_new
bl BagView_New
add r5, r0, #0x0
bl FUN_0206E308
bl BagView_sizeof
add r2, r0, #0x0
ldr r1, [r4, #0x18]
add r0, r5, #0x0
+3 -3
View File
@@ -4971,10 +4971,10 @@
.extern FUN_0206E2AC
.extern FUN_0206E2E0
.extern FUN_0206E2E8
.extern BagView_new
.extern FUN_0206E308
.extern BagView_New
.extern BagView_sizeof
.extern FUN_0206E314
.extern BagView_setitem
.extern BagView_SetItem
.extern FUN_0206E340
.extern FUN_0206E354
.extern FUN_0206E358
+11 -14
View File
@@ -296,40 +296,37 @@ void SortPocket(struct ItemSlot * slots, u32 count)
}
}
extern struct BagView * BagView_new(u8 heap_id);
extern void BagView_setitem(struct BagView * view, struct ItemSlot * slot, u8 pocket, u8 idx);
struct BagView * CreateBagView(struct Bag * bag, const u8 * pockets, u32 heap_id)
{
struct BagView * view = BagView_new((u8)heap_id);
int i;
for (i = 0; pockets[i] != 0xFF; i++)
struct BagView * view = BagView_New((u8)heap_id);
for (u32 i = 0; pockets[i] != 0xFF; i++)
{
switch (pockets[i])
{
case POCKET_KEY_ITEMS:
BagView_setitem(view, bag->keyItems, POCKET_KEY_ITEMS, (u8)i);
BagView_SetItem(view, bag->keyItems, POCKET_KEY_ITEMS, (u8)i);
break;
case POCKET_ITEMS:
BagView_setitem(view, bag->items, POCKET_ITEMS, (u8)i);
BagView_SetItem(view, bag->items, POCKET_ITEMS, (u8)i);
break;
case POCKET_BERRIES:
BagView_setitem(view, bag->berries, POCKET_BERRIES, (u8)i);
BagView_SetItem(view, bag->berries, POCKET_BERRIES, (u8)i);
break;
case POCKET_MEDICINE:
BagView_setitem(view, bag->medicine, POCKET_MEDICINE, (u8)i);
BagView_SetItem(view, bag->medicine, POCKET_MEDICINE, (u8)i);
break;
case POCKET_BALLS:
BagView_setitem(view, bag->balls, POCKET_BALLS, (u8)i);
BagView_SetItem(view, bag->balls, POCKET_BALLS, (u8)i);
break;
case POCKET_BATTLE_ITEMS:
BagView_setitem(view, bag->battleItems, POCKET_BATTLE_ITEMS, (u8)i);
BagView_SetItem(view, bag->battleItems, POCKET_BATTLE_ITEMS, (u8)i);
break;
case POCKET_MAIL:
BagView_setitem(view, bag->mail, POCKET_MAIL, (u8)i);
BagView_SetItem(view, bag->mail, POCKET_MAIL, (u8)i);
break;
case POCKET_TMHMS:
BagView_setitem(view, bag->TMsHMs, POCKET_TMHMS, (u8)i);
BagView_SetItem(view, bag->TMsHMs, POCKET_TMHMS, (u8)i);
break;
}
}
+211
View File
@@ -0,0 +1,211 @@
#include "global.h"
#include "bag_view.h"
#include "coins.h"
#include "constants/items.h"
#include "heap.h"
#include "msgdata.h"
#include "player_data.h"
#include "script_buffers.h"
#include "seal.h"
extern u32 *FUN_0202708C(u32 *);
extern u32 FUN_02027168(u32 *);
extern u16 FUN_02027184(u32 *);
extern u32 *FUN_02027E24(struct SaveBlock2 *sav2);
extern u8 FUN_02029E2C(struct SealCase *, u32);
extern u32 FUN_0202A8D8(struct SaveBlock2 *);
extern u16 FUN_0202A3B4(u32, u32, u32);
THUMB_FUNC struct BagView *BagView_New(u8 heap_id)
{
struct BagView *ptr = AllocFromHeap(heap_id, sizeof(struct BagView));
memset(ptr, 0, sizeof(struct BagView));
return ptr;
}
THUMB_FUNC u32 BagView_sizeof()
{
return sizeof(struct BagView);
}
THUMB_FUNC void FUN_0206E30C(struct BagView *bag_view, u8 r1)
{
bag_view->unk65 = r1;
}
THUMB_FUNC void FUN_0206E314(
struct BagView *bag_view, struct SaveBlock2 *sav2, u8 r2, struct UnkStruct_0206F164 *r3)
{
FUN_0206E30C(bag_view, r2);
bag_view->sav2 = sav2;
bag_view->unk6C = r3;
bag_view->unk66 = 0;
}
THUMB_FUNC void BagView_SetItem(struct BagView *bag_view, struct ItemSlot *slot, u8 pocket, u8 idx)
{
bag_view->slots[idx].slot = slot;
bag_view->slots[idx].pocket = pocket;
}
THUMB_FUNC void FUN_0206E340(struct BagView *bag_view)
{
bag_view->unk76 = 1;
}
THUMB_FUNC void FUN_0206E354(struct BagView *bag_view, u32 r1)
{
bag_view->unk70 = r1;
}
THUMB_FUNC void FUN_0206E358(struct BagView *bag_view, u8 r1)
{
bag_view->unk74 = r1;
}
THUMB_FUNC void FUN_0206E360(struct BagView *bag_view, u16 r1)
{
bag_view->unk76_2 = r1;
}
THUMB_FUNC u16 FUN_0206E37C(struct BagView *bag_view)
{
return bag_view->unk66;
}
THUMB_FUNC u16 FUN_0206E384(struct BagView *bag_view)
{
return bag_view->unk68;
}
THUMB_FUNC u8 FUN_0206E38C(struct BagView *bag_view)
{
return bag_view->unk74;
}
THUMB_FUNC u8 FUN_0206E394(struct BagView *bag_view)
{
return bag_view->unk75;
}
THUMB_FUNC u32 FUN_0206E39C(struct SaveBlock2 *sav2)
{
return (u32)CheckCoins(Sav2_PlayerData_GetCoinsAddr(sav2));
}
THUMB_FUNC u32 FUN_0206E3A8(struct SaveBlock2 *sav2)
{
struct SealCase *seal_case = Sav2_SealCase_get(sav2);
u32 i;
u32 count = 0;
for (i = 1; i <= 0x50; ++i)
{
count += FUN_02029E2C(seal_case, i);
}
return count;
}
THUMB_FUNC u32 FUN_0206E3C8(struct SaveBlock2 *sav2)
{
return FUN_02027168(FUN_0202708C(FUN_02027E24(sav2)));
}
THUMB_FUNC u32 FUN_0206E3D8(struct SaveBlock2 *sav2)
{
return FUN_02027184(FUN_0202708C(FUN_02027E24(sav2)));
}
THUMB_FUNC u32 FUN_0206E3E8(struct SaveBlock2 *sav2)
{
return FUN_0202A3B4(FUN_0202A8D8(sav2), 0, 0);
}
THUMB_FUNC BOOL FUN_0206E3F8(struct SaveBlock2 *sav2, struct String *dest, u32 item_id, u32 heap_id)
{
struct MsgData *msgData = NewMsgDataFromNarc(0, NARC_MSGDATA_MSG, 7, heap_id);
struct ScrStrBufs *scrStrBufs = ScrStrBufs_new(heap_id);
struct String *string;
if (item_id == ITEM_NONE)
{
string = NewString_ReadMsgData(msgData, 0x63);
}
else if (item_id == ITEM_POINT_CARD)
{
string = NewString_ReadMsgData(msgData, 0x61);
BufferIntegerAsString(scrStrBufs, 0, FUN_0206E3E8(sav2), 4, 0, TRUE);
}
else if (item_id == ITEM_SEAL_CASE)
{
string = NewString_ReadMsgData(msgData, 0x5C);
BufferIntegerAsString(scrStrBufs, 0, FUN_0206E3A8(sav2), 4, 0, TRUE);
}
else if (item_id == ITEM_FASHION_CASE)
{
string = NewString_ReadMsgData(msgData, 0x5D);
BufferIntegerAsString(scrStrBufs, 0, FUN_0206E3C8(sav2), 3, 0, TRUE);
BufferIntegerAsString(scrStrBufs, 1, FUN_0206E3D8(sav2), 2, 0, TRUE);
}
else if (item_id == ITEM_COIN_CASE)
{
string = NewString_ReadMsgData(msgData, 0x39);
BufferIntegerAsString(scrStrBufs, 0, FUN_0206E39C(sav2), 5, 0, TRUE);
}
else
{
ScrStrBufs_delete(scrStrBufs);
DestroyMsgData(msgData);
return FALSE;
}
StringExpandPlaceholders(scrStrBufs, dest, string);
String_dtor(string);
ScrStrBufs_delete(scrStrBufs);
DestroyMsgData(msgData);
return TRUE;
}
THUMB_FUNC void FUN_0206E51C(
struct PlayerData *playerData, struct String *dest, u32 r2, u32 r3, u32 heap_id)
{
#pragma unused(r2)
struct MsgData *msgData;
switch (r3)
{
case 1:
msgData = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, 7, heap_id);
ReadMsgDataIntoString(msgData, 0x38, dest);
DestroyMsgData(msgData);
return;
case 2:
msgData = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, 7, heap_id);
ReadMsgDataIntoString(msgData, 0x6F, dest);
DestroyMsgData(msgData);
return;
default:
msgData = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, 0xC7, heap_id);
struct ScrStrBufs *scrStrBufs = ScrStrBufs_new(heap_id);
struct String *src = NewString_ReadMsgData(msgData, 0x24);
BufferPlayersName(scrStrBufs, 0, playerData);
StringExpandPlaceholders(scrStrBufs, dest, src);
String_dtor(src);
ScrStrBufs_delete(scrStrBufs);
DestroyMsgData(msgData);
return;
}
}
+1 -7
View File
@@ -1,6 +1,7 @@
#ifndef POKEDIAMOND_BAG_H
#define POKEDIAMOND_BAG_H
#include "bag_view.h"
#include "itemtool.h"
#include "save_block_2.h"
@@ -17,13 +18,6 @@ struct Bag
u32 registeredItem;
};
struct BagView
{
struct ItemSlot * slots;
u32 count;
u8 pocket;
};
struct UnkStruct_0206F164
{
u8 unk_00[8];
+56
View File
@@ -0,0 +1,56 @@
#ifndef POKEDIAMOND_BAG_VIEW_H
#define POKEDIAMOND_BAG_VIEW_H
#include "player_data.h"
#include "save_block_2.h"
struct UnkStruct_0206F164;
struct BagView_UnkSub
{
struct ItemSlot *slot;
u8 padding[0x4];
u8 pocket;
u8 padding2[0x3];
}; // total size = 0xC
struct BagView
{
struct SaveBlock2 *sav2;
struct BagView_UnkSub slots[8];
u8 padding;
u8 unk65;
u16 unk66;
u16 unk68;
u8 padding2[0x2];
struct UnkStruct_0206F164 *unk6C;
u32 unk70;
u8 unk74;
u8 unk75;
u16 unk76 : 1;
u16 unk76_2 : 15;
}; // total size = 0x78
struct BagView *BagView_New(u8 heap_id);
u32 BagView_sizeof();
void FUN_0206E30C(struct BagView *bag_view, u8 r1);
void FUN_0206E314(
struct BagView *bag_view, struct SaveBlock2 *sav2, u8 r2, struct UnkStruct_0206F164 *r3);
void BagView_SetItem(struct BagView *bag_view, struct ItemSlot *slot, u8 pocket, u8 idx);
void FUN_0206E340(struct BagView *bag_view);
void FUN_0206E354(struct BagView *bag_view, u32 r1);
void FUN_0206E358(struct BagView *bag_view, u8 r1);
void FUN_0206E360(struct BagView *bag_view, u16 r1);
u16 FUN_0206E37C(struct BagView *bag_view);
u16 FUN_0206E384(struct BagView *bag_view);
u8 FUN_0206E38C(struct BagView *bag_view);
u8 FUN_0206E394(struct BagView *bag_view);
u32 FUN_0206E39C(struct SaveBlock2 *sav2);
u32 FUN_0206E3A8(struct SaveBlock2 *sav2);
u32 FUN_0206E3C8(struct SaveBlock2 *sav2);
u32 FUN_0206E3D8(struct SaveBlock2 *sav2);
u32 FUN_0206E3E8(struct SaveBlock2 *sav2);
BOOL FUN_0206E3F8(struct SaveBlock2 *sav2, struct String *dest, u32 item_id, u32 heap_id);
void FUN_0206E51C(struct PlayerData *playerData, struct String *dest, u32 r2, u32 r3, u32 heap_id);
#endif // POKEDIAMOND_BAG_VIEW_H