mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-23 06:34:18 -04:00
Implement & link m_quest.c
This commit is contained in:
@@ -157,6 +157,11 @@ m_private.c:
|
||||
.rodata: [0x806431D8, 0x80643208]
|
||||
.data: [0x8065BF00, 0x8065C030]
|
||||
.bss: [0x8129CD40, 0x8129F2B0]
|
||||
m_quest.c:
|
||||
.text: [0x803E2990, 0x803E4B20]
|
||||
.rodata: [0x80643208, 0x80643218]
|
||||
.data: [0x8065C030, 0x8065C098]
|
||||
.bss: [0x8129F2B0, 0x8129F2E8]
|
||||
m_random_field.c:
|
||||
.text: [0x803E4B20, 0x803E50E4]
|
||||
.rodata: [0x80643218, 0x80643240]
|
||||
|
||||
+15
-2
@@ -5,6 +5,7 @@
|
||||
#include "m_actor.h"
|
||||
#include "m_play.h"
|
||||
#include "ac_npc_h.h"
|
||||
#include "m_npc_schedule.h"
|
||||
#include "m_actor_dlftbls.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -25,6 +26,8 @@ typedef void (*aNPC_FREE_OVERLAY_AREA_PROC)(ACTOR_DLFTBL*);
|
||||
typedef ACTOR* (*aNPC_GET_ACTOR_AREA_PROC)(size_t, const char*, int);
|
||||
typedef void (*aNPC_FREE_ACTOR_AREA_PROC)(ACTOR*);
|
||||
|
||||
typedef int (*aNPC_FORCE_CALL_REQ_PROC)(NPC_ACTOR*, int);
|
||||
|
||||
struct ac_npc_clip_s {
|
||||
aNPC_SETUP_ACTOR_PROC setupActor_proc;
|
||||
void* _004;
|
||||
@@ -32,13 +35,23 @@ struct ac_npc_clip_s {
|
||||
aNPC_GET_ACTOR_AREA_PROC get_actor_area_proc;
|
||||
aNPC_FREE_ACTOR_AREA_PROC free_actor_area_proc;
|
||||
aNPC_DMA_DRAW_DATA_PROC dma_draw_data_proc;
|
||||
void* _018[(0x12C - 0x018) / sizeof(void*)];
|
||||
void* _018[(0x124 - 0x018) / sizeof(void*)];
|
||||
aNPC_FORCE_CALL_REQ_PROC force_call_req_proc;
|
||||
void* _128;
|
||||
};
|
||||
|
||||
typedef struct npc_info_s {
|
||||
mNPS_schedule_c* schedule;
|
||||
mNpc_NpcList_c* list;
|
||||
Animal_c* animal;
|
||||
void* event; // TODO: EventNpc struct
|
||||
} NpcActorInfo_c;
|
||||
|
||||
struct npc_actor_s {
|
||||
ACTOR actor_class;
|
||||
NpcActorInfo_c npc_info;
|
||||
// TODO: finish
|
||||
u8 _174[0x718 - 0x174];
|
||||
u8 _174[0x718 - 0x184];
|
||||
int texture_bank_idx; // TEMP: this is part of draw struct
|
||||
u8 _71C[0x9D8 - 0x71C];
|
||||
};
|
||||
|
||||
@@ -243,6 +243,7 @@ extern s8* mEv_get_save_area(int type, s8 id);
|
||||
extern int mEv_ArbeitPlayer(u32 player_no);
|
||||
extern u16 mEv_get_special_event_type();
|
||||
extern int mEv_ClearEventSaveInfo(mEv_event_save_c* event_save_data);
|
||||
extern void mEv_EventON(u32 event_kind);
|
||||
|
||||
extern int mEv_weekday2day(lbRTC_month_t month, int week_type, lbRTC_weekday_t weekday);
|
||||
extern void mEv_ClearEventInfo();
|
||||
|
||||
@@ -163,6 +163,7 @@ extern void mFI_LposInBKtoWpos(xyz_t* wpos, xyz_t lpos, int block_x, int block_z
|
||||
extern f32 mFI_GetBlockWidth();
|
||||
extern f32 mFI_GetBlockHeight();
|
||||
extern int mFI_Wpos2BkandUtNuminBlock(int* block_x, int* block_z, int* ut_x, int* ut_z, xyz_t wpos);
|
||||
extern int mFI_GetItemNumOnBlockInField(int block_x, int block_z, mActor_name_t start_item, mActor_name_t end_item);
|
||||
|
||||
extern void mFI_PrintNowBGNum(gfxprint_t* gfxprint);
|
||||
extern void mFI_PrintFgAttr(gfxprint_t* gfxprint);
|
||||
|
||||
@@ -218,6 +218,8 @@ struct message_window_s {
|
||||
extern int mMsg_Get_Length_String(u8* buf, size_t buf_size);
|
||||
extern mMsg_Window_c* mMsg_Get_base_window_p();
|
||||
extern void mMsg_Set_free_str(mMsg_Window_c* msg, int free_str_no, u8* str, int str_size);
|
||||
extern void mMsg_Set_free_str_art(mMsg_Window_c* msg, int free_str_no, u8* str, int str_size, int article_no);
|
||||
extern void mMsg_Set_item_str_art(mMsg_Window_c* msg, int free_str_no, u8* str, int str_size, int article_no);
|
||||
extern void mMsg_ct(GAME_PLAY*);
|
||||
extern void mMsg_dt(GAME_PLAY*);
|
||||
extern void mMsg_Main(GAME_PLAY*);
|
||||
|
||||
@@ -212,6 +212,10 @@ 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_PrintRemoveInfo(gfxprint_t* gfxprint);
|
||||
extern void mNpc_PrintFriendship_fdebug(gfxprint_t* gfxprint);
|
||||
|
||||
+2
-1
@@ -82,7 +82,8 @@ enum {
|
||||
#define mPr_FOREIGN_MAP_COUNT 8
|
||||
#define mPr_ORIGINAL_DESIGN_COUNT 8
|
||||
|
||||
#define mPr_GET_ITEM_COND(all_cond, slot_no) (((all_cond) >> (2 * (slot_no))) & 3)
|
||||
#define mPr_GET_ITEM_COND(all_cond, slot_no) (((all_cond) >> (((u32)(slot_no)) << 1)) & mPr_ITEM_COND_NUM)
|
||||
#define mPr_SET_ITEM_COND(all_cond, slot_no, cond) (((all_cond) & ~((u32)mPr_ITEM_COND_NUM << ((u32)(slot_no) << 1))) | ((u32)(cond) << ((u32)(i) << 1)))
|
||||
|
||||
enum {
|
||||
mPr_SUNBURN_RANK_MIN,
|
||||
|
||||
+103
-4
@@ -12,11 +12,38 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define mQst_MAX_TIME_LIMIT_DAYS 28
|
||||
#define mQst_CHECK_NPC_RECEIPIENT 0
|
||||
#define mQst_CHECK_NPC_SENDER 1
|
||||
|
||||
#define mQst_LETTER_RANK_MIN 0
|
||||
#define mQst_LETTER_RANK_0 mQst_LETTER_RANK_MIN
|
||||
#define mQst_LETTER_RANK_1 1
|
||||
#define mQst_LETTER_RANK_2 2
|
||||
#define mQst_LETTER_RANK_3 3
|
||||
#define mQst_LETTER_RANK_4 4
|
||||
#define mQst_LETTER_RANK_5 5
|
||||
#define mQst_LETTER_RANK_6 6
|
||||
#define mQst_LETTER_RANK_7 7
|
||||
#define mQst_LETTER_RANK_8 8
|
||||
#define mQst_LETTER_RANK_9 9
|
||||
#define mQst_LETTER_RANK_10 10
|
||||
#define mQst_LETTER_RANK_11 11
|
||||
#define mQst_LETTER_RANK_MAX mQst_LETTER_RANK_11 + 1
|
||||
|
||||
#define mQst_LETTER_SCORE_BONUS 3 /* Given when the raw score of the letter has passed the threshold */
|
||||
#define mQst_LETTER_PRESENT_BONUS 6 /* Given when a present is attached */
|
||||
|
||||
#define mQst_LETTER_OKAY_LENGTH 17
|
||||
#define mQst_LETTER_GOOD_LENGTH 49
|
||||
|
||||
enum {
|
||||
mQst_QUEST_TYPE_DELIVERY, /* Deliver item quest */
|
||||
mQst_QUEST_TYPE_ERRAND, /* Villager 'can I help' quests */
|
||||
mQst_QUEST_TYPE_CONTEST, /* Villager send letter, plant flowers, bring ball, etc */
|
||||
mQst_QUEST_TYPE_NONE
|
||||
mQst_QUEST_TYPE_NONE,
|
||||
|
||||
mQst_QUEST_TYPE_NUM = mQst_QUEST_TYPE_NONE
|
||||
};
|
||||
|
||||
/* sizeof(mQst_base_c) == 0xC */
|
||||
@@ -40,7 +67,9 @@ enum {
|
||||
mQst_CONTEST_KIND_FLOWER, /* plant flowers for villager */
|
||||
mQst_CONTEST_KIND_FISH, /* get fish for villager */
|
||||
mQst_CONTEST_KIND_INSECT, /* get insect for villager */
|
||||
mQst_CONTEST_KIND_LETTER /* send letter to villager */
|
||||
mQst_CONTEST_KIND_LETTER, /* send letter to villager */
|
||||
|
||||
mQst_CONTEST_KIND_NUM
|
||||
};
|
||||
|
||||
/* sizeof(mQst_contest_info_u) == 4 */
|
||||
@@ -77,10 +106,33 @@ typedef struct quest_delivery_s {
|
||||
#define mQst_ERRAND_FIRST_JOB_ANIMAL_NUM 2
|
||||
#define mQst_ERRAND_CHAIN_ANIMAL_NUM 3
|
||||
|
||||
enum {
|
||||
mQst_ERRAND_REQUEST,
|
||||
mQst_ERRAND_REQUEST_CONTINUE,
|
||||
mQst_ERRAND_REQUEST_FINAL,
|
||||
|
||||
mQst_ERRAND_FIRSTJOB_CHANGE_CLOTH,
|
||||
mQst_ERRAND_FIRSTJOB_PLANT_FLOWER,
|
||||
mQst_ERRAND_FIRSTJOB_DELIVER_FTR,
|
||||
mQst_ERRAND_FIRSTJOB_SEND_LETTER,
|
||||
mQst_ERRAND_FIRSTJOB_DELIVER_CARPET,
|
||||
mQst_ERRAND_FIRSTJOB_DELIVER_AXE,
|
||||
mQst_ERRAND_FIRSTJOB_POST_NOTICE,
|
||||
mQst_ERRAND_FIRSTJOB_SEND_LETTER2,
|
||||
mQst_ERRAND_FIRSTJOB_DELIVER_AXE2,
|
||||
mQst_ERRAND_FIRSTJOB_INTRODUCTIONS,
|
||||
mQst_ERRAND_FIRSTJOB_OPEN,
|
||||
mQst_ERRAND_FIRSTJOB_START,
|
||||
|
||||
mQst_ERRAND_NUM
|
||||
};
|
||||
|
||||
enum {
|
||||
mQst_ERRAND_TYPE_NONE,
|
||||
mQst_ERRAND_TYPE_CHAIN,
|
||||
mQst_ERRAND_TYPE_FIRST_JOB
|
||||
mQst_ERRAND_TYPE_FIRST_JOB,
|
||||
|
||||
mQst_ERRAND_TYPE_NUM
|
||||
};
|
||||
|
||||
/* sizeof(mQst_first_job_c) == 0x20 */
|
||||
@@ -119,8 +171,55 @@ typedef struct not_saved_quest_s {
|
||||
u8 h;
|
||||
} mQst_not_saved_c;
|
||||
|
||||
extern void mQst_PrintQuestInfo(gfxprint_t* gfxprint);
|
||||
extern void mQst_ClearQuestInfo(mQst_base_c* quest);
|
||||
extern void mQst_ClearDelivery(mQst_delivery_c* delivery, int num);
|
||||
extern void mQst_ClearErrand(mQst_errand_c* errand, int num);
|
||||
extern void mQst_ClearContest(mQst_contest_c* contest);
|
||||
extern void mQst_ClearNotSaveQuest(mQst_not_saved_c* not_saved);
|
||||
extern void mQst_CopyQuestInfo(mQst_base_c* dst, mQst_base_c* src);
|
||||
extern void mQst_CopyDelivery(mQst_delivery_c* dst, mQst_delivery_c* src);
|
||||
extern void mQst_CopyErrand(mQst_errand_c* dst, mQst_errand_c* src);
|
||||
extern int mQst_CheckFreeQuest(mQst_base_c* quest);
|
||||
extern int mQst_CheckLimitOver(mQst_base_c* quest);
|
||||
extern int mQst_GetOccuredDeliveryIdx(int delivery_kind);
|
||||
extern int mQst_ClearQuestbyPossessionIdx(int idx);
|
||||
extern int mQst_CheckLimitbyPossessionIdx(int idx);
|
||||
extern void mQst_ClearGrabItemInfo();
|
||||
extern void mQst_CheckGrabItem(mActor_name_t item, int pocket_idx);
|
||||
extern void mQst_CheckPutItem(mActor_name_t item, int pocket_idx);
|
||||
extern int mQst_CheckNpcExistbyItemIdx(int idx, int sender_or_receipient);
|
||||
extern int mQst_GetToFromName(u8* to_name, u8* from_name, int idx);
|
||||
extern int mQst_GetOccuredContestIdx(int kind);
|
||||
extern int mQst_GetFlowerSeedNum(int block_x, int block_z);
|
||||
extern int mQst_GetFlowerNum(int block_x, int block_z);
|
||||
extern int mQst_GetNullNoNum(int block_x, int block_z);
|
||||
extern void mQst_SetItemNameStr(mActor_name_t item, int string_no);
|
||||
extern void mQst_SetItemNameFreeStr(mActor_name_t item, int string_no);
|
||||
extern int mQst_SendRemail(mQst_contest_c* contest, AnmPersonalID_c* sender_id);
|
||||
extern void mQst_SetReceiveLetter(mQst_contest_c* contest, PersonalID_c* sender_id, u8* body, mActor_name_t present);
|
||||
extern mQst_errand_c* mQst_GetFirstJobData();
|
||||
extern int mQst_CheckFirstJobQuestbyItemIdx(int idx);
|
||||
extern int mQst_CheckFirstJobFin(mQst_errand_c* errand);
|
||||
extern int mQst_CheckRemoveTarget(mQst_errand_c* errand);
|
||||
extern void mQst_SetFirstJobStart(mQst_errand_c* errand);
|
||||
extern void mQst_SetFirstJobChangeCloth(mQst_errand_c* errand, mActor_name_t item);
|
||||
extern void mQst_SetFirstJobSeed(mQst_errand_c* errand);
|
||||
extern void mQst_SetFirstJobHello(mQst_errand_c* errand);
|
||||
extern void mQst_SetFirstJobFurniture(mQst_errand_c* errand, AnmPersonalID_c* pid, mActor_name_t item, u8 slot);
|
||||
extern void mQst_SetFirstJobLetter(mQst_errand_c* errand, AnmPersonalID_c* pid);
|
||||
extern void mQst_SetFirstJobLetter2(mQst_errand_c* errand, AnmPersonalID_c* pid);
|
||||
extern void mQst_SetFirstJobOpenQuest(mQst_errand_c* errand);
|
||||
extern void mQst_SetFirstJobCarpet(mQst_errand_c* errand, AnmPersonalID_c* pid, mActor_name_t item, u8 slot);
|
||||
extern void mQst_SetFirstJobAxe(mQst_errand_c* errand, AnmPersonalID_c* pid, mActor_name_t item, u8 slot);
|
||||
extern void mQst_SetFirstJobAxe2(mQst_errand_c* errand, AnmPersonalID_c* pid, mActor_name_t item, u8 slot);
|
||||
extern void mQst_SetFirstJobNotice(mQst_errand_c* errand);
|
||||
extern int mQst_GetRandom(int max);
|
||||
extern void mQst_GetGoods_common(mActor_name_t* item, AnmPersonalID_c* pid, int category, mActor_name_t* exist_table, int exist_num, int list);
|
||||
extern int mQst_CheckSoccerTarget(ACTOR* actor);
|
||||
extern void mQst_NextSoccer(ACTOR* actor);
|
||||
extern void mQst_NextSnowman(xyz_t snowman_pos);
|
||||
extern void mQst_BackSnowman(xyz_t snowman_pos);
|
||||
extern void mQst_PrintQuestInfo(gfxprint_t* gfxprint);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
+1126
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user