Merge pull request #322 from Cuyler36:ac_my_room

Implement & link ac_my_room
This commit is contained in:
Cuyler36
2024-04-14 15:35:57 -04:00
committed by GitHub
49 changed files with 15628 additions and 1619 deletions
+2 -1
View File
@@ -21,4 +21,5 @@ section_defs:
bss:
- name: .bss
balign: 4
- name: .sbss
- name: .sbss
label_prefix: ".L"
+2 -1
View File
@@ -1,4 +1,5 @@
path: dump/foresta.rel
address: 0x803701C0
bss_address: 0x8125A7C0
dol: config/dol.yml
dol: config/dol.yml
label_prefix: ".L"
+5
View File
@@ -463,6 +463,11 @@ ac_my_indoor.c:
.text: [0x8046EE38, 0x80470288]
.rodata: [0x80644A88, 0x80644A98]
.data: [0x806870F0, 0x806873E8]
ac_my_room.c:
.text: [0x80470288, 0x80482D9C]
.rodata: [0x80644A98, 0x80644C28]
.data: [0x806873E8, 0x8068A378]
.bss: [0x812FBEB0, 0x812FC5E0]
ac_psnowman.c:
.text: [0x80484098, 0x80484694]
.rodata: [0x80644C30, 0x80644C60]
+86 -87
View File
@@ -21,7 +21,7 @@ extern "C" {
#define NESTAG_GID "GID"
#define NESTAG_GNM "GNM"
#define NESTAG_CPN "CPN"
#define NESTAG_OFS "OFS" /* Offset into the shared highscore data to read/write at */
#define NESTAG_OFS "OFS" /* Offset into the shared highscore data to read/write at */
#define NESTAG_HSC "HSC"
#define NESTAG_GNO "GNO"
#define NESTAG_BBR "BBR"
@@ -47,122 +47,122 @@ typedef void* (*MALLOC_ALIGN_FUNC)(size_t size, u32 align);
typedef void (*MALLOC_FREE_FUNC)(void* ptr);
typedef int (*MALLOC_GETMEMBLOCKSIZE_FUNC)(void* ptr);
typedef int (*MALLOC_GETTOTALFREESIZE_FUNC)();
typedef struct malloc_s {
MALLOC_ALIGN_FUNC malloc_align;
MALLOC_FREE_FUNC free;
MALLOC_GETMEMBLOCKSIZE_FUNC getmemblocksize;
MALLOC_GETTOTALFREESIZE_FUNC gettotalfreesize;
MALLOC_ALIGN_FUNC malloc_align;
MALLOC_FREE_FUNC free;
MALLOC_GETMEMBLOCKSIZE_FUNC getmemblocksize;
MALLOC_GETTOTALFREESIZE_FUNC gettotalfreesize;
} Famicom_MallocInfo;
enum filer_demo_mode {
FILER_DEMO_MODE_NORMAL,
FILER_DEMO_MODE_AUTO,
FILER_DEMO_MODE_NORMAL,
FILER_DEMO_MODE_AUTO,
FILER_DEMO_MODE_NUM
FILER_DEMO_MODE_NUM
};
#define FAMICOM_SAVE_DATA_NAME_LEN 8
#define FAMICOM_MORI_NAME_LEN 16
typedef struct FamicomSaveDataHeader {
u8 name[FAMICOM_SAVE_DATA_NAME_LEN];
u8 _08;
u8 _09;
u8 headerSize;
u8 checksum;
u16 size;
u8 no_save;
u8 _temp[FAMICOM_SAVE_HEADER_SIZE - 0x000F];
u8 name[FAMICOM_SAVE_DATA_NAME_LEN];
u8 _08;
u8 _09;
u8 headerSize;
u8 checksum;
u16 size;
u8 no_save;
u8 _temp[FAMICOM_SAVE_HEADER_SIZE - 0x000F];
} FamicomSaveDataHeader;
enum {
MEMCARD_COMMENT_TYPE_NONE,
MEMCARD_COMMENT_TYPE_DEFAULT,
MEMCARD_COMMENT_TYPE_COPY_ROM, // converts rom's comment but converts "] ROM" to "] SAVE"
MEMCARD_COMMENT_TYPE_COPY_EMBEDDED // uses the embedded and unique 'save' comment
MEMCARD_COMMENT_TYPE_NONE,
MEMCARD_COMMENT_TYPE_DEFAULT,
MEMCARD_COMMENT_TYPE_COPY_ROM, // converts rom's comment but converts "] ROM" to "] SAVE"
MEMCARD_COMMENT_TYPE_COPY_EMBEDDED // uses the embedded and unique 'save' comment
};
enum {
MEMCARD_BANNER_TYPE_NONE,
MEMCARD_BANNER_TYPE_DEFAULT,
MEMCARD_BANNER_TYPE_COPY_ROM, // copies the NES rom save's banner
MEMCARD_BANNER_TYPE_COPY_EMBEDDED // uses the embedded and unique 'save' banner
MEMCARD_BANNER_TYPE_NONE,
MEMCARD_BANNER_TYPE_DEFAULT,
MEMCARD_BANNER_TYPE_COPY_ROM, // copies the NES rom save's banner
MEMCARD_BANNER_TYPE_COPY_EMBEDDED // uses the embedded and unique 'save' banner
};
enum {
MEMCARD_ICON_TYPE_NONE,
MEMCARD_ICON_TYPE_DEFAULT,
MEMCARD_ICON_TYPE_COPY_ROM, // copies the NES rom save's icon
MEMCARD_ICON_TYPE_COPY_EMBEDDED // uses the embedded and unique 'save' icon
MEMCARD_ICON_TYPE_NONE,
MEMCARD_ICON_TYPE_DEFAULT,
MEMCARD_ICON_TYPE_COPY_ROM, // copies the NES rom save's icon
MEMCARD_ICON_TYPE_COPY_EMBEDDED // uses the embedded and unique 'save' icon
};
enum {
FAMICOM_RESULT_OK,
FAMICOM_RESULT_NOSPACE,
FAMICOM_RESULT_NOENTRY,
FAMICOM_RESULT_BROKEN,
FAMICOM_RESULT_WRONGDEVICE,
FAMICOM_RESULT_WRONGENCODING,
FAMICOM_RESULT_NOCARD,
FAMICOM_RESULT_NOFILE
FAMICOM_RESULT_OK,
FAMICOM_RESULT_NOSPACE,
FAMICOM_RESULT_NOENTRY,
FAMICOM_RESULT_BROKEN,
FAMICOM_RESULT_WRONGDEVICE,
FAMICOM_RESULT_WRONGENCODING,
FAMICOM_RESULT_NOCARD,
FAMICOM_RESULT_NOFILE
};
typedef struct MemcardGameHeader_t {
u8 _00;
u8 _01;
u8 mori_name[16];
u16 nesrom_size;
u16 nestags_size;
u16 icon_format;
u16 icon_flags;
u16 comment_img_size; /* Size of comment + banner + icon */
struct {
u8 has_comment_img:1;
u8 comment_type:2;
u8 banner_type:2;
u8 icon_type:2;
u8 no_copy_flag:1;
} flags0;
struct {
u8 no_move_flag:1;
u8 banner_fmt:2;
u8 reserved:5;
} flags1;
u16 pad;
u8 _00;
u8 _01;
u8 mori_name[FAMICOM_MORI_NAME_LEN];
u16 nesrom_size;
u16 nestags_size;
u16 icon_format;
u16 icon_flags;
u16 comment_img_size; /* Size of comment + banner + icon */
struct {
u8 has_comment_img : 1;
u8 comment_type : 2;
u8 banner_type : 2;
u8 icon_type : 2;
u8 no_copy_flag : 1;
} flags0;
struct {
u8 no_move_flag : 1;
u8 banner_fmt : 2;
u8 reserved : 5;
} flags1;
u16 pad;
} MemcardGameHeader_t;
/* sizeof (FamicomCommon) == 0xB8 */
typedef struct FamicomCommon {
/* 0x00 */ ksNesCommonWorkObj* wp;
/* 0x04 */ ksNesStateObj* sp;
/* 0x08 */ u8* nesromp;
/* 0x0C */ u8* chrramp;
/* 0x10 */ u8* bbramp;
/* 0x14 */ u8* noise_bufp;
/* 0x18 */ u8* chr_to_i8_bufp;
/* 0x1C */ u8* result_bufp;
/* 0x20 */ u8* highscore_flagsp;
/* 0x24 */ u8* nesinfo_tagsp;
/* 0x28 */ int _28;
/* 0x2C */ u8 nesrom_memcard; // TRUE: rom is loaded from memcard, FALSE: rom is loaded internally
/* 0x2D */ u8 rom_no;
/* 0x2E */ s8 save_pl_no;
/* 0x2F */ u8 mura_save_name[33];
/* 0x50 */ u8 famicom_save_name[33];
/* 0x74 */ FamicomSaveDataHeader* save_data_header;
/* 0x78 */ u8* internal_save_datap;
/* 0x7C */ size_t save_data_total_size;
/* 0x80 */ size_t save_data_single_size;
/* 0x84 */ int _84;
/* 0x88 */ u8* save_data_name;
/* 0x8C */ u8 _8C;
/* 0x8D */ u8 low_res_mode;
/* 0x8E */ MemcardGameHeader_t memcard_game_header;
/* 0xB0 */ u8* memcard_save_comment;
/* 0xB4 */ size_t unused_save_data_start_ofs;
/* 0x00 */ ksNesCommonWorkObj* wp;
/* 0x04 */ ksNesStateObj* sp;
/* 0x08 */ u8* nesromp;
/* 0x0C */ u8* chrramp;
/* 0x10 */ u8* bbramp;
/* 0x14 */ u8* noise_bufp;
/* 0x18 */ u8* chr_to_i8_bufp;
/* 0x1C */ u8* result_bufp;
/* 0x20 */ u8* highscore_flagsp;
/* 0x24 */ u8* nesinfo_tagsp;
/* 0x28 */ int _28;
/* 0x2C */ u8 nesrom_memcard; // TRUE: rom is loaded from memcard, FALSE: rom is loaded internally
/* 0x2D */ u8 rom_no;
/* 0x2E */ s8 save_pl_no;
/* 0x2F */ u8 mura_save_name[33];
/* 0x50 */ u8 famicom_save_name[33];
/* 0x74 */ FamicomSaveDataHeader* save_data_header;
/* 0x78 */ u8* internal_save_datap;
/* 0x7C */ size_t save_data_total_size;
/* 0x80 */ size_t save_data_single_size;
/* 0x84 */ int _84;
/* 0x88 */ u8* save_data_name;
/* 0x8C */ u8 _8C;
/* 0x8D */ u8 low_res_mode;
/* 0x8E */ MemcardGameHeader_t memcard_game_header;
/* 0xB0 */ u8* memcard_save_comment;
/* 0xB4 */ size_t unused_save_data_start_ofs;
} FamicomCommon;
extern Famicom_MallocInfo* my_malloc_current;
extern u8 save_game_image;
extern u8** nesrom_filename_ptrs;
@@ -213,7 +213,6 @@ extern u8* nesinfo_get_moriName();
extern void nesinfo_init();
extern void highscore_setup_flags(u8* flags);
#ifdef __cplusplus
}
#endif
+1
View File
@@ -13,6 +13,7 @@ extern "C" {
#define SQRT2 (1.4142135623730950488016887242097)
#define F_SQRT2 ((f32)SQRT2)
#define F_SQRT2_DIV2 (0.707106f)
#define SQRTF(f) (__frsqrte(f))
+73 -10
View File
@@ -12,6 +12,11 @@ extern "C" {
typedef struct furniture_actor_s FTR_ACTOR;
#define aFTR_KEEP_ITEM_COUNT (mCoBG_LAYER_NUM - 1)
#define aFTR_CHECK_INTERACTION(inter, type) (((inter) >> (type)) & 1)
#define aFTR_EDGE_COL_NUM 4
enum {
aFTR_STATE_STOP,
aFTR_STATE_WAIT_PUSH,
@@ -61,8 +66,9 @@ enum {
};
enum {
aFTR_INTERACTION_NONE = 0,
aFTR_INTERACTION_STORAGE_DRAWERS = 1, // dressers
aFTR_INTERACTION_STORAGE_WARDROBE, // double doors
aFTR_INTERACTION_STORAGE_WARDROBE = 2, // double doors
aFTR_INTERACTION_STORAGE_CLOSET = 4, // single door
aFTR_INTERACTION_MUSIC_DISK = 8,
aFTR_INTERACTION_NO_COLLISION = 0x10,
@@ -78,19 +84,76 @@ enum {
aFTR_INTERACTION_FAMICOM_ITEM = 0x2000,
aFTR_INTERACTION_RADIO_AEROBICS = 0x4000,
aFTR_INTERACTION_TOGGLE = 0x8000,
aFTR_INTERACTION_NUM = 15,
};
enum {
aFTR_INTERACTION_TYPE_DRAWERS,
aFTR_INTERACTION_TYPE_WARDROBE,
aFTR_INTERACTION_TYPE_CLOSET,
aFTR_INTERACTION_TYPE_MUSIC_DISK,
aFTR_INTERACTION_TYPE_NO_COLLISION,
aFTR_INTERACTION_TYPE_HANIWA,
aFTR_INTERACTION_TYPE_FISH,
aFTR_INTERACTION_TYPE_INSECT,
aFTR_INTERACTION_TYPE_MANNEKIN,
aFTR_INTERACTION_TYPE_UMBRELLA,
aFTR_INTERACTION_TYPE_FOSSIL,
aFTR_INTERACTION_TYPE_FAMICOM,
aFTR_INTERACTION_TYPE_START_DISABLED,
aFTR_INTERACTION_TYPE_FAMICOM_ITEM,
aFTR_INTERACTION_TYPE_RADIO_AEROBICS,
aFTR_INTERACTION_TYPE_TOGGLE,
aFTR_INTERACTION_NUM,
};
#define aFTR_IS_STORAGE(profile) \
(aFTR_CHECK_INTERACTION((profile)->interaction_type, aFTR_INTERACTION_TYPE_DRAWERS) || \
aFTR_CHECK_INTERACTION((profile)->interaction_type, aFTR_INTERACTION_TYPE_WARDROBE) || \
aFTR_CHECK_INTERACTION((profile)->interaction_type, aFTR_INTERACTION_TYPE_CLOSET) || \
aFTR_CHECK_INTERACTION((profile)->interaction_type, aFTR_INTERACTION_TYPE_MUSIC_DISK))
enum {
aFTR_CONTACT_ACTION_NONE = 0,
aFTR_CONTACT_ACTION_CHAIR_UNIDIRECTIONAL = 1, // only can sit from the front
aFTR_CONTACT_ACTION_CHAIR_MULTIDIRECTIONAL = 2, // can sit from any direction
aFTR_CONTACT_ACTION_CHAIR_SOFA = 4, // cam sit anywhere from the front
aFTR_CONTACT_ACTION_BED_SINGLE = 8, // single bed (can't roll)
aFTR_CONTACT_ACTION_BED_DOUBLE = 0x10, // double bed (can roll)
aFTR_CONTACT_ACTION_BED_DOUBLE = 0x10, // double bed (can roll)
aFTR_CONTACT_ACTION_NUM
};
enum {
aFTR_CONTACT_ACTION_TYPE_CHAIR1,
aFTR_CONTACT_ACTION_TYPE_CHAIR4,
aFTR_CONTACT_ACTION_TYPE_SOFA,
aFTR_CONTACT_ACTION_TYPE_BED_SINGLE,
aFTR_CONTACT_ACTION_TYPE_BED_DOUBLE,
aFTR_CONTACT_ACTION_TYPE_NUM
};
#define aFTR_CHK_CONTACT_ACTION(cnt, action) (((cnt) >> (aFTR_CONTACT_ACTION_TYPE_##action)) & 1)
#define aFTR_CHK_CHAIR(cnt) \
(aFTR_CHK_CONTACT_ACTION(cnt, CHAIR1) || aFTR_CHK_CONTACT_ACTION(cnt, CHAIR4) || aFTR_CHK_CONTACT_ACTION(cnt, SOFA))
#define aFTR_CHK_BED(cnt) (aFTR_CHK_CONTACT_ACTION(cnt, BED_SINGLE) || aFTR_CHK_CONTACT_ACTION(cnt, BED_DOUBLE))
enum {
aFTR_SET_TYPE_NORMAL, /* Can't be placed on top and is not a table (layer0) */
aFTR_SET_TYPE_SURFACE, /* Is a surface (layer0) */
aFTR_SET_TYPE_ON_SURFACE, /* Can be placed on a surface (layer0/layer1) */
aFTR_SET_TYPE_NUM
};
enum {
aFTR_KANKYO_MAP_NONE,
aFTR_KANKYO_MAP_OPA,
aFTR_KANKYO_MAP_XLU,
aFTR_KANKYO_MAP_NUM
};
typedef void (*aFTR_FTR_CT_PROC)(FTR_ACTOR*, u8*);
typedef void (*aFTR_FTR_MOVE_PROC)(FTR_ACTOR*, ACTOR*, GAME*, u8*);
typedef void (*aFTR_FTR_DRAW_PROC)(FTR_ACTOR*, ACTOR*, GAME*, u8*);
@@ -151,15 +214,15 @@ struct furniture_actor_s {
xyz_t position;
xyz_t last_position;
xyz_t target_position;
int target_distance; /* distance to target position */
f32 player_distance; /* distance to the player */
f32 angle_y; /* current Y angle */
f32 angle_y_target; /* goal Y angle */
int target_direction; /* direction to target position */
f32 player_distance; /* distance to the player */
f32 angle_y; /* current Y angle */
f32 angle_y_target; /* goal Y angle */
s16 state;
u8 shape_type; /* current size & shape (rotation) */
u8 original_shape_type; /* original size & shape (rotation) */
xyz_t base_position;
aFTR_collision_c edge_collision[4]; /* collision for each edge */
aFTR_collision_c edge_collision[aFTR_EDGE_COL_NUM]; /* collision for each edge */
s16 collision_direction;
int move_bg_idx;
mCoBG_bg_regist_c bg_register;
@@ -184,9 +247,9 @@ struct furniture_actor_s {
f32 dynamic_work_f[2]; /* reserved for any use by each unique furniture actor */
s16 layer; /* layer the furniture actor resides on */
s16 _83E;
s16 open_music_disk; /* set when a music player is interacted with */
s16 demo_status; /* set when a music player is interacted with */
s16 dust_timer;
mActor_name_t items[mCoBG_LAYER_NUM - 1]; /* used for holding items (music players & wardrobes) */
mActor_name_t items[aFTR_KEEP_ITEM_COUNT]; /* used for holding items (music players & wardrobes) */
int _84C;
u16* pal_p; /* used for furniture actors with dynamic palettes such as the structure model items */
int _854;
+56 -21
View File
@@ -10,6 +10,15 @@
extern "C" {
#endif
#define aMR_MAX_UNIT 8
#define aMR_HANIWA_ON_TABLE_NUM 14
#define aMR_GOKI_MAX 3
#define aMR_FIT_FTR_MAX 4
#define aMR_RSV_FTR_NUM 3
#define aMR_NO_FTR_ID 200
#define aMR_NO_FTR_ID2 201
typedef struct my_room_actor_s MY_ROOM_ACTOR;
enum {
@@ -29,15 +38,32 @@ enum {
aMR_CONTACT_DIR_NUM
};
enum {
aMR_FRIEND_ALL,
aMR_FRIEND_ON,
aMR_FRIEND_OFF,
aMR_FRIEND_NUM
};
enum {
aMR_DIRECT_UP,
aMR_DIRECT_LEFT,
aMR_DIRECT_DOWN,
aMR_DIRECT_RIGHT,
aMR_DIRECT_NUM
};
typedef struct my_room_contact_s {
int contact_flag;
int ftr_no;
int ftrID;
int direction;
int contact_side;
f32 contact_percent;
f32* normal_p;
f32 contact_edge0[2];
f32 contact_edge1[2];
f32 contact_edge_start[2];
f32 contact_edge_end[2];
int contact_direction;
} aMR_contact_info_c;
@@ -48,18 +74,18 @@ typedef struct my_room_clock_info_s {
int frame; /* 0-119 */
} aMR_clock_info_c;
typedef int (*aMR_JUDGE_BREED_NEW_FTR_PROC)(GAME_PLAY* play, u16 ftr_no, int* ut_x, int* ut_z, u16* rotation,
typedef int (*aMR_JUDGE_BREED_NEW_FTR_PROC)(GAME* game, u16 ftr_no, int* ut_x, int* ut_z, u16* rotation,
int* square_offset, int* layer);
typedef mActor_name_t (*aMR_SEARCH_PICKUP_FURNITURE_PROC)(GAME_PLAY* play);
typedef void (*aMR_FURNITURE2ITEMBAG_PROC)(GAME_PLAY* play);
typedef mActor_name_t (*aMR_SEARCH_PICKUP_FURNITURE_PROC)(GAME* game);
typedef void (*aMR_FURNITURE2ITEMBAG_PROC)(GAME* game);
typedef int (*aMR_JUDGE_PLAYER_ACTION_PROC)(xyz_t* wpos0, xyz_t* wpos1, int ftr_actor_idx);
typedef void (*aMR_PLAYER_MOVE_FURNITURE_PROC)(int ftr_actor_idx, xyz_t* wpos);
typedef int (*aMR_FTR_ID_2_WPOS_PROC)(xyz_t* wpos, int ftr_id);
typedef int (*aMR_UNIT_NUM_2_FTR_ITEMNO_FTRID_PROC)(mActor_name_t* ftr_item_no, int* ftr_id, int ut_x, int ut_z,
s16 layer);
int layer);
typedef void (*aMR_FTR_ID_2_EXTINGUISH_FURNITURE_PROC)(int ftr_id);
typedef void (*aMR_REDMA_FTR_BANK_PROC)();
typedef int (*aMR_RESERVE_FURNITURE_PROC)(GAME_PLAY* play, u16 ftr_no, int judge_res, int ut_x, int ut_z, u16 rotation,
typedef void (*aMR_REDMA_FTR_BANK_PROC)(void);
typedef int (*aMR_RESERVE_FURNITURE_PROC)(GAME* game, u16 ftr_no, int judge_res, int ut_x, int ut_z, u16 rotation,
int square_offset, int layer);
typedef int (*aMR_COUNT_FRIEND_FURNITURE_PROC)(FTR_ACTOR* ftr_actor, u8 switch_on);
typedef int (*aMR_JUDGE_PLACE_2ND_LAYER_PROC)(int ut_x, int ut_z);
@@ -75,13 +101,13 @@ typedef int (*aMR_PICKUP_FTR_LAYER_PROC)(void);
typedef void (*aMR_LEAF_PICKUPED_PROC)(void);
typedef void (*aMR_FAMICOM_EMU_COMMON_MOVE_PROC)(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, int rom_no,
int agb_rom_no);
typedef u32 (*aMR_FTR_NO_2_BANK_ADDRESS_PROC)(u16 ftr_no);
typedef u8* (*aMR_FTR_NO_2_BANK_ADDRESS_PROC)(u16 ftr_no);
typedef void (*aMR_CALL_SIT_DOWN_ONGEN_POS_SE_PROC)(const xyz_t* pos);
typedef void (*aMR_SOUND_MELODY_PROC)(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, int idx);
typedef int (*aMR_CHECK_DANNA_KILL_PROC)(xyz_t* pos);
typedef struct my_room_clip_s {
MY_ROOM_ACTOR* my_room_actor_p;
ACTOR* my_room_actor_p;
aMR_JUDGE_BREED_NEW_FTR_PROC judge_breed_new_ftr_proc;
aMR_SEARCH_PICKUP_FURNITURE_PROC search_pickup_ftr_proc;
aMR_FURNITURE2ITEMBAG_PROC ftr2itemBag_proc;
@@ -118,12 +144,12 @@ typedef struct room_leaf_s {
typedef struct room_pickup_s {
int pickup_flag;
int ftr_no;
int ftrID;
xyz_t leaf_pos;
int picking_up_flag;
s16 layer;
u16 dust_effect_timer;
u16 icon;
s16 dust_effect_timer;
s16 icon;
} aMR_pickup_info_c;
typedef struct room_rsv_ftr_s {
@@ -162,7 +188,7 @@ typedef struct emu_info_s {
int _10;
int card_famicom_count;
int memory_game_select;
char** famicom_names_p;
char* famicom_names_p;
s16 save_msg_timer;
s16 external_rom;
} aMR_emu_info_c;
@@ -178,6 +204,12 @@ typedef struct room_fit_ftr_s {
xyz_t ut_pos;
} aMR_fit_ftr_c;
typedef struct room_parent_ftr_s {
int ftrID;
s16 angle_y;
aMR_fit_ftr_c fit_ftr_table[aMR_FIT_FTR_MAX];
} aMR_parent_ftr_c;
struct my_room_actor_s {
ACTOR actor_class;
s16 state;
@@ -215,7 +247,7 @@ struct my_room_actor_s {
s16 keep_pull_flag;
xyz_t pull_target_pos0;
xyz_t pull_target_pos1;
int haniwa_on_table[14];
int haniwa_on_table[aMR_HANIWA_ON_TABLE_NUM];
aMR_bgm_info_c bgm_info;
aMR_room_info_c room_info;
aMR_emu_info_c emu_info;
@@ -236,9 +268,7 @@ struct my_room_actor_s {
int _4F4;
int room_msg_flag;
int haniwa_step_idx;
int parent_ftrID;
s16 parent_angleY;
aMR_fit_ftr_c fit_ftr_table[4];
aMR_parent_ftr_c parent_ftr;
u32 music_box[2];
int scene;
int _5A4;
@@ -257,10 +287,15 @@ extern int aMR_GetFurnitureUnit(mActor_name_t ftr);
extern mActor_name_t aMR_FurnitureFg_to_FurnitureFgWithDirect(mActor_name_t ftr, int direct);
extern void aMR_SameFurnitureSwitchOFF(u16 ftr_name);
extern aMR_contact_info_c* aMR_GetContactInfoLayer1(void);
extern FTR_ACTOR* aMR_GetParentFactor();
extern s16 aMR_GetParentAngleOffset(FTR_ACTOR* ftr_actor, MY_ROOM_ACTOR* my_room_actor);
extern FTR_ACTOR* aMR_GetParentFactor(FTR_ACTOR* ftr_actor, ACTOR* my_room_actorx);
extern s16 aMR_GetParentAngleOffset(FTR_ACTOR* ftr_actor, ACTOR* my_room_actorx);
extern void aMR_SetSurprise(ACTOR* my_room_actor, s16 rot);
extern void aMR_RadioCommonMove(FTR_ACTOR* ftr_actor, ACTOR* my_room_actorx);
extern void aMR_SaveWaltzTempo2(void);
extern u8 aMR_GetAlphaEdge(u16 ftr_name);
extern int aMR_DrawDolphinMode(u16 ftr_name);
extern Gfx* aMR_IconNo2Gfx1(int icon_no);
extern Gfx* aMR_IconNo2Gfx2(int icon_no);
#ifdef __cplusplus
}
+1 -1
View File
@@ -3,6 +3,7 @@
#include "types.h"
#include "m_actor.h"
#include "ac_shop_goods_h.h"
#ifdef __cplusplus
extern "C" {
@@ -15,4 +16,3 @@ extern ACTOR_PROFILE Shop_Goods_Profile;
#endif
#endif
+29
View File
@@ -0,0 +1,29 @@
#ifndef AC_SHOP_GOODS_H_H
#define AC_SHOP_GOODS_H_H
#include "types.h"
#include "m_actor_type.h"
#include "game_h.h"
#include "m_lib.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef void (*aSG_SINGLE_DRAW_PROC)(GAME*, mActor_name_t, xyz_t*, f32, s16, int);
typedef int (*aSG_PLAYER_DROP_ENTRY_PROC)(GAME*, mActor_name_t, int, int, int, int);
typedef s16 (*aSG_SINGLE_GET_ANGLE_Y_PROC)(int, int, int);
typedef void (*aSG_SINGLE_SET_ANGLE_Y_PROC)(int, int, int, s16);
typedef struct shop_goods_clip_s {
aSG_SINGLE_DRAW_PROC single_draw_proc;
aSG_PLAYER_DROP_ENTRY_PROC player_drop_entry_proc;
aSG_SINGLE_GET_ANGLE_Y_PROC single_get_angle_y_proc;
aSG_SINGLE_SET_ANGLE_Y_PROC single_set_angle_y_proc;
} aSG_Clip_c;
#ifdef __cplusplus
}
#endif
#endif
+19 -19
View File
@@ -26,18 +26,18 @@ enum {
VOICE_STATUS_NUM
};
extern void sAdo_Calc_MicPosition_forTrig(f32* fcalc, u16* scalc, xyz_t* pos);
extern void sAdo_Calc_MicPosition_forLevel(f32* fcalc, u16* scalc, xyz_t* pos);
extern void sAdo_Calc_MicPosition_forTrig(f32* fcalc, u16* scalc, const xyz_t* pos);
extern void sAdo_Calc_MicPosition_forLevel(f32* fcalc, u16* scalc, const xyz_t* pos);
extern void sAdo_GameFrame();
extern void sAdo_BgmStart(u8 id);
extern void sAdo_BgmStop(u16 id);
extern void sAdo_SysTrgStart(u16 id);
extern void sAdo_PlyWalkSe(int walk, xyz_t* pos);
extern void sAdo_PlyWalkSeRoom(int walk, xyz_t* pos);
extern void sAdo_NpcWalkSe(int walk, xyz_t* pos);
extern void sAdo_NpcWalkSeRoom(int walk, xyz_t* pos);
extern void sAdo_PlyWalkSe(int walk, const xyz_t* pos);
extern void sAdo_PlyWalkSeRoom(int walk, const xyz_t* pos);
extern void sAdo_NpcWalkSe(int walk, const xyz_t* pos);
extern void sAdo_NpcWalkSeRoom(int walk, const xyz_t* pos);
extern void sAdo_PlayerStatusLevel(f32 speed, int p);
@@ -52,32 +52,32 @@ extern u8 sAdo_MessageSpeedGet();
extern void sAdo_SysLevStop(u8 id);
extern void sAdo_SysLevStart(u8 id);
extern void sAdo_OngenPos(u32 p1, u8 p2, xyz_t* pos);
extern void sAdo_OngenTrgStart(u16 id, xyz_t* pos);
extern void sAdo_OngenPos(u32 p1, u8 p2, const xyz_t* pos);
extern void sAdo_OngenTrgStart(u16 id, const xyz_t* pos);
extern void sAdo_SetOutMode(u8 mode);
extern void sAdo_SetVoiceMode(u8 mode);
extern void sAdo_FloorTrgStart(u16 id, xyz_t* pos);
extern void sAdo_FloorTrgStart(u8 id, const xyz_t* pos);
extern void sAdo_RhythmStart(u32 id, s8 type, s8 wait);
extern void sAdo_RhythmStop(u32 id);
extern void sAdo_RhythmAllStop();
extern void sAdo_FurnitureInst(int track_id, s8 cb, s32 cl, xyz_t* pos);
extern void sAdo_FurnitureInst(u32 id, u8 inst, u8* melody, const xyz_t* pos);
extern void sAdo_Pause(u8 mode);
extern f32 sAdo_GetRhythmAnimCounter(u32 id);
extern s8 sAdo_GetRhythmDelay(u32 id);
extern f32 sAdo_GetRhythmInfo(u32 id);
extern void sAdo_SetRhythmInfo(f32 p);
extern void sAdo_GetRhythmInfo(TempoBeat_c* rhythm);
extern void sAdo_SetRhythmInfo(TempoBeat_c* rhythm);
extern int sAdo_InstCountGet();
extern void sAdo_RhythmPos(u32 id, u8 haniwa_id, xyz_t* pos);
extern void sAdo_RhythmPos(u32 id, u8 haniwa_id, const xyz_t* pos);
extern void sAdo_SpecChange(int spec);
extern void sAdo_MDPlayerPos(xyz_t* pos, u16 s1, u16 s2, int p);
extern void sAdo_MDPlayerPos(const xyz_t* pos, u16 s1, u16 s2, int p);
extern void sAdo_BGMVolume(f32 f, u16 volume);
extern void sAdo_BgmCrossfadeStart(u8 b);
@@ -98,7 +98,7 @@ extern void sAdos_GetStaffRollInfo(void* p);
extern void sAdos_TTKK_ARM(u8 mode);
extern void sAdo_OngenTrgStartSpeed(f32 speed, u16 s1, xyz_t* pos);
extern void sAdo_OngenTrgStartSpeed(f32 speed, u16 s1, const xyz_t* pos);
extern void sAdo_TrgSeEcho(u8 b);
extern void sAdo_LevSeEcho(u8 b);
@@ -115,16 +115,16 @@ extern u16 sAdo_Get_WalkLabel(int type);
extern int sAdo_Get_KokeruLabel(int type);
extern void sAdo_SceneMode(u8 mode);
extern u8 sAdo_RoomIncectPos(u32 f, u16 u, xyz_t* pos);
extern u8 sAdo_RoomIncectPos(u32 f, u16 u, const xyz_t* pos);
extern void sAdo_FurnitureInstPos(u32 f, xyz_t* pos);
extern void sAdo_FurnitureInstPos(u32 id, const xyz_t* pos);
extern void sAdo_Set_ongenpos_refuse_fg(int state);
extern int sAdo_GameframeEnd_Check();
extern int sAdo_GetSoundFrameCounter();
extern int sAdo_CheckOnPlussBridge(xyz_t* pos, u32 atr);
extern void sAdo_RegistPlussBridge(xyz_t* pos);
extern int sAdo_CheckOnPlussBridge(const xyz_t* pos, u32 atr);
extern void sAdo_RegistPlussBridge(const xyz_t* pos);
extern void sAdo_DeletePlussBridge();
extern void sAdo_kazagurumaLevel(f32 level);
+26 -5
View File
@@ -15,12 +15,12 @@ extern "C" {
#define MONO(id) (id | 0x1000)
#define SE_FLAG_15(id) (id | 0x8000)
//TODO: Make the rest of Sound Effects with parameters
// TODO: Make the rest of Sound Effects with parameters
#define SE_REGISTER MONO(0x50)
typedef enum audio_sound_effects{
typedef enum audio_sound_effects {
NA_SE_START,
NA_SE_CURSOL,
NA_SE_CURSOL,
NA_SE_MENU_EXIT,
NA_SE_ZOOMUP = 4,
@@ -35,6 +35,8 @@ typedef enum audio_sound_effects{
NA_SE_LIGHT_ON,
NA_SE_LIGHT_OFF,
NA_SE_DRAWER_SHUT = 0x3A,
NA_SE_ITEM_GET = 0x40,
NA_SE_ITEM_HORIDASHI = 0x47,
@@ -43,6 +45,9 @@ typedef enum audio_sound_effects{
NA_SE_MONEY2,
NA_SE_COIN,
NA_SE_BIRTH_FTR = 0x57,
NA_SE_CLEAN_UP_FTR = 0x58,
NA_SE_TOOL_FURI = 0x5A, // swing?
NA_SE_AMI_HIT = 0x5C,
NA_SE_TOOL_GET,
@@ -55,6 +60,9 @@ typedef enum audio_sound_effects{
NA_SE_TOOL_BROKEN2,
NA_SE_TOOL_BROKEN3,
NA_SE_STONECOIN_ROLL = 0x7D,
NA_SE_STONECOIN_DRAG = 0x7E,
NA_SE_ROD_STROKE = 0x109,
NA_SE_ROD_BACK,
@@ -79,7 +87,9 @@ typedef enum audio_sound_effects{
NA_SE_ZASSOU_NUKU = 0x15F,
NA_SE_HACHI_SASARERU,
NA_SE_166 = 0x166,
NA_SE_UCHIWA = 0x167,
NA_SE_LAWNMOWER = 0x177,
NA_SE_SCOOP_SHIGEMI = 0x401,
@@ -92,6 +102,8 @@ typedef enum audio_sound_effects{
NA_SE_BED_NEGAERI,
NA_SE_BED_OUT,
NA_SE_ROTATE = 0x41A,
NA_SE_SOFT_CHAIR_SIT = 0x41F,
NA_SE_HARD_CHAIR_SIT,
NA_SE_BUBU_CHAIR_SIT,
@@ -99,6 +111,10 @@ typedef enum audio_sound_effects{
NA_SE_HARD_CHAIR_STANDUP,
NA_SE_BUBU_CHAIR_STANDUP = 0x429,
NA_SE_FTR_DOOR_OPEN = 0x42C,
NA_SE_FTR_DOOR_CLOSE = 0x42D,
NA_SE_DRAWER_OPEN = 0x42E,
NA_SE_DRAWER_CLOSE = 0x42F,
NA_SE_DAI_UE_KAKUNOU = 0x430,
NA_SE_UMBRELLA_ROTATE = 0x432,
@@ -109,14 +125,19 @@ typedef enum audio_sound_effects{
NA_SE_KARABURI = 0x43A,
NA_SE_ROD_STROKE_SMALL = 0x445,
NA_SE_SCOOP_TREE_HIT = 0x448,
NA_SE_SCOOP_ITEM_HIT,
NA_SE_AXE_BALL_HIT,
NA_SE_COIN_GASAGOSO = 0x465,
}AudioSE;
} AudioSE;
typedef enum bgm_e {
BGM_AEROBICS = 27,
BGM_MD0 = 128,
} BGM_e;
#ifdef __cplusplus
}
+3 -4
View File
@@ -424,9 +424,8 @@ extern void cKF_SkeletonInfo_R_T_combine_play(int* arg1, int* arg2, int* arg3, c
* @param angley Y angle for base model rotation.
* @param anglez Z angle for base model rotation.
*/
extern void cKF_SkeletonInfo_R_Animation_Set_base_shape_trs(f32 transx, f32 transy, f32 transz,
cKF_SkeletonInfo_R_c* keyframe, s16 anglex, s16 angley,
s16 anglez);
extern void cKF_SkeletonInfo_R_Animation_Set_base_shape_trs(cKF_SkeletonInfo_R_c* keyframe, f32 transx, f32 transy,
f32 transz, s16 anglex, s16 angley, s16 anglez);
/**
* Adjusts the base position and correction for a skeleton info structure based on animation flags.
@@ -482,4 +481,4 @@ extern void cKF_SkeletonInfo_R_AnimationMove_CulcTransToWorld(f32 calcx, f32 cal
}
#endif
#endif
#endif
+3 -3
View File
@@ -11,7 +11,7 @@ extern "C" {
/* sizeof(struct game_famicom_emu_s) == 0xE0 */
typedef struct game_famicom_emu_s {
/* 0x00 */ GAME game;
/* 0x00 */ GAME game;
} GAME_FAMICOM_EMU;
extern Famicom_MallocInfo my_malloc_func;
@@ -19,8 +19,8 @@ extern Famicom_MallocInfo my_malloc_func;
extern void famicom_emu_main(GAME* game);
extern void famicom_emu_init(GAME* game);
extern void famicom_emu_cleanup(GAME* game);
extern int famicom_gba_getImage(u32 rom_id, int* ptr);
extern void famicom_gba_removeImage(void* );
extern void* famicom_gba_getImage(u32 rom_id, size_t* size);
extern void famicom_gba_removeImage(void*);
#ifdef __cplusplus
}
+1 -1
View File
@@ -29,7 +29,7 @@ extern void Na_OngenPos(u32, u8, u16, f32);
extern void Na_OngenTrgStart(u16, u16, f32);
extern void Na_SetOutMode(u8);
extern void Na_SetVoiceMode(u8);
extern void Na_FloorTrgStart(u16, u16, f32);
extern void Na_FloorTrgStart(u8, u16, f32);
extern void Na_Pause(u8);
extern void Na_RhythmPos(u32, u8, u16, f32);
extern void Na_SpecChange(int);
+2 -4
View File
@@ -8,13 +8,11 @@ extern "C" {
#endif
extern void Na_Inst(u16, u8*);
extern void Na_FurnitureInst(int,s8,s32,u16,f32);
extern void Na_FurnitureInst(u32, u8, u8*, u16, f32);
extern int Na_InstCountGet();
#ifdef __cplusplus
}
#endif
#endif
#endif
+3 -2
View File
@@ -2,6 +2,7 @@
#define RHYTHM_H
#include "types.h"
#include "audio.h"
#ifdef __cplusplus
extern "C" {
@@ -12,8 +13,8 @@ extern void Na_RhythmStop(u32);
extern void Na_RhythmAllStop();
extern f32 Na_GetRhythmAnimCounter(u32);
extern s8 Na_GetRhythmDelay(u32);
extern f32 Na_GetRhythmInfo(u32);
extern void Na_SetRhythmInfo(f32);
extern void Na_GetRhythmInfo(TempoBeat_c* rhythm);
extern void Na_SetRhythmInfo(TempoBeat_c* rhythm);
#ifdef __cplusplus
}
+8 -8
View File
@@ -12,12 +12,12 @@ extern "C" {
#endif
typedef struct {
u16 mFileID; // _00
u16 mHash; // _02
u32 mFlag; // _04
u32 mDataOffset; // _08
u32 mSize; // _0C
void* mData; // _10
u16 mFileID; // _00
u16 mHash; // _02
u32 mFlag; // _04
u32 mDataOffset; // _08
u32 mSize; // _0C
void* mData; // _10
} CSDIFileEntry;
extern void* JC_JFWSystem_getSystemConsole();
@@ -116,8 +116,8 @@ extern void* JC_JUTFader_new(int ul_x, int ul_y, int br_x, int br_y, u32* color)
extern void JC_JUTFader_delete(void* fader);
extern void JC_JFWDisplay_changeToDoubleXfb(void* manager);
extern u32 JC__JKRGetResource(char* resourceName);
extern int JC__JKRGetMemBlockSize(int, u32);
extern void* JC__JKRGetResource(const char* resourceName);
extern u32 JC__JKRGetMemBlockSize(int, void*);
extern void JC__JKRRemoveResource(void* res);
-7
View File
@@ -1187,16 +1187,9 @@ extern void Actor_get_overlay_area(ACTOR_DLFTBL* dlftbl, int unused, size_t allo
extern void Actor_init_actor_class(ACTOR* actor, ACTOR_PROFILE* profile, ACTOR_DLFTBL* dlftbl, GAME_PLAY* play,
int bank_idx, f32 x, f32 y, f32 z, s16 rot_x, s16 rot_y, s16 rot_z, s8 block_x,
s8 block_z, s16 move_actor_list_idx, mActor_name_t name_id, s16 arg);
#ifndef MUST_MATCH
extern ACTOR* Actor_info_make_actor(Actor_info* actor_info, GAME* game, s16 profile_no, f32 x, f32 y, f32 z, s16 rot_x,
s16 rot_y, s16 rot_z, s8 block_x, s8 block_z, s16 move_actor_list_idx,
mActor_name_t name_id, s16 arg, s8 npc_info_idx, int data_bank_idx);
#else
extern asm ACTOR* Actor_info_make_actor(Actor_info* actor_info, GAME* game, s16 profile_no, f32 x, f32 y, f32 z,
s16 rot_x, s16 rot_y, s16 rot_z, s8 block_x, s8 block_z,
s16 move_actor_list_idx, mActor_name_t name_id, s16 arg, s8 npc_info_idx,
int data_bank_idx);
#endif
extern ACTOR* Actor_info_make_child_actor(Actor_info* actor_info, ACTOR* parent_actor, GAME* game, s16 profile, f32 x,
f32 y, f32 z, s16 rot_x, s16 rot_y, s16 rot_z, s16 move_actor_list_idx,
mActor_name_t name_id, s16 arg, int data_bank_idx);
+69 -61
View File
@@ -15,94 +15,94 @@ typedef struct choice_s mChoice_c;
typedef struct choice_data_s mChoice_Data_c;
enum choice {
mChoice_CHOICE0,
mChoice_CHOICE1,
mChoice_CHOICE2,
mChoice_CHOICE3,
mChoice_CHOICE4,
mChoice_CHOICE5,
mChoice_CHOICE0,
mChoice_CHOICE1,
mChoice_CHOICE2,
mChoice_CHOICE3,
mChoice_CHOICE4,
mChoice_CHOICE5,
mChoice_CHOICE_NUM
mChoice_CHOICE_NUM
};
enum {
mChoice_AUTOMOVE_STOPPED,
mChoice_AUTOMOVE_INCREMENT_WAIT,
mChoice_AUTOMOVE_INCREMENT,
mChoice_AUTOMOVE_DECREMENT_WAIT,
mChoice_AUTOMOVE_DECREMENT,
mChoice_AUTOMOVE_STOPPED,
mChoice_AUTOMOVE_INCREMENT_WAIT,
mChoice_AUTOMOVE_INCREMENT,
mChoice_AUTOMOVE_DECREMENT_WAIT,
mChoice_AUTOMOVE_DECREMENT,
mChoice_AUTOMOVE_NUM
mChoice_AUTOMOVE_NUM
};
enum {
mChoice_MAIN_HIDE,
mChoice_MAIN_APPEAR,
mChoice_MAIN_NORMAL,
mChoice_MAIN_DISAPPEAR,
mChoice_MAIN_HIDE,
mChoice_MAIN_APPEAR,
mChoice_MAIN_NORMAL,
mChoice_MAIN_DISAPPEAR,
mChoice_MAIN_INDEX_NUM
mChoice_MAIN_INDEX_NUM
};
struct choice_data_s {
u8 strings[mChoice_CHOICE_NUM][mChoice_CHOICE_STRING_LEN];
int string_lens[mChoice_CHOICE_NUM];
u8 determination_string[mChoice_CHOICE_STRING_LEN];
int determination_len;
int choice_num;
int selected_choice_idx;
u8 strings[mChoice_CHOICE_NUM][mChoice_CHOICE_STRING_LEN];
int string_lens[mChoice_CHOICE_NUM];
u8 determination_string[mChoice_CHOICE_STRING_LEN];
int determination_len;
int choice_num;
int selected_choice_idx;
};
struct choice_s {
/* Current XY position (centered) */
/* 0x00 */ f32 center_x;
/* 0x04 */ f32 center_y;
/* Current XY position (centered) */
/* 0x00 */ f32 center_x;
/* 0x04 */ f32 center_y;
/* Initial XY position */
/* 0x08 */ f32 center_x_begin;
/* 0x0C */ f32 center_y_begin;
/* Initial XY position */
/* 0x08 */ f32 center_x_begin;
/* 0x0C */ f32 center_y_begin;
/* Target XY position */
/* 0x10 */ f32 center_x_target;
/* 0x14 */ f32 center_y_target;
/* Target XY position */
/* 0x10 */ f32 center_x_target;
/* 0x14 */ f32 center_y_target;
/* Text settings */
/* 0x18 */ rgba_t text_color;
/* 0x1C */ f32 text_scale_x;
/* 0x20 */ f32 text_scale_y;
/* 0x24 */ f32 text_x;
/* 0x28 */ f32 text_y;
/* Text settings */
/* 0x18 */ rgba_t text_color;
/* 0x1C */ f32 text_scale_x;
/* 0x20 */ f32 text_scale_y;
/* 0x24 */ f32 text_x;
/* 0x28 */ f32 text_y;
/* Window scaling XY */
/* 0x2C */ f32 scale_x;
/* 0x30 */ f32 scale_y;
/* Window scaling XY */
/* 0x2C */ f32 scale_x;
/* 0x30 */ f32 scale_y;
/* Text related data */
/* 0x34 */ mChoice_Data_c data;
/* Text related data */
/* 0x34 */ mChoice_Data_c data;
/* 0xC8 */ int selected_choice_idx;
/* 0xCC */ rgba_t selected_choice_text_color;
/* 0xD0 */ rgba_t background_color;
/* 0xC8 */ int selected_choice_idx;
/* 0xCC */ rgba_t selected_choice_text_color;
/* 0xD4 */ f32 _D4;
/* 0xD8 */ f32 _D8;
/* 0xD0 */ rgba_t background_color;
/* 0xDC */ f32 scale; // total choice window scaling percentage
/* 0xD4 */ f32 _D4;
/* 0xD8 */ f32 _D8;
/* 0xE0 */ int main_index;
/* 0xE4 */ int requested_main_index;
/* 0xDC */ f32 scale; // total choice window scaling percentage
/* 0xE8 */ int window_visible_flag;
/* 0xEC */ int font_visible_flag;
/* 0xE0 */ int main_index;
/* 0xE4 */ int requested_main_index;
/* 0xF0 */ int choice_automove_type;
/* 0xF4 */ f32 choice_automove_timer;
/* 0xE8 */ int window_visible_flag;
/* 0xEC */ int font_visible_flag;
/* 0xF8 */ f32 timer;
/* 0xF0 */ int choice_automove_type;
/* 0xF4 */ f32 choice_automove_timer;
/* 0xFC */ u8 no_b_flag; // can't press B to select last option
/* 0xFD */ u8 no_close_flag; // pressing B won't auto-cancel the choice selection?
/* 0xF8 */ f32 timer;
/* 0xFC */ u8 no_b_flag; // can't press B to select last option
/* 0xFD */ u8 no_close_flag; // pressing B won't auto-cancel the choice selection?
};
extern void mChoice_Main(mChoice_c* choice, GAME* game);
@@ -114,13 +114,21 @@ extern mChoice_c* mChoice_Get_base_window_p();
extern void mChoice_Change_request_main_index(mChoice_c* choice, int request_main_index);
extern int mChoice_check_main_index(mChoice_c* choice);
extern int mChoice_check_main_normal(mChoice_c* choice);
extern void mChoice_Set_choice_data( mChoice_c* choice, u8* str0, int str0_len, u8* str1, int str1_len, u8* str2, int str2_len, u8* str3, int str3_len, u8* str4, int str4_len, u8* str5, int str5_len);
extern void mChoice_Set_choice_data(mChoice_c* choice, u8* str0, int str0_len, u8* str1, int str1_len, u8* str2,
int str2_len, u8* str3, int str3_len, u8* str4, int str4_len, u8* str5,
int str5_len);
extern int mChoice_Get_ChoseNum(mChoice_c* choice);
extern void mChoice_Clear_ChoseNum(mChoice_c* choice);
extern void mChoice_Load_ChoseStringFromRom(mChoice_c* choice, u8* str, int str_no, ACTOR* actor);
extern void mChoice_no_b_set(mChoice_c* choice);
extern void mChoice_no_b_close_set(mChoice_c* choice);
/* Macros */
#define mChoice_GET_CHOSENUM() mChoice_Get_ChoseNum(mChoice_Get_base_window_p())
#define mChoice_CLEAR_CHOSENUM() mChoice_Clear_ChoseNum(mChoice_Get_base_window_p())
#define mChoice_NO_B_SET() mChoice_no_b_set(mChoice_Get_base_window_p())
#define mChoice_NO_B_CLOSE_SET() mChoice_no_b_close_set(mChoice_Get_base_window_p())
#ifdef __cplusplus
}
#endif
+2 -1
View File
@@ -23,6 +23,7 @@
#include "ac_shop_umbrella.h"
#include "ac_handOverItem.h"
#include "ac_quest_manager_clip.h"
#include "ac_shop_goods_h.h"
#ifdef __cplusplus
extern "C" {
@@ -63,7 +64,7 @@ typedef struct clip_s {
/* 0x0A4 */ mDemo_Clip_c* demo_clip2; /* can be multiple clip classes */
/* 0x0A8 */ void* _0A8;
/* 0x0AC */ aGYO_Clip_c* gyo_clip;
/* 0x0B0 */ void* _0B0;
/* 0x0B0 */ aSG_Clip_c* shop_goods_clip;
/* 0x0B4 */ void* _0B4;
/* 0x0B8 */ aShopUmbrella_Clip_c* shop_umbrella_clip;
/* 0x0BC */ aAR_Clip_c* arrange_room_clip;
+9
View File
@@ -277,6 +277,15 @@ extern int mCoBG_GetHoleNumber_ClData(mCoBG_Collision_u* col);
extern void mCoBG_GetBgNorm_FromWpos(xyz_t* norm, xyz_t wpos);
extern int mCoBG_GetWaterFlow(xyz_t* water_flow, u32 attr);
extern void mCoBG_SetAttribute(xyz_t pos, u32 attr);
extern int mCoBG_GetPointInfoFrontLine(f32* line, f32* check_pos, f32* norm);
extern int mCoBG_GetCrossCircleAndLine2Dvector(f32* cross0_xz, f32* cross1_xz, f32* point_xz, f32* vec_xz,
f32* center_xz, f32 radius);
extern f32 mCoBG_GetVectorProductin2D(f32* vec0_xz, f32* vec1_xz);
extern int mCoBG_GetCrossLineAndPerpendicular(f32* cross_xz, f32* start_xz, f32* end_xz, f32* point_xz);
extern int mCoBG_RangeCheckLinePoint(f32* start_xz, f32* end_xz, f32* point_xz);
extern int mCoBG_GetDistPointAndLine2D_Norm(f32* dist, f32* start_xz, f32* end_xz, f32* norm, f32* point_xz);
extern f32 mCoBG_Get2VectorAngleF(f32* v0, f32* v1, u8 type);
extern int mCoBG_CheckUtFlat(const xyz_t* pos);
extern void mCoBG_InitMoveBgData();
extern void mCoBG_InitBlockBgCheckMode();
+5 -3
View File
@@ -256,7 +256,7 @@ typedef struct common_data_s {
/* 0x0287FA */ u8 _287FA[0x28838 - 0x0287FA];
/* 0x028838 */ s8 player_bee_swell_flag;
/* 0x028839 */ s8 player_bee_chase_flag;
/* 0x02883A */ u8 goki_shocked_flag;
/* 0x02883A */ s8 goki_shocked_flag;
/* 0x02883B */ u8 time_changed_flag;
/* 0x02883C */ u8 unable_to_wade_flag;
/* 0x02883D */ u8 _02883D;
@@ -310,11 +310,11 @@ typedef struct common_data_s {
/* 0x02DBA4 */ s16 island_weather_intensity;
/* 0x02DBA6 */ s16 _2DBA6;
/* 0x02DBA8 */ u8 memcard_slot;
/* 0X02DBAC */ int famicom_2DBAC;
/* 0X02DBAC */ int my_room_message_control_flags;
/* 0x02DBB0 */ s16 can_look_goki_count;
/* 0x02DBB4 */ f32 rainbow_opacity; /* current opacity of rainbow (0.0f - 1.0f) */
/* 0x02DBB8 */ u32 event_flags[mEv_EVENT_TYPE_NUM];
/* 0x02DBD4 */ xyz_t* pluss_bridge_pos; /* position of extra bridge */
/* 0x02DBD4 */ const xyz_t* pluss_bridge_pos; /* position of extra bridge */
/* 0x02DBD8 */ lbRTC_time_c auto_nwrite_time; /* cached notice time used for fishing tourney results? */
/* 0x02DBE0 */ u8 rhythym_updated;
/* 0x02DBE1 */ u8 _2dbe1;
@@ -341,6 +341,8 @@ extern common_data_t common_data;
#define Player_Palette_Get(idx) (Common_Get(now_private->my_org[idx].palette))
#define Player_Design_Get(idx) (Common_GetPointer(now_private->my_org[idx].design))
#define Now_Private (Common_Get(now_private))
#define Able_Sisters_Palette_Get(idx) (Save_Get(needlework.original_design[idx].palette))
#define Able_Sisters_Design_Get(idx) (Save_GetPointer(needlework.original_design[idx].design))
#define Able_Sisters_Cloth_Palette_Get(idx) (Able_Sisters_Palette_Get(idx))
+106 -109
View File
@@ -15,8 +15,8 @@ extern "C" {
#define mFI_UNIT_BASE_SIZE 40
#define mFI_UNIT_BASE_SIZE_F ((f32)mFI_UNIT_BASE_SIZE)
#define mFI_UT_WORLDSIZE_X 40
#define mFI_UT_WORLDSIZE_Z 40
#define mFI_UT_WORLDSIZE_X mFI_UNIT_BASE_SIZE
#define mFI_UT_WORLDSIZE_Z mFI_UNIT_BASE_SIZE
#define mFI_UT_WORLDSIZE_X_F ((f32)mFI_UT_WORLDSIZE_X)
#define mFI_UT_WORLDSIZE_Z_F ((f32)mFI_UT_WORLDSIZE_Z)
@@ -30,6 +30,8 @@ extern "C" {
#define mFI_BK_WORLDSIZE_X_F (mFI_UT_WORLDSIZE_X_F * UT_X_NUM)
#define mFI_BK_WORLDSIZE_Z_F (mFI_UT_WORLDSIZE_Z_F * UT_Z_NUM)
#define mFI_POS2UT(pos) ((int)((pos) / mFI_UNIT_BASE_SIZE_F))
#define mFI_ROW_TO_CHARSTR(row) ((row) + 'A')
#define mFI_COL_TO_CHARSTR(col) ((col) + '0')
@@ -39,24 +41,24 @@ extern "C" {
#define mFI_MAX_SHELLS_PER_BLOCK 4
enum field_type {
mFI_FIELDTYPE_FG,
mFI_FIELDTYPE_1,
mFI_FIELDTYPE_2,
mFI_FIELDTYPE_ROOM,
mFI_FIELDTYPE_NPC_ROOM,
mFI_FIELDTYPE_DEMO,
mFI_FIELDTYPE_PLAYER_ROOM,
mFI_FIELDTYPE_FG,
mFI_FIELDTYPE_1,
mFI_FIELDTYPE_2,
mFI_FIELDTYPE_ROOM,
mFI_FIELDTYPE_NPC_ROOM,
mFI_FIELDTYPE_DEMO,
mFI_FIELDTYPE_PLAYER_ROOM,
mFI_FIELDTYPE_NUM
mFI_FIELDTYPE_NUM
};
enum field_type2 {
mFI_FIELDTYPE2_FG,
mFI_FIELDTYPE2_PLAYER_ROOM,
mFI_FIELDTYPE2_NPC_ROOM,
mFI_FIELDTYPE2_ROOM,
mFI_FIELDTYPE2_FG,
mFI_FIELDTYPE2_PLAYER_ROOM,
mFI_FIELDTYPE2_NPC_ROOM,
mFI_FIELDTYPE2_ROOM,
mFI_FIELDTYPE2_NUM
mFI_FIELDTYPE2_NUM
};
#define mFI_TO_FIELD_ID(type, index) (((type) << 12) | (index))
@@ -64,134 +66,126 @@ enum field_type2 {
#define mFI_TYPE(type) ((type) << 12)
enum field_room {
/* TODO: others */
mFI_FIELD_FG = mFI_TO_FIELD_ID(mFI_FIELDTYPE_FG, 0),
/* TODO: others */
mFI_FIELD_FG = mFI_TO_FIELD_ID(mFI_FIELDTYPE_FG, 0),
mFI_FIELD_ROOM0 = mFI_TO_FIELD_ID(mFI_FIELDTYPE_ROOM, 0),
mFI_FIELD_ROOM_SHOP0, /* 0x3001 */
mFI_FIELD_ROOM_BROKER_SHOP, /* 0x3002 */
mFI_FIELD_ROOM_POST_OFFICE, /* 0x3003 */
mFI_FIELD_ROOM_POLICE_BOX, /* 0x3004 */
mFI_FIELD_ROOM_BUGGY, /* 0x3005 */
mFI_FIELD_ROOM_SHOP1, /* 0x3006 */
mFI_FIELD_ROOM_SHOP2, /* 0x3007 */
mFI_FIELD_ROOM_SHOP3_1, /* 0x3008 */
mFI_FIELD_ROOM_SHOP3_2, /* 0x3009 */
mFI_FIELD_ROOM_KAMAKURA, /* 0x300A */
mFI_FIELD_ROOM_MUSEUM_ENTRANCE, /* 0x300B */
mFI_FIELD_ROOM_MUSEUM_PAINTING, /* 0x300C */
mFI_FIELD_ROOM_MUSEUM_FOSSIL, /* 0x300D */
mFI_FIELD_ROOM_MUSEUM_INSECT, /* 0x300E */
mFI_FIELD_ROOM_MUSEUM_FISH, /* 0x300F */
mFI_FIELD_ROOM_NEEDLEWORK, /* 0x3010 */
mFI_FIELD_ROOM_LIGHTHOUSE, /* 0x3011 */
mFI_FIELD_ROOM_TENT, /* 0x3012 */
mFI_FIELD_ROOM0 = mFI_TO_FIELD_ID(mFI_FIELDTYPE_ROOM, 0),
mFI_FIELD_ROOM_SHOP0, /* 0x3001 */
mFI_FIELD_ROOM_BROKER_SHOP, /* 0x3002 */
mFI_FIELD_ROOM_POST_OFFICE, /* 0x3003 */
mFI_FIELD_ROOM_POLICE_BOX, /* 0x3004 */
mFI_FIELD_ROOM_BUGGY, /* 0x3005 */
mFI_FIELD_ROOM_SHOP1, /* 0x3006 */
mFI_FIELD_ROOM_SHOP2, /* 0x3007 */
mFI_FIELD_ROOM_SHOP3_1, /* 0x3008 */
mFI_FIELD_ROOM_SHOP3_2, /* 0x3009 */
mFI_FIELD_ROOM_KAMAKURA, /* 0x300A */
mFI_FIELD_ROOM_MUSEUM_ENTRANCE, /* 0x300B */
mFI_FIELD_ROOM_MUSEUM_PAINTING, /* 0x300C */
mFI_FIELD_ROOM_MUSEUM_FOSSIL, /* 0x300D */
mFI_FIELD_ROOM_MUSEUM_INSECT, /* 0x300E */
mFI_FIELD_ROOM_MUSEUM_FISH, /* 0x300F */
mFI_FIELD_ROOM_NEEDLEWORK, /* 0x3010 */
mFI_FIELD_ROOM_LIGHTHOUSE, /* 0x3011 */
mFI_FIELD_ROOM_TENT, /* 0x3012 */
mFI_FIELD_NPCROOM0 = mFI_TO_FIELD_ID(mFI_FIELDTYPE_NPC_ROOM, 0),
mFI_FIELD_NPCROOM_FIELD_TOOL_INSIDE,
mFI_FIELD_NPCROOM0 = mFI_TO_FIELD_ID(mFI_FIELDTYPE_NPC_ROOM, 0),
mFI_FIELD_NPCROOM_FIELD_TOOL_INSIDE,
mFI_FIELD_DEMO_STARTDEMO = mFI_TO_FIELD_ID(mFI_FIELDTYPE_DEMO, 0),
mFI_FIELD_DEMO_STARTDEMO2,
mFI_FIELD_DEMO_PLAYERSELECT,
mFI_FIELD_DEMO_STARTDEMO3,
mFI_FIELD_DEMO_STARTDEMO = mFI_TO_FIELD_ID(mFI_FIELDTYPE_DEMO, 0),
mFI_FIELD_DEMO_STARTDEMO2,
mFI_FIELD_DEMO_PLAYERSELECT,
mFI_FIELD_DEMO_STARTDEMO3,
mFI_FIELD_PLAYER0_ROOM = mFI_TO_FIELD_ID(mFI_FIELDTYPE_PLAYER_ROOM, 0),
mFI_FIELD_PLAYER1_ROOM,
mFI_FIELD_PLAYER2_ROOM,
mFI_FIELD_PLAYER3_ROOM,
mFI_FIELD_PLAYER0_ROOM = mFI_TO_FIELD_ID(mFI_FIELDTYPE_PLAYER_ROOM, 0),
mFI_FIELD_PLAYER1_ROOM,
mFI_FIELD_PLAYER2_ROOM,
mFI_FIELD_PLAYER3_ROOM,
/* TODO: others */
/* TODO: others */
};
#define mFI_GET_PLAYER_ROOM_NO(field_id) (((field_id)-mFI_FIELD_PLAYER0_ROOM) & 3)
#define mFI_IS_PLAYER_ROOM(field_id) \
((field_id) == mFI_FIELD_PLAYER0_ROOM || (field_id) == mFI_FIELD_PLAYER1_ROOM || \
(field_id) == mFI_FIELD_PLAYER2_ROOM || (field_id) == mFI_FIELD_PLAYER3_ROOM)
#define mFI_GET_PLAYER_ROOM_NO(field_id) (((field_id) - mFI_FIELD_PLAYER0_ROOM) & 3)
#define mFI_IS_PLAYER_ROOM(field_id) \
((field_id) == mFI_FIELD_PLAYER0_ROOM || (field_id) == mFI_FIELD_PLAYER1_ROOM || \
(field_id) == mFI_FIELD_PLAYER2_ROOM || (field_id) == mFI_FIELD_PLAYER3_ROOM)
/* "wade" between acres (acre transition) */
enum player_wade_state {
mFI_WADE_NONE,
mFI_WADE_START,
mFI_WADE_INPROGRESS,
mFI_WADE_END,
mFI_WADE_ERROR,
mFI_WADE_NONE,
mFI_WADE_START,
mFI_WADE_INPROGRESS,
mFI_WADE_END,
mFI_WADE_ERROR,
mFI_WADE_NUM
mFI_WADE_NUM
};
enum {
mFI_DEPOSIT_ON,
mFI_DEPOSIT_OFF,
mFI_DEPOSIT_GET,
mFI_DEPOSIT_ON,
mFI_DEPOSIT_OFF,
mFI_DEPOSIT_GET,
mFI_DEPOSIT_NUM
mFI_DEPOSIT_NUM
};
enum {
mFI_MOVEDIR_NONE,
mFI_MOVEDIR_RIGHT,
mFI_MOVEDIR_LEFT,
mFI_MOVEDIR_UP,
mFI_MOVEDIR_DOWN,
mFI_MOVEDIR_NONE,
mFI_MOVEDIR_RIGHT,
mFI_MOVEDIR_LEFT,
mFI_MOVEDIR_UP,
mFI_MOVEDIR_DOWN,
mFI_MOVEDIR_NUM
mFI_MOVEDIR_NUM
};
/* Not sure about these other than the island one */
enum { mFI_CLIMATE_0, mFI_CLIMATE_ISLAND, mFI_CLIMATE_2, mFI_CLIMATE_3, mFI_CLIMATE_4, mFI_CLIMATE_5, mFI_CLIMATE_NUM };
enum {
mFI_CLIMATE_0,
mFI_CLIMATE_ISLAND,
mFI_CLIMATE_2,
mFI_CLIMATE_3,
mFI_CLIMATE_4,
mFI_CLIMATE_5,
mFI_CLIMATE_NUM
mFI_DIGSTATUS_MISS,
mFI_DIGSTATUS_CANCEL,
mFI_DIGSTATUS_FILLIN,
mFI_DIGSTATUS_DIG,
mFI_DIGSTATUS_PUT_ITEM,
mFI_DIGSTATUS_GET_ITEM,
mFI_DIGSTATUS_NUM
};
enum {
mFI_DIGSTATUS_MISS,
mFI_DIGSTATUS_CANCEL,
mFI_DIGSTATUS_FILLIN,
mFI_DIGSTATUS_DIG,
mFI_DIGSTATUS_PUT_ITEM,
mFI_DIGSTATUS_GET_ITEM,
mFI_DIGSTATUS_NUM
};
mFI_SET_STRUCTURE_SET,
mFI_SET_STRUCTURE_REMOVE,
enum {
mFI_SET_STRUCTURE_SET,
mFI_SET_STRUCTURE_REMOVE,
mFI_SET_STRUCTURE_NUM
mFI_SET_STRUCTURE_NUM
};
/* sizeof(mFI_unit_c) == 0x14 */
typedef struct location_info_s {
/* 0x00 */ int block_x;
/* 0x04 */ int block_z;
/* 0x08 */ int unit_x;
/* 0x0C */ int unit_z;
/* 0x10 */ mActor_name_t* block_data;
/* 0x00 */ int block_x;
/* 0x04 */ int block_z;
/* 0x08 */ int unit_x;
/* 0x0C */ int unit_z;
/* 0x10 */ mActor_name_t* block_data;
} mFI_unit_c;
typedef struct block_table_s {
s8 block_x;
s8 block_z;
s8 block_x;
s8 block_z;
f32 pos_x;
f32 pos_z;
f32 pos_x;
f32 pos_z;
mActor_name_t* items;
mActor_name_t* items;
} mFI_block_tbl_c;
typedef struct visible_block_item_info_s {
int count;
mFI_block_tbl_c block_info_tbl[mFM_VISIBLE_BLOCK_NUM];
int count;
mFI_block_tbl_c block_info_tbl[mFM_VISIBLE_BLOCK_NUM];
} mFI_item_table_c;
enum {
mFI_SOUND_SOURCE_POND = 3, // TODO: might not be correct name
mFI_SOUND_SOURCE_POND = 3, // TODO: might not be correct name
};
extern void mFI_ClearFieldData();
@@ -269,7 +263,7 @@ extern int mFI_GetItemTable(mFI_item_table_c* item_table, xyz_t wpos, char* file
extern int mFI_FGisUpDate();
extern void mFI_SetFGUpData();
extern void mFI_BornItemON();
//extern MATCH_FORCESTRIP void mFI_BornItemOFF();
// extern MATCH_FORCESTRIP void mFI_BornItemOFF();
extern int mFI_ItemisBorn();
extern int mFI_ActorisBorn();
extern void mFI_SetBearActor(GAME_PLAY* play, xyz_t wpos, int set_flag);
@@ -288,9 +282,10 @@ extern void mFI_SetMoveActorBitData(int bx, int bz, u16 move_actor_bit_data);
extern void mFI_SetMoveActorBitData_ON(s16 move_actor_idx, int bx, int bz);
extern void mFI_SetMoveActorBitData_OFF(s16 move_actor_idx, int bx, int bz);
extern void mFI_MyMoveActorBitData_ON(ACTOR* actor);
//extern MATCH_FORCESTRIP void mFI_MyMoveActorBitData_OFF(ACTOR* actor);
// extern MATCH_FORCESTRIP void mFI_MyMoveActorBitData_OFF(ACTOR* actor);
extern int mFI_GetMoveActorListIdx(mFM_move_actor_c* move_actor_list, int list_size, mActor_name_t actor_name);
extern int mFI_RegistMoveActorList(mActor_name_t actor_name, int bx, int bz, int ut_x, int ut_z, int npc_info_idx, s16 arg);
extern int mFI_RegistMoveActorList(mActor_name_t actor_name, int bx, int bz, int ut_x, int ut_z, int npc_info_idx,
s16 arg);
extern int mFI_UnregistMoveActorList(mActor_name_t actor_name, int bx, int bz);
extern int mFI_AddMoveActorList(mActor_name_t actor_name, int bx, int bz, int ut_x, int ut_z, s16 arg);
extern mFM_move_actor_c* mFI_MoveActorListDma(int bx, int bz);
@@ -302,12 +297,12 @@ extern int mFI_GetNextBlockNum(int* bx, int* bz);
extern u16* mFI_GetDepositP(int bx, int bz);
extern void mFI_ClearDeposit(int bx, int bz);
extern int mFI_GetLineDeposit(u16* deposit, int ut_x);
//extern MATCH_FORCESTRIP void mFI_BlockDepositON(u16* deposit_p, int ut_x, int ut_z);
// extern MATCH_FORCESTRIP void mFI_BlockDepositON(u16* deposit_p, int ut_x, int ut_z);
extern void mFI_BlockDepositOFF(u16* deposit_p, int ut_x, int ut_z);
extern int mFI_GetBlockDeposit(u16* deposit_p, int ut_x, int ut_z);
//extern MATCH_FORCESTRIP void mFI_BkUtNum2DepositON(int bx, int bz, int ut_x, int ut_z);
// extern MATCH_FORCESTRIP void mFI_BkUtNum2DepositON(int bx, int bz, int ut_x, int ut_z);
extern void mFI_BkUtNum2DepositOFF(int bx, int bz, int ut_x, int ut_z);
//extern MATCH_FORCESTRIP int mFI_BkUtNum2DepositGet(int bx, int bz, int ut_x, int ut_z);
// extern MATCH_FORCESTRIP int mFI_BkUtNum2DepositGet(int bx, int bz, int ut_x, int ut_z);
extern void mFI_UtNum2DepositON(int ut_x, int ut_z);
extern void mFI_UtNum2DepositOFF(int ut_x, int ut_z);
extern int mFI_UtNum2DepositGet(int ut_x, int ut_z);
@@ -320,12 +315,14 @@ extern int mFI_GetDigStatus(mActor_name_t* item, xyz_t wpos, int golden_shovel);
extern void mFI_ClearHoleBlock(int bx, int bz);
extern void mFI_ClearBeecomb(int bx, int bz);
extern int mFI_SetFGStructure_common(mActor_name_t structure_name, int bx, int bz, int ut_x, int ut_z, int set_type);
extern int mFI_CheckStructureArea(int ut_x, int ut_z, mActor_name_t structure_name, int structure_ut_x, int structure_ut_z);
extern int mFI_CheckStructureArea(int ut_x, int ut_z, mActor_name_t structure_name, int structure_ut_x,
int structure_ut_z);
extern mActor_name_t mFI_GetOtherFruit();
extern int mFI_CheckFGNpcOn(mActor_name_t item);
extern int mFI_CheckLapPolice(int bx, int bz, int ut_x, int ut_z);
extern int mFI_GetWaveUtinBlock(int* ut_x, int* ut_z, int bx, int bz);
extern int mFI_ClearBlockItemRandom_common(mActor_name_t item, int clear_num, mActor_name_t* fg_p, u16* deposit_p, int delete_buried);
extern int mFI_ClearBlockItemRandom_common(mActor_name_t item, int clear_num, mActor_name_t* fg_p, u16* deposit_p,
int delete_buried);
extern void mFI_SetFirstSetShell();
extern void mFI_FieldMove(xyz_t player_pos);
extern void mFI_PrintNowBGNum(gfxprint_t* gfxprint);
+105 -103
View File
@@ -19,169 +19,171 @@ extern "C" {
#define mHm_LAYER_NUM 4
enum {
mHm_ROOM_MAIN,
mHm_ROOM_UPPER,
mHm_ROOM_BASEMENT,
mHm_ROOM_MAIN,
mHm_ROOM_UPPER,
mHm_ROOM_BASEMENT,
mHm_ROOM_NUM
mHm_ROOM_NUM
};
enum {
mHm_ROOMTYPE_SMALL,
mHm_ROOMTYPE_MEDIUM,
mHm_ROOMTYPE_LARGE,
mHm_ROOMTYPE_COTTAGE,
mHm_ROOMTYPE_SMALL,
mHm_ROOMTYPE_MEDIUM,
mHm_ROOMTYPE_LARGE,
mHm_ROOMTYPE_COTTAGE,
mHm_ROOMTYPE_NUM
mHm_ROOMTYPE_NUM
};
enum {
mHm_HOMESIZE_SMALL, /* initial size */
mHm_HOMESIZE_MEDIUM, /* paid off first debt */
mHm_HOMESIZE_LARGE, /* paid off second debt (excluding basement) */
mHm_HOMESIZE_UPPER, /* paid off third debt & basement */
mHm_HOMESIZE_STATUE, /* paid off final debt */
mHm_HOMESIZE_SMALL, /* initial size */
mHm_HOMESIZE_MEDIUM, /* paid off first debt */
mHm_HOMESIZE_LARGE, /* paid off second debt (excluding basement) */
mHm_HOMESIZE_UPPER, /* paid off third debt & basement */
mHm_HOMESIZE_STATUE, /* paid off final debt */
mHm_HOMESIZE_NUM
mHm_HOMESIZE_NUM
};
enum {
mHm_HANIWA_TRADE_0,
mHm_HANIWA_TRADE_1,
mHm_HANIWA_TRADE_2,
mHm_HANIWA_TRADE_3,
mHm_HANIWA_TRADE_NUM
mHm_HANIWA_TRADE_0,
mHm_HANIWA_TRADE_1,
mHm_HANIWA_TRADE_2,
mHm_HANIWA_TRADE_3,
mHm_HANIWA_TRADE_NUM
};
enum {
mHm_OUTLOOK_PAL_0,
mHm_OUTLOOK_PAL_1,
mHm_OUTLOOK_PAL_2,
mHm_OUTLOOK_PAL_3,
mHm_OUTLOOK_PAL_4,
mHm_OUTLOOK_PAL_5,
mHm_OUTLOOK_PAL_6,
mHm_OUTLOOK_PAL_7,
mHm_OUTLOOK_PAL_8,
mHm_OUTLOOK_PAL_9,
mHm_OUTLOOK_PAL_10,
mHm_OUTLOOK_PAL_11,
mHm_OUTLOOK_PAL_0,
mHm_OUTLOOK_PAL_1,
mHm_OUTLOOK_PAL_2,
mHm_OUTLOOK_PAL_3,
mHm_OUTLOOK_PAL_4,
mHm_OUTLOOK_PAL_5,
mHm_OUTLOOK_PAL_6,
mHm_OUTLOOK_PAL_7,
mHm_OUTLOOK_PAL_8,
mHm_OUTLOOK_PAL_9,
mHm_OUTLOOK_PAL_10,
mHm_OUTLOOK_PAL_11,
mHm_OUTLOOK_PAL_NUM
mHm_OUTLOOK_PAL_NUM
};
/* sizeof(mHm_rmsz_c) == 6 */
typedef struct home_size_info_s {
/* 0x00 */ struct {
/* 0x00 */ u8 day;
/* 0x01 */ u8 month;
/* 0x02 */ u16 year;
} upgrade_order_date; /* date you ordered an upgrade, seems to be a struct */
/* 0x00 */ struct {
/* 0x00 */ u8 day;
/* 0x01 */ u8 month;
/* 0x02 */ u16 year;
} upgrade_order_date; /* date you ordered an upgrade, seems to be a struct */
/* 0x04 */ u8 size:3; /* current house size */
/* 0x04 */ u8 next_size:3; /* next house size when upgrade is ordered */
/* 0x04 */ u8 statue_rank:2; /* statue ranking, 0 = gold, 1 = silver, 2 = bronze, 3 = jade */
/* 0x05 */ u8 renew:1; /* refresh house size & 'outlook' palette */
/* 0x05 */ u8 statue_ordered:1; /* set when statue is ordered from Nook */
/* 0x05 */ u8 basement_ordered:1; /* set when basement has been ordered */
/* 0x05 */ u8 pad:5; /* unused? */
/* 0x04 */ u8 size : 3; /* current house size */
/* 0x04 */ u8 next_size : 3; /* next house size when upgrade is ordered */
/* 0x04 */ u8 statue_rank : 2; /* statue ranking, 0 = gold, 1 = silver, 2 = bronze, 3 = jade */
/* 0x05 */ u8 renew : 1; /* refresh house size & 'outlook' palette */
/* 0x05 */ u8 statue_ordered : 1; /* set when statue is ordered from Nook */
/* 0x05 */ u8 basement_ordered : 1; /* set when basement has been ordered */
/* 0x05 */ u8 pad : 5; /* unused? */
} mHm_rmsz_c;
/* sizeof(Haniwa_Item_c) == 8 */
typedef struct home_haniwa_item_s {
/* 0x00 */ mActor_name_t item; /* held item */
/* 0x02 */ s16 exchange_type; /* type of exchange (sale, free, trade) */
/* 0x04 */ u32 extra_data; /* trade related data */
/* 0x00 */ mActor_name_t item; /* held item */
/* 0x02 */ s16 exchange_type; /* type of exchange (sale, free, trade) */
/* 0x04 */ u32 extra_data; /* trade related data */
} Haniwa_Item_c;
/* sizeof(Haniwa_c) == 0xA4 */
typedef struct home_haniwa_s {
/* 0x00 */ Haniwa_Item_c items[HANIWA_ITEM_HOLD_NUM]; /* held items */
/* 0x20 */ u8 message[HANIWA_MESSAGE_LEN]; /* message for visitors */
/* 0xA0 */ u32 bells; /* held bells from selling items */
/* 0x00 */ Haniwa_Item_c items[HANIWA_ITEM_HOLD_NUM]; /* held items */
/* 0x20 */ u8 message[HANIWA_MESSAGE_LEN]; /* message for visitors */
/* 0xA0 */ u32 bells; /* held bells from selling items */
} Haniwa_c;
/* sizeof(mHm_wf_c) == 2 */
typedef struct home_wall_floor_s {
/* 0x00 */ u8 flooring_idx;
/* 0x01 */ u8 wallpaper_idx;
/* 0x00 */ u8 flooring_idx;
/* 0x01 */ u8 wallpaper_idx;
} mHm_wf_c;
/* sizeof(mHm_goki_c) == 0xA */
typedef struct home_goki_s {
/* 0x00 */ lbRTC_time_c time; /* last time updated */
/* 0x08 */ u8 num; /* number of cockroaches in the house */
/* 0x09 */ u8 pad; /* unused outside of being initalized to 0 */
/* 0x00 */ lbRTC_time_c time; /* last time updated */
/* 0x08 */ u8 num; /* number of cockroaches in the house */
/* 0x09 */ u8 pad; /* unused outside of being initalized to 0 */
} mHm_goki_c;
/* sizeof(mHm_lyr_c) == 0x228 */
typedef struct home_layer_s {
/* 0x000 */ mActor_name_t items[UT_Z_NUM][UT_X_NUM]; /* Furniture item actors */
/* 0x200 */ u64 ftr_switch; /* Bitfield for controlling which furniture items are active, max of 64 */
/* 0x208 */ u32 unk_208[8]; /* Only referenced in mISL_gc_to_agb_layer */
/* 0x000 */ mActor_name_t items[UT_Z_NUM][UT_X_NUM]; /* Furniture item actors */
/* 0x200 */ u64 ftr_switch; /* Bitfield for controlling which furniture items are active, max of 64 */
/* 0x208 */ u32 haniwa_step[8]; /* Only referenced in mISL_gc_to_agb_layer */
} mHm_lyr_c;
typedef struct floor_bit_info_s {
u8 wall_original:1; /* is wallpaper a pattern (original)? */
u8 floor_original:1; /* is flooring a pattern (original)? */
u8 bit_2_7:6; /* unused? */
u8 wall_original : 1; /* is wallpaper a pattern (original)? */
u8 floor_original : 1; /* is flooring a pattern (original)? */
u8 bit_2_7 : 6; /* unused? */
} mHm_fllot_bit_c;
/* sizeof(mHm_flr_c) == 0x8A8 */
typedef struct home_floor_s {
/* 0x000 */ mHm_lyr_c layer_main;
/* 0x228 */ mHm_lyr_c layer_secondary; /* Also storage layer 0 */
/* 0x450 */ mHm_lyr_c layer_storage1;
/* 0x678 */ mHm_lyr_c layer_storage2;
/* 0x8A0 */ mHm_wf_c wall_floor;
/* 0x8A2 */ TempoBeat_c tempo_beat;
/* 0x8A4 */ mHm_fllot_bit_c floor_bit_info;
/* 0x000 */ mHm_lyr_c layer_main;
/* 0x228 */ mHm_lyr_c layer_secondary; /* Also storage layer 0 */
/* 0x450 */ mHm_lyr_c layer_storage1;
/* 0x678 */ mHm_lyr_c layer_storage2;
/* 0x8A0 */ mHm_wf_c wall_floor;
/* 0x8A2 */ TempoBeat_c tempo_beat;
/* 0x8A4 */ mHm_fllot_bit_c floor_bit_info;
} mHm_flr_c;
/* sizeof(mHm_flg_c) == 1 */
typedef struct home_flags_s {
u8 house_updated:1; /* signals HRA to re-score house */
u8 has_saved:1; /* whether or not the player has saved at this house before */
u8 hra_member:1; /* whether or not the house has been setup for HRA membership */
u8 has_basement:1; /* set when the basement is built */
u8 hra_reward0:1; /* earned 70k HRA points reward */
u8 hra_reward1:1; /* earned 100k HRA points reward */
u8 bit_6:1; /* unused */
u8 bit_7:1; /* unused */
u8 house_updated : 1; /* signals HRA to re-score house */
u8 has_saved : 1; /* whether or not the player has saved at this house before */
u8 hra_member : 1; /* whether or not the house has been setup for HRA membership */
u8 has_basement : 1; /* set when the basement is built */
u8 hra_reward0 : 1; /* earned 70k HRA points reward */
u8 hra_reward1 : 1; /* earned 100k HRA points reward */
u8 bit_6 : 1; /* unused */
u8 bit_7 : 1; /* unused */
} mHm_flg_c;
/* sizeof(mHm_hs_c) == 0x26B0 */
typedef struct home_s {
/* 0x0000 */ PersonalID_c ownerID; /* owner player's ID */
/* 0x0014 */ u8 unk_14[6];
/* 0x001A */ TempoBeat_c haniwa_tempo; /* unsure about this */
/* 0x001C */ lbRTC_ymd_c hra_mark_time; /* last HRA judge date */
/* 0x0020 */ u32 hra_mark_info; /* bitfield of HRA info pulled when HRA mails letter */
/* 0x0024 */ mHm_flg_c flags;
/* 0x0026 */ mHm_rmsz_c size_info; /* home size info */
/* 0x002C */ u8 outlook_pal; /* current house palette */
/* 0x002D */ u8 ordered_outlook_pal; /* house palette ordered at Nook's via upgrade */
/* 0x002E */ u8 next_outlook_pal; /* next house palette set via all other means (villager, Wisp, paint @ Nook's, ...) */
/* 0x002F */ u8 door_original; /* player design shown on door, apparently called 'original', maybe 'original design'? */
/* 0x0030 */ u8 unk_30[8]; /* unused? */
/* 0x0038 */ mHm_flr_c floors[mHm_ROOM_NUM]; /* house floors, might be a union idk */
/* 0x1A30 */ Mail_c mailbox[HOME_MAILBOX_SIZE]; /* mailbox */
/* 0x25D4 */ Haniwa_c haniwa; /* gyroid info */
/* 0x2678 */ mHm_goki_c goki; /* cockroach info */
/* 0x2684 */ u32 music_box[2]; /* bitfield of inserted music */
/* 0x268C */ u8 unk_286C[36]; /* unused? */
/* 0x0000 */ PersonalID_c ownerID; /* owner player's ID */
/* 0x0014 */ u8 unk_14[6];
/* 0x001A */ TempoBeat_c haniwa_tempo; /* unsure about this */
/* 0x001C */ lbRTC_ymd_c hra_mark_time; /* last HRA judge date */
/* 0x0020 */ u32 hra_mark_info; /* bitfield of HRA info pulled when HRA mails letter */
/* 0x0024 */ mHm_flg_c flags;
/* 0x0026 */ mHm_rmsz_c size_info; /* home size info */
/* 0x002C */ u8 outlook_pal; /* current house palette */
/* 0x002D */ u8 ordered_outlook_pal; /* house palette ordered at Nook's via upgrade */
/* 0x002E */ u8
next_outlook_pal; /* next house palette set via all other means (villager, Wisp, paint @ Nook's, ...) */
/* 0x002F */ u8
door_original; /* player design shown on door, apparently called 'original', maybe 'original design'? */
/* 0x0030 */ u8 unk_30[8]; /* unused? */
/* 0x0038 */ mHm_flr_c floors[mHm_ROOM_NUM]; /* house floors, might be a union idk */
/* 0x1A30 */ Mail_c mailbox[HOME_MAILBOX_SIZE]; /* mailbox */
/* 0x25D4 */ Haniwa_c haniwa; /* gyroid info */
/* 0x2678 */ mHm_goki_c goki; /* cockroach info */
/* 0x2684 */ u32 music_box[2]; /* bitfield of inserted music */
/* 0x268C */ u8 unk_286C[36]; /* unused? */
} mHm_hs_c;
/* sizeof(mHm_cottage_c) == 0x8C8 */
typedef struct home_cottage_s {
/* 0x000 */ mHm_wf_c unused_wall_floor; /* Has wallpaper & flooring bounds checks in sChk_CheckSaveData_Cattage */
/* 0x002 */ u8 unk_2[2]; /* struct/array that is two bytes long, maybe another wall floor? */
/* 0x004 */ u8 unk_4; /* direct copy in agb_to_gc_cottage, GBA only? */
/* 0x005 */ u8 unk_5; /* direct copy in agb_to_gc_cottage, GBA only? */
/* 0x008 */ mHm_flr_c room; /* Cottage room */
/* 0x8B0 */ mHm_goki_c goki; /* Cottage cockroaches */
/* 0x8BC */ u32 music_box[2]; /* Cottage music storage... separate from main home? */
/* 0x000 */ mHm_wf_c unused_wall_floor; /* Has wallpaper & flooring bounds checks in sChk_CheckSaveData_Cattage */
/* 0x002 */ u8 unk_2[2]; /* struct/array that is two bytes long, maybe another wall floor? */
/* 0x004 */ u8 unk_4; /* direct copy in agb_to_gc_cottage, GBA only? */
/* 0x005 */ u8 unk_5; /* direct copy in agb_to_gc_cottage, GBA only? */
/* 0x008 */ mHm_flr_c room; /* Cottage room */
/* 0x8B0 */ mHm_goki_c goki; /* Cottage cockroaches */
/* 0x8BC */ u32 music_box[2]; /* Cottage music storage... separate from main home? */
} mHm_cottage_c;
#ifdef __cplusplus
+186 -160
View File
@@ -21,86 +21,86 @@ extern "C" {
#define mMsg_BUTTON_TURN_TIME 60.0f
enum {
mMsg_INDEX_HIDE,
mMsg_INDEX_APPEAR,
mMsg_INDEX_NORMAL,
mMsg_INDEX_CURSOL,
mMsg_INDEX_DISAPPEAR,
mMsg_INDEX_APPEAR_WAIT,
mMsg_INDEX_WAIT,
mMsg_INDEX_DISAPPEAR_WAIT,
mMsg_INDEX_HIDE,
mMsg_INDEX_APPEAR,
mMsg_INDEX_NORMAL,
mMsg_INDEX_CURSOL,
mMsg_INDEX_DISAPPEAR,
mMsg_INDEX_APPEAR_WAIT,
mMsg_INDEX_WAIT,
mMsg_INDEX_DISAPPEAR_WAIT,
mMsg_INDEX_NUM
mMsg_INDEX_NUM
};
enum {
mMsg_FREE_STR0,
mMsg_FREE_STR1,
mMsg_FREE_STR2,
mMsg_FREE_STR3,
mMsg_FREE_STR4,
mMsg_FREE_STR5,
mMsg_FREE_STR6,
mMsg_FREE_STR7,
mMsg_FREE_STR8,
mMsg_FREE_STR9,
mMsg_FREE_STR10,
mMsg_FREE_STR11,
mMsg_FREE_STR12,
mMsg_FREE_STR13,
mMsg_FREE_STR14,
mMsg_FREE_STR15,
mMsg_FREE_STR16,
mMsg_FREE_STR17,
mMsg_FREE_STR18,
mMsg_FREE_STR19,
mMsg_FREE_STR0,
mMsg_FREE_STR1,
mMsg_FREE_STR2,
mMsg_FREE_STR3,
mMsg_FREE_STR4,
mMsg_FREE_STR5,
mMsg_FREE_STR6,
mMsg_FREE_STR7,
mMsg_FREE_STR8,
mMsg_FREE_STR9,
mMsg_FREE_STR10,
mMsg_FREE_STR11,
mMsg_FREE_STR12,
mMsg_FREE_STR13,
mMsg_FREE_STR14,
mMsg_FREE_STR15,
mMsg_FREE_STR16,
mMsg_FREE_STR17,
mMsg_FREE_STR18,
mMsg_FREE_STR19,
mMsg_FREE_STR_NUM
mMsg_FREE_STR_NUM
};
enum {
mMsg_ITEM_STR0,
mMsg_ITEM_STR1,
mMsg_ITEM_STR2,
mMsg_ITEM_STR3,
mMsg_ITEM_STR4,
mMsg_ITEM_STR0,
mMsg_ITEM_STR1,
mMsg_ITEM_STR2,
mMsg_ITEM_STR3,
mMsg_ITEM_STR4,
mMsg_ITEM_STR_NUM
mMsg_ITEM_STR_NUM
};
enum {
mMsg_MAIL_STR0,
mMsg_MAIL_STR0,
mMsg_MAIL_STR_NUM
mMsg_MAIL_STR_NUM
};
enum {
mMsg_RESULT_VOID,
mMsg_RESULT_FALSE,
mMsg_RESULT_TRUE,
mMsg_RESULT_VOID,
mMsg_RESULT_FALSE,
mMsg_RESULT_TRUE,
mMsg_RESULT_NUM
mMsg_RESULT_NUM
};
#define mMsg_STATUS_FLAG_SOUND_CUT (1 << 0) // 0x000001
#define mMsg_STATUS_FLAG_SOUND_CUT (1 << 0) // 0x000001
#define mMsg_STATUS_FLAG_NO_SE_PAGE_OKURI (1 << 1) // 0x000002
#define mMsg_STATUS_FLAG_NO_ZOOMUP (1 << 2) // 0x000004
#define mMsg_STATUS_FLAG_LAST_DELAY (1 << 3) // 0x000008
#define mMsg_STATUS_FLAG_SPEC_VOICE (1 << 4) // 0x000010
#define mMsg_STATUS_FLAG_VOICE_ENTRY (1 << 5) // 0x000020
#define mMsg_STATUS_FLAG_IDLING_REQ (1 << 6) // 0x000040
#define mMsg_STATUS_FLAG_IDLING_NOW (1 << 7) // 0x000080
#define mMsg_STATUS_FLAG_FAST_TEXT (1 << 8) // 0x000100
#define mMsg_STATUS_FLAG_NOT_PAUSE_FRAME (1 << 9) // 0x000200
#define mMsg_STATUS_FLAG_UTTER (1 << 10) // 0x000400
#define mMsg_STATUS_FLAG_NO_ZOOMDOWN (1 << 11) /* When set, mMsg_sound_ZOOMDOWN_[SHORT, LONG]() sfx will not play */
#define mMsg_STATUS_FLAG_VOICE_CLICK (1 << 12) // 0x001000
#define mMsg_STATUS_FLAG_VOICE_SILENT (1 << 13) // 0x002000
#define mMsg_STATUS_FLAG_CURSOL_JUST (1 << 14) /* Sets cursor justification */
#define mMsg_STATUS_FLAG_CUT_ARTICLE (1 << 15) // 0x008000
#define mMsg_STATUS_FLAG_CAPITALIZE (1 << 16) // 0x010000
#define mMsg_STATUS_FLAG_USE_AM (1 << 17) /* 'AM' when set, 'PM' when not set */
#define mMsg_STATUS_FLAG_18 (1 << 18) // 0x040000
#define mMsg_STATUS_FLAG_NO_ZOOMUP (1 << 2) // 0x000004
#define mMsg_STATUS_FLAG_LAST_DELAY (1 << 3) // 0x000008
#define mMsg_STATUS_FLAG_SPEC_VOICE (1 << 4) // 0x000010
#define mMsg_STATUS_FLAG_VOICE_ENTRY (1 << 5) // 0x000020
#define mMsg_STATUS_FLAG_IDLING_REQ (1 << 6) // 0x000040
#define mMsg_STATUS_FLAG_IDLING_NOW (1 << 7) // 0x000080
#define mMsg_STATUS_FLAG_FAST_TEXT (1 << 8) // 0x000100
#define mMsg_STATUS_FLAG_NOT_PAUSE_FRAME (1 << 9) // 0x000200
#define mMsg_STATUS_FLAG_UTTER (1 << 10) // 0x000400
#define mMsg_STATUS_FLAG_NO_ZOOMDOWN (1 << 11) /* When set, mMsg_sound_ZOOMDOWN_[SHORT, LONG]() sfx will not play */
#define mMsg_STATUS_FLAG_VOICE_CLICK (1 << 12) // 0x001000
#define mMsg_STATUS_FLAG_VOICE_SILENT (1 << 13) // 0x002000
#define mMsg_STATUS_FLAG_CURSOL_JUST (1 << 14) /* Sets cursor justification */
#define mMsg_STATUS_FLAG_CUT_ARTICLE (1 << 15) // 0x008000
#define mMsg_STATUS_FLAG_CAPITALIZE (1 << 16) // 0x010000
#define mMsg_STATUS_FLAG_USE_AM (1 << 17) /* 'AM' when set, 'PM' when not set */
#define mMsg_STATUS_FLAG_18 (1 << 18) // 0x040000
typedef struct message_window_s mMsg_Window_c;
typedef struct message_data_s mMsg_Data_c;
@@ -108,160 +108,160 @@ typedef struct message_data_s mMsg_Data_c;
/* These are hinted at due to the 8-byte alignment forced onto these structs */
typedef struct {
int saved_main_index;
int saved_main_index;
} mMsg_MainAppearWait_Data_c;
typedef struct {
int saved_main_index;
int saved_main_index;
} mMsg_MainDisappearWait_Data_c;
typedef struct {
int last_main_index;
int last_main_index;
} mMsg_MainWait_Data_c;
typedef union {
mMsg_MainAppearWait_Data_c main_appear_wait;
mMsg_MainDisappearWait_Data_c main_disappear_wait;
mMsg_MainWait_Data_c main_wait;
u64 align;
mMsg_MainAppearWait_Data_c main_appear_wait;
mMsg_MainDisappearWait_Data_c main_disappear_wait;
mMsg_MainWait_Data_c main_wait;
u64 align;
} mMsg_Main_Data_c;
typedef struct {
ACTOR* speaker_actor;
int msg_no;
int name_shown_flag;
rgba_t window_color;
ACTOR* speaker_actor;
int msg_no;
int name_shown_flag;
rgba_t window_color;
} mMsg_Request_MainAppear_Data_c;
typedef struct {
int last_main_index;
u32 setup_flag;
int last_main_index;
u32 setup_flag;
} mMsg_Request_MainAppearWait_Data_c;
typedef struct {
int wait_flag;
int wait_flag;
} mMsg_Request_MainCursor_Data_c;
typedef struct {
int last_main_index;
int last_main_index;
} mMsg_Request_MainDisappearWait_Data_c;
typedef struct {
int wait_flag;
int wait_flag;
} mMsg_Request_MainNormal_Data_c;
typedef struct {
int last_main_index;
int last_main_index;
} mMsg_Request_MainWait_Data_c;
typedef union {
mMsg_Request_MainAppear_Data_c request_main_appear;
mMsg_Request_MainAppearWait_Data_c request_main_appear_wait;
mMsg_Request_MainCursor_Data_c request_main_cursor;
mMsg_Request_MainDisappearWait_Data_c request_main_disappear_wait;
mMsg_Request_MainNormal_Data_c request_main_normal;
mMsg_Request_MainWait_Data_c request_main_wait;
u64 align;
mMsg_Request_MainAppear_Data_c request_main_appear;
mMsg_Request_MainAppearWait_Data_c request_main_appear_wait;
mMsg_Request_MainCursor_Data_c request_main_cursor;
mMsg_Request_MainDisappearWait_Data_c request_main_disappear_wait;
mMsg_Request_MainNormal_Data_c request_main_normal;
mMsg_Request_MainWait_Data_c request_main_wait;
u64 align;
} mMsg_Request_Data_c;
typedef union {
u8 data[mMsg_MSG_BUF_SIZE] ATTRIBUTE_ALIGN(32);
u64 align;
u8 data[mMsg_MSG_BUF_SIZE] ATTRIBUTE_ALIGN(32);
u64 align;
} mMsg_MsgBuf_c;
struct message_data_s {
int data_loaded;
int msg_no;
int msg_len;
int cut;
int data_loaded;
int msg_no;
int msg_len;
int cut;
mMsg_MsgBuf_c text_buf;
mMsg_MsgBuf_c text_buf;
};
struct message_window_s {
/* 0x000 */ int data_loaded;
/* 0x004 */ int msg_no;
/* 0x008 */ int _008;
/* 0x00C */ mMsg_Data_c* msg_data;
/* 0x010 */ f32 center_x;
/* 0x014 */ f32 center_y;
/* 0x018 */ f32 width;
/* 0x01C */ f32 height;
/* 0x020 */ ACTOR* client_actor_p;
/* 0x024 */ int show_actor_name;
/* 0x028 */ int client_name_len;
/* 0x02C */ f32 nameplate_x;
/* 0x030 */ f32 nameplate_y;
/* 0x000 */ int data_loaded;
/* 0x004 */ int msg_no;
/* 0x008 */ int _008;
/* 0x00C */ mMsg_Data_c* msg_data;
/* 0x010 */ f32 center_x;
/* 0x014 */ f32 center_y;
/* 0x018 */ f32 width;
/* 0x01C */ f32 height;
/* 0x034 */ int show_continue_button;
/* 0x020 */ ACTOR* client_actor_p;
/* 0x024 */ int show_actor_name;
/* 0x028 */ int client_name_len;
/* 0x02C */ f32 nameplate_x;
/* 0x030 */ f32 nameplate_y;
/* 0x038 */ u8 free_str[mMsg_FREE_STR_NUM][mMsg_FREE_STRING_LEN];
/* 0x178 */ int free_str_article[mMsg_FREE_STR_NUM];
/* 0x034 */ int show_continue_button;
/* 0x1C8 */ u8 item_str[mMsg_ITEM_STR_NUM][mIN_ITEM_NAME_LEN];
/* 0x218 */ int item_str_article[mMsg_ITEM_STR_NUM];
/* 0x038 */ u8 free_str[mMsg_FREE_STR_NUM][mMsg_FREE_STRING_LEN];
/* 0x178 */ int free_str_article[mMsg_FREE_STR_NUM];
/* 0x22C */ u8 mail_str[mMsg_MAIL_STR_NUM][mMsg_MAIL_STRING_LEN];
/* 0x1C8 */ u8 item_str[mMsg_ITEM_STR_NUM][mIN_ITEM_NAME_LEN];
/* 0x218 */ int item_str_article[mMsg_ITEM_STR_NUM];
/* 0x2B0 */ rgba_t name_text_color;
/* 0x2B4 */ rgba_t name_background_color;
/* 0x22C */ u8 mail_str[mMsg_MAIL_STR_NUM][mMsg_MAIL_STRING_LEN];
/* 0x2B8 */ rgba_t window_background_color;
/* 0x2BC */ rgba_t font_color[mMsg_MAX_LINE];
/* 0x2B0 */ rgba_t name_text_color;
/* 0x2B4 */ rgba_t name_background_color;
/* 0x2CC */ rgba_t continue_button_color;
/* 0x2B8 */ rgba_t window_background_color;
/* 0x2BC */ rgba_t font_color[mMsg_MAX_LINE];
/* 0x2D0 */ f32 font_scale_x;
/* 0x2D4 */ f32 font_scale_y;
/* 0x2CC */ rgba_t continue_button_color;
/* 0x2D8 */ int _2D8;
/* 0x2DC */ int _2DC;
/* 0x2D0 */ f32 font_scale_x;
/* 0x2D4 */ f32 font_scale_y;
/* 0x2E0 */ int text_lines;
/* 0x2E4 */ int now_display_line;
/* 0x2D8 */ int _2D8;
/* 0x2DC */ int _2DC;
/* 0x2E8 */ mChoice_c choice_window;
/* 0x2E0 */ int text_lines;
/* 0x2E4 */ int now_display_line;
/* 0x3E8 */ int _3E8;
/* 0x2E8 */ mChoice_c choice_window;
/* 0x3EC */ u16 end_timer;
/* 0x3EE */ s16 animal_voice_idx;
/* 0x3F0 */ int voice_sfx_idx;
/* 0x3F4 */ u8 voice_idx;
/* 0x3F5 */ u8 voice2_idx;
/* 0x3F6 */ u8 voice3_idx;
/* 0x3F7 */ s8 hide_choice_window_timer;
/* 0x3F8 */ u8 force_voice_enable_flag;
/* 0x3FC */ int spec;
/* 0x400 */ u8 free_str_color_idx[4];
/* 0x408 */ u8 _404[8]; // unused?
/* 0x40C */ u32 status_flags;
/* 0x3E8 */ int _3E8;
/* 0x410 */ f32 timer;
/* 0x414 */ f32 cursor_timer;
/* 0x418 */ f32 continue_button_timer;
/* 0x3EC */ u16 end_timer;
/* 0x3EE */ s16 animal_voice_idx;
/* 0x3F0 */ int voice_sfx_idx;
/* 0x3F4 */ u8 voice_idx;
/* 0x3F5 */ u8 voice2_idx;
/* 0x3F6 */ u8 voice3_idx;
/* 0x3F7 */ s8 hide_choice_window_timer;
/* 0x3F8 */ u8 force_voice_enable_flag;
/* 0x3FC */ int spec;
/* 0x400 */ u8 free_str_color_idx[4];
/* 0x408 */ u8 _404[8]; // unused?
/* 0x40C */ u32 status_flags;
/* 0x41C */ int start_text_cursor_idx;
/* 0x420 */ int end_text_cursor_idx;
/* 0x424 */ f32 window_scale;
/* 0x428 */ f32 text_scale;
/* 0x410 */ f32 timer;
/* 0x414 */ f32 cursor_timer;
/* 0x418 */ f32 continue_button_timer;
/* 0x42C */ int requested_main_index;
/* 0x430 */ int requested_priority;
/* 0x41C */ int start_text_cursor_idx;
/* 0x420 */ int end_text_cursor_idx;
/* 0x424 */ f32 window_scale;
/* 0x428 */ f32 text_scale;
/* 0x434 */ int main_index;
/* 0x438 */ int draw_flag;
/* 0x43C */ int cancel_flag;
/* 0x440 */ int cancelable_flag;
/* 0x444 */ int continue_msg_no;
/* 0x448 */ int continue_cancel_flag;
/* 0x44C */ int force_next;
/* 0x450 */ int lock_continue;
/* 0x454 */ u8 now_utter;
/* 0x42C */ int requested_main_index;
/* 0x430 */ int requested_priority;
/* 0x458 */ mMsg_Main_Data_c main_data;
/* 0x460 */ mMsg_Request_Data_c request_data;
/* 0x434 */ int main_index;
/* 0x438 */ int draw_flag;
/* 0x43C */ int cancel_flag;
/* 0x440 */ int cancelable_flag;
/* 0x444 */ int continue_msg_no;
/* 0x448 */ int continue_cancel_flag;
/* 0x44C */ int force_next;
/* 0x450 */ int lock_continue;
/* 0x454 */ u8 now_utter;
/* 0x458 */ mMsg_Main_Data_c main_data;
/* 0x460 */ mMsg_Request_Data_c request_data;
};
extern void mMsg_aram_init();
@@ -279,7 +279,8 @@ extern int mMsg_Check_not_series_main_wait(mMsg_Window_c* msg_p);
extern int mMsg_Check_main_hide(mMsg_Window_c* msg_p);
extern int mMsg_request_main_forceoff();
extern int mMsg_request_main_disappear(mMsg_Window_c* msg_p);
extern int mMsg_request_main_appear(mMsg_Window_c* msg_p, ACTOR* client_actor_p, int show_name, rgba_t* window_color, int msg_no, int request_priority);
extern int mMsg_request_main_appear(mMsg_Window_c* msg_p, ACTOR* client_actor_p, int show_name, rgba_t* window_color,
int msg_no, int request_priority);
extern int mMsg_request_main_disappear_wait_type1(mMsg_Window_c* msg_p);
extern int mMsg_request_main_disappear_wait_type2(mMsg_Window_c* msg_p);
extern int mMsg_request_main_appear_wait_type2(mMsg_Window_c* msg_p, int clear_flag);
@@ -323,13 +324,15 @@ extern int mMsg_CopyDay(u8* data, int start_idx, int len);
extern int mMsg_CopyHour(u8* data, int start_idx, int len);
extern int mMsg_CopyMin(u8* data, int start_idx, int len);
extern int mMsg_CopySec(u8* data, int start_idx, int len);
extern int mMsg_CopyFree(mMsg_Window_c* msg_p, int str_no, u8* data, int start_idx, int len, int article, u32 capitalize);
extern int mMsg_CopyFree(mMsg_Window_c* msg_p, int str_no, u8* data, int start_idx, int len, int article,
u32 capitalize);
extern int mMsg_CopyDetermination(mMsg_Window_c* msg_p, u8* data, int start_idx, int len);
extern int mMsg_CopyCountryName(u8 *data, int start_idx, int len, u32 capitalize);
extern int mMsg_CopyCountryName(u8* data, int start_idx, int len, u32 capitalize);
extern int mMsg_CopyIslandName(u8* data, int start_idx, int len, u32 capitalize);
extern int mMsg_CopyAmPm(mMsg_Window_c* msg_p, u8* data, int start_idx, int len);
extern int mMsg_CopyRamdomNumber2(u8* data, int start_idx, int len);
extern int mMsg_CopyItem(mMsg_Window_c* msg_p, int str_no, u8* data, int start_idx, int len, int article, u32 capitalize);
extern int mMsg_CopyItem(mMsg_Window_c* msg_p, int str_no, u8* data, int start_idx, int len, int article,
u32 capitalize);
extern int mMsg_CopyMail(mMsg_Window_c* msg_p, int str_no, u8* data, int start_idx, int len, u32 capitalize);
extern int mMsg_sound_voice_get(int code);
extern int mMsg_sound_voice_get_for_editor(int code);
@@ -339,6 +342,29 @@ extern void mMsg_sound_set_voice_click(mMsg_Window_c* msg_p);
extern void mMsg_sound_set_voice_silent(mMsg_Window_c* msg_p, int update_mode);
extern void mMsg_sound_unset_voice_silent(mMsg_Window_c* msg_p, int update_mode);
/* Macros */
#define mMsg_SET_CONTINUE_MSG_NUM(msg_no) mMsg_Set_continue_msg_num(mMsg_Get_base_window_p(), (msg_no))
#define mMsg_SET_LOCKCONTINUE() mMsg_Set_LockContinue(mMsg_Get_base_window_p())
#define mMsg_UNSET_LOCKCONTINUE() mMsg_Unset_LockContinue(mMsg_Get_base_window_p())
#define mMsg_SET_FORCENEXT() mMsg_Set_ForceNext(mMsg_Get_base_window_p())
#define mMsg_SET_CANCELNORMALCONTINUE() mMsg_Set_CancelNormalContinue(mMsg_Get_base_window_p())
#define mMsg_SET_ITEM_STR_ART(str_no, str, str_len, item_no) \
mMsg_Set_item_str_art(mMsg_Get_base_window_p(), str_no, str, str_len, mIN_get_item_article(item_no))
#define mMsg_SET_FREE_STR(str_no, str, str_len) mMsg_Set_free_str(mMsg_Get_base_window_p(), str_no, str, str_len)
#define mMsg_SET_FREE_STR_CL(str_no, str, str_len, cl) \
mMsg_Set_free_str_cl(mMsg_Get_base_window_p(), str_no, str, str_len, cl)
#define mMsg_SET_FREE_STR_CL_ART(str_no, str, str_len, cl, item_no) \
mMsg_Set_free_str_cl_art(mMsg_Get_base_window_p(), str_no, str, str_len, cl, mIN_get_item_article(item_no))
#define mMsg_GET_MSG_NUM() mMsg_Get_msg_num(mMsg_Get_base_window_p())
#define mMsg_CHECK_MAINNORMALCONTINUE() mMsg_Check_MainNormalContinue(mMsg_Get_base_window_p())
#define mMsg_CHECK_MAINDISAPPEAR() mMsg_Check_MainDisappear(mMsg_Get_base_window_p())
#define mMsg_CHECK_MAINHIDE() mMsg_Check_MainHide(mMsg_Get_base_window_p())
#define mMsg_REQUEST_MAIN_DISAPPEAR() mMsg_request_main_disappear(mMsg_Get_base_window_p())
#ifdef __cplusplus
}
#endif
+2 -1
View File
@@ -1100,7 +1100,7 @@ extern int mNT_check_unknown(mActor_name_t item_no);
#define FTR_CLOTH_MANNIQUIN254_WEST 0x1BA7
#define FTR_CLOTH_END FTR_CLOTH_MANNIQUIN254_WEST
#define FTR_CLOTH_MANNIQUIN_MY_ORIGINAL0 0x1BA8
#define FTR_CLOTH_MYMANNIQUIN_END 0x1BC7
#define FTR_INSECT_START 0x1BC8
#define FTR_INSECT00 FTR_INSECT_START
@@ -2253,6 +2253,7 @@ extern int mNT_check_unknown(mActor_name_t item_no);
#define ETC_START 0x8000
#define ETC_AIRPLANE ETC_START
#define ETC_BALL (ETC_START + 1)
#define ETC_MY_ROOM (ETC_START + 2)
#define ETC_MBG (ETC_START + 3)
#define ETC_BOXTRICK (ETC_START + 4)
#define ETC_BOXMANAGER (ETC_START + 5)
+287 -269
View File
@@ -5,6 +5,7 @@
#include "m_actor.h"
#include "m_lib.h"
#include "c_keyframe.h"
#include "libultra/ultratypes.h"
#ifdef __cplusplus
extern "C" {
@@ -22,314 +23,331 @@ typedef struct player_actor_s PLAYER_ACTOR;
#define mPlayer_FORCE_POSITION_ANGLE_ROTZ (1 << 6)
enum {
mPlayer_ADDRESSABLE_TRUE,
mPlayer_ADDRESSABLE_FALSE_MOVEMENT,
mPlayer_ADDRESSABLE_FALSE_TALKING,
mPlayer_ADDRESSABLE_FALSE_USING_TOOL,
mPlayer_ADDRESSABLE_TRUE,
mPlayer_ADDRESSABLE_FALSE_MOVEMENT,
mPlayer_ADDRESSABLE_FALSE_TALKING,
mPlayer_ADDRESSABLE_FALSE_USING_TOOL,
mPlayer_ADDRESSABLE_NUM
mPlayer_ADDRESSABLE_NUM
};
enum {
mPlayer_INDEX_DMA,
mPlayer_INDEX_INTRO,
mPlayer_INDEX_REFUSE,
mPlayer_INDEX_REFUSE_PICKUP,
mPlayer_INDEX_RETURN_DEMO,
mPlayer_INDEX_RETURN_OUTDOOR,
mPlayer_INDEX_RETURN_OUTDOOR2,
mPlayer_INDEX_WAIT,
mPlayer_INDEX_WALK,
mPlayer_INDEX_RUN,
mPlayer_INDEX_DASH,
mPlayer_INDEX_TUMBLE,
mPlayer_INDEX_TUMBLE_GETUP,
mPlayer_INDEX_TURN_DASH,
mPlayer_INDEX_FALL,
mPlayer_INDEX_WADE,
mPlayer_INDEX_DOOR,
mPlayer_INDEX_OUTDOOR,
mPlayer_INDEX_INVADE,
mPlayer_INDEX_HOLD,
mPlayer_INDEX_PUSH,
mPlayer_INDEX_PULL,
mPlayer_INDEX_ROTATE_FURNITURE,
mPlayer_INDEX_OPEN_FURNITURE,
mPlayer_INDEX_WAIT_OPEN_FURNITURE,
mPlayer_INDEX_CLOSE_FURNITURE,
mPlayer_INDEX_LIE_BED,
mPlayer_INDEX_WAIT_BED,
mPlayer_INDEX_ROLL_BED,
mPlayer_INDEX_STANDUP_BED,
mPlayer_INDEX_PICKUP,
mPlayer_INDEX_PICKUP_JUMP,
mPlayer_INDEX_PICKUP_FURNITURE,
mPlayer_INDEX_PICKUP_EXCHANGE,
mPlayer_INDEX_SITDOWN,
mPlayer_INDEX_SITDOWN_WAIT,
mPlayer_INDEX_STANDUP,
mPlayer_INDEX_SWING_AXE,
mPlayer_INDEX_AIR_AXE,
mPlayer_INDEX_REFLECT_AXE,
mPlayer_INDEX_BROKEN_AXE,
mPlayer_INDEX_SLIP_NET,
mPlayer_INDEX_READY_NET,
mPlayer_INDEX_READY_WALK_NET,
mPlayer_INDEX_SWING_NET,
mPlayer_INDEX_PULL_NET,
mPlayer_INDEX_STOP_NET,
mPlayer_INDEX_NOTICE_NET,
mPlayer_INDEX_PUTAWAY_NET,
mPlayer_INDEX_READY_ROD,
mPlayer_INDEX_CAST_ROD,
mPlayer_INDEX_AIR_ROD,
mPlayer_INDEX_RELAX_ROD,
mPlayer_INDEX_COLLECT_ROD,
mPlayer_INDEX_VIB_ROD,
mPlayer_INDEX_FLY_ROD,
mPlayer_INDEX_NOTICE_ROD,
mPlayer_INDEX_PUTAWAY_ROD,
mPlayer_INDEX_DIG_SCOOP,
mPlayer_INDEX_FILL_SCOOP,
mPlayer_INDEX_REFLECT_SCOOP,
mPlayer_INDEX_AIR_SCOOP,
mPlayer_INDEX_GET_SCOOP,
mPlayer_INDEX_PUTAWAY_SCOOP,
mPlayer_INDEX_PUTIN_SCOOP,
mPlayer_INDEX_TALK,
mPlayer_INDEX_RECIEVE_WAIT,
mPlayer_INDEX_RECIEVE_STRETCH,
mPlayer_INDEX_RECIEVE,
mPlayer_INDEX_RECIEVE_PUTAWAY,
mPlayer_INDEX_GIVE,
mPlayer_INDEX_GIVE_WAIT,
mPlayer_INDEX_TAKEOUT_ITEM,
mPlayer_INDEX_PUTIN_ITEM,
mPlayer_INDEX_DEMO_WAIT,
mPlayer_INDEX_DEMO_WALK,
mPlayer_INDEX_DEMO_GETON_TRAIN,
mPlayer_INDEX_DEMO_GETON_TRAIN_WAIT,
mPlayer_INDEX_DEMO_GETOFF_TRAIN,
mPlayer_INDEX_DEMO_STANDING_TRAIN,
mPlayer_INDEX_DEMO_WADE,
mPlayer_INDEX_HIDE,
mPlayer_INDEX_GROUNDHOG,
mPlayer_INDEX_RELEASE_CREATURE,
mPlayer_INDEX_WASH_CAR,
mPlayer_INDEX_TIRED,
mPlayer_INDEX_ROTATE_OCTAGON,
mPlayer_INDEX_THROW_MONEY,
mPlayer_INDEX_PRAY,
mPlayer_INDEX_SHAKE_TREE,
mPlayer_INDEX_MAIL_JUMP,
mPlayer_INDEX_MAIL_LAND,
mPlayer_INDEX_READY_PITFALL,
mPlayer_INDEX_FALL_PITFALL,
mPlayer_INDEX_STRUGGLE_PITFALL,
mPlayer_INDEX_CLIMBUP_PITFALL,
mPlayer_INDEX_STUNG_BEE,
mPlayer_INDEX_NOTICE_BEE,
mPlayer_INDEX_REMOVE_GRASS,
mPlayer_INDEX_SHOCK,
mPlayer_INDEX_KNOCK_DOOR,
mPlayer_INDEX_CHANGE_CLOTH,
mPlayer_INDEX_PUSH_SNOWBALL,
mPlayer_INDEX_ROTATE_UMBRELLA,
mPlayer_INDEX_WADE_SNOWBALL,
mPlayer_INDEX_COMPLETE_PAYMENT,
mPlayer_INDEX_FAIL_EMU,
mPlayer_INDEX_STUNG_MOSQUITO,
mPlayer_INDEX_NOTICE_MOSQUITO,
mPlayer_INDEX_SWING_FAN,
mPlayer_INDEX_SWITCH_ON_LIGHTHOUSE,
mPlayer_INDEX_RADIO_EXERCISE,
mPlayer_INDEX_DEMO_GETON_BOAT,
mPlayer_INDEX_DEMO_GETON_BOAT_SITDOWN,
mPlayer_INDEX_DEMO_GETON_BOAT_WAIT,
mPlayer_INDEX_DEMO_GETON_BOAT_WADE,
mPlayer_INDEX_DEMO_GETOFF_BOAT_STANDUP,
mPlayer_INDEX_DEMO_GETOFF_BOAT,
mPlayer_INDEX_DEMO_GET_GOLDEN_ITEM,
mPlayer_INDEX_DEMO_GET_GOLDEN_ITEM2,
mPlayer_INDEX_DEMO_GET_GOLDEN_AXE_WAIT
mPlayer_INDEX_DMA,
mPlayer_INDEX_INTRO,
mPlayer_INDEX_REFUSE,
mPlayer_INDEX_REFUSE_PICKUP,
mPlayer_INDEX_RETURN_DEMO,
mPlayer_INDEX_RETURN_OUTDOOR,
mPlayer_INDEX_RETURN_OUTDOOR2,
mPlayer_INDEX_WAIT,
mPlayer_INDEX_WALK,
mPlayer_INDEX_RUN,
mPlayer_INDEX_DASH,
mPlayer_INDEX_TUMBLE,
mPlayer_INDEX_TUMBLE_GETUP,
mPlayer_INDEX_TURN_DASH,
mPlayer_INDEX_FALL,
mPlayer_INDEX_WADE,
mPlayer_INDEX_DOOR,
mPlayer_INDEX_OUTDOOR,
mPlayer_INDEX_INVADE,
mPlayer_INDEX_HOLD,
mPlayer_INDEX_PUSH,
mPlayer_INDEX_PULL,
mPlayer_INDEX_ROTATE_FURNITURE,
mPlayer_INDEX_OPEN_FURNITURE,
mPlayer_INDEX_WAIT_OPEN_FURNITURE,
mPlayer_INDEX_CLOSE_FURNITURE,
mPlayer_INDEX_LIE_BED,
mPlayer_INDEX_WAIT_BED,
mPlayer_INDEX_ROLL_BED,
mPlayer_INDEX_STANDUP_BED,
mPlayer_INDEX_PICKUP,
mPlayer_INDEX_PICKUP_JUMP,
mPlayer_INDEX_PICKUP_FURNITURE,
mPlayer_INDEX_PICKUP_EXCHANGE,
mPlayer_INDEX_SITDOWN,
mPlayer_INDEX_SITDOWN_WAIT,
mPlayer_INDEX_STANDUP,
mPlayer_INDEX_SWING_AXE,
mPlayer_INDEX_AIR_AXE,
mPlayer_INDEX_REFLECT_AXE,
mPlayer_INDEX_BROKEN_AXE,
mPlayer_INDEX_SLIP_NET,
mPlayer_INDEX_READY_NET,
mPlayer_INDEX_READY_WALK_NET,
mPlayer_INDEX_SWING_NET,
mPlayer_INDEX_PULL_NET,
mPlayer_INDEX_STOP_NET,
mPlayer_INDEX_NOTICE_NET,
mPlayer_INDEX_PUTAWAY_NET,
mPlayer_INDEX_READY_ROD,
mPlayer_INDEX_CAST_ROD,
mPlayer_INDEX_AIR_ROD,
mPlayer_INDEX_RELAX_ROD,
mPlayer_INDEX_COLLECT_ROD,
mPlayer_INDEX_VIB_ROD,
mPlayer_INDEX_FLY_ROD,
mPlayer_INDEX_NOTICE_ROD,
mPlayer_INDEX_PUTAWAY_ROD,
mPlayer_INDEX_DIG_SCOOP,
mPlayer_INDEX_FILL_SCOOP,
mPlayer_INDEX_REFLECT_SCOOP,
mPlayer_INDEX_AIR_SCOOP,
mPlayer_INDEX_GET_SCOOP,
mPlayer_INDEX_PUTAWAY_SCOOP,
mPlayer_INDEX_PUTIN_SCOOP,
mPlayer_INDEX_TALK,
mPlayer_INDEX_RECIEVE_WAIT,
mPlayer_INDEX_RECIEVE_STRETCH,
mPlayer_INDEX_RECIEVE,
mPlayer_INDEX_RECIEVE_PUTAWAY,
mPlayer_INDEX_GIVE,
mPlayer_INDEX_GIVE_WAIT,
mPlayer_INDEX_TAKEOUT_ITEM,
mPlayer_INDEX_PUTIN_ITEM,
mPlayer_INDEX_DEMO_WAIT,
mPlayer_INDEX_DEMO_WALK,
mPlayer_INDEX_DEMO_GETON_TRAIN,
mPlayer_INDEX_DEMO_GETON_TRAIN_WAIT,
mPlayer_INDEX_DEMO_GETOFF_TRAIN,
mPlayer_INDEX_DEMO_STANDING_TRAIN,
mPlayer_INDEX_DEMO_WADE,
mPlayer_INDEX_HIDE,
mPlayer_INDEX_GROUNDHOG,
mPlayer_INDEX_RELEASE_CREATURE,
mPlayer_INDEX_WASH_CAR,
mPlayer_INDEX_TIRED,
mPlayer_INDEX_ROTATE_OCTAGON,
mPlayer_INDEX_THROW_MONEY,
mPlayer_INDEX_PRAY,
mPlayer_INDEX_SHAKE_TREE,
mPlayer_INDEX_MAIL_JUMP,
mPlayer_INDEX_MAIL_LAND,
mPlayer_INDEX_READY_PITFALL,
mPlayer_INDEX_FALL_PITFALL,
mPlayer_INDEX_STRUGGLE_PITFALL,
mPlayer_INDEX_CLIMBUP_PITFALL,
mPlayer_INDEX_STUNG_BEE,
mPlayer_INDEX_NOTICE_BEE,
mPlayer_INDEX_REMOVE_GRASS,
mPlayer_INDEX_SHOCK,
mPlayer_INDEX_KNOCK_DOOR,
mPlayer_INDEX_CHANGE_CLOTH,
mPlayer_INDEX_PUSH_SNOWBALL,
mPlayer_INDEX_ROTATE_UMBRELLA,
mPlayer_INDEX_WADE_SNOWBALL,
mPlayer_INDEX_COMPLETE_PAYMENT,
mPlayer_INDEX_FAIL_EMU,
mPlayer_INDEX_STUNG_MOSQUITO,
mPlayer_INDEX_NOTICE_MOSQUITO,
mPlayer_INDEX_SWING_FAN,
mPlayer_INDEX_SWITCH_ON_LIGHTHOUSE,
mPlayer_INDEX_RADIO_EXERCISE,
mPlayer_INDEX_DEMO_GETON_BOAT,
mPlayer_INDEX_DEMO_GETON_BOAT_SITDOWN,
mPlayer_INDEX_DEMO_GETON_BOAT_WAIT,
mPlayer_INDEX_DEMO_GETON_BOAT_WADE,
mPlayer_INDEX_DEMO_GETOFF_BOAT_STANDUP,
mPlayer_INDEX_DEMO_GETOFF_BOAT,
mPlayer_INDEX_DEMO_GET_GOLDEN_ITEM,
mPlayer_INDEX_DEMO_GET_GOLDEN_ITEM2,
mPlayer_INDEX_DEMO_GET_GOLDEN_AXE_WAIT
};
enum {
mPlayer_CREATURE_INSECT,
mPlayer_CREATURE_GYOEI,
mPlayer_CREATURE_BALLOON,
mPlayer_CREATURE_INSECT,
mPlayer_CREATURE_GYOEI,
mPlayer_CREATURE_BALLOON,
mPlayer_CREATURE_NUM
mPlayer_CREATURE_NUM
};
enum {
mPlayer_BED_ACTION_NONE,
mPlayer_BED_ACTION_ROLL,
mPlayer_BED_ACTION_OUT,
mPlayer_BED_ACTION_NUM
};
typedef struct player_request_give_from_submenu_s {
xyz_t unused; // assumed based on size
mActor_name_t item;
int mode_after; // player mode after the action finishes
int present_flag; // set if the item is wrapped as presnet
int counter_flag; // set when the item slides across a counter
xyz_t unused; // assumed based on size
mActor_name_t item;
int mode_after; // player mode after the action finishes
int present_flag; // set if the item is wrapped as presnet
int counter_flag; // set when the item slides across a counter
} mPlayer_request_give_from_submenu_c;
typedef struct player_request_putin_scoop_from_submenu_s {
xyz_t wpos;
mActor_name_t item;
int got_gold_scoop;
xyz_t wpos;
mActor_name_t item;
int got_gold_scoop;
} mPlayer_request_putin_scoop_from_submenu_data_c;
typedef struct {
int type;
int got_gold_scoop;
s16 angle_y;
s16 item;
int type;
int got_gold_scoop;
s16 angle_y;
s16 item;
} mPlayer_request_release_creature_gyoei_from_submenu_c;
typedef struct {
int type;
int got_gold_scoop;
xyz_t wpos;
int insect_type;
int type;
int got_gold_scoop;
xyz_t wpos;
int insect_type;
} mPlayer_request_release_creature_insect_from_submenu_c;
typedef struct {
int type;
int got_gold_scoop;
int balloon_shape_type;
int type;
int got_gold_scoop;
int balloon_shape_type;
} mPlayer_request_release_creature_balloon_from_submenu_c;
typedef struct {
int _0;
ACTOR* speak_actor;
int _0;
ACTOR* speak_actor;
} mPlayer_request_demo_wait_from_submenu_c;
typedef struct {
int direct;
s16 angle;
xyz_t wpos;
int ftr_name;
int direct;
s16 angle;
xyz_t wpos;
int ftr_name;
} mPlayer_request_lie_bed_c;
typedef union {
mPlayer_request_give_from_submenu_c give_from_submenu;
mPlayer_request_putin_scoop_from_submenu_data_c putin_scoop_from_submenu;
mPlayer_request_release_creature_gyoei_from_submenu_c release_creature_gyoei_from_submenu;
mPlayer_request_release_creature_insect_from_submenu_c release_creature_insect_from_submenu;
mPlayer_request_release_creature_balloon_from_submenu_c release_creature_balloon_from_submenu;
mPlayer_request_demo_wait_from_submenu_c demo_wait_from_submenu;
mPlayer_request_lie_bed_c lie_bed;
/* TODO: others */
u8 force_size[72]; // TEMP
mPlayer_request_give_from_submenu_c give_from_submenu;
mPlayer_request_putin_scoop_from_submenu_data_c putin_scoop_from_submenu;
mPlayer_request_release_creature_gyoei_from_submenu_c release_creature_gyoei_from_submenu;
mPlayer_request_release_creature_insect_from_submenu_c release_creature_insect_from_submenu;
mPlayer_request_release_creature_balloon_from_submenu_c release_creature_balloon_from_submenu;
mPlayer_request_demo_wait_from_submenu_c demo_wait_from_submenu;
mPlayer_request_lie_bed_c lie_bed;
/* TODO: others */
u8 force_size[72]; // TEMP
} mPlayer_request_main_data;
typedef struct {
int requested_main_index;
int requested_index_pending;
mPlayer_request_main_data request_main_data;
int requested_main_index;
int requested_index_pending;
mPlayer_request_main_data request_main_data;
} mPlayer_change_data_from_submenu_c;
/* sizeof(struct player_actor_s) == 0x13A8 */
struct player_actor_s {
/* 0x0000 */ ACTOR actor_class;
/* 0x0174 */ cKF_SkeletonInfo_R_c keyframe0;
/* 0x01E4 */ cKF_SkeletonInfo_R_c keyframe1;
/* 0x0252 */ s_xyz joint_data[27];
/* 0x02F4 */ s_xyz morph_data[27];
/* 0x0398 */ Mtx work_mtx[2][13]; /* swapped between frames */
/* 0x0A18 */ cKF_SkeletonInfo_R_c item_keyframe; /* for item animations */
/* 0x0A88 */ s_xyz item_joint_data[8];
/* 0x0AB8 */ s_xyz item_morph_data[8];
/* 0x0AE8 */ Mtx item_work_mtx[2][4]; /* swapped between frames */
/* 0x0CE8 */ s16 eye_pattern_normal;
/* 0x0CEA */ s16 eye_pattern_normal_timer;
/* 0x0CEC */ int blink_count;
/* 0x0CF0 */ int eye_tex_idx;
/* 0x0CF4 */ int mouth_tex_idx;
/* 0x0CF8 */ int now_main_index;
/* 0x0CFC */ int prev_main_index;
/* 0x0D00 */ int changed_main_index;
/* 0x0D04 */ int item_main_index;
/* 0x0D08 */ int requested_main_index;
/* 0x0D0C */ int requested_main_index_priority;
/* 0x0D10 */ int requested_main_index_changed;
/* 0x0D14 */ int settled_requested_main_index_priority;
/* 0x0D18 */ u8 main_index_data[72]; // TODO: Union of many types...
/* 0x0D60 */ u8 requested_main_index_data[72]; // TODO: Union of many types...
/* 0x0DA8 */ u8 _0DA8[0x1270 - 0x0DA8]; /* TODO: finish */
/* 0x1270 */ int (*request_main_invade_all_proc)(GAME*, int);
/* 0x1274 */ int (*request_main_refuse_all_proc)(GAME*, int);
/* 0x1278 */ int (*request_main_return_demo_all_proc)(GAME*, int, f32, int);
/* 0x127C */ int (*request_main_wait_all_proc)(GAME*, f32, int, int);
/* 0x1280 */ int (*request_main_talk_all_proc)(GAME*, ACTOR*, int, f32, int, int);
/* 0x1284 */ int (*request_main_hold_all_proc)(GAME*, int, int, const xyz_t*, f32, int, int);
/* 0x1288 */ int (*request_main_recieve_wait_all_proc)(GAME*, ACTOR*, int, int, mActor_name_t, int, int);
/* 0x128C */ int (*request_main_give_all_proc)(GAME*, ACTOR*, int, int, mActor_name_t, int, int, int, int);
/* 0x1290 */ int (*request_main_sitdown_all_proc)(GAME*, int, const xyz_t*, int, int);
/* 0x1294 */ int (*request_main_close_furniture_all_proc)(GAME*, int);
/* 0x1298 */ int (*request_main_lie_bed_all_proc)(GAME*, int, const xyz_t*, int, int, int);
/* 0x129C */ int (*request_main_hide_all_proc)(GAME*, int);
/* 0x12A0 */ int (*request_main_groundhog_proc)(GAME*, int);
/* 0x12A4 */ int (*request_main_door_all_proc)(GAME*, const xyz_t*, s16, int, void*, int);
/* 0x12A8 */ int (*request_main_outdoor_all_proc)(GAME*, int, int, int);
/* 0x12AC */ int (*request_main_wash_car_all_proc)(GAME*, const xyz_t*, const xyz_t*, s16, ACTOR*, int);
/* 0x12B0 */ int (*request_main_rotate_octagon_all_proc)(GAME*, ACTOR*, int, int, const xyz_t*, s16, int);
/* 0x12B4 */ int (*request_main_throw_money_all_proc)(GAME*, const xyz_t*, s16, int);
/* 0x12B8 */ int (*request_main_pray_all_proc)(GAME*, const xyz_t*, s16, int);
/* 0x12BC */ int (*request_main_mail_jump_all_proc)(GAME*, const xyz_t*, s16, int);
/* 0x12C0 */ int (*request_main_demo_wait_all_proc)(GAME*, int, void*, int);
/* 0x12C4 */ int (*request_main_demo_walk_all_proc)(GAME*, f32, f32, f32, int, int);
/* 0x12C8 */ int (*request_main_demo_geton_train_all_proc)(GAME*, const xyz_t*, s16, int);
/* 0x12CC */ int (*request_main_demo_getoff_train_all_proc)(GAME*, const xyz_t*, s16, int);
/* 0x12D0 */ int (*request_main_demo_standing_train_all_proc)(GAME*, int);
/* 0x12D4 */ int (*request_main_stung_bee_all_proc)(GAME*, int);
/* 0x12D8 */ int (*request_main_shock_all_proc)(GAME*, f32, s16, s8, int, int);
/* 0x12DC */ int (*request_main_change_cloth_forNPC_proc)(GAME*, mActor_name_t, int);
/* 0x12E0 */ int (*request_main_push_snowball_all_proc)(GAME*, void*, int, int);
/* 0x12E4 */ int (*request_main_stung_mosquito_all_proc)(GAME*, int, int);
/* 0x12E8 */ int (*request_main_switch_on_lighthouse_all_proc)(GAME*, const xyz_t*, int, int);
/* 0x12EC */ int (*request_main_demo_geton_boat_all_proc)(GAME*, const xyz_t*, s16, int);
/* 0x12F0 */ int (*request_main_demo_getoff_boat_standup_all_proc)(GAME*, const xyz_t*, s16, int);
/* 0x12F4 */ int (*request_main_demo_get_golden_item2_all_proc)(GAME*, int, int);
/* 0x12F8 */ int (*request_main_demo_get_golden_axe_wait_all_proc)(GAME*, int);
/* 0x12FC */ int (*check_request_main_priority_proc)(GAME*, int);
/* 0x1300 */ void* (*get_door_label_proc)(GAME*);
/* 0x1304 */ int (*Set_Item_net_catch_request_table_proc)(ACTOR*, GAME*, u32, s8, const xyz_t*, f32);
/* 0x1308 */ f32 (*Get_Item_net_catch_swing_timer_proc)(ACTOR*, GAME*);
/* 0x130C */ u8 (*Set_Item_net_catch_request_force_proc)(ACTOR*, GAME*, u32, s8);
/* 0x1310 */ void (*Set_force_position_angle_proc)(GAME*, const xyz_t*, const s_xyz*, u8);
/* 0x1314 */ u8 (*Get_force_position_angle_proc)(GAME*, xyz_t*, s_xyz*);
/* 0x1318 */ int (*Get_WadeEndPos_proc)(GAME*, xyz_t*);
/* 0x131C */ int (*Check_Label_main_push_snowball_proc)(GAME*, void*);
/* 0x1320 */ int (*SetParam_for_push_snowball_proc)(GAME*, const xyz_t*, s16, f32);
/* 0x1324 */ int (*able_submenu_request_main_index_proc)(GAME*);
/* 0x1328 */ int (*check_able_change_camera_normal_index_proc)(ACTOR*);
/* 0x132C */ int (*Check_able_force_speak_label_proc)(GAME*, ACTOR*);
/* 0x1330 */ int (*check_cancel_request_change_proc_index_proc)(int);
/* 0x1334 */ u32 (*Get_item_net_catch_label_proc)(ACTOR*);
/* 0x1338 */ int (*Change_item_net_catch_label_proc)(ACTOR*, u32, s8);
/* 0x133C */ int (*Check_StopNet_proc)(ACTOR*, xyz_t*);
/* 0x1340 */ int (*Check_HitAxe_proc)(ACTOR*, xyz_t*);
/* 0x1344 */ int (*Check_VibUnit_OneFrame_proc)(ACTOR*, const xyz_t*);
/* 0x1348 */ int (*Check_HitScoop_proc)(ACTOR*, xyz_t*);
/* 0x134C */ int (*Check_DigScoop_proc)(ACTOR*, xyz_t*);
/* 0x1350 */ int (*check_request_change_item_proc)(GAME*);
/* 0x1354 */ int (*Check_RotateOctagon_proc)(GAME*);
/* 0x1358 */ int (*Check_end_stung_bee_proc)(ACTOR*);
/* 0x135C */ int (*Get_status_for_bee_proc)(ACTOR*);
/* 0x1360 */ int (*Set_ScrollDemo_forWade_snowball_proc)(ACTOR*, int, const xyz_t*);
/* 0x1364 */ int (*Check_tree_shaken_proc)(ACTOR*, const xyz_t*);
/* 0x1368 */ int (*Check_tree_shaken_little_proc)(ACTOR*, const xyz_t*);
/* 0x136C */ int (*Check_tree_shaken_big_proc)(ACTOR*, const xyz_t*);
/* 0x1370 */ int (*Check_Label_main_wade_snowball_proc)(GAME*, void*);
/* 0x1374 */ int (*GetSnowballPos_forWadeSnowball_proc)(ACTOR*, xyz_t*);
/* 0x1378 */ int (*CheckCondition_forWadeSnowball_proc)(GAME*, const xyz_t*, s16);
/* 0x137C */ mActor_name_t (*Get_itemNo_forWindow_proc)(ACTOR*);
/* 0x1380 */ int (*check_cancel_event_without_priority_proc)(GAME*);
/* 0x1384 */ int (*CheckScene_AbleSubmenu_proc)();
/* 0x1388 */ int (*Check_stung_mosquito_proc)(GAME*, ACTOR*);
/* 0x138C */ int a_btn_pressed;
/* 0x1390 */ int a_btn_triggers_submenu;
/* 0x1394 */ mActor_name_t item_in_front; /* item directly in front of the player */
/* 0x1398 */ xyz_t foward_ut_pos; /* wpos of unit in front of player */
/* 0x13A4 */ s8 update_scene_bg_mode;
/* 0x0000 */ ACTOR actor_class;
/* 0x0174 */ cKF_SkeletonInfo_R_c keyframe0;
/* 0x01E4 */ cKF_SkeletonInfo_R_c keyframe1;
/* 0x0252 */ s_xyz joint_data[27];
/* 0x02F4 */ s_xyz morph_data[27];
/* 0x0398 */ Mtx work_mtx[2][13]; /* swapped between frames */
/* 0x0A18 */ cKF_SkeletonInfo_R_c item_keyframe; /* for item animations */
/* 0x0A88 */ s_xyz item_joint_data[8];
/* 0x0AB8 */ s_xyz item_morph_data[8];
/* 0x0AE8 */ Mtx item_work_mtx[2][4]; /* swapped between frames */
/* 0x0CE8 */ s16 eye_pattern_normal;
/* 0x0CEA */ s16 eye_pattern_normal_timer;
/* 0x0CEC */ int blink_count;
/* 0x0CF0 */ int eye_tex_idx;
/* 0x0CF4 */ int mouth_tex_idx;
/* 0x0CF8 */ int now_main_index;
/* 0x0CFC */ int prev_main_index;
/* 0x0D00 */ int changed_main_index;
/* 0x0D04 */ int item_main_index;
/* 0x0D08 */ int requested_main_index;
/* 0x0D0C */ int requested_main_index_priority;
/* 0x0D10 */ int requested_main_index_changed;
/* 0x0D14 */ int settled_requested_main_index_priority;
/* 0x0D18 */ u8 main_index_data[72]; // TODO: Union of many types...
/* 0x0D60 */ u8 requested_main_index_data[72]; // TODO: Union of many types...
/* 0x0DA8 */ u8 _0DA8[0x1010 - 0x0DA8]; /* TODO: finish */
/* 0x1010 */ ClObjPipe_c col_pipe;
/* 0x102C */ xyz_t head_pos;
/* 0x1038 */ xyz_t feel_pos;
/* 0x1044 */ xyz_t right_hand_pos;
/* 0x1050 */ xyz_t right_hand_move;
/* 0x105C */ xyz_t left_hand_pos;
/* 0x1068 */ MtxF right_hand_mtx;
/* 0x10A8 */ MtxF left_hand_mtx;
/* 0x10E8 */ u8 _10E8[0x1270 - 0x10E8];
/* 0x1270 */ int (*request_main_invade_all_proc)(GAME*, int);
/* 0x1274 */ int (*request_main_refuse_all_proc)(GAME*, int);
/* 0x1278 */ int (*request_main_return_demo_all_proc)(GAME*, int, f32, int);
/* 0x127C */ int (*request_main_wait_all_proc)(GAME*, f32, int, int);
/* 0x1280 */ int (*request_main_talk_all_proc)(GAME*, ACTOR*, int, f32, int, int);
/* 0x1284 */ int (*request_main_hold_all_proc)(GAME*, int, int, const xyz_t*, f32, int, int);
/* 0x1288 */ int (*request_main_recieve_wait_all_proc)(GAME*, ACTOR*, int, int, mActor_name_t, int, int);
/* 0x128C */ int (*request_main_give_all_proc)(GAME*, ACTOR*, int, int, mActor_name_t, int, int, int, int);
/* 0x1290 */ int (*request_main_sitdown_all_proc)(GAME*, int, const xyz_t*, int, int);
/* 0x1294 */ int (*request_main_close_furniture_all_proc)(GAME*, int);
/* 0x1298 */ int (*request_main_lie_bed_all_proc)(GAME*, int, const xyz_t*, int, int, int);
/* 0x129C */ int (*request_main_hide_all_proc)(GAME*, int);
/* 0x12A0 */ int (*request_main_groundhog_proc)(GAME*, int);
/* 0x12A4 */ int (*request_main_door_all_proc)(GAME*, const xyz_t*, s16, int, void*, int);
/* 0x12A8 */ int (*request_main_outdoor_all_proc)(GAME*, int, int, int);
/* 0x12AC */ int (*request_main_wash_car_all_proc)(GAME*, const xyz_t*, const xyz_t*, s16, ACTOR*, int);
/* 0x12B0 */ int (*request_main_rotate_octagon_all_proc)(GAME*, ACTOR*, int, int, const xyz_t*, s16, int);
/* 0x12B4 */ int (*request_main_throw_money_all_proc)(GAME*, const xyz_t*, s16, int);
/* 0x12B8 */ int (*request_main_pray_all_proc)(GAME*, const xyz_t*, s16, int);
/* 0x12BC */ int (*request_main_mail_jump_all_proc)(GAME*, const xyz_t*, s16, int);
/* 0x12C0 */ int (*request_main_demo_wait_all_proc)(GAME*, int, void*, int);
/* 0x12C4 */ int (*request_main_demo_walk_all_proc)(GAME*, f32, f32, f32, int, int);
/* 0x12C8 */ int (*request_main_demo_geton_train_all_proc)(GAME*, const xyz_t*, s16, int);
/* 0x12CC */ int (*request_main_demo_getoff_train_all_proc)(GAME*, const xyz_t*, s16, int);
/* 0x12D0 */ int (*request_main_demo_standing_train_all_proc)(GAME*, int);
/* 0x12D4 */ int (*request_main_stung_bee_all_proc)(GAME*, int);
/* 0x12D8 */ int (*request_main_shock_all_proc)(GAME*, f32, s16, s8, int, int);
/* 0x12DC */ int (*request_main_change_cloth_forNPC_proc)(GAME*, mActor_name_t, int);
/* 0x12E0 */ int (*request_main_push_snowball_all_proc)(GAME*, void*, int, int);
/* 0x12E4 */ int (*request_main_stung_mosquito_all_proc)(GAME*, int, int);
/* 0x12E8 */ int (*request_main_switch_on_lighthouse_all_proc)(GAME*, const xyz_t*, int, int);
/* 0x12EC */ int (*request_main_demo_geton_boat_all_proc)(GAME*, const xyz_t*, s16, int);
/* 0x12F0 */ int (*request_main_demo_getoff_boat_standup_all_proc)(GAME*, const xyz_t*, s16, int);
/* 0x12F4 */ int (*request_main_demo_get_golden_item2_all_proc)(GAME*, int, int);
/* 0x12F8 */ int (*request_main_demo_get_golden_axe_wait_all_proc)(GAME*, int);
/* 0x12FC */ int (*check_request_main_priority_proc)(GAME*, int);
/* 0x1300 */ void* (*get_door_label_proc)(GAME*);
/* 0x1304 */ int (*Set_Item_net_catch_request_table_proc)(ACTOR*, GAME*, u32, s8, const xyz_t*, f32);
/* 0x1308 */ f32 (*Get_Item_net_catch_swing_timer_proc)(ACTOR*, GAME*);
/* 0x130C */ u8 (*Set_Item_net_catch_request_force_proc)(ACTOR*, GAME*, u32, s8);
/* 0x1310 */ void (*Set_force_position_angle_proc)(GAME*, const xyz_t*, const s_xyz*, u8);
/* 0x1314 */ u8 (*Get_force_position_angle_proc)(GAME*, xyz_t*, s_xyz*);
/* 0x1318 */ int (*Get_WadeEndPos_proc)(GAME*, xyz_t*);
/* 0x131C */ int (*Check_Label_main_push_snowball_proc)(GAME*, void*);
/* 0x1320 */ int (*SetParam_for_push_snowball_proc)(GAME*, const xyz_t*, s16, f32);
/* 0x1324 */ int (*able_submenu_request_main_index_proc)(GAME*);
/* 0x1328 */ int (*check_able_change_camera_normal_index_proc)(ACTOR*);
/* 0x132C */ int (*Check_able_force_speak_label_proc)(GAME*, ACTOR*);
/* 0x1330 */ int (*check_cancel_request_change_proc_index_proc)(int);
/* 0x1334 */ u32 (*Get_item_net_catch_label_proc)(ACTOR*);
/* 0x1338 */ int (*Change_item_net_catch_label_proc)(ACTOR*, u32, s8);
/* 0x133C */ int (*Check_StopNet_proc)(ACTOR*, xyz_t*);
/* 0x1340 */ int (*Check_HitAxe_proc)(ACTOR*, xyz_t*);
/* 0x1344 */ int (*Check_VibUnit_OneFrame_proc)(ACTOR*, const xyz_t*);
/* 0x1348 */ int (*Check_HitScoop_proc)(ACTOR*, xyz_t*);
/* 0x134C */ int (*Check_DigScoop_proc)(ACTOR*, xyz_t*);
/* 0x1350 */ int (*check_request_change_item_proc)(GAME*);
/* 0x1354 */ int (*Check_RotateOctagon_proc)(GAME*);
/* 0x1358 */ int (*Check_end_stung_bee_proc)(ACTOR*);
/* 0x135C */ int (*Get_status_for_bee_proc)(ACTOR*);
/* 0x1360 */ int (*Set_ScrollDemo_forWade_snowball_proc)(ACTOR*, int, const xyz_t*);
/* 0x1364 */ int (*Check_tree_shaken_proc)(ACTOR*, const xyz_t*);
/* 0x1368 */ int (*Check_tree_shaken_little_proc)(ACTOR*, const xyz_t*);
/* 0x136C */ int (*Check_tree_shaken_big_proc)(ACTOR*, const xyz_t*);
/* 0x1370 */ int (*Check_Label_main_wade_snowball_proc)(GAME*, void*);
/* 0x1374 */ int (*GetSnowballPos_forWadeSnowball_proc)(ACTOR*, xyz_t*);
/* 0x1378 */ int (*CheckCondition_forWadeSnowball_proc)(GAME*, const xyz_t*, s16);
/* 0x137C */ mActor_name_t (*Get_itemNo_forWindow_proc)(ACTOR*);
/* 0x1380 */ int (*check_cancel_event_without_priority_proc)(GAME*);
/* 0x1384 */ int (*CheckScene_AbleSubmenu_proc)();
/* 0x1388 */ int (*Check_stung_mosquito_proc)(GAME*, ACTOR*);
/* 0x138C */ int a_btn_pressed;
/* 0x1390 */ int a_btn_triggers_submenu;
/* 0x1394 */ mActor_name_t item_in_front; /* item directly in front of the player */
/* 0x1398 */ xyz_t foward_ut_pos; /* wpos of unit in front of player */
/* 0x13A4 */ s8 update_scene_bg_mode;
};
void Player_actor_ct(ACTOR*, GAME*);
+8 -1
View File
@@ -17,7 +17,7 @@ extern void mPlib_Clear_controller_data_for_title_demo();
extern void mPlib_request_main_invade_type1(GAME_PLAY* play);
extern mActor_name_t mPlib_Get_itemNo_forWindow();
extern int mPlib_check_able_change_camera_normal_index();
extern void mPlib_request_main_refuse_type1(GAME_PLAY* play);
extern void mPlib_request_main_refuse_type1(GAME* game);
extern void mPlib_request_main_wait_type3(GAME* game);
extern void mPlib_Set_able_force_speak_label(ACTOR* actor);
extern int mPlib_request_main_demo_walk_type1(GAME* game, f32 goal_x, f32 goal_z, f32 speed, int flag);
@@ -63,6 +63,13 @@ extern void mPlib_Set_change_color_request();
extern int mPlib_check_player_open_umbrella(GAME_PLAY* play);
extern int mPlib_Check_UKI_COMEBACK_STATUS();
extern int mPlib_check_player_actor_main_index_OutDoorMove(GAME_PLAY* play);
extern int mPlib_request_main_close_furniture_type1(GAME* game);
extern int mPlib_request_main_shock_type1(GAME* game, f32 time, s16 angle_y, int axe_swing);
extern int mPlib_request_main_hold_type1(GAME* game, int ftr_no, int player_direct, const xyz_t* player_pos);
extern int mPlib_check_player_warp_forEvent(void);
extern int mPlib_check_player_actor_main_index_Furniture_Move(GAME* game);
extern int mPlib_request_main_sitdown_type1(GAME* game, int direct, const xyz_t* pos, int ftr_no);
extern int mPlib_request_main_lie_bed_type1(GAME* game, int direct, const xyz_t* pos, int head_direct, int ftr_no);
extern mPlayer_change_data_from_submenu_c* mPlib_Get_change_data_from_submenu_p();
+1 -1
View File
@@ -212,7 +212,7 @@ extern void Scene_ct(GAME_PLAY* play, Scene_Word_u* scene_data);
extern void Door_info_ct(Door_info_c* door_info);
extern int goto_other_scene(GAME_PLAY* play, Door_data_c* door_data, int update_player_mode);
extern int goto_next_scene(GAME_PLAY* play, int next_idx, int update_player_mode);
extern int goto_emu_game(GAME_PLAY* play, u8 famicom_rom_id);
extern int goto_emu_game(GAME* game, s16 famicom_rom_id);
extern void return_emu_game(GAME* game);
#ifdef __cplusplus
+76 -73
View File
@@ -2,24 +2,24 @@
#define M_SCENE_TABLE_H
#include "types.h"
//#include "m_scene.h"
// #include "m_scene.h"
#ifdef __cplusplus
extern "C" {
#endif
enum field_draw_type {
FIELD_DRAW_TYPE_OUTDOORS,
FIELD_DRAW_TYPE_INDOORS,
FIELD_DRAW_TYPE_TRAIN,
FIELD_DRAW_TYPE_PLAYER_SELECT,
FIELD_DRAW_TYPE_OUTDOORS,
FIELD_DRAW_TYPE_INDOORS,
FIELD_DRAW_TYPE_TRAIN,
FIELD_DRAW_TYPE_PLAYER_SELECT,
FIELD_DRAW_TYPE_NUM
FIELD_DRAW_TYPE_NUM
};
typedef struct scene_status_s {
u8 unk0[0x13];
u8 unk13;
u8 unk0[0x13];
u8 unk13;
} Scene_data_status_c;
/*
@@ -28,76 +28,79 @@ typedef struct scene_status_s {
*/
enum scene_table {
SCENE_TEST1,
SCENE_TEST2,
SCENE_TEST3,
SCENE_WATER_TEST,
SCENE_FOOTPRINT_TEST,
SCENE_NPC_TEST,
SCENE_NPC_HOUSE, /* npc house interior */
SCENE_FG, /* outdoors/FG */
SCENE_RANDOM_NPC_TEST,
SCENE_SHOP0, /* nook's cranny */
SCENE_BG_TEST_NO_RIVER,
SCENE_BG_TEST_RIVER,
SCENE_BROKER_SHOP, /* crazy redd's tent */
SCENE_FIELD_TOOL_INSIDE,
SCENE_POST_OFFICE, /* post office */
SCENE_START_DEMO, /* after player select */
SCENE_START_DEMO2, /* */
SCENE_POLICE_BOX,
SCENE_BUGGY,
SCENE_PLAYERSELECT,
SCENE_MY_ROOM_S,
SCENE_MY_ROOM_M,
SCENE_MY_ROOM_L,
SCENE_CONVENI, /* nook 'n' go */
SCENE_SUPER, /* nookway */
SCENE_DEPART, /* nookington's 1st floor */
SCENE_TEST5,
SCENE_PLAYERSELECT_2,
SCENE_PLAYERSELECT_3,
SCENE_DEPART_2, /* nookington's 2nd floor */
SCENE_EVENT_ANNOUNCEMENT,
SCENE_KAMAKURA,
SCENE_FIELD_TOOL,
SCENE_TITLE_DEMO, /* title screen demo */
SCENE_PLAYERSELECT_SAVE,
SCENE_MUSEUM_ENTRANCE,
SCENE_MUSEUM_ROOM_PAINTING,
SCENE_MUSEUM_ROOM_FOSSIL,
SCENE_MUSEUM_ROOM_INSECT,
SCENE_MUSEUM_ROOM_FISH,
SCENE_MY_ROOM_LL1,
SCENE_MY_ROOM_LL2,
SCENE_MY_ROOM_BASEMENT_S,
SCENE_MY_ROOM_BASEMENT_M,
SCENE_MY_ROOM_BASEMENT_L,
SCENE_MY_ROOM_BASEMENT_LL1,
SCENE_NEEDLEWORK, /* able sister's */
SCENE_COTTAGE_MY,
SCENE_COTTAGE_NPC,
SCENE_START_DEMO3,
SCENE_LIGHTHOUSE,
SCENE_TENT,
SCENE_TEST1,
SCENE_TEST2,
SCENE_TEST3,
SCENE_WATER_TEST,
SCENE_FOOTPRINT_TEST,
SCENE_NPC_TEST,
SCENE_NPC_HOUSE, /* npc house interior */
SCENE_FG, /* outdoors/FG */
SCENE_RANDOM_NPC_TEST,
SCENE_SHOP0, /* nook's cranny */
SCENE_BG_TEST_NO_RIVER,
SCENE_BG_TEST_RIVER,
SCENE_BROKER_SHOP, /* crazy redd's tent */
SCENE_FIELD_TOOL_INSIDE,
SCENE_POST_OFFICE, /* post office */
SCENE_START_DEMO, /* after player select */
SCENE_START_DEMO2, /* */
SCENE_POLICE_BOX,
SCENE_BUGGY,
SCENE_PLAYERSELECT,
SCENE_MY_ROOM_S,
SCENE_MY_ROOM_M,
SCENE_MY_ROOM_L,
SCENE_CONVENI, /* nook 'n' go */
SCENE_SUPER, /* nookway */
SCENE_DEPART, /* nookington's 1st floor */
SCENE_TEST5,
SCENE_PLAYERSELECT_2,
SCENE_PLAYERSELECT_3,
SCENE_DEPART_2, /* nookington's 2nd floor */
SCENE_EVENT_ANNOUNCEMENT,
SCENE_KAMAKURA,
SCENE_FIELD_TOOL,
SCENE_TITLE_DEMO, /* title screen demo */
SCENE_PLAYERSELECT_SAVE,
SCENE_MUSEUM_ENTRANCE,
SCENE_MUSEUM_ROOM_PAINTING,
SCENE_MUSEUM_ROOM_FOSSIL,
SCENE_MUSEUM_ROOM_INSECT,
SCENE_MUSEUM_ROOM_FISH,
SCENE_MY_ROOM_LL1,
SCENE_MY_ROOM_LL2,
SCENE_MY_ROOM_BASEMENT_S,
SCENE_MY_ROOM_BASEMENT_M,
SCENE_MY_ROOM_BASEMENT_L,
SCENE_MY_ROOM_BASEMENT_LL1,
SCENE_NEEDLEWORK, /* able sister's */
SCENE_COTTAGE_MY,
SCENE_COTTAGE_NPC,
SCENE_START_DEMO3,
SCENE_LIGHTHOUSE,
SCENE_TENT,
SCENE_NUM
SCENE_NUM
};
#define mSc_IS_SCENE_PLAYER_ROOM(scene) \
((scene) == SCENE_MY_ROOM_S || (scene) == SCENE_MY_ROOM_M || (scene) == SCENE_MY_ROOM_L || \
(scene) == SCENE_MY_ROOM_LL1 || (scene) == SCENE_MY_ROOM_LL2 || (scene) == SCENE_MY_ROOM_BASEMENT_S || \
(scene) == SCENE_MY_ROOM_BASEMENT_M || (scene) == (SCENE_MY_ROOM_BASEMENT_L) || (scene) == SCENE_MY_ROOM_BASEMENT_LL1 || \
(scene) == SCENE_COTTAGE_MY)
#define mSc_IS_SCENE_PLAYER_HOUSE_ROOM(scene) \
((scene) == SCENE_MY_ROOM_S || (scene) == SCENE_MY_ROOM_M || (scene) == SCENE_MY_ROOM_L || \
(scene) == SCENE_MY_ROOM_LL1 || (scene) == SCENE_MY_ROOM_LL2 || (scene) == SCENE_MY_ROOM_BASEMENT_S || \
(scene) == SCENE_MY_ROOM_BASEMENT_M || (scene) == (SCENE_MY_ROOM_BASEMENT_L) || \
(scene) == SCENE_MY_ROOM_BASEMENT_LL1)
#define mSc_IS_SCENE_BASEMENT(scene) \
((scene) == SCENE_MY_ROOM_BASEMENT_S || \
(scene) == SCENE_MY_ROOM_BASEMENT_M || \
(scene) == SCENE_MY_ROOM_BASEMENT_L || \
(scene) == SCENE_MY_ROOM_BASEMENT_LL1)
#define mSc_IS_SCENE_PLAYER_ROOM(scene) \
((scene) == SCENE_MY_ROOM_S || (scene) == SCENE_MY_ROOM_M || (scene) == SCENE_MY_ROOM_L || \
(scene) == SCENE_MY_ROOM_LL1 || (scene) == SCENE_MY_ROOM_LL2 || (scene) == SCENE_MY_ROOM_BASEMENT_S || \
(scene) == SCENE_MY_ROOM_BASEMENT_M || (scene) == (SCENE_MY_ROOM_BASEMENT_L) || \
(scene) == SCENE_MY_ROOM_BASEMENT_LL1 || (scene) == SCENE_COTTAGE_MY)
#define mSc_IS_SCENE_MUSEUM_ROOM(scene) \
((scene) >= SCENE_MUSEUM_ENTRANCE && (scene) <= SCENE_MUSEUM_ROOM_FISH)
#define mSc_IS_SCENE_BASEMENT(scene) \
((scene) == SCENE_MY_ROOM_BASEMENT_S || (scene) == SCENE_MY_ROOM_BASEMENT_M || \
(scene) == SCENE_MY_ROOM_BASEMENT_L || (scene) == SCENE_MY_ROOM_BASEMENT_LL1)
#define mSc_IS_SCENE_MUSEUM_ROOM(scene) ((scene) >= SCENE_MUSEUM_ENTRANCE && (scene) <= SCENE_MUSEUM_ROOM_FISH)
extern Scene_data_status_c scene_data_status[SCENE_NUM];
+2 -4
View File
@@ -334,15 +334,13 @@ static void aAp_CommonHandle(ACTOR* actor, AIRPLANE_ACTOR* airplane, GAME* game)
}
static void aAp_ZbuttonChangeStatus(AIRPLANE_ACTOR* actor, GAME* game) {
GAME_PLAY* play = (GAME_PLAY*)game;
if (chkButton(BUTTON_Z)) {
if (actor->status == aAp_STATUS_PLAYER_CATCH) {
mPlib_request_main_refuse_type1(play);
mPlib_request_main_refuse_type1(game);
actor->status = aAp_STATUS_START_FLY_MOVE;
}
} else if (actor->status == aAp_STATUS_START_FLY_MOVE) {
mPlib_request_main_wait_type3((GAME*)play);
mPlib_request_main_wait_type3(game);
actor->status = aAp_STATUS_PLAYER_CATCH;
}
}
File diff suppressed because it is too large Load Diff
+2367
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+378
View File
@@ -0,0 +1,378 @@
static void aMR_SetKankyoMapping(FTR_ACTOR* ftr_actor, GAME_PLAY* play) {
aFTR_PROFILE* profile = aMR_GetFurnitureProfile(ftr_actor->name);
switch (profile->kankyo_map) {
case aFTR_KANKYO_MAP_OPA:
Setpos_HiliteReflect_init(&ftr_actor->position, play);
break;
case aFTR_KANKYO_MAP_XLU:
Setpos_HiliteReflect_xlu_init(&ftr_actor->position, play);
break;
}
}
static void aMR_LoadPallet(aFTR_PROFILE* profile, GAME* game) {
if (profile->palette != NULL) {
if (profile->opaque0 != NULL || profile->opaque1 != NULL || profile->rig != NULL) {
OPEN_DISP(game->graph);
gDPPipeSync(NEXT_POLY_OPA_DISP);
gDPLoadTLUT_pal16(NEXT_POLY_OPA_DISP, 15, profile->palette);
CLOSE_DISP(game->graph);
}
if (profile->translucent0 != NULL || profile->translucent1 != NULL || profile->rig != NULL) {
OPEN_DISP(game->graph);
gDPPipeSync(NEXT_POLY_XLU_DISP);
gDPLoadTLUT_pal16(NEXT_POLY_XLU_DISP, 15, profile->palette);
CLOSE_DISP(game->graph);
}
}
}
static void aMR_LoadTexture(aFTR_PROFILE* profile, GAME* game) {
if (profile->texture != NULL) {
if (profile->opaque0 != NULL || profile->opaque1 != NULL || profile->rig != NULL) {
OPEN_DISP(game->graph);
gDPPipeSync(NEXT_POLY_OPA_DISP);
gDPLoadTextureBlockS(NEXT_POLY_OPA_DISP, profile->texture, G_IM_FMT_I, G_IM_SIZ_8b, 64, 64, 0,
G_TX_MIRROR | G_TX_WRAP, G_TX_MIRROR | G_TX_WRAP, 7, 7, G_TX_NOLOD, G_TX_NOLOD);
CLOSE_DISP(game->graph);
}
if (profile->translucent0 != NULL || profile->translucent1 != NULL || profile->rig != NULL) {
OPEN_DISP(game->graph);
gDPPipeSync(NEXT_POLY_XLU_DISP);
gDPLoadTextureBlockS(NEXT_POLY_XLU_DISP, profile->texture, G_IM_FMT_I, G_IM_SIZ_8b, 64, 64, 0,
G_TX_MIRROR | G_TX_WRAP, G_TX_MIRROR | G_TX_WRAP, 7, 7, G_TX_NOLOD, G_TX_NOLOD);
CLOSE_DISP(game->graph);
}
}
}
static void aMR_SetLoopTextureAnime(FTR_ACTOR* ftr_actor, aFTR_PROFILE* profile, GAME* game) {
aFTR_tex_anim_c* tex_anime = profile->tex_anim;
if (tex_anime != NULL) {
u8* tex_p = tex_anime->animation[ftr_actor->tex_animation.frame];
OPEN_DISP(game->graph);
gSPSegment(NEXT_POLY_OPA_DISP, G_MWO_SEGMENT_8, tex_p);
gSPSegment(NEXT_POLY_XLU_DISP, G_MWO_SEGMENT_8, tex_p);
CLOSE_DISP(game->graph);
}
}
static void aMR_DrawRegistModel(aFTR_PROFILE* profile, GAME* game) {
OPEN_DISP(game->graph);
if (profile->opaque0 != NULL || profile->opaque1 != NULL) {
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
}
if (profile->opaque0 != NULL) {
gSPDisplayList(NEXT_POLY_OPA_DISP, profile->opaque0);
}
if (profile->opaque1 != NULL) {
gSPDisplayList(NEXT_POLY_OPA_DISP, profile->opaque1);
}
if (profile->translucent0 != NULL || profile->translucent1 != NULL) {
gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
}
if (profile->translucent0 != NULL) {
gSPDisplayList(NEXT_POLY_XLU_DISP, profile->translucent0);
}
if (profile->translucent1 != NULL) {
gSPDisplayList(NEXT_POLY_XLU_DISP, profile->translucent1);
}
CLOSE_DISP(game->graph);
}
static void aMR_DrawSkelShape(FTR_ACTOR* ftr_actor, aFTR_PROFILE* profile, GAME* game) {
if (profile->rig != NULL) {
cKF_SkeletonInfo_R_c* keyframe = &ftr_actor->keyframe;
int mtx_idx = game->frame_counter & 1;
Mtx* mtx = ftr_actor->skeleton_mtx[mtx_idx];
OPEN_DISP(game->graph);
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
CLOSE_DISP(game->graph);
cKF_Si3_draw_R_SV(game, keyframe, mtx, NULL, NULL, NULL);
}
}
static void aMR_DrawUniqueShape(FTR_ACTOR* ftr_actor, ACTOR* actorx, aFTR_PROFILE* profile, GAME* game) {
if (profile->vtable != NULL && profile->vtable->draw_proc != NULL) {
u8* bank = aMR_FtrNo2BankAddress(ftr_actor->name);
OPEN_DISP(game->graph);
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
CLOSE_DISP(game->graph);
profile->vtable->draw_proc(ftr_actor, actorx, game, bank);
}
}
static void aMR_DrawItemOnMovingFurniture(ACTOR* actorx, FTR_ACTOR* ftr_actor, GAME* game) {
MY_ROOM_ACTOR* my_room = (MY_ROOM_ACTOR*)actorx;
aMR_parent_ftr_c* parent_ftr = &my_room->parent_ftr;
if (parent_ftr->ftrID == ftr_actor->id) {
int i;
OPEN_DISP(game->graph);
gDPSetTexEdgeAlpha(NEXT_POLY_OPA_DISP, 144);
gDPSetTexEdgeAlpha(NEXT_POLY_XLU_DISP, 144);
for (i = 0; i < aMR_FIT_FTR_MAX; i++) {
if (parent_ftr->fit_ftr_table[i].exist_flag == TRUE) {
mActor_name_t item_no = parent_ftr->fit_ftr_table[i].item_no;
xyz_t* pos = &parent_ftr->fit_ftr_table[i].ut_pos;
if (Common_Get(clip).shop_goods_clip != NULL &&
Common_Get(clip).shop_goods_clip->single_draw_proc != NULL) {
Common_Get(clip).shop_goods_clip->single_draw_proc(game, item_no, pos, 0.01f,
parent_ftr->fit_ftr_table[i].angle_y +
(ftr_actor->s_angle_y - parent_ftr->angle_y),
mCoBG_LAYER1);
}
}
}
CLOSE_DISP(game->graph);
}
}
static int aMR_GetFitNo(ACTOR* actorx, FTR_ACTOR* ftr_actor) {
MY_ROOM_ACTOR* my_room = (MY_ROOM_ACTOR*)actorx;
aMR_parent_ftr_c* parent_ftr = &my_room->parent_ftr;
int i;
for (i = 0; i < aMR_FIT_FTR_MAX; i++) {
if (parent_ftr->fit_ftr_table[i].ftr_ID == ftr_actor->id) {
return i;
}
}
return -1;
}
static void aMR_FurnitureLightSet(FTR_ACTOR* ftr_actor, GAME_PLAY* play) {
LightsN* lights;
xyz_t center;
aMR_GetFtrShapeCenter(&center, ftr_actor);
lights = Global_light_read(&play->global_light, play->game.graph);
LightsN_list_check(lights, play->global_light.list, &center);
LightsN_disp(lights, play->game.graph);
}
static void aMR_DrawOneFurniture(FTR_ACTOR* ftr_actor, ACTOR* actorx, GAME* game, int fit_flag) {
xyz_t ftr_scale = ftr_actor->scale;
GAME_PLAY* play = (GAME_PLAY*)game;
MY_ROOM_ACTOR* my_room = (MY_ROOM_ACTOR*)actorx;
aFTR_PROFILE* profile;
profile = aMR_GetFurnitureProfile(ftr_actor->name);
if (profile != NULL) {
f32 scale = profile->scale;
_texture_z_light_fog_prim_xlu(game->graph);
_texture_z_light_fog_prim(game->graph);
aMR_FurnitureLightSet(ftr_actor, play);
aMR_LoadTexture(profile, game);
aMR_LoadPallet(profile, game);
aMR_SetKankyoMapping(ftr_actor, play);
if (fit_flag == TRUE) {
aMR_parent_ftr_c* parent_ftr = &my_room->parent_ftr;
FTR_ACTOR* fit_ftr_p = &l_aMR_work.ftr_actor_list[parent_ftr->ftrID];
int fit_no = aMR_GetFitNo(actorx, ftr_actor);
s16 angle = fit_ftr_p->s_angle_y - parent_ftr->angle_y;
aMR_fit_ftr_c* fit_ftr_info_p = &parent_ftr->fit_ftr_table[fit_no & 3];
xyz_t* pos = &fit_ftr_info_p->pos;
Matrix_translate(fit_ftr_p->position.x, fit_ftr_p->position.y, fit_ftr_p->position.z, 0);
Matrix_RotateY(angle, 1);
Matrix_translate(fit_ftr_p->base_position.x, fit_ftr_p->base_position.y, fit_ftr_p->base_position.z, 1);
if (ftr_actor->name == 0x9A) { /* lower alarm clock ftr's height */
Matrix_translate(pos->x, pos->y - 4.0f, pos->z, 1);
} else {
Matrix_translate(pos->x, pos->y, pos->z, 1);
}
Matrix_RotateY(ftr_actor->s_angle_y, 1);
Matrix_translate(ftr_actor->base_position.x, ftr_actor->base_position.y, ftr_actor->base_position.z, 1);
if (ftr_actor->state == aFTR_STATE_BIRTH && ftr_actor->shape_type <= aFTR_SHAPE_TYPEB_0) {
Matrix_translate(mFI_UT_WORLDSIZE_HALF_X_F, 0.0f, 0.0f, 1);
}
Matrix_scale(ftr_scale.x, ftr_scale.y, ftr_scale.z, 1);
if (ftr_actor->state == aFTR_STATE_BIRTH && ftr_actor->shape_type <= aFTR_SHAPE_TYPEB_0) {
Matrix_translate(-mFI_UT_WORLDSIZE_HALF_X_F, 0.0f, 0.0f, 1);
}
Matrix_scale(scale, scale, scale, 1);
} else {
if (ftr_actor->name == 0x9A) { /* lower alarm clock ftr's height */
Matrix_translate(ftr_actor->position.x, ftr_actor->position.y - 4.0f, ftr_actor->position.z, 0);
} else {
Matrix_translate(ftr_actor->position.x, ftr_actor->position.y, ftr_actor->position.z, 0);
}
Matrix_RotateY(ftr_actor->s_angle_y, 1);
if (Save_Get(scene_no) == SCENE_MUSEUM_ROOM_FOSSIL &&
aFTR_CHECK_INTERACTION(profile->interaction_type, aFTR_INTERACTION_TYPE_FOSSIL) &&
profile->shape <= aFTR_SHAPE_TYPEB_0) {
Matrix_translate(ftr_actor->base_position.x + 2.5f, ftr_actor->base_position.y,
ftr_actor->base_position.z, 1);
} else {
Matrix_translate(ftr_actor->base_position.x, ftr_actor->base_position.y, ftr_actor->base_position.z, 1);
}
if (ftr_actor->state == aFTR_STATE_BIRTH && ftr_actor->shape_type <= aFTR_SHAPE_TYPEB_0) {
Matrix_translate(mFI_UT_WORLDSIZE_HALF_X_F, 0.0f, 0.0f, 1);
}
Matrix_scale(ftr_scale.x, ftr_scale.y, ftr_scale.z, 1);
if (ftr_actor->state == aFTR_STATE_BIRTH && ftr_actor->shape_type <= aFTR_SHAPE_TYPEB_0) {
Matrix_translate(-mFI_UT_WORLDSIZE_HALF_X_F, 0.0f, 0.0f, 1);
}
Matrix_scale(scale, scale, scale, 1);
}
aMR_SetLoopTextureAnime(ftr_actor, profile, game);
aMR_DrawRegistModel(profile, game);
aMR_DrawSkelShape(ftr_actor, profile, game);
aMR_DrawUniqueShape(ftr_actor, actorx, profile, game);
aMR_DrawItemOnMovingFurniture(actorx, ftr_actor, game);
}
}
static void aMR_DrawFurniture(MY_ROOM_ACTOR* my_room, GAME_PLAY* play, int ftr_flag, u16 ftr_no) {
ACTOR* actorx = (ACTOR*)my_room;
GAME* game = (GAME*)play;
int i;
int z;
OPEN_DISP(game->graph);
gDPSetTexEdgeAlpha(NEXT_POLY_OPA_DISP, 127);
gDPSetTexEdgeAlpha(NEXT_POLY_XLU_DISP, 127);
CLOSE_DISP(game->graph);
for (z = UT_Z_NUM - 1; z >= 0; z--) {
FTR_ACTOR* ftr_actor = l_aMR_work.ftr_actor_list;
u8* used = l_aMR_work.used_list;
for (i = 0; i < l_aMR_work.list_size; i++) {
if (*used == TRUE && mFI_POS2UT(ftr_actor->position.z) == z) {
if ((ftr_flag == FALSE && ftr_actor->name != ftr_no) ||
(ftr_flag == TRUE && ftr_actor->name == ftr_no)) {
int alpha_edge;
int fit_flag = (ftr_actor->layer == mCoBG_LAYER0 || my_room->parent_ftr.ftrID == -1 ||
(my_room->parent_ftr.ftrID != -1 &&
my_room->parent_ftr.fit_ftr_table[0].ftr_ID != ftr_actor->id &&
my_room->parent_ftr.fit_ftr_table[1].ftr_ID != ftr_actor->id &&
my_room->parent_ftr.fit_ftr_table[2].ftr_ID != ftr_actor->id &&
my_room->parent_ftr.fit_ftr_table[3].ftr_ID != ftr_actor->id)) == FALSE;
alpha_edge = aMR_GetAlphaEdge(ftr_actor->name);
OPEN_DISP(game->graph);
gDPSetTexEdgeAlpha(NEXT_POLY_OPA_DISP, alpha_edge);
gDPSetTexEdgeAlpha(NEXT_POLY_XLU_DISP, alpha_edge);
CLOSE_DISP(game->graph);
if (aMR_DrawDolphinMode(ftr_actor->name)) {
OPEN_DISP(game->graph);
gDPSetTextureAdjustMode(NEXT_POLY_OPA_DISP, G_TA_DOLPHIN);
gDPSetTextureAdjustMode(NEXT_POLY_XLU_DISP, G_TA_DOLPHIN);
CLOSE_DISP(game->graph);
}
aMR_DrawOneFurniture(ftr_actor, actorx, game, fit_flag);
if (aMR_DrawDolphinMode(ftr_actor->name)) {
OPEN_DISP(game->graph);
gDPSetTextureAdjustMode(NEXT_POLY_OPA_DISP, G_TA_N64);
gDPSetTextureAdjustMode(NEXT_POLY_XLU_DISP, G_TA_N64);
CLOSE_DISP(game->graph);
}
}
}
ftr_actor++;
used++;
}
}
OPEN_DISP(game->graph);
gDPSetTexEdgeAlpha(NEXT_POLY_OPA_DISP, 144);
gDPSetTexEdgeAlpha(NEXT_POLY_XLU_DISP, 144);
CLOSE_DISP(game->graph);
}
static void aMR_DrawLeaf(MY_ROOM_ACTOR* my_room, GAME_PLAY* play) {
GAME* game = (GAME*)play;
if (my_room->leaf_info.exist_flag) {
f32 scale = my_room->leaf_info.scale;
OPEN_DISP(game->graph);
_texture_z_light_fog_prim(game->graph);
Matrix_translate(my_room->leaf_info.pos.x, my_room->leaf_info.pos.y, my_room->leaf_info.pos.z, 0);
Matrix_scale(scale, scale, scale, 1);
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(NEXT_POLY_OPA_DISP, aMR_IconNo2Gfx1(my_room->pickup_info.icon));
gSPDisplayList(NEXT_POLY_OPA_DISP, aMR_IconNo2Gfx2(my_room->pickup_info.icon));
CLOSE_DISP(game->graph);
my_room->leaf_info.exist_flag = FALSE;
}
}
static void My_Room_Actor_draw(ACTOR* actorx, GAME* game) {
MY_ROOM_ACTOR* my_room = (MY_ROOM_ACTOR*)actorx;
GAME_PLAY* play = (GAME_PLAY*)game;
aMR_DrawFurniture(my_room, play, FALSE, 0x41C); /* lighthouse model */
aMR_DrawFurniture(my_room, play, TRUE, 0x41C); /* lighthouse model */
aMR_DrawLeaf(my_room, play);
}
+247
View File
@@ -0,0 +1,247 @@
extern void aMR_SetSurprise(ACTOR* actorx, s16 angle_y) {
if (actorx != NULL) {
MY_ROOM_ACTOR* my_room = (MY_ROOM_ACTOR*)actorx;
my_room->request_player_surprise = TRUE;
my_room->player_surprise_angle_y = angle_y;
}
}
static int aMR_MakeIndoorGoki(xyz_t* pos, s16 arg, s16 angle_y, GAME* game) {
GAME_PLAY* play = (GAME_PLAY*)game;
ACTOR* actor = Actor_info_make_actor(&play->actor_info, game, mAc_PROFILE_HOUSE_GOKI, pos->x, pos->y, pos->z, 0,
angle_y, 0, -1, -1, -1, EMPTY_NO, arg, -1, -1);
if (actor) {
return TRUE;
}
return FALSE;
}
typedef struct goki_info_s {
int scene;
int size;
} aMR_goki_info_c;
static int aMR_RandomMakeIndoorGoki(s16 arg, GAME* game) {
// clang-format off
static aMR_goki_info_c goki_random_make_data[] = {
{ SCENE_MY_ROOM_S, 4 },
{ SCENE_MY_ROOM_M, 6 },
{ SCENE_MY_ROOM_LL2, 6 },
{ SCENE_MY_ROOM_L, 8 },
{ SCENE_MY_ROOM_LL1, 8 },
{ SCENE_MY_ROOM_BASEMENT_S, 6 },
{ SCENE_MY_ROOM_BASEMENT_M, 6 },
{ SCENE_MY_ROOM_BASEMENT_L, 6 },
{ SCENE_MY_ROOM_BASEMENT_LL1, 6 },
};
// clang-format on
int scene = Save_Get(scene_no);
int free_count0 = 0;
int free_count1 = 0;
mActor_name_t* fg_p = aMR_GetLayerTopFg(mCoBG_LAYER0);
int i;
int sel_no;
int ut_x;
int ut_z;
if (fg_p != NULL) {
for (i = 0; i < ARRAY_COUNT(goki_random_make_data); i++) {
if (scene == goki_random_make_data[i].scene) {
for (ut_z = 1; ut_z <= goki_random_make_data[i].size; ut_z++) {
for (ut_x = 1; ut_x <= goki_random_make_data[i].size; ut_x++) {
mActor_name_t item = fg_p[ut_x + ut_z * UT_X_NUM];
if (!ITEM_IS_FTR(item) && item != RSV_FE1F && item != RSV_NO && item != RSV_WALL_NO &&
item != RSV_DOOR) {
free_count0++;
}
}
}
if (free_count0 <= 0) {
return FALSE;
}
sel_no = RANDOM(free_count0);
for (ut_z = 1; ut_z <= goki_random_make_data[i].size; ut_z++) {
for (ut_x = 1; ut_x <= goki_random_make_data[i].size; ut_x++) {
mActor_name_t item = fg_p[ut_x + ut_z * UT_X_NUM];
if (!ITEM_IS_FTR(item) && item != RSV_FE1F && item != RSV_NO && item != RSV_WALL_NO &&
item != RSV_DOOR) {
if (sel_no == free_count1) {
xyz_t pos;
if (mFI_UtNum2CenterWpos(&pos, ut_x, ut_z)) {
pos.y = 0.0f;
pos.y = mCoBG_GetBgY_OnlyCenter_FromWpos(pos, 0.0f);
return aMR_MakeIndoorGoki(&pos, arg, 0, game);
}
}
free_count1++;
}
}
}
}
}
}
return FALSE;
}
static void aMR_RequestPlayerBikkuri(ACTOR* actorx, GAME* game) {
MY_ROOM_ACTOR* my_room = (MY_ROOM_ACTOR*)actorx;
if (my_room->request_player_surprise) {
if (mPlib_get_player_actor_main_index(gamePT) != mPlayer_INDEX_SHOCK) {
mPlib_request_main_shock_type1(gamePT, 20.0f, my_room->player_surprise_angle_y, FALSE);
} else {
my_room->request_player_surprise = FALSE;
}
}
}
static void aMR_GokiInfoCt_Dummy(ACTOR* actorx, GAME* game) {
// nothing
}
static void aMR_GokiInfoCt(ACTOR* actorx, GAME* game) {
int field_type = Common_Get(field_type);
GAME_PLAY* play = (GAME_PLAY*)game;
PLAYER_ACTOR* player = GET_PLAYER_ACTOR(play);
MY_ROOM_ACTOR* my_room = (MY_ROOM_ACTOR*)actorx;
int goki_count = mCkRh_NowSceneGokiFamilyCount();
mCkRh_InitCanLookGokiCount();
if (goki_count != 0) {
int max;
int i;
if (goki_count < aMR_GOKI_MAX) {
max = goki_count;
} else {
max = aMR_GOKI_MAX;
}
for (i = 0; i < max; i++) {
if (i == 0) {
if (Save_Get(scene_no) == SCENE_MY_ROOM_S || Save_Get(scene_no) == SCENE_MY_ROOM_M ||
Save_Get(scene_no) == SCENE_MY_ROOM_L || Save_Get(scene_no) == SCENE_MY_ROOM_LL1 ||
Save_Get(scene_no) == SCENE_MY_ROOM_BASEMENT_S || Save_Get(scene_no) == SCENE_MY_ROOM_BASEMENT_M ||
Save_Get(scene_no) == SCENE_MY_ROOM_BASEMENT_L ||
Save_Get(scene_no) == SCENE_MY_ROOM_BASEMENT_LL1) {
static f32 off_x[] = { 10.0f, -10.0f, 15.0f, -15.0f };
xyz_t pos = player->actor_class.world.position;
mActor_name_t* fg_p;
pos.x += off_x[play->game_frame % ARRAY_COUNT(off_x)];
pos.y = 0.0f;
pos.z += -10.0f;
pos.y = mCoBG_GetBgY_OnlyCenter_FromWpos2(pos, 0.0f);
fg_p = mFI_GetUnitFG(pos);
if (fg_p != NULL && !ITEM_IS_FTR(*fg_p) && *fg_p != RSV_FE1F && *fg_p != RSV_NO &&
*fg_p != RSV_WALL_NO && *fg_p != RSV_DOOR) {
int spawned = aMR_MakeIndoorGoki(&pos, 0, DEG2SHORT_ANGLE(0.0f), game);
if (spawned) {
mCkRh_CalcCanLookGokiCount(1);
mCkRh_MinusGokiN_NowRoom(1, my_room->scene);
if (Common_Get(goki_shocked_flag) == FALSE && field_type == mFI_FIELDTYPE2_PLAYER_ROOM) {
aMR_SetSurprise(actorx, DEG2SHORT_ANGLE(-180.0f));
Common_Set(goki_shocked_flag, TRUE);
}
}
}
}
} else {
int spawned = aMR_RandomMakeIndoorGoki(0, game);
if (spawned) {
mCkRh_CalcCanLookGokiCount(1);
mCkRh_MinusGokiN_NowRoom(1, my_room->scene);
if (Common_Get(goki_shocked_flag) == FALSE && field_type == mFI_FIELDTYPE2_PLAYER_ROOM) {
aMR_SetSurprise(actorx, DEG2SHORT_ANGLE(-180.0f));
Common_Set(goki_shocked_flag, TRUE);
}
}
}
}
}
my_room->goki_ct_proc = &aMR_GokiInfoCt_Dummy;
}
static void aMR_MakeGokiburi(xyz_t* pos, GAME* game, s16 arg) {
if (mCkRh_NowSceneGokiFamilyCount() > 0 && mCkRh_GetCanLookGokiCount() < aMR_GOKI_MAX &&
aMR_MakeIndoorGoki(pos, arg, DEG2SHORT_ANGLE(0.0f), game)) {
mCkRh_CalcCanLookGokiCount(1);
if (aMR_CLIP != NULL) {
ACTOR* actorx = aMR_CLIP->my_room_actor_p;
if (actorx != NULL) {
MY_ROOM_ACTOR* my_room = (MY_ROOM_ACTOR*)actorx;
mCkRh_MinusGokiN_NowRoom(1, my_room->scene);
}
}
}
}
static void aMR_GokiInfoDt(void) {
if (aMR_CLIP != NULL) {
ACTOR* actorx = aMR_CLIP->my_room_actor_p;
if (actorx != NULL) {
MY_ROOM_ACTOR* my_room = (MY_ROOM_ACTOR*)actorx;
mCkRh_PlussGokiN_NowRoom(mCkRh_GetCanLookGokiCount(), my_room->scene);
}
}
}
static int aMR_CheckFtrAndGoki2(aFTR_collision_c* ftr_col, const xyz_t* goki_pos) {
f32 check_pos[2];
int i;
check_pos[0] = goki_pos->x;
check_pos[1] = goki_pos->z;
for (i = 0; i < aFTR_EDGE_COL_NUM; i++) {
aFTR_collision_c* col_p = &ftr_col[i];
if (mCoBG_GetPointInfoFrontLine(col_p->start, check_pos, col_p->normal)) {
return FALSE;
}
}
return TRUE;
}
static void aMR_CheckFtrAndGoki(ACTOR* actorx, FTR_ACTOR* ftr_actor, GAME* game) {
GAME_PLAY* play = (GAME_PLAY*)game;
ACTOR* actor_p = play->actor_info.list[ACTOR_PART_BG].actor;
int count = 0;
while (actor_p != NULL) {
if (actor_p->id == mAc_PROFILE_HOUSE_GOKI) {
if (aMR_CheckFtrAndGoki2(ftr_actor->edge_collision, &actor_p->world.position)) {
actor_p->actor_specific = 2;
}
count++;
if (count >= aMR_GOKI_MAX) {
break;
}
}
actor_p = actor_p->next_actor;
}
}
+17
View File
@@ -0,0 +1,17 @@
static void aMR_SetMelodyData(u8* melody_data) {
mRmTp_MakeMelodyData();
}
static u8* aMR_GetMelodyData(ACTOR* actorx) {
return mRmTp_GetMelodyData();
}
static void aMR_SoundMelody(FTR_ACTOR* ftr_actor, ACTOR* actorx, int idx) {
if (ftr_actor->switch_changed_flag) {
u8* melody_data = aMR_GetMelodyData(actorx);
sAdo_FurnitureInst((u32)ftr_actor, idx, melody_data, &ftr_actor->position);
}
sAdo_FurnitureInstPos((u32)ftr_actor, &ftr_actor->position);
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+24 -25
View File
@@ -13,7 +13,7 @@
int S_ongenpos_refuse_fg;
static void sAdo_Calc_MicPosition_common(f32* fcalc, u16* scalc, xyz_t* pos) {
static void sAdo_Calc_MicPosition_common(f32* fcalc, u16* scalc, const xyz_t* pos) {
f32 diff;
xyz_t posd;
@@ -35,12 +35,12 @@ static void sAdo_Calc_MicPosition_common(f32* fcalc, u16* scalc, xyz_t* pos) {
}
}
extern void sAdo_Calc_MicPosition_forTrig(f32* fcalc, u16* scalc, xyz_t* pos) {
extern void sAdo_Calc_MicPosition_forTrig(f32* fcalc, u16* scalc, const xyz_t* pos) {
sAdo_Calc_MicPosition_common(fcalc, scalc, pos);
}
extern void sAdo_Calc_MicPosition_forLevel(f32* fcalc, u16* scalc, xyz_t* pos) {
extern void sAdo_Calc_MicPosition_forLevel(f32* fcalc, u16* scalc, const xyz_t* pos) {
sAdo_Calc_MicPosition_common(fcalc, scalc, pos);
}
@@ -60,7 +60,7 @@ extern void sAdo_SysTrgStart(u16 id) {
Na_SysTrgStart(id);
}
extern void sAdo_PlyWalkSe(int walk, xyz_t* pos) {
extern void sAdo_PlyWalkSe(int walk, const xyz_t* pos) {
f32 fcalc;
u16 scalc;
@@ -69,7 +69,7 @@ extern void sAdo_PlyWalkSe(int walk, xyz_t* pos) {
Na_PlyWalkSe(walk, scalc, fcalc);
}
extern void sAdo_PlyWalkSeRoom(int walk, xyz_t* pos) {
extern void sAdo_PlyWalkSeRoom(int walk, const xyz_t* pos) {
f32 fcalc;
u16 scalc;
@@ -78,7 +78,7 @@ extern void sAdo_PlyWalkSeRoom(int walk, xyz_t* pos) {
Na_PlyWalkSeRoom(walk, scalc, fcalc);
}
extern void sAdo_NpcWalkSe(int walk, xyz_t* pos) {
extern void sAdo_NpcWalkSe(int walk, const xyz_t* pos) {
f32 fcalc;
u16 scalc;
@@ -87,7 +87,7 @@ extern void sAdo_NpcWalkSe(int walk, xyz_t* pos) {
Na_NpcWalkSe(walk, scalc, fcalc);
}
extern void sAdo_NpcWalkSeRoom(int walk, xyz_t* pos) {
extern void sAdo_NpcWalkSeRoom(int walk, const xyz_t* pos) {
f32 fcalc;
u16 scalc;
@@ -135,7 +135,7 @@ extern void sAdo_SysLevStop(u8 id) {
Na_SysLevStop(id);
}
extern void sAdo_OngenPos(u32 p1, u8 p2, xyz_t* pos) {
extern void sAdo_OngenPos(u32 p1, u8 p2, const xyz_t* pos) {
u16 scalc;
f32 fcalc;
@@ -146,7 +146,7 @@ extern void sAdo_OngenPos(u32 p1, u8 p2, xyz_t* pos) {
}
}
extern void sAdo_OngenTrgStart(u16 id, xyz_t* pos) {
extern void sAdo_OngenTrgStart(u16 id, const xyz_t* pos) {
u16 scalc;
f32 fcalc;
@@ -171,7 +171,7 @@ extern void sAdo_SetVoiceMode(u8 mode) {
Na_SetVoiceMode(mode);
}
extern void sAdo_FloorTrgStart(u16 id, xyz_t* pos) {
extern void sAdo_FloorTrgStart(u8 id, const xyz_t* pos) {
u16 scalc;
f32 fcalc;
@@ -195,13 +195,13 @@ extern void sAdo_RhythmAllStop() {
Na_RhythmAllStop();
}
extern void sAdo_FurnitureInst(int track_id, s8 cb, s32 cl, xyz_t* pos) {
extern void sAdo_FurnitureInst(u32 id, u8 inst, u8* melody, const xyz_t* pos) {
u16 scalc;
f32 fcalc;
sAdo_Calc_MicPosition_common(&fcalc, &scalc, pos);
Na_FurnitureInst(track_id, cb, cl, scalc, fcalc);
Na_FurnitureInst(id, inst, melody, scalc, fcalc);
}
extern void sAdo_Pause(u8 mode) {
@@ -219,14 +219,13 @@ extern s8 sAdo_GetRhythmDelay(u32 p) {
return Na_GetRhythmDelay(p);
}
extern f32 sAdo_GetRhythmInfo(u32 p) {
extern void sAdo_GetRhythmInfo(TempoBeat_c* rhythm) {
return Na_GetRhythmInfo(p);
Na_GetRhythmInfo(rhythm);
}
extern void sAdo_SetRhythmInfo(f32 p) {
Na_SetRhythmInfo(p);
extern void sAdo_SetRhythmInfo(TempoBeat_c* rhythm) {
Na_SetRhythmInfo(rhythm);
}
extern int sAdo_InstCountGet() {
@@ -234,7 +233,7 @@ extern int sAdo_InstCountGet() {
return Na_InstCountGet();
}
extern void sAdo_RhythmPos(u32 p, u8 haniwa_id, xyz_t* pos) {
extern void sAdo_RhythmPos(u32 p, u8 haniwa_id, const xyz_t* pos) {
u16 scalc;
f32 fcalc;
@@ -248,7 +247,7 @@ extern void sAdo_SpecChange(int spec) {
Na_SpecChange(spec);
}
extern void sAdo_MDPlayerPos(xyz_t* pos, u16 s1, u16 s2, int p) {
extern void sAdo_MDPlayerPos(const xyz_t* pos, u16 s1, u16 s2, int p) {
u16 scalc;
f32 fcalc;
@@ -317,7 +316,7 @@ extern void sAdos_TTKK_ARM(u8 mode) {
Na_TTKK_ARM(mode);
}
extern void sAdo_OngenTrgStartSpeed(f32 speed, u16 s1, xyz_t* pos) {
extern void sAdo_OngenTrgStartSpeed(f32 speed, u16 s1, const xyz_t* pos) {
f32 fcalc;
u16 scalc;
@@ -444,7 +443,7 @@ extern void sAdo_SceneMode(u8 mode) {
Na_SceneMode(mode);
}
extern u8 sAdo_RoomIncectPos(u32 f, u16 u, xyz_t* pos) {
extern u8 sAdo_RoomIncectPos(u32 f, u16 u, const xyz_t* pos) {
u16 scalc;
f32 fcalc;
@@ -453,13 +452,13 @@ extern u8 sAdo_RoomIncectPos(u32 f, u16 u, xyz_t* pos) {
return Na_RoomIncectPos(f, u, scalc, fcalc);
}
extern void sAdo_FurnitureInstPos(u32 f, xyz_t* pos) {
extern void sAdo_FurnitureInstPos(u32 id, const xyz_t* pos) {
u16 scalc;
f32 fcalc;
sAdo_Calc_MicPosition_forLevel(&fcalc, &scalc, pos);
Na_FurnitureInstPos(f, scalc, fcalc);
Na_FurnitureInstPos(id, scalc, fcalc);
}
extern void sAdo_Set_ongenpos_refuse_fg(int state) {
@@ -477,7 +476,7 @@ extern int sAdo_GetSoundFrameCounter() {
return Na_GetSoundFrameCounter();
}
extern int sAdo_CheckOnPlussBridge(xyz_t* pos, u32 atr) {
extern int sAdo_CheckOnPlussBridge(const xyz_t* pos, u32 atr) {
f32 x;
f32 z;
@@ -491,7 +490,7 @@ extern int sAdo_CheckOnPlussBridge(xyz_t* pos, u32 atr) {
return 0;
}
extern void sAdo_RegistPlussBridge(xyz_t* pos) {
extern void sAdo_RegistPlussBridge(const xyz_t* pos) {
Common_Set(pluss_bridge_pos, pos);
}
+2 -3
View File
@@ -1014,9 +1014,8 @@ extern void cKF_SkeletonInfo_R_T_combine_play(int* arg1, int* arg2, int* arg3, c
*arg3 = cKF_FrameControl_play(&info3->frame_control);
}
extern void cKF_SkeletonInfo_R_Animation_Set_base_shape_trs(f32 transx, f32 transy, f32 transz,
cKF_SkeletonInfo_R_c* keyframe, s16 anglex, s16 angley,
s16 anglez) {
extern void cKF_SkeletonInfo_R_Animation_Set_base_shape_trs(cKF_SkeletonInfo_R_c* keyframe, f32 transx, f32 transy,
f32 transz, s16 anglex, s16 angley, s16 anglez) {
keyframe->base_model_translation.x = transx;
keyframe->base_model_translation.y = transy;
keyframe->base_model_translation.z = transz;
+7 -9
View File
@@ -77,7 +77,7 @@ extern void famicom_emu_main(GAME* famicom) {
if (famicom_done == 0) {
if (famicom_rom_load_check() < 0) {
Common_Set(famicom_2DBAC, Common_Get(famicom_2DBAC) | 1);
Common_Set(my_room_message_control_flags, Common_Get(my_room_message_control_flags) | 1);
famicom_done = 1;
famicom_done_countdown = 0;
} else {
@@ -152,7 +152,7 @@ extern void famicom_emu_init(GAME* game) {
my_alloc_init(game, freeXfbBase, freeXfbSize);
if (famicom_init(rom_id, &my_malloc_func, player) != 0) {
Common_Set(famicom_2DBAC, Common_Get(famicom_2DBAC) | 1);
Common_Set(my_room_message_control_flags, Common_Get(my_room_message_control_flags) | 1);
return_emu_game(game);
}
}
@@ -161,7 +161,7 @@ extern void famicom_emu_cleanup(GAME* game) {
JC_JFWDisplay_startFadeIn(JC_JFWDisplay_getManager(), 1);
if (famicom_cleanup() != 0) {
Common_Set(famicom_2DBAC, Common_Get(famicom_2DBAC) | 2);
Common_Set(my_room_message_control_flags, Common_Get(my_room_message_control_flags) | 2);
}
my_alloc_cleanup();
@@ -174,7 +174,7 @@ extern void famicom_emu_cleanup(GAME* game) {
sAdo_SubGameEnd();
}
extern int famicom_gba_getImage(u32 rom_id, int* ptr) {
extern void* famicom_gba_getImage(u32 rom_id, size_t* size) {
static char* names[] = {
"cluclu", "usa_balloon", "donkey", "usa_jr_math", "pinball", "tennis", "usa_golf",
NULL, "usa_baseball", NULL, "usa_donkey3", "donkeyjr", "soccer", "exbike",
@@ -182,8 +182,7 @@ extern int famicom_gba_getImage(u32 rom_id, int* ptr) {
};
char buf[256];
u32 resource;
int block;
void* resource;
char* rom;
if (rom_id > 19) {
@@ -197,9 +196,8 @@ extern int famicom_gba_getImage(u32 rom_id, int* ptr) {
} else {
sprintf(buf, "/FAMICOM/GBA/jb_%s.bin.szs", rom);
resource = JC__JKRGetResource(buf);
if ((resource != 0) && (ptr != NULL)) {
block = JC__JKRGetMemBlockSize(0, resource);
*ptr = block;
if ((resource != NULL) && (size != NULL)) {
*size = JC__JKRGetMemBlockSize(0, resource);
}
}
return resource;
+11 -30
View File
@@ -57,7 +57,7 @@ static void fIJHOUI_mv(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u
cKF_SkeletonInfo_R_c* keyf = &ftr_actor->keyframe;
FTR_ACTOR* parent;
parent = aMR_GetParentFactor();
parent = aMR_GetParentFactor(ftr_actor, my_room_actor);
fIJHOUI_Status2SetMode(ftr_actor, ftr_actor);
if (parent != NULL) {
@@ -88,14 +88,14 @@ static void fIJHOUI_mv(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u
ftr_actor->dynamic_work_s[0] = ftr_actor->state;
}
static int fIJHOUI_DrawBefore(GAME* game, cKF_SkeletonInfo_R_c* keyf, int jointNum, Gfx** joint, u8* jointFlag, void* arg,
s_xyz* joint1, xyz_t* trans) {
static int fIJHOUI_DrawBefore(GAME* game, cKF_SkeletonInfo_R_c* keyf, int jointNum, Gfx** joint, u8* jointFlag,
void* arg, s_xyz* joint1, xyz_t* trans) {
FTR_ACTOR* actor = (FTR_ACTOR*)arg;
int offset = 10430.378f * (0.017453292f * actor->dynamic_work_f[1]);
if (jointNum == 3) {
MY_ROOM_ACTOR* my_room_actor;
ACTOR* my_room_actor;
int exists = FALSE;
if ((Common_Get(clip).my_room_clip != NULL && Common_Get(clip).my_room_clip->my_room_actor_p != NULL)) {
@@ -114,15 +114,15 @@ static int fIJHOUI_DrawBefore(GAME* game, cKF_SkeletonInfo_R_c* keyf, int jointN
return 1;
}
static int fIJHOUI_DrawAfter(GAME* game, cKF_SkeletonInfo_R_c* keyf, int jointNum, Gfx** joint, u8* jointFlag, void* arg,
s_xyz* joint1, xyz_t* trans) {
static int fIJHOUI_DrawAfter(GAME* game, cKF_SkeletonInfo_R_c* keyf, int jointNum, Gfx** joint, u8* jointFlag,
void* arg, s_xyz* joint1, xyz_t* trans) {
return 1;
}
static void fIJHOUI_dw(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data) {
Mtx* mtx = ftr_actor->skeleton_mtx[game->frame_counter & 1];
OPEN_DISP(game->graph);
OPEN_DISP(game->graph);
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -131,29 +131,10 @@ static void fIJHOUI_dw(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u
}
static aFTR_vtable_c fIJHOUI_func = {
&fIJHOUI_ct,
&fIJHOUI_mv,
&fIJHOUI_dw,
NULL,
NULL,
&fIJHOUI_ct, &fIJHOUI_mv, &fIJHOUI_dw, NULL, NULL,
};
aFTR_PROFILE iam_ike_jny_houi01 = {
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
40.0f,
0.01f,
aFTR_SHAPE_TYPEA,
mCoBG_FTR_TYPEA,
0,
2,
0,
0,
&fIJHOUI_func,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 40.0f, 0.01f, aFTR_SHAPE_TYPEA, mCoBG_FTR_TYPEA,
0, 2, 0, 0, &fIJHOUI_func,
};
+15 -22
View File
@@ -608,18 +608,18 @@ extern void Actor_get_overlay_area(ACTOR_DLFTBL* dlftbl, int unused, size_t allo
}
}
static int Actor_data_bank_regist_check_npc(int* bank_id, ACTOR_PROFILE* profile, ACTOR_DLFTBL* dlftbl, GAME* game,
static int Actor_data_bank_regist_check_npc(int* bank_id, ACTOR_PROFILE* profile, ACTOR_DLFTBL* dlftbl, GAME_PLAY* play,
mActor_name_t name_id) {
return TRUE;
}
static int Actor_data_bank_regist_check(int* bank_id, ACTOR_PROFILE* profile, ACTOR_DLFTBL* dlftbl, GAME* game,
static int Actor_data_bank_regist_check(int* bank_id, ACTOR_PROFILE* profile, ACTOR_DLFTBL* dlftbl, GAME_PLAY* play,
mActor_name_t name_id) {
int res = TRUE;
if (*bank_id == -1) {
if (profile->part == ACTOR_PART_NPC) {
res = Actor_data_bank_regist_check_npc(bank_id, profile, dlftbl, game, name_id);
res = Actor_data_bank_regist_check_npc(bank_id, profile, dlftbl, play, name_id);
} else {
// in DnM, this was another func call
res = TRUE;
@@ -687,31 +687,32 @@ extern void Actor_init_actor_class(ACTOR* actor, ACTOR_PROFILE* profile, ACTOR_D
actor->npc_id = name_id;
}
#ifndef MUST_MATCH
/* @nonmatching */
typedef struct overlay_struct {
const char* actor_name;
} mAc_overlay_info_c;
extern ACTOR* Actor_info_make_actor(Actor_info* actor_info, GAME* game, s16 profile_no, f32 x, f32 y, f32 z, s16 rot_x,
s16 rot_y, s16 rot_z, s8 block_x, s8 block_z, s16 move_actor_list_idx,
mActor_name_t name_id, s16 arg, s8 npc_info_idx, int data_bank_idx) {
const char* test = "";
GAME_PLAY* play = (GAME_PLAY*)game;
GAME_PLAY* play;
ACTOR* actor;
ACTOR_PROFILE* profile;
ACTOR_DLFTBL* dlftbl;
mAc_overlay_info_c overlay_info; /* Required to be a struct, stubbed in GC */
test = ""; // removing this line helps a bit...
dlftbl = &actor_dlftbls[profile_no];
play = (GAME_PLAY*)game;
dlftbl = actor_dlftbls + profile_no;
overlay_info.actor_name = "";
if (actor_info->total_num > mAc_MAX_ACTORS) {
return NULL;
}
profile = dlftbl->profile;
if (Actor_data_bank_regist_check(&data_bank_idx, profile, dlftbl, game, name_id) == FALSE) {
if (Actor_data_bank_regist_check(&data_bank_idx, profile, dlftbl, play, name_id) == FALSE) {
return NULL;
}
if (Actor_malloc_actor_class(&actor, profile, dlftbl, test, name_id) == FALSE) {
if (Actor_malloc_actor_class(&actor, profile, dlftbl, overlay_info.actor_name, name_id) == FALSE) {
return NULL;
}
@@ -720,18 +721,10 @@ extern ACTOR* Actor_info_make_actor(Actor_info* actor_info, GAME* game, s16 prof
move_actor_list_idx, name_id, arg);
Actor_info_part_new(actor_info, actor, profile->part);
mNpc_SetNpcinfo(actor, npc_info_idx);
Actor_ct(actor, (GAME*)play);
Actor_ct(actor, game);
return actor;
}
#else
extern asm ACTOR* Actor_info_make_actor(Actor_info* actor_info, GAME* game, s16 profile_no, f32 x, f32 y, f32 z,
s16 rot_x, s16 rot_y, s16 rot_z, s8 block_x, s8 block_z,
s16 move_actor_list_idx, mActor_name_t name_id, s16 arg, s8 npc_info_idx,
int data_bank_idx) {
#include "asm/80375830.s"
}
#endif
extern ACTOR* Actor_info_make_child_actor(Actor_info* actor_info, ACTOR* parent_actor, GAME* game, s16 profile, f32 x,
f32 y, f32 z, s16 rot_x, s16 rot_y, s16 rot_z, s16 move_actor_list_idx,
+502 -556
View File
File diff suppressed because it is too large Load Diff
+4 -4
View File
@@ -2019,9 +2019,9 @@ extern void mRmTp_MakeFamicom_Fdebug() {
u16 ftr_idx;
int res;
Clip_c* clip;
GAME_PLAY* play = (GAME_PLAY*)gamePT;
GAME* game = gamePT;
if ((gamePT->pads[PAD1].on.button & BUTTON_Z) == BUTTON_Z && play != NULL) {
if ((gamePT->pads[PAD1].on.button & BUTTON_Z) == BUTTON_Z && game != NULL) {
clip = Common_GetPointer(clip);
if (clip->my_room_clip != NULL) {
@@ -2036,10 +2036,10 @@ extern void mRmTp_MakeFamicom_Fdebug() {
ftr_idx = 0x36A + mRmTp_famicom_idx;
}
res = (*clip->my_room_clip->judge_breed_new_ftr_proc)(play, ftr_idx, &ut_x, &ut_z, &direct, &ofs, &layer);
res = (*clip->my_room_clip->judge_breed_new_ftr_proc)(game, ftr_idx, &ut_x, &ut_z, &direct, &ofs, &layer);
if (res >= 0) {
(*clip->my_room_clip->reserve_ftr_proc)(play, ftr_idx, res, ut_x, ut_z, direct, ofs, layer);
(*clip->my_room_clip->reserve_ftr_proc)(game, ftr_idx, res, ut_x, ut_z, direct, ofs, layer);
}
}
}
+2 -1
View File
@@ -529,7 +529,8 @@ extern int goto_next_scene(GAME_PLAY* play, int next_idx, int update_player_mode
return res;
}
extern int goto_emu_game(GAME_PLAY* play, u8 famicom_rom_id) {
extern int goto_emu_game(GAME* game, s16 famicom_rom_id) {
GAME_PLAY* play = (GAME_PLAY*)game;
PLAYER_ACTOR* player = get_player_actor_withoutCheck(play);
int res = FALSE;
+8 -9
View File
@@ -10,14 +10,13 @@ def unpack_dir(archive: pyjkernel.JKRArchive, dir: str, verbose=False):
if verbose:
print('Dumping file: ' + file.name)
with open(os.path.join(dir, file.name), "wb") as f:
f.write(archive.get_file(dir + "/" + file.name).data)
f.write(archive.get_file(dir + os.sep + file.name).data)
# create all subdirectories and recurse through them
for subdir in archive.list_folders(dir):
if not os.path.exists(dir + "/" + subdir):
os.mkdir(dir + "/" + subdir)
unpack_dir(archive, dir + "/" + subdir, verbose)
if not os.path.exists(dir + os.sep + subdir):
os.mkdir(dir + os.sep + subdir)
unpack_dir(archive, dir + os.sep + subdir, verbose)
def unpack_archive(path: str, out_path: str, verbose=False):
archive = pyjkernel.from_archive_file(path, True)
@@ -38,13 +37,13 @@ def pack_dir(archive: pyjkernel.JKRArchive, path: str, verbose=False):
for root, dirs, files in os.walk(local_root):
files.sort(key=lambda item: (item.lower(), item))
for dir in dirs:
archive.create_folder(root + "/" + dir)
archive.create_folder(root + os.sep + dir)
for file in files:
if verbose:
print('Packing file: ' + root + '/' + file)
with open(root + "/" + file, "rb") as f:
archive.create_file(root + "/" + file, bytearray(f.read()), pyjkernel.JKRPreloadType.ARAM)
print('Packing file: ' + root + os.sep + file)
with open(root + os.sep + file, "rb") as f:
archive.create_file(root + os.sep + file, bytearray(f.read()), pyjkernel.JKRPreloadType.ARAM)
os.chdir(orig_dir)
def pack_archive(root_path: str, out_path: str, verbose=False):