mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-23 06:34:18 -04:00
Merge pull request #262 from Cuyler36:ac_museum_fossil
Implement & link ac_museum_fossil
This commit is contained in:
@@ -426,6 +426,11 @@ ac_haniwa.c:
|
||||
.text: [0x80427624, 0x80428F64]
|
||||
.rodata: [0x806440B8, 0x806440F8]
|
||||
.data: [0x80683D08, 0x80683E98]
|
||||
ac_museum_fossil.c:
|
||||
.text: [0x8042EDC0, 0x8042F170]
|
||||
.rodata: [0x806442A0, 0x806442D0]
|
||||
.data: [0x80684D48, 0x80684E38]
|
||||
.bss: [0x812FBE60, 0x812FBE70]
|
||||
ac_museum_picture.c:
|
||||
.text: [0x8042F170, 0x8042F7FC]
|
||||
.rodata: [0x806442D0, 0x80644330]
|
||||
|
||||
@@ -8,6 +8,12 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct museum_fossil_actor_s {
|
||||
ACTOR actor_class;
|
||||
s16 target_angle;
|
||||
int msg_no;
|
||||
} MUSEUM_FOSSIL_ACTOR;
|
||||
|
||||
extern ACTOR_PROFILE Museum_Fossil_Profile;
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -15,4 +21,3 @@ extern ACTOR_PROFILE Museum_Fossil_Profile;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
+95
-95
@@ -9,95 +9,95 @@
|
||||
#define mRmTp_FTR_UNIT_MAX 4
|
||||
|
||||
enum {
|
||||
mRmTp_FTRSIZE_1x1, /* x */
|
||||
mRmTp_FTRSIZE_1x2, /* yy OR y */
|
||||
/* y */
|
||||
mRmTp_FTRSIZE_2x2, /* zz */
|
||||
/* zz */
|
||||
mRmTp_FTRSIZE_NUM
|
||||
mRmTp_FTRSIZE_1x1, /* x */
|
||||
mRmTp_FTRSIZE_1x2, /* yy OR y */
|
||||
/* y */
|
||||
mRmTp_FTRSIZE_2x2, /* zz */
|
||||
/* zz */
|
||||
mRmTp_FTRSIZE_NUM
|
||||
};
|
||||
|
||||
enum birth_type {
|
||||
mRmTp_BIRTH_TYPE_GRP_A = 0,
|
||||
mRmTp_BIRTH_TYPE_GRP_B = 1,
|
||||
mRmTp_BIRTH_TYPE_GRP_C = 2,
|
||||
mRmTp_BIRTH_TYPE_EVENT = 3,
|
||||
mRmTp_BIRTH_TYPE_BIRTHDAY = 4,
|
||||
mRmTp_BIRTH_TYPE_HALLOWEEN = 5,
|
||||
mRmTp_BIRTH_TYPE_HANIWA = 6,
|
||||
mRmTp_BIRTH_TYPE_LOTTERY = 7,
|
||||
mRmTp_BIRTH_TYPE_FTR_CLOTH = 8,
|
||||
mRmTp_BIRTH_TYPE_FTR_UMBRELLA = 9,
|
||||
mRmTp_BIRTH_TYPE_FTR_INSECT = 10,
|
||||
mRmTp_BIRTH_TYPE_FTR_FISH = 11,
|
||||
mRmTp_BIRTH_TYPE_SINGLE_FOSSIL = 12,
|
||||
mRmTp_BIRTH_TYPE_MULTI_FOSSIL = 13,
|
||||
mRmTp_BIRTH_TYPE_XMAS = 14,
|
||||
mRmTp_BIRTH_TYPE_SANTA = 15,
|
||||
mRmTp_BIRTH_TYPE_UNOBTAINABLE = 16,
|
||||
mRmTp_BIRTH_TYPE_SNOWMAN = 17,
|
||||
mRmTp_BIRTH_TYPE_HALLOWEEN_TRICK = 18,
|
||||
mRmTp_BIRTH_TYPE_POST_OFFICE = 19,
|
||||
mRmTp_BIRTH_TYPE_MARK_ROOM = 20,
|
||||
mRmTp_BIRTH_TYPE_SONCHO = 21,
|
||||
mRmTp_BIRTH_TYPE_JONASON = 22,
|
||||
mRmTp_BIRTH_TYPE_UNUSED_23 = 23,
|
||||
mRmTp_BIRTH_TYPE_FAMICOM_EREADER = 24,
|
||||
mRmTp_BIRTH_TYPE_ISLAND = 25,
|
||||
mRmTp_BIRTH_TYPE_FAMICOM_ISLAND = 26,
|
||||
mRmTp_BIRTH_TYPE_MY_ORIGINAL = 27,
|
||||
mRmTp_BIRTH_TYPE_FAMICOM_CODE = 28,
|
||||
mRmTp_BIRTH_TYPE_MUSEUM = 29,
|
||||
mRmTp_BIRTH_TYPE_SONCHO_LIGHTHOUSE_QUEST = 30,
|
||||
mRmTp_BIRTH_TYPE_FTR_DIARY = 31,
|
||||
mRmTp_BIRTH_TYPE_GROUNDHOG = 32,
|
||||
mRmTp_BIRTH_TYPE_KAMAKURA = 33,
|
||||
mRmTp_BIRTH_TYPE_NINTENDO_CODE = 34,
|
||||
mRmTp_BIRTH_TYPE_HARVEST_FESTIVAL = 35,
|
||||
mRmTp_BIRTH_TYPE_UNUSED_36 = 36,
|
||||
mRmTp_BIRTH_TYPE_SUMMER_CAMPER = 37,
|
||||
mRmTp_BIRTH_TYPE_GRP_A = 0,
|
||||
mRmTp_BIRTH_TYPE_GRP_B = 1,
|
||||
mRmTp_BIRTH_TYPE_GRP_C = 2,
|
||||
mRmTp_BIRTH_TYPE_EVENT = 3,
|
||||
mRmTp_BIRTH_TYPE_BIRTHDAY = 4,
|
||||
mRmTp_BIRTH_TYPE_HALLOWEEN = 5,
|
||||
mRmTp_BIRTH_TYPE_HANIWA = 6,
|
||||
mRmTp_BIRTH_TYPE_LOTTERY = 7,
|
||||
mRmTp_BIRTH_TYPE_FTR_CLOTH = 8,
|
||||
mRmTp_BIRTH_TYPE_FTR_UMBRELLA = 9,
|
||||
mRmTp_BIRTH_TYPE_FTR_INSECT = 10,
|
||||
mRmTp_BIRTH_TYPE_FTR_FISH = 11,
|
||||
mRmTp_BIRTH_TYPE_SINGLE_FOSSIL = 12,
|
||||
mRmTp_BIRTH_TYPE_MULTI_FOSSIL = 13,
|
||||
mRmTp_BIRTH_TYPE_XMAS = 14,
|
||||
mRmTp_BIRTH_TYPE_SANTA = 15,
|
||||
mRmTp_BIRTH_TYPE_UNOBTAINABLE = 16,
|
||||
mRmTp_BIRTH_TYPE_SNOWMAN = 17,
|
||||
mRmTp_BIRTH_TYPE_HALLOWEEN_TRICK = 18,
|
||||
mRmTp_BIRTH_TYPE_POST_OFFICE = 19,
|
||||
mRmTp_BIRTH_TYPE_MARK_ROOM = 20,
|
||||
mRmTp_BIRTH_TYPE_SONCHO = 21,
|
||||
mRmTp_BIRTH_TYPE_JONASON = 22,
|
||||
mRmTp_BIRTH_TYPE_UNUSED_23 = 23,
|
||||
mRmTp_BIRTH_TYPE_FAMICOM_EREADER = 24,
|
||||
mRmTp_BIRTH_TYPE_ISLAND = 25,
|
||||
mRmTp_BIRTH_TYPE_FAMICOM_ISLAND = 26,
|
||||
mRmTp_BIRTH_TYPE_MY_ORIGINAL = 27,
|
||||
mRmTp_BIRTH_TYPE_FAMICOM_CODE = 28,
|
||||
mRmTp_BIRTH_TYPE_MUSEUM = 29,
|
||||
mRmTp_BIRTH_TYPE_SONCHO_LIGHTHOUSE_QUEST = 30,
|
||||
mRmTp_BIRTH_TYPE_FTR_DIARY = 31,
|
||||
mRmTp_BIRTH_TYPE_GROUNDHOG = 32,
|
||||
mRmTp_BIRTH_TYPE_KAMAKURA = 33,
|
||||
mRmTp_BIRTH_TYPE_NINTENDO_CODE = 34,
|
||||
mRmTp_BIRTH_TYPE_HARVEST_FESTIVAL = 35,
|
||||
mRmTp_BIRTH_TYPE_UNUSED_36 = 36,
|
||||
mRmTp_BIRTH_TYPE_SUMMER_CAMPER = 37,
|
||||
|
||||
mRmTp_BIRTH_TYPE_NUM
|
||||
mRmTp_BIRTH_TYPE_NUM
|
||||
};
|
||||
|
||||
enum {
|
||||
mRmTp_DIRECT_SOUTH,
|
||||
mRmTp_DIRECT_EAST,
|
||||
mRmTp_DIRECT_NORTH,
|
||||
mRmTp_DIRECT_WEST,
|
||||
mRmTp_DIRECT_SOUTH,
|
||||
mRmTp_DIRECT_EAST,
|
||||
mRmTp_DIRECT_NORTH,
|
||||
mRmTp_DIRECT_WEST,
|
||||
|
||||
mRmTp_DIRECT_NUM
|
||||
mRmTp_DIRECT_NUM
|
||||
};
|
||||
|
||||
enum {
|
||||
mRmTp_FTR_SE_NONE,
|
||||
mRmTp_FTR_SE_SOFT_CHAIR,
|
||||
mRmTp_FTR_SE_HARD_CHAIR,
|
||||
mRmTp_FTR_SE_BUBU_CHAIR,
|
||||
mRmTp_FTR_SE_TOILET_CHAIR,
|
||||
mRmTp_FTR_SE_NONE,
|
||||
mRmTp_FTR_SE_SOFT_CHAIR,
|
||||
mRmTp_FTR_SE_HARD_CHAIR,
|
||||
mRmTp_FTR_SE_BUBU_CHAIR,
|
||||
mRmTp_FTR_SE_TOILET_CHAIR,
|
||||
|
||||
mRmTp_FTR_SE_NUM
|
||||
mRmTp_FTR_SE_NUM
|
||||
};
|
||||
|
||||
enum {
|
||||
mRmTp_CHAIR_ACTION_SIT,
|
||||
mRmTp_CHAIR_ACTION_STAND,
|
||||
mRmTp_CHAIR_ACTION_SIT,
|
||||
mRmTp_CHAIR_ACTION_STAND,
|
||||
|
||||
mRmTp_CHAIR_ACTION_NUM
|
||||
mRmTp_CHAIR_ACTION_NUM
|
||||
};
|
||||
|
||||
typedef struct room_type_place_info_one_s {
|
||||
int exists;
|
||||
int ut_x;
|
||||
int ut_z;
|
||||
int exists;
|
||||
int ut_x;
|
||||
int ut_z;
|
||||
} mRmTp_FtrPlaceInfoOne_t;
|
||||
|
||||
#define FTR_NUM 1266
|
||||
|
||||
#define FTR_GET_ROTATION(f) ((f) & 3)
|
||||
#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))
|
||||
#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
|
||||
@@ -106,41 +106,41 @@ typedef struct room_type_place_info_one_s {
|
||||
#define FTR0_NO_START 0x1000
|
||||
|
||||
#define ITEM1_NO_START 0x2000
|
||||
#define ITEM1_0_NO_START ITEM0_1_NO_START // paper
|
||||
#define ITEM1_1_NO_START ITEM1_NO_START + 0x100 // money
|
||||
#define ITEM1_2_NO_START ITEM1_NO_START + 0x200 // tools
|
||||
#define ITEM1_3_NO_START ITEM1_NO_START + 0x300 // fish
|
||||
#define ITEM1_4_NO_START ITEM1_NO_START + 0x400 // clothing
|
||||
#define ITEM1_5_NO_START ITEM1_NO_START + 0x500 // etc
|
||||
#define ITEM1_6_NO_START ITEM1_NO_START + 0x600 // carpets
|
||||
#define ITEM1_7_NO_START ITEM1_NO_START + 0x700 // wallpaper
|
||||
#define ITEM1_8_NO_START ITEM1_NO_START + 0x800 // food
|
||||
#define ITEM1_9_NO_START ITEM1_NO_START + 0x900 // seeds
|
||||
#define ITEM1_A_NO_START ITEM1_NO_START + 0xA00 // mini disks
|
||||
#define ITEM1_B_NO_START ITEM1_NO_START + 0xB00 // diaries
|
||||
#define ITEM1_C_NO_START ITEM1_NO_START + 0xC00 // tickets
|
||||
#define ITEM1_D_NO_START ITEM1_NO_START + 0xD00 // insects
|
||||
#define ITEM1_E_NO_START ITEM1_NO_START + 0xE00 // hukubukuro
|
||||
#define ITEM1_F_NO_START ITEM1_NO_START + 0xF00 // kabu
|
||||
#define ITEM1_0_NO_START ITEM0_1_NO_START // paper
|
||||
#define ITEM1_1_NO_START ITEM1_NO_START + 0x100 // money
|
||||
#define ITEM1_2_NO_START ITEM1_NO_START + 0x200 // tools
|
||||
#define ITEM1_3_NO_START ITEM1_NO_START + 0x300 // fish
|
||||
#define ITEM1_4_NO_START ITEM1_NO_START + 0x400 // clothing
|
||||
#define ITEM1_5_NO_START ITEM1_NO_START + 0x500 // etc
|
||||
#define ITEM1_6_NO_START ITEM1_NO_START + 0x600 // carpets
|
||||
#define ITEM1_7_NO_START ITEM1_NO_START + 0x700 // wallpaper
|
||||
#define ITEM1_8_NO_START ITEM1_NO_START + 0x800 // food
|
||||
#define ITEM1_9_NO_START ITEM1_NO_START + 0x900 // seeds
|
||||
#define ITEM1_A_NO_START ITEM1_NO_START + 0xA00 // mini disks
|
||||
#define ITEM1_B_NO_START ITEM1_NO_START + 0xB00 // diaries
|
||||
#define ITEM1_C_NO_START ITEM1_NO_START + 0xC00 // tickets
|
||||
#define ITEM1_D_NO_START ITEM1_NO_START + 0xD00 // insects
|
||||
#define ITEM1_E_NO_START ITEM1_NO_START + 0xE00 // hukubukuro
|
||||
#define ITEM1_F_NO_START ITEM1_NO_START + 0xF00 // kabu
|
||||
|
||||
#define FTR1_NO_START 0x3000
|
||||
|
||||
enum {
|
||||
mRmTp_LIGHT_SWITCH_HOUSE0_MAIN_UPPER,
|
||||
mRmTp_LIGHT_SWITCH_HOUSE0_BASEMENT,
|
||||
mRmTp_LIGHT_SWITCH_HOUSE1_MAIN_UPPER,
|
||||
mRmTp_LIGHT_SWITCH_HOUSE1_BASEMENT,
|
||||
mRmTp_LIGHT_SWITCH_HOUSE2_MAIN_UPPER,
|
||||
mRmTp_LIGHT_SWITCH_HOUSE2_BASEMENT,
|
||||
mRmTp_LIGHT_SWITCH_HOUSE3_MAIN_UPPER,
|
||||
mRmTp_LIGHT_SWITCH_HOUSE3_BASEMENT,
|
||||
mRmTp_LIGHT_SWITCH_COTTAGE_MY,
|
||||
mRmTp_LIGHT_SWITCH_9,
|
||||
mRmTp_LIGHT_SWITCH_NPC,
|
||||
mRmTp_LIGHT_SWITCH_LIGHTHOUSE,
|
||||
mRmTp_LIGHT_SWITCH_TENT,
|
||||
mRmTp_LIGHT_SWITCH_HOUSE0_MAIN_UPPER,
|
||||
mRmTp_LIGHT_SWITCH_HOUSE0_BASEMENT,
|
||||
mRmTp_LIGHT_SWITCH_HOUSE1_MAIN_UPPER,
|
||||
mRmTp_LIGHT_SWITCH_HOUSE1_BASEMENT,
|
||||
mRmTp_LIGHT_SWITCH_HOUSE2_MAIN_UPPER,
|
||||
mRmTp_LIGHT_SWITCH_HOUSE2_BASEMENT,
|
||||
mRmTp_LIGHT_SWITCH_HOUSE3_MAIN_UPPER,
|
||||
mRmTp_LIGHT_SWITCH_HOUSE3_BASEMENT,
|
||||
mRmTp_LIGHT_SWITCH_COTTAGE_MY,
|
||||
mRmTp_LIGHT_SWITCH_9,
|
||||
mRmTp_LIGHT_SWITCH_NPC,
|
||||
mRmTp_LIGHT_SWITCH_LIGHTHOUSE,
|
||||
mRmTp_LIGHT_SWITCH_TENT,
|
||||
|
||||
mRmTp_LIGHT_SWITCH_NUM
|
||||
mRmTp_LIGHT_SWITCH_NUM
|
||||
};
|
||||
|
||||
extern int mRmTp_ItemNo2FtrSize(mActor_name_t item_no);
|
||||
@@ -160,7 +160,7 @@ extern mActor_name_t mRmTp_GetPlayerRoomCollisionIdx(mActor_name_t field_id, mAc
|
||||
extern int mRmTp_FurnitureIdx2FurnitureKind(int ftr_idx);
|
||||
extern void mRmTp_CopyWallData(u8* dst, int wall_no);
|
||||
extern void mRmTp_CopyFloorData(u8* dst, int floor_no);
|
||||
extern int mRmTp_CheckTalkAble(s16* rot, xyz_t* pos, f32 max_dist, int required_dir, GAME_PLAY* play);
|
||||
extern int mRmTp_CheckTalkAble(s16* rot, xyz_t* pos, int required_dir, f32 max_dist, GAME_PLAY* play);
|
||||
extern int mRmTp_CheckWallIsMyOriginalInThisScene();
|
||||
extern int mRmTp_CheckFloorIsMyOriginalInThisScene();
|
||||
extern int mRmTp_GetEntranceBasePosition(xyz_t* pos);
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
#include "ac_museum_fossil.h"
|
||||
|
||||
#include "m_camera2.h"
|
||||
#include "m_demo.h"
|
||||
#include "m_name_table.h"
|
||||
#include "m_museum_display.h"
|
||||
#include "m_name_table.h"
|
||||
#include "sys_matrix.h"
|
||||
#include "m_player_lib.h"
|
||||
#include "m_room_type.h"
|
||||
#include "m_msg.h"
|
||||
#include "m_common_data.h"
|
||||
|
||||
typedef struct {
|
||||
s16 x;
|
||||
s16 z;
|
||||
} aMF_pos_c;
|
||||
|
||||
typedef struct {
|
||||
aMF_pos_c pos;
|
||||
int direct;
|
||||
} aMF_fossil_data_c;
|
||||
|
||||
static void Museum_Fossil_Actor_ct(ACTOR* actorx, GAME* game);
|
||||
static void Museum_Fossil_Actor_dt(ACTOR* actorx, GAME* game);
|
||||
static void Museum_Fossil_Actor_move(ACTOR* actorx, GAME* game);
|
||||
static void Museum_Fossil_Actor_draw(ACTOR* actorx, GAME* game);
|
||||
|
||||
ACTOR_PROFILE Museum_Fossil_Profile = {
|
||||
mAc_PROFILE_MUSEUM_FOSSIL,
|
||||
ACTOR_PART_BG,
|
||||
ACTOR_STATE_CAN_MOVE_IN_DEMO_SCENES | ACTOR_STATE_NO_DRAW_WHILE_CULLED | ACTOR_STATE_NO_MOVE_WHILE_CULLED,
|
||||
EMPTY_NO,
|
||||
ACTOR_OBJ_BANK_KEEP,
|
||||
sizeof(MUSEUM_FOSSIL_ACTOR),
|
||||
&Museum_Fossil_Actor_ct,
|
||||
&Museum_Fossil_Actor_dt,
|
||||
&Museum_Fossil_Actor_move,
|
||||
&Museum_Fossil_Actor_draw,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static aMF_fossil_data_c aMF_fossil_data_table[mMmd_FOSSIL_NUM] = {
|
||||
{ 6, 3, mRmTp_DIRECT_SOUTH }, { 2, 3, mRmTp_DIRECT_SOUTH }, { 4, 3, mRmTp_DIRECT_SOUTH },
|
||||
{ 9, 3, mRmTp_DIRECT_SOUTH }, { 13, 3, mRmTp_DIRECT_SOUTH }, { 11, 3, mRmTp_DIRECT_SOUTH },
|
||||
{ 6, 11, mRmTp_DIRECT_SOUTH }, { 2, 11, mRmTp_DIRECT_SOUTH }, { 4, 11, mRmTp_DIRECT_SOUTH },
|
||||
{ 10, 6, mRmTp_DIRECT_SOUTH }, { 13, 6, mRmTp_DIRECT_SOUTH }, { 11, 6, mRmTp_DIRECT_SOUTH },
|
||||
{ 6, 6, mRmTp_DIRECT_WEST }, { 6, 5, mRmTp_DIRECT_WEST }, { 6, 7, mRmTp_DIRECT_WEST },
|
||||
{ 9, 11, mRmTp_DIRECT_SOUTH }, { 11, 11, mRmTp_DIRECT_SOUTH }, { 13, 11, mRmTp_DIRECT_SOUTH },
|
||||
{ 3, 8, mRmTp_DIRECT_EAST }, { 3, 6, mRmTp_DIRECT_EAST }, { 6, 8, mRmTp_DIRECT_SOUTH },
|
||||
{ 7, 8, mRmTp_DIRECT_SOUTH }, { 8, 8, mRmTp_DIRECT_SOUTH }, { 9, 8, mRmTp_DIRECT_SOUTH },
|
||||
{ 10, 8, mRmTp_DIRECT_SOUTH },
|
||||
};
|
||||
|
||||
static void Museum_Fossil_Actor_ct(ACTOR* actorx, GAME* game) {
|
||||
// nothing
|
||||
}
|
||||
|
||||
static void Museum_Fossil_Actor_dt(ACTOR* actorx, GAME* game) {
|
||||
// nothing
|
||||
}
|
||||
|
||||
static void Museum_Fossil_Actor_draw(ACTOR* actorx, GAME* game) {
|
||||
// nothing
|
||||
}
|
||||
|
||||
static void aMF_SetTalkInfo(ACTOR* actorx) {
|
||||
static rgba_t aMP_window_color = { 255, 255, 205, 255 };
|
||||
MUSEUM_FOSSIL_ACTOR* museum_fossil = (MUSEUM_FOSSIL_ACTOR*)actorx;
|
||||
|
||||
mDemo_Set_msg_num(museum_fossil->msg_no);
|
||||
mDemo_Set_talk_display_name(FALSE);
|
||||
mDemo_Set_ListenAble();
|
||||
mDemo_Set_camera(CAMERA2_PROCESS_NORMAL);
|
||||
mDemo_Set_use_zoom_sound(TRUE);
|
||||
mDemo_Set_talk_window_color(&aMP_window_color);
|
||||
mMsg_Set_continue_msg_num(mMsg_Get_base_window_p(), -1);
|
||||
}
|
||||
|
||||
static void Museum_Fossil_Actor_move(ACTOR* actorx, GAME* game) {
|
||||
static u8 item_name[mIN_ITEM_NAME_LEN];
|
||||
MUSEUM_FOSSIL_ACTOR* museum_fossil = (MUSEUM_FOSSIL_ACTOR*)actorx;
|
||||
|
||||
if (mDemo_Check(mDemo_TYPE_SPEAK, actorx)) {
|
||||
PLAYER_ACTOR* player = GET_PLAYER_ACTOR((GAME_PLAY*)game);
|
||||
s_xyz angle = player->actor_class.shape_info.rotation;
|
||||
|
||||
add_calc_short_angle2(&angle.y, museum_fossil->target_angle, 1.0f - sqrtf(0.7), 0x800, 0);
|
||||
GET_PLAYER_ACTOR_NOW()->Set_force_position_angle_proc(gamePT, NULL, &angle, mPlayer_FORCE_POSITION_ANGLE_ROTY);
|
||||
} else if (chkTrigger(BUTTON_A) && mDemo_Get_talk_actor() == NULL) {
|
||||
xyz_t pos;
|
||||
s16 angle;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < mMmd_FOSSIL_NUM; i++) {
|
||||
int donator = mMmd_FossilInfo(i);
|
||||
int res;
|
||||
|
||||
pos.x = (aMF_fossil_data_table[i].pos.x & 0xF) * 40.0f + 20.0f;
|
||||
pos.z = (aMF_fossil_data_table[i].pos.z & 0xF) * 40.0f + 20.0f;
|
||||
pos.y = 40.0f;
|
||||
|
||||
res = mRmTp_CheckTalkAble(&angle, &pos, aMF_fossil_data_table[i].direct, 42.5f, (GAME_PLAY*)game);
|
||||
if (res != FALSE) {
|
||||
museum_fossil->msg_no = (donator == mMmd_DONATOR_NONE)
|
||||
? 0x2FA1
|
||||
: ((donator == mMmd_DONATOR_DELETED_PLAYER) ? 0x2FA0 : 0x2F9F);
|
||||
museum_fossil->target_angle = angle;
|
||||
if (mDemo_Request(mDemo_TYPE_SPEAK, actorx, &aMF_SetTalkInfo)) {
|
||||
if (mMmd_IS_DONATED(donator)) {
|
||||
mActor_name_t item = (i >= 0 && i < mMmd_FOSSIL_NUM)
|
||||
? (mActor_name_t)(FTR_DINO_START + (mActor_name_t)(i << 2))
|
||||
: FTR_DINO_START;
|
||||
|
||||
/* Copy the art item's name */
|
||||
mIN_copy_name_str(item_name, item);
|
||||
mMsg_Set_item_str_art(mMsg_Get_base_window_p(), mMsg_ITEM_STR0, item_name, mIN_ITEM_NAME_LEN,
|
||||
mIN_get_item_article(item));
|
||||
|
||||
/* If the donator still lives in town we need to copy their name */
|
||||
if (mMmd_DONATOR_EXISTS(donator)) {
|
||||
mMsg_Set_free_str(mMsg_Get_base_window_p(), mMsg_FREE_STR0,
|
||||
Save_Get(private[mMmd_DONATOR_PLR_IDX(donator)]).player_ID.player_name,
|
||||
PLAYER_NAME_LEN);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -2154,7 +2154,7 @@ extern void mRmTp_CopyFloorData(u8* dst, int floor_no) {
|
||||
}
|
||||
}
|
||||
|
||||
extern int mRmTp_CheckTalkAble(s16* rot, xyz_t* pos, f32 max_dist, int required_dir, GAME_PLAY* play) {
|
||||
extern int mRmTp_CheckTalkAble(s16* rot, xyz_t* pos, int required_dir, f32 max_dist, GAME_PLAY* play) {
|
||||
static int direct_table[16] = { mRmTp_DIRECT_NORTH, -1, -1, mRmTp_DIRECT_WEST,
|
||||
mRmTp_DIRECT_WEST, -1, -1, mRmTp_DIRECT_SOUTH,
|
||||
mRmTp_DIRECT_SOUTH, -1, -1, mRmTp_DIRECT_EAST,
|
||||
|
||||
Reference in New Issue
Block a user