mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-23 14:41:38 -04:00
Merge pull request #91 from Cuyler36/m_museum_display
Implement & link m_museum_display.c
This commit is contained in:
@@ -90,6 +90,9 @@ m_museum.c:
|
||||
.rodata: [0x80642938, 0x80642950]
|
||||
.data: [0x8065A280, 0x8065A308]
|
||||
.bss: [0x81298A00, 0x81298B40]
|
||||
m_museum_display.c:
|
||||
.text: [0x803C74C0, 0x803C8090]
|
||||
.data: [0x8065A308, 0x8065A3F8]
|
||||
m_mushroom.c:
|
||||
.text: [0x803C8090, 0x803C90A8]
|
||||
.rodata: [0x80642950, 0x80642960]
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,440 @@
|
||||
#include "m_museum_display.h"
|
||||
|
||||
#include "m_name_table.h"
|
||||
#include "m_room_type.h"
|
||||
#include "m_scene.h"
|
||||
#include "m_common_data.h"
|
||||
|
||||
extern int mMmd_FossilInfo(int fossil_no) {
|
||||
int valid = FALSE;
|
||||
|
||||
if (fossil_no >= 0 && fossil_no < mMmd_FOSSIL_NUM) {
|
||||
valid = TRUE;
|
||||
}
|
||||
|
||||
if (valid) {
|
||||
return mMmd_FOSSIL_BIT(Save_Get(museum_display), fossil_no);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern int mMmd_ArtInfo(int art_no) {
|
||||
int valid = FALSE;
|
||||
|
||||
if (art_no >= 0 && art_no < mMmd_ART_NUM) {
|
||||
valid = TRUE;
|
||||
}
|
||||
|
||||
if (valid) {
|
||||
return mMmd_ART_BIT(Save_Get(museum_display), art_no);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern int mMmd_InsectInfo(int insect_no) {
|
||||
int valid = FALSE;
|
||||
|
||||
if (insect_no >= 0 && insect_no < mMmd_INSECT_NUM) {
|
||||
valid = TRUE;
|
||||
}
|
||||
|
||||
if (valid) {
|
||||
return mMmd_INSECT_BIT(Save_Get(museum_display), insect_no);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern int mMmd_FishInfo(int fish_no) {
|
||||
int valid = FALSE;
|
||||
|
||||
if (fish_no >= 0 && fish_no < mMmd_FISH_NUM) {
|
||||
valid = TRUE;
|
||||
}
|
||||
|
||||
if (valid) {
|
||||
return mMmd_FISH_BIT(Save_Get(museum_display), fish_no);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern void mMmd_SetFossil(int fossil_no) {
|
||||
if (fossil_no >= 0 && fossil_no < mMmd_FOSSIL_NUM && mLd_PlayerManKindCheck() == FALSE) {
|
||||
mMmd_FOSSIL_CLR(Save_Get(museum_display), fossil_no);
|
||||
mMmd_FOSSIL_SET(Save_Get(museum_display), fossil_no, Common_Get(player_no) + 1);
|
||||
}
|
||||
}
|
||||
|
||||
extern void mMmd_SetArt(int art_no) {
|
||||
if (art_no >= 0 && art_no < mMmd_ART_NUM && mLd_PlayerManKindCheck() == FALSE) {
|
||||
mMmd_ART_CLR(Save_Get(museum_display), art_no);
|
||||
mMmd_ART_SET(Save_Get(museum_display), art_no, Common_Get(player_no) + 1);
|
||||
}
|
||||
}
|
||||
|
||||
extern void mMmd_SetInsect(int insect_no) {
|
||||
if (insect_no >= 0 && insect_no < mMmd_INSECT_NUM && mLd_PlayerManKindCheck() == FALSE) {
|
||||
mMmd_INSECT_CLR(Save_Get(museum_display), insect_no);
|
||||
mMmd_INSECT_SET(Save_Get(museum_display), insect_no, Common_Get(player_no) + 1);
|
||||
}
|
||||
}
|
||||
|
||||
extern void mMmd_SetFish(int fish_no) {
|
||||
if (fish_no >= 0 && fish_no < mMmd_FISH_NUM && mLd_PlayerManKindCheck() == FALSE) {
|
||||
mMmd_FISH_CLR(Save_Get(museum_display), fish_no);
|
||||
mMmd_FISH_SET(Save_Get(museum_display), fish_no, Common_Get(player_no) + 1);
|
||||
}
|
||||
}
|
||||
|
||||
extern mMmd_GetDisplayInfo(mActor_name_t item) {
|
||||
if (item >= FTR_DINO_TRICERA_SKULL && item <= FTR_DINO_TRILOBITE_WEST) {
|
||||
int fossil_idx;
|
||||
int valid = FALSE;
|
||||
|
||||
/* ??? why check this again */
|
||||
if (item >= FTR_DINO_TRICERA_SKULL && item <= FTR_DINO_TRILOBITE_WEST) {
|
||||
valid = TRUE;
|
||||
}
|
||||
|
||||
fossil_idx = valid != FALSE ? FTR_IDX_2_NO(item - FTR_DINO_TRICERA_SKULL) : 0;
|
||||
if (mMmd_FossilInfo(fossil_idx) >= mMmd_DONATOR_PLAYER1 && mMmd_FossilInfo(fossil_idx) <= mMmd_DONATOR_DELETED_PLAYER) {
|
||||
return mMmd_DISPLAY_ALREADY_DONATED;
|
||||
}
|
||||
else {
|
||||
return mMmd_DISPLAY_CAN_DONATE;
|
||||
}
|
||||
}
|
||||
else if (item >= FTR_PAINTING0 && item <= FTR_PAINTING14_WEST) {
|
||||
int painting_idx;
|
||||
int valid = FALSE;
|
||||
|
||||
/* ??? why check this again */
|
||||
if (item >= FTR_PAINTING0 && item <= FTR_PAINTING14_WEST) {
|
||||
valid = TRUE;
|
||||
}
|
||||
|
||||
painting_idx = valid != FALSE ? FTR_IDX_2_NO(item - FTR_PAINTING0) : 0;
|
||||
if (mMmd_ArtInfo(painting_idx) >= mMmd_DONATOR_PLAYER1 && mMmd_ArtInfo(painting_idx) <= mMmd_DONATOR_DELETED_PLAYER) {
|
||||
return mMmd_DISPLAY_ALREADY_DONATED;
|
||||
}
|
||||
else {
|
||||
return mMmd_DISPLAY_CAN_DONATE;
|
||||
}
|
||||
}
|
||||
else if (item >= ITM_INSECT00 && item < ITM_SPIRIT0) {
|
||||
int insect_idx;
|
||||
int valid = FALSE;
|
||||
|
||||
/* ??? why check this again */
|
||||
if (item >= ITM_INSECT00 && item < ITM_SPIRIT0) {
|
||||
valid = TRUE;
|
||||
}
|
||||
|
||||
insect_idx = valid != FALSE ? item - ITM_INSECT_START : 0;
|
||||
if (mMmd_InsectInfo(insect_idx) >= mMmd_DONATOR_PLAYER1 && mMmd_InsectInfo(insect_idx) <= mMmd_DONATOR_DELETED_PLAYER) {
|
||||
return mMmd_DISPLAY_ALREADY_DONATED;
|
||||
}
|
||||
else {
|
||||
return mMmd_DISPLAY_CAN_DONATE;
|
||||
}
|
||||
}
|
||||
else if (item >= ITM_FISH00 && item <= ITM_FISH_END) {
|
||||
int fish_idx;
|
||||
int valid = FALSE;
|
||||
|
||||
/* ??? why check this again */
|
||||
if (item >= ITM_FISH00 && item <= ITM_FISH_END) {
|
||||
valid = TRUE;
|
||||
}
|
||||
|
||||
fish_idx = valid != FALSE ? item - ITM_FISH_START : 0;
|
||||
if (mMmd_FishInfo(fish_idx) >= mMmd_DONATOR_PLAYER1 && mMmd_FishInfo(fish_idx) <= mMmd_DONATOR_DELETED_PLAYER) {
|
||||
return mMmd_DISPLAY_ALREADY_DONATED;
|
||||
}
|
||||
else {
|
||||
return mMmd_DISPLAY_CAN_DONATE;
|
||||
}
|
||||
}
|
||||
|
||||
return mMmd_DISPLAY_CANNOT_DONATE;
|
||||
}
|
||||
|
||||
extern int mMmd_RequestMuseumDisplay(mActor_name_t item) {
|
||||
if (mLd_PlayerManKindCheck() == FALSE) {
|
||||
if (item >= FTR_DINO_TRICERA_SKULL && item <= FTR_DINO_TRILOBITE_WEST) {
|
||||
int fossil_idx;
|
||||
int valid = FALSE;
|
||||
|
||||
/* ??? why check this again */
|
||||
if (item >= FTR_DINO_TRICERA_SKULL && item <= FTR_DINO_TRILOBITE_WEST) {
|
||||
valid = TRUE;
|
||||
}
|
||||
|
||||
fossil_idx = valid != FALSE ? FTR_IDX_2_NO(item - FTR_DINO_TRICERA_SKULL) : 0;
|
||||
if (mMmd_FossilInfo(fossil_idx) < mMmd_DONATOR_PLAYER1 || mMmd_FossilInfo(fossil_idx) > mMmd_DONATOR_DELETED_PLAYER) {
|
||||
mMmd_SetFossil(fossil_idx);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
else if (item >= FTR_PAINTING0 && item <= FTR_PAINTING14_WEST) {
|
||||
int painting_idx;
|
||||
int valid = FALSE;
|
||||
|
||||
/* ??? why check this again */
|
||||
if (item >= FTR_PAINTING0 && item <= FTR_PAINTING14_WEST) {
|
||||
valid = TRUE;
|
||||
}
|
||||
|
||||
painting_idx = valid != FALSE ? FTR_IDX_2_NO(item - FTR_PAINTING0) : 0;
|
||||
if (mMmd_ArtInfo(painting_idx) < mMmd_DONATOR_PLAYER1 || mMmd_ArtInfo(painting_idx) > mMmd_DONATOR_DELETED_PLAYER) {
|
||||
mMmd_SetArt(painting_idx);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
else if (item >= ITM_INSECT00 && item < ITM_SPIRIT0) {
|
||||
int insect_idx;
|
||||
int valid = FALSE;
|
||||
|
||||
/* ??? why check this again */
|
||||
if (item >= ITM_INSECT00 && item < ITM_SPIRIT0) {
|
||||
valid = TRUE;
|
||||
}
|
||||
|
||||
insect_idx = valid != FALSE ? item - ITM_INSECT_START : 0;
|
||||
if (mMmd_InsectInfo(insect_idx) < mMmd_DONATOR_PLAYER1 || mMmd_InsectInfo(insect_idx) > mMmd_DONATOR_DELETED_PLAYER) {
|
||||
mMmd_SetInsect(insect_idx);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
else if (item >= ITM_FISH00 && item <= ITM_FISH_END) {
|
||||
int fish_idx;
|
||||
int valid = FALSE;
|
||||
|
||||
/* ??? why check this again */
|
||||
if (item >= ITM_FISH00 && item <= ITM_FISH_END) {
|
||||
valid = TRUE;
|
||||
}
|
||||
|
||||
fish_idx = valid != FALSE ? item - ITM_FISH_START : 0;
|
||||
if (mMmd_FishInfo(fish_idx) < mMmd_DONATOR_PLAYER1 || mMmd_FishInfo(fish_idx) > mMmd_DONATOR_DELETED_PLAYER) {
|
||||
mMmd_SetFish(fish_idx);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
typedef struct museum_display_fossil_data_s {
|
||||
u8 ut;
|
||||
mActor_name_t item;
|
||||
int rotation;
|
||||
} mMmd_fossil_data_c;
|
||||
|
||||
#define mMmd_UT(x, z) ((((z) & 0xF) << 4) | ((x) & 0xF))
|
||||
|
||||
static mMmd_fossil_data_c mMmd_museum_fossil_data[mMmd_FOSSIL_NUM] = {
|
||||
{ mMmd_UT(5, 2), FTR_DINO_DISP_TRICERA, mRmTp_DIRECT_NORTH }, /* tricera skull */
|
||||
{ mMmd_UT(1, 2), FTR_DINO_DISP_TRICERA, mRmTp_DIRECT_NORTH }, /* tricera tail */
|
||||
{ mMmd_UT(3, 2), FTR_DINO_DISP_TRICERA, mRmTp_DIRECT_NORTH }, /* tricera torso */
|
||||
|
||||
{ mMmd_UT(9, 2), FTR_DINO_DISP_TREX, mRmTp_DIRECT_SOUTH }, /* T-rex skull */
|
||||
{ mMmd_UT(13, 2), FTR_DINO_DISP_TREX, mRmTp_DIRECT_SOUTH }, /* T-rex tail */
|
||||
{ mMmd_UT(11, 2), FTR_DINO_DISP_TREX, mRmTp_DIRECT_SOUTH }, /* T-rex torso */
|
||||
|
||||
{ mMmd_UT(5, 10), FTR_DINO_DISP_BRONTO, mRmTp_DIRECT_NORTH }, /* apato skull */
|
||||
{ mMmd_UT(1, 10), FTR_DINO_DISP_BRONTO, mRmTp_DIRECT_NORTH }, /* apato tail */
|
||||
{ mMmd_UT(3, 10), FTR_DINO_DISP_BRONTO, mRmTp_DIRECT_NORTH }, /* apato torso */
|
||||
|
||||
{ mMmd_UT(10, 6), FTR_DINO_DISP_STEGO, mRmTp_DIRECT_EAST }, /* stego skull */
|
||||
{ mMmd_UT(13, 5), FTR_DINO_DISP_STEGO2, mRmTp_DIRECT_SOUTH }, /* stego tail */
|
||||
{ mMmd_UT(11, 5), FTR_DINO_DISP_STEGO2, mRmTp_DIRECT_SOUTH }, /* stego torso */
|
||||
|
||||
{ mMmd_UT(6, 6), FTR_DINO_DISP_PTERA, mRmTp_DIRECT_SOUTH }, /* ptera skull */
|
||||
{ mMmd_UT(6, 5), FTR_DINO_DISP_PTERA, mRmTp_DIRECT_SOUTH }, /* ptera right wing */
|
||||
{ mMmd_UT(6, 7), FTR_DINO_DISP_PTERA, mRmTp_DIRECT_SOUTH }, /* ptera left wing */
|
||||
|
||||
{ mMmd_UT(9, 10), FTR_DINO_DISP_PLESIO, mRmTp_DIRECT_SOUTH }, /* plesio skull */
|
||||
{ mMmd_UT(11, 10), FTR_DINO_DISP_PLESIO, mRmTp_DIRECT_SOUTH }, /* plesio neck */
|
||||
{ mMmd_UT(13, 10), FTR_DINO_DISP_PLESIO, mRmTp_DIRECT_SOUTH }, /* plesio torso */
|
||||
|
||||
{ mMmd_UT(2, 7), FTR_DINO_DISP_MAMMOTH, mRmTp_DIRECT_EAST }, /* mammoth skull */
|
||||
{ mMmd_UT(2, 5), FTR_DINO_DISP_MAMMOTH, mRmTp_DIRECT_EAST }, /* mammoth torso */
|
||||
|
||||
{ mMmd_UT(6, 8), FTR_FOSSIL, mRmTp_DIRECT_SOUTH }, /* amber */
|
||||
{ mMmd_UT(7, 8), FTR_FOSSIL, mRmTp_DIRECT_SOUTH }, /* dinosaur track */
|
||||
{ mMmd_UT(8, 8), FTR_FOSSIL, mRmTp_DIRECT_SOUTH }, /* ammonite */
|
||||
{ mMmd_UT(9, 8), FTR_FOSSIL, mRmTp_DIRECT_SOUTH }, /* dinosaur egg */
|
||||
{ mMmd_UT(10, 8), FTR_FOSSIL, mRmTp_DIRECT_SOUTH } /* trilobite */
|
||||
};
|
||||
|
||||
static void mMmd_MuseumFossilProcess_MakeFgData() {
|
||||
mMmd_fossil_data_c* fossil_data = mMmd_museum_fossil_data;
|
||||
mActor_name_t* fossil_fg = mFI_BkNumtoUtFGTop(0, 0);
|
||||
int fossil_ut;
|
||||
int rotation;
|
||||
int fossil_idx;
|
||||
int item;
|
||||
|
||||
if (fossil_fg != NULL) {
|
||||
for (fossil_idx = 0; fossil_idx < mMmd_FOSSIL_NUM; fossil_idx++) {
|
||||
rotation = fossil_data[fossil_idx].rotation & 3;
|
||||
fossil_ut = fossil_data[fossil_idx].ut;
|
||||
|
||||
if (mMmd_FossilInfo(fossil_idx)) {
|
||||
int valid = FALSE;
|
||||
|
||||
if (fossil_idx >= 0 && fossil_idx < mMmd_FOSSIL_NUM) {
|
||||
valid = TRUE;
|
||||
}
|
||||
|
||||
/* TODO: this might be a fake match */
|
||||
item = FTR_DINO_TRICERA_SKULL;
|
||||
if (valid) {
|
||||
mActor_name_t fossil_ftr_idx = FTR_DINO_TRICERA_SKULL + (mActor_name_t)FTR_NO_2_IDX(fossil_idx);
|
||||
item = fossil_ftr_idx;
|
||||
}
|
||||
//item = (valid != FALSE ? (mActor_name_t)(FTR_DINO_TRICERA_SKULL + (mActor_name_t)FTR_NO_2_IDX(fossil_idx)) : FTR_DINO_TRICERA_SKULL);
|
||||
fossil_fg[fossil_ut] = (mActor_name_t)item + rotation;
|
||||
}
|
||||
else {
|
||||
fossil_fg[fossil_ut] = fossil_data[fossil_idx].item + rotation;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void mMmd_dummy_process() { }
|
||||
|
||||
typedef void (*mMmd_DISPLAY_PROC)();
|
||||
|
||||
typedef struct museum_display_scene_process_s {
|
||||
int scene_no;
|
||||
mMmd_DISPLAY_PROC display_proc;
|
||||
} mMmd_scene_process_c;
|
||||
|
||||
static mMmd_scene_process_c mMmd_scene_process_data[mMmd_CATEGORY_NUM + 1] = {
|
||||
{ SCENE_MUSEUM_ROOM_PAINTING, &mMmd_dummy_process },
|
||||
{ SCENE_MUSEUM_ROOM_FOSSIL, &mMmd_MuseumFossilProcess_MakeFgData },
|
||||
{ SCENE_MUSEUM_ROOM_INSECT, &mMmd_dummy_process },
|
||||
{ SCENE_MUSEUM_ROOM_FISH, &mMmd_dummy_process },
|
||||
{ -1, NULL }
|
||||
};
|
||||
|
||||
extern void mMmd_MakeMuseumDisplayData() {
|
||||
int scene_no = Save_Get(scene_no);
|
||||
int i = 0;
|
||||
|
||||
while (mMmd_scene_process_data[i].scene_no != -1) {
|
||||
if (scene_no == mMmd_scene_process_data[i].scene_no) {
|
||||
(*mMmd_scene_process_data[i].display_proc)();
|
||||
break;
|
||||
}
|
||||
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
extern void mMmd_DeletePresentedByPlayer(u8 player_no) {
|
||||
int search_no = player_no + 1;
|
||||
|
||||
if (player_no < PLAYER_NUM) {
|
||||
int i;
|
||||
|
||||
for (i = 0; i < mMmd_ART_NUM; i++) {
|
||||
int donator = mMmd_ArtInfo(i);
|
||||
if (donator == search_no) {
|
||||
mMmd_ART_CLR(Save_Get(museum_display), i);
|
||||
mMmd_ART_SET(Save_Get(museum_display), i, mMmd_DONATOR_DELETED_PLAYER);
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < mMmd_FOSSIL_NUM; i++) {
|
||||
int donator = mMmd_FossilInfo(i);
|
||||
if (donator == search_no) {
|
||||
mMmd_FOSSIL_CLR(Save_Get(museum_display), i);
|
||||
mMmd_FOSSIL_SET(Save_Get(museum_display), i, mMmd_DONATOR_DELETED_PLAYER);
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < mMmd_INSECT_NUM; i++) {
|
||||
int donator = mMmd_InsectInfo(i);
|
||||
if (donator == search_no) {
|
||||
mMmd_INSECT_CLR(Save_Get(museum_display), i);
|
||||
mMmd_INSECT_SET(Save_Get(museum_display), i, mMmd_DONATOR_DELETED_PLAYER);
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < mMmd_FISH_NUM; i++) {
|
||||
int donator = mMmd_FishInfo(i);
|
||||
if (donator == search_no) {
|
||||
mMmd_FISH_CLR(Save_Get(museum_display), i);
|
||||
mMmd_FISH_SET(Save_Get(museum_display), i, mMmd_DONATOR_DELETED_PLAYER);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extern int mMmd_CountDisplayedFossil() {
|
||||
int i;
|
||||
int displayed = 0;
|
||||
|
||||
for (i = 0; i < mMmd_FOSSIL_NUM; i++) {
|
||||
int donator = mMmd_FossilInfo(i);
|
||||
|
||||
if (donator >= mMmd_DONATOR_PLAYER1 && donator <= mMmd_DONATOR_DELETED_PLAYER) {
|
||||
displayed++;
|
||||
}
|
||||
}
|
||||
|
||||
return displayed;
|
||||
}
|
||||
|
||||
extern int mMmd_CountDisplayedArt() {
|
||||
int i;
|
||||
int displayed = 0;
|
||||
|
||||
for (i = 0; i < mMmd_ART_NUM; i++) {
|
||||
int donator = mMmd_ArtInfo(i);
|
||||
|
||||
if (donator >= mMmd_DONATOR_PLAYER1 && donator <= mMmd_DONATOR_DELETED_PLAYER) {
|
||||
displayed++;
|
||||
}
|
||||
}
|
||||
|
||||
return displayed;
|
||||
}
|
||||
|
||||
extern int mMmd_CountDisplayedInsect() {
|
||||
int i;
|
||||
int displayed = 0;
|
||||
|
||||
for (i = 0; i < mMmd_INSECT_NUM; i++) {
|
||||
int donator = mMmd_InsectInfo(i);
|
||||
|
||||
if (donator >= mMmd_DONATOR_PLAYER1 && donator <= mMmd_DONATOR_DELETED_PLAYER) {
|
||||
displayed++;
|
||||
}
|
||||
}
|
||||
|
||||
return displayed;
|
||||
}
|
||||
|
||||
extern int mMmd_CountDisplayedFish() {
|
||||
int i;
|
||||
int displayed = 0;
|
||||
|
||||
for (i = 0; i < mMmd_FISH_NUM; i++) {
|
||||
int donator = mMmd_FishInfo(i);
|
||||
|
||||
if (donator >= mMmd_DONATOR_PLAYER1 && donator <= mMmd_DONATOR_DELETED_PLAYER) {
|
||||
displayed++;
|
||||
}
|
||||
}
|
||||
|
||||
return displayed;
|
||||
}
|
||||
Reference in New Issue
Block a user