mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-23 06:34:18 -04:00
Implement & link m_npc.c
This commit is contained in:
@@ -182,6 +182,11 @@ m_needlework.c:
|
||||
.text: [0x803C98EC, 0x803C9F7C]
|
||||
.data: [0x8065ABC0, 0x8065AE30]
|
||||
.bss: [0x81298F60, 0x81299180]
|
||||
m_npc.c:
|
||||
.text: [0x803CB340, 0x803D7570]
|
||||
.rodata: [0x806429B8, 0x806429F0]
|
||||
.data: [0x8065AEE8, 0x8065B638]
|
||||
.bss: [0x81299240, 0x8129CC48]
|
||||
m_npc_schedule.c:
|
||||
.text: [0x803D7570, 0x803D7890]
|
||||
.data: [0x8065B638, 0x8065B7F0]
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "types.h"
|
||||
#include "m_actor.h"
|
||||
#include "ac_furniture.h"
|
||||
#include "m_room_type.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -67,6 +68,10 @@ typedef struct my_room_clip_s {
|
||||
|
||||
extern ACTOR_PROFILE My_Room_Profile;
|
||||
|
||||
extern int aMR_CorrespondFurniture(mActor_name_t ftr0, mActor_name_t ftr1);
|
||||
extern int aMR_GetFurnitureUnit(mActor_name_t ftr);
|
||||
extern mActor_name_t aMR_FurnitureFg_to_FurnitureFgWithDirect(mActor_name_t ftr, int direct);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -39,8 +39,11 @@ enum background_attribute {
|
||||
mCoBG_ATTRIBUTE_SOIL0,
|
||||
mCoBG_ATTRIBUTE_SOIL1,
|
||||
mCoBG_ATTRIBUTE_SOIL2,
|
||||
mCoBG_ATTRIBUTE_BUSH = 9,
|
||||
mCoBG_ATTRIBUTE_WAVE = 11,
|
||||
mCoBG_ATTRIBUTE_STONE,
|
||||
mCoBG_ATTRIBUTE_FLOOR,
|
||||
mCoBG_ATTRIBUTE_BUSH,
|
||||
mCoBG_ATTRIBUTE_HOLE,
|
||||
mCoBG_ATTRIBUTE_WAVE,
|
||||
mCoBG_ATTRIBUTE_WATER,
|
||||
mCoBG_ATTRIBUTE_WATERFALL,
|
||||
mCoBG_ATTRIBUTE_RIVER_N,
|
||||
@@ -54,6 +57,7 @@ enum background_attribute {
|
||||
mCoBG_ATTRIBUTE_SAND,
|
||||
mCoBG_ATTRIBUTE_WOOD,
|
||||
mCoBG_ATTRIBUTE_SEA,
|
||||
// ...
|
||||
};
|
||||
|
||||
enum {
|
||||
@@ -182,6 +186,8 @@ extern int mCoBG_CheckAttribute_BallRolling(s16* angles, const xyz_t* wpos);
|
||||
extern f32 mCoBG_CheckBallRollingArea(s16 angle, const xyz_t* wpos);
|
||||
extern int mCoBG_ExistHeightGap_KeepAndNow_Detail(xyz_t wpos);
|
||||
extern int mCoBG_GetHoleNumber(xyz_t wpos);
|
||||
extern int mCoBG_Attr2CheckPlaceNpc(u32 attribute);
|
||||
extern int mCoBG_ExistHeightGap_KeepAndNow(xyz_t wpos);
|
||||
|
||||
extern void mCoBG_InitMoveBgData();
|
||||
extern void mCoBG_InitBlockBgCheckMode();
|
||||
|
||||
@@ -79,7 +79,7 @@ typedef struct lighthouse_s {
|
||||
typedef struct Save_s {
|
||||
/* 0x000000 */ mFRm_chk_t save_check; /* save information */
|
||||
/* 0x000014 */ int scene_no; /* current 'scene' id */
|
||||
/* 0x000018 */ u8 now_npc_max; /* current number of villagers living in town (see mNpc_(Add/Sub)NowNpcMax) */
|
||||
/* 0x000018 */ u8 now_npc_max; /* current number of villagers living in town (see (Add/Sub)NowNpcMax) */
|
||||
/* 0x000019 */ u8 remove_animal_idx; /* index of the villager which is scheduled to leave town, 0xFF when none selected */
|
||||
/* 0x00001A */ u16 copy_protect; /* 'unique' value between [1, 65520] used for copy protection (see mCD_get_land_copyProtect) */
|
||||
/* 0x00001C */ u8 pad_1C[4];
|
||||
@@ -197,8 +197,7 @@ typedef struct common_data_s {
|
||||
/* 0x026150 */ s16 bg_item_type;
|
||||
/* 0x026152 */ s16 bg_item_profile;
|
||||
/* 0x026154 */ u8 _26154[0x26164 - 0x26154];
|
||||
/* 0x026164 */ mNpc_NpcList_c npclist[ANIMAL_NUM_MAX];
|
||||
/* 0x0264AC */ mNpc_NpcList_c unk_264AC; // fits exact size of npc list struct, seems unused
|
||||
/* 0x026164 */ mNpc_NpcList_c npclist[ANIMAL_NUM_MAX + 1];
|
||||
/* 0x0264E4 */ mNpc_NpcList_c island_npclist[1]; // TODO: define for island npc count
|
||||
/* 0x02651C */ mActor_name_t house_owner_name;
|
||||
/* 0x02651E */ mActor_name_t last_field_id;
|
||||
@@ -216,7 +215,8 @@ typedef struct common_data_s {
|
||||
/* 0x0266A4 */ int scene_from_title_demo; /* next scene to be loaded when title demo finishes */
|
||||
/* 0x0266A8 */ mNPS_schedule_c npc_schedule[SCHEDULE_NUM];
|
||||
/* 0x0267A8 */ mNpc_walk_c npc_walk;
|
||||
/* 0x026838 */ u8 _26838[0x28528 - 0x26838];
|
||||
/* 0x026838 */ mNpc_EventNpc_c event_npc[mNpc_EVENT_NPC_NUM];
|
||||
/* 0x026878 */ mNpc_MaskNpc_c mask_npc[mNpc_MASK_NPC_NUM];
|
||||
/* 0x028528 */ int snowman_msg_id;
|
||||
/* 0x02852C */ s16 money_power;
|
||||
/* 0x02852E */ s16 goods_power;
|
||||
|
||||
@@ -10,6 +10,8 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
extern int mEvMN_GetJointEventRandomNpc(mActor_name_t* selected_npc_id);
|
||||
extern int mEvNM_CheckJointEvent();
|
||||
extern void mEvMN_GetEventNpcName(mActor_name_t* npc_name, int event, int idx, int param_4);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -94,6 +94,8 @@ typedef struct mHandbillz_info_s {
|
||||
int header_back_start;
|
||||
} mHandbillz_Info_c;
|
||||
|
||||
extern int mHandbillz_load(mHandbillz_Info_c* info);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
+3
-2
@@ -48,8 +48,8 @@ enum {
|
||||
};
|
||||
|
||||
enum {
|
||||
mMl_TYPE_MUSEUM = 0,
|
||||
mMl_TYPE_1 = 1,
|
||||
mMl_TYPE_MAIL = 0,
|
||||
mMl_TYPE_XMAS = 1,
|
||||
mMl_TYPE_SHOP_SALE_LEAFLET = 2,
|
||||
mMl_TYPE_BROKER_SALE_LEAFLET = 3,
|
||||
|
||||
@@ -57,6 +57,7 @@ enum {
|
||||
|
||||
mMl_TYPE_FISHING_CONTENST = 9,
|
||||
|
||||
mMl_TYPE_SPNPC_PASSWORD = 11,
|
||||
mMl_TYPE_12 = 12
|
||||
};
|
||||
|
||||
|
||||
@@ -2,12 +2,13 @@
|
||||
#define M_MAIL_CHECK_H
|
||||
|
||||
#include "types.h"
|
||||
#include "game_h.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern int mMC_get_mail_hit_rate(int* len, u8* str);
|
||||
extern int mMC_get_mail_hit_rate(int* len, u8* str, GAME* game);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
+205
-45
@@ -61,6 +61,37 @@ enum {
|
||||
mNT_TREE_TYPE_NUM
|
||||
};
|
||||
|
||||
/* TODO: these should be calculated via definitions later */
|
||||
#define NPC_NUM 236
|
||||
#define NPC_ISLANDER_NUM 18
|
||||
|
||||
#define FTR_NUM 1266
|
||||
#define PAPER_NUM 256
|
||||
#define MONEY_NUM 4
|
||||
#define TOOL_NUM 92
|
||||
#define FISH_NUM 40
|
||||
#define CLOTH_NUM 255
|
||||
#define ETC_NUM 49
|
||||
#define CARPET_NUM 67
|
||||
#define WALL_NUM 67
|
||||
#define FRUIT_NUM 8
|
||||
#define PLANT_NUM 11
|
||||
#define MINIDISK_NUM 55
|
||||
#define DIARY_NUM 16
|
||||
#define TICKET_NUM 96
|
||||
#define INSECT_NUM 40 + 5 // 5 spirits
|
||||
#define HUKUBUKURO_NUM 2
|
||||
#define KABU_NUM 4
|
||||
|
||||
#define PAPER_UNIQUE_NUM 64
|
||||
#define PAINT_NUM 12
|
||||
#define FLOWER_NUM 9
|
||||
#define HANIWA_NUM 127
|
||||
#define NOT_SECRET_MD_NUM 52
|
||||
#define UMBRELLA_NUM 32
|
||||
|
||||
extern u8 npc_looks_table[];
|
||||
|
||||
extern int mNT_check_unknown(mActor_name_t item_no);
|
||||
extern int FGTreeType_check(mActor_name_t tree);
|
||||
extern mActor_name_t bg_item_fg_sub_tree_grow(mActor_name_t tree, int past_days, int check_plant);
|
||||
@@ -149,32 +180,6 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
|
||||
#define BG_CATEGORY 0
|
||||
#define ENV_CATEGORY 8
|
||||
|
||||
/* TODO: these should be calculated via definitions later */
|
||||
#define FTR_NUM 1266
|
||||
#define PAPER_NUM 256
|
||||
#define MONEY_NUM 4
|
||||
#define TOOL_NUM 92
|
||||
#define FISH_NUM 40
|
||||
#define CLOTH_NUM 255
|
||||
#define ETC_NUM 49
|
||||
#define CARPET_NUM 67
|
||||
#define WALL_NUM 67
|
||||
#define FRUIT_NUM 8
|
||||
#define PLANT_NUM 11
|
||||
#define MINIDISK_NUM 55
|
||||
#define DIARY_NUM 16
|
||||
#define TICKET_NUM 96
|
||||
#define INSECT_NUM 40 + 5 // 5 spirits
|
||||
#define HUKUBUKURO_NUM 2
|
||||
#define KABU_NUM 4
|
||||
|
||||
#define PAPER_UNIQUE_NUM 64
|
||||
#define PAINT_NUM 12
|
||||
#define FLOWER_NUM 9
|
||||
#define HANIWA_NUM 127
|
||||
#define NOT_SECRET_MD_NUM 52
|
||||
#define UMBRELLA_NUM 32
|
||||
|
||||
#define EMPTY_NO 0x0000
|
||||
#define TREE_STUMP001 (EMPTY_NO + 1)
|
||||
#define TREE_STUMP002 (EMPTY_NO + 2)
|
||||
@@ -483,7 +488,8 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
|
||||
//
|
||||
#define HANIWA_END 0x17AB
|
||||
|
||||
#define FTR_CLOTH_MANNIQUIN000_SOUTH 0x17AC
|
||||
#define FTR_CLOTH_START 0x17AC
|
||||
#define FTR_CLOTH_MANNIQUIN000_SOUTH FTR_CLOTH_START
|
||||
|
||||
#define FTR_REDALOHASHIRT 0x1814
|
||||
|
||||
@@ -491,27 +497,33 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
|
||||
|
||||
#define FTR_CLOTH_MANNIQUIN254_SOUTH 0x1BA4
|
||||
#define FTR_CLOTH_MANNIQUIN254_WEST 0x1BA7
|
||||
#define FTR_CLOTH_END FTR_CLOTH_MANNIQUIN254_WEST
|
||||
#define FTR_CLOTH_MANNIQUIN_MY_ORIGINAL0 0x1BA8
|
||||
|
||||
#define FTR_INSECT00 0x1BC8
|
||||
#define FTR_INSECT_START 0x1BC8
|
||||
#define FTR_INSECT00 FTR_INSECT_START
|
||||
|
||||
#define FTR_INSECT39 0x1C64
|
||||
#define FTR_INSECT39_EAST 0x1C65
|
||||
#define FTR_INSECT39_NORTH 0x1C66
|
||||
#define FTR_INSECT39_WEST 0x1C67
|
||||
|
||||
#define FTR_FISH00 0x1C68
|
||||
#define FTR_INSECT_END FTR_INSECT39_WEST
|
||||
#define FTR_FISH_START 0x1C68
|
||||
#define FTR_FISH00 FTR_FISH_START
|
||||
|
||||
#define FTR_FISH39 0x1D04
|
||||
#define FTR_FISH39_EAST 0x1D05
|
||||
#define FTR_FISH39_NORTH 0x1D06
|
||||
#define FTR_FISH39_WEST 0x1D07
|
||||
|
||||
#define FTR_UMBRELLA00_SOUTH 0x1D08
|
||||
#define FTR_FISH_END FTR_FISH39_WEST
|
||||
#define FTR_UMBRELLA_START 0x1D08
|
||||
#define FTR_UMBRELLA00_SOUTH FTR_UMBRELLA_START
|
||||
|
||||
#define FTR_UMBRELLA31_WEST 0x1D87
|
||||
#define FTR_UMBRELLA_END FTR_UMBRELLA31_WEST
|
||||
|
||||
#define FTR_FAMICOM_CLU_CLU_LAND 0x1DA8
|
||||
#define FTR_FAMICOM_START 0x1DA8
|
||||
#define FTR_FAMICOM_CLU_CLU_LAND FTR_FAMICOM_START
|
||||
#define FTR_FAMICOM_BALLOON_FIGHT 0x1DAC
|
||||
#define FTR_FAMICOM_DONKEY_KONG 0x1DB0
|
||||
#define FTR_FAMICOM_DK_JR_MATCH 0x1DB4
|
||||
@@ -530,6 +542,7 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
|
||||
#define FTR_FAMICOM_MARIO_BROS 0x1DE8
|
||||
#define FTR_FAMICOM_SUPER_MARIO_BROS 0x1DEC
|
||||
#define FTR_FAMICOM_LEGEND_OF_ZELDA 0x1DF0
|
||||
#define FTR_FAMICOM_END 0x1DF3
|
||||
#define FTR_FAMICOM 0x1DF4
|
||||
|
||||
#define FTR_TAPEDECK 0x1E58
|
||||
@@ -538,11 +551,13 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
|
||||
|
||||
#define FTR_FESTIVE_TREE 0x1EBC
|
||||
|
||||
#define FTR_DINO_TRICERA_SKULL 0x1EEC
|
||||
#define FTR_DINO_START 0x1EEC
|
||||
#define FTR_DINO_TRICERA_SKULL FTR_DINO_START
|
||||
|
||||
#define FTR_DINO_TREX_SKULL 0x1EF8
|
||||
|
||||
#define FTR_DINO_TRILOBITE_WEST 0x1F4F
|
||||
#define FTR_DINO_END FTR_DINO_TRILOBITE_WEST
|
||||
|
||||
#define FTR_DINO_DISP_TRICERA 0x1F7C
|
||||
#define FTR_DINO_DISP_TREX 0x1F80
|
||||
@@ -1111,6 +1126,62 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
|
||||
#define ITM_YELLOW_TULIP_BAG 0x290A
|
||||
|
||||
#define ITM_MINIDISK_START 0x2A00
|
||||
#define ITM_MINIDISK00 (ITM_MINIDISK_START + 0)
|
||||
#define ITM_MINIDISK01 (ITM_MINIDISK_START + 1)
|
||||
#define ITM_MINIDISK02 (ITM_MINIDISK_START + 2)
|
||||
#define ITM_MINIDISK03 (ITM_MINIDISK_START + 3)
|
||||
#define ITM_MINIDISK04 (ITM_MINIDISK_START + 4)
|
||||
#define ITM_MINIDISK05 (ITM_MINIDISK_START + 5)
|
||||
#define ITM_MINIDISK06 (ITM_MINIDISK_START + 6)
|
||||
#define ITM_MINIDISK07 (ITM_MINIDISK_START + 7)
|
||||
#define ITM_MINIDISK08 (ITM_MINIDISK_START + 8)
|
||||
#define ITM_MINIDISK09 (ITM_MINIDISK_START + 9)
|
||||
#define ITM_MINIDISK10 (ITM_MINIDISK_START + 10)
|
||||
#define ITM_MINIDISK11 (ITM_MINIDISK_START + 11)
|
||||
#define ITM_MINIDISK12 (ITM_MINIDISK_START + 12)
|
||||
#define ITM_MINIDISK13 (ITM_MINIDISK_START + 13)
|
||||
#define ITM_MINIDISK14 (ITM_MINIDISK_START + 14)
|
||||
#define ITM_MINIDISK15 (ITM_MINIDISK_START + 15)
|
||||
#define ITM_MINIDISK16 (ITM_MINIDISK_START + 16)
|
||||
#define ITM_MINIDISK17 (ITM_MINIDISK_START + 17)
|
||||
#define ITM_MINIDISK18 (ITM_MINIDISK_START + 18)
|
||||
#define ITM_MINIDISK19 (ITM_MINIDISK_START + 19)
|
||||
#define ITM_MINIDISK20 (ITM_MINIDISK_START + 20)
|
||||
#define ITM_MINIDISK21 (ITM_MINIDISK_START + 21)
|
||||
#define ITM_MINIDISK22 (ITM_MINIDISK_START + 22)
|
||||
#define ITM_MINIDISK23 (ITM_MINIDISK_START + 23)
|
||||
#define ITM_MINIDISK24 (ITM_MINIDISK_START + 24)
|
||||
#define ITM_MINIDISK25 (ITM_MINIDISK_START + 25)
|
||||
#define ITM_MINIDISK26 (ITM_MINIDISK_START + 26)
|
||||
#define ITM_MINIDISK27 (ITM_MINIDISK_START + 27)
|
||||
#define ITM_MINIDISK28 (ITM_MINIDISK_START + 28)
|
||||
#define ITM_MINIDISK29 (ITM_MINIDISK_START + 29)
|
||||
#define ITM_MINIDISK30 (ITM_MINIDISK_START + 30)
|
||||
#define ITM_MINIDISK31 (ITM_MINIDISK_START + 31)
|
||||
#define ITM_MINIDISK32 (ITM_MINIDISK_START + 32)
|
||||
#define ITM_MINIDISK33 (ITM_MINIDISK_START + 33)
|
||||
#define ITM_MINIDISK34 (ITM_MINIDISK_START + 34)
|
||||
#define ITM_MINIDISK35 (ITM_MINIDISK_START + 35)
|
||||
#define ITM_MINIDISK36 (ITM_MINIDISK_START + 36)
|
||||
#define ITM_MINIDISK37 (ITM_MINIDISK_START + 37)
|
||||
#define ITM_MINIDISK38 (ITM_MINIDISK_START + 38)
|
||||
#define ITM_MINIDISK39 (ITM_MINIDISK_START + 39)
|
||||
#define ITM_MINIDISK40 (ITM_MINIDISK_START + 40)
|
||||
#define ITM_MINIDISK41 (ITM_MINIDISK_START + 41)
|
||||
#define ITM_MINIDISK42 (ITM_MINIDISK_START + 42)
|
||||
#define ITM_MINIDISK43 (ITM_MINIDISK_START + 43)
|
||||
#define ITM_MINIDISK44 (ITM_MINIDISK_START + 44)
|
||||
#define ITM_MINIDISK45 (ITM_MINIDISK_START + 45)
|
||||
#define ITM_MINIDISK46 (ITM_MINIDISK_START + 46)
|
||||
#define ITM_MINIDISK47 (ITM_MINIDISK_START + 47)
|
||||
#define ITM_MINIDISK48 (ITM_MINIDISK_START + 48)
|
||||
#define ITM_MINIDISK49 (ITM_MINIDISK_START + 49)
|
||||
#define ITM_MINIDISK50 (ITM_MINIDISK_START + 50)
|
||||
#define ITM_MINIDISK51 (ITM_MINIDISK_START + 51)
|
||||
#define ITM_MINIDISK52 (ITM_MINIDISK_START + 52)
|
||||
#define ITM_MINIDISK53 (ITM_MINIDISK_START + 53)
|
||||
#define ITM_MINIDISK54 (ITM_MINIDISK_START + 54)
|
||||
#define ITM_MINIDISK_END (ITM_MINIDISK_START + 55)
|
||||
|
||||
#define ITM_DIARY_START 0x2B00
|
||||
#define ITM_DIARY00 (ITM_DIARY_START + 0)
|
||||
@@ -1380,6 +1451,8 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
|
||||
#define ETC_AIRPLANE ETC_START
|
||||
#define ETC_BOXTRICK (ETC_START + 4)
|
||||
#define ETC_BOXMANAGER (ETC_START + 5)
|
||||
#define ETC_SNOWMAN_BALL_A (ETC_START + 13)
|
||||
#define ETC_SNOWMAN_BALL_B (ETC_START + 14)
|
||||
#define ETC_TRAIN_WINDOW (ETC_START + 17)
|
||||
|
||||
#define MISC_ACTOR_START 0x9000
|
||||
@@ -1428,27 +1501,85 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
|
||||
#define SP_NPC_POST_GIRL2 (SP_NPC_START + 18) // D012
|
||||
#define SP_NPC_EV_BROKER2 (SP_NPC_START + 19) // D013
|
||||
#define SP_NPC_RCN_GUIDE (SP_NPC_START + 20) // D014
|
||||
//
|
||||
#define SP_NPC_RCN_GUIDE_1 (SP_NPC_START + 21) // D015
|
||||
#define SP_NPC_RCN_GUIDE_2 (SP_NPC_START + 22) // D016
|
||||
#define SP_NPC_RCN_GUIDE_3 (SP_NPC_START + 23) // D017
|
||||
#define SP_NPC_P_SEL (SP_NPC_START + 24) // D018
|
||||
#define SP_NPC_RCN_GUIDE2 (SP_NPC_START + 25) // D019
|
||||
//
|
||||
#define SP_NPC_RCN_GUIDE2_1 (SP_NPC_START + 26) // D01A
|
||||
#define SP_NPC_RCN_GUIDE2_2 (SP_NPC_START + 27) // D01B
|
||||
#define SP_NPC_RCN_GUIDE2_3 (SP_NPC_START + 28) // D01C
|
||||
#define SP_NPC_ANGLER (SP_NPC_START + 29) // D01D
|
||||
#define SP_NPC_SHOP_MASTERSP (SP_NPC_START + 30) // D01E
|
||||
#define SP_NPC_P_SEL2 (SP_NPC_START + 31) // D01F
|
||||
//
|
||||
#define SP_NPC_EV_HALLOWEEN_0 (SP_NPC_START + 32) // D020
|
||||
#define SP_NPC_EV_HALLOWEEN_1 (SP_NPC_START + 33) // D021
|
||||
#define SP_NPC_EV_HALLOWEEN_2 (SP_NPC_START + 34) // D022
|
||||
#define SP_NPC_EV_HALLOWEEN_3 (SP_NPC_START + 35) // D023
|
||||
#define SP_NPC_EV_HALLOWEEN_4 (SP_NPC_START + 36) // D024
|
||||
#define SP_NPC_HALLOWEEN (SP_NPC_START + 37) // D025
|
||||
#define SP_NPC_MAMEDANUKI0 (SP_NPC_START + 38) // D026
|
||||
//
|
||||
#define SP_NPC_EV_HANABI_0 (SP_NPC_START + 39) // D027
|
||||
#define SP_NPC_EV_HANABI_1 (SP_NPC_START + 40) // D028
|
||||
#define SP_NPC_EV_HANABI_2 (SP_NPC_START + 41) // D029
|
||||
#define SP_NPC_EV_HANABI_3 (SP_NPC_START + 42) // D02A
|
||||
#define SP_NPC_EV_HANABI_4 (SP_NPC_START + 43) // D02B
|
||||
#define SP_NPC_EV_YOMISE (SP_NPC_START + 44) // D02C
|
||||
//
|
||||
#define SP_NPC_EV_TOKYOSO_0 (SP_NPC_START + 45) // D02D
|
||||
#define SP_NPC_EV_TOKYOSO_1 (SP_NPC_START + 46) // D02E
|
||||
#define SP_NPC_EV_TOKYOSO_2 (SP_NPC_START + 47) // D02F
|
||||
#define SP_NPC_EV_TOKYOSO_3 (SP_NPC_START + 48) // D030
|
||||
#define SP_NPC_EV_TOKYOSO_4 (SP_NPC_START + 49) // D031
|
||||
#define SP_NPC_EV_HANAMI_0 (SP_NPC_START + 50) // D032
|
||||
#define SP_NPC_EV_HANAMI_1 (SP_NPC_START + 51) // D033
|
||||
#define SP_NPC_EV_HANAMI_2 (SP_NPC_START + 52) // D034
|
||||
#define SP_NPC_EV_HANAMI_3 (SP_NPC_START + 53) // D035
|
||||
#define SP_NPC_EV_HANAMI_4 (SP_NPC_START + 54) // D036
|
||||
#define SP_NPC_MAMEDANUKI1 (SP_NPC_START + 55) // D037
|
||||
#define SP_NPC_SLEEP_OBABA (SP_NPC_START + 56) // D038
|
||||
//
|
||||
#define SP_NPC_EV_YOMISE2 (SP_NPC_START + 57) // D039
|
||||
#define SP_NPC_SHOP_MASTERSP_2 (SP_NPC_START + 58) // D03A
|
||||
#define SP_NPC_SHOP_MASTERSP_3 (SP_NPC_START + 59) // D03B
|
||||
#define SP_NPC_SHOP_MASTERSP_4 (SP_NPC_START + 60) // D03C
|
||||
#define SP_NPC_EV_MIKO (SP_NPC_START + 61) // D03D
|
||||
#define SP_NPC_MAJIN (SP_NPC_START + 62) // D03E
|
||||
//
|
||||
#define SP_NPC_EV_TUKIMI_0 (SP_NPC_START + 63) // D03F
|
||||
#define SP_NPC_EV_TUKIMI_1 (SP_NPC_START + 64) // D040
|
||||
#define SP_NPC_EV_TUKIMI_2 (SP_NPC_START + 65) // D041
|
||||
#define SP_NPC_EV_TUKIMI_3 (SP_NPC_START + 66) // D042
|
||||
#define SP_NPC_EV_TUKIMI_4 (SP_NPC_START + 67) // D043
|
||||
#define SP_NPC_EV_COUNTDOWN_0 (SP_NPC_START + 68) // D044
|
||||
#define SP_NPC_EV_COUNTDOWN_1 (SP_NPC_START + 69) // D045
|
||||
#define SP_NPC_EV_COUNTDOWN_2 (SP_NPC_START + 70) // D046
|
||||
#define SP_NPC_EV_COUNTDOWN_3 (SP_NPC_START + 71) // D047
|
||||
#define SP_NPC_EV_COUNTDOWN_4 (SP_NPC_START + 72) // D048
|
||||
#define SP_NPC_EV_TURI_0 (SP_NPC_START + 73) // D049
|
||||
#define SP_NPC_EV_TURI_1 (SP_NPC_START + 74) // D04A
|
||||
#define SP_NPC_EV_TURI_2 (SP_NPC_START + 75) // D04B
|
||||
#define SP_NPC_EV_TURI_3 (SP_NPC_START + 76) // D04C
|
||||
#define SP_NPC_EV_TURI_4 (SP_NPC_START + 77) // D04D
|
||||
#define SP_NPC_EV_TAISOU_0 (SP_NPC_START + 78) // D04E
|
||||
#define SP_NPC_EV_TAISOU_1 (SP_NPC_START + 79) // D04F
|
||||
#define SP_NPC_EV_TAISOU_2 (SP_NPC_START + 80) // D050
|
||||
#define SP_NPC_EV_TAISOU_3 (SP_NPC_START + 81) // D051
|
||||
#define SP_NPC_EV_TAISOU_4 (SP_NPC_START + 82) // D052
|
||||
#define SP_NPC_EV_TAMAIRE_0 (SP_NPC_START + 83) // D053
|
||||
#define SP_NPC_EV_TAMAIRE_1 (SP_NPC_START + 84) // D054
|
||||
#define SP_NPC_EV_TAMAIRE_2 (SP_NPC_START + 85) // D055
|
||||
#define SP_NPC_EV_TAMAIRE_3 (SP_NPC_START + 86) // D056
|
||||
#define SP_NPC_EV_TAMAIRE_4 (SP_NPC_START + 87) // D057
|
||||
#define SP_NPC_EV_HATUMODE_0 (SP_NPC_START + 88) // D058
|
||||
#define SP_NPC_EV_HATUMODE_1 (SP_NPC_START + 89) // D059
|
||||
#define SP_NPC_EV_HATUMODE_2 (SP_NPC_START + 90) // D05A
|
||||
#define SP_NPC_EV_HATUMODE_3 (SP_NPC_START + 91) // D05B
|
||||
#define SP_NPC_EV_HATUMODE_4 (SP_NPC_START + 92) // D05C
|
||||
#define SP_NPC_TOTAKEKE (SP_NPC_START + 93) // D05D
|
||||
//
|
||||
#define SP_NPC_EV_KAMAKURA_0 (SP_NPC_START + 94) // D05E
|
||||
#define SP_NPC_EV_TUNAHIKI_0 (SP_NPC_START + 95) // D05F
|
||||
#define SP_NPC_EV_TUNAHIKI_1 (SP_NPC_START + 96) // D060
|
||||
#define SP_NPC_EV_TUNAHIKI_2 (SP_NPC_START + 97) // D061
|
||||
#define SP_NPC_EV_TUNAHIKI_3 (SP_NPC_START + 98) // D062
|
||||
#define SP_NPC_EV_TUNAHIKI_4 (SP_NPC_START + 99) // D063
|
||||
#define SP_NPC_EV_DOZAEMON (SP_NPC_START + 100) // D064
|
||||
#define SP_NPC_MAJIN2 (SP_NPC_START + 101) // D065
|
||||
#define SP_NPC_RTC (SP_NPC_START + 102) // D066
|
||||
@@ -1469,15 +1600,27 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
|
||||
#define SP_NPC_MASK_CAT (SP_NPC_START + 117) // D075
|
||||
#define SP_NPC_MASK_CAT2 (SP_NPC_START + 118) // D076
|
||||
//
|
||||
#define SP_NPC_SONCHO_D078 (SP_NPC_START + 120) // D078
|
||||
#define SP_NPC_SONCHO_D079 (SP_NPC_START + 121) // D079
|
||||
#define SP_NPC_SASHO (SP_NPC_START + 122) // D07A
|
||||
//
|
||||
#define SP_NPC_MAJIN_D07C (SP_NPC_START + 124) // D07C
|
||||
#define SP_NPC_MAJIN_D07D (SP_NPC_START + 125) // D07D
|
||||
#define SP_NPC_MAJIN_BROTHER (SP_NPC_START + 126) // D07E
|
||||
#define SP_NPC_SONCHO (SP_NPC_START + 127) // D07F
|
||||
//
|
||||
#define SP_NPC_MAJIN_D080 (SP_NPC_START + 128) // D080
|
||||
#define SP_NPC_EV_MAJIN (SP_NPC_START + 129) // D081
|
||||
//
|
||||
#define SP_NPC_EV_HARVEST_0 (SP_NPC_START + 130) // D082
|
||||
#define SP_NPC_EV_HARVEST_1 (SP_NPC_START + 131) // D083
|
||||
#define SP_NPC_EV_HARVEST_2 (SP_NPC_START + 132) // D084
|
||||
#define SP_NPC_EV_HARVEST_3 (SP_NPC_START + 133) // D085
|
||||
#define SP_NPC_EV_HARVEST_4 (SP_NPC_START + 134) // D086
|
||||
#define SP_NPC_EV_SPEECH_SONCHO (SP_NPC_START + 135) // D087
|
||||
//
|
||||
#define SP_NPC_EV_GROUNDHOG_0 (SP_NPC_START + 136) // D088
|
||||
#define SP_NPC_EV_GROUNDHOG_1 (SP_NPC_START + 137) // D089
|
||||
#define SP_NPC_EV_GROUNDHOG_2 (SP_NPC_START + 138) // D08A
|
||||
#define SP_NPC_EV_GROUNDHOG_3 (SP_NPC_START + 139) // D08B
|
||||
#define SP_NPC_EV_GROUNDHOG_4 (SP_NPC_START + 140) // D08C
|
||||
#define SP_NPC_TURKEY (SP_NPC_START + 141) // D08D
|
||||
#define SP_NPC_HEM (SP_NPC_START + 142) // D08E
|
||||
|
||||
@@ -1500,6 +1643,7 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
|
||||
#define NPC_BIFF 0xE0C2
|
||||
|
||||
#define DUMMY_START 0xF000
|
||||
#define DUMMY_RESERVE 0xF0EE // unsure about this, only true in DnM
|
||||
#define DUMMY_HANIWA0 0xF0FB
|
||||
#define DUMMY_HANIWA1 (DUMMY_HANIWA0 + 1)
|
||||
#define DUMMY_HANIWA2 (DUMMY_HANIWA1 + 1)
|
||||
@@ -1510,6 +1654,22 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
|
||||
#define RSV_FE1C 0xFE1C
|
||||
#define RSV_FE1F 0xFE1F
|
||||
#define RSV_CLOTH 0xFE20
|
||||
#define RSV_ISLAND_FTR0 0xFEB3 /* mRmTp_FTRSIZE_1x1 S */
|
||||
#define RSV_ISLAND_FTR1 0xFEB4 /* mRmTp_FTRSIZE_1x1 E */
|
||||
#define RSV_ISLAND_FTR2 0xFEB5 /* mRmTp_FTRSIZE_1x1 N */
|
||||
#define RSV_ISLAND_FTR3 0xFEB6 /* mRmTp_FTRSIZE_1x1 W */
|
||||
#define RSV_ISLAND_FTR4 0xFEB7 /* mRmTp_FTRSIZE_1x1 S */
|
||||
#define RSV_ISLAND_FTR5 0xFEB8 /* mRmTp_FTRSIZE_1x1 E */
|
||||
#define RSV_ISLAND_FTR6 0xFEB9 /* mRmTp_FTRSIZE_1x1 N */
|
||||
#define RSV_ISLAND_FTR7 0xFEBA /* mRmTp_FTRSIZE_1x1 W */
|
||||
#define RSV_ISLAND_FTR8 0xFEBB /* mRmTp_FTRSIZE_1x2 S */
|
||||
#define RSV_ISLAND_FTR9 0xFEBC /* mRmTp_FTRSIZE_1x2 E */
|
||||
#define RSV_ISLAND_FTR10 0xFEBD /* mRmTp_FTRSIZE_1x2 N */
|
||||
#define RSV_ISLAND_FTR11 0xFEBE /* mRmTp_FTRSIZE_1x2 W */
|
||||
#define RSV_ISLAND_FTR12 0xFEBF /* mRmTp_FTRSIZE_2x2 S */
|
||||
#define RSV_ISLAND_FTR13 0xFEC0 /* mRmTp_FTRSIZE_2x2 E */
|
||||
#define RSV_ISLAND_FTR14 0xFEC1 /* mRmTp_FTRSIZE_2x2 N */
|
||||
#define RSV_ISLAND_FTR15 0xFEC2 /* mRmTp_FTRSIZE_2x2 W */
|
||||
#define RSV_WALL_NO 0xFFFE /* interior wall item, no collision */
|
||||
#define RSV_NO 0xFFFF /* reserved space, can't interact but no collision */
|
||||
|
||||
|
||||
+272
-57
@@ -13,6 +13,7 @@
|
||||
#include "m_lib.h"
|
||||
#include "m_private_h.h"
|
||||
#include "m_field_make.h"
|
||||
#include "m_name_table.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -22,15 +23,18 @@ extern "C" {
|
||||
#define mNpc_GET_TYPE(npc_id) ((npc_id) & 0xF000)
|
||||
#define mNpc_IS_SPECIAL(npc_id) (mNpc_GET_TYPE(npc_id) == 0xD000)
|
||||
|
||||
#define NPC_NUM 236
|
||||
|
||||
#define ANIMAL_NUM_MIN 5
|
||||
#define ANIMAL_NUM_MAX 15 /* Maximum number of villagers possible in town */
|
||||
#define ANIMAL_MEMORY_NUM 7
|
||||
#define ANIMAL_CATCHPHRASE_LEN 10
|
||||
#define ANIMAL_HP_MAIL_NUM 4
|
||||
#define ANIMAL_HP_MAIL_NUM PLAYER_NUM
|
||||
#define ANIMAL_NAME_LEN PLAYER_NAME_LEN
|
||||
#define mNpc_MINIMUM_DAYS_BEFORE_FORCE_REMOVAL 10
|
||||
|
||||
#define mNpc_ISLAND_FTR_SAVE_NUM 4
|
||||
#define mNpc_ISLAND_FTR_NUM 16
|
||||
#define mNpc_EVENT_NPC_NUM 5
|
||||
#define mNpc_MASK_NPC_NUM 3
|
||||
|
||||
enum {
|
||||
mNpc_MOOD_0,
|
||||
@@ -46,13 +50,69 @@ enum {
|
||||
mNpc_MOOD_NUM
|
||||
};
|
||||
|
||||
enum {
|
||||
mNpc_LETTER_RANK_BAD,
|
||||
mNpc_LETTER_RANK_OK,
|
||||
|
||||
mNpc_LETTER_RANK_NUM
|
||||
};
|
||||
|
||||
enum {
|
||||
mNpc_EVENT_MAIL_VT_DAY, /* valentine's day */
|
||||
mNpc_EVENT_MAIL_WT_DAY, /* white day (JP only) */
|
||||
|
||||
mNpc_EVENT_MAIL_NUM
|
||||
};
|
||||
|
||||
enum {
|
||||
mNpc_EVENT_MAIL_BEST_FRIEND,
|
||||
mNpc_EVENT_MAIL_OK_FRIEND,
|
||||
mNpc_EVENT_MAIL_NOT_FRIEND,
|
||||
|
||||
mNpc_EVENT_MAIL_FRIEND_NUM
|
||||
};
|
||||
|
||||
enum {
|
||||
mNpc_GROW_STARTER,
|
||||
mNpc_GROW_MOVE_IN,
|
||||
mNpc_GROW_ISLANDER,
|
||||
|
||||
mNpc_GROW_NUM
|
||||
};
|
||||
|
||||
enum {
|
||||
mNpc_NAME_TYPE_SPNPC,
|
||||
mNpc_NAME_TYPE_NPC,
|
||||
|
||||
mNpc_NAME_TYPE_NUM
|
||||
};
|
||||
|
||||
enum {
|
||||
mNpc_FEEL_NORMAL,
|
||||
mNpc_FEEL_HAPPY,
|
||||
mNpc_FEEL_ANGRY,
|
||||
mNpc_FEEL_SAD,
|
||||
mNpc_FEEL_SLEEPY,
|
||||
mNpc_FEEL_PITFALL,
|
||||
|
||||
mNpc_FEEL_NUM
|
||||
};
|
||||
|
||||
enum {
|
||||
mNpc_PATIENCE_MILDLY_ANNOYED,
|
||||
mNpc_PATIENCE_ANNOYED,
|
||||
mNpc_PATIENCE_NORMAL,
|
||||
|
||||
mNpc_PATIENCE_NUM
|
||||
};
|
||||
|
||||
/* sizeof(Anmremail_c) == 0x16 */
|
||||
typedef struct animal_remail_s {
|
||||
lbRTC_ymd_c date; /* date sent */
|
||||
u8 name[ANIMAL_NAME_LEN]; /* villager name */
|
||||
u8 land_name[LAND_NAME_SIZE]; /* town name */
|
||||
struct {
|
||||
u8 password_letter:1; /* is mail normal or password */
|
||||
u8 cond:1; /* was letter good or not */
|
||||
u8 looks:7; /* personality */
|
||||
} flags;
|
||||
} Anmremail_c;
|
||||
@@ -82,7 +142,7 @@ typedef struct animal_home_s {
|
||||
/* sizeof(Anmlet_c) == 1 */
|
||||
typedef struct animal_letter_info_s {
|
||||
u8 exists:1; /* letter received by villager and exists */
|
||||
u8 password_letter:1; /* set when the letter contains a 'key' symbol and is considered a password letter */
|
||||
u8 cond:1; /* mNpc_LETTER_RANK_* */
|
||||
u8 send_reply:1; /* set when the villager should reply */
|
||||
u8 has_present_cloth:1; /* set when the villager's held present shirt is from this letter */
|
||||
u8 wearing_present_cloth:1; /* set when a villager is wearing the shirt sent with the saved letter */
|
||||
@@ -95,10 +155,15 @@ typedef struct animal_land_mem_s {
|
||||
/* 0x08 */ u16 id;
|
||||
} Anmlnd_c;
|
||||
|
||||
/* sizeof(memuni_U) == 0x12 */
|
||||
typedef struct island_animal_best_ftr_s {
|
||||
u32 check;
|
||||
u16 have_bitfield;
|
||||
} Anm_bestFtr_c;
|
||||
|
||||
/* sizeof(memuni_u) == 0xC */
|
||||
typedef union {
|
||||
Anmlnd_c land; /* size = 0xA */
|
||||
u32 check; /* size = 4 */
|
||||
Anm_bestFtr_c island; /* size = 6 */
|
||||
} memuni_u;
|
||||
|
||||
/* sizeof(Anmmem_c) == 0x138 */
|
||||
@@ -141,7 +206,7 @@ typedef struct animal_s {
|
||||
/* 0x8E8 */ u8 is_home; /* TRUE when the villager is home, otherwise FALSE */
|
||||
/* 0x8E9 */ u8 moved_in; /* TRUE when the villager moved in after town creation, FALSE if they started out in town */
|
||||
/* 0x8EA */ u8 removing; /* TRUE when the villager is leaving town, FALSE otherwise */
|
||||
/* 0x8EB */ s8 cloth_original_id; /* 0xFF when not wearing an Able Sister's pattern, otherwise 0-3 indicating which pattern */
|
||||
/* 0x8EB */ u8 cloth_original_id; /* 0xFF when not wearing an Able Sister's pattern, otherwise 0-3 indicating which pattern */
|
||||
/* 0x8EC */ s8 umbrella_id; /* 0xFF when no umbrella, 0-31 when a standard umbrella, 32-35 when using an Able Sister's pattern
|
||||
/* 0x8ED */ u8 unk_8ED; /* Exists according to mISL_gc_to_agb_animal, but seems unused in practice */
|
||||
/* 0x8EE */ mActor_name_t present_cloth; /* The most recently received shirt from a letter which the villager may change into */
|
||||
@@ -181,7 +246,9 @@ typedef struct {
|
||||
|
||||
typedef struct npc_conversation_s {
|
||||
u8 beesting:1; // talk to player about their beesting
|
||||
u8 unk:7;
|
||||
u8 fish_complete:1; // talk to the player about catching all fish
|
||||
u8 insect_complete:1; // talk to the player about catching all insects
|
||||
u8 unk:5;
|
||||
} mNpc_NpcConversation_c;
|
||||
|
||||
typedef struct npc_list_s {
|
||||
@@ -215,56 +282,204 @@ typedef struct mask_npc_s {
|
||||
Animal_c animal_data; /* animal data is copied if the mask npc is a standard villager NPC */
|
||||
} mNpc_MaskNpc_c;
|
||||
|
||||
/* anm_id could also just be a Animal_c pointer */
|
||||
extern void mNpc_GetNpcWorldNameAnm(u8* name, AnmPersonalID_c* anm_id);
|
||||
extern int mNpc_CheckFreeAnimalPersonalID(AnmPersonalID_c* anm_id);
|
||||
extern void mNpc_SetAnimalTitleDemo(mNpc_demo_npc_c* demo_npc, Animal_c* animal, GAME* game);
|
||||
extern void mNpc_SetNpcList(mNpc_NpcList_c* npc_list, Animal_c* animal, int max, int unused);
|
||||
extern void mNpc_ClearCacheName();
|
||||
extern void mNpc_ClearInAnimal();
|
||||
extern void mNpc_FirstClearGoodbyMail();
|
||||
extern void mNpc_ClearIslandNpcRoomData();
|
||||
extern void mNpc_CopyAnimalPersonalID(AnmPersonalID_c* dst, AnmPersonalID_c* src);
|
||||
extern AnmPersonalID_c* mNpc_GetOtherAnimalPersonalID(AnmPersonalID_c* ids, int num_ids);
|
||||
extern void mNpc_ClearEventNpc();
|
||||
extern void mNpc_ClearMaskNpc();
|
||||
extern int mNpc_SearchAnimalinfo(Animal_c* animal, mActor_name_t npc_name, int count);
|
||||
extern int mNpc_RegistEventNpc(mActor_name_t actor_name, mActor_name_t tex_name, mActor_name_t npc_name, mActor_name_t cloth_name);
|
||||
extern void mNpc_ClearAnimalInfo(Animal_c* animal_p);
|
||||
extern Animal_c* mNpc_GetInAnimalP();
|
||||
extern int mNpc_GetLooks2Sex(int looks);
|
||||
extern int mNpc_CheckFreeAnimalInfo(Animal_c* animal);
|
||||
extern int mNpc_GetFriendAnimalNum(Private_c* private_p);
|
||||
extern int mNpc_GetLooks(mActor_name_t npc_name);
|
||||
extern void mNpc_LoadNpcNameString(u8* buf, u8 idx);
|
||||
extern u8 mNpc_GetPaperType();
|
||||
extern void mMl_set_mail_name_npcinfo(Mail_nm_c* mail_name, AnmPersonalID_c* anm_pid);
|
||||
extern int mNpc_ReceiveHPMail(Mail_c* hp_mail);
|
||||
extern void mNpc_SendMailtoNpc(Mail_c* mail);
|
||||
extern void mNpc_SetNpcinfo(ACTOR* actor, s8 npc_info_idx);
|
||||
extern void mNpc_InitNpcAllInfo(int malloc_flag);
|
||||
extern void mNpc_SetRemoveAnimalNo(u8* remove_animal_no, Animal_c* animals, int remove_no);
|
||||
extern void mNpc_ClearAnimalPersonalID(AnmPersonalID_c* id);
|
||||
extern int mNpc_CheckCmpAnimalPersonalID(AnmPersonalID_c* id0, AnmPersonalID_c* id1);
|
||||
extern int mNpc_SearchAnimalPersonalID(AnmPersonalID_c* id);
|
||||
extern void mNpc_GetActorWorldName(u8* buf, mActor_name_t id);
|
||||
extern u8 mNpc_CheckNormalMail_length(int* len, u8* body);
|
||||
extern mActor_name_t mNpc_GetNpcFurniture(AnmPersonalID_c* pid);
|
||||
extern void mNpc_GetNpcWorldNameTableNo(u8* buf, mActor_name_t name_id);
|
||||
extern void mNpc_GetRandomAnimalName(u8* buf);
|
||||
extern int mNpc_GetIslandRoomFtrNum();
|
||||
extern mActor_name_t* mNpc_GetIslandRoomP(mActor_name_t npc_name);
|
||||
extern void mNpc_ChangeIslandRoom(mActor_name_t* items);
|
||||
extern void mNpc_SetNpcFurnitureRandom(mFM_fg_data_c** fg_data_list, int fg_name_start);
|
||||
extern void mNpc_SetNpcHomeYpos();
|
||||
extern void mNpc_SendRegisteredGoodbyMail();
|
||||
extern void mNpc_IslandNpcRoomDataSet(mFM_fg_data_c** sorted_fg_data_list, int fg_name_start);
|
||||
extern Animal_c* mNpc_GetAnimalInfoP(mActor_name_t npc_name);
|
||||
extern int mNpc_RegistMaskNpc(mActor_name_t mask_id, mActor_name_t npc_id, mActor_name_t cloth);
|
||||
extern int mNpc_CheckNpcSet(int bx, int bz, int ut_x, int ut_z);
|
||||
extern int mNpc_GetMakeUtNuminBlock_hard_area(int* ut_x, int* ut_z, int bx, int bz, int start_ut);
|
||||
typedef struct npc_default_data_s {
|
||||
mActor_name_t cloth;
|
||||
u16 catchphrase_str_idx;
|
||||
s8 umbrella;
|
||||
} mNpc_Default_Data_c;
|
||||
|
||||
extern void mNpc_AddNowNpcMax(u8* npc_max);
|
||||
extern void mNpc_SubNowNpcMax(u8* npc_max);
|
||||
extern void mNpc_ClearAnimalPersonalID(AnmPersonalID_c* pid);
|
||||
extern int mNpc_CheckFreeAnimalPersonalID(AnmPersonalID_c* pid);
|
||||
extern void mNpc_CopyAnimalPersonalID(AnmPersonalID_c* dst, AnmPersonalID_c* src);
|
||||
extern int mNpc_CheckCmpAnimalPersonalID(AnmPersonalID_c* pid0, AnmPersonalID_c* pid1);
|
||||
extern int mNpc_GetAnimalNum();
|
||||
extern int mNpc_CheckRemoveExp(Animal_c* animal);
|
||||
extern int mNpc_GetRemoveTime(Animal_c* animal);
|
||||
extern void mNpc_AddRemoveTime(Animal_c* animal);
|
||||
extern void mNpc_SetRemoveExp(Animal_c* animal, u16 remove_exp);
|
||||
extern void mNpc_SetRemoveExp(Animal_c* animal, u16 remove_exp);
|
||||
extern void mNpc_SetParentName(Animal_c* animal, PersonalID_c* parent_id);
|
||||
extern void mNpc_SetParentNameAllAnimal();
|
||||
extern void mNpc_ClearAnimalMail(Anmplmail_c* mail);
|
||||
extern void mNpc_CopyAnimalMail(Anmplmail_c* dst, Anmplmail_c* src);
|
||||
extern void mNpc_ClearAnimalMemory(Anmmem_c* memory, int num);
|
||||
extern void mNpc_ClearIslandAnimalMemory(Anmmem_c* memory, int num);
|
||||
extern void mNpc_CopyAnimalMemory(Anmmem_c* dst, Anmmem_c* src);
|
||||
extern void mNpc_AddFriendship(Anmmem_c* memory, int amount);
|
||||
extern int mNpc_CheckFreeAnimalMemory(Anmmem_c* memory);
|
||||
extern void mNpc_RenewalAnimalMemory();
|
||||
extern int mNpc_GetOldAnimalMemoryIdx(Anmmem_c* memory, int num);
|
||||
extern int mNpc_GetFreeAnimalMemoryIdx(Anmmem_c* memory, int num);
|
||||
extern int mNpc_GetOldPlayerAnimalMemoryIdx(Anmmem_c* memory, int num);
|
||||
extern int mNpc_ForceGetFreeAnimalMemoryIdx(Animal_c* animal, Anmmem_c* memory, int num);
|
||||
extern void mNpc_SetAnimalMemory(PersonalID_c* pid, AnmPersonalID_c* anm_id, Anmmem_c* memory);
|
||||
extern int mNpc_GetAnimalMemoryIdx(PersonalID_c* pid, Anmmem_c* memory, int num);
|
||||
extern void mNpc_SetAnimalLastTalk(Animal_c* animal);
|
||||
extern void mNpc_SetAnimalPersonalID2Memory(AnmPersonalID_c* anm_id);
|
||||
extern int mNpc_GetHighestFriendshipIdx(Anmmem_c* memory, int num);
|
||||
extern int mNpc_GetAnimalMemoryBestFriend(Anmmem_c* memory, int num);
|
||||
extern int mNpc_GetAnimalMemoryNum(Anmmem_c* memory, int count);
|
||||
extern int mNpc_GetAnimalMemoryLetterNum(Anmmem_c* memory, int count);
|
||||
extern int mNpc_GetAnimalMemoryLandKindNum(Anmmem_c* memory, int count);
|
||||
extern void mNpc_ClearAnimalInfo(Animal_c* animal);
|
||||
extern void mNpc_ClearIslandAnimalInfo(Animal_c* animal);
|
||||
extern void mNpc_ClearAnyAnimalInfo(Animal_c* animal, int count);
|
||||
extern int mNpc_CheckFreeAnimalInfo(Animal_c* animal);
|
||||
extern int mNpc_GetFreeAnimalInfo(Animal_c* animal, int count);
|
||||
extern int mNpc_UseFreeAnimalInfo(Animal_c* animal, int count);
|
||||
extern void mNpc_CopyAnimalInfo(Animal_c* dst, Animal_c* src);
|
||||
extern int mNpc_SearchAnimalinfo(Animal_c* animal, mActor_name_t npc_id, int count);
|
||||
extern Animal_c* mNpc_GetAnimalInfoP(mActor_name_t npc_id);
|
||||
extern int mNpc_SearchAnimalPersonalID(AnmPersonalID_c* anm_pid);
|
||||
extern AnmPersonalID_c* mNpc_GetOtherAnimalPersonalIDOtherBlock(AnmPersonalID_c* pids, int count, int bx, int bz, int check_flag);
|
||||
extern AnmPersonalID_c* mNpc_GetOtherAnimalPersonalID(AnmPersonalID_c* pids, int count);
|
||||
extern void mNpc_SetAnimalThisLand(Animal_c* animal, int count);
|
||||
extern int mNpc_GetSameLooksNum(u8 looks);
|
||||
extern int mNpc_CheckNpcExistBlock(int idx, int check_bx, int check_bz);
|
||||
extern void mNpc_Mail2AnimalMail(Anmplmail_c* animal_mail, Mail_c* mail);
|
||||
extern void mNpc_AnimalMail2Mail(Mail_c* mail, Anmplmail_c* animal_mail, PersonalID_c* pid, AnmPersonalID_c* anm_id);
|
||||
extern int mNpc_CheckNormalMail_sub(int* char_num, u8* body);
|
||||
extern u8 mNpc_CheckNormalMail_length(int* len, u8* body);
|
||||
extern u8 mNpc_CheckNormalMail_nes(u8* body);
|
||||
extern int mNpc_SendMailtoNpc(Mail_c* mail);
|
||||
extern void mNpc_ClearRemail(Anmremail_c* remail);
|
||||
extern void mNpc_Remail();
|
||||
extern u8 mNpc_GetPaperType();
|
||||
extern int mNpc_SendVtdayMail();
|
||||
extern int mNpc_CheckFriendship(PersonalID_c* pid, Animal_c* animal);
|
||||
extern int mNpc_SendEventBirthdayCard(PersonalID_c* pid);
|
||||
extern int mNpc_SendEventBirthdayCard2(PersonalID_c* pid, int player_no);
|
||||
extern int mNpc_SendEventXmasCard(PersonalID_c* pid, int player_no);
|
||||
extern int mNpc_GetPresentClothMemoryIdx(Anmmem_c* memory);
|
||||
extern int mNpc_GetPresentClothMemoryIdx_rnd(Anmmem_c* memory);
|
||||
extern int mNpc_CheckTalkPresentCloth(Animal_c* animal);
|
||||
extern void mNpc_ChangePresentCloth();
|
||||
extern u8* mNpc_GetWordEnding(ACTOR* actor);
|
||||
extern void mNpc_ResetWordEnding(ACTOR* actor);
|
||||
extern int mNpc_GetFreeEventNpcIdx();
|
||||
extern int mNpc_RegistEventNpc(mActor_name_t event_id, mActor_name_t texture_id, mActor_name_t npc_id, mActor_name_t cloth_id);
|
||||
extern void mNpc_UnRegistEventNpc(mNpc_EventNpc_c* npc);
|
||||
extern void mNpc_ClearEventNpc();
|
||||
extern mNpc_EventNpc_c* mNpc_GetSameEventNpc(mActor_name_t event_id);
|
||||
extern int mNpc_GetFreeMaskNpcIdx();
|
||||
extern int mNpc_RegistMaskNpc(mActor_name_t mask_id, mActor_name_t npc_id, mActor_name_t cloth_id);
|
||||
extern void mNpc_UnRegistMaskNpc(mNpc_MaskNpc_c* npc);
|
||||
extern void mNpc_ClearMaskNpc();
|
||||
extern mNpc_MaskNpc_c* mNpc_GetSameMaskNpc(mActor_name_t mask_id);
|
||||
extern u8 mNpc_GetLooks(mActor_name_t npc_id);
|
||||
extern void mNpc_SetDefAnimalCloth(Animal_c* animal);
|
||||
extern void mNpc_SetDefAnimalUmbrella(Animal_c* animal);
|
||||
extern void mNpc_SetDefAnimal(Animal_c* animal, mActor_name_t npc_id, mNpc_Default_Data_c* def_data);
|
||||
extern void mNpc_SetAnimalTitleDemo(mNpc_demo_npc_c* demo_npc, Animal_c* animal, GAME* game);
|
||||
extern int mNpc_GetReservedUtNum(int* ut_x, int* ut_z, mActor_name_t* item);
|
||||
extern int mNpc_BlockNum2ReservedUtNum(int* ut_x, int* ut_z, int bx, int bz);
|
||||
extern void mNpc_MakeReservedListBeforeFieldct(Anmhome_c* reserved, int reserved_num, u8* reserved_count);
|
||||
extern void mNpc_MakeReservedListAfterFieldct(Anmhome_c* reserved, int reserved_num, u8* reserved_count, u8 bx_max, u8 bz_max);
|
||||
extern mNpc_InitNpcData();
|
||||
extern void mNpc_InitNpcList(mNpc_NpcList_c* npclist, int count);
|
||||
extern void mNpc_SetNpcList(mNpc_NpcList_c* npclist, Animal_c* animal, int count, int malloc_flag);
|
||||
extern void mNpc_SetNpcinfo(ACTOR* actor, s8 npc_info_idx);
|
||||
extern void mNpc_AddNpc_inBlock(mFM_move_actor_c* move_actor_list, u8 bx, u8 bz);
|
||||
extern void mNpc_RenewalNpcRoom(s16* wall_floor);
|
||||
extern void mNpc_RenewalSetNpc(ACTOR* actor);
|
||||
extern int mNpc_GetFriendAnimalNum(PersonalID_c* pid);
|
||||
extern int mNpc_CheckFriendAllAnimal(PersonalID_c* pid);
|
||||
extern void mNpc_SetNpcFurnitureRandom(mFM_fg_data_c** fg_data_table, int fg_base_id);
|
||||
extern mActor_name_t mNpc_GetNpcFurniture(AnmPersonalID_c* anm_id);
|
||||
extern void mNpc_ClearInAnimal();
|
||||
extern Animal_c* mNpc_GetInAnimalP();
|
||||
extern void mNpc_SetRemoveAnimalNo(u8* remove_animal_no, Animal_c* animal, int ignored_idx);
|
||||
extern int mNpc_GetGoodbyAnimalIdx(int ignored_idx);
|
||||
extern void mNpc_FirstClearGoodbyMail();
|
||||
extern void mNpc_SendRegisteredGoodbyMail();
|
||||
extern void mNpc_GetRemoveAnimal(Animal_c* transferring_animal, int moving_out);
|
||||
extern void mNpc_SetReturnAnimal(Animal_c* return_animal);
|
||||
extern void mNpc_AddActor_inBlock(mFM_move_actor_c* move_actor_list, u8 bx, u8 bz);
|
||||
extern void mNpc_LoadNpcNameString(u8* dst, u8 name_id);
|
||||
extern void mNpc_GetNpcWorldNameTableNo(u8* dst, mActor_name_t npc_id);
|
||||
extern void mNpc_ClearCacheName();
|
||||
extern void mNpc_GetNpcWorldNameAnm(u8* dst, AnmPersonalID_c* anm_id);
|
||||
extern void mNpc_GetActorWorldName(u8* dst, mActor_name_t npc_id);
|
||||
extern u8* mNpc_GetNpcWorldNameP(mActor_name_t npc_id);
|
||||
extern void mNpc_GetNpcWorldName(u8* dst, ACTOR* actor);
|
||||
extern void mNpc_GetRandomAnimalName(u8* dst);
|
||||
extern void mNpc_GetAnimalPlateName(u8* dst, xyz_t wpos);
|
||||
extern int mNpc_GetNpcLooks(ACTOR* actor);
|
||||
extern int mNpc_GetLooks2Sex(int looks);
|
||||
extern int mNpc_GetAnimalSex(Animal_c* animal);
|
||||
extern int mNpc_GetNpcSex(ACTOR* actor);
|
||||
extern int mNpc_GetNpcSoundSpec(ACTOR* actor);
|
||||
extern void mNpc_InitNpcAllInfo(int malloc_flag);
|
||||
extern void mNpc_Grow();
|
||||
extern void mNpc_ForceRemove();
|
||||
extern int mNpc_DecideMaskNpc_summercamp(mActor_name_t* npc_id);
|
||||
extern int mNpc_RegistMaskNpc_summercamp(mActor_name_t mask_id, mActor_name_t npc_id, mActor_name_t cloth_id);
|
||||
extern int mNpc_CheckNpcSet_fgcol(mActor_name_t fg_item, u32 attribute);
|
||||
extern int mNpc_CheckNpcSet(int bx, int bz, int ut_x, int ut_z);
|
||||
extern int mNpc_GetMakeUtNuminBlock_hard_area(int* ut_x, int* ut_z, int bx, int bz, int restrict_area);
|
||||
extern int mNpc_GetMakeUtNuminBlock_area(int* ut_x, int* ut_z, int bx, int bz, int restrict_area);
|
||||
extern int mNpc_GetMakeUtNuminBlock(int* ut_x, int* ut_z, int bx, int bz);
|
||||
extern int mNpc_GetMakeUtNuminBlock33(int* make_ut_x, int* make_ut_z, int ut_x, int ut_z, int bx, int bz);
|
||||
extern int mNpc_GetMakeUtNuminBlock_hide_hard_area(int* ut_x, int* ut_z, int bx, int bz, int restrict_area);
|
||||
extern void mNpc_ClearTalkInfo();
|
||||
extern int mNpc_CheckOverImpatient(int animal_idx, int feel);
|
||||
extern int mNpc_GetOverImpatient(int animal_idx, int feel);
|
||||
extern int mNpc_CheckQuestRequest(int animal_idx);
|
||||
extern void mNpc_SetQuestRequestOFF(int animal_idx, int feel);
|
||||
extern void mNpc_TalkInfoMove();
|
||||
extern void mNpc_TalkEndMove(int animal_idx, int feel);
|
||||
extern int mNpc_GetNpcFloorNo();
|
||||
extern int mNpc_GetNpcWallNo();
|
||||
extern void mNpc_SetTalkBee();
|
||||
extern u8 mNpc_GetFishCompleteTalk(mNpc_NpcList_c* npclist);
|
||||
extern u8 mNpc_GetInsectCompleteTalk(mNpc_NpcList_c* npclist);
|
||||
extern void mNpc_SetFishCompleteTalk(mNpc_NpcList_c* npclist);
|
||||
extern void mNpc_SetInsectCompleteTalk(mNpc_NpcList_c* npclist);
|
||||
extern void mNpc_SetNpcHomeYpos();
|
||||
extern void mNpc_DecideIslandNpc(Animal_c* animal);
|
||||
extern void mNpc_SetIslandRoomFtr(Animal_c* animal);
|
||||
extern void mNpc_SetIslandGetFtr(mActor_name_t ftr);
|
||||
extern void mNpc_SetIslandGetFtrtoRoom();
|
||||
extern void mNpc_SetIslandGetLetter(int get);
|
||||
extern int mNpc_GetIslandGetLetter();
|
||||
extern void mNpc_SetIslandCheckFtrMsg(int set);
|
||||
extern int mNpc_GetIslandCheckFtrMsg();
|
||||
extern void mNpc_ClearIslandNpcRoomData();
|
||||
extern void mNpc_IslandNpcRoomDataSet(mFM_fg_data_c** data_table, int base_idx);
|
||||
extern mActor_name_t* mNpc_GetIslandRoomP(mActor_name_t npc_id);
|
||||
extern void mNpc_GetIslandWallFloorIdx(int* wall, int* floor, mActor_name_t npc_id);
|
||||
extern int mNpc_CheckIslandNpcRoomFtrItemNo_keep(mActor_name_t ftr);
|
||||
extern void mNpc_ChangeIslandRoom(mActor_name_t* items);
|
||||
extern int mNpc_CheckFtrIsIslandBestFtr(mActor_name_t ftr);
|
||||
extern int mNpc_CheckFtrIsIslandNormalFtr(mActor_name_t ftr);
|
||||
extern int mNpc_SetIslandFtr(PersonalID_c* pid, mActor_name_t ftr);
|
||||
extern int mNpc_EraseIslandFtr(mActor_name_t ftr);
|
||||
extern int mNpc_EraseIslandFtr_keep(mActor_name_t ftr);
|
||||
extern void mNpc_ClearIslandPresentFtrInfo();
|
||||
extern void mNpc_SetIslandPresentFtr();
|
||||
extern void mNpc_RestoreIslandPresentFtr();
|
||||
extern int mNpc_GetIslandRoomFtrNum();
|
||||
extern int mNpc_CheckIslandPresentFtrIs();
|
||||
extern mActor_name_t mNpc_GetIslandPresentFtr();
|
||||
extern PersonalID_c* mNpc_GetIslandPresentFtrPersonalID();
|
||||
extern mActor_name_t mNpc_GetRandomBestFtr();
|
||||
extern Anmmem_c* mNpc_GetOtherBestFtr(PersonalID_c* pid, mActor_name_t* other_best_ftr, mActor_name_t exist_ftr);
|
||||
extern mActor_name_t mNpc_GetPlayerBestFtr(PersonalID_c* pid, mActor_name_t exist_ftr);
|
||||
extern mActor_name_t mNpc_GetPlayerFtr(PersonalID_c* pid);
|
||||
extern int mNpc_CheckIslandAnimal(Animal_c* animal);
|
||||
extern u32 mNpc_GetMDIdx(mActor_name_t npc_id);
|
||||
extern u32 mNpc_GetIslandMDIdx();
|
||||
extern void mNpc_ClearHPMail(AnmHPMail_c* hp_mail, int count);
|
||||
extern void mNpc_AllClearHPMailPlayerIdx(int player_no);
|
||||
extern int mNpc_ReceiveHPMail(Mail_c* mail);
|
||||
extern void mNpc_SendHPMail();
|
||||
extern void mNpc_PrintRemoveInfo(gfxprint_t* gfxprint);
|
||||
extern void mNpc_set_addd_bit(int bit);
|
||||
extern void mNpc_set_addd_edit_bit(int bit);
|
||||
extern void mNpc_set_addd_edit_info(int mtype, int disp_add);
|
||||
extern void mNpc_SetTalkAnimalIdx_fdebug(AnmPersonalID_c* anm_id);
|
||||
extern void mNpc_PrintFriendship_fdebug(gfxprint_t* gfxprint);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -10,6 +10,10 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define PLAYER_NUM 4
|
||||
#define FOREIGNER_NUM 1
|
||||
#define TOTAL_PLAYER_NUM (PLAYER_NUM + FOREIGNER_NUM)
|
||||
|
||||
#define PLAYER_NAME_LEN 8
|
||||
|
||||
/* sizeof(PersonalID_c) == 0x14 */
|
||||
|
||||
+2
-5
@@ -15,10 +15,6 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define PLAYER_NUM 4
|
||||
#define FOREIGNER_NUM 1
|
||||
#define TOTAL_PLAYER_NUM (PLAYER_NUM + FOREIGNER_NUM)
|
||||
|
||||
#define mPr_WALLET_MAX 99999
|
||||
#define mPr_DEPOSIT_MAX 999999999
|
||||
|
||||
@@ -56,8 +52,9 @@ enum {
|
||||
enum {
|
||||
mPr_SEX_MALE,
|
||||
mPr_SEX_FEMALE,
|
||||
mPr_SEX_OTHER,
|
||||
|
||||
mPr_SEX_NUM
|
||||
mPr_SEX_NUM = mPr_SEX_OTHER
|
||||
};
|
||||
|
||||
enum {
|
||||
|
||||
@@ -60,6 +60,7 @@ typedef u32 unknown;
|
||||
#endif
|
||||
|
||||
#define ARRAY_SIZE(arr, type) (sizeof(arr) / sizeof(type))
|
||||
#define ARRAY_COUNT(arr) (int)(sizeof(arr) / sizeof(arr[0]))
|
||||
|
||||
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
|
||||
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
|
||||
|
||||
+1
-1
@@ -291,7 +291,7 @@ static int aHNW_decide_msg_idx_dance(ACTOR* actor) {
|
||||
int house_arrange_idx = mHS_get_arrange_idx(Common_Get(player_no));
|
||||
mHm_hs_c* house = Save_GetPointer(homes[house_arrange_idx]);
|
||||
if (house->flags.has_saved == FALSE &&
|
||||
mEv_CheckFirstJob() == TRUE && mNpc_GetFriendAnimalNum(Common_Get(now_private)) == 0
|
||||
mEv_CheckFirstJob() == TRUE && mNpc_GetFriendAnimalNum(&Common_Get(now_private)->player_ID) == 0
|
||||
) {
|
||||
res = aHNW_MSG_NEED_FRIEND; /* player owns this house, but is in intro and has not spoken to any villagers */
|
||||
}
|
||||
|
||||
+1
-1
@@ -2,6 +2,6 @@
|
||||
|
||||
#include "m_mail_check_ovl.h"
|
||||
|
||||
extern int mMC_get_mail_hit_rate(int* len, u8* str) {
|
||||
extern int mMC_get_mail_hit_rate(int* len, u8* str, GAME* game) {
|
||||
return mMck_check_key_hit(len, str);
|
||||
}
|
||||
|
||||
+1
-1
@@ -666,7 +666,7 @@ extern void mMsm_SendCompMail() {
|
||||
|
||||
mHandbill_Set_free_str(mHandbill_FREE_STR0, Save_Get(land_info.name), land_name_len);
|
||||
|
||||
if (mMl_send_mail_postoffice(&priv->player_ID, i, FTR_MUSEUM_MODEL, ITM_PAPER24, 0x22F, l_museum_name_str, mMl_DATA2, mMl_TYPE_MUSEUM) == TRUE) {
|
||||
if (mMl_send_mail_postoffice(&priv->player_ID, i, FTR_MUSEUM_MODEL, ITM_PAPER24, 0x22F, l_museum_name_str, mMl_DATA2, mMl_TYPE_MAIL) == TRUE) {
|
||||
mMsm_SetPrivateCompMail(priv, mPr_FLAG_MUSEUM_COMP_HANDBILL_RECEIVED);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,244 @@
|
||||
#include "m_name_table.h"
|
||||
|
||||
#include "m_npc_personal_id.h"
|
||||
|
||||
u8 npc_looks_table[NPC_NUM] = {
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_KO_GIRL
|
||||
};
|
||||
+7531
File diff suppressed because it is too large
Load Diff
+2
-2
@@ -1224,13 +1224,13 @@ static void mPr_GetForeingerAnimalMail(Mail_c* mail, Private_c* priv, mPr_animal
|
||||
u8 header[40];
|
||||
u8 footer[48];
|
||||
int ofs;
|
||||
int looks;
|
||||
u8 looks;
|
||||
int header_back_start;
|
||||
|
||||
looks = mNpc_GetLooks(anm_mem->npc_id);
|
||||
ofs = RANDOM(3);
|
||||
mail_no = 0xFC;
|
||||
mail_no += ofs + (u8)looks * 3;
|
||||
mail_no += ofs + looks * 3;
|
||||
mHandbill_Set_free_str(0, priv->player_ID.player_name, PLAYER_NAME_LEN); // player's name
|
||||
mNpc_LoadNpcNameString(npc_name, anm_mem->npc_id);
|
||||
mHandbill_Set_free_str(1, npc_name, ANIMAL_NAME_LEN); // animal's name
|
||||
|
||||
+1
-1
@@ -689,7 +689,7 @@ static u8 mQst_GetMailRank(u8* body, mActor_name_t present) {
|
||||
rank = mQst_LETTER_RANK_1;
|
||||
}
|
||||
|
||||
if (score_bonus >= 1) {
|
||||
if (score_bonus >= mNpc_LETTER_RANK_OK) {
|
||||
rank += mQst_LETTER_SCORE_BONUS;
|
||||
}
|
||||
|
||||
|
||||
@@ -112,7 +112,13 @@ static mNpc_demo_npc_c demo_npc_list[] = {
|
||||
DEMO_NPC(SAMSON, 5, 2, 12, 4),
|
||||
DEMO_NPC(JANE, 5, 2, 9, 11),
|
||||
DEMO_NPC(TYBALT, 5, 4, 11, 4),
|
||||
/* @BUG - mNpc_SetAnimalTitleDemo uses ANIMAL_NUM_MAX (15) but only 14 are set */
|
||||
#ifndef BUGFIXES
|
||||
DEMO_NPC(CUBE, 5, 5, 5, 11)
|
||||
#else
|
||||
DEMO_NPC(CUBE, 5, 5, 5, 11),
|
||||
{ EMPTY_NO, 0, 0, 0, 0 }
|
||||
#endif
|
||||
};
|
||||
|
||||
static int demo_npc_num = sizeof(demo_npc_list) / sizeof(mNpc_demo_npc_c);
|
||||
|
||||
Reference in New Issue
Block a user