Port scrcmd_items from pokediamond

This commit is contained in:
tgsm 2021-12-05 12:29:04 -06:00
parent 7ac9326cda
commit f225f83c5d
8 changed files with 126 additions and 273 deletions

View File

@ -226,7 +226,7 @@ gScriptCmdTable:
.word ScrCmd_SetVar ; 041
.word ScrCmd_CopyVar ; 042
.word ScrCmd_SetOrCopyVar ; 043
.word ScrCmd_Message ; 044
.word ScrCmd_Message ; 044
.word ScrCmd_045 ; 045
.word ScrCmd_046 ; 046
.word ScrCmd_047 ; 047
@ -307,12 +307,12 @@ gScriptCmdTable:
.word ScrCmd_122 ; 122
.word ScrCmd_123 ; 123
.word ScrCmd_124 ; 124
.word ScrCmd_125 ; 125
.word ScrCmd_126 ; 126
.word ScrCmd_127 ; 127
.word ScrCmd_128 ; 128
.word ScrCmd_129 ; 129
.word ScrCmd_130 ; 130
.word ScrCmd_GiveItem ; 125
.word ScrCmd_TakeItem ; 126
.word ScrCmd_HasSpaceForItem ; 127
.word ScrCmd_HasItem ; 128
.word ScrCmd_ItemIsTMOrHM ; 129
.word ScrCmd_GetItemPocket ; 130
.word ScrCmd_131 ; 131
.word ScrCmd_132 ; 132
.word ScrCmd_133 ; 133
@ -851,7 +851,7 @@ gScriptCmdTable:
.word ScrCmd_666 ; 666
.word ScrCmd_667 ; 667
.word ScrCmd_668 ; 668
.word ScrCmd_669 ; 669
.word ScrCmd_GetItemQuantity ; 669
.word ScrCmd_670 ; 670
.word ScrCmd_671 ; 671
.word ScrCmd_672 ; 672

View File

@ -1,248 +0,0 @@
.include "asm/macros.inc"
.include "global.inc"
.text
thumb_func_start ScrCmd_125
ScrCmd_125: ; 0x0204E9D8
push {r3, r4, r5, r6, r7, lr}
add r4, r0, #0
add r1, r4, #0
add r1, #0x80
ldr r5, [r1]
bl ScriptReadHalfword
add r1, r0, #0
add r0, r4, #0
add r0, #0x80
ldr r0, [r0]
bl VarGet
add r6, r0, #0
add r0, r4, #0
bl ScriptReadHalfword
add r1, r0, #0
add r0, r4, #0
add r0, #0x80
ldr r0, [r0]
bl VarGet
add r7, r0, #0
add r0, r4, #0
bl ScriptReadHalfword
add r4, #0x80
add r1, r0, #0
ldr r0, [r4]
bl GetVarPointer
add r4, r0, #0
ldr r0, [r5, #0xc]
bl Sav2_Bag_get
add r1, r6, #0
add r2, r7, #0
mov r3, #4
bl Bag_AddItem
strh r0, [r4]
mov r0, #0
pop {r3, r4, r5, r6, r7, pc}
thumb_func_end ScrCmd_125
thumb_func_start ScrCmd_126
ScrCmd_126: ; 0x0204EA30
push {r3, r4, r5, r6, r7, lr}
add r4, r0, #0
add r1, r4, #0
add r1, #0x80
ldr r5, [r1]
bl ScriptReadHalfword
add r1, r0, #0
add r0, r4, #0
add r0, #0x80
ldr r0, [r0]
bl VarGet
add r6, r0, #0
add r0, r4, #0
bl ScriptReadHalfword
add r1, r0, #0
add r0, r4, #0
add r0, #0x80
ldr r0, [r0]
bl VarGet
add r7, r0, #0
add r0, r4, #0
bl ScriptReadHalfword
add r4, #0x80
add r1, r0, #0
ldr r0, [r4]
bl GetVarPointer
add r4, r0, #0
ldr r0, [r5, #0xc]
bl Sav2_Bag_get
add r1, r6, #0
add r2, r7, #0
mov r3, #4
bl Bag_TakeItem
strh r0, [r4]
mov r0, #0
pop {r3, r4, r5, r6, r7, pc}
thumb_func_end ScrCmd_126
thumb_func_start ScrCmd_127
ScrCmd_127: ; 0x0204EA88
push {r3, r4, r5, r6, r7, lr}
add r4, r0, #0
add r1, r4, #0
add r1, #0x80
ldr r5, [r1]
bl ScriptReadHalfword
add r1, r0, #0
add r0, r4, #0
add r0, #0x80
ldr r0, [r0]
bl VarGet
add r6, r0, #0
add r0, r4, #0
bl ScriptReadHalfword
add r1, r0, #0
add r0, r4, #0
add r0, #0x80
ldr r0, [r0]
bl VarGet
add r7, r0, #0
add r0, r4, #0
bl ScriptReadHalfword
add r4, #0x80
add r1, r0, #0
ldr r0, [r4]
bl GetVarPointer
add r4, r0, #0
ldr r0, [r5, #0xc]
bl Sav2_Bag_get
add r1, r6, #0
add r2, r7, #0
mov r3, #4
bl Bag_HasSpaceForItem
strh r0, [r4]
mov r0, #0
pop {r3, r4, r5, r6, r7, pc}
thumb_func_end ScrCmd_127
thumb_func_start ScrCmd_128
ScrCmd_128: ; 0x0204EAE0
push {r3, r4, r5, r6, r7, lr}
add r4, r0, #0
add r1, r4, #0
add r1, #0x80
ldr r5, [r1]
bl ScriptReadHalfword
add r1, r0, #0
add r0, r4, #0
add r0, #0x80
ldr r0, [r0]
bl VarGet
add r6, r0, #0
add r0, r4, #0
bl ScriptReadHalfword
add r1, r0, #0
add r0, r4, #0
add r0, #0x80
ldr r0, [r0]
bl VarGet
add r7, r0, #0
add r0, r4, #0
bl ScriptReadHalfword
add r4, #0x80
add r1, r0, #0
ldr r0, [r4]
bl GetVarPointer
add r4, r0, #0
ldr r0, [r5, #0xc]
bl Sav2_Bag_get
add r1, r6, #0
add r2, r7, #0
mov r3, #0xb
bl Bag_HasItem
strh r0, [r4]
mov r0, #0
pop {r3, r4, r5, r6, r7, pc}
thumb_func_end ScrCmd_128
thumb_func_start ScrCmd_669
ScrCmd_669: ; 0x0204EB38
push {r4, r5, r6, lr}
add r4, r0, #0
add r1, r4, #0
add r1, #0x80
ldr r5, [r1]
bl ScriptReadHalfword
add r1, r0, #0
add r0, r4, #0
add r0, #0x80
ldr r0, [r0]
bl VarGet
add r6, r0, #0
add r0, r4, #0
bl ScriptReadHalfword
add r4, #0x80
add r1, r0, #0
ldr r0, [r4]
bl GetVarPointer
add r4, r0, #0
ldr r0, [r5, #0xc]
bl Sav2_Bag_get
add r1, r6, #0
mov r2, #0xb
bl Bag_GetQuantity
strh r0, [r4]
mov r0, #0
pop {r4, r5, r6, pc}
.balign 4, 0
thumb_func_end ScrCmd_669
thumb_func_start ScrCmd_129
ScrCmd_129: ; 0x0204EB7C
push {r3, r4, r5, lr}
add r5, r0, #0
bl ScriptReadHalfword
add r1, r0, #0
add r0, r5, #0
add r0, #0x80
ldr r0, [r0]
bl VarGet
add r4, r0, #0
add r0, r5, #0
bl ScriptReadHalfword
add r5, #0x80
add r1, r0, #0
ldr r0, [r5]
bl GetVarPointer
add r5, r0, #0
add r0, r4, #0
bl sub_0205BBB8
strh r0, [r5]
mov r0, #0
pop {r3, r4, r5, pc}
thumb_func_end ScrCmd_129
thumb_func_start ScrCmd_130
ScrCmd_130: ; 0x0204EBB0
push {r3, r4, r5, lr}
add r5, r0, #0
bl ScriptReadHalfword
add r1, r0, #0
add r0, r5, #0
add r0, #0x80
ldr r0, [r0]
bl VarGet
add r4, r0, #0
add r0, r5, #0
bl ScriptReadHalfword
add r5, #0x80
add r1, r0, #0
ldr r0, [r5]
bl GetVarPointer
add r5, r0, #0
add r0, r4, #0
mov r1, #5
mov r2, #0xb
bl GetItemAttr
strh r0, [r5]
mov r0, #0
pop {r3, r4, r5, pc}
thumb_func_end ScrCmd_130

View File

@ -86,8 +86,8 @@ _0205BBB0: .word 0x00989680
_0205BBB4: .word 0x05F5E100
thumb_func_end sub_0205BB1C
thumb_func_start sub_0205BBB8
sub_0205BBB8: ; 0x0205BBB8
thumb_func_start ItemIsTMOrHM
ItemIsTMOrHM: ; 0x0205BBB8
mov r1, #0x52
lsl r1, r1, #2
cmp r0, r1
@ -101,7 +101,7 @@ _0205BBCA:
mov r0, #0
bx lr
.balign 4, 0
thumb_func_end sub_0205BBB8
thumb_func_end ItemIsTMOrHM
thumb_func_start sub_0205BBD0
sub_0205BBD0: ; 0x0205BBD0

View File

@ -1808,12 +1808,12 @@
.public ScrCmd_122
.public ScrCmd_123
.public ScrCmd_124
.public ScrCmd_125
.public ScrCmd_126
.public ScrCmd_127
.public ScrCmd_128
.public ScrCmd_129
.public ScrCmd_130
.public ScrCmd_GiveItem
.public ScrCmd_TakeItem
.public ScrCmd_HasSpaceForItem
.public ScrCmd_HasItem
.public ScrCmd_ItemIsTMOrHM
.public ScrCmd_GetItemPocket
.public ScrCmd_131
.public ScrCmd_132
.public ScrCmd_133
@ -2349,7 +2349,7 @@
.public ScrCmd_666
.public ScrCmd_667
.public ScrCmd_668
.public ScrCmd_669
.public ScrCmd_GetItemQuantity
.public ScrCmd_670
.public ScrCmd_671
.public ScrCmd_672
@ -28680,7 +28680,7 @@
.public sub_0205BAF8
.public sub_0205BB04
.public sub_0205BB1C
.public sub_0205BBB8
.public ItemIsTMOrHM
.public sub_0205BBD0
.public sub_0205BC78
.public sub_0205BD20

21
include/scrcmd.h Normal file
View File

@ -0,0 +1,21 @@
#ifndef POKEHEARTGOLD_SCRCMD_H
#define POKEHEARTGOLD_SCRCMD_H
#include "fieldmap.h"
#include "script.h"
// scrcmd_fossils.c
BOOL ScrCmd_CountFossils(SCRIPTCONTEXT* ctx);
BOOL ScrCmd_GetFossilPokemon(SCRIPTCONTEXT* ctx);
BOOL ScrCmd_GetFossilMinimumAmount(SCRIPTCONTEXT* ctx);
// scrcmd_items.c
BOOL ScrCmd_GiveItem(SCRIPTCONTEXT* ctx);
BOOL ScrCmd_TakeItem(SCRIPTCONTEXT* ctx);
BOOL ScrCmd_HasSpaceForItem(SCRIPTCONTEXT* ctx);
BOOL ScrCmd_HasItem(SCRIPTCONTEXT* ctx);
BOOL ScrCmd_GetItemQuantity(SCRIPTCONTEXT* ctx);
BOOL ScrCmd_ItemIsTMOrHM(SCRIPTCONTEXT* ctx);
BOOL ScrCmd_GetItemPocket(SCRIPTCONTEXT* ctx);
#endif

View File

@ -169,7 +169,7 @@ Static main
Object scrcmd_15.o
Object scrcmd_16.o
Object scrcmd_17.o
Object scrcmd_18.o
Object scrcmd_items.o
Object scrcmd_19.o
Object scrcmd_20.o
Object unk_0204F500.o

View File

@ -28,7 +28,7 @@ BOOL ScrCmd_CountFossils(SCRIPTCONTEXT* ctx) {
return FALSE;
}
BOOL ScrCmd_GetFossilPokemon(SCRIPTCONTEXT* ctx) {
BOOL ScrCmd_GetFossilPokemon(SCRIPTCONTEXT* ctx) {
u16 *ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
u16 fossil_id = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
@ -54,11 +54,9 @@ BOOL ScrCmd_GetFossilMinimumAmount(SCRIPTCONTEXT* ctx) {
u8 i;
u16 total;
for (i = 0, total = 0; i < NELEMS(sFossilPokemonMap); i++)
{
for (i = 0, total = 0; i < NELEMS(sFossilPokemonMap); i++) {
total += Bag_GetQuantity(Sav2_Bag_get(sav_ptr->savedata), sFossilPokemonMap[i][0], 4);
if (total >= needed_amount)
{
if (total >= needed_amount) {
*ret_ptr1 = sFossilPokemonMap[i][0];
*ret_ptr2 = i;
break;

82
src/scrcmd_items.c Normal file
View File

@ -0,0 +1,82 @@
#include "scrcmd.h"
#include "bag.h"
#include "constants/items.h"
extern BOOL ItemIsTMOrHM(u16 item_id);
BOOL ScrCmd_GiveItem(SCRIPTCONTEXT* ctx) {
UnkSavStruct80* sav_ptr = ctx->unk80;
u16 item_id = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
u16 quantity = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
BAG_DATA* bag = Sav2_Bag_get(sav_ptr->savedata);
*ret_ptr = Bag_AddItem(bag, item_id, quantity, 4);
return FALSE;
}
BOOL ScrCmd_TakeItem(SCRIPTCONTEXT* ctx) {
UnkSavStruct80* sav_ptr = ctx->unk80;
u16 item_id = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
u16 quantity = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
BAG_DATA* bag = Sav2_Bag_get(sav_ptr->savedata);
*ret_ptr = Bag_TakeItem(bag, item_id, quantity, 4);
return FALSE;
}
BOOL ScrCmd_HasSpaceForItem(SCRIPTCONTEXT* ctx) {
UnkSavStruct80* sav_ptr = ctx->unk80;
u16 item_id = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
u16 quantity = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
BAG_DATA* bag = Sav2_Bag_get(sav_ptr->savedata);
*ret_ptr = Bag_HasSpaceForItem(bag, item_id, quantity, 4);
return FALSE;
}
BOOL ScrCmd_HasItem(SCRIPTCONTEXT* ctx) {
UnkSavStruct80* sav_ptr = ctx->unk80;
u16 item_id = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
u16 quantity = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
BAG_DATA* bag = Sav2_Bag_get(sav_ptr->savedata);
*ret_ptr = Bag_HasItem(bag, item_id, quantity, 11);
return FALSE;
}
BOOL ScrCmd_GetItemQuantity(SCRIPTCONTEXT* ctx) {
UnkSavStruct80* sav_ptr = ctx->unk80;
u16 item_id = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
BAG_DATA* bag = Sav2_Bag_get(sav_ptr->savedata);
*ret_ptr = Bag_GetQuantity(bag, item_id, 11);
return FALSE;
}
BOOL ScrCmd_ItemIsTMOrHM(SCRIPTCONTEXT* ctx) {
u16 item_id = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
*ret_ptr = ItemIsTMOrHM(item_id);
return FALSE;
}
BOOL ScrCmd_GetItemPocket(SCRIPTCONTEXT* ctx) {
u16 item_id = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
*ret_ptr = GetItemAttr(item_id, ITEMATTR_FIELD_POCKET, 11);
return FALSE;
}