Files
ac-decomp/rel/m_item_debug.c
T
2023-10-21 01:45:37 -04:00

207 lines
5.4 KiB
C

#include "m_item_debug.h"
#include "libultra/libultra.h"
#include "game.h"
#include "m_room_type.h"
#include "padmgr.h"
#include "m_name_table.h"
#include "m_private.h"
#include "m_common_data.h"
typedef struct item_debug_s {
int enabled;
int category;
int index;
} ItemDebug_c;
static char* mItemDebug_category_name_table[mItemDebug_CATEGORY_NUM] = {
"\xC5\xBC", // untranslated JP
"FTR",
"PPR",
"MNY",
"TOL",
"FSH",
"CLT",
"ELS",
"CPT",
"WLL",
"FOD",
"PLT",
"MSC",
"DST",
"LOT",
"IST",
"HPY",
"KAB"
};
static mActor_name_t mItemDebug_category_start_no_table[mItemDebug_CATEGORY_NUM] = {
EMPTY_NO,
FTR0_NO_START,
ITM_PAPER_START,
ITM_MONEY_START,
ITM_TOOL_START,
ITM_FISH_START,
ITM_CLOTH_START,
ITM_ETC_START,
ITM_CARPET_START,
ITM_WALL_START,
ITM_FOOD_START,
ITM_ENV_START,
ITM_MINIDISK_START,
ITM_DIARY_START,
ITM_TICKET_START,
ITM_INSECT_START,
ITM_HUKUBUKURO_START,
ITM_KABU_START
};
static int mItemDebug_category_max_table[mItemDebug_CATEGORY_NUM] = {
0,
FTR_NUM,
PAPER_NUM,
MONEY_NUM,
TOOL_NUM,
FISH_NUM,
CLOTH_NUM,
ETC_NUM,
CARPET_NUM,
WALL_NUM,
FRUIT_NUM,
PLANT_NUM,
MINIDISK_NUM,
DIARY_NUM,
TICKET_NUM,
INSECT_NUM,
HUKUBUKURO_NUM,
KABU_NUM
};
/* @unused ? mItemDebug_ItemDebugCt(...) */
static int mItemDebug_FurnitureCanUse(int ftr_idx) {
if (ftr_idx >= 0 && ftr_idx < FTR_NUM) {
u8* birth_info_p = mRmTp_CheckFtrBirthInfoTop();
if (birth_info_p[ftr_idx] == mRmTp_BIRTH_TYPE_UNOBTAINABLE || birth_info_p[ftr_idx] == mRmTp_BIRTH_TYPE_MY_ORIGINAL) {
return FALSE;
}
return TRUE;
}
return FALSE;
}
static ItemDebug_c l_mItemDebug_work_data;
extern void mItemDebug_ItemDebugMain() {
if ((gamePT->pads[PAD2].on.button & BUTTON_START) == BUTTON_START) {
l_mItemDebug_work_data.enabled = (l_mItemDebug_work_data.enabled + 1) & 1;
if (l_mItemDebug_work_data.enabled != FALSE) {
bzero(&l_mItemDebug_work_data, sizeof(ItemDebug_c));
l_mItemDebug_work_data.enabled = TRUE;
}
else {
bzero(&l_mItemDebug_work_data, sizeof(ItemDebug_c));
}
}
if (l_mItemDebug_work_data.enabled != FALSE) {
int category;
if ((gamePT->pads[PAD2].on.button & BUTTON_DUP) == BUTTON_DUP) {
l_mItemDebug_work_data.index = 0;
l_mItemDebug_work_data.category++;
if (l_mItemDebug_work_data.category > mItemDebug_CATEGORY_KAB) {
l_mItemDebug_work_data.category = 0;
}
}
category = l_mItemDebug_work_data.category;
if (category != mItemDebug_CATEGORY_NONE) {
if ((gamePT->pads[PAD2].on.button & BUTTON_DRIGHT) == BUTTON_DRIGHT) {
/* Holding B increments by 10, holding A increments by 100 */
if ((gamePT->pads[PAD2].now.button & BUTTON_B) == BUTTON_B) {
l_mItemDebug_work_data.index += 10;
}
else if ((gamePT->pads[PAD2].now.button & BUTTON_A) == BUTTON_A) {
l_mItemDebug_work_data.index += 100;
}
else {
l_mItemDebug_work_data.index++;
}
if (l_mItemDebug_work_data.index > mItemDebug_category_max_table[category] - 1) {
l_mItemDebug_work_data.index = 0;
}
}
else if ((gamePT->pads[PAD2].on.button & BUTTON_DLEFT) == BUTTON_DLEFT) {
/* Holding B increments by 10, holding A increments by 100 */
if ((gamePT->pads[PAD2].now.button & BUTTON_B) == BUTTON_B) {
l_mItemDebug_work_data.index -= 10;
}
else if ((gamePT->pads[PAD2].now.button & BUTTON_A) == BUTTON_A) {
l_mItemDebug_work_data.index -= 100;
}
else {
l_mItemDebug_work_data.index--;
}
if (l_mItemDebug_work_data.index < 0) {
l_mItemDebug_work_data.index = 0;
}
}
}
if ((gamePT->pads[PAD2].on.button & BUTTON_DDOWN) == BUTTON_DDOWN && category != mItemDebug_CATEGORY_NONE) {
int slot_idx = mPr_GetPossessionItemIdxWithCond(Common_Get(now_private), EMPTY_NO, mPr_ITEM_COND_NORMAL);
mActor_name_t item;
if (category != mItemDebug_CATEGORY_FTR) {
item = mItemDebug_category_start_no_table[category] + l_mItemDebug_work_data.index;
}
else {
if (mItemDebug_FurnitureCanUse(l_mItemDebug_work_data.index)) {
item = mRmTp_FtrIdx2FtrItemNo(l_mItemDebug_work_data.index, mRmTp_DIRECT_SOUTH);
}
else {
return;
}
}
if (slot_idx != -1) {
mPr_SetPossessionItem(Common_Get(now_private), slot_idx, item, mPr_ITEM_COND_NORMAL);
}
}
}
}
extern void mItemDebug_ItemDebugDraw(gfxprint_t* gfxprint) {
int category = l_mItemDebug_work_data.category;
if (l_mItemDebug_work_data.enabled != FALSE) {
gfxprint_color(gfxprint, 225, 225, 255, 255);
gfxprint_locate8x8(gfxprint, 3, 20);
if (category != mItemDebug_CATEGORY_NONE) {
if (category == mItemDebug_CATEGORY_FTR) {
if (mItemDebug_FurnitureCanUse(l_mItemDebug_work_data.index)) {
gfxprint_printf(gfxprint, "%s:%d", mItemDebug_category_name_table[category], l_mItemDebug_work_data.index);
}
else {
gfxprint_printf(gfxprint, "%s:---(%d)", mItemDebug_category_name_table[category], l_mItemDebug_work_data.index);
}
}
else {
gfxprint_printf(gfxprint, "%s:%d", mItemDebug_category_name_table[category], l_mItemDebug_work_data.index);
}
}
else {
gfxprint_printf(gfxprint, "\xC5\xBC");
}
}
}