diff options
| author | TakaRikka <38417346+TakaRikka@users.noreply.github.com> | 2022-06-29 13:19:09 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-06-29 22:19:09 +0200 |
| commit | 046d178003035ea87d3042a61917c2d482c68c74 (patch) | |
| tree | 4240e760d8d40201ca4ec96634da8abff211f6bb /src/d/d_item.cpp | |
| parent | cd5b02450cf278cbeb2c8bb90be1ad22518938c7 (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.cpp | 77 |
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" } |
