Implement & link m_museum_display.c

This commit is contained in:
Cuyler36
2023-07-26 15:37:47 -04:00
parent c94d2d8454
commit 06094cef11
5 changed files with 611 additions and 2 deletions
+48 -2
View File
@@ -28,15 +28,51 @@ enum {
mMmd_DISPLAY_NUM
};
enum {
mMmd_DONATOR_NONE,
mMmd_DONATOR_PLAYER1,
mMmd_DONATOR_PLAYER2,
mMmd_DONATOR_PLAYER3,
mMmd_DONATOR_PLAYER4,
mMmd_DONATOR_DELETED_PLAYER,
mMmd_DONATOR_NUM
};
enum {
mMmd_CATEGORY_FOSSIL,
mMmd_CATEGORY_ART,
mMmd_CATEGORY_INSECT,
mMmd_CATEGORY_FISH,
mMmd_CATEGORY_NUM
};
/* 4 bits per donatable item */
#define mMmd_BIT_INFO(info, category, index) \
(((info).category[(index) / 2] >> (((index) & 1) << 2)) & 0x0F)
(((info).category##_bit[(index) >> 1] >> (((index) & 1) << 2)) & 0x0F)
#define mMmd_ART_BIT(info, index) mMmd_BIT_INFO(info, art, index)
#define mMmd_INSECT_BIT(info, index) mMmd_BIT_INFO(info, insect, index)
#define mMmd_FISH_BIT(info, index) mMmd_BIT_INFO(info, fish, index)
#define mMmd_FOSSIL_BIT(info, index) mMmd_BIT_INFO(info, fossil, index)
#define mMmd_BIT_CLR(info, category, index) \
((info).category##_bit[(index) >> 1] &= ~(0b1111 << (((index) & 1) * 4)))
#define mMmd_FOSSIL_CLR(info, index) mMmd_BIT_CLR(info, fossil, index)
#define mMmd_ART_CLR(info, index) mMmd_BIT_CLR(info, art, index)
#define mMmd_INSECT_CLR(info, index) mMmd_BIT_CLR(info, insect, index)
#define mMmd_FISH_CLR(info, index) mMmd_BIT_CLR(info, fish, index)
#define mMmd_BIT_SET(info, category, index, value) \
((info).category##_bit[(index) >> 1] |= (((value) & 0b1111) << (((index) & 1)) * 4))
#define mMmd_FOSSIL_SET(info, index, value) mMmd_BIT_SET(info, fossil, index, value)
#define mMmd_ART_SET(info, index, value) mMmd_BIT_SET(info, art, index, value)
#define mMmd_INSECT_SET(info, index, value) mMmd_BIT_SET(info, insect, index, value)
#define mMmd_FISH_SET(info, index, value) mMmd_BIT_SET(info, fish, index, value)
/* sizeof(mMmd_info_c) == 0x3F */
typedef struct museum_display_info_s {
/* 0x00 */ u8 fossil_bit[mMmd_FOSSIL_BIT_NUM];
@@ -45,8 +81,18 @@ typedef struct museum_display_info_s {
/* 0x2A */ u8 insect_bit[mMmd_INSECT_BIT_NUM];
} mMmd_info_c;
extern int mMmd_GetDisplayInfo(mActor_name_t item);
extern int mMmd_FossilInfo(int fossil_no);
extern int mMmd_ArtInfo(int art_no);
extern int mMmd_InsectInfo(int insect_no);
extern int mMmd_FishInfo(int fish_no);
extern void mMmd_SetFossil(int fossil_no);
extern void mMmd_SetArt(int art_no);
extern void mMmd_SetInsect(int insect_no);
extern void mMmd_SetFish(int fish_no);
extern mMmd_GetDisplayInfo(mActor_name_t item);
extern int mMmd_RequestMuseumDisplay(mActor_name_t item);
extern void mMmd_MakeMuseumDisplayData();
extern void mMmd_DeletePresentedByPlayer(u8 player_no);
extern int mMmd_CountDisplayedFossil();
extern int mMmd_CountDisplayedArt();
extern int mMmd_CountDisplayedInsect();
+108
View File
@@ -338,6 +338,13 @@ extern int mNT_check_unknown(mActor_name_t item_no);
#define FTR_BIRTHDAY_CAKE_NORTH 0x11FE
#define FTR_BIRTHDAY_CAKE_WEST 0x11FF
#define FTR_PAINTING0 0x12AC // famous painting
#define FTR_PAINTING14 0x12E4 // worthy painting
#define FTR_PAINTING14_EAST 0x12E5
#define FTR_PAINTING14_NORTH 0x12E6
#define FTR_PAINTING14_WEST 0x12E7
#define FTR_DRACAENA 0x13B0
#define FTR_DRACAENA_EAST 0x13B1
#define FTR_DRACAENA_NORTH 0x13B2
@@ -381,6 +388,16 @@ extern int mNT_check_unknown(mActor_name_t item_no);
#define FTR_DINO_TRILOBITE_WEST 0x1F4F
#define FTR_DINO_DISP_TRICERA 0x1F7C
#define FTR_DINO_DISP_TREX 0x1F80
#define FTR_DINO_DISP_BRONTO 0x1F84
#define FTR_DINO_DISP_PTERA 0x1F88
#define FTR_DINO_DISP_PLESIO 0x1F8C
#define FTR_DINO_DISP_MAMMOTH 0x1F90
#define FTR_DINO_DISP_STEGO 0x1F94
#define FTR_DINO_DISP_STEGO2 0x1F98
#define FTR_FOSSIL 0x1F9C
#define FTR_PIGGY_BANK 0x1FAC
#define FTR_TISSUE 0x1FB0
@@ -532,6 +549,49 @@ extern int mNT_check_unknown(mActor_name_t item_no);
#define ITM_LEAF_FAN 0x225B
#define ITM_TOOL_END (ITM_LEAF_FAN + 1)
#define ITM_FISH_START 0x2300
#define ITM_FISH00 (ITM_FISH_START + 0)
#define ITM_FISH01 (ITM_FISH_START + 1)
#define ITM_FISH02 (ITM_FISH_START + 2)
#define ITM_FISH03 (ITM_FISH_START + 3)
#define ITM_FISH04 (ITM_FISH_START + 4)
#define ITM_FISH05 (ITM_FISH_START + 5)
#define ITM_FISH06 (ITM_FISH_START + 6)
#define ITM_FISH07 (ITM_FISH_START + 7)
#define ITM_FISH08 (ITM_FISH_START + 8)
#define ITM_FISH09 (ITM_FISH_START + 9)
#define ITM_FISH10 (ITM_FISH_START + 10)
#define ITM_FISH11 (ITM_FISH_START + 11)
#define ITM_FISH12 (ITM_FISH_START + 12)
#define ITM_FISH13 (ITM_FISH_START + 13)
#define ITM_FISH14 (ITM_FISH_START + 14)
#define ITM_FISH15 (ITM_FISH_START + 15)
#define ITM_FISH16 (ITM_FISH_START + 16)
#define ITM_FISH17 (ITM_FISH_START + 17)
#define ITM_FISH18 (ITM_FISH_START + 18)
#define ITM_FISH19 (ITM_FISH_START + 19)
#define ITM_FISH20 (ITM_FISH_START + 20)
#define ITM_FISH21 (ITM_FISH_START + 21)
#define ITM_FISH22 (ITM_FISH_START + 22)
#define ITM_FISH23 (ITM_FISH_START + 23)
#define ITM_FISH24 (ITM_FISH_START + 24)
#define ITM_FISH25 (ITM_FISH_START + 25)
#define ITM_FISH26 (ITM_FISH_START + 26)
#define ITM_FISH27 (ITM_FISH_START + 27)
#define ITM_FISH28 (ITM_FISH_START + 28)
#define ITM_FISH29 (ITM_FISH_START + 29)
#define ITM_FISH30 (ITM_FISH_START + 30)
#define ITM_FISH31 (ITM_FISH_START + 31)
#define ITM_FISH32 (ITM_FISH_START + 32)
#define ITM_FISH33 (ITM_FISH_START + 33)
#define ITM_FISH34 (ITM_FISH_START + 34)
#define ITM_FISH35 (ITM_FISH_START + 35)
#define ITM_FISH36 (ITM_FISH_START + 36)
#define ITM_FISH37 (ITM_FISH_START + 37)
#define ITM_FISH38 (ITM_FISH_START + 38)
#define ITM_FISH39 (ITM_FISH_START + 39)
#define ITM_FISH_END (ITM_FISH_START + 40)
#define ITM_CLOTH_START 0x2400
#define ITM_CLOTH000 (ITM_CLOTH_START + 0)
#define ITM_CLOTH001 (ITM_CLOTH_START + 1)
@@ -879,6 +939,54 @@ extern int mNT_check_unknown(mActor_name_t item_no);
#define ITM_TICKET_START 0x2C00
#define ITM_INSECT_START 0x2D00
#define ITM_INSECT00 (ITM_INSECT_START + 0)
#define ITM_INSECT01 (ITM_INSECT_START + 1)
#define ITM_INSECT02 (ITM_INSECT_START + 2)
#define ITM_INSECT03 (ITM_INSECT_START + 3)
#define ITM_INSECT04 (ITM_INSECT_START + 4)
#define ITM_INSECT05 (ITM_INSECT_START + 5)
#define ITM_INSECT06 (ITM_INSECT_START + 6)
#define ITM_INSECT07 (ITM_INSECT_START + 7)
#define ITM_INSECT08 (ITM_INSECT_START + 8)
#define ITM_INSECT09 (ITM_INSECT_START + 9)
#define ITM_INSECT10 (ITM_INSECT_START + 10)
#define ITM_INSECT11 (ITM_INSECT_START + 11)
#define ITM_INSECT12 (ITM_INSECT_START + 12)
#define ITM_INSECT13 (ITM_INSECT_START + 13)
#define ITM_INSECT14 (ITM_INSECT_START + 14)
#define ITM_INSECT15 (ITM_INSECT_START + 15)
#define ITM_INSECT16 (ITM_INSECT_START + 16)
#define ITM_INSECT17 (ITM_INSECT_START + 17)
#define ITM_INSECT18 (ITM_INSECT_START + 18)
#define ITM_INSECT19 (ITM_INSECT_START + 19)
#define ITM_INSECT20 (ITM_INSECT_START + 20)
#define ITM_INSECT21 (ITM_INSECT_START + 21)
#define ITM_INSECT22 (ITM_INSECT_START + 22)
#define ITM_INSECT23 (ITM_INSECT_START + 23)
#define ITM_INSECT24 (ITM_INSECT_START + 24)
#define ITM_INSECT25 (ITM_INSECT_START + 25)
#define ITM_INSECT26 (ITM_INSECT_START + 26)
#define ITM_INSECT27 (ITM_INSECT_START + 27)
#define ITM_INSECT28 (ITM_INSECT_START + 28)
#define ITM_INSECT29 (ITM_INSECT_START + 29)
#define ITM_INSECT30 (ITM_INSECT_START + 30)
#define ITM_INSECT31 (ITM_INSECT_START + 31)
#define ITM_INSECT32 (ITM_INSECT_START + 32)
#define ITM_INSECT33 (ITM_INSECT_START + 33)
#define ITM_INSECT34 (ITM_INSECT_START + 34)
#define ITM_INSECT35 (ITM_INSECT_START + 35)
#define ITM_INSECT36 (ITM_INSECT_START + 36)
#define ITM_INSECT37 (ITM_INSECT_START + 37)
#define ITM_INSECT38 (ITM_INSECT_START + 38)
#define ITM_INSECT39 (ITM_INSECT_START + 39)
#define ITM_SPIRIT0 (ITM_INSECT_START + 40)
#define ITM_SPIRIT1 (ITM_INSECT_START + 41)
#define ITM_SPIRIT2 (ITM_INSECT_START + 42)
#define ITM_SPIRIT3 (ITM_INSECT_START + 43)
#define ITM_SPIRIT4 (ITM_INSECT_START + 44)
#define ITM_INSECT_END (ITM_INSECT_START + 45)
#define ITM_KABU_10 0x2F00
#define ITM_KABU_50 0x2F01
#define ITM_KABU_100 0x2F02
+12
View File
@@ -59,6 +59,15 @@ enum birth_type {
mRmTp_BIRTH_TYPE_NUM
};
enum {
mRmTp_DIRECT_SOUTH,
mRmTp_DIRECT_EAST,
mRmTp_DIRECT_NORTH,
mRmTp_DIRECT_WEST,
mRmTp_DIRECT_NUM
};
typedef struct room_type_place_info_one_s {
int exists;
int ut_x;
@@ -72,6 +81,9 @@ typedef struct room_type_place_info_s {
#define FTR_NUM 1266
#define FTR_GET_ROTATION(f) ((f) & 3)
#define FTR_IDX_2_NO(f) ((f) >> 2)
#define FTR_NO_2_IDX(f) ((f) << 2)
#define FTR_NO_ROT_2_IDX(f, rot) (FTR_NO_2_IDX(f) | ((rot) & 3))
// TEMPORARY. Should be generated with .decl files
#define ITEM0_NO_START 0x0000