ac_npc_rtc OK

This commit is contained in:
Prakxo
2023-12-24 10:50:45 +01:00
parent 717973fe5c
commit f0458469d6
15 changed files with 750 additions and 13 deletions
+3 -3
View File
@@ -19,7 +19,7 @@ ACTOR_PROFILE Nameplate_Profile = {
NONE_ACTOR_PROC,
aNP_actor_init,
NULL,
NULL,
NULL,
};
static void aNP_set_talk_info(ACTOR* actor) {
@@ -41,7 +41,7 @@ static void aNP_set_talk_info(ACTOR* actor) {
}
static void aNP_actor_move(ACTOR* actor, GAME_PLAY* play) {
PLAYER_ACTOR* player;
PLAYER_ACTOR* player;
s16 player_angle;
int angle;
@@ -58,7 +58,7 @@ static void aNP_actor_move(ACTOR* actor, GAME_PLAY* play) {
}
extern void aNP_actor_init(ACTOR* actor, GAME* game) {
GAME_PLAY* play = (GAME_PLAY*)game;
GAME_PLAY* play = (GAME_PLAY*)game;
mFI_SetFG_common(DUMMY_NAMEPLATE, actor->home.position, 0);
aNP_actor_move(actor, play);
+133
View File
@@ -0,0 +1,133 @@
#include "ac_npc_rtc.h"
#include "m_name_table.h"
#include "m_common_data.h"
#include "m_player_lib.h"
#include "jaudio_NES/staff.h"
#include "m_msg.h"
#include "m_bgm.h"
#include "m_soncho.h"
#include "m_card.h"
extern void aNRTC_actor_ct(ACTOR*, GAME*);
extern void aNRTC_actor_dt(ACTOR*, GAME*);
extern void aNRTC_actor_init(ACTOR*, GAME*);
extern void aNRTC_actor_save(ACTOR*, GAME*);
ACTOR_PROFILE Npc_Rtc_Profile = {
mAc_PROFILE_NPC_RTC,
ACTOR_PART_NPC,
ACTOR_STATE_NONE,
SP_NPC_RTC,
ACTOR_OBJ_BANK_KEEP,
sizeof(NPCRTC_ACTOR),
aNRTC_actor_ct,
aNRTC_actor_dt,
aNRTC_actor_init,
mActor_NONE_PROC1,
aNRTC_actor_save,
};
extern void aNRTC_actor_move(ACTOR*, GAME*);
extern void aNRTC_actor_draw(ACTOR*, GAME*);
extern int aNRTC_talk_init(ACTOR*, GAME*);
extern int aNRTC_talk_end_chk(ACTOR*, GAME*);
extern void aNRTC_schedule_proc(NPC_ACTOR*, GAME_PLAY*, int);
extern void aNRTC_talk_request(ACTOR* actor,GAME*);
extern void aNRTC_change_talk_proc(NPCRTC_ACTOR* rtc, int idx);
u8 aNRTC_sound_mode[] = {0x00,0x01,0x02,0x00};
u8 aNRTC_voice_mode[] = {0x00,0x01,0x02,0x00};
void aNRTC_actor_ct(ACTOR* actor, GAME* game){
static aNPC_ct_data_c ct_data = {
&aNRTC_actor_move,
&aNRTC_actor_draw,
5,
mActor_NONE_PROC1,
&aNRTC_talk_init,
&aNRTC_talk_end_chk,
0
};
NPCRTC_ACTOR* rtc = (NPCRTC_ACTOR*)actor;
GAME_PLAY* play = (GAME_PLAY*)game;
PLAYER_ACTOR* player;
xyz_t center;
xyz_t eye;
if(Common_Get(clip.npc_clip)->birth_check_proc(actor,game) == TRUE){
rtc->npc_class.schedule.schedule_proc = aNRTC_schedule_proc;
Common_Get(clip.npc_clip)->ct_proc(actor,game,&ct_data);
actor->status_data.weight = MASSTYPE_IMMOVABLE;
mPlib_request_main_demo_wait_type1(play,0,NULL);
player = GET_PLAYER_ACTOR(play);
if(player != NULL){
player->actor_class.state_bitfield |= 0x80;
}
center.x = 100.0f;
center.y = 60.0f;
center.z = 60.0f;
eye.x = 100.0f;
eye.y = 130.0f;
eye.z = 210.0f;
Camera2_change_priority(play,0);
Camera2_request_main_lock(play, &center, &eye, 40.0f, 0, 100.0f, 400.0f, 5);
sAdo_SetOutMode(aNRTC_sound_mode[Save_Get(config.sound_mode)]);
sAdo_SetVoiceMode(aNRTC_voice_mode[Save_Get(config.voice_mode)]);
rtc->npc_class.condition_info.hide_request = 0;
rtc->npc_class.talk_info.default_act = 9;
rtc->npc_class.talk_info.melody_inst = 0;
rtc->unk9A0 = 0;
}
}
void aNRTC_actor_save(ACTOR* actor, GAME* game) {
Common_Get(clip.npc_clip)->save_proc(actor,game);
}
void aNRTC_actor_dt(ACTOR* actor, GAME* game) {
Common_Get(clip.npc_clip)->dt_proc(actor,game);
}
void aNRTC_actor_init(ACTOR* actor, GAME* game) {
Common_Get(clip.npc_clip)->init_proc(actor,game);
}
void aNRTC_actor_move(ACTOR* actor, GAME* game){
StaffRoll info;
f32 val = 0.5f;
u8 arm_flag = TRUE;
NPCRTC_ACTOR* rtc = (NPCRTC_ACTOR*)actor;
GAME_PLAY* play = (GAME_PLAY*)game;
if(rtc->npc_class.draw._580 == 0x76){
sAdos_GetStaffRollInfo(&info);
if(info.unk0 != 4){
val = 0.0f;
arm_flag = FALSE;
rtc->npc_class.draw._24 = 1.0f + (64.0f * (f32)info.unk8);
}
}
rtc->npc_class.draw._20 = val;
sAdos_TTKK_ARM(arm_flag);
Common_Get(clip.npc_clip)->move_proc(actor,game);
mSC_change_player_freeze(play);
}
void aNRTC_actor_draw(ACTOR* actor, GAME* game) {
Common_Get(clip.npc_clip)->draw_proc(actor,game);
}
#include "../src/ac_npc_rtc_think.c.inc"
#include "../src/ac_npc_rtc_talk.c.inc"
+340
View File
@@ -0,0 +1,340 @@
void aNRTC_set_slot_name(NPC_ACTOR* actor, int str_no) {
NPCRTC_ACTOR* rtc = (NPCRTC_ACTOR*)actor;
u8 name[16];
mString_Load_StringFromRom(name, sizeof(name), &rtc->npc_class.draw._539);
mMsg_Set_free_str(mMsg_Get_base_window_p(),str_no, name, sizeof(name));
}
void aNRTC_rtc_err(NPCRTC_ACTOR* rtc, GAME_PLAY*) {
int num;
if (mMsg_Check_MainNormalContinue(mMsg_Get_base_window_p()) == 1) {
num = mChoice_Get_ChoseNum(mChoice_Get_base_window_p());
switch (num) {
case 0:
aNRTC_change_talk_proc(rtc, 3);
break;
case 1:
rtc->unk9A8 = 1;
aNRTC_change_talk_proc(rtc, 10);
break;
}
}
}
void aNRTC_timer_open_msg_wait(NPCRTC_ACTOR* rtc, GAME_PLAY*) {
int order = mDemo_Get_OrderValue(4, 9);
if (order == 1) {
if (mMsg_Check_MainNormalContinue(mMsg_Get_base_window_p()) == 1) {
mDemo_Set_OrderValue(4, 9, 0);
aNRTC_change_talk_proc(rtc, 4);
mMsg_request_main_disappear_wait_type1(mMsg_Get_base_window_p());
}
}
}
void aNRTC_timer_open_wait(NPCRTC_ACTOR* rtc, GAME_PLAY* play){
Submenu* submenu = &play->submenu;
if (mMsg_Check_main_wait(mMsg_Get_base_window_p()) == 1) {
aNRTC_change_talk_proc(rtc, 5);
mSM_open_submenu(submenu, 3, 1, 0);
mMsg_request_main_appear_wait_type1(mMsg_Get_base_window_p());
}
}
void aNRTC_timer_close_wait(NPCRTC_ACTOR* rtc, GAME_PLAY* play) {
if (play->submenu.flag == 0) {
if (mMsg_Check_not_series_main_wait(mMsg_Get_base_window_p()) == 1) {
mMsg_Set_ForceNext(mMsg_Get_base_window_p());
rtc->unk9A8 = 2;
aNRTC_change_talk_proc(rtc, 0xA);
}
}
}
void aNRTC_delete_bf(NPCRTC_ACTOR* rtc, GAME_PLAY* play) {
int order = mDemo_Get_OrderValue(4, 9);
if ((mMsg_Check_MainNormalContinue(mMsg_Get_base_window_p()) == 1) && (order != 0)) {
mMsg_Set_LockContinue(mMsg_Get_base_window_p());
aNRTC_change_talk_proc(rtc, 7);
}
}
void aNRTC_delete(NPCRTC_ACTOR* rtc, GAME_PLAY* play){
mMsg_Window_c* window;
int card;
int card_ret;
window = mMsg_Get_base_window_p();
card_ret = mCD_EraseBrokenLand_bg(&card);
switch(card_ret){
case 0:
rtc->unk9A8 = 3;
mMsg_Set_continue_msg_num(window, 0x9DE);
break;
case 22:
case 2:
rtc->unk9A8 = 1;
mMsg_Set_continue_msg_num(window, 0x9DF);
break;
case 25:
return;
case 15:
rtc->unk9A8 = 3;
mMsg_Set_continue_msg_num(window, 0x9E1);
break;
default:
rtc->unk9A8 = 1;
mMsg_Set_continue_msg_num(window, 0x9DF);
break;
}
if(card_ret != 0x19){
mMsg_Unset_LockContinue(window);
aNRTC_change_talk_proc(rtc,10);
}
}
void aNRTC_format_chk(NPCRTC_ACTOR* rtc, GAME_PLAY* play) {
int num;
if (mMsg_Check_MainNormalContinue(mMsg_Get_base_window_p()) == 1) {
aNRTC_change_talk_proc(rtc, 0xA);
num = mChoice_Get_ChoseNum(mChoice_Get_base_window_p());
switch (num) {
case 0:
rtc->unk9A8 = 3;
break;
case 1:
rtc->unk9A8 = 2;
break;
case 2:
rtc->unk9A8 = 1;
break;
case 3:
rtc->unk9A8 = 3;
aNRTC_change_talk_proc(rtc, 9);
break;
}
}
}
void aNRTC_format(NPCRTC_ACTOR* rtc, GAME_PLAY* play) {
int order;
mMsg_Window_c* window;
int card_ret;
window = mMsg_Get_base_window_p();
order = mDemo_Get_OrderValue(4, 9);
switch (order) {
case 1:
mDemo_Set_OrderValue(4, 9, 2);
mMsg_Set_LockContinue(window);
break;
case 2:
card_ret = mCD_card_format_bg(Common_Get(_2DBA8));
switch (card_ret) {
case 1:
mMsg_Set_continue_msg_num(window, 0x9E9);
mMsg_Unset_LockContinue(window);
aNRTC_change_talk_proc(rtc, 0xA);
rtc->unk9A8 = 3;
mDemo_Set_OrderValue(4, 9, 0);
break;
case -1:
mMsg_Unset_LockContinue(window);
aNRTC_change_talk_proc(rtc, 0xA);
rtc->unk9A8 = 1;
mMsg_Set_continue_msg_num(window, 0x9E7);
mDemo_Set_OrderValue(4, 9, 0);
case 0:
break;
}
break;
}
}
void aNRTC_break_data(NPCRTC_ACTOR* rtc, GAME_PLAY* play) {
int num;
if (mMsg_Check_MainNormalContinue(mMsg_Get_base_window_p()) == 1) {
aNRTC_change_talk_proc(rtc, 0xA);
num = mChoice_Get_ChoseNum(mChoice_Get_base_window_p());
switch (num) {
case 0:
rtc->unk9A8 = 3;
break;
case 1:
aNRTC_change_talk_proc(rtc, 6);
break;
}
}
}
void aNRTC_break_data_2(NPCRTC_ACTOR* rtc, GAME_PLAY* play) {
int num;
if (mMsg_Check_MainNormalContinue(mMsg_Get_base_window_p()) == 1) {
aNRTC_change_talk_proc(rtc, 0xA);
num = mChoice_Get_ChoseNum(mChoice_Get_base_window_p());
switch (num) {
case 0:
rtc->unk9A8 = 3;
break;
case 1:
rtc->unk9A8 = 2;
break;
case 2:
rtc->unk9A8 = 1;
break;
case 3:
rtc->unk9A8 = 4;
break;
}
}
}
void aNRTC_change_talk_proc(NPCRTC_ACTOR* rtc, int idx) {
static aNPCRTC_SUB_PROC process[] = {
aNRTC_break_data, aNRTC_break_data_2, aNRTC_rtc_err, aNRTC_timer_open_msg_wait,
aNRTC_timer_open_wait, aNRTC_timer_close_wait, aNRTC_delete_bf, aNRTC_delete,
aNRTC_format_chk, aNRTC_format, (aNPCRTC_SUB_PROC)none_proc1,
};
rtc->unk994 = idx;
rtc->unk99C = process[idx];
}
void aNRTC_set_talk_info_talk_request(){
int msg;
switch(Common_Get(save_error_type)){
case 0:
msg = 0x9CC;
break;
case 2:
msg = 0x9D1;
break;
case 6:
msg = 0x9DA;
break;
case 7:
msg = 0x9D8;
break;
case 9:
msg = 0x9D4;
break;
case 1:
msg = 0x9E2;
break;
case 4:
msg = 0x9E4;
break;
case 3:
msg = 0x9E3;
break;
case 5:
msg = 0x9E5;
break;
case 8:
msg = 0x9E6;
break;
default:
msg = 0x9D4;
break;
}
mDemo_Set_msg_num(msg);
mDemo_Set_camera(1);
}
void aNRTC_talk_request(ACTOR* actor,GAME*) {
mDemo_Request(8, actor, aNRTC_set_talk_info_talk_request);
}
int aNRTC_talk_init(ACTOR* actor, GAME* game) {
NPCRTC_ACTOR* rtc = (NPCRTC_ACTOR*)actor;
mDemo_Set_ListenAble();
aNRTC_set_slot_name((NPC_ACTOR*)Common_Get(_2DBA8), 4);
switch (Common_Get(save_error_type)) {
case 0:
aNRTC_change_talk_proc(rtc, 2);
break;
case 2:
aNRTC_change_talk_proc(rtc, 0);
break;
case 5:
aNRTC_change_talk_proc(rtc, 8);
break;
default:
aNRTC_change_talk_proc(rtc, 1);
break;
}
rtc->npc_class.talk_info.talk_request_proc = mActor_NONE_PROC1;
mMsg_Get_base_window_p();
mMsg_Set_idling_req();
return 1;
}
int aNRTC_talk_end_chk(ACTOR* actor,GAME* game){
NPCRTC_ACTOR* rtc = (NPCRTC_ACTOR*)actor;
GAME_PLAY* play = (GAME_PLAY*)game;
int res = 0;
mMsg_Window_c* window;
window = mMsg_Get_base_window_p();
rtc->unk99C(rtc,play);
if(mMsg_Check_idling_now(window) == 1){
mMsg_request_main_disappear_wait_type1(window);
aNRTC_think_init_proc(&rtc->npc_class,play);
rtc->unk9A0 = 0;
res = 1;
rtc->unk9B4 = 0x32;
rtc->unk9B0 = 0x4B;
bzero(&play->fade_color_value, sizeof(rgba8888_t));
}
else{
int unk9AC;
unk9AC = rtc->unk9AC;
if ((mMsg_Check_MainNormal(mMsg_Get_base_window_p()) == 1) || (((mChoice_check_main_normal(mChoice_Get_base_window_p()) == 1) != 0))) {
unk9AC++;
if (unk9AC > 0x258) {
unk9AC = 0x258;
}
} else {
unk9AC = 0;
}
if (mDemo_Get_OrderValue(4, 0) == 0) {
if (unk9AC >= 0x258) {
if ( rtc->npc_class.draw._580 != 0x76) {
mDemo_Set_OrderValue(4, 0, 0xFF);
}
} else if (rtc->npc_class.draw._580 == 0x76) {
mDemo_Set_OrderValue(4, 0, 0xFD);
}
}
rtc->unk9AC = unk9AC;
}
return res;
}
+137
View File
@@ -0,0 +1,137 @@
void aNRTC_talk_request(ACTOR* actor,GAME*);
void aNRTC_think_start(NPC_ACTOR* actor, GAME_PLAY* play){
NPCRTC_ACTOR* rtc = (NPCRTC_ACTOR*)actor;
if(rtc->unk9B8 > 0){
rtc->unk9B8--;
}
else{
rtc->unk9A0 = 1;
rtc->npc_class.talk_info.talk_request_proc = aNRTC_talk_request;
rtc->npc_class.condition_info.demo_flg = 0x100;
}
}
void aNRTC_think_title(NPC_ACTOR* actor, GAME_PLAY* play){
NPCRTC_ACTOR* rtc = (NPCRTC_ACTOR*)actor;
play->fb_wipe_type = 3;
play->fb_fade_type = 4;
mPlib_request_main_invade_type1(play);
Actor_info_save_actor(play);
rtc->unk9A8 = 5;
}
Door_data_c door_data = {
SCENE_PLAYERSELECT,
4,
FALSE,
0,
{100,0,120},
EMPTY_NO,
3,
{0,0,0}
};
void aNRTC_think_door(NPC_ACTOR* actor, GAME_PLAY* play) {
if (sAdo_BgmFadeoutCheck() != 0) {
goto_other_scene(play, &door_data, 1);
Common_Set(transition.wipe_type,3);
}
}
void aNRTC_think_check(NPC_ACTOR* actor, GAME_PLAY* play){
NPCRTC_ACTOR* rtc = (NPCRTC_ACTOR*)actor;
if (sAdo_BgmFadeoutCheck() != 0) {
goto_other_scene(play, &door_data, 1);
mCD_ReCheckLoadLand(play);
Common_Set(transition.wipe_type,3);
rtc->unk9A8 = 5;
}
}
void aNRTC_think_ipmenu(NPC_ACTOR* actor, GAME_PLAY* play) {
NPCRTC_ACTOR* rtc = (NPCRTC_ACTOR*)actor;
if (sAdo_BgmFadeoutCheck() != 0) {
HotResetIplMenu();
rtc->unk9A8 = 5;
}
}
aNPC_SUB_PROC aNRTC_proc_table[] = {
aNRTC_think_start,
aNRTC_think_title,
aNRTC_think_door,
aNRTC_think_check,
aNRTC_think_ipmenu,
(aNPC_SUB_PROC)mActor_NONE_PROC1,
};
void aNRTC_think_main_proc(NPC_ACTOR* actor, GAME_PLAY* play){
NPCRTC_ACTOR* rtc = (NPCRTC_ACTOR*)actor;
if(rtc->unk9B0 > 0){
rtc->unk9B0--;
if(rtc->unk9B0 == 0){
play->fade_color_value.c.a = -1;
}
else if(rtc->unk9B0 < 25){
play->fade_color_value.c.a = 255.0f * (1.0f - (0.04f * rtc->unk9B0));
}
}
else if(rtc->unk9A0 == 0){
aNRTC_proc_table[rtc->unk9A8](actor,play);
}
if(rtc->unk9B4 == 0){
if(rtc->unk9A8 == 1){
mBGMPsComp_make_ps_wipe(0x21C2);
} else {
mBGMPsComp_make_ps_wipe(0x621C);
}
rtc->unk9B4 = -2;
}
else if(rtc->unk9B4 > 0){
rtc->unk9B4--;
}
}
void aNRTC_think_init_proc(NPC_ACTOR* actor, GAME_PLAY* play){
NPCRTC_ACTOR* rtc = (NPCRTC_ACTOR*)actor;
rtc->npc_class.request.act_priority = 4;
rtc->npc_class.request.act_idx = 8;
rtc->npc_class.request.act_type = 0;
}
void aNRTC_think_proc(NPC_ACTOR* actor, GAME_PLAY* play,int idx){
static aNPC_SUB_PROC think_proc[] = { aNRTC_think_init_proc, aNRTC_think_main_proc,};
think_proc[idx](actor,play);
}
void aNRTC_schedule_init_proc(NPC_ACTOR* actor, GAME_PLAY* play){
NPCRTC_ACTOR* rtc = (NPCRTC_ACTOR*)actor;
rtc->npc_class.draw._5BE = 1;
rtc->npc_class.talk_info.default_animation = 0x76;
rtc->unk9B4 = -1;
rtc->unk9B0 = 0;
rtc->unk9B8 = 0x5A;
rtc->npc_class.think.think_proc = aNRTC_think_proc;
rtc->unk9A8 = 0;
Common_Get(clip.npc_clip)->think_proc(actor,play,6,0);
}
void aNRTC_schedule_main_proc(NPC_ACTOR* actor, GAME_PLAY* play){
NPCRTC_ACTOR* rtc = (NPCRTC_ACTOR*)actor;
if(Common_Get(clip.npc_clip)->think_proc(actor,play,-1,1) == 0){
Common_Get(clip.npc_clip)->think_proc(actor,play,-1,2);
}
}
void aNRTC_schedule_proc(NPC_ACTOR* actor, GAME_PLAY* play, int idx){
static aNPC_SUB_PROC sche_proc[] = {aNRTC_schedule_init_proc,aNRTC_schedule_main_proc};
sche_proc[idx](actor,play);
}
+2 -2
View File
@@ -497,7 +497,7 @@ void play_init(GAME* game){
fbdemo_fade_setcolor_rgba8888(fade, 0xA0A0A0FF);
fbdemo_fade_startup(fade);
play->fade_color_value = 0;
play->fade_color_value.rgba8888 = 0;
freebytes = game_getFreeBytes(&play->game);
alloc = (u32)THA_alloc16(&play->game.tha, freebytes);
@@ -731,7 +731,7 @@ int makeBumpTexture(GAME_PLAY* play, GRAPH* graph1, GRAPH* graph2){
}
fbdemo_fade_draw(&play->color_fade, &polydisp);
fade_rgba8888_draw(&polydisp, play->fade_color_value);
fade_rgba8888_draw(&polydisp, play->fade_color_value.rgba8888);
gSPEndDisplayList(polydisp++);
+1
View File
@@ -1,6 +1,7 @@
#include "m_rcp.h"
#include "gfxalloc.h"
#include "libu64/u64types.h"
#define G_CC_POLY_Z_LIGHT_PRIM PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE
#define G_CC_MODULATEIDECALA_PRIM2 PRIMITIVE, 0, COMBINED, 0, 0, 0, 0, COMBINED