summaryrefslogtreecommitdiff
path: root/src/d/d_item.cpp
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2022-06-29 13:19:09 -0700
committerGitHub <noreply@github.com>2022-06-29 22:19:09 +0200
commit046d178003035ea87d3042a61917c2d482c68c74 (patch)
tree4240e760d8d40201ca4ec96634da8abff211f6bb /src/d/d_item.cpp
parentcd5b02450cf278cbeb2c8bb90be1ad22518938c7 (diff)
work on daalink, fop actor, mDo machine, msg_scrn, + various (#201)
* work on fop actor / actor mng, daalink, d_a_obj_item * d_a_title mostly decompiled * daalink / d_event / JMessage / dmsg_out_font work * msg_scrn_base / msg_scrn_boss * some work on mDo machine, d_menu_save, d_tresure, and various * remove asm * progress
Diffstat (limited to 'src/d/d_item.cpp')
-rw-r--r--src/d/d_item.cpp77
1 files changed, 49 insertions, 28 deletions
diff --git a/src/d/d_item.cpp b/src/d/d_item.cpp
index 517b0a82ae..96e363d289 100644
--- a/src/d/d_item.cpp
+++ b/src/d/d_item.cpp
@@ -2597,51 +2597,72 @@ u8 check_itemno(int i_itemId) {
/* 8009B940-8009BBD8 096280 0298+00 11/11 0/0 0/0 .text addBombCount__FUcUc */
#ifdef NONMATCHING
-static u8 addBombCount(u8 param_0, u8 param_1) {
- u8 count[4];
- u8 count2[3];
-
- int uvar6;
-
- for (int i = 0; i < 3; i++) {
- u8 tmp = dComIfGs_getItem(i + SLOT_15, false);
- count[i] = tmp;
-
- if (count[i] == 0x50) {
- count2[i] = 0;
+int addBombCount(u8 i_bombType, u8 i_addNum) {
+ u8 bombType[3];
+ s32 bombNum[3];
+ s32 var_r22;
+ s32 bombIdx;
+
+ for (u8 i = 0; i < 3; i++) {
+ bombType[i] = dComIfGs_getItem(i + SLOT_15, false);
+
+ if (bombType[i] == BOMB_BAG_LV1) {
+ bombNum[i] = 0;
+ } else if (bombType[i] == i_bombType) {
+ bombNum[i] = dComIfGs_getBombNum(i);
} else {
- if (count[i] == param_0) {
- count2[i] = dComIfGs_getBombNum(i);
- } else {
- count2[i] = -1;
- }
+ bombNum[i] = -1;
}
}
- for (int i = 0; i < 3; i++) {
- uvar6 = -1;
- for (int j = 0; j < 3; j++) {
- if (count2[j] == 0) {
- uvar6 = 0;
+ for (u8 i = 0; i < 3; i++) {
+ bombIdx = -1;
+ var_r22 = -1;
+
+ for (u8 j = 0; j < 3; j++) {
+ if (bombNum[j] == 0) {
+ bombIdx = j;
+ var_r22 = 0;
+ }
+ }
+
+ for (u8 k = 0; k < 3; k++) {
+ if (bombNum[k] > 0 && bombNum[k] > var_r22 && bombNum[k] != dComIfGs_getBombMax(bombType[k])) {
+ bombIdx = k;
+ var_r22 = bombNum[k];
}
}
- for (int k = 0; k < 3; k++) {
- if (count2[k] > 0 && uvar6 < count2[k] && count2[k] != dComIfGs_getBombMax(count2[k])) {
- uvar6 = count2[k];
+ if (bombIdx == -1) { // issue here?
+ return i_addNum;
+ } else if (var_r22 == 0) {
+ if (dComIfGs_getBombMax(i_bombType) >= i_addNum) {
+ dComIfGs_setEmptyBombBagItemIn(i_bombType, i_addNum, true);
+ return 0;
+ } else {
+ dComIfGs_setEmptyBombBagItemIn(i_bombType, i_addNum, true);
+ i_addNum -= (int)dComIfGs_getBombMax(i_bombType);
+ }
+ } else {
+ if (dComIfGs_getBombMax(bombType[bombIdx]) >= var_r22 + i_addNum) {
+ dComIfGp_setItemBombNumCount(bombIdx, i_addNum);
+ return 0;
+ } else {
+ dComIfGp_setItemBombNumCount(bombIdx, i_addNum);
+ i_addNum -= (int)dComIfGs_getBombMax(bombType[bombIdx]) - var_r22;
}
}
- if ()
+ bombNum[bombIdx] = dComIfGs_getBombMax(bombType[bombIdx]);
}
- return param_1;
+ return i_addNum;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void addBombCount(u8 param_0, u8 param_1) {
+asm int addBombCount(u8 param_0, u8 param_1) {
nofralloc
#include "asm/d/d_item/addBombCount__FUcUc.s"
}