diff --git a/config/GZ2E01/rels/d_a_e_rd/symbols.txt b/config/GZ2E01/rels/d_a_e_rd/symbols.txt index 8b250dd142..8bb317bb58 100644 --- a/config/GZ2E01/rels/d_a_e_rd/symbols.txt +++ b/config/GZ2E01/rels/d_a_e_rd/symbols.txt @@ -446,7 +446,7 @@ S_find = .bss:0x000000AC; // type:object size:0x2 scope:global data:2byte lbl_70_bss_AE = .bss:0x000000AE; // type:object size:0x1 scope:local align:1 data:byte @4242 = .bss:0x000000B0; // type:object size:0xC scope:local S_find_pos = .bss:0x000000BC; // type:object size:0xC scope:global align:4 data:float -data_80519200 = .bss:0x000000C8; // type:object size:0x1 data:byte +desert_substage = .bss:0x000000C8; // type:object size:0x1 data:byte data_80519201 = .bss:0x000000C9; // type:object size:0x1 data:byte target_info = .bss:0x000000CC; // type:object size:0x28 scope:global data:4byte target_info_count = .bss:0x000000F4; // type:object size:0x4 scope:global data:4byte diff --git a/config/GZ2E01/symbols.txt b/config/GZ2E01/symbols.txt index 509c9baf23..a479620f5e 100644 --- a/config/GZ2E01/symbols.txt +++ b/config/GZ2E01/symbols.txt @@ -14118,8 +14118,8 @@ getVisibility__20J2DAnmVisibilityFullCFUsPUc = .text:0x8030C048; // type:functio getTevColorReg__15J2DAnmTevRegKeyCFUsP11_GXColorS10 = .text:0x8030C0F0; // type:function size:0x2C4 scope:global align:4 getTevKonstReg__15J2DAnmTevRegKeyCFUsP8_GXColor = .text:0x8030C3B4; // type:function size:0x2C4 scope:global align:4 searchUpdateMaterialID__15J2DAnmTevRegKeyFP9J2DScreen = .text:0x8030C678; // type:function size:0x104 scope:global align:4 -J2DGetKeyFrameInterpolations__FfP18J3DAnmKeyTableBasePs = .text:0x8030C77C; // type:function size:0x234 scope:global align:4 -J2DGetKeyFrameInterpolationf__FfP18J3DAnmKeyTableBasePf = .text:0x8030C9B0; // type:function size:0x17C scope:global align:4 +J2DGetKeyFrameInterpolation__FfP18J3DAnmKeyTableBasePs = .text:0x8030C77C; // type:function size:0x234 scope:global align:4 +J2DGetKeyFrameInterpolation__FfP18J3DAnmKeyTableBasePf = .text:0x8030C9B0; // type:function size:0x17C scope:global align:4 __ct__Q216J2DAnmTexPattern27J2DAnmTexPatternTIMGPointerFv = .text:0x8030CB2C; // type:function size:0x10 scope:global align:4 __dt__Q216J2DAnmTexPattern27J2DAnmTexPatternTIMGPointerFv = .text:0x8030CB3C; // type:function size:0x54 scope:global align:4 __dt__16J2DAnmTexPatternFv = .text:0x8030CB90; // type:function size:0x90 scope:weak align:4 diff --git a/config/GZ2J01/rels/d_a_e_rd/symbols.txt b/config/GZ2J01/rels/d_a_e_rd/symbols.txt index 3c83698aaa..fbcf2cf96e 100644 --- a/config/GZ2J01/rels/d_a_e_rd/symbols.txt +++ b/config/GZ2J01/rels/d_a_e_rd/symbols.txt @@ -445,7 +445,7 @@ S_find = .bss:0x000000AC; // type:object size:0x2 scope:global data:2byte lbl_70_bss_AE = .bss:0x000000AE; // type:object size:0x1 data:byte @4242 = .bss:0x000000B0; // type:object size:0xC scope:local S_find_pos = .bss:0x000000BC; // type:object size:0xC scope:global align:4 data:float -data_80519200 = .bss:0x000000C8; // type:object size:0x1 data:byte +desert_substage = .bss:0x000000C8; // type:object size:0x1 data:byte data_80519201 = .bss:0x000000C9; // type:object size:0x1 data:byte target_info = .bss:0x000000CC; // type:object size:0x28 scope:global data:4byte target_info_count = .bss:0x000000F4; // type:object size:0x4 scope:global data:4byte diff --git a/config/GZ2J01/symbols.txt b/config/GZ2J01/symbols.txt index ed67ba16d9..215c86e5f1 100644 --- a/config/GZ2J01/symbols.txt +++ b/config/GZ2J01/symbols.txt @@ -14124,8 +14124,8 @@ getVisibility__20J2DAnmVisibilityFullCFUsPUc = .text:0x8030E4E4; // type:functio getTevColorReg__15J2DAnmTevRegKeyCFUsP11_GXColorS10 = .text:0x8030E58C; // type:function size:0x2C4 scope:global align:4 getTevKonstReg__15J2DAnmTevRegKeyCFUsP8_GXColor = .text:0x8030E850; // type:function size:0x2C4 scope:global align:4 searchUpdateMaterialID__15J2DAnmTevRegKeyFP9J2DScreen = .text:0x8030EB14; // type:function size:0x104 scope:global align:4 -J2DGetKeyFrameInterpolations__FfP18J3DAnmKeyTableBasePs = .text:0x8030EC18; // type:function size:0x234 scope:global align:4 -J2DGetKeyFrameInterpolationf__FfP18J3DAnmKeyTableBasePf = .text:0x8030EE4C; // type:function size:0x17C scope:global align:4 +J2DGetKeyFrameInterpolation__FfP18J3DAnmKeyTableBasePs = .text:0x8030EC18; // type:function size:0x234 scope:global align:4 +J2DGetKeyFrameInterpolation__FfP18J3DAnmKeyTableBasePf = .text:0x8030EE4C; // type:function size:0x17C scope:global align:4 __ct__Q216J2DAnmTexPattern27J2DAnmTexPatternTIMGPointerFv = .text:0x8030EFC8; // type:function size:0x10 scope:global align:4 __dt__Q216J2DAnmTexPattern27J2DAnmTexPatternTIMGPointerFv = .text:0x8030EFD8; // type:function size:0x54 scope:global align:4 __dt__16J2DAnmTexPatternFv = .text:0x8030F02C; // type:function size:0x90 scope:weak align:4 diff --git a/config/GZ2P01/rels/d_a_e_rd/symbols.txt b/config/GZ2P01/rels/d_a_e_rd/symbols.txt index 2a2f2830e9..d37f816021 100644 --- a/config/GZ2P01/rels/d_a_e_rd/symbols.txt +++ b/config/GZ2P01/rels/d_a_e_rd/symbols.txt @@ -445,7 +445,7 @@ S_find = .bss:0x000000AC; // type:object size:0x2 scope:global data:2byte lbl_70_bss_AE = .bss:0x000000AE; // type:object size:0x1 data:byte @4242 = .bss:0x000000B0; // type:object size:0xC scope:local S_find_pos = .bss:0x000000BC; // type:object size:0xC scope:global align:4 data:float -data_80519200 = .bss:0x000000C8; // type:object size:0x1 data:byte +desert_substage = .bss:0x000000C8; // type:object size:0x1 data:byte data_80519201 = .bss:0x000000C9; // type:object size:0x1 data:byte target_info = .bss:0x000000CC; // type:object size:0x28 scope:global data:4byte target_info_count = .bss:0x000000F4; // type:object size:0x4 scope:global data:4byte diff --git a/config/GZ2P01/symbols.txt b/config/GZ2P01/symbols.txt index c84900b3fd..871d3e3aa7 100644 --- a/config/GZ2P01/symbols.txt +++ b/config/GZ2P01/symbols.txt @@ -14123,8 +14123,8 @@ getVisibility__20J2DAnmVisibilityFullCFUsPUc = .text:0x8030CE48; // type:functio getTevColorReg__15J2DAnmTevRegKeyCFUsP11_GXColorS10 = .text:0x8030CEF0; // type:function size:0x2C4 scope:global align:4 getTevKonstReg__15J2DAnmTevRegKeyCFUsP8_GXColor = .text:0x8030D1B4; // type:function size:0x2C4 scope:global align:4 searchUpdateMaterialID__15J2DAnmTevRegKeyFP9J2DScreen = .text:0x8030D478; // type:function size:0x104 scope:global align:4 -J2DGetKeyFrameInterpolations__FfP18J3DAnmKeyTableBasePs = .text:0x8030D57C; // type:function size:0x234 scope:global align:4 -J2DGetKeyFrameInterpolationf__FfP18J3DAnmKeyTableBasePf = .text:0x8030D7B0; // type:function size:0x17C scope:global align:4 +J2DGetKeyFrameInterpolation__FfP18J3DAnmKeyTableBasePs = .text:0x8030D57C; // type:function size:0x234 scope:global align:4 +J2DGetKeyFrameInterpolation__FfP18J3DAnmKeyTableBasePf = .text:0x8030D7B0; // type:function size:0x17C scope:global align:4 __ct__Q216J2DAnmTexPattern27J2DAnmTexPatternTIMGPointerFv = .text:0x8030D92C; // type:function size:0x10 scope:global align:4 __dt__Q216J2DAnmTexPattern27J2DAnmTexPatternTIMGPointerFv = .text:0x8030D93C; // type:function size:0x54 scope:global align:4 __dt__16J2DAnmTexPatternFv = .text:0x8030D990; // type:function size:0x90 scope:weak align:4 diff --git a/config/RZDE01_00/splits.txt b/config/RZDE01_00/splits.txt index 08be85c1e4..aab000dae6 100644 --- a/config/RZDE01_00/splits.txt +++ b/config/RZDE01_00/splits.txt @@ -298,7 +298,7 @@ f_pc/f_pc_layer.cpp: f_pc/f_pc_leaf.cpp: .text start:0x80026A40 end:0x80026B64 .data start:0x803FA470 end:0x803FA488 - .sbss start:0x8053A960 end:0x8053A970 + .sbss start:0x8053A960 end:0x8053A968 f_pc/f_pc_layer_iter.cpp: .text start:0x80026B64 end:0x80026CB8 @@ -318,6 +318,7 @@ f_pc/f_pc_load.cpp: f_pc/f_pc_manager.cpp: .text start:0x80027044 end:0x800272FC .bss start:0x80481338 end:0x804813E0 + .sbss start:0x8053A968 end:0x8053A970 f_pc/f_pc_method.cpp: .text start:0x800272FC end:0x8002733C @@ -341,7 +342,7 @@ f_pc/f_pc_priority.cpp: f_pc/f_pc_profile.cpp: .text start:0x80028140 end:0x80028150 - .sbss start:0x8053A980 end:0x8053A990 + .sbss start:0x8053A980 end:0x8053A988 f_pc/f_pc_searcher.cpp: .text start:0x80028150 end:0x80028180 @@ -378,7 +379,7 @@ d/d_stage.cpp: .data start:0x803FA5A8 end:0x803FDE58 .bss start:0x80481400 end:0x804928C8 .sdata start:0x80537908 end:0x8053793C - .sbss start:0x8053A990 end:0x8053A9B0 + .sbss start:0x8053A988 end:0x8053A9B0 .sdata2 start:0x8053BD28 end:0x8053BD38 d/d_map.cpp: diff --git a/config/RZDE01_00/symbols.txt b/config/RZDE01_00/symbols.txt index 7c16a90383..5306defd1c 100644 --- a/config/RZDE01_00/symbols.txt +++ b/config/RZDE01_00/symbols.txt @@ -10518,8 +10518,8 @@ Cos__7cSAngleCFv = .text:0x80259FFC; // type:function size:0x4C scope:global ali __mi__7cSAngleCFv = .text:0x8025A048; // type:function size:0x10 scope:global align:4 __pl__7cSAngleCFRC7cSAngle = .text:0x8025A058; // type:function size:0x14 scope:global align:4 __mi__7cSAngleCFRC7cSAngle = .text:0x8025A06C; // type:function size:0x14 scope:global align:4 -__apl__7cSAngleFR7cSAngle = .text:0x8025A080; // type:function size:0x14 scope:global align:4 -__ami__7cSAngleFR7cSAngle = .text:0x8025A094; // type:function size:0x14 scope:global align:4 +__apl__7cSAngleFRC7cSAngle = .text:0x8025A080; // type:function size:0x14 scope:global align:4 +__ami__7cSAngleFRC7cSAngle = .text:0x8025A094; // type:function size:0x14 scope:global align:4 __pl__7cSAngleCFs = .text:0x8025A0A8; // type:function size:0x10 scope:global align:4 __mi__7cSAngleCFs = .text:0x8025A0B8; // type:function size:0x10 scope:global align:4 __apl__7cSAngleFs = .text:0x8025A0C8; // type:function size:0x10 scope:global align:4 @@ -28137,9 +28137,9 @@ data_80450C9C = .sbss:0x8053A8EC; // type:object size:0x1 data_80450C9D = .sbss:0x8053A8ED; // type:object size:0x1 data_80450C9E = .sbss:0x8053A8EE; // type:object size:0x1 cDmr_FishingWether = .sbss:0x8053A8EF; // type:object size:0x1 -data_80450CA0 = .sbss:0x8053A8F0; // type:object size:0x4 +data_80450CA0 = .sbss:0x8053A8F0; // type:object size:0x1 scope:global align:1 data:byte JPTracePCB4 = .sbss:0x8053A8F4; // type:object size:0x4 scope:global align:4 -lbl_8053A8F8 = .sbss:0x8053A8F8; // type:object size:0x1 data:byte +DMC_initialized = .sbss:0x8053A8F8; // type:object size:0x1 data:byte cDyl_Initialized = .sbss:0x8053A8FC; // type:object size:0x4 scope:global align:4 data:4byte cDyl_DVD = .sbss:0x8053A900; // type:object size:0x4 scope:global align:4 data:4byte g_fopAc_type = .sbss:0x8053A908; // type:object size:0x4 scope:global align:4 data:4byte @@ -28161,11 +28161,11 @@ g_fpcBs_type = .sbss:0x8053A950; // type:object size:0x4 scope:global align:4 l_fpcLy_CurrLayer_p = .sbss:0x8053A958; // type:object size:0x4 scope:global align:4 data:4byte layer_id$46579 = .sbss:0x8053A95C; // type:object size:0x4 scope:local align:4 data:4byte g_fpcLf_type = .sbss:0x8053A960; // type:object size:0x4 scope:global align:4 data:4byte -lbl_8053A968 = .sbss:0x8053A968; // type:object size:0x1 data:byte +l_dvdError$0 = .sbss:0x8053A968; // type:object size:0x1 data:byte g_fpcNd_type = .sbss:0x8053A970; // type:object size:0x4 scope:global align:4 data:4byte request_id$46742 = .sbss:0x8053A978; // type:object size:0x4 scope:local align:4 data:4byte g_fpcPf_ProfileList_p = .sbss:0x8053A980; // type:object size:0x4 scope:global align:4 data:4byte -lbl_8053A988 = .sbss:0x8053A988; // type:object size:0x8 +tmp_name$50691 = .sbss:0x8053A988; // type:object size:0x8 scope:local align:1 data:byte mProcID__20dStage_roomControl_c = .sbss:0x8053A990; // type:object size:0x4 scope:global align:4 data:4byte mStayNo__20dStage_roomControl_c = .sbss:0x8053A994; // type:object size:0x1 data:byte lbl_8053A995 = .sbss:0x8053A995; // type:object size:0x1 data:byte @@ -28259,13 +28259,13 @@ m_b_Light8EcallBack__13dPa_control_c = .sbss:0x8053AAEC; // type:object size:0x4 m_b_Light8PcallBack__13dPa_control_c = .sbss:0x8053AAF0; // type:object size:0x4 scope:global align:4 m_d_Light8EcallBack__13dPa_control_c = .sbss:0x8053AAF4; // type:object size:0x4 scope:global align:4 data:4byte m_d_Light8PcallBack__13dPa_control_c = .sbss:0x8053AAF8; // type:object size:0x4 scope:global align:4 -lbl_8053AAFC = .sbss:0x8053AAFC; // type:object size:0x1 data:byte +mStatus__13dPa_control_c = .sbss:0x8053AAFC; // type:object size:0x1 data:byte mParticleTracePCB__13dPa_control_c = .sbss:0x8053AB00; // type:object size:0x4 scope:global align:4 -lbl_8053AB08 = .sbss:0x8053AB08; // type:object size:0x1 data:byte +mWipe__12dDlst_list_c = .sbss:0x8053AB08; // type:object size:0x1 data:byte mWipeRate__12dDlst_list_c = .sbss:0x8053AB0C; // type:object size:0x4 scope:global align:4 data:float mWipeSpeed__12dDlst_list_c = .sbss:0x8053AB10; // type:object size:0x4 scope:global align:4 data:float lbl_8053AB14 = .sbss:0x8053AB14; // type:object size:0x4 -lbl_8053AB18 = .sbss:0x8053AB18; // type:object size:0x1 data:byte +init$0000 = .sbss:0x8053AB18; // type:object size:0x1 scope:local data:byte S_parcent_bak$99593 = .sbss:0x8053AB20; // type:object size:0x4 scope:local align:4 data:float S_rot_work1$100790 = .sbss:0x8053AB24; // type:object size:0x2 scope:local align:2 data:2byte S_rot_work2$100791 = .sbss:0x8053AB26; // type:object size:0x2 scope:local align:2 data:2byte diff --git a/config/RZDE01_02/rels/d_a_boomerang/symbols.txt b/config/RZDE01_02/rels/d_a_boomerang/symbols.txt index e44e9308b4..13ab7ecc51 100644 --- a/config/RZDE01_02/rels/d_a_boomerang/symbols.txt +++ b/config/RZDE01_02/rels/d_a_boomerang/symbols.txt @@ -134,7 +134,11 @@ lbl_47_data_4EC = .data:0x000004EC; // type:object size:0x34 lbl_47_data_534 = .data:0x00000534; // type:object size:0x2C lbl_47_data_560 = .data:0x00000560; // type:object size:0xA0 ...bss.0 = .bss:0x00000000; // type:label scope:local align:4 -effDirection$108188 = .bss:0x00000004; // type:object size:0xC scope:global align:4 -effScale0$108191 = .bss:0x00000014; // type:object size:0xC scope:global align:4 -effScaleSand$108194 = .bss:0x00000024; // type:object size:0xC scope:global align:4 -effScaleGrass$108197 = .bss:0x00000034; // type:object size:0xC scope:global align:4 +@GUARD@effDirection$49876 = .bss:0x00000000; // type:object size:0x1 scope:local align:4 +effDirection$108188 = .bss:0x00000004; // type:object size:0xC scope:local align:4 +@GUARD@effScale0$49879 = .bss:0x00000010; // type:object size:0x1 scope:local align:4 +effScale0$108191 = .bss:0x00000014; // type:object size:0xC scope:local align:4 +@GUARD@effScaleSand$49882 = .bss:0x00000020; // type:object size:0x1 scope:local align:4 +effScaleSand$108194 = .bss:0x00000024; // type:object size:0xC scope:local align:4 +@GUARD@effScaleGrass$49885 = .bss:0x00000030; // type:object size:0x1 scope:local align:4 +effScaleGrass$108197 = .bss:0x00000034; // type:object size:0xC scope:local align:4 diff --git a/config/RZDE01_02/splits.txt b/config/RZDE01_02/splits.txt index 32899e9801..b21e4f3b18 100644 --- a/config/RZDE01_02/splits.txt +++ b/config/RZDE01_02/splits.txt @@ -298,7 +298,7 @@ f_pc/f_pc_layer.cpp: f_pc/f_pc_leaf.cpp: .text start:0x80026B38 end:0x80026C5C .data start:0x803E5710 end:0x803E5728 - .sbss start:0x80520968 end:0x80520978 + .sbss start:0x80520968 end:0x80520970 f_pc/f_pc_layer_iter.cpp: .text start:0x80026C5C end:0x80026DB0 @@ -318,6 +318,7 @@ f_pc/f_pc_load.cpp: f_pc/f_pc_manager.cpp: .text start:0x8002713C end:0x8002740C .bss start:0x80468940 end:0x804689E8 + .sbss start:0x80520970 end:0x80520978 f_pc/f_pc_method.cpp: .text start:0x8002740C end:0x8002744C @@ -341,7 +342,7 @@ f_pc/f_pc_priority.cpp: f_pc/f_pc_profile.cpp: .text start:0x80028250 end:0x80028260 - .sbss start:0x80520988 end:0x80520998 + .sbss start:0x80520988 end:0x80520990 f_pc/f_pc_searcher.cpp: .text start:0x80028260 end:0x80028290 @@ -378,7 +379,7 @@ d/d_stage.cpp: .data start:0x803E5848 end:0x803E90F8 .bss start:0x80468A08 end:0x80479ED0 .sdata start:0x8051D9A8 end:0x8051D9DC - .sbss start:0x80520998 end:0x805209B8 + .sbss start:0x80520990 end:0x805209B8 .sdata2 start:0x80521D28 end:0x80521D38 d/d_map.cpp: diff --git a/config/RZDE01_02/symbols.txt b/config/RZDE01_02/symbols.txt index 1ccb0c7749..52d2eff088 100644 --- a/config/RZDE01_02/symbols.txt +++ b/config/RZDE01_02/symbols.txt @@ -27687,9 +27687,9 @@ data_80450C9C = .sbss:0x805208F4; // type:object size:0x1 data_80450C9D = .sbss:0x805208F5; // type:object size:0x1 data_80450C9E = .sbss:0x805208F6; // type:object size:0x1 cDmr_FishingWether = .sbss:0x805208F7; // type:object size:0x1 -data_80450CA0 = .sbss:0x805208F8; // type:object size:0x4 +data_80450CA0 = .sbss:0x805208F8; // type:object size:0x1 scope:global align:1 data:byte JPTracePCB4 = .sbss:0x805208FC; // type:object size:0x4 scope:global align:4 -lbl_80520900 = .sbss:0x80520900; // type:object size:0x1 data:byte +DMC_initialized = .sbss:0x80520900; // type:object size:0x1 data:byte cDyl_Initialized = .sbss:0x80520904; // type:object size:0x4 scope:global align:4 data:4byte cDyl_DVD = .sbss:0x80520908; // type:object size:0x4 scope:global align:4 data:4byte g_fopAc_type = .sbss:0x80520910; // type:object size:0x4 scope:global align:4 data:4byte @@ -27711,11 +27711,11 @@ g_fpcBs_type = .sbss:0x80520958; // type:object size:0x4 scope:global align:4 l_fpcLy_CurrLayer_p = .sbss:0x80520960; // type:object size:0x4 scope:global align:4 data:4byte layer_id$46579 = .sbss:0x80520964; // type:object size:0x4 scope:global align:4 data:4byte g_fpcLf_type = .sbss:0x80520968; // type:object size:0x4 scope:global align:4 data:4byte -lbl_80520970 = .sbss:0x80520970; // type:object size:0x1 data:byte +l_dvdError$0 = .sbss:0x80520970; // type:object size:0x1 data:byte g_fpcNd_type = .sbss:0x80520978; // type:object size:0x4 scope:global align:4 data:4byte request_id$46742 = .sbss:0x80520980; // type:object size:0x4 scope:global align:4 data:4byte g_fpcPf_ProfileList_p = .sbss:0x80520988; // type:object size:0x4 scope:global align:4 data:4byte -lbl_80520990 = .sbss:0x80520990; // type:object size:0x8 +tmp_name$50691 = .sbss:0x80520990; // type:object size:0x8 scope:local align:1 data:byte mProcID__20dStage_roomControl_c = .sbss:0x80520998; // type:object size:0x4 scope:global align:4 data:4byte mStayNo__20dStage_roomControl_c = .sbss:0x8052099C; // type:object size:0x1 data:byte mOldStayNo__20dStage_roomControl_c = .sbss:0x8052099D; // type:object size:0x1 data:byte @@ -27809,13 +27809,13 @@ m_b_Light8EcallBack__13dPa_control_c = .sbss:0x80520AF4; // type:object size:0x4 m_b_Light8PcallBack__13dPa_control_c = .sbss:0x80520AF8; // type:object size:0x4 scope:global align:4 m_d_Light8EcallBack__13dPa_control_c = .sbss:0x80520AFC; // type:object size:0x4 scope:global align:4 data:4byte m_d_Light8PcallBack__13dPa_control_c = .sbss:0x80520B00; // type:object size:0x4 scope:global align:4 -lbl_80520B04 = .sbss:0x80520B04; // type:object size:0x1 data:byte +mStatus__13dPa_control_c = .sbss:0x80520B04; // type:object size:0x1 data:byte mParticleTracePCB__13dPa_control_c = .sbss:0x80520B08; // type:object size:0x4 scope:global align:4 -lbl_80520B10 = .sbss:0x80520B10; // type:object size:0x1 data:byte +mWipe__12dDlst_list_c = .sbss:0x80520B10; // type:object size:0x1 data:byte mWipeRate__12dDlst_list_c = .sbss:0x80520B14; // type:object size:0x4 scope:global align:4 data:float mWipeSpeed__12dDlst_list_c = .sbss:0x80520B18; // type:object size:0x4 scope:global align:4 data:float lbl_80520B1C = .sbss:0x80520B1C; // type:object size:0x4 -lbl_80520B20 = .sbss:0x80520B20; // type:object size:0x1 data:byte +init$0000 = .sbss:0x80520B20; // type:object size:0x1 scope:local data:byte S_parcent_bak$99593 = .sbss:0x80520B28; // type:object size:0x4 scope:global align:4 data:float S_rot_work1$100794 = .sbss:0x80520B2C; // type:object size:0x2 scope:global align:4 data:2byte S_rot_work2$100795 = .sbss:0x80520B2E; // type:object size:0x2 scope:global align:2 data:2byte diff --git a/config/RZDJ01/rels/d_a_boomerang/symbols.txt b/config/RZDJ01/rels/d_a_boomerang/symbols.txt index c6f609e2a0..4e172943ac 100644 --- a/config/RZDJ01/rels/d_a_boomerang/symbols.txt +++ b/config/RZDJ01/rels/d_a_boomerang/symbols.txt @@ -132,7 +132,11 @@ lbl_47_data_4EC = .data:0x000004EC; // type:object size:0x34 @108962 = .data:0x00000520; // type:object size:0x14 scope:local align:4 lbl_47_data_534 = .data:0x00000534; // type:object size:0xCC ...bss.0 = .bss:0x00000000; // type:label scope:local align:4 +@GUARD@effDirection$49876 = .bss:0x00000000; // type:object size:0x1 scope:local align:4 effDirection$108188 = .bss:0x00000004; // type:object size:0xC scope:local align:4 +@GUARD@effScale0$49879 = .bss:0x00000010; // type:object size:0x1 scope:local align:4 effScale0$108191 = .bss:0x00000014; // type:object size:0xC scope:local align:4 +@GUARD@effScaleSand$49882 = .bss:0x00000020; // type:object size:0x1 scope:local align:4 effScaleSand$108194 = .bss:0x00000024; // type:object size:0xC scope:local align:4 +@GUARD@effScaleGrass$49885 = .bss:0x00000030; // type:object size:0x1 scope:local align:4 effScaleGrass$108197 = .bss:0x00000034; // type:object size:0xC scope:local align:4 diff --git a/config/RZDJ01/splits.txt b/config/RZDJ01/splits.txt index 05732471f7..369d7443b3 100644 --- a/config/RZDJ01/splits.txt +++ b/config/RZDJ01/splits.txt @@ -298,7 +298,7 @@ f_pc/f_pc_layer.cpp: f_pc/f_pc_leaf.cpp: .text start:0x80026B48 end:0x80026C6C .data start:0x803E3698 end:0x803E36B0 - .sbss start:0x8051E7E8 end:0x8051E7F8 + .sbss start:0x8051E7E8 end:0x8051E7F0 f_pc/f_pc_layer_iter.cpp: .text start:0x80026C6C end:0x80026DC0 @@ -318,6 +318,7 @@ f_pc/f_pc_load.cpp: f_pc/f_pc_manager.cpp: .text start:0x8002714C end:0x8002741C .bss start:0x804667C0 end:0x80466868 + .sbss start:0x8051E7F0 end:0x8051E7F8 f_pc/f_pc_method.cpp: .text start:0x8002741C end:0x8002745C @@ -341,7 +342,7 @@ f_pc/f_pc_priority.cpp: f_pc/f_pc_profile.cpp: .text start:0x80028260 end:0x80028270 - .sbss start:0x8051E808 end:0x8051E818 + .sbss start:0x8051E808 end:0x8051E810 f_pc/f_pc_searcher.cpp: .text start:0x80028270 end:0x800282A0 @@ -378,7 +379,7 @@ d/d_stage.cpp: .data start:0x803E37D0 end:0x803E7080 .bss start:0x80466888 end:0x80477D50 .sdata start:0x8051B820 end:0x8051B854 - .sbss start:0x8051E818 end:0x8051E838 + .sbss start:0x8051E810 end:0x8051E838 .sdata2 start:0x8051FBA8 end:0x8051FBB8 d/d_map.cpp: diff --git a/config/RZDJ01/symbols.txt b/config/RZDJ01/symbols.txt index 1190a34e82..10abb5cd2f 100644 --- a/config/RZDJ01/symbols.txt +++ b/config/RZDJ01/symbols.txt @@ -27695,7 +27695,7 @@ lbl_8051E776 = .sbss:0x8051E776; // type:object size:0x1 lbl_8051E777 = .sbss:0x8051E777; // type:object size:0x1 lbl_8051E778 = .sbss:0x8051E778; // type:object size:0x4 JPTracePCB4 = .sbss:0x8051E77C; // type:object size:0x4 scope:global align:4 -lbl_8051E780 = .sbss:0x8051E780; // type:object size:0x1 data:byte +DMC_initialized = .sbss:0x8051E780; // type:object size:0x1 data:byte cDyl_Initialized = .sbss:0x8051E784; // type:object size:0x4 scope:global align:4 data:4byte cDyl_DVD = .sbss:0x8051E788; // type:object size:0x4 scope:global align:4 data:4byte g_fopAc_type = .sbss:0x8051E790; // type:object size:0x4 scope:global align:4 data:4byte @@ -27717,11 +27717,11 @@ g_fpcBs_type = .sbss:0x8051E7D8; // type:object size:0x4 scope:global align:4 l_fpcLy_CurrLayer_p = .sbss:0x8051E7E0; // type:object size:0x4 scope:global align:4 data:4byte layer_id$46579 = .sbss:0x8051E7E4; // type:object size:0x4 scope:local align:4 data:4byte g_fpcLf_type = .sbss:0x8051E7E8; // type:object size:0x4 scope:global align:4 data:4byte -lbl_8051E7F0 = .sbss:0x8051E7F0; // type:object size:0x1 data:byte +l_dvdError$0 = .sbss:0x8051E7F0; // type:object size:0x1 data:byte g_fpcNd_type = .sbss:0x8051E7F8; // type:object size:0x4 scope:global align:4 data:4byte request_id$46742 = .sbss:0x8051E800; // type:object size:0x4 scope:local align:4 data:4byte g_fpcPf_ProfileList_p = .sbss:0x8051E808; // type:object size:0x4 scope:global align:4 data:4byte -lbl_8051E810 = .sbss:0x8051E810; // type:object size:0x8 +tmp_name$50691 = .sbss:0x8051E810; // type:object size:0x8 scope:local align:1 data:byte mProcID__20dStage_roomControl_c = .sbss:0x8051E818; // type:object size:0x4 scope:global align:4 data:4byte mStayNo__20dStage_roomControl_c = .sbss:0x8051E81C; // type:object size:0x1 data:byte mOldStayNo__20dStage_roomControl_c = .sbss:0x8051E81D; // type:object size:0x1 data:byte @@ -27815,13 +27815,12 @@ m_b_Light8EcallBack__13dPa_control_c = .sbss:0x8051E974; // type:object size:0x4 m_b_Light8PcallBack__13dPa_control_c = .sbss:0x8051E978; // type:object size:0x4 scope:global align:4 m_d_Light8EcallBack__13dPa_control_c = .sbss:0x8051E97C; // type:object size:0x4 scope:global align:4 data:4byte m_d_Light8PcallBack__13dPa_control_c = .sbss:0x8051E980; // type:object size:0x4 scope:global align:4 -lbl_8051E984 = .sbss:0x8051E984; // type:object size:0x1 data:byte +mStatus__13dPa_control_c = .sbss:0x8051E984; // type:object size:0x1 data:byte mParticleTracePCB__13dPa_control_c = .sbss:0x8051E988; // type:object size:0x4 scope:global align:4 -lbl_8051E990 = .sbss:0x8051E990; // type:object size:0x1 data:byte +mWipe__12dDlst_list_c = .sbss:0x8051E990; // type:object size:0x1 data:byte mWipeRate__12dDlst_list_c = .sbss:0x8051E994; // type:object size:0x4 scope:global align:4 data:float mWipeSpeed__12dDlst_list_c = .sbss:0x8051E998; // type:object size:0x4 scope:global align:4 data:float -lbl_8051E99C = .sbss:0x8051E99C; // type:object size:0x4 -lbl_8051E9A0 = .sbss:0x8051E9A0; // type:object size:0x1 data:byte +init$0000 = .sbss:0x8051E9A0; // type:object size:0x1 scope:local data:byte S_parcent_bak$99593 = .sbss:0x8051E9A8; // type:object size:0x4 scope:local align:4 data:float S_rot_work1$100794 = .sbss:0x8051E9AC; // type:object size:0x2 scope:local align:4 data:2byte S_rot_work2$100795 = .sbss:0x8051E9AE; // type:object size:0x2 scope:local align:2 data:2byte diff --git a/config/RZDP01/rels/d_a_boomerang/symbols.txt b/config/RZDP01/rels/d_a_boomerang/symbols.txt index c6f609e2a0..4e172943ac 100644 --- a/config/RZDP01/rels/d_a_boomerang/symbols.txt +++ b/config/RZDP01/rels/d_a_boomerang/symbols.txt @@ -132,7 +132,11 @@ lbl_47_data_4EC = .data:0x000004EC; // type:object size:0x34 @108962 = .data:0x00000520; // type:object size:0x14 scope:local align:4 lbl_47_data_534 = .data:0x00000534; // type:object size:0xCC ...bss.0 = .bss:0x00000000; // type:label scope:local align:4 +@GUARD@effDirection$49876 = .bss:0x00000000; // type:object size:0x1 scope:local align:4 effDirection$108188 = .bss:0x00000004; // type:object size:0xC scope:local align:4 +@GUARD@effScale0$49879 = .bss:0x00000010; // type:object size:0x1 scope:local align:4 effScale0$108191 = .bss:0x00000014; // type:object size:0xC scope:local align:4 +@GUARD@effScaleSand$49882 = .bss:0x00000020; // type:object size:0x1 scope:local align:4 effScaleSand$108194 = .bss:0x00000024; // type:object size:0xC scope:local align:4 +@GUARD@effScaleGrass$49885 = .bss:0x00000030; // type:object size:0x1 scope:local align:4 effScaleGrass$108197 = .bss:0x00000034; // type:object size:0xC scope:local align:4 diff --git a/config/RZDP01/splits.txt b/config/RZDP01/splits.txt index 51998fba6d..d2aa84a2e7 100644 --- a/config/RZDP01/splits.txt +++ b/config/RZDP01/splits.txt @@ -298,7 +298,7 @@ f_pc/f_pc_layer.cpp: f_pc/f_pc_leaf.cpp: .text start:0x80026C04 end:0x80026D28 .data start:0x803E64C0 end:0x803E64D8 - .sbss start:0x80521128 end:0x80521138 + .sbss start:0x80521128 end:0x80521130 f_pc/f_pc_layer_iter.cpp: .text start:0x80026D28 end:0x80026E7C @@ -318,6 +318,7 @@ f_pc/f_pc_load.cpp: f_pc/f_pc_manager.cpp: .text start:0x80027208 end:0x800274C0 .bss start:0x80469238 end:0x804692E0 + .sbss start:0x80521130 end:0x80521138 f_pc/f_pc_method.cpp: .text start:0x800274C0 end:0x80027500 @@ -341,7 +342,7 @@ f_pc/f_pc_priority.cpp: f_pc/f_pc_profile.cpp: .text start:0x80028304 end:0x80028314 - .sbss start:0x80521148 end:0x80521158 + .sbss start:0x80521148 end:0x80521150 f_pc/f_pc_searcher.cpp: .text start:0x80028314 end:0x80028344 @@ -378,7 +379,7 @@ d/d_stage.cpp: .data start:0x803E65F8 end:0x803E9EA8 .bss start:0x80469300 end:0x8047A7C8 .sdata start:0x8051E2A8 end:0x8051E2DC - .sbss start:0x80521158 end:0x80521178 + .sbss start:0x80521150 end:0x80521178 .sdata2 start:0x805224E8 end:0x805224F8 d/d_map.cpp: diff --git a/config/RZDP01/symbols.txt b/config/RZDP01/symbols.txt index 73851a557e..960a28899a 100644 --- a/config/RZDP01/symbols.txt +++ b/config/RZDP01/symbols.txt @@ -1133,7 +1133,7 @@ fpcPause_Enable__FPvUc = .text:0x80028590; // type:function size:0x6C scope:glob fpcPause_Disable__FPvUc = .text:0x800285FC; // type:function size:0x74 scope:global align:4 fpcPause_Init__FPv = .text:0x80028670; // type:function size:0xC scope:global align:4 fpcDw_Execute__FP18base_process_class = .text:0x8002867C; // type:function size:0x8C scope:global align:4 -fpcDw_Handler__FPFi_iPFPvPv_i = .text:0x80028708; // type:function size:0x54 scope:global align:4 +fpcDw_Handler__FPFPFPvPv_i_iPFPvPv_i = .text:0x80028708; // type:function size:0x54 scope:global align:4 fpcFCtRq_Do__FP19fast_create_request = .text:0x8002875C; // type:function size:0x50 scope:global align:4 fpcFCtRq_Delete__FP19fast_create_request = .text:0x800287AC; // type:function size:0x8 scope:global align:4 fpcFCtRq_Request__FP11layer_classsPFPvPv_iPvPv = .text:0x800287B4; // type:function size:0xD8 scope:global align:4 @@ -27580,7 +27580,7 @@ lbl_805210B6 = .sbss:0x805210B6; // type:object size:0x1 lbl_805210B7 = .sbss:0x805210B7; // type:object size:0x1 lbl_805210B8 = .sbss:0x805210B8; // type:object size:0x4 JPTracePCB4 = .sbss:0x805210BC; // type:object size:0x4 scope:global align:4 -lbl_805210C0 = .sbss:0x805210C0; // type:object size:0x1 data:byte +DMC_initialized = .sbss:0x805210C0; // type:object size:0x1 data:byte cDyl_Initialized = .sbss:0x805210C4; // type:object size:0x4 scope:global align:4 data:4byte cDyl_DVD = .sbss:0x805210C8; // type:object size:0x4 scope:global align:4 data:4byte g_fopAc_type = .sbss:0x805210D0; // type:object size:0x4 scope:global align:4 data:4byte @@ -27602,11 +27602,11 @@ g_fpcBs_type = .sbss:0x80521118; // type:object size:0x4 scope:global align:4 l_fpcLy_CurrLayer_p = .sbss:0x80521120; // type:object size:0x4 scope:global align:4 data:4byte layer_id$46579 = .sbss:0x80521124; // type:object size:0x4 scope:local align:4 data:4byte g_fpcLf_type = .sbss:0x80521128; // type:object size:0x4 scope:global align:4 data:4byte -lbl_80521130 = .sbss:0x80521130; // type:object size:0x1 data:byte +l_dvdError$0 = .sbss:0x80521130; // type:object size:0x1 data:byte g_fpcNd_type = .sbss:0x80521138; // type:object size:0x4 scope:global align:4 data:4byte request_id$46742 = .sbss:0x80521140; // type:object size:0x4 scope:local align:4 data:4byte g_fpcPf_ProfileList_p = .sbss:0x80521148; // type:object size:0x4 scope:global align:4 data:4byte -lbl_80521150 = .sbss:0x80521150; // type:object size:0x8 +tmp_name$50691 = .sbss:0x80521150; // type:object size:0x8 scope:local align:1 data:byte mProcID__20dStage_roomControl_c = .sbss:0x80521158; // type:object size:0x4 scope:global align:4 data:4byte mStayNo__20dStage_roomControl_c = .sbss:0x8052115C; // type:object size:0x1 data:byte lbl_8052115D = .sbss:0x8052115D; // type:object size:0x1 data:byte @@ -27700,13 +27700,13 @@ m_b_Light8EcallBack__13dPa_control_c = .sbss:0x805212B4; // type:object size:0x4 m_b_Light8PcallBack__13dPa_control_c = .sbss:0x805212B8; // type:object size:0x4 scope:global align:4 m_d_Light8EcallBack__13dPa_control_c = .sbss:0x805212BC; // type:object size:0x4 scope:global align:4 data:4byte m_d_Light8PcallBack__13dPa_control_c = .sbss:0x805212C0; // type:object size:0x4 scope:global align:4 -lbl_805212C4 = .sbss:0x805212C4; // type:object size:0x1 data:byte +mStatus__13dPa_control_c = .sbss:0x805212C4; // type:object size:0x1 data:byte mParticleTracePCB__13dPa_control_c = .sbss:0x805212C8; // type:object size:0x4 scope:global align:4 -lbl_805212D0 = .sbss:0x805212D0; // type:object size:0x1 data:byte +mWipe__12dDlst_list_c = .sbss:0x805212D0; // type:object size:0x1 data:byte mWipeRate__12dDlst_list_c = .sbss:0x805212D4; // type:object size:0x4 scope:global align:4 data:float mWipeSpeed__12dDlst_list_c = .sbss:0x805212D8; // type:object size:0x4 scope:global align:4 data:float lbl_805212DC = .sbss:0x805212DC; // type:object size:0x4 -lbl_805212E0 = .sbss:0x805212E0; // type:object size:0x1 data:byte +init$0000 = .sbss:0x805212E0; // type:object size:0x1 scope:local data:byte S_parcent_bak$99593 = .sbss:0x805212E8; // type:object size:0x4 scope:local align:4 data:float S_rot_work1$100790 = .sbss:0x805212EC; // type:object size:0x2 scope:local align:4 data:2byte S_rot_work2$100791 = .sbss:0x805212EE; // type:object size:0x2 scope:local align:2 data:2byte diff --git a/config/Shield/rels/d_a_cow/symbols.txt b/config/Shield/rels/d_a_cow/symbols.txt index 2b59529aef..74523d0208 100644 --- a/config/Shield/rels/d_a_cow/symbols.txt +++ b/config/Shield/rels/d_a_cow/symbols.txt @@ -271,11 +271,11 @@ m_near_dist = .bss:0x00000020; // type:object size:0x4 scope:global m_view_angle_wide = .bss:0x00000024; // type:object size:0x2 scope:global m_view_angle = .bss:0x00000026; // type:object size:0x2 scope:global m_angry_cow = .bss:0x00000028; // type:object size:0x2 scope:global data:2byte -lbl_160_bss_2A = .bss:0x0000002A; // type:object size:0x1 data:byte +@GUARD@setEffect__7daCow_cFv@runScale = .bss:0x0000002A; // type:object size:0x1 data:byte @LOCAL@setEffect__7daCow_cFv@runScale = .bss:0x0000002C; // type:object size:0xC scope:local align:4 data:float -lbl_160_bss_38 = .bss:0x00000038; // type:object size:0x1 data:byte +@GUARD@setCollisions__7daCow_cFv@headOfst = .bss:0x00000038; // type:object size:0x1 data:byte @LOCAL@setCollisions__7daCow_cFv@headOfst = .bss:0x0000003C; // type:object size:0xC scope:local align:4 data:float -lbl_160_bss_48 = .bss:0x00000048; // type:object size:0x1 data:byte +@GUARD@setCollisions__7daCow_cFv@backBornOfst@0 = .bss:0x00000048; // type:object size:0x1 data:byte @LOCAL@setCollisions__7daCow_cFv@backBornOfst@0 = .bss:0x0000004C; // type:object size:0xC scope:local align:4 data:float -lbl_160_bss_58 = .bss:0x00000058; // type:object size:0x1 data:byte +@GUARD@setCollisions__7daCow_cFv@waistOfst@1 = .bss:0x00000058; // type:object size:0x1 data:byte @LOCAL@setCollisions__7daCow_cFv@waistOfst@1 = .bss:0x0000005C; // type:object size:0xC scope:local align:4 data:float diff --git a/config/Shield/symbols.txt b/config/Shield/symbols.txt index d0f7467e56..d90f87197a 100644 --- a/config/Shield/symbols.txt +++ b/config/Shield/symbols.txt @@ -25247,7 +25247,7 @@ lbl_80508ABE = .sbss:0x80508ABE; // type:object size:0x1 hash:0x7329269E lbl_80508ABF = .sbss:0x80508ABF; // type:object size:0x1 hash:0x7329269F lbl_80508AC0 = .sbss:0x80508AC0; // type:object size:0x1 hash:0x73292690 JPTracePCB4 = .sbss:0x80508AC4; // type:object size:0x4 scope:global data:4byte hash:0xB2DC52FB -lbl_80508AC8 = .sbss:0x80508AC8; // type:object size:0x1 data:byte hash:0xBABF0DBC +DMC_initialized = .sbss:0x80508AC8; // type:object size:0x1 data:byte hash:0xBABF0DBC cDyl_Initialized = .sbss:0x80508ACC; // type:object size:0x4 scope:global data:4byte hash:0x4F14A2E4 cDyl_DVD = .sbss:0x80508AD0; // type:object size:0x4 scope:global data:4byte hash:0x12A4A3DE g_fopAc_type = .sbss:0x80508AD8; // type:object size:0x4 scope:global data:4byte hash:0x79729021 @@ -25268,7 +25268,7 @@ g_fpcBs_type = .sbss:0x80508B28; // type:object size:0x4 scope:global data:4byte l_fpcLy_CurrLayer_p = .sbss:0x80508B30; // type:object size:0x4 scope:global data:4byte hash:0x423940D3 @LOCAL@fpcLy_Create__FP11layer_classPvP15node_list_classi@layer_id@0 = .sbss:0x80508B34; // type:object size:0x4 scope:local data:4byte hash:0xBA834C41 dhash:0x97876181 g_fpcLf_type = .sbss:0x80508B38; // type:object size:0x4 scope:global data:4byte hash:0x24D2D5A5 -lbl_80508B40 = .sbss:0x80508B40; // type:object size:0x1 data:byte hash:0x62392397 dhash:0xA26572E4 +l_dvdError$0 = .sbss:0x80508B40; // type:object size:0x1 data:byte hash:0x62392397 dhash:0xA26572E4 g_fpcNd_type = .sbss:0x80508B48; // type:object size:0x4 scope:global data:4byte hash:0xEE05CFE5 @LOCAL@fpcNdRq_Create__FUl@request_id@0 = .sbss:0x80508B50; // type:object size:0x4 scope:local data:4byte hash:0x878F74E3 dhash:0xAAB980A1 g_fpcPf_ProfileList_p = .sbss:0x80508B58; // type:object size:0x4 scope:global data:4byte hash:0x2CADF2C7 @@ -25364,9 +25364,9 @@ m_b_Light8EcallBack__13dPa_control_c = .sbss:0x80508CD4; // type:object size:0x4 m_b_Light8PcallBack__13dPa_control_c = .sbss:0x80508CD8; // type:object size:0x4 scope:global data:4byte hash:0x50EB73E6 dhash:0x289FA544 m_d_Light8EcallBack__13dPa_control_c = .sbss:0x80508CDC; // type:object size:0x4 scope:global data:4byte hash:0xE99435D5 dhash:0xD8FEB517 m_d_Light8PcallBack__13dPa_control_c = .sbss:0x80508CE0; // type:object size:0x4 scope:global data:4byte hash:0x4A16DC20 dhash:0x4810E2C2 -lbl_80508CE4 = .sbss:0x80508CE4; // type:object size:0x1 data:byte hash:0xEE07694F dhash:0xF8E160CD +mStatus__13dPa_control_c = .sbss:0x80508CE4; // type:object size:0x1 data:byte hash:0xEE07694F dhash:0xF8E160CD mParticleTracePCB__13dPa_control_c = .sbss:0x80508CE8; // type:object size:0x4 scope:global data:4byte hash:0x02358A3F dhash:0xC17F907D -lbl_80508CF0 = .sbss:0x80508CF0; // type:object size:0x1 data:byte hash:0x23C263EA dhash:0x4666A2A9 +mWipe__12dDlst_list_c = .sbss:0x80508CF0; // type:object size:0x1 data:byte hash:0x23C263EA dhash:0x4666A2A9 mWipeRate__12dDlst_list_c = .sbss:0x80508CF4; // type:object size:0x4 scope:global align:4 data:float hash:0x691395C8 dhash:0x88BEF30B mWipeSpeed__12dDlst_list_c = .sbss:0x80508CF8; // type:object size:0x4 scope:global align:4 data:float hash:0x8B6109AD dhash:0xA0A5522E mWipeColor__12dDlst_list_c = .sbss:0x80508CFC; // type:object size:0x4 scope:global data:byte hash:0x5EB93DD7 dhash:0x9F8AE694 @@ -25538,11 +25538,11 @@ systemConsole__9JFWSystem = .sbss:0x80508FC0; // type:object size:0x4 scope:glob lbl_80508FC4 = .sbss:0x80508FC4; // type:object size:0x1 data:byte hash:0x8BB1D0A8 dhash:0xE5FF6B31 sManager__10JFWDisplay = .sbss:0x80508FC8; // type:object size:0x4 scope:global data:4byte hash:0xFBAF3485 dhash:0xE9584344 @LOCAL@endFrame__10JFWDisplayFv@prevFrame = .sbss:0x80508FCC; // type:object size:0x4 scope:local data:4byte hash:0xFCDE67C6 dhash:0x755A10C2 -lbl_80508FD0 = .sbss:0x80508FD0; // type:object size:0x1 data:byte hash:0xCBE0AD2E dhash:0xB7DF402A +@GUARD@endFrame__10JFWDisplayFv@prevFrame = .sbss:0x80508FD0; // type:object size:0x1 data:byte hash:0xCBE0AD2E dhash:0xB7DF402A @LOCAL@waitForTick__FUlUs@nextTick = .sbss:0x80508FD8; // type:object size:0x8 scope:local data:4byte hash:0xA3AF8346 dhash:0xF41BBC74 -lbl_80508FE0 = .sbss:0x80508FE0; // type:object size:0x1 data:byte hash:0x3DB3242E dhash:0x5451A9DC +@GUARD@waitForTick__FUlUs@nextTick = .sbss:0x80508FE0; // type:object size:0x1 data:byte hash:0x3DB3242E dhash:0x5451A9DC @LOCAL@waitForTick__FUlUs@nextCount@0 = .sbss:0x80508FE4; // type:object size:0x4 scope:local data:4byte hash:0x31EA8220 dhash:0xF41BBC74 -lbl_80508FE8 = .sbss:0x80508FE8; // type:object size:0x1 data:byte hash:0xDE730B08 dhash:0x5451A9DC +@GUARD@waitForTick__FUlUs@nextCount@0 = .sbss:0x80508FE8; // type:object size:0x1 data:byte hash:0xDE730B08 dhash:0x5451A9DC soOutput_none___Q27JStudio14TVariableValue = .sbss:0x80508FF0; // type:object size:0x4 scope:global data:4byte hash:0x0D4DD37E dhash:0xBE028BCF lbl_80508FF8 = .sbss:0x80508FF8; // type:object size:0x1 data:byte hash:0xD1337E25 dhash:0xE17C2A90 lbl_80509000 = .sbss:0x80509000; // type:object size:0x1 data:byte hash:0xD7A40583 dhash:0x59B8D7B7 diff --git a/config/ShieldD/config.yml b/config/ShieldD/config.yml index d30978c5d5..94998b74c3 100644 --- a/config/ShieldD/config.yml +++ b/config/ShieldD/config.yml @@ -19,6 +19,7 @@ block_relocations: end: .text:0x8055031C - source: .text:0x805b727c end: .text:0x805b7284 +- target: .bss:0x80808081 add_relocations: - source: .sdata:0x8073f3f4 type: abs diff --git a/config/ShieldD/rels/d_a_cowD/symbols.txt b/config/ShieldD/rels/d_a_cowD/symbols.txt index 157074f420..a3c0460047 100644 --- a/config/ShieldD/rels/d_a_cowD/symbols.txt +++ b/config/ShieldD/rels/d_a_cowD/symbols.txt @@ -304,13 +304,16 @@ pen_pos__21@unnamed@d_a_cow_cpp@ = .bss:0x00000000; // type:object size:0xC scop gate_pos__21@unnamed@d_a_cow_cpp@ = .bss:0x0000000C; // type:object size:0xC scope:global l_CowRoomNo__21@unnamed@d_a_cow_cpp@ = .bss:0x00000018; // type:object size:0x4 scope:global data:4byte l_CowType__21@unnamed@d_a_cow_cpp@ = .bss:0x0000001C; // type:object size:0x4 scope:global data:4byte -lbl_154_bss_20 = .bss:0x00000020; // type:object size:0x1 data:byte +@GUARD@setEffect__7daCow_cFv@runScale = .bss:0x00000020; // type:object size:0x1 data:byte @LOCAL@setEffect__7daCow_cFv@runScale = .bss:0x00000024; // type:object size:0xC scope:local m_near_dist = .bss:0x00000030; // type:object size:0x4 scope:global align:4 data:float m_view_angle_wide = .bss:0x00000034; // type:object size:0x2 scope:global data:2byte m_view_angle = .bss:0x00000036; // type:object size:0x2 scope:global data:2byte m_angry_cow = .bss:0x00000038; // type:object size:0x2 scope:global data:2byte m_search_range = .bss:0x0000003C; // type:object size:0x4 scope:global +@GUARD@setCollisions__7daCow_cFv@headOfst = .bss:0x00000040; // type:object size:0x1 scope:local @LOCAL@setCollisions__7daCow_cFv@headOfst = .bss:0x00000044; // type:object size:0xC scope:local +@GUARD@setCollisions__7daCow_cFv@backBornOfst@0 = .bss:0x00000050; // type:object size:0x1 scope:local @LOCAL@setCollisions__7daCow_cFv@backBornOfst@0 = .bss:0x00000054; // type:object size:0xC scope:local +@GUARD@setCollisions__7daCow_cFv@waistOfst@1 = .bss:0x00000060; // type:object size:0x1 scope:local @LOCAL@setCollisions__7daCow_cFv@waistOfst@1 = .bss:0x00000064; // type:object size:0xC scope:local diff --git a/config/ShieldD/rels/d_a_e_rdD/symbols.txt b/config/ShieldD/rels/d_a_e_rdD/symbols.txt index 0ef070121b..f0d5879231 100644 --- a/config/ShieldD/rels/d_a_e_rdD/symbols.txt +++ b/config/ShieldD/rels/d_a_e_rdD/symbols.txt @@ -506,6 +506,7 @@ lbl_68_bss_68 = .bss:0x00000068; // type:object size:0x1 data:byte lbl_68_bss_69 = .bss:0x00000069; // type:object size:0x7 data:byte target_info = .bss:0x00000070; // type:object size:0x28 scope:global data:4byte target_info_count = .bss:0x00000098; // type:object size:0x4 scope:global data:4byte +data_80519230 = .bss:0x0000009C; // type:object size:0x1 data:byte @LOCAL@path_check__FP10e_rd_class@check_index = .bss:0x000000A0; // type:object size:0xFF scope:local rd_count = .bss:0x000001A0; // type:object size:0x4 scope:global data:4byte lbl_68_bss_1A4 = .bss:0x000001A4; // type:object size:0x1 data:byte diff --git a/config/ShieldD/splits.txt b/config/ShieldD/splits.txt index 5b6aba600e..f36560019e 100644 --- a/config/ShieldD/splits.txt +++ b/config/ShieldD/splits.txt @@ -131,14 +131,14 @@ m_Do/m_Do_MemCardRWmng.cpp: m_Do/m_Do_machine_exception.cpp: .text start:0x8002EEA0 end:0x8002F3A0 .data start:0x80664C90 end:0x80664E98 - .sbss start:0x8074C450 end:0x8074C464 + .sbss start:0x8074C450 end:0x8074C458 c/c_damagereaction.cpp: .text start:0x8002F3A0 end:0x8002FAF0 .ctors start:0x8062F7E4 end:0x8062F7E8 .data start:0x80664E98 end:0x80664F00 .sdata start:0x8073F688 end:0x8073F698 - .sbss start:0x8074C464 end:0x8074C46C + .sbss start:0x8074C458 end:0x8074C468 .sdata2 start:0x8074D908 end:0x8074D920 .bss start:0x807762A0 end:0x807762B0 @@ -146,15 +146,15 @@ c/c_dylink.cpp: .text start:0x8002FAF0 end:0x80030690 .rodata start:0x8062FA70 end:0x806311D0 .data start:0x80664F00 end:0x80667F90 - .sdata start:0x8073F698 end:0x8073F6EC - .sbss start:0x8074C46C end:0x8074C47C + .sdata start:0x8073F698 end:0x8073F6E8 + .sbss start:0x8074C468 end:0x8074C47C .bss start:0x807762B0 end:0x80776F20 f_ap/f_ap_game.cpp: .text start:0x80030690 end:0x80034CB0 .ctors start:0x8062F7E8 end:0x8062F7EC .data start:0x80667F90 end:0x80669130 - .sdata start:0x8073F6EC end:0x8073F850 + .sdata start:0x8073F6E8 end:0x8073F850 .sbss start:0x8074C47C end:0x8074C4A0 .sdata2 start:0x8074D920 end:0x8074D950 .bss start:0x80776F20 end:0x8077EF68 @@ -315,7 +315,7 @@ f_pc/f_pc_layer.cpp: f_pc/f_pc_leaf.cpp: .text start:0x800450A0 end:0x80045330 .data start:0x8066AD78 end:0x8066AD90 - .sbss start:0x8074C540 end:0x8074C550 + .sbss start:0x8074C540 end:0x8074C548 f_pc/f_pc_layer_iter.cpp: .text start:0x80045330 end:0x80045560 @@ -336,6 +336,7 @@ f_pc/f_pc_manager.cpp: .text start:0x800459D0 end:0x80046020 .data start:0x8066ADB0 end:0x8066ADC8 .sdata start:0x8073F9D8 end:0x8073F9E8 + .sbss start:0x8074C548 end:0x8074C550 .bss start:0x80782160 end:0x80782208 f_pc/f_pc_method.cpp: diff --git a/config/ShieldD/symbols.txt b/config/ShieldD/symbols.txt index 8abff0e033..cba07a4591 100644 --- a/config/ShieldD/symbols.txt +++ b/config/ShieldD/symbols.txt @@ -54716,7 +54716,9 @@ lbl_80718B5E = .data:0x80718B5E; // type:object size:0x3A @14158 = .data:0x80718D44; // type:object size:0xC scope:local data:string hash:0xA05FFBDC __vt__16J3DMaterialTable = .data:0x80718D50; // type:object size:0xC scope:global hash:0x31696BE8 dhash:0xB1A7422F @14159 = .data:0x80718D5C; // type:object size:0x11 scope:local data:string hash:0xA05FFBDD -lbl_80718D6D = .data:0x80718D6D; // type:object size:0x43 +lbl_80718D70 = .data:0x80718D70; // type:object size:0x11 scope:local data:string +lbl_80718D84 = .data:0x80718D84; // type:object size:0x16 scope:local data:string +lbl_80718D9C = .data:0x80718D9C; // type:object size:0x11 scope:local data:string @STRING@__ct__15J3DTevKColorAnmFUsP15J3DAnmTevRegKey@1 = .data:0x80718DB0; // type:object size:0x11 scope:local data:string hash:0x5A014D17 dhash:0x78112C26 @STRING@__ct__15J3DTevKColorAnmFUsP15J3DAnmTevRegKey@0 = .data:0x80718DC4; // type:object size:0x16 scope:local data:string hash:0x5A014D16 dhash:0x78112C26 @STRING@__ct__15J3DTevKColorAnmFUsP15J3DAnmTevRegKey = .data:0x80718DDC; // type:object size:0x11 scope:local data:string hash:0x9EFED366 dhash:0x78785EAA @@ -54750,18 +54752,27 @@ lbl_80718D6D = .data:0x80718D6D; // type:object size:0x43 @STRING@getUpdateMaterialID__16J3DAnmTexPatternCFUs@1 = .data:0x80719030; // type:object size:0xF scope:local data:string hash:0x58473ADA dhash:0x456BEC1C @STRING@getUpdateMaterialID__16J3DAnmTexPatternCFUs@0 = .data:0x80719040; // type:object size:0x14 scope:local data:string hash:0x58473ADB dhash:0x456BEC1C @STRING@getUpdateMaterialID__16J3DAnmTexPatternCFUs = .data:0x80719054; // type:object size:0xF scope:local data:string hash:0x50B67C6B dhash:0xD46B0390 -lbl_80719063 = .data:0x80719063; // type:object size:0x69 +lbl_80719164 = .data:0x80719064; // type:object size:0xF scope:local data:string +lbl_80719174 = .data:0x80719074; // type:object size:0x14 scope:local data:string +lbl_80719188 = .data:0x80719088; // type:object size:0xF scope:local data:string +lbl_80719198 = .data:0x80719098; // type:object size:0xF scope:local data:string +lbl_807191A8 = .data:0x807190A8; // type:object size:0x14 scope:local data:string +lbl_807191BC = .data:0x807190BC; // type:object size:0xF scope:local data:string @STRING@getUpdateMaterialID__11J3DAnmColorCFUs@1 = .data:0x807190CC; // type:object size:0xF scope:local data:string hash:0x452B19A1 dhash:0xB7C93AE0 @STRING@getUpdateMaterialID__11J3DAnmColorCFUs@0 = .data:0x807190DC; // type:object size:0x14 scope:local data:string hash:0x452B19A0 dhash:0xB7C93AE0 @STRING@getUpdateMaterialID__11J3DAnmColorCFUs = .data:0x807190F0; // type:object size:0xF scope:local data:string hash:0x8D586DD0 dhash:0x786A946C @STRING@getUpdateTexMtxID__19J3DAnmTextureSRTKeyCFUs@1 = .data:0x80719100; // type:object size:0xF scope:local data:string hash:0x6B7EED0A dhash:0xD47505A3 @STRING@getUpdateTexMtxID__19J3DAnmTextureSRTKeyCFUs@0 = .data:0x80719110; // type:object size:0x14 scope:local data:string hash:0x6B7EED0B dhash:0xD47505A3 @STRING@getUpdateTexMtxID__19J3DAnmTextureSRTKeyCFUs = .data:0x80719124; // type:object size:0xF scope:local data:string hash:0xBEFB6A3B dhash:0xB482FA2F -lbl_80719133 = .data:0x80719133; // type:object size:0x35 +lbl_80719134 = .data:0x80719134; // type:object size:0xF scope:local data:string +lbl_80719144 = .data:0x80719144; // type:object size:0x14 scope:local data:string +lbl_80719158 = .data:0x80719158; // type:object size:0xF scope:local data:string @STRING@getSRTCenter__19J3DAnmTextureSRTKeyFUs@1 = .data:0x80719168; // type:object size:0xF scope:local data:string hash:0xBD35E163 dhash:0x8AF0DE6C @STRING@getSRTCenter__19J3DAnmTextureSRTKeyFUs@0 = .data:0x80719178; // type:object size:0x14 scope:local data:string hash:0xBD35E162 dhash:0x8AF0DE6C @STRING@getSRTCenter__19J3DAnmTextureSRTKeyFUs = .data:0x8071918C; // type:object size:0xF scope:local data:string hash:0xC92A5D12 dhash:0x943A0D60 -lbl_8071919B = .data:0x8071919B; // type:object size:0x3D +lbl_8071919C = .data:0x8071919C; // type:object size:0x14 scope:local data:string +lbl_807191B0 = .data:0x807191B0; // type:object size:0x14 scope:local data:string +lbl_807191C4 = .data:0x807191C4; // type:object size:0x14 scope:local data:string @15235 = .data:0x807191D8; // type:object size:0x17 scope:local data:string hash:0xA05F7375 @15236 = .data:0x807191F0; // type:object size:0x19 scope:local data:string hash:0xA05F7376 __vt__14J3DPEBlockNull = .data:0x8071920C; // type:object size:0x7C scope:global hash:0xA0930FF8 dhash:0x9EFBCF3D @@ -57083,10 +57094,10 @@ __RTTI__19JPAParticleCallBack = .sdata:0x8073F690; // type:object size:0x8 scope @114992 = .sdata:0x8073F6D0; // type:object size:0x7 scope:local data:string hash:0xAC9322E3 @115063 = .sdata:0x8073F6D8; // type:object size:0x5 scope:local data:string hash:0xAC938265 @115212 = .sdata:0x8073F6E0; // type:object size:0x2 scope:local data:string hash:0xAC938A01 -lbl_8073F6E8 = .sdata:0x8073F6E8; // type:object size:0x1 data:byte hash:0xC4F99235 dhash:0x36EB3D35 +mCaptureMagnification__11fapGm_HIO_c = .sdata:0x8073F6E8; // type:object size:0x1 data:byte hash:0xC4F99235 dhash:0x36EB3D35 mCaptureScreenDivH__11fapGm_HIO_c = .sdata:0x8073F6E9; // type:object size:0x1 data:byte hash:0xDA67CD23 dhash:0x36F37423 mCaptureScreenDivV__11fapGm_HIO_c = .sdata:0x8073F6EA; // type:object size:0x1 data:byte hash:0x3EAABB7D dhash:0x36F3743D -lbl_8073F6EB = .sdata:0x8073F6EB; // type:object size:0x1 data:byte hash:0x2C072CEE dhash:0x37B0404E +mPackArchiveMode__11fapGm_HIO_c = .sdata:0x8073F6EB; // type:object size:0x1 data:byte hash:0x2C072CEE dhash:0x37B0404E @114738 = .sdata:0x8073F6EC; // type:object size:0x4 scope:local data:string hash:0xAC931B2D @114739 = .sdata:0x8073F6F0; // type:object size:0x4 scope:local data:string hash:0xAC931B2C @114740 = .sdata:0x8073F6F4; // type:object size:0x4 scope:local data:string hash:0xAC931A82 @@ -64236,14 +64247,14 @@ data_80450C9C = .sbss:0x8074C45C; // type:object size:0x1 hash:0x7329269B data_80450C9D = .sbss:0x8074C45D; // type:object size:0x1 hash:0x7329269D data_80450C9E = .sbss:0x8074C45E; // type:object size:0x1 hash:0x7329269E cDmr_FishingWether = .sbss:0x8074C45F; // type:object size:0x1 hash:0x7329269F -data_80450CA0 = .sbss:0x8074C460; // type:object size:0x4 hash:0x73292690 +data_80450CA0 = .sbss:0x8074C460; // type:object size:0x1 scope:global align:1 data:byte hash:0x73292690 JPTracePCB4 = .sbss:0x8074C464; // type:object size:0x4 scope:global hash:0xB2DC52FB -lbl_8074C468 = .sbss:0x8074C468; // type:object size:0x1 data:byte hash:0xBABF0DBC +DMC_initialized = .sbss:0x8074C468; // type:object size:0x1 data:byte hash:0xBABF0DBC cDyl_Initialized = .sbss:0x8074C46C; // type:object size:0x4 scope:global data:4byte hash:0x4F14A2E4 cDyl_DVD = .sbss:0x8074C470; // type:object size:0x4 scope:global data:4byte hash:0x12A4A3DE -lbl_8074C478 = .sbss:0x8074C478; // type:object size:0x1 data:byte hash:0x212A8642 dhash:0x9C6E1C22 +m_CpuTimerOn__11fapGm_HIO_c = .sbss:0x8074C478; // type:object size:0x1 data:byte hash:0x212A8642 dhash:0x9C6E1C22 m_CpuTimerOff__11fapGm_HIO_c = .sbss:0x8074C479; // type:object size:0x1 data:byte hash:0x911301CA dhash:0x705BB8AA -lbl_8074C47A = .sbss:0x8074C47A; // type:object size:0x1 data:byte hash:0xDE8007C6 dhash:0x7D1A2EE6 +m_CpuTimerStart__11fapGm_HIO_c = .sbss:0x8074C47A; // type:object size:0x1 data:byte hash:0xDE8007C6 dhash:0x7D1A2EE6 m_CpuTimerTick__11fapGm_HIO_c = .sbss:0x8074C47C; // type:object size:0x4 scope:global data:4byte hash:0x1D284173 dhash:0x706361F3 mCaptureScreen__11fapGm_HIO_c = .sbss:0x8074C480; // type:object size:0x4 scope:global data:4byte hash:0x440BFED0 dhash:0x751F8370 mCaptureScreenBuffer__11fapGm_HIO_c = .sbss:0x8074C484; // type:object size:0x4 scope:global data:4byte hash:0xE27FC690 dhash:0xB288F970 @@ -64254,7 +64265,7 @@ mCaptureScreenLinePf__11fapGm_HIO_c = .sbss:0x8074C48E; // type:object size:0x2 mCaptureScreenLineNum__11fapGm_HIO_c = .sbss:0x8074C490; // type:object size:0x2 scope:global data:2byte hash:0xCC174908 dhash:0x39E708E8 mCaptureScreenNumH__11fapGm_HIO_c = .sbss:0x8074C492; // type:object size:0x1 data:byte hash:0x56EDE2EE dhash:0x36F65A0E mCaptureScreenNumV__11fapGm_HIO_c = .sbss:0x8074C493; // type:object size:0x1 data:byte hash:0xDA2ADA30 dhash:0x36F65A10 -lbl_8074C494 = .sbss:0x8074C494; // type:object size:0x1 data:byte hash:0xA9B59EC0 dhash:0xA12DE4E0 +mParticle254Fix__11fapGm_HIO_c = .sbss:0x8074C494; // type:object size:0x1 data:byte hash:0xA9B59EC0 dhash:0xA12DE4E0 mPriorityMaximum__19print_error_check_c = .sbss:0x8074C498; // type:object size:0x1 data:byte hash:0xE0AE7E09 dhash:0x4F24BEA1 mPrintDisable__19print_error_check_c = .sbss:0x8074C499; // type:object size:0x1 data:byte hash:0xC93122F6 dhash:0x62D5041E mThresholdEnable__19print_error_check_c = .sbss:0x8074C49A; // type:object size:0x1 data:byte hash:0xB66ED925 dhash:0x722717CD @@ -64289,7 +64300,7 @@ g_fpcBs_type = .sbss:0x8074C530; // type:object size:0x4 scope:global data:4byte l_fpcLy_CurrLayer_p = .sbss:0x8074C538; // type:object size:0x4 scope:global data:4byte hash:0x423940D3 @LOCAL@fpcLy_Create__FP11layer_classPvP15node_list_classi@layer_id@0 = .sbss:0x8074C53C; // type:object size:0x4 scope:local data:4byte hash:0xBA834C41 dhash:0x97876181 g_fpcLf_type = .sbss:0x8074C540; // type:object size:0x4 scope:global data:4byte hash:0x24D2D5A5 -lbl_8074C548 = .sbss:0x8074C548; // type:object size:0x1 data:byte hash:0x62392397 dhash:0xA26572E4 +@LOCAL@fpcM_Management__FPFv_vPFv_v@l_dvdError = .sbss:0x8074C548; // type:object size:0x1 data:byte hash:0x62392397 dhash:0xA26572E4 g_fpcNd_type = .sbss:0x8074C550; // type:object size:0x4 scope:global data:4byte hash:0xEE05CFE5 @LOCAL@fpcNdRq_Create__FUl@request_id@0 = .sbss:0x8074C558; // type:object size:0x4 scope:local data:4byte hash:0x878F74E3 dhash:0xAAB980A1 g_fpcPf_ProfileList_p = .sbss:0x8074C560; // type:object size:0x4 scope:global data:4byte hash:0x2CADF2C7 @@ -64401,7 +64412,7 @@ m_b_Light8EcallBack__13dPa_control_c = .sbss:0x8074C714; // type:object size:0x4 m_b_Light8PcallBack__13dPa_control_c = .sbss:0x8074C718; // type:object size:0x4 scope:global hash:0x50EB73E6 dhash:0x289FA544 m_d_Light8EcallBack__13dPa_control_c = .sbss:0x8074C71C; // type:object size:0x4 scope:global hash:0xE99435D5 dhash:0xD8FEB517 m_d_Light8PcallBack__13dPa_control_c = .sbss:0x8074C720; // type:object size:0x4 scope:global hash:0x4A16DC20 dhash:0x4810E2C2 -lbl_8074C724 = .sbss:0x8074C724; // type:object size:0x1 data:byte hash:0xEE07694F dhash:0xF8E160CD +mStatus__13dPa_control_c = .sbss:0x8074C724; // type:object size:0x1 data:byte hash:0xEE07694F dhash:0xF8E160CD mParticleTracePCB__13dPa_control_c = .sbss:0x8074C728; // type:object size:0x4 scope:global hash:0x02358A3F dhash:0xC17F907D @LOCAL@dPath_Draw__Fv@start_counter = .sbss:0x8074C730; // type:object size:0x4 scope:local data:4byte hash:0x1FFA3645 dhash:0x57844FC7 l_drawTexCount = .sbss:0x8074C738; // type:object size:0x4 scope:global data:4byte hash:0x3A9A327C @@ -64475,7 +64486,7 @@ lbl_8074C86D = .sbss:0x8074C86D; // type:object size:0x1 data:byte hash:0xE376DC @LOCAL@listenPropertyEvent__10dEvM_HIO_cFPC16JORPropertyEvent@debug_data = .sbss:0x8074C878; // type:object size:0x4 scope:local data:4byte hash:0x8C84444C dhash:0xA4EAC8E3 l_HIO_before = .sbss:0x8074C880; // type:object size:0x4 scope:global data:4byte hash:0x3759C8DE l_HIO_top = .sbss:0x8074C884; // type:object size:0x4 scope:global data:4byte hash:0xCA8DD4EC -l_debugMode = .sbss:0x8074C888; // type:object size:0x4 scope:global data:4byte hash:0x5F325704 +l_debugMode = .sbss:0x8074C888; // type:object size:0x4 scope:local data:4byte hash:0x5F325704 l_jumpTop = .sbss:0x8074C88C; // type:object size:0x4 scope:global align:4 data:float hash:0xEC66737F lbl_8074C890 = .sbss:0x8074C890; // type:object size:0x1 data:byte hash:0xB74E392C dhash:0xBD2F6E4C lbl_8074C891 = .sbss:0x8074C891; // type:object size:0x1 data:byte hash:0xC3C1301D dhash:0xBD2F6E4C @@ -64526,16 +64537,16 @@ m_dropAngleY__20daPy_boomerangMove_c = .sbss:0x8074C914; // type:object size:0x2 m_eventKeepFlg__20daPy_boomerangMove_c = .sbss:0x8074C916; // type:object size:0x2 scope:global data:2byte hash:0x7AB48561 dhash:0x0892FF43 Stage__22@unnamed@d_camera_cpp@ = .sbss:0x8074C918; // type:object size:0x4 scope:global data:4byte hash:0xB45C73E7 dhash:0xC45A5407 WideTurnSaving__22@unnamed@d_camera_cpp@ = .sbss:0x8074C91C; // type:object size:0x4 scope:global align:4 data:float hash:0xA4CEF485 dhash:0x54B4F3A5 -lbl_8074C920 = .sbss:0x8074C920; // type:object size:0x1 data:byte hash:0x88EE1272 dhash:0xF8A332E3 -@LOCAL@chaseCamera__9dCamera_cFl@LatitudeLimitMax@4 = .sbss:0x8074C924; // type:object size:0x2 scope:local hash:0x63D10E5A dhash:0xE67A53CB -lbl_8074C926 = .sbss:0x8074C926; // type:object size:0x1 data:byte hash:0x334E5811 dhash:0xB5076729 +l_debugMode = .sbss:0x8074C920; // type:object size:0x4 scope:local data:4byte hash:0x88EE1272 dhash:0xF8A332E3 +@LOCAL@chaseCamera__9dCamera_cFl@LatitudeLimitMax@0 = .sbss:0x8074C924; // type:object size:0x2 scope:local hash:0x63D10E5A dhash:0xE67A53CB +@GUARD@railCamera__9dCamera_cFl@_120 = .sbss:0x8074C926; // type:object size:0x1 data:byte hash:0x334E5811 dhash:0xB5076729 @LOCAL@railCamera__9dCamera_cFl@_120 = .sbss:0x8074C928; // type:object size:0x2 scope:local hash:0x24055AF9 dhash:0x18F891C1 -lbl_8074C92A = .sbss:0x8074C92A; // type:object size:0x1 data:byte hash:0xBCB1D8B3 dhash:0xAAE861CB +@GUARD@paraRailCamera__9dCamera_cFl@_120 = .sbss:0x8074C92A; // type:object size:0x1 data:byte hash:0xBCB1D8B3 dhash:0xAAE861CB @LOCAL@paraRailCamera__9dCamera_cFl@_120 = .sbss:0x8074C92C; // type:object size:0x2 scope:local hash:0x234ABD5B dhash:0xA108EAA3 -lbl_8074C92E = .sbss:0x8074C92E; // type:object size:0x1 data:byte hash:0xDA185670 dhash:0xE724A005 -@LOCAL@rideCamera__9dCamera_cFl@LatMin@2 = .sbss:0x8074C930; // type:object size:0x2 scope:local hash:0xC57ADB58 dhash:0xC35AA72D -lbl_8074C932 = .sbss:0x8074C932; // type:object size:0x1 data:byte hash:0xDA14946F dhash:0xE724A005 -@LOCAL@rideCamera__9dCamera_cFl@LatMax@3 = .sbss:0x8074C934; // type:object size:0x2 scope:local hash:0xC57F5747 dhash:0xC35AA72D +@GUARD@rideCamera__9dCamera_cFl@LatMin = .sbss:0x8074C92E; // type:object size:0x1 data:byte hash:0xDA185670 dhash:0xE724A005 +@LOCAL@rideCamera__9dCamera_cFl@LatMin = .sbss:0x8074C930; // type:object size:0x2 scope:local hash:0xC57ADB58 dhash:0xC35AA72D +@GUARD@rideCamera__9dCamera_cFl@LatMax@0 = .sbss:0x8074C932; // type:object size:0x1 data:byte hash:0xDA14946F dhash:0xE724A005 +@LOCAL@rideCamera__9dCamera_cFl@LatMax@0 = .sbss:0x8074C934; // type:object size:0x2 scope:local hash:0xC57F5747 dhash:0xC35AA72D sInstance__31JASGlobalInstance<10Z2Audience> = .sbss:0x8074C938; // type:object size:0x4 scope:global data:4byte hash:0xEDAF4FB8 dhash:0xC8923EFB @LOCAL@titleMsgCheck__14dFile_select_cFv@charspaceU@5 = .sbss:0x8074C940; // type:object size:0x8 scope:local hash:0xBAC0AB57 dhash:0x3D4E40C7 @LOCAL@headerTxtSet__14dFile_select_cFUsUcUc@charspace@1 = .sbss:0x8074C948; // type:object size:0x8 scope:local hash:0xAF32C5AC dhash:0x2E781072 @@ -64666,11 +64677,11 @@ systemConsole__9JFWSystem = .sbss:0x8074CB78; // type:object size:0x4 scope:glob sInitCalled__9JFWSystem = .sbss:0x8074CB7C; // type:object size:0x1 scope:global data:byte hash:0x8BB1D0A8 dhash:0xE5FF6B31 sManager__10JFWDisplay = .sbss:0x8074CB80; // type:object size:0x4 scope:global data:4byte hash:0xFBAF3485 dhash:0xE9584344 @LOCAL@endFrame__10JFWDisplayFv@prevFrame = .sbss:0x8074CB84; // type:object size:0x4 scope:local data:4byte hash:0xFCDE67C6 dhash:0x755A10C2 -lbl_8074CB88 = .sbss:0x8074CB88; // type:object size:0x8 data:byte hash:0xCBE0AD2E dhash:0xB7DF402A +@GUARD@endFrame__10JFWDisplayFv@prevFrame = .sbss:0x8074CB88; // type:object size:0x1 data:byte hash:0xCBE0AD2E dhash:0xB7DF402A @LOCAL@waitForTick__FUlUs@nextTick = .sbss:0x8074CB90; // type:object size:0x8 scope:local data:4byte hash:0xA3AF8346 dhash:0xF41BBC74 -lbl_8074CB98 = .sbss:0x8074CB98; // type:object size:0x1 data:byte hash:0x3DB3242E dhash:0x5451A9DC +@GUARD@waitForTick__FUlUs@nextTick = .sbss:0x8074CB98; // type:object size:0x1 data:byte hash:0x3DB3242E dhash:0x5451A9DC @LOCAL@waitForTick__FUlUs@nextCount@0 = .sbss:0x8074CB9C; // type:object size:0x4 scope:local data:4byte hash:0x31EA8220 dhash:0xF41BBC74 -lbl_8074CBA0 = .sbss:0x8074CBA0; // type:object size:0x1 data:byte hash:0xDE730B08 dhash:0x5451A9DC +@GUARD@waitForTick__FUlUs@nextCount@0 = .sbss:0x8074CBA0; // type:object size:0x1 data:byte hash:0xDE730B08 dhash:0x5451A9DC sBusTransactionMax__14J3DUMemRequest = .sbss:0x8074CBA8; // type:object size:0x4 scope:global data:4byte hash:0x5BB3289B dhash:0x5276E81E soOutput_none___Q27JStudio14TVariableValue = .sbss:0x8074CBB0; // type:object size:0x4 scope:global hash:0x0D4DD37E dhash:0xBE028BCF lbl_8074CBB8 = .sbss:0x8074CBB8; // type:object size:0x1 data:byte hash:0xD1337E25 dhash:0xE17C2A90 @@ -64933,16 +64944,16 @@ sInterruptFlag__17J3DDisplayListObj = .sbss:0x8074D070; // type:object size:0x4 sCurrentPipeline__11J3DShapeMtx = .sbss:0x8074D078; // type:object size:0x4 scope:global data:4byte hash:0x50CBA64E dhash:0x4F12164E sCurrentScaleFlag__11J3DShapeMtx = .sbss:0x8074D07C; // type:object size:0x4 scope:global data:4byte hash:0xCB85DCB8 dhash:0x577AF098 lbl_8074D080 = .sbss:0x8074D080; // type:object size:0x1 data:byte hash:0xE75AE0B7 dhash:0x2CA2A917 -lbl_8074D081 = .sbss:0x8074D081; // type:object size:0x1 data:byte hash:0x987989B1 dhash:0x6DF89211 -lbl_8074D082 = .sbss:0x8074D082; // type:object size:0x1 data:byte hash:0x0F9C84EE dhash:0x9C5D56AE +sNBTFlag__11J3DShapeMtx = .sbss:0x8074D081; // type:object size:0x1 data:byte hash:0x987989B1 dhash:0x6DF89211 +sLODFlag__11J3DShapeMtx = .sbss:0x8074D082; // type:object size:0x1 data:byte hash:0x0F9C84EE dhash:0x9C5D56AE sTexMtxLoadType__11J3DShapeMtx = .sbss:0x8074D084; // type:object size:0x4 scope:global data:4byte hash:0xAFD41013 dhash:0x51E0BE53 sMtxPtrTbl__21J3DShapeMtxConcatView = .sbss:0x8074D088; // type:object size:0x8 scope:global data:4byte hash:0x463C1072 dhash:0x3DA0F1F1 sTexGenBlock__17J3DDifferedTexMtx = .sbss:0x8074D090; // type:object size:0x4 scope:global data:4byte hash:0xD3582F52 dhash:0x9BA160B4 sTexMtxObj__17J3DDifferedTexMtx = .sbss:0x8074D094; // type:object size:0x4 scope:global data:4byte hash:0x8296A751 dhash:0x97A6E857 @LOCAL@makeVcdVatCmd__8J3DShapeFv@sInterruptFlag = .sbss:0x8074D098; // type:object size:0x4 scope:local data:4byte hash:0xED217CF0 dhash:0xA787D159 -lbl_8074D09C = .sbss:0x8074D09C; // type:object size:0x1 data:byte hash:0xD4034C98 dhash:0xFE28A8B1 +@GUARD@makeVcdVatCmd__8J3DShapeFv@sInterruptFlag = .sbss:0x8074D09C; // type:object size:0x1 data:byte hash:0xD4034C98 dhash:0xFE28A8B1 sOldVcdVatCmd__8J3DShape = .sbss:0x8074D0A0; // type:object size:0x4 scope:global data:4byte hash:0xC597E163 dhash:0xA1B8A75B -lbl_8074D0A4 = .sbss:0x8074D0A4; // type:object size:0x1 data:byte hash:0x13DE227E dhash:0xE33DEC66 +sEnvelopeFlag__8J3DShape = .sbss:0x8074D0A4; // type:object size:0x1 data:byte hash:0x13DE227E dhash:0xE33DEC66 SizeOfJ3DColorBlockLightOffLoad = .sbss:0x8074D0A8; // type:object size:0x4 scope:global data:4byte hash:0x0199BDD7 SizeOfJ3DColorBlockAmbientOnLoad = .sbss:0x8074D0AC; // type:object size:0x4 scope:global data:4byte hash:0x940F173F entryNum__13J3DDrawBuffer = .sbss:0x8074D0B0; // type:object size:0x4 scope:global data:4byte hash:0xFAD2AEB8 dhash:0xC16F8CFA @@ -69871,7 +69882,7 @@ j2dDefaultAlphaCmp = .sdata2:0x80752896; // type:object size:0x2 scope:global da @5795 = .sdata2:0x80752AB0; // type:object size:0x8 scope:local align:8 data:double hash:0x0C9C052B j3dDefaultColInfo = .sdata2:0x80752AB8; // type:object size:0x4 scope:global data:4byte hash:0x80FD297D j3dDefaultAmbInfo = .sdata2:0x80752ABC; // type:object size:0x4 scope:global data:4byte hash:0x387DE433 -lbl_80752AC0 = .sdata2:0x80752AC0; // type:object size:0x1 data:byte hash:0x97541C9C +j3dDefaultNumChans = .sdata2:0x80752AC0; // type:object size:0x1 data:byte hash:0x97541C9C j3dDefaultTevOrderInfoNull = .sdata2:0x80752AC4; // type:object size:0x4 scope:global hash:0xF84C08AF j3dDefaultIndTexOrderNull = .sdata2:0x80752AC8; // type:object size:0x4 scope:global hash:0xBD68470C j3dDefaultTevColor = .sdata2:0x80752AD0; // type:object size:0x8 scope:global data:4byte hash:0xD34E8CA9 diff --git a/configure.py b/configure.py index 198579ee58..c8592a73a3 100755 --- a/configure.py +++ b/configure.py @@ -629,36 +629,36 @@ config.libs = [ Object(MatchingFor(ALL), "f_op/f_op_scene_pause.cpp"), # f_pc - Object(MatchingFor(ALL_GCN), "f_pc/f_pc_base.cpp"), - Object(MatchingFor(ALL_GCN, ALL_SHIELD), "f_pc/f_pc_create_iter.cpp"), - Object(MatchingFor(ALL_GCN), "f_pc/f_pc_create_req.cpp"), - Object(MatchingFor(ALL_GCN, ALL_SHIELD), "f_pc/f_pc_create_tag.cpp"), - Object(MatchingFor(ALL_GCN, ALL_SHIELD), "f_pc/f_pc_creator.cpp"), - Object(MatchingFor(ALL_GCN, ALL_SHIELD), "f_pc/f_pc_delete_tag.cpp"), - Object(MatchingFor(ALL_GCN), "f_pc/f_pc_deletor.cpp"), - Object(MatchingFor(ALL_GCN, ALL_SHIELD), "f_pc/f_pc_draw_priority.cpp"), - Object(MatchingFor(ALL_GCN), "f_pc/f_pc_executor.cpp"), - Object(MatchingFor(ALL_GCN, "ShieldD"), "f_pc/f_pc_layer.cpp"), - Object(MatchingFor(ALL_GCN, "Shield"), "f_pc/f_pc_leaf.cpp"), - Object(MatchingFor(ALL_GCN, "ShieldD"), "f_pc/f_pc_layer_iter.cpp"), - Object(MatchingFor(ALL_GCN, "ShieldD"), "f_pc/f_pc_layer_tag.cpp"), - Object(MatchingFor(ALL_GCN, ALL_SHIELD), "f_pc/f_pc_line.cpp"), - Object(MatchingFor(ALL_GCN, "ShieldD"), "f_pc/f_pc_load.cpp"), + Object(MatchingFor(ALL_GCN, ALL_WII), "f_pc/f_pc_base.cpp"), + Object(MatchingFor(ALL), "f_pc/f_pc_create_iter.cpp"), + Object(MatchingFor(ALL_GCN, ALL_SHIELD), "f_pc/f_pc_create_req.cpp"), + Object(MatchingFor(ALL), "f_pc/f_pc_create_tag.cpp"), + Object(MatchingFor(ALL), "f_pc/f_pc_creator.cpp"), + Object(MatchingFor(ALL), "f_pc/f_pc_delete_tag.cpp"), + Object(MatchingFor(ALL_GCN, ALL_SHIELD), "f_pc/f_pc_deletor.cpp"), + Object(MatchingFor(ALL), "f_pc/f_pc_draw_priority.cpp"), + Object(MatchingFor(ALL), "f_pc/f_pc_executor.cpp"), + Object(MatchingFor(ALL_GCN, ALL_SHIELD), "f_pc/f_pc_layer.cpp"), + Object(MatchingFor(ALL), "f_pc/f_pc_leaf.cpp"), + Object(MatchingFor(ALL), "f_pc/f_pc_layer_iter.cpp"), + Object(MatchingFor(ALL), "f_pc/f_pc_layer_tag.cpp"), + Object(MatchingFor(ALL), "f_pc/f_pc_line.cpp"), + Object(MatchingFor(ALL), "f_pc/f_pc_load.cpp"), Object(MatchingFor(ALL_GCN), "f_pc/f_pc_manager.cpp"), - Object(MatchingFor(ALL_GCN, "ShieldD"), "f_pc/f_pc_method.cpp"), - Object(MatchingFor(ALL_GCN), "f_pc/f_pc_node.cpp"), - Object(MatchingFor(ALL_GCN), "f_pc/f_pc_node_req.cpp"), - Object(MatchingFor(ALL_GCN, "ShieldD"), "f_pc/f_pc_priority.cpp"), - Object(MatchingFor(ALL_GCN, ALL_SHIELD), "f_pc/f_pc_profile.cpp"), - Object(MatchingFor(ALL_GCN, ALL_SHIELD), "f_pc/f_pc_searcher.cpp"), - Object(MatchingFor(ALL_GCN, "ShieldD"), "f_pc/f_pc_line_tag.cpp"), - Object(MatchingFor(ALL_GCN, "ShieldD"), "f_pc/f_pc_line_iter.cpp"), - Object(MatchingFor(ALL_GCN, ALL_SHIELD), "f_pc/f_pc_method_iter.cpp"), - Object(MatchingFor(ALL_GCN, "ShieldD"), "f_pc/f_pc_method_tag.cpp"), - Object(MatchingFor(ALL_GCN, ALL_SHIELD), "f_pc/f_pc_pause.cpp"), - Object(MatchingFor(ALL_GCN, "ShieldD"), "f_pc/f_pc_draw.cpp"), - Object(MatchingFor(ALL_GCN, ALL_SHIELD), "f_pc/f_pc_fstcreate_req.cpp"), - Object(MatchingFor(ALL_GCN), "f_pc/f_pc_stdcreate_req.cpp"), + Object(MatchingFor(ALL), "f_pc/f_pc_method.cpp"), + Object(MatchingFor(ALL), "f_pc/f_pc_node.cpp"), + Object(MatchingFor(ALL_GCN, "ShieldD"), "f_pc/f_pc_node_req.cpp"), + Object(MatchingFor(ALL_GCN, ALL_SHIELD), "f_pc/f_pc_priority.cpp"), + Object(MatchingFor(ALL), "f_pc/f_pc_profile.cpp"), + Object(MatchingFor(ALL), "f_pc/f_pc_searcher.cpp"), + Object(MatchingFor(ALL), "f_pc/f_pc_line_tag.cpp"), + Object(MatchingFor(ALL), "f_pc/f_pc_line_iter.cpp"), + Object(MatchingFor(ALL), "f_pc/f_pc_method_iter.cpp"), + Object(MatchingFor(ALL), "f_pc/f_pc_method_tag.cpp"), + Object(MatchingFor(ALL), "f_pc/f_pc_pause.cpp"), + Object(MatchingFor(ALL), "f_pc/f_pc_draw.cpp"), + Object(MatchingFor(ALL), "f_pc/f_pc_fstcreate_req.cpp"), + Object(MatchingFor(ALL), "f_pc/f_pc_stdcreate_req.cpp"), Object(MatchingFor("ShieldD"), "f_pc/f_pc_debug_sv.cpp"), ], }, @@ -1084,7 +1084,7 @@ config.libs = [ Object(MatchingFor(ALL_GCN), "JSystem/JAudio2/JASOscillator.cpp"), Object(MatchingFor(ALL_GCN), "JSystem/JAudio2/JASAiCtrl.cpp"), Object(MatchingFor(ALL_GCN), "JSystem/JAudio2/JASAudioThread.cpp"), - Object(MatchingFor(ALL_GCN, "ShieldD"), "JSystem/JAudio2/JASAudioReseter.cpp"), + Object(MatchingFor(ALL_GCN), "JSystem/JAudio2/JASAudioReseter.cpp"), Object(MatchingFor(ALL_GCN, "ShieldD"), "JSystem/JAudio2/JASDSPChannel.cpp"), Object(MatchingFor(ALL_GCN), "JSystem/JAudio2/JASDSPInterface.cpp"), Object(MatchingFor(ALL_GCN), "JSystem/JAudio2/JASDriverIF.cpp"), @@ -1211,7 +1211,7 @@ config.libs = [ Object(MatchingFor(ALL_GCN), "Z2AudioLib/Z2SeMgr.cpp"), Object(MatchingFor(ALL_GCN), "Z2AudioLib/Z2SeqMgr.cpp"), Object(MatchingFor(ALL_GCN), "Z2AudioLib/Z2StatusMgr.cpp"), - Object(Equivalent, "Z2AudioLib/Z2SceneMgr.cpp"), # weak func order + Object(MatchingFor(ALL_GCN), "Z2AudioLib/Z2SceneMgr.cpp"), Object(MatchingFor(ALL_GCN), "Z2AudioLib/Z2FxLineMgr.cpp"), Object(MatchingFor(ALL_GCN), "Z2AudioLib/Z2SoundInfo.cpp"), Object(MatchingFor(ALL_GCN), "Z2AudioLib/Z2Audience.cpp"), @@ -1222,7 +1222,7 @@ config.libs = [ Object(MatchingFor(ALL_GCN), "Z2AudioLib/Z2EnvSeMgr.cpp"), Object(MatchingFor(ALL_GCN), "Z2AudioLib/Z2WolfHowlMgr.cpp"), Object(MatchingFor(ALL_GCN), "Z2AudioLib/Z2SpeechMgr2.cpp"), - Object(Equivalent, "Z2AudioLib/Z2AudioMgr.cpp"), # weak func order + Object(MatchingFor(ALL_GCN), "Z2AudioLib/Z2AudioMgr.cpp"), Object(NonMatching, "Z2AudioLib/Z2DebugSys.cpp"), Object(NonMatching, "Z2AudioLib/Z2F1TestWindow.cpp"), Object(NonMatching, "Z2AudioLib/Z2SoundPlayer.cpp"), diff --git a/include/DynamicLink.h b/include/DynamicLink.h index faf9a14322..f59cab5b3e 100644 --- a/include/DynamicLink.h +++ b/include/DynamicLink.h @@ -44,10 +44,8 @@ struct DynamicModuleControlBase { inline DynamicModuleControlBase* getNextClass() { return mNext; } bool isLinked() const { return mLinkCount != 0; } - #if DEBUG static void resetDoLinkCount() {} // TODO static void dumpTag() {} // TODO - #endif static DynamicModuleControlBase* mFirst; static DynamicModuleControlBase* mLast; diff --git a/include/JSystem/J2DGraph/J2DAnimation.h b/include/JSystem/J2DGraph/J2DAnimation.h index 5d2014cd61..035be59253 100644 --- a/include/JSystem/J2DGraph/J2DAnimation.h +++ b/include/JSystem/J2DGraph/J2DAnimation.h @@ -27,9 +27,13 @@ enum J2DAnmKind { class J2DAnmBase { public: J2DAnmBase() { - mFrame = 0; + mFrame = 0.0f; mFrameMax = 0; } + J2DAnmBase(s16 frameMax) { + mFrame = 0.0f; + mFrameMax = frameMax; + } virtual ~J2DAnmBase() {} virtual void searchUpdateMaterialID(J2DScreen*) {} @@ -54,10 +58,10 @@ class J2DAnmVtxColor : public J2DAnmBase { public: J2DAnmVtxColor() { mKind = KIND_VTX_COLOR; - for (s32 i = 0; i < ARRAY_SIZEU(mAnmTableNum); i++) { + for (int i = 0; i < ARRAY_SIZE(mAnmTableNum); i++) { mAnmTableNum[i] = NULL; } - for (s32 i = 0; i < ARRAY_SIZEU(mVtxColorIndexData); i++) { + for (int i = 0; i < ARRAY_SIZE(mVtxColorIndexData); i++) { mVtxColorIndexData[i] = NULL; } } @@ -92,7 +96,7 @@ struct J3DTextureSRTInfo; class J2DAnmVtxColorKey : public J2DAnmVtxColor { public: J2DAnmVtxColorKey() { - for (s32 i = 0; i < ARRAY_SIZEU(mInfoTable); i++) { + for (int i = 0; i < ARRAY_SIZE(mInfoTable); i++) { mInfoTable[i] = NULL; } } @@ -113,7 +117,7 @@ public: class J2DAnmVtxColorFull : public J2DAnmVtxColor { public: J2DAnmVtxColorFull() { - for (s32 i = 0; i < ARRAY_SIZEU(mInfoTable); i++) { + for (int i = 0; i < ARRAY_SIZE(mInfoTable); i++) { mInfoTable[i] = NULL; } } @@ -155,7 +159,7 @@ public: */ class J2DAnmTransform : public J2DAnmBase { public: - J2DAnmTransform(f32* pScaleValues, s16* pRotationValues, f32* pTranslateValues) { + J2DAnmTransform(s16 frameMax, f32* pScaleValues, s16* pRotationValues, f32* pTranslateValues) : J2DAnmBase(frameMax) { mScaleValues = pScaleValues; mRotationValues = pRotationValues; mTranslateValues = pTranslateValues; @@ -175,18 +179,18 @@ public: */ class J2DAnmTransformKey : public J2DAnmTransform { public: - J2DAnmTransformKey() : J2DAnmTransform(NULL, NULL, NULL) { + J2DAnmTransformKey() : J2DAnmTransform(0, NULL, NULL, NULL) { field_0x24 = 0; mInfoTable = NULL; } virtual ~J2DAnmTransformKey() {} virtual void getTransform(u16 p1, J3DTransformInfo* pInfo) const { - this->calcTransform(getFrame(), p1, pInfo); + this->calcTransform(mFrame, p1, pInfo); } virtual void calcTransform(f32, u16, J3DTransformInfo*) const; /* 0x1C */ u8 field_0x1c[6]; - /* 0x22 */ s16 field_0x22; + /* 0x22 */ u16 field_0x22; /* 0x24 */ u32 field_0x24; /* 0x28 */ J3DAnmTransformKeyTable* mInfoTable; }; @@ -197,7 +201,7 @@ public: */ class J2DAnmTransformFull : public J2DAnmTransform { public: - J2DAnmTransformFull() : J2DAnmTransform(NULL, NULL, NULL) { mTableInfo = NULL; } + J2DAnmTransformFull() : J2DAnmTransform(0, NULL, NULL, NULL) { mTableInfo = NULL; } virtual ~J2DAnmTransformFull() {} virtual void getTransform(u16, J3DTransformInfo*) const; @@ -214,21 +218,13 @@ class J2DAnmTextureSRTKey : public J2DAnmBase { public: J2DAnmTextureSRTKey() { field_0x10 = 0; - field_0x1e = 0; - field_0x1c = 0; - field_0x1a = 0; - mUpdateMaterialNum = 0; + mUpdateMaterialNum = field_0x1a = field_0x1c = field_0x1e = 0; mInfoTable = NULL; - mTranslationValues = NULL; - mScaleValues = NULL; + mScaleValues = mTranslationValues = NULL; mRotationValues = NULL; - field_0x4c = 0; - field_0x4a = 0; - field_0x48 = 0; - field_0x4e = 0; + field_0x4e = field_0x48 = field_0x4a = field_0x4c = 0; field_0x5c = NULL; - field_0x58 = NULL; - field_0x50 = NULL; + field_0x50 = field_0x58 = NULL; field_0x54 = NULL; field_0x7c = 0; mKind = KIND_TEXTURE_SRT; @@ -238,9 +234,15 @@ public: virtual ~J2DAnmTextureSRTKey() {} virtual void searchUpdateMaterialID(J2DScreen*); u16 getUpdateMaterialNum() const { return mUpdateMaterialNum / 3; } - u16 getUpdateMaterialID(u16 i) const { return mUpdateMaterialID[i]; } - u8 getUpdateTexMtxID(u16 i) const { return mUpdateTexMtxID[i]; } - void getTransform(u16 param_1, J3DTextureSRTInfo* param_2) { + u16 getUpdateMaterialID(u16 i) const { + J3D_PANIC(514, i < mUpdateMaterialNum / 3 && i >= 0, "Error : range over."); + return mUpdateMaterialID[i]; + } + u8 getUpdateTexMtxID(u16 i) const { + J3D_PANIC(513, i < mUpdateMaterialNum / 3 && i >= 0, "Error : range over."); + return mUpdateTexMtxID[i]; + } + void getTransform(u16 param_1, J3DTextureSRTInfo* param_2) const { calcTransform(mFrame, param_1, param_2); } @@ -279,8 +281,13 @@ public: class J2DAnmTexPattern : public J2DAnmBase { public: struct J2DAnmTexPatternTIMGPointer { - J2DAnmTexPatternTIMGPointer(); - ~J2DAnmTexPatternTIMGPointer(); + J2DAnmTexPatternTIMGPointer() { + mRes = NULL; + mPalette = NULL; + } + ~J2DAnmTexPatternTIMGPointer() { + delete mPalette; + } /* 0x0 */ ResTIMG* mRes; /* 0x4 */ JUTPalette* mPalette; @@ -302,7 +309,10 @@ public: virtual ~J2DAnmTexPattern() { delete[] mTIMGPtrArray; } virtual void searchUpdateMaterialID(J2DScreen*); u16 getUpdateMaterialNum() const { return mUpdateMaterialNum; } - u16 getUpdateMaterialID(u16 i) const { return mUpdateMaterialID[i]; } + u16 getUpdateMaterialID(u16 i) const { + J3D_PANIC(619, i < mUpdateMaterialNum, "Error : range over."); + return mUpdateMaterialID[i]; + } J3DAnmTexPatternFullTable* getAnmTable() const { return mAnmTable; } /* 0x10 */ u16* mValues; @@ -321,39 +331,31 @@ public: class J2DAnmTevRegKey : public J2DAnmBase { public: J2DAnmTevRegKey() { - mKRegUpdateMaterialNum = 0; - mCRegUpdateMaterialNum = 0; - field_0x1a = 0; - field_0x18 = 0; - field_0x16 = 0; - field_0x14 = 0; - field_0x22 = 0; - field_0x20 = 0; - field_0x1e = 0; - field_0x1c = 0; - mKRegUpdateMaterialID = NULL; - mCRegUpdateMaterialID = NULL; - mCAValues = NULL; - mCBValues = NULL; - mCGValues = NULL; - mCRValues = NULL; - mKAValues = NULL; - mKBValues = NULL; - mKGValues = NULL; - mKRValues = NULL; + mCRegUpdateMaterialNum = mKRegUpdateMaterialNum = 0; + field_0x14 = field_0x16 = field_0x18 = field_0x1a = 0; + field_0x1c = field_0x1e = field_0x20 = field_0x22 = 0; + mCRegUpdateMaterialID = mKRegUpdateMaterialID = NULL; + mCRValues = mCGValues = mCBValues = mCAValues = NULL; + mKRValues = mKGValues = mKBValues = mKAValues = NULL; mKind = KIND_TEV_REG; } - void getTevColorReg(u16, _GXColorS10*) const; - void getTevKonstReg(u16, _GXColor*) const; + void getTevColorReg(u16, GXColorS10*) const; + void getTevKonstReg(u16, GXColor*) const; virtual ~J2DAnmTevRegKey() {} virtual void searchUpdateMaterialID(J2DScreen* pScreen); u16 getCRegUpdateMaterialNum() const { return mCRegUpdateMaterialNum; } - u16 getCRegUpdateMaterialID(u16 i) const { return mCRegUpdateMaterialID[i]; } + u16 getCRegUpdateMaterialID(u16 i) const { + J3D_PANIC(770, i < mCRegUpdateMaterialNum, "Error : range over."); + return mCRegUpdateMaterialID[i]; + } u16 getKRegUpdateMaterialNum() const { return mKRegUpdateMaterialNum; } - u16 getKRegUpdateMaterialID(u16 i) const { return mKRegUpdateMaterialID[i]; } + u16 getKRegUpdateMaterialID(u16 i) const { + J3D_PANIC(778, i < mKRegUpdateMaterialNum, "Error : range over."); + return mKRegUpdateMaterialID[i]; + } J3DAnmCRegKeyTable* getAnmCRegKeyTable() const { return mAnmCRegKeyTable; } J3DAnmKRegKeyTable* getAnmKRegKeyTable() const { return mAnmKRegKeyTable; } @@ -391,10 +393,7 @@ public: class J2DAnmColor : public J2DAnmBase { public: J2DAnmColor() { - field_0x16 = 0; - field_0x14 = 0; - field_0x12 = 0; - field_0x10 = 0; + field_0x10 = field_0x12 = field_0x14 = field_0x16 = 0; mUpdateMaterialNum = 0; mUpdateMaterialID = NULL; mKind = KIND_COLOR; @@ -403,7 +402,10 @@ public: virtual void searchUpdateMaterialID(J2DScreen*); virtual void getColor(u16, _GXColor*) const {} u16 getUpdateMaterialNum() const { return mUpdateMaterialNum; } - u16 getUpdateMaterialID(u16 i) const { return mUpdateMaterialID[i]; } + u16 getUpdateMaterialID(u16 i) const { + J3D_PANIC(224, i < mUpdateMaterialNum, "Error : range over."); + return mUpdateMaterialID[i]; + } /* 0x10 */ u16 field_0x10; /* 0x12 */ u16 field_0x12; @@ -475,17 +477,12 @@ public: /* 0x40 */ J3DAnmColorFullTable* mInfoTable; }; -template -inline f32 J2DHermiteInterpolation(f32, T*, T*, T*, T*, T*, T*); - -template <> -inline f32 J2DHermiteInterpolation(f32 f1, f32* f2, f32* f3, f32* f4, f32* f5, f32* f6, - f32* f7) { +inline f32 J2DHermiteInterpolation(f32 f1, const f32* f2, const f32* f3, const f32* f4, const f32* f5, const f32* f6, + const f32* f7) { return JMAHermiteInterpolation(f1, *f2, *f3, *f4, *f5, *f6, *f7); } -template <> -inline f32 J2DHermiteInterpolation(__REGISTER f32 pp1, __REGISTER s16* pp2, __REGISTER s16* pp3, +inline f32 J2DHermiteInterpolation(__REGISTER f32 pp1, __REGISTER s16* pp2, __REGISTER s16* pp3, __REGISTER s16* pp4, __REGISTER s16* pp5, __REGISTER s16* pp6, __REGISTER s16* pp7) { #ifdef __MWERKS__ diff --git a/include/JSystem/J2DGraph/J2DGrafContext.h b/include/JSystem/J2DGraph/J2DGrafContext.h index 46f30819f4..209ff61e30 100644 --- a/include/JSystem/J2DGraph/J2DGrafContext.h +++ b/include/JSystem/J2DGraph/J2DGrafContext.h @@ -49,6 +49,8 @@ public: virtual s32 getGrafType() const { return 0; } virtual void setLookat() {} + JGeometry::TBox2* getBounds() { return &mBounds; } + public: /* 0x04 */ JGeometry::TBox2 mBounds; /* 0x14 */ JGeometry::TBox2 mScissorBounds; diff --git a/include/JSystem/J2DGraph/J2DManage.h b/include/JSystem/J2DGraph/J2DManage.h index f8d8a20ae2..4a5b39a2a1 100644 --- a/include/JSystem/J2DGraph/J2DManage.h +++ b/include/JSystem/J2DGraph/J2DManage.h @@ -13,7 +13,7 @@ struct J2DResReference { /* 0x00 */ u16 mCount; /* 0x02 */ u16 mOffsets[1]; - s8* getResReference(u16) const; + char* getResReference(u16) const; char* getName(u16) const; }; diff --git a/include/JSystem/J2DGraph/J2DMatBlock.h b/include/JSystem/J2DGraph/J2DMatBlock.h index 381f581f07..36db0fe0a5 100644 --- a/include/JSystem/J2DGraph/J2DMatBlock.h +++ b/include/JSystem/J2DGraph/J2DMatBlock.h @@ -73,7 +73,7 @@ public: virtual u32 getType() = 0; virtual u8 getMaxStage() = 0; virtual void setTexNo(u32, u16) {} - virtual u32 getTexNo(u32) const { return 0xFFFF; } + virtual u16 getTexNo(u32) const { return 0xFFFF; } virtual void setFontNo(u16) {} virtual u16 getFontNo() const { return 0xFFFF; } virtual void setTevOrder(u32, J2DTevOrder) {} @@ -127,46 +127,84 @@ public: virtual void loadTexture(_GXTexMapID, u32); virtual u32 getType() { return 'TVB1'; } virtual u8 getMaxStage() { return 1; } - virtual void setTexNo(u32 index, u16 texNo) { mTexNo[index] = texNo; } - virtual u32 getTexNo(u32 index) const { return mTexNo[index]; } + virtual void setTexNo(u32 index, u16 texNo) { + J3D_PANIC(241, index < 1, "Error : range over."); + mTexNo[index] = texNo; + } + virtual u16 getTexNo(u32 index) const { + J3D_PANIC(242, index < 1, "Error : range over."); + return mTexNo[index]; + } virtual void setFontNo(u16 fontNo) { mFontNo = fontNo; } virtual u16 getFontNo() const { return mFontNo; } virtual void setTevOrder(u32 index, J2DTevOrder order) { + J3D_PANIC(247, index < 1, "Error : range over."); mTevOrder[index] = order; } - virtual J2DTevOrder* getTevOrder(u32 index) { return &mTevOrder[index]; } + virtual J2DTevOrder* getTevOrder(u32 index) { + J3D_PANIC(248, index < 1, "Error : range over."); + return &mTevOrder[index]; + } virtual void setTevColor(u32 index, J2DGXColorS10 color) { J3D_PANIC(250, index < 4, "Error : range over."); mTevColor[index] = color; } - virtual J2DGXColorS10* getTevColor(u32 index) { return &mTevColor[index]; } + virtual J2DGXColorS10* getTevColor(u32 index) { + J3D_PANIC(251, index < 4, "Error : range over."); + return &mTevColor[index]; + } virtual void setTevKColor(u32 index, JUtility::TColor color) { + J3D_PANIC(253, index < 4, "Error : range over."); mTevKColor[index] = color; } - virtual JUtility::TColor* getTevKColor(u32 index) { return &mTevKColor[index]; } - virtual void setTevKColorSel(u32 index, u8 sel) { mTevKColorSel[index] = sel; } - virtual u8 getTevKColorSel(u32 index) { return mTevKColorSel[index]; } - virtual void setTevKAlphaSel(u32 index, u8 sel) { mTevKAlphaSel[index] = sel; } - virtual u8 getTevKAlphaSel(u32 index) { return mTevKAlphaSel[index]; } + virtual JUtility::TColor* getTevKColor(u32 index) { + J3D_PANIC(254, index < 4, "Error : range over."); + return &mTevKColor[index]; + } + virtual void setTevKColorSel(u32 index, u8 sel) { + J3D_PANIC(256, index < 1, "Error : range over."); + mTevKColorSel[index] = sel; + } + virtual u8 getTevKColorSel(u32 index) { + J3D_PANIC(257, index < 1, "Error : range over."); + return mTevKColorSel[index]; + } + virtual void setTevKAlphaSel(u32 index, u8 sel) { + J3D_PANIC(259, index < 1, "Error : range over."); + mTevKAlphaSel[index] = sel; + } + virtual u8 getTevKAlphaSel(u32 index) { + J3D_PANIC(260, index < 1, "Error : range over."); + return mTevKAlphaSel[index]; + } virtual void setTevStageNum(u8 num) {} virtual u8 getTevStageNum() const { return 1; } virtual void setTevStage(u32 index, J2DTevStage stage) { + J3D_PANIC(265, index < 1, "Error : range over."); mTevStage[index] = stage; } - virtual J2DTevStage* getTevStage(u32 index) { return &mTevStage[index]; } + virtual J2DTevStage* getTevStage(u32 index) { + J3D_PANIC(266, index < 1, "Error : range over."); + return &mTevStage[index]; + } virtual void setTevSwapModeInfo(u32 index, J2DTevSwapModeInfo info) { + J3D_PANIC(268, index < 1, "Error : range over."); mTevStage[index].setTevSwapModeInfo(info); } virtual void setTevSwapModeTable(u32 index, J2DTevSwapModeTable table) { + J3D_PANIC(270, index < 4, "Error : range over."); mTevSwapModeTable[index] = table; } virtual J2DTevSwapModeTable* getTevSwapModeTable(u32 index) { + J3D_PANIC(271, index < 4, "Error : range over."); return &mTevSwapModeTable[index]; } virtual void setIndTevStage(u32 index, J2DIndTevStage stage) { + J3D_PANIC(273, index < 1, "Error : range over."); mIndTevStage[index] = stage; } virtual J2DIndTevStage* getIndTevStage(u32 index) { + J3D_PANIC(274, index < 1, "Error : range over."); return &mIndTevStage[index]; } virtual bool insertTexture(u32 index, ResTIMG const* p_timg) { @@ -182,14 +220,20 @@ public: virtual bool setPalette(u32, ResTLUT const*); virtual bool prepareTexture(u8); virtual JUTTexture* getTexture(u32 index) { - return index >= 1 ? NULL : mTexture[index]; + if (index >= 1) { + return NULL; + } + return mTexture[index]; } virtual JUTPalette* getPalette(u32 index) { - return index >= 1 ? NULL : mPalette[index]; + if (index >= 1) { + return NULL; + } + return mPalette[index]; } virtual JUTFont* getFont() { return mFont; } virtual void shiftDeleteFlag(u8, bool); - virtual void setUndeleteFlag(u8 flag) { mUndeleteFlag &= flag; } + virtual void setUndeleteFlag(u8 flag) { mUndeleteFlag = mUndeleteFlag & flag; } virtual void setFontUndeleteFlag() { mUndeleteFlag &= 0x7F; } virtual ~J2DTevBlock1(); @@ -223,46 +267,84 @@ public: virtual void loadTexture(_GXTexMapID, u32); virtual u32 getType() { return 'TVB2'; } virtual u8 getMaxStage() { return 2; } - virtual void setTexNo(u32 index, u16 texNo) { mTexNo[index] = texNo; } - virtual u32 getTexNo(u32 index) const { return mTexNo[index]; } + virtual void setTexNo(u32 index, u16 texNo) { + J3D_PANIC(351, index < 2, "Error : range over."); + mTexNo[index] = texNo; + } + virtual u16 getTexNo(u32 index) const { + J3D_PANIC(352, index < 2, "Error : range over."); + return mTexNo[index]; + } virtual void setFontNo(u16 fontNo) { mFontNo = fontNo; } virtual u16 getFontNo() const { return mFontNo; } virtual void setTevOrder(u32 index, J2DTevOrder order) { + J3D_PANIC(357, index < 2, "Error : range over."); mTevOrder[index] = order; } - virtual J2DTevOrder* getTevOrder(u32 index) { return &mTevOrder[index]; } + virtual J2DTevOrder* getTevOrder(u32 index) { + J3D_PANIC(358, index < 2, "Error : range over."); + return &mTevOrder[index]; + } virtual void setTevColor(u32 index, J2DGXColorS10 color) { J3D_PANIC(360, index < 4, "Error : range over."); mTevColor[index] = color; } - virtual J2DGXColorS10* getTevColor(u32 index) { return &mTevColor[index]; } + virtual J2DGXColorS10* getTevColor(u32 index) { + J3D_PANIC(361, index < 4, "Error : range over."); + return &mTevColor[index]; + } virtual void setTevKColor(u32 index, JUtility::TColor color) { + J3D_PANIC(363, index < 4, "Error : range over."); mTevKColor[index] = color; } - virtual JUtility::TColor* getTevKColor(u32 index) { return &mTevKColor[index]; } - virtual void setTevKColorSel(u32 index, u8 sel) { mTevKColorSel[index] = sel; } - virtual u8 getTevKColorSel(u32 index) { return mTevKColorSel[index]; } - virtual void setTevKAlphaSel(u32 index, u8 sel) { mTevKAlphaSel[index] = sel; } - virtual u8 getTevKAlphaSel(u32 index) { return mTevKAlphaSel[index]; } + virtual JUtility::TColor* getTevKColor(u32 index) { + J3D_PANIC(364, index < 4, "Error : range over."); + return &mTevKColor[index]; + } + virtual void setTevKColorSel(u32 index, u8 sel) { + J3D_PANIC(366, index < 2, "Error : range over."); + mTevKColorSel[index] = sel; + } + virtual u8 getTevKColorSel(u32 index) { + J3D_PANIC(367, index < 2, "Error : range over."); + return mTevKColorSel[index]; + } + virtual void setTevKAlphaSel(u32 index, u8 sel) { + J3D_PANIC(369, index < 2, "Error : range over."); + mTevKAlphaSel[index] = sel; + } + virtual u8 getTevKAlphaSel(u32 index) { + J3D_PANIC(370, index < 2, "Error : range over."); + return mTevKAlphaSel[index]; + } virtual void setTevStageNum(u8 num) { mTevStageNum = num; } virtual u8 getTevStageNum() const { return mTevStageNum; } virtual void setTevStage(u32 index, J2DTevStage stage) { + J3D_PANIC(375, index < 2, "Error : range over."); mTevStage[index] = stage; } - virtual J2DTevStage* getTevStage(u32 index) { return &mTevStage[index]; } + virtual J2DTevStage* getTevStage(u32 index) { + J3D_PANIC(376, index < 2, "Error : range over."); + return &mTevStage[index]; + } virtual void setTevSwapModeInfo(u32 index, J2DTevSwapModeInfo info) { + J3D_PANIC(378, index < 2, "Error : range over."); mTevStage[index].setTevSwapModeInfo(info); } virtual void setTevSwapModeTable(u32 index, J2DTevSwapModeTable table) { + J3D_PANIC(380, index < 4, "Error : range over."); mTevSwapModeTable[index] = table; } virtual J2DTevSwapModeTable* getTevSwapModeTable(u32 index) { + J3D_PANIC(381, index < 4, "Error : range over."); return &mTevSwapModeTable[index]; } virtual void setIndTevStage(u32 index, J2DIndTevStage stage) { + J3D_PANIC(383, index < 2, "Error : range over."); mIndTevStage[index] = stage; } virtual J2DIndTevStage* getIndTevStage(u32 index) { + J3D_PANIC(384, index < 2, "Error : range over."); return &mIndTevStage[index]; } virtual bool insertTexture(u32 index, ResTIMG const* p_timg) { @@ -278,14 +360,20 @@ public: virtual bool setPalette(u32, ResTLUT const*); virtual bool prepareTexture(u8); virtual JUTTexture* getTexture(u32 index) { - return index >= 2 ? NULL : mTexture[index]; + if (index >= 2) { + return NULL; + } + return mTexture[index]; } virtual JUTPalette* getPalette(u32 index) { - return index >= 2 ? NULL : mPalette[index]; + if (index >= 2) { + return NULL; + } + return mPalette[index]; } virtual JUTFont* getFont() { return mFont; } virtual void shiftDeleteFlag(u8, bool); - virtual void setUndeleteFlag(u8 flag) { mUndeleteFlag &= flag; } + virtual void setUndeleteFlag(u8 flag) { mUndeleteFlag = mUndeleteFlag & flag; } virtual void setFontUndeleteFlag() { mUndeleteFlag &= 0x7F; } virtual ~J2DTevBlock2(); @@ -321,46 +409,84 @@ public: virtual void loadTexture(_GXTexMapID, u32); virtual u32 getType() { return 'TVB4'; } virtual u8 getMaxStage() { return 4; } - virtual void setTexNo(u32 index, u16 texNo) { mTexNo[index] = texNo; } - virtual u32 getTexNo(u32 index) const { return mTexNo[index]; } + virtual void setTexNo(u32 index, u16 texNo) { + J3D_PANIC(459, index < 4, "Error : range over."); + mTexNo[index] = texNo; + } + virtual u16 getTexNo(u32 index) const { + J3D_PANIC(460, index < 4, "Error : range over."); + return mTexNo[index]; + } virtual void setFontNo(u16 fontNo) { mFontNo = fontNo; } virtual u16 getFontNo() const { return mFontNo; } virtual void setTevOrder(u32 index, J2DTevOrder order) { + J3D_PANIC(465, index < 4, "Error : range over."); mTevOrder[index] = order; } - virtual J2DTevOrder* getTevOrder(u32 index) { return &mTevOrder[index]; } + virtual J2DTevOrder* getTevOrder(u32 index) { + J3D_PANIC(466, index < 4, "Error : range over."); + return &mTevOrder[index]; + } virtual void setTevColor(u32 index, J2DGXColorS10 color) { J3D_PANIC(468, index < 4, "Error : range over."); mTevColor[index] = color; } - virtual J2DGXColorS10* getTevColor(u32 index) { return &mTevColor[index]; } + virtual J2DGXColorS10* getTevColor(u32 index) { + J3D_PANIC(469, index < 4, "Error : range over."); + return &mTevColor[index]; + } virtual void setTevKColor(u32 index, JUtility::TColor color) { + J3D_PANIC(471, index < 4, "Error : range over."); mTevKColor[index] = color; } - virtual JUtility::TColor* getTevKColor(u32 index) { return &mTevKColor[index]; } - virtual void setTevKColorSel(u32 index, u8 sel) { mTevKColorSel[index] = sel; } - virtual u8 getTevKColorSel(u32 index) { return mTevKColorSel[index]; } - virtual void setTevKAlphaSel(u32 index, u8 sel) { mTevKAlphaSel[index] = sel; } - virtual u8 getTevKAlphaSel(u32 index) { return mTevKAlphaSel[index]; } + virtual JUtility::TColor* getTevKColor(u32 index) { + J3D_PANIC(472, index < 4, "Error : range over."); + return &mTevKColor[index]; + } + virtual void setTevKColorSel(u32 index, u8 sel) { + J3D_PANIC(474, index < 4, "Error : range over."); + mTevKColorSel[index] = sel; + } + virtual u8 getTevKColorSel(u32 index) { + J3D_PANIC(475, index < 4, "Error : range over."); + return mTevKColorSel[index]; + } + virtual void setTevKAlphaSel(u32 index, u8 sel) { + J3D_PANIC(477, index < 4, "Error : range over."); + mTevKAlphaSel[index] = sel; + } + virtual u8 getTevKAlphaSel(u32 index) { + J3D_PANIC(478, index < 4, "Error : range over."); + return mTevKAlphaSel[index]; + } virtual void setTevStageNum(u8 num) { mTevStageNum = num; } virtual u8 getTevStageNum() const { return mTevStageNum; } virtual void setTevStage(u32 index, J2DTevStage stage) { + J3D_PANIC(483, index < 4, "Error : range over."); mTevStage[index] = stage; } - virtual J2DTevStage* getTevStage(u32 index) { return &mTevStage[index]; } + virtual J2DTevStage* getTevStage(u32 index) { + J3D_PANIC(484, index < 4, "Error : range over."); + return &mTevStage[index]; + } virtual void setTevSwapModeInfo(u32 index, J2DTevSwapModeInfo info) { + J3D_PANIC(486, index < 4, "Error : range over."); mTevStage[index].setTevSwapModeInfo(info); } virtual void setTevSwapModeTable(u32 index, J2DTevSwapModeTable table) { + J3D_PANIC(488, index < 4, "Error : range over."); mTevSwapModeTable[index] = table; } virtual J2DTevSwapModeTable* getTevSwapModeTable(u32 index) { + J3D_PANIC(489, index < 4, "Error : range over."); return &mTevSwapModeTable[index]; } virtual void setIndTevStage(u32 index, J2DIndTevStage stage) { + J3D_PANIC(491, index < 4, "Error : range over."); mIndTevStage[index] = stage; } virtual J2DIndTevStage* getIndTevStage(u32 index) { + J3D_PANIC(492, index < 4, "Error : range over."); return &mIndTevStage[index]; } virtual bool insertTexture(u32 index, ResTIMG const* p_timg) { @@ -376,14 +502,20 @@ public: virtual bool setPalette(u32, ResTLUT const*); virtual bool prepareTexture(u8); virtual JUTTexture* getTexture(u32 index) { - return index >= 4 ? NULL : mTexture[index]; + if (index >= 4) { + return NULL; + } + return mTexture[index]; } virtual JUTPalette* getPalette(u32 index) { - return index >= 4 ? NULL : mPalette[index]; + if (index >= 4) { + return NULL; + } + return mPalette[index]; } virtual JUTFont* getFont() { return mFont; } virtual void shiftDeleteFlag(u8, bool); - virtual void setUndeleteFlag(u8 flag) { mUndeleteFlag &= flag; } + virtual void setUndeleteFlag(u8 flag) { mUndeleteFlag = mUndeleteFlag & flag; } virtual void setFontUndeleteFlag() { mUndeleteFlag &= 0x7F; } virtual ~J2DTevBlock4(); @@ -419,46 +551,84 @@ public: virtual void loadTexture(_GXTexMapID, u32); virtual u32 getType() { return 'TVB8'; } virtual u8 getMaxStage() { return 8; } - virtual void setTexNo(u32 index, u16 texNo) { mTexNo[index] = texNo; } - virtual u32 getTexNo(u32 index) const { return mTexNo[index]; } + virtual void setTexNo(u32 index, u16 texNo) { + J3D_PANIC(570, index < 8, "Error : range over."); + mTexNo[index] = texNo; + } + virtual u16 getTexNo(u32 index) const { + J3D_PANIC(571, index < 8, "Error : range over."); + return mTexNo[index]; + } virtual void setFontNo(u16 fontNo) { mFontNo = fontNo; } virtual u16 getFontNo() const { return mFontNo; } virtual void setTevOrder(u32 index, J2DTevOrder order) { + J3D_PANIC(576, index < 8, "Error : range over."); mTevOrder[index] = order; } - virtual J2DTevOrder* getTevOrder(u32 index) { return &mTevOrder[index]; } + virtual J2DTevOrder* getTevOrder(u32 index) { + J3D_PANIC(577, index < 8, "Error : range over."); + return &mTevOrder[index]; + } virtual void setTevColor(u32 index, J2DGXColorS10 color) { J3D_PANIC(579, index < 4, "Error : range over."); mTevColor[index] = color; } - virtual J2DGXColorS10* getTevColor(u32 index) { return &mTevColor[index]; } + virtual J2DGXColorS10* getTevColor(u32 index) { + J3D_PANIC(580, index < 4, "Error : range over."); + return &mTevColor[index]; + } virtual void setTevKColor(u32 index, JUtility::TColor color) { + J3D_PANIC(582, index < 4, "Error : range over."); mTevKColor[index] = color; } - virtual JUtility::TColor* getTevKColor(u32 index) { return &mTevKColor[index]; } - virtual void setTevKColorSel(u32 index, u8 sel) { mTevKColorSel[index] = sel; } - virtual u8 getTevKColorSel(u32 index) { return mTevKColorSel[index]; } - virtual void setTevKAlphaSel(u32 index, u8 sel) { mTevKAlphaSel[index] = sel; } - virtual u8 getTevKAlphaSel(u32 index) { return mTevKAlphaSel[index]; } + virtual JUtility::TColor* getTevKColor(u32 index) { + J3D_PANIC(583, index < 4, "Error : range over."); + return &mTevKColor[index]; + } + virtual void setTevKColorSel(u32 index, u8 sel) { + J3D_PANIC(585, index < 8, "Error : range over."); + mTevKColorSel[index] = sel; + } + virtual u8 getTevKColorSel(u32 index) { + J3D_PANIC(586, index < 8, "Error : range over."); + return mTevKColorSel[index]; + } + virtual void setTevKAlphaSel(u32 index, u8 sel) { + J3D_PANIC(588, index < 8, "Error : range over."); + mTevKAlphaSel[index] = sel; + } + virtual u8 getTevKAlphaSel(u32 index) { + J3D_PANIC(589, index < 8, "Error : range over."); + return mTevKAlphaSel[index]; + } virtual void setTevStageNum(u8 num) { mTevStageNum = num; } virtual u8 getTevStageNum() const { return mTevStageNum; } virtual void setTevStage(u32 index, J2DTevStage stage) { + J3D_PANIC(594, index < 8, "Error : range over."); mTevStage[index] = stage; } - virtual J2DTevStage* getTevStage(u32 index) { return &mTevStage[index]; } + virtual J2DTevStage* getTevStage(u32 index) { + J3D_PANIC(595, index < 8, "Error : range over."); + return &mTevStage[index]; + } virtual void setTevSwapModeInfo(u32 index, J2DTevSwapModeInfo info) { + J3D_PANIC(597, index < 8, "Error : range over."); mTevStage[index].setTevSwapModeInfo(info); } virtual void setTevSwapModeTable(u32 index, J2DTevSwapModeTable table) { + J3D_PANIC(599, index < 4, "Error : range over."); mTevSwapModeTable[index] = table; } virtual J2DTevSwapModeTable* getTevSwapModeTable(u32 index) { + J3D_PANIC(600, index < 4, "Error : range over."); return &mTevSwapModeTable[index]; } virtual void setIndTevStage(u32 index, J2DIndTevStage stage) { + J3D_PANIC(602, index < 8, "Error : range over."); mIndTevStage[index] = stage; } virtual J2DIndTevStage* getIndTevStage(u32 index) { + J3D_PANIC(603, index < 8, "Error : range over."); return &mIndTevStage[index]; } virtual bool insertTexture(u32 index, ResTIMG const* p_timg) { @@ -474,14 +644,20 @@ public: virtual bool setPalette(u32, ResTLUT const*); virtual bool prepareTexture(u8); virtual JUTTexture* getTexture(u32 index) { - return index >= 8 ? NULL : mTexture[index]; + if (index >= 8) { + return NULL; + } + return mTexture[index]; } virtual JUTPalette* getPalette(u32 index) { - return index >= 8 ? NULL : mPalette[index]; + if (index >= 8) { + return NULL; + } + return mPalette[index]; } virtual JUTFont* getFont() { return mFont; } virtual void shiftDeleteFlag(u8, bool); - virtual void setUndeleteFlag(u8 flag) { mUndeleteFlag &= flag; } + virtual void setUndeleteFlag(u8 flag) { mUndeleteFlag = mUndeleteFlag & flag; } virtual void setFontUndeleteFlag() { mFontUndeleteFlag = false; } virtual ~J2DTevBlock8(); @@ -518,46 +694,84 @@ public: virtual void loadTexture(_GXTexMapID, u32); virtual u32 getType() { return 'TV16'; } virtual u8 getMaxStage() { return 16; } - virtual void setTexNo(u32 index, u16 texNo) { mTexNo[index] = texNo; } - virtual u32 getTexNo(u32 index) const { return mTexNo[index]; } + virtual void setTexNo(u32 index, u16 texNo) { + J3D_PANIC(682, index < 8, "Error : range over."); + mTexNo[index] = texNo; + } + virtual u16 getTexNo(u32 index) const { + J3D_PANIC(683, index < 8, "Error : range over."); + return mTexNo[index]; + } virtual void setFontNo(u16 fontNo) { mFontNo = fontNo; } virtual u16 getFontNo() const { return mFontNo; } virtual void setTevOrder(u32 index, J2DTevOrder order) { + J3D_PANIC(688, index < 16, "Error : range over."); mTevOrder[index] = order; } - virtual J2DTevOrder* getTevOrder(u32 index) { return &mTevOrder[index]; } + virtual J2DTevOrder* getTevOrder(u32 index) { + J3D_PANIC(689, index < 16, "Error : range over."); + return &mTevOrder[index]; + } virtual void setTevColor(u32 index, J2DGXColorS10 color) { J3D_PANIC(691, index < 4, "Error : range over."); mTevColor[index] = color; } - virtual J2DGXColorS10* getTevColor(u32 index) { return &mTevColor[index]; } + virtual J2DGXColorS10* getTevColor(u32 index) { + J3D_PANIC(692, index < 4, "Error : range over."); + return &mTevColor[index]; + } virtual void setTevKColor(u32 index, JUtility::TColor color) { + J3D_PANIC(694, index < 4, "Error : range over."); mTevKColor[index] = color; } - virtual JUtility::TColor* getTevKColor(u32 index) { return &mTevKColor[index]; } - virtual void setTevKColorSel(u32 index, u8 sel) { mTevKColorSel[index] = sel; } - virtual u8 getTevKColorSel(u32 index) { return mTevKColorSel[index]; } - virtual void setTevKAlphaSel(u32 index, u8 sel) { mTevKAlphaSel[index] = sel; } - virtual u8 getTevKAlphaSel(u32 index) { return mTevKAlphaSel[index]; } + virtual JUtility::TColor* getTevKColor(u32 index) { + J3D_PANIC(695, index < 4, "Error : range over."); + return &mTevKColor[index]; + } + virtual void setTevKColorSel(u32 index, u8 sel) { + J3D_PANIC(697, index < 16, "Error : range over."); + mTevKColorSel[index] = sel; + } + virtual u8 getTevKColorSel(u32 index) { + J3D_PANIC(698, index < 16, "Error : range over."); + return mTevKColorSel[index]; + } + virtual void setTevKAlphaSel(u32 index, u8 sel) { + J3D_PANIC(700, index < 16, "Error : range over."); + mTevKAlphaSel[index] = sel; + } + virtual u8 getTevKAlphaSel(u32 index) { + J3D_PANIC(701, index < 16, "Error : range over."); + return mTevKAlphaSel[index]; + } virtual void setTevStageNum(u8 num) { mTevStageNum = num; } virtual u8 getTevStageNum() const { return mTevStageNum; } virtual void setTevStage(u32 index, J2DTevStage stage) { + J3D_PANIC(706, index < 16, "Error : range over."); mTevStage[index] = stage; } - virtual J2DTevStage* getTevStage(u32 index) { return &mTevStage[index]; } + virtual J2DTevStage* getTevStage(u32 index) { + J3D_PANIC(707, index < 16, "Error : range over."); + return &mTevStage[index]; + } virtual void setTevSwapModeInfo(u32 index, J2DTevSwapModeInfo info) { + J3D_PANIC(709, index < 16, "Error : range over."); mTevStage[index].setTevSwapModeInfo(info); } virtual void setTevSwapModeTable(u32 index, J2DTevSwapModeTable table) { + J3D_PANIC(711, index < 4, "Error : range over."); mTevSwapModeTable[index] = table; } virtual J2DTevSwapModeTable* getTevSwapModeTable(u32 index) { + J3D_PANIC(712, index < 4, "Error : range over."); return &mTevSwapModeTable[index]; } virtual void setIndTevStage(u32 index, J2DIndTevStage stage) { + J3D_PANIC(714, index < 16, "Error : range over."); mIndTevStage[index] = stage; } virtual J2DIndTevStage* getIndTevStage(u32 index) { + J3D_PANIC(715, index < 16, "Error : range over."); return &mIndTevStage[index]; } virtual bool insertTexture(u32 index, ResTIMG const* p_timg) { @@ -573,14 +787,20 @@ public: virtual bool setPalette(u32, ResTLUT const*); virtual bool prepareTexture(u8); virtual JUTTexture* getTexture(u32 index) { - return index >= 8 ? NULL : mTexture[index]; + if (index >= 8) { + return NULL; + } + return mTexture[index]; } virtual JUTPalette* getPalette(u32 index) { - return index >= 8 ? NULL : mPalette[index]; + if (index >= 8) { + return NULL; + } + return mPalette[index]; } virtual JUTFont* getFont() { return mFont; } virtual void shiftDeleteFlag(u8, bool); - virtual void setUndeleteFlag(u8 flag) { mUndeleteFlag &= flag; } + virtual void setUndeleteFlag(u8 flag) { mUndeleteFlag = mUndeleteFlag & flag; } virtual void setFontUndeleteFlag() { mFontUndeleteFlag = false; } virtual ~J2DTevBlock16(); @@ -619,8 +839,8 @@ struct J2DAlphaCompInfo { /* 0x7 */ u8 field_0x7; }; -inline u16 J2DCalcAlphaCmp(s32 param_1, u32 param_2, u32 param_3) { - return ((param_1) << 5) | ((param_2 & 0xff) << 3) | (param_3 & 0xff); +inline u16 J2DCalcAlphaCmp(u8 param_1, u8 param_2, u8 param_3) { + return (param_1 << 5) | (param_2 << 3) | param_3; } /** @@ -643,11 +863,11 @@ struct J2DAlphaComp { mRef0 = other.mRef0; mRef1 = other.mRef1; } - u8 getComp0() { return mAlphaCmp >> 5 & 7; } - u8 getRef0() { return mRef0; } - u8 getOp() { return mAlphaCmp >> 3 & 3; } - u8 getComp1() { return mAlphaCmp & 7; } - u8 getRef1() { return mRef1; } + u8 getComp0() const { return mAlphaCmp >> 5 & 7; } + u8 getRef0() const { return mRef0; } + u8 getOp() const { return mAlphaCmp >> 3 & 3; } + u8 getComp1() const { return mAlphaCmp & 7; } + u8 getRef1() const { return mRef1; } /* 0x0 */ u16 mAlphaCmp; /* 0x2 */ u8 mRef0; @@ -682,10 +902,10 @@ struct J2DBlend { J2DBlend() { mBlendInfo = j2dDefaultBlendInfo; } J2DBlend(const J2DBlendInfo& info) { mBlendInfo = info; } void setBlendInfo(const J2DBlendInfo& info) { mBlendInfo = info; } - u8 getType() { return mBlendInfo.mType; } - u8 getSrcFactor() { return mBlendInfo.mSrcFactor; } - u8 getDstFactor() { return mBlendInfo.mDstFactor; } - u8 getOp() { return mBlendInfo.mOp; } + u8 getType() const { return mBlendInfo.mType; } + u8 getSrcFactor() const { return mBlendInfo.mSrcFactor; } + u8 getDstFactor() const { return mBlendInfo.mDstFactor; } + u8 getOp() const { return mBlendInfo.mOp; } /* 0x0 */ J2DBlendInfo mBlendInfo; }; @@ -697,6 +917,7 @@ struct J2DBlend { class J2DPEBlock { public: J2DPEBlock() { initialize(); } + ~J2DPEBlock() {} void initialize(); void setGX(); @@ -744,19 +965,27 @@ public: virtual void setIndTexStageNum(u8 num) { mIndTexStageNum = num; } virtual u8 getIndTexStageNum() const { return mIndTexStageNum; } virtual void setIndTexOrder(u32 index, J2DIndTexOrder order) { + J3D_PANIC(856, index < 4, "Error : range over."); mIndTexOrder[index] = order; } virtual J2DIndTexOrder* getIndTexOrder(u32 index) { + J3D_PANIC(857, index < 4, "Error : range over."); return &mIndTexOrder[index]; } virtual void setIndTexMtx(u32 index, J2DIndTexMtx mtx) { + J3D_PANIC(859, index < 3, "Error : range over."); mIndTexMtx[index] = mtx; } - virtual J2DIndTexMtx* getIndTexMtx(u32 index) { return &mIndTexMtx[index]; } + virtual J2DIndTexMtx* getIndTexMtx(u32 index) { + J3D_PANIC(860, index < 3, "Error : range over."); + return &mIndTexMtx[index]; + } virtual void setIndTexCoordScale(u32 index, J2DIndTexCoordScale scale) { + J3D_PANIC(862, index < 4, "Error : range over."); mTexCoordScale[index] = scale; } virtual J2DIndTexCoordScale* getIndTexCoordScale(u32 index) { + J3D_PANIC(863, index < 4, "Error : range over."); return &mTexCoordScale[index]; } virtual ~J2DIndBlockFull() {} @@ -801,11 +1030,27 @@ public: u32 getTexGenNum() const { return mTexGenNum; } void setTexGenNum(u32 num) { mTexGenNum = num; } - void setTexCoord(u32 i, J2DTexCoord coord) { mTexGenCoord[i] = coord; } - void setTexCoord(u32 i, const J2DTexCoord* coord) { mTexGenCoord[i] = *coord; } - void setTexMtx(u32 i, J2DTexMtx* mtx) { mTexMtx[i] = mtx; } - J2DTexMtx& getTexMtx(u32 i) { return *mTexMtx[i]; } - J2DTexCoord& getTexCoord(u32 i) { return mTexGenCoord[i]; } + void setTexCoord(u32 i, J2DTexCoord coord) { + J3D_PANIC(101, i < 8, "Error : range over."); + mTexGenCoord[i] = coord; + } + void setTexCoord(u32 i, const J2DTexCoord* coord) { + J3D_PANIC(98, i < 8, "Error : range over."); + J3D_PANIC(99, coord, "Error : null pointer."); + mTexGenCoord[i] = *coord; + } + void setTexMtx(u32 i, J2DTexMtx* mtx) { + J3D_PANIC(120, i < 8, "Error : range over."); + mTexMtx[i] = mtx; + } + J2DTexMtx& getTexMtx(u32 i) { + J3D_PANIC(108, i < 8, "Error : range over."); + return *mTexMtx[i]; + } + J2DTexCoord& getTexCoord(u32 i) { + J3D_PANIC(102, i < 8, "Error : range over."); + return mTexGenCoord[i]; + } virtual ~J2DTexGenBlock(); }; // Size: 0x48 @@ -829,12 +1074,24 @@ public: virtual ~J2DColorBlock() {} - JUtility::TColor* getMatColor(u32 i) { return &mMatColor[i]; } - J2DColorChan* getColorChan(u32 i) { return &mColorChan[i]; } + JUtility::TColor* getMatColor(u32 i) { + J3D_PANIC(49, i < 2, "Error : range over."); + return &mMatColor[i]; + } + J2DColorChan* getColorChan(u32 i) { + J3D_PANIC(55, i < 4, "Error : range over."); + return &mColorChan[i]; + } void setCullMode(u8 mode) { mCullMode = mode; } void setColorChanNum(u8 num) { mColorChanNum = num; } - void setMatColor(u32 i, JUtility::TColor color) { mMatColor[i] = color; } - void setColorChan(u32 i, const J2DColorChan& color) { mColorChan[i] = color; } + void setMatColor(u32 i, JUtility::TColor color) { + J3D_PANIC(48, i < 2, "Error : range over."); + mMatColor[i] = color; + } + void setColorChan(u32 i, const J2DColorChan& color) { + J3D_PANIC(54, i < 4, "Error : range over."); + mColorChan[i] = color; + } }; #endif /* J2DMATBLOCK_H */ diff --git a/include/JSystem/J2DGraph/J2DMaterialFactory.h b/include/JSystem/J2DGraph/J2DMaterialFactory.h index f51b2176eb..09eb1fe4ec 100644 --- a/include/JSystem/J2DGraph/J2DMaterialFactory.h +++ b/include/JSystem/J2DGraph/J2DMaterialFactory.h @@ -133,7 +133,7 @@ public: J2DBlend newBlend(int) const; u8 newDither(int) const; - u32 getMaterialMode(int idx) const { + u8 getMaterialMode(int idx) const { return field_0x4[field_0x8[idx]].field_0x0; } diff --git a/include/JSystem/J2DGraph/J2DOrthoGraph.h b/include/JSystem/J2DGraph/J2DOrthoGraph.h index a46c22ed34..e6a01f34e0 100644 --- a/include/JSystem/J2DGraph/J2DOrthoGraph.h +++ b/include/JSystem/J2DGraph/J2DOrthoGraph.h @@ -22,6 +22,7 @@ public: f32 getWidthPower() { return mBounds.getWidth() / mOrtho.getWidth(); } f32 getHeightPower() { return mBounds.getHeight() / mOrtho.getHeight(); } + const JGeometry::TBox2* getOrtho() const { return &mOrtho; } void setOrtho(f32 x, f32 y, f32 width, f32 height, f32 far, f32 near) { JGeometry::TBox2 ortho(x, y, x + width, y + height); setOrtho(ortho, far, near); diff --git a/include/JSystem/J2DGraph/J2DPane.h b/include/JSystem/J2DGraph/J2DPane.h index c66e10d668..bde7118f37 100644 --- a/include/JSystem/J2DGraph/J2DPane.h +++ b/include/JSystem/J2DGraph/J2DPane.h @@ -84,20 +84,33 @@ public: /* vt 0x10 */ virtual void move(f32 x, f32 y); /* vt 0x14 */ virtual void add(f32 x, f32 y); /* vt 0x18 */ virtual void resize(f32 x, f32 y); - /* vt 0x1C */ virtual void setCullBack(bool cull); + /* vt 0x1C */ virtual void setCullBack(bool cull) { + GXCullMode mode; + + if (cull) { + mode = GX_CULL_BACK; + } else { + mode = GX_CULL_NONE; + } + + setCullBack(mode); + } /* vt 0x20 */ virtual void setCullBack(_GXCullMode cmode); /* vt 0x24 */ virtual void setAlpha(u8 alpha) { mAlpha = alpha; }; - /* vt 0x28 */ virtual bool setConnectParent(bool connected); + /* vt 0x28 */ virtual bool setConnectParent(bool connected) { + mConnected = false; + return false; + } /* vt 0x2C */ virtual void calcMtx() { if (mPaneTree.getParent() != NULL) { makeMatrix(mTranslateX, mTranslateY); } } - /* vt 0x30 */ virtual void update(); - /* vt 0x34 */ virtual void drawSelf(f32 arg1, f32 arg2); - /* vt 0x38 */ virtual void drawSelf(f32 arg1, f32 arg2, Mtx* mtx); + /* vt 0x30 */ virtual void update() {} + /* vt 0x34 */ virtual void drawSelf(f32 arg1, f32 arg2) {} + /* vt 0x38 */ virtual void drawSelf(f32 arg1, f32 arg2, Mtx* mtx) {} /* vt 0x3C */ virtual J2DPane* search(u64 tag); /* vt 0x40 */ virtual J2DPane* searchUserInfo(u64 tag); /* vt 0x44 */ virtual void makeMatrix(f32 a, f32 b) { @@ -107,7 +120,7 @@ public: /* vt 0x4C */ virtual bool isUsed(const ResTIMG* timg); /* vt 0x50 */ virtual bool isUsed(const ResFONT* font); /* vt 0x54 */ virtual void clearAnmTransform(); - /* vt 0x58 */ virtual void rewriteAlpha(); + /* vt 0x58 */ virtual void rewriteAlpha() {} /* vt 0x5C */ virtual void setAnimation(J2DAnmBase* anm); /* vt 0x60 */ virtual void setAnimation(J2DAnmTransform* anm); /* vt 0x64 */ virtual void setAnimation(J2DAnmColor* anm) {} @@ -118,9 +131,13 @@ public: /* vt 0x78 */ virtual void setAnimation(J2DAnmVtxColor* anm) {} /* vt 0x7C */ virtual const J2DAnmTransform* animationTransform(const J2DAnmTransform* transform); /* vt 0x80 */ virtual void setVisibileAnimation(J2DAnmVisibilityFull* visibility); - /* vt 0x84 */ virtual void setAnimationVF(J2DAnmVisibilityFull* visibility); + /* vt 0x84 */ virtual void setAnimationVF(J2DAnmVisibilityFull* p_visibility) { + setAnimation(p_visibility); + } /* vt 0x88 */ virtual void setVtxColorAnimation(J2DAnmVtxColor* vtx_color); - /* vt 0x8C */ virtual void setAnimationVC(J2DAnmVtxColor* vtx_color); + /* vt 0x8C */ virtual void setAnimationVC(J2DAnmVtxColor* p_vtxColor) { + setAnimation(p_vtxColor); + } /* vt 0x90 */ virtual const J2DAnmTransform* animationPane(const J2DAnmTransform* transform); f32 getHeight() const { return mBounds.getHeight(); } @@ -174,6 +191,7 @@ public: void show() { mVisible = true; } void hide() { mVisible = false; } + bool isInfluencedAlpha() const { return mIsInfluencedAlpha; } bool isConnectParent() const { return mConnected; } u64 getUserInfo() const { return mUserInfoTag; } diff --git a/include/JSystem/J2DGraph/J2DPicture.h b/include/JSystem/J2DGraph/J2DPicture.h index bb71d97aa3..e73fd3fc9b 100644 --- a/include/JSystem/J2DGraph/J2DPicture.h +++ b/include/JSystem/J2DGraph/J2DPicture.h @@ -17,6 +17,7 @@ enum J2DMirror { }; enum J2DBinding { + /* 0 */ J2DBind_None = 0, /* 1 */ J2DBind_Bottom = (1 << 0), /* 2 */ J2DBind_Top = (1 << 1), /* 4 */ J2DBind_Right = (1 << 2), @@ -189,6 +190,9 @@ public: void initinfo(); void setTevMode(); static void swap(f32&, f32&); + J2DBinding getBinding() const; + void setMirror(J2DMirror); + bool isTumble() const; void setBlendKonstColor(); void setBlendKonstAlpha(); void getNewColor(JUtility::TColor*); diff --git a/include/JSystem/J2DGraph/J2DPrint.h b/include/JSystem/J2DGraph/J2DPrint.h index be06e01c26..aa0ffbdcf1 100644 --- a/include/JSystem/J2DGraph/J2DPrint.h +++ b/include/JSystem/J2DGraph/J2DPrint.h @@ -2,7 +2,7 @@ #define J2DPRINT_H #include "JSystem/J2DGraph/J2DTextBox.h" -#include +#include class JUTFont; class J2DPrint; diff --git a/include/JSystem/J2DGraph/J2DTevs.h b/include/JSystem/J2DGraph/J2DTevs.h index 2d8a9d7ef8..b3dedd90fe 100644 --- a/include/JSystem/J2DGraph/J2DTevs.h +++ b/include/JSystem/J2DGraph/J2DTevs.h @@ -103,6 +103,7 @@ public: mInfo = info; return *this; } + void setIndTexOrderInfo(const J2DIndTexOrderInfo& info) { mInfo = info; } void load(u8); private: @@ -147,6 +148,7 @@ public: mIndTexMtxInfo = info; return *this; } + void setIndTexMtxInfo(const J2DIndTexMtxInfo& info) { mIndTexMtxInfo = info; } void load(u8); void load(u32); void calc(); @@ -191,6 +193,7 @@ public: mInfo = info; return *this; } + void setIndTexCoordScaleInfo(const J2DIndTexCoordScaleInfo& info) { mInfo = info; } void load(u8); private: @@ -426,7 +429,7 @@ public: } void setTexSel(u8 param_0) { - field_0x7 = (field_0x7 & ~0x0c) | (param_0 * 4); + field_0x7 = (field_0x7 & ~0x0c) | (param_0 << 2); } void setRasSel(u8 param_0) { @@ -632,6 +635,10 @@ public: u8 getMatSrc() const { return mColorChan & 1; } + void operator=(const J2DColorChan& other) { + mColorChan = other.mColorChan; + } + private: /* 0x0 */ u16 mColorChan; }; diff --git a/include/JSystem/J2DGraph/J2DWindow.h b/include/JSystem/J2DGraph/J2DWindow.h index 0d194c4995..b688963f64 100644 --- a/include/JSystem/J2DGraph/J2DWindow.h +++ b/include/JSystem/J2DGraph/J2DWindow.h @@ -61,27 +61,38 @@ public: void setTevMode(JUTTexture*, JUtility::TColor, JUtility::TColor); virtual ~J2DWindow(); - virtual u16 getTypeID() const; - virtual void resize(f32, f32); - virtual void drawSelf(f32, f32); - virtual void drawSelf(f32, f32, Mtx*); - virtual bool isUsed(ResTIMG const*); - virtual bool isUsed(ResFONT const*); - virtual void rewriteAlpha(); - virtual void draw(JGeometry::TBox2 const&); - virtual void draw(JGeometry::TBox2 const&, JGeometry::TBox2 const&); - virtual void draw(f32, f32, f32, f32); - virtual bool setBlack(JUtility::TColor); - virtual bool setWhite(JUtility::TColor); - virtual bool setBlackWhite(JUtility::TColor, JUtility::TColor); - virtual JUtility::TColor getBlack() const; - virtual JUtility::TColor getWhite() const; - virtual JUTTexture* getFrameTexture(u8, u8) const; - virtual JUTTexture* getContentsTexture(u8) const; - virtual void getMaterial(J2DWindow::TMaterial&) const; - virtual J2DMaterial* getFrameMaterial(u8) const; - virtual J2DMaterial* getContentsMaterial() const; - virtual void drawContents(JGeometry::TBox2 const&); + /* vt 0x0C */ virtual u16 getTypeID() const { return 17; } + /* vt 0x18 */ virtual void resize(f32, f32); + /* vt 0x34 */ virtual void drawSelf(f32, f32); + /* vt 0x38 */ virtual void drawSelf(f32, f32, Mtx*); + /* vt 0x94 */ virtual void draw(JGeometry::TBox2 const&); + /* vt 0x98 */ virtual void draw(JGeometry::TBox2 const&, JGeometry::TBox2 const&); + /* vt 0x9C */ virtual void draw(f32 left, f32 top, f32 width, f32 height) { draw(JGeometry::TBox2(left, top, left + width, top + height)); } + /* vt 0xA0 */ virtual bool setBlack(JUtility::TColor); + /* vt 0xA4 */ virtual bool setWhite(JUtility::TColor); + /* vt 0xA8 */ virtual bool setBlackWhite(JUtility::TColor, JUtility::TColor); + /* vt 0xAC */ virtual JUtility::TColor getBlack() const; + /* vt 0xB0 */ virtual JUtility::TColor getWhite() const; + /* vt 0xB4 */ virtual JUTTexture* getFrameTexture(u8, u8) const; + /* vt 0xB8 */ virtual JUTTexture* getContentsTexture(u8 param_1) const { + if (param_1 != 0) { + return NULL; + } + return field_0x110; + } + /* vt 0xBC */ virtual void getMaterial(J2DWindow::TMaterial& mat) const { + mat.field_0x0 = NULL; + mat.field_0x4 = NULL; + mat.field_0x8 = NULL; + mat.field_0xc = NULL; + mat.field_0x10 = NULL; + } + /* vt 0xC0 */ virtual J2DMaterial* getFrameMaterial(u8) const { return NULL; } + /* vt 0xC4 */ virtual J2DMaterial* getContentsMaterial() const { return NULL; } + /* vt 0xC8 */ virtual void drawContents(JGeometry::TBox2 const&); + /* vt 0x4C */ virtual bool isUsed(const ResTIMG*); + /* vt 0x50 */ virtual bool isUsed(const ResFONT* font) { return J2DPane::isUsed(font); } + /* vt 0x58 */ virtual void rewriteAlpha() {} bool isField0x145Set(u8 flag) { return field_0x145 & flag; } diff --git a/include/JSystem/J3DGraphAnimator/J3DAnimation.h b/include/JSystem/J3DGraphAnimator/J3DAnimation.h index a7d140a021..d5c0bc94c3 100644 --- a/include/JSystem/J3DGraphAnimator/J3DAnimation.h +++ b/include/JSystem/J3DGraphAnimator/J3DAnimation.h @@ -1,6 +1,7 @@ #ifndef J3DANIMATION_H #define J3DANIMATION_H +#include "JSystem/J3DGraphAnimator/J3DJoint.h" #include "JSystem/J3DGraphAnimator/J3DModelData.h" #include "JSystem/JUtility/JUTAssert.h" #include "JSystem/JUtility/JUTNameTab.h" @@ -637,37 +638,184 @@ public: /** * @ingroup jsystem-j3d - * + * */ -class J3DAnmTexPattern : public J3DAnmBase { +class J3DAnmCluster : public J3DAnmBase { public: - J3DAnmTexPattern(); - void getTexNo(u16, u16*) const; - void searchUpdateMaterialID(J3DMaterialTable*); - void searchUpdateMaterialID(J3DModelData*); + J3DAnmCluster(s16 frameMax, f32* pWeight) : J3DAnmBase(frameMax) { mWeight = pWeight; } - virtual ~J3DAnmTexPattern() {} - virtual s32 getKind() const { return 2; } + virtual ~J3DAnmCluster() {} + virtual s32 getKind() const { return 3; } + virtual f32 getWeight(u16) const { return 1.0f; } - u16 getUpdateMaterialID(u16 idx) const { - J3D_ASSERT_RANGE(2288, idx < mUpdateMaterialNum); - return mUpdateMaterialID[idx]; + /* 0x0C */ f32* mWeight; +}; // Size: 0x10 + +/** + * @ingroup jsystem-j3d + * + */ +class J3DAnmClusterFull : public J3DAnmCluster { +public: + J3DAnmClusterFull() : J3DAnmCluster(0, NULL) { mAnmTable = NULL; } + + virtual ~J3DAnmClusterFull() {} + virtual s32 getKind() const { return 12; } + virtual f32 getWeight(u16) const; + + /* 0x10 */ J3DAnmClusterFullTable* mAnmTable; +}; + +/** + * @ingroup jsystem-j3d + * + */ +class J3DAnmClusterKey : public J3DAnmCluster { +public: + J3DAnmClusterKey() : J3DAnmCluster(0, NULL) { mAnmTable = NULL; } + + virtual ~J3DAnmClusterKey() {} + virtual s32 getKind() const { return 13; } + virtual f32 getWeight(u16) const; + + /* 0x10 */ J3DAnmClusterKeyTable* mAnmTable; +}; + +/** + * @ingroup jsystem-j3d + * + */ +class J3DAnmVtxColor : public J3DAnmBase { +public: + J3DAnmVtxColor(); + + virtual ~J3DAnmVtxColor() {} + virtual s32 getKind() const { return 7; } + virtual void getColor(u8, u16, GXColor*) const {} + + u16 getAnmTableNum(u8 idx) { + J3D_ASSERT_RANGE(1333, idx < 2); + return mAnmTableNum[idx]; } + + J3DAnmVtxColorIndexData* getAnmVtxColorIndexData(u8 p1, u16 p2) { + J3D_ASSERT_RANGE(1339, p1 < 2); + J3D_ASSERT_RANGE(1340, p2 < mAnmTableNum[p1]); + return mAnmVtxColorIndexData[p1] + p2; + } + + /* 0x0C */ u16 mAnmTableNum[2]; + /* 0x10 */ J3DAnmVtxColorIndexData* mAnmVtxColorIndexData[2]; +}; // Size: 0x18 + +/** + * @ingroup jsystem-j3d + * + */ +class J3DAnmVtxColorFull : public J3DAnmVtxColor { +public: + J3DAnmVtxColorFull(); + + virtual ~J3DAnmVtxColorFull() {} + virtual s32 getKind() const { return 14; } + virtual void getColor(u8, u16, GXColor*) const; + + /* 0x18 */ J3DAnmColorFullTable* mpTable[2]; + /* 0x20 */ u8* mColorR; + /* 0x24 */ u8* mColorG; + /* 0x28 */ u8* mColorB; + /* 0x2C */ u8* mColorA; +}; + +/** + * @ingroup jsystem-j3d + * + */ +class J3DAnmVtxColorKey : public J3DAnmVtxColor { +public: + J3DAnmVtxColorKey(); + + virtual ~J3DAnmVtxColorKey() {} + virtual s32 getKind() const { return 15; } + virtual void getColor(u8, u16, GXColor*) const; + + /* 0x18 */ J3DAnmColorKeyTable* mpTable[2]; + /* 0x20 */ s16* mColorR; + /* 0x24 */ s16* mColorG; + /* 0x28 */ s16* mColorB; + /* 0x2C */ s16* mColorA; +}; + +/** + * @ingroup jsystem-j3d + * + */ +class J3DAnmColor : public J3DAnmBase { +public: + J3DAnmColor(); + void searchUpdateMaterialID(J3DMaterialTable*); + + virtual ~J3DAnmColor() {} + virtual s32 getKind() const { return 1; } + virtual void getColor(u16, GXColor*) const {} + u16 getUpdateMaterialNum() const { return mUpdateMaterialNum; } bool isValidUpdateMaterialID(u16 id) const { return mUpdateMaterialID[id] != 0xFFFF; } - J3DAnmTexPatternFullTable* getAnmTable() { return mAnmTable; } + u16 getUpdateMaterialID(u16 idx) const { + J3D_ASSERT_RANGE(1578, idx < mUpdateMaterialNum); + return mUpdateMaterialID[idx]; + } - /* 0x0C */ u16* mTextureIndex; - /* 0x10 */ J3DAnmTexPatternFullTable* mAnmTable; - /* 0x14 */ u16 field_0x14; - /* 0x16 */ u16 mUpdateMaterialNum; + /* 0x0C */ u16 field_0xc; + /* 0x0E */ u16 field_0xe; + /* 0x10 */ u16 field_0x10; + /* 0x12 */ u16 field_0x12; + /* 0x14 */ u16 mUpdateMaterialNum; /* 0x18 */ u16* mUpdateMaterialID; /* 0x1C */ JUTNameTab mUpdateMaterialName; }; // Size: 0x2C /** * @ingroup jsystem-j3d - * + * + */ +class J3DAnmColorFull : public J3DAnmColor { +public: + J3DAnmColorFull(); + + virtual ~J3DAnmColorFull() {} + virtual s32 getKind() const { return 10; } + virtual void getColor(u16, GXColor*) const; + + /* 0x2C */ u8* mColorR; + /* 0x30 */ u8* mColorG; + /* 0x34 */ u8* mColorB; + /* 0x38 */ u8* mColorA; + /* 0x3C */ J3DAnmColorFullTable* mAnmTable; +}; + +/** + * @ingroup jsystem-j3d + * + */ +class J3DAnmColorKey : public J3DAnmColor { +public: + J3DAnmColorKey(); + + virtual ~J3DAnmColorKey() {} + virtual s32 getKind() const { return 11; } + virtual void getColor(u16, GXColor*) const; + + /* 0x2C */ s16* mColorR; + /* 0x30 */ s16* mColorG; + /* 0x34 */ s16* mColorB; + /* 0x38 */ s16* mColorA; + /* 0x3C */ J3DAnmColorKeyTable* mAnmTable; +}; + +/** + * @ingroup jsystem-j3d + * */ class J3DAnmTevRegKey : public J3DAnmBase { public: @@ -726,177 +874,41 @@ public: /** * @ingroup jsystem-j3d - * + * */ -class J3DAnmColor : public J3DAnmBase { +class J3DAnmTexPattern : public J3DAnmBase { public: - J3DAnmColor(); + J3DAnmTexPattern(); + void getTexNo(u16, u16*) const; void searchUpdateMaterialID(J3DMaterialTable*); + void searchUpdateMaterialID(J3DModelData*); - virtual ~J3DAnmColor() {} - virtual s32 getKind() const { return 1; } - virtual void getColor(u16, GXColor*) const {} + virtual ~J3DAnmTexPattern() {} + virtual s32 getKind() const { return 2; } - u16 getUpdateMaterialNum() const { return mUpdateMaterialNum; } - bool isValidUpdateMaterialID(u16 id) const { return mUpdateMaterialID[id] != 0xFFFF; } - u16 getUpdateMaterialID(u16 idx) const { - J3D_ASSERT_RANGE(1578, idx < mUpdateMaterialNum); + u16 getUpdateMaterialID(u16 idx) const { + J3D_ASSERT_RANGE(2288, idx < mUpdateMaterialNum); return mUpdateMaterialID[idx]; } + u16 getUpdateMaterialNum() const { return mUpdateMaterialNum; } + bool isValidUpdateMaterialID(u16 id) const { return mUpdateMaterialID[id] != 0xFFFF; } + J3DAnmTexPatternFullTable* getAnmTable() { return mAnmTable; } - /* 0x0C */ u16 field_0xc; - /* 0x0E */ u16 field_0xe; - /* 0x10 */ u16 field_0x10; - /* 0x12 */ u16 field_0x12; - /* 0x14 */ u16 mUpdateMaterialNum; + /* 0x0C */ u16* mTextureIndex; + /* 0x10 */ J3DAnmTexPatternFullTable* mAnmTable; + /* 0x14 */ u16 field_0x14; + /* 0x16 */ u16 mUpdateMaterialNum; /* 0x18 */ u16* mUpdateMaterialID; /* 0x1C */ JUTNameTab mUpdateMaterialName; }; // Size: 0x2C -/** - * @ingroup jsystem-j3d - * - */ -class J3DAnmColorKey : public J3DAnmColor { -public: - J3DAnmColorKey(); - - virtual ~J3DAnmColorKey() {} - virtual s32 getKind() const { return 11; } - virtual void getColor(u16, GXColor*) const; - - /* 0x2C */ s16* mColorR; - /* 0x30 */ s16* mColorG; - /* 0x34 */ s16* mColorB; - /* 0x38 */ s16* mColorA; - /* 0x3C */ J3DAnmColorKeyTable* mAnmTable; -}; - -/** - * @ingroup jsystem-j3d - * - */ -class J3DAnmColorFull : public J3DAnmColor { -public: - J3DAnmColorFull(); - - virtual ~J3DAnmColorFull() {} - virtual s32 getKind() const { return 10; } - virtual void getColor(u16, GXColor*) const; - - /* 0x2C */ u8* mColorR; - /* 0x30 */ u8* mColorG; - /* 0x34 */ u8* mColorB; - /* 0x38 */ u8* mColorA; - /* 0x3C */ J3DAnmColorFullTable* mAnmTable; -}; - -/** - * @ingroup jsystem-j3d - * - */ -class J3DAnmVtxColor : public J3DAnmBase { -public: - J3DAnmVtxColor(); - - virtual ~J3DAnmVtxColor() {} - virtual s32 getKind() const { return 7; } - virtual void getColor(u8, u16, GXColor*) const {} - - /* 0x0C */ u16 mAnmTableNum[2]; - /* 0x10 */ J3DAnmVtxColorIndexData* mAnmVtxColorIndexData[2]; -}; // Size: 0x18 - -/** - * @ingroup jsystem-j3d - * - */ -class J3DAnmVtxColorKey : public J3DAnmVtxColor { -public: - J3DAnmVtxColorKey(); - - virtual ~J3DAnmVtxColorKey() {} - virtual s32 getKind() const { return 15; } - virtual void getColor(u8, u16, GXColor*) const; - - /* 0x18 */ J3DAnmColorKeyTable* mpTable[2]; - /* 0x20 */ s16* mColorR; - /* 0x24 */ s16* mColorG; - /* 0x28 */ s16* mColorB; - /* 0x2C */ s16* mColorA; -}; - -/** - * @ingroup jsystem-j3d - * - */ -class J3DAnmVtxColorFull : public J3DAnmVtxColor { -public: - J3DAnmVtxColorFull(); - - virtual ~J3DAnmVtxColorFull() {} - virtual s32 getKind() const { return 14; } - virtual void getColor(u8, u16, GXColor*) const; - - /* 0x18 */ J3DAnmColorFullTable* mpTable[2]; - /* 0x20 */ u8* mColorR; - /* 0x24 */ u8* mColorG; - /* 0x28 */ u8* mColorB; - /* 0x2C */ u8* mColorA; -}; - -/** - * @ingroup jsystem-j3d - * - */ -class J3DAnmCluster : public J3DAnmBase { -public: - J3DAnmCluster(s16 frameMax, f32* pWeight) : J3DAnmBase(frameMax) { mWeight = pWeight; } - - virtual ~J3DAnmCluster() {} - virtual s32 getKind() const { return 3; } - virtual f32 getWeight(u16) const { return 1.0f; } - - /* 0x0C */ f32* mWeight; -}; // Size: 0x10 - -/** - * @ingroup jsystem-j3d - * - */ -class J3DAnmClusterFull : public J3DAnmCluster { -public: - J3DAnmClusterFull() : J3DAnmCluster(0, NULL) { mAnmTable = NULL; } - - virtual ~J3DAnmClusterFull() {} - virtual s32 getKind() const { return 12; } - virtual f32 getWeight(u16) const; - - /* 0x10 */ J3DAnmClusterFullTable* mAnmTable; -}; - -/** - * @ingroup jsystem-j3d - * - */ -class J3DAnmClusterKey : public J3DAnmCluster { -public: - J3DAnmClusterKey() : J3DAnmCluster(0, NULL) { mAnmTable = NULL; } - - virtual ~J3DAnmClusterKey() {} - virtual s32 getKind() const { return 13; } - virtual f32 getWeight(u16) const; - - /* 0x10 */ J3DAnmClusterKeyTable* mAnmTable; -}; - /** * @ingroup jsystem-j3d * */ class J3DAnmVisibilityFull : public J3DAnmBase { public: - J3DAnmVisibilityFull() : J3DAnmBase(0) { + J3DAnmVisibilityFull() : J3DAnmBase() { mUpdateMaterialNum = 0; field_0xe = 0; mAnmTable = NULL; diff --git a/include/JSystem/J3DGraphAnimator/J3DCluster.h b/include/JSystem/J3DGraphAnimator/J3DCluster.h index 83aec79dc1..969ad6ae71 100644 --- a/include/JSystem/J3DGraphAnimator/J3DCluster.h +++ b/include/JSystem/J3DGraphAnimator/J3DCluster.h @@ -32,7 +32,10 @@ public: } J3DDeformer* getDeformer() { return mDeformer; } - void setDeformer(J3DDeformer* deformer) { mDeformer = deformer; } + void setDeformer(J3DDeformer* deformer) { + J3D_ASSERT_NULLPTR(111, deformer); + mDeformer = deformer; + } /* 0x00 */ f32 mMaxAngle; /* 0x04 */ f32 mMinAngle; diff --git a/include/JSystem/J3DGraphAnimator/J3DJoint.h b/include/JSystem/J3DGraphAnimator/J3DJoint.h index 775b46144a..a1104d170f 100644 --- a/include/JSystem/J3DGraphAnimator/J3DJoint.h +++ b/include/JSystem/J3DGraphAnimator/J3DJoint.h @@ -2,7 +2,6 @@ #define J3DJOINT_H #include "JSystem/J3DGraphBase/J3DTransform.h" -#include "JSystem/J3DGraphBase/J3DSys.h" #include "JSystem/J3DGraphBase/J3DMaterial.h" class J3DAnmTransform; @@ -146,17 +145,6 @@ public: } }; -/** - * @ingroup jsystem-j3d - * - */ -struct J3DMtxCalcJ3DSysInitSoftimage { - static void init(const Vec& param_0, const Mtx& param_1) { - J3DSys::mCurrentS = param_0; - MTXCopy(param_1, J3DSys::mCurrentMtx); - } -}; - /** * @ingroup jsystem-j3d * diff --git a/include/JSystem/J3DGraphAnimator/J3DJointTree.h b/include/JSystem/J3DGraphAnimator/J3DJointTree.h index 04859fd581..b4b3d5a1db 100644 --- a/include/JSystem/J3DGraphAnimator/J3DJointTree.h +++ b/include/JSystem/J3DGraphAnimator/J3DJointTree.h @@ -1,8 +1,11 @@ #ifndef J3DJOINTTREE_H #define J3DJOINTTREE_H -#include "JSystem/J3DGraphAnimator/J3DJoint.h" +#include "JSystem/J3DGraphBase/J3DTransform.h" +class J3DJoint; +class J3DMtxBuffer; +class J3DMtxCalc; class JUTNameTab; /** @@ -46,7 +49,7 @@ public: virtual void calc(J3DMtxBuffer*, Vec const&, f32 const (&)[3][4]); virtual ~J3DJointTree() {} - J3DModelHierarchy const* getHierarchy() { return mHierarchy; } + const J3DModelHierarchy* getHierarchy() const { return mHierarchy; } void setHierarchy(J3DModelHierarchy* hierarchy) { mHierarchy = hierarchy; } void setBasicMtxCalc(J3DMtxCalc* calc) { mBasicMtxCalc = calc; } u16 getWEvlpMtxNum() const { return mWEvlpMtxNum; } diff --git a/include/JSystem/J3DGraphAnimator/J3DModelData.h b/include/JSystem/J3DGraphAnimator/J3DModelData.h index ea1ef96813..e4436ea064 100644 --- a/include/JSystem/J3DGraphAnimator/J3DModelData.h +++ b/include/JSystem/J3DGraphAnimator/J3DModelData.h @@ -2,10 +2,8 @@ #define J3DMODELDATA_H #include "JSystem/J3DGraphAnimator/J3DJointTree.h" -#include "JSystem/J3DGraphBase/J3DMaterial.h" #include "JSystem/J3DGraphAnimator/J3DMaterialAttach.h" #include "JSystem/J3DGraphAnimator/J3DShapeTable.h" -#include "JSystem/J3DGraphBase/J3DSys.h" #include "JSystem/J3DGraphBase/J3DVertex.h" class JUTNameTab; @@ -47,7 +45,7 @@ public: J3DShape* getShapeNodePointer(u16 idx) const { return mShapeTable.getShapeNodePointer(idx); } J3DJoint* getJointNodePointer(u16 idx) const { return mJointTree.getJointNodePointer(idx); } J3DJointTree& getJointTree() { return mJointTree; } - J3DModelHierarchy const* getHierarchy() { return mJointTree.getHierarchy(); } + const J3DModelHierarchy* getHierarchy() const { return mJointTree.getHierarchy(); } void setHierarchy(J3DModelHierarchy* hierarchy) { mJointTree.setHierarchy(hierarchy); } void setBasicMtxCalc(J3DMtxCalc* calc) { mJointTree.setBasicMtxCalc(calc); } JUTNameTab* getJointName() const { return mJointTree.getJointName(); } diff --git a/include/JSystem/J3DGraphAnimator/J3DMtxBuffer.h b/include/JSystem/J3DGraphAnimator/J3DMtxBuffer.h index 6158d73d76..e61bbbe231 100644 --- a/include/JSystem/J3DGraphAnimator/J3DMtxBuffer.h +++ b/include/JSystem/J3DGraphAnimator/J3DMtxBuffer.h @@ -2,6 +2,7 @@ #define J3DMTXBUFFER_H #include "JSystem/J3DGraphAnimator/J3DModelData.h" +#include "JSystem/J3DGraphBase/J3DEnum.h" class J3DModelData; diff --git a/include/JSystem/J3DGraphAnimator/J3DShapeTable.h b/include/JSystem/J3DGraphAnimator/J3DShapeTable.h index ca646e4829..9caba23ce9 100644 --- a/include/JSystem/J3DGraphAnimator/J3DShapeTable.h +++ b/include/JSystem/J3DGraphAnimator/J3DShapeTable.h @@ -1,9 +1,11 @@ #ifndef J3DSHAPETABLE_H #define J3DSHAPETABLE_H -#include "JSystem/J3DGraphBase/J3DShape.h" #include "JSystem/JUtility/JUTAssert.h" +class J3DVertexData; +struct J3DDrawMtxData; +class J3DShape; class JUTNameTab; /** diff --git a/include/JSystem/J3DGraphBase/J3DEnum.h b/include/JSystem/J3DGraphBase/J3DEnum.h new file mode 100644 index 0000000000..aabd8ec1a6 --- /dev/null +++ b/include/JSystem/J3DGraphBase/J3DEnum.h @@ -0,0 +1,9 @@ +#ifndef J3DENUM_H +#define J3DENUM_H + +enum J3DError { + kJ3DError_Success = 0, + kJ3DError_Alloc = 4, +}; + +#endif /* J3DENUM_H */ diff --git a/include/JSystem/J3DGraphBase/J3DMaterial.h b/include/JSystem/J3DGraphBase/J3DMaterial.h index 462849c843..a125cdf925 100644 --- a/include/JSystem/J3DGraphBase/J3DMaterial.h +++ b/include/JSystem/J3DGraphBase/J3DMaterial.h @@ -4,7 +4,7 @@ #include "JSystem/J3DGraphBase/J3DMatBlock.h" #include "JSystem/J3DGraphBase/J3DPacket.h" #include "JSystem/J3DGraphBase/J3DShape.h" -#include +#include class J3DJoint; class J3DMaterialAnm; @@ -66,7 +66,7 @@ public: J3DFog* getFog() { return mPEBlock->getFog(); } J3DTexMtx* getTexMtx(u32 idx) { return mTexGenBlock->getTexMtx(idx); } u16 getIndex() { return mIndex; } - bool isDrawModeOpaTexEdge() { return (mMaterialMode & 3) == 0; } + BOOL isDrawModeOpaTexEdge() { return (mMaterialMode & 3) ? 1 : 0; } J3DPEBlock* getPEBlock() { return mPEBlock; } void onInvalid() { mInvalid = 1; } u32 getTexGenNum() const { return mTexGenBlock->getTexGenNum(); } diff --git a/include/JSystem/J3DGraphBase/J3DPacket.h b/include/JSystem/J3DGraphBase/J3DPacket.h index c5ff05c350..67dea2f83c 100644 --- a/include/JSystem/J3DGraphBase/J3DPacket.h +++ b/include/JSystem/J3DGraphBase/J3DPacket.h @@ -1,9 +1,12 @@ #ifndef J3DPACKET_H #define J3DPACKET_H +#include "JSystem/J3DAssert.h" #include "JSystem/J3DGraphBase/J3DSys.h" +#include "JSystem/J3DGraphBase/J3DEnum.h" #include "dolphin/gd/GDBase.h" -#include +#include "dolphin/mtx.h" +#include class J3DMatPacket; @@ -132,6 +135,34 @@ public: /* 0xC */ u32 mMaxSize; }; // Size: 0x10 +/** + * @ingroup jsystem-j3d + * + */ +class J3DTexMtxObj { +public: + Mtx& getMtx(u16 idx) { + J3D_ASSERT_RANGE(275, idx < mTexMtxNum); + return mpTexMtx[idx]; + } + + void setMtx(u16 idx, const Mtx mtx) { + J3D_ASSERT_RANGE(288, idx < mTexMtxNum); + MTXCopy(mtx, mpTexMtx[idx]); + } + + Mtx44& getEffectMtx(u16 idx) { + J3D_ASSERT_RANGE(293, idx < mTexMtxNum); + return mpEffectMtx[idx]; + } + + u16 getNumTexMtx() const { return mTexMtxNum; } + + /* 0x00 */ Mtx* mpTexMtx; + /* 0x04 */ Mtx44* mpEffectMtx; + /* 0x08 */ u16 mTexMtxNum; +}; + /** * @ingroup jsystem-j3d * diff --git a/include/JSystem/J3DGraphBase/J3DShapeMtx.h b/include/JSystem/J3DGraphBase/J3DShapeMtx.h index 0ce718392f..7029ab3350 100644 --- a/include/JSystem/J3DGraphBase/J3DShapeMtx.h +++ b/include/JSystem/J3DGraphBase/J3DShapeMtx.h @@ -8,34 +8,6 @@ class J3DTexMtx; class J3DTexGenBlock; -/** - * @ingroup jsystem-j3d - * - */ -class J3DTexMtxObj { -public: - Mtx& getMtx(u16 idx) { - J3D_ASSERT_RANGE(275, idx < mTexMtxNum); - return mpTexMtx[idx]; - } - - void setMtx(u16 idx, const Mtx mtx) { - J3D_ASSERT_RANGE(288, idx < mTexMtxNum); - MTXCopy(mtx, mpTexMtx[idx]); - } - - Mtx44& getEffectMtx(u16 idx) { - J3D_ASSERT_RANGE(293, idx < mTexMtxNum); - return mpEffectMtx[idx]; - } - - u16 getNumTexMtx() const { return mTexMtxNum; } - - /* 0x00 */ Mtx* mpTexMtx; - /* 0x04 */ Mtx44* mpEffectMtx; - /* 0x08 */ u16 mTexMtxNum; -}; - /** * @ingroup jsystem-j3d * @@ -58,7 +30,31 @@ typedef void (J3DShapeMtxConcatView::*J3DShapeMtxConcatView_LoadFunc)(int, u16) /** * @ingroup jsystem-j3d - * + * + */ +class J3DShapeMtxMulti : public J3DShapeMtx { +public: + J3DShapeMtxMulti(u16 useMtxIndex, u16 useMtxNum, u16* useMtxIndexTable) + : J3DShapeMtx(useMtxIndex) + , mUseMtxNum(useMtxNum) + , mUseMtxIndexTable(useMtxIndexTable) + {} + + virtual ~J3DShapeMtxMulti() {} + virtual u32 getType() const { return 'SMML'; } + virtual u16 getUseMtxNum() const { return mUseMtxNum; } + virtual u16 getUseMtxIndex(u16 no) const { return mUseMtxIndexTable[no]; } + virtual void load() const; + virtual void calcNBTScale(Vec const&, f32 (*)[3][3], f32 (*)[3][3]); + +private: + /* 0x8 */ u16 mUseMtxNum; + /* 0xC */ u16* mUseMtxIndexTable; +}; + +/** + * @ingroup jsystem-j3d + * */ class J3DShapeMtxConcatView : public J3DShapeMtx { public: @@ -83,60 +79,6 @@ public: static MtxP sMtxPtrTbl[2]; }; -/** - * @ingroup jsystem-j3d - * - */ -class J3DShapeMtxYBBoardConcatView : public J3DShapeMtxConcatView { -public: - J3DShapeMtxYBBoardConcatView(u16 useMtxIndex) - : J3DShapeMtxConcatView(useMtxIndex) - {} - - virtual ~J3DShapeMtxYBBoardConcatView() {} - virtual u32 getType() const { return 'SMYB'; } - virtual void load() const; -}; - -/** - * @ingroup jsystem-j3d - * - */ -class J3DShapeMtxBBoardConcatView : public J3DShapeMtxConcatView { -public: - J3DShapeMtxBBoardConcatView(u16 useMtxIndex) - : J3DShapeMtxConcatView(useMtxIndex) - {} - - virtual ~J3DShapeMtxBBoardConcatView() {} - virtual u32 getType() const { return 'SMBB'; } - virtual void load() const; -}; - -/** - * @ingroup jsystem-j3d - * - */ -class J3DShapeMtxMulti : public J3DShapeMtx { -public: - J3DShapeMtxMulti(u16 useMtxIndex, u16 useMtxNum, u16* useMtxIndexTable) - : J3DShapeMtx(useMtxIndex) - , mUseMtxNum(useMtxNum) - , mUseMtxIndexTable(useMtxIndexTable) - {} - - virtual ~J3DShapeMtxMulti() {} - virtual u32 getType() const { return 'SMML'; } - virtual u16 getUseMtxNum() const { return mUseMtxNum; } - virtual u16 getUseMtxIndex(u16 no) const { return mUseMtxIndexTable[no]; } - virtual void load() const; - virtual void calcNBTScale(Vec const&, f32 (*)[3][3], f32 (*)[3][3]); - -private: - /* 0x8 */ u16 mUseMtxNum; - /* 0xC */ u16* mUseMtxIndexTable; -}; - /** * @ingroup jsystem-j3d * @@ -162,4 +104,34 @@ private: /* 0xC */ u16* mUseMtxIndexTable; }; +/** + * @ingroup jsystem-j3d + * + */ +class J3DShapeMtxBBoardConcatView : public J3DShapeMtxConcatView { +public: + J3DShapeMtxBBoardConcatView(u16 useMtxIndex) + : J3DShapeMtxConcatView(useMtxIndex) + {} + + virtual ~J3DShapeMtxBBoardConcatView() {} + virtual u32 getType() const { return 'SMBB'; } + virtual void load() const; +}; + +/** + * @ingroup jsystem-j3d + * + */ +class J3DShapeMtxYBBoardConcatView : public J3DShapeMtxConcatView { +public: + J3DShapeMtxYBBoardConcatView(u16 useMtxIndex) + : J3DShapeMtxConcatView(useMtxIndex) + {} + + virtual ~J3DShapeMtxYBBoardConcatView() {} + virtual u32 getType() const { return 'SMYB'; } + virtual void load() const; +}; + #endif /* J3DSHAPEMTX_H */ diff --git a/include/JSystem/J3DGraphBase/J3DStruct.h b/include/JSystem/J3DGraphBase/J3DStruct.h index 3f9bafe12c..7ab166946a 100644 --- a/include/JSystem/J3DGraphBase/J3DStruct.h +++ b/include/JSystem/J3DGraphBase/J3DStruct.h @@ -11,6 +11,7 @@ * */ struct J3DLightInfo { + bool operator==(J3DLightInfo& other) const; J3DLightInfo& operator=(J3DLightInfo const&); /* 0x00 */ Vec mLightPosition; @@ -31,6 +32,7 @@ struct J3DTextureSRTInfo { /* 0x0C */ f32 mTranslationX; /* 0x10 */ f32 mTranslationY; + bool operator==(J3DTextureSRTInfo&) const; inline void operator=(J3DTextureSRTInfo const& other) { #ifdef __MWERKS__ __REGISTER const f32* src = &other.mScaleX; @@ -74,6 +76,7 @@ enum J3DTexMtxMode { * */ struct J3DTexMtxInfo { + bool operator==(J3DTexMtxInfo& other) const; J3DTexMtxInfo& operator=(J3DTexMtxInfo const&); void setEffectMtx(Mtx); @@ -93,7 +96,7 @@ struct J3DTexMtxInfo { struct J3DIndTexMtxInfo { J3DIndTexMtxInfo& operator=(J3DIndTexMtxInfo const&); /* 0x00 */ Mtx23 field_0x0; - /* 0x18 */ u8 field_0x18; + /* 0x18 */ s8 field_0x18; }; // Size: 0x1C /** @@ -101,7 +104,8 @@ struct J3DIndTexMtxInfo { * */ struct J3DFogInfo { - J3DFogInfo& operator=(J3DFogInfo const&); + bool operator==(J3DFogInfo&) const; + J3DFogInfo& operator=(const J3DFogInfo&); /* 0x00 */ u8 mType; /* 0x01 */ u8 mAdjEnable; @@ -119,7 +123,8 @@ struct J3DFogInfo { * */ struct J3DNBTScaleInfo { - J3DNBTScaleInfo& operator=(J3DNBTScaleInfo const&); + bool operator==(const J3DNBTScaleInfo& other) const; + J3DNBTScaleInfo& operator=(const J3DNBTScaleInfo&); /* 0x0 */ u8 mbHasScale; /* 0x4 */ Vec mScale; diff --git a/include/JSystem/J3DGraphBase/J3DSys.h b/include/JSystem/J3DGraphBase/J3DSys.h index 1429ca22fe..711639e576 100644 --- a/include/JSystem/J3DGraphBase/J3DSys.h +++ b/include/JSystem/J3DGraphBase/J3DSys.h @@ -5,12 +5,6 @@ #include #include "JSystem/J3DAssert.h" -// Perhaps move to a new J3DEnum.h? -enum J3DError { - kJ3DError_Success = 0, - kJ3DError_Alloc = 4, -}; - enum J3DSysDrawBuf { /* 0x0 */ J3DSysDrawBuf_Opa, /* 0x1 */ J3DSysDrawBuf_Xlu, diff --git a/include/JSystem/J3DGraphBase/J3DTexture.h b/include/JSystem/J3DGraphBase/J3DTexture.h index f046a75262..8c95729d66 100644 --- a/include/JSystem/J3DGraphBase/J3DTexture.h +++ b/include/JSystem/J3DGraphBase/J3DTexture.h @@ -5,7 +5,7 @@ #include "JSystem/J3DAssert.h" #include "JSystem/JUtility/JUTTexture.h" #include "global.h" -#include +#include /** * @ingroup jsystem-j3d @@ -18,7 +18,9 @@ private: /* 0x4 */ ResTIMG* mpRes; public: - J3DTexture(u16 num, ResTIMG* res) : mNum(num), unk_0x2(0), mpRes(res) {} + J3DTexture(u16 num, ResTIMG* res) : mNum(num), unk_0x2(0), mpRes(res) { + J3D_ASSERT_NULLPTR(52, res && num); + } void loadGX(u16, GXTexMapID) const; void entryNum(u16); @@ -29,11 +31,11 @@ public: ResTIMG* getResTIMG(u16 index) const { J3D_ASSERT_RANGE(72, index < mNum); - return &mpRes[index]; + return &mpRes[index]; } void setResTIMG(u16 index, const ResTIMG& timg) { - JUT_ASSERT_MSG(81, (bool)(index < mNum), "Error : range over."); + J3D_ASSERT_RANGE(81, index < mNum); mpRes[index] = timg; mpRes[index].imageOffset = ((mpRes[index].imageOffset + (uintptr_t)&timg - (uintptr_t)(mpRes + index))); mpRes[index].paletteOffset = ((mpRes[index].paletteOffset + (uintptr_t)&timg - (uintptr_t)(mpRes + index))); diff --git a/include/JSystem/J3DGraphBase/J3DVertex.h b/include/JSystem/J3DGraphBase/J3DVertex.h index 0aab64cd8e..1bfd011219 100644 --- a/include/JSystem/J3DGraphBase/J3DVertex.h +++ b/include/JSystem/J3DGraphBase/J3DVertex.h @@ -16,8 +16,10 @@ class J3DVertexBuffer; struct J3DVtxColorCalc { void calc(J3DModel*); virtual void calc(J3DVertexBuffer*); + virtual ~J3DVtxColorCalc() {} + + bool checkFlag(u32 flag) { return mFlags & flag ? true : false; } - /* 0x0 */ void* vtable; // inlined vtable? /* 0x4 */ u32 mFlags; /* 0x8 */ J3DAnmVtxColor* mpVtxColor; }; @@ -38,6 +40,7 @@ public: void* getVtxNBTArray() const { return mVtxNBTArray; } u32 getNrmNum() const { return mNrmNum; } u32 getVtxNum() const { return mVtxNum; } + u32 getColNum() const { return mColNum; } GXVtxAttrFmtList* getVtxAttrFmtList() const { return mVtxAttrFmtList; } u8 getVtxPosFrac() const { return mVtxPosFrac; } u8 getVtxNrmFrac() const { return mVtxNrmFrac; } @@ -129,6 +132,12 @@ public: mVtxNrmArray[1] = temp; } + void swapVtxColArrayPointer() { + GXColor* temp = mVtxColArray[0]; + mVtxColArray[0] = mVtxColArray[1]; + mVtxColArray[1] = temp; + } + void* getVtxPosArrayPointer(int index) { return mVtxPosArray[index]; } @@ -137,6 +146,10 @@ public: return mVtxNrmArray[index]; } + GXColor* getVtxColArrayPointer(int index) { + return mVtxColArray[index]; + } + private: /* 0x00 */ J3DVertexData* mVtxData; /* 0x04 */ void* mVtxPosArray[2]; diff --git a/include/JSystem/J3DGraphLoader/J3DAnmLoader.h b/include/JSystem/J3DGraphLoader/J3DAnmLoader.h index cb70bbffa2..ad5afe3245 100644 --- a/include/JSystem/J3DGraphLoader/J3DAnmLoader.h +++ b/include/JSystem/J3DGraphLoader/J3DAnmLoader.h @@ -1,7 +1,30 @@ #ifndef J3DANMLOADER_H #define J3DANMLOADER_H -#include "JSystem/J3DGraphAnimator/J3DAnimation.h" +class J3DAnmClusterFull; +struct J3DAnmClusterFullData; +class J3DAnmClusterKey; +struct J3DAnmClusterKeyData; +class J3DAnmColorFull; +struct J3DAnmColorFullData; +class J3DAnmColorKey; +struct J3DAnmColorKeyData; +class J3DAnmTevRegKey; +struct J3DAnmTevRegKeyData; +class J3DAnmTexPattern; +struct J3DAnmTexPatternFullData; +class J3DAnmTextureSRTKey; +struct J3DAnmTextureSRTKeyData; +class J3DAnmTransformFull; +struct J3DAnmTransformFullData; +class J3DAnmTransformKey; +struct J3DAnmTransformKeyData; +class J3DAnmVisibilityFull; +struct J3DAnmVisibilityFullData; +class J3DAnmVtxColorFull; +struct J3DAnmVtxColorFullData; +class J3DAnmVtxColorKey; +struct J3DAnmVtxColorKeyData; enum J3DAnmLoaderDataBaseFlag { J3DLOADER_UNK_FLAG0, @@ -28,29 +51,6 @@ public: virtual ~J3DAnmLoader() {} }; -class J3DAnmKeyLoader_v15 : public J3DAnmLoader { -public: - J3DAnmKeyLoader_v15(); - void readAnmTransform(J3DAnmTransformKeyData const*); - void setAnmTransform(J3DAnmTransformKey*, J3DAnmTransformKeyData const*); - void readAnmTextureSRT(J3DAnmTextureSRTKeyData const*); - void setAnmTextureSRT(J3DAnmTextureSRTKey*, J3DAnmTextureSRTKeyData const*); - void readAnmColor(J3DAnmColorKeyData const*); - void setAnmColor(J3DAnmColorKey*, J3DAnmColorKeyData const*); - void readAnmCluster(J3DAnmClusterKeyData const*); - void setAnmCluster(J3DAnmClusterKey*, J3DAnmClusterKeyData const*); - void readAnmTevReg(J3DAnmTevRegKeyData const*); - void setAnmTevReg(J3DAnmTevRegKey*, J3DAnmTevRegKeyData const*); - void readAnmVtxColor(J3DAnmVtxColorKeyData const*); - void setAnmVtxColor(J3DAnmVtxColorKey*, J3DAnmVtxColorKeyData const*); - - virtual J3DAnmBase* load(void const*); - virtual void setResource(J3DAnmBase*, void const*); - virtual ~J3DAnmKeyLoader_v15(); - - /* 0x4 */ J3DAnmBase* mAnm; -}; - class J3DAnmFullLoader_v15 : public J3DAnmLoader { public: J3DAnmFullLoader_v15(); @@ -74,4 +74,27 @@ public: /* 0x4 */ J3DAnmBase* mAnm; }; +class J3DAnmKeyLoader_v15 : public J3DAnmLoader { +public: + J3DAnmKeyLoader_v15(); + void readAnmTransform(J3DAnmTransformKeyData const*); + void setAnmTransform(J3DAnmTransformKey*, J3DAnmTransformKeyData const*); + void readAnmTextureSRT(J3DAnmTextureSRTKeyData const*); + void setAnmTextureSRT(J3DAnmTextureSRTKey*, J3DAnmTextureSRTKeyData const*); + void readAnmColor(J3DAnmColorKeyData const*); + void setAnmColor(J3DAnmColorKey*, J3DAnmColorKeyData const*); + void readAnmCluster(J3DAnmClusterKeyData const*); + void setAnmCluster(J3DAnmClusterKey*, J3DAnmClusterKeyData const*); + void readAnmTevReg(J3DAnmTevRegKeyData const*); + void setAnmTevReg(J3DAnmTevRegKey*, J3DAnmTevRegKeyData const*); + void readAnmVtxColor(J3DAnmVtxColorKeyData const*); + void setAnmVtxColor(J3DAnmVtxColorKey*, J3DAnmVtxColorKeyData const*); + + virtual J3DAnmBase* load(void const*); + virtual void setResource(J3DAnmBase*, void const*); + virtual ~J3DAnmKeyLoader_v15(); + + /* 0x4 */ J3DAnmBase* mAnm; +}; + #endif /* J3DANMLOADER_H */ diff --git a/include/JSystem/J3DGraphLoader/J3DJointFactory.h b/include/JSystem/J3DGraphLoader/J3DJointFactory.h index fe918fe377..9ab17fc65a 100644 --- a/include/JSystem/J3DGraphLoader/J3DJointFactory.h +++ b/include/JSystem/J3DGraphLoader/J3DJointFactory.h @@ -30,7 +30,7 @@ struct J3DJointFactory { J3DJointInitData* mJointInitData; u16* mIndexTable; - u16 getKind(int no) const { return mJointInitData[mIndexTable[no]].mKind; } + u8 getKind(int no) const { return mJointInitData[mIndexTable[no]].mKind; } u8 getScaleCompensate(int no) const { return mJointInitData[mIndexTable[no]].mScaleCompensate; } const J3DTransformInfo& getTransformInfo(int no) const { return mJointInitData[mIndexTable[no]].mTransformInfo; diff --git a/include/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.h b/include/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.h index e1369bbe5f..af166e1b13 100644 --- a/include/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.h +++ b/include/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.h @@ -77,7 +77,7 @@ public: const u8 newDither(int) const; J3DNBTScale newNBTScale(int) const; - u16 getMaterialID(u16 idx) { return mpMaterialID[idx]; } + u16 getMaterialID(int idx) const { return mpMaterialID[idx]; } u8 getMaterialMode(int idx) const { return mpMaterialInitData[mpMaterialID[idx]].mMaterialMode; } /* 0x00 */ u16 mMaterialNum; diff --git a/include/JSystem/J3DGraphLoader/J3DModelLoader.h b/include/JSystem/J3DGraphLoader/J3DModelLoader.h index a0a9709002..847397a7dc 100644 --- a/include/JSystem/J3DGraphLoader/J3DModelLoader.h +++ b/include/JSystem/J3DGraphLoader/J3DModelLoader.h @@ -1,6 +1,7 @@ #ifndef J3DMODELLOADER_H #define J3DMODELLOADER_H +#include "JSystem/J3DGraphBase/J3DSys.h" #include "dolphin/mtx.h" class J3DModelData; @@ -301,17 +302,6 @@ public: /* 0x1A */ u16 mEnvelopeSize; }; -/** - * @ingroup jsystem-j3d - * - */ -class J3DModelLoader_v21 : public J3DModelLoader { -public: - ~J3DModelLoader_v21() {} - void readMaterial_v21(J3DMaterialBlock_v21 const*, u32); - void readMaterialTable_v21(J3DMaterialBlock_v21 const*, u32); -}; - /** * @ingroup jsystem-j3d * @@ -325,6 +315,17 @@ public: u32 calcSizeMaterialTable(J3DMaterialBlock const*, u32); }; +/** + * @ingroup jsystem-j3d + * + */ +class J3DModelLoader_v21 : public J3DModelLoader { +public: + ~J3DModelLoader_v21() {} + void readMaterial_v21(J3DMaterialBlock_v21 const*, u32); + void readMaterialTable_v21(J3DMaterialBlock_v21 const*, u32); +}; + /** * @ingroup jsystem-j3d * @@ -332,6 +333,18 @@ public: class J3DModelLoaderDataBase { public: static J3DModelData* load(void const* i_data, u32 i_flags); + static J3DModelData* loadBinaryDisplayList(const void* i_data, u32 flags); +}; + +/** + * @ingroup jsystem-j3d + * + */ +struct J3DMtxCalcJ3DSysInitSoftimage { + static void init(const Vec& param_0, const Mtx& param_1) { + J3DSys::mCurrentS = param_0; + MTXCopy(param_1, J3DSys::mCurrentMtx); + } }; #endif /* J3DMODELLOADER_H */ diff --git a/include/JSystem/J3DGraphLoader/J3DShapeFactory.h b/include/JSystem/J3DGraphLoader/J3DShapeFactory.h index abee1f9bbb..702de3bdf4 100644 --- a/include/JSystem/J3DGraphLoader/J3DShapeFactory.h +++ b/include/JSystem/J3DGraphLoader/J3DShapeFactory.h @@ -66,7 +66,7 @@ struct J3DShapeFactory { /* 0x18 */ J3DShapeDrawInitData* mDrawInitData; /* 0x1C */ u8* mVcdVatCmdBuffer; - u32 getMtxGroupNum(int no) const { return mShapeInitData[mIndexTable[no]].mMtxGroupNum; } + u16 getMtxGroupNum(int no) const { return mShapeInitData[mIndexTable[no]].mMtxGroupNum; } GXVtxDescList* getVtxDescList(int no) const { return (GXVtxDescList*)((u8*)mVtxDescList + mShapeInitData[mIndexTable[no]].mVtxDescListIndex); } f32 getRadius(int no) const { return mShapeInitData[mIndexTable[no]].mRadius; } Vec& getMin(int no) const { return mShapeInitData[mIndexTable[no]].mMin; } diff --git a/include/JSystem/JAWExtSystem/JAWWindow.h b/include/JSystem/JAWExtSystem/JAWWindow.h index 942a25a90c..6228c10376 100644 --- a/include/JSystem/JAWExtSystem/JAWWindow.h +++ b/include/JSystem/JAWExtSystem/JAWWindow.h @@ -22,19 +22,10 @@ public: class JAWWindow { public: - class TJ2DWindowDraw : public J2DWindow { - public: - TJ2DWindowDraw(u32, const JGeometry::TBox2&, const char*); - - void drawPane(int x, int y, const J2DGrafContext* p_grafCtx) { - J2DPane::draw(x, y, p_grafCtx, true, true); - calcMtx(); - } - }; - class TWindowText : public J2DPane { public: TWindowText(JAWWindow*); + virtual ~TWindowText(); virtual void drawSelf(f32, f32); virtual void drawSelf(f32, f32, Mtx*); @@ -43,6 +34,17 @@ public: /* 0x11C */ JUTPoint field_0x11c; }; + class TJ2DWindowDraw : public J2DWindow { + public: + TJ2DWindowDraw(u32 param_1, const JGeometry::TBox2& param_2, const char* param_3) : J2DWindow(param_1, param_2, param_3, TEXTUREBASE_0, NULL) {} + virtual ~TJ2DWindowDraw() {} + + void drawPane(int x, int y, const J2DGrafContext* p_grafCtx) { + J2DPane::draw(x, y, p_grafCtx, true, true); + calcMtx(); + } + }; + JAWWindow(const char*, int, int); virtual ~JAWWindow(); virtual void onDraw(JAWGraphContext*); diff --git a/include/JSystem/JAudio2/JAISeqDataMgr.h b/include/JSystem/JAudio2/JAISeqDataMgr.h index c207f0878c..510f1f4905 100644 --- a/include/JSystem/JAudio2/JAISeqDataMgr.h +++ b/include/JSystem/JAudio2/JAISeqDataMgr.h @@ -2,7 +2,7 @@ #define JAISEQDATAMGR_H #include "JSystem/JAudio2/JAISound.h" -#include +#include /** * @ingroup jsystem-jaudio diff --git a/include/JSystem/JAudio2/JASDSPChannel.h b/include/JSystem/JAudio2/JASDSPChannel.h index 0bf221ef4a..f843562f37 100644 --- a/include/JSystem/JAudio2/JASDSPChannel.h +++ b/include/JSystem/JAudio2/JASDSPChannel.h @@ -29,6 +29,7 @@ struct JASDSPChannel { void drop(); void setPriority(u8); void updateProc(); + u8 getStatus() const { return mStatus; } static void initAll(); static JASDSPChannel* alloc(u8, Callback, void*); diff --git a/include/JSystem/JAudio2/JASHeapCtrl.h b/include/JSystem/JAudio2/JASHeapCtrl.h index 759ac8fda6..6c219ac091 100644 --- a/include/JSystem/JAudio2/JASHeapCtrl.h +++ b/include/JSystem/JAudio2/JASHeapCtrl.h @@ -334,7 +334,7 @@ template JASMemPool JASPoolAllocObject::memPool_; /** * @ingroup jsystem-jaudio - * + * */ template class JASMemPool_MultiThreaded : public JASGenericMemPool { diff --git a/include/JSystem/JAudio2/JAUStreamAramMgr.h b/include/JSystem/JAudio2/JAUStreamAramMgr.h index d33306d323..bf861b495d 100644 --- a/include/JSystem/JAudio2/JAUStreamAramMgr.h +++ b/include/JSystem/JAudio2/JAUStreamAramMgr.h @@ -6,7 +6,7 @@ #include "JSystem/JAudio2/JASHeapCtrl.h" #include "JSystem/JUtility/JUTAssert.h" #include -#include +#include /** * @ingroup jsystem-jaudio diff --git a/include/JSystem/JFramework/JFWDisplay.h b/include/JSystem/JFramework/JFWDisplay.h index df1917de48..b451f584bf 100644 --- a/include/JSystem/JFramework/JFWDisplay.h +++ b/include/JSystem/JFramework/JFWDisplay.h @@ -25,6 +25,7 @@ public: void cancelAlarm() { OSCancelAlarm(this); } void removeLink() { sList.remove(&mLink); } void appendLink() { sList.append(&mLink); } + OSAlarm* getAlarm() const { return (OSAlarm*)this; } OSThread* getThread() const { return mThread; } void setThread(OSThread* thread) { mThread = thread; } @@ -134,7 +135,7 @@ private: /* 0x4A */ u8 field_0x4a; }; -inline void JUTChangeFrameBuffer(void* buffer, u16 height, u16 width) { +inline void JUTChangeFrameBuffer(void* buffer, u16 width, u16 height) { JUTDirectPrint::getManager()->changeFrameBuffer(buffer, width, height); } diff --git a/include/JSystem/JGadget/define.h b/include/JSystem/JGadget/define.h index d6a694a445..a8c7323e8f 100644 --- a/include/JSystem/JGadget/define.h +++ b/include/JSystem/JGadget/define.h @@ -55,9 +55,9 @@ private: JGadget_outMessage out(JGadget_outMessage::warning, __FILE__, line); \ out << msg << (arg1) << (arg2) << (arg3) << (arg4); -#define JGADGET_EXITWARN(cond) \ - if (!(cond)) { \ - false; \ +#define JGADGET_EXITWARN(line, COND) \ + if (!(COND)) { \ + JGadget_outMessage(JGadget_outMessage::warning, __FILE__, line) << #COND, false; \ return false; \ } #else @@ -65,6 +65,7 @@ private: #define JGADGET_WARNMSG(line, msg) (void)0 #define JGADGET_WARNMSG1(line, msg, arg) (void)0 #define JGADGET_WARNMSG4(line, msg, arg1, arg2, arg3, arg4) (void)0 +#define JGADGET_EXITWARN(line, COND) (void)0 #endif } #endif diff --git a/include/JSystem/JGadget/linklist.h b/include/JSystem/JGadget/linklist.h index 4728f4197e..f886a2880e 100644 --- a/include/JSystem/JGadget/linklist.h +++ b/include/JSystem/JGadget/linklist.h @@ -10,88 +10,96 @@ namespace JGadget { struct TLinkListNode { TLinkListNode() { - mNext = NULL; - mPrev = NULL; + pNext_ = NULL; + pPrev_ = NULL; } ~TLinkListNode() {} - TLinkListNode* getNext() const { return mNext; } - TLinkListNode* getPrev() const { return mPrev; } + TLinkListNode* getNext() const { return pNext_; } + TLinkListNode* getPrev() const { return pPrev_; } + void clear_() { pNext_ = NULL; pPrev_ = NULL; } public: - /* 0x0 */ TLinkListNode* mNext; - /* 0x4 */ TLinkListNode* mPrev; + /* 0x0 */ TLinkListNode* pNext_; + /* 0x4 */ TLinkListNode* pPrev_; }; // Size: 0x8 struct TNodeLinkList { - struct iterator { - iterator() { node = NULL; } - explicit iterator(TLinkListNode* pNode) { node = pNode; } - iterator& operator=(const iterator& other) { node = other.node; return *this; } + struct iterator : public std::iterator { + iterator() { p_ = NULL; } + explicit iterator(TLinkListNode* pNode) { p_ = pNode; } + iterator& operator=(const iterator& other) { p_ = other.p_; return *this; } - iterator& operator++() { node = node->getNext(); return *this; } - iterator& operator--() { node = node->getPrev(); return *this; } + iterator& operator++() { p_ = p_->getNext(); return *this; } + iterator& operator--() { p_ = p_->getPrev(); return *this; } iterator operator++(int) { const iterator old(*this); (void)++*this; return old; } iterator operator--(int) { const iterator old(*this); (void)--*this; return old; } - friend bool operator==(iterator a, iterator b) { return a.node == b.node; } + friend bool operator==(iterator a, iterator b) { return a.p_ == b.p_; } friend bool operator!=(iterator a, iterator b) { return !(a == b); } - TLinkListNode* operator->() const { return node; } - TLinkListNode& operator*() const { return *node; } + TLinkListNode* operator->() const { return p_; } + TLinkListNode& operator*() const { + JUT_ASSERT(196, p_!=NULL); + return *p_; + } public: - /* 0x00 */ TLinkListNode* node; + /* 0x00 */ TLinkListNode* p_; }; struct const_iterator { - explicit const_iterator(TLinkListNode* pNode) { node = pNode; } - explicit const_iterator(iterator it) { node = it.node; } + explicit const_iterator(const TLinkListNode* pNode) { p_ = pNode; } + explicit const_iterator(const iterator it) { p_ = it.p_; } - const_iterator& operator++() { node = node->getNext(); return *this; } - const_iterator& operator--() { node = node->getPrev(); return *this; } + const_iterator& operator++() { p_ = p_->getNext(); return *this; } + const_iterator& operator--() { p_ = p_->getPrev(); return *this; } const_iterator operator++(int) { const const_iterator old(*this); (void)++*this; return old; } const_iterator operator--(int) { const const_iterator old(*this); (void)--*this; return old; } - friend bool operator==(const_iterator a, const_iterator b) { return a.node == b.node; } + friend bool operator==(const_iterator a, const_iterator b) { return a.p_ == b.p_; } friend bool operator!=(const_iterator a, const_iterator b) { return !(a == b); } - friend bool operator==(const_iterator a, iterator b) { return a.node == b.node; } + friend bool operator==(const_iterator a, iterator b) { return a.p_ == b.p_; } friend bool operator!=(const_iterator a, iterator b) { return !(a == b); } - const TLinkListNode* operator->() const { return node; } - const TLinkListNode& operator*() const { return *node; } + const TLinkListNode* operator->() const { return p_; } + const TLinkListNode& operator*() const { return *p_; } public: - /* 0x00 */ TLinkListNode* node; + /* 0x00 */ const TLinkListNode* p_; }; - TNodeLinkList() : ocObject_() { Initialize_(); } + TNodeLinkList() : oNode_() { Initialize_(); } ~TNodeLinkList(); void Initialize_() { count = 0; - ocObject_.mNext = &ocObject_; - ocObject_.mPrev = &ocObject_; + oNode_.pNext_ = &oNode_; + oNode_.pPrev_ = &oNode_; } - iterator begin() { return iterator(ocObject_.getNext()); } - const_iterator begin() const { return const_iterator(ocObject_.getNext()); } - iterator end() { return iterator(&ocObject_); } - const_iterator end() const { return const_iterator((TLinkListNode*)(&ocObject_)); } + iterator begin() { return iterator(oNode_.getNext()); } + const_iterator begin() const { return const_iterator(oNode_.getNext()); } + iterator end() { return iterator(&oNode_); } + const_iterator end() const { return const_iterator((TLinkListNode*)(&oNode_)); } u32 size() const { return count; } bool empty() const { return size() == 0; } iterator pop_front() { return erase(begin()); } + void clear() { erase(begin(), end()); } - iterator erase(JGadget::TNodeLinkList::iterator, JGadget::TNodeLinkList::iterator); - iterator erase(JGadget::TNodeLinkList::iterator); - void splice(JGadget::TNodeLinkList::iterator, JGadget::TNodeLinkList&, - JGadget::TNodeLinkList::iterator); - iterator Find(const JGadget::TLinkListNode*); - iterator Insert(JGadget::TNodeLinkList::iterator, JGadget::TLinkListNode*); - iterator Erase(JGadget::TLinkListNode*); - void Remove(JGadget::TLinkListNode*); + iterator erase(iterator, iterator); + iterator erase(iterator); + void splice(iterator, TNodeLinkList&); + void splice(iterator, TNodeLinkList&, iterator); + void splice(iterator, TNodeLinkList&, iterator, iterator); + iterator Find(const TLinkListNode*); + iterator Insert(iterator, TLinkListNode*); + iterator Erase(TLinkListNode*); + void Remove(TLinkListNode*); + bool Confirm() const; + bool Confirm_iterator(const_iterator) const; - bool Iterator_isEnd_(const_iterator it) const { return it.node == &ocObject_; } + bool Iterator_isEnd_(const_iterator it) const { return it.p_ == &oNode_; } template void Remove_if(Predicate predicate, TNodeLinkList& tList) { iterator it = begin(); @@ -115,7 +123,7 @@ struct TNodeLinkList { public: /* 0x00 */ u32 count; - /* 0x04 */ TLinkListNode ocObject_; + /* 0x04 */ TLinkListNode oNode_; }; // Size: 0xC template @@ -130,7 +138,7 @@ struct TLinkList : TNodeLinkList { //TODO: Probably fakematch? Not sure what's going on here exactly (TIterator&)*this = (const TIterator&)rhs; - this->node = rhs.node; + this->p_ = rhs.p_; return *this; } diff --git a/include/JSystem/JGadget/std-memory.h b/include/JSystem/JGadget/std-memory.h index 5b5a64b59e..f9cccd9c7b 100644 --- a/include/JSystem/JGadget/std-memory.h +++ b/include/JSystem/JGadget/std-memory.h @@ -6,7 +6,7 @@ namespace JGadget { template struct TAllocator { - T* allocate(u32 count, void *param_2) { + T* allocate(u32 count, const void *param_2) { return AllocateRaw(count * sizeof(T)); } @@ -18,7 +18,7 @@ struct TAllocator { DeallocateRaw(mem); } - void DeallocateRaw(T* mem) { + void DeallocateRaw(void* mem) { delete mem; } diff --git a/include/JSystem/JGadget/std-vector.h b/include/JSystem/JGadget/std-vector.h index 4e74855e55..74553888c9 100644 --- a/include/JSystem/JGadget/std-vector.h +++ b/include/JSystem/JGadget/std-vector.h @@ -1,10 +1,11 @@ #ifndef STD_VECTOR_H #define STD_VECTOR_H +#include "JSystem/JGadget/define.h" #include "JSystem/JGadget/std-memory.h" #include #include -#include +#include namespace JGadget { namespace vector { @@ -33,7 +34,9 @@ struct TVector { typedef const T* const_iterator; TVector(Allocator const& allocator) { +#if PLATFORM_GCN mAllocator = allocator; +#endif pBegin_ = NULL; pEnd_ = pBegin_; mCapacity = 0; @@ -41,48 +44,52 @@ struct TVector { } ~TVector() { +#if DEBUG + Confirm(); +#endif clear(); + JGADGET_ASSERTWARN(250, size()==0); mAllocator.deallocate(pBegin_, 0); } void insert(T* pos, u32 count, const T& val) { - if (count != 0) { - T* ptr = Insert_raw(pos, count); - if (ptr == end()) { - /* JGadget_outMessage sp120(JGadget_outMessage::warning, __FILE__, 0x141); - sp120 << "can't allocate memory"; */ - } else { - std::uninitialized_fill_n(ptr, count, val); - } + if (count == 0) { + return; + } + + T* ptr = Insert_raw(pos, count); + if (ptr == end()) { + JGADGET_WARNMSG(321, "can't allocate memory"); + } else { + std::uninitialized_fill_n(ptr, count, val); } } - T* Insert_raw(T* pIt, u32 pCount) { - JUT_ASSERT(446, (pBegin_ <= pIt) && (pIt <= pEnd_)); - - T* const pFirst = pIt; + T* Insert_raw(T* pFirst, u32 pCount) { + T* const pIt = pFirst; + JUT_ASSERT(446, (pBegin_<=pIt)&&(pIt<=pEnd_)); if (pCount == 0) { - return pIt; + return pFirst; } if (pCount + size() <= mCapacity) { - void** newEnd = pFirst + pCount; + void** newEnd = pIt + pCount; if (newEnd < pEnd_) { void** pOverwrittenValues = pEnd_ - pCount; std::uninitialized_copy(pOverwrittenValues, pEnd_, pEnd_); - std::copy_backward(pFirst, pOverwrittenValues, pEnd_); - DestroyElement_(pFirst, newEnd); + std::copy_backward(pIt, pOverwrittenValues, pEnd_); + DestroyElement_(pIt, newEnd); pEnd_ += pCount; - return pIt; + return pFirst; } else { - std::uninitialized_copy(pFirst, pEnd_, newEnd); - DestroyElement_(pFirst, pEnd_); + std::uninitialized_copy(pIt, pEnd_, newEnd); + DestroyElement_(pIt, pEnd_); pEnd_ += pCount; - return pIt; + return pFirst; } } @@ -95,8 +102,8 @@ struct TVector { TDestructed_deallocate_ destructionDeallocator(mAllocator, newDataPointer); - void** const endOfCopy = std::uninitialized_copy(pBegin_, pFirst, newDataPointer); - std::uninitialized_copy(pFirst, pEnd_, endOfCopy + pCount); + void** const endOfCopy = std::uninitialized_copy(pBegin_, pIt, newDataPointer); + std::uninitialized_copy(pIt, pEnd_, endOfCopy + pCount); DestroyElement_all_(); destructionDeallocator.set(pBegin_); @@ -126,10 +133,18 @@ struct TVector { return (int)((uintptr_t)pEnd_ - (uintptr_t)pBegin_) / 4; } - u32 capacity() { return mCapacity; } + u32 capacity() const { return mCapacity; } - u32 GetSize_extend_(u32 count) { - JUT_ASSERT(0x22B, pfnExtend_!=NULL); + bool Confirm() const { + if (size() > mCapacity) { + JGADGET_WARNMSG(507, "illegal size"); + return false; + } + return true; + } + + u32 GetSize_extend_(u32 count) const { + JUT_ASSERT(555, pfnExtend_!=NULL); u32 oldSize = size(); u32 neededNewSpace = oldSize + count; @@ -138,20 +153,28 @@ struct TVector { return neededNewSpace > extendedSize ? neededNewSpace : extendedSize; } - void DestroyElement_(T* start, T* end) { - for (; start != end; start++) { - mAllocator.destroy(start); + void DestroyElement_(T* pFirst, T* pLast) { + JUT_ASSERT(536, (pBegin_<=pFirst)&&(pFirst<=pEnd_)); + JUT_ASSERT(537, (pBegin_<=pLast)&&(pLast<=pEnd_)); + T* it = pFirst; + for (; it != pLast; it++) { + mAllocator.destroy(it); } } void DestroyElement_all_() { DestroyElement_(pBegin_, pEnd_); } - T* erase(T* start, T* end) { - T* vectorEnd = pEnd_; - T* ppvVar3 = std::copy(end, vectorEnd, start); + T* erase(T* pFirst, T* pLast) { + iterator pItFirst = pFirst; + iterator pItLast = pLast; + JUT_ASSERT(347, (pBegin_<=pItFirst)&&(pItFirst<=pEnd_)) + JUT_ASSERT(348, (pBegin_<=pItLast)&&(pItLast<=pEnd_)); + JUT_ASSERT(349, pItFirst<=pItLast); + T* vectorEnd = pEnd_; // DEBUG NONMATCHING + T* ppvVar3 = std::copy(pItLast, vectorEnd, pItFirst); DestroyElement_(ppvVar3, pEnd_); pEnd_ = ppvVar3; - return start; + return pFirst; } void clear() { erase(begin(), end()); } diff --git a/include/JSystem/JGeometry.h b/include/JSystem/JGeometry.h index c13d838082..62f2a743c1 100644 --- a/include/JSystem/JGeometry.h +++ b/include/JSystem/JGeometry.h @@ -130,19 +130,16 @@ struct TVec3 { } }; -inline void setTVec3f(const f32* vec_a, f32* vec_b) { +inline void setTVec3f(const __REGISTER f32* vec_a, __REGISTER f32* vec_b) { #ifdef __MWERKS__ - const __REGISTER f32* v_a = vec_a; - __REGISTER f32* v_b = vec_b; - __REGISTER f32 a_x; __REGISTER f32 b_x; asm { - psq_l a_x, 0(v_a), 0, 0 - lfs b_x, 8(v_a) - psq_st a_x, 0(v_b), 0, 0 - stfs b_x, 8(v_b) + psq_l a_x, 0(vec_a), 0, 0 + lfs b_x, 8(vec_a) + psq_st a_x, 0(vec_b), 0, 0 + stfs b_x, 8(vec_b) }; #endif } @@ -247,7 +244,7 @@ struct TVec3 : public Vec { return *this; } - inline TVec3 operator+(const TVec3& b) { + inline TVec3 operator+(const TVec3& b) const { TVec3 a = *this; a += b; return a; @@ -289,6 +286,11 @@ struct TVec3 : public Vec { } void scale(__REGISTER f32 sc) { +#if DEBUG + x *= sc; + y *= sc; + z *= sc; +#else #ifdef __MWERKS__ __REGISTER f32 z; __REGISTER f32 x_y; @@ -303,6 +305,7 @@ struct TVec3 : public Vec { ps_muls0 zres, z, sc psq_st zres, 8(dst), 1, 0 }; +#endif #endif } @@ -447,6 +450,14 @@ struct TVec2 { y += other.y; } + bool equals(const TVec2& other) const { + bool result = false; + if (this->x == other.x && this->y == other.y) { + result = true; + } + return result; + } + bool isAbove(const TVec2& other) const { return (x >= other.x) && (y >= other.y) ? true : false; } @@ -463,6 +474,10 @@ struct TVec2 { return TUtil::sqrt(squared()); } + bool operator==(const TVec2& other) const { + return equals(other); + } + T x; T y; }; @@ -497,6 +512,18 @@ template<> struct TBox > { return isValid(); } + void absolute() { + if (this->isValid()) { + return; + } + + TBox > box(*this); + this->i.setMin(box.i); + this->i.setMin(box.f); + this->f.setMax(box.i); + this->f.setMax(box.f); + } + TVec2 i, f; }; @@ -509,16 +536,6 @@ struct TBox2 : public TBox > { } TBox2(f32 x0, f32 y0, f32 x1, f32 y1) { set(x0, y0, x1, y1); } - void absolute() { - if (!this->isValid()) { - TBox2 box(*this); - this->i.setMin(box.i); - this->i.setMin(box.f); - this->f.setMax(box.i); - this->f.setMax(box.f); - } - } - void set(const TBox >& other) { set(other.i, other.f); } void set(const TVec2& i, const TVec2& f) { this->i.set(i), this->f.set(f); } void set(f32 x0, f32 y0, f32 x1, f32 y1) { this->i.set(x0, y0); this->f.set(x1, y1); } diff --git a/include/JSystem/JHostIO/JORFile.h b/include/JSystem/JHostIO/JORFile.h index 7e05883893..cd2f048c48 100644 --- a/include/JSystem/JHostIO/JORFile.h +++ b/include/JSystem/JHostIO/JORFile.h @@ -66,9 +66,13 @@ public: void setNExtensionName(u16 length) { mNExtensionName = length; } void setStatus(s32 status) { mStatus = status; } - virtual ~JORFile() {} - virtual int open(const char* path, u32 flags, const char* extMask, const char* defaultExt, const char*, const char* fileSuffix); - virtual int open(u32 flags, const char* extMask, const char* defaultExt, const char*, const char* fileSuffix); + virtual ~JORFile() { + close(); + } + virtual int open(const char* path, u32 flags, const char* extMask, const char* defaultExt, const char* param_4, const char* fileSuffix); + virtual int open(u32 flags, const char* extMask, const char* defaultExt, const char* param_4, const char* fileSuffix) { + return open(NULL, flags, extMask, defaultExt, param_4, fileSuffix); + } virtual void close(); virtual s32 readData(void* buffer, s32 length); virtual s32 writeData(const void* buffer, s32 length); diff --git a/include/JSystem/JHostIO/JORMContext.h b/include/JSystem/JHostIO/JORMContext.h index f16ffdd57d..0db8cf22a6 100644 --- a/include/JSystem/JHostIO/JORMContext.h +++ b/include/JSystem/JHostIO/JORMContext.h @@ -2,7 +2,7 @@ #define JORMCONTEXT_H #include -#include +#include #include "JSystem/JHostIO/JORReflexible.h" #include "JSystem/JSupport/JSUMemoryStream.h" diff --git a/include/JSystem/JKernel/JKRExpHeap.h b/include/JSystem/JKernel/JKRExpHeap.h index f7739ada1d..1535ba757b 100644 --- a/include/JSystem/JKernel/JKRExpHeap.h +++ b/include/JSystem/JKernel/JKRExpHeap.h @@ -2,7 +2,7 @@ #define JKREXPHEAP_H #include "JSystem/JKernel/JKRHeap.h" -#include +#include /** * @ingroup jsystem-jkernel diff --git a/include/JSystem/JKernel/JKRHeap.h b/include/JSystem/JKernel/JKRHeap.h index 77a4acd8e3..c23b72180f 100644 --- a/include/JSystem/JKernel/JKRHeap.h +++ b/include/JSystem/JKernel/JKRHeap.h @@ -4,6 +4,7 @@ #include "JSystem/JKernel/JKRDisposer.h" #include #include "global.h" +#include class JKRHeap; typedef void (*JKRErrorHandler)(void*, u32, int); @@ -204,16 +205,6 @@ void* operator new[](size_t size, JKRHeap* heap, int alignment); void operator delete(void* ptr); void operator delete[](void* ptr); -#ifdef __MWERKS__ -inline void* operator new(size_t size, void* ptr) { - return ptr; -} -#endif - -inline void* operator new[](size_t size, void* ptr) { - return ptr; -} - void JKRDefaultMemoryErrorRoutine(void* heap, u32 size, int alignment); inline void* JKRAllocFromHeap(JKRHeap* heap, u32 size, int alignment) { diff --git a/include/JSystem/JMath/JMATrigonometric.h b/include/JSystem/JMath/JMATrigonometric.h index 8b15f6624e..9e12850a76 100644 --- a/include/JSystem/JMath/JMATrigonometric.h +++ b/include/JSystem/JMath/JMATrigonometric.h @@ -2,8 +2,18 @@ #define JMATRIGONOMETRIC_H #include "dolphin/types.h" +#include #include +#ifdef __cplusplus +extern "C" { +#endif + extern double asin(double); + extern double atan(double); +#ifdef __cplusplus +} +#endif + namespace JMath { template struct TAngleConstant_; @@ -28,6 +38,16 @@ template struct TSinCosTable { std::pair table[1 << N]; + TSinCosTable() { + init(); + } + void init() { + for (int i = 0; i < 1 << N; i++) { + table[i].first = sin((i * f64(TAngleConstant_::RADIAN_DEG360())) / (1 << N)); + table[i].second = cos((i * f64(TAngleConstant_::RADIAN_DEG360())) / (1 << N)); + } + } + T sinShort(s16 v) const { return table[(u16)v >> (16U - N)].first; } T cosShort(s16 v) const { return table[(u16)v >> (16U - N)].second; } @@ -64,9 +84,23 @@ struct TSinCosTable { * @ingroup jsystem-jmath * */ +template struct TAtanTable { - f32 table[1025]; + T table[N + 1]; u8 pad[0x1C]; + + TAtanTable() { + init(); + } + + void init() { + // u32 cast needed for cmplwi instead of cmpwi + for (int i = 0; i < (u32)N; i++) { + table[i] = atan(i / (f64)N); + } + table[0] = 0.0f; + table[N] = TAngleConstant_::RADIAN_DEG180() / 4.0f; + } }; /** @@ -75,9 +109,21 @@ struct TAtanTable { */ template struct TAsinAcosTable { - T table[1025]; + T table[N + 1]; u8 pad[0x1C]; + TAsinAcosTable() { + init(); + } + + void init() { + for (int i = 0; i < 1024; i++) { + table[i] = asin(i / (f64)N); + } + table[0] = 0.0f; + table[N] = TAngleConstant_::RADIAN_DEG180() / 4.0f; + } + T acos_(T x) const { if (x >= 1.0f) { return 0.0f; @@ -96,7 +142,7 @@ struct TAsinAcosTable { }; extern TSinCosTable<13, f32> sincosTable_; -extern TAtanTable atanTable_; +extern TAtanTable<1024, f32> atanTable_; extern TAsinAcosTable<1024, f32> asinAcosTable_; inline f32 acosDegree(f32 x) { diff --git a/include/JSystem/JMath/JMath.h b/include/JSystem/JMath/JMath.h index c6f26c771f..df02301499 100644 --- a/include/JSystem/JMath/JMath.h +++ b/include/JSystem/JMath/JMath.h @@ -2,7 +2,7 @@ #define JMATH_H #include "dolphin/mtx.h" -#include +#include void JMAMTXApplyScale(const Mtx, Mtx, f32, f32, f32); void JMAEulerToQuat(s16 param_0, s16 param_1, s16 param_2, Quaternion* param_3); @@ -197,14 +197,15 @@ namespace JMathInlineVEC { #ifdef __MWERKS__ __REGISTER f32 axy; __REGISTER f32 bxy; + __REGISTER f32 sumab; __REGISTER f32 az; - __REGISTER f32 sumz; __REGISTER f32 bz; + __REGISTER f32 sumz; asm { psq_l axy, 0(a), 0, 0 psq_l bxy, 0(b), 0, 0 - ps_add bxy, axy, bxy - psq_st bxy, 0(ab), 0, 0 + ps_add sumab, axy, bxy + psq_st sumab, 0(ab), 0, 0 psq_l az, 8(a), 1, 0 psq_l bz, 8(b), 1, 0 ps_add sumz, az, bz diff --git a/include/JSystem/JParticle/JPAEmitter.h b/include/JSystem/JParticle/JPAEmitter.h index c47cd538d6..b79e6f9022 100644 --- a/include/JSystem/JParticle/JPAEmitter.h +++ b/include/JSystem/JParticle/JPAEmitter.h @@ -2,7 +2,7 @@ #define JPAEMITTER_H #include -#include +#include #include "JSystem/JParticle/JPAResource.h" #include "JSystem/JParticle/JPAList.h" #include "JSystem/JParticle/JPARandom.h" @@ -151,7 +151,10 @@ public: void setAwayFromAxisSpeed(f32 i_speed) { mAwayFromAxisSpeed = i_speed; } void setSpread(f32 i_spread) { mSpread = i_spread; } void setLocalTranslation(const JGeometry::TVec3& i_trans) { mLocalTrs.set(i_trans); } - void setLocalRotation(const JGeometry::TVec3& i_rot) { mLocalRot.set(i_rot.x * 0.005493248f, i_rot.y * 0.005493248f, i_rot.z * 0.005493248f); } + void setLocalRotation(const JGeometry::TVec3& i_rot) { + mLocalRot.set(i_rot.x * (360.0f / 0xffff), i_rot.y * (360.0f / 0xffff), + i_rot.z * (360.0f / 0xffff)); + } void setRateStep(u8 i_step) { mRateStep = i_step; } void setGlobalParticleHeightScale(f32 height) { diff --git a/include/JSystem/JStudio/JStudio/functionvalue.h b/include/JSystem/JStudio/JStudio/functionvalue.h index f2f51ae923..3684a66da2 100644 --- a/include/JSystem/JStudio/JStudio/functionvalue.h +++ b/include/JSystem/JStudio/JStudio/functionvalue.h @@ -1,7 +1,7 @@ #ifndef FUNCTIONVALUE_H #define FUNCTIONVALUE_H -#include +#include #include "JSystem/JGadget/std-vector.h" #include "JSystem/JGadget/define.h" #include "JSystem/JGadget/search.h" diff --git a/include/JSystem/JStudio/JStudio/jstudio-math.h b/include/JSystem/JStudio/JStudio/jstudio-math.h index d902c218fa..27df37a634 100644 --- a/include/JSystem/JStudio/JStudio/jstudio-math.h +++ b/include/JSystem/JStudio/JStudio/jstudio-math.h @@ -2,7 +2,9 @@ #define JSTUDIO_MATH_H #include "dolphin/mtx.h" -#include +#include + +#define m_PI_D 3.141592653589793 namespace JStudio { namespace math { diff --git a/include/JSystem/JStudio/JStudio/jstudio-object.h b/include/JSystem/JStudio/JStudio/jstudio-object.h index 653ffc9474..10315471b4 100644 --- a/include/JSystem/JStudio/JStudio/jstudio-object.h +++ b/include/JSystem/JStudio/JStudio/jstudio-object.h @@ -4,7 +4,7 @@ #include "JSystem/JStudio/JStudio/jstudio-control.h" #include "global.h" #include -#include +#include typedef struct _GXColor GXColor; diff --git a/include/JSystem/JSupport/JSUInputStream.h b/include/JSystem/JSupport/JSUInputStream.h index 52c80575ee..afde440837 100644 --- a/include/JSystem/JSupport/JSUInputStream.h +++ b/include/JSystem/JSupport/JSUInputStream.h @@ -89,6 +89,10 @@ public: return *this; } + s32 read(bool& val) { + return read(&val, sizeof(bool)); + } + s32 read(u8& val) { return read(&val, sizeof(u8)); } diff --git a/include/JSystem/JSupport/JSupport.h b/include/JSystem/JSupport/JSupport.h index bdd2960543..717fd9b7b0 100644 --- a/include/JSystem/JSupport/JSupport.h +++ b/include/JSystem/JSupport/JSupport.h @@ -2,7 +2,7 @@ #define JSUPPORT_H #include -#include +#include /** * @ingroup jsystem-jsupport diff --git a/include/JSystem/JSystem.pch b/include/JSystem/JSystem.pch index 4956944711..b8f8529301 100644 --- a/include/JSystem/JSystem.pch +++ b/include/JSystem/JSystem.pch @@ -1,7 +1,10 @@ #ifndef JSYSTEM_PCH #define JSYSTEM_PCH -#include "JSystem/JSupport/JSUList.h" +#include "JSystem/J3DGraphAnimator/J3DMaterialAttach.h" +#include "JSystem/J3DGraphBase/J3DPacket.h" #include "JSystem/J3DGraphBase/J3DShape.h" +#include "JSystem/JAudio2/JASDSPChannel.h" +#include "JSystem/JSupport/JSUList.h" #endif // JSYSTEM_PCH diff --git a/include/JSystem/JUtility/JUTAssert.h b/include/JSystem/JUtility/JUTAssert.h index 7ccc07eaa2..81c898e6a7 100644 --- a/include/JSystem/JUtility/JUTAssert.h +++ b/include/JSystem/JUtility/JUTAssert.h @@ -23,7 +23,7 @@ #define JUT_PANIC_F(LINE, MSG, ...) \ JUTAssertion::showAssert_f(JUTAssertion::getSDevice(), __FILE__, LINE, MSG, __VA_ARGS__); \ - OSPanic(__FILE__, LINE, MSG, __VA_ARGS__); + OSPanic(__FILE__, LINE, "Halt"); #define JUT_WARN_DEVICE(LINE, DEVICE, ...) \ JUTAssertion::setWarningMessage_f(DEVICE, __FILE__, LINE, __VA_ARGS__); \ @@ -63,7 +63,7 @@ namespace JUTAssertion { u32 getSDevice(); void showAssert_f(u32 device, const char* file, int line, const char* msg, ...); - void showAssert_f_va(u32 device, const char* file, int line, const char* msg, __va_list args); + void showAssert_f_va(u32 device, const char* file, int line, const char* msg, va_list args); void setWarningMessage_f(u32 device, char * file, int line, const char * fmt, ...); void setWarningMessage_f_va(u32 device, const char* file, int line, const char* msg, va_list args); void setLogMessage_f(u32 device, char* file, int line, const char* fmt, ...); diff --git a/include/JSystem/JUtility/JUTConsole.h b/include/JSystem/JUtility/JUTConsole.h index 75a12dd34b..d16802a2e3 100644 --- a/include/JSystem/JUtility/JUTConsole.h +++ b/include/JSystem/JUtility/JUTConsole.h @@ -4,7 +4,7 @@ #include "JSystem/JGadget/linklist.h" #include "JSystem/JKernel/JKRDisposer.h" #include "JSystem/JUtility/JUTFont.h" -#include +#include /** * @ingroup jsystem-jutility diff --git a/include/JSystem/JUtility/JUTDirectPrint.h b/include/JSystem/JUtility/JUTDirectPrint.h index aeff790f55..14ed2c28b8 100644 --- a/include/JSystem/JUtility/JUTDirectPrint.h +++ b/include/JSystem/JUtility/JUTDirectPrint.h @@ -2,7 +2,7 @@ #define JUTDIRECTPRINT_H #include "JSystem/JUtility/TColor.h" -#include +#include /** * @ingroup jsystem-jutility diff --git a/include/JSystem/JUtility/JUTException.h b/include/JSystem/JUtility/JUTException.h index 4830ed4f74..522551dd63 100644 --- a/include/JSystem/JUtility/JUTException.h +++ b/include/JSystem/JUtility/JUTException.h @@ -3,7 +3,7 @@ #include "JSystem/JKernel/JKRThread.h" #include "JSystem/JUtility/JUTGamePad.h" -#include +#include #include #include #include "global.h" diff --git a/include/JSystem/JUtility/JUTProcBar.h b/include/JSystem/JUtility/JUTProcBar.h index e299caf005..ac9811f8fd 100644 --- a/include/JSystem/JUtility/JUTProcBar.h +++ b/include/JSystem/JUtility/JUTProcBar.h @@ -30,7 +30,8 @@ public: } void end() { - mCost = ((OSGetTick() - mTick) * 8) / ((*(u32*)0x800000F8 / 4) / 125000); + OSTick diff = OSGetTick() - mTick; + mCost = OSTicksToMicroseconds(diff); if (mCost == 0) { mCost = 1; } @@ -94,7 +95,7 @@ public: void wholeLoopEnd() { mWholeLoop.end(); } void idleStart() { mIdle.start(255, 129, 30); } void idleEnd() { mIdle.end(); } - void setCostFrame(int frame) { mCostFrame = frame; } + void setCostFrame(int frame) { sManager->mCostFrame = frame; } void setVisible(bool visible) { mVisible = visible; } void setVisibleHeapBar(bool visible) { mHeapBarVisible = visible; } void setWatchHeap(JKRHeap* pHeap) { mWatchHeap = pHeap; } diff --git a/include/JSystem/JUtility/JUTTexture.h b/include/JSystem/JUtility/JUTTexture.h index 8294cb994a..b5965eb185 100644 --- a/include/JSystem/JUtility/JUTTexture.h +++ b/include/JSystem/JUtility/JUTTexture.h @@ -2,7 +2,7 @@ #define JUTTEXTURE_H #include -#include +#include class JUTPalette; diff --git a/include/JSystem/JUtility/JUTVideo.h b/include/JSystem/JUtility/JUTVideo.h index e1af0528e3..3c3eeeadaa 100644 --- a/include/JSystem/JUtility/JUTVideo.h +++ b/include/JSystem/JUtility/JUTVideo.h @@ -36,8 +36,8 @@ public: width = (u16)getFbWidth(); height = (u16)getEfbHeight(); } - u16 getXfbHeight() const { return mRenderObj->xfbHeight; } - u32 isAntiAliasing() const { return mRenderObj->aa; } + u16 getXfbHeight() const { return u16(mRenderObj->xfbHeight); } + u8 isAntiAliasing() const { return u8(mRenderObj->aa); } Pattern getSamplePattern() const { return mRenderObj->sample_pattern; } u8* getVFilter() const { return mRenderObj->vfilter; } OSMessageQueue* getMessageQueue() { return &mMessageQueue; } diff --git a/include/JSystem/JUtility/JUTXfb.h b/include/JSystem/JUtility/JUTXfb.h index 3c5966dbe4..28059c7073 100644 --- a/include/JSystem/JUtility/JUTXfb.h +++ b/include/JSystem/JUtility/JUTXfb.h @@ -45,15 +45,23 @@ public: } void* getDrawingXfb() const { - if (mDrawingXfbIndex >= 0) - return mBuffer[mDrawingXfbIndex]; - return NULL; + void* result; + if (mDrawingXfbIndex >= 0) { + result = mBuffer[mDrawingXfbIndex]; + } else { + result = NULL; + } + return result; } void* getDisplayingXfb() const { - if (mDisplayingXfbIndex >= 0) - return mBuffer[mDisplayingXfbIndex]; - return NULL; + void* xfb; + if (mDisplayingXfbIndex >= 0) { + xfb = mBuffer[mDisplayingXfbIndex]; + } else { + xfb = NULL; + } + return xfb; } void setDisplayingXfbIndex(s16 index) { mDisplayingXfbIndex = index; } diff --git a/include/SSystem/SComponent/c_angle.h b/include/SSystem/SComponent/c_angle.h index 4afd36e504..da03a36bb3 100644 --- a/include/SSystem/SComponent/c_angle.h +++ b/include/SSystem/SComponent/c_angle.h @@ -3,12 +3,30 @@ #include "SSystem/SComponent/c_xyz.h" -#if PLATFORM_SHIELD #define ADD_ANGLE(x, y) ((x) += (s16)(y)) +#define SUB_ANGLE(x, y) ((x) -= (s16)(y)) +#define MULT_ANGLE(x, y) ((x) *= (s16)(y)) + +// There are some angles that weren't sign-extended until the shield version +#if !PLATFORM_SHIELD + #define ADD_ANGLE_2(x, y) ((x) += (y)) + #define SUB_ANGLE_2(x, y) ((x) -= (y)) + #define MULT_ANGLE_2(x, y) ((x) *= (y)) #else -#define ADD_ANGLE(x, y) ((x) += (y)) + #define ADD_ANGLE_2(x, y) ADD_ANGLE(x, y) + #define SUB_ANGLE_2(x, y) SUB_ANGLE(x, y) + #define MULT_ANGLE_2(x, y) MULT_ANGLE(x, y) #endif +#define DEG2S_CONSTANT (0x8000 / 180.0f) +#define S2DEG_CONSTANT (180.0f / 0x8000) +#define S2RAD_CONSTANT (M_PI / 0x8000) +#define RAD2S_CONSTANT (0x8000 / M_PI) + +#define DEG2S(x) ((s16)((x) * DEG2S_CONSTANT)) +#define S2DEG(x) ((x) * S2DEG_CONSTANT) +#define S2RAD(x) ((x) * S2RAD_CONSTANT) +#define RAD2S(x) ((x) * RAD2S_CONSTANT) class cSAngle { private: @@ -67,13 +85,13 @@ cSAngle operator+(short, const cSAngle&); cSAngle operator-(short, const cSAngle&); struct cAngle { - static f32 Radian_to_Degree(f32 rad) { return rad * 57.2957763671875f; } - static f32 Degree_to_Radian(f32 deg) { return deg * 0.017453292f; } - static s16 Degree_to_SAngle(f32 deg) { return deg * 182.04444885253906f; } - static f32 SAngle_to_Degree(s16 angle) { return (360.0f / 65536.0f) * angle; } - static f32 SAngle_to_Radian(s16 angle) { return 9.58738E-5f * angle; } - static f32 SAngle_to_Normal(s16 angle) { return 3.0517578E-5f * angle; } - static s16 Radian_to_SAngle(f32 rad) { return rad * 10430.378f; } + static f32 Radian_to_Degree(f32 rad) { return rad * (180.0f / M_PI); } + static f32 Degree_to_Radian(f32 deg) { return deg * (M_PI / 180.0f); } + static s16 Degree_to_SAngle(f32 deg) { return DEG2S(deg); } + static f32 SAngle_to_Degree(s16 angle) { return S2DEG(angle); } + static f32 SAngle_to_Radian(s16 angle) { return angle * (M_PI / 0x8000); } + static f32 SAngle_to_Normal(s16 angle) { return angle * (1.0f / 0x8000); } + static s16 Radian_to_SAngle(f32 rad) { return rad * (0x8000 / M_PI); } /* Converts Radian value into Degree value */ static f32 r2d(f32 r) { return Radian_to_Degree(r); } diff --git a/include/SSystem/SComponent/c_m3d.h b/include/SSystem/SComponent/c_m3d.h index a8045c74a7..1db37b44a8 100644 --- a/include/SSystem/SComponent/c_m3d.h +++ b/include/SSystem/SComponent/c_m3d.h @@ -1,7 +1,7 @@ #ifndef C_M3D_H_ #define C_M3D_H_ -#include +#include #include "dolphin/mtx.h" class cM3dGAab; diff --git a/include/SSystem/SComponent/c_m3d_g_pla.h b/include/SSystem/SComponent/c_m3d_g_pla.h index 2fc7463a4d..7f25724b55 100644 --- a/include/SSystem/SComponent/c_m3d_g_pla.h +++ b/include/SSystem/SComponent/c_m3d_g_pla.h @@ -22,7 +22,7 @@ public: virtual ~cM3dGPla() {} - f32 getPlaneFunc(const Vec* pPoint) const { return mD + VECDotProduct(&mNormal, pPoint); } + f32 getPlaneFunc(const Vec* pPoint) const { return mD + PSVECDotProduct(&mNormal, pPoint); } cXyz* GetNP() { return &mNormal; } const cXyz* GetNP() const { return &mNormal; } f32 GetD() const { return mD; } diff --git a/include/SSystem/SComponent/c_xyz.h b/include/SSystem/SComponent/c_xyz.h index 838949cb13..23b059be98 100644 --- a/include/SSystem/SComponent/c_xyz.h +++ b/include/SSystem/SComponent/c_xyz.h @@ -2,7 +2,7 @@ #define C_XYZ_H #include "dolphin/mtx.h" -#include +#include struct cXyz : Vec { static const cXyz Zero; diff --git a/include/d/actor/d_a_alink.h b/include/d/actor/d_a_alink.h index 418aec0e84..a4debb71d2 100644 --- a/include/d/actor/d_a_alink.h +++ b/include/d/actor/d_a_alink.h @@ -7435,7 +7435,7 @@ public: bool checkHorseRideOn() const { return mProcID == PROC_HORSE_RIDE; } bool checkHorseTurnMode() const { return mProcID == PROC_HORSE_TURN; } bool checkGrabUp() const { return mProcID == PROC_GRAB_UP; } - bool checkSpinnerRideWait() const { + s16 checkSpinnerRideWait() const { return mProcID == PROC_SPINNER_WAIT && mProcVar2.field_0x300c == 0; } bool checkCopyRodSwingMode() { return mProcID == PROC_COPY_ROD_SWING; } diff --git a/include/d/actor/d_a_bullet.h b/include/d/actor/d_a_bullet.h index 63d7b802aa..d6f9135654 100644 --- a/include/d/actor/d_a_bullet.h +++ b/include/d/actor/d_a_bullet.h @@ -5,6 +5,39 @@ #include "d/d_bg_s_acch.h" #include "d/d_cc_d.h" +struct daBullet_HIOParam { + /* 0x00 */ f32 gravity; + /* 0x04 */ f32 weight; + /* 0x08 */ f32 height; + /* 0x0C */ f32 knee_height; + /* 0x10 */ f32 width; + /* 0x14 */ s16 lifetime; +}; + +class daBullet_Param_c { +public: + virtual ~daBullet_Param_c() {} + + static daBullet_HIOParam const m; +}; + +#if DEBUG +class daBullet_HIO_c : public mDoHIO_entry_c { +public: + daBullet_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daBullet_HIOParam m; +}; + +#define BULLET_HIO_CLASS daBullet_HIO_c +#else +#define BULLET_HIO_CLASS daBullet_Param_c +#endif + /** * @ingroup actors-unsorted * @class daBullet_c @@ -24,7 +57,7 @@ public: /* 0x788 */ dBgS_AcchCir mAcchCir; /* 0x7C8 */ dCcD_Sph mCcSph; /* 0x900 */ cBgS_GndChk mGndChk; - /* 0x93C */ u8 field_0x93C[0x940 - 0x93C]; + /* 0x93C */ BULLET_HIO_CLASS* mpHIO; /* 0x940 */ f32 mGroundY; /* 0x944 */ processFn mProcess; /* 0x950 */ int mLifetime; @@ -53,21 +86,4 @@ public: STATIC_ASSERT(sizeof(daBullet_c) == 0x95c); -struct daBullet_HIOParam { - /* 0x00 */ f32 gravity; - /* 0x04 */ f32 weight; - /* 0x08 */ f32 height; - /* 0x0C */ f32 knee_height; - /* 0x10 */ f32 width; - /* 0x14 */ s16 lifetime; -}; - -class daBullet_Param_c { -public: - virtual ~daBullet_Param_c() {} - - static daBullet_HIOParam const m; -}; - - #endif /* D_A_BULLET_H */ diff --git a/include/d/actor/d_a_cow.h b/include/d/actor/d_a_cow.h index dbf2107ab9..e7d0f4547c 100644 --- a/include/d/actor/d_a_cow.h +++ b/include/d/actor/d_a_cow.h @@ -106,7 +106,7 @@ public: int calcRunAnime(int); void setBck(int, u8, f32, f32); - u8 checkBck(int); + bool checkBck(int); void setEffect(); bool isChaseCowGame(); void setCarryStatus(); @@ -181,7 +181,7 @@ public: int Execute(); int CreateHeap(); static int createHeapCallBack(fopAc_ac_c*); - u8 initialize(); + bool initialize(); int create(); int ctrlJoint(J3DJoint*, J3DModel*); static int ctrlJointCallBack(J3DJoint*, int); @@ -205,8 +205,8 @@ public: void setNaderuFinish() { mFlags |= Flag_NaderuFinish; } void setCrazyReadyDrawOn() { mFlags |= Flag_CrazyReadyDrawOn; } - bool getCowIn() { return mCowIn; } - int getNoNearCheckTimer() const { return mNoNearCheckTimer; } + u8 getCowIn() { return mCowIn; } + u8 getNoNearCheckTimer() { return mNoNearCheckTimer; } private: /* 0x568 */ u16 mFlags; diff --git a/include/d/actor/d_a_e_rb.h b/include/d/actor/d_a_e_rb.h index 8b1a3208bb..35dfecf410 100644 --- a/include/d/actor/d_a_e_rb.h +++ b/include/d/actor/d_a_e_rb.h @@ -2,6 +2,7 @@ #define D_A_E_RB_H #include "f_op/f_op_actor_mng.h" +#include "m_Do/m_Do_ext.h" #include "d/d_cc_d.h" #include "d/d_cc_uty.h" #include "d/d_bg_s_acch.h" diff --git a/include/d/actor/d_a_e_rd.h b/include/d/actor/d_a_e_rd.h index 90b48ca3f5..90a3fec56a 100644 --- a/include/d/actor/d_a_e_rd.h +++ b/include/d/actor/d_a_e_rd.h @@ -7,6 +7,7 @@ #include "d/d_msg_flow.h" #include "d/d_path.h" #include "f_op/f_op_actor_mng.h" +#include "m_Do/m_Do_ext.h" /** * @ingroup actors-enemies @@ -45,9 +46,7 @@ public: /* 0x06A0 */ s8 field_0x6a0; /* 0x06A4 */ cXyz field_0x6a4; /* 0x06B0 */ cXyz field_0x6b0; - /* 0x06BC */ u8 field_0x6bc[0x6be - 0x6bc]; - /* 0x06BE */ s16 field_0x6be; - /* 0x06C0 */ s16 field_0x6c0; + /* 0x06BC */ csXyz field_0x6bc; /* 0x06C2 */ s8 field_0x6c2; /* 0x06C3 */ u8 field_0x6c3; /* 0x06C4 */ J3DModel* mpEyeModels[2]; @@ -101,22 +100,17 @@ public: /* 0x09CE */ s16 field_0x9ce; /* 0x09D0 */ s16 field_0x9d0; /* 0x09D4 */ cXyz field_0x9d4; - /* 0x09E0 */ u8 field_0x9e0[0x9ec - 0x9e0]; + /* 0x09E0 */ cXyz field_0x9e0; // unused, dbg offset 0xa18 /* 0x09EC */ f32 field_0x9ec; /* 0x09F0 */ f32 field_0x9f0; /* 0x09F4 */ s16 field_0x9f4; /* 0x09F6 */ s16 field_0x9f6; /* 0x09F8 */ s8 field_0x9f8; - /* 0x09F9 */ u8 field_0x9f9[0xa0c - 0x9f9]; - /* 0x0A0C */ s16 field_0xa0c; - /* 0x0A0E */ s16 field_0xa0e; - /* 0x0A10 */ u8 field_0xa10[0xa12 - 0xa10]; - /* 0x0A12 */ s16 field_0xa12; - /* 0x0A14 */ u8 field_0xa14[0xa16 - 0xa14]; - /* 0x0A16 */ s16 field_0xa16; - /* 0x0A18 */ s16 field_0xa18; - /* 0x0A1A */ u8 field_0xa1a[0xa1c - 0xa1a]; - /* 0x0A1C */ s16 field_0xa1c; + /* 0x09FC */ cXyz field_0x9fc; // unused, dbg offset 0xa34 + /* 0x0A08 */ u8 field_0xa08[0x0A0C - 0x0A08]; + /* 0x0A0C */ csXyz field_0xa0c; + /* 0x0A12 */ csXyz field_0xa12; + /* 0x0A18 */ csXyz field_0xa18; /* 0x0A1E */ s8 field_0xa1e; /* 0x0A1F */ s8 field_0xa1f; /* 0x0A20 */ u32 field_0xa20; @@ -136,12 +130,8 @@ public: /* 0x0AD2 */ s16 field_0xad2[4]; /* 0x0ADA */ s16 field_0xada; /* 0x0ADC */ s16 field_0xadc; - /* 0x0ADE */ s16 field_0xade; - /* 0x0AE0 */ s16 field_0xae0; - /* 0x0AE2 */ u8 field_0xae2[0xae4 - 0xae2]; - /* 0x0AE4 */ s16 field_0xae4; - /* 0x0AE6 */ s16 field_0xae6; - /* 0x0AE8 */ u8 field_0xae8[0xaec - 0xae8]; + /* 0x0ADE */ csXyz field_0xade; // dbg offset 0xb1c + /* 0x0AE4 */ csXyz field_0xae4; /* 0x0AEC */ f32 field_0xaec; /* 0x0AF0 */ s16 field_0xaf0; /* 0x0AF2 */ s16 field_0xaf2; diff --git a/include/d/actor/d_a_e_ws.h b/include/d/actor/d_a_e_ws.h index 88df8f29a4..c7b6ae5c58 100644 --- a/include/d/actor/d_a_e_ws.h +++ b/include/d/actor/d_a_e_ws.h @@ -2,6 +2,7 @@ #define D_A_E_WS_H #include "f_op/f_op_actor_mng.h" +#include "m_Do/m_Do_ext.h" #include "d/d_bg_s_acch.h" #include "d/d_cc_d.h" #include "d/d_cc_uty.h" diff --git a/include/d/actor/d_a_npc4.h b/include/d/actor/d_a_npc4.h index bcecb54f5c..7c311d0733 100644 --- a/include/d/actor/d_a_npc4.h +++ b/include/d/actor/d_a_npc4.h @@ -51,6 +51,122 @@ BOOL daNpcF_chkPassed(cXyz i_pos, dPnt* i_points, u16 i_idx, u16 i_num, BOOL i_i BOOL i_isReversed); BOOL daNpcF_chkDoBtnEqSpeak(fopAc_ac_c* i_actor_p); +class daNpcF_SPCurve_c { +private: + /* 0x00 */ u16 mNurbs; + /* 0x02 */ u16 field_0x02; + /* 0x04 */ u8 mIsReversed; + /* 0x05 */ u8 mIsClosed; + /* 0x08 */ dPnt mPoints[96]; + +public: + void initialize(dPath*, int); + + daNpcF_SPCurve_c() { + initialize(NULL, 0); + } + + virtual ~daNpcF_SPCurve_c() {} +}; // Size: 0x60C + +class daNpcF_Path_c { +protected: + /* 0x00 */ u16 mIdx; + /* 0x02 */ u8 mIsReversed; + /* 0x03 */ u8 mIsClosed; + /* 0x04 */ dPath* mPathInfo; + /* 0x08 */ f32 mRange; + /* 0x0C */ f32 mPosDst; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ cXyz mPosition; + /* 0x20 */ daNpcF_SPCurve_c mSPCurve; + +public: + void initialize(); + int setPathInfo(u8, s8, u8); + BOOL chkPassed(cXyz); + BOOL chkPassedDst(cXyz); + void reverse(); + BOOL setNextIdx(); + int getNextIdx(); + int getBeforeIdx(); + BOOL getBeforePos(cXyz&); + BOOL getNextPos(cXyz&); + BOOL getDstPos(cXyz, cXyz&); + void setNextIdxDst(cXyz); + + daNpcF_Path_c() { + initialize(); + } + + virtual ~daNpcF_Path_c() {} + + int getIdx() { return mIdx; }; + void setIdx(int i_idx) { mIdx = i_idx; } + int getArg0() { return mPathInfo->m_points[mIdx].mArg0; } + u8 getArg0(int i_idx) { return mPathInfo->m_points[i_idx].mArg0; } + Vec getPntPos(int i_idx) { return mPathInfo->m_points[i_idx].m_position; } + BOOL chkClose() { return dPath_ChkClose(mPathInfo); } + BOOL chkReverse() { return mIsReversed == true; } + void onReverse() { mIsReversed = true; } + void offReverse() { mIsReversed = false; } + dPath* getPathInfo() { return mPathInfo; } + void setRange(f32 i_range) { mRange = i_range; } + int getNumPnts() { return mPathInfo->m_num; } +#if DEBUG + void drawDbgInfoXyz(); +#endif +}; // Size: 0x630 + +class daNpcF_MatAnm_c : public J3DMaterialAnm { +private: + /* 0x0F4 */ mutable f32 field_0xF4; + /* 0x0F8 */ mutable f32 field_0xF8; + /* 0x0FC */ f32 mNowOffsetX; + /* 0x100 */ f32 mNowOffsetY; + /* 0x104 */ u8 mEyeMoveFlag; + /* 0x105 */ u8 mMorfFrm; + +public: + daNpcF_MatAnm_c(): J3DMaterialAnm() { initialize(); } + void initialize(); + void calc(J3DMaterial*) const; + void setNowOffsetX(float i_nowOffsetX) { mNowOffsetX = i_nowOffsetX; } + void setNowOffsetY(float i_nowOffsetY) { mNowOffsetY = i_nowOffsetY; } + void onEyeMoveFlag() { mEyeMoveFlag = 1; } + void offEyeMoveFlag() { mEyeMoveFlag = 0; } +}; + +class daNpcF_Lookat_c { +private: + /* 0x00 */ cXyz mJointPos[4]; + /* 0x30 */ cXyz* mAttnPos_p; + /* 0x34 */ csXyz mAngularMoveDis[4]; + /* 0x4C */ csXyz mMinAngle[4]; + /* 0x64 */ csXyz mMaxAngle[4]; + /* 0x7C */ csXyz mRotAngle[4]; + /* 0x94 */ bool field_0x94[4]; + /* 0x98 vtable */ + +public: + void initialize(); + void setParam(f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, s16, + cXyz*); + void calc(fopAc_ac_c*, Mtx, csXyz**, BOOL, int, BOOL); + void adjustMoveDisAngle(s16&, s16, s16, s16); + void initCalc(fopAc_ac_c*, Mtx, cXyz*, csXyz*, f32*, cXyz&, BOOL); + void update(cXyz*, csXyz*, f32*); + void calcMoveDisAngle(int, cXyz*, csXyz*, cXyz, int, BOOL); + void setRotAngle(); + void clrRotAngle(); + + daNpcF_Lookat_c() { initialize(); } + virtual ~daNpcF_Lookat_c() {} + + cXyz* getAttnPos() { return mAttnPos_p; } + void setAttnPos(cXyz* i_attnPos) { mAttnPos_p = i_attnPos; } +}; + class daNpcF_c : public fopAc_ac_c { protected: /* 0x568 */ mDoExt_McaMorfSO* mAnm_p; @@ -244,7 +360,7 @@ public: virtual ~daNpcF_c() {} virtual void setParam() {} virtual BOOL main() { return TRUE; } - virtual BOOL ctrlBtk() { return FALSE; } + inline virtual BOOL ctrlBtk() { return FALSE; } virtual void adjustShapeAngle() {} virtual void setMtx(); virtual void setMtx2(); @@ -289,123 +405,6 @@ public: STATIC_ASSERT(sizeof(daNpcF_c) == 0xB48); -class daNpcF_MatAnm_c : public J3DMaterialAnm { -private: - /* 0x0F4 */ mutable f32 field_0xF4; - /* 0x0F8 */ mutable f32 field_0xF8; - /* 0x0FC */ f32 mNowOffsetX; - /* 0x100 */ f32 mNowOffsetY; - /* 0x104 */ u8 mEyeMoveFlag; - /* 0x105 */ u8 mMorfFrm; - -public: - daNpcF_MatAnm_c() { initialize(); } - void initialize(); - void calc(J3DMaterial*) const; - ~daNpcF_MatAnm_c() {} - void setNowOffsetX(float i_nowOffsetX) { mNowOffsetX = i_nowOffsetX; } - void setNowOffsetY(float i_nowOffsetY) { mNowOffsetY = i_nowOffsetY; } - void onEyeMoveFlag() { mEyeMoveFlag = 1; } - void offEyeMoveFlag() { mEyeMoveFlag = 0; } -}; - -class daNpcF_SPCurve_c { -private: - /* 0x00 */ u16 mNurbs; - /* 0x02 */ u16 field_0x02; - /* 0x04 */ u8 mIsReversed; - /* 0x05 */ u8 mIsClosed; - /* 0x08 */ dPnt mPoints[96]; - -public: - void initialize(dPath*, int); - - daNpcF_SPCurve_c() { - initialize(NULL, 0); - } - - virtual ~daNpcF_SPCurve_c() {} -}; // Size: 0x60C - -class daNpcF_Path_c { -protected: - /* 0x00 */ u16 mIdx; - /* 0x02 */ u8 mIsReversed; - /* 0x03 */ u8 mIsClosed; - /* 0x04 */ dPath* mPathInfo; - /* 0x08 */ f32 mRange; - /* 0x0C */ f32 mPosDst; - /* 0x10 */ f32 field_0x10; - /* 0x14 */ cXyz mPosition; - /* 0x20 */ daNpcF_SPCurve_c mSPCurve; - -public: - void initialize(); - int setPathInfo(u8, s8, u8); - BOOL chkPassed(cXyz); - BOOL chkPassedDst(cXyz); - void reverse(); - BOOL setNextIdx(); - int getNextIdx(); - int getBeforeIdx(); - BOOL getBeforePos(cXyz&); - BOOL getNextPos(cXyz&); - BOOL getDstPos(cXyz, cXyz&); - void setNextIdxDst(cXyz); - - daNpcF_Path_c() { - initialize(); - } - - virtual ~daNpcF_Path_c() {} - - int getIdx() { return mIdx; }; - void setIdx(int i_idx) { mIdx = i_idx; } - int getArg0() { return mPathInfo->m_points[mIdx].mArg0; } - u8 getArg0(int i_idx) { return mPathInfo->m_points[i_idx].mArg0; } - Vec getPntPos(int i_idx) { return mPathInfo->m_points[i_idx].m_position; } - BOOL chkClose() { return dPath_ChkClose(mPathInfo); } - BOOL chkReverse() { return mIsReversed == true; } - void onReverse() { mIsReversed = true; } - void offReverse() { mIsReversed = false; } - dPath* getPathInfo() { return mPathInfo; } - void setRange(f32 i_range) { mRange = i_range; } - int getNumPnts() { return mPathInfo->m_num; } -#if DEBUG - void drawDbgInfoXyz(); -#endif -}; // Size: 0x630 - -class daNpcF_Lookat_c { -private: - /* 0x00 */ cXyz mJointPos[4]; - /* 0x30 */ cXyz* mAttnPos_p; - /* 0x34 */ csXyz mAngularMoveDis[4]; - /* 0x4C */ csXyz mMinAngle[4]; - /* 0x64 */ csXyz mMaxAngle[4]; - /* 0x7C */ csXyz mRotAngle[4]; - /* 0x94 */ bool field_0x94[4]; - /* 0x98 vtable */ - -public: - void initialize(); - void setParam(f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, s16, - cXyz*); - void calc(fopAc_ac_c*, Mtx, csXyz**, BOOL, int, BOOL); - void adjustMoveDisAngle(s16&, s16, s16, s16); - void initCalc(fopAc_ac_c*, Mtx, cXyz*, csXyz*, f32*, cXyz&, BOOL); - void update(cXyz*, csXyz*, f32*); - void calcMoveDisAngle(int, cXyz*, csXyz*, cXyz, int, BOOL); - void setRotAngle(); - void clrRotAngle(); - - daNpcF_Lookat_c() { initialize(); } - virtual ~daNpcF_Lookat_c() {} - - cXyz* getAttnPos() { return mAttnPos_p; } - void setAttnPos(cXyz* i_attnPos) { mAttnPos_p = i_attnPos; } -}; - class daNpcF_MoveBgActor_c : public daNpcF_c { private: public: diff --git a/include/d/actor/d_a_npc_aru.h b/include/d/actor/d_a_npc_aru.h index 7cdba1eff9..0cd612bb5c 100644 --- a/include/d/actor/d_a_npc_aru.h +++ b/include/d/actor/d_a_npc_aru.h @@ -3,15 +3,6 @@ #include "d/actor/d_a_npc.h" -/** - * @ingroup actors-npcs - * @class daNpc_Aru_c - * @brief Fado - * - * @details - * -*/ - struct daNpc_Aru_HIOParam { /* 0x00 */ daNpcT_HIOParam common; /* 0x8C */ f32 warning_range; // 警戒範囲 - Warning Range @@ -22,11 +13,6 @@ struct daNpc_Aru_HIOParam { /* 0x9C */ f32 forward_visibility; // 前方視界 - Forward Visibility }; -class daNpc_Aru_HIO_c : public mDoHIO_entry_c { -public: - /* 0x8 */ daNpc_Aru_HIOParam param; -}; - class daNpc_Aru_Param_c { public: virtual ~daNpc_Aru_Param_c() {} @@ -34,6 +20,30 @@ public: static daNpc_Aru_HIOParam const m; }; +#if DEBUG +class daNpc_Aru_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Aru_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + /* 0x8 */ daNpc_Aru_HIOParam m; +}; +#define NPC_ARU_HIO_CLASS daNpc_Aru_HIO_c +#else +#define NPC_ARU_HIO_CLASS daNpc_Aru_Param_c +#endif + +/** + * @ingroup actors-npcs + * @class daNpc_Aru_c + * @brief Fado + * + * @details + * +*/ class daNpc_Aru_c : public daNpcT_c { public: enum Joint { @@ -168,7 +178,7 @@ public: static cutFunc mCutList[7]; private: - /* 0xE40 */ daNpc_Aru_HIO_c* mHIO; + /* 0xE40 */ NPC_ARU_HIO_CLASS* mpHIO; /* 0xE44 */ dCcD_Cyl mCyl; /* 0xF80 */ u8 mType; /* 0xF84 */ daNpcT_ActorMngr_c mActorMngrs[4]; diff --git a/include/d/actor/d_a_npc_ash.h b/include/d/actor/d_a_npc_ash.h index 81b5efc80f..62d9fce84f 100644 --- a/include/d/actor/d_a_npc_ash.h +++ b/include/d/actor/d_a_npc_ash.h @@ -9,6 +9,7 @@ struct daNpcAsh_HIOParam { class daNpcAsh_Param_c { public: + daNpcAsh_Param_c() {} virtual ~daNpcAsh_Param_c() {} static const daNpcAsh_HIOParam m; @@ -167,6 +168,6 @@ private: /* 0xF60 */ u8 mType; }; -STATIC_ASSERT(sizeof(daNpcAsh_c) == 0xF64); +//STATIC_ASSERT(sizeof(daNpcAsh_c) == 0xF64); #endif /* D_A_NPC_ASH_H */ diff --git a/include/d/actor/d_a_npc_besu.h b/include/d/actor/d_a_npc_besu.h index 19fc851c0c..0e1028069f 100644 --- a/include/d/actor/d_a_npc_besu.h +++ b/include/d/actor/d_a_npc_besu.h @@ -6,6 +6,35 @@ #endif #include "d/actor/d_a_npc.h" +struct daNpc_Besu_HIOParam { + /* 0x00 */ daNpcT_HIOParam common; + /* 0x8C */ f32 field_0x8c; +}; + +class daNpc_Besu_Param_c { +public: + virtual ~daNpc_Besu_Param_c() {} + + static const daNpc_Besu_HIOParam m; +}; + +#if DEBUG +class daNpc_Besu_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Besu_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_Besu_HIOParam m; +}; + +#define NPC_BESU_HIO_CLASS daNpc_Besu_HIO_c +#else +#define NPC_BESU_HIO_CLASS daNpc_Besu_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpc_Besu_c @@ -116,7 +145,7 @@ public: private: /* 0x0E40 */ mDoExt_McaMorfSO* mpCupModelMorf; - /* 0x0E44 */ u8 field_0xe44[0x0E48 - 0xE44]; + /* 0x0E44 */ NPC_BESU_HIO_CLASS* mpHIO; /* 0x0E48 */ J3DModel* mpClothModel[1]; /* 0x0E4C */ dCcD_Cyl mCyl1; /* 0x0F88 */ dCcD_Cyl mCyl2; @@ -140,16 +169,4 @@ private: STATIC_ASSERT(sizeof(daNpc_Besu_c) == 0x1138); -struct daNpc_Besu_HIOParam { - /* 0x00 */ daNpcT_HIOParam common; - /* 0x8C */ f32 field_0x8c; -}; - -class daNpc_Besu_Param_c { -public: - virtual ~daNpc_Besu_Param_c() {} - - static const daNpc_Besu_HIOParam m; -}; - #endif /* D_A_NPC_BESU_H */ diff --git a/include/d/actor/d_a_npc_blue_ns.h b/include/d/actor/d_a_npc_blue_ns.h index 6c6185c1f6..fb30855c23 100644 --- a/include/d/actor/d_a_npc_blue_ns.h +++ b/include/d/actor/d_a_npc_blue_ns.h @@ -5,6 +5,33 @@ #include "d/actor/d_a_tag_yami.h" #include "d/actor/d_a_obj_carry.h" +struct daNpcBlueNS_HIOParam { + /* 0x00 */ daNpcF_HIOParam common; + /* 0x6C */ f32 field_0x6c; +}; + +class daNpcBlueNS_Param_c { +public: + virtual ~daNpcBlueNS_Param_c() {} + + static const daNpcBlueNS_HIOParam m; +}; + +#if DEBUG +class daNpcBlueNS_HIO_c : public mDoHIO_entry_c { +public: + daNpcBlueNS_HIO_c(); + + void genMessage(JORMContext*); + + daNpcBlueNS_HIOParam m; +}; + +#define NPC_BLUE_NS_HIO_CLASS daNpcBlueNS_HIO_c +#else +#define NPC_BLUE_NS_HIO_CLASS daNpcBlueNS_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpcBlueNS_c @@ -103,7 +130,7 @@ public: /* 0xBD8 */ u8 field_0xBD8[0xBDC - 0xBD8]; /* 0xBDC */ daNpcF_Lookat_c mLookat; /* 0xC78 */ daNpcF_ActorMngr_c mActorMngr[1]; - /* 0xC80 */ u8 field_0xC80[0xC84 - 0xC80]; + /* 0xC80 */ NPC_BLUE_NS_HIO_CLASS* mpHIO; /* 0xC84 */ dCcD_Cyl mCyl; /* 0xDC0 */ u16 field_0xdc0; /* 0xDC4 */ int (daNpcBlueNS_c::*mAction)(int); @@ -130,17 +157,5 @@ public: STATIC_ASSERT(sizeof(daNpcBlueNS_c) == 0xe14); -struct daNpcBlueNS_HIOParam { - /* 0x00 */ daNpcF_HIOParam common; - /* 0x6C */ f32 field_0x6c; -}; - -class daNpcBlueNS_Param_c { -public: - virtual ~daNpcBlueNS_Param_c() {} - - static const daNpcBlueNS_HIOParam m; -}; - #endif /* D_A_NPC_BLUE_NS_H */ diff --git a/include/d/actor/d_a_npc_bou.h b/include/d/actor/d_a_npc_bou.h index 2629a9f221..391c038457 100644 --- a/include/d/actor/d_a_npc_bou.h +++ b/include/d/actor/d_a_npc_bou.h @@ -3,6 +3,38 @@ #include "d/actor/d_a_npc.h" +struct daNpc_Bou_HIOParam { + /* 0x00 */ daNpcT_HIOParam common; + /* 0x8C */ f32 field_0x8c; // 16.0f + /* 0x90 */ f32 field_0x90; // 1000.0f + /* 0x94 */ f32 field_0x94; // 500.0f + /* 0x98 */ f32 field_0x98; // -500.0f +}; + + class daNpc_Bou_Param_c { +public: + virtual ~daNpc_Bou_Param_c() {} + + static const daNpc_Bou_HIOParam m; + }; + +#if DEBUG +class daNpc_Bou_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Bou_HIO_c(); + virtual ~daNpc_Bou_HIO_c() {} + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_Bou_HIOParam m; +}; +#define NPC_BOU_HIO_CLASS daNpc_Bou_HIO_c +#else +#define NPC_BOU_HIO_CLASS daNpc_Bou_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpc_Bou_c @@ -11,58 +43,6 @@ * @details * */ - class daNpc_Bou_Param_c { - public: - virtual ~daNpc_Bou_Param_c() {} - - struct Data { - /* 0x00 */ f32 field_0x00; // 255.0f - /* 0x04 */ f32 field_0x04; // 3.0f - /* 0x08 */ f32 field_0x08; // 1.0f - /* 0x0C */ f32 field_0x0c; // 600.0f - /* 0x10 */ f32 field_0x10; // 255.0f - /* 0x14 */ f32 field_0x14; // 200.0f - /* 0x18 */ f32 field_0x18; // 35.0f - /* 0x1C */ f32 field_0x1c; // 40.0f - /* 0x20 */ f32 field_0x20; // 0.0f - /* 0x24 */ f32 field_0x24; // 0.0f - /* 0x28 */ f32 field_0x28; // 10.0f - /* 0x2C */ f32 field_0x2c; // -10.0f - /* 0x30 */ f32 field_0x30; // 30.0f - /* 0x34 */ f32 field_0x34; // -10.0f - /* 0x38 */ f32 field_0x38; // 45.0f - /* 0x3C */ f32 field_0x3c; // -45.0f - /* 0x40 */ f32 field_0x40; // 0.6f - /* 0x44 */ f32 field_0x44; // 12.0f - /* 0x48 */ s16 field_0x48; // 3 - /* 0x4a */ s16 field_0x4a; // 6 - /* 0x4c */ s16 field_0x4c; // 5 - /* 0x4e */ s16 field_0x4e; // 6 - /* 0x50 */ f32 field_0x50; // 110.0f - /* 0x54 */ f32 field_0x54; // 500.0f - /* 0x58 */ f32 field_0x58; // 300.0f - /* 0x5c */ f32 field_0x5c; // -300.0f - /* 0x60 */ s16 field_0x60; // 60 - /* 0x62 */ s16 field_0x62; // 8 - /* 0x64 */ f32 field_0x64; // 0.0f - /* 0x68 */ f32 field_0x68; // 0.0f - /* 0x6c */ f32 field_0x6c; // 4.0f - /* 0x70 */ f32 field_0x70; // 0.0f - /* 0x74 */ f32 field_0x74; // 0.0f - /* 0x78 */ f32 field_0x78; // 0.0f - /* 0x7c */ f32 field_0x7c; // 0.0f - /* 0x80 */ f32 field_0x80; // 0.0f - /* 0x84 */ f32 field_0x84; // 0.0f - /* 0x88 */ f32 field_0x88; // 0.0f - /* 0x8c */ f32 field_0x8c; // 16.0f - /* 0x90 */ f32 field_0x90; // 1000.0f - /* 0x94 */ f32 field_0x94; // 500.0f - /* 0x98 */ f32 field_0x98; // -500.0f - }; - - static const Data m; -}; - class daNpc_Bou_c : public daNpcT_c { public: typedef int (daNpc_Bou_c::*cutFunc)(int); @@ -145,8 +125,9 @@ public: BOOL chkFindWolf() { int iVar1 = daNpcT_getDistTableIdx(field_0xfe0, field_0xfe4); - return daNpcT_c::chkFindWolf(mCurAngle.y, iVar1, field_0xfdc, daNpc_Bou_Param_c::m.field_0x54, - daNpc_Bou_Param_c::m.field_0x50, daNpc_Bou_Param_c::m.field_0x58, daNpc_Bou_Param_c::m.field_0x5c, 1); + return daNpcT_c::chkFindWolf(mCurAngle.y, iVar1, field_0xfdc, + mpHIO->m.common.search_distance, mpHIO->m.common.fov, + mpHIO->m.common.search_height, mpHIO->m.common.search_depth, 1); } int chkCondition(int i_val) { @@ -187,7 +168,7 @@ public: } private: - /* 0xE40 */ int field_0xe40; + /* 0xE40 */ NPC_BOU_HIO_CLASS* mpHIO; /* 0xE44 */ dCcD_Cyl mCyl1; /* 0xF80 */ u8 mType; /* 0xF84 */ daNpcT_ActorMngr_c mActorMngr[3]; diff --git a/include/d/actor/d_a_npc_bouS.h b/include/d/actor/d_a_npc_bouS.h index f79dc9301d..ff4f23700e 100644 --- a/include/d/actor/d_a_npc_bouS.h +++ b/include/d/actor/d_a_npc_bouS.h @@ -80,7 +80,7 @@ public: int EvCut_BousIntroSumo3(int); inline void setParam(); inline BOOL main(); - inline void playExpression(); + inline void playExpression(); inline void playMotion(); inline BOOL ctrlBtk(); inline void setAttnPos(); @@ -93,22 +93,7 @@ public: s16 getMessageNo() { return (fopAcM_GetParam(this) >> 8) & 0xFFFF; } s8 getArenaNo() { return fopAcM_GetParam(this) & 0xFF; } - BOOL chkFindPlayer() { - BOOL inArea = FALSE; - if (mActorMngrs[0].getActorP() == NULL) { - inArea = chkPlayerInSpeakArea(this); - } else { - inArea = chkPlayerInTalkArea(this); - } - - if (inArea) { - mActorMngrs[0].entry(daPy_getPlayerActorClass()); - } else { - mActorMngrs[0].remove(); - } - - return inArea; - } + inline BOOL chkFindPlayer(); void setLookMode(int i_lookMode) { if (i_lookMode >= 0 && i_lookMode < 4 && i_lookMode != mLookMode) mLookMode = i_lookMode; } diff --git a/include/d/actor/d_a_npc_cd.h b/include/d/actor/d_a_npc_cd.h index 918a29e88a..2e86c867c6 100644 --- a/include/d/actor/d_a_npc_cd.h +++ b/include/d/actor/d_a_npc_cd.h @@ -119,7 +119,7 @@ inline s16 HIO_jntRX(int param_1, int param_2) { } else { rv = l_Cd_HIO.field_0x1648[param_1 - 16].field_0x4[param_2].jntR.x; } - return 182.04444885253906f * rv; + return DEG2S(rv); } inline s16 HIO_jntRY(int param_1, int param_2) { @@ -129,7 +129,7 @@ inline s16 HIO_jntRY(int param_1, int param_2) { } else { rv = l_Cd_HIO.field_0x1648[param_1 - 16].field_0x4[param_2].jntR.y; } - return 182.04444885253906f * rv; + return DEG2S(rv); } inline s16 HIO_jntRZ(int param_1, int param_2) { @@ -139,7 +139,7 @@ inline s16 HIO_jntRZ(int param_1, int param_2) { } else { rv = l_Cd_HIO.field_0x1648[param_1 - 16].field_0x4[param_2].jntR.z; } - return 182.04444885253906f * rv; + return DEG2S(rv); } static inline f32 HIO_jntTX(int param_1, int param_2) { diff --git a/include/d/actor/d_a_npc_chat.h b/include/d/actor/d_a_npc_chat.h index cb550b120e..1e959b4bde 100644 --- a/include/d/actor/d_a_npc_chat.h +++ b/include/d/actor/d_a_npc_chat.h @@ -3,25 +3,10 @@ #include "d/actor/d_a_npc4.h" -/** - * @ingroup actors-npcs - * @class daNpcChat_c - * @brief NPC Chat - * - * @details - * -*/ - struct daNpcChat_HIOParam { /* 0x0 */ daNpcF_HIOParam common; }; -class daNpcChat_HIO_c : public mDoHIO_entry_c { - void genMessage(JORMContext*); - - /* 0x8 */ daNpcChat_HIOParam param; -}; - class daNpcChat_Param_c { public: virtual ~daNpcChat_Param_c() {} @@ -29,6 +14,29 @@ public: static daNpcChat_HIOParam const m; }; +#if DEBUG +class daNpcChat_HIO_c : public mDoHIO_entry_c { +public: + daNpcChat_HIO_c(); + + void genMessage(JORMContext*); + + /* 0x8 */ daNpcChat_HIOParam m; +}; + +#define NPC_CHAT_HIO_CLASS daNpcChat_HIO_c +#else +#define NPC_CHAT_HIO_CLASS daNpcChat_Param_c +#endif + +/** + * @ingroup actors-npcs + * @class daNpcChat_c + * @brief NPC Chat + * + * @details + * +*/ class daNpcChat_c : public daNpcF_c { public: typedef bool (daNpcChat_c::*actionFunc)(void*); @@ -102,7 +110,7 @@ private: /* 0xBF0 */ J3DModel* mObjModel; /* 0xBF4 */ daNpcF_Lookat_c mLookat; /* 0xC90 */ daNpcF_ActorMngr_c mActorMngr[1]; - /* 0xC98 */ daNpcChat_HIO_c* mHIO; + /* 0xC98 */ NPC_CHAT_HIO_CLASS* mpHIO; /* 0xC9C */ dCcD_Cyl mCyl; /* 0xDD8 */ actionFunc mAction; /* 0xDE4 */ request_of_phase_process_class mPhase1; diff --git a/include/d/actor/d_a_npc_doorboy.h b/include/d/actor/d_a_npc_doorboy.h index fd25ec9fd2..536f0d0961 100644 --- a/include/d/actor/d_a_npc_doorboy.h +++ b/include/d/actor/d_a_npc_doorboy.h @@ -4,6 +4,32 @@ #include "d/actor/d_a_npc4.h" #include "d/d_msg_object.h" +struct daNpcDoorBoy_HIOParam { + /* 0x0 */ daNpcF_HIOParam common; +}; + +class daNpcDoorBoy_Param_c { +public: + virtual ~daNpcDoorBoy_Param_c() {} + + static daNpcDoorBoy_HIOParam const m; +}; + +#if DEBUG +class daNpcDoorBoy_HIO_c : public mDoHIO_entry_c { +public: + daNpcDoorBoy_HIO_c(); + + void genMessage(JORMContext*); + + daNpcDoorBoy_HIOParam m; +}; + +#define NPC_DOORBOY_HIO_CLASS daNpcDoorBoy_HIO_c +#else +#define NPC_DOORBOY_HIO_CLASS daNpcDoorBoy_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpcDoorBoy_c @@ -12,11 +38,6 @@ * @details * */ - -struct daNpcDoorBoy_HIOParam { - /* 0x0 */ daNpcF_HIOParam common; -}; - class daNpcDoorBoy_c : public daNpcF_c { public: typedef bool (daNpcDoorBoy_c::*actionFunc)(void*); @@ -64,7 +85,7 @@ private: /* 0xBEC */ u8 field_0xbec[0xbf0 - 0xbec]; /* 0xBF0 */ daNpcF_Lookat_c mLookat; /* 0xC8C */ daNpcF_ActorMngr_c mActorMngr[1]; - /* 0xC95 */ u8 field_0xc94[0xc98 - 0xc94]; + /* 0xC95 */ NPC_DOORBOY_HIO_CLASS* mpHIO; /* 0xC98 */ dCcD_Cyl field_0xc98; /* 0xDD4 */ actionFunc mAction; /* 0xDE0 */ request_of_phase_process_class mPhases[2]; @@ -80,12 +101,5 @@ private: STATIC_ASSERT(sizeof(daNpcDoorBoy_c) == 0xe08); -class daNpcDoorBoy_Param_c { -public: - virtual ~daNpcDoorBoy_Param_c() {} - - static daNpcDoorBoy_HIOParam const m; -}; - #endif /* D_A_NPC_DOORBOY_H */ diff --git a/include/d/actor/d_a_npc_drainSol.h b/include/d/actor/d_a_npc_drainSol.h index fef98ee92e..d61fb243b3 100644 --- a/include/d/actor/d_a_npc_drainSol.h +++ b/include/d/actor/d_a_npc_drainSol.h @@ -3,6 +3,32 @@ #include "d/actor/d_a_npc4.h" +struct daNpcDrSol_HIOParam { + /* 0x00 */ daNpcF_HIOParam common; +}; + +class daNpcDrSol_Param_c { +public: + virtual ~daNpcDrSol_Param_c() {} + + static const daNpcDrSol_HIOParam m; +}; + +#if DEBUG +class daNpcDrSol_HIO_c : public mDoHIO_entry_c { +public: + daNpcDrSol_HIO_c(); + + void genMessage(JORMContext*); + + daNpcDrSol_HIOParam m; +}; + +#define NPC_DRSOL_HIO_CLASS daNpcDrSol_HIO_c +#else +#define NPC_DRSOL_HIO_CLASS daNpcDrSol_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpcDrSol_c @@ -44,7 +70,7 @@ public: /* 0xB48 */ Z2Creature mSound; /* 0xBD8 */ J3DModel* field_0xbd8; - /* 0xBDC */ u8 field_0xBDC[0xBE0 - 0xBDC]; + /* 0xBDC */ NPC_DRSOL_HIO_CLASS* mpHIO; /* 0xBE0 */ dCcD_Cyl mCyl; /* 0xD1C */ bool (daNpcDrSol_c::*mAction)(void*); /* 0xD28 */ request_of_phase_process_class mPhase; @@ -57,16 +83,5 @@ public: STATIC_ASSERT(sizeof(daNpcDrSol_c) == 0xd3c); -struct daNpcDrSol_HIOParam { - /* 0x00 */ daNpcF_HIOParam common; -}; - -class daNpcDrSol_Param_c { -public: - virtual ~daNpcDrSol_Param_c() {} - - static const daNpcDrSol_HIOParam m; -}; - #endif /* D_A_NPC_DRAINSOL_H */ diff --git a/include/d/actor/d_a_npc_fairy_seirei.h b/include/d/actor/d_a_npc_fairy_seirei.h index 3093ca51f1..d3b5a23823 100644 --- a/include/d/actor/d_a_npc_fairy_seirei.h +++ b/include/d/actor/d_a_npc_fairy_seirei.h @@ -3,6 +3,34 @@ #include "d/actor/d_a_npc.h" +struct daNpc_FairySeirei_HIOParam { + /* 0x00 */ daNpcT_HIOParam common; + /* 0x8C */ f32 field_0x8c; + /* 0x90 */ f32 field_0x90; +}; + +class daNpc_FairySeirei_Param_c { +public: + virtual ~daNpc_FairySeirei_Param_c() {} + + static daNpc_FairySeirei_HIOParam const m; +}; + +#if DEBUG +class daNpc_FairySeirei_HIO_c : public mDoHIO_entry_c { +public: + daNpc_FairySeirei_HIO_c(); + + void genMessage(JORMContext*); + + daNpc_FairySeirei_HIOParam m; +}; + +#define NPC_FAIRY_SEIREI_HIO_CLASS daNpc_FairySeirei_HIO_c +#else +#define NPC_FAIRY_SEIREI_HIO_CLASS daNpc_FairySeirei_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpc_FairySeirei_c @@ -66,7 +94,7 @@ public: static cutFunc mCutList[1]; private: - /* 0xE40 */ u8 field_0xE40[4]; + /* 0xE40 */ NPC_FAIRY_SEIREI_HIO_CLASS* mpHIO; /* 0xE44 */ u8 mType; /* 0xE48 */ dCcD_Cyl mCyl; /* 0xF84 */ actionFunc mInitFunc; @@ -79,11 +107,4 @@ private: STATIC_ASSERT(sizeof(daNpc_FairySeirei_c) == 0xfb0); -class daNpc_FairySeirei_Param_c { -public: - virtual ~daNpc_FairySeirei_Param_c() {} - - static f32 const m[37]; -}; - #endif /* D_A_NPC_FAIRY_SEIREI_H */ diff --git a/include/d/actor/d_a_npc_gra.h b/include/d/actor/d_a_npc_gra.h index fe22a787f8..3209329a76 100644 --- a/include/d/actor/d_a_npc_gra.h +++ b/include/d/actor/d_a_npc_gra.h @@ -7,7 +7,7 @@ class daNpc_grA_HIOParam { public: - /* 0x00 */ daNpcF_HIOParam mNpcFParams; + /* 0x00 */ daNpcF_HIOParam common; /* 0x6C */ s16 mBowTimer; /* 0x70 */ f32 mRotationalSpeed; /* 0x74 */ f32 mWalkingSpeed; @@ -19,7 +19,7 @@ public: class daNpc_grA_Param_c { public: - virtual ~daNpc_grA_Param_c(){}; + virtual ~daNpc_grA_Param_c() {} static daNpc_grA_HIOParam const m; }; @@ -28,19 +28,14 @@ public: class daNpc_grA_HIO_c : public mDoHIO_entry_c { public: daNpc_grA_HIO_c(); -#if DEBUG void listenPropertyEvent(const JORPropertyEvent*); void genMessage(JORMContext*); -#endif - daNpc_grA_HIOParam mHioParams; + daNpc_grA_HIOParam m; }; #define NPC_GRA_HIO_CLASS daNpc_grA_HIO_c - #else - #define NPC_GRA_HIO_CLASS daNpc_grA_Param_c - #endif /** @@ -155,7 +150,7 @@ private: /* 0x0BDC */ int field_0xBDC; /* 0x0BE0 */ daNpcF_Lookat_c mNpcfLookAt; /* 0x0C7C */ daNpcF_ActorMngr_c mNpcfActorManager[3]; - /* 0x0C94 */ NPC_GRA_HIO_CLASS* mpHio; + /* 0x0C94 */ NPC_GRA_HIO_CLASS* mpHIO; /* 0x0C98 */ dCcD_Cyl field_0xC98; /* 0x0DD4 */ daNpcF_Path_c field_0xDD4; /* 0x1404 */ daNpc_grA_c_Action mAction2; diff --git a/include/d/actor/d_a_npc_grc.h b/include/d/actor/d_a_npc_grc.h index a2dd3838d7..2342adcd8e 100644 --- a/include/d/actor/d_a_npc_grc.h +++ b/include/d/actor/d_a_npc_grc.h @@ -4,6 +4,34 @@ #include "d/actor/d_a_npc4.h" #include "d/d_particle_copoly.h" +struct daNpc_grC_HIOParam { + /* 0x0 */ daNpcF_HIOParam common; +}; + +class daNpc_grC_Param_c { +public: + virtual ~daNpc_grC_Param_c() {} + + static daNpc_grC_HIOParam const m; +}; + +#if DEBUG +class daNpc_grC_HIO_c : public mDoHIO_entry_c { +public: + daNpc_grC_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + /* 0x8 */ daNpc_grC_HIOParam m; +}; + +#define NPC_GRC_HIO_CLASS daNpc_grC_HIO_c +#else +#define NPC_GRC_HIO_CLASS daNpc_grC_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpc_grC_c @@ -12,8 +40,6 @@ * @details * */ - - class daNpc_grC_c : public daNpcF_c { public: typedef BOOL (daNpc_grC_c::*ActionFn)(void*); @@ -72,7 +98,7 @@ private: /* 0xBDC */ daNpcF_Lookat_c mLookat; /* 0xC78 */ dPaPo_c mPaPo; /* 0xCB0 */ daNpcF_ActorMngr_c mActorMngr[2]; - /* 0xCC0 */ u8 field_0xcc0[0xcc4 - 0xcc0]; + /* 0xCC0 */ NPC_GRC_HIO_CLASS* mpHIO; /* 0xCC4 */ dCcD_Cyl mCyl; /* 0xE00 */ ActionFn mNextAction; /* 0xE0C */ ActionFn mAction; @@ -92,20 +118,5 @@ private: STATIC_ASSERT(sizeof(daNpc_grC_c) == 0xe54); -struct daNpc_grC_HIOParam { - /* 0x0 */ daNpcF_HIOParam common; -}; - -class daNpc_grC_HIO_c : public mDoHIO_entry_c { - /* 0x8 */ daNpc_grC_HIOParam field_0x8; -}; - -class daNpc_grC_Param_c { -public: - virtual ~daNpc_grC_Param_c() {} - - static daNpc_grC_HIOParam const m; -}; - #endif /* D_A_NPC_GRC_H */ diff --git a/include/d/actor/d_a_npc_grm.h b/include/d/actor/d_a_npc_grm.h index b6eb35f357..e3e6f1f45a 100644 --- a/include/d/actor/d_a_npc_grm.h +++ b/include/d/actor/d_a_npc_grm.h @@ -4,6 +4,33 @@ #include "d/actor/d_a_npc.h" #include "d/d_shop_system.h" +struct daNpc_grM_HIOParam { + /* 0x0 */ daNpcT_HIOParam common; +}; + +class daNpc_grM_Param_c { +public: + virtual ~daNpc_grM_Param_c() {} + + static daNpc_grM_HIOParam const m; +}; + +#if DEBUG +class daNpc_grM_HIO_c : public mDoHIO_entry_c { +public: + daNpc_grM_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + /* 0x8 */ daNpc_grM_HIOParam m; +}; +#define NPC_GRM_HIO_CLASS daNpc_grM_HIO_c +#else +#define NPC_GRM_HIO_CLASS daNpc_grM_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpc_grM_c @@ -108,7 +135,7 @@ public: static cutFunc mCutList[2]; private: - /* 0x0F7C */ u8 field_0xf7c[0xf80 - 0xf7c]; + /* 0x0F7C */ NPC_GRM_HIO_CLASS* mpHIO; /* 0x0F80 */ dCcD_Cyl mCyl; /* 0x10BC */ u8 mType; /* 0x10C0 */ actionFunc mNextAction; @@ -122,20 +149,4 @@ private: STATIC_ASSERT(sizeof(daNpc_grM_c) == 0x10e4); -struct daNpc_grM_HIOParam { - /* 0x0 */ daNpcT_HIOParam common; -}; - -class daNpc_grM_HIO_c : public mDoHIO_entry_c { -public: - /* 0x8 */ daNpc_grM_HIOParam param; -}; - -class daNpc_grM_Param_c { -public: - virtual ~daNpc_grM_Param_c() {} - - static daNpc_grM_HIOParam const m; -}; - #endif /* D_A_NPC_GRM_H */ diff --git a/include/d/actor/d_a_npc_grmc.h b/include/d/actor/d_a_npc_grmc.h index b0ffb6f6f7..7d1bef1381 100644 --- a/include/d/actor/d_a_npc_grmc.h +++ b/include/d/actor/d_a_npc_grmc.h @@ -26,6 +26,12 @@ struct daNpc_grMC_HIOParam { class daNpc_grMC_HIO_c : public mDoHIO_entry_c { public: /* 0x8 */ daNpc_grMC_HIOParam m; + + daNpc_grMC_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); }; class daNpc_grMC_Param_c { @@ -122,7 +128,7 @@ public: static cutFunc mCutList[1]; private: - /* 0x0F7C */ NPC_GRMC_HIO_CLASS* mHIO; + /* 0x0F7C */ NPC_GRMC_HIO_CLASS* mpHIO; /* 0x0F80 */ dCcD_Cyl mCyl; /* 0x10BC */ u8 mType; /* 0x10C0 */ actionFunc mNextAction; diff --git a/include/d/actor/d_a_npc_grr.h b/include/d/actor/d_a_npc_grr.h index 642073e295..4dfed0b3fe 100644 --- a/include/d/actor/d_a_npc_grr.h +++ b/include/d/actor/d_a_npc_grr.h @@ -3,27 +3,10 @@ #include "d/actor/d_a_npc4.h" -/** - * @ingroup actors-npcs - * @class daNpc_grR_c - * @brief Gor Liggs - * - * @details - * -*/ - struct daNpc_grR_HIOParam { /* 0x0 */ daNpcF_HIOParam common; }; -class daNpc_grR_HIO_c -#if DEBUG -: public mDoHIO_entry_c -#endif -{ - /* 0x8 */ daNpc_grR_HIOParam param; -}; - class daNpc_grR_Param_c { public: virtual ~daNpc_grR_Param_c() {} @@ -31,6 +14,31 @@ public: static daNpc_grR_HIOParam const m; }; +#if DEBUG +class daNpc_grR_HIO_c : public mDoHIO_entry_c { +public: + /* 0x8 */ daNpc_grR_HIOParam m; + + daNpc_grR_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent* event); + + void genMessage(JORMContext* ctx); +}; + +#define NPC_GRR_HIO_CLASS daNpc_grR_HIO_c +#else +#define NPC_GRR_HIO_CLASS daNpc_grR_Param_c +#endif + +/** + * @ingroup actors-npcs + * @class daNpc_grR_c + * @brief Gor Liggs + * + * @details + * +*/ class daNpc_grR_c : public daNpcF_c { public: typedef int (daNpc_grR_c::*cutFunc)(int); @@ -83,7 +91,7 @@ private: /* 0xBD8 */ daNpcF_MatAnm_c* mpMatAnm; /* 0xBDC */ daNpcF_Lookat_c mLookat; /* 0xC78 */ daNpcF_ActorMngr_c mActorMngr[2]; - /* 0xC88 */ daNpc_grR_HIO_c* mHIO; + /* 0xC88 */ NPC_GRR_HIO_CLASS* mpHIO; /* 0xC8C */ dCcD_Cyl mCyl; /* 0xDC8 */ actionFunc mNextAction; /* 0xDD4 */ actionFunc mAction; diff --git a/include/d/actor/d_a_npc_grz.h b/include/d/actor/d_a_npc_grz.h index d875a985fa..08ac9889bf 100644 --- a/include/d/actor/d_a_npc_grz.h +++ b/include/d/actor/d_a_npc_grz.h @@ -24,10 +24,30 @@ struct daNpc_Grz_HIOParam { /* 0x7C */ f32 demo_start_distance; // デモ開始距離 - Demo Start Distance }; -class daNpc_Grz_HIO_c : public mDoHIO_entry_c { - /* 0x8 */ daNpc_Grz_HIOParam param; +class daNpc_Grz_Param_c { +public: + virtual ~daNpc_Grz_Param_c() {} + + static daNpc_Grz_HIOParam const m; }; +#if DEBUG +class daNpc_Grz_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Grz_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent* event); + + void genMessage(JORMContext* ctx); + + /* 0x8 */ daNpc_Grz_HIOParam m; +}; + +#define NPC_GRZ_HIO_CLASS daNpc_Grz_HIO_c +#else +#define NPC_GRZ_HIO_CLASS daNpc_Grz_Param_c +#endif + class daNpc_Grz_c : public daNpcF_c { public: typedef int (daNpc_Grz_c::*actionFunc)(void*); @@ -105,7 +125,7 @@ private: /* 0x0BDC */ daNpcF_Lookat_c mLookat; /* 0x0C78 */ daNpcF_Path_c mPath; /* 0x12A8 */ daNpcF_ActorMngr_c mActorMngrs[4]; - /* 0x12C8 */ daNpc_Grz_HIO_c* mHIO; + /* 0x12C8 */ NPC_GRZ_HIO_CLASS* mpHIO; /* 0x12CC */ dCcD_Cyl mCyl1; /* 0x1408 */ dCcD_Cyl mCyl2; /* 0x1544 */ dCcD_Sph mSphs[4]; @@ -133,11 +153,4 @@ private: STATIC_ASSERT(sizeof(daNpc_Grz_c) == 0x1b08); -class daNpc_Grz_Param_c { -public: - virtual ~daNpc_Grz_Param_c() {} - - static daNpc_Grz_HIOParam const m; -}; - #endif /* D_A_NPC_GRZ_H */ diff --git a/include/d/actor/d_a_npc_gwolf.h b/include/d/actor/d_a_npc_gwolf.h index 5cc64907ba..2bcab4be53 100644 --- a/include/d/actor/d_a_npc_gwolf.h +++ b/include/d/actor/d_a_npc_gwolf.h @@ -3,15 +3,6 @@ #include "d/actor/d_a_npc4.h" -/** - * @ingroup actors-npcs - * @class daNpc_GWolf_c - * @brief Golden Wolf - * - * @details - * -*/ - struct daNpc_GWolf_HIOParam { /* 0x00 */ daNpcF_HIOParam common; /* 0x6C */ f32 attack_spd_horizontal; // 攻撃速度横 - Attack Speed Horizontal @@ -24,10 +15,6 @@ struct daNpc_GWolf_HIOParam { /* 0x88 */ f32 warp_start_dist; // ワープ開始距離 - Warp Start Distance }; -class daNpc_GWolf_HIO_c : public mDoHIO_entry_c { - /* 0x8 */ daNpc_GWolf_HIOParam param; -}; - class daNpc_GWolf_Param_c { public: virtual ~daNpc_GWolf_Param_c() {} @@ -35,6 +22,31 @@ public: static daNpc_GWolf_HIOParam const m; }; +#if DEBUG +class daNpc_GWolf_HIO_c : public mDoHIO_entry_c { +public: + daNpc_GWolf_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + /* 0x8 */ daNpc_GWolf_HIOParam m; +}; + +#define NPC_GWOLF_HIO_CLASS daNpc_GWolf_HIO_c +#else +#define NPC_GWOLF_HIO_CLASS daNpc_GWolf_Param_c +#endif + +/** + * @ingroup actors-npcs + * @class daNpc_GWolf_c + * @brief Golden Wolf + * + * @details + * +*/ class daNpc_GWolf_c : public daNpcF_c { public: typedef BOOL (daNpc_GWolf_c::*actionFunc)(void*); @@ -100,7 +112,7 @@ private: /* 0xBD8 */ daNpcF_MatAnm_c* mpMatAnm; /* 0xBDC */ daNpcF_Lookat_c mLookat; /* 0xC78 */ daNpcF_ActorMngr_c mActorMngrs[2]; - /* 0xC88 */ daNpc_GWolf_HIO_c* mHIO; + /* 0xC88 */ NPC_GWOLF_HIO_CLASS* mpHIO; /* 0xC8C */ dCcD_Cyl mCyl; /* 0xDC8 */ actionFunc mNextAction; /* 0xDD4 */ actionFunc mAction; diff --git a/include/d/actor/d_a_npc_hanjo.h b/include/d/actor/d_a_npc_hanjo.h index 0a4302ecf5..867f4674b6 100644 --- a/include/d/actor/d_a_npc_hanjo.h +++ b/include/d/actor/d_a_npc_hanjo.h @@ -3,6 +3,46 @@ #include "d/actor/d_a_npc.h" +struct daNpc_Hanjo_HIOParam { + /* 0x00 */ daNpcT_HIOParam common; + /* 0x8C */ f32 field_0x8c; + /* 0x90 */ f32 field_0x90; + /* 0x94 */ f32 field_0x94; + /* 0x98 */ f32 field_0x98; + /* 0x9C */ f32 field_0x9c; + /* 0xA0 */ f32 field_0xa0; + /* 0xA4 */ f32 field_0xa4; + /* 0xA8 */ f32 field_0xa8; + /* 0xAC */ s16 field_0xac; + /* 0xAE */ s16 field_0xae; + /* 0xB0 */ s16 field_0xb0; + /* 0xB2 */ s16 field_0xb2; +}; + +class daNpc_Hanjo_Param_c { +public: + virtual ~daNpc_Hanjo_Param_c() {} + + static const daNpc_Hanjo_HIOParam m; +}; + +#if DEBUG +class daNpc_Hanjo_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Hanjo_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent* event); + + void genMessage(JORMContext*); + + daNpc_Hanjo_HIOParam m; +}; + +#define NPC_HANJO_HIO_CLASS daNpc_Hanjo_HIO_c +#else +#define NPC_HANJO_HIO_CLASS daNpc_Hanjo_Param_c +#endif + class daNpc_HanjoStone_c { public: ~daNpc_HanjoStone_c() {} @@ -182,7 +222,7 @@ public: static cutFunc mCutList[6]; static dCcD_SrcSph mStoneCcDSph; private: - /* 0x0E40 */ int field_0x0E40; + /* 0x0E40 */ NPC_HANJO_HIO_CLASS* mpHIO; /* 0x0E44 */ J3DModel* mModel1; /* 0x0E48 */ J3DModel* mModel2; /* 0x0E4C */ dCcD_Cyl mCyl1; @@ -213,64 +253,4 @@ private: STATIC_ASSERT(sizeof(daNpc_Hanjo_c) == 0x172c); -class daNpc_Hanjo_Param_c { -public: - virtual ~daNpc_Hanjo_Param_c() {} - - struct Data { - /* 0x00 */ f32 field_0x00; - /* 0x04 */ f32 field_0x04; - /* 0x08 */ f32 field_0x08; - /* 0x0C */ f32 field_0x0c; - /* 0x10 */ f32 field_0x10; - /* 0x14 */ f32 field_0x14; - /* 0x18 */ f32 field_0x18; - /* 0x1C */ f32 field_0x1c; - /* 0x20 */ f32 field_0x20; - /* 0x24 */ f32 field_0x24; - /* 0x28 */ f32 field_0x28; - /* 0x2C */ f32 field_0x2c; - /* 0x30 */ f32 field_0x30; - /* 0x34 */ f32 field_0x34; - /* 0x38 */ f32 field_0x38; - /* 0x3C */ f32 field_0x3c; - /* 0x40 */ f32 field_0x40; - /* 0x44 */ f32 field_0x44; - /* 0x48 */ s16 field_0x48; - /* 0x4A */ s16 field_0x4a; - /* 0x4C */ s16 field_0x4c; - /* 0x4E */ s16 field_0x4e; - /* 0x50 */ f32 field_0x50; - /* 0x54 */ f32 field_0x54; - /* 0x58 */ f32 field_0x58; - /* 0x5C */ f32 field_0x5c; - /* 0x60 */ s16 field_0x60; - /* 0x62 */ s16 field_0x62; - /* 0x64 */ int field_0x64; - /* 0x68 */ int field_0x68; - /* 0x6C */ f32 field_0x6c; - /* 0x70 */ f32 field_0x70; - /* 0x74 */ f32 field_0x74; - /* 0x78 */ f32 field_0x78; - /* 0x7C */ f32 field_0x7c; - /* 0x80 */ f32 field_0x80; - /* 0x84 */ f32 field_0x84; - /* 0x88 */ f32 field_0x88; - /* 0x8C */ f32 field_0x8c; - /* 0x90 */ f32 field_0x90; - /* 0x94 */ f32 field_0x94; - /* 0x98 */ f32 field_0x98; - /* 0x9C */ f32 field_0x9c; - /* 0xA0 */ f32 field_0xa0; - /* 0xA4 */ f32 field_0xa4; - /* 0xA8 */ f32 field_0xa8; - /* 0xAC */ s16 field_0xac; - /* 0xAE */ s16 field_0xae; - /* 0xB0 */ s16 field_0xb0; - /* 0xB2 */ s16 field_0xb2; - }; - - static const Data m; -}; - #endif /* D_A_NPC_HANJO_H */ diff --git a/include/d/actor/d_a_npc_hoz.h b/include/d/actor/d_a_npc_hoz.h index 0a0b10eada..645940b0cb 100644 --- a/include/d/actor/d_a_npc_hoz.h +++ b/include/d/actor/d_a_npc_hoz.h @@ -4,6 +4,35 @@ #include "d/actor/d_a_npc.h" #include "d/actor/d_a_startAndGoal.h" +struct daNpc_Hoz_HIOParam { + /* 0x00 */ daNpcT_HIOParam common; + /* 0x8C */ f32 field_0x8c; +}; + +class daNpc_Hoz_Param_c { +public: + virtual ~daNpc_Hoz_Param_c() {} + + static const daNpc_Hoz_HIOParam m; +}; + +#if DEBUG +class daNpc_Hoz_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Hoz_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_Hoz_HIOParam m; +}; + +#define NPC_HOZ_HIO_CLASS daNpc_Hoz_HIO_c +#else +#define NPC_HOZ_HIO_CLASS daNpc_Hoz_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpc_Hoz_c @@ -100,7 +129,7 @@ public: static cutFunc mCutList[]; private: - /* 0xE40 */ int field_0xE40; + /* 0xE40 */ NPC_HOZ_HIO_CLASS* mpHIO; /* 0xE44 */ dCcD_Cyl mCyl; /* 0xF80 */ u8 mType; /* 0xF84 */ daStartAndGoal_c* field_0xf84; @@ -122,16 +151,4 @@ private: STATIC_ASSERT(sizeof(daNpc_Hoz_c) == 0xFC8); -struct daNpc_Hoz_HIOParam { - /* 0x00 */ daNpcT_HIOParam common; - /* 0x8C */ f32 field_0x8c; -}; - -class daNpc_Hoz_Param_c { -public: - virtual ~daNpc_Hoz_Param_c() {} - - static const daNpc_Hoz_HIOParam m; -}; - #endif /* D_A_NPC_HOZ_H */ diff --git a/include/d/actor/d_a_npc_ins.h b/include/d/actor/d_a_npc_ins.h index fd3817bc8c..20e960a414 100644 --- a/include/d/actor/d_a_npc_ins.h +++ b/include/d/actor/d_a_npc_ins.h @@ -3,24 +3,11 @@ #include "d/actor/d_a_npc4.h" -/** - * @ingroup actors-npcs - * @class daNpcIns_c - * @brief Agitha - * - * @details - * -*/ - struct daNpcIns_HIOParam { /* 0x00 */ daNpcF_HIOParam common; /* 0x70 */ f32 walk_speed; // 歩行速度 - Walking Speed }; -class daNpcIns_HIO_c : public mDoHIO_entry_c { - /* 0x8 */ daNpcIns_HIOParam param; -}; - class daNpcIns_Param_c { public: virtual ~daNpcIns_Param_c() {} @@ -28,6 +15,21 @@ public: static daNpcIns_HIOParam const m; }; +#if DEBUG +class daNpcIns_HIO_c : public mDoHIO_entry_c { +public: + daNpcIns_HIO_c(); + + void genMessage(JORMContext*); + + /* 0x8 */ daNpcIns_HIOParam m; +}; + +#define NPC_INS_HIO_CLASS daNpcIns_HIO_c +#else +#define NPC_INS_HIO_CLASS daNpcIns_Param_c +#endif + struct insect_param_data { int evt_bit_no; s16 msg_no; @@ -35,6 +37,14 @@ struct insect_param_data { u8 field_0x7; }; +/** + * @ingroup actors-npcs + * @class daNpcIns_c + * @brief Agitha + * + * @details + * +*/ class daNpcIns_c : public daNpcF_c { public: typedef int (daNpcIns_c::*actionFunc)(void*); @@ -118,7 +128,7 @@ private: /* 0xBE0 */ daNpcF_MatAnm_c* mpMatAnm; /* 0xBE4 */ daNpcF_Lookat_c mLookat; /* 0xC80 */ daNpcF_ActorMngr_c mActorMngr[1]; - /* 0xC88 */ daNpcIns_HIO_c* mHIO; + /* 0xC88 */ NPC_INS_HIO_CLASS* mpHIO; /* 0xC8C */ dCcD_Cyl mCyl; /* 0xDC8 */ actionFunc mAction; /* 0xDD4 */ actionFunc mPrevAction; diff --git a/include/d/actor/d_a_npc_kakashi.h b/include/d/actor/d_a_npc_kakashi.h index 97099d2849..80dadc3e47 100644 --- a/include/d/actor/d_a_npc_kakashi.h +++ b/include/d/actor/d_a_npc_kakashi.h @@ -3,6 +3,37 @@ #include "d/actor/d_a_npc.h" +struct daNpc_Kakashi_HIOParam { + /* 0x00 */ daNpcT_HIOParam common; + /* 0x8C */ f32 field_0x8c; + /* 0x90 */ f32 field_0x90; + /* 0x94 */ f32 field_0x94; +}; + +class daNpc_Kakashi_Param_c { +public: + virtual ~daNpc_Kakashi_Param_c() {} + + static const daNpc_Kakashi_HIOParam m; +}; + +#if DEBUG +class daNpc_Kakashi_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Kakashi_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_Kakashi_HIOParam m; +}; + +#define NPC_KAKASHI_HIO_CLASS daNpc_Kakashi_HIO_c +#else +#define NPC_KAKASHI_HIO_CLASS daNpc_Kakashi_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpc_Kakashi_c @@ -86,7 +117,7 @@ public: static int (daNpc_Kakashi_c::*mCutList[])(int); private: - /* 0x0E40 */ u8 field_0xE40[0xE44 - 0xE40]; + /* 0x0E40 */ NPC_KAKASHI_HIO_CLASS* mpHIO; /* 0x0E44 */ Z2SoundObjSimple mSound; /* 0x0E64 */ dCcD_Cyl mCcCyl; /* 0x0FA0 */ dCcD_Sph mCcSph[3]; @@ -109,19 +140,4 @@ private: STATIC_ASSERT(sizeof(daNpc_Kakashi_c) == 0x1398); -struct daNpc_Kakashi_HIOParam { - /* 0x00 */ daNpcT_HIOParam common; - /* 0x8C */ f32 field_0x8c; - /* 0x90 */ f32 field_0x90; - /* 0x94 */ f32 field_0x94; -}; - -class daNpc_Kakashi_Param_c { -public: - virtual ~daNpc_Kakashi_Param_c() {} - - static const daNpc_Kakashi_HIOParam m; -}; - - #endif /* D_A_NPC_KAKASHI_H */ diff --git a/include/d/actor/d_a_npc_kasi_hana.h b/include/d/actor/d_a_npc_kasi_hana.h index 9a64943e29..f1a3bd534b 100644 --- a/include/d/actor/d_a_npc_kasi_hana.h +++ b/include/d/actor/d_a_npc_kasi_hana.h @@ -211,7 +211,7 @@ private: /* 0x0BF0 */ daNpcF_Lookat_c mLookat; /* 0x0C8C */ daNpcF_ActorMngr_c mActorMngr[1]; /* 0x0C94 */ daNpcF_Path_c mPath; - /* 0x12C4 */ NPC_KASI_HANA_HIO_CLASS* mHIO; + /* 0x12C4 */ NPC_KASI_HANA_HIO_CLASS* mpHIO; /* 0x12C8 */ dCcD_Cyl mCyl; /* 0x1404 */ s8 mType; /* 0x1405 */ u8 field_0x1405; diff --git a/include/d/actor/d_a_npc_kasi_kyu.h b/include/d/actor/d_a_npc_kasi_kyu.h index 45fb2d4359..bbf2f10238 100644 --- a/include/d/actor/d_a_npc_kasi_kyu.h +++ b/include/d/actor/d_a_npc_kasi_kyu.h @@ -4,6 +4,34 @@ #include "d/actor/d_a_npc4.h" #include "d/actor/d_a_tag_escape.h" +struct daNpcKasiKyu_HIOParam { + /* 0x00 */ daNpcF_HIOParam common; + /* 0x6C */ s16 escape_time; // 逃げるまでの時間 - Escape Time + /* 0x70 */ f32 escape_spd; // 逃げる速度 - Escape Speed +}; + +class daNpcKasiKyu_Param_c { +public: + virtual ~daNpcKasiKyu_Param_c() {} + + static daNpcKasiKyu_HIOParam const m; +}; + +#if DEBUG +class daNpcKasiKyu_HIO_c : public mDoHIO_entry_c { +public: + daNpcKasiKyu_HIO_c(); + + void genMessage(JORMContext*); + + /* 0x8 */ daNpcKasiKyu_HIOParam m; +}; + +#define NPC_KASI_KYU_HIO_CLASS daNpcKasiKyu_HIO_c +#else +#define NPC_KASI_KYU_HIO_CLASS daNpcKasiKyu_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpcKasiKyu_c @@ -12,21 +40,6 @@ * @details * */ - -struct daNpcKasiKyu_HIOParam { - /* 0x00 */ daNpcF_HIOParam common; - /* 0x6C */ s16 escape_time; // 逃げるまでの時間 - Escape Time - /* 0x70 */ f32 escape_spd; // 逃げる速度 - Escape Speed -}; - -class daNpcKasiKyu_HIO_c -#if DEBUG -: public mDoHIO_entry_c -#endif -{ - /* 0x8 */ daNpcKasiKyu_HIOParam param; -}; - class daNpcKasiKyu_c : public daNpcF_c { public: typedef int (daNpcKasiKyu_c::*actionFunc)(int); @@ -117,7 +130,7 @@ private: /* 0x0BF0 */ daNpcF_Lookat_c mLookat; /* 0x0C8C */ daNpcF_ActorMngr_c mActorMngr[1]; /* 0x0C94 */ daNpcF_Path_c mPath; - /* 0x12C4 */ daNpcKasiKyu_HIO_c* mHIO; + /* 0x12C4 */ NPC_KASI_KYU_HIO_CLASS* mpHIO; /* 0x12C8 */ dCcD_Cyl mCyl; /* 0x1404 */ s16 mMode; /* 0x1408 */ actionFunc mAction; @@ -143,11 +156,4 @@ private: STATIC_ASSERT(sizeof(daNpcKasiKyu_c) == 0x146c); -class daNpcKasiKyu_Param_c { -public: - virtual ~daNpcKasiKyu_Param_c() {} - - static daNpcKasiKyu_HIOParam const m; -}; - #endif /* D_A_NPC_KASI_KYU_H */ diff --git a/include/d/actor/d_a_npc_kasi_mich.h b/include/d/actor/d_a_npc_kasi_mich.h index fbda43e3c6..1237167f6a 100644 --- a/include/d/actor/d_a_npc_kasi_mich.h +++ b/include/d/actor/d_a_npc_kasi_mich.h @@ -19,14 +19,28 @@ struct daNpcKasiMich_HIOParam { /* 0x70 */ f32 escape_spd; // 逃げる速度 - Escape Speed }; -class daNpcKasiMich_HIO_c -#if DEBUG -: public mDoHIO_entry_c -#endif -{ - /* 0x8 */ daNpcKasiMich_HIOParam param; +class daNpcKasiMich_Param_c { +public: + virtual ~daNpcKasiMich_Param_c() {} + + static daNpcKasiMich_HIOParam const m; }; +#if DEBUG +class daNpcKasiMich_HIO_c : public mDoHIO_entry_c { +public: + daNpcKasiMich_HIO_c(); + + void genMessage(JORMContext*); + + /* 0x8 */ daNpcKasiMich_HIOParam m; +}; + +#define NPC_KASI_MICH_HIO_CLASS daNpcKasiMich_HIO_c +#else +#define NPC_KASI_MICH_HIO_CLASS daNpcKasiMich_Param_c +#endif + class daNpcKasiMich_c : public daNpcF_c { public: typedef int (daNpcKasiMich_c::*actionFunc)(int); @@ -117,7 +131,7 @@ private: /* 0x0BF0 */ daNpcF_Lookat_c mLookat; /* 0x0C8C */ daNpcF_ActorMngr_c mActorMngr[1]; /* 0x0C94 */ daNpcF_Path_c mPath; - /* 0x12C4 */ daNpcKasiMich_HIO_c* mHIO; + /* 0x12C4 */ NPC_KASI_MICH_HIO_CLASS* mpHIO; /* 0x12C8 */ dCcD_Cyl mCyl; /* 0x1404 */ s16 mMode; /* 0x1408 */ actionFunc mAction; @@ -143,11 +157,4 @@ private: STATIC_ASSERT(sizeof(daNpcKasiMich_c) == 0x146c); -class daNpcKasiMich_Param_c { -public: - virtual ~daNpcKasiMich_Param_c() {} - - static daNpcKasiMich_HIOParam const m; -}; - #endif /* D_A_NPC_KASI_MICH_H */ diff --git a/include/d/actor/d_a_npc_kkri.h b/include/d/actor/d_a_npc_kkri.h index d0285f5a89..964599d45e 100644 --- a/include/d/actor/d_a_npc_kkri.h +++ b/include/d/actor/d_a_npc_kkri.h @@ -3,6 +3,34 @@ #include "d/actor/d_a_npc.h" +struct daNpc_Kkri_HIOParam { + /* 0x00 */ daNpcT_HIOParam common; +}; + +class daNpc_Kkri_Param_c { +public: + virtual ~daNpc_Kkri_Param_c() {} + + static const daNpc_Kkri_HIOParam m; +}; + +#if DEBUG +class daNpc_Kkri_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Kkri_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_Kkri_HIOParam m; +}; + +#define NPC_KKRI_HIO_CLASS daNpc_Kkri_HIO_c +#else +#define NPC_KKRI_HIO_CLASS daNpc_Kkri_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpc_Kkri_c @@ -94,7 +122,7 @@ public: static int (daNpc_Kkri_c::*mCutList[])(int); private: - /* 0xE40 */ u8 field_0xE40[0xE44 - 0xE40]; + /* 0xE40 */ NPC_KKRI_HIO_CLASS* mpHIO; /* 0xE44 */ dCcD_Cyl mCcCyl; /* 0xF80 */ u8 mType; /* 0xF84 */ daNpcT_ActorMngr_c mActorMng[1]; @@ -112,16 +140,4 @@ private: STATIC_ASSERT(sizeof(daNpc_Kkri_c) == 0xfdc); -struct daNpc_Kkri_HIOParam { - /* 0x00 */ daNpcT_HIOParam common; -}; - -class daNpc_Kkri_Param_c { -public: - virtual ~daNpc_Kkri_Param_c() {} - - static const daNpc_Kkri_HIOParam m; -}; - - #endif /* D_A_NPC_KKRI_H */ diff --git a/include/d/actor/d_a_npc_kolin.h b/include/d/actor/d_a_npc_kolin.h index 1c6b9f2e4b..a314088bd0 100644 --- a/include/d/actor/d_a_npc_kolin.h +++ b/include/d/actor/d_a_npc_kolin.h @@ -3,15 +3,6 @@ #include "d/actor/d_a_npc.h" -/** - * @ingroup actors-npcs - * @class daNpc_Kolin_c - * @brief Colin - * - * @details - * -*/ - struct daNpc_Kolin_HIOParam { /* 0x00 */ daNpcT_HIOParam common; /* 0x8C */ f32 start_distance; // 走りはじめ距離 - Start Distance @@ -29,6 +20,31 @@ public: static daNpc_Kolin_HIOParam const m; }; +#if DEBUG +class daNpc_Kolin_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Kolin_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_Kolin_HIOParam m; +}; + +#define NPC_KOLIN_HIO_CLASS daNpc_Kolin_HIO_c +#else +#define NPC_KOLIN_HIO_CLASS daNpc_Kolin_Param_c +#endif + +/** + * @ingroup actors-npcs + * @class daNpc_Kolin_c + * @brief Colin + * + * @details + * +*/ class daNpc_Kolin_c : public daNpcT_c { public: typedef int (daNpc_Kolin_c::*cutFunc)(int); @@ -146,7 +162,7 @@ public: } private: - /* 0x0E40 */ u8 field_0xe40[0xe44 - 0xe40]; + /* 0x0E40 */ NPC_KOLIN_HIO_CLASS* mpHIO; /* 0x0E44 */ J3DModel* mpClothModel; /* 0x0E48 */ dCcD_Cyl field_0xe48; /* 0x0F84 */ u8 mType; diff --git a/include/d/actor/d_a_npc_kolinb.h b/include/d/actor/d_a_npc_kolinb.h index 6cc9823437..28291b5943 100644 --- a/include/d/actor/d_a_npc_kolinb.h +++ b/include/d/actor/d_a_npc_kolinb.h @@ -4,15 +4,6 @@ #include "d/actor/d_a_npc.h" #include "d/d_bg_w.h" -/** - * @ingroup actors-npcs - * @class daNpc_Kolinb_c - * @brief Colin (Bedridden) / Ralis (Bedridden) - * - * @details - * -*/ - struct daNpc_Kolinb_HIOParam { /* 0x00 */ daNpcT_HIOParam common; }; @@ -24,6 +15,31 @@ public: static daNpc_Kolinb_HIOParam const m; }; +#if DEBUG +class daNpc_Kolinb_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Kolinb_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_Kolinb_HIOParam m; +}; + +#define NPC_KOLINB_HIO_CLASS daNpc_Kolinb_HIO_c +#else +#define NPC_KOLINB_HIO_CLASS daNpc_Kolinb_Param_c +#endif + +/** + * @ingroup actors-npcs + * @class daNpc_Kolinb_c + * @brief Colin (Bedridden) / Ralis (Bedridden) + * + * @details + * +*/ class daNpc_Kolinb_c : public daNpcT_c { public: enum Joint { @@ -151,7 +167,7 @@ public: u32 getModelType() { return fopAcM_GetParam(this) >> 28; } private: - /* 0xE40 */ u8 field_0xe40[0xe44 - 0xe40]; + /* 0xE40 */ NPC_KOLINB_HIO_CLASS* mpHIO; /* 0xE44 */ dCcD_Cyl field_0xe44; /* 0xF80 */ Mtx mMtx; /* 0xFB0 */ dBgW* mpBgW; diff --git a/include/d/actor/d_a_npc_maro.h b/include/d/actor/d_a_npc_maro.h index e2330b059f..b7683f1656 100644 --- a/include/d/actor/d_a_npc_maro.h +++ b/include/d/actor/d_a_npc_maro.h @@ -5,6 +5,35 @@ #include "d/actor/d_a_npc.h" #include "d/d_shop_system.h" +struct daNpc_Maro_HIOParam { + /* 0x00 */ daNpcT_HIOParam common; + /* 0x8C */ s16 field_0x8c; +}; + +class daNpc_Maro_Param_c { +public: + virtual ~daNpc_Maro_Param_c() {} + + static const daNpc_Maro_HIOParam m; +}; + +#if DEBUG +class daNpc_Maro_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Maro_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_Maro_HIOParam m; +}; + +#define NPC_MARO_HIO_CLASS daNpc_Maro_HIO_c +#else +#define NPC_MARO_HIO_CLASS daNpc_Maro_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpc_Maro_c @@ -153,7 +182,7 @@ public: } private: - /* 0x0F7C */ int field_0xf7c; + /* 0x0F7C */ NPC_MARO_HIO_CLASS* mpHIO; /* 0x0F80 */ dCcD_Cyl mCyl1; /* 0x10BC */ int field_0x10bc; /* 0x10C0 */ u8 mType; @@ -179,17 +208,4 @@ private: STATIC_ASSERT(sizeof(daNpc_Maro_c) == 0x1140); -struct daNpc_Maro_HIOParam { - /* 0x00 */ daNpcT_HIOParam common; - /* 0x8C */ u32 field_0x8c; -}; - -class daNpc_Maro_Param_c { -public: - virtual ~daNpc_Maro_Param_c() {} - - static const daNpc_Maro_HIOParam m; -}; - - #endif /* D_A_NPC_MARO_H */ diff --git a/include/d/actor/d_a_npc_midp.h b/include/d/actor/d_a_npc_midp.h index 9c358564b5..fcbc4ed3fa 100644 --- a/include/d/actor/d_a_npc_midp.h +++ b/include/d/actor/d_a_npc_midp.h @@ -16,10 +16,6 @@ struct daNpc_midP_HIOParam { /* 0x0 */ daNpcT_HIOParam common; }; -class daNpc_midP_HIO_c : public mDoHIO_entry_c { - /* 0x8 */ daNpc_midP_HIOParam param; -}; - class daNpc_midP_Param_c { public: virtual ~daNpc_midP_Param_c() {} @@ -27,6 +23,23 @@ public: static const daNpc_midP_HIOParam m; }; +#if DEBUG +class daNpc_midP_HIO_c : public mDoHIO_entry_c { +public: + daNpc_midP_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_midP_HIOParam m; +}; + +#define NPC_MIDP_HIO_CLASS daNpc_midP_HIO_c +#else +#define NPC_MIDP_HIO_CLASS daNpc_midP_Param_c +#endif + class daNpc_midP_c : public daNpcT_c { public: enum Joint { @@ -139,10 +152,9 @@ public: static cutFunc mCutList[1]; private: - /* 0xE40 */ u8 field_0xE40[0xe44 - 0xe40]; + /* 0xE40 */ NPC_MIDP_HIO_CLASS* mpHIO; /* 0xE44 */ dCcD_Cyl mCyl; /* 0xF80 */ u8 mType; - /* 0xF81 */ u8 field_0xf81[0xf84-0xf81]; /* 0xF84 */ actionFunc field_0xf84; /* 0xF90 */ actionFunc field_0xf90; /* 0xF9C */ int field_0xf9c; diff --git a/include/d/actor/d_a_npc_moi.h b/include/d/actor/d_a_npc_moi.h index a855bf6543..b387a58235 100644 --- a/include/d/actor/d_a_npc_moi.h +++ b/include/d/actor/d_a_npc_moi.h @@ -24,7 +24,7 @@ struct daNpc_Moi_HIOParam { class daNpc_Moi_Param_c { public: - virtual ~daNpc_Moi_Param_c() {}; + virtual ~daNpc_Moi_Param_c() {} static const daNpc_Moi_HIOParam m; }; diff --git a/include/d/actor/d_a_npc_myna2.h b/include/d/actor/d_a_npc_myna2.h index 76e78dd9e2..bf97f43124 100644 --- a/include/d/actor/d_a_npc_myna2.h +++ b/include/d/actor/d_a_npc_myna2.h @@ -3,6 +3,36 @@ #include "d/actor/d_a_npc4.h" +struct daNpc_myna2_HIOParam { + /* 0x00 */ daNpcF_HIOParam common; + /* 0x6C */ f32 field_0x6c; + /* 0x70 */ f32 field_0x70; +}; + +class daNpc_myna2_Param_c { +public: + virtual ~daNpc_myna2_Param_c() {} + + static const daNpc_myna2_HIOParam m; +}; + +#if DEBUG +class daNpc_myna2_HIO_c : public mDoHIO_entry_c { +public: + daNpc_myna2_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_myna2_HIOParam m; +}; + +#define NPC_MYNA2_HIO_CLASS daNpc_myna2_HIO_c +#else +#define NPC_MYNA2_HIO_CLASS daNpc_myna2_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpc_myna2_c @@ -64,7 +94,7 @@ public: /* 0xB4C */ daNpcF_Lookat_c mLookat; /* 0xBE8 */ Z2CreatureSumomo mSound; /* 0xC78 */ daNpcF_ActorMngr_c mActorMgrs[1]; - /* 0xC80 */ u8 field_0xC80[0xC84 - 0xC80]; + /* 0xC80 */ NPC_MYNA2_HIO_CLASS* mpHIO; /* 0xC84 */ dCcD_Cyl mCyl; /* 0xDC0 */ ActionFn mNextAction; /* 0xDCC */ ActionFn mAction; @@ -88,18 +118,4 @@ public: STATIC_ASSERT(sizeof(daNpc_myna2_c) == 0xe34); -struct daNpc_myna2_HIOParam { - /* 0x00 */ daNpcF_HIOParam common; - /* 0x6C */ f32 field_0x6c; - /* 0x70 */ f32 field_0x70; -}; - -class daNpc_myna2_Param_c { -public: - virtual ~daNpc_myna2_Param_c() {} - - static const daNpc_myna2_HIOParam m; -}; - - #endif /* D_A_NPC_MYNA2_H */ diff --git a/include/d/actor/d_a_npc_pachi_besu.h b/include/d/actor/d_a_npc_pachi_besu.h index 28240cfd58..c01375b7f4 100644 --- a/include/d/actor/d_a_npc_pachi_besu.h +++ b/include/d/actor/d_a_npc_pachi_besu.h @@ -3,24 +3,10 @@ #include "d/actor/d_a_npc.h" -/** - * @ingroup actors-npcs - * @class daNpc_Pachi_Besu_c - * @brief Beth (Slingshot Tutorial) - * - * @details - * -*/ - struct daNpc_Pachi_Besu_HIOParam { /* 0x0 */ daNpcT_HIOParam common; }; -class daNpc_Pachi_Besu_HIO_c : public mDoHIO_entry_c { -public: - /* 0x8 */ daNpc_Pachi_Besu_HIOParam param; -}; - class daNpc_Pachi_Besu_Param_c { public: virtual ~daNpc_Pachi_Besu_Param_c() {} @@ -28,6 +14,31 @@ public: static daNpc_Pachi_Besu_HIOParam const m; }; +#if DEBUG +class daNpc_Pachi_Besu_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Pachi_Besu_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_Pachi_Besu_HIOParam m; +}; + +#define NPC_PACHI_BESU_HIO_CLASS daNpc_Pachi_Besu_HIO_c +#else +#define NPC_PACHI_BESU_HIO_CLASS daNpc_Pachi_Besu_Param_c +#endif + +/** + * @ingroup actors-npcs + * @class daNpc_Pachi_Besu_c + * @brief Beth (Slingshot Tutorial) + * + * @details + * +*/ class daNpc_Pachi_Besu_c : public daNpcT_c { public: typedef BOOL (daNpc_Pachi_Besu_c::*actionFunc)(void*); @@ -137,7 +148,7 @@ public: static cutFunc mCutList[11]; private: - /* 0xE40 */ daNpc_Pachi_Besu_HIO_c* mHIO; + /* 0xE40 */ NPC_PACHI_BESU_HIO_CLASS* mpHIO; /* 0xE44 */ dCcD_Cyl mCyl; /* 0xF80 */ u8 mType; /* 0xF81 */ u8 mTalk; diff --git a/include/d/actor/d_a_npc_prayer.h b/include/d/actor/d_a_npc_prayer.h index 85dbed1014..459710f049 100644 --- a/include/d/actor/d_a_npc_prayer.h +++ b/include/d/actor/d_a_npc_prayer.h @@ -3,6 +3,32 @@ #include "d/actor/d_a_npc4.h" +struct daNpcPray_HIOParam { + daNpcF_HIOParam common; +}; + +class daNpcPray_Param_c { +public: + virtual ~daNpcPray_Param_c() {} + + static const daNpcPray_HIOParam m; +}; + +#if DEBUG +class daNpcPray_HIO_c : public mDoHIO_entry_c { +public: + daNpcPray_HIO_c(); + + void genMessage(JORMContext*); + + daNpcPray_HIOParam m; +}; + +#define NPC_PRAY_HIO_CLASS daNpcPray_HIO_c +#else +#define NPC_PRAY_HIO_CLASS daNpcPray_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpcPray_c @@ -58,7 +84,7 @@ private: /* 0xBEC */ u8 field_0xBEC[0xBF0 - 0xBEC]; /* 0xBF0 */ daNpcF_Lookat_c mLookat; /* 0xC8C */ daNpcF_ActorMngr_c mActorMngr[2]; - /* 0xC9C */ u8 field_0xC9C[0xCA0 - 0xC9C]; + /* 0xC9C */ NPC_PRAY_HIO_CLASS* mpHIO; /* 0xCA0 */ dCcD_Cyl mCcCyl; /* 0xDDC */ bool (daNpcPray_c::*mAction)(void*); /* 0xDE8 */ request_of_phase_process_class mPhase[2]; @@ -74,16 +100,4 @@ private: STATIC_ASSERT(sizeof(daNpcPray_c) == 0xe10); -struct daNpcPray_HIOParam { - daNpcF_HIOParam common; -}; - -class daNpcPray_Param_c { -public: - virtual ~daNpcPray_Param_c() {} - - static const daNpcPray_HIOParam m; -}; - - #endif /* D_A_NPC_PRAYER_H */ diff --git a/include/d/actor/d_a_npc_raca.h b/include/d/actor/d_a_npc_raca.h index 34e05c323b..abeb1e6572 100644 --- a/include/d/actor/d_a_npc_raca.h +++ b/include/d/actor/d_a_npc_raca.h @@ -16,10 +16,6 @@ struct daNpc_Raca_HIOParam { /* 0x0 */ daNpcT_HIOParam common; }; -class daNpc_Raca_HIO_c : public mDoHIO_entry_c { - /* 0x8 */ daNpc_Raca_HIOParam param; -}; - class daNpc_Raca_Param_c { public: virtual ~daNpc_Raca_Param_c() {} @@ -27,6 +23,23 @@ public: static daNpc_Raca_HIOParam const m; }; +#if DEBUG +class daNpc_Raca_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Raca_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_Raca_HIOParam m; +}; + +#define NPC_RACA_HIO_CLASS daNpc_Raca_HIO_c +#else +#define NPC_RACA_HIO_CLASS daNpc_Raca_Param_c +#endif + class daNpc_Raca_c : public daNpcT_c { public: enum Material { @@ -136,7 +149,7 @@ public: static cutFunc mCutList[1]; private: - /* 0xE40 */ daNpc_Raca_HIO_c* mHIO; + /* 0xE40 */ NPC_RACA_HIO_CLASS* mpHIO; /* 0xE44 */ dCcD_Cyl mCyl; /* 0xF80 */ u8 mType; /* 0xF84 */ daNpcT_ActorMngr_c mActorMngr[1]; diff --git a/include/d/actor/d_a_npc_saru.h b/include/d/actor/d_a_npc_saru.h index f4e64d918f..14c36ec633 100644 --- a/include/d/actor/d_a_npc_saru.h +++ b/include/d/actor/d_a_npc_saru.h @@ -15,25 +15,32 @@ struct daNpc_Saru_HIOParam { /* 0x00 */ daNpcT_HIOParam common; /* 0x8C */ s16 scared_time; // 怯える時間 - Scared Time - /* 0x8E */ s16 field_0x8e; }; -class daNpc_Saru_Param_c : public JORReflexible { +class daNpc_Saru_Param_c { public: virtual ~daNpc_Saru_Param_c() {} -#if DEBUG - void genMessage(JORMContext*); -#endif - static const daNpc_Saru_HIOParam m; }; +#if DEBUG class daNpc_Saru_HIO_c : public mDoHIO_entry_c { public: - daNpc_Saru_HIOParam param; + daNpc_Saru_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_Saru_HIOParam m; }; +#define NPC_SARU_HIO_CLASS daNpc_Saru_HIO_c +#else +#define NPC_SARU_HIO_CLASS daNpc_Saru_Param_c +#endif + class daNpc_Saru_c : public daNpcT_c { public: typedef int (daNpc_Saru_c::*cutFunc)(int); @@ -129,10 +136,7 @@ public: static char* mCutNameList[4]; static cutFunc mCutList[4]; private: - #if DEBUG - /* 0xE90 */ daNpc_Saru_HIO_c* field_0xe90; - #endif - /* 0xE40 */ u8 field_0xe40[0xe44 - 0xe40]; + /* 0xE40 */ NPC_SARU_HIO_CLASS* mpHIO; /* 0xE44 */ J3DModel* mpRoseModels[2]; /* 0xE4C */ dCcD_Cyl field_0xe4c; /* 0xF88 */ u8 mType; diff --git a/include/d/actor/d_a_npc_seib.h b/include/d/actor/d_a_npc_seib.h index 8e3f65df6d..43e887dc64 100644 --- a/include/d/actor/d_a_npc_seib.h +++ b/include/d/actor/d_a_npc_seib.h @@ -3,6 +3,36 @@ #include "d/actor/d_a_npc.h" +struct daNpc_seiB_HIOParam { + /* 0x00 */ daNpcT_HIOParam common; + /* 0x8C */ f32 field_0x8c; + /* 0x90 */ f32 mDist; +}; + +class daNpc_seiB_Param_c { +public: + virtual ~daNpc_seiB_Param_c() {}; + + static const daNpc_seiB_HIOParam m; +}; + +#if DEBUG +class daNpc_seiB_HIO_c : public mDoHIO_entry_c { +public: + daNpc_seiB_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_seiB_HIOParam m; +}; + +#define NPC_SEIB_HIO_CLASS daNpc_seiB_HIO_c +#else +#define NPC_SEIB_HIO_CLASS daNpc_seiB_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpc_seiB_c @@ -11,52 +41,6 @@ * @details * */ - -class daNpc_seiB_Param_c { -public: - virtual ~daNpc_seiB_Param_c() {}; - struct Data { - /* 0x00 */ f32 field_0x00; - /* 0x04 */ f32 mGravity; - /* 0x08 */ f32 mScale; - /* 0x0C */ f32 field_0xc; - /* 0x10 */ f32 mWeight; - /* 0x14 */ f32 mCylH; - /* 0x18 */ f32 mWallH; - /* 0x1C */ f32 mWallR; - /* 0x20 */ f32 field_0x20; - /* 0x24 */ f32 field_0x24; - /* 0x28 */ f32 field_0x28; - /* 0x2C */ f32 field_0x2c; - /* 0x30 */ f32 field_0x30; - /* 0x34 */ f32 field_0x34; - /* 0x38 */ f32 field_0x38; - /* 0x3C */ f32 field_0x3c; - /* 0x40 */ f32 field_0x40; - /* 0x44 */ f32 mMorfFrames; - /* 0x48 */ f32 field_0x48; - /* 0x4C */ f32 field_0x4c; - /* 0x50 */ f32 field_0x50; - /* 0x54 */ f32 field_0x54; - /* 0x58 */ f32 field_0x58; - /* 0x5C */ f32 field_0x5c; - /* 0x60 */ f32 field_0x60; - /* 0x64 */ f32 field_0x64; - /* 0x68 */ f32 field_0x68; - /* 0x6C */ f32 field_0x6c; - /* 0x70 */ f32 field_0x70; - /* 0x74 */ f32 field_0x74; - /* 0x78 */ f32 field_0x78; - /* 0x7C */ f32 field_0x7c; - /* 0x80 */ f32 field_0x80; - /* 0x84 */ f32 field_0x84; - /* 0x88 */ f32 field_0x88; - /* 0x8C */ f32 field_0x8c; - /* 0x90 */ f32 mDist; - }; - - static const Data m; -}; class daNpc_seiB_c : public daNpcT_c { public: typedef int (daNpc_seiB_c::*cutFunc)(int); @@ -104,7 +88,7 @@ public: static cutFunc mCutList[1]; private: - /* 0xE40 */ daNpc_seiB_Param_c* mpParam; + /* 0xE40 */ NPC_SEIB_HIO_CLASS* mpHIO; /* 0xE44 */ u8 mType; /* 0xE48 */ actionFunc mActionFunc1; /* 0xE54 */ actionFunc mActionFunc2; diff --git a/include/d/actor/d_a_npc_seic.h b/include/d/actor/d_a_npc_seic.h index 3c6f5f3fe8..dd860a8869 100644 --- a/include/d/actor/d_a_npc_seic.h +++ b/include/d/actor/d_a_npc_seic.h @@ -13,67 +13,35 @@ */ struct daNpc_seiC_HIOParam { - /* 0x00 */ f32 field_0x00; - /* 0x04 */ f32 mGravity; - /* 0x08 */ f32 mScale; - /* 0x0C */ f32 field_0x0c; - /* 0x10 */ f32 mSttsWeight; - /* 0x14 */ f32 mCylH; - /* 0x18 */ f32 mWallH; - /* 0x1C */ f32 mWallR; - /* 0x20 */ f32 field_0x20; - /* 0x24 */ f32 field_0x24; - /* 0x28 */ f32 field_0x28; - /* 0x2C */ f32 field_0x2c; - /* 0x30 */ f32 field_0x30; - /* 0x34 */ f32 field_0x34; - /* 0x38 */ f32 field_0x38; - /* 0x3C */ f32 field_0x3c; - /* 0x40 */ f32 field_0x40; - /* 0x44 */ f32 mMorfFrames; - /* 0x48 */ f32 field_0x48; - /* 0x4C */ f32 field_0x4c; - /* 0x50 */ f32 field_0x50; - /* 0x54 */ f32 field_0x54; - /* 0x58 */ f32 field_0x58; - /* 0x5C */ f32 field_0x5c; - /* 0x60 */ f32 field_0x60; - /* 0x64 */ f32 field_0x64; - /* 0x68 */ f32 field_0x68; - /* 0x6C */ f32 field_0x6c; - /* 0x70 */ f32 field_0x70; - /* 0x74 */ f32 field_0x74; - /* 0x78 */ f32 field_0x78; - /* 0x7C */ f32 field_0x7c; - /* 0x80 */ f32 field_0x80; - /* 0x84 */ f32 field_0x84; - /* 0x88 */ f32 field_0x88; - /* 0x8C */ f32 field_0x8c; - /* 0x90 */ f32 field_0x90; + /* 0x00 */ daNpcT_HIOParam common; + /* 0x8C */ f32 field_0x8c; // "強制会話距離" "Forced conversation distance" | Slider + /* 0x90 */ f32 field_0x90; // "会話距離" "Conversation distance" | Slider }; class daNpc_seiC_Param_c { - public: - virtual ~daNpc_seiC_Param_c() {}; +public: + virtual ~daNpc_seiC_Param_c() {} - static const daNpc_seiC_HIOParam m; + static const daNpc_seiC_HIOParam m; }; -class daNpc_seiC_HIO_c #if DEBUG -: public mDoHIO_entry_c -#endif -{ +class daNpc_seiC_HIO_c : public mDoHIO_entry_c { public: + daNpc_seiC_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + void genMessage(JORMContext*); - #if DEBUG - /* 0x08 */ daNpc_seiC_HIOParam field_0x8; - /* 0x94 */ f32 field_0x94; // "強制会話距離" "Forced conversation distance" | Slider - /* 0x98 */ f32 field_0x98; // "会話距離" "Conversation distance" | Slider - #endif + /* 0x08 */ daNpc_seiC_HIOParam m; }; +#define NPC_SEIC_HIO_CLASS daNpc_seiC_HIO_c +#else +#define NPC_SEIC_HIO_CLASS daNpc_seiC_Param_c +#endif + class daNpc_seiC_c : public daNpcT_c { public: typedef int (daNpc_seiC_c::*cutFunc)(int); @@ -123,7 +91,7 @@ public: static cutFunc mCutList[1]; private: - /* 0xE40 */ daNpc_seiC_HIO_c* field_0xe40; + /* 0xE40 */ NPC_SEIC_HIO_CLASS* mpHIO; /* 0xE44 */ u8 mType; /* 0xE45 */ u8 field_0xe45[0xe48 - 0xe45]; /* 0xE48 */ actionFunc mAction; diff --git a/include/d/actor/d_a_npc_seid.h b/include/d/actor/d_a_npc_seid.h index 43abdd2356..7119761b25 100644 --- a/include/d/actor/d_a_npc_seid.h +++ b/include/d/actor/d_a_npc_seid.h @@ -13,67 +13,35 @@ */ struct daNpc_seiD_HIOParam { - /* 0x00 */ f32 field_0x00; - /* 0x04 */ f32 mGravity; - /* 0x08 */ f32 mScale; - /* 0x0C */ f32 field_0x0c; - /* 0x10 */ f32 mSttsWeight; - /* 0x14 */ f32 mCylH; - /* 0x18 */ f32 mWallH; - /* 0x1C */ f32 mWallR; - /* 0x20 */ f32 field_0x20; - /* 0x24 */ f32 field_0x24; - /* 0x28 */ f32 field_0x28; - /* 0x2C */ f32 field_0x2c; - /* 0x30 */ f32 field_0x30; - /* 0x34 */ f32 field_0x34; - /* 0x38 */ f32 field_0x38; - /* 0x3C */ f32 field_0x3c; - /* 0x40 */ f32 field_0x40; - /* 0x44 */ f32 mMorfFrames; - /* 0x48 */ f32 field_0x48; - /* 0x4C */ f32 field_0x4c; - /* 0x50 */ f32 field_0x50; - /* 0x54 */ f32 field_0x54; - /* 0x58 */ f32 field_0x58; - /* 0x5C */ f32 field_0x5c; - /* 0x60 */ f32 field_0x60; - /* 0x64 */ f32 field_0x64; - /* 0x68 */ f32 field_0x68; - /* 0x6C */ f32 field_0x6c; - /* 0x70 */ f32 field_0x70; - /* 0x74 */ f32 field_0x74; - /* 0x78 */ f32 field_0x78; - /* 0x7C */ f32 field_0x7c; - /* 0x80 */ f32 field_0x80; - /* 0x84 */ f32 field_0x84; - /* 0x88 */ f32 field_0x88; - /* 0x8C */ f32 field_0x8c; - /* 0x90 */ f32 field_0x90; + /* 0x00 */ daNpcT_HIOParam common; + /* 0x8C */ f32 field_0x8c; // "強制会話距離" "Forced conversation distance" | Slider + /* 0x90 */ f32 field_0x90; // "会話距離" "Conversation distance" | Slider }; class daNpc_seiD_Param_c { - public: - virtual ~daNpc_seiD_Param_c() {}; +public: + virtual ~daNpc_seiD_Param_c() {} - static const daNpc_seiD_HIOParam m; + static const daNpc_seiD_HIOParam m; }; -class daNpc_seiD_HIO_c #if DEBUG -: public mDoHIO_entry_c -#endif -{ +class daNpc_seiD_HIO_c : public mDoHIO_entry_c { public: + daNpc_seiD_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + void genMessage(JORMContext*); - #if DEBUG - /* 0x08 */ daNpc_seiD_HIOParam field_0x8; - // /* 0x94 */ f32 field_0x94; // "強制会話距離" "Forced conversation distance" | Slider - // /* 0x98 */ f32 field_0x98; // "会話距離" "Conversation distance" | Slider - #endif + /* 0x08 */ daNpc_seiD_HIOParam m; }; +#define NPC_SEID_HIO_CLASS daNpc_seiD_HIO_c +#else +#define NPC_SEID_HIO_CLASS daNpc_seiD_Param_c +#endif + class daNpc_seiD_c : public daNpcT_c { public: typedef int (daNpc_seiD_c::*cutFunc)(int); @@ -122,9 +90,8 @@ public: static cutFunc mCutList[1]; private: - /* 0xE40 */ daNpc_seiD_HIO_c* field_0xe40; + /* 0xE40 */ NPC_SEID_HIO_CLASS* mpHIO; /* 0xE44 */ u8 mType; - /* 0xE45 */ u8 field_0xe45[0xe48 - 0xe45]; /* 0xE48 */ actionFunc mAction; /* 0xE54 */ actionFunc mAction2; /* 0xE60 */ int field_0xe60; diff --git a/include/d/actor/d_a_npc_seira.h b/include/d/actor/d_a_npc_seira.h index f6b8baf40b..5c387526d8 100644 --- a/include/d/actor/d_a_npc_seira.h +++ b/include/d/actor/d_a_npc_seira.h @@ -4,6 +4,34 @@ #include "d/actor/d_a_npc.h" #include "d/d_shop_system.h" +struct daNpc_Seira_HIOParam { + /* 0x00 */ daNpcT_HIOParam common; +}; + +class daNpc_Seira_Param_c { +public: + virtual ~daNpc_Seira_Param_c() {} + + static const daNpc_Seira_HIOParam m; +}; + +#if DEBUG +class daNpc_Seira_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Seira_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_Seira_HIOParam m; +}; + +#define NPC_SEIRA_HIO_CLASS daNpc_Seira_HIO_c +#else +#define NPC_SEIRA_HIO_CLASS daNpc_Seira_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpc_Seira_c @@ -91,7 +119,7 @@ public: private: /* 0x0F7C */ mDoExt_McaMorfSO* mpSeiraMorf; - /* 0x0F80 */ int field_0x0F80; + /* 0x0F80 */ NPC_SEIRA_HIO_CLASS* mpHIO; /* 0x0F80 */ dCcD_Cyl mCyl1; /* 0x10C0 */ u8 mChkBottle; /* 0x10C1 */ u8 mType; @@ -111,16 +139,5 @@ private: STATIC_ASSERT(sizeof(daNpc_Seira_c) == 0x1108); -struct daNpc_Seira_HIOParam { - /* 0x00 */ daNpcT_HIOParam common; -}; - -class daNpc_Seira_Param_c { -public: - virtual ~daNpc_Seira_Param_c() {} - - static const daNpc_Seira_HIOParam m; -}; - #endif /* D_A_NPC_SEIRA_H */ diff --git a/include/d/actor/d_a_npc_seira2.h b/include/d/actor/d_a_npc_seira2.h index 245e482c97..9743a2b7a3 100644 --- a/include/d/actor/d_a_npc_seira2.h +++ b/include/d/actor/d_a_npc_seira2.h @@ -4,6 +4,34 @@ #include "d/actor/d_a_npc.h" #include "d/d_shop_system.h" +struct daNpc_Seira2_HIOParam { + /* 0x00 */ daNpcT_HIOParam common; +}; + +class daNpc_Seira2_Param_c { +public: + virtual ~daNpc_Seira2_Param_c() {} + + static const daNpc_Seira2_HIOParam m; +}; + +#if DEBUG +class daNpc_Seira2_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Seira2_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_Seira2_HIOParam m; +}; + +#define NPC_SEIRA2_HIO_CLASS daNpc_Seira2_HIO_c +#else +#define NPC_SEIRA2_HIO_CLASS daNpc_Seira2_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpc_Seira2_c @@ -83,8 +111,8 @@ public: private: /* 0x0F7C */ mDoExt_McaMorfSO* mpSeiraMorf; - /* 0x0F80 */ int field_0x0F80; - /* 0x0F80 */ dCcD_Cyl mCyl1; + /* 0x0F80 */ NPC_SEIRA2_HIO_CLASS* mpHIO; + /* 0x0F84 */ dCcD_Cyl mCyl1; /* 0x10C0 */ u8 mChkBottle; /* 0x10C1 */ u8 mType; /* 0x10C4 */ daNpcT_ActorMngr_c mActorMngr[1]; @@ -101,16 +129,4 @@ private: STATIC_ASSERT(sizeof(daNpc_Seira2_c) == 0x10F4); -struct daNpc_Seira2_HIOParam { - /* 0x00 */ daNpcT_HIOParam common; -}; - -class daNpc_Seira2_Param_c { -public: - virtual ~daNpc_Seira2_Param_c() {} - - static const daNpc_Seira2_HIOParam m; -}; - - #endif /* D_A_NPC_SEIRA2_H */ diff --git a/include/d/actor/d_a_npc_seirei.h b/include/d/actor/d_a_npc_seirei.h index c537f63cc0..c23f7ed4de 100644 --- a/include/d/actor/d_a_npc_seirei.h +++ b/include/d/actor/d_a_npc_seirei.h @@ -3,25 +3,12 @@ #include "d/actor/d_a_npc.h" -/** - * @ingroup actors-npcs - * @class daNpc_Seirei_c - * @brief Light Spirit Ordona - * - * @details - * -*/ - struct daNpc_Seirei_HIOParam { /* 0x00 */ daNpcT_HIOParam common; /* 0x8C */ f32 force_talk_dist; // 強制会話距離 - Force Talk Distance /* 0x90 */ f32 talk_dist; // 会話距離 - Talk Distance }; -class daNpc_Seirei_HIO_c : public mDoHIO_entry_c { - /* 0x8 */ daNpc_Seirei_HIOParam param; -}; - class daNpc_Seirei_Param_c { public: virtual ~daNpc_Seirei_Param_c() {} @@ -29,6 +16,31 @@ public: static daNpc_Seirei_HIOParam const m; }; +#if DEBUG +class daNpc_Seirei_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Seirei_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_Seirei_HIOParam m; +}; + +#define NPC_SEIREI_HIO_CLASS daNpc_Seirei_HIO_c +#else +#define NPC_SEIREI_HIO_CLASS daNpc_Seirei_Param_c +#endif + +/** + * @ingroup actors-npcs + * @class daNpc_Seirei_c + * @brief Light Spirit Ordona + * + * @details + * +*/ class daNpc_Seirei_c : public daNpcT_c { public: typedef int (daNpc_Seirei_c::*actionFunc)(void*); @@ -91,7 +103,7 @@ public: static cutFunc mCutList[2]; private: - /* 0xE40 */ daNpc_Seirei_HIO_c* mHIO; + /* 0xE40 */ NPC_SEIREI_HIO_CLASS* mpHIO; /* 0xE44 */ u8 mType; /* 0xE45 */ u8 arg0; /* 0xE48 */ actionFunc mNextAction; diff --git a/include/d/actor/d_a_npc_sola.h b/include/d/actor/d_a_npc_sola.h index e05d92ab40..6d6cf742f8 100644 --- a/include/d/actor/d_a_npc_sola.h +++ b/include/d/actor/d_a_npc_sola.h @@ -3,6 +3,34 @@ #include "d/actor/d_a_npc.h" +struct daNpc_solA_HIOParam { + /* 0x00 */ daNpcT_HIOParam common; +}; + +class daNpc_solA_Param_c { +public: + virtual ~daNpc_solA_Param_c() {} + + static daNpc_solA_HIOParam const m; +}; + +#if DEBUG +class daNpc_solA_HIO_c : public mDoHIO_entry_c { +public: + daNpc_solA_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_solA_HIOParam m; +}; + +#define NPC_SOLA_HIO_CLASS daNpc_solA_HIO_c +#else +#define NPC_SOLA_HIO_CLASS daNpc_solA_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpc_solA_c @@ -11,7 +39,6 @@ * @details * */ - class daNpc_solA_c : public daNpcT_c { public: typedef int (daNpc_solA_c::*cutFunc)(int); @@ -88,7 +115,7 @@ public: static cutFunc mCutList[1]; private: - /* 0xE40 */ u8 field_0xe40[0xe44 - 0xe40]; + /* 0xE40 */ NPC_SOLA_HIO_CLASS* mpHIO; /* 0xE44 */ dCcD_Cyl mCyl; /* 0xF80 */ u8 field_0xf80; /* 0xF84 */ actionFunc mNextAction; @@ -98,15 +125,4 @@ private: STATIC_ASSERT(sizeof(daNpc_solA_c) == 0xfa0); -struct daNpc_solA_HIOParam { - /* 0x00 */ daNpcT_HIOParam common; -}; - -class daNpc_solA_Param_c { -public: - virtual ~daNpc_solA_Param_c() {} - - static daNpc_solA_HIOParam const m; -}; - #endif /* D_A_NPC_SOLA_H */ diff --git a/include/d/actor/d_a_npc_taro.h b/include/d/actor/d_a_npc_taro.h index cbbb9d44eb..7eaf3d42b3 100644 --- a/include/d/actor/d_a_npc_taro.h +++ b/include/d/actor/d_a_npc_taro.h @@ -5,64 +5,34 @@ #include "d/actor/d_a_npc.h" struct daNpc_Taro_HIOParam { - /* 0x00 */ f32 mAttentionPosYOffset; - /* 0x04 */ f32 mGravity; - /* 0x08 */ f32 mScale; - /* 0x0C */ f32 field_0x0c; - /* 0x10 */ f32 mSttsWeight; - /* 0x14 */ f32 mCylH; - /* 0x18 */ f32 mWallH; - /* 0x1C */ f32 mWallR; - /* 0x20 */ f32 mBodyDownAngle; - /* 0x24 */ f32 mBodyUpAngle; - /* 0x28 */ f32 mBodyRightAngle; - /* 0x2C */ f32 mBodyLeftAngle; - /* 0x30 */ f32 mHeadDownAngle; - /* 0x34 */ f32 mHeadUpAngle; - /* 0x38 */ f32 mHeadRightAngle; - /* 0x3C */ f32 mHeadLeftAngle; - /* 0x40 */ f32 field_0x40; - /* 0x44 */ f32 mMorfFrames; - /* 0x48 */ s16 field_0x48; - /* 0x4A */ s16 field_0x4a; - /* 0x4C */ s16 field_0x4c; - /* 0x4E */ s16 field_0x4e; - /* 0x50 */ f32 mAttnFovY; - /* 0x54 */ f32 field_0x54; - /* 0x58 */ f32 field_0x58; - /* 0x5C */ f32 field_0x5c; - /* 0x60 */ s16 field_0x60; - /* 0x62 */ s16 field_0x62; - /* 0x64 */ f32 field_0x64; - /* 0x68 */ f32 field_0x68; - /* 0x6C */ f32 field_0x6c; - /* 0x70 */ f32 field_0x70; - /* 0x74 */ f32 field_0x74; - /* 0x78 */ f32 field_0x78; - /* 0x7C */ f32 field_0x7c; - /* 0x80 */ f32 field_0x80; - /* 0x84 */ f32 field_0x84; - /* 0x88 */ f32 field_0x88; + /* 0x00 */ daNpcT_HIOParam common; /* 0x8C */ s16 mChoccaiTimer; /* 0x8E */ s16 field_0x8e; }; class daNpc_Taro_Param_c { - public: - virtual ~daNpc_Taro_Param_c() {} - - static daNpc_Taro_HIOParam const m; - }; - -class daNpc_Taro_HIO_c -#if DEBUG -: public mDoHIO_entry_c -#endif -{ public: - void genMessage(JORMContext*); + virtual ~daNpc_Taro_Param_c() {} + + static daNpc_Taro_HIOParam const m; }; +#if DEBUG +class daNpc_Taro_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Taro_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_Taro_HIOParam m; +}; +#define NPC_TARO_HIO_CLASS daNpc_Taro_HIO_c +#else +#define NPC_TARO_HIO_CLASS daNpc_Taro_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpc_Taro_c @@ -191,7 +161,7 @@ public: static cutFunc mCutList[17]; private: - /* 0x0E40 */ daNpc_Taro_HIO_c* field_0xe40; + /* 0x0E40 */ NPC_TARO_HIO_CLASS* mpHIO; /* 0x0E44 */ J3DModel* mModels[2]; /* 0x0E4C */ dCcD_Cyl mCyl1; /* 0x0F88 */ dCcD_Cyl mCyl2; diff --git a/include/d/actor/d_a_npc_tkj.h b/include/d/actor/d_a_npc_tkj.h index 5ab377f3f5..e2718d8b45 100644 --- a/include/d/actor/d_a_npc_tkj.h +++ b/include/d/actor/d_a_npc_tkj.h @@ -3,6 +3,34 @@ #include "d/actor/d_a_npc.h" +struct daNpc_Tkj_HIOParam { + /* 0x00 */ daNpcT_HIOParam common; +}; + +class daNpc_Tkj_Param_c { +public: + virtual ~daNpc_Tkj_Param_c() {} + + static const daNpc_Tkj_HIOParam m; +}; + +#if DEBUG +class daNpc_Tkj_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Tkj_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_Tkj_HIOParam m; +}; + +#define NPC_TKJ_HIO_CLASS daNpc_Tkj_HIO_c +#else +#define NPC_TKJ_HIO_CLASS daNpc_Tkj_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpcTkj_c @@ -70,7 +98,7 @@ public: static int (daNpcTkj_c::*mCutList[])(int); private: - /* 0xE40 */ u8 field_0xE40[0xE44 - 0xE40]; + /* 0xE40 */ NPC_TKJ_HIO_CLASS* mpHIO; /* 0xE44 */ dCcD_Cyl mCcCyl; /* 0xF80 */ u8 mType; /* 0xF84 */ ActionFunc field_0xf84; @@ -81,14 +109,4 @@ private: STATIC_ASSERT(sizeof(daNpcTkj_c) == 0xfa4); -struct daNpc_Tkj_HIOParam { - /* 0x00 */ daNpcT_HIOParam common; -}; -class daNpc_Tkj_Param_c { -public: - virtual ~daNpc_Tkj_Param_c() {} - - static const daNpc_Tkj_HIOParam m; -}; - #endif /* D_A_NPC_TKJ_H */ diff --git a/include/d/actor/d_a_npc_tks.h b/include/d/actor/d_a_npc_tks.h index ed8ee3f54f..6f908fd7e0 100644 --- a/include/d/actor/d_a_npc_tks.h +++ b/include/d/actor/d_a_npc_tks.h @@ -27,14 +27,6 @@ struct daNpcTks_HIOParam { /* 0x94 */ f32 run_spd; // 走行速度 - Run Speed }; -class daNpcTks_HIO_c -#if DEBUG -: public mDoHIO_entry_c -#endif -{ - /* 0x8 */ daNpcTks_HIOParam param; -}; - class daNpcTks_Param_c { public: virtual ~daNpcTks_Param_c() {} @@ -42,6 +34,23 @@ public: static daNpcTks_HIOParam const m; }; +#if DEBUG +class daNpcTks_HIO_c : public mDoHIO_entry_c { +public: + daNpcTks_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpcTks_HIOParam m; +}; + +#define NPC_TKS_HIO_CLASS daNpcTks_HIO_c +#else +#define NPC_TKS_HIO_CLASS daNpcTks_Param_c +#endif + class daNpcTksTsubo_c { public: /* 0x000 */ mDoExt_McaMorfSO* mpModelMorf; @@ -132,7 +141,7 @@ private: /* 0x1164 */ daNpcF_Lookat_c mLookat; /* 0x1200 */ daNpcF_ActorMngr_c mActorMngr[1]; /* 0x1208 */ fopAc_ac_c* field_0x1208; - /* 0x120C */ daNpcTks_HIO_c* mHIO; + /* 0x120C */ NPC_TKS_HIO_CLASS* mpHIO; /* 0x1210 */ dCcD_Cyl mCyl; /* 0x134C */ actionFunc mAction; /* 0x1358 */ request_of_phase_process_class mPhases[2]; diff --git a/include/d/actor/d_a_npc_wrestler.h b/include/d/actor/d_a_npc_wrestler.h index 2544d53c4a..f19de06fb5 100644 --- a/include/d/actor/d_a_npc_wrestler.h +++ b/include/d/actor/d_a_npc_wrestler.h @@ -281,6 +281,6 @@ private: /* 0xE9B */ u8 mType; /* 0xE9C */ u8 mWrestlerNoDraw; }; -STATIC_ASSERT(sizeof(daNpcWrestler_c) == 0xea0); +//STATIC_ASSERT(sizeof(daNpcWrestler_c) == 0xea0); #endif /* D_A_NPC_WRESTLER_H */ diff --git a/include/d/actor/d_a_npc_yelia.h b/include/d/actor/d_a_npc_yelia.h index 527a383334..0b30954344 100644 --- a/include/d/actor/d_a_npc_yelia.h +++ b/include/d/actor/d_a_npc_yelia.h @@ -3,6 +3,34 @@ #include "d/actor/d_a_npc.h" +struct daNpc_Yelia_HIOParam { + daNpcT_HIOParam common; +}; + +class daNpc_Yelia_Param_c { +public: + virtual ~daNpc_Yelia_Param_c() {} + + static daNpc_Yelia_HIOParam const m; +}; + +#if DEBUG +class daNpc_Yelia_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Yelia_HIO_c(); + + + void listenPropertyEvent(const JORPropertyEvent*); + void genMessage(JORMContext*); + + daNpc_Yelia_HIOParam m; +}; + +#define NPC_YELIA_HIO_CLASS daNpc_Yelia_HIO_c +#else +#define NPC_YELIA_HIO_CLASS daNpc_Yelia_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpc_Yelia_c @@ -77,7 +105,7 @@ public: static char* mCutNameList[6]; static int (daNpc_Yelia_c::*mCutList[6])(int); private: - /* 0xE40 */ u8 field_0xe40[0xe44 - 0xe40]; + /* 0xE40 */ NPC_YELIA_HIO_CLASS* mpHIO; /* 0xE44 */ dCcD_Cyl mCcCyl; /* 0xF80 */ u8 mType; /* 0xF84 */ daNpcT_ActorMngr_c mActorMngr[4]; @@ -91,54 +119,4 @@ private: STATIC_ASSERT(sizeof(daNpc_Yelia_c) == 0xff0); -class daNpc_Yelia_Param_c { -public: - struct param { - /* 0x00 */ f32 mAttnOffsetY; - /* 0x04 */ f32 mGravity; - /* 0x08 */ f32 mScale; - /* 0x0C */ f32 mShadowDepth; - /* 0x10 */ f32 mCcWeight; - /* 0x14 */ f32 mCylH; - /* 0x18 */ f32 mWallH; - /* 0x1C */ f32 mWallR; - /* 0x20 */ f32 mBodyUpAngle; - /* 0x24 */ f32 mBodyDownAngle; - /* 0x28 */ f32 mBodyLeftAngle; - /* 0x2C */ f32 mBodyRightAngle; - /* 0x30 */ f32 mHeadUpAngle; - /* 0x34 */ f32 mHeadDownAngle; - /* 0x38 */ f32 mHeadLeftAngle; - /* 0x3C */ f32 mHeadRightAngle; - /* 0x40 */ f32 mNeckAngleScl; - /* 0x44 */ f32 mMorfFrames; - /* 0x48 */ s16 mSpeakDistIdx; - /* 0x4A */ s16 mSpeakAngleIdx; - /* 0x4C */ s16 mTalkDistIdx; - /* 0x4E */ s16 mTalkAngleIdx; - /* 0x50 */ f32 mAttnFovY; - /* 0x54 */ f32 mAttnRadius; - /* 0x58 */ f32 mAttnUpperY; - /* 0x5C */ f32 mAttnLowerY; - /* 0x60 */ s16 field_0x60; - /* 0x62 */ s16 mDamageTimer; - /* 0x64 */ s16 mTestExpression; - /* 0x66 */ s16 mTestMotion; - /* 0x68 */ s16 mTestLookMode; - /* 0x6A */ bool mTest; - /* 0x6C */ f32 field_0x6c; - /* 0x70 */ f32 field_0x70; - /* 0x74 */ f32 field_0x74; - /* 0x78 */ f32 field_0x78; - /* 0x7C */ f32 field_0x7c; - /* 0x80 */ f32 field_0x80; - /* 0x84 */ f32 field_0x84; - /* 0x88 */ f32 field_0x88; - }; - - virtual ~daNpc_Yelia_Param_c() {} - - static param const m; -}; - #endif /* D_A_NPC_YELIA_H */ diff --git a/include/d/actor/d_a_npc_zant.h b/include/d/actor/d_a_npc_zant.h index 52f65b4140..fb5d430694 100644 --- a/include/d/actor/d_a_npc_zant.h +++ b/include/d/actor/d_a_npc_zant.h @@ -3,6 +3,33 @@ #include "d/actor/d_a_npc.h" +struct daNpc_Zant_HIOParam { + daNpcT_HIOParam common; +}; + +class daNpc_Zant_Param_c { +public: + virtual ~daNpc_Zant_Param_c() {} + + static const daNpc_Zant_HIOParam m; +}; + +#if DEBUG +class daNpc_Zant_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Zant_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_Zant_HIOParam m; +}; +#define NPC_ZANT_HIO_CLASS daNpc_Zant_HIO_c +#else +#define NPC_ZANT_HIO_CLASS daNpc_Zant_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpc_Zant_c @@ -60,7 +87,7 @@ public: static cutFunc mCutList[1]; private: - /* 0xE40 */ u8 field_0xe40[0xe44 - 0xe40]; + /* 0xE40 */ NPC_ZANT_HIO_CLASS* mpHIO; /* 0xE44 */ dCcD_Cyl mCyl; /* 0xF80 */ u8 mType; /* 0xF81 */ u8 field_0xf81[0xf84 - 0xf81]; @@ -71,60 +98,4 @@ private: STATIC_ASSERT(sizeof(daNpc_Zant_c) == 0xfa0); -class daNpc_Zant_Param_c { -public: - virtual ~daNpc_Zant_Param_c() {} - struct Data { - /* 0x00 */ f32 field_0x0; - /* 0x04 */ f32 field_0x4; - /* 0x08 */ f32 field_0x8; - /* 0x0C */ f32 field_0xc; - /* 0x10 */ f32 field_0x10; - /* 0x14 */ f32 field_0x14; - /* 0x18 */ f32 field_0x18; - /* 0x1C */ f32 field_0x1c; - /* 0x20 */ f32 field_0x20; - /* 0x24 */ f32 field_0x24; - /* 0x28 */ f32 field_0x28; - /* 0x2C */ f32 field_0x2c; - /* 0x30 */ f32 field_0x30; - /* 0x34 */ f32 field_0x34; - /* 0x38 */ f32 field_0x38; - /* 0x3C */ f32 field_0x3c; - /* 0x40 */ f32 field_0x40; - /* 0x44 */ f32 field_0x44; - /* 0x48 */ s16 field_0x48; - /* 0x4A */ s16 field_0x4a; - /* 0x4C */ s16 field_0x4c; - /* 0x4E */ s16 field_0x4e; - /* 0x50 */ f32 field_0x50; - /* 0x54 */ f32 field_0x54; - /* 0x58 */ f32 field_0x58; - /* 0x5C */ f32 field_0x5c; - /* 0x60 */ s16 field_0x60; - /* 0x62 */ s16 field_0x62; - /* 0x64 */ int field_0x64; - /* 0x68 */ int field_0x68; - /* 0x6C */ f32 field_0x6c; - /* 0x70 */ f32 field_0x70; - /* 0x74 */ f32 field_0x74; - /* 0x78 */ f32 field_0x78; - /* 0x7C */ f32 field_0x7c; - /* 0x80 */ f32 field_0x80; - /* 0x84 */ f32 field_0x84; - /* 0x88 */ f32 field_0x88; - }; - - static const Data m; -}; - -class daNpc_Zant_HIO_c { -public: - virtual ~daNpc_Zant_HIO_c() {} - -#if DEBUG - daNpc_Zant_Param_c::Data param; -#endif -}; - #endif /* D_A_NPC_ZANT_H */ diff --git a/include/d/actor/d_a_npc_zelR.h b/include/d/actor/d_a_npc_zelR.h index a13b40855e..0c6fcd81b4 100644 --- a/include/d/actor/d_a_npc_zelR.h +++ b/include/d/actor/d_a_npc_zelR.h @@ -16,10 +16,6 @@ struct daNpc_ZelR_HIOParam { /* 0x0 */ daNpcT_HIOParam common; }; -class daNpc_ZelR_HIO_c : public mDoHIO_entry_c { - /* 0x8 */ daNpc_ZelR_HIOParam param; -}; - class daNpc_ZelR_Param_c { public: virtual ~daNpc_ZelR_Param_c() {}; @@ -27,6 +23,23 @@ public: static const daNpc_ZelR_HIOParam m; }; +#if DEBUG +class daNpc_ZelR_HIO_c : public mDoHIO_entry_c { +public: + daNpc_ZelR_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_ZelR_HIOParam m; +}; + +#define NPC_ZELR_HIO_CLASS daNpc_ZelR_HIO_c +#else +#define NPC_ZELR_HIO_CLASS daNpc_ZelR_Param_c +#endif + class daNpc_ZelR_c : public daNpcT_c { public: typedef BOOL (daNpc_ZelR_c::*ActionFn)(void*); @@ -84,7 +97,7 @@ public: static EventFn mCutList[1]; private: - /* 0xE40 */ u8 field_0xe40[0xe44 - 0xe40]; + /* 0xE40 */ NPC_ZELR_HIO_CLASS* mpHIO; /* 0xE44 */ dCcD_Cyl mCyl; /* 0xF80 */ u8 mType; /* 0xF84 */ ActionFn field_0xf84; diff --git a/include/d/actor/d_a_npc_zelRo.h b/include/d/actor/d_a_npc_zelRo.h index ebac8e8929..4056b4ea28 100644 --- a/include/d/actor/d_a_npc_zelRo.h +++ b/include/d/actor/d_a_npc_zelRo.h @@ -16,10 +16,6 @@ struct daNpc_ZelRo_HIOParam { /* 0x0 */ daNpcT_HIOParam common; }; -class daNpc_ZelRo_HIO_c : public mDoHIO_entry_c { - /* 0x8 */ daNpc_ZelRo_HIOParam param; -}; - class daNpc_ZelRo_Param_c { public: virtual ~daNpc_ZelRo_Param_c() {} @@ -27,6 +23,23 @@ public: static daNpc_ZelRo_HIOParam const m; }; +#if DEBUG +class daNpc_ZelRo_HIO_c : public mDoHIO_entry_c { +public: + daNpc_ZelRo_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_ZelRo_HIOParam m; +}; + +#define NPC_ZELRO_HIO_CLASS daNpc_ZelRo_HIO_c +#else +#define NPC_ZELRO_HIO_CLASS daNpc_ZelRo_Param_c +#endif + class daNpc_ZelRo_c : public daNpcT_c { public: enum Material { @@ -138,7 +151,7 @@ public: static cutFunc mCutList[1]; private: - /* 0xE40 */ daNpc_ZelRo_HIO_c* mHIO; + /* 0xE40 */ NPC_ZELRO_HIO_CLASS* mpHIO; /* 0xE44 */ dCcD_Cyl mCyl; /* 0xF80 */ u8 mType; /* 0xF84 */ actionFunc mNextAction; diff --git a/include/d/actor/d_a_npc_zelda.h b/include/d/actor/d_a_npc_zelda.h index cffc4ee386..78630dbb5b 100644 --- a/include/d/actor/d_a_npc_zelda.h +++ b/include/d/actor/d_a_npc_zelda.h @@ -3,8 +3,36 @@ #include "d/actor/d_a_npc.h" -class daNpc_Zelda_HIO_c; -class daNpc_Zelda_c; +class daNpc_Zelda_HIOParam { +public: + /* 0x00 */ daNpcT_HIOParam common; +}; + +STATIC_ASSERT(sizeof(daNpc_Zelda_HIOParam) == 0x8c); + +class daNpc_Zelda_Param_c { +public: + virtual ~daNpc_Zelda_Param_c() {} + + static const daNpc_Zelda_HIOParam m; +}; + +#if DEBUG +class daNpc_Zelda_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Zelda_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext* ctx); + + daNpc_Zelda_HIOParam m; +}; + +#define NPC_ZELDA_HIO_CLASS daNpc_Zelda_HIO_c +#else +#define NPC_ZELDA_HIO_CLASS daNpc_Zelda_Param_c +#endif /** * @ingroup actors-npcs @@ -76,7 +104,7 @@ public: static cutFunc mCutList[1]; private: - /* 0xE40 */ daNpc_Zelda_HIO_c* mHIO; + /* 0xE40 */ NPC_ZELDA_HIO_CLASS* mpHIO; /* 0xE44 */ dCcD_Cyl mCyl; /* 0xF80 */ u8 field_0xf80; /* 0xF84 */ actionFunc mAction1; @@ -86,34 +114,4 @@ private: STATIC_ASSERT(sizeof(daNpc_Zelda_c) == 0xfa0); -class daNpc_Zelda_HIOParam { -public: - /* 0x00 */ daNpcT_HIOParam common; -}; - -STATIC_ASSERT(sizeof(daNpc_Zelda_HIOParam) == 0x8c); - -class daNpc_Zelda_Param_c { -public: - virtual ~daNpc_Zelda_Param_c() {} - - static const daNpc_Zelda_HIOParam m; -}; - -class daNpc_Zelda_HIO_c -#if DEBUG - : public mDoHIO_entry_c -#endif -{ -public: - daNpc_Zelda_HIO_c(); - - void genMessage(JORMContext* ctx); - void listenPropertyEvent(const JORPropertyEvent*); - -#if DEBUG - daNpc_Zelda_HIOParam param; -#endif -}; - #endif /* D_A_NPC_ZELDA_H */ diff --git a/include/d/actor/d_a_npc_zra.h b/include/d/actor/d_a_npc_zra.h index 6de13512dc..76df44770d 100644 --- a/include/d/actor/d_a_npc_zra.h +++ b/include/d/actor/d_a_npc_zra.h @@ -4,15 +4,53 @@ #include "d/actor/d_a_npc4.h" #include "d/d_particle_copoly.h" -class daNpc_zrA_HIO_c; -/** - * @ingroup actors-npcs - * @class daNpc_zrA_Path_c - * @brief Zora (Adult) - * - * @details - * -*/ +struct daNpc_zrA_HIOParam { + /* 0x00 */ daNpcF_HIOParam common; + /* 0x6C */ f32 mSwimSpeed; + /* 0x70 */ f32 mMinSwimSpeedScale; + /* 0x74 */ s16 mSwimAngleSpeed; + /* 0x78 */ f32 mSwimAnmRate; + /* 0x7C */ f32 field_0x7c; + /* 0x80 */ f32 field_0x80; + /* 0x84 */ f32 mMaxScaleFactor; + /* 0x88 */ f32 mMinDepth; + /* 0x8C */ f32 field_0x8c; + /* 0x90 */ f32 field_0x90; + /* 0x94 */ f32 mWalkSpeed; + /* 0x98 */ s16 mWalkAngleSpeed; + /* 0x9A */ s16 mWalkAngleScale; + /* 0x9C */ f32 mWalkAnmRate; + /* 0xA0 */ f32 field_0xa0; + /* 0xA4 */ f32 field_0xa4; + /* 0xA8 */ f32 field_0xa8; + /* 0xAC */ f32 field_0xac; +}; + +STATIC_ASSERT(sizeof(daNpc_zrA_HIOParam) == 0xB0); + +class daNpc_zrA_Param_c { +public: + virtual ~daNpc_zrA_Param_c() {} + + static daNpc_zrA_HIOParam const m; +}; + +#if DEBUG +class daNpc_zrA_HIO_c : public mDoHIO_entry_c { +public: + daNpc_zrA_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_zrA_HIOParam m; +}; + +#define NPC_ZRA_HIO_CLASS daNpc_zrA_HIO_c +#else +#define NPC_ZRA_HIO_CLASS daNpc_zrA_Param_c +#endif class daNpc_zrA_Path_c : public daNpcF_Path_c { public: @@ -28,6 +66,14 @@ public: STATIC_ASSERT(sizeof(daNpc_zrA_Path_c) == 0x630); +/** + * @ingroup actors-npcs + * @class daNpc_zrA_Path_c + * @brief Zora (Adult) + * + * @details + * +*/ class daNpc_zrA_c : public daNpcF_c { public: typedef BOOL (daNpc_zrA_c::*ActionFn)(void*); @@ -334,7 +380,7 @@ public: /* 0x1248 */ daNpcF_Lookat_c mLookat; /* 0x12E4 */ dPaPo_c mPaPo; /* 0x131C */ daNpcF_ActorMngr_c mActorMngr[3]; - /* 0x1334 */ daNpc_zrA_HIO_c* mpHIO; + /* 0x1334 */ NPC_ZRA_HIO_CLASS* mpHIO; /* 0x1338 */ dCcD_Cyl mCcCyl; /* 0x1474 */ ActionFn mpNextActionFn; /* 0x1480 */ ActionFn mpActionFn; @@ -403,66 +449,4 @@ public: STATIC_ASSERT(sizeof(daNpc_zrA_c) == 0x15C4); -class daNpc_zrA_Param_c { -public: - struct param { - /* 0x00 */ f32 mAttnOffsetY; - /* 0x04 */ f32 mGravity; - /* 0x08 */ f32 mScale; - /* 0x0C */ f32 mShadowDepth; - /* 0x10 */ f32 mCcWeight; - /* 0x14 */ f32 mCylH; - /* 0x18 */ f32 mWallH; - /* 0x1C */ f32 mWallR; - /* 0x20 */ f32 mBodyUpAngle; - /* 0x24 */ f32 mBodyDownAngle; - /* 0x28 */ f32 mBodyLeftAngle; - /* 0x2C */ f32 mBodyRightAngle; - /* 0x30 */ f32 mHeadUpAngle; - /* 0x34 */ f32 mHeadDownAngle; - /* 0x38 */ f32 mHeadLeftAngle; - /* 0x3C */ f32 mHeadRightAngle; - /* 0x40 */ f32 mNeckAngleScl; - /* 0x44 */ f32 mMorfFrames; - /* 0x48 */ s16 mSpeakDistIdx; - /* 0x4A */ s16 mSpeakAngleIdx; - /* 0x4C */ s16 mTalkDistIdx; - /* 0x4E */ s16 mTalkAngleIdx; - /* 0x50 */ f32 mAttnFovY; - /* 0x54 */ f32 mAttnRadius; - /* 0x58 */ f32 mAttnUpperY; - /* 0x5C */ f32 mAttnLowerY; - /* 0x60 */ s16 field_0x60; - /* 0x62 */ s16 mDamageTimer; - /* 0x64 */ s16 mTestExpression; - /* 0x66 */ s16 mTestMotion; - /* 0x68 */ s16 mTestLookMode; - /* 0x6A */ bool mTest; - /* 0x6C */ f32 mSwimSpeed; - /* 0x70 */ f32 mMinSwimSpeedScale; - /* 0x74 */ s16 mSwimAngleSpeed; - /* 0x78 */ f32 mSwimAnmRate; - /* 0x7C */ f32 field_0x7c; - /* 0x80 */ f32 field_0x80; - /* 0x84 */ f32 mMaxScaleFactor; - /* 0x88 */ f32 mMinDepth; - /* 0x8C */ f32 field_0x8c; - /* 0x90 */ f32 field_0x90; - /* 0x94 */ f32 mWalkSpeed; - /* 0x98 */ s16 mWalkAngleSpeed; - /* 0x9A */ s16 mWalkAngleScale; - /* 0x9C */ f32 mWalkAnmRate; - /* 0xA0 */ f32 field_0xa0; - /* 0xA4 */ f32 field_0xa4; - /* 0xA8 */ f32 field_0xa8; - /* 0xAC */ f32 field_0xac; - }; - - virtual ~daNpc_zrA_Param_c() {} - - static param const m; -}; - -STATIC_ASSERT(sizeof(daNpc_zrA_Param_c::param) == 0xB0); - #endif /* D_A_NPC_ZRA_H */ diff --git a/include/d/actor/d_a_npc_zrc.h b/include/d/actor/d_a_npc_zrc.h index f3b2f86426..907dbe11a5 100644 --- a/include/d/actor/d_a_npc_zrc.h +++ b/include/d/actor/d_a_npc_zrc.h @@ -3,6 +3,39 @@ #include "d/actor/d_a_npc4.h" + +struct daNpc_zrC_HIOParam { + /* 0x00 */ daNpcF_HIOParam common; + /* 0x6C */ f32 field_0x6c; + /* 0x70 */ f32 field_0x70; +}; + +STATIC_ASSERT(sizeof(daNpc_zrC_HIOParam) == 0x74); + +class daNpc_zrC_Param_c { +public: + virtual ~daNpc_zrC_Param_c() {} + + static daNpc_zrC_HIOParam const m; +}; + +#if DEBUG +class daNpc_zrC_HIO_c : public mDoHIO_entry_c { +public: + daNpc_zrC_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_zrC_HIOParam m; +}; + +#define NPC_ZRC_HIO_CLASS daNpc_zrC_HIO_c +#else +#define NPC_ZRC_HIO_CLASS daNpc_zrC_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpc_zrC_c @@ -68,7 +101,7 @@ private: /* 0xBD8 */ daNpcF_MatAnm_c* mpMatAnm; /* 0xBDC */ daNpcF_Lookat_c mLookat; /* 0xC78 */ daNpcF_ActorMngr_c mActorMngr[3]; - /* 0xC90 */ u8 field_0xc90[4]; + /* 0xC90 */ NPC_ZRC_HIO_CLASS* mpHIO; /* 0xC94 */ dCcD_Cyl mCcCyl; /* 0xDD0 */ ActionFn mpNextActionFn; /* 0xDDC */ ActionFn mpActionFn; @@ -167,50 +200,4 @@ private: STATIC_ASSERT(sizeof(daNpc_zrC_c) == 0xe3c); -class daNpc_zrC_Param_c { -public: - struct param { - /* 0x00 */ f32 mAttnOffsetY; - /* 0x04 */ f32 mGravity; - /* 0x08 */ f32 mScale; - /* 0x0C */ f32 mShadowDepth; - /* 0x10 */ f32 mCcWeight; - /* 0x14 */ f32 mCylH; - /* 0x18 */ f32 mWallH; - /* 0x1C */ f32 mWallR; - /* 0x20 */ f32 mBodyUpAngle; - /* 0x24 */ f32 mBodyDownAngle; - /* 0x28 */ f32 mBodyLeftAngle; - /* 0x2C */ f32 mBodyRightAngle; - /* 0x30 */ f32 mHeadUpAngle; - /* 0x34 */ f32 mHeadDownAngle; - /* 0x38 */ f32 mHeadLeftAngle; - /* 0x3C */ f32 mHeadRightAngle; - /* 0x40 */ f32 mNeckAngleScl; - /* 0x44 */ f32 mMorfFrames; - /* 0x48 */ s16 mSpeakDistIdx; - /* 0x4A */ s16 mSpeakAngleIdx; - /* 0x4C */ s16 mTalkDistIdx; - /* 0x4E */ s16 mTalkAngleIdx; - /* 0x50 */ f32 mAttnFovY; - /* 0x54 */ f32 mAttnRadius; - /* 0x58 */ f32 mAttnUpperY; - /* 0x5C */ f32 mAttnLowerY; - /* 0x60 */ s16 field_0x60; - /* 0x62 */ s16 mDamageTimer; - /* 0x64 */ s16 mTestExpression; - /* 0x66 */ s16 mTestMotion; - /* 0x68 */ s16 mTestLookMode; - /* 0x6A */ bool mTest; - /* 0x6C */ f32 field_0x6c; - /* 0x70 */ f32 field_0x70; - }; - - virtual ~daNpc_zrC_Param_c() {} - - static param const m; -}; - -STATIC_ASSERT(sizeof(daNpc_zrC_Param_c::param) == 0x74); - #endif /* D_A_NPC_ZRC_H */ diff --git a/include/d/actor/d_a_npc_zrz.h b/include/d/actor/d_a_npc_zrz.h index 131c349805..259046fe1b 100644 --- a/include/d/actor/d_a_npc_zrz.h +++ b/include/d/actor/d_a_npc_zrz.h @@ -6,6 +6,42 @@ class daGraveStone_c; class daObjZraRock_c; +struct daNpc_zrZ_HIOParam { + /* 0x00 */ daNpcF_HIOParam common; + /* 0x6C */ f32 field_0x6c; + /* 0x70 */ f32 mFollowDst; + /* 0x74 */ f32 mRestoreDst; + /* 0x78 */ f32 mMaxSpeed; + /* 0x7C */ f32 mClothesGetDst; + /* 0x80 */ f32 field_0x80; +}; + +class daNpc_zrZ_Param_c { +public: + virtual ~daNpc_zrZ_Param_c() {} + + static daNpc_zrZ_HIOParam const m; +}; + +STATIC_ASSERT(sizeof(daNpc_zrZ_HIOParam) == 0x84); + +#if DEBUG +class daNpc_zrZ_HIO_c : public mDoHIO_entry_c { +public: + daNpc_zrZ_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daNpc_zrZ_HIOParam m; +}; + +#define NPC_ZRZ_HIO_CLASS daNpc_zrZ_HIO_c +#else +#define NPC_ZRZ_HIO_CLASS daNpc_zrZ_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpc_zrZ_c @@ -85,7 +121,7 @@ private: /* 0x0BE4 */ daNpcF_Lookat_c mLookat; /* 0x0C80 */ daNpcF_ActorMngr_c mActorMngr[2]; /* 0x0C90 */ daNpcF_Path_c mPath; - /* 0x12C0 */ u8 field_0x12c0[4]; + /* 0x12C0 */ NPC_ZRZ_HIO_CLASS* mpHIO; /* 0x12C4 */ dCcD_Cyl mCcCyl; /* 0x1400 */ ActionFn mpNextActionFn; /* 0x140C */ ActionFn mpActionFn; @@ -166,54 +202,4 @@ private: STATIC_ASSERT(sizeof(daNpc_zrZ_c) == 0x14c8); -class daNpc_zrZ_Param_c { -public: - struct param { - /* 0x00 */ f32 mAttnOffsetY; - /* 0x04 */ f32 mGravity; - /* 0x08 */ f32 mScale; - /* 0x0C */ f32 mShadowDepth; - /* 0x10 */ f32 mCcWeight; - /* 0x14 */ f32 mCylH; - /* 0x18 */ f32 mWallH; - /* 0x1C */ f32 mWallR; - /* 0x20 */ f32 mBodyUpAngle; - /* 0x24 */ f32 mBodyDownAngle; - /* 0x28 */ f32 mBodyLeftAngle; - /* 0x2C */ f32 mBodyRightAngle; - /* 0x30 */ f32 mHeadUpAngle; - /* 0x34 */ f32 mHeadDownAngle; - /* 0x38 */ f32 mHeadLeftAngle; - /* 0x3C */ f32 mHeadRightAngle; - /* 0x40 */ f32 mNeckAngleScl; - /* 0x44 */ f32 mMorfFrames; - /* 0x48 */ s16 mSpeakDistIdx; - /* 0x4A */ s16 mSpeakAngleIdx; - /* 0x4C */ s16 mTalkDistIdx; - /* 0x4E */ s16 mTalkAngleIdx; - /* 0x50 */ f32 mAttnFovY; - /* 0x54 */ f32 mAttnRadius; - /* 0x58 */ f32 mAttnUpperY; - /* 0x5C */ f32 mAttnLowerY; - /* 0x60 */ s16 field_0x60; - /* 0x62 */ s16 mDamageTimer; - /* 0x64 */ s16 mTestExpression; - /* 0x66 */ s16 mTestMotion; - /* 0x68 */ s16 mTestLookMode; - /* 0x6A */ bool mTest; - /* 0x6C */ f32 field_0x6c; - /* 0x70 */ f32 mFollowDst; - /* 0x74 */ f32 mRestoreDst; - /* 0x78 */ f32 mMaxSpeed; - /* 0x7C */ f32 mClothesGetDst; - /* 0x80 */ f32 field_0x80; - }; - - virtual ~daNpc_zrZ_Param_c() {} - - static param const m; -}; - -STATIC_ASSERT(sizeof(daNpc_zrZ_Param_c::param) == 0x84); - #endif /* D_A_NPC_ZRZ_H */ diff --git a/include/d/actor/d_a_obj_automata.h b/include/d/actor/d_a_obj_automata.h index 501c4f7e6b..3468ccc3e8 100644 --- a/include/d/actor/d_a_obj_automata.h +++ b/include/d/actor/d_a_obj_automata.h @@ -5,6 +5,36 @@ #include "d/d_cc_d.h" #include "f_op/f_op_actor.h" +struct daObj_AutoMata_HIOParam { + f32 field_0x0; + f32 field_0x4; + f32 field_0x8; +}; + +class daObj_AutoMata_Param_c { +public: + virtual ~daObj_AutoMata_Param_c() {} + + static daObj_AutoMata_HIOParam const m; +}; + +#if DEBUG +class daObj_AutoMata_HIO_c : public mDoHIO_entry_c { +public: + daObj_AutoMata_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daObj_AutoMata_HIOParam m; +}; + +#define OBJ_AUTOMATA_HIO_CLASS daObj_AutoMata_HIO_c +#else +#define OBJ_AUTOMATA_HIO_CLASS daObj_AutoMata_Param_c +#endif + /** * @ingroup actors-objects * @class daObj_AutoMata_c @@ -15,7 +45,7 @@ */ class daObj_AutoMata_c : public fopAc_ac_c { private: - /* 0x568 */ int field_0x568; + /* 0x568 */ OBJ_AUTOMATA_HIO_CLASS* mpHIO; /* 0x56C */ mDoExt_McaMorfSO* mpMorf; /* 0x570 */ Z2Creature mCreature; /* 0x600 */ mDoExt_btkAnm mBtk; @@ -58,11 +88,4 @@ public: STATIC_ASSERT(sizeof(daObj_AutoMata_c) == 0xb38); -class daObj_AutoMata_Param_c { -public: - virtual ~daObj_AutoMata_Param_c() {} - - static f32 const m[3]; -}; - #endif /* D_A_OBJ_AUTOMATA_H */ diff --git a/include/d/actor/d_a_obj_bed.h b/include/d/actor/d_a_obj_bed.h index 827f3827fc..e889f8a590 100644 --- a/include/d/actor/d_a_obj_bed.h +++ b/include/d/actor/d_a_obj_bed.h @@ -8,6 +8,36 @@ class dBgW; +struct daObj_Bed_HIOParam { + /* 0x0 */ f32 field_0x0; + /* 0x4 */ f32 field_0x4; + /* 0x8 */ f32 field_0x8; + /* 0xC */ f32 field_0xc; +}; + +class daObj_Bed_Param_c { +public: + virtual ~daObj_Bed_Param_c() {} + + static daObj_Bed_HIOParam const m; +}; + +#if DEBUG +class daObj_Bed_HIO_c : public mDoHIO_entry_c { +public: + daObj_Bed_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daObj_Bed_HIOParam m; +}; +#define OBJ_BED_HIO_CLASS daObj_Bed_HIO_c +#else +#define OBJ_BED_HIO_CLASS daObj_Bed_Param_c +#endif + /** * @ingroup actors-objects * @class daObj_Bed_c @@ -18,7 +48,7 @@ class dBgW; */ class daObj_Bed_c : public fopAc_ac_c { public: - /* 0x568 */ u8 field_0x568[4]; + /* 0x568 */ OBJ_BED_HIO_CLASS* mpHIO; /* 0x56C */ request_of_phase_process_class mPhase; /* 0x574 */ J3DModel* mpModel; /* 0x578 */ dBgS_ObjAcch mAcch; @@ -50,18 +80,4 @@ public: STATIC_ASSERT(sizeof(daObj_Bed_c) == 0x844); -class daObj_Bed_Param_c { -public: - virtual ~daObj_Bed_Param_c() {} - - struct params { - /* 0x0 */ f32 field_0x0; - /* 0x4 */ f32 field_0x4; - /* 0x8 */ f32 field_0x8; - /* 0xC */ f32 field_0xc; - }; - - static daObj_Bed_Param_c::params const m; -}; - #endif /* D_A_OBJ_BED_H */ diff --git a/include/d/actor/d_a_obj_boumato.h b/include/d/actor/d_a_obj_boumato.h index 27c1fd81d3..176832f24f 100644 --- a/include/d/actor/d_a_obj_boumato.h +++ b/include/d/actor/d_a_obj_boumato.h @@ -7,6 +7,40 @@ #include "f_op/f_op_actor_mng.h" #include "d/d_cc_d.h" +struct daObj_BouMato_HIOParam { + /* 0x00 */ f32 field_0x00; + /* 0x04 */ f32 field_0x04; + /* 0x08 */ f32 field_0x08; + /* 0x0C */ f32 field_0x0c; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; +}; + +class daObj_BouMato_Param_c { +public: + virtual ~daObj_BouMato_Param_c() {} + + static daObj_BouMato_HIOParam const m; +}; + +#if DEBUG +class daObj_BouMato_HIO_c : public mDoHIO_entry_c { +public: + daObj_BouMato_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daObj_BouMato_HIOParam m; +}; + +#define OBJ_BOUMATO_HIO_CLASS daObj_BouMato_HIO_c +#else +#define OBJ_BOUMATO_HIO_CLASS daObj_BouMato_Param_c +#endif + /** * @ingroup actors-objects * @class daObj_BouMato_c @@ -17,7 +51,7 @@ */ class daObj_BouMato_c : public fopAc_ac_c { private: - /* 0x568 */ int field_0x568; + /* 0x568 */ OBJ_BOUMATO_HIO_CLASS* mpHIO; /* 0x56C */ request_of_phase_process_class mPhase; /* 0x574 */ J3DModel* mModel; /* 0x578 */ dBgS_ObjAcch mAcch; @@ -93,12 +127,5 @@ public: STATIC_ASSERT(sizeof(daObj_BouMato_c) == 0xa40); -class daObj_BouMato_Param_c { -public: - virtual ~daObj_BouMato_Param_c() {} - - static f32 const m[7]; -}; - #endif /* D_A_OBJ_BOUMATO_H */ diff --git a/include/d/actor/d_a_obj_dust.h b/include/d/actor/d_a_obj_dust.h index 8f00781e8c..4ce26227b3 100644 --- a/include/d/actor/d_a_obj_dust.h +++ b/include/d/actor/d_a_obj_dust.h @@ -11,7 +11,7 @@ #include "d/d_resorce.h" #include "d/d_s_play.h" -#include +#include /** * @ingroup actors-objects diff --git a/include/d/actor/d_a_obj_kago.h b/include/d/actor/d_a_obj_kago.h index 0ffa07fd61..46d1e0eb42 100644 --- a/include/d/actor/d_a_obj_kago.h +++ b/include/d/actor/d_a_obj_kago.h @@ -6,6 +6,44 @@ #include "d/d_cc_d.h" #include "f_op/f_op_actor_mng.h" +struct daObj_Kago_HIOParam { + /* 0x00 */ f32 field_0x00; + /* 0x04 */ f32 mGravity; + /* 0x08 */ f32 field_0x08; + /* 0x0C */ f32 field_0x0c; + /* 0x10 */ f32 mWeight; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 mWallH; + /* 0x1C */ f32 mWallR; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; +}; + +class daObj_Kago_Param_c { +public: + virtual ~daObj_Kago_Param_c() {} + + static const daObj_Kago_HIOParam m; +}; + +#if DEBUG +class daObj_Kago_HIO_c : public mDoHIO_entry_c { +public: + daObj_Kago_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daObj_Kago_HIOParam m; +}; + +#define OBJ_KAGO_HIO_CLASS daObj_Kago_HIO_c +#else +#define OBJ_KAGO_HIO_CLASS daObj_Kago_Param_c +#endif + /** * @ingroup actors-objects * @class daObj_Kago_c @@ -34,10 +72,10 @@ public: void setHamonPrtcl(); u8 getType() { - int iVar1 = fopAcM_GetParam(this) & 0xFF; - u8 rv; + u8 adj_arg = argument & 0x7F; + u8 iVar1 = fopAcM_GetParam(this) & 0xFF; - switch ((argument & 127)) { + switch (adj_arg) { case 0: switch (iVar1) { case 0: @@ -88,7 +126,7 @@ public: } private: - /* 0x568 */ u8 field_0x568[0x56c - 0x568]; + /* 0x568 */ OBJ_KAGO_HIO_CLASS* mpHIO; /* 0x56C */ request_of_phase_process_class mPhase; /* 0x574 */ J3DModel* field_0x574; /* 0x578 */ dBgS_ObjAcch mObjAcch; @@ -139,25 +177,4 @@ private: STATIC_ASSERT(sizeof(daObj_Kago_c) == 0xba8); -class daObj_Kago_Param_c { -public: - virtual ~daObj_Kago_Param_c() {} - - struct Data { - /* 0x00 */ f32 field_0x00; - /* 0x04 */ f32 mGravity; - /* 0x08 */ f32 field_0x08; - /* 0x0C */ f32 field_0x0c; - /* 0x10 */ f32 mWeight; - /* 0x14 */ f32 field_0x14; - /* 0x18 */ f32 mWallH; - /* 0x1C */ f32 mWallR; - /* 0x20 */ f32 field_0x20; - /* 0x24 */ f32 field_0x24; - /* 0x28 */ f32 field_0x28; - }; - static const Data m; -}; - - #endif /* D_A_OBJ_KAGO_H */ diff --git a/include/d/actor/d_a_obj_kbacket.h b/include/d/actor/d_a_obj_kbacket.h index e8c4908e7d..f3855fc8ca 100644 --- a/include/d/actor/d_a_obj_kbacket.h +++ b/include/d/actor/d_a_obj_kbacket.h @@ -8,10 +8,10 @@ struct daObj_KBacket_HIOParam { - f32 field_0x0; - f32 field_0x4; - f32 field_0x8; - f32 field_0xc; + f32 field_0x00; + f32 field_0x04; + f32 field_0x08; + f32 field_0x0c; f32 field_0x10; f32 field_0x14; f32 field_0x18; @@ -21,19 +21,6 @@ struct daObj_KBacket_HIOParam f32 field_0x28; }; -class daObj_KBacket_HIO_c -#if DEBUG - : public mDoHIO_entry_c -#endif -{ -public: -#if DEBUG - void genMessage(JORMContext*); - - daObj_KBacket_HIOParam param; -#endif -}; - class daObj_KBacket_Param_c { public: virtual ~daObj_KBacket_Param_c() {} @@ -41,6 +28,23 @@ public: static const daObj_KBacket_HIOParam m; }; +#if DEBUG +class daObj_KBacket_HIO_c : public mDoHIO_entry_c { +public: + daObj_KBacket_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daObj_KBacket_HIOParam m; +}; + +#define OBJ_KBACKET_HIO_CLASS daObj_KBacket_HIO_c +#else +#define OBJ_KBACKET_HIO_CLASS daObj_KBacket_Param_c +#endif + /** * @ingroup actors-objects * @class daObj_KBacket_c @@ -51,7 +55,7 @@ public: */ class daObj_KBacket_c : public fopAc_ac_c { public: - /* 0x568 */ daObj_KBacket_HIO_c* mHIO; + /* 0x568 */ OBJ_KBACKET_HIO_CLASS* mpHIO; /* 0x56C */ request_of_phase_process_class field_0x56c; /* 0x574 */ J3DModel* mpModel; /* 0x578 */ dBgS_ObjAcch mObjAcch; diff --git a/include/d/actor/d_a_obj_ladder.h b/include/d/actor/d_a_obj_ladder.h index ff3a376eaf..eb48cf0f16 100644 --- a/include/d/actor/d_a_obj_ladder.h +++ b/include/d/actor/d_a_obj_ladder.h @@ -13,6 +13,15 @@ * */ namespace daObjLadder { + enum Type_e { + TYPE_0, + TYPE_1, + TYPE_2, + TYPE_3, + TYPE_4, + TYPE_5, + }; + class Act_c : public dBgS_MoveBgActor { public: enum Prm_e { @@ -22,15 +31,6 @@ namespace daObjLadder { PRM_16 = 16, }; - enum Type_e { - TYPE_0, - TYPE_1, - TYPE_2, - TYPE_3, - TYPE_4, - TYPE_5, - }; - enum Mode { MODE_WAIT, MODE_DEMOREQ, @@ -62,15 +62,15 @@ namespace daObjLadder { int Execute(Mtx**); int Draw(); - u8 prm_get_evId() { + u8 prm_get_evId() const { return daObj::PrmAbstract(this, PRM_8, PRM_16); } - int prm_get_swSave() { + int prm_get_swSave() const { return daObj::PrmAbstract(this,PRM_8, PRM_8); } - Type_e prm_get_type() { + Type_e prm_get_type() const { return(Type_e)daObj::PrmAbstract(this,PRM_3, PRM_0); } diff --git a/include/d/actor/d_a_obj_mie.h b/include/d/actor/d_a_obj_mie.h index a07ff24452..0f1df429be 100644 --- a/include/d/actor/d_a_obj_mie.h +++ b/include/d/actor/d_a_obj_mie.h @@ -20,27 +20,31 @@ struct daObj_Mie_HIOParam { /* 0x28 */ f32 floating_offset; }; -struct daObj_Mie_Param_c { +class daObj_Mie_Param_c { +public: virtual ~daObj_Mie_Param_c() {} + static const daObj_Mie_HIOParam m; }; -class daObj_Mie_HIO_c #if DEBUG -: public mDoHIO_entry_c -#endif +class daObj_Mie_HIO_c : public mDoHIO_entry_c { public: - daObj_Mie_HIO_c() { - mParams = daObj_Mie_Param_c::m; - } + daObj_Mie_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); void genMessage(JORMContext*); - virtual ~daObj_Mie_HIO_c() {} - daObj_Mie_HIOParam mParams; + daObj_Mie_HIOParam m; }; +#define OBJ_MIE_HIO_CLASS daObj_Mie_HIO_c +#else +#define OBJ_MIE_HIO_CLASS daObj_Mie_Param_c +#endif + /** * @ingroup actors-objects * @class daObj_Mie_c @@ -51,7 +55,7 @@ public: */ class daObj_Mie_c : public fopAc_ac_c { private: - /* 0x568 */ daObj_Mie_HIO_c* mHIO; + /* 0x568 */ OBJ_MIE_HIO_CLASS* mpHIO; /* 0x56C */ request_of_phase_process_class mPhase; /* 0x574 */ J3DModel* mModel; /* 0x578 */ dBgS_ObjAcch mAcch; diff --git a/include/d/actor/d_a_obj_nougu.h b/include/d/actor/d_a_obj_nougu.h index 414c269f61..3e8e004e36 100644 --- a/include/d/actor/d_a_obj_nougu.h +++ b/include/d/actor/d_a_obj_nougu.h @@ -5,6 +5,37 @@ #include "d/d_bg_s_acch.h" #include "d/d_cc_d.h" +struct daObj_Nougu_HIOParam { + /* 0x0 */ f32 attention_offset; + /* 0x4 */ f32 gravity; + /* 0x8 */ f32 scale; + /* 0xC */ f32 shadow_size; +}; + +class daObj_Nougu_Param_c { +public: + virtual ~daObj_Nougu_Param_c() {} + + static const daObj_Nougu_HIOParam m; +}; + +#if DEBUG +class daObj_Nougu_HIO_c : public mDoHIO_entry_c { +public: + daObj_Nougu_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daObj_Nougu_HIOParam m; +}; + +#define OBJ_NOUGU_HIO_CLASS daObj_Nougu_HIO_c +#else +#define OBJ_NOUGU_HIO_CLASS daObj_Nougu_Param_c +#endif + /** * @ingroup actors-objects * @class daObj_Nougu_c @@ -15,7 +46,7 @@ */ class daObj_Nougu_c : public fopAc_ac_c { public: - /* 0x568 */ u8 field_0x568[0x56C - 0x568]; + /* 0x568 */ OBJ_NOUGU_HIO_CLASS* mpHIO; /* 0x56C */ request_of_phase_process_class mPhase; /* 0x574 */ J3DModel* mpModel; /* 0x578 */ dBgS_ObjAcch mAcch; @@ -47,19 +78,5 @@ public: STATIC_ASSERT(sizeof(daObj_Nougu_c) == 0xe30); -struct daObj_Nougu_HIOParam { - /* 0x0 */ f32 attention_offset; - /* 0x4 */ f32 gravity; - /* 0x8 */ f32 scale; - /* 0xC */ f32 shadow_size; -}; - -class daObj_Nougu_Param_c { -public: - virtual ~daObj_Nougu_Param_c() {} - - static const daObj_Nougu_HIOParam m; -}; - #endif /* D_A_OBJ_NOUGU_H */ diff --git a/include/d/actor/d_a_obj_pleaf.h b/include/d/actor/d_a_obj_pleaf.h index d447a97fa7..084f4f1543 100644 --- a/include/d/actor/d_a_obj_pleaf.h +++ b/include/d/actor/d_a_obj_pleaf.h @@ -4,6 +4,37 @@ #include "d/d_com_inf_game.h" #include "f_op/f_op_actor_mng.h" +struct daObj_Pleaf_HIOParam { + f32 field_0x0; + f32 field_0x4; + f32 field_0x8; + f32 field_0xc; +}; + +class daObj_Pleaf_Param_c { +public: + virtual ~daObj_Pleaf_Param_c() {} + + static daObj_Pleaf_HIOParam const m; +}; + +#if DEBUG +class daObj_Pleaf_HIO_c : public mDoHIO_entry_c { +public: + daObj_Pleaf_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daObj_Pleaf_HIOParam m; +}; + +#define OBJ_PLEAF_HIO_CLASS daObj_Pleaf_HIO_c +#else +#define OBJ_PLEAF_HIO_CLASS daObj_Pleaf_Param_c +#endif + /** * @ingroup actors-objects * @class daObj_Pleaf_c @@ -14,7 +45,7 @@ */ class daObj_Pleaf_c : public fopAc_ac_c { private: - /* 0x568*/ u8 field_0x568[0x56C - 0x568]; + /* 0x568 */ OBJ_PLEAF_HIO_CLASS* mpHIO; /* 0x56C */ request_of_phase_process_class mPhaseReq; /* 0x574 */ J3DModel* mpModel; /* 0x578 */ dBgS_ObjAcch mObjAcch; @@ -45,18 +76,4 @@ public: STATIC_ASSERT(sizeof(daObj_Pleaf_c) == 0x950); -class daObj_Pleaf_Param_c { -public: - virtual ~daObj_Pleaf_Param_c() {} - - struct params { - f32 field_0x0; - f32 field_0x4; - f32 field_0x8; - f32 field_0xc; - }; - - static daObj_Pleaf_Param_c::params const m; -}; - #endif /* D_A_OBJ_PLEAF_H */ diff --git a/include/d/actor/d_a_obj_sekidoor.h b/include/d/actor/d_a_obj_sekidoor.h index 515c009662..ae4ff9acd4 100644 --- a/include/d/actor/d_a_obj_sekidoor.h +++ b/include/d/actor/d_a_obj_sekidoor.h @@ -6,6 +6,34 @@ #include "d/d_com_inf_game.h" #include "f_op/f_op_actor_mng.h" +struct daObj_SekiDoor_HIOParam { + /* 0x00 */ u8 field_0x0; +}; + +class daObj_SekiDoor_Param_c { +public: + virtual ~daObj_SekiDoor_Param_c() {}; + + static daObj_SekiDoor_HIOParam const m; +}; + +#if DEBUG +class daObj_SekiDoor_HIO_c : public mDoHIO_entry_c { +public: + daObj_SekiDoor_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daObj_SekiDoor_HIOParam m; +}; + +#define OBJ_SEKIDOOR_HIO_CLASS daObj_SekiDoor_HIO_c +#else +#define OBJ_SEKIDOOR_HIO_CLASS daObj_SekiDoor_Param_c +#endif + /** * @ingroup actors-objects * @class daObj_SekiDoor_c @@ -32,7 +60,7 @@ public: bool chkDestroy() { return (mDestroyed == true); } private: - /* 0x5A0 */ s32 field_0x5A0; + /* 0x5A0 */ OBJ_SEKIDOOR_HIO_CLASS* mpHIO; /* 0x5A4 */ request_of_phase_process_class mPhaseReq; /* 0x5AC */ J3DModel* mpModel; /* 0x5B0 */ csXyz mRotation; @@ -47,12 +75,5 @@ private: STATIC_ASSERT(sizeof(daObj_SekiDoor_c) == 0x5d8); -class daObj_SekiDoor_Param_c { -public: - virtual ~daObj_SekiDoor_Param_c() {}; - - static u8 const m; -}; - #endif /* D_A_OBJ_SEKIDOOR_H */ diff --git a/include/d/actor/d_a_obj_sekizo.h b/include/d/actor/d_a_obj_sekizo.h index db0cab0a00..272f900c5d 100644 --- a/include/d/actor/d_a_obj_sekizo.h +++ b/include/d/actor/d_a_obj_sekizo.h @@ -4,6 +4,32 @@ #include "d/d_bg_s_movebg_actor.h" #include "f_op/f_op_actor_mng.h" +struct daObj_Sekizo_HIOParam { +}; + +class daObj_Sekizo_Param_c { +public: + virtual ~daObj_Sekizo_Param_c() {} + static daObj_Sekizo_HIOParam const m; +}; + +#if DEBUG +class daObj_Sekizo_HIO_c : public mDoHIO_entry_c { +public: + daObj_Sekizo_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daObj_Sekizo_HIOParam m; +}; + +#define OBJ_SEKIZO_HIO_CLASS daObj_Sekizo_HIO_c +#else +#define OBJ_SEKIZO_HIO_CLASS daObj_Sekizo_Param_c +#endif + /** * @ingroup actors-objects * @class daObj_Sekizo_c @@ -25,7 +51,7 @@ public: void setBaseMtx(); private: - /* 0x5A0 */ u32 field_0x5a0; + /* 0x5A0 */ OBJ_SEKIZO_HIO_CLASS* mpHIO; /* 0x5A4 */ request_of_phase_process_class mPhaseReq; /* 0x5AC */ J3DModel* mpModel; /* 0x5B0 */ u8 field_0x5b0; @@ -35,9 +61,4 @@ private: STATIC_ASSERT(sizeof(daObj_Sekizo_c) == 0x5B4); -class daObj_Sekizo_Param_c { -public: - virtual ~daObj_Sekizo_Param_c() {} -}; - #endif /* D_A_OBJ_SEKIZO_H */ diff --git a/include/d/actor/d_a_obj_sekizoa.h b/include/d/actor/d_a_obj_sekizoa.h index ad7459e9aa..3e3307c468 100644 --- a/include/d/actor/d_a_obj_sekizoa.h +++ b/include/d/actor/d_a_obj_sekizoa.h @@ -4,6 +4,79 @@ #include "d/actor/d_a_npc.h" #include "d/actor/d_a_tag_evtarea.h" +//TODO: this might be the same struct that's used in d_a_peru's HIO +struct daObj_Sekizoa_HIOParam_inner { + /* 0x00 */ f32 field_0x00; + /* 0x04 */ f32 field_0x04; + /* 0x08 */ f32 field_0x08; + /* 0x0C */ f32 field_0x0C; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ s16 field_0x48; + /* 0x4A */ s16 field_0x4A; + /* 0x4C */ s16 field_0x4C; + /* 0x4E */ s16 field_0x4E; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ f32 field_0x54; + /* 0x58 */ f32 field_0x58; + /* 0x5C */ f32 field_0x5C; + /* 0x60 */ int field_0x60; + /* 0x64 */ f32 field_0x64; + /* 0x68 */ f32 field_0x68; + /* 0x6C */ f32 field_0x6C; + /* 0x70 */ f32 field_0x70; + /* 0x74 */ f32 field_0x74; + /* 0x78 */ f32 field_0x78; + /* 0x7C */ f32 field_0x7C; + /* 0x80 */ f32 field_0x80; + /* 0x84 */ f32 field_0x84; + /* 0x88 */ f32 field_0x88; +}; + +struct daObj_Sekizoa_HIOParam { + /* 0x00 */ daObj_Sekizoa_HIOParam_inner inner; + /* 0x8C */ f32 field_0x8C; + /* 0x90 */ f32 field_0x90; + /* 0x94 */ f32 field_0x94; + /* 0x98 */ s16 field_0x98; +}; + +class daObj_Sekizoa_Param_c { +public: + virtual ~daObj_Sekizoa_Param_c() {} + + static daObj_Sekizoa_HIOParam const m; +}; + +#if DEBUG +class daObj_Sekizoa_HIO_c : public mDoHIO_entry_c { +public: + daObj_Sekizoa_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daObj_Sekizoa_HIOParam m; +}; + +#define OBJ_SEKIZOA_HIO_CLASS daObj_Sekizoa_HIO_c +#else +#define OBJ_SEKIZOA_HIO_CLASS daObj_Sekizoa_Param_c +#endif + /** * @ingroup actors-objects * @class daObj_Sekizoa_c @@ -211,7 +284,7 @@ public: /* 0x0E40 */ mDoExt_McaMorfSO* mpMcaMorf; /* 0x0E44 */ mDoExt_invisibleModel mInvModel; - /* 0x0E4C */ u8 field_0x0E4C[4]; // Padding + /* 0x0E4C */ OBJ_SEKIZOA_HIO_CLASS* mpHIO; /* 0x0E50 */ dCcD_Cyl mCyl; /* 0x0F8C */ dCcD_Cyl mCyl2; /* 0x10C8 */ u8 mType; @@ -250,54 +323,4 @@ public: /* 0x117C */ u8 field_0x117C; }; -struct daObj_Sekizoa_Param_c { - virtual ~daObj_Sekizoa_Param_c() {} - - struct Data { - /* 0x00 */ f32 field_0x00; - /* 0x04 */ f32 field_0x04; - /* 0x08 */ f32 field_0x08; - /* 0x0C */ f32 field_0x0C; - /* 0x10 */ f32 field_0x10; - /* 0x14 */ f32 field_0x14; - /* 0x18 */ f32 field_0x18; - /* 0x1C */ f32 field_0x1C; - /* 0x20 */ f32 field_0x20; - /* 0x24 */ f32 field_0x24; - /* 0x28 */ f32 field_0x28; - /* 0x2C */ f32 field_0x2C; - /* 0x30 */ f32 field_0x30; - /* 0x34 */ f32 field_0x34; - /* 0x38 */ f32 field_0x38; - /* 0x3C */ f32 field_0x3C; - /* 0x40 */ f32 field_0x40; - /* 0x44 */ f32 field_0x44; - /* 0x48 */ s16 field_0x48; - /* 0x4A */ s16 field_0x4A; - /* 0x4C */ s16 field_0x4C; - /* 0x4E */ s16 field_0x4E; - /* 0x50 */ f32 field_0x50; - /* 0x54 */ f32 field_0x54; - /* 0x58 */ f32 field_0x58; - /* 0x5C */ f32 field_0x5C; - /* 0x60 */ int field_0x60; - /* 0x64 */ f32 field_0x64; - /* 0x68 */ f32 field_0x68; - /* 0x6C */ f32 field_0x6C; - /* 0x70 */ f32 field_0x70; - /* 0x74 */ f32 field_0x74; - /* 0x78 */ f32 field_0x78; - /* 0x7C */ f32 field_0x7C; - /* 0x80 */ f32 field_0x80; - /* 0x84 */ f32 field_0x84; - /* 0x88 */ f32 field_0x88; - /* 0x8C */ f32 field_0x8C; - /* 0x90 */ f32 field_0x90; - /* 0x94 */ f32 field_0x94; - /* 0x98 */ s16 field_0x98; - }; - - static Data const m; -}; - #endif /* D_A_OBJ_SEKIZOA_H */ diff --git a/include/d/actor/d_a_obj_smtile.h b/include/d/actor/d_a_obj_smtile.h index e20936053c..1832a7c4b8 100644 --- a/include/d/actor/d_a_obj_smtile.h +++ b/include/d/actor/d_a_obj_smtile.h @@ -3,6 +3,35 @@ #include "f_op/f_op_actor_mng.h" +struct daObj_SMTile_HIOParam { + /* 0x00 */ f32 field_0x0; + /* 0x04 */ f32 field_0x4; +}; + +class daObj_SMTile_Param_c { +public: + virtual ~daObj_SMTile_Param_c() {} + + static daObj_SMTile_HIOParam const m; +}; + +#if DEBUG +class daObj_SMTile_HIO_c : public mDoHIO_entry_c { +public: + daObj_SMTile_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daObj_SMTile_HIOParam m; +}; + +#define OBJ_SMTILE_HIO_CLASS daObj_SMTile_HIO_c +#else +#define OBJ_SMTILE_HIO_CLASS daObj_SMTile_Param_c +#endif + /** * @ingroup actors-objects * @class daObj_SMTile_c @@ -14,7 +43,7 @@ class daObj_SMTile_c : public fopAc_ac_c { private: /* 0x568 */ mDoExt_brkAnm mBrk; - /* 0x580 */ int field_0x580; + /* 0x580 */ OBJ_SMTILE_HIO_CLASS* mpHIO; /* 0x584 */ request_of_phase_process_class mPhase; /* 0x58C */ J3DModel* mModel; /* 0x590 */ cXyz field_0x590[21]; @@ -52,12 +81,5 @@ public: STATIC_ASSERT(sizeof(daObj_SMTile_c) == 0xb30); -class daObj_SMTile_Param_c { -public: - virtual ~daObj_SMTile_Param_c() {} - - static f32 const m[2]; -}; - #endif /* D_A_OBJ_SMTILE_H */ diff --git a/include/d/actor/d_a_obj_stick.h b/include/d/actor/d_a_obj_stick.h index 9d256331bf..fe43aabd15 100644 --- a/include/d/actor/d_a_obj_stick.h +++ b/include/d/actor/d_a_obj_stick.h @@ -5,6 +5,37 @@ #include "d/d_bg_s_acch.h" #include "d/d_cc_d.h" +struct daObj_Stick_HIOParam { + f32 attention_offset; + f32 gravity; + f32 scale; + f32 real_shadow_size; +}; + +class daObj_Stick_Param_c { +public: + virtual ~daObj_Stick_Param_c() {} + + static const daObj_Stick_HIOParam m; +}; + +#if DEBUG +class daObj_Stick_HIO_c : public mDoHIO_entry_c { +public: + daObj_Stick_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daObj_Stick_HIOParam m; +}; + +#define OBJ_STICK_HIO_CLASS daObj_Stick_HIO_c +#else +#define OBJ_STICK_HIO_CLASS daObj_Stick_Param_c +#endif + /** * @ingroup actors-objects * @class daObj_Stick_c @@ -15,7 +46,7 @@ */ class daObj_Stick_c : public fopAc_ac_c { private: - /* 0x568 */ mDoHIO_entry_c* field_0x568; + /* 0x568 */ OBJ_STICK_HIO_CLASS* mpHIO; /* 0x56c */ request_of_phase_process_class mPhase; /* 0x574 */ J3DModel* mpModel; /* 0x578 */ dBgS_ObjAcch mAcch; @@ -47,18 +78,4 @@ public: STATIC_ASSERT(sizeof(daObj_Stick_c) == 0x950); -class daObj_Stick_Param_c { -public: - virtual ~daObj_Stick_Param_c() {}; - - struct daObj_Stick_HIOParam { - f32 attention_offset; - f32 gravity; - f32 scale; - f32 real_shadow_size; - }; - static const daObj_Stick_HIOParam m; -}; - - #endif /* D_A_OBJ_STICK_H */ diff --git a/include/d/actor/d_a_obj_tks.h b/include/d/actor/d_a_obj_tks.h index 93ec22da8a..9d98f8cd0b 100644 --- a/include/d/actor/d_a_obj_tks.h +++ b/include/d/actor/d_a_obj_tks.h @@ -20,6 +20,23 @@ public: static const daObjTks_HIOParam m; }; +#if DEBUG +class daObjTks_HIO_c : public mDoHIO_entry_c { + +public: + daObjTks_HIO_c(); + virtual ~daObjTks_HIO_c() {} + + void genMessage(JORMContext*); + + daObjTks_HIOParam m; +}; + +#define OBJ_TKS_HIO_CLASS daObjTks_HIO_c +#else +#define OBJ_TKS_HIO_CLASS daObjTks_Param_c +#endif + /** * @ingroup actors-objects * @class daObjTks_c @@ -28,7 +45,6 @@ public: * @details * */ - class daObjTks_c : public daNpcF_c { public: daObjTks_c(); @@ -64,7 +80,8 @@ public: virtual inline void drawOtherMdls(); void calcSpringF(f32* param_0, f32 param_1, f32* param_2) { - *param_2 = daObjTks_Param_c::m.spring_atten * (*param_2 + (daObjTks_Param_c::m.spring_factor * (*param_0 - param_1))); + f32 var_f31 = mpHIO->m.spring_factor * (*param_0 - param_1); + *param_2 = mpHIO->m.spring_atten * (*param_2 + var_f31); *param_0 += *param_2; } @@ -89,7 +106,7 @@ public: /* 0xB48 */ Z2Creature mSound; /* 0xBD8 */ daNpcF_MatAnm_c* mpMatAnm; /* 0xBDC */ daNpcF_Lookat_c mLookat; - /* 0xC78 */ u8 field_0xC78[0xC7C - 0xC78]; + /* 0xC78 */ OBJ_TKS_HIO_CLASS* mpHIO; /* 0xC7C */ dCcD_Cyl mCcCyl; /* 0xDB8 */ void (daObjTks_c::*mAction)(); /* 0xDC4 */ request_of_phase_process_class mPhase; diff --git a/include/d/actor/d_a_obj_yel_bag.h b/include/d/actor/d_a_obj_yel_bag.h index f74ed46da8..69b428da49 100644 --- a/include/d/actor/d_a_obj_yel_bag.h +++ b/include/d/actor/d_a_obj_yel_bag.h @@ -6,6 +6,44 @@ #include "d/d_cc_d.h" #include "f_op/f_op_actor_mng.h" +struct daObj_YBag_HIOParam { + /* 0x00 */ f32 field_0x00; + /* 0x04 */ f32 field_0x04; + /* 0x08 */ f32 field_0x08; + /* 0x0C */ f32 field_0x0c; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1c; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; +}; + +class daObj_YBag_Param_c { +public: + virtual ~daObj_YBag_Param_c() {} + + static daObj_YBag_HIOParam const m; +}; + +#if DEBUG +class daObj_YBag_HIO_c : public mDoHIO_entry_c { +public: + daObj_YBag_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daObj_YBag_HIOParam m; +}; + +#define OBJ_YBAG_HIO_CLASS daObj_YBag_HIO_c +#else +#define OBJ_YBAG_HIO_CLASS daObj_YBag_Param_c +#endif + /** * @ingroup actors-objects * @class daObj_YBag_c @@ -18,7 +56,7 @@ class daObj_YBag_c : public fopAc_ac_c { private: /* 0x568 */ request_of_phase_process_class mPhases[3]; /* 0x580 */ J3DModel* mModel; - /* 0x584 */ int field_0x584; + /* 0x584 */ OBJ_YBAG_HIO_CLASS* mpHIO; /* 0x588 */ dBgS_ObjAcch mAcch; /* 0x760 */ dCcD_Stts mStts; /* 0x79C */ dBgS_AcchCir mAcchCir; @@ -77,12 +115,5 @@ public: STATIC_ASSERT(sizeof(daObj_YBag_c) == 0xa3c); -class daObj_YBag_Param_c { -public: - virtual ~daObj_YBag_Param_c() {} - - static f32 const m[11]; -}; - #endif /* D_A_OBJ_YEL_BAG_H */ diff --git a/include/d/actor/d_a_peru.h b/include/d/actor/d_a_peru.h index f485dc68a7..2ca6d71e12 100644 --- a/include/d/actor/d_a_peru.h +++ b/include/d/actor/d_a_peru.h @@ -6,6 +6,79 @@ #include "d/actor/d_a_npc.h" #include "SSystem/SComponent/c_counter.h" +//TODO: this might be the same struct that's used in d_a_obj_sekizoa's HIO +struct daPeru_HIO_inner { + /* 0x00 */ f32 field_0x00; + /* 0x04 */ f32 field_0x04; + /* 0x08 */ f32 field_0x08; + /* 0x0C */ f32 field_0x0C; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ s16 field_0x48; + /* 0x4A */ s16 field_0x4A; + /* 0x4C */ s16 field_0x4C; + /* 0x4E */ s16 field_0x4E; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ f32 field_0x54; + /* 0x58 */ f32 field_0x58; + /* 0x5C */ f32 field_0x5C; + /* 0x60 */ s16 field_0x60; + /* 0x62 */ s16 field_0x62; + /* 0x64 */ f32 field_0x64; + /* 0x68 */ f32 field_0x68; + /* 0x6C */ f32 field_0x6C; + /* 0x70 */ f32 field_0x70; + /* 0x74 */ f32 field_0x74; + /* 0x78 */ f32 field_0x78; + /* 0x7C */ f32 field_0x7C; + /* 0x80 */ f32 field_0x80; + /* 0x84 */ f32 field_0x84; + /* 0x88 */ f32 field_0x88; +}; + +struct daPeru_HIOParam { + /* 0x00 */ daPeru_HIO_inner inner; + /* 0x8C */ f32 field_0x8c; + /* 0x90 */ f32 field_0x90; + /* 0x94 */ f32 field_0x94; +}; + +class daPeru_Param_c { +public: + virtual ~daPeru_Param_c() {} + + static daPeru_HIOParam const m; +}; + +#if DEBUG +class daPeru_HIO_c : public mDoHIO_entry_c { +public: + daPeru_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daPeru_HIOParam m; +}; + +#define PERU_HIO_CLASS daPeru_HIO_c +#else +#define PERU_HIO_CLASS daPeru_Param_c +#endif + /** * @ingroup actors-npcs * @class daPeru_c @@ -127,7 +200,7 @@ private: /* 0x0E70 */ u8 field_0xe70[0xe7c - 0xe70]; /* 0x0E7C */ s8 field_0xe7c; /* 0x0E80 */ int field_0xe80; - /* 0x0E84 */ int field_0xe84; + /* 0x0E84 */ PERU_HIO_CLASS* mpHIO; /* 0x0E88 */ dCcD_Cyl mCyls[2]; /* 0x1100 */ daNpcT_Path_c mPath; /* 0x1128 */ u8 mType; @@ -136,19 +209,4 @@ private: STATIC_ASSERT(sizeof(daPeru_c) == 0x112c); -struct PeruParams { - f32 field_0x00[18]; - s16 field_0x48[4]; - f32 field_0x50[4]; - s16 field_0x60[2]; - f32 field_0x64[13]; -}; - -class daPeru_Param_c { -public: - virtual ~daPeru_Param_c() {} - - static PeruParams const m; -}; - #endif /* D_A_PERU_H */ diff --git a/include/d/actor/d_a_tag_lantern.h b/include/d/actor/d_a_tag_lantern.h index ba743e34c4..9cb8c698e1 100644 --- a/include/d/actor/d_a_tag_lantern.h +++ b/include/d/actor/d_a_tag_lantern.h @@ -4,6 +4,34 @@ #include "d/d_com_inf_game.h" #include "d/d_msg_flow.h" +struct daTag_Lantern_HIOParam { + u8 field_0x0; +}; + +class daTag_Lantern_Param_c { +public: + inline virtual ~daTag_Lantern_Param_c() {} + + static daTag_Lantern_HIOParam const m; +}; + +#if DEBUG +class daTag_Lantern_HIO_c : public mDoHIO_entry_c { +public: + daTag_Lantern_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + + void genMessage(JORMContext*); + + daTag_Lantern_HIOParam m; +}; + +#define TAG_LANTERN_HIO_CLASS daTag_Lantern_HIO_c +#else +#define TAG_LANTERN_HIO_CLASS daTag_Lantern_Param_c +#endif + class daTag_Lantern_c : public fopAc_ac_c { public: int create(); @@ -28,7 +56,7 @@ public: /* 0x568 */ dMsgFlow_c mMsgFlow; /* 0x5B4 */ cBgS_GndChk mGndChk; - /* 0x5F0 */ u32 field_0x5f0; + /* 0x5F0 */ TAG_LANTERN_HIO_CLASS* mpHIO; /* 0x5F4 */ f32 mGroundCross; /* 0x5F8 */ s32 field_0x5f8; /* 0x5FC */ u32 field_0x5fc; @@ -38,9 +66,4 @@ public: virtual ~daTag_Lantern_c(); }; // Size: 0x60C -class daTag_Lantern_Param_c { -public: - inline virtual ~daTag_Lantern_Param_c() {} -}; - #endif /* D_A_TAG_LANTERN_H */ diff --git a/include/d/d_bg_s.h b/include/d/d_bg_s.h index 2ce6493260..c0804bd07c 100644 --- a/include/d/d_bg_s.h +++ b/include/d/d_bg_s.h @@ -151,6 +151,7 @@ public: u32 GetMtrlSndId(const cBgS_PolyInfo& param_0) { return dKy_pol_sound_get(¶m_0); } void DebugDrawPoly(dBgW_Base *param_1) {} void DebugDrawPoly(dBgW_Base const& param_1) {} + void DrawPoly(cBgS_PolyInfo const& param_0, GXColor const& param_1); fopAc_ac_c* GetActorPointer(cBgS_PolyInfo const& param_0) const { return cBgS::GetActorPointer(param_0); } bool LineCross(cBgS_LinChk* i_linChk) { #if DEBUG diff --git a/include/d/d_bg_w_base.h b/include/d/d_bg_w_base.h index e593093960..0eb10e977e 100644 --- a/include/d/d_bg_w_base.h +++ b/include/d/d_bg_w_base.h @@ -4,6 +4,7 @@ #include "SSystem/SComponent/c_bg_s_poly_info.h" #include "SSystem/SComponent/c_bg_w.h" #include "SSystem/SComponent/c_m3d_g_pla.h" +#include "dolphin/gx.h" #include "f_pc/f_pc_base.h" class cBgS_GndChk; @@ -104,6 +105,12 @@ public: virtual void CallRideCallBack(fopAc_ac_c*, fopAc_ac_c*); virtual void CallArrowStickCallBack(fopAc_ac_c*, fopAc_ac_c*, cXyz&); + #if DEBUG + virtual void DebugDraw() {} + virtual void DrawPoly(cBgS_PolyInfo const& param_0, GXColor const& param_1) {} + virtual void DebugBox() {} + #endif + PushPull_CallBack GetPushPullCallback() const { return m_pushPull_Callback; } s16 GetDiffShapeAngleY() { return m_diff_ShapeAngleY; } int GetRoomId() { return m_roomId; } diff --git a/include/d/d_cam_param.h b/include/d/d_cam_param.h index 5684ae3fa7..c3da29d8bd 100644 --- a/include/d/d_cam_param.h +++ b/include/d/d_cam_param.h @@ -1,6 +1,7 @@ #ifndef D_D_CAM_PARAM_H #define D_D_CAM_PARAM_H +#include "JSystem/JHostIO/JORFile.h" #include "SSystem/SComponent/c_angle.h" struct dCamMath { @@ -11,24 +12,44 @@ struct dCamMath { static f32 xyzHorizontalDistance(cXyz&, cXyz&); }; -class dCstick_c { +class dCstick_c +#if DEBUG + : public JORReflexible +#endif +{ public: dCstick_c(); bool Shift(u32); /* 0x0 */ f32 mThresholdLow; /* 0x4 */ f32 mThresholdHigh; - /* 0x8 */ int mInputSpeed; - /* 0xC */ u8 field_0xc[4]; + /* 0x8 */ s32 mInputSpeed; + /* 0xC */ u16 mIsDebugDisplay; +#if DEBUG + /* 0x10 */ s32 mDisplayPosX; + /* 0x14 */ s32 mDisplayPosY; +#endif virtual ~dCstick_c() {} +#if DEBUG + virtual void genMessage(JORMContext*); +#endif + + bool CheckFlag(u16 i_flag) { + return (i_flag & mIsDebugDisplay) ? true : false; + } f32 SwTHH() { return mThresholdHigh; } }; -class dCamBGChk_c { +class dCamBGChk_c +#if DEBUG + : public JORReflexible +#endif +{ public: dCamBGChk_c(); + ~dCamBGChk_c() {} f32 WallUpDistance() { return mWallUpDistance; } f32 FwdDistance(s32 param_0) { return mChkInfo[param_0].mDistance; } @@ -44,6 +65,10 @@ public: f32 CornerAngleMax() { return mCornerAngleMax; } f32 FloorMargin() { return mFloorMargin; } +#if DEBUG + virtual void genMessage(JORMContext*); +#endif + // name is a guess for now struct ChkInfo { /* 0x0 */ f32 mDistance; @@ -67,10 +92,10 @@ public: struct dCamStyleData { struct StyleData { - /* 0x0 */ u32 field_0x0; + /* 0x0 */ s32 field_0x0; /* 0x4 */ u16 field_0x4; - /* 0x6 */ u16 field_0x6; - /* 0x8 */ f32 field_0x8[28]; + /* 0x6 */ u16 mFlags; + /* 0x8 */ f32 mParams[28]; }; // Size: 0x78 /* 0x0 */ u8 field_0x0[4]; @@ -78,7 +103,11 @@ struct dCamStyleData { /* 0x8 */ StyleData* mStyleData; }; -class dCamParam_c { +class dCamParam_c +#if DEBUG + : public JORReflexible +#endif +{ public: dCamParam_c(s32); int Change(s32); @@ -92,40 +121,56 @@ public: void Arg0(u8 val) { mMapToolArg0 = val; } void Fovy(u8 val) { mMapToolFovy = val; } u8 Fovy() { return mMapToolFovy; } - bool CheckFlag(u16 flag) { return (flag & mCurrentStyle->field_0x6) != 0; } + bool CheckFlag(u16 flag) { return (flag & mCurrentStyle->mFlags) != 0 ? true : false; } f32 Val(s32 param_0, int param_1) { - return mCamStyleData[param_0].field_0x8[param_1]; + return mCamStyleData[param_0].mParams[param_1]; } void SetVal(s32 param_0, int param_1, f32 i_value) { - mCamStyleData[param_0].field_0x8[param_1] = i_value; + mCamStyleData[param_0].mParams[param_1] = i_value; } - /* 0x00 */ u8 mMapToolFovy; - /* 0x01 */ u8 mMapToolArg0; - /* 0x02 */ u8 mMapToolArg1; - /* 0x04 */ int mMapToolArg2; - /* 0x08 */ dCamStyleData::StyleData* mCamStyleData; - /* 0x0C */ s32 mStyleNum; - /* 0x10 */ dCamStyleData::StyleData* mCurrentStyle; - /* 0x14 */ int mStyleID; - /* 0x18 */ u8 field_0x18[4]; + /* 0x02 */ u8 mMapToolFovy; + /* 0x03 */ u8 mMapToolArg0; + /* 0x04 */ u8 mMapToolArg1; + /* 0x08 */ s32 mMapToolArg2; + /* 0x0C */ dCamStyleData::StyleData* mCamStyleData; + /* 0x10 */ s32 mStyleNum; + /* 0x14 */ dCamStyleData::StyleData* mCurrentStyle; + /* 0x18 */ s32 mStyleID; + /* 0x1C */ u16 field_0x1c; + /* 0x1E */ s8 mpHIOChild; +#if DEBUG + /* 0x20 */ JORFile mFile; +#endif u32 Id(s32 i_style) { return mCamStyleData[i_style].field_0x0; } int Algorythmn(s32 i_style) { return mCamStyleData[i_style].field_0x4; } int Algorythmn() { return mCurrentStyle->field_0x4; } - u16 Flag(s32 param_0, u16 param_1) { return mCamStyleData[param_0].field_0x6 & param_1; } - void SetFlag(u16 i_flag) { mCurrentStyle->field_0x6 |= i_flag; } + u16 Flag(s32 param_0, u16 param_1) { return mCamStyleData[param_0].mFlags & param_1; } + void SetFlag(u16 i_flag) { mCurrentStyle->mFlags |= i_flag; } virtual ~dCamParam_c(); +#if DEBUG + virtual void genMessage(JORMContext*); + virtual void listenPropertyEvent(const JORPropertyEvent*); + int writeParamXML(); + void OpenFile(); + void PrintFile(char*, ...); + void CloseFile(); +#endif }; -class dCamSetup_c { +class dCamSetup_c +#if DEBUG + : public JORReflexible +#endif +{ public: dCamSetup_c(); bool CheckLatitudeRange(s16*); f32 PlayerHideDist(); - bool CheckFlag2(u16 i_flag) { return (i_flag & mFlags2) != 0; } + bool CheckFlag2(u16 i_flag) { return (i_flag & mFlags2) != 0 ? true : false; } f32 WaitRollSpeed() { return mWaitRollSpeed; } int WaitRollTimer() { return mWaitRollTimer; } int ThrowTimer() { return mThrowTimer; } @@ -155,16 +200,30 @@ public: f32 CurveWeight() { return mCurveWeight; } s16 MapToolCameraLongTimer() { return mMapToolCamLongTimer; } s16 MapToolCameraShortTimer() { return mMapToolCamShortTimer; } + void SetTypeTable(void* i_typeTable, s32 i_typeNum) { + mTypeTable = i_typeTable; + mTypeNum = i_typeNum; + } + s32 ForceType() { return mForceType; } + s32 ModeSwitchType() { return mModeSwitchType; } + f32 Far() { return mDrawFar; } + f32 Near() { return mDrawNear; } + +#if DEBUG + virtual ~dCamSetup_c(); + + virtual void genMessage(JORMContext*); +#endif /* 0x000 */ f32 mDrawNear; /* 0x004 */ f32 mDrawFar; /* 0x008 */ u16 mDebugFlags; /* 0x00A */ u16 mFlags2; /* 0x00C */ int field_0xc; - /* 0x010 */ int mModeSwitchType; + /* 0x010 */ s32 mModeSwitchType; /* 0x014 */ void* mTypeTable; - /* 0x018 */ int mTypeNum; - /* 0x01C */ int mForceType; + /* 0x018 */ s32 mTypeNum; + /* 0x01C */ s32 mForceType; /* 0x020 */ f32 mCusCus; /* 0x024 */ f32 field_0x24; /* 0x028 */ f32 field_0x28; @@ -186,7 +245,7 @@ public: /* 0x068 */ f32 mTrimCineScopeHeight; /* 0x06C */ f32 field_0x6c; /* 0x070 */ f32 mForceLockOffDist; - /* 0x074 */ int mForceLockOffTimer; + /* 0x074 */ s32 mForceLockOffTimer; /* 0x078 */ f32 field_0x78; /* 0x07C */ f32 field_0x7c; /* 0x080 */ f32 field_0x80; @@ -194,7 +253,7 @@ public: /* 0x088 */ f32 mThrowVAngle; /* 0x08C */ f32 mThrowCtrOffset; /* 0x090 */ f32 mThrowCushion; - /* 0x094 */ int mThrowTimer; + /* 0x094 */ s32 mThrowTimer; /* 0x098 */ f32 mWindShakeCtr; /* 0x09C */ f32 field_0x9c; /* 0x0A0 */ f32 mWindShakeFvy; @@ -206,9 +265,9 @@ public: /* 0x0B8 */ f32 mManualStartCThreshold; /* 0x0BC */ f32 mManualEndVal; /* 0x0C0 */ f32 mChargeLatitude; - /* 0x0C4 */ int mChargeTimer; + /* 0x0C4 */ s32 mChargeTimer; /* 0x0C8 */ f32 mChargeBRatio; - /* 0x0CC */ int mLockonChangeTimer; + /* 0x0CC */ s32 mLockonChangeTimer; /* 0x0D0 */ f32 mLockonChangeCushion; /* 0x0D4 */ f32 field_0xd4; /* 0x0D8 */ f32 field_0xd8; @@ -223,8 +282,13 @@ public: /* 0x0F8 */ f32 field_0xf8; /* 0x0FC vtable */ +#if !DEBUG virtual ~dCamSetup_c(); +#endif +#if DEBUG + /* 0x100 */ s8 mpHIOChild; +#endif /* 0x100 */ dCstick_c mCStick; /* 0x114 */ dCamBGChk_c mBGChk; /* 0x15C */ f32 field_0x15c; @@ -232,9 +296,9 @@ public: /* 0x164 */ int mWaitRollTimer; /* 0x168 */ f32 mWaitRollSpeed; /* 0x16C */ f32 field_0x16c; - /* 0x170 */ int mScreensaverFirstWaitTimer; - /* 0x174 */ int mScreensaverWaitTimer; - /* 0x178 */ int mScreensaverExecTimer; + /* 0x170 */ s32 mScreensaverFirstWaitTimer; + /* 0x174 */ s32 mScreensaverWaitTimer; + /* 0x178 */ s32 mScreensaverExecTimer; }; #endif /* D_D_CAM_PARAM_H */ diff --git a/include/d/d_camera.h b/include/d/d_camera.h index d3b6604d03..5b7f46ea5e 100644 --- a/include/d/d_camera.h +++ b/include/d/d_camera.h @@ -32,8 +32,7 @@ struct dCamMapToolData { } void Clr() { - mArrowIndex = 0xFF; - mCameraIndex = 0xFF; + mCameraIndex = mArrowIndex = 0xFF; mFlags = 0; mpActor = NULL; mPathId = 0xFF; @@ -59,7 +58,7 @@ struct dCamForcusLine { /* 0x38 */ cXyz field_0x38; /* 0x44 */ GXColor field_0x44; /* 0x48 */ u8 field_0x48; - /* 0x49 */ u8 field_0x49; + /* 0x49 */ bool field_0x49; /* 0x4C */ int field_0x4c; /* 0x50 */ int field_0x50; /* 0x54 */ int field_0x54; @@ -73,17 +72,11 @@ struct dCamForcusLine { /* 0x6C */ f32 field_0x6c; }; -struct dCamera_FakeAngle_system { - /* 0x0 */ u8 field_0x0; - /* 0x2 */ cSAngle field_0x2; - /* 0x4 */ cSAngle field_0x4; -}; - -struct dCamera_monitoring_things { - /* 0x00 */ cXyz field_0x0; - /* 0x0C */ f32 field_0xc; - /* 0x10 */ f32 field_0x10; - /* 0x14 */ cXyz field_0x14; +struct UnkManualCameraParam { + f32 r; + f32 v; + f32 u; + f32 fov; }; struct dCamera_event_param { @@ -92,23 +85,6 @@ struct dCamera_event_param { /* 0x14 */ int value; }; -struct dCamera_event_data { - /* 0x000 */ u8 field_0x0; - /* 0x004 */ int mStaffIdx; - /* 0x008 */ int field_0x8; - /* 0x00C */ int field_0xc; - /* 0x010 */ u8 field_0x10; - /* 0x014 */ int field_0x14; - /* 0x018 */ int field_0x18; - /* 0x01C */ int field_0x1c; - /* 0x020 */ int field_0x20; - /* 0x024 */ int field_0x24; - /* 0x028 */ u8 field_0x28[0x2C - 0x28]; - /* 0x02C */ dCamera_event_param mEventParams[8]; - /* 0x0EC */ dStage_MapEvent_dt_c* field_0xec; - /* 0x0F0 */ d2DBSplinePath field_0xf0; -}; // Size: 0x124 - struct dCamera_type_data { /* 0x00 */ char name[24]; /* 0x18 */ s16 field_0x18[2][11]; @@ -170,22 +146,46 @@ public: /* 0x1C */ _stick mCStick; }; + struct dCamera_event_data { + /* 0x000 */ u8 field_0x0; + /* 0x004 */ int mStaffIdx; + /* 0x008 */ int field_0x8; + /* 0x00C */ int field_0xc; + /* 0x010 */ u8 field_0x10; + /* 0x014 */ int field_0x14; + /* 0x018 */ int field_0x18; + /* 0x01C */ int field_0x1c; + /* 0x020 */ int field_0x20; + /* 0x024 */ int field_0x24; + /* 0x028 */ u8 field_0x28[0x2C - 0x28]; + /* 0x02C */ dCamera_event_param mEventParams[8]; + /* 0x0EC */ dStage_MapEvent_dt_c* field_0xec; + /* 0x0F0 */ d2DBSplinePath field_0xf0; + }; // Size: 0x124 + + struct dCamera_monitoring_things { + /* 0x00 */ cXyz field_0x0; + /* 0x0C */ f32 field_0xc; + /* 0x10 */ f32 field_0x10; + /* 0x04 */ struct { + /* 0x00 */ cXyz field_0x0; + } field_0x14; + }; + + struct dCamera_FakeAngle_system { + /* 0x0 */ u8 field_0x0; + /* 0x2 */ cSAngle field_0x2; + /* 0x4 */ cSAngle field_0x4; + }; + struct BG { - class { - public: + struct { /* 0x00 */ bool field_0x0; /* 0x04 */ dBgS_CamGndChk field_0x4; /* 0x58 */ f32 field_0x58; - } /* 0x000 */ field_0x0; - class { - public: - /* 0x00 */ bool field_0x0; - /* 0x04 */ dBgS_CamGndChk field_0x4; - /* 0x58 */ f32 field_0x58; - } /* 0x05C */ field_0x5c; + } /* 0x000 */ field_0x0, field_0x5c; /* 0x0B8 */ u8 field_0xb8[0xC0 - 0xB8]; - class { - public: + struct { /* 0x00 */ u8 field_0x0; /* 0x01 */ u8 field_0x1; /* 0x04 */ cXyz field_0x4; @@ -201,8 +201,7 @@ public: /* 0x40 */ int field_0x40; /* 0x44 */ u8 field_0x44; } /* 0x0C0 */ field_0xc0; - class { - public: + struct { /* 0x0 */ int field_0x0; /* 0x4 */ f32 field_0x4; /* 0x8 */ cXyz field_0x8; @@ -875,6 +874,23 @@ public: /* 0xA0 */ fopAc_ac_c* field_0xa0; }; + struct ManualData { + int field_0x00; + cXyz field_0x04; + cXyz field_0x10; + f32 field_0x1c; + f32 field_0x20; + int field_0x24; + u8 field_0x28; + f32 field_0x2c; + cSGlobe field_0x30; + f32 field_0x38; + f32 field_0x3c; + int field_0x40; + cSAngle field_0x44; + f32 field_0x48; + }; + int StartEventCamera(int, int, ...); int EndEventCamera(int); int searchEventArgData(char*); @@ -940,6 +956,7 @@ public: void updateMonitor(); bool checkForceLockTarget(); void infoReport(); + void debugDrawInit(); bool Run(); bool NotRun(); s16 V(); @@ -948,6 +965,9 @@ public: bool SetTrimTypeForce(s32); void CalcTrimSize(); int Draw(); + void debugDraw(); + int debugDrawPoint(cXyz&); + int debugDrawLine(cXyz&, cXyz&); void setStageMapToolData(); void setMapToolData(); void SetTagData(fopAc_ac_c*, s32, u16, u8); @@ -973,6 +993,10 @@ public: bool pointInSight(cXyz*); f32 radiusActorInSight(fopAc_ac_c*, fopAc_ac_c*, fopAc_ac_c*); f32 radiusActorInSight(fopAc_ac_c*, fopAc_ac_c*, cXyz*, cXyz*, f32, s16, f32); + f32 radiusActorInSight(fopAc_ac_c* param_0, fopAc_ac_c* param_1) { + return radiusActorInSight(param_0, param_1, &mViewCache.mCenter, &mViewCache.mEye, mFovy, + mBank, 0.05f); + } f32 groundHeight(cXyz*); bool lineBGCheck(cXyz*, cXyz*, dBgS_LinChk*, u32); bool lineBGCheck(cXyz*, cXyz*, u32); @@ -1046,8 +1070,6 @@ public: cXyz talkBasePos(fopAc_ac_c* i_actor) { return i_actor->current.pos; } cXyz talkEyePos(fopAc_ac_c* i_actor) { return i_actor->eyePos; } - void debugDraw(); - int CameraID() { return mCameraID; } bool Active() { return mCurState == 0; } @@ -1062,7 +1084,7 @@ public: u32 setFlag(u32 i_flag) { return mEventFlags |= i_flag; } u32 clrFlag(u32 i_flag) { return mEventFlags &= ~i_flag; } - bool CheckFlag(u32 i_flag) { return mEventFlags & i_flag; } + bool CheckFlag(u32 i_flag) { return (mEventFlags & i_flag) != 0 ? true : false; } void ResetView() { setView(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT); } @@ -1114,12 +1136,25 @@ public: int Gear() { return mGear; } + bool HideBGPartsOK() { + return chkFlag(0x4); + } + + f32 Near4Debug() { + return mCamSetup.Near(); + } + f32 Far4Debug() { + return mCamSetup.Far(); + } + static engine_fn engine_tbl[]; /* 0x000 */ camera_class* field_0x0; #if DEBUG cXyz dbg_field_0x04[16]; - u8 dbg_field_c4[0xDC - 0xC4]; + s8 dbg_field_0xc4[0x10]; + u32 dbg_field_0xd4; + int dbg_field_0xd8; #endif struct { /* 0x00 */ int mRoomNo; @@ -1144,6 +1179,11 @@ public: /* 0x14 */ cXyz mEye; /* 0x20 */ cSAngle mBank; /* 0x24 */ f32 mFovy; +#if defined(__MWERKS__) && __MWERKS__ < 0x4200 + // Static data members in an anonymous class are illegal in C++, but MWCC for GC accepts it. + // However, MWCC for Wii does not so this was removed for the Shield release. + static const int PatternLengthMax = 4; +#endif } /* 0x05C */ mViewCache; /* 0x084 */ f32 field_0x84; @@ -1181,7 +1221,8 @@ public: /* 0x168 */ u8 field_0x168; /* 0x16C */ int field_0x16c; /* 0x170 */ u32 field_0x170; - /* 0x174 */ u32 mCurCamStyleTimer; // this might be a signed int in ShieldD + /* 0x174 */ u32 mCurCamStyleTimer; // something is weird about this field - it's sometimes (but + // not always) treated as signed in ShieldD specifically /* 0x178 */ u32 mCameraID; /* 0x17C */ u32 mPadID; /* 0x180 */ fopAc_ac_c* mpPlayerActor; @@ -1205,16 +1246,16 @@ public: /* 0x1FC */ int mCStickUpLatch; /* 0x200 */ f32 mTriggerLeftLast; /* 0x204 */ f32 mTriggerLeftDelta; - /* 0x208 */ u8 mHoldLockL; - /* 0x209 */ u8 mTrigLockL; - /* 0x20A */ u8 mLockLActive; - /* 0x20B */ u8 mLockLJustActivated; + /* 0x208 */ bool mHoldLockL; + /* 0x209 */ bool mTrigLockL; + /* 0x20A */ bool mLockLActive; + /* 0x20B */ bool mLockLJustActivated; /* 0x20C */ f32 mTriggerRightLast; /* 0x210 */ f32 mTriggerRightDelta; - /* 0x214 */ u8 mHoldLockR; - /* 0x215 */ u8 mTrigLockR; - /* 0x216 */ u8 mLockRActive; - /* 0x217 */ u8 mLockRJustActivated; + /* 0x214 */ bool mHoldLockR; + /* 0x215 */ bool mTrigLockR; + /* 0x216 */ bool mLockRActive; + /* 0x217 */ bool mLockRJustActivated; /* 0x218 */ bool mHoldX; /* 0x219 */ bool mTrigX; /* 0x21A */ bool mHoldY; @@ -1324,9 +1365,6 @@ public: /* 0x968 */ f32 field_0x968; /* 0x96C */ f32 field_0x96c; /* 0x970 */ dCamSetup_c mCamSetup; -#if DEBUG - u8 unk_debug_0xbc4[0x10]; -#endif /* 0xAEC */ dCamParam_c mCamParam; /* 0xB0C */ u8 field_0xb0c; /* 0xB0D */ u8 field_0xb0d[0xd58 - 0xb0d]; diff --git a/include/d/d_debug_camera.h b/include/d/d_debug_camera.h index 854cf0ecfa..d5cd7403ac 100644 --- a/include/d/d_debug_camera.h +++ b/include/d/d_debug_camera.h @@ -13,6 +13,8 @@ enum dDbgCam_KeyAction { class dDbgCamera_c; +extern dDbgCamera_c dDbgCamera; + class dDbgCamKey_c { public: dDbgCamKey_c() {} @@ -161,7 +163,7 @@ public: public: /* 0x000 */ int field_0x0; /* 0x004 */ int field_0x4; - /* 0x008 */ u8 field_0x8[0x010 - 0x008]; + /* 0x008 */ int field_0x8[2]; /* 0x010 */ cXyz field_0x10[32]; /* 0x190 */ cXyz field_0x190[32]; } /* 0x704 */ field_0x704; diff --git a/include/d/d_demo.h b/include/d/d_demo.h index 3d763d0f56..a65f8c60b2 100644 --- a/include/d/d_demo.h +++ b/include/d/d_demo.h @@ -10,6 +10,7 @@ #include "SSystem/SComponent/c_xyz.h" #include "Z2AudioLib/Z2SoundStarter.h" #include "f_op/f_op_actor_mng.h" +#include "SSystem/SComponent/c_angle.h" class J3DModel; class dDemo_actor_c; @@ -118,9 +119,9 @@ public: *o_scale = mScale; } virtual void JSGGetRotation(Vec* param_0) const { - param_0->x = mRotate.x * 0.005493164f; - param_0->y = mRotate.y * 0.005493164f; - param_0->z = mRotate.z * 0.005493164f; + param_0->x = S2DEG(mRotate.x); + param_0->y = S2DEG(mRotate.y); + param_0->z = S2DEG(mRotate.z); } void setModel(J3DModel* p_model) { mModel = p_model; } diff --git a/include/d/d_drawlist.h b/include/d/d_drawlist.h index 8b77ee4dd4..3bfd0f643d 100644 --- a/include/d/d_drawlist.h +++ b/include/d/d_drawlist.h @@ -3,6 +3,7 @@ #include "JSystem/J2DGraph/J2DPicture.h" #include "JSystem/J2DGraph/J2DScreen.h" +#include "JSystem/J3DGraphBase/J3DSys.h" #include "SSystem/SComponent/c_m3d_g_pla.h" #include "f_op/f_op_view.h" #include "m_Do/m_Do_ext.h" diff --git a/include/d/d_error_msg.h b/include/d/d_error_msg.h index ebd87ec633..87817bbb05 100644 --- a/include/d/d_error_msg.h +++ b/include/d/d_error_msg.h @@ -1,15 +1,13 @@ #ifndef D_D_ERROR_MSG_H #define D_D_ERROR_MSG_H -#include "d/d_com_inf_game.h" - struct dShutdownErrorMsg_c { static bool execute(); }; struct dDvdErrorMsg_c { static void draw(s32); - static u8 execute(); + static bool execute(); }; #if !PLATFORM_GCN diff --git a/include/d/d_menu_dmap_map.h b/include/d/d_menu_dmap_map.h index 311448c72b..f1a5432391 100644 --- a/include/d/d_menu_dmap_map.h +++ b/include/d/d_menu_dmap_map.h @@ -2,7 +2,7 @@ #define D_MENU_D_MENU_DMAP_MAP_H #include "d/d_menu_dmap.h" -#include +#include class dMenu_DmapMap_c { public: diff --git a/include/d/d_particle.h b/include/d/d_particle.h index 74e304a531..63b7a4f044 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -436,8 +436,15 @@ public: } static void onStatus(u8 status) { mStatus |= status; } - static void offStatus(u8 status) { mStatus &= ~status; } - static bool isStatus(u8 status) { return mStatus & status; } + static void offStatus(u8 status) { + //TODO: reconcile this +#if DEBUG + mStatus &= (u8)~status; +#else + mStatus &= ~status; +#endif + } + static BOOL isStatus(u8 status) { return mStatus & status; } static dPa_selectTexEcallBack* getTsuboSelectTexEcallBack(int idx) { return &mTsubo[idx]; diff --git a/include/d/d_resorce.h b/include/d/d_resorce.h index 86722f7bf9..8666f369cd 100644 --- a/include/d/d_resorce.h +++ b/include/d/d_resorce.h @@ -130,11 +130,9 @@ public: return getResInfo(i_arcName, mStageInfo, ARRAY_SIZEU(mStageInfo)); } - #if DEBUG void dumpTag() { // TODO } - #endif /* 0x0000 */ dRes_info_c mObjectInfo[128]; /* 0x1200 */ dRes_info_c mStageInfo[64]; diff --git a/include/d/d_s_play.h b/include/d/d_s_play.h index 5736f0838c..6698a628e9 100644 --- a/include/d/d_s_play.h +++ b/include/d/d_s_play.h @@ -205,107 +205,107 @@ extern dScnPly_preset_HIO_c g_presetHIO; #define tREG_S(i) g_regHIO.mChildReg[25].mShortReg[i] #else // Morita -#define TREG_F(i) (0) +#define TREG_F(i) (0.0f) #define TREG_S(i) (0) // Matsutani -#define DREG_F(i) (0) +#define DREG_F(i) (0.0f) #define DREG_S(i) (0) // Iwawaki -#define IREG_F(i) (0) +#define IREG_F(i) (0.0f) #define IREG_S(i) (0) // Sasa -#define SREG_F(i) (0) +#define SREG_F(i) (0.0f) #define SREG_S(i) (0) // Umemiya -#define UREG_F(i) (0) +#define UREG_F(i) (0.0f) #define UREG_S(i) (0) // Ogawa -#define OREG_F(i) (0) +#define OREG_F(i) (0.0f) #define OREG_S(i) (0) // Sakaguchi -#define YREG_F(i) (0) +#define YREG_F(i) (0.0f) #define YREG_S(i) (0) // Sakai -#define KREG_F(i) (0) +#define KREG_F(i) (0.0f) #define KREG_S(i) (0) // Hara -#define BREG_F(i) (0) +#define BREG_F(i) (0.0f) #define BREG_S(i) (0) // Sumiyoshi -#define MREG_F(i) (0) +#define MREG_F(i) (0.0f) #define MREG_S(i) (0) // Takeshita -#define AREG_F(i) (0) +#define AREG_F(i) (0.0f) #define AREG_S(i) (0) // Yoshida -#define PREG_F(i) (0) +#define PREG_F(i) (0.0f) #define PREG_S(i) (0) // Noma -#define NREG_F(i) (0) +#define NREG_F(i) (0.0f) #define NREG_S(i) (0) // Nishiwaki -#define WREG_F(i) (0) +#define WREG_F(i) (0.0f) #define WREG_S(i) (0) // Masaro -#define JREG_F(i) (0) +#define JREG_F(i) (0.0f) #define JREG_S(i) (0) // Hayakawa -#define HREG_F(i) (0) +#define HREG_F(i) (0.0f) #define HREG_S(i) (0) // Sadamoto -#define VREG_F(i) (0) +#define VREG_F(i) (0.0f) #define VREG_S(i) (0) // Nishikawa -#define XREG_F(i) (0) +#define XREG_F(i) (0.0f) #define XREG_S(i) (0) // Suzuki -#define ZREG_F(i) (0) +#define ZREG_F(i) (0.0f) #define ZREG_S(i) (0) // Nakanishi -#define nREG_F(i) (0) +#define nREG_F(i) (0.0f) #define nREG_S(i) (0) // Kuwajima -#define kREG_F(i) (0) +#define kREG_F(i) (0.0f) #define kREG_S(i) (0) // Okajima -#define oREG_F(i) (0) +#define oREG_F(i) (0.0f) #define oREG_S(i) (0) // Yamazaki -#define yREG_F(i) (0) +#define yREG_F(i) (0.0f) #define yREG_S(i) (0) // Ashida -#define aREG_F(i) (0) +#define aREG_F(i) (0.0f) #define aREG_S(i) (0) // Okada -#define hREG_F(i) (0) +#define hREG_F(i) (0.0f) #define hREG_S(i) (0) // Takahashi -#define tREG_F(i) (0) +#define tREG_F(i) (0.0f) #define tREG_S(i) (0) #endif diff --git a/include/d/d_stage.h b/include/d/d_stage.h index 2fdc6a9cf3..501376909c 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -186,8 +186,12 @@ struct stage_camera_class { // AROB / RARO struct stage_arrow_data_class { - /* 0x00 */ cXyz position; - /* 0x0C */ csXyz angle; + /* 0x00 */ f32 posX; + /* 0x04 */ f32 posY; + /* 0x08 */ f32 posZ; + /* 0x0C */ s16 angleX; + /* 0x0E */ s16 angleY; + /* 0x10 */ s16 angleZ; /* 0x12 */ s16 field_0x12; }; // Size: 0x14 @@ -684,8 +688,8 @@ public: /* vt[91] */ virtual void setElst(dStage_Elst_c* i_Elst) { mElst = i_Elst; } /* vt[92] */ virtual dStage_Elst_c* getElst(void); - s16 getWorldRollAngleX() { return (s16)mWorldRollAngleX; } - s16 getWorldRollDirAngleY() { return mWorldRollDirAngleY; } + s16 getWorldRollAngleX() const { return (s16)mWorldRollAngleX; } + s16 getWorldRollDirAngleY() const { return mWorldRollDirAngleY; } public: /* 0x08 */ stage_camera_class* mCamera; diff --git a/include/d/dolzel_base.pch b/include/d/dolzel_base.pch index c49cbbb2ba..ac3dbb96d3 100644 --- a/include/d/dolzel_base.pch +++ b/include/d/dolzel_base.pch @@ -9,25 +9,39 @@ #include "JSystem/J3DGraphBase/J3DMatBlock.h" // IWYU pragma: export #include "Z2AudioLib/Z2Calc.h" // IWYU pragma: export -// Fixes weak function ordering -#include // IWYU pragma: export +// Fixes weak function/RTTI ordering +#include // IWYU pragma: export #include // IWYU pragma: export +#include "Z2AudioLib/Z2AudioArcLoader.h" // IWYU pragma: export +#include "JSystem/JAudio2/JAUStreamAramMgr.h" // IWYU pragma: export #include "JSystem/JKernel/JKRDisposer.h" // IWYU pragma: export +#include "JSystem/JGadget/linklist.h" // IWYU pragma: export #include "JSystem/J3DGraphBase/J3DPacket.h" // IWYU pragma: export -#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h" // IWYU pragma: export #include "JSystem/J3DGraphAnimator/J3DJoint.h" // IWYU pragma: export +#include "JSystem/J3DGraphAnimator/J3DMaterialAttach.h" // IWYU pragma: export +#include "JSystem/J3DGraphAnimator/J3DShapeTable.h" // IWYU pragma: export +#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h" // IWYU pragma: export #include "JSystem/J3DGraphAnimator/J3DAnimation.h" // IWYU pragma: export #include "JSystem/JUtility/JUTGamePad.h" // IWYU pragma: export +#include "JSystem/J3DGraphBase/J3DSys.h" // IWYU pragma: export +#include "JSystem/J3DGraphAnimator/J3DMaterialAttach.h" // IWYU pragma: export #include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h" // IWYU pragma: export +#include "JSystem/JHostIO/JHICommonMem.h" // IWYU pragma: export #include "JSystem/JHostIO/JORReflexible.h" // IWYU pragma: export #include "SSystem/SComponent/c_m3d_g_sph.h" // IWYU pragma: export #include "SSystem/SComponent/c_m3d_g_aab.h" // IWYU pragma: export #include "SSystem/SComponent/c_m3d_g_pla.h" // IWYU pragma: export #include "SSystem/SComponent/c_bg_s_chk.h" // IWYU pragma: export +#include "SSystem/SComponent/c_bg_s_poly_info.h" // IWYU pragma: export +#include "SSystem/SComponent/c_bg_s_gnd_chk.h" // IWYU pragma: export +#include "SSystem/SComponent/c_m3d_g_cyl.h" // IWYU pragma: export +#include "m_Do/m_Do_hostIO.h" // IWYU pragma: export #include "f_op/f_op_actor.h" // IWYU pragma: export #include "d/d_bg_s_gnd_chk.h" // IWYU pragma: export #include "d/d_bg_s_chk.h" // IWYU pragma: export #include "d/d_bg_w.h" // IWYU pragma: export +#include "d/d_drawlist.h" // IWYU pragma: export +#include "d/d_bg_s_sph_chk.h" // IWYU pragma: export #include "d/d_com_inf_game.h" // IWYU pragma: export #include "m_Do/m_Do_graphic.h" // IWYU pragma: export #include "JSystem/J2DGraph/J2DOrthoGraph.h" // IWYU pragma: export diff --git a/include/f_ap/f_ap_game.h b/include/f_ap/f_ap_game.h index 360b4c5a07..e0162fcf38 100644 --- a/include/f_ap/f_ap_game.h +++ b/include/f_ap/f_ap_game.h @@ -20,13 +20,12 @@ public: virtual void listenPropertyEvent(const JORPropertyEvent*); virtual void genMessage(JORMContext*); #endif - virtual ~fapGm_HIO_c(); + virtual ~fapGm_HIO_c() {} - #if DEBUG static void startCpuTimer(); static void stopCpuTimer(const char*); static void printCpuTimer(const char*); - static void executeCaptureScreen(); + static void executeCaptureScreen() {} static void createCaptureScreen() { mCaptureScreen = new CaptureScreen(JFWDisplay::getManager()); @@ -34,7 +33,11 @@ public: } static bool isCaptureScreen() { +#if DEBUG return mCaptureScreenFlag; +#else + return false; +#endif } static void onCpuTimer() { @@ -50,9 +53,7 @@ public: static u8 getCaptureScreenDivH() { return mCaptureScreenDivH; } static u8 getCaptureScreenDivV() { return mCaptureScreenDivV; } - #endif - #if DEBUG static u8 m_CpuTimerOn; static u8 m_CpuTimerOff; static u8 m_CpuTimerStart; @@ -70,9 +71,12 @@ public: static u8 mParticle254Fix; + static u8 mCaptureMagnification; + static u8 mCaptureScreenDivH; static u8 mCaptureScreenDivV; - #endif + + static u8 mPackArchiveMode; /* 0x04 */ s8 field_0x04; /* 0x05 */ u8 field_0x03[3]; diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index b81a7735cf..a5518264b7 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -802,7 +802,7 @@ inline void fopAcM_OnCarryType(fopAc_ac_c* i_actor, fopAcM_CARRY param_2) { } inline void fopAcM_OffCarryType(fopAc_ac_c* i_actor, fopAcM_CARRY param_2) { - i_actor->carryType &= ~param_2; + UNSET_FLAG(i_actor->carryType, param_2, u8); } enum fopAcM_FOOD { diff --git a/include/f_pc/f_pc_create_tag.h b/include/f_pc/f_pc_create_tag.h index 117235b0d4..45b1f2ea8b 100644 --- a/include/f_pc/f_pc_create_tag.h +++ b/include/f_pc/f_pc_create_tag.h @@ -11,7 +11,7 @@ typedef struct create_tag { void fpcCtTg_ToCreateQ(create_tag* i_createTag); void fpcCtTg_CreateQTo(create_tag* i_createTag); -s32 fpcCtTg_Init(create_tag* i_createTag, void* i_data); +int fpcCtTg_Init(create_tag* i_createTag, void* i_data); extern node_list_class g_fpcCtTg_Queue; diff --git a/include/f_pc/f_pc_delete_tag.h b/include/f_pc/f_pc_delete_tag.h index 9661092d3f..57b049c2f2 100644 --- a/include/f_pc/f_pc_delete_tag.h +++ b/include/f_pc/f_pc_delete_tag.h @@ -22,8 +22,8 @@ typedef struct delete_tag_class { BOOL fpcDtTg_IsEmpty(); void fpcDtTg_ToDeleteQ(delete_tag_class* i_deleteTag); void fpcDtTg_DeleteQTo(delete_tag_class* i_deleteTag); -s32 fpcDtTg_Do(delete_tag_class* i_deleteTag, delete_tag_func i_func); -s32 fpcDtTg_Init(delete_tag_class* i_deleteTag, void* i_data); +int fpcDtTg_Do(delete_tag_class* i_deleteTag, delete_tag_func i_func); +int fpcDtTg_Init(delete_tag_class* i_deleteTag, void* i_data); extern node_list_class g_fpcDtTg_Queue; diff --git a/include/f_pc/f_pc_deletor.h b/include/f_pc/f_pc_deletor.h index 3b5a512b22..4470217e3b 100644 --- a/include/f_pc/f_pc_deletor.h +++ b/include/f_pc/f_pc_deletor.h @@ -7,9 +7,9 @@ typedef struct base_process_class base_process_class; BOOL fpcDt_IsComplete(); -s32 fpcDt_ToDeleteQ(base_process_class* i_proc); -s32 fpcDt_ToQueue(base_process_class* i_proc); +int fpcDt_ToDeleteQ(base_process_class* i_proc); +int fpcDt_ToQueue(base_process_class* i_proc); void fpcDt_Handler(); -s32 fpcDt_Delete(void* i_proc); +int fpcDt_Delete(void* i_proc); #endif diff --git a/include/f_pc/f_pc_draw.h b/include/f_pc/f_pc_draw.h index 1d02d47b15..447d3926de 100644 --- a/include/f_pc/f_pc_draw.h +++ b/include/f_pc/f_pc_draw.h @@ -8,7 +8,7 @@ typedef struct base_process_class base_process_class; typedef int (*fpcDw_HandlerFunc)(void*, void*); typedef int (*fpcDw_HandlerFuncFunc)(fpcDw_HandlerFunc); -s32 fpcDw_Execute(base_process_class* i_proc); -s32 fpcDw_Handler(fpcDw_HandlerFuncFunc i_iterHandler, fpcDw_HandlerFunc i_func); +int fpcDw_Execute(base_process_class* i_proc); +int fpcDw_Handler(fpcDw_HandlerFuncFunc i_iterHandler, fpcDw_HandlerFunc i_func); #endif diff --git a/include/f_pc/f_pc_executor.h b/include/f_pc/f_pc_executor.h index 1ccaa2acc4..8e2b86b104 100644 --- a/include/f_pc/f_pc_executor.h +++ b/include/f_pc/f_pc_executor.h @@ -11,10 +11,10 @@ typedef struct base_process_class base_process_class; base_process_class* fpcEx_Search(fpcLyIt_JudgeFunc i_judgeFunc, void* i_data); base_process_class* fpcEx_SearchByID(fpc_ProcID i_id); BOOL fpcEx_IsExist(fpc_ProcID i_id); -s32 fpcEx_ToLineQ(base_process_class* i_proc); -s32 fpcEx_ExecuteQTo(base_process_class* i_proc); -s32 fpcEx_Execute(base_process_class* i_proc); -s32 fpcEx_ToExecuteQ(base_process_class* i_proc); +int fpcEx_ToLineQ(base_process_class* i_proc); +int fpcEx_ExecuteQTo(base_process_class* i_proc); +int fpcEx_Execute(base_process_class* i_proc); +int fpcEx_ToExecuteQ(base_process_class* i_proc); void fpcEx_Handler(fpcLnIt_QueueFunc i_queueFunc); #endif diff --git a/include/f_pc/f_pc_fstcreate_req.h b/include/f_pc/f_pc_fstcreate_req.h index fed7550c86..859b746354 100644 --- a/include/f_pc/f_pc_fstcreate_req.h +++ b/include/f_pc/f_pc_fstcreate_req.h @@ -14,8 +14,8 @@ typedef struct fast_create_request { /* 0x4C */ void* data; } fast_create_request; // Size: 0x50 -s32 fpcFCtRq_Do(fast_create_request* i_createReq); -s32 fpcFCtRq_Delete(fast_create_request* i_createReq); +int fpcFCtRq_Do(fast_create_request* i_createReq); +int fpcFCtRq_Delete(fast_create_request* i_createReq); base_process_class* fpcFCtRq_Request(layer_class* i_layer, s16 i_procname, fstCreateFunc i_createFunc, void* i_createData, void* i_append); diff --git a/include/f_pc/f_pc_layer.h b/include/f_pc/f_pc_layer.h index 966b536bd2..7a61cf2755 100644 --- a/include/f_pc/f_pc_layer.h +++ b/include/f_pc/f_pc_layer.h @@ -37,18 +37,18 @@ void fpcLy_DeletingMesg(layer_class* i_layer); BOOL fpcLy_IsCreatingMesg(layer_class* i_layer); BOOL fpcLy_IsDeletingMesg(layer_class* i_layer); -s32 fpcLy_IntoQueue(layer_class* i_layer, int i_treeListNo, create_tag_class* i_createTag, int i_no); -s32 fpcLy_ToQueue(layer_class* i_layer, int treeListIdx, create_tag_class* i_createTag); -s32 fpcLy_QueueTo(layer_class* i_layer, create_tag_class* i_createTag); +int fpcLy_IntoQueue(layer_class* i_layer, int i_treeListNo, create_tag_class* i_createTag, int i_no); +int fpcLy_ToQueue(layer_class* i_layer, int treeListIdx, create_tag_class* i_createTag); +int fpcLy_QueueTo(layer_class* i_layer, create_tag_class* i_createTag); int fpcLy_Cancel(layer_class* i_layer); BOOL fpcLy_CancelMethod(process_method_tag_class* i_layer); void fpcLy_CancelQTo(process_method_tag_class* i_methods); -s32 fpcLy_ToCancelQ(layer_class* i_layer, process_method_tag_class* i_methods); +int fpcLy_ToCancelQ(layer_class* i_layer, process_method_tag_class* i_methods); void fpcLy_Create(layer_class* i_layer, void* i_node, node_list_class* i_nodeList, int i_numLists); -s32 fpcLy_Delete(layer_class* i_layer); +int fpcLy_Delete(layer_class* i_layer); #endif diff --git a/include/f_pc/f_pc_layer_iter.h b/include/f_pc/f_pc_layer_iter.h index 49e6bf5eaf..f5554b6e57 100644 --- a/include/f_pc/f_pc_layer_iter.h +++ b/include/f_pc/f_pc_layer_iter.h @@ -13,9 +13,9 @@ typedef struct layer_iter { typedef int (*fpcLyIt_OnlyHereFunc)(void*, void*); typedef void* (*fpcLyIt_JudgeFunc)(void*, void*); -s32 fpcLyIt_OnlyHere(layer_class* i_layer, fpcLyIt_OnlyHereFunc i_func, void* i_data); -s32 fpcLyIt_OnlyHereLY(layer_class* i_layer, fpcLyIt_OnlyHereFunc i_func, void* i_data); -s32 fpcLyIt_All(fpcLyIt_OnlyHereFunc i_func, void* i_data); +int fpcLyIt_OnlyHere(layer_class* i_layer, fpcLyIt_OnlyHereFunc i_func, void* i_data); +int fpcLyIt_OnlyHereLY(layer_class* i_layer, fpcLyIt_OnlyHereFunc i_func, void* i_data); +int fpcLyIt_All(fpcLyIt_OnlyHereFunc i_func, void* i_data); void* fpcLyIt_Judge(layer_class* i_layer, fpcLyIt_JudgeFunc i_func, void* i_data); void* fpcLyIt_AllJudge(fpcLyIt_JudgeFunc i_func, void* i_data); diff --git a/include/f_pc/f_pc_layer_tag.h b/include/f_pc/f_pc_layer_tag.h index 9d72545ab3..e0d4abc53a 100644 --- a/include/f_pc/f_pc_layer_tag.h +++ b/include/f_pc/f_pc_layer_tag.h @@ -21,11 +21,11 @@ typedef struct layer_management_tag_class { /* 0x1A */ u16 node_list_priority; } layer_management_tag_class; -s32 fpcLyTg_QueueTo(layer_management_tag_class* i_layer_tag); -s32 fpcLyTg_ToQueue(layer_management_tag_class* i_layer_tag, unsigned int i_layerID, u16 i_listID, +int fpcLyTg_QueueTo(layer_management_tag_class* i_layer_tag); +int fpcLyTg_ToQueue(layer_management_tag_class* i_layer_tag, unsigned int i_layerID, u16 i_listID, u16 i_listPriority); -s32 fpcLyTg_Move(layer_management_tag_class* i_layer_tag, unsigned int i_layerID, u16 i_listID, +int fpcLyTg_Move(layer_management_tag_class* i_layer_tag, unsigned int i_layerID, u16 i_listID, u16 i_listPriority); -s32 fpcLyTg_Init(layer_management_tag_class* i_layer_tag, unsigned int i_id, void* i_data); +int fpcLyTg_Init(layer_management_tag_class* i_layer_tag, unsigned int i_id, void* i_data); #endif diff --git a/include/f_pc/f_pc_leaf.h b/include/f_pc/f_pc_leaf.h index c2cfb1090e..d9de82659c 100644 --- a/include/f_pc/f_pc_leaf.h +++ b/include/f_pc/f_pc_leaf.h @@ -28,12 +28,12 @@ typedef struct leaf_process_profile_definition { } leaf_process_profile_definition; s16 fpcLf_GetPriority(const leafdraw_class* i_leaf); -s32 fpcLf_DrawMethod(leafdraw_method_class* i_method, void* i_process); -s32 fpcLf_Draw(leafdraw_class* i_method); -s32 fpcLf_Execute(leafdraw_class* i_leaf); -s32 fpcLf_IsDelete(leafdraw_class* i_leaf); -s32 fpcLf_Delete(leafdraw_class* i_leaf); -s32 fpcLf_Create(leafdraw_class* i_leaf); +int fpcLf_DrawMethod(leafdraw_method_class* i_method, void* i_process); +int fpcLf_Draw(leafdraw_class* i_method); +int fpcLf_Execute(leafdraw_class* i_leaf); +int fpcLf_IsDelete(leafdraw_class* i_leaf); +int fpcLf_Delete(leafdraw_class* i_leaf); +int fpcLf_Create(leafdraw_class* i_leaf); extern int g_fpcLf_type; extern leafdraw_method_class g_fpcLf_Method; diff --git a/include/f_pc/f_pc_line_tag.h b/include/f_pc/f_pc_line_tag.h index 86eccf0011..d8b1424266 100644 --- a/include/f_pc/f_pc_line_tag.h +++ b/include/f_pc/f_pc_line_tag.h @@ -9,9 +9,9 @@ typedef struct line_tag { /* 0x14 */ int list_id; } line_tag; -s32 fpcLnTg_Move(line_tag* i_lineTag, int i_newListID); +int fpcLnTg_Move(line_tag* i_lineTag, int i_newListID); void fpcLnTg_QueueTo(line_tag* i_lineTag); -s32 fpcLnTg_ToQueue(line_tag* i_lineTag, int lineListID); +int fpcLnTg_ToQueue(line_tag* i_lineTag, int lineListID); void fpcLnTg_Init(line_tag* i_lineTag, void* i_data); #endif diff --git a/include/f_pc/f_pc_load.h b/include/f_pc/f_pc_load.h index e36bfcf60b..dc5137cd3d 100644 --- a/include/f_pc/f_pc_load.h +++ b/include/f_pc/f_pc_load.h @@ -7,6 +7,6 @@ BOOL fpcLd_Use(s16 i_procName); BOOL fpcLd_IsLoaded(s16 i_procName); void fpcLd_Free(s16 i_procName); -s32 fpcLd_Load(s16 i_procName); +int fpcLd_Load(s16 i_procName); #endif diff --git a/include/f_pc/f_pc_manager.h b/include/f_pc/f_pc_manager.h index f2399a39b6..f772949d85 100644 --- a/include/f_pc/f_pc_manager.h +++ b/include/f_pc/f_pc_manager.h @@ -10,7 +10,8 @@ #include "f_pc/f_pc_searcher.h" enum { - fpcM_ERROR_PROCESS_ID_e = 0xFFFFFFFF + fpcM_UNK_PROCESS_ID_e = 0xFFFFFFFE, + fpcM_ERROR_PROCESS_ID_e = 0xFFFFFFFF, }; typedef int (*FastCreateReqFunc)(void*); @@ -42,15 +43,15 @@ inline fpc_ProcID fpcM_Create(s16 i_procName, FastCreateReqFunc i_createFunc, vo i_append); } -inline s32 fpcM_DrawPriority(const void* i_process) { - return (s16)fpcLf_GetPriority((const leafdraw_class*)i_process); +inline int fpcM_DrawPriority(const void* i_process) { + return fpcLf_GetPriority((const leafdraw_class*)i_process); } -inline s32 fpcM_ChangeLayerID(void* i_process, int i_layerID) { +inline int fpcM_ChangeLayerID(void* i_process, int i_layerID) { return fpcPi_Change(&((base_process_class*)i_process)->priority, i_layerID, 0xFFFD, 0xFFFD); } -inline s32 fpcM_MakeOfType(int* i_type) { +inline int fpcM_MakeOfType(int* i_type) { return fpcBs_MakeOfType(i_type); } @@ -95,15 +96,15 @@ inline process_node_class* fpcM_Layer(void* i_process) { } void fpcM_Draw(void* i_process); -s32 fpcM_DrawIterater(fpcM_DrawIteraterFunc i_drawIterFunc); -s32 fpcM_Execute(void* i_process); -s32 fpcM_Delete(void* i_process); +int fpcM_DrawIterater(fpcM_DrawIteraterFunc i_drawIterFunc); +int fpcM_Execute(void* i_process); +int fpcM_Delete(void* i_process); BOOL fpcM_IsCreating(fpc_ProcID i_id); void fpcM_Management(fpcM_ManagementFunc i_preExecuteFn, fpcM_ManagementFunc i_postExecuteFn); void fpcM_Init(); base_process_class* fpcM_FastCreate(s16 i_procname, FastCreateReqFunc i_createReqFunc, void* i_createData, void* i_append); -s32 fpcM_IsPause(void* i_process, u8 i_flag); +int fpcM_IsPause(void* i_process, u8 i_flag); void fpcM_PauseEnable(void* i_process, u8 i_flag); void fpcM_PauseDisable(void* i_process, u8 i_flag); void* fpcM_JudgeInLayer(fpc_ProcID i_layerID, fpcCtIt_JudgeFunc i_judgeFunc, void* i_data); diff --git a/include/f_pc/f_pc_method.h b/include/f_pc/f_pc_method.h index 1a9dfa9d33..e10b756a59 100644 --- a/include/f_pc/f_pc_method.h +++ b/include/f_pc/f_pc_method.h @@ -1,4 +1,3 @@ - #ifndef F_PC_METHOD_H_ #define F_PC_METHOD_H_ @@ -13,10 +12,10 @@ typedef struct process_method_class { /* 0xC */ process_method_func is_delete_method; } process_method_class; -s32 fpcMtd_Method(process_method_func i_method, void* i_process); -s32 fpcMtd_Execute(process_method_class* i_methods, void* i_process); -s32 fpcMtd_IsDelete(process_method_class* i_methods, void* i_process); -s32 fpcMtd_Delete(process_method_class* i_methods, void* i_process); -s32 fpcMtd_Create(process_method_class* i_methods, void* i_process); +int fpcMtd_Method(process_method_func i_method, void* i_process); +int fpcMtd_Execute(process_method_class* i_methods, void* i_process); +int fpcMtd_IsDelete(process_method_class* i_methods, void* i_process); +int fpcMtd_Delete(process_method_class* i_methods, void* i_process); +int fpcMtd_Create(process_method_class* i_methods, void* i_process); #endif diff --git a/include/f_pc/f_pc_method_tag.h b/include/f_pc/f_pc_method_tag.h index 9f2e7918dc..0cdca03a26 100644 --- a/include/f_pc/f_pc_method_tag.h +++ b/include/f_pc/f_pc_method_tag.h @@ -12,9 +12,9 @@ typedef struct process_method_tag_class { /* 0x18 */ void* data; } process_method_tag_class; -s32 fpcMtdTg_Do(process_method_tag_class* i_methodTag); -s32 fpcMtdTg_ToMethodQ(node_list_class* i_nodelist, process_method_tag_class* i_methodTag); +int fpcMtdTg_Do(process_method_tag_class* i_methodTag); +int fpcMtdTg_ToMethodQ(node_list_class* i_nodelist, process_method_tag_class* i_methodTag); void fpcMtdTg_MethodQTo(process_method_tag_class* i_methodTag); -s32 fpcMtdTg_Init(process_method_tag_class* i_methodTag, process_method_tag_func i_method, void* i_data); +int fpcMtdTg_Init(process_method_tag_class* i_methodTag, process_method_tag_func i_method, void* i_data); #endif diff --git a/include/f_pc/f_pc_node.h b/include/f_pc/f_pc_node.h index 840c1cd0aa..3be7fe6c8f 100644 --- a/include/f_pc/f_pc_node.h +++ b/include/f_pc/f_pc_node.h @@ -25,14 +25,14 @@ typedef struct node_process_profile_definition { /* 0x1C */ process_method_class* sub_methods; } node_process_profile_definition; -s32 fpcNd_DrawMethod(nodedraw_method_class* pNodeMethod, void* pData); -s32 fpcNd_Draw(process_node_class* pProcNode); -s32 fpcNd_Execute(process_node_class* pProcNode); +int fpcNd_DrawMethod(nodedraw_method_class* pNodeMethod, void* pData); +int fpcNd_Draw(process_node_class* pProcNode); +int fpcNd_Execute(process_node_class* pProcNode); void* fpcNd_IsCreatingFromUnder(void* pProcNode); -s32 fpcNd_IsDeleteTiming(process_node_class* pProcNode); -s32 fpcNd_IsDelete(process_node_class* pProcNode); -s32 fpcNd_Delete(process_node_class* pProcNode); -s32 fpcNd_Create(process_node_class* pProcNode); +int fpcNd_IsDeleteTiming(process_node_class* pProcNode); +int fpcNd_IsDelete(process_node_class* pProcNode); +int fpcNd_Delete(process_node_class* pProcNode); +int fpcNd_Create(process_node_class* pProcNode); extern int g_fpcNd_type; extern nodedraw_method_class g_fpcNd_Method; diff --git a/include/f_pc/f_pc_node_req.h b/include/f_pc/f_pc_node_req.h index bc446b4c6e..d710379c89 100644 --- a/include/f_pc/f_pc_node_req.h +++ b/include/f_pc/f_pc_node_req.h @@ -49,18 +49,18 @@ typedef struct request_node_class { void fpcNdRq_RequestQTo(node_create_request* i_request); void fpcNdRq_ToRequestQ(node_create_request* i_request); -s32 fpcNdRq_phase_IsCreated(node_create_request* i_request); -s32 fpcNdRq_phase_Create(node_create_request* i_request); -s32 fpcNdRq_phase_IsDeleteTiming(node_create_request* i_request); -s32 fpcNdRq_phase_IsDeleted(node_create_request* i_request); -s32 fpcNdRq_phase_Delete(node_create_request* i_request); -s32 fpcNdRq_DoPhase(node_create_request* i_request); -s32 fpcNdRq_Execute(node_create_request* i_request); -s32 fpcNdRq_Delete(node_create_request* i_request); -s32 fpcNdRq_Cancel(node_create_request* i_request); -s32 fpcNdRq_Handler(); -s32 fpcNdRq_IsPossibleTarget(process_node_class* i_procNode); -s32 fpcNdRq_IsIng(process_node_class* i_procNode); +int fpcNdRq_phase_IsCreated(node_create_request* i_request); +int fpcNdRq_phase_Create(node_create_request* i_request); +int fpcNdRq_phase_IsDeleteTiming(node_create_request* i_request); +int fpcNdRq_phase_IsDeleted(node_create_request* i_request); +int fpcNdRq_phase_Delete(node_create_request* i_request); +int fpcNdRq_DoPhase(node_create_request* i_request); +int fpcNdRq_Execute(node_create_request* i_request); +int fpcNdRq_Delete(node_create_request* i_request); +int fpcNdRq_Cancel(node_create_request* i_request); +int fpcNdRq_Handler(); +int fpcNdRq_IsPossibleTarget(process_node_class* i_procNode); +int fpcNdRq_IsIng(process_node_class* i_procNode); node_create_request* fpcNdRq_Create(u32 i_requestSize); node_create_request* fpcNdRq_ChangeNode(u32 i_requestSize, process_node_class* i_procNode, s16 i_procName, void* i_data); @@ -70,7 +70,7 @@ node_create_request* fpcNdRq_Request(u32 i_requestSize, int i_reqType, process_node_class* i_procNode, s16 i_procName, void* i_data, node_create_request_method_class* i_create_req_methods); -s32 fpcNdRq_ReChangeNode(fpc_ProcID i_requestID, s16 i_procName, void* i_data); -s32 fpcNdRq_ReRequest(fpc_ProcID i_requestID, s16 i_procName, void* i_data); +int fpcNdRq_ReChangeNode(fpc_ProcID i_requestID, s16 i_procName, void* i_data); +int fpcNdRq_ReRequest(fpc_ProcID i_requestID, s16 i_procName, void* i_data); #endif diff --git a/include/f_pc/f_pc_pause.h b/include/f_pc/f_pc_pause.h index 895b25af95..557734f923 100644 --- a/include/f_pc/f_pc_pause.h +++ b/include/f_pc/f_pc_pause.h @@ -3,9 +3,9 @@ #include "dolphin/types.h" -s32 fpcPause_IsEnable(void* pProc, u8 expected); -s32 fpcPause_Enable(void* pProc, u8 pauseMask); -s32 fpcPause_Disable(void* pProc, u8 pauseMask); +int fpcPause_IsEnable(void* pProc, u8 expected); +int fpcPause_Enable(void* pProc, u8 pauseMask); +int fpcPause_Disable(void* pProc, u8 pauseMask); void fpcPause_Init(void* pProc); #endif diff --git a/include/f_pc/f_pc_priority.h b/include/f_pc/f_pc_priority.h index 62b4b84507..d3c9d75076 100644 --- a/include/f_pc/f_pc_priority.h +++ b/include/f_pc/f_pc_priority.h @@ -23,15 +23,15 @@ typedef struct process_priority_class { /* 0x38 */ priority_id current_info; } process_priority_class; -s32 fpcPi_IsInQueue(process_priority_class* pPi); -s32 fpcPi_QueueTo(process_priority_class* pPi); -s32 fpcPi_ToQueue(process_priority_class* pPi); +int fpcPi_IsInQueue(process_priority_class* pPi); +int fpcPi_QueueTo(process_priority_class* pPi); +int fpcPi_ToQueue(process_priority_class* pPi); process_priority_class* fpcPi_GetFromQueue(void); -s32 fpcPi_Delete(process_priority_class* pPi); -s32 fpcPi_IsNormal(unsigned int layer, u16 listID, u16 priority); -s32 fpcPi_Change(process_priority_class* pPi, unsigned int layer, u16 listID, u16 priority); -s32 fpcPi_Handler(void); -s32 fpcPi_Init(process_priority_class* pPi, void* pUserData, unsigned int layer, u16 listID, +int fpcPi_Delete(process_priority_class* pPi); +int fpcPi_IsNormal(unsigned int layer, u16 listID, u16 priority); +int fpcPi_Change(process_priority_class* pPi, unsigned int layer, u16 listID, u16 priority); +int fpcPi_Handler(void); +int fpcPi_Init(process_priority_class* pPi, void* pUserData, unsigned int layer, u16 listID, u16 priority); #endif diff --git a/include/f_pc/f_pc_stdcreate_req.h b/include/f_pc/f_pc_stdcreate_req.h index 94d30ba83d..5c561f8bdc 100644 --- a/include/f_pc/f_pc_stdcreate_req.h +++ b/include/f_pc/f_pc_stdcreate_req.h @@ -19,14 +19,14 @@ typedef struct standard_create_request_class { #endif } standard_create_request_class; -s32 fpcSCtRq_phase_CreateProcess(standard_create_request_class* i_request); -s32 fpcSCtRq_phase_SubCreateProcess(standard_create_request_class* i_request); -s32 fpcSCtRq_phase_IsComplete(standard_create_request_class* i_request); -s32 fpcSCtRq_phase_PostMethod(standard_create_request_class* i_request); -s32 fpcSCtRq_phase_Done(standard_create_request_class* i_request); -s32 fpcSCtRq_Handler(standard_create_request_class* i_request); -s32 fpcSCtRq_Delete(standard_create_request_class* i_request); -s32 fpcSCtRq_Cancel(standard_create_request_class* i_request); +int fpcSCtRq_phase_CreateProcess(standard_create_request_class* i_request); +int fpcSCtRq_phase_SubCreateProcess(standard_create_request_class* i_request); +int fpcSCtRq_phase_IsComplete(standard_create_request_class* i_request); +int fpcSCtRq_phase_PostMethod(standard_create_request_class* i_request); +int fpcSCtRq_phase_Done(standard_create_request_class* i_request); +int fpcSCtRq_Handler(standard_create_request_class* i_request); +int fpcSCtRq_Delete(standard_create_request_class* i_request); +int fpcSCtRq_Cancel(standard_create_request_class* i_request); fpc_ProcID fpcSCtRq_Request(layer_class* i_layer, s16 i_procName, stdCreateFunc i_createFunc, void* param_4, void* i_append); diff --git a/include/global.h b/include/global.h index cf8e285c23..8be30974cc 100644 --- a/include/global.h +++ b/include/global.h @@ -138,4 +138,11 @@ static const float INF = 2000000000.0f; #define ASM #endif +// potential fakematch? +#if PLATFORM_SHIELD + #define UNSET_FLAG(var, flag, type) (var) &= (type)~(flag) +#else + #define UNSET_FLAG(var, flag, type) (var) &= ~(flag) +#endif + #endif diff --git a/include/m_Do/m_Do_controller_pad.h b/include/m_Do/m_Do_controller_pad.h index c4291c1af9..48d5256ea2 100644 --- a/include/m_Do/m_Do_controller_pad.h +++ b/include/m_Do/m_Do_controller_pad.h @@ -81,7 +81,7 @@ inline void mDoCPd_ANALOG_CONV(u8 analog, f32& param_1) { } inline void mDoCPd_TRIGGER_CONV(u8 analog, f32& param_1) { - param_1 = analog * 0.0071428571827709675f; + param_1 = analog * (1.0f / 140.0f); if (param_1 > 1.0f) { param_1 = 1.0f; } diff --git a/include/m_Do/m_Do_main.h b/include/m_Do/m_Do_main.h index 4685b4aef7..ff5aa4d12a 100644 --- a/include/m_Do/m_Do_main.h +++ b/include/m_Do/m_Do_main.h @@ -65,12 +65,10 @@ private: }; struct mDoMain { -#if DEBUG static int argument; static int e3menu_no; static u32 archiveHeapSize; static u32 gameHeapSize; -#endif static char COPYDATE_STRING[18]; static u32 memMargin; diff --git a/include/revolution/dvd.h b/include/revolution/dvd.h index 5dc9067cd8..967390d498 100644 --- a/include/revolution/dvd.h +++ b/include/revolution/dvd.h @@ -3,11 +3,15 @@ #include #include +#include "global.h" #ifdef __cplusplus extern "C" { #endif +#define DVD_DEVICE_CODE_READ (1 << 15) +#define MAKE_DVD_DEVICE_CODE(x) (DVD_DEVICE_CODE_READ | (x)) + #define DVD_ASSERTMSGLINE(line, cond, msg) \ if (!(cond)) \ OSPanic(__FILE__, line, msg) @@ -182,8 +186,6 @@ typedef struct DVDGameTOC { DVDPartitionInfo* partitionInfos; } DVDGameTOC; -#define ROUND(n, a) (((u32)(n) + (a)-1) & ~((a)-1)) - typedef struct DVDPartitionParams DVDPartitionParams; struct DVDPartitionParams { diff --git a/include/revolution/os/OSHardware.h b/include/revolution/os/OSHardware.h new file mode 100644 index 0000000000..aa4a651f70 --- /dev/null +++ b/include/revolution/os/OSHardware.h @@ -0,0 +1,267 @@ +/** + * For more details, see: + * https://www.gc-forever.com/yagcd/chap4.html#sec4 + * https://www.gc-forever.com/yagcd/chap13.html#sec13 + * https://wiibrew.org/wiki/Memory_map + */ + +#ifndef _RVL_SDK_OS_HARDWARE_H +#define _RVL_SDK_OS_HARDWARE_H + +#include "revolution/dvd.h" +#include "revolution/os.h" +#include "revolution/os/OSContext.h" +#include "revolution/os/OSThread.h" +#include "revolution/types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// Forward declarations +typedef struct OSExecParams; + +// Derive offsets for use with OSAddress functions +#define __DEF_ADDR_OFFSETS(name, addr) \ + static const u32 OS_PHYS_##name = (addr) - 0x80000000; \ + static const u32 OS_CACHED_##name = (addr); \ + static const u32 OS_UNCACHED_##name = (addr) + (0xC0000000 - 0x80000000); + +// Define a global variable in *CACHED* MEM1. +// Can be accessed directly or with OSAddress functions. +#define OS_DEF_GLOBAL_VAR(type, name, addr) \ + /* Memory-mapped value for direct access */ \ + type OS_##name AT_ADDRESS(addr); \ + __DEF_ADDR_OFFSETS(name, addr) + +// Define a global array in *CACHED* MEM1. +// Can be accessed directly or with OSAddress functions. +#define OS_DEF_GLOBAL_ARR(type, name, arr, addr) \ + /* Memory-mapped value for direct access */ \ + type OS_##name arr AT_ADDRESS(addr); \ + __DEF_ADDR_OFFSETS(name, addr) + +// Define an global variable in the hardware-register range. +#define OS_DEF_HW_REG(type, name, addr) \ + /* Memory-mapped value for direct access */ \ + type OS_##name AT_ADDRESS(addr); + +typedef enum { + OS_BOOT_MAGIC_BOOTROM = 0xD15EA5E, + OS_BOOT_MAGIC_JTAG = 0xE5207C22, +} OSBootMagic; + +typedef struct OSDebugInterface { + /* 0x0 */ int usingDebugger; + /* 0x4 */ u32 exceptionMask; + /* 0x8 */ void* exceptionHook; + /* 0xC */ void* exceptionHookLR; +} OSDebugInterface; + +typedef struct OSBI2 { + /* 0x0 */ u32 dbgMonitorSize; + /* 0x4 */ u32 simulatedMemSize; + /* 0x8 */ u32 argumentOfs; + /* 0xC */ u32 debugFlag; + /* 0x10 */ u32 trackLocation; + /* 0x14 */ u32 trackSize; + /* 0x18 */ u32 countryCode; + u32 WORD_0x1C; + u32 lastInsert; + /* 0x24 */ u32 padSpec; + /* 0x28 */ u32 totalTextDataLimit; + /* 0x2C */ u32 simulatedMem2Size; +} OSBI2; + +/** + * 0x80000000 - 0x80000100 + */ +// clang-format off +OS_DEF_GLOBAL_VAR(OSBootInfo, BOOT_INFO, 0x80000000); +OS_DEF_GLOBAL_VAR(OSDebugInterface, DEBUG_INTERFACE, 0x80000040); +OS_DEF_GLOBAL_ARR(u8, DB_INTEGRATOR_HOOK, [0x24], 0x80000060); +OS_DEF_GLOBAL_VAR(struct OSContext*, CURRENT_CONTEXT_PHYS, 0x800000C0); +OS_DEF_GLOBAL_VAR(u32, PREV_INTR_MASK, 0x800000C4); +OS_DEF_GLOBAL_VAR(u32, CURRENT_INTR_MASK, 0x800000C8); +OS_DEF_GLOBAL_VAR(u32, TV_FORMAT, 0x800000CC); +OS_DEF_GLOBAL_VAR(u32, ARAM_SIZE, 0x800000D0); +OS_DEF_GLOBAL_VAR(struct OSContext*, CURRENT_CONTEXT, 0x800000D4); +OS_DEF_GLOBAL_VAR(struct OSContext*, CURRENT_FPU_CONTEXT, 0x800000D8); +OS_DEF_GLOBAL_VAR(OSThreadQueue, THREAD_QUEUE, 0x800000DC); +OS_DEF_GLOBAL_VAR(OSThread*, CURRENT_THREAD, 0x800000E4); +OS_DEF_GLOBAL_VAR(u32, DEBUG_MONITOR_SIZE, 0x800000E8); +OS_DEF_GLOBAL_VAR(void*, DEBUG_MONITOR, 0x800000EC); +OS_DEF_GLOBAL_VAR(u32, SIMULATED_MEM_SIZE, 0x800000F0); +OS_DEF_GLOBAL_VAR(OSBI2*, DVD_BI2, 0x800000F4); +OS_DEF_GLOBAL_VAR(u32, BUS_CLOCK_SPEED, 0x800000F8); +OS_DEF_GLOBAL_VAR(u32, CPU_CLOCK_SPEED, 0x800000FC); +// clang-format on + +/** + * 0x80003000 - 0x80003F00 + */ +// clang-format off +OS_DEF_GLOBAL_ARR(void*, EXCEPTION_TABLE, [15], 0x80003000); +OS_DEF_GLOBAL_VAR(void*, INTR_HANDLER_TABLE, 0x80003040); +OS_DEF_GLOBAL_VAR(void*, FIRST_REL, 0x800030C8); +OS_DEF_GLOBAL_VAR(void*, LAST_REL, 0x800030CC); +OS_DEF_GLOBAL_VAR(void*, REL_NAME_TABLE, 0x800030D0); +OS_DEF_GLOBAL_VAR(u32, DOL_TOTAL_TEXT_DATA, 0x800030D4); +OS_DEF_GLOBAL_VAR(s64, SYSTEM_TIME, 0x800030D8); +OS_DEF_GLOBAL_VAR(u8, PAD_FLAGS, 0x800030E3); +OS_DEF_GLOBAL_VAR(u16, GC_PAD_3_BTN, 0x800030E4); +OS_DEF_GLOBAL_VAR(volatile u16, DVD_DEVICE_CODE, 0x800030E6); +OS_DEF_GLOBAL_VAR(u8, BI2_DEBUG_FLAG, 0x800030E8); +OS_DEF_GLOBAL_VAR(u8, PAD_SPEC, 0x800030E9); +OS_DEF_GLOBAL_VAR(struct OSExecParams*, DOL_EXEC_PARAMS, 0x800030F0); +OS_DEF_GLOBAL_VAR(u32, PHYSICAL_MEM1_SIZE, 0x80003100); +OS_DEF_GLOBAL_VAR(u32, SIMULATED_MEM1_SIZE, 0x80003104); +OS_DEF_GLOBAL_VAR(void*, USABLE_MEM1_START, 0x8000310C); +OS_DEF_GLOBAL_VAR(void*, USABLE_MEM1_END, 0x80003110); +OS_DEF_GLOBAL_VAR(u32, PHYSICAL_MEM2_SIZE, 0x80003118); +OS_DEF_GLOBAL_VAR(u32, SIMULATED_MEM2_SIZE, 0x8000311C); +OS_DEF_GLOBAL_VAR(void*, ACCESSIBLE_MEM2_END, 0x80003120); +OS_DEF_GLOBAL_VAR(void*, USABLE_MEM2_START, 0x80003124); +OS_DEF_GLOBAL_VAR(void*, USABLE_MEM2_END, 0x80003128); +OS_DEF_GLOBAL_VAR(void*, IPC_BUFFER_START, 0x80003130); +OS_DEF_GLOBAL_VAR(void*, IPC_BUFFER_END, 0x80003134); +OS_DEF_GLOBAL_VAR(u32, HOLLYWOOD_REV, 0x80003138); +OS_DEF_GLOBAL_VAR(u32, IOS_VERSION, 0x80003140); +OS_DEF_GLOBAL_VAR(u32, IOS_BUILD_DATE, 0x80003144); +OS_DEF_GLOBAL_VAR(void*, IOS_HEAP_START, 0x80003148); +OS_DEF_GLOBAL_VAR(void*, IOS_HEAP_END, 0x8000314C); +OS_DEF_GLOBAL_VAR(u32, GDDR_VENDOR_CODE, 0x80003158); +OS_DEF_GLOBAL_VAR(u8, BOOT_PROGRAM_TARGET, 0x8000315C); +OS_DEF_GLOBAL_VAR(u8, APPLOADER_TARGET, 0x8000315D); +OS_DEF_GLOBAL_VAR(int, MIOS_SHUTDOWN_FLAG, 0x80003164); +OS_DEF_GLOBAL_VAR(u32, CURRENT_APP_NAME, 0x80003180); +OS_DEF_GLOBAL_VAR(u8, CURRENT_APP_TYPE, 0x80003184); +OS_DEF_GLOBAL_VAR(u32, MINIMUM_IOS_VERSION, 0x80003188); +OS_DEF_GLOBAL_VAR(u32, NAND_TITLE_LAUNCH_CODE, 0x8000318C); +OS_DEF_GLOBAL_VAR(u32, NAND_TITLE_RETURN_CODE, 0x80003190); +OS_DEF_GLOBAL_VAR(u32, BOOT_PARTITION_TYPE, 0x80003194); +OS_DEF_GLOBAL_VAR(u32, BOOT_PARTITION_OFFSET, 0x80003198); +OS_DEF_GLOBAL_ARR(u8, NWC24_USER_ID_BUFFER, [32], 0x800031C0); +OS_DEF_GLOBAL_VAR(u64, NWC24_USER_ID, 0x800031C0); +OS_DEF_GLOBAL_ARR(u8, SC_PRDINFO, [0x100], 0x80003800); +// clang-format on + +/** + * PI hardware globals + */ +volatile u32 PI_HW_REGS[] AT_ADDRESS(0xCC003000); +typedef enum { + PI_INTSR, //!< 0xCC003000 + PI_INTMR, //!< 0xCC003004 + PI_REG_0x8, //!< 0xCC003008 + PI_REG_0xC, //!< 0xCC00300C + PI_REG_0x10, //!< 0xCC003010 + PI_REG_0x14, //!< 0xCC003014 + PI_REG_0x18, //!< 0xCC003018 + PI_REG_0x1C, //!< 0xCC00301C + PI_REG_0x20, //!< 0xCC003020 + PI_RESET, //!< 0xCC003024 + // . . . +} PIHwReg; + +// INTSR - Interrupt Cause Register +#define PI_INTSR_ERROR (1 << 0) +#define PI_INTSR_RSW (1 << 1) +#define PI_INTSR_DI (1 << 2) +#define PI_INTSR_SI (1 << 3) +#define PI_INTSR_EXI (1 << 4) +#define PI_INTSR_AI (1 << 5) +#define PI_INTSR_DSP (1 << 6) +#define PI_INTSR_MEM (1 << 7) +#define PI_INTSR_VI (1 << 8) +#define PI_INTSR_PE_TOKEN (1 << 9) +#define PI_INTSR_PE_FINISH (1 << 10) +#define PI_INTSR_CP (1 << 11) +#define PI_INTSR_DEBUG (1 << 12) +#define PI_INTSR_HSP (1 << 13) +#define PI_INTSR_ACR (1 << 14) +#define PI_INTSR_RSWST (1 << 16) + +// INTMR - Interrupt Mask Register +#define PI_INTMR_ERROR (1 << 0) +#define PI_INTMR_RSW (1 << 1) +#define PI_INTMR_DI (1 << 2) +#define PI_INTMR_SI (1 << 3) +#define PI_INTMR_EXI (1 << 4) +#define PI_INTMR_AI (1 << 5) +#define PI_INTMR_DSP (1 << 6) +#define PI_INTMR_MEM (1 << 7) +#define PI_INTMR_VI (1 << 8) +#define PI_INTMR_PE_TOKEN (1 << 9) +#define PI_INTMR_PE_FINISH (1 << 10) +#define PI_INTMR_CP (1 << 11) +#define PI_INTMR_DEBUG (1 << 12) +#define PI_INTMR_HSP (1 << 13) +#define PI_INTMR_ACR (1 << 14) + +/** + * MI hardware registers + */ +volatile u16 MI_HW_REGS[] AT_ADDRESS(0xCC004000); +typedef enum { + MI_PAGE_MEM0_H, //!< 0xCC004000 + MI_PAGE_MEM0_L, //!< 0xCC004002 + MI_PAGE_MEM1_H, //!< 0xCC004004 + MI_PAGE_MEM1_L, //!< 0xCC004006 + MI_PAGE_MEM2_H, //!< 0xCC004008 + MI_PAGE_MEM2_L, //!< 0xCC00400A + MI_PAGE_MEM3_H, //!< 0xCC00400C + MI_PAGE_MEM3_L, //!< 0xCC00400E + MI_PROT_MEM0, //!< 0xCC004010 + MI_PROT_MEM1, //!< 0xCC004012 + MI_PROT_MEM2, //!< 0xCC004014 + MI_PROT_MEM3, //!< 0xCC004016 + MI_REG_0x18, //!< 0xCC004018 + MI_REG_0x1A, //!< 0xCC00401A + MI_INTMR, //!< 0xCC00401C + MI_INTSR, //!< 0xCC00401E + MI_REG_0x20, //!< 0xCC004020 + MI_ADDRLO, //!< 0xCC004022 + MI_ADDRHI, //!< 0xCC004024 + MI_REG_0x26, //!< 0xCC004026 + MI_REG_0x28, //!< 0xCC004028 + // . . . +} MIHwReg; + +// INTMR - Interrupt Mask Register +#define MI_INTMR_MEM0 (1 << 0) +#define MI_INTMR_MEM1 (1 << 1) +#define MI_INTMR_MEM2 (1 << 2) +#define MI_INTMR_MEM3 (1 << 3) +#define MI_INTMR_ADDR (1 << 4) + +// INTSR - Interrupt Cause Register +#define MI_INTSR_MEM0 (1 << 0) +#define MI_INTSR_MEM1 (1 << 1) +#define MI_INTSR_MEM2 (1 << 2) +#define MI_INTSR_MEM3 (1 << 3) +#define MI_INTSR_ADDR (1 << 4) + +/** + * DI hardware globals + */ +// clang-format off +OS_DEF_HW_REG(volatile unsigned long, DI_DMA_ADDR, 0xCD006014); +OS_DEF_HW_REG(volatile unsigned long, DI_CONFIG, 0xCD006024); +// clang-format on + +/** + * Misc/unknown globals + */ +// clang-format off +OS_DEF_HW_REG(volatile unsigned long, UNK_CD000034, 0xCD000034); +OS_DEF_HW_REG(volatile unsigned long, UNK_CD800180, 0xCD800180); +OS_DEF_HW_REG(volatile unsigned long, UNK_CD8001CC, 0xCD8001CC); +OS_DEF_HW_REG(volatile unsigned long, UNK_CD8001D0, 0xCD8001D0); +// clang-format on + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/revolution/wpad/bte.h b/include/revolution/wpad/bte.h index c816fa8baf..1751d8998b 100644 --- a/include/revolution/wpad/bte.h +++ b/include/revolution/wpad/bte.h @@ -1,7 +1,7 @@ #ifndef CONTEXT_BTE_H #define CONTEXT_BTE_H -#include +#include // taken from https://github.com/doldecomp/sdk_2009-12-11/blob/main/include/context_bte.h diff --git a/src/CaptureScreen.cpp b/src/CaptureScreen.cpp index f6b24e63bc..7c8d55a841 100644 --- a/src/CaptureScreen.cpp +++ b/src/CaptureScreen.cpp @@ -1,4 +1,5 @@ #include "CaptureScreen.h" +#include "global.h" CaptureScreen::CaptureScreen(const JFWDisplay* pDisplay) { mpDisplay = pDisplay; diff --git a/src/DynamicLink.cpp b/src/DynamicLink.cpp index eb0b559221..52cf257970 100644 --- a/src/DynamicLink.cpp +++ b/src/DynamicLink.cpp @@ -8,7 +8,7 @@ #include "JSystem/JKernel/JKRExpHeap.h" #include "JSystem/JKernel/JKRFileCache.h" #include "JSystem/JUtility/JUTConsole.h" -#include +#include #include "m_Do/m_Do_dvd_thread.h" #include "m_Do/m_Do_ext.h" @@ -474,14 +474,14 @@ extern "C" void ModuleUnresolved() { OSReport_Error("\n"); } -extern "C" void ModuleConstructorsX(void (**ctors)()) { +extern "C" void ModuleConstructorsX(void (*const *ctors)()) { while (*ctors != 0) { (**ctors)(); ctors++; } } -extern "C" void ModuleDestructorsX(void (**dtors)()) { +extern "C" void ModuleDestructorsX(void (*const *dtors)()) { while (*dtors != 0) { (**dtors)(); dtors++; diff --git a/src/JSystem/J2DGraph/J2DAnimation.cpp b/src/JSystem/J2DGraph/J2DAnimation.cpp index bd10f3f369..5ca534a3a1 100644 --- a/src/JSystem/J2DGraph/J2DAnimation.cpp +++ b/src/JSystem/J2DGraph/J2DAnimation.cpp @@ -7,90 +7,138 @@ #include "JSystem/JUtility/JUTResource.h" #include "dolphin/os.h" -f32 J2DGetKeyFrameInterpolationf(f32 param_0, J3DAnmKeyTableBase* param_1, f32* param_2); -f32 J2DGetKeyFrameInterpolations(f32 param_0, J3DAnmKeyTableBase* param_1, s16* param_2); +template +f32 J2DGetKeyFrameInterpolation(f32 param_0, J3DAnmKeyTableBase* param_1, T* param_2) { + J3D_PANIC(101, param_2, "Error : null pointer."); + if (param_0 < param_2[0]) { + return param_2[1]; + } else { + if (param_1->mType == 0) { + if (param_2[(param_1->mMaxFrame - 1) * 3] <= param_0) { + return param_2[(param_1->mMaxFrame - 1) * 3 + 1]; + } else { + u32 tmp = param_1->mMaxFrame; + while (tmp > 1) { + u32 halfTmp = tmp / 2; + u32 upIdx = halfTmp * 3; + if (param_0 >= param_2[upIdx]) { + param_2 = param_2 + upIdx; + tmp -= halfTmp; + } else { + tmp = halfTmp; + } + } + f32 result = J2DHermiteInterpolation(param_0, ¶m_2[0], ¶m_2[1], ¶m_2[2], ¶m_2[3], ¶m_2[4], ¶m_2[5]); + return result; + } + } else { + if (param_2[(param_1->mMaxFrame - 1) * 4] <= param_0) { + return param_2[(param_1->mMaxFrame - 1) * 4 + 1]; + } else { + u32 tmp = param_1->mMaxFrame; + while (tmp > 1) { + u32 halfTmp = tmp / 2; + u32 upIdx = halfTmp * 4; + if (param_0 >= param_2[upIdx]) { + param_2 = param_2 + upIdx; + tmp -= halfTmp; + } else { + tmp = halfTmp; + } + } + f32 result = J2DHermiteInterpolation(param_0, ¶m_2[0], ¶m_2[1], ¶m_2[3], ¶m_2[4], ¶m_2[5], ¶m_2[6]); + return result; + } + } + } +} void J2DAnmTransformFull::getTransform(u16 param_0, J3DTransformInfo* transformInfo) const { + u32 local_3c = mFrame; + J3D_PANIC(169, param_0 < field_0x22, "Error : range over."); + J3D_PANIC(170, transformInfo, "Error : null pointer."); u16 idx = (param_0 * 3); J3DAnmTransformFullTable* xPart = &mTableInfo[idx]; J3DAnmTransformFullTable* yPart = &mTableInfo[idx + 1]; J3DAnmTransformFullTable* zPart = &mTableInfo[idx + 2]; - u16 xMaxFrame = xPart->mScaleMaxFrame; - if (getFrame() < 0) { + u32 maxFrame = xPart->mScaleMaxFrame; + if (mFrame < 0) { transformInfo->mScale.x = mScaleValues[xPart->mScaleOffset]; - } else if (getFrame() >= xMaxFrame) { - transformInfo->mScale.x = mScaleValues[(xPart->mScaleOffset + (xMaxFrame - 1))]; + } else if (mFrame >= maxFrame) { + transformInfo->mScale.x = mScaleValues[(xPart->mScaleOffset + (maxFrame - 1))]; } else { - transformInfo->mScale.x = mScaleValues[(xPart->mScaleOffset + (int)getFrame())]; + transformInfo->mScale.x = mScaleValues[(xPart->mScaleOffset + (int)mFrame)]; } - u16 yMaxFrame = yPart->mScaleMaxFrame; - if (getFrame() < 0) { + maxFrame = yPart->mScaleMaxFrame; + if (mFrame < 0) { transformInfo->mScale.y = mScaleValues[yPart->mScaleOffset]; - } else if (getFrame() >= yMaxFrame) { - transformInfo->mScale.y = mScaleValues[(yPart->mScaleOffset + (yMaxFrame - 1))]; + } else if (mFrame >= maxFrame) { + transformInfo->mScale.y = mScaleValues[(yPart->mScaleOffset + (maxFrame - 1))]; } else { - transformInfo->mScale.y = mScaleValues[(yPart->mScaleOffset + (int)getFrame())]; + transformInfo->mScale.y = mScaleValues[(yPart->mScaleOffset + (int)mFrame)]; } - u16 zMaxFrame = zPart->mScaleMaxFrame; - if (getFrame() < 0) { + maxFrame = zPart->mScaleMaxFrame; + if (mFrame < 0) { transformInfo->mScale.z = mScaleValues[zPart->mScaleOffset]; - } else if (getFrame() >= zMaxFrame) { - transformInfo->mScale.z = mScaleValues[(zPart->mScaleOffset + (zMaxFrame - 1))]; + } else if (mFrame >= maxFrame) { + transformInfo->mScale.z = mScaleValues[(zPart->mScaleOffset + (maxFrame - 1))]; } else { - transformInfo->mScale.z = mScaleValues[(zPart->mScaleOffset + (int)getFrame())]; + transformInfo->mScale.z = mScaleValues[(zPart->mScaleOffset + (int)mFrame)]; } - xMaxFrame = xPart->mRotationMaxFrame; - if (getFrame() < 0) { + maxFrame = xPart->mRotationMaxFrame; + if (mFrame < 0) { transformInfo->mRotation.x = mRotationValues[xPart->mRotationOffset]; - } else if (getFrame() >= xMaxFrame) { - transformInfo->mRotation.x = mRotationValues[(xPart->mRotationOffset + (xMaxFrame - 1))]; + } else if (mFrame >= maxFrame) { + transformInfo->mRotation.x = mRotationValues[(xPart->mRotationOffset + (maxFrame - 1))]; } else { - transformInfo->mRotation.x = mRotationValues[(xPart->mRotationOffset + (int)getFrame())]; + transformInfo->mRotation.x = mRotationValues[(xPart->mRotationOffset + (int)mFrame)]; } - yMaxFrame = yPart->mRotationMaxFrame; - if (getFrame() < 0) { + maxFrame = yPart->mRotationMaxFrame; + if (mFrame < 0) { transformInfo->mRotation.y = mRotationValues[yPart->mRotationOffset]; - } else if (getFrame() >= yMaxFrame) { - transformInfo->mRotation.y = mRotationValues[(yPart->mRotationOffset + (yMaxFrame - 1))]; + } else if (mFrame >= maxFrame) { + transformInfo->mRotation.y = mRotationValues[(yPart->mRotationOffset + (maxFrame - 1))]; } else { - transformInfo->mRotation.y = mRotationValues[(yPart->mRotationOffset + (int)getFrame())]; + transformInfo->mRotation.y = mRotationValues[(yPart->mRotationOffset + (int)mFrame)]; } - zMaxFrame = zPart->mRotationMaxFrame; - if (getFrame() < 0) { + maxFrame = zPart->mRotationMaxFrame; + if (mFrame < 0) { transformInfo->mRotation.z = mRotationValues[zPart->mRotationOffset]; - } else if (getFrame() >= zMaxFrame) { - transformInfo->mRotation.z = mRotationValues[(zPart->mRotationOffset + (zMaxFrame - 1))]; + } else if (mFrame >= maxFrame) { + transformInfo->mRotation.z = mRotationValues[(zPart->mRotationOffset + (maxFrame - 1))]; } else { - transformInfo->mRotation.z = mRotationValues[(zPart->mRotationOffset + (int)getFrame())]; + transformInfo->mRotation.z = mRotationValues[(zPart->mRotationOffset + (int)mFrame)]; } - xMaxFrame = xPart->mTranslateMaxFrame; - if (getFrame() < 0) { + maxFrame = xPart->mTranslateMaxFrame; + if (mFrame < 0) { transformInfo->mTranslate.x = mTranslateValues[xPart->mTranslateOffset]; - } else if (getFrame() >= xMaxFrame) { - transformInfo->mTranslate.x = mTranslateValues[(xPart->mTranslateOffset + (xMaxFrame - 1))]; + } else if (mFrame >= maxFrame) { + transformInfo->mTranslate.x = mTranslateValues[(xPart->mTranslateOffset + (maxFrame - 1))]; } else { - transformInfo->mTranslate.x = mTranslateValues[(xPart->mTranslateOffset + (int)getFrame())]; + transformInfo->mTranslate.x = mTranslateValues[(xPart->mTranslateOffset + (int)mFrame)]; } - yMaxFrame = yPart->mTranslateMaxFrame; - if (getFrame() < 0) { + maxFrame = yPart->mTranslateMaxFrame; + if (mFrame < 0) { transformInfo->mTranslate.y = mTranslateValues[yPart->mTranslateOffset]; - } else if (getFrame() >= yMaxFrame) { - transformInfo->mTranslate.y = mTranslateValues[(yPart->mTranslateOffset + (yMaxFrame - 1))]; + } else if (mFrame >= maxFrame) { + transformInfo->mTranslate.y = mTranslateValues[(yPart->mTranslateOffset + (maxFrame - 1))]; } else { - transformInfo->mTranslate.y = mTranslateValues[(yPart->mTranslateOffset + (int)getFrame())]; + transformInfo->mTranslate.y = mTranslateValues[(yPart->mTranslateOffset + (int)mFrame)]; } - zMaxFrame = zPart->mTranslateMaxFrame; - if (getFrame() < 0) { + maxFrame = zPart->mTranslateMaxFrame; + if (mFrame < 0) { transformInfo->mTranslate.z = mTranslateValues[zPart->mTranslateOffset]; - } else if (getFrame() >= zMaxFrame) { - transformInfo->mTranslate.z = mTranslateValues[(zPart->mTranslateOffset + (zMaxFrame - 1))]; + } else if (mFrame >= maxFrame) { + transformInfo->mTranslate.z = mTranslateValues[(zPart->mTranslateOffset + (maxFrame - 1))]; } else { - transformInfo->mTranslate.z = mTranslateValues[(zPart->mTranslateOffset + (int)getFrame())]; + transformInfo->mTranslate.z = mTranslateValues[(zPart->mTranslateOffset + (int)mFrame)]; } } void J2DAnmTransformKey::calcTransform(f32 param_0, u16 param_1, J3DTransformInfo* transformInfo) const { + J3D_PANIC(268, param_1 < field_0x22, "Error : range over."); + J3D_PANIC(269, transformInfo, "Error : null pointer."); u16 idx = param_1 * 3; J3DAnmTransformKeyTable* xInf = &mInfoTable[idx]; J3DAnmTransformKeyTable* yInf = &mInfoTable[idx + 1]; @@ -103,7 +151,7 @@ void J2DAnmTransformKey::calcTransform(f32 param_0, u16 param_1, transformInfo->mScale.x = mScaleValues[xInf->mScaleInfo.mOffset]; break; default: - transformInfo->mScale.x = J2DGetKeyFrameInterpolationf( + transformInfo->mScale.x = J2DGetKeyFrameInterpolation( param_0, &xInf->mScaleInfo, &mScaleValues[xInf->mScaleInfo.mOffset]); } switch (yInf->mScaleInfo.mMaxFrame) { @@ -114,7 +162,7 @@ void J2DAnmTransformKey::calcTransform(f32 param_0, u16 param_1, transformInfo->mScale.y = mScaleValues[yInf->mScaleInfo.mOffset]; break; default: - transformInfo->mScale.y = J2DGetKeyFrameInterpolationf( + transformInfo->mScale.y = J2DGetKeyFrameInterpolation( param_0, &yInf->mScaleInfo, &mScaleValues[yInf->mScaleInfo.mOffset]); } switch (zInf->mScaleInfo.mMaxFrame) { @@ -125,7 +173,7 @@ void J2DAnmTransformKey::calcTransform(f32 param_0, u16 param_1, transformInfo->mScale.z = mScaleValues[zInf->mScaleInfo.mOffset]; break; default: - transformInfo->mScale.z = J2DGetKeyFrameInterpolationf( + transformInfo->mScale.z = J2DGetKeyFrameInterpolation( param_0, &zInf->mScaleInfo, &mScaleValues[zInf->mScaleInfo.mOffset]); } switch (xInf->mRotationInfo.mMaxFrame) { @@ -137,7 +185,7 @@ void J2DAnmTransformKey::calcTransform(f32 param_0, u16 param_1, break; default: transformInfo->mRotation.x = - static_cast(J2DGetKeyFrameInterpolations( + static_cast(J2DGetKeyFrameInterpolation( param_0, &xInf->mRotationInfo, &mRotationValues[xInf->mRotationInfo.mOffset])) << field_0x24; } @@ -150,7 +198,7 @@ void J2DAnmTransformKey::calcTransform(f32 param_0, u16 param_1, break; default: transformInfo->mRotation.y = - static_cast(J2DGetKeyFrameInterpolations( + static_cast(J2DGetKeyFrameInterpolation( param_0, &yInf->mRotationInfo, &mRotationValues[yInf->mRotationInfo.mOffset])) << field_0x24; } @@ -163,7 +211,7 @@ void J2DAnmTransformKey::calcTransform(f32 param_0, u16 param_1, break; default: transformInfo->mRotation.z = - static_cast(J2DGetKeyFrameInterpolations( + static_cast(J2DGetKeyFrameInterpolation( param_0, &zInf->mRotationInfo, &mRotationValues[zInf->mRotationInfo.mOffset])) << field_0x24; } @@ -175,7 +223,7 @@ void J2DAnmTransformKey::calcTransform(f32 param_0, u16 param_1, transformInfo->mTranslate.x = mTranslateValues[xInf->mTranslateInfo.mOffset]; break; default: - transformInfo->mTranslate.x = J2DGetKeyFrameInterpolationf( + transformInfo->mTranslate.x = J2DGetKeyFrameInterpolation( param_0, &xInf->mTranslateInfo, &mTranslateValues[xInf->mTranslateInfo.mOffset]); } switch (yInf->mTranslateInfo.mMaxFrame) { @@ -186,7 +234,7 @@ void J2DAnmTransformKey::calcTransform(f32 param_0, u16 param_1, transformInfo->mTranslate.y = mTranslateValues[yInf->mTranslateInfo.mOffset]; break; default: - transformInfo->mTranslate.y = J2DGetKeyFrameInterpolationf( + transformInfo->mTranslate.y = J2DGetKeyFrameInterpolation( param_0, &yInf->mTranslateInfo, &mTranslateValues[yInf->mTranslateInfo.mOffset]); } switch (zInf->mTranslateInfo.mMaxFrame) { @@ -197,7 +245,7 @@ void J2DAnmTransformKey::calcTransform(f32 param_0, u16 param_1, transformInfo->mTranslate.z = mTranslateValues[zInf->mTranslateInfo.mOffset]; break; default: - transformInfo->mTranslate.z = J2DGetKeyFrameInterpolationf( + transformInfo->mTranslate.z = J2DGetKeyFrameInterpolation( param_0, &zInf->mTranslateInfo, &mTranslateValues[zInf->mTranslateInfo.mOffset]); } } @@ -216,42 +264,46 @@ void J2DAnmColor::searchUpdateMaterialID(J2DScreen* pScreen) { } void J2DAnmColorFull::getColor(u16 param_0, _GXColor* pColor) const { + J3D_PANIC(432, param_0 < mUpdateMaterialNum, "Error : range over."); + J3D_PANIC(433, pColor, "Error : null pointer."); J3DAnmColorFullTable* info = &mInfoTable[param_0]; u16 maxFrame = info->mRMaxFrame; - if (getFrame() < 0) { + if (mFrame < 0) { pColor->r = mRValues[info->mROffset]; - } else if (getFrame() >= maxFrame) { + } else if (mFrame >= maxFrame) { pColor->r = mRValues[info->mROffset + (maxFrame - 1)]; } else { - pColor->r = mRValues[info->mROffset + (int)getFrame()]; + pColor->r = mRValues[info->mROffset + (int)mFrame]; } maxFrame = info->mGMaxFrame; - if (getFrame() < 0) { + if (mFrame < 0) { pColor->g = mGValues[info->mGOffset]; - } else if (getFrame() >= maxFrame) { + } else if (mFrame >= maxFrame) { pColor->g = mGValues[info->mGOffset + (maxFrame - 1)]; } else { - pColor->g = mGValues[info->mGOffset + (int)getFrame()]; + pColor->g = mGValues[info->mGOffset + (int)mFrame]; } maxFrame = info->mBMaxFrame; - if (getFrame() < 0) { + if (mFrame < 0) { pColor->b = mBValues[info->mBOffset]; - } else if (getFrame() >= maxFrame) { + } else if (mFrame >= maxFrame) { pColor->b = mBValues[info->mBOffset + (maxFrame - 1)]; } else { - pColor->b = mBValues[info->mBOffset + (int)getFrame()]; + pColor->b = mBValues[info->mBOffset + (int)mFrame]; } maxFrame = info->mAMaxFrame; - if (getFrame() < 0) { + if (mFrame < 0) { pColor->a = mAValues[info->mAOffset]; - } else if (getFrame() >= maxFrame) { + } else if (mFrame >= maxFrame) { pColor->a = mAValues[info->mAOffset + (maxFrame - 1)]; } else { - pColor->a = mAValues[info->mAOffset + (int)getFrame()]; + pColor->a = mAValues[info->mAOffset + (int)mFrame]; } } void J2DAnmColorKey::getColor(u16 param_0, _GXColor* pColor) const { + J3D_PANIC(490, param_0 < mUpdateMaterialNum, "Error : range over."); + J3D_PANIC(491, pColor, "Error : null pointer."); J3DAnmColorKeyTable* info = &mInfoTable[param_0]; f32 val; switch (info->mRInfo.mMaxFrame) { @@ -262,7 +314,7 @@ void J2DAnmColorKey::getColor(u16 param_0, _GXColor* pColor) const { pColor->r = mRValues[info->mRInfo.mOffset]; break; default: - val = J2DGetKeyFrameInterpolations(getFrame(), &info->mRInfo, + val = J2DGetKeyFrameInterpolation(mFrame, &info->mRInfo, &mRValues[info->mRInfo.mOffset]); if (val < 0) { pColor->r = 0; @@ -280,7 +332,7 @@ void J2DAnmColorKey::getColor(u16 param_0, _GXColor* pColor) const { pColor->g = mGValues[info->mGInfo.mOffset]; break; default: - val = J2DGetKeyFrameInterpolations(getFrame(), &info->mGInfo, + val = J2DGetKeyFrameInterpolation(mFrame, &info->mGInfo, &mGValues[info->mGInfo.mOffset]); if (val < 0) { pColor->g = 0; @@ -298,7 +350,7 @@ void J2DAnmColorKey::getColor(u16 param_0, _GXColor* pColor) const { pColor->b = mBValues[info->mBInfo.mOffset]; break; default: - val = J2DGetKeyFrameInterpolations(getFrame(), &info->mBInfo, + val = J2DGetKeyFrameInterpolation(mFrame, &info->mBInfo, &mBValues[info->mBInfo.mOffset]); if (val < 0) { pColor->b = 0; @@ -316,7 +368,7 @@ void J2DAnmColorKey::getColor(u16 param_0, _GXColor* pColor) const { pColor->a = mAValues[info->mAInfo.mOffset]; break; default: - val = J2DGetKeyFrameInterpolations(getFrame(), &info->mAInfo, + val = J2DGetKeyFrameInterpolation(mFrame, &info->mAInfo, &mAValues[info->mAInfo.mOffset]); if (val < 0) { pColor->a = 0; @@ -329,42 +381,44 @@ void J2DAnmColorKey::getColor(u16 param_0, _GXColor* pColor) const { } void J2DAnmVtxColorFull::getColor(u8 param_0, u16 param_1, _GXColor* pColor) const { + J3D_PANIC(597, pColor, "Error : null pointer."); J3DAnmColorFullTable* info = &mInfoTable[param_0][param_1]; u16 maxFrame = info->mRMaxFrame; - if (getFrame() < 0) { + if (mFrame < 0) { pColor->r = mRValues[info->mROffset]; - } else if (getFrame() >= maxFrame) { + } else if (mFrame >= maxFrame) { pColor->r = mRValues[info->mROffset + (maxFrame - 1)]; } else { - pColor->r = mRValues[info->mROffset + (int)getFrame()]; + pColor->r = mRValues[info->mROffset + (int)mFrame]; } maxFrame = info->mGMaxFrame; - if (getFrame() < 0) { + if (mFrame < 0) { pColor->g = mGValues[info->mGOffset]; - } else if (getFrame() >= maxFrame) { + } else if (mFrame >= maxFrame) { pColor->g = mGValues[info->mGOffset + (maxFrame - 1)]; } else { - pColor->g = mGValues[info->mGOffset + (int)getFrame()]; + pColor->g = mGValues[info->mGOffset + (int)mFrame]; } maxFrame = info->mBMaxFrame; - if (getFrame() < 0) { + if (mFrame < 0) { pColor->b = mBValues[info->mBOffset]; - } else if (getFrame() >= maxFrame) { + } else if (mFrame >= maxFrame) { pColor->b = mBValues[info->mBOffset + (maxFrame - 1)]; } else { - pColor->b = mBValues[info->mBOffset + (int)getFrame()]; + pColor->b = mBValues[info->mBOffset + (int)mFrame]; } maxFrame = info->mAMaxFrame; - if (getFrame() < 0) { + if (mFrame < 0) { pColor->a = mAValues[info->mAOffset]; - } else if (getFrame() >= maxFrame) { + } else if (mFrame >= maxFrame) { pColor->a = mAValues[info->mAOffset + (maxFrame - 1)]; } else { - pColor->a = mAValues[info->mAOffset + (int)getFrame()]; + pColor->a = mAValues[info->mAOffset + (int)mFrame]; } } void J2DAnmVtxColorKey::getColor(u8 param_0, u16 param_1, _GXColor* pColor) const { + J3D_PANIC(658, pColor, "Error : null pointer."); J3DAnmColorKeyTable* info = &mInfoTable[param_0][param_1]; f32 val; switch (info->mRInfo.mMaxFrame) { @@ -375,7 +429,7 @@ void J2DAnmVtxColorKey::getColor(u8 param_0, u16 param_1, _GXColor* pColor) cons pColor->r = mRValues[info->mRInfo.mOffset]; break; default: - val = J2DGetKeyFrameInterpolations(getFrame(), &info->mRInfo, + val = J2DGetKeyFrameInterpolation(mFrame, &info->mRInfo, &mRValues[info->mRInfo.mOffset]); if ((val <= 0)) { pColor->r = 0; @@ -393,7 +447,7 @@ void J2DAnmVtxColorKey::getColor(u8 param_0, u16 param_1, _GXColor* pColor) cons pColor->g = mGValues[info->mGInfo.mOffset]; break; default: - val = J2DGetKeyFrameInterpolations(getFrame(), &info->mGInfo, + val = J2DGetKeyFrameInterpolation(mFrame, &info->mGInfo, &mGValues[info->mGInfo.mOffset]); if (val <= 0) { pColor->g = 0; @@ -411,7 +465,7 @@ void J2DAnmVtxColorKey::getColor(u8 param_0, u16 param_1, _GXColor* pColor) cons pColor->b = mBValues[info->mBInfo.mOffset]; break; default: - val = J2DGetKeyFrameInterpolations(getFrame(), &info->mBInfo, + val = J2DGetKeyFrameInterpolation(mFrame, &info->mBInfo, &mBValues[info->mBInfo.mOffset]); if (val <= 0) { pColor->b = 0; @@ -429,7 +483,7 @@ void J2DAnmVtxColorKey::getColor(u8 param_0, u16 param_1, _GXColor* pColor) cons pColor->a = mAValues[info->mAInfo.mOffset]; break; default: - val = J2DGetKeyFrameInterpolations(getFrame(), &info->mAInfo, + val = J2DGetKeyFrameInterpolation(mFrame, &info->mAInfo, &mAValues[info->mAInfo.mOffset]); if (val <= 0) { pColor->a = 0; @@ -442,6 +496,8 @@ void J2DAnmVtxColorKey::getColor(u8 param_0, u16 param_1, _GXColor* pColor) cons } void J2DAnmTextureSRTKey::calcTransform(f32 param_0, u16 param_1, J3DTextureSRTInfo* pInfo) const { + J3D_PANIC(766, param_1 < mUpdateMaterialNum, "Error : range over."); + J3D_PANIC(767, pInfo, "Error : null pointer."); u16 idx = param_1 * 3; J3DAnmTransformKeyTable* xInf = &mInfoTable[idx]; J3DAnmTransformKeyTable* yInf = &mInfoTable[idx + 1]; @@ -454,7 +510,7 @@ void J2DAnmTextureSRTKey::calcTransform(f32 param_0, u16 param_1, J3DTextureSRTI pInfo->mScaleX = mScaleValues[xInf->mScaleInfo.mOffset]; break; default: - pInfo->mScaleX = J2DGetKeyFrameInterpolationf(param_0, &xInf->mScaleInfo, + pInfo->mScaleX = J2DGetKeyFrameInterpolation(param_0, &xInf->mScaleInfo, &mScaleValues[xInf->mScaleInfo.mOffset]); } switch (yInf->mScaleInfo.mMaxFrame) { @@ -465,7 +521,7 @@ void J2DAnmTextureSRTKey::calcTransform(f32 param_0, u16 param_1, J3DTextureSRTI pInfo->mScaleY = mScaleValues[yInf->mScaleInfo.mOffset]; break; default: - pInfo->mScaleY = J2DGetKeyFrameInterpolationf(param_0, &yInf->mScaleInfo, + pInfo->mScaleY = J2DGetKeyFrameInterpolation(param_0, &yInf->mScaleInfo, &mScaleValues[yInf->mScaleInfo.mOffset]); } switch (zInf->mRotationInfo.mMaxFrame) { @@ -477,7 +533,7 @@ void J2DAnmTextureSRTKey::calcTransform(f32 param_0, u16 param_1, J3DTextureSRTI break; default: pInfo->mRotation = - static_cast(J2DGetKeyFrameInterpolations( + static_cast(J2DGetKeyFrameInterpolation( param_0, &zInf->mRotationInfo, &mRotationValues[zInf->mRotationInfo.mOffset])) << field_0x10; } @@ -489,7 +545,7 @@ void J2DAnmTextureSRTKey::calcTransform(f32 param_0, u16 param_1, J3DTextureSRTI pInfo->mTranslationX = mTranslationValues[xInf->mTranslateInfo.mOffset]; break; default: - pInfo->mTranslationX = J2DGetKeyFrameInterpolationf( + pInfo->mTranslationX = J2DGetKeyFrameInterpolation( param_0, &xInf->mTranslateInfo, &mTranslationValues[xInf->mTranslateInfo.mOffset]); } switch (yInf->mTranslateInfo.mMaxFrame) { @@ -500,7 +556,7 @@ void J2DAnmTextureSRTKey::calcTransform(f32 param_0, u16 param_1, J3DTextureSRTI pInfo->mTranslationY = mTranslationValues[yInf->mTranslateInfo.mOffset]; break; default: - pInfo->mTranslationY = J2DGetKeyFrameInterpolationf( + pInfo->mTranslationY = J2DGetKeyFrameInterpolation( param_0, &yInf->mTranslateInfo, &mTranslationValues[yInf->mTranslateInfo.mOffset]); } } @@ -533,7 +589,7 @@ void J2DAnmTexPattern::searchUpdateMaterialID(J2DScreen* pScreen) { if (mTIMGPtrArray != NULL) { JUTResReference resRef; for (u16 i = 0; i < pScreen->mTexRes->mCount; i++) { - s8* var1 = pScreen->mTexRes->getResReference(i); + char* var1 = pScreen->mTexRes->getResReference(i); ResTIMG* var2 = NULL; if (var1 != NULL) { var2 = (ResTIMG*)resRef.getResource(var1, 'TIMG', NULL); @@ -544,11 +600,13 @@ void J2DAnmTexPattern::searchUpdateMaterialID(J2DScreen* pScreen) { } mTIMGPtrArray[i].mRes = var2; if (var2 != NULL && var2->indexTexture) { - JUTPalette* palette = - new JUTPalette(GX_TLUT0, (_GXTlutFmt)var2->colorFormat, - (JUTTransparency)var2->alphaEnabled, var2->numColors, - ((u8*)var2) + var2->paletteOffset); - mTIMGPtrArray[i].mPalette = palette; + mTIMGPtrArray[i].mPalette = new JUTPalette( + GX_TLUT0, + GXTlutFmt(var2->colorFormat), + JUTTransparency(var2->alphaEnabled), + var2->numColors, + ((u8*)var2) + var2->paletteOffset + ); } } } @@ -557,49 +615,56 @@ void J2DAnmTexPattern::searchUpdateMaterialID(J2DScreen* pScreen) { void J2DAnmTexPattern::getTexNo(u16 param_0, u16* pTexNo) const { u16 maxFrame = mAnmTable[param_0].mMaxFrame; - f32 frame = getFrame(); - if (frame < 0) { + J3D_PANIC(1024, param_0 < mUpdateMaterialNum, "Error : range over."); + J3D_PANIC(1025, pTexNo, "Error : null pointer."); + if (mFrame < 0) { *pTexNo = mValues[mAnmTable[param_0].mOffset]; - } else if (frame >= maxFrame) { + } else if (mFrame >= maxFrame) { *pTexNo = mValues[mAnmTable[param_0].mOffset + (maxFrame - 1)]; } else { - *pTexNo = mValues[mAnmTable[param_0].mOffset + (int)frame]; + *pTexNo = mValues[mAnmTable[param_0].mOffset + (int)mFrame]; } } ResTIMG* J2DAnmTexPattern::getResTIMG(u16 param_0) const { if (mTIMGPtrArray == NULL) { return NULL; - } else { - u16 texNo; - this->getTexNo(param_0, &texNo); - return mTIMGPtrArray[texNo].mRes; } + u16 maxFrame = mAnmTable[param_0].mMaxFrame; + J3D_PANIC(1053, param_0 < mUpdateMaterialNum, "Error : range over."); + + u16 texNo; + this->getTexNo(param_0, &texNo); + return mTIMGPtrArray[texNo].mRes; } JUTPalette* J2DAnmTexPattern::getPalette(u16 param_0) const { if (mTIMGPtrArray == NULL) { return NULL; - } else { - u16 texNo; - this->getTexNo(param_0, &texNo); - return mTIMGPtrArray[texNo].mPalette; } + u16 maxFrame = mAnmTable[param_0].mMaxFrame; + J3D_PANIC(1076, param_0 < mUpdateMaterialNum, "Error : range over."); + u16 texNo; + this->getTexNo(param_0, &texNo); + return mTIMGPtrArray[texNo].mPalette; } void J2DAnmVisibilityFull::getVisibility(u16 param_0, u8* pOut) const { u16 maxFrame = mTable[param_0]._0; - if (getFrame() < 0) { + J3D_PANIC(1094, param_0 < field_0x10, "Error : range over."); + J3D_PANIC(1095, pOut, "Error : null pointer."); + if (mFrame < 0) { *pOut = mValues[mTable[param_0]._2]; - } else if (getFrame() >= maxFrame) { + } else if (mFrame >= maxFrame) { *pOut = mValues[mTable[param_0]._2 + (maxFrame - 1)]; } else { - int frame = getFrame(); - *pOut = mValues[mTable[param_0]._2 + frame]; + *pOut = mValues[mTable[param_0]._2 + (int)mFrame]; } } -void J2DAnmTevRegKey::getTevColorReg(u16 param_0, _GXColorS10* pColor) const { +void J2DAnmTevRegKey::getTevColorReg(u16 param_0, GXColorS10* pColor) const { + J3D_PANIC(1116, param_0 < mCRegUpdateMaterialNum, "Error : range over."); + J3D_PANIC(1117, pColor, "Error : null pointer."); J3DAnmCRegKeyTable* info = &mAnmCRegKeyTable[param_0]; f32 val; switch (info->mRTable.mMaxFrame) { @@ -610,7 +675,7 @@ void J2DAnmTevRegKey::getTevColorReg(u16 param_0, _GXColorS10* pColor) const { pColor->r = mCRValues[info->mRTable.mOffset]; break; default: - val = J2DGetKeyFrameInterpolations(getFrame(), &info->mRTable, + val = J2DGetKeyFrameInterpolation(mFrame, &info->mRTable, &mCRValues[info->mRTable.mOffset]); if (val < -0x400) { pColor->r = -0x400; @@ -628,7 +693,7 @@ void J2DAnmTevRegKey::getTevColorReg(u16 param_0, _GXColorS10* pColor) const { pColor->g = mCGValues[info->mGTable.mOffset]; break; default: - val = J2DGetKeyFrameInterpolations(getFrame(), &info->mGTable, + val = J2DGetKeyFrameInterpolation(mFrame, &info->mGTable, &mCGValues[info->mGTable.mOffset]); if (val < -0x400) { pColor->g = -0x400; @@ -646,7 +711,7 @@ void J2DAnmTevRegKey::getTevColorReg(u16 param_0, _GXColorS10* pColor) const { pColor->b = mCBValues[info->mBTable.mOffset]; break; default: - val = J2DGetKeyFrameInterpolations(getFrame(), &info->mBTable, + val = J2DGetKeyFrameInterpolation(mFrame, &info->mBTable, &mCBValues[info->mBTable.mOffset]); if (val < -0x400) { pColor->b = -0x400; @@ -664,7 +729,7 @@ void J2DAnmTevRegKey::getTevColorReg(u16 param_0, _GXColorS10* pColor) const { pColor->a = mCAValues[info->mATable.mOffset]; break; default: - val = J2DGetKeyFrameInterpolations(getFrame(), &info->mATable, + val = J2DGetKeyFrameInterpolation(mFrame, &info->mATable, &mCAValues[info->mATable.mOffset]); if (val < -0x400) { pColor->a = -0x400; @@ -676,7 +741,9 @@ void J2DAnmTevRegKey::getTevColorReg(u16 param_0, _GXColorS10* pColor) const { } } -void J2DAnmTevRegKey::getTevKonstReg(u16 param_0, _GXColor* pColor) const { +void J2DAnmTevRegKey::getTevKonstReg(u16 param_0, GXColor* pColor) const { + J3D_PANIC(1222, param_0 < mKRegUpdateMaterialNum, "Error : range over."); + J3D_PANIC(1223, pColor, "Error : null pointer."); J3DAnmKRegKeyTable* info = &mAnmKRegKeyTable[param_0]; f32 val; switch (info->mRTable.mMaxFrame) { @@ -687,7 +754,7 @@ void J2DAnmTevRegKey::getTevKonstReg(u16 param_0, _GXColor* pColor) const { pColor->r = mKRValues[info->mRTable.mOffset]; break; default: - val = J2DGetKeyFrameInterpolations(getFrame(), &info->mRTable, + val = J2DGetKeyFrameInterpolation(mFrame, &info->mRTable, &mKRValues[info->mRTable.mOffset]); if (val < 0) { pColor->r = 0; @@ -705,7 +772,7 @@ void J2DAnmTevRegKey::getTevKonstReg(u16 param_0, _GXColor* pColor) const { pColor->g = mKGValues[info->mGTable.mOffset]; break; default: - val = J2DGetKeyFrameInterpolations(getFrame(), &info->mGTable, + val = J2DGetKeyFrameInterpolation(mFrame, &info->mGTable, &mKGValues[info->mGTable.mOffset]); if (val < 0) { pColor->g = 0; @@ -723,7 +790,7 @@ void J2DAnmTevRegKey::getTevKonstReg(u16 param_0, _GXColor* pColor) const { pColor->b = mKBValues[info->mBTable.mOffset]; break; default: - val = J2DGetKeyFrameInterpolations(getFrame(), &info->mBTable, + val = J2DGetKeyFrameInterpolation(mFrame, &info->mBTable, &mKBValues[info->mBTable.mOffset]); if (val < 0) { pColor->b = 0; @@ -741,7 +808,7 @@ void J2DAnmTevRegKey::getTevKonstReg(u16 param_0, _GXColor* pColor) const { pColor->a = mKAValues[info->mATable.mOffset]; break; default: - val = J2DGetKeyFrameInterpolations(getFrame(), &info->mATable, + val = J2DGetKeyFrameInterpolation(mFrame, &info->mATable, &mKAValues[info->mATable.mOffset]); if (val < 0) { pColor->a = 0; @@ -755,7 +822,7 @@ void J2DAnmTevRegKey::getTevKonstReg(u16 param_0, _GXColor* pColor) const { void J2DAnmTevRegKey::searchUpdateMaterialID(J2DScreen* pScreen) { if (pScreen != NULL && pScreen->mNameTable != NULL) { - for (u16 i = 0; i < mCRegUpdateMaterialNum; i++) { + for (u16 i = 0; i < getCRegUpdateMaterialNum(); i++) { s32 idx = pScreen->mNameTable->getIndex(mCRegNameTab.getName(i)); if (idx != -1) { mCRegUpdateMaterialID[i] = idx; @@ -763,7 +830,7 @@ void J2DAnmTevRegKey::searchUpdateMaterialID(J2DScreen* pScreen) { mCRegUpdateMaterialID[i] = 0xFFFF; } } - for (u16 i = 0; i < mKRegUpdateMaterialNum; i++) { + for (u16 i = 0; i < getKRegUpdateMaterialNum(); i++) { s32 idx = pScreen->mNameTable->getIndex(mKRegNameTab.getName(i)); if (idx != -1) { mKRegUpdateMaterialID[i] = idx; @@ -773,106 +840,3 @@ void J2DAnmTevRegKey::searchUpdateMaterialID(J2DScreen* pScreen) { } } } - -// should be J2DGetKeyFrameInterpolation -f32 J2DGetKeyFrameInterpolations(f32 param_0, J3DAnmKeyTableBase* param_1, s16* param_2) { - if (param_0 < param_2[0]) { - return param_2[1]; - } else { - if (param_1->mType == 0) { - if (param_2[(param_1->mMaxFrame - 1) * 3] <= param_0) { - return param_2[(param_1->mMaxFrame - 1) * 3 + 1]; - } else { - u32 tmp = param_1->mMaxFrame; - while (tmp > 1) { - u32 halfTmp = tmp / 2; - u32 upIdx = halfTmp * 3; - if (param_0 >= param_2[upIdx]) { - param_2 = param_2 + upIdx; - tmp -= halfTmp; - } else { - tmp = halfTmp; - } - } - return J2DHermiteInterpolation(param_0, ¶m_2[0], ¶m_2[1], ¶m_2[2], - ¶m_2[3], ¶m_2[4], ¶m_2[5]); - } - } else { - if (param_2[(param_1->mMaxFrame - 1) * 4] <= param_0) { - return param_2[(param_1->mMaxFrame - 1) * 4 + 1]; - } else { - u32 tmp = param_1->mMaxFrame; - while (tmp > 1) { - u32 halfTmp = tmp / 2; - u32 upIdx = halfTmp * 4; - if (param_0 >= param_2[upIdx]) { - param_2 = param_2 + upIdx; - tmp -= halfTmp; - } else { - tmp = halfTmp; - } - } - return J2DHermiteInterpolation(param_0, ¶m_2[0], ¶m_2[1], ¶m_2[3], - ¶m_2[4], ¶m_2[5], ¶m_2[6]); - } - } - } -} - -// should be J2DGetKeyFrameInterpolation -f32 J2DGetKeyFrameInterpolationf(f32 param_0, J3DAnmKeyTableBase* param_1, f32* param_2) { - if (param_0 < param_2[0]) { - return param_2[1]; - } else { - if (param_1->mType == 0) { - if (param_2[(param_1->mMaxFrame - 1) * 3] <= param_0) { - return param_2[(param_1->mMaxFrame - 1) * 3 + 1]; - } else { - u32 tmp = param_1->mMaxFrame; - while (tmp > 1) { - u32 halfTmp = tmp / 2; - u32 upIdx = halfTmp * 3; - if (param_0 >= param_2[upIdx]) { - param_2 = param_2 + upIdx; - tmp -= halfTmp; - } else { - tmp = halfTmp; - } - } - return J2DHermiteInterpolation(param_0, ¶m_2[0], ¶m_2[1], ¶m_2[2], - ¶m_2[3], ¶m_2[4], ¶m_2[5]); - } - } else { - if (param_2[(param_1->mMaxFrame - 1) * 4] <= param_0) { - return param_2[(param_1->mMaxFrame - 1) * 4 + 1]; - } else { - u32 tmp = param_1->mMaxFrame; - while (tmp > 1) { - u32 halfTmp = tmp / 2; - u32 upIdx = halfTmp * 4; - if (param_0 >= param_2[upIdx]) { - param_2 = param_2 + upIdx; - tmp -= halfTmp; - } else { - tmp = halfTmp; - } - } - return J2DHermiteInterpolation(param_0, ¶m_2[0], ¶m_2[1], ¶m_2[3], - ¶m_2[4], ¶m_2[5], ¶m_2[6]); - } - } - } -} - -J2DAnmTexPattern::J2DAnmTexPatternTIMGPointer::J2DAnmTexPatternTIMGPointer() { - mRes = NULL; - mPalette = NULL; -} - -J2DAnmTexPattern::J2DAnmTexPatternTIMGPointer::~J2DAnmTexPatternTIMGPointer() { - delete mPalette; -} - -static void dummyDelete(J2DAnmTexPattern* pattern) { - delete pattern; -} diff --git a/src/JSystem/J2DGraph/J2DAnmLoader.cpp b/src/JSystem/J2DGraph/J2DAnmLoader.cpp index 4e6f6b065e..9dda6c1f9b 100644 --- a/src/JSystem/J2DGraph/J2DAnmLoader.cpp +++ b/src/JSystem/J2DGraph/J2DAnmLoader.cpp @@ -9,8 +9,9 @@ J2DAnmBase* J2DAnmLoaderDataBase::load(void const* p_data) { const J3DAnmDataHeader* hdr = (const J3DAnmDataHeader*)p_data; + J3D_PANIC(38, p_data, "Error : null pointer."); - if (hdr == NULL) { + if (p_data == NULL) { return NULL; } else if (hdr->mMagic == 'J3D1') { switch (hdr->mType) { @@ -27,6 +28,7 @@ J2DAnmBase* J2DAnmLoaderDataBase::load(void const* p_data) { break; } case 'blk1': + OS_REPORT("J2DAnmLoader: this is a J3D Binary that cannot use J2D.\n"); return NULL; case 'btk1': { J2DAnmKeyLoader_v15 loader; @@ -70,24 +72,32 @@ J2DAnmBase* J2DAnmLoaderDataBase::load(void const* p_data) { break; } case 'bla1': + OS_REPORT("J2DAnmLoader: this is a J3D Binary that cannot use J2D.\n"); return NULL; case 'bxa1': { J2DAnmFullLoader_v15 loader; loader.mpResource = new J2DAnmVtxColorFull(); return (J2DAnmBase*)loader.load(p_data); } + default: + OS_REPORT("J2DAnmLoader: this is not a J3D Binary.\n"); + return NULL; } - return NULL; } else { return NULL; } } +static void dummy() { + OS_REPORT("J3DAnmLoader: this is not a J3D Binary.\n"); +} + J2DAnmKeyLoader_v15::J2DAnmKeyLoader_v15() {} J2DAnmKeyLoader_v15::~J2DAnmKeyLoader_v15() {} void* J2DAnmKeyLoader_v15::load(void const* p_data) { + J3D_PANIC(317, p_data, "Error : null pointer."); const J3DAnmDataHeader* hdr = (const J3DAnmDataHeader*)p_data; const J3DAnmDataBlockHeader* dataPtr = &hdr->mFirst; @@ -108,6 +118,9 @@ void* J2DAnmKeyLoader_v15::load(void const* p_data) { case 'TRK1': readAnmTevReg((J3DAnmTevRegKeyData*)dataPtr); break; + default: + OS_REPORT("Unknown data block\n"); + break; } dataPtr = (J3DAnmDataBlockHeader*)((s32)dataPtr + dataPtr->mNextOffset); } @@ -116,6 +129,7 @@ void* J2DAnmKeyLoader_v15::load(void const* p_data) { } void J2DAnmKeyLoader_v15::setResource(J2DAnmBase* p_anm, void const* p_data) { + J3D_PANIC(355, p_data, "Error : null pointer."); const J3DAnmDataHeader* hdr = (const J3DAnmDataHeader*)p_data; const J3DAnmDataBlockHeader* dataPtr = &hdr->mFirst; @@ -147,17 +161,23 @@ void J2DAnmKeyLoader_v15::setResource(J2DAnmBase* p_anm, void const* p_data) { setAnmVtxColor((J2DAnmVtxColorKey*)p_anm, (J3DAnmVtxColorKeyData*)dataPtr); } break; + default: + OS_REPORT("Unknown data block\n"); + break; } dataPtr = (J3DAnmDataBlockHeader*)((s32)dataPtr + dataPtr->mNextOffset); } } void J2DAnmKeyLoader_v15::readAnmTransform(J3DAnmTransformKeyData const* p_data) { - setAnmTransform((J2DAnmTransformKey*)mpResource, p_data); + J2DAnmTransformKey* p_anm = (J2DAnmTransformKey*)mpResource; + setAnmTransform(p_anm, p_data); } void J2DAnmKeyLoader_v15::setAnmTransform(J2DAnmTransformKey* p_anm, J3DAnmTransformKeyData const* p_data) { + J3D_PANIC(439, p_anm, "Error : null pointer."); + J3D_PANIC(440, p_data, "Error : null pointer."); p_anm->field_0x22 = p_data->field_0xc; p_anm->mFrameMax = p_data->mFrameMax; p_anm->field_0x4 = p_data->field_0x8; @@ -172,11 +192,14 @@ void J2DAnmKeyLoader_v15::setAnmTransform(J2DAnmTransformKey* p_anm, } void J2DAnmKeyLoader_v15::readAnmTextureSRT(J3DAnmTextureSRTKeyData const* p_data) { - setAnmTextureSRT((J2DAnmTextureSRTKey*)mpResource, p_data); + J2DAnmTextureSRTKey* p_anm = (J2DAnmTextureSRTKey*)mpResource; + setAnmTextureSRT(p_anm, p_data); } void J2DAnmKeyLoader_v15::setAnmTextureSRT(J2DAnmTextureSRTKey* p_anm, J3DAnmTextureSRTKeyData const* p_data) { + J3D_PANIC(480, p_anm, "Error : null pointer."); + J3D_PANIC(481, p_data, "Error : null pointer."); p_anm->mUpdateMaterialNum = p_data->field_0xc; p_anm->mFrameMax = p_data->field_0xa; p_anm->field_0x4 = p_data->field_0x8; @@ -226,10 +249,13 @@ void J2DAnmKeyLoader_v15::setAnmTextureSRT(J2DAnmTextureSRTKey* p_anm, } void J2DAnmKeyLoader_v15::readAnmColor(J3DAnmColorKeyData const* p_data) { - setAnmColor((J2DAnmColorKey*)mpResource, p_data); + J2DAnmColorKey* p_anm = (J2DAnmColorKey*)mpResource; + setAnmColor(p_anm, p_data); } void J2DAnmKeyLoader_v15::setAnmColor(J2DAnmColorKey* p_anm, J3DAnmColorKeyData const* p_data) { + J3D_PANIC(573, p_anm, "Error : null pointer."); + J3D_PANIC(574, p_data, "Error : null pointer."); p_anm->mFrameMax = p_data->mFrameMax; p_anm->field_0x4 = p_data->field_0x8; p_anm->mFrame = 0; @@ -251,11 +277,14 @@ void J2DAnmKeyLoader_v15::setAnmColor(J2DAnmColorKey* p_anm, J3DAnmColorKeyData } void J2DAnmKeyLoader_v15::readAnmVtxColor(J3DAnmVtxColorKeyData const* p_data) { - setAnmVtxColor((J2DAnmVtxColorKey*)mpResource, p_data); + J2DAnmVtxColorKey* p_anm = (J2DAnmVtxColorKey*)mpResource; + setAnmVtxColor(p_anm, p_data); } void J2DAnmKeyLoader_v15::setAnmVtxColor(J2DAnmVtxColorKey* p_anm, J3DAnmVtxColorKeyData const* p_data) { + J3D_PANIC(628, p_anm, "Error : null pointer."); + J3D_PANIC(629, p_data, "Error : null pointer."); p_anm->mFrameMax = p_data->mFrameMax; p_anm->field_0x4 = p_data->field_0x8; p_anm->mFrame = 0; @@ -280,6 +309,7 @@ void J2DAnmKeyLoader_v15::setAnmVtxColor(J2DAnmVtxColorKey* p_anm, } void* J2DAnmFullLoader_v15::load(void const* p_data) { + J3D_PANIC(670, p_data, "Error : null pointer."); const J3DAnmDataHeader* hdr = (const J3DAnmDataHeader*)p_data; const J3DAnmDataBlockHeader* dataPtr = &hdr->mFirst; @@ -300,6 +330,9 @@ void* J2DAnmFullLoader_v15::load(void const* p_data) { case 'VCF1': readAnmVtxColor((J3DAnmVtxColorFullData*)dataPtr); break; + default: + OS_REPORT("Unknown data block\n"); + break; } dataPtr = (J3DAnmDataBlockHeader*)((s32)dataPtr + dataPtr->mNextOffset); } @@ -307,6 +340,7 @@ void* J2DAnmFullLoader_v15::load(void const* p_data) { } void J2DAnmFullLoader_v15::setResource(J2DAnmBase* p_anm, void const* p_data) { + J3D_PANIC(710, p_data, "Error : null pointer."); const J3DAnmDataHeader* hdr = (const J3DAnmDataHeader*)p_data; const J3DAnmDataBlockHeader* dataPtr = &hdr->mFirst; @@ -334,6 +368,9 @@ void J2DAnmFullLoader_v15::setResource(J2DAnmBase* p_anm, void const* p_data) { if (p_anm->getKind() == KIND_VTX_COLOR) setAnmVtxColor((J2DAnmVtxColorFull*)p_anm, (J3DAnmVtxColorFullData*)dataPtr); break; + default: + OS_REPORT("Unknown data block\n"); + break; } dataPtr = (J3DAnmDataBlockHeader*)((s32)dataPtr + dataPtr->mNextOffset); } @@ -344,11 +381,14 @@ J2DAnmFullLoader_v15::J2DAnmFullLoader_v15() {} J2DAnmFullLoader_v15::~J2DAnmFullLoader_v15() {} void J2DAnmFullLoader_v15::readAnmTransform(J3DAnmTransformFullData const* p_data) { - setAnmTransform((J2DAnmTransformFull*)mpResource, p_data); + J2DAnmTransformFull* p_anm = (J2DAnmTransformFull*)mpResource; + setAnmTransform(p_anm, p_data); } void J2DAnmFullLoader_v15::setAnmTransform(J2DAnmTransformFull* p_anm, J3DAnmTransformFullData const* p_data) { + J3D_PANIC(813, p_anm, "Error : null pointer."); + J3D_PANIC(814, p_data, "Error : null pointer."); p_anm->field_0x22 = p_data->field_0xc; p_anm->mFrameMax = p_data->mFrameMax; p_anm->field_0x4 = p_data->field_0x8; @@ -361,10 +401,13 @@ void J2DAnmFullLoader_v15::setAnmTransform(J2DAnmTransformFull* p_anm, } void J2DAnmFullLoader_v15::readAnmColor(J3DAnmColorFullData const* p_data) { - setAnmColor((J2DAnmColorFull*)mpResource, p_data); + J2DAnmColorFull* p_anm = (J2DAnmColorFull*)mpResource; + setAnmColor(p_anm, p_data); } void J2DAnmFullLoader_v15::setAnmColor(J2DAnmColorFull* p_anm, J3DAnmColorFullData const* p_data) { + J3D_PANIC(857, p_anm, "Error : null pointer."); + J3D_PANIC(858, p_data, "Error : null pointer."); p_anm->mFrameMax = p_data->mFrameMax; p_anm->field_0x4 = p_data->field_0x8; p_anm->mFrame = 0; @@ -382,11 +425,14 @@ void J2DAnmFullLoader_v15::setAnmColor(J2DAnmColorFull* p_anm, J3DAnmColorFullDa } void J2DAnmFullLoader_v15::readAnmTexPattern(J3DAnmTexPatternFullData const* p_data) { - setAnmTexPattern((J2DAnmTexPattern*)mpResource, p_data); + J2DAnmTexPattern* p_anm = (J2DAnmTexPattern*)mpResource; + setAnmTexPattern(p_anm, p_data); } void J2DAnmFullLoader_v15::setAnmTexPattern(J2DAnmTexPattern* p_anm, J3DAnmTexPatternFullData const* p_data) { + J3D_PANIC(906, p_anm, "Error : null pointer."); + J3D_PANIC(907, p_data, "Error : null pointer."); p_anm->mFrameMax = p_data->mFrameMax; p_anm->field_0x4 = p_data->field_0x8; p_anm->mFrame = 0; @@ -402,10 +448,13 @@ void J2DAnmFullLoader_v15::setAnmTexPattern(J2DAnmTexPattern* p_anm, } void J2DAnmKeyLoader_v15::readAnmTevReg(J3DAnmTevRegKeyData const* p_data) { - setAnmTevReg((J2DAnmTevRegKey*)mpResource, p_data); + J2DAnmTevRegKey* p_anm = (J2DAnmTevRegKey*)mpResource; + setAnmTevReg(p_anm, p_data); } void J2DAnmKeyLoader_v15::setAnmTevReg(J2DAnmTevRegKey* p_anm, J3DAnmTevRegKeyData const* p_data) { + J3D_PANIC(955, p_anm, "Error : null pointer."); + J3D_PANIC(956, p_data, "Error : null pointer."); p_anm->mFrameMax = p_data->mFrameMax; p_anm->field_0x4 = p_data->field_0x8; p_anm->mFrame = 0; @@ -442,11 +491,14 @@ void J2DAnmKeyLoader_v15::setAnmTevReg(J2DAnmTevRegKey* p_anm, J3DAnmTevRegKeyDa } void J2DAnmFullLoader_v15::readAnmVisibility(J3DAnmVisibilityFullData const* p_data) { - setAnmVisibility((J2DAnmVisibilityFull*)mpResource, p_data); + J2DAnmVisibilityFull* p_anm = (J2DAnmVisibilityFull*)mpResource; + setAnmVisibility(p_anm, p_data); } void J2DAnmFullLoader_v15::setAnmVisibility(J2DAnmVisibilityFull* p_anm, J3DAnmVisibilityFullData const* p_data) { + J3D_PANIC(1025, p_anm, "Error : null pointer."); + J3D_PANIC(1026, p_data, "Error : null pointer."); p_anm->mFrameMax = p_data->mFrameMax; p_anm->field_0x4 = p_data->field_0x8; p_anm->mFrame = 0; @@ -458,11 +510,14 @@ void J2DAnmFullLoader_v15::setAnmVisibility(J2DAnmVisibilityFull* p_anm, } void J2DAnmFullLoader_v15::readAnmVtxColor(J3DAnmVtxColorFullData const* p_data) { - setAnmVtxColor((J2DAnmVtxColorFull*)mpResource, p_data); + J2DAnmVtxColorFull* p_anm = (J2DAnmVtxColorFull*)mpResource; + setAnmVtxColor(p_anm, p_data); } void J2DAnmFullLoader_v15::setAnmVtxColor(J2DAnmVtxColorFull* p_anm, J3DAnmVtxColorFullData const* p_data) { + J3D_PANIC(1070, p_anm, "Error : null pointer."); + J3D_PANIC(1071, p_data, "Error : null pointer."); p_anm->mFrameMax = p_data->mFrameMax; p_anm->field_0x4 = p_data->field_0x8; p_anm->mFrame = 0; diff --git a/src/JSystem/J2DGraph/J2DManage.cpp b/src/JSystem/J2DGraph/J2DManage.cpp index 10758a8268..19a04db031 100644 --- a/src/JSystem/J2DGraph/J2DManage.cpp +++ b/src/JSystem/J2DGraph/J2DManage.cpp @@ -5,7 +5,8 @@ #include void* J2DDataManage::get(char const* name) { - for (J2DataManageLink* link = mList; link != NULL; link = link->mNext) { + J2DataManageLink* link; + for (link = mList; link != NULL; link = link->mNext) { if (strcmp(link->mName, name) == 0) { return link->mData; } @@ -19,26 +20,26 @@ void* J2DDataManage::get(JSUInputStream* inputStream) { if (nameLen == 0) { return NULL; - } else { - char nameBuffer[257]; - inputStream->read(&nameBuffer, nameLen); - nameBuffer[nameLen] = 0; - return this->get(nameBuffer); } + + char nameBuffer[257]; + inputStream->read(&nameBuffer, nameLen); + nameBuffer[nameLen] = 0; + return this->get(nameBuffer); } -s8* J2DResReference::getResReference(u16 idx) const { +char* J2DResReference::getResReference(u16 idx) const { if (mCount <= idx || idx == 0xFFFF) { return NULL; - } else { - return (((s8*)this) + mOffsets[idx]); } + u16 offset = mOffsets[idx]; + return ((char*)this) + offset; } char* J2DResReference::getName(u16 idx) const { static char p_name[257]; - s8* resRef = this->getResReference(idx); + char* resRef = (char*)this->getResReference(idx); if (resRef == NULL) { p_name[0] = 0; diff --git a/src/JSystem/J2DGraph/J2DMatBlock.cpp b/src/JSystem/J2DGraph/J2DMatBlock.cpp index b7e34c8338..f8f530924a 100644 --- a/src/JSystem/J2DGraph/J2DMatBlock.cpp +++ b/src/JSystem/J2DGraph/J2DMatBlock.cpp @@ -76,11 +76,13 @@ void J2DTexGenBlock::setTexMtx(u32 param_0, J2DTexMtx& param_1) { void J2DTexGenBlock::getTexMtx(u32 param_0, J2DTexMtx& param_1) { J3D_PANIC(123, param_0 < 8, "Error : range over."); - - if (mTexMtx[param_0]) { - J2DTexMtxInfo& texMtxInfo = mTexMtx[param_0]->getTexMtxInfo(); - param_1.setTexMtxInfo(texMtxInfo); + + if (!mTexMtx[param_0]) { + return; } + + J2DTexMtxInfo& texMtxInfo = mTexMtx[param_0]->getTexMtxInfo(); + param_1.setTexMtxInfo(texMtxInfo); } JUTTexture* J2DTevBlock::getTexture(u32) { @@ -349,6 +351,7 @@ void J2DTevBlock1::shiftDeleteFlag(u8, bool) { void J2DTevBlock1::setGX() { loadTexture(GX_TEXMAP0, 0); + (void)bool(mFont); GXSetTevOrder(GX_TEVSTAGE0, (GXTexCoordID)mTevOrder[0].getTexCoord(), (GXTexMapID)mTevOrder[0].getTexMap(), (GXChannelID)mTevOrder[0].getColor()); for (int i = 0; i < 4; i++) { @@ -366,10 +369,10 @@ void J2DTevBlock1::setGX() { GXTevAlphaArg(mTevStage[0].getAlphaD())); GXSetTevColorOp(GX_TEVSTAGE0, GXTevOp(mTevStage[0].getCOp()), GXTevBias(mTevStage[0].getCBias()), GXTevScale(mTevStage[0].getCScale()), - mTevStage[0].getCClamp(), GXTevRegID(mTevStage[0].getCReg())); + GXBool(mTevStage[0].getCClamp()), GXTevRegID(mTevStage[0].getCReg())); GXSetTevAlphaOp(GX_TEVSTAGE0, (GXTevOp)mTevStage[0].getAOp(), GXTevBias(mTevStage[0].getABias()), GXTevScale(mTevStage[0].getAScale()), - mTevStage[0].getAClamp(), GXTevRegID(mTevStage[0].getAReg())); + GXBool(mTevStage[0].getAClamp()), GXTevRegID(mTevStage[0].getAReg())); GXSetTevKColorSel(GX_TEVSTAGE0, mTevKColorSel[0] != 0xff ? GXTevKColorSel(mTevKColorSel[0]) : GX_TEV_KCSEL_1); GXSetTevKAlphaSel(GX_TEVSTAGE0, mTevKAlphaSel[0] != 0xff ? GXTevKAlphaSel(mTevKAlphaSel[0]) : GX_TEV_KASEL_1); for (int i = 0; i < 4; i++) { @@ -483,28 +486,27 @@ bool J2DTevBlock2::insertTexture(u32 param_0, ResTIMG const* p_timg, JUTPalette* return false; } - JUTTexture* tex; u8 tlutid = 0; - if (p_timg->indexTexture && p_tlut == NULL) { - tex = mTexture[0]; - if (tex != NULL && tex->getTexInfo() != NULL && tex->getTexInfo()->indexTexture) { - int tlutname = tex->getTlutName(); + if (p_timg->indexTexture && p_tlut == NULL && mTexture[0] != NULL) { + const ResTIMG* timg = mTexture[0]->getTexInfo(); + if (timg != NULL && timg->indexTexture) { + int tlutname = mTexture[0]->getTlutName(); if (tlutname == GX_TLUT0 || tlutname == GX_BIGTLUT0) { tlutid = 1; } } } - tex = mTexture[texNo]; - if (tex == NULL) { - JUTTexture* newtex = new JUTTexture(p_timg, tlutid); + JUTTexture* tex; + if (mTexture[texNo] == NULL) { + tex = new JUTTexture(p_timg, tlutid); - if (newtex == NULL) { + if (tex == NULL) { return false; } if (p_tlut != NULL) { - newtex->storeTIMG(p_timg, p_tlut); + tex->storeTIMG(p_timg, p_tlut); } if (param_0 == 0) { @@ -512,10 +514,11 @@ bool J2DTevBlock2::insertTexture(u32 param_0, ResTIMG const* p_timg, JUTPalette* mPalette[1] = mPalette[0]; mTexNo[1] = mTexNo[0]; } - mTexture[param_0] = newtex; + mTexture[param_0] = tex; shiftDeleteFlag(param_0, true); mUndeleteFlag |= (1 << param_0); } else { + tex = mTexture[texNo]; if (p_tlut == NULL) { tex->storeTIMG(p_timg, tlutid); } else { @@ -604,9 +607,8 @@ bool J2DTevBlock2::setTexture(u32 param_0, ResTIMG const* p_timg) { const ResTIMG* timg = mTexture[idx]->getTexInfo(); if (timg != NULL && timg->indexTexture) { int tlutname = mTexture[idx]->getTlutName(); - u8 tlut_no = tlutname - (tlutname >= GX_BIGTLUT0 ? GX_BIGTLUT0 : GX_TLUT0); - if (tlut_no == 0) { + if (u8(tlutname - (tlutname >= GX_BIGTLUT0 ? GX_BIGTLUT0 : GX_TLUT0)) == 0) { tlutid = 1; } } @@ -763,7 +765,7 @@ void J2DTevBlock2::shiftDeleteFlag(u8 param_0, bool param_1) { mUndeleteFlag = (mUndeleteFlag & ((1 << param_0) - 1)) | ((mUndeleteFlag & ~((1 << (param_0 + 1)) - 1)) >> 1); } - mUndeleteFlag = (mUndeleteFlag | tmpFlags) & 0xFF; + mUndeleteFlag = u8(mUndeleteFlag | tmpFlags); } void J2DTevBlock2::setGX() { @@ -771,6 +773,8 @@ void J2DTevBlock2::setGX() { loadTexture(GXTexMapID(i), i); } + (void)bool(mFont); + for (int i = 0; i < mTevStageNum; i++) { GXSetTevOrder(GXTevStageID(i), (GXTexCoordID)mTevOrder[i].getTexCoord(), (GXTexMapID)mTevOrder[i].getTexMap(), (GXChannelID)mTevOrder[i].getColor()); } @@ -791,10 +795,10 @@ void J2DTevBlock2::setGX() { GXTevAlphaArg(mTevStage[i].getAlphaD())); GXSetTevColorOp(GXTevStageID(i), GXTevOp(mTevStage[i].getCOp()), GXTevBias(mTevStage[i].getCBias()), GXTevScale(mTevStage[i].getCScale()), - mTevStage[i].getCClamp(), GXTevRegID(mTevStage[i].getCReg())); + GXBool(mTevStage[i].getCClamp()), GXTevRegID(mTevStage[i].getCReg())); GXSetTevAlphaOp(GXTevStageID(i), (GXTevOp)mTevStage[i].getAOp(), GXTevBias(mTevStage[i].getABias()), GXTevScale(mTevStage[i].getAScale()), - mTevStage[i].getAClamp(), GXTevRegID(mTevStage[i].getAReg())); + GXBool(mTevStage[i].getAClamp()), GXTevRegID(mTevStage[i].getAReg())); GXSetTevKColorSel(GXTevStageID(i), mTevKColorSel[i] != 0xff ? GXTevKColorSel(mTevKColorSel[i]) : GX_TEV_KCSEL_1); GXSetTevKAlphaSel(GXTevStageID(i), mTevKAlphaSel[i] != 0xff ? GXTevKAlphaSel(mTevKAlphaSel[i]) : GX_TEV_KASEL_1); } @@ -943,8 +947,9 @@ bool J2DTevBlock4::insertTexture(u32 param_0, ResTIMG const* p_timg, JUTPalette* } } } + JUTTexture* texture; if (!mTexture[idx]) { - JUTTexture* texture = new JUTTexture(p_timg, local_43); + texture = new JUTTexture(p_timg, local_43); if (!texture) { return false; } @@ -960,7 +965,7 @@ bool J2DTevBlock4::insertTexture(u32 param_0, ResTIMG const* p_timg, JUTPalette* shiftDeleteFlag(param_0, true); mUndeleteFlag |= 1 << param_0; } else { - JUTTexture* texture = mTexture[idx]; + texture = mTexture[idx]; if (!p_tlut) { texture->storeTIMG(p_timg, local_43); } else { @@ -1037,10 +1042,9 @@ bool J2DTevBlock4::setTexture(u32 param_0, ResTIMG const* p_timg) { return false; } - u8 used_tlut; u8 tlutid = 0; if (p_timg != NULL && p_timg->indexTexture) { - used_tlut = 0; + u8 used_tlut = 0; for (int i = 0; i < 4; i++) { if (i != param_0 && mTexture[i] != NULL) { const ResTIMG* timg = mTexture[i]->getTexInfo(); @@ -1213,13 +1217,14 @@ void J2DTevBlock4::shiftDeleteFlag(u8 param_0, bool param_1) { mUndeleteFlag = (mUndeleteFlag & ((1 << param_0) - 1)) | ((mUndeleteFlag & ~((1 << (param_0 + 1)) - 1)) >> 1); } - mUndeleteFlag |= tmpFlags; + mUndeleteFlag = u8(mUndeleteFlag | tmpFlags); } void J2DTevBlock4::setGX() { for (int i = 0; i < 4; i++) { loadTexture(GXTexMapID(i), i); } + (void)bool(mFont); for (int i = 0; i < mTevStageNum; i++) { GXSetTevOrder(GXTevStageID(i), (GXTexCoordID)mTevOrder[i].getTexCoord(), (GXTexMapID)mTevOrder[i].getTexMap(), (GXChannelID)mTevOrder[i].getColor()); } @@ -1238,10 +1243,10 @@ void J2DTevBlock4::setGX() { GXTevAlphaArg(mTevStage[i].getAlphaD())); GXSetTevColorOp(GXTevStageID(i), GXTevOp(mTevStage[i].getCOp()), GXTevBias(mTevStage[i].getCBias()), GXTevScale(mTevStage[i].getCScale()), - mTevStage[i].getCClamp(), GXTevRegID(mTevStage[i].getCReg())); + GXBool(mTevStage[i].getCClamp()), GXTevRegID(mTevStage[i].getCReg())); GXSetTevAlphaOp(GXTevStageID(i), (GXTevOp)mTevStage[i].getAOp(), GXTevBias(mTevStage[i].getABias()), GXTevScale(mTevStage[i].getAScale()), - mTevStage[i].getAClamp(), GXTevRegID(mTevStage[i].getAReg())); + GXBool(mTevStage[i].getAClamp()), GXTevRegID(mTevStage[i].getAReg())); GXSetTevKColorSel(GXTevStageID(i), mTevKColorSel[i] != 0xff ? GXTevKColorSel(mTevKColorSel[i]) : GX_TEV_KCSEL_1); GXSetTevKAlphaSel(GXTevStageID(i), mTevKAlphaSel[i] != 0xff ? GXTevKAlphaSel(mTevKAlphaSel[i]) : GX_TEV_KASEL_1); } @@ -1387,8 +1392,9 @@ bool J2DTevBlock8::insertTexture(u32 param_0, ResTIMG const* p_timg, JUTPalette* } } } + JUTTexture* texture; if (!mTexture[idx]) { - JUTTexture* texture = new JUTTexture(p_timg, local_43); + texture = new JUTTexture(p_timg, local_43); if (!texture) { return false; } @@ -1404,7 +1410,7 @@ bool J2DTevBlock8::insertTexture(u32 param_0, ResTIMG const* p_timg, JUTPalette* shiftDeleteFlag(param_0, true); mUndeleteFlag |= 1 << param_0; } else { - JUTTexture* texture = mTexture[idx]; + texture = mTexture[idx]; if (!p_tlut) { texture->storeTIMG(p_timg, local_43); } else { @@ -1459,7 +1465,7 @@ bool J2DTevBlock8::insertTexture(u32 param_0, JUTTexture* p_tex) { delete mTexture[7]; } - mUndeleteFlag &= 0x7F; + mUndeleteFlag &= ~0x80; } for (u8 i = 7; i > param_0; i--) { @@ -1481,10 +1487,9 @@ bool J2DTevBlock8::setTexture(u32 param_0, ResTIMG const* p_timg) { return false; } - u8 used_tlut; u8 tlutid = 0; if (p_timg != NULL && p_timg->indexTexture) { - used_tlut = 0; + u8 used_tlut = 0; for (int i = 0; i < 8; i++) { if (i != param_0 && mTexture[i] != NULL) { const ResTIMG* timg = mTexture[i]->getTexInfo(); @@ -1659,6 +1664,7 @@ void J2DTevBlock8::setGX() { for (int i = 0; i < 8; i++) { loadTexture(GXTexMapID(i), i); } + (void)bool(mFont); for (int i = 0; i < mTevStageNum; i++) { GXSetTevOrder(GXTevStageID(i), (GXTexCoordID)mTevOrder[i].getTexCoord(), (GXTexMapID)mTevOrder[i].getTexMap(), (GXChannelID)mTevOrder[i].getColor()); } @@ -1677,10 +1683,10 @@ void J2DTevBlock8::setGX() { GXTevAlphaArg(mTevStage[i].getAlphaD())); GXSetTevColorOp(GXTevStageID(i), GXTevOp(mTevStage[i].getCOp()), GXTevBias(mTevStage[i].getCBias()), GXTevScale(mTevStage[i].getCScale()), - mTevStage[i].getCClamp(), GXTevRegID(mTevStage[i].getCReg())); + GXBool(mTevStage[i].getCClamp()), GXTevRegID(mTevStage[i].getCReg())); GXSetTevAlphaOp(GXTevStageID(i), (GXTevOp)mTevStage[i].getAOp(), GXTevBias(mTevStage[i].getABias()), GXTevScale(mTevStage[i].getAScale()), - mTevStage[i].getAClamp(), GXTevRegID(mTevStage[i].getAReg())); + GXBool(mTevStage[i].getAClamp()), GXTevRegID(mTevStage[i].getAReg())); GXSetTevKColorSel(GXTevStageID(i), mTevKColorSel[i] != 0xff ? GXTevKColorSel(mTevKColorSel[i]) : GX_TEV_KCSEL_1); GXSetTevKAlphaSel(GXTevStageID(i), mTevKAlphaSel[i] != 0xff ? GXTevKAlphaSel(mTevKAlphaSel[i]) : GX_TEV_KASEL_1); } @@ -1826,8 +1832,9 @@ bool J2DTevBlock16::insertTexture(u32 param_0, ResTIMG const* p_timg, JUTPalette } } } + JUTTexture* texture; if (!mTexture[idx]) { - JUTTexture* texture = new JUTTexture(p_timg, local_43); + texture = new JUTTexture(p_timg, local_43); if (!texture) { return false; } @@ -1843,7 +1850,7 @@ bool J2DTevBlock16::insertTexture(u32 param_0, ResTIMG const* p_timg, JUTPalette shiftDeleteFlag(param_0, true); mUndeleteFlag |= 1 << param_0; } else { - JUTTexture* texture = mTexture[idx]; + texture = mTexture[idx]; if (!p_tlut) { texture->storeTIMG(p_timg, local_43); } else { @@ -1898,7 +1905,7 @@ bool J2DTevBlock16::insertTexture(u32 param_0, JUTTexture* p_tex) { delete mTexture[7]; } - mUndeleteFlag &= 0x7F; + mUndeleteFlag &= ~0x80; } for (u8 i = 7; i > param_0; i--) { @@ -1920,10 +1927,9 @@ bool J2DTevBlock16::setTexture(u32 param_0, ResTIMG const* p_timg) { return false; } - u8 used_tlut; u8 tlutid = 0; if (p_timg != NULL && p_timg->indexTexture) { - used_tlut = 0; + u8 used_tlut = 0; for (int i = 0; i < 8; i++) { if (i != param_0 && mTexture[i] != NULL) { const ResTIMG* timg = mTexture[i]->getTexInfo(); @@ -2098,6 +2104,7 @@ void J2DTevBlock16::setGX() { for (int i = 0; i < 8; i++) { loadTexture(GXTexMapID(i), i); } + (void)bool(mFont); for (int i = 0; i < mTevStageNum; i++) { GXSetTevOrder(GXTevStageID(i), (GXTexCoordID)mTevOrder[i].getTexCoord(), (GXTexMapID)mTevOrder[i].getTexMap(), (GXChannelID)mTevOrder[i].getColor()); } @@ -2116,10 +2123,10 @@ void J2DTevBlock16::setGX() { GXTevAlphaArg(mTevStage[i].getAlphaD())); GXSetTevColorOp(GXTevStageID(i), GXTevOp(mTevStage[i].getCOp()), GXTevBias(mTevStage[i].getCBias()), GXTevScale(mTevStage[i].getCScale()), - mTevStage[i].getCClamp(), GXTevRegID(mTevStage[i].getCReg())); + GXBool(mTevStage[i].getCClamp()), GXTevRegID(mTevStage[i].getCReg())); GXSetTevAlphaOp(GXTevStageID(i), (GXTevOp)mTevStage[i].getAOp(), GXTevBias(mTevStage[i].getABias()), GXTevScale(mTevStage[i].getAScale()), - mTevStage[i].getAClamp(), GXTevRegID(mTevStage[i].getAReg())); + GXBool(mTevStage[i].getAClamp()), GXTevRegID(mTevStage[i].getAReg())); GXSetTevKColorSel(GXTevStageID(i), mTevKColorSel[i] != 0xff ? GXTevKColorSel(mTevKColorSel[i]) : GX_TEV_KCSEL_1); GXSetTevKAlphaSel(GXTevStageID(i), mTevKAlphaSel[i] != 0xff ? GXTevKAlphaSel(mTevKAlphaSel[i]) : GX_TEV_KASEL_1); } @@ -2149,13 +2156,13 @@ void J2DTevBlock16::loadTexture(GXTexMapID texmapID, u32 texIndex) { void J2DIndBlockFull::initialize() { mIndTexStageNum = 0; for (int i = 0; i < 4; i++) { - mIndTexOrder[i] = j2dDefaultIndTexOrderNull; + mIndTexOrder[i].setIndTexOrderInfo(j2dDefaultIndTexOrderNull); } for (int i = 0; i < 3; i++) { - mIndTexMtx[i] = j2dDefaultIndTexMtxInfo; + mIndTexMtx[i].setIndTexMtxInfo(j2dDefaultIndTexMtxInfo); } for (int i = 0; i < 4; i++) { - mTexCoordScale[i] = j2dDefaultIndTexCoordScaleInfo; + mTexCoordScale[i].setIndTexCoordScaleInfo(j2dDefaultIndTexCoordScaleInfo); } } @@ -2181,5 +2188,5 @@ void J2DPEBlock::initialize() { void J2DPEBlock::setGX() { GXSetAlphaCompare(GXCompare(mAlphaComp.getComp0()), mAlphaComp.getRef0(), GXAlphaOp(mAlphaComp.getOp()), GXCompare(mAlphaComp.getComp1()), mAlphaComp.getRef1()); GXSetBlendMode(GXBlendMode(mBlend.getType()), GXBlendFactor(mBlend.getSrcFactor()), GXBlendFactor(mBlend.getDstFactor()), GXLogicOp(mBlend.getOp())); - GXSetDither(mDither); + GXSetDither(GXBool(mDither)); } diff --git a/src/JSystem/J2DGraph/J2DMaterial.cpp b/src/JSystem/J2DGraph/J2DMaterial.cpp index 4fadaf5ace..57cccf8255 100644 --- a/src/JSystem/J2DGraph/J2DMaterial.cpp +++ b/src/JSystem/J2DGraph/J2DMaterial.cpp @@ -67,9 +67,7 @@ J2DTevBlock* J2DMaterial::createTevBlock(int block_type, bool noAlign) { block = new (-4) J2DTevBlock16(); } } - if (!block) { - OS_PANIC(101, "Error : allocate memory."); - } + ASSERTMSGLINE(101, block, "Error : allocate memory."); return block; } @@ -90,9 +88,7 @@ J2DIndBlock* J2DMaterial::createIndBlock(int block_type, bool noAlign) { block = new (-4) J2DIndBlockNull(); } } - if (!block) { - OS_PANIC(133, "Error : allocate memory."); - } + ASSERTMSGLINE(133, block, "Error : allocate memory."); return block; } @@ -148,9 +144,7 @@ void J2DMaterial::setAnimation(J2DAnmColor* anm) { u16 index = getIndex(); for (u16 i = 0; i < matNum; i++) { - u16 matID = anm->getUpdateMaterialID(i); - - if (index == matID) { + if (index == anm->getUpdateMaterialID(i)) { mAnmPointer->mColorIds = i; return; } @@ -219,9 +213,7 @@ void J2DMaterial::setAnimation(J2DAnmTevRegKey* anm) { u16 index = getIndex(); for (u16 i = 0; i < matNum; i++) { - u16 matID = anm->getCRegUpdateMaterialID(i); - - if (index == matID) { + if (index == anm->getCRegUpdateMaterialID(i)) { J3DAnmCRegKeyTable* anmTbl = anm->getAnmCRegKeyTable(); mAnmPointer->mTevCRegIds[anmTbl[i].mColorId] = i; } @@ -237,9 +229,7 @@ void J2DMaterial::setAnimation(J2DAnmTevRegKey* anm) { u16 index = getIndex(); for (u16 i = 0; i < matNum; i++) { - u16 matID = anm->getKRegUpdateMaterialID(i); - - if (index == matID) { + if (index == anm->getKRegUpdateMaterialID(i)) { J3DAnmKRegKeyTable* anmTbl = anm->getAnmKRegKeyTable(); mAnmPointer->mTevKRegIds[anmTbl[i].mColorId] = i; } diff --git a/src/JSystem/J2DGraph/J2DMaterialFactory.cpp b/src/JSystem/J2DGraph/J2DMaterialFactory.cpp index a4ef4b6672..55a8ca4c36 100644 --- a/src/JSystem/J2DGraph/J2DMaterialFactory.cpp +++ b/src/JSystem/J2DGraph/J2DMaterialFactory.cpp @@ -52,10 +52,7 @@ u32 J2DMaterialFactory::countStages(int param_0) const { } } if ((uVar3 != uVar4 && uVar4 != 0)) { - if (uVar3 > uVar4) { - return uVar3; - } - return uVar4; + return uVar3 > uVar4 ? uVar3 : uVar4; } return uVar3; } @@ -64,16 +61,14 @@ J2DMaterial* J2DMaterialFactory::create(J2DMaterial* param_0, int index, u32 par J2DResReference* param_3, J2DResReference* param_4, JKRArchive* param_5) const { u32 stages = countStages(index); - u32 uVar1 = ((param_2 & 0x1f0000) >> 16); - u32 r28 = stages > uVar1 ? stages : uVar1; - - u32 r25 = r28 <= 8 ? r28 : 8; - - s32 local_3bc = ((param_2 & 0x1000000) != 0); - s32 local_3c0 = (param_2 & 0x1f0000) ? local_3bc : 0; - bool temp = (param_2 & 0x1f0000); - param_0->mTevBlock = J2DMaterial::createTevBlock((u16)r28, temp); - param_0->mIndBlock = J2DMaterial::createIndBlock(local_3c0, temp); + u32 local_36c = ((param_2 & 0x1f0000) >> 16); + u32 local_370 = stages > local_36c ? stages : local_36c; + u32 local_374 = local_370 > 8 ? 8 : local_370; + s32 local_378 = (param_2 & 0x1000000) ? 1 : 0; + local_378 = (param_2 & 0x1f0000) ? local_378 : 0; + bool local_403 = (param_2 & 0x1f0000); + param_0->mTevBlock = J2DMaterial::createTevBlock((u16)local_370, local_403); + param_0->mIndBlock = J2DMaterial::createIndBlock(local_378, local_403); param_0->mIndex = index; param_0->field_0x8 = getMaterialMode(index); param_0->getColorBlock()->setColorChanNum(newColorChanNum(index)); @@ -86,9 +81,9 @@ J2DMaterial* J2DMaterialFactory::create(J2DMaterial* param_0, int index, u32 par param_0->mMaterialAlphaCalc = getMaterialAlphaCalc(index); JUTResReference aJStack_12c; - for (u8 i = 0; i < r25; i++) { + for (u8 i = 0; i < local_374; i++) { u16 texNo = newTexNo(index, i); - s8* local_37c = param_3->getResReference(texNo); + char* local_37c = param_3->getResReference(texNo); void* local_380 = NULL; if (local_37c != NULL) { local_380 = aJStack_12c.getResource(local_37c, 'TIMG', param_5); @@ -107,7 +102,7 @@ J2DMaterial* J2DMaterialFactory::create(J2DMaterial* param_0, int index, u32 par u16 fontNo = newFontNo(index); param_0->getTevBlock()->setFontNo(fontNo); - s8* local_384 = param_4->getResReference(param_0->getTevBlock()->getFontNo()); + char* local_384 = param_4->getResReference(param_0->getTevBlock()->getFontNo()); void* local_388 = NULL; if (local_384 != NULL) { local_388 = aJStack_12c.getResource(local_384, 'FONT', param_5); @@ -122,10 +117,10 @@ J2DMaterial* J2DMaterialFactory::create(J2DMaterial* param_0, int index, u32 par } param_0->getTevBlock()->setFont((ResFONT*)local_388); - for (u8 i = 0; i < r28; i++) { + for (u8 i = 0; i < local_370; i++) { param_0->getTevBlock()->setTevOrder(i, newTevOrder(index, i)); } - for (u8 i = 0; i < r28; i++) { + for (u8 i = 0; i < local_370; i++) { J2DMaterialInitData* local_38c = &field_0x4[field_0x8[index]]; param_0->getTevBlock()->setTevStage(i, newTevStage(index, i)); if (local_38c->field_0xba[i] != 0xffff) { @@ -157,13 +152,13 @@ J2DMaterial* J2DMaterialFactory::create(J2DMaterial* param_0, int index, u32 par param_0->getTexGenBlock()->setTexMtx(i, newTexMtx(index, i)); } J2DMaterialInitData* local_394 = &field_0x4[field_0x8[index]]; - for (u8 i = 0; i < r28; i++) { + for (u8 i = 0; i < local_370; i++) { param_0->getTevBlock()->setTevKColorSel(i, local_394->field_0x52[i]); } - for (u8 i = 0; i < r28; i++) { + for (u8 i = 0; i < local_370; i++) { param_0->getTevBlock()->setTevKAlphaSel(i, local_394->field_0x62[i]); } - if (field_0xc != NULL || local_3c0 != 0) { + if (field_0xc != NULL || local_378 != 0) { u8 local_410 = newIndTexStageNum(index); param_0->mIndBlock->setIndTexStageNum(local_410); for (u8 i = 0; i < local_410; i++) { @@ -175,7 +170,7 @@ J2DMaterial* J2DMaterialFactory::create(J2DMaterial* param_0, int index, u32 par for (u8 i = 0; i < local_410; i++) { param_0->getIndBlock()->setIndTexCoordScale(i, newIndTexCoordScale(index, i)); } - for (u8 i = 0; i < r28; i++) { + for (u8 i = 0; i < local_370; i++) { param_0->getTevBlock()->setIndTevStage(i, newIndTevStage(index, i)); } } @@ -183,8 +178,7 @@ J2DMaterial* J2DMaterialFactory::create(J2DMaterial* param_0, int index, u32 par } JUtility::TColor J2DMaterialFactory::newMatColor(int param_0, int param_1) const { - GXColor color = {0xff,0xff,0xff,0xff}; - JUtility::TColor local_20 = GXColor(color); + JUtility::TColor local_20 = (GXColor){0xff,0xff,0xff,0xff}; J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]]; if (iVar2->field_0x8[param_1] != 0xffff) { return field_0x10[iVar2->field_0x8[param_1]]; @@ -201,6 +195,7 @@ u8 J2DMaterialFactory::newColorChanNum(int param_0) const { } J2DColorChan J2DMaterialFactory::newColorChan(int param_0, int param_1) const { + int r29 = 0; J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]]; if (iVar2->field_0xc[param_1] != 0xffff) { return J2DColorChan(field_0x18[iVar2->field_0xc[param_1]]); @@ -209,6 +204,7 @@ J2DColorChan J2DMaterialFactory::newColorChan(int param_0, int param_1) const { } u32 J2DMaterialFactory::newTexGenNum(int param_0) const { + int r30 = 0; J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]]; if (iVar2->field_0x3 != 0xff) { return field_0x1c[iVar2->field_0x3]; @@ -235,6 +231,7 @@ J2DTexMtx* J2DMaterialFactory::newTexMtx(int param_0, int param_1) const { } u8 J2DMaterialFactory::newCullMode(int param_0) const { + int r30 = 0; J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]]; if (iVar2->field_0x1 != 0xff) { return field_0x30[iVar2->field_0x1]; @@ -312,12 +309,13 @@ J2DTevSwapModeTable J2DMaterialFactory::newTevSwapModeTable(int param_0, int par } u8 J2DMaterialFactory::newIndTexStageNum(int param_0) const { + u8 r31 = 0; if (field_0xc != NULL) { if (field_0xc[param_0].field_0x0 == 1) { return field_0xc[param_0].field_0x1; } } - return 0; + return r31; } J2DIndTexOrder J2DMaterialFactory::newIndTexOrder(int param_0, int param_1) const { @@ -373,7 +371,7 @@ J2DBlend J2DMaterialFactory::newBlend(int param_0) const { if (iVar2->field_0xe4 != 0xffff) { return J2DBlend(field_0x54[iVar2->field_0xe4]); } - return J2DBlend(); + return J2DBlend(j2dDefaultBlendInfo); } u8 J2DMaterialFactory::newDither(int param_0) const { diff --git a/src/JSystem/J2DGraph/J2DPane.cpp b/src/JSystem/J2DGraph/J2DPane.cpp index 231488bd77..ccaa67aaa4 100644 --- a/src/JSystem/J2DGraph/J2DPane.cpp +++ b/src/JSystem/J2DGraph/J2DPane.cpp @@ -21,10 +21,15 @@ J2DPane::J2DPane() : mBounds(), mGlobalBounds(), mClipRect(), mPaneTree(this) { void J2DPane::initiate() { field_0x4 = -1; - mRotateOffsetY = mRotateOffsetX = mRotateZ = mRotateY = mRotateX = 0; + mRotateX = 0.0f; + mRotateY = 0.0f; + mRotateZ = 0.0f; + mRotateOffsetX = 0.0f; + mRotateOffsetY = 0.0f; mBasePosition = 0; mRotAxis = ROTATE_Z; - mScaleY = mScaleX = 1; + mScaleX = 1.0f; + mScaleY = 1.0f; mCullMode = GX_CULL_NONE; mAlpha = 255; mIsInfluencedAlpha = true; @@ -98,8 +103,8 @@ J2DPane::J2DPane(J2DPane* p_pane, JSURandomInputStream* p_stream, u8 isEx) : mPa void J2DPane::makePaneStream(J2DPane* p_pane, JSURandomInputStream* p_stream) { u8 unk; - p_stream->read(&unk, 1); - p_stream->read(&mVisible, 1); + p_stream->read(unk); + p_stream->read(mVisible); p_stream->skip(2); mInfoTag = p_stream->read32b(); @@ -110,7 +115,7 @@ void J2DPane::makePaneStream(J2DPane* p_pane, JSURandomInputStream* p_stream) { f32 y1 = y0 + p_stream->readS16(); mBounds.set(x0, y0, x1, y1); - unk -= 6; + unk -= u8(6); mRotateX = 0; mRotateY = 0; mRotateZ = 0; @@ -120,7 +125,8 @@ void J2DPane::makePaneStream(J2DPane* p_pane, JSURandomInputStream* p_stream) { } if (unk != 0) { - mBasePosition = p_stream->readU8(); + u8 r28 = p_stream->readU8(); + mBasePosition = r28; unk--; } else { mBasePosition = 0; @@ -159,15 +165,15 @@ void J2DPane::changeUseTrans(J2DPane* p_pane) { f32 xOffset = 0; f32 yOffset = 0; if (mBasePosition % 3 == 1) { - xOffset = mBounds.getWidth() / 2; + xOffset = getWidth() / 2; } else if (mBasePosition % 3 == 2) { - xOffset = mBounds.getWidth(); + xOffset = getWidth(); } if (mBasePosition / 3 == 1) { - yOffset = mBounds.getHeight() / 2; + yOffset = getHeight() / 2; } else if (mBasePosition / 3 == 2) { - yOffset = mBounds.getHeight(); + yOffset = getHeight(); } mTranslateX = mBounds.i.x + xOffset; @@ -176,9 +182,7 @@ void J2DPane::changeUseTrans(J2DPane* p_pane) { mRotateOffsetX = xOffset; mRotateOffsetY = yOffset; - f32 addX = -mTranslateX; - f32 addY = -mTranslateY; - mBounds.addPos(addX, addY); + mBounds.addPos(JGeometry::TVec2(-mTranslateX, -mTranslateY)); if (p_pane != NULL) { u8 otherBasePos = p_pane->mBasePosition; @@ -200,10 +204,9 @@ void J2DPane::changeUseTrans(J2DPane* p_pane) { } J2DPane::~J2DPane() { - JSUTreeIterator iterator; - for (iterator = mPaneTree.getFirstChild(); iterator != mPaneTree.getEndChild();) { - J2DPane* child = (iterator++).getObject(); - delete child; + JSUTreeIterator iterator = mPaneTree.getFirstChild(); + for (; iterator != mPaneTree.getEndChild();) { + delete (iterator++).getObject(); } } @@ -240,7 +243,7 @@ bool J2DPane::insertChild(J2DPane* p_prev, J2DPane* p_child) { } void J2DPane::draw(f32 x, f32 y, J2DGrafContext const* p_grafCtx, bool isOrthoGraf, bool param_4) { - bool unkBool = param_4 && mVisible; + param_4 = param_4 && mVisible; if (p_grafCtx->getGrafType() != 1) { isOrthoGraf = false; } @@ -254,22 +257,36 @@ void J2DPane::draw(f32 x, f32 y, J2DGrafContext const* p_grafCtx, bool isOrthoGr if (mBounds.isValid()) { mGlobalBounds = mBounds; - f32 addX = mTranslateX; - f32 addY = mTranslateY; - mGlobalBounds.addPos(addX, addY); + mGlobalBounds.addPos(JGeometry::TVec2(mTranslateX, mTranslateY)); - if (unkBool) { + if (param_4) { mClipRect = mBounds; rewriteAlpha(); } if (parent != NULL) { - f32 width = parent->mGlobalBounds.i.x - parent->mBounds.i.x; - f32 height = parent->mGlobalBounds.i.y - parent->mBounds.i.y; - mGlobalBounds.addPos(width, height); + mGlobalBounds.addPos(JGeometry::TVec2(parent->mGlobalBounds.i.x - parent->mBounds.i.x, parent->mGlobalBounds.i.y - parent->mBounds.i.y)); +#if !PLATFORM_GCN + f32 f28 = mPositionMtx[0][0]; + f32 f27 = mPositionMtx[1][0]; + f32 f26 = mPositionMtx[2][0]; + if (getUserInfo() == 'n_43' && p_grafCtx->getGrafType() == 1) { + JGeometry::TBox2* bounds = ((J2DOrthoGraph*)p_grafCtx)->getBounds(); + const JGeometry::TBox2* ortho = ((J2DOrthoGraph*)p_grafCtx)->getOrtho(); + f32 f31 = 608.0f / (ortho->f.x - ortho->i.x); + mPositionMtx[0][0] *= f31; + mPositionMtx[0][1] *= f31; + mPositionMtx[0][2] *= f31; + } +#endif MTXConcat(parent->mGlobalMtx, mPositionMtx, mGlobalMtx); +#if !PLATFORM_GCN + mPositionMtx[0][0] = f28; + mPositionMtx[1][0] = f27; + mPositionMtx[2][0] = f26; +#endif - if (unkBool) { + if (param_4) { if (isOrthoGraf) { mClipRect = mGlobalBounds; mClipRect.intersect(parent->mClipRect); @@ -281,19 +298,35 @@ void J2DPane::draw(f32 x, f32 y, J2DGrafContext const* p_grafCtx, bool isOrthoGr } } } else { - mGlobalBounds.addPos(x, y); +#if !PLATFORM_GCN + f32 f25 = mScaleX; + f32 f24 = mTranslateX; + if (getUserInfo() != 'n_43' && p_grafCtx->getGrafType() == 1) { + JGeometry::TBox2* bounds = ((J2DOrthoGraph*)p_grafCtx)->getBounds(); + const JGeometry::TBox2* ortho = ((J2DOrthoGraph*)p_grafCtx)->getOrtho(); + f32 f30 = (ortho->f.x - ortho->i.x) / 608.0f; + f32 f29 = 304.0f; + mScaleX *= f30; + mTranslateX = f30 * (mTranslateX - f29) + f29; + } +#endif + mGlobalBounds.addPos(JGeometry::TVec2(x, y)); makeMatrix(mTranslateX + x, mTranslateY + y); MTXCopy(mPositionMtx, mGlobalMtx); mClipRect = mGlobalBounds; mColorAlpha = mAlpha; +#if !PLATFORM_GCN + mScaleX = f25; + mTranslateX = f24; +#endif } JGeometry::TBox2 scissorBounds(0, 0, 0, 0); - if (unkBool && isOrthoGraf) { + if (param_4 && isOrthoGraf) { ((J2DOrthoGraph*)p_grafCtx)->scissorBounds(&scissorBounds, &mClipRect); } - if (unkBool && (mClipRect.isValid() || !isOrthoGraf)) { + if (param_4 && (mClipRect.isValid() || !isOrthoGraf)) { J2DGrafContext tmpGraf(*p_grafCtx); if (isOrthoGraf) { tmpGraf.scissor(scissorBounds); @@ -303,9 +336,8 @@ void J2DPane::draw(f32 x, f32 y, J2DGrafContext const* p_grafCtx, bool isOrthoGr drawSelf(x, y, &tmpGraf.mPosMtx); } - JSUTreeIterator iter; - for (iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) { - iter.getObject()->draw(0, 0, p_grafCtx, isOrthoGraf, unkBool); + for (JSUTreeIterator iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) { + iter->draw(0, 0, p_grafCtx, isOrthoGraf, param_4); } } } @@ -362,8 +394,8 @@ void J2DPane::place(JGeometry::TBox2 const& box) { } void J2DPane::move(f32 x, f32 y) { - f32 width = getWidth(); - f32 height = getHeight(); + f32 width = mBounds.getWidth(); + f32 height = mBounds.getHeight(); place(JGeometry::TBox2(x, y, x + width, y + height)); } @@ -376,16 +408,11 @@ void J2DPane::add(f32 x, f32 y) { void J2DPane::resize(f32 x, f32 y) { JGeometry::TBox2 box = mBounds; - f32 tX = mTranslateX; - f32 tY = mTranslateY; - - box.addPos(tX, tY); + box.addPos(JGeometry::TVec2(mTranslateX, mTranslateY)); const J2DPane* parent = getParentPane(); if (parent != NULL) { - f32 xAdd = -parent->mBounds.i.x; - f32 yAdd = -parent->mBounds.i.y; - box.addPos(xAdd, yAdd); + box.addPos(JGeometry::TVec2(-parent->mBounds.i.x, -parent->mBounds.i.y)); } box.f.x = box.i.x + x; @@ -398,16 +425,11 @@ JGeometry::TBox2 J2DPane::static_mBounds(0, 0, 0, 0); JGeometry::TBox2& J2DPane::getBounds() { static_mBounds = mBounds; - f32 tX = mTranslateX; - f32 tY = mTranslateY; - - static_mBounds.addPos(tX, tY); + static_mBounds.addPos(JGeometry::TVec2(mTranslateX, mTranslateY)); const J2DPane* parent = getParentPane(); if (parent != NULL) { - f32 xAdd = -parent->mBounds.i.x; - f32 yAdd = -parent->mBounds.i.y; - static_mBounds.addPos(xAdd, yAdd); + static_mBounds.addPos(JGeometry::TVec2(-parent->mBounds.i.x, -parent->mBounds.i.y)); } return static_mBounds; @@ -443,8 +465,7 @@ J2DPane* J2DPane::search(u64 tag) { return this; } - JSUTreeIterator iter; - for (iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) { + for (JSUTreeIterator iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) { if (J2DPane* result = iter.getObject()->search(tag)) { return result; } @@ -457,8 +478,7 @@ J2DPane* J2DPane::searchUserInfo(u64 tag) { return this; } - JSUTreeIterator iter; - for (iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) { + for (JSUTreeIterator iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) { if (J2DPane* result = iter.getObject()->searchUserInfo(tag)) { return result; } @@ -467,8 +487,7 @@ J2DPane* J2DPane::searchUserInfo(u64 tag) { } bool J2DPane::isUsed(const ResTIMG* p_timg) { - JSUTreeIterator iter; - for (iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) { + for (JSUTreeIterator iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) { if (iter.getObject()->isUsed(p_timg)) return true; } @@ -476,8 +495,7 @@ bool J2DPane::isUsed(const ResTIMG* p_timg) { } bool J2DPane::isUsed(const ResFONT* p_font) { - JSUTreeIterator iter; - for (iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) { + for (JSUTreeIterator iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) { if (iter.getObject()->isUsed(p_font)) return true; } @@ -502,8 +520,7 @@ void J2DPane::makeMatrix(f32 param_0, f32 param_1, f32 param_2, f32 param_3) { void J2DPane::setCullBack(GXCullMode mode) { mCullMode = mode; - JSUTreeIterator iter; - for (iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) { + for (JSUTreeIterator iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) { iter.getObject()->setCullBack(mode); } } @@ -515,20 +532,16 @@ void J2DPane::setBasePosition(J2DBasePosition position) { mRotateOffsetX = 0; if (position % 3 == 1) { - f32 width = getWidth(); - mRotateOffsetX = width / 2; + mRotateOffsetX = getWidth() / 2; } else if (position % 3 == 2) { - f32 width = getWidth(); - mRotateOffsetX = width; + mRotateOffsetX = getWidth(); } mRotateOffsetY = 0; if (position / 3 == 1) { - f32 height = getHeight(); - mRotateOffsetY = height / 2; + mRotateOffsetY = getHeight() / 2; } else if (position / 3 == 2) { - f32 height = getHeight(); - mRotateOffsetY = height; + mRotateOffsetY = getHeight(); } calcMtx(); @@ -545,7 +558,7 @@ void J2DPane::setInfluencedAlpha(bool influencedAlpha, bool param_1) { break; } alpha = (((f32)alpha) * parent->getAlpha() / 255); - if (!parent->mIsInfluencedAlpha) { + if (!parent->isInfluencedAlpha()) { break; } } @@ -554,7 +567,7 @@ void J2DPane::setInfluencedAlpha(bool influencedAlpha, bool param_1) { if (alpha == 0) { setAlpha(0); } else { - f32 fAlpha = ((f32)mAlpha) / alpha * 255; + f32 fAlpha = ((f32)getAlpha()) / alpha * 255; u8 alpha; if (fAlpha > 255) { @@ -565,7 +578,8 @@ void J2DPane::setInfluencedAlpha(bool influencedAlpha, bool param_1) { setAlpha(alpha); } } else { - setAlpha((f32)(alpha * mAlpha) / 255); + f32 fAlpha = f32(alpha * getAlpha()) / 255; + setAlpha(fAlpha); } } @@ -579,25 +593,15 @@ Vec J2DPane::getGlbVtx(u8 param_0) const { out.y = 0; out.z = 0; return out; - } else { - f32 x, y; - if (param_0 & 1) { - x = mBounds.f.x; - } else { - x = mBounds.i.x; - } - - if (param_0 & 2) { - y = mBounds.f.y; - } else { - y = mBounds.i.y; - } - - out.x = x * mGlobalMtx[0][0] + y * mGlobalMtx[0][1] + mGlobalMtx[0][3]; - out.y = x * mGlobalMtx[1][0] + y * mGlobalMtx[1][1] + mGlobalMtx[1][3]; - out.z = x * mGlobalMtx[2][0] + y * mGlobalMtx[2][1] + mGlobalMtx[2][3]; - return out; } + + f32 x = param_0 & 1 ? mBounds.f.x : mBounds.i.x; + f32 y = param_0 & 2 ? mBounds.f.y : mBounds.i.y; + + out.x = x * mGlobalMtx[0][0] + y * mGlobalMtx[0][1] + mGlobalMtx[0][3]; + out.y = x * mGlobalMtx[1][0] + y * mGlobalMtx[1][1] + mGlobalMtx[1][3]; + out.z = x * mGlobalMtx[2][0] + y * mGlobalMtx[2][1] + mGlobalMtx[2][3]; + return out; } J2DPane* J2DPane::getFirstChildPane() { @@ -643,7 +647,7 @@ struct J2DPaneInfo { }; // Size: 0x48 void J2DPane::makePaneExStream(J2DPane* p_parent, JSURandomInputStream* p_stream) { - p_stream->getPosition(); + s32 r30 = p_stream->getPosition(); J2DPaneInfo data; p_stream->read(&data, sizeof(data)); @@ -696,24 +700,24 @@ void J2DPane::makePaneExStream(J2DPane* p_parent, JSURandomInputStream* p_stream s16 J2DPane::J2DCast_F32_to_S16(f32 value, u8 arg2) { if (arg2 >= 0xF) { return 0; - } else { - f32 tmpF; - tmpF = value; + } + + f32 tmpF; + tmpF = value; + if (value < 0) { + tmpF = -tmpF; + } + int tmp = tmpF * (1 << arg2); + if (tmp >= 0x8000) { if (value < 0) { - tmpF = -value; - } - int tmp = tmpF * (1 << arg2); - if (tmp >= 0x8000) { - if (value < 0) { - return 0x8000; - } else { - return 0x7FFF; - } - } else if (value < 0) { - return ~tmp + 1; + return 0x8000; } else { - return tmp; + return 0x7FFF; } + } else if (value < 0) { + return ~tmp + 1; + } else { + return tmp; } } @@ -753,8 +757,6 @@ void* J2DPane::getPointer(JSURandomInputStream* p_stream, u32 param_1, JKRArchiv void J2DPane::setAnimation(J2DAnmBase* p_anm) { if (p_anm != NULL) { switch (p_anm->getKind()) { - default: - break; case KIND_TRANSFORM: setAnimation(static_cast(p_anm)); break; @@ -776,6 +778,9 @@ void J2DPane::setAnimation(J2DAnmBase* p_anm) { case KIND_TEV_REG: setAnimation(static_cast(p_anm)); break; + default: + OS_REPORT("J2DPane: this is not a J3D Binary.\n"); + break; } } } @@ -790,11 +795,9 @@ void J2DPane::animationTransform() { } void J2DPane::clearAnmTransform() { - J2DAnmTransform* none = NULL; - setAnimation(none); + setAnimation((J2DAnmTransform*)NULL); - JSUTreeIterator iter; - for (iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) { + for (JSUTreeIterator iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) { iter.getObject()->clearAnmTransform(); } } @@ -804,8 +807,7 @@ const J2DAnmTransform* J2DPane::animationTransform(const J2DAnmTransform* p_tran if (mTransform != NULL) p = mTransform; - JSUTreeIterator iter; - for (iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) { + for (JSUTreeIterator iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) { iter.getObject()->animationTransform(p); } @@ -816,8 +818,7 @@ const J2DAnmTransform* J2DPane::animationTransform(const J2DAnmTransform* p_tran void J2DPane::setVisibileAnimation(J2DAnmVisibilityFull* p_visibility) { setAnimationVF(p_visibility); - JSUTreeIterator iter; - for (iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) { + for (JSUTreeIterator iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) { iter.getObject()->setVisibileAnimation(p_visibility); } } @@ -825,8 +826,7 @@ void J2DPane::setVisibileAnimation(J2DAnmVisibilityFull* p_visibility) { void J2DPane::setVtxColorAnimation(J2DAnmVtxColor* p_vtxColor) { setAnimationVC(p_vtxColor); - JSUTreeIterator iter; - for (iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) { + for (JSUTreeIterator iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) { iter.getObject()->setVtxColorAnimation(p_vtxColor); } } @@ -836,8 +836,7 @@ const J2DAnmTransform* J2DPane::animationPane(const J2DAnmTransform* p_transform if (mTransform != NULL) p = mTransform; - JSUTreeIterator iter; - for (iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) { + for (JSUTreeIterator iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) { iter.getObject()->animationPane(p); } @@ -860,42 +859,9 @@ void J2DPane::updateTransform(J2DAnmTransform const* p_anmTransform) { } } -void J2DPane::drawSelf(f32, f32, f32 (*)[3][4]) { - /* empty function */ -} - -void J2DPane::rewriteAlpha() { - /* empty function */ -} - -void J2DPane::setAnimationVF(J2DAnmVisibilityFull* p_visibility) { - setAnimation(p_visibility); -} - -void J2DPane::setAnimationVC(J2DAnmVtxColor* p_vtxColor) { - setAnimation(p_vtxColor); -} - -void J2DPane::setCullBack(bool cull) { - GXCullMode mode; - - if (!cull) - mode = GX_CULL_NONE; - else - mode = GX_CULL_BACK; - - setCullBack(mode); -} - -bool J2DPane::setConnectParent(bool connected) { - mConnected = false; - return false; -} - -void J2DPane::update() { - /* empty function */ -} - -void J2DPane::drawSelf(f32, f32) { - /* empty function */ +static void dummy(J2DPane* pane) { + pane->drawSelf(0.0f, 0.0f); + pane->update(); + pane->setConnectParent(false); + pane->setCullBack(false); } diff --git a/src/JSystem/J2DGraph/J2DPicture.cpp b/src/JSystem/J2DGraph/J2DPicture.cpp index 6968df2572..7208db3cd7 100644 --- a/src/JSystem/J2DGraph/J2DPicture.cpp +++ b/src/JSystem/J2DGraph/J2DPicture.cpp @@ -10,7 +10,7 @@ #include "dolphin/gx.h" J2DPicture::J2DPicture() : mPalette(NULL) { - for (int i = 0; i < 2; i++) { + for (u32 i = 0; i < 2; i++) { mTexture[i] = NULL; } @@ -67,23 +67,12 @@ J2DPicture::J2DPicture(J2DPane* p_pane, JSURandomInputStream* p_stream, J2DMater if (material != NULL && material->getTevBlock() != NULL) { u8 texgenNum = material->getTexGenBlock()->getTexGenNum(); - u32 stageNum = material->getTevBlock()->getTevStageNum(); + u8 stageNum = u8(material->getTevBlock()->getTevStageNum()); if ((texgenNum == 1 && stageNum != 1) || (texgenNum != 1 && (int)stageNum != texgenNum + 1)) { - J2DGXColorS10* color0p = material->getTevBlock()->getTevColor(0); - GXColorS10 color0; - color0.r = color0p->r; - color0.g = color0p->g; - color0.b = color0p->b; - color0.a = color0p->a; - - J2DGXColorS10* color1p = material->getTevBlock()->getTevColor(1); - GXColorS10 color1; - color1.r = color1p->r; - color1.g = color1p->g; - color1.b = color1p->b; - color1.a = color1p->a; + J2DGXColorS10 color0 = *material->getTevBlock()->getTevColor(0); + J2DGXColorS10 color1 = *material->getTevBlock()->getTevColor(1); mBlack = JUtility::TColor(((u8)color0.r << 0x18) | ((u8)color0.g << 0x10) | ((u8)color0.b << 8) | (u8)color0.a); @@ -91,7 +80,7 @@ J2DPicture::J2DPicture(J2DPane* p_pane, JSURandomInputStream* p_stream, J2DMater ((u8)color1.b << 8) | (u8)color1.a); } - mTextureNum = texgenNum <= 2 ? texgenNum : 2; + mTextureNum = texgenNum > 2 ? 2 : texgenNum; } field_0x109 = 0; @@ -127,7 +116,7 @@ J2DPicture::J2DPicture(J2DPane* p_pane, JSURandomInputStream* p_stream, J2DMater } J2DPicture::J2DPicture(ResTIMG const* p_timg) { - for (int i = 0; i < 2; i++) { + for (u32 i = 0; i < 2; i++) { mTexture[i] = NULL; } @@ -145,7 +134,7 @@ J2DPicture::J2DPicture(ResTIMG const* p_timg) { J2DPicture::J2DPicture(u64 tag, JGeometry::TBox2 const& bounds, ResTIMG const* p_timg, ResTLUT const* p_tlut) : J2DPane(tag, bounds), mPalette(NULL) { - for (int i = 0; i < 2; i++) { + for (u32 i = 0; i < 2; i++) { mTexture[i] = NULL; } @@ -169,47 +158,48 @@ void J2DPicture::private_readStream(J2DPane* parent, JSURandomInputStream* strea ResTIMG* img; ResTLUT* lut; - u32 var_r27 = 0; - u8 var_r26 = stream->readU8(); + u8 local_172 = 0; + u8 local_173 = 0; + u8 r29 = stream->readU8(); img = (ResTIMG*)getPointer(stream, 'TIMG', archive); lut = (ResTLUT*)getPointer(stream, 'TLUT', archive); - u8 spA = stream->read8b(); + local_172 = stream->read8b(); - var_r26 -= 3; - if (var_r26 != 0) { - var_r27 = stream->read8b(); - var_r26--; + r29 -= 3; + if (r29 != 0) { + local_173 = stream->read8b(); + r29--; } - if (var_r26 != 0) { - stream->read8b(); - var_r26--; + if (r29 != 0) { + u8 local_174 = stream->read8b(); + r29--; } mBlack = 0; mWhite = 0xFFFFFFFF; - if (var_r26 != 0) { + if (r29 != 0) { mBlack = stream->readU32(); - var_r26--; + r29--; } - if (var_r26 != 0) { + if (r29 != 0) { mWhite = stream->readU32(); - var_r26--; + r29--; } setCornerColor(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF); - for (int i = 0; var_r26 != 0 && i < 4; i++) { + for (int i = 0; r29 != 0 && i < 4; i++) { mCornerColor[i] = stream->readU32(); - var_r26--; + r29--; } stream->seek(headerPosition + header.mSize, JSUStreamSeekFrom_SET); - for (int i = 0; i < 2; i++) { + for (u32 i = 0; i < 2; i++) { mTexture[i] = NULL; } @@ -226,7 +216,7 @@ void J2DPicture::private_readStream(J2DPane* parent, JSURandomInputStream* strea mTexture[0]->attachPalette(mPalette); } - setTexCoord(mTexture[0], (J2DBinding)spA, (J2DMirror)(var_r27 & 3), (bool)((var_r27 >> 2) & 1)); + setTexCoord(mTexture[0], J2DBinding(local_172), J2DMirror(local_173 & 3), bool(local_173 & 4)); setBlendRatio(1.0f, 1.0f); } @@ -295,8 +285,7 @@ bool J2DPicture::prepareTexture(u8 param_0) { } if (mTexture[i] == NULL) { - JUTTexture* tmp = new JUTTexture(); - mTexture[i] = tmp; + mTexture[i] = new JUTTexture(); if (mTexture[i] == NULL) { return 0; @@ -337,12 +326,12 @@ bool J2DPicture::insert(ResTIMG const* img, JUTPalette* palette, u8 param_2, f32 } else { var_r31 = mTexture[mTextureNum]; if (palette == NULL) { - mTexture[mTextureNum]->storeTIMG(img, var_r26); + var_r31->storeTIMG(img, var_r26); } else { - mTexture[mTextureNum]->storeTIMG(img, palette); + var_r31->storeTIMG(img, palette); } - u8 sp8[2]; + bool sp8[2]; for (u8 i = 0; i < 2; i++) { sp8[i] = (field_0x109 & (1 << i)) != 0; } @@ -382,8 +371,7 @@ bool J2DPicture::insert(ResTIMG const* img, JUTPalette* palette, u8 param_2, f32 bool J2DPicture::insert(char const* resName, JUTPalette* palette, u8 param_2, f32 param_3) { - void* resource = J2DScreen::getNameResource(resName); - return insert((ResTIMG*)resource, palette, param_2, param_3); + return insert((ResTIMG*)J2DScreen::getNameResource(resName), palette, param_2, param_3); } bool J2DPicture::insert(JUTTexture* texture, u8 param_1, f32 param_2) { @@ -464,8 +452,7 @@ const ResTIMG* J2DPicture::changeTexture(ResTIMG const* img, u8 texIndex) { const ResTIMG* result; if (texIndex < mTextureNum) { - JUTTexture* tex = getTexture(texIndex); - result = tex->getTexInfo(); + result = getTexture(texIndex)->getTexInfo(); u8 var_r30 = 0; if (img->indexTexture != 0) { @@ -481,8 +468,7 @@ const ResTIMG* J2DPicture::changeTexture(ResTIMG const* img, u8 texIndex) { const ResTIMG* J2DPicture::changeTexture(char const* resName, u8 param_1) { - void* resource = J2DScreen::getNameResource(resName); - return changeTexture((ResTIMG*)resource, param_1); + return changeTexture((ResTIMG*)J2DScreen::getNameResource(resName), param_1); } static bool dummy_weak_order(JUTTexture* tex) { @@ -497,12 +483,12 @@ const ResTIMG* J2DPicture::changeTexture(ResTIMG const* img, u8 texIndex, JUTPal const ResTIMG* result; if (texIndex < mTextureNum) { - JUTTexture* tex = getTexture(texIndex); - result = tex->getTexInfo(); + result = getTexture(texIndex)->getTexInfo(); GXTlut var_r30 = GX_TLUT0; if (img->indexTexture != 0) { - var_r30 = getTlutID(img, getUsableTlut(texIndex)); + u8 tlut = getUsableTlut(texIndex); + var_r30 = getTlutID(img, tlut); } getTexture(texIndex)->storeTIMG(img, palette, var_r30); return result; @@ -514,8 +500,7 @@ const ResTIMG* J2DPicture::changeTexture(ResTIMG const* img, u8 texIndex, JUTPal const ResTIMG* J2DPicture::changeTexture(char const* param_0, u8 param_1, JUTPalette* param_2) { - void* resource = J2DScreen::getNameResource(param_0); - return changeTexture((ResTIMG*)resource, param_1, param_2); + return changeTexture((ResTIMG*)J2DScreen::getNameResource(param_0), param_1, param_2); } void J2DPicture::drawSelf(f32 param_0, f32 param_1) { @@ -528,7 +513,7 @@ void J2DPicture::drawSelf(f32 param_0, f32 param_1) { void J2DPicture::drawSelf(f32 param_0, f32 param_1, Mtx* param_2) { if (mTexture[0] != NULL && mTextureNum != 0) { drawFullSet(mGlobalBounds.i.x + param_0, mGlobalBounds.i.y + param_1, - mBounds.f.x - mBounds.i.x, mBounds.f.y - mBounds.i.y, param_2); + getWidth(), getHeight(), param_2); } } @@ -543,6 +528,8 @@ void J2DPicture::drawFullSet(f32 param_0, f32 param_1, f32 param_2, f32 param_3, void J2DPicture::draw(f32 x, f32 y, f32 width, f32 height, bool mirrorX, bool mirrorY, bool rotate90) { if (isVisible() && mTextureNum != 0 && mTexture[0] != NULL) { + f32 x2 = x + width; + f32 y2 = y + height; for (u8 i = 0; i < mTextureNum; i++) { load(i); } @@ -802,6 +789,36 @@ void J2DPicture::swap(f32& lhs, f32& rhs) { rhs = tmp; } +J2DBinding J2DPicture::getBinding() const { + int r30 = J2DBind_None; + bool r29 = isTumble(); + if (field_0x10a[0].x == 0 || field_0x10a[0].x == 256) { + r30 |= !r29 ? J2DBind_Left : J2DBind_Top; + } + if (field_0x10a[0].y == 0 || field_0x10a[0].y == 256) { + r30 |= !r29 ? J2DBind_Top : J2DBind_Left; + } + if (field_0x10a[3].x == 0 || field_0x10a[3].x == 256) { + r30 |= !r29 ? J2DBind_Right : J2DBind_Bottom; + } + if (field_0x10a[3].y == 0 || field_0x10a[3].y == 256) { + r30 |= !r29 ? J2DBind_Bottom : J2DBind_Right; + } + return J2DBinding(r30); +} + +void J2DPicture::setMirror(J2DMirror mirror) { + if (getTexture(0)) { + J2DBinding binding = getBinding(); + bool r28 = isTumble(); + setTexCoord(getTexture(0), binding, mirror, r28); + } +} + +bool J2DPicture::isTumble() const { + return field_0x10a[1] == JGeometry::TVec2(s16(field_0x10a[0].x), s16(field_0x10a[3].y)); +} + void J2DPicture::setBlendColorRatio(f32 param_0, f32 param_1) { field_0x11c[0] = param_0; field_0x11c[1] = param_1; @@ -822,10 +839,9 @@ void J2DPicture::setBlendKonstColor() { tmp += field_0x11c[j]; } - f32 tmp2 = tmp + field_0x11c[i]; - if (tmp2 != 0.0f) { - // probably fake match but idk whats happening here - uvar3 |= (u8)(255.0f * (1.0f - tmp / tmp2)) << (i - 1) * 8; + if (tmp + field_0x11c[i] != 0.0f) { + f32 tmp2 = 255.0f * (1.0f - tmp / (tmp + field_0x11c[i])); + uvar3 |= (u8)tmp2 << (i - 1) * 8; } } mBlendKonstColor = uvar3; @@ -839,10 +855,9 @@ void J2DPicture::setBlendKonstAlpha() { tmp += field_0x124[j]; } - f32 tmp2 = tmp + field_0x124[i]; - if (tmp2 != 0.0f) { - // probably fake match but idk whats happening here - uvar3 |= (u8)(255.0f * (1.0f - tmp / tmp2)) << (i - 1) * 8; + if (tmp + field_0x124[i] != 0.0f) { + f32 tmp2 = 255.0f * (1.0f - tmp / (tmp + field_0x124[i])); + uvar3 |= (u8)tmp2 << (i - 1) * 8; } } mBlendKonstAlpha = uvar3; @@ -875,45 +890,15 @@ void J2DPicture::setTexCoord(JGeometry::TVec2* param_0, JUTTexture const* p bool bindBottom; if (!rotate90) { - if (mirror & J2DMirror_X) - bindLeft = binding & J2DBind_Right; - else - bindLeft = binding & J2DBind_Left; - - if (mirror & J2DMirror_X) - bindRight = binding & J2DBind_Left; - else - bindRight = binding & J2DBind_Right; - - if (mirror & J2DMirror_Y) - bindTop = binding & J2DBind_Bottom; - else - bindTop = binding & J2DBind_Top; - - if (mirror & J2DMirror_Y) - bindBottom = binding & J2DBind_Top; - else - bindBottom = binding & J2DBind_Bottom; + bindLeft = mirror & J2DMirror_X ? bool(binding & J2DBind_Right) : bool(binding & J2DBind_Left); + bindRight = mirror & J2DMirror_X ? bool(binding & J2DBind_Left) : bool(binding & J2DBind_Right); + bindTop = mirror & J2DMirror_Y ? bool(binding & J2DBind_Bottom) : bool(binding & J2DBind_Top); + bindBottom = mirror & J2DMirror_Y ? bool(binding & J2DBind_Top) : bool(binding & J2DBind_Bottom); } else { - if (mirror & J2DMirror_X) - bindLeft = binding & J2DBind_Bottom; - else - bindLeft = binding & J2DBind_Top; - - if (mirror & J2DMirror_X) - bindRight = binding & J2DBind_Top; - else - bindRight = binding & J2DBind_Bottom; - - if (mirror & J2DMirror_Y) - bindTop = binding & J2DBind_Left; - else - bindTop = binding & J2DBind_Right; - - if (mirror & J2DMirror_Y) - bindBottom = binding & J2DBind_Right; - else - bindBottom = binding & J2DBind_Left; + bindLeft = mirror & J2DMirror_X ? bool(binding & J2DBind_Bottom) : bool(binding & J2DBind_Top); + bindRight = mirror & J2DMirror_X ? bool(binding & J2DBind_Top) : bool(binding & J2DBind_Bottom); + bindTop = mirror & J2DMirror_Y ? bool(binding & J2DBind_Left) : bool(binding & J2DBind_Right); + bindBottom = mirror & J2DMirror_Y ? bool(binding & J2DBind_Right) : bool(binding & J2DBind_Left); } f32 rectWidth; @@ -992,7 +977,7 @@ bool J2DPicture::isUsed(ResTIMG const* param_0) { } u8 J2DPicture::getUsableTlut(u8 param_0) { - u8 var_r8 = 0; + u8 r27 = 0; for (u8 i = 0; i < mTextureNum; i++) { if (i != param_0 && mTexture[i] != NULL) { @@ -1000,25 +985,32 @@ u8 J2DPicture::getUsableTlut(u8 param_0) { if (img != NULL && img->indexTexture != 0) { int name = mTexture[i]->getTlutName(); - int var_r0 = name >= GX_BIGTLUT0 ? GX_BIGTLUT0 : GX_TLUT0; - u8 temp_r0 = name - var_r0; - if (temp_r0 < 2) { - var_r8 |= (1 << temp_r0); + GXTlut local_34; + (void)&local_34; // force this variable to the stack + if (name >= GX_BIGTLUT0) { + local_34 = GX_BIGTLUT0; + } else { + local_34 = GX_TLUT0; + } + + u8 r24 = name - local_34; + if (r24 < 2) { + r27 |= (1 << r24); } } } } - u8 var_r26 = 0; + u8 r23 = 0; for (u8 i = 0; i < 2; i++) { - if (!(var_r8 & (1 << i))) { - var_r26 = i; + if (!(r27 & (1 << i))) { + r23 = i; break; } } - return var_r26; + return r23; } GXTlut J2DPicture::getTlutID(ResTIMG const* img, u8 param_1) { diff --git a/src/JSystem/J2DGraph/J2DPictureEx.cpp b/src/JSystem/J2DGraph/J2DPictureEx.cpp index 9b33e0dcb5..eafa5619fe 100644 --- a/src/JSystem/J2DGraph/J2DPictureEx.cpp +++ b/src/JSystem/J2DGraph/J2DPictureEx.cpp @@ -8,8 +8,8 @@ #include "dolphin/types.h" void J2DPictureEx::initiate(ResTIMG const* param_0, ResTLUT const* param_1) { - J2DTexGenBlock* this_00 = mMaterial->getTexGenBlock(); - if (this_00->getTexGenNum() == 0 && append(param_0, 1.0f) && param_1 != NULL) { + u32 texGenNum = mMaterial->getTexGenBlock()->getTexGenNum(); + if (texGenNum == 0 && append(param_0, 1.0f) && param_1 != NULL) { if (mMaterial->getTevBlock()->getPalette(0) == NULL) { mMaterial->getTevBlock()->setPalette(0, param_1); } @@ -102,43 +102,44 @@ void J2DPictureEx::drawTexCoord(f32 param_0, f32 param_1, f32 param_2, f32 param f32 dVar11 = param_1 + param_3; Mtx auStack_88; MTXConcat(*param_12, mGlobalMtx, auStack_88); - if (mMaterial == NULL || mMaterial->isVisible()) { - GXLoadPosMtxImm(auStack_88, 0); - JUtility::TColor TStack_8c = mCornerColor[0]; - JUtility::TColor TStack_90 = mCornerColor[1]; - JUtility::TColor TStack_94 = mCornerColor[2]; - JUtility::TColor TStack_98 = mCornerColor[3]; - if (mMaterial != NULL) { - if (mMaterial->getColorBlock()->getColorChan(1)->getMatSrc() == 1) { - if (mMaterial->getMaterialAlphaCalc() == 1) { - TStack_8c.a = TStack_8c.a * mColorAlpha / 255; - TStack_90.a = TStack_90.a * mColorAlpha / 255; - TStack_94.a = TStack_94.a * mColorAlpha / 255; - TStack_98.a = TStack_98.a * mColorAlpha / 255; - } - } else if (mIsInfluencedAlpha) { - GXSetChanMatColor(GX_ALPHA0, JUtility::TColor(mColorAlpha)); - } - } - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0); - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBA4, 8); - GXBegin(GX_QUADS, GX_VTXFMT0, 4); - GXPosition3f32(param_0, param_1, 0.0f); - GXColor1u32(TStack_8c); - GXTexCoord2s16(param_4, param_5); - GXPosition3f32(dVar12, param_1, 0.0f); - GXColor1u32(TStack_90); - GXTexCoord2s16(param_6, param_7); - GXPosition3f32(dVar12, dVar11, 0.0f); - GXColor1u32(TStack_98); - GXTexCoord2s16(param_10, param_11); - GXPosition3f32(param_0, dVar11, 0.0f); - GXColor1u32(TStack_94); - GXTexCoord2s16(param_8, param_9); - GXEnd(); - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBX8, 0xf); - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_RGBA4, 0); + if (mMaterial && !mMaterial->isVisible()) { + return; } + GXLoadPosMtxImm(auStack_88, 0); + JUtility::TColor TStack_8c = mCornerColor[0]; + JUtility::TColor TStack_90 = mCornerColor[1]; + JUtility::TColor TStack_94 = mCornerColor[2]; + JUtility::TColor TStack_98 = mCornerColor[3]; + if (mMaterial != NULL) { + if (mMaterial->getColorBlock()->getColorChan(1)->getMatSrc() == 1) { + if (mMaterial->getMaterialAlphaCalc() == 1) { + TStack_8c.a = TStack_8c.a * mColorAlpha / 255; + TStack_90.a = TStack_90.a * mColorAlpha / 255; + TStack_94.a = TStack_94.a * mColorAlpha / 255; + TStack_98.a = TStack_98.a * mColorAlpha / 255; + } + } else if (mIsInfluencedAlpha) { + GXSetChanMatColor(GX_ALPHA0, JUtility::TColor(mColorAlpha)); + } + } + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBA4, 8); + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition3f32(param_0, param_1, 0.0f); + GXColor1u32(TStack_8c); + GXTexCoord2s16(param_4, param_5); + GXPosition3f32(dVar12, param_1, 0.0f); + GXColor1u32(TStack_90); + GXTexCoord2s16(param_6, param_7); + GXPosition3f32(dVar12, dVar11, 0.0f); + GXColor1u32(TStack_98); + GXTexCoord2s16(param_10, param_11); + GXPosition3f32(param_0, dVar11, 0.0f); + GXColor1u32(TStack_94); + GXTexCoord2s16(param_8, param_9); + GXEnd(); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBX8, 0xf); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_RGBA4, 0); } @@ -147,7 +148,8 @@ bool J2DPictureEx::append(ResTIMG const* param_0, JUTPalette* param_1, f32 param return false; } - return insert(param_0, param_1, mMaterial->getTexGenBlock()->getTexGenNum(), param_2); + u32 texGenNum = mMaterial->getTexGenBlock()->getTexGenNum(); + return insert(param_0, param_1, texGenNum, param_2); } bool J2DPictureEx::append(char const* param_0, JUTPalette* param_1, f32 param_2) { @@ -155,7 +157,8 @@ bool J2DPictureEx::append(char const* param_0, JUTPalette* param_1, f32 param_2) return false; } - return insert(param_0, param_1, mMaterial->getTexGenBlock()->getTexGenNum(), param_2); + u32 texGenNum = mMaterial->getTexGenBlock()->getTexGenNum(); + return insert(param_0, param_1, texGenNum, param_2); } bool J2DPictureEx::append(JUTTexture* param_0, f32 param_1) { @@ -163,7 +166,8 @@ bool J2DPictureEx::append(JUTTexture* param_0, f32 param_1) { return false; } - return insert(param_0, mMaterial->getTexGenBlock()->getTexGenNum(), param_1); + u32 texGenNum = mMaterial->getTexGenBlock()->getTexGenNum(); + return insert(param_0, texGenNum, param_1); } bool J2DPictureEx::insert(ResTIMG const* param_0, JUTPalette* param_1, u8 param_2, @@ -182,8 +186,7 @@ bool J2DPictureEx::insert(ResTIMG const* param_0, JUTPalette* param_1, u8 param_ } bool J2DPictureEx::insert(char const* param_0, JUTPalette* param_1, u8 param_2, f32 param_3) { - ResTIMG const* resource = (ResTIMG const*)J2DScreen::getNameResource(param_0); - return insert(resource, param_1, param_2, param_3); + return insert((ResTIMG*)J2DScreen::getNameResource(param_0), param_1, param_2, param_3); } bool J2DPictureEx::insert(JUTTexture* param_0, u8 param_1, f32 param_2) { @@ -201,15 +204,14 @@ bool J2DPictureEx::insert(JUTTexture* param_0, u8 param_1, f32 param_2) { } void J2DPictureEx::insertCommon(u8 pos, f32 param_1) { - u8 new_tev_stage_num; u8 tex_gen_num = mMaterial->getTexGenBlock()->getTexGenNum(); - mMaterial->getTevBlock()->getMaxStage(); - int tev_stage_num = mMaterial->getTevBlock()->getTevStageNum(); + u8 maxStage = mMaterial->getTevBlock()->getMaxStage(); + u8 tev_stage_num = u8(mMaterial->getTevBlock()->getTevStageNum()); bool bVar1; if (tex_gen_num <= 1) { - bVar1 = tev_stage_num != 1; + bVar1 = tev_stage_num == 1 ? false : true; } else { - bVar1 = tev_stage_num != tex_gen_num + 1; + bVar1 = int(tev_stage_num) == tex_gen_num + 1 ? false : true; } shiftSetBlendRatio(pos, param_1, true, true); @@ -228,21 +230,22 @@ void J2DPictureEx::insertCommon(u8 pos, f32 param_1) { } for (int i = tex_gen_num - 1; i > pos; i--) { - mMaterial->getTexGenBlock()->setTexMtx((u8)i, mMaterial->getTexGenBlock()->getTexMtx((u8)(i - 1))); + J2DTexMtx* texMtx = &mMaterial->getTexGenBlock()->getTexMtx((u8)(i - 1)); + mMaterial->getTexGenBlock()->setTexMtx((u8)i, *texMtx); } J2DTexMtx tex_mtx; mMaterial->getTexGenBlock()->setTexMtx(pos, tex_mtx); if (tex_gen_num == 1) { - new_tev_stage_num = 1; + tev_stage_num = 1; } else { - new_tev_stage_num = tex_gen_num + (bVar1 ? 2 : 1); + tev_stage_num = tex_gen_num + (bVar1 ? 2 : 1); } - mMaterial->getTevBlock()->setTevStageNum(new_tev_stage_num); + mMaterial->getTevBlock()->setTevStageNum(tev_stage_num); - setTevOrder(tex_gen_num, new_tev_stage_num, bVar1); - setTevStage(tex_gen_num, new_tev_stage_num, bVar1); + setTevOrder(tex_gen_num, tev_stage_num, bVar1); + setTevStage(tex_gen_num, tev_stage_num, bVar1); setTevKColor(tex_gen_num); setTevKColorSel(tex_gen_num); setTevKAlphaSel(tex_gen_num); @@ -265,7 +268,8 @@ bool J2DPictureEx::isInsert(u8 pos) const { return false; } - if (maxStage == mMaterial->getTevBlock()->getTevStageNum() && texGenNum != 0) { + u8 tevStageNum = u8(mMaterial->getTevBlock()->getTevStageNum()); + if (maxStage == tevStageNum && texGenNum != 0) { return false; } @@ -278,7 +282,7 @@ bool J2DPictureEx::remove(u8 pos) { } u8 tex_gen_num = mMaterial->getTexGenBlock()->getTexGenNum(); - u8 tev_stage_num = mMaterial->getTevBlock()->getTevStageNum(); + u8 tev_stage_num = u8(mMaterial->getTevBlock()->getTevStageNum()); bool bVar1 = tev_stage_num == tex_gen_num + 1 ? false : true; shiftSetBlendRatio(pos, 0.0f, true, false); @@ -360,18 +364,17 @@ void J2DPictureEx::draw(f32 param_0, f32 param_1, u8 texNo, bool param_3, bool p return; } - if (!isVisible()) { - return; - } + if (isVisible()) { + u32 texGenNum = mMaterial->getTexGenBlock()->getTexGenNum(); + if (texNo >= texGenNum) { + return; + } - if (texNo >= mMaterial->getTexGenBlock()->getTexGenNum()) { - return; - } - - JUTTexture* texture = mMaterial->getTevBlock()->getTexture(texNo); - if (texture != NULL) { - draw(param_0, param_1, texture->getWidth(), texture->getHeight(), - param_3, param_4, param_5); + JUTTexture* texture = mMaterial->getTevBlock()->getTexture(texNo); + if (texture != NULL) { + draw(param_0, param_1, texture->getWidth(), texture->getHeight(), + param_3, param_4, param_5); + } } } @@ -616,8 +619,9 @@ void J2DPictureEx::setTevOrder(u8 param_0, u8 param_1, bool param_2) { } void J2DPictureEx::setTevStage(u8 param_0, u8 param_1, bool param_2) { + J2DTevStage* stage; if (param_0 == 1) { - J2DTevStage* stage = mMaterial->getTevBlock()->getTevStage(0); + stage = mMaterial->getTevBlock()->getTevStage(0); JUTTexture* texture = mMaterial->getTevBlock()->getTexture(0); bool bVar1 = false; if (texture != NULL && texture->getTexInfo() != NULL @@ -634,7 +638,7 @@ void J2DPictureEx::setTevStage(u8 param_0, u8 param_1, bool param_2) { setStage(stage, STAGE_4); } } else if (!param_2) { - J2DTevStage* stage = mMaterial->getTevBlock()->getTevStage(0); + stage = mMaterial->getTevBlock()->getTevStage(0); setStage(stage, STAGE_2); for (u8 i = 1; i < param_0; i++) { stage = mMaterial->getTevBlock()->getTevStage(i); @@ -643,7 +647,7 @@ void J2DPictureEx::setTevStage(u8 param_0, u8 param_1, bool param_2) { stage = mMaterial->getTevBlock()->getTevStage(param_0); setStage(stage, STAGE_4); } else { - J2DTevStage* stage = mMaterial->getTevBlock()->getTevStage(0); + stage = mMaterial->getTevBlock()->getTevStage(0); setStage(stage, STAGE_2); for (u8 i = 1; i < param_0; i++) { stage = mMaterial->getTevBlock()->getTevStage(i); @@ -812,7 +816,8 @@ void J2DPictureEx::setBlendColorRatio(f32 param_0, f32 param_1) { field_0x160[i] = 1.0f; } - setTevKColor(mMaterial->getTexGenBlock()->getTexGenNum()); + u8 texGenNum = mMaterial->getTexGenBlock()->getTexGenNum(); + setTevKColor(texGenNum); } @@ -828,7 +833,8 @@ void J2DPictureEx::setBlendAlphaRatio(f32 param_0, f32 param_1) { field_0x178[i] = 1.0f; } - setTevKColor(mMaterial->getTexGenBlock()->getTexGenNum()); + u8 texGenNum = mMaterial->getTexGenBlock()->getTexGenNum(); + setTevKColor(texGenNum); } @@ -862,8 +868,7 @@ const ResTIMG* J2DPictureEx::changeTexture(ResTIMG const* img, u8 param_1) { } const ResTIMG* J2DPictureEx::changeTexture(char const* param_0, u8 param_1) { - ResTIMG const* resource = (ResTIMG const*)J2DScreen::getNameResource(param_0); - return changeTexture(resource, param_1); + return changeTexture((ResTIMG*)J2DScreen::getNameResource(param_0), param_1); } const ResTIMG* J2DPictureEx::changeTexture(ResTIMG const* param_0, u8 param_1, JUTPalette* param_2) { @@ -884,7 +889,8 @@ const ResTIMG* J2DPictureEx::changeTexture(ResTIMG const* param_0, u8 param_1, J const ResTIMG* texInfo = getTexture(param_1)->getTexInfo(); GXTlut _Var7 = GX_TLUT0; if (param_0->indexTexture != 0) { - _Var7 = getTlutID(param_0, getUsableTlut(param_1)); + u8 tlut = getUsableTlut(param_1); + _Var7 = getTlutID(param_0, tlut); } getTexture(param_1)->storeTIMG(param_0, param_2, _Var7); return texInfo; @@ -894,8 +900,7 @@ const ResTIMG* J2DPictureEx::changeTexture(ResTIMG const* param_0, u8 param_1, J } const ResTIMG* J2DPictureEx::changeTexture(char const* param_0, u8 param_1, JUTPalette* param_2) { - ResTIMG const* resource = (ResTIMG const*)J2DScreen::getNameResource(param_0); - return changeTexture(resource, param_1, param_2); + return changeTexture((ResTIMG*)J2DScreen::getNameResource(param_0), param_1, param_2); } JUTTexture* J2DPictureEx::getTexture(u8 param_0) const { @@ -952,10 +957,7 @@ bool J2DPictureEx::setBlackWhite(JUtility::TColor param_0, JUtility::TColor para bool bVar1; u8 uVar2; u8 texGenNum = mMaterial->getTexGenBlock()->getTexGenNum(); - bVar1 = true; - if ((param_0 == 0) && (param_1 == 0xffffffff)) { - bVar1 = false; - } + bVar1 = (param_0 != 0) || (param_1 != 0xffffffff); if (texGenNum == 1) { uVar2 = (bVar1) ? 2 : 1; } else { diff --git a/src/JSystem/J2DGraph/J2DPrint.cpp b/src/JSystem/J2DGraph/J2DPrint.cpp index a155a2e62f..b6c8876aee 100644 --- a/src/JSystem/J2DGraph/J2DPrint.cpp +++ b/src/JSystem/J2DGraph/J2DPrint.cpp @@ -3,8 +3,8 @@ #include "JSystem/J2DGraph/J2DPrint.h" #include "JSystem/JKernel/JKRHeap.h" #include "JSystem/JUtility/JUTFont.h" -#include -#include +#include +#include char* J2DPrint::mStrBuff; diff --git a/src/JSystem/J2DGraph/J2DScreen.cpp b/src/JSystem/J2DGraph/J2DScreen.cpp index 93989d1938..28f90beeaa 100644 --- a/src/JSystem/J2DGraph/J2DScreen.cpp +++ b/src/JSystem/J2DGraph/J2DScreen.cpp @@ -172,7 +172,7 @@ s32 J2DScreen::makeHierarchyPanes(J2DPane* p_basePane, JSURandomInputStream* p_s J2DPane* J2DScreen::createPane(J2DScrnBlockHeader const& header, JSURandomInputStream* p_stream, J2DPane* p_basePane, u32 param_3, JKRArchive* p_archive) { - J2DPane* newPane; + J2DPane* newPane = NULL; switch (header.mTag) { case 'PAN1': @@ -212,6 +212,7 @@ J2DPane* J2DScreen::createPane(J2DScrnBlockHeader const& header, JSURandomInputS newPane = new J2DTextBox(p_basePane, p_stream, param_3, mMaterials); break; default: + JUT_WARN(446, "%s", "unknown pane"); s32 position = p_stream->getPosition(); s32 size = header.mSize; s32 start = size + position; @@ -280,29 +281,30 @@ void J2DScreen::drawSelf(f32 param_0, f32 param_1, Mtx* param_2) { JUtility::TColor color(mColor); u8 alpha = (color.a * mAlpha) / 255; - if (alpha != 0) { - JUtility::TColor sp8(alpha | ((u32)color & 0xFFFFFF00)); - color = sp8; - - GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_SET); - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); - GXBegin(GX_QUADS, GX_VTXFMT0, 4); - - GXPosition3f32(0.0f, 0.0f, 0.0f); - GXColor1u32(color); - - GXPosition3f32(getWidth(), 0.0f, 0.0f); - GXColor1u32(color); - - GXPosition3f32(getWidth(), getHeight(), 0.0f); - GXColor1u32(color); - - GXPosition3f32(0.0f, getHeight(), 0.0f); - GXColor1u32(color); - - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0); - GXEnd(); + if (alpha == 0) { + return; } + + color = JUtility::TColor(alpha | ((u32)color & 0xFFFFFF00)); + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_SET); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + + GXPosition3f32(0.0f, 0.0f, 0.0f); + GXColor1u32(color); + + GXPosition3f32(getWidth(), 0.0f, 0.0f); + GXColor1u32(color); + + GXPosition3f32(getWidth(), getHeight(), 0.0f); + GXColor1u32(color); + + GXPosition3f32(0.0f, getHeight(), 0.0f); + GXColor1u32(color); + GXEnd(); + + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0); } J2DResReference* J2DScreen::getResReference(JSURandomInputStream* p_stream, u32 param_1) { @@ -407,7 +409,7 @@ bool J2DScreen::isUsed(ResFONT const* p_font) { J2DDataManage* J2DScreen::mDataManage; void* J2DScreen::getNameResource(char const* resName) { - void* res = JKRFileLoader::getGlbResource(resName, NULL); + void* res = JKRGetNameResource(resName, NULL); if (res == NULL && mDataManage != NULL) { res = mDataManage->get(resName); diff --git a/src/JSystem/J2DGraph/J2DTevs.cpp b/src/JSystem/J2DGraph/J2DTevs.cpp index 3f6010e4df..88d1c1c69b 100644 --- a/src/JSystem/J2DGraph/J2DTevs.cpp +++ b/src/JSystem/J2DGraph/J2DTevs.cpp @@ -5,8 +5,8 @@ #include "JSystem/JSystem.h" // IWYU pragma: keep #include "JSystem/J2DGraph/J2DTevs.h" -#include "JSystem/J2DGraph/J2DMatBlock.h" -#include +#include "JSystem/J2DGraph/J2DMaterial.h" +#include #include "dolphin/gx.h" void J2DTexMtx::load(u32 mtxIdx) { @@ -76,22 +76,33 @@ void J2DIndTexOrder::load(u8 indTexStage) { GXSetIndTexOrder((GXIndTexStageID)indTexStage, (GXTexCoordID)mInfo.mTexCoordID, (GXTexMapID)mInfo.mTexMapID); } -static void dummyVirtual(J2DTevBlock* block, J2DIndBlock* indBlock) { +static void dummyVirtual(J2DMaterial* material) { + J2DIndBlock* indBlock = material->getIndBlock(); indBlock->getIndTexStageNum(); indBlock->getIndTexOrder(0); indBlock->getIndTexStageNum(); indBlock->getIndTexOrder(0); indBlock->getIndTexMtx(0); indBlock->getIndTexCoordScale(0); + J2DColorBlock* colorBlock = material->getColorBlock(); + J2DTexGenBlock* texGenBlock = material->getTexGenBlock(); + texGenBlock->getTexGenNum(); + J2DTevBlock* block = material->getTevBlock(); block->getIndTevStage(0); block->getTevStageNum(); + material->getPEBlock(); + material->getMaterialAlphaCalc(); + colorBlock->getMatColor(0); + colorBlock->getColorChan(0); + texGenBlock->getTexCoord(0); + texGenBlock->getTexMtx(0).getTexMtxInfo(); block->getTexNo(0); block->getFontNo(); block->getTevKColor(0); block->getTevKColorSel(0); block->getTevKAlphaSel(0); block->getTevOrder(0); - block->getTevColor(0); + J2DGXColorS10 color(*block->getTevColor(0)); block->getTevStage(0); block->getTevSwapModeTable(0); } diff --git a/src/JSystem/J2DGraph/J2DWindow.cpp b/src/JSystem/J2DGraph/J2DWindow.cpp index c33fd3c095..7907afc8c9 100644 --- a/src/JSystem/J2DGraph/J2DWindow.cpp +++ b/src/JSystem/J2DGraph/J2DWindow.cpp @@ -95,23 +95,16 @@ J2DWindow::J2DWindow(J2DPane* param_0, JSURandomInputStream* param_1, J2DMateria mWhite = JUtility::TColor(0xffffffff); if (local_98[0] != NULL && local_98[0]->getTevBlock() != NULL) { - if (local_98[0]->getTevBlock()->getTevStageNum() != 1) { - J2DGXColorS10* local_c8 = local_98[0]->getTevBlock()->getTevColor(0); - s16 blackr = local_c8->r; - s16 blackg = local_c8->g; - s16 blackb = local_c8->b; - s16 blacka = local_c8->a; - J2DGXColorS10* local_d0 = local_98[0]->getTevBlock()->getTevColor(1); - s16 whiter = local_d0->r; - s16 whiteg = local_d0->g; - s16 whiteb = local_d0->b; - s16 whitea = local_d0->a; + u8 tevStageNum = u8(local_98[0]->getTevBlock()->getTevStageNum()); + if (tevStageNum != 1) { + J2DGXColorS10 local_c8 = *local_98[0]->getTevBlock()->getTevColor(0); + J2DGXColorS10 local_d0 = *local_98[0]->getTevBlock()->getTevColor(1); mBlack = JUtility::TColor( - (((u8)blackr) << 24) | (((u8)blackg) << 16) | (((u8)blackb) << 8) | - ((u8)blacka)); + (((u8)local_c8.r) << 24) | (((u8)local_c8.g) << 16) | (((u8)local_c8.b) << 8) | + ((u8)local_c8.a)); mWhite = JUtility::TColor( - (((u8)whiter) << 24) | (((u8)whiteg) << 16) | (((u8)whiteb) << 8) | - ((u8)whitea)); + (((u8)local_d0.r) << 24) | (((u8)local_d0.g) << 16) | (((u8)local_d0.b) << 8) | + ((u8)local_d0.a)); } } @@ -122,14 +115,12 @@ J2DWindow::J2DWindow(J2DPane* param_0, JSURandomInputStream* param_1, J2DMateria &field_0x10c, }; - J2DMaterial * mat; for (u32 uVar6 = 0; uVar6 < 4; uVar6++) { - mat = local_98[uVar6]; - if (mat != NULL && mat->getTevBlock() != NULL) { - JUTTexture* local_e0 = mat->getTevBlock()->getTexture(0); + if (local_98[uVar6] != NULL && local_98[uVar6]->getTevBlock() != NULL) { + JUTTexture* local_e0 = local_98[uVar6]->getTevBlock()->getTexture(0); if (local_e0 != NULL) { *textures[uVar6] = local_e0; - mat->getTevBlock()->setUndeleteFlag(0xfe); + local_98[uVar6]->getTevBlock()->setUndeleteFlag(0xfe); } } } @@ -224,6 +215,7 @@ void J2DWindow::private_readStream(J2DPane* param_0, JSURandomInputStream* param r27 -= u8(14); field_0x110 = NULL; if (r27) { + int unused; timg = (ResTIMG*)getPointer(param_1, 'TIMG', param_2); if (timg) { field_0x110 = new JUTTexture(timg, 0); @@ -334,74 +326,39 @@ void J2DWindow::draw_private(JGeometry::TBox2 const& param_0, f32 f27 = f29 + field_0x100->getWidth(); f32 f26 = f28 + field_0x100->getHeight(); drawFrameTexture(field_0x100, f29, f28, field_0x144 & 0x80, field_0x144 & 0x40, true); - bool r24 = isField0x145Set(1); + bool r24 = field_0x145 & 1; drawFrameTexture(field_0x104, f31, f28, field_0x144 & 0x20, field_0x144 & 0x10, r24); - u16 local_a6; - if (field_0x144 & 0x20) { - local_a6 = 0x8000; - } else { - local_a6 = 0; - } - u16 local_a8; - if (field_0x144 & 0x10) { - local_a8 = 0; - } else { - local_a8 = 0x8000; - } - u16 local_a82 = local_a8 ^ 0x8000; - - drawFrameTexture(field_0x104, f27, f28, f31 - f27, field_0x104->getHeight(), local_a6, - local_a8, local_a6, local_a82, false); - bool isset2 = isField0x145Set(2); - drawFrameTexture(field_0x10c, f31, f30, field_0x144 & 2, field_0x144 & 1, isset2); - u16 local_aa; - if (field_0x144 & 2) { - local_aa = 0x8000; - } else { - local_aa = 0; - } - u16 local_ac; - if (field_0x144 & 1) { - local_ac = 0; - } else { - local_ac = 0x8000; - } - local_a82 = local_ac ^ 0x8000; - drawFrameTexture(field_0x10c, f27, f30, f31 - f27, field_0x10c->getHeight(), local_aa, - local_ac, local_aa, local_a82, false); - u16 local_ae; - if (field_0x144 & 2) { - local_ae = 0; - } else { - local_ae = 0x8000; - } - u16 local_ae2 = local_ae ^ 0x8000; - u16 local_b0; - if (field_0x144 & 1) { - local_b0 = 0x8000; - } else { - local_b0 = 0; - } - drawFrameTexture(field_0x10c, f31, f26, field_0x10c->getWidth(), f30 - f26, local_ae, - local_b0, local_ae2, local_b0, false); - bool isset4 = isField0x145Set(4); - drawFrameTexture(field_0x108, f29, f30, field_0x144 & 8, field_0x144 & 4, isset4); + u16 r29, r28, r27, r26; + r27 = field_0x144 & 0x20 ? u16(0x8000) : u16(0); + r29 = r27; + r28 = field_0x144 & 0x10 ? u16(0) : u16(0x8000); + r26 = r28 ^ 0x8000; - u16 local_b2; - if (field_0x144 & 8) { - local_b2 = 0; - } else { - local_b2 = 0x8000; - } - u16 local_b22 = local_b2 ^ 0x8000; - u16 local_b4; - if (field_0x144 & 4) { - local_b4 = 0x8000; - } else { - local_b4 = 0; - } - drawFrameTexture(field_0x108, f29, f26, field_0x108->getWidth(), f30 - f26, local_b2, - local_b4, local_b22, local_b4, false); + drawFrameTexture(field_0x104, f27, f28, f31 - f27, field_0x104->getHeight(), r29, + r28, r27, r26, false); + r24 = field_0x145 & 2; + drawFrameTexture(field_0x10c, f31, f30, field_0x144 & 2, field_0x144 & 1, r24); + r27 = field_0x144 & 2 ? u16(0x8000) : u16(0); + r29 = r27; + r28 = field_0x144 & 1 ? u16(0) : u16(0x8000); + r26 = r28 ^ 0x8000; + drawFrameTexture(field_0x10c, f27, f30, f31 - f27, field_0x10c->getHeight(), r29, + r28, r27, r26, false); + r29 = field_0x144 & 2 ? u16(0) : u16(0x8000); + r27 = r29 ^ 0x8000; + r26 = field_0x144 & 1 ? u16(0x8000) : u16(0); + r28 = r26; + drawFrameTexture(field_0x10c, f31, f26, field_0x10c->getWidth(), f30 - f26, r29, + r28, r27, r26, false); + r24 = field_0x145 & 4; + drawFrameTexture(field_0x108, f29, f30, field_0x144 & 8, field_0x144 & 4, r24); + + r29 = field_0x144 & 8 ? u16(0) : u16(0x8000); + r27 = r29 ^ 0x8000; + r26 = field_0x144 & 4 ? u16(0x8000) : u16(0); + r28 = r26; + drawFrameTexture(field_0x108, f29, f26, field_0x108->getWidth(), f30 - f26, r29, + r28, r27, r26, false); } GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); @@ -671,42 +628,3 @@ bool J2DWindow::isUsed(ResTIMG const* param_0) { } return J2DPane::isUsed(param_0); } - -u16 J2DWindow::getTypeID() const { - return 17; -} - -void J2DWindow::draw(f32 param_0, f32 param_1, f32 param_2, f32 param_3) { - draw(JGeometry::TBox2(param_0, param_1, param_0 + param_2, param_1 + param_3)); -} - -JUTTexture* J2DWindow::getContentsTexture(u8 param_0) const { - if (param_0 != 0) { - return NULL; - } - return field_0x110; -} - -void J2DWindow::getMaterial(J2DWindow::TMaterial& param_0) const { - param_0.field_0x0 = NULL; - param_0.field_0x4 = NULL; - param_0.field_0x8 = NULL; - param_0.field_0xc = NULL; - param_0.field_0x10 = NULL; -} - -J2DMaterial* J2DWindow::getFrameMaterial(u8 param_0) const { - return NULL; -} - -J2DMaterial* J2DWindow::getContentsMaterial() const { - return NULL; -} - -bool J2DWindow::isUsed(ResFONT const* param_0) { - return J2DPane::isUsed(param_0); -} - -void J2DWindow::rewriteAlpha() { - /* empty function */ -} diff --git a/src/JSystem/J2DGraph/J2DWindowEx.cpp b/src/JSystem/J2DGraph/J2DWindowEx.cpp index 0d3b3d144f..6b1b6748d2 100644 --- a/src/JSystem/J2DGraph/J2DWindowEx.cpp +++ b/src/JSystem/J2DGraph/J2DWindowEx.cpp @@ -81,6 +81,10 @@ J2DWindowEx::J2DWindowEx(J2DPane* param_0, JSURandomInputStream* param_1, u32 pa setMinSize(); } +static void dummy(J2DTexGenBlock* block) { + block->setTexCoord(0, J2DTexCoord()); +} + void J2DWindowEx::setMinSize() { field_0x140 = 1; field_0x142 = 1; diff --git a/src/JSystem/J3DGraphAnimator/J3DAnimation.cpp b/src/JSystem/J3DGraphAnimator/J3DAnimation.cpp index 8cfa46ff23..6b9a2d2250 100644 --- a/src/JSystem/J3DGraphAnimator/J3DAnimation.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DAnimation.cpp @@ -565,9 +565,8 @@ f32 J3DGetKeyFrameInterpolation(f32 frame, J3DAnmKeyTableBase* pKeyTable, T* pDa } if (pKeyTable->mType == 0) { - u32 idx = pKeyTable->mMaxFrame - 1; - if (pData[idx * 3] <= frame) { - return pData[idx * 3 + 1]; + if (pData[(pKeyTable->mMaxFrame - 1) * 3] <= frame) { + return pData[(pKeyTable->mMaxFrame - 1) * 3 + 1]; } u32 uVar7 = pKeyTable->mMaxFrame; @@ -585,9 +584,8 @@ f32 J3DGetKeyFrameInterpolation(f32 frame, J3DAnmKeyTableBase* pKeyTable, T* pDa f32 interpolated = J3DHermiteInterpolation(frame, &pData[0], &pData[1], &pData[2], &pData[3], &pData[4], &pData[5]); return interpolated; } else { - u32 idx = pKeyTable->mMaxFrame - 1; - if (pData[idx * 4] <= frame) { - return pData[idx * 4 + 1]; + if (pData[(pKeyTable->mMaxFrame - 1) * 4] <= frame) { + return pData[(pKeyTable->mMaxFrame - 1) * 4 + 1]; } u32 var_r27 = pKeyTable->mMaxFrame; diff --git a/src/JSystem/J3DGraphAnimator/J3DCluster.cpp b/src/JSystem/J3DGraphAnimator/J3DCluster.cpp index da4370dc16..1bb6a195f2 100644 --- a/src/JSystem/J3DGraphAnimator/J3DCluster.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DCluster.cpp @@ -252,6 +252,10 @@ void J3DDeformer::deform(J3DVertexBuffer* i_buffer, u16 param_1, f32* i_weights) } } +static void dummy(J3DDeformData* data) { + data->getClusterNum(); +} + void J3DDeformer::normalizeWeight(int i_keyNum, f32* i_weights) { f32 totalWeight = 0.0f; for (u16 i = 0; i < i_keyNum; i++) { diff --git a/src/JSystem/J3DGraphAnimator/J3DJoint.cpp b/src/JSystem/J3DGraphAnimator/J3DJoint.cpp index 25d449c032..00fd7d1935 100644 --- a/src/JSystem/J3DGraphAnimator/J3DJoint.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DJoint.cpp @@ -10,16 +10,16 @@ void J3DMtxCalcJ3DSysInitBasic::init(Vec const& scale, Mtx const& mtx) { J3DSys::mCurrentS = scale; - J3DSys::mParentS = (Vec){1.0f, 1.0f, 1.0f}; - JMAMTXApplyScale(mtx, J3DSys::mCurrentMtx, J3DSys::mCurrentS.x, J3DSys::mCurrentS.y, - J3DSys::mCurrentS.z); + Vec init = {1.0f, 1.0f, 1.0f}; + J3DSys::mParentS = init; + JMAMTXApplyScale(mtx, J3DSys::mCurrentMtx, scale.x, scale.y, scale.z); } void J3DMtxCalcJ3DSysInitMaya::init(Vec const& scale, Mtx const& mtx) { - J3DSys::mParentS = (Vec){1.0f, 1.0f, 1.0f}; + Vec init = {1.0f, 1.0f, 1.0f}; + J3DSys::mParentS = init; J3DSys::mCurrentS = scale; - JMAMTXApplyScale(mtx, J3DSys::mCurrentMtx, J3DSys::mCurrentS.x, J3DSys::mCurrentS.y, - J3DSys::mCurrentS.z); + JMAMTXApplyScale(mtx, J3DSys::mCurrentMtx, scale.x, scale.y, scale.z); } J3DMtxBuffer* J3DMtxCalc::mMtxBuffer; @@ -35,8 +35,9 @@ inline s32 checkScaleOne(const Vec& param_0) { } void J3DMtxCalcCalcTransformBasic::calcTransform(J3DTransformInfo const& transInfo) { + J3DJoint* joint = J3DMtxCalc::getJoint(); J3DMtxBuffer* mtxBuf = J3DMtxCalc::getMtxBuffer(); - u16 jntNo = J3DMtxCalc::getJoint()->getJntNo(); + u16 jntNo = joint->getJntNo(); MtxP anmMtx = mtxBuf->getAnmMtx(jntNo); @@ -58,8 +59,9 @@ void J3DMtxCalcCalcTransformBasic::calcTransform(J3DTransformInfo const& transIn } void J3DMtxCalcCalcTransformSoftimage::calcTransform(J3DTransformInfo const& transInfo) { + J3DJoint* joint = J3DMtxCalc::getJoint(); J3DMtxBuffer* mtxBuf = J3DMtxCalc::getMtxBuffer(); - u16 jntNo = J3DMtxCalc::getJoint()->getJntNo(); + u16 jntNo = joint->getJntNo(); MtxP anmMtx = mtxBuf->getAnmMtx(jntNo); @@ -104,20 +106,22 @@ void J3DMtxCalcCalcTransformMaya::calcTransform(J3DTransformInfo const& transInf transInfo.mScale.z); } - if (joint->getScaleCompensate() == 1) { - f32 invX = JMath::fastReciprocal(J3DSys::mParentS.x); - f32 invY = JMath::fastReciprocal(J3DSys::mParentS.y); - f32 invZ = JMath::fastReciprocal(J3DSys::mParentS.z); + u8 scaleCompensate = joint->getScaleCompensate(); + if (scaleCompensate == 1) { + Vec inv; + inv.x = JMath::fastReciprocal(J3DSys::mParentS.x); + inv.y = JMath::fastReciprocal(J3DSys::mParentS.y); + inv.z = JMath::fastReciprocal(J3DSys::mParentS.z); - anmMtx[0][0] *= invX; - anmMtx[0][1] *= invX; - anmMtx[0][2] *= invX; - anmMtx[1][0] *= invY; - anmMtx[1][1] *= invY; - anmMtx[1][2] *= invY; - anmMtx[2][0] *= invZ; - anmMtx[2][1] *= invZ; - anmMtx[2][2] *= invZ; + anmMtx[0][0] *= inv.x; + anmMtx[0][1] *= inv.x; + anmMtx[0][2] *= inv.x; + anmMtx[1][0] *= inv.y; + anmMtx[1][1] *= inv.y; + anmMtx[1][2] *= inv.y; + anmMtx[2][0] *= inv.z; + anmMtx[2][1] *= inv.z; + anmMtx[2][2] *= inv.z; } MTXConcat(J3DSys::mCurrentMtx, anmMtx, J3DSys::mCurrentMtx); @@ -131,13 +135,13 @@ void J3DMtxCalcCalcTransformMaya::calcTransform(J3DTransformInfo const& transInf void J3DJoint::appendChild(J3DJoint* pChild) { if (mChild == NULL) { mChild = pChild; - } else { - J3DJoint* curChild = mChild; - while (curChild->getYounger() != NULL) { - curChild = curChild->getYounger(); - } - curChild->setYounger(pChild); + return; } + J3DJoint* curChild = mChild; + while (curChild->getYounger() != NULL) { + curChild = curChild->getYounger(); + } + curChild->setYounger(pChild); } J3DJoint::J3DJoint() { @@ -149,7 +153,8 @@ J3DJoint::J3DJoint() { mJntNo = 0; mKind = 1; mScaleCompensate = false; - __memcpy(&mTransformInfo, &j3dDefaultTransformInfo, sizeof(J3DTransformInfo)); + J3DTransformInfo* r30 = &mTransformInfo; + void* r29 = __memcpy(r30, &j3dDefaultTransformInfo, sizeof(J3DTransformInfo)); mBoundingSphereRadius = 0.0f; mMtxCalc = NULL; mMesh = NULL; @@ -173,16 +178,16 @@ void J3DJoint::entryIn() { j3dSys.getModel()->getShapePacket(mesh->getShape()->getIndex()); if (!matPacket->isLocked()) { if (mesh->getMaterialAnm()) { - J3DMaterialAnm* piVar8 = mesh->getMaterialAnm(); - piVar8->calc(mesh); + mesh->getMaterialAnm()->calc(mesh); } mesh->calc(anmMtx); } mesh->setCurrentMtx(); matPacket->setMaterialAnmID(mesh->getMaterialAnm()); matPacket->setShapePacket(shapePacket); - J3DDrawBuffer* drawBuffer = j3dSys.getDrawBuffer(mesh->isDrawModeOpaTexEdge()); - if ((u8)matPacket->entry(drawBuffer)) { + bool isDrawModeOpaTexEdge = mesh->isDrawModeOpaTexEdge() == FALSE; + u8 r24 = matPacket->entry(j3dSys.getDrawBuffer(isDrawModeOpaTexEdge)); + if (r24) { j3dSys.setMatPacket(matPacket); J3DDrawBuffer::entryNum++; mesh->makeDisplayList(); @@ -197,18 +202,18 @@ J3DMtxCalc* J3DJoint::mCurrentMtxCalc; void J3DJoint::recursiveCalc() { J3DMtxCalc* prevMtxCalc = NULL; Mtx prevCurrentMtx; - mDoMtx_copy(J3DSys::mCurrentMtx, prevCurrentMtx); - f32 currentX = J3DSys::mCurrentS.x; - f32 currentY = J3DSys::mCurrentS.y; - f32 currentZ = J3DSys::mCurrentS.z; - f32 parentX = J3DSys::mParentS.x; - f32 parentY = J3DSys::mParentS.y; - f32 parentZ = J3DSys::mParentS.z; + MTXCopy(J3DSys::mCurrentMtx, prevCurrentMtx); + Vec current, parent; + current = J3DSys::mCurrentS; + parent = J3DSys::mParentS; if (getMtxCalc() != NULL) { prevMtxCalc = getCurrentMtxCalc(); J3DMtxCalc* piVar2 = this->getMtxCalc(); setCurrentMtxCalc(piVar2); J3DMtxCalc::setJoint(this); +#if DEBUG + J3DMtxCalc::setMtxBuffer(J3DMtxCalc::getMtxBuffer()); +#endif piVar2->calc(); } else { if (getCurrentMtxCalc() != NULL) { @@ -223,18 +228,14 @@ void J3DJoint::recursiveCalc() { (*jointCallback)(this, 0); } - J3DJoint* child = getChild(); - if (child != NULL) { - child->recursiveCalc(); + J3DJoint* joint = getChild(); + if (joint != NULL) { + joint->recursiveCalc(); } - mDoMtx_copy(prevCurrentMtx, J3DSys::mCurrentMtx); + MTXCopy(prevCurrentMtx, J3DSys::mCurrentMtx); - J3DSys::mCurrentS.x = currentX; - J3DSys::mCurrentS.y = currentY; - J3DSys::mCurrentS.z = currentZ; - J3DSys::mParentS.x = parentX; - J3DSys::mParentS.y = parentY; - J3DSys::mParentS.z = parentZ; + J3DSys::mCurrentS = current; + J3DSys::mParentS = parent; if (prevMtxCalc != NULL) { setCurrentMtxCalc(prevMtxCalc); @@ -243,8 +244,8 @@ void J3DJoint::recursiveCalc() { (*jointCallback)(this, 1); } - J3DJoint* younger = getYounger(); - if (younger != NULL) { - younger->recursiveCalc(); + joint = getYounger(); + if (joint != NULL) { + joint->recursiveCalc(); } } diff --git a/src/JSystem/J3DGraphAnimator/J3DJointTree.cpp b/src/JSystem/J3DGraphAnimator/J3DJointTree.cpp index 3dc289a73d..f6b54ff587 100644 --- a/src/JSystem/J3DGraphAnimator/J3DJointTree.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DJointTree.cpp @@ -1,5 +1,6 @@ #include "JSystem/JSystem.h" // IWYU pragma: keep +#include "JSystem/J3DGraphAnimator/J3DJoint.h" #include "JSystem/J3DGraphAnimator/J3DJointTree.h" #include "JSystem/J3DGraphAnimator/J3DMaterialAttach.h" #include "JSystem/J3DGraphAnimator/J3DShapeTable.h" diff --git a/src/JSystem/J3DGraphAnimator/J3DModel.cpp b/src/JSystem/J3DGraphAnimator/J3DModel.cpp index 8e61611c86..076670c80c 100644 --- a/src/JSystem/J3DGraphAnimator/J3DModel.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DModel.cpp @@ -1,9 +1,11 @@ #include "JSystem/JSystem.h" // IWYU pragma: keep +#include "JSystem/J3DGraphAnimator/J3DShapeTable.h" #include "JSystem/J3DGraphAnimator/J3DModel.h" #include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h" #include "JSystem/J3DGraphBase/J3DMaterial.h" #include "JSystem/J3DGraphBase/J3DShapeMtx.h" +#include "JSystem/J3DGraphBase/J3DSys.h" #define J3D_ASSERTMSG(LINE, COND, MSG) JUT_ASSERT_MSG(LINE, (COND) != 0, MSG) #define J3D_WARN1(LINE, MSG, ARG1) JUT_WARN(LINE, MSG, ARG1) @@ -146,8 +148,8 @@ s32 J3DModel::createMatPacket(J3DModelData* pModelData, u32 mdlFlags) { } else { if (pModelData->getModelDataType() == 1) { if (mdlFlags & J3DMdlFlag_UseSingleDL) { - matPacket->mpDisplayListObj = materialNode->getSharedDisplayListObj(); - matPacket->setDisplayListObj(matPacket->mpDisplayListObj); + J3DDisplayListObj* dlobj = materialNode->getSharedDisplayListObj(); + matPacket->setDisplayListObj(dlobj); } else { J3DDisplayListObj* dlobj = materialNode->getSharedDisplayListObj(); ret = dlobj->single_To_Double(); diff --git a/src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp b/src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp index 4acd201eb0..a1e9ba0243 100644 --- a/src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp @@ -1,5 +1,6 @@ #include "JSystem/JSystem.h" // IWYU pragma: keep +#include "JSystem/J3DGraphAnimator/J3DJoint.h" #include "JSystem/J3DGraphAnimator/J3DMtxBuffer.h" #include "JSystem/J3DGraphBase/J3DMaterial.h" #include "JSystem/J3DGraphLoader/J3DModelLoader.h" @@ -408,7 +409,10 @@ void J3DMtxBuffer::calcDrawMtx(u32 mdlFlag, Vec const& param_1, Mtx const& param MtxP viewMtx; Mtx viewBaseMtx; - u16 fullWgtNum; + u16 fullWgtNum; // r25 + u16 local_68; + u16 local_6a; + u16 local_6c; switch (mdlFlag) { case 0: @@ -423,19 +427,19 @@ void J3DMtxBuffer::calcDrawMtx(u32 mdlFlag, Vec const& param_1, Mtx const& param } return; case 1: - fullWgtNum = mJointTree->getDrawFullWgtMtxNum(); - for (u16 i = 0; i < fullWgtNum; i++) { + local_68 = mJointTree->getDrawFullWgtMtxNum(); + for (u16 i = 0; i < local_68; i++) { MTXCopy(getAnmMtx(mJointTree->getDrawMtxIndex(i)), *getDrawMtx(i)); } - fullWgtNum = mJointTree->getDrawFullWgtMtxNum(); - for (u16 i = 0; i < fullWgtNum; i++) { + local_6a = mJointTree->getDrawFullWgtMtxNum(); + for (u16 i = 0; i < local_6a; i++) { MTXCopy(getWeightAnmMtx(i), *getDrawMtx(mJointTree->getDrawFullWgtMtxNum() + i)); } break; case 2: J3DCalcViewBaseMtx(j3dSys.getViewMtx(), param_1, param_2, viewBaseMtx); - fullWgtNum = mJointTree->getDrawFullWgtMtxNum(); - for (u16 i = 0; i < fullWgtNum; i++) { + local_6c = mJointTree->getDrawFullWgtMtxNum(); + for (u16 i = 0; i < local_6c; i++) { MTXConcat(viewBaseMtx, getAnmMtx(mJointTree->getDrawMtxIndex(i)), *getDrawMtx(i)); } if (mJointTree->getDrawMtxNum() > mJointTree->getDrawFullWgtMtxNum()) { diff --git a/src/JSystem/J3DGraphAnimator/J3DShapeTable.cpp b/src/JSystem/J3DGraphAnimator/J3DShapeTable.cpp index 558ef9ea24..04430c32f7 100644 --- a/src/JSystem/J3DGraphAnimator/J3DShapeTable.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DShapeTable.cpp @@ -1,6 +1,7 @@ #include "JSystem/JSystem.h" // IWYU pragma: keep #include "JSystem/J3DGraphAnimator/J3DShapeTable.h" +#include "JSystem/J3DGraphBase/J3DShape.h" void J3DShapeTable::hide() { u16 shapeNum = mShapeNum; diff --git a/src/JSystem/J3DGraphAnimator/J3DSkinDeform.cpp b/src/JSystem/J3DGraphAnimator/J3DSkinDeform.cpp index d2501ea709..d705c1c59a 100644 --- a/src/JSystem/J3DGraphAnimator/J3DSkinDeform.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DSkinDeform.cpp @@ -1,6 +1,7 @@ #include "JSystem/JSystem.h" // IWYU pragma: keep #include "JSystem/J3DGraphAnimator/J3DSkinDeform.h" +#include "JSystem/J3DGraphAnimator/J3DAnimation.h" #include "JSystem/J3DGraphAnimator/J3DModel.h" #include "JSystem/JKernel/JKRHeap.h" #include @@ -675,4 +676,23 @@ void J3DVtxColorCalc::calc(J3DModel* pModel) { calc(pModel->getVertexBuffer()); } +void J3DVtxColorCalc::calc(J3DVertexBuffer* buffer) { + J3D_ASSERT_NULLPTR(1366, buffer != NULL); + if (checkFlag(1) && mpVtxColor) { + buffer->swapVtxColArrayPointer(); + u16 anmTableNum = mpVtxColor->getAnmTableNum(0); + GXColor* colorArray = buffer->getVtxColArrayPointer(0); + for (u32 i = 0; i < anmTableNum; i++) { + GXColor color; + mpVtxColor->getColor(0, i, &color); + J3DAnmVtxColorIndexData* r28 = mpVtxColor->getAnmVtxColorIndexData(0, i); + for (u32 j = 0; j < r28->mNum; j++) { + colorArray[((u16*)r28->mpData)[j]] = color; + } + } + DCStoreRange(colorArray, buffer->getVertexData()->getColNum() * 4); + buffer->setCurrentVtxCol(colorArray); + } +} + J3DSkinDeform::~J3DSkinDeform() {} diff --git a/src/JSystem/J3DGraphBase/J3DShape.cpp b/src/JSystem/J3DGraphBase/J3DShape.cpp index 1c7500fac4..91dd5b8ea0 100644 --- a/src/JSystem/J3DGraphBase/J3DShape.cpp +++ b/src/JSystem/J3DGraphBase/J3DShape.cpp @@ -72,9 +72,11 @@ void J3DShape::addTexMtxIndexInVcd(GXAttr attr) { GXVtxDescList* vtxDesc = getVtxDesc(); s32 attrCount = 0; - for (; vtxDesc->attr != GX_VA_NULL; attrCount++, vtxDesc++) { - if (vtxDesc->attr == GX_VA_PNMTXIDX) + for (; vtxDesc->attr != GX_VA_NULL; vtxDesc++) { + if (vtxDesc->attr == GX_VA_PNMTXIDX) { attrIdx = stride; + } + attrCount++; } if (attrIdx == -1) @@ -85,7 +87,7 @@ void J3DShape::addTexMtxIndexInVcd(GXAttr attr) { vtxDesc = getVtxDesc(); GXVtxDescList* dst = newVtxDesc; - for (; vtxDesc->attr != GX_VA_NULL; dst++, vtxDesc++) { + for (; vtxDesc->attr != GX_VA_NULL; vtxDesc++) { if ((attr < vtxDesc->attr) && !inserted) { dst->attr = attr; dst->type = GX_DIRECT; @@ -98,6 +100,7 @@ void J3DShape::addTexMtxIndexInVcd(GXAttr attr) { dst->attr = vtxDesc->attr; dst->type = vtxDesc->type; stride = stride + kSize[vtxDesc->type]; + dst++; } dst->attr = GX_VA_NULL; diff --git a/src/JSystem/J3DGraphBase/J3DShapeDraw.cpp b/src/JSystem/J3DGraphBase/J3DShapeDraw.cpp index 50bd2ac793..e001a8a8b9 100644 --- a/src/JSystem/J3DGraphBase/J3DShapeDraw.cpp +++ b/src/JSystem/J3DGraphBase/J3DShapeDraw.cpp @@ -3,7 +3,7 @@ #include "JSystem/J3DGraphBase/J3DShapeDraw.h" #include "JSystem/JKernel/JKRHeap.h" #include -#include +#include #include u32 J3DShapeDraw::countVertex(u32 stride) { diff --git a/src/JSystem/J3DGraphBase/J3DShapeMtx.cpp b/src/JSystem/J3DGraphBase/J3DShapeMtx.cpp index acbd78b1b9..a48f9ab928 100644 --- a/src/JSystem/J3DGraphBase/J3DShapeMtx.cpp +++ b/src/JSystem/J3DGraphBase/J3DShapeMtx.cpp @@ -4,6 +4,7 @@ #include "JSystem/J3DGraphAnimator/J3DModel.h" #include "JSystem/J3DGraphBase/J3DFifo.h" #include "JSystem/J3DGraphBase/J3DMatBlock.h" +#include "JSystem/J3DGraphBase/J3DSys.h" #include "JSystem/J3DGraphBase/J3DTexture.h" u16 J3DShapeMtx::sMtxLoadCache[10]; @@ -270,9 +271,7 @@ void J3DDifferedTexMtx::loadExecute(f32 const (*param_0)[4]) { MTXInverse(j3dSys.getViewMtx(), sp_a8); MTXConcat(sp_e8, sp_a8, sp_e8); MTXConcat(sp_e8, param_0, sp_e8); - sp_e8[2][3] = 0.0f; - sp_e8[1][3] = 0.0f; - sp_e8[0][3] = 0.0f; + sp_e8[0][3] = sp_e8[1][3] = sp_e8[2][3] = 0.0f; mtx = &sp_e8; break; } @@ -414,6 +413,11 @@ void J3DShapeMtxMulti::calcNBTScale(Vec const& param_0, Mtx33* param_1, Mtx33* p } void J3DShapeMtxMultiConcatView::load() const { + static u8 mtxCache[20] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + }; + sMtxPtrTbl[0] = j3dSys.getModel()->getMtxBuffer()->getUserAnmMtx(0); sMtxPtrTbl[1] = j3dSys.getModel()->getWeightAnmMtx(0); @@ -433,8 +437,7 @@ void J3DShapeMtxMultiConcatView::load() const { int use_mtx_num = mUseMtxNum; for (int i = 0; i < use_mtx_num; i++) { - u32 current_pipeline = sCurrentPipeline; - J3DShapeMtxConcatView_LoadFunc func = sMtxLoadLODPipeline[current_pipeline]; + J3DShapeMtxConcatView_LoadFunc func = sMtxLoadLODPipeline[sCurrentPipeline]; if (mUseMtxIndexTable[i] != 0xffff) { u16 important_mtx_index = important_mtx_indices[mUseMtxIndexTable[i]]; @@ -545,8 +548,5 @@ void J3DShapeMtxYBBoardConcatView::load() const { } static void dummy() { - static u8 mtxCache[20] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - }; + } diff --git a/src/JSystem/J3DGraphBase/J3DStruct.cpp b/src/JSystem/J3DGraphBase/J3DStruct.cpp index bc455e62c1..b273cafffe 100644 --- a/src/JSystem/J3DGraphBase/J3DStruct.cpp +++ b/src/JSystem/J3DGraphBase/J3DStruct.cpp @@ -7,6 +7,41 @@ #include "JSystem/J3DGraphBase/J3DStruct.h" #include "JSystem/JMath/JMath.h" +bool J3DTextureSRTInfo::operator==(J3DTextureSRTInfo& other) const { + if (mScaleX == other.mScaleX && + mScaleY == other.mScaleY && + mRotation == other.mRotation && + mTranslationX == other.mTranslationX && + mTranslationY == other.mTranslationY + ) { + return true; + } + return false; +} + +bool J3DLightInfo::operator==(J3DLightInfo& other) const { + if (mLightPosition.x == other.mLightPosition.x && + mLightPosition.y == other.mLightPosition.y && + mLightPosition.z == other.mLightPosition.z && + mLightDirection.x == other.mLightDirection.x && + mLightDirection.y == other.mLightDirection.y && + mLightDirection.z == other.mLightDirection.z && + mColor.r == other.mColor.r && + mColor.g == other.mColor.g && + mColor.b == other.mColor.b && + mColor.a == other.mColor.a && + mCosAtten.x == other.mCosAtten.x && + mCosAtten.y == other.mCosAtten.y && + mCosAtten.z == other.mCosAtten.z && + mDistAtten.x == other.mDistAtten.x && + mDistAtten.y == other.mDistAtten.y && + mDistAtten.z == other.mDistAtten.z + ) { + return true; + } + return false; +} + J3DLightInfo& J3DLightInfo::operator=(J3DLightInfo const& param_0) { JMath::gekko_ps_copy6(&mLightPosition, ¶m_0.mLightPosition); mColor = param_0.mColor; @@ -14,6 +49,42 @@ J3DLightInfo& J3DLightInfo::operator=(J3DLightInfo const& param_0) { return *this; } +bool J3DTexMtxInfo::operator==(J3DTexMtxInfo& other) const { + if (mProjection != other.mProjection || + mInfo != other.mInfo || + !(mSRT == other.mSRT) + ) { + return false; + } + if (mEffectMtx[0][0] != other.mEffectMtx[0][0] || + mEffectMtx[0][1] != other.mEffectMtx[0][1] || + mEffectMtx[0][2] != other.mEffectMtx[0][2] || + mEffectMtx[0][3] != other.mEffectMtx[0][3] || + mEffectMtx[1][0] != other.mEffectMtx[1][0] || + mEffectMtx[1][1] != other.mEffectMtx[1][1] || + mEffectMtx[1][2] != other.mEffectMtx[1][2] || + mEffectMtx[1][3] != other.mEffectMtx[1][3] || + mEffectMtx[2][0] != other.mEffectMtx[2][0] || + mEffectMtx[2][1] != other.mEffectMtx[2][1] || + mEffectMtx[2][2] != other.mEffectMtx[2][2] || + mEffectMtx[2][3] != other.mEffectMtx[2][3] || + mEffectMtx[3][0] != other.mEffectMtx[3][0] || + mEffectMtx[3][1] != other.mEffectMtx[3][1] || + mEffectMtx[3][2] != other.mEffectMtx[3][2] || + mEffectMtx[3][3] != other.mEffectMtx[3][3] + ) { + return false; + } + if ( + mCenter.x != other.mCenter.x || + mCenter.y != other.mCenter.y || + mCenter.z != other.mCenter.z + ) { + return false; + } + return true; +} + J3DTexMtxInfo& J3DTexMtxInfo::operator=(J3DTexMtxInfo const& param_0) { mProjection = param_0.mProjection; mInfo = param_0.mInfo; @@ -47,7 +118,30 @@ J3DIndTexMtxInfo& J3DIndTexMtxInfo::operator=(J3DIndTexMtxInfo const& param_0) { return *this; } -J3DFogInfo& J3DFogInfo::operator=(J3DFogInfo const& param_0) { +bool J3DFogInfo::operator==(J3DFogInfo& other) const { + if (mType == other.mType && + mAdjEnable == other.mAdjEnable && + mCenter == other.mCenter && + mStartZ == other.mStartZ && + mEndZ == other.mEndZ && + mNearZ == other.mNearZ && + mFarZ == other.mFarZ && + mColor.r == other.mColor.r && + mColor.g == other.mColor.g && + mColor.b == other.mColor.b && + mColor.a == other.mColor.a + ) { + for (int i = 0; i < 10; i++) { + if (mFogAdjTable.r[i] != other.mFogAdjTable.r[i]) { + return false; + } + } + return true; + } + return false; +} + +J3DFogInfo& J3DFogInfo::operator=(const J3DFogInfo& param_0) { mType = param_0.mType; mAdjEnable = param_0.mAdjEnable; mCenter = param_0.mCenter; @@ -55,15 +149,31 @@ J3DFogInfo& J3DFogInfo::operator=(J3DFogInfo const& param_0) { mEndZ = param_0.mEndZ; mNearZ = param_0.mNearZ; mFarZ = param_0.mFarZ; - mColor = param_0.mColor; + mColor.r = param_0.mColor.r; + mColor.g = param_0.mColor.g; + mColor.b = param_0.mColor.b; + mColor.a = param_0.mColor.a; for (int i = 0; i < 10; i++) { mFogAdjTable.r[i] = param_0.mFogAdjTable.r[i]; } return *this; } -J3DNBTScaleInfo& J3DNBTScaleInfo::operator=(J3DNBTScaleInfo const& param_0) { - mbHasScale = param_0.mbHasScale; - mScale = param_0.mScale; +bool J3DNBTScaleInfo::operator==(const J3DNBTScaleInfo& other) const { + if (mbHasScale == other.mbHasScale && + mScale.x == other.mScale.x && + mScale.y == other.mScale.y && + mScale.z == other.mScale.z + ) { + return true; + } + return false; +} + +J3DNBTScaleInfo& J3DNBTScaleInfo::operator=(const J3DNBTScaleInfo& other) { + mbHasScale = other.mbHasScale; + mScale.x = other.mScale.x; + mScale.y = other.mScale.y; + mScale.z = other.mScale.z; return *this; } diff --git a/src/JSystem/J3DGraphBase/J3DSys.cpp b/src/JSystem/J3DGraphBase/J3DSys.cpp index fc59161b07..88324c30b5 100644 --- a/src/JSystem/J3DGraphBase/J3DSys.cpp +++ b/src/JSystem/J3DGraphBase/J3DSys.cpp @@ -69,7 +69,7 @@ J3DSys::J3DSys() { } void J3DSys::loadPosMtxIndx(int addr, u16 indx) const { - // J3DFifoLoadPosMtxIndx(indx, addr * 3); // matches debug, not retail + //J3DFifoLoadPosMtxIndx(indx, addr * 3); // matches debug, not retail J3DFifoLoadIndx(GX_LOAD_INDX_A, indx, 0xB000 | ((u16)(addr * 0x0C))); } diff --git a/src/JSystem/J3DGraphBase/J3DTevs.cpp b/src/JSystem/J3DGraphBase/J3DTevs.cpp index c7cceac95c..d71aa20255 100644 --- a/src/JSystem/J3DGraphBase/J3DTevs.cpp +++ b/src/JSystem/J3DGraphBase/J3DTevs.cpp @@ -81,7 +81,7 @@ void J3DTexMtx::calcTexMtx(const Mtx param_0) { }; u32 r28 = mTexMtxInfo.mInfo & 0x3f; - u32 r30 = (mTexMtxInfo.mInfo >> 7) & 1; + u32 r30 = u32(mTexMtxInfo.mInfo & 0x80) >> 7; switch (r28) { case 8: case 9: @@ -176,7 +176,7 @@ void J3DTexMtx::calcPostTexMtx(const Mtx param_0) { }; u32 r29 = mTexMtxInfo.mInfo & 0x3f; - u32 r30 = (mTexMtxInfo.mInfo >> 7) & 1; + u32 r30 = u32(mTexMtxInfo.mInfo & 0x80) >> 7; switch (r29) { case 8: case 11: diff --git a/src/JSystem/J3DGraphBase/J3DTransform.cpp b/src/JSystem/J3DGraphBase/J3DTransform.cpp index c1a246d104..9194e6e263 100644 --- a/src/JSystem/J3DGraphBase/J3DTransform.cpp +++ b/src/JSystem/J3DGraphBase/J3DTransform.cpp @@ -55,18 +55,22 @@ void J3DCalcBBoardMtx(__REGISTER Mtx mtx) { __REGISTER f32 zero = 0.0f; // zero out gaps of zeroes -#ifdef __MWERKS__ // clang-format off +#if DEBUG || !defined(__MWERKS__) + mtx[0][1] = 0.0f; + mtx[0][2] = 0.0f; + mtx[2][0] = 0.0f; + mtx[2][1] = 0.0f; +#else // clang-format off asm { psq_st zero, 0x04(mtx), 0, 0 - psq_st zero, 0x20(mtx), 0, 0 } #endif // clang-format on mtx[0][0] = x; - mtx[1][0] = zero; + mtx[1][0] = 0.0f; mtx[1][1] = y; - mtx[1][2] = zero; + mtx[1][2] = 0.0f; mtx[2][2] = z; } diff --git a/src/JSystem/J3DGraphBase/J3DVertex.cpp b/src/JSystem/J3DGraphBase/J3DVertex.cpp index 3724aa6b94..d455f27c8c 100644 --- a/src/JSystem/J3DGraphBase/J3DVertex.cpp +++ b/src/JSystem/J3DGraphBase/J3DVertex.cpp @@ -210,6 +210,10 @@ s32 J3DVertexBuffer::allocTransformedVtxNrmArray() { return kJ3DError_Success; } +static void dummy(J3DVertexData* vertexData) { + vertexData->getColNum(); +} + J3DDrawMtxData::J3DDrawMtxData() { mEntryNum = 0; mDrawMtxFlag = NULL; diff --git a/src/JSystem/J3DGraphLoader/J3DAnmLoader.cpp b/src/JSystem/J3DGraphLoader/J3DAnmLoader.cpp index 54aa056235..8add976ec4 100644 --- a/src/JSystem/J3DGraphLoader/J3DAnmLoader.cpp +++ b/src/JSystem/J3DGraphLoader/J3DAnmLoader.cpp @@ -5,14 +5,16 @@ #include "JSystem/JSystem.h" // IWYU pragma: keep #include "JSystem/J3DGraphLoader/J3DAnmLoader.h" +#include "JSystem/J3DGraphAnimator/J3DAnimation.h" #include "JSystem/JSupport/JSupport.h" #include "dolphin/os.h" J3DAnmBase* J3DAnmLoaderDataBase::load(const void* i_data, J3DAnmLoaderDataBaseFlag flag) { + const JUTDataFileHeader* header = (const JUTDataFileHeader*)i_data; + J3D_ASSERT_NULLPTR(48, i_data); if (!i_data) { return NULL; } - const JUTDataFileHeader* header = (const JUTDataFileHeader*)i_data; if (header->mMagic == 'J3D1') { switch (header->mType) { case 'bck1': { @@ -89,9 +91,10 @@ J3DAnmBase* J3DAnmLoaderDataBase::load(const void* i_data, J3DAnmLoaderDataBaseF return NULL; } -void J3DAnmLoaderDataBase::setResource(J3DAnmBase* param_1, const void* param_2) { - const JUTDataFileHeader* header = (const JUTDataFileHeader*)param_2; - if (!header) { +void J3DAnmLoaderDataBase::setResource(J3DAnmBase* param_1, const void* i_data) { + const JUTDataFileHeader* header = (const JUTDataFileHeader*)i_data; + J3D_ASSERT_NULLPTR(188, i_data); + if (!i_data) { return; } if (header->mMagic != 'J3D1') { @@ -100,64 +103,64 @@ void J3DAnmLoaderDataBase::setResource(J3DAnmBase* param_1, const void* param_2) switch (header->mType) { case 'bck1': { J3DAnmKeyLoader_v15 loader; - loader.setResource(param_1, param_2); + loader.setResource(param_1, i_data); break; } case 'bpk1': { J3DAnmKeyLoader_v15 loader; - loader.setResource(param_1, param_2); + loader.setResource(param_1, i_data); break; } case 'blk1': { J3DAnmKeyLoader_v15 loader; - loader.setResource(param_1, param_2); + loader.setResource(param_1, i_data); break; } case 'btk1': { J3DAnmKeyLoader_v15 loader; - loader.setResource(param_1, param_2); + loader.setResource(param_1, i_data); break; } case 'brk1': { J3DAnmKeyLoader_v15 loader; if (param_1->getKind() == 5) { - loader.setResource(param_1, param_2); + loader.setResource(param_1, i_data); } break; } case 'bxk1': { J3DAnmKeyLoader_v15 loader; - loader.setResource(param_1, param_2); + loader.setResource(param_1, i_data); break; } case 'bca1': { J3DAnmFullLoader_v15 loader; - loader.setResource(param_1, param_2); + loader.setResource(param_1, i_data); break; } case 'bpa1': { J3DAnmFullLoader_v15 loader; - loader.setResource(param_1, param_2); + loader.setResource(param_1, i_data); break; } case 'btp1': { J3DAnmFullLoader_v15 loader; - loader.setResource(param_1, param_2); + loader.setResource(param_1, i_data); break; } case 'bla1': { J3DAnmFullLoader_v15 loader; - loader.setResource(param_1, param_2); + loader.setResource(param_1, i_data); break; } case 'bxa1': { J3DAnmFullLoader_v15 loader; - loader.setResource(param_1, param_2); + loader.setResource(param_1, i_data); break; } case 'bva1': { J3DAnmFullLoader_v15 loader; - loader.setResource(param_1, param_2); + loader.setResource(param_1, i_data); break; } default: { @@ -175,8 +178,9 @@ J3DAnmKeyLoader_v15::J3DAnmKeyLoader_v15() {} J3DAnmKeyLoader_v15::~J3DAnmKeyLoader_v15() {} -J3DAnmBase* J3DAnmFullLoader_v15::load(const void* param_1) { - const JUTDataFileHeader* header = (const JUTDataFileHeader*)param_1; +J3DAnmBase* J3DAnmFullLoader_v15::load(const void* i_data) { + J3D_ASSERT_NULLPTR(357, i_data); + const JUTDataFileHeader* header = (const JUTDataFileHeader*)i_data; const JUTDataBlockHeader* block = &header->mFirstBlock; for (int i = 0; i < header->mBlockNum; i++) { switch (block->mType) { @@ -202,49 +206,59 @@ J3DAnmBase* J3DAnmFullLoader_v15::load(const void* param_1) { OSReport("Unknown data block\n"); break; } - block = block->getNext(); + block = (JUTDataBlockHeader*)((u8*)block + block->mSize); } return mAnm; } -void J3DAnmFullLoader_v15::setResource(J3DAnmBase* param_1, const void* param_2) { - const JUTDataFileHeader* header = (const JUTDataFileHeader*)param_2; +void J3DAnmFullLoader_v15::setResource(J3DAnmBase* param_1, const void* i_data) { + J3D_ASSERT_NULLPTR(416, i_data); + const JUTDataFileHeader* header = (const JUTDataFileHeader*)i_data; const JUTDataBlockHeader* block = &header->mFirstBlock; for (int i = 0; i < header->mBlockNum; i++) { switch (block->mType) { case 'ANF1': + JUT_ASSERT_MSG(428, param_1->getKind() == 9, "Error: Resource type inconsistency"); setAnmTransform((J3DAnmTransformFull*)param_1, (const J3DAnmTransformFullData*)block); break; case 'PAF1': + JUT_ASSERT_MSG(435, param_1->getKind() == 10, "Error: Resource type inconsistency"); setAnmColor((J3DAnmColorFull*)param_1, (const J3DAnmColorFullData*)block); break; case 'TPT1': + JUT_ASSERT_MSG(441, param_1->getKind() == 2, "Error: Resource type inconsistency"); setAnmTexPattern((J3DAnmTexPattern*)param_1, (const J3DAnmTexPatternFullData*)block); break; case 'CLF1': + JUT_ASSERT_MSG(448, param_1->getKind() == 12, "Error: Resource type inconsistency"); setAnmCluster((J3DAnmClusterFull*)param_1, (const J3DAnmClusterFullData*)block); break; case 'VAF1': + JUT_ASSERT_MSG(454, param_1->getKind() == 6, "Error: Resource type inconsistency"); setAnmVisibility((J3DAnmVisibilityFull*)param_1, (const J3DAnmVisibilityFullData*)block); break; case 'VCF1': + JUT_ASSERT_MSG(461, param_1->getKind() == 14, "Error: Resource type inconsistency"); setAnmVtxColor((J3DAnmVtxColorFull*)param_1, (const J3DAnmVtxColorFullData*)block); break; default: OSReport("Unknown data block\n"); break; } - block = block->getNext(); + block = (JUTDataBlockHeader*)((u8*)block + block->mSize); } } void J3DAnmFullLoader_v15::readAnmTransform(const J3DAnmTransformFullData* param_1) { - setAnmTransform((J3DAnmTransformFull*)mAnm, param_1); + J3DAnmTransformFull* anm = (J3DAnmTransformFull*)mAnm; + setAnmTransform(anm, param_1); } void J3DAnmFullLoader_v15::setAnmTransform(J3DAnmTransformFull* param_1, const J3DAnmTransformFullData* param_2) { + J3D_ASSERT_NULLPTR(504, param_1); + J3D_ASSERT_NULLPTR(505, param_2); param_1->field_0x1e = param_2->field_0xc; param_1->mFrameMax = param_2->mFrameMax; param_1->mAttribute = param_2->field_0x8; @@ -258,11 +272,14 @@ void J3DAnmFullLoader_v15::setAnmTransform(J3DAnmTransformFull* param_1, void J3DAnmFullLoader_v15::readAnmColor(const J3DAnmColorFullData* param_1) { - setAnmColor((J3DAnmColorFull*)mAnm, param_1); + J3DAnmColorFull* anm = (J3DAnmColorFull*)mAnm; + setAnmColor(anm, param_1); } void J3DAnmFullLoader_v15::setAnmColor(J3DAnmColorFull* param_1, const J3DAnmColorFullData* param_2) { + J3D_ASSERT_NULLPTR(550, param_1); + J3D_ASSERT_NULLPTR(551, param_2); param_1->mFrameMax = param_2->mFrameMax; param_1->mAttribute = param_2->field_0x8; param_1->mFrame = 0.0f; @@ -280,11 +297,14 @@ void J3DAnmFullLoader_v15::setAnmColor(J3DAnmColorFull* param_1, } void J3DAnmFullLoader_v15::readAnmTexPattern(const J3DAnmTexPatternFullData* param_1) { - setAnmTexPattern((J3DAnmTexPattern*)mAnm, param_1); + J3DAnmTexPattern* anm = (J3DAnmTexPattern*)mAnm; + setAnmTexPattern(anm, param_1); } void J3DAnmFullLoader_v15::setAnmTexPattern(J3DAnmTexPattern* param_1, const J3DAnmTexPatternFullData* param_2) { + J3D_ASSERT_NULLPTR(603, param_1); + J3D_ASSERT_NULLPTR(604, param_2); param_1->mFrameMax = param_2->mFrameMax; param_1->mAttribute = param_2->field_0x8; param_1->mFrame = 0.0f; @@ -300,11 +320,14 @@ void J3DAnmFullLoader_v15::setAnmTexPattern(J3DAnmTexPattern* param_1, } void J3DAnmFullLoader_v15::readAnmVisibility(const J3DAnmVisibilityFullData* param_1) { - setAnmVisibility((J3DAnmVisibilityFull*)mAnm, param_1); + J3DAnmVisibilityFull* anm = (J3DAnmVisibilityFull*)mAnm; + setAnmVisibility(anm, param_1); } void J3DAnmFullLoader_v15::setAnmVisibility(J3DAnmVisibilityFull* param_1, const J3DAnmVisibilityFullData* param_2) { + J3D_ASSERT_NULLPTR(654, param_1); + J3D_ASSERT_NULLPTR(655, param_2); param_1->mFrameMax = param_2->mFrameMax; param_1->mAttribute = param_2->field_0x8; param_1->mFrame = 0.0f; @@ -316,11 +339,14 @@ void J3DAnmFullLoader_v15::setAnmVisibility(J3DAnmVisibilityFull* param_1, } void J3DAnmFullLoader_v15::readAnmCluster(const J3DAnmClusterFullData* param_1) { - setAnmCluster((J3DAnmClusterFull*)mAnm, param_1); + J3DAnmClusterFull* anm = (J3DAnmClusterFull*)mAnm; + setAnmCluster(anm, param_1); } void J3DAnmFullLoader_v15::setAnmCluster(J3DAnmClusterFull* param_1, const J3DAnmClusterFullData* param_2) { + J3D_ASSERT_NULLPTR(697, param_1); + J3D_ASSERT_NULLPTR(698, param_2); param_1->mFrameMax = param_2->mFrameMax; param_1->mAttribute = param_2->field_0x8; param_1->mFrame = 0.0f; @@ -330,11 +356,14 @@ void J3DAnmFullLoader_v15::setAnmCluster(J3DAnmClusterFull* param_1, } void J3DAnmFullLoader_v15::readAnmVtxColor(const J3DAnmVtxColorFullData* param_1) { - setAnmVtxColor((J3DAnmVtxColorFull*)mAnm, param_1); + J3DAnmVtxColorFull* anm = (J3DAnmVtxColorFull*)mAnm; + setAnmVtxColor(anm, param_1); } void J3DAnmFullLoader_v15::setAnmVtxColor(J3DAnmVtxColorFull* dst, const J3DAnmVtxColorFullData* data) { + J3D_ASSERT_NULLPTR(738, dst); + J3D_ASSERT_NULLPTR(739, data); dst->mFrameMax = data->mFrameMax; dst->mAttribute = data->field_0x8; dst->mFrame = 0.0f; @@ -367,6 +396,7 @@ void J3DAnmFullLoader_v15::setAnmVtxColor(J3DAnmVtxColorFull* dst, } J3DAnmBase* J3DAnmKeyLoader_v15::load(const void* param_1) { + J3D_ASSERT_NULLPTR(801, param_1); const JUTDataFileHeader* header = (const JUTDataFileHeader*)param_1; const JUTDataBlockHeader* block = &header->mFirstBlock; for (int i = 0; i < header->mBlockNum; i++) { @@ -393,48 +423,58 @@ J3DAnmBase* J3DAnmKeyLoader_v15::load(const void* param_1) { OSReport("Unknown data block\n"); break; } - block = block->getNext(); + block = (JUTDataBlockHeader*)((u8*)block + block->mSize); } return mAnm; } void J3DAnmKeyLoader_v15::setResource(J3DAnmBase* param_1, const void* param_2) { + J3D_ASSERT_NULLPTR(858, param_2); const JUTDataFileHeader* header = (const JUTDataFileHeader*)param_2; const JUTDataBlockHeader* block = &header->mFirstBlock; for (int i = 0; i < header->mBlockNum; i++) { switch (block->mType) { case 'ANK1': + JUT_ASSERT_MSG(870, param_1->getKind() == 8, "Error: Resource type inconsistency"); setAnmTransform((J3DAnmTransformKey*)param_1, (const J3DAnmTransformKeyData*)block); break; case 'PAK1': + JUT_ASSERT_MSG(876, param_1->getKind() == 11, "Error: Resource type inconsistency"); setAnmColor((J3DAnmColorKey*)param_1, (const J3DAnmColorKeyData*)block); break; case 'CLK1': + JUT_ASSERT_MSG(883, param_1->getKind() == 13, "Error: Resource type inconsistency"); setAnmCluster((J3DAnmClusterKey*)param_1, (const J3DAnmClusterKeyData*)block); break; case 'TTK1': + JUT_ASSERT_MSG(888, param_1->getKind() == 4, "Error: Resource type inconsistency"); setAnmTextureSRT((J3DAnmTextureSRTKey*)param_1, (const J3DAnmTextureSRTKeyData*)block); break; case 'TRK1': + JUT_ASSERT_MSG(894, param_1->getKind() == 5, "Error: Resource type inconsistency"); setAnmTevReg((J3DAnmTevRegKey*)param_1, (const J3DAnmTevRegKeyData*)block); break; case 'VCK1': + JUT_ASSERT_MSG(901, param_1->getKind() == 15, "Error: Resource type inconsistency"); setAnmVtxColor((J3DAnmVtxColorKey*)param_1, (const J3DAnmVtxColorKeyData*)block); break; default: OSReport("Unknown data block\n"); break; } - block = block->getNext(); + block = (JUTDataBlockHeader*)((u8*)block + block->mSize); } } void J3DAnmKeyLoader_v15::readAnmTransform(const J3DAnmTransformKeyData* param_1) { - setAnmTransform((J3DAnmTransformKey*)mAnm, param_1); + J3DAnmTransformKey* anm = (J3DAnmTransformKey*)mAnm; + setAnmTransform(anm, param_1); } void J3DAnmKeyLoader_v15::setAnmTransform(J3DAnmTransformKey* param_1, const J3DAnmTransformKeyData* param_2) { + J3D_ASSERT_NULLPTR(944, param_1); + J3D_ASSERT_NULLPTR(945, param_2); param_1->field_0x1e = param_2->field_0xc; param_1->mFrameMax = param_2->mFrameMax; param_1->mAttribute = param_2->field_0x8; @@ -449,11 +489,14 @@ void J3DAnmKeyLoader_v15::setAnmTransform(J3DAnmTransformKey* param_1, void J3DAnmKeyLoader_v15::readAnmTextureSRT(const J3DAnmTextureSRTKeyData* param_1) { - setAnmTextureSRT((J3DAnmTextureSRTKey*)mAnm, param_1); + J3DAnmTextureSRTKey* anm = (J3DAnmTextureSRTKey*)mAnm; + setAnmTextureSRT(anm, param_1); } void J3DAnmKeyLoader_v15::setAnmTextureSRT(J3DAnmTextureSRTKey* param_1, const J3DAnmTextureSRTKeyData* param_2) { + J3D_ASSERT_NULLPTR(987, param_1); + J3D_ASSERT_NULLPTR(988, param_2); param_1->mTrackNum = param_2->field_0xc; param_1->mFrameMax = param_2->field_0xa; param_1->mAttribute = param_2->field_0x8; @@ -504,10 +547,13 @@ void J3DAnmKeyLoader_v15::setAnmTextureSRT(J3DAnmTextureSRTKey* param_1, void J3DAnmKeyLoader_v15::readAnmColor(const J3DAnmColorKeyData* param_1) { - setAnmColor((J3DAnmColorKey*)mAnm, param_1); + J3DAnmColorKey* anm = (J3DAnmColorKey*)mAnm; + setAnmColor(anm, param_1); } void J3DAnmKeyLoader_v15::setAnmColor(J3DAnmColorKey* param_1, const J3DAnmColorKeyData* param_2) { + J3D_ASSERT_NULLPTR(1097, param_1); + J3D_ASSERT_NULLPTR(1098, param_2); param_1->mFrameMax = param_2->mFrameMax; param_1->mAttribute = param_2->field_0x8; param_1->mFrame = 0.0f; @@ -530,11 +576,14 @@ void J3DAnmKeyLoader_v15::setAnmColor(J3DAnmColorKey* param_1, const J3DAnmColor void J3DAnmKeyLoader_v15::readAnmCluster(const J3DAnmClusterKeyData* param_1) { - setAnmCluster((J3DAnmClusterKey*)mAnm, param_1); + J3DAnmClusterKey* anm = (J3DAnmClusterKey*)mAnm; + setAnmCluster(anm, param_1); } void J3DAnmKeyLoader_v15::setAnmCluster(J3DAnmClusterKey* param_1, const J3DAnmClusterKeyData* param_2) { + J3D_ASSERT_NULLPTR(1156, param_1); + J3D_ASSERT_NULLPTR(1157, param_2); param_1->mFrameMax = param_2->mFrameMax; param_1->mAttribute = param_2->field_0x8; param_1->mFrame = 0.0f; @@ -545,11 +594,14 @@ void J3DAnmKeyLoader_v15::setAnmCluster(J3DAnmClusterKey* param_1, void J3DAnmKeyLoader_v15::readAnmTevReg(const J3DAnmTevRegKeyData* param_1) { - setAnmTevReg((J3DAnmTevRegKey*)mAnm, param_1); + J3DAnmTevRegKey* anm = (J3DAnmTevRegKey*)mAnm; + setAnmTevReg(anm, param_1); } void J3DAnmKeyLoader_v15::setAnmTevReg(J3DAnmTevRegKey* param_1, const J3DAnmTevRegKeyData* param_2) { + J3D_ASSERT_NULLPTR(1195, param_1); + J3D_ASSERT_NULLPTR(1196, param_2); param_1->mFrameMax = param_2->mFrameMax; param_1->mAttribute = param_2->field_0x8; param_1->mFrame = 0.0f; @@ -587,11 +639,14 @@ void J3DAnmKeyLoader_v15::setAnmTevReg(J3DAnmTevRegKey* param_1, void J3DAnmKeyLoader_v15::readAnmVtxColor(const J3DAnmVtxColorKeyData* param_1) { - setAnmVtxColor((J3DAnmVtxColorKey*)mAnm, param_1); + J3DAnmVtxColorKey* anm = (J3DAnmVtxColorKey*)mAnm; + setAnmVtxColor(anm, param_1); } void J3DAnmKeyLoader_v15::setAnmVtxColor(J3DAnmVtxColorKey* dst, const J3DAnmVtxColorKeyData* data) { + J3D_ASSERT_NULLPTR(1275, dst); + J3D_ASSERT_NULLPTR(1276, data); dst->mFrameMax = data->mFrameMax; dst->mAttribute = data->field_0x8; dst->mFrame = 0.0f; diff --git a/src/JSystem/J3DGraphLoader/J3DClusterLoader.cpp b/src/JSystem/J3DGraphLoader/J3DClusterLoader.cpp index b6afb156b9..03a0e66213 100644 --- a/src/JSystem/J3DGraphLoader/J3DClusterLoader.cpp +++ b/src/JSystem/J3DGraphLoader/J3DClusterLoader.cpp @@ -12,6 +12,7 @@ #include void* J3DClusterLoaderDataBase::load(const void* i_data) { + J3D_ASSERT_NULLPTR(41, i_data); const JUTDataFileHeader* fileHeader = (JUTDataFileHeader*)i_data; if (fileHeader->mMagic == 'J3D1' && fileHeader->mType == 'bls1') { J3DClusterLoader_v15 loader; @@ -27,6 +28,7 @@ J3DClusterLoader_v15::J3DClusterLoader_v15() {} J3DClusterLoader_v15::~J3DClusterLoader_v15() {} void* J3DClusterLoader_v15::load(const void* i_data) { + J3D_ASSERT_NULLPTR(98, i_data); mpDeformData = new J3DDeformData(); const JUTDataFileHeader* fileHeader = (JUTDataFileHeader*)i_data; @@ -40,13 +42,14 @@ void* J3DClusterLoader_v15::load(const void* i_data) { OSReport("Unknown data block\n"); break; } - block = block->getNext(); + block = (JUTDataBlockHeader*)((u8*)block + block->mSize); } return mpDeformData; } void J3DClusterLoader_v15::readCluster(const J3DClusterBlock* block) { + J3D_ASSERT_NULLPTR(147, block); mpDeformData->mClusterNum = block->mClusterNum; mpDeformData->mClusterKeyNum = block->mClusterKeyNum; mpDeformData->mVtxPosNum = block->mVtxPosNum; @@ -70,11 +73,11 @@ void J3DClusterLoader_v15::readCluster(const J3DClusterBlock* block) { mpDeformData->mVtxNrm = JSUConvertOffsetToPtr(block, block->mVtxNrm); void* clusterPointer = block->mClusterPointer; - int clusterKeyPointerSize = (intptr_t)block->mClusterKeyPointer - (intptr_t)clusterPointer; - int clusterVertexPointerSize = (intptr_t)block->mClusterVertex - (intptr_t)clusterPointer; - int vtxPosSize = (intptr_t)block->mVtxPos - (intptr_t)clusterPointer; + int clusterKeyPointerSize = (intptr_t)block->mClusterKeyPointer - (intptr_t)block->mClusterPointer; + int clusterVertexPointerSize = (intptr_t)block->mClusterVertex - (intptr_t)block->mClusterPointer; + int vtxPosSize = (intptr_t)block->mVtxPos - (intptr_t)block->mClusterPointer; u8* arr = new (0x20) u8[vtxPosSize]; - memcpy(arr, JSUConvertOffsetToPtr(block, clusterPointer), vtxPosSize); + memcpy(arr, JSUConvertOffsetToPtr(block, block->mClusterPointer), vtxPosSize); mpDeformData->mClusterPointer = (J3DCluster*)arr; mpDeformData->mClusterKeyPointer = (J3DClusterKey*)&arr[clusterKeyPointerSize]; mpDeformData->mClusterVertex = (J3DClusterVertex*)&arr[clusterVertexPointerSize]; diff --git a/src/JSystem/J3DGraphLoader/J3DJointFactory.cpp b/src/JSystem/J3DGraphLoader/J3DJointFactory.cpp index 0a93c6626d..dafc4ce417 100644 --- a/src/JSystem/J3DGraphLoader/J3DJointFactory.cpp +++ b/src/JSystem/J3DGraphLoader/J3DJointFactory.cpp @@ -12,6 +12,7 @@ J3DJointFactory::J3DJointFactory(J3DJointBlock const& block) { J3DJoint* J3DJointFactory::create(int no) { J3DJoint* joint = new J3DJoint(); + J3D_ASSERT_ALLOCMEM(50, joint); joint->mJntNo = no; joint->mKind = getKind(no); joint->mScaleCompensate = getScaleCompensate(no); diff --git a/src/JSystem/J3DGraphLoader/J3DModelLoader.cpp b/src/JSystem/J3DGraphLoader/J3DModelLoader.cpp index 49b0bd5887..68622ff346 100644 --- a/src/JSystem/J3DGraphLoader/J3DModelLoader.cpp +++ b/src/JSystem/J3DGraphLoader/J3DModelLoader.cpp @@ -1,6 +1,10 @@ #include "JSystem/JSystem.h" // IWYU pragma: keep #include "JSystem/J3DGraphLoader/J3DModelLoader.h" +#include "JSystem/J3DGraphAnimator/J3DAnimation.h" +#include "JSystem/J3DGraphAnimator/J3DShapeTable.h" +#include "JSystem/J3DGraphAnimator/J3DJointTree.h" +#include "JSystem/J3DGraphAnimator/J3DJoint.h" #include "JSystem/J3DGraphLoader/J3DJointFactory.h" #include "JSystem/J3DGraphLoader/J3DMaterialFactory.h" #include "JSystem/J3DGraphLoader/J3DMaterialFactory_v21.h" @@ -10,7 +14,6 @@ #include "JSystem/JUtility/JUTNameTab.h" #include "JSystem/JKernel/JKRHeap.h" #include "JSystem/JSupport/JSupport.h" -#include "dolphin/os.h" J3DModelLoader::J3DModelLoader() : mpModelData(NULL), @@ -24,26 +27,45 @@ J3DModelLoader::J3DModelLoader() : } J3DModelData* J3DModelLoaderDataBase::load(void const* i_data, u32 i_flags) { + J3D_ASSERT_NULLPTR(52, i_data); + const J3DModelFileData* header = (const J3DModelFileData*)i_data; if (i_data == NULL) { return NULL; } - if (*(u32*)i_data == 'J3D1' && *(u32*)((uintptr_t)i_data + 4) == 'bmd1') { + if (header->mMagic1 == 'J3D1' && header->mMagic2 == 'bmd1') { + JUT_PANIC(64, "Error : version error."); return NULL; } - if (*(u32*)i_data == 'J3D2' && *(u32*)((uintptr_t)i_data + 4) == 'bmd2') { + if (header->mMagic1 == 'J3D2' && header->mMagic2 == 'bmd2') { J3DModelLoader_v21 loader; return loader.load(i_data, i_flags); } - if (*(u32*)i_data == 'J3D2' && *(u32*)((uintptr_t)i_data + 4) == 'bmd3') { + if (header->mMagic1 == 'J3D2' && header->mMagic2 == 'bmd3') { J3DModelLoader_v26 loader; return loader.load(i_data, i_flags); } + JUT_PANIC(89, "Error : version error."); + return NULL; +} + +J3DModelData* J3DModelLoaderDataBase::loadBinaryDisplayList(const void* i_data, u32 flags) { + J3D_ASSERT_NULLPTR(138, i_data); + const J3DModelFileData* header = (const J3DModelFileData*)i_data; + if (!i_data) { + return NULL; + } + if (header->mMagic1 == 'J3D2' && (header->mMagic2 == 'bdl3' || header->mMagic2 == 'bdl4')) { + J3DModelLoader_v26 loader; + return loader.loadBinaryDisplayList(i_data, flags); + } + JUT_PANIC(157, "Error : version error."); return NULL; } J3DModelData* J3DModelLoader::load(void const* i_data, u32 i_flags) { - JKRGetCurrentHeap()->getTotalFreeSize(); + s32 freeSize = JKRGetCurrentHeap()->getTotalFreeSize(); mpModelData = new J3DModelData(); + J3D_ASSERT_ALLOCMEM(177, mpModelData); mpModelData->clear(); mpModelData->mpRawData = i_data; mpModelData->setModelDataType(0); @@ -100,17 +122,19 @@ J3DModelData* J3DModelLoader::load(void const* i_data, u32 i_flags) { J3DMaterialTable* J3DModelLoader::loadMaterialTable(void const* i_data) { + int flags = 0x51100000; mpMaterialTable = new J3DMaterialTable(); + J3D_ASSERT_ALLOCMEM(279, mpMaterialTable); mpMaterialTable->clear(); J3DModelFileData const* data = (J3DModelFileData*)i_data; J3DModelBlock const* block = data->mBlocks; for (u32 block_no = 0; block_no < data->mBlockNum; block_no++) { switch (block->mBlockType) { case 'MAT3': - readMaterialTable((J3DMaterialBlock*)block, 0x51100000); + readMaterialTable((J3DMaterialBlock*)block, flags); break; case 'MAT2': - readMaterialTable_v21((J3DMaterialBlock_v21*)block, 0x51100000); + readMaterialTable_v21((J3DMaterialBlock_v21*)block, flags); break; case 'TEX1': readTextureTable((J3DTextureBlock*)block); @@ -123,12 +147,18 @@ J3DMaterialTable* J3DModelLoader::loadMaterialTable(void const* i_data) { } if (mpMaterialTable->mTexture == NULL) { mpMaterialTable->mTexture = new J3DTexture(0, NULL); + J3D_ASSERT_ALLOCMEM(319, mpMaterialTable->mTexture); } return mpMaterialTable; } +inline u32 getBdlFlag_MaterialType(u32 flags) { + return flags & (J3DMLF_13 | J3DMLF_DoBdlMaterialCalc); +} + J3DModelData* J3DModelLoader::loadBinaryDisplayList(void const* i_data, u32 i_flags) { mpModelData = new J3DModelData(); + J3D_ASSERT_ALLOCMEM(338, mpModelData); mpModelData->clear(); mpModelData->mpRawData = i_data; mpModelData->setModelDataType(1); @@ -137,6 +167,7 @@ J3DModelData* J3DModelLoader::loadBinaryDisplayList(void const* i_data, u32 i_fl J3DModelBlock const* block = data->mBlocks; for (u32 block_no = 0; block_no < data->mBlockNum; block_no++) { s32 flags; + u32 materialType; switch (block->mBlockType) { case 'INF1': flags = i_flags; @@ -168,9 +199,10 @@ J3DModelData* J3DModelLoader::loadBinaryDisplayList(void const* i_data, u32 i_fl flags = 0x50100000; flags |= (i_flags & 0x3000000); mpMaterialBlock = (J3DMaterialBlock*)block; - if (((u32)i_flags & 0x3000) == 0) { + materialType = getBdlFlag_MaterialType(i_flags); + if (materialType == 0) { readMaterial((J3DMaterialBlock*)block, flags); - } else if (((u32)i_flags & 0x3000) == 0x2000) { + } else if (materialType == 0x2000) { readPatchedMaterial((J3DMaterialBlock*)block, flags); } break; @@ -193,31 +225,27 @@ void J3DModelLoader::setupBBoardInfo() { for (u16 i = 0; i < mpModelData->getJointNum(); i++) { J3DMaterial* mesh = mpModelData->getJointNodePointer(i)->getMesh(); if (mesh != NULL) { - u16 shape_index = mesh->getShape()->getIndex(); + u32 shape_index = mesh->getShape()->getIndex(); u16* index_table = JSUConvertOffsetToPtr(mpShapeBlock, (uintptr_t)mpShapeBlock->mpIndexTable); J3DShapeInitData* shape_init_data = JSUConvertOffsetToPtr(mpShapeBlock, (uintptr_t)mpShapeBlock->mpShapeInitData); - J3DJoint* joint; - switch (shape_init_data[index_table[shape_index]].mShapeMtxType) { + J3DShapeInitData* r26 = &shape_init_data[index_table[shape_index]]; + switch (r26->mShapeMtxType) { case 0: - joint = mpModelData->getJointNodePointer(i); - joint->setMtxType(0); + mpModelData->getJointNodePointer(i)->setMtxType(0); break; case 1: - joint = mpModelData->getJointNodePointer(i); - joint->setMtxType(1); + mpModelData->getJointNodePointer(i)->setMtxType(1); mpModelData->mbHasBillboard = true; break; case 2: - joint = mpModelData->getJointNodePointer(i); - joint->setMtxType(2); + mpModelData->getJointNodePointer(i)->setMtxType(2); mpModelData->mbHasBillboard = true; break; case 3: - joint = mpModelData->getJointNodePointer(i); - joint->setMtxType(0); + mpModelData->getJointNodePointer(i)->setMtxType(0); break; default: OSReport("WRONG SHAPE MATRIX TYPE (__FILE__)\n"); @@ -228,6 +256,7 @@ void J3DModelLoader::setupBBoardInfo() { } void J3DModelLoader::readInformation(J3DModelInfoBlock const* i_block, u32 i_flags) { + J3D_ASSERT_NULLPTR(506, i_block); mpModelData->mFlags = i_flags | i_block->mFlags; mpModelData->getJointTree().setFlag(mpModelData->mFlags); J3DMtxCalc* mtx_calc = NULL; @@ -241,7 +270,11 @@ void J3DModelLoader::readInformation(J3DModelInfoBlock const* i_block, u32 i_fla case 2: mtx_calc = new J3DMtxCalcNoAnm(); break; + default: + JUT_PANIC(529, "Error : Invalid MtxCalcType."); + break; } + J3D_ASSERT_ALLOCMEM(532, mtx_calc); mpModelData->setBasicMtxCalc(mtx_calc); mpModelData->getVertexData().mPacketNum = i_block->mPacketNum; mpModelData->getVertexData().mVtxNum = i_block->mVtxNum; @@ -258,6 +291,7 @@ static _GXCompType getFmtType(_GXVtxAttrFmtList* i_fmtList, _GXAttr i_attr) { } void J3DModelLoader::readVertex(J3DVertexBlock const* i_block) { + J3D_ASSERT_NULLPTR(577, i_block); J3DVertexData& vertex_data = mpModelData->getVertexData(); vertex_data.mVtxAttrFmtList = JSUConvertOffsetToPtr(i_block, i_block->mpVtxAttrFmtList); @@ -273,8 +307,12 @@ void J3DModelLoader::readVertex(J3DVertexBlock const* i_block) { JSUConvertOffsetToPtr(i_block, i_block->mpVtxTexCoordArray[i]); } - _GXCompType nrm_type = getFmtType(vertex_data.mVtxAttrFmtList, GX_VA_NRM); - u32 nrm_size = nrm_type == GX_F32 ? 12 : 6; + u32 nrm_size = 12; + if (getFmtType(vertex_data.mVtxAttrFmtList, GX_VA_NRM) == GX_F32) { + nrm_size = 12; + } else { + nrm_size = 6; + } void* nrm_end = NULL; if (vertex_data.mVtxNBTArray != NULL) { @@ -308,14 +346,24 @@ void J3DModelLoader::readVertex(J3DVertexBlock const* i_block) { vertex_data.mColNum = (i_block->mBlockSize - (uintptr_t)i_block->mpVtxColorArray[0]) / 4 + 1; } + int local_28 = 0; + if (vertex_data.mVtxTexCoordArray[1]) { + color0_end = vertex_data.mVtxTexCoordArray[1]; + } + if (vertex_data.mVtxTexCoordArray[0] == NULL) { vertex_data.mTexCoordNum = 0; + return; + } + if (local_28) { + vertex_data.mTexCoordNum = (local_28 - (uintptr_t)vertex_data.mVtxTexCoordArray[0]) / 8 + 1; } else { vertex_data.mTexCoordNum = (i_block->mBlockSize - (uintptr_t)i_block->mpVtxTexCoordArray[0]) / 8 + 1; } } void J3DModelLoader::readEnvelop(J3DEnvelopeBlock const* i_block) { + J3D_ASSERT_NULLPTR(724, i_block); mpModelData->getJointTree().mWEvlpMtxNum = i_block->mWEvlpMtxNum; mpModelData->getJointTree().mWEvlpMixMtxNum = JSUConvertOffsetToPtr(i_block, i_block->mpWEvlpMixMtxNum); @@ -328,50 +376,58 @@ void J3DModelLoader::readEnvelop(J3DEnvelopeBlock const* i_block) { } void J3DModelLoader::readDraw(J3DDrawBlock const* i_block) { - J3DJointTree& joint_tree = mpModelData->getJointTree(); - joint_tree.mDrawMtxData.mEntryNum = i_block->mMtxNum - mpModelData->getJointTree().mWEvlpMtxNum; - joint_tree.mDrawMtxData.mDrawMtxFlag = JSUConvertOffsetToPtr(i_block, i_block->mpDrawMtxFlag); - joint_tree.mDrawMtxData.mDrawMtxIndex = JSUConvertOffsetToPtr(i_block, i_block->mpDrawMtxIndex); + J3D_ASSERT_NULLPTR(747, i_block); + J3DDrawMtxData* drawMtxData = mpModelData->getDrawMtxData(); + drawMtxData->mEntryNum = i_block->mMtxNum - mpModelData->getWEvlpMtxNum(); + drawMtxData->mDrawMtxFlag = JSUConvertOffsetToPtr(i_block, i_block->mpDrawMtxFlag); + drawMtxData->mDrawMtxIndex = JSUConvertOffsetToPtr(i_block, i_block->mpDrawMtxIndex); u16 i; - for (i = 0; i < joint_tree.mDrawMtxData.mEntryNum; i++) { - if (joint_tree.mDrawMtxData.mDrawMtxFlag[i] == 1) { + for (i = 0; i < drawMtxData->mEntryNum; i++) { + if (drawMtxData->mDrawMtxFlag[i] == 1) { break; } } - joint_tree.mDrawMtxData.mDrawFullWgtMtxNum = i; - mpModelData->getJointTree().mWEvlpImportantMtxIdx = new u16[joint_tree.mDrawMtxData.mEntryNum]; - + drawMtxData->mDrawFullWgtMtxNum = i; + mpModelData->getJointTree().mWEvlpImportantMtxIdx = new u16[drawMtxData->mEntryNum]; + J3D_ASSERT_ALLOCMEM(767, mpModelData->getJointTree().mWEvlpImportantMtxIdx); } void J3DModelLoader::readJoint(J3DJointBlock const* i_block) { + J3D_ASSERT_NULLPTR(781, i_block); J3DJointFactory factory(*i_block); mpModelData->getJointTree().mJointNum = i_block->mJointNum; if (i_block->mpNameTable != NULL) { mpModelData->getJointTree().mJointName = new JUTNameTab(JSUConvertOffsetToPtr(i_block, i_block->mpNameTable)); + J3D_ASSERT_ALLOCMEM(791, mpModelData->getJointTree().mJointName); } else { mpModelData->getJointTree().mJointName = NULL; } mpModelData->getJointTree().mJointNodePointer = new J3DJoint*[mpModelData->getJointTree().mJointNum]; - for (u16 i = 0; i < mpModelData->getJointTree().getJointNum(); i++) { + J3D_ASSERT_ALLOCMEM(797, mpModelData->getJointTree().mJointNodePointer); + for (u16 i = 0; i < mpModelData->getJointNum(); i++) { mpModelData->getJointTree().mJointNodePointer[i] = factory.create(i); } } void J3DModelLoader_v26::readMaterial(J3DMaterialBlock const* i_block, u32 i_flags) { + J3D_ASSERT_NULLPTR(817, i_block); J3DMaterialFactory factory(*i_block); mpMaterialTable->mMaterialNum = i_block->mMaterialNum; mpMaterialTable->mUniqueMatNum = factory.countUniqueMaterials(); if (i_block->mpNameTable != NULL) { mpMaterialTable->mMaterialName = new JUTNameTab(JSUConvertOffsetToPtr(i_block, i_block->mpNameTable)); + J3D_ASSERT_ALLOCMEM(832, mpMaterialTable->mMaterialName); } else { mpMaterialTable->mMaterialName = NULL; } mpMaterialTable->mMaterialNodePointer = new J3DMaterial*[mpMaterialTable->mMaterialNum]; + J3D_ASSERT_ALLOCMEM(841, mpMaterialTable->mMaterialNodePointer); if (i_flags & 0x200000) { mpMaterialTable->field_0x10 = new (0x20) J3DMaterial[mpMaterialTable->mUniqueMatNum]; + J3D_ASSERT_ALLOCMEM(846, mpMaterialTable->field_0x10); } else { mpMaterialTable->field_0x10 = NULL; } @@ -402,18 +458,22 @@ void J3DModelLoader_v26::readMaterial(J3DMaterialBlock const* i_block, u32 i_fla } void J3DModelLoader_v21::readMaterial_v21(J3DMaterialBlock_v21 const* i_block, u32 i_flags) { + J3D_ASSERT_NULLPTR(913, i_block); J3DMaterialFactory_v21 factory(*i_block); mpMaterialTable->mMaterialNum = i_block->mMaterialNum; mpMaterialTable->mUniqueMatNum = factory.countUniqueMaterials(); if (i_block->mpNameTable != NULL) { mpMaterialTable->mMaterialName = new JUTNameTab(JSUConvertOffsetToPtr(i_block, i_block->mpNameTable)); + J3D_ASSERT_ALLOCMEM(930, mpMaterialTable->mMaterialName); } else { mpMaterialTable->mMaterialName = NULL; } mpMaterialTable->mMaterialNodePointer = new J3DMaterial*[mpMaterialTable->mMaterialNum]; + J3D_ASSERT_ALLOCMEM(940, mpMaterialTable->mMaterialNodePointer); if (i_flags & 0x200000) { mpMaterialTable->field_0x10 = new (0x20) J3DMaterial[mpMaterialTable->mUniqueMatNum]; + J3D_ASSERT_ALLOCMEM(945, mpMaterialTable->field_0x10); } else { mpMaterialTable->field_0x10 = NULL; } @@ -441,6 +501,7 @@ void J3DModelLoader_v21::readMaterial_v21(J3DMaterialBlock_v21 const* i_block, u } void J3DModelLoader::readShape(J3DShapeBlock const* i_block, u32 i_flags) { + J3D_ASSERT_NULLPTR(1009, i_block); mpShapeBlock = i_block; J3DShapeTable* shape_table = mpModelData->getShapeTable(); J3DShapeFactory factory(*i_block); @@ -448,10 +509,12 @@ void J3DModelLoader::readShape(J3DShapeBlock const* i_block, u32 i_flags) { if (i_block->mpNameTable != NULL) { shape_table->mShapeName = new JUTNameTab(JSUConvertOffsetToPtr(i_block, i_block->mpNameTable)); + J3D_ASSERT_ALLOCMEM(1026, shape_table->mShapeName); } else { shape_table->mShapeName = NULL; } shape_table->mShapeNodePointer = new J3DShape*[shape_table->mShapeNum]; + J3D_ASSERT_ALLOCMEM(1034, shape_table->mShapeNodePointer); factory.allocVcdVatCmdBuffer(shape_table->mShapeNum); J3DModelHierarchy const* hierarchy_entry = mpModelData->getHierarchy(); GXVtxDescList* vtx_desc_list = NULL; @@ -465,27 +528,33 @@ void J3DModelLoader::readShape(J3DShapeBlock const* i_block, u32 i_flags) { } void J3DModelLoader::readTexture(J3DTextureBlock const* i_block) { + J3D_ASSERT_NULLPTR(1067, i_block); u16 texture_num = i_block->mTextureNum; ResTIMG* texture_res = JSUConvertOffsetToPtr(i_block, i_block->mpTextureRes); if (i_block->mpNameTable != NULL) { mpMaterialTable->mTextureName = new JUTNameTab(JSUConvertOffsetToPtr(i_block, i_block->mpNameTable)); + J3D_ASSERT_ALLOCMEM(1077, mpMaterialTable->mTextureName); } else { mpMaterialTable->mTextureName = NULL; } mpMaterialTable->mTexture = new J3DTexture(texture_num, texture_res); + J3D_ASSERT_ALLOCMEM(1084, mpMaterialTable->mTexture); } void J3DModelLoader_v26::readMaterialTable(J3DMaterialBlock const* i_block, u32 i_flags) { + J3D_ASSERT_NULLPTR(1101, i_block); J3DMaterialFactory factory(*i_block); mpMaterialTable->mMaterialNum = i_block->mMaterialNum; if (i_block->mpNameTable != NULL) { mpMaterialTable->mMaterialName = new JUTNameTab(JSUConvertOffsetToPtr(i_block, i_block->mpNameTable)); + J3D_ASSERT_ALLOCMEM(1114, mpMaterialTable->mMaterialName); } else { mpMaterialTable->mMaterialName = NULL; } mpMaterialTable->mMaterialNodePointer = new J3DMaterial*[mpMaterialTable->mMaterialNum]; + J3D_ASSERT_ALLOCMEM(1121, mpMaterialTable->mMaterialNodePointer); for (u16 i = 0; i < mpMaterialTable->mMaterialNum; i++) { mpMaterialTable->mMaterialNodePointer[i] = factory.create(NULL, J3DMaterialFactory::MATERIAL_TYPE_NORMAL, i, i_flags); @@ -497,15 +566,18 @@ void J3DModelLoader_v26::readMaterialTable(J3DMaterialBlock const* i_block, u32 } void J3DModelLoader_v21::readMaterialTable_v21(J3DMaterialBlock_v21 const* i_block, u32 i_flags) { + J3D_ASSERT_NULLPTR(1152, i_block); J3DMaterialFactory_v21 factory(*i_block); mpMaterialTable->mMaterialNum = i_block->mMaterialNum; if (i_block->mpNameTable != NULL) { mpMaterialTable->mMaterialName = new JUTNameTab(JSUConvertOffsetToPtr(i_block, i_block->mpNameTable)); + J3D_ASSERT_ALLOCMEM(1165, mpMaterialTable->mMaterialName); } else { mpMaterialTable->mMaterialName = NULL; } mpMaterialTable->mMaterialNodePointer = new J3DMaterial*[mpMaterialTable->mMaterialNum]; + J3D_ASSERT_ALLOCMEM(1172, mpMaterialTable->mMaterialNodePointer); for (u16 i = 0; i < mpMaterialTable->mMaterialNum; i++) { mpMaterialTable->mMaterialNodePointer[i] = factory.create(NULL, i, i_flags); @@ -517,28 +589,34 @@ void J3DModelLoader_v21::readMaterialTable_v21(J3DMaterialBlock_v21 const* i_blo } void J3DModelLoader::readTextureTable(J3DTextureBlock const* i_block) { + J3D_ASSERT_NULLPTR(1200, i_block); u16 texture_num = i_block->mTextureNum; ResTIMG* texture_res = JSUConvertOffsetToPtr(i_block, i_block->mpTextureRes); if (i_block->mpNameTable != NULL) { mpMaterialTable->mTextureName = new JUTNameTab(JSUConvertOffsetToPtr(i_block, i_block->mpNameTable)); + J3D_ASSERT_ALLOCMEM(1211, mpMaterialTable->mTextureName); } else { mpMaterialTable->mTextureName = NULL; } mpMaterialTable->mTexture = new J3DTexture(texture_num, texture_res); + J3D_ASSERT_ALLOCMEM(1218, mpMaterialTable->mTexture); } void J3DModelLoader::readPatchedMaterial(J3DMaterialBlock const* i_block, u32 i_flags) { + J3D_ASSERT_NULLPTR(1234, i_block); J3DMaterialFactory factory(*i_block); mpMaterialTable->mMaterialNum = i_block->mMaterialNum; mpMaterialTable->mUniqueMatNum = factory.countUniqueMaterials(); if (i_block->mpNameTable != NULL) { mpMaterialTable->mMaterialName = new JUTNameTab(JSUConvertOffsetToPtr(i_block, i_block->mpNameTable)); + J3D_ASSERT_ALLOCMEM(1251, mpMaterialTable->mMaterialName); } else { mpMaterialTable->mMaterialName = NULL; } mpMaterialTable->mMaterialNodePointer = new J3DMaterial*[mpMaterialTable->mMaterialNum]; + J3D_ASSERT_ALLOCMEM(1260, mpMaterialTable->mMaterialNodePointer); mpMaterialTable->field_0x10 = NULL; for (u16 i = 0; i < mpMaterialTable->mMaterialNum; i++) { mpMaterialTable->mMaterialNodePointer[i] = @@ -549,6 +627,7 @@ void J3DModelLoader::readPatchedMaterial(J3DMaterialBlock const* i_block, u32 i_ } void J3DModelLoader::readMaterialDL(J3DMaterialDLBlock const* i_block, u32 i_flags) { + J3D_ASSERT_NULLPTR(1290, i_block); J3DMaterialFactory factory(*i_block); s32 flags; if (mpMaterialTable->mMaterialNum == 0) { @@ -558,10 +637,12 @@ void J3DModelLoader::readMaterialDL(J3DMaterialDLBlock const* i_block, u32 i_fla if (i_block->mpNameTable != NULL) { mpMaterialTable->mMaterialName = new JUTNameTab(JSUConvertOffsetToPtr(i_block, i_block->mpNameTable)); + J3D_ASSERT_ALLOCMEM(1312, mpMaterialTable->mMaterialName); } else { mpMaterialTable->mMaterialName = NULL; } mpMaterialTable->mMaterialNodePointer = new J3DMaterial*[mpMaterialTable->mMaterialNum]; + J3D_ASSERT_ALLOCMEM(1320, mpMaterialTable->mMaterialNodePointer); mpMaterialTable->field_0x10 = NULL; for (u16 i = 0; i < mpMaterialTable->mMaterialNum; i++) { flags = i_flags; diff --git a/src/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize.cpp b/src/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize.cpp index a1e72e8be1..5957fcc642 100644 --- a/src/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize.cpp +++ b/src/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize.cpp @@ -5,33 +5,38 @@ #include "JSystem/J3DGraphLoader/J3DShapeFactory.h" #include "JSystem/J3DGraphLoader/J3DMaterialFactory.h" #include "JSystem/J3DGraphBase/J3DMaterial.h" +#include "JSystem/J3DGraphAnimator/J3DJoint.h" #include "JSystem/J3DGraphAnimator/J3DModelData.h" #include "JSystem/JSupport/JSupport.h" #include "dolphin/os.h" #include "global.h" - u16 J3DModelLoader::countMaterialNum(const void* stream) { const J3DModelFileData* header = (const J3DModelFileData*)stream; const J3DModelBlock* block = header->mBlocks; - for (int i = 0; i < header->mBlockNum; block = (const J3DModelBlock*)((u8*)block + block->mBlockSize), i++) + for (int i = 0; i < header->mBlockNum; i++) { if (block->mBlockType == 'MAT3') { - return ((const J3DMaterialBlock*)block)->mMaterialNum; + const J3DMaterialBlock* materialBlock = (const J3DMaterialBlock*)block; + return materialBlock->mMaterialNum; } + block = (const J3DModelBlock*)((u8*)block + block->mBlockSize); } return 0; } +static void dummy() { + JUT_PANIC(0, "Error : null pointer."); +} + u32 J3DModelLoader::calcLoadSize(void const* stream, u32 flags_) { int flags = flags_; - const J3DModelFileData* header = static_cast(stream); size_t size = 0; - const J3DModelBlock* nextBlock = header->mBlocks; - u32 i = 0; // TODO: What sizeof will get us a size of 0xE4? size += 0xE4; - for (; i < header->mBlockNum; i++) { + const J3DModelFileData* header = static_cast(stream); + const J3DModelBlock* nextBlock = header->mBlocks; + for (u32 i = 0; i < header->mBlockNum; i++) { switch (nextBlock->mBlockType) { case 'INF1': size += calcSizeInformation((const J3DModelInfoBlock*)nextBlock, flags); @@ -39,8 +44,6 @@ u32 J3DModelLoader::calcLoadSize(void const* stream, u32 flags_) { case 'JNT1': size += calcSizeJoint((const J3DJointBlock*)nextBlock); break; - case 'MAT2': - break; case 'MAT3': size += calcSizeMaterial((const J3DMaterialBlock*)nextBlock, flags); break; @@ -58,6 +61,9 @@ u32 J3DModelLoader::calcLoadSize(void const* stream, u32 flags_) { break; case 'VTX1': break; + case 'MAT2': + JUT_PANIC(282, "Error : version error."); + break; default: OSReport("Unknown data block\n"); break; @@ -68,30 +74,27 @@ u32 J3DModelLoader::calcLoadSize(void const* stream, u32 flags_) { } u32 J3DModelLoader::calcLoadMaterialTableSize(const void* stream) { - size_t size; + u32 flags = J3DMLF_21 | J3DMLF_Material_UseIndirect | J3DMLF_Material_PE_Full | J3DMLF_Material_Color_LightOn; + size_t size = 0; + // TODO: What sizeof will get us a size of 0x20? Is this just the file header??? + size += 0x20; const J3DModelBlock* nextBlock; bool hasTextureTable; - u32 i; const J3DModelFileData* header = reinterpret_cast(stream); nextBlock = header->mBlocks; hasTextureTable = false; - i = 0; - // TODO: What sizeof will get us a size of 0x20? Is this just the file header??? - size = 0x20; - for (; i < header->mBlockNum; i++) { + for (u32 i = 0; i < header->mBlockNum; i++) { switch (nextBlock->mBlockType) { - case 'MAT2': - break; case 'MAT3': - size += - calcSizeMaterialTable((const J3DMaterialBlock*)nextBlock, - J3DMLF_21 | J3DMLF_Material_UseIndirect | - J3DMLF_Material_PE_Full | J3DMLF_Material_Color_LightOn); + size += calcSizeMaterialTable((const J3DMaterialBlock*)nextBlock, flags); break; case 'TEX1': size += calcSizeTextureTable((const J3DTextureBlock*)nextBlock); hasTextureTable = true; break; + case 'MAT2': + JUT_PANIC(334, "Error : version error."); + break; default: OSReport("Unknown data block\n"); break; @@ -132,8 +135,6 @@ u32 J3DModelLoader::calcLoadBinaryDisplayListSize(const void* stream, u32 flags) case 'MDL3': size += calcSizeMaterialDL((const J3DMaterialDLBlock*)nextBlock, flags); break; - case 'MAT2': - break; case 'MAT3': { u32 flags2 = (J3DMLF_21 | J3DMLF_Material_PE_Full | J3DMLF_Material_Color_LightOn); flags2 |= (u32)flags & (J3DMLF_Material_UseIndirect | J3DMLF_26); @@ -156,6 +157,9 @@ u32 J3DModelLoader::calcLoadBinaryDisplayListSize(const void* stream, u32 flags) break; case 'VTX1': break; + case 'MAT2': + JUT_PANIC(436, "Error : version error."); + break; default: OSReport("Unknown data block\n"); break; @@ -166,18 +170,22 @@ u32 J3DModelLoader::calcLoadBinaryDisplayListSize(const void* stream, u32 flags) } u32 J3DModelLoader::calcSizeInformation(const J3DModelInfoBlock* block, u32 flags) { + J3D_ASSERT_NULLPTR(462, block); int size = 0; - switch ((flags | block->mFlags) & J3DMLF_MtxTypeMask) { + u32 flags2 = flags | block->mFlags; + int r27 = 0; + switch (flags2 & J3DMLF_MtxTypeMask) { case J3DMLF_None: // Basic - size = 4; + size += 4; break; case J3DMLF_MtxSoftImageCalc: - size = 4; + size += 4; break; case J3DMLF_MtxMayaCalc: - size = 4; + size += 4; break; default: + JUT_PANIC(481, "Error : Invalid MtxCalcType."); break; } mpModelHierarchy = JSUConvertOffsetToPtr(block, block->mpHierarchy); @@ -185,9 +193,10 @@ u32 J3DModelLoader::calcSizeInformation(const J3DModelInfoBlock* block, u32 flag } u32 J3DModelLoader::calcSizeJoint(const J3DJointBlock* block) { + J3D_ASSERT_NULLPTR(499, block); int size = 0; if (block->mpNameTable) { - size = 0x10; + size += 0x10; } size += (block->mJointNum * sizeof(J3DJoint*)); size += (block->mJointNum * sizeof(J3DJoint)); @@ -195,23 +204,28 @@ u32 J3DModelLoader::calcSizeJoint(const J3DJointBlock* block) { } u32 J3DModelLoader::calcSizeEnvelope(const J3DEnvelopeBlock* block) { + J3D_ASSERT_NULLPTR(522, block); mEnvelopeSize = block->mWEvlpMtxNum; return 0; } u32 J3DModelLoader::calcSizeDraw(const J3DDrawBlock* block) { - return (block->mMtxNum - mEnvelopeSize) * 2; + J3D_ASSERT_NULLPTR(538, block); + u32 size = 0; + size += (block->mMtxNum - mEnvelopeSize) * 2; + return size; } u32 J3DModelLoader_v26::calcSizeMaterial(const J3DMaterialBlock* block, u32 flags) { - int padding = 0; + J3D_ASSERT_NULLPTR(558, block); + size_t size = 0; J3DMaterialFactory factory(*block); u32 count = block->mMaterialNum; int uniqueCount = factory.countUniqueMaterials(); if (block->mpNameTable != NULL) { - padding = 0x10; + size += 0x10; } - size_t size = padding + (count * sizeof(J3DMaterial*)); + size += (count * sizeof(J3DMaterial*)); if ((flags & J3DMLF_UseUniqueMaterials) != 0) { // calc for allocated materials as well @@ -229,15 +243,17 @@ u32 J3DModelLoader_v26::calcSizeMaterial(const J3DMaterialBlock* block, u32 flag } u32 J3DModelLoader::calcSizeShape(const J3DShapeBlock* block, u32 flags) { + J3D_ASSERT_NULLPTR(616, block); int size = 0; J3DShapeFactory factory(*block); int count = block->mShapeNum; if (block->mpNameTable) { - size = 0x10; + size += 0x10; } size += count * sizeof(J3DShape*); size += factory.calcSizeVcdVatCmdBuffer(count); - for (J3DModelHierarchy* hierarchy = mpModelHierarchy; hierarchy->mType != 0; hierarchy++) { + J3DModelHierarchy* hierarchy; + for (hierarchy = mpModelHierarchy; hierarchy->mType != 0; hierarchy++) { if (hierarchy->mType == 0x12) { size += factory.calcSize(hierarchy->mValue, flags); } @@ -246,12 +262,14 @@ u32 J3DModelLoader::calcSizeShape(const J3DShapeBlock* block, u32 flags) { } u32 J3DModelLoader::calcSizeTexture(const J3DTextureBlock* block) { + J3D_ASSERT_NULLPTR(663, block); // TODO: use sizeofs here. - int padding = 0; + int size = 0; if (block->mpNameTable) { - padding = 0x10; + size += 0x10; } - return padding + 0xC; + size += 0xC; + return size; } u32 J3DModelLoader_v26::calcSizeMaterialTable(const J3DMaterialBlock* block, u32 flags) { @@ -259,7 +277,7 @@ u32 J3DModelLoader_v26::calcSizeMaterialTable(const J3DMaterialBlock* block, u32 u32 count = block->mMaterialNum; J3DMaterialFactory factory(*block); if (block->mpNameTable) { - size = 0x10; + size += 0x10; } size += (count * sizeof(J3DMaterial*)); for (u16 i = 0; i < count; i++) { @@ -273,13 +291,13 @@ u32 J3DModelLoader::calcSizeTextureTable(const J3DTextureBlock* block) { } u32 J3DModelLoader::calcSizePatchedMaterial(const J3DMaterialBlock* block, u32 flags) { - int padding = 0; + int size = 0; u32 count = block->mMaterialNum; J3DMaterialFactory factory(*block); if (block->mpNameTable) { - padding = 0x10; + size += 0x10; } - u32 size = padding + (count * sizeof(J3DMaterial*)); + size += (count * sizeof(J3DMaterial*)); for (u16 i = 0; i < count; i++) { size += factory.calcSize(NULL, J3DMaterialFactory::MATERIAL_TYPE_PATCHED, i, flags); } @@ -287,14 +305,14 @@ u32 J3DModelLoader::calcSizePatchedMaterial(const J3DMaterialBlock* block, u32 f } u32 J3DModelLoader::calcSizeMaterialDL(const J3DMaterialDLBlock* block, u32 flags_) { + J3D_ASSERT_NULLPTR(758, block); int flags = flags_; size_t size = 0; J3DMaterialFactory factory(*block); - ; if (!field_0x18) { u32 count = block->mMaterialNum; if (block->mpNameTable) { - size = 0x10; + size += 0x10; } size += count * sizeof(J3DLockedMaterial*); for (u16 i = 0; i < count; i++) { diff --git a/src/JSystem/J3DGraphLoader/J3DShapeFactory.cpp b/src/JSystem/J3DGraphLoader/J3DShapeFactory.cpp index 8048b12bf8..d724d7cb8e 100644 --- a/src/JSystem/J3DGraphLoader/J3DShapeFactory.cpp +++ b/src/JSystem/J3DGraphLoader/J3DShapeFactory.cpp @@ -11,21 +11,24 @@ J3DShapeFactory::J3DShapeFactory(J3DShapeBlock const& block) { mShapeInitData = JSUConvertOffsetToPtr(&block, (uintptr_t)block.mpShapeInitData); mIndexTable = JSUConvertOffsetToPtr(&block, (uintptr_t)block.mpIndexTable); - mVtxDescList = JSUConvertOffsetToPtr(&block, (uintptr_t)block.mpVtxDescList), + mVtxDescList = JSUConvertOffsetToPtr(&block, (uintptr_t)block.mpVtxDescList); mMtxTable = JSUConvertOffsetToPtr(&block, (uintptr_t)block.mpMtxTable); - mDisplayListData = JSUConvertOffsetToPtr(&block, (uintptr_t)block.mpDisplayListData), - mMtxInitData = JSUConvertOffsetToPtr(&block, (uintptr_t)block.mpMtxInitData), - mDrawInitData = JSUConvertOffsetToPtr(&block, (uintptr_t)block.mpDrawInitData), + mDisplayListData = JSUConvertOffsetToPtr(&block, (uintptr_t)block.mpDisplayListData); + mMtxInitData = JSUConvertOffsetToPtr(&block, (uintptr_t)block.mpMtxInitData); + mDrawInitData = JSUConvertOffsetToPtr(&block, (uintptr_t)block.mpDrawInitData); mVcdVatCmdBuffer = NULL; } J3DShape* J3DShapeFactory::create(int no, u32 flag, GXVtxDescList* vtxDesc) { J3DShape* shape = new J3DShape; + J3D_ASSERT_ALLOCMEM(67, shape); shape->mMtxGroupNum = getMtxGroupNum(no); shape->mRadius = getRadius(no); shape->mVtxDesc = getVtxDescList(no); shape->mShapeMtx = new J3DShapeMtx*[shape->mMtxGroupNum]; + J3D_ASSERT_ALLOCMEM(74, shape->mShapeMtx); shape->mShapeDraw = new J3DShapeDraw*[shape->mMtxGroupNum]; + J3D_ASSERT_ALLOCMEM(76, shape->mShapeDraw); shape->mMin = getMin(no); shape->mMax = getMax(no); shape->mVcdVatCmd = mVcdVatCmdBuffer + no * J3DShape::kVcdVatDLSize; @@ -56,7 +59,8 @@ J3DShapeMtx* J3DShapeFactory::newShapeMtx(u32 flag, int shapeNo, int mtxGroupNo) const J3DShapeMtxInitData& mtxInitData = (&mMtxInitData[shapeInitData.mMtxInitDataIndex])[mtxGroupNo]; - switch (getMdlDataFlag_MtxLoadType(flag)) { + u32 mtxLoadType = getMdlDataFlag_MtxLoadType(flag); + switch (mtxLoadType) { case J3DMdlDataFlag_ConcatView: switch (shapeInitData.mShapeMtxType) { case J3DShapeMtxType_Mtx: @@ -94,36 +98,41 @@ J3DShapeMtx* J3DShapeFactory::newShapeMtx(u32 flag, int shapeNo, int mtxGroupNo) OSReport("WRONG SHAPE MATRIX TYPE (J3DModelInit.cpp)\n"); break; } + break; } + J3D_ASSERT_ALLOCMEM(167, ret); return ret; } J3DShapeDraw* J3DShapeFactory::newShapeDraw(int shapeNo, int mtxGroupNo) const { + J3DShapeDraw* shapeDraw = NULL; const J3DShapeInitData& shapeInitData = mShapeInitData[mIndexTable[shapeNo]]; const J3DShapeDrawInitData& drawInitData = (&mDrawInitData[shapeInitData.mDrawInitDataIndex])[mtxGroupNo]; - return new J3DShapeDraw(&mDisplayListData[drawInitData.mDisplayListIndex], - drawInitData.mDisplayListSize); + shapeDraw = new J3DShapeDraw(&mDisplayListData[drawInitData.mDisplayListIndex], drawInitData.mDisplayListSize); + J3D_ASSERT_ALLOCMEM(193, shapeDraw); + return shapeDraw; } void J3DShapeFactory::allocVcdVatCmdBuffer(u32 count) { mVcdVatCmdBuffer = new (0x20) u8[J3DShape::kVcdVatDLSize * count]; + J3D_ASSERT_ALLOCMEM(211, mVcdVatCmdBuffer); for (u32 i = 0; i < (J3DShape::kVcdVatDLSize * count) / 4; i++) ((u32*)mVcdVatCmdBuffer)[i] = 0; } s32 J3DShapeFactory::calcSize(int shapeNo, u32 flag) { - s32 size = 0x68; + s32 size = 0; s32 mtxGroupNo = getMtxGroupNum(shapeNo); + size += sizeof(J3DShape); size += mtxGroupNo * 4; size += mtxGroupNo * 4; for (u32 i = 0; i < mtxGroupNo; i++) { - s32 shapeMtxSize = calcSizeShapeMtx(flag, shapeNo, i); - size += shapeMtxSize; + size += calcSizeShapeMtx(flag, shapeNo, i); size += 0x0C; } @@ -135,7 +144,9 @@ s32 J3DShapeFactory::calcSizeVcdVatCmdBuffer(u32 count) { } s32 J3DShapeFactory::calcSizeShapeMtx(u32 flag, int shapeNo, int mtxGroupNo) const { + int local_18 = 0; const J3DShapeInitData& shapeInitData = mShapeInitData[mIndexTable[shapeNo]]; + J3DShapeMtxInitData& mtxInitData = (&mMtxInitData[shapeInitData.mMtxInitDataIndex])[mtxGroupNo]; u32 ret = 0; u32 mtxLoadType = getMdlDataFlag_MtxLoadType(flag); @@ -143,16 +154,16 @@ s32 J3DShapeFactory::calcSizeShapeMtx(u32 flag, int shapeNo, int mtxGroupNo) con case J3DMdlDataFlag_ConcatView: switch (shapeInitData.mShapeMtxType) { case J3DShapeMtxType_Mtx: - ret = 0x08; + ret += sizeof(J3DShapeMtxConcatView); break; case J3DShapeMtxType_BBoard: - ret = 0x08; + ret += sizeof(J3DShapeMtxBBoardConcatView); break; case J3DShapeMtxType_YBBoard: - ret = 0x08; + ret += sizeof(J3DShapeMtxYBBoardConcatView); break; case J3DShapeMtxType_Multi: - ret = 0x10; + ret += sizeof(J3DShapeMtxMultiConcatView); break; default: OSReport("WRONG SHAPE MATRIX TYPE (J3DModelInit.cpp)\n"); @@ -165,10 +176,10 @@ s32 J3DShapeFactory::calcSizeShapeMtx(u32 flag, int shapeNo, int mtxGroupNo) con case J3DShapeMtxType_Mtx: case J3DShapeMtxType_BBoard: case J3DShapeMtxType_YBBoard: - ret = 0x08; + ret += 0x08; break; case J3DShapeMtxType_Multi: - ret = 0x10; + ret += sizeof(J3DShapeMtxMultiConcatView); break; default: OSReport("WRONG SHAPE MATRIX TYPE (J3DModelInit.cpp)\n"); diff --git a/src/JSystem/J3DU/J3DUClipper.cpp b/src/JSystem/J3DU/J3DUClipper.cpp index 59367bee3a..38a27dd8ff 100644 --- a/src/JSystem/J3DU/J3DUClipper.cpp +++ b/src/JSystem/J3DU/J3DUClipper.cpp @@ -1,7 +1,7 @@ #include "JSystem/JSystem.h" // IWYU pragma: keep #include "JSystem/J3DU/J3DUClipper.h" -#include +#include void J3DUClipper::init() { mNear = 1.0f; @@ -10,7 +10,7 @@ void J3DUClipper::init() { void J3DUClipper::calcViewFrustum() { static const f32 unused[3] = {0.0f}; - f32 f0 = tan(0.5f * mFovY * 0.01745329238474369f); + f32 f0 = tan(0.5f * mFovY * (M_PI / 180.0f)); f32 f4 = mNear * f0; f32 f5 = mAspect * f4; Vec tmp1 = {-f5, -f4, -mNear}; diff --git a/src/JSystem/JAHostIO/JAHioUtil.cpp b/src/JSystem/JAHostIO/JAHioUtil.cpp index 8bc18b763d..11c5fd4b52 100644 --- a/src/JSystem/JAHostIO/JAHioUtil.cpp +++ b/src/JSystem/JAHostIO/JAHioUtil.cpp @@ -1,7 +1,7 @@ #include "JSystem/JSystem.h" // IWYU pragma: keep #include "JSystem/JAHostIO/JAHioUtil.h" -#include +#include char JAHioUtil::mStringBuffer[256]; diff --git a/src/JSystem/JAWExtSystem/JAWWindow.cpp b/src/JSystem/JAWExtSystem/JAWWindow.cpp index 7153fd0d2d..5163355615 100644 --- a/src/JSystem/JAWExtSystem/JAWWindow.cpp +++ b/src/JSystem/JAWExtSystem/JAWWindow.cpp @@ -22,8 +22,6 @@ JAWWindow::JAWWindow(const char* param_1, int param_2, int param_3) : field_0x38.appendChild(&field_0x2b0); } -JAWWindow::TJ2DWindowDraw::TJ2DWindowDraw(u32 param_1, const JGeometry::TBox2& param_2, const char* param_3) : J2DWindow(param_1, param_2, param_3, TEXTUREBASE_0, NULL) {} - JAWWindow::~JAWWindow() {} BOOL JAWWindow::initIf() { @@ -194,6 +192,8 @@ JAWWindow::TWindowText::TWindowText(JAWWindow* window) : field_0x11c(0, 0) { } +JAWWindow::TWindowText::~TWindowText() {} + void JAWWindow::TWindowText::drawSelf(f32 param_1, f32 param_2) { Mtx mtx; MTXIdentity(mtx); @@ -211,3 +211,7 @@ void JAWWindow::TWindowText::drawSelf(f32, f32, Mtx* param_3) { m_pParent->setMatrix(stack_48); m_pParent->onDraw(&field_0xfc); } + +static void dummy(J2DPane* pane, J2DWindow* window) { + pane->rewriteAlpha(); +} diff --git a/src/JSystem/JAudio2/JASAiCtrl.cpp b/src/JSystem/JAudio2/JASAiCtrl.cpp index 9beb08f0bd..662e5e6df4 100644 --- a/src/JSystem/JAudio2/JASAiCtrl.cpp +++ b/src/JSystem/JAudio2/JASAiCtrl.cpp @@ -16,7 +16,7 @@ #include "JSystem/JUtility/JUTAssert.h" #include "dolphin/ai.h" #include -#include +#include s16* JASDriver::sDmaDacBuffer[3]; diff --git a/src/JSystem/JAudio2/JASAudioReseter.cpp b/src/JSystem/JAudio2/JASAudioReseter.cpp index 14599d032b..e1198d6af8 100644 --- a/src/JSystem/JAudio2/JASAudioReseter.cpp +++ b/src/JSystem/JAudio2/JASAudioReseter.cpp @@ -4,16 +4,9 @@ #include "JSystem/JAudio2/JASAudioThread.h" #include "JSystem/JAudio2/JASCriticalSection.h" #include "JSystem/JAudio2/JASDriverIF.h" +#include "JSystem/JAudio2/JASDSPChannel.h" #include "dolphin/types.h" -struct JASDSPChannel { - void drop(); - static JASDSPChannel* getHandle(u32); - - inline u8 getStatus() const { return mStatus; } - u32 mStatus; -}; - JASAudioReseter::JASAudioReseter() { field_0x0 = 0; mDoneFlag = true; @@ -52,16 +45,15 @@ s32 JASAudioReseter::checkDone() const { return mDoneFlag; } - s32 JASAudioReseter::calc() { - if(field_0x0==0) { - for(size_t i = 0; i<64; i++) { + if (field_0x0==0) { + for (size_t i = 0; i<64; i++) { JASDSPChannel* handle = JASDSPChannel::getHandle(i); - if ((handle->getStatus())==0) { + if (handle->getStatus() == 0) { handle->drop(); } } - if(mThreadStopFlag!=false) { + if (mThreadStopFlag!=false) { JASAudioThread* pAudioThread = JASGlobalInstance::getInstance(); JUT_ASSERT(78, pAudioThread); pAudioThread->stop(); diff --git a/src/JSystem/JAudio2/JASAudioThread.cpp b/src/JSystem/JAudio2/JASAudioThread.cpp index e74ba52e9a..4cf66d5abf 100644 --- a/src/JSystem/JAudio2/JASAudioThread.cpp +++ b/src/JSystem/JAudio2/JASAudioThread.cpp @@ -10,7 +10,7 @@ #include "JSystem/JAudio2/JASReport.h" #include "JSystem/JKernel/JKRSolidHeap.h" #include "dolphin/dsp.h" -#include +#include JASAudioThread::JASAudioThread(int stackSize, int msgCount, u32 threadPriority) : diff --git a/src/JSystem/JAudio2/JASBasicWaveBank.cpp b/src/JSystem/JAudio2/JASBasicWaveBank.cpp index ad11ba25d2..a6134046be 100644 --- a/src/JSystem/JAudio2/JASBasicWaveBank.cpp +++ b/src/JSystem/JAudio2/JASBasicWaveBank.cpp @@ -4,7 +4,7 @@ #include "JSystem/JAudio2/JASMutex.h" #include "JSystem/JKernel/JKRHeap.h" #include "JSystem/JUtility/JUTAssert.h" -#include +#include JASBasicWaveBank::JASBasicWaveBank() { mWaveTable = NULL; diff --git a/src/JSystem/JAudio2/JASCalc.cpp b/src/JSystem/JAudio2/JASCalc.cpp index b4ef0d66be..9c3d7f1412 100644 --- a/src/JSystem/JAudio2/JASCalc.cpp +++ b/src/JSystem/JAudio2/JASCalc.cpp @@ -1,7 +1,7 @@ #include "JSystem/JSystem.h" // IWYU pragma: keep #include "JSystem/JAudio2/JASCalc.h" -#include +#include #include void JASCalc::imixcopy(const s16* s1, const s16* s2, s16* dst, u32 n) { diff --git a/src/JSystem/JAudio2/JASReport.cpp b/src/JSystem/JAudio2/JASReport.cpp index 941338ba3a..be97131868 100644 --- a/src/JSystem/JAudio2/JASReport.cpp +++ b/src/JSystem/JAudio2/JASReport.cpp @@ -8,7 +8,7 @@ #include "JSystem/JAudio2/JASCalc.h" #include "JSystem/JAudio2/JASMutex.h" #include "JSystem/JKernel/JKRHeap.h" -#include +#include static OSMutex sMutex; diff --git a/src/JSystem/JAudio2/JASSimpleWaveBank.cpp b/src/JSystem/JAudio2/JASSimpleWaveBank.cpp index a105fe7c37..9bc0bbf31d 100644 --- a/src/JSystem/JAudio2/JASSimpleWaveBank.cpp +++ b/src/JSystem/JAudio2/JASSimpleWaveBank.cpp @@ -1,7 +1,7 @@ #include "JSystem/JSystem.h" // IWYU pragma: keep #include "JSystem/JAudio2/JASSimpleWaveBank.h" -#include +#include JASSimpleWaveBank::JASSimpleWaveBank() { mWaveTable = NULL; diff --git a/src/JSystem/JAudio2/JASWaveArcLoader.cpp b/src/JSystem/JAudio2/JASWaveArcLoader.cpp index 9672a087ae..37086c0d4e 100644 --- a/src/JSystem/JAudio2/JASWaveArcLoader.cpp +++ b/src/JSystem/JAudio2/JASWaveArcLoader.cpp @@ -7,7 +7,7 @@ #include "JSystem/JKernel/JKRDvdAramRipper.h" #include #include "dolphin/os.h" -#include +#include JASHeap* JASWaveArcLoader::sAramHeap; diff --git a/src/JSystem/JAudio2/JAUAudioMgr.cpp b/src/JSystem/JAudio2/JAUAudioMgr.cpp index a13ab0fbbc..4e92d1667f 100644 --- a/src/JSystem/JAudio2/JAUAudioMgr.cpp +++ b/src/JSystem/JAudio2/JAUAudioMgr.cpp @@ -11,6 +11,10 @@ // Here to generate JASHeap::__defctor (ctor generated by default arguments) void dummyDefCtor() { JASHeap dummy[20]; + //TODO: ShieldD needs the weak functions this pulls in, but in retail it breaks weak function + // placement +#if VERSION == VERSION_SHIELD_DEBUG JAUStreamStaticAramMgr_<1>* streamStaticAramMgr = new(NULL, 0) JAUStreamStaticAramMgr_<1>(); streamStaticAramMgr->reserveAram(NULL, 0, 0x14); +#endif } diff --git a/src/JSystem/JAudio2/dsptask.cpp b/src/JSystem/JAudio2/dsptask.cpp index a24a33c70d..bbdf47d64a 100644 --- a/src/JSystem/JAudio2/dsptask.cpp +++ b/src/JSystem/JAudio2/dsptask.cpp @@ -9,7 +9,7 @@ static void DspHandShake(void* param_0); static int DspStartWork(u32 param_0, void (*param_1)(u16)); extern int Dsp_Running_Check(); -extern int Dsp_Running_Start(); +extern void Dsp_Running_Start(); void DspHandShake(void*) { OS_REPORT("DSP InitCallback \n"); diff --git a/src/JSystem/JAudio2/osdsp_task.cpp b/src/JSystem/JAudio2/osdsp_task.cpp index b1eae52efb..4643d93af8 100644 --- a/src/JSystem/JAudio2/osdsp_task.cpp +++ b/src/JSystem/JAudio2/osdsp_task.cpp @@ -151,8 +151,8 @@ static void Dsp_Update_Request() { } } -bool Dsp_Running_Check() { - return struct_80451308 == 1; +int Dsp_Running_Check() { + return struct_80451308 == 1 ? TRUE : FALSE; } void Dsp_Running_Start() { diff --git a/src/JSystem/JFramework/JFWDisplay.cpp b/src/JSystem/JFramework/JFWDisplay.cpp index 86b633f6fc..0392ffdb0b 100644 --- a/src/JSystem/JFramework/JFWDisplay.cpp +++ b/src/JSystem/JFramework/JFWDisplay.cpp @@ -9,12 +9,12 @@ #include "dolphin/gx.h" #include #include "global.h" -#include +#include void JFWDisplay::ctor_subroutine(bool enableAlpha) { mEnableAlpha = enableAlpha; mClamp = GX_CLAMP_TOP | GX_CLAMP_BOTTOM; - mClearColor.set(0, 0, 0, 0); + mClearColor = JUtility::TColor(0, 0, 0, 0); mZClear = 0xFFFFFF; mGamma = 0; mFader = NULL; @@ -36,19 +36,6 @@ void JFWDisplay::ctor_subroutine(bool enableAlpha) { field_0x44 = 0; } -static Mtx e_mtx ATTRIBUTE_ALIGN(32) = { - {1.0f, 0.0f, 0.0f, 0.0f}, - {0.0f, 1.0f, 0.0f, 0.0f}, - {0.0f, 0.0f, 1.0f, 0.0f}, -}; - -static u8 clear_z_TX[64] ATTRIBUTE_ALIGN(32) = { - 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, - 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, -}; - JFWDisplay::JFWDisplay(JKRHeap* p_heap, JUTXfb::EXfbNumber xfb_num, bool enableAlpha) { ctor_subroutine(enableAlpha); mXfbManager = JUTXfb::createManager(p_heap, xfb_num); @@ -67,6 +54,7 @@ JFWDisplay* JFWDisplay::sManager; JFWDisplay* JFWDisplay::createManager(_GXRenderModeObj const* p_rObj, JKRHeap* p_heap, JUTXfb::EXfbNumber xfb_num, bool enableAlpha) { + JUT_CONFIRM(173, sManager == NULL); if (p_rObj != NULL) { JUTVideo::getManager()->setRenderMode(p_rObj); } @@ -79,16 +67,17 @@ JFWDisplay* JFWDisplay::createManager(_GXRenderModeObj const* p_rObj, JKRHeap* p } static void callDirectDraw() { - JUTChangeFrameBuffer(JUTXfb::getManager()->getDrawingXfb(), - JUTVideo::getManager()->getEfbHeight(), - JUTVideo::getManager()->getFbWidth()); + u16 width = JUTVideo::getManager()->getFbWidth(); + u16 height = JUTVideo::getManager()->getEfbHeight(); + JUTChangeFrameBuffer(JUTXfb::getManager()->getDrawingXfb(), width, height); JUTAssertion::flushMessage(); } void JFWDisplay::prepareCopyDisp() { u16 width = JUTVideo::getManager()->getFbWidth(); u16 height = JUTVideo::getManager()->getEfbHeight(); - f32 y_scaleF = GXGetYScaleFactor(height, JUTVideo::getManager()->getXfbHeight()); + u16 xfbHeight = JUTVideo::getManager()->getXfbHeight(); + f32 y_scaleF = GXGetYScaleFactor(height, xfbHeight); u16 line_num = GXGetNumXfbLines(height, y_scaleF); GXSetCopyClear(mClearColor, mZClear); @@ -109,11 +98,13 @@ void JFWDisplay::prepareCopyDisp() { void JFWDisplay::drawendXfb_single() { JUTXfb* manager = JUTXfb::getManager(); + s16 idx; if (manager->getDrawingXfbIndex() >= 0) { prepareCopyDisp(); JFWDrawDoneAlarm(); GXFlush(); - manager->setDrawnXfbIndex(manager->getDrawingXfbIndex()); + idx = manager->getDrawingXfbIndex(); + manager->setDrawnXfbIndex(idx); } } @@ -201,8 +192,10 @@ void JFWDisplay::preGX() { } void JFWDisplay::endGX() { - f32 width = JUTVideo::getManager()->getFbWidth(); - f32 height = JUTVideo::getManager()->getEfbHeight(); + s32 bufferNum = JUTXfb::getManager()->getBufferNum(); + u16 width = JUTVideo::getManager()->getFbWidth(); + u16 height = JUTVideo::getManager()->getEfbHeight(); + u16 xfbHeight = JUTVideo::getManager()->getXfbHeight(); J2DOrthoGraph ortho(0.0f, 0.0f, width, height, -1.0f, 1.0f); @@ -334,6 +327,7 @@ void JFWDisplay::endFrame() { if (field_0x40) { static u32 prevFrame = VIGetRetraceCount();; u32 retrace_cnt = VIGetRetraceCount(); + u32 r28 = retrace_cnt - prevFrame; JUTProcBar::getManager()->setCostFrame(retrace_cnt - prevFrame); prevFrame = retrace_cnt; } @@ -383,11 +377,28 @@ void JFWDisplay::threadSleep(s64 time) { s32 status = OSDisableInterrupts(); alarm.appendLink(); - OSSetAlarm(&alarm, time, JFWThreadAlarmHandler); + OSSetAlarm(alarm.getAlarm(), time, JFWThreadAlarmHandler); OSSuspendThread(alarm.getThread()); OSRestoreInterrupts(status); } +static void dummy() { + JUTXfb::getManager()->setDisplayingXfbIndex(0); +} + +static Mtx e_mtx ATTRIBUTE_ALIGN(32) = { + {1.0f, 0.0f, 0.0f, 0.0f}, + {0.0f, 1.0f, 0.0f, 0.0f}, + {0.0f, 0.0f, 1.0f, 0.0f}, +}; + +static u8 clear_z_TX[64] ATTRIBUTE_ALIGN(32) = { + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +}; + static GXTexObj clear_z_tobj; void JFWDisplay::clearEfb_init() { @@ -401,8 +412,8 @@ void JFWDisplay::clearEfb() { } void JFWDisplay::clearEfb(GXColor color) { - int width = JUTVideo::getManager()->getFbWidth(); - int height = JUTVideo::getManager()->getEfbHeight(); + u16 width = JUTVideo::getManager()->getFbWidth(); + u16 height = JUTVideo::getManager()->getEfbHeight(); clearEfb(0, 0, width, height, color); } @@ -432,7 +443,7 @@ void JFWDisplay::clearEfb(int param_0, int param_1, int param_2, int param_3, GX GXSetChanCtrl(GX_COLOR1A1, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE); GXSetNumTexGens(1); - GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 60, GX_DISABLE, 125); + GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 60); GXLoadTexObj(&clear_z_tobj, GX_TEXMAP0); GXSetNumTevStages(1); GXSetTevColor(GX_TEVREG0, color); @@ -465,6 +476,7 @@ void JFWDisplay::clearEfb(int param_0, int param_1, int param_2, int param_3, GX GXPosition2u16(param_0, param_1 + param_3); GXTexCoord2u8(0, 1); + GXEnd(); GXSetZTexture(GX_ZT_DISABLE, GX_TF_Z24X8, 0); GXSetZCompLoc(GX_ENABLE); @@ -481,11 +493,11 @@ void JFWDisplay::calcCombinationRatio() { for (; i < unk30; i += vidInterval) { } - s32 tmp = (i - unk30) - field_0x34; - if (tmp < 0) { - tmp += vidInterval; + i = (i - unk30) - field_0x34; + if (i < 0) { + i += vidInterval; } - mCombinationRatio = (f32)tmp / (f32)field_0x30; + mCombinationRatio = (f32)i / (f32)field_0x30; if (mCombinationRatio > 1.0f) { mCombinationRatio = 1.0f; } @@ -496,7 +508,9 @@ static void JFWDrawDoneAlarm() { s32 status = OSDisableInterrupts(); alarm.createAlarm(); alarm.appendLink(); - OSSetAlarm(&alarm, 0.5 * (*(u32*)0x800000F8 / 4), JFWGXAbortAlarmHandler); +#if !PLATFORM_SHIELD + OSSetAlarm(&alarm, OSSecondsToTicks(0.5), JFWGXAbortAlarmHandler); +#endif GXDrawDone(); alarm.cancelAlarm(); alarm.removeLink(); diff --git a/src/JSystem/JGadget/binary.cpp b/src/JSystem/JGadget/binary.cpp index af49191265..cde00093f2 100644 --- a/src/JSystem/JGadget/binary.cpp +++ b/src/JSystem/JGadget/binary.cpp @@ -2,7 +2,7 @@ #include "JSystem/JGadget/binary.h" #include "JSystem/JGadget/define.h" -#include +#include #if DEBUG static void dummyString() { diff --git a/src/JSystem/JGadget/define.cpp b/src/JSystem/JGadget/define.cpp index 84b1914f17..a613126499 100644 --- a/src/JSystem/JGadget/define.cpp +++ b/src/JSystem/JGadget/define.cpp @@ -3,7 +3,7 @@ #include "JSystem/JGadget/define.h" #define MSL_USE_INLINES 1 -#include +#include JGadget_outMessage::JGadget_outMessage(MessageFunc fn, const char* file, int line) { mMsgFunc = fn; diff --git a/src/JSystem/JGadget/linklist.cpp b/src/JSystem/JGadget/linklist.cpp index 4a705dd5e7..366a8db320 100644 --- a/src/JSystem/JGadget/linklist.cpp +++ b/src/JSystem/JGadget/linklist.cpp @@ -1,7 +1,10 @@ #include "JSystem/JSystem.h" // IWYU pragma: keep #include "JSystem/JGadget/linklist.h" +#include "JSystem/JGadget/define.h" +namespace JGadget { +namespace { template class TPRIsEqual_pointer_ { public: @@ -12,29 +15,45 @@ public: private: const T* p_; }; +} +} -JGadget::TNodeLinkList::~TNodeLinkList() {} +JGadget::TNodeLinkList::~TNodeLinkList() { +#if DEBUG + Confirm(); + clear(); + JGADGET_ASSERTWARN(84, empty()) + oNode_.clear_(); +#endif +} JGadget::TNodeLinkList::iterator JGadget::TNodeLinkList::erase(JGadget::TNodeLinkList::iterator it) { + JUT_ASSERT(102, it.p_!=&oNode_); iterator next = it; ++next; return erase(it, next); } JGadget::TNodeLinkList::iterator JGadget::TNodeLinkList::erase(iterator a, iterator b) { - TLinkListNode* cur = a.node; - TLinkListNode* end = b.node; + TLinkListNode* cur = a.p_; + TLinkListNode* end = b.p_; TLinkListNode* next; for (; cur != end; cur = next) { - next = cur->mNext; + next = cur->pNext_; Erase(cur); } return b; } +void JGadget::TNodeLinkList::splice(iterator it, TNodeLinkList& rSrc) { + JUT_ASSERT(146, this!=&rSrc); + splice(it, rSrc, rSrc.begin(), rSrc.end()); + JUT_ASSERT(148, rSrc.empty()); +} + void JGadget::TNodeLinkList::splice(iterator it, TNodeLinkList& rSrc, iterator itSrc) { iterator itSrcNext = itSrc; ++itSrcNext; @@ -48,24 +67,69 @@ void JGadget::TNodeLinkList::splice(iterator it, TNodeLinkList& rSrc, iterator i } } -JGadget::TNodeLinkList::iterator JGadget::TNodeLinkList::Insert(iterator it, TLinkListNode* p) { - TLinkListNode* pIt = it.node; - TLinkListNode* pItPrev = pIt->mPrev; +void JGadget::TNodeLinkList::splice(iterator it, TNodeLinkList& rSrc, iterator itBegin, iterator itEnd) { + s32 dist = 0; + if (this == &rSrc) { + if (itBegin == itEnd) { + return; + } + } else { + dist = std::distance(itBegin, itEnd); + if (dist == 0) { + return; + } + } + TLinkListNode* r31 = it.p_; + TLinkListNode* r30 = itBegin.p_; + TLinkListNode* r29 = itEnd.p_; + TLinkListNode* r25 = r29->pPrev_; + TLinkListNode* r24 = r30->pPrev_; + r24->pNext_ = r29; + r29->pPrev_ = r24; + rSrc.count -= dist; + TLinkListNode* r23 = r31->pPrev_; + r23->pNext_ = r30; + r30->pPrev_ = r23; + r25->pNext_ = r31; + r31->pPrev_ = r25; + count += dist; +} - p->mNext = pIt; - p->mPrev = pItPrev; - pIt->mPrev = p; - pItPrev->mNext = p; +JGadget::TNodeLinkList::iterator JGadget::TNodeLinkList::Find(const JGadget::TLinkListNode* p) { + return std::find_if(begin(), end(), TPRIsEqual_pointer_(p)); +} + +JGadget::TNodeLinkList::iterator JGadget::TNodeLinkList::Insert(iterator it, TLinkListNode* p) { + JUT_ASSERT(300, p!=NULL); + TLinkListNode* pIt = it.p_; + JUT_ASSERT(302, pIt!=NULL); + TLinkListNode* pItPrev = pIt->pPrev_; + JUT_ASSERT(305, pItPrev!=0); + JGADGET_ASSERTWARN(307, p->pNext_==NULL); + JGADGET_ASSERTWARN(308, p->pPrev_==NULL); + + p->pNext_ = pIt; + p->pPrev_ = pItPrev; + pIt->pPrev_ = p; + pItPrev->pNext_ = p; count++; return iterator(p); } JGadget::TNodeLinkList::iterator JGadget::TNodeLinkList::Erase(TLinkListNode* p) { - TLinkListNode* pNext = p->mNext; - TLinkListNode* pPrev = p->mPrev; - pNext->mPrev = pPrev; - pPrev->mNext = pNext; + JUT_ASSERT(325, !empty()); + JUT_ASSERT(326, p!=0); + JUT_ASSERT(327, p!=&oNode_); + TLinkListNode* pNext = p->pNext_; + TLinkListNode* pPrev = p->pPrev_; + JUT_ASSERT(330, pNext!=NULL); + pNext->pPrev_ = pPrev; + JUT_ASSERT(332, pPrev!=NULL); + pPrev->pNext_ = pNext; count--; +#if DEBUG + p->clear_(); +#endif return iterator(pNext); } @@ -73,3 +137,34 @@ JGadget::TNodeLinkList::iterator JGadget::TNodeLinkList::Erase(TLinkListNode* p) void JGadget::TNodeLinkList::Remove(TLinkListNode* p) { remove_if(TPRIsEqual_pointer_(p)); } + +bool JGadget::TNodeLinkList::Confirm() const { + int u = 0; + const_iterator itEnd = end(); + JGADGET_EXITWARN(357, itEnd.p_==&oNode_); + const_iterator it = begin(); + JGADGET_EXITWARN(359, it.p_==oNode_.pNext_); + for (; it != itEnd; ++it, ++u) { + JGADGET_EXITWARN(362, upNext_->pPrev_==pIt); + JGADGET_EXITWARN(366, pIt->pPrev_->pNext_==pIt); + } + JGADGET_EXITWARN(368, it.p_==&oNode_); + JGADGET_EXITWARN(369, u==size()); + return true; +} + +bool JGadget::TNodeLinkList::Confirm_iterator(const_iterator it) const { + const_iterator itBegin = begin(); + const_iterator itEnd = end(); + while (itBegin != itEnd) { + if (itBegin == it) { + return true; + } + ++itBegin; + } + JGADGET_EXITWARN(383, it==itEnd); + return true; +} diff --git a/src/JSystem/JGadget/std-stream.cpp b/src/JSystem/JGadget/std-stream.cpp index 3ce2def24d..4fe582f8f6 100644 --- a/src/JSystem/JGadget/std-stream.cpp +++ b/src/JSystem/JGadget/std-stream.cpp @@ -2,7 +2,7 @@ #include "JSystem/JGadget/std-stream.h" #include "JSystem/JGadget/define.h" -#include +#include #include namespace JGadget { diff --git a/src/JSystem/JGadget/std-vector.cpp b/src/JSystem/JGadget/std-vector.cpp index 57a9c29b1b..f89eedf6f4 100644 --- a/src/JSystem/JGadget/std-vector.cpp +++ b/src/JSystem/JGadget/std-vector.cpp @@ -9,13 +9,13 @@ u32 JGadget::vector::extend_default(u32 param_0, u32 param_1, u32 param_2) { JGadget::TVector_pointer_void::TVector_pointer_void(JGadget::TAllocator const& param_0) : TVector(param_0) { } -JGadget::TVector_pointer_void::~TVector_pointer_void() { -} - void dummy_weak_order(JGadget::TVector vec) { vec.insert(NULL, 0, NULL); } +JGadget::TVector_pointer_void::~TVector_pointer_void() { +} + void JGadget::TVector_pointer_void::insert(void** param_0, void* const& param_1) { TVector::insert(param_0, param_1); } diff --git a/src/JSystem/JKernel/JKRAramArchive.cpp b/src/JSystem/JKernel/JKRAramArchive.cpp index 35817fe158..811978caa0 100644 --- a/src/JSystem/JKernel/JKRAramArchive.cpp +++ b/src/JSystem/JKernel/JKRAramArchive.cpp @@ -7,7 +7,7 @@ #include "JSystem/JKernel/JKRDvdFile.h" #include "JSystem/JUtility/JUTAssert.h" #include "JSystem/JUtility/JUTException.h" -#include +#include #include JKRAramArchive::JKRAramArchive() {} diff --git a/src/JSystem/JKernel/JKRAramStream.cpp b/src/JSystem/JKernel/JKRAramStream.cpp index d126b08b5d..94b9ca91fc 100644 --- a/src/JSystem/JKernel/JKRAramStream.cpp +++ b/src/JSystem/JKernel/JKRAramStream.cpp @@ -4,7 +4,7 @@ #include "JSystem/JKernel/JKRAramPiece.h" #include "JSystem/JSupport/JSUFileStream.h" #include "JSystem/JUtility/JUTException.h" -#include +#include #if PLATFORM_GCN const u32 stack_size = 0xc00; diff --git a/src/JSystem/JKernel/JKRArchivePri.cpp b/src/JSystem/JKernel/JKRArchivePri.cpp index 5dff53f00b..375e297c37 100644 --- a/src/JSystem/JKernel/JKRArchivePri.cpp +++ b/src/JSystem/JKernel/JKRArchivePri.cpp @@ -2,7 +2,7 @@ #include "JSystem/JKernel/JKRArchive.h" #include "JSystem/JKernel/JKRHeap.h" -#include +#include #include u32 JKRArchive::sCurrentDirID; diff --git a/src/JSystem/JKernel/JKRCompArchive.cpp b/src/JSystem/JKernel/JKRCompArchive.cpp index 5e9eb638e6..8a1577f592 100644 --- a/src/JSystem/JKernel/JKRCompArchive.cpp +++ b/src/JSystem/JKernel/JKRCompArchive.cpp @@ -10,9 +10,9 @@ #include "JSystem/JKernel/JKRMemArchive.h" #include "JSystem/JUtility/JUTAssert.h" #include "JSystem/JUtility/JUTException.h" -#include +#include #include -#include +#include JKRCompArchive::JKRCompArchive(s32 entryNum, JKRArchive::EMountDirection eMountDirection) : JKRArchive(entryNum, MOUNT_COMP) { diff --git a/src/JSystem/JKernel/JKRDvdArchive.cpp b/src/JSystem/JKernel/JKRDvdArchive.cpp index 0a74ca8c01..ed88d791e7 100644 --- a/src/JSystem/JKernel/JKRDvdArchive.cpp +++ b/src/JSystem/JKernel/JKRDvdArchive.cpp @@ -6,10 +6,10 @@ #include "JSystem/JKernel/JKRDvdRipper.h" #include "JSystem/JUtility/JUTAssert.h" #include "JSystem/JUtility/JUTException.h" -#include +#include #include #include "global.h" -#include +#include JKRDvdArchive::JKRDvdArchive(s32 entryNum, JKRArchive::EMountDirection mountDirection) : JKRArchive(entryNum, MOUNT_DVD) { diff --git a/src/JSystem/JKernel/JKRDvdFile.cpp b/src/JSystem/JKernel/JKRDvdFile.cpp index 172827e520..07bd9505a5 100644 --- a/src/JSystem/JKernel/JKRDvdFile.cpp +++ b/src/JSystem/JKernel/JKRDvdFile.cpp @@ -3,7 +3,7 @@ #include "JSystem/JKernel/JKRDvdFile.h" #include "JSystem/JUtility/JUTAssert.h" #include "JSystem/JUtility/JUTException.h" -#include +#include JSUList JKRDvdFile::sDvdList; diff --git a/src/JSystem/JKernel/JKRDvdRipper.cpp b/src/JSystem/JKernel/JKRDvdRipper.cpp index 877d10d740..fc792c50cd 100644 --- a/src/JSystem/JKernel/JKRDvdRipper.cpp +++ b/src/JSystem/JKernel/JKRDvdRipper.cpp @@ -11,7 +11,7 @@ #include #include #include "dolphin/vi.h" -#include +#include static int JKRDecompressFromDVD(JKRDvdFile*, void*, u32, u32, u32, u32, u32*); static int decompSZS_subroutine(u8*, u8*); diff --git a/src/JSystem/JKernel/JKRExpHeap.cpp b/src/JSystem/JKernel/JKRExpHeap.cpp index 9f1109d12a..1c6d16c1a9 100644 --- a/src/JSystem/JKernel/JKRExpHeap.cpp +++ b/src/JSystem/JKernel/JKRExpHeap.cpp @@ -9,7 +9,7 @@ #include "JSystem/JSupport/JSupport.h" #include "JSystem/JUtility/JUTConsole.h" #include "JSystem/JUtility/JUTException.h" -#include +#include JKRExpHeap* JKRExpHeap::createRoot(int maxHeaps, bool errorFlag) { JKRExpHeap* heap = NULL; diff --git a/src/JSystem/JKernel/JKRFileCache.cpp b/src/JSystem/JKernel/JKRFileCache.cpp index 2c764a7024..1dc3a719ef 100644 --- a/src/JSystem/JKernel/JKRFileCache.cpp +++ b/src/JSystem/JKernel/JKRFileCache.cpp @@ -6,7 +6,7 @@ #include "JSystem/JKernel/JKRHeap.h" #include "JSystem/JUtility/JUTAssert.h" -#include +#include #include #include "global.h" diff --git a/src/JSystem/JKernel/JKRFileLoader.cpp b/src/JSystem/JKernel/JKRFileLoader.cpp index cf756ee279..26790f87b6 100644 --- a/src/JSystem/JKernel/JKRFileLoader.cpp +++ b/src/JSystem/JKernel/JKRFileLoader.cpp @@ -5,7 +5,7 @@ #define MSL_USE_INLINES 1 // needed to inline tolower call. not inlined elsewhere in the repo #include -#include +#include #include "global.h" JKRFileLoader* JKRFileLoader::sCurrentVolume; diff --git a/src/JSystem/JKernel/JKRHeap.cpp b/src/JSystem/JKernel/JKRHeap.cpp index b805901b78..e4337db174 100644 --- a/src/JSystem/JKernel/JKRHeap.cpp +++ b/src/JSystem/JKernel/JKRHeap.cpp @@ -8,7 +8,7 @@ #include "JSystem/JKernel/JKRHeap.h" #include "JSystem/JUtility/JUTAssert.h" #include "JSystem/JUtility/JUTException.h" -#include +#include #include #if DEBUG diff --git a/src/JSystem/JKernel/JKRMemArchive.cpp b/src/JSystem/JKernel/JKRMemArchive.cpp index 505329847c..0c0ef4887c 100644 --- a/src/JSystem/JKernel/JKRMemArchive.cpp +++ b/src/JSystem/JKernel/JKRMemArchive.cpp @@ -7,7 +7,7 @@ #include "JSystem/JUtility/JUTException.h" #include #include "global.h" -#include +#include JKRMemArchive::JKRMemArchive(s32 entryNum, JKRArchive::EMountDirection mountDirection) : JKRArchive(entryNum, MOUNT_MEM) { diff --git a/src/JSystem/JKernel/JKRSolidHeap.cpp b/src/JSystem/JKernel/JKRSolidHeap.cpp index 593f4b78ac..01ead7728b 100644 --- a/src/JSystem/JKernel/JKRSolidHeap.cpp +++ b/src/JSystem/JKernel/JKRSolidHeap.cpp @@ -5,8 +5,8 @@ #include "JSystem/JUtility/JUTAssert.h" #include "JSystem/JUtility/JUTConsole.h" #include "global.h" -#include -#include +#include +#include JKRSolidHeap* JKRSolidHeap::create(u32 size, JKRHeap* heap, bool useErrorHandler) { if (!heap) { diff --git a/src/JSystem/JKernel/JKRThread.cpp b/src/JSystem/JKernel/JKRThread.cpp index 0392beef0f..fa38270a2d 100644 --- a/src/JSystem/JKernel/JKRThread.cpp +++ b/src/JSystem/JKernel/JKRThread.cpp @@ -3,9 +3,9 @@ #include "JSystem/JKernel/JKRThread.h" #include "JSystem/JUtility/JUTAssert.h" #include "JSystem/JUtility/JUTConsole.h" -#include +#include #include "global.h" -#include +#include JSUList JKRThread::sThreadList(0); diff --git a/src/JSystem/JMath/JMATrigonometric.cpp b/src/JSystem/JMath/JMATrigonometric.cpp index 89e36a413e..5d394ac9c2 100644 --- a/src/JSystem/JMath/JMATrigonometric.cpp +++ b/src/JSystem/JMath/JMATrigonometric.cpp @@ -1,79 +1,25 @@ #include "JSystem/JSystem.h" // IWYU pragma: keep -// don't include header until this "zero" mess is figured out -// #include "JSystem/JMath/JMATrigonometric.h" -#include +#include "JSystem/JMath/JMATrigonometric.h" +#include #include "global.h" static f32 dummy() { return 0.0f; } -namespace std { -template -struct pair { - A1 a1; - B1 b1; - pair() { - f32 tmp = 0.0f; - a1 = tmp; - b1 = tmp; - // a1 = A1(); - // b1 = B1(); - } -}; -} // namespace std - -inline f64 getConst() { - return 6.2831854820251465; -} - -template -struct TSinCosTable { - std::pair table[1 << N]; - TSinCosTable() { - for (int i = 0; i < 1 << N; i++) { - table[i].a1 = sin((i * getConst()) / (1 << N)); - table[i].b1 = cos((i * getConst()) / (1 << N)); - } - } -}; +namespace JMath { +template +struct TAngleConstant_; inline f64 getConst2() { return 9.765625E-4; } -struct TAtanTable { - f32 table[1025]; - u8 pad[0x1C]; - TAtanTable() { - // (u32) cast needed for cmplwi instead of cmpwi - for (int i = 0; i < (u32)1024; i++) { - table[i] = atan(getConst2() * i); - } - table[0] = 0.0f; - table[1024] = 0.7853982; // 0.25 * PI - } -}; - -struct TAsinAcosTable { - f32 table[1025]; - u8 pad[0x1C]; - TAsinAcosTable() { - for (int i = 0; i < 1024; i++) { - table[i] = asin(getConst2() * i); - } - table[0] = 0.0f; - table[1024] = 0.7853982; // 0.25 * PI - } -}; - -namespace JMath { - TSinCosTable<13, f32> sincosTable_ ATTRIBUTE_ALIGN(32); -TAtanTable atanTable_ ATTRIBUTE_ALIGN(32); +TAtanTable<1024, f32> atanTable_ ATTRIBUTE_ALIGN(32); -TAsinAcosTable asinAcosTable_ ATTRIBUTE_ALIGN(32); +TAsinAcosTable<1024, f32> asinAcosTable_ ATTRIBUTE_ALIGN(32); } // namespace JMath diff --git a/src/JSystem/JMath/JMath.cpp b/src/JSystem/JMath/JMath.cpp index fe9a5c9cfd..40ba07e463 100644 --- a/src/JSystem/JMath/JMath.cpp +++ b/src/JSystem/JMath/JMath.cpp @@ -38,8 +38,9 @@ void JMAQuatLerp(__REGISTER const Quaternion* p, __REGISTER const Quaternion* q, ps_sum0 dp, dp, dp, dp } #endif // clang-format on - - if (dp < 0.0) { + f32 local_78 = dp; + if (local_78 < 0.0) { + int unused; dst->x = -t * (p->x + q->x) + p->x; dst->y = -t * (p->y + q->y) + p->y; dst->z = -t * (p->z + q->z) + p->z; @@ -73,7 +74,7 @@ void JMAFastVECNormalize(__REGISTER const Vec* src, __REGISTER Vec* dst) { void JMAVECScaleAdd(__REGISTER const Vec* vec1, __REGISTER const Vec* vec2, __REGISTER Vec* dst, __REGISTER f32 scale) { __REGISTER f32 v1xy; - __REGISTER f32 v2xy = scale; + __REGISTER f32 v2xy; __REGISTER f32 rxy, v1z, v2z, rz; #ifdef __MWERKS__ // clang-format off asm { diff --git a/src/JSystem/JMath/random.cpp b/src/JSystem/JMath/random.cpp index add311c729..389d614d0c 100644 --- a/src/JSystem/JMath/random.cpp +++ b/src/JSystem/JMath/random.cpp @@ -2,6 +2,6 @@ #include "JSystem/JMath/random.h" -JMath::TRandom_fast_::TRandom_fast_(u32 param_0) { - value = param_0; +JMath::TRandom_fast_::TRandom_fast_(u32 seed) { + setSeed(seed); } diff --git a/src/JSystem/JStudio/JStudio/functionvalue.cpp b/src/JSystem/JStudio/JStudio/functionvalue.cpp index 7d891a47d6..174a459b62 100644 --- a/src/JSystem/JStudio/JStudio/functionvalue.cpp +++ b/src/JSystem/JStudio/JStudio/functionvalue.cpp @@ -5,8 +5,8 @@ #include "JSystem/JUtility/JUTException.h" #include "JSystem/JUtility/JUTAssert.h" #include "JSystem/JGadget/linklist.h" -#include -#include +#include +#include #include namespace JStudio { @@ -291,7 +291,11 @@ f64 TFunctionValue_composite::composite_index(TVector_pointer c } break; case 1: { +#ifdef __MWERKS__ div_t dt = div(index, size - 1); +#else + div_t dt = div((int)index, (int)size - 1); +#endif index = dt.rem; if (index < 0) { index = size + index; @@ -304,7 +308,11 @@ f64 TFunctionValue_composite::composite_index(TVector_pointer c index = 0; } else { u32 uVar3 = (u32)(size - 2) * 2; +#ifdef __MWERKS__ div_t dt2 = div(index, uVar3); +#else + div_t dt2 = div((int)index, (int)uVar3); +#endif index = dt2.rem; if (index < 0) { index += uVar3; @@ -315,8 +323,12 @@ f64 TFunctionValue_composite::composite_index(TVector_pointer c } break; } - + +#ifdef __MWERKS__ std::advance_pointer(local_148, index + 1); +#else + std::advance(local_148, index + 1); +#endif pFront = *local_148; return pFront->getValue(param_3); } diff --git a/src/JSystem/JStudio/JStudio/jstudio-math.cpp b/src/JSystem/JStudio/JStudio/jstudio-math.cpp index 0203a9e894..119cd4c554 100644 --- a/src/JSystem/JStudio/JStudio/jstudio-math.cpp +++ b/src/JSystem/JStudio/JStudio/jstudio-math.cpp @@ -3,7 +3,7 @@ #include "JSystem/JStudio/JStudio/jstudio-math.h" #include "JSystem/JGeometry.h" #include "JSystem/TPosition3.h" -#include +#include void JStudio::math::getRotation_xyz(MtxP param_1, f32 x, f32 y, f32 z) { f32 cosx = cosf(DEG_TO_RAD(x)); @@ -62,7 +62,7 @@ void JStudio::math::getFromTransformation_SRxyzT(Vec* param_1, Vec* param_2, Vec param_4[1][0] * dVar9, param_4[1][1] * dVar8, param_4[1][2] * dVar7, param_4[2][0] * dVar9, param_4[2][1] * dVar8, param_4[2][2] * dVar7); aTStack_88.getEulerXYZ(&local_a0); - local_a0 *= 57.29577951308232; + local_a0 *= 180.0 / m_PI_D; param_2->x = local_a0.x; param_2->y = local_a0.y; param_2->z = local_a0.z; diff --git a/src/JSystem/JStudio/JStudio/stb-data-parse.cpp b/src/JSystem/JStudio/JStudio/stb-data-parse.cpp index a5d0136d2b..e9ab233d33 100644 --- a/src/JSystem/JStudio/JStudio/stb-data-parse.cpp +++ b/src/JSystem/JStudio/JStudio/stb-data-parse.cpp @@ -3,7 +3,7 @@ #include "JSystem/JStudio/JStudio/stb-data-parse.h" #include "JSystem/JUtility/JUTAssert.h" #include "dolphin/os.h" -#include +#include namespace JStudio { namespace stb { diff --git a/src/JSystem/JUtility/JUTAssert.cpp b/src/JSystem/JUtility/JUTAssert.cpp index 9916b8e4c8..bf26d0ae99 100644 --- a/src/JSystem/JUtility/JUTAssert.cpp +++ b/src/JSystem/JUtility/JUTAssert.cpp @@ -4,7 +4,7 @@ #include "JSystem/JUtility/JUTConsole.h" #include "JSystem/JUtility/JUTDbPrint.h" #include "JSystem/JUtility/JUTDirectPrint.h" -#include +#include #include namespace JUTAssertion { diff --git a/src/JSystem/JUtility/JUTCacheFont.cpp b/src/JSystem/JUtility/JUTCacheFont.cpp index 9054c6ec77..3292adc78b 100644 --- a/src/JSystem/JUtility/JUTCacheFont.cpp +++ b/src/JSystem/JUtility/JUTCacheFont.cpp @@ -6,7 +6,7 @@ #include "JSystem/JUtility/JUTConsole.h" #include "JSystem/JKernel/JKRAram.h" #include "dolphin/gx.h" -#include +#include JUTCacheFont::JUTCacheFont(ResFONT const* p_fontRes, u32 cacheSize, JKRHeap* p_heap) { initialize_state(); diff --git a/src/JSystem/JUtility/JUTConsole.cpp b/src/JSystem/JUtility/JUTConsole.cpp index 98f8404211..c3389cb95e 100644 --- a/src/JSystem/JUtility/JUTConsole.cpp +++ b/src/JSystem/JUtility/JUTConsole.cpp @@ -7,7 +7,7 @@ #include "JSystem/JUtility/JUTDirectPrint.h" #include "JSystem/JUtility/JUTVideo.h" #include -#include +#include #include "global.h" JUTConsoleManager* JUTConsoleManager::sManager; diff --git a/src/JSystem/JUtility/JUTDbPrint.cpp b/src/JSystem/JUtility/JUTDbPrint.cpp index f137c13dd5..9adab8141b 100644 --- a/src/JSystem/JUtility/JUTDbPrint.cpp +++ b/src/JSystem/JUtility/JUTDbPrint.cpp @@ -4,7 +4,7 @@ #include "JSystem/J2DGraph/J2DOrthoGraph.h" #include "JSystem/JKernel/JKRHeap.h" #include "JSystem/JUtility/JUTVideo.h" -#include +#include JUTDbPrint::JUTDbPrint(JUTFont* pFont, JKRHeap* pHeap) { mFont = pFont; diff --git a/src/JSystem/JUtility/JUTDirectFile.cpp b/src/JSystem/JUtility/JUTDirectFile.cpp index a60a90c5ec..ce2c4354d5 100644 --- a/src/JSystem/JUtility/JUTDirectFile.cpp +++ b/src/JSystem/JUtility/JUTDirectFile.cpp @@ -3,7 +3,7 @@ #include "JSystem/JUtility/JUTDirectFile.h" #include #include "global.h" -#include +#include int JUTDirectFile::fetch32byte() { mToRead = mLength - ALIGN_PREV(mPos, DVD_MIN_TRANSFER_SIZE); diff --git a/src/JSystem/JUtility/JUTDirectPrint.cpp b/src/JSystem/JUtility/JUTDirectPrint.cpp index 6a9fa75d1e..b317f18efe 100644 --- a/src/JSystem/JUtility/JUTDirectPrint.cpp +++ b/src/JSystem/JUtility/JUTDirectPrint.cpp @@ -1,7 +1,7 @@ #include "JSystem/JSystem.h" // IWYU pragma: keep #include "JSystem/JUtility/JUTDirectPrint.h" -#include +#include #include #include "global.h" diff --git a/src/JSystem/JUtility/JUTException.cpp b/src/JSystem/JUtility/JUTException.cpp index 5a2c6289a5..19c3fafe0e 100644 --- a/src/JSystem/JUtility/JUTException.cpp +++ b/src/JSystem/JUtility/JUTException.cpp @@ -4,11 +4,11 @@ #include "JSystem/JUtility/JUTConsole.h" #include "JSystem/JUtility/JUTDirectPrint.h" #include "JSystem/JUtility/JUTDirectFile.h" -#include -#include -#include +#include +#include +#include #include -#include +#include OSMessageQueue JUTException::sMessageQueue = {0}; diff --git a/src/JSystem/JUtility/JUTGamePad.cpp b/src/JSystem/JUtility/JUTGamePad.cpp index 2330d538f2..1918268afc 100644 --- a/src/JSystem/JUtility/JUTGamePad.cpp +++ b/src/JSystem/JUtility/JUTGamePad.cpp @@ -1,7 +1,7 @@ #include "JSystem/JSystem.h" // IWYU pragma: keep #include "JSystem/JUtility/JUTGamePad.h" -#include +#include u32 JUTGamePad::CRumble::sChannelMask[4] = { PAD_CHAN0_BIT, diff --git a/src/JSystem/JUtility/JUTGraphFifo.cpp b/src/JSystem/JUtility/JUTGraphFifo.cpp index 06d47d6a11..a30a0aeace 100644 --- a/src/JSystem/JUtility/JUTGraphFifo.cpp +++ b/src/JSystem/JUtility/JUTGraphFifo.cpp @@ -2,7 +2,7 @@ #include "JSystem/JUtility/JUTGraphFifo.h" #include "JSystem/JKernel/JKRHeap.h" -#include +#include static bool data_804514B8; diff --git a/src/JSystem/JUtility/JUTProcBar.cpp b/src/JSystem/JUtility/JUTProcBar.cpp index 6de3753989..20fb99c827 100644 --- a/src/JSystem/JUtility/JUTProcBar.cpp +++ b/src/JSystem/JUtility/JUTProcBar.cpp @@ -4,7 +4,7 @@ #include "JSystem/J2DGraph/J2DOrthoGraph.h" #include "JSystem/JKernel/JKRHeap.h" #include "JSystem/JUtility/JUTVideo.h" -#include +#include JUTProcBar::JUTProcBar() { mVisible = true; diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/memory b/src/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/memory index bdd83684d7..58a22ef4d7 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/memory +++ b/src/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/memory @@ -1,16 +1,16 @@ #ifndef MSL_MEMORY_H_ #define MSL_MEMORY_H_ +#include + namespace std { template -inline ForwardIt uninitialized_fill_n(ForwardIt first, Size count, const T& value) { +inline void uninitialized_fill_n(ForwardIt first, Size count, const T& value) { + ForwardIt r29 = first; for (; count--; ++first) { - if (first != NULL) { - *first = value; - } + new (first) T(value); } - return first; } template diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/new b/src/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/new index 414c6fd5be..743a4e968b 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/new +++ b/src/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/new @@ -3,6 +3,7 @@ #include -inline void* (operator new)(size_t, void *ptr) { return ptr; } +inline void* operator new(size_t, void *ptr) { return ptr; } +inline void* operator new[](size_t, void* ptr) { return ptr; } #endif diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/stdint b/src/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/stdint.h similarity index 100% rename from src/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/stdint rename to src/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/stdint.h diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/ansi_fp.h b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/ansi_fp.h index 8c781b46b5..2fcc788d14 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/ansi_fp.h +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/ansi_fp.h @@ -20,4 +20,15 @@ typedef struct decform { short digits; } decform; +void __ull2dec(decimal*, unsigned long long); +void __timesdec(decimal*, const decimal*, const decimal*); +void __str2dec(decimal*, const char*, short); +void __two_exp(decimal*, long); +int __equals_dec(const decimal*, const decimal*); +int __less_dec(const decimal*, const decimal*); +void __minus_dec(decimal*, const decimal*, const decimal*); +void __num2dec_internal(decimal*, double); +void __num2dec(const decform*, double, decimal*); +double __dec2num(const decimal*); + #endif diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/arith.h b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/arith.h index 6e79bc47f6..ee3c8ba03a 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/arith.h +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/arith.h @@ -5,7 +5,7 @@ extern "C" { #endif -typedef struct { +typedef struct div_t { int quot; /* quotient */ int rem; /* remainder */ } div_t; diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/ctype b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cctype similarity index 100% rename from src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/ctype rename to src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cctype diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cmath b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cmath index 78fd149109..3040fbfe62 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cmath +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cmath @@ -151,6 +151,62 @@ MSL_INLINE float tanf(float x) { #ifdef __cplusplus }; + +namespace std { +template +inline double fabs(T x) { + return ::fabs(x); +} + +inline float fabs(float num) { + return ::fabsf(num); +} + +inline float fabsf(float num) { + return ::fabsf(num); +} + +inline float sqrt(float x) { + return ::sqrtf(x); +} + +inline float abs(float x) { + return ::fabsf(x); +} + +inline float fmod(float x, float y) { + return ::fmod(x, y); +} + +inline float ceil(float num) { + return ::ceilf(num); +} + +inline float floor(float num) { + return ::floorf(num); +} + +inline float tan(float num) { + return ::tanf(num); +} + +inline float tanf(float num) { + return ::tanf(num); +} + +inline float acos(float num) { + return ::acosf(num); +} + +inline float pow(float x, float y) { + return ::pow(x, y); +} + +inline float pow(float x, int y) { + // FIXME: Needs to use powf + return ::pow(x, y); +} +} // namespace std #endif #endif diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cstdio b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cstdio index 739a62f641..efe9c253ba 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cstdio +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cstdio @@ -13,4 +13,24 @@ #define stdout (&__files._stdout) #define stderr (&__files._stderr) +#ifdef __cplusplus +#include + +extern "C" { +namespace std { + using ::fputs; + using ::fflush; + using ::fclose; + using ::fprintf; + using ::printf; + using ::sprintf; + using ::snprintf; + using ::vsnprintf; + using ::vprintf; + using ::vswprintf; + using ::sscanf; +} +}; +#endif + #endif diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cstdlib b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cstdlib index ae12232293..a98bcf8b61 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cstdlib +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cstdlib @@ -5,4 +5,18 @@ #include #include +#ifdef __cplusplus +extern "C" { +namespace std { + using ::strtol; + using ::strtoul; + using ::div; + using ::exit; + using ::abort; + using ::atoi; + using ::atof; +} +}; +#endif + #endif diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/math b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/math deleted file mode 100644 index de9c0a6bc2..0000000000 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/math +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef MSL_MATH_H_ -#define MSL_MATH_H_ - -#include - -namespace std { -template -inline double fabs(T x) { - return ::fabs(x); -} - -inline float fabs(float num) { - return ::fabsf(num); -} - -inline float fabsf(float num) { - return ::fabsf(num); -} - -inline float sqrt(float x) { - return ::sqrtf(x); -} - -inline float abs(float x) { - return ::fabsf(x); -} - -inline float fmod(float x, float y) { - return ::fmod(x, y); -} - -inline float ceil(float num) { - return ::ceilf(num); -} - -inline float floor(float num) { - return ::floorf(num); -} - -inline float tan(float num) { - return ::tanf(num); -} - -inline float tanf(float num) { - return ::tanf(num); -} - -inline float acos(float num) { - return ::acosf(num); -} - -inline float pow(float x, float y) { - return ::pow(x, y); -} - -inline float pow(float x, int y) { - // FIXME: Needs to use powf - return ::pow(x, y); -} -} // namespace std - -#endif diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/ansi_files.c b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/ansi_files.c index e5e725311c..4895d6074a 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/ansi_files.c +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/ansi_files.c @@ -1,3 +1,4 @@ +#include "alloc.h" #include "ansi_files.h" #include "critical_regions.h" diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/char_io.c b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/char_io.c index 0fdc6ed150..c6c35c459d 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/char_io.c +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/char_io.c @@ -1,5 +1,7 @@ +#include "buffer_io.h" #include "char_io.h" #include "critical_regions.h" +#include "FILE_POS.h" #include "misc_io.h" #include "wchar_io.h" diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/ctype.c b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/ctype.c index 967879ace0..b206e9ab4d 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/ctype.c +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/ctype.c @@ -7,7 +7,7 @@ #undef MSL_INLINE #define MSL_INLINE __declspec(weak) -#include +#include #if PLATFORM_GCN #define ctrl __control_char diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/direct_io.c b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/direct_io.c index e4a2baa3ab..7424557ace 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/direct_io.c +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/direct_io.c @@ -1,6 +1,10 @@ -#include "direct_io.h" +#include "buffer_io.h" #include "critical_regions.h" +#include "direct_io.h" +#include "FILE_POS.h" +#include "misc_io.h" #include "wchar_io.h" +#include size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream) { size_t retval; diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/extras.c b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/extras.c index 9d68210dc2..1b184d60e6 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/extras.c +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/extras.c @@ -1,5 +1,5 @@ #include "extras.h" -#include +#include int stricmp(const char* str1, const char* str2) { char a_var; diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/file_io.c b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/file_io.c index c73b270039..32246fbe85 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/file_io.c +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/file_io.c @@ -1,5 +1,8 @@ +#include "alloc.h" +#include "buffer_io.h" #include "file_io.h" -#include +#include "FILE_POS.h" +#include int fclose(FILE* file) { int flush_result, close_result; diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/locale.c b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/locale.c index 1917c23b63..565ed380af 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/locale.c +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/locale.c @@ -1,5 +1,5 @@ #include -#include +#include #include #include diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/mem.c b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/mem.c index a3ffdd25a1..528db09292 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/mem.c +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/mem.c @@ -1,3 +1,4 @@ +#include "mem_funcs.h" #include void* memmove(void* dst, const void* src, size_t n) { diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/printf.c b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/printf.c index 83305984e1..b542d792e8 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/printf.c +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/printf.c @@ -1,13 +1,15 @@ #include "printf.h" #include "ansi_fp.h" #include "critical_regions.h" -#include +#include "direct_io.h" +#include "mbstring.h" #include "scanf.h" +#include "wchar_io.h" +#include #include #include #include #include -#include "wchar_io.h" #define LDBL_MANT_DIG 53 @@ -19,8 +21,7 @@ #define TARGET_FLOAT_MANT_BITS (TARGET_FLOAT_MANT_DIG - TARGET_FLOAT_IMPLICIT_J_BIT) #define TARGET_FLOAT_EXP_BITS (TARGET_FLOAT_BITS - TARGET_FLOAT_MANT_BITS - 1) -#define PTRDIFF __typeof__((char*)0 - (char*)0) -typedef PTRDIFF ptrdiff_t; +extern void __msl_runtime_constraint_violation_s(const char* msg, void* ptr, int error); enum justification_options { left_justification, right_justification, zero_fill }; diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/scanf.c b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/scanf.c index b60a21131c..67e392b0a4 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/scanf.c +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/scanf.c @@ -1,5 +1,5 @@ #include "scanf.h" -#include +#include #include #include #include diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/strtold.c b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/strtold.c index 444ceed800..0f7a2b0f48 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/strtold.c +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/strtold.c @@ -2,7 +2,7 @@ #include #include "ansi_fp.h" #include -#include +#include #include "float.h" #include #include diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/strtoul.c b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/strtoul.c index cb65203382..2a93968f67 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/strtoul.c +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/strtoul.c @@ -1,5 +1,5 @@ #include "strtoul.h" -#include +#include #include "errno.h" #include #include "scanf.h" diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/wctype.c b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/wctype.c index 7faf351f1c..13356b95e5 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/wctype.c +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/wctype.c @@ -1,4 +1,4 @@ -#include +#include const unsigned short __wctype_mapC[256] = { ctype_cntrl, diff --git a/src/SSystem/SComponent/c_m3d.cpp b/src/SSystem/SComponent/c_m3d.cpp index 1af53e81e3..8487468223 100644 --- a/src/SSystem/SComponent/c_m3d.cpp +++ b/src/SSystem/SComponent/c_m3d.cpp @@ -12,6 +12,11 @@ #include "SSystem/SComponent/c_math.h" #include "SSystem/SComponent/c_sxyz.h" +#ifndef __MWERKS__ +#include +#define FLT_EPSILON std::numeric_limits::epsilon() +#endif + const f32 G_CM3D_F_ABS_MIN = 32 * FLT_EPSILON; void cM3d_InDivPos1(const Vec* pVecA, const Vec* pVecB, f32 pF, Vec* pOut) { diff --git a/src/SSystem/SComponent/c_math.cpp b/src/SSystem/SComponent/c_math.cpp index f590bc9bba..ba7a63c61a 100644 --- a/src/SSystem/SComponent/c_math.cpp +++ b/src/SSystem/SComponent/c_math.cpp @@ -5,7 +5,7 @@ #include "SSystem/SComponent/c_math.h" #include "SSystem/SComponent/c_m3d.h" -#include +#include s16 cM_rad2s(f32 rad) { s32 s = (std::fmod(rad, 2 * M_PI) * (0x8000 / M_PI)); diff --git a/src/SSystem/SComponent/c_xyz.cpp b/src/SSystem/SComponent/c_xyz.cpp index 41ff834864..9f05b9e61c 100644 --- a/src/SSystem/SComponent/c_xyz.cpp +++ b/src/SSystem/SComponent/c_xyz.cpp @@ -7,6 +7,11 @@ #include "SSystem/SComponent/c_math.h" #include "JSystem/JUtility/JUTAssert.h" +#ifndef __MWERKS__ +#include +#define FLT_EPSILON std::numeric_limits::epsilon() +#endif + cXyz cXyz::operator+(const Vec& vec) const { Vec ret; PSVECAdd(this, &vec, &ret); diff --git a/src/TRK_MINNOW_DOLPHIN/debugger/embedded/MetroTRK/Portable/mem_TRK.c b/src/TRK_MINNOW_DOLPHIN/debugger/embedded/MetroTRK/Portable/mem_TRK.c index 36473080f0..a30ab8c7a8 100644 --- a/src/TRK_MINNOW_DOLPHIN/debugger/embedded/MetroTRK/Portable/mem_TRK.c +++ b/src/TRK_MINNOW_DOLPHIN/debugger/embedded/MetroTRK/Portable/mem_TRK.c @@ -4,7 +4,7 @@ */ #include "TRK_MINNOW_DOLPHIN/MetroTRK/Portable/mem_TRK.h" -#include +#include #pragma dont_inline on void TRK_fill_mem(void* dst, int val, u32 n) { diff --git a/src/TRK_MINNOW_DOLPHIN/debugger/embedded/MetroTRK/Processor/ppc/Generic/targimpl.c b/src/TRK_MINNOW_DOLPHIN/debugger/embedded/MetroTRK/Processor/ppc/Generic/targimpl.c index becb062ca8..b570022d2b 100644 --- a/src/TRK_MINNOW_DOLPHIN/debugger/embedded/MetroTRK/Processor/ppc/Generic/targimpl.c +++ b/src/TRK_MINNOW_DOLPHIN/debugger/embedded/MetroTRK/Processor/ppc/Generic/targimpl.c @@ -1,6 +1,6 @@ #include "TRK_MINNOW_DOLPHIN/ppc/Generic/targimpl.h" #include "TRK_MINNOW_DOLPHIN/utils/common/MWTrace.h" -#include +#include #include typedef struct memRange { diff --git a/src/Z2AudioLib/Z2Audience.cpp b/src/Z2AudioLib/Z2Audience.cpp index 26f79ebbe4..46b7107473 100644 --- a/src/Z2AudioLib/Z2Audience.cpp +++ b/src/Z2AudioLib/Z2Audience.cpp @@ -309,7 +309,7 @@ void Z2AudioCamera::setCameraState(f32 (*param_0)[4], Vec& pos, Vec& param_2, f3 } else { Vec aTStack_cc = {param_0[0][0], param_0[0][1], param_0[0][2]}; Mtx rotMtx; - MTXRotAxisRad(rotMtx, &aTStack_cc, 0.017453292f * (-1.0f * dVar10)); + MTXRotAxisRad(rotMtx, &aTStack_cc, (M_PI / 180.0f) * (-1.0f * dVar10)); JGeometry::TVec3 aTStack_d8; MTXMultVec(rotMtx, aTStack_c0, aTStack_d8); aTStack_d8.scale(aTStack_c0.y / aTStack_d8.y); diff --git a/src/Z2AudioLib/Z2AudioMgr.cpp b/src/Z2AudioLib/Z2AudioMgr.cpp index 8a4a3930bd..7a6b1ab498 100644 --- a/src/Z2AudioLib/Z2AudioMgr.cpp +++ b/src/Z2AudioLib/Z2AudioMgr.cpp @@ -1,3 +1,5 @@ +#include "d/dolzel.h" // IWYU pragma: keep + #include "Z2AudioLib/Z2AudioMgr.h" #include "JSystem/JAudio2/JASAiCtrl.h" #include "JSystem/JAudio2/JASDriverIF.h" diff --git a/src/Z2AudioLib/Z2Calc.cpp b/src/Z2AudioLib/Z2Calc.cpp index a55a14c753..0082ca0e9b 100644 --- a/src/Z2AudioLib/Z2Calc.cpp +++ b/src/Z2AudioLib/Z2Calc.cpp @@ -1,6 +1,6 @@ #include "Z2AudioLib/Z2Calc.h" #include "JSystem/JMath/random.h" -#include +#include f32 Z2Calc::linearTransform(f32 inValue, f32 inMin, f32 inMax, f32 outMin, f32 outMax, bool noClamp) { f32 transformed = outMin + ((inValue - inMin) * ((outMax - outMin) / (inMax - inMin))); diff --git a/src/Z2AudioLib/Z2SceneMgr.cpp b/src/Z2AudioLib/Z2SceneMgr.cpp index 6c1a917716..3aa7e99950 100644 --- a/src/Z2AudioLib/Z2SceneMgr.cpp +++ b/src/Z2AudioLib/Z2SceneMgr.cpp @@ -1,3 +1,5 @@ +#include "d/dolzel.h" // IWYU pragma: keep + #include "JSystem/JAudio2/JASBasicWaveBank.h" #include "JSystem/JAudio2/JAUSectionHeap.h" #include "JSystem/JAudio2/JAUSoundTable.h" diff --git a/src/Z2AudioLib/Z2SoundObject.cpp b/src/Z2AudioLib/Z2SoundObject.cpp index bc92476846..d34d0dea19 100644 --- a/src/Z2AudioLib/Z2SoundObject.cpp +++ b/src/Z2AudioLib/Z2SoundObject.cpp @@ -9,6 +9,11 @@ #include "Z2AudioLib/Z2Audience.h" #include "JSystem/JAudio2/JAUSoundAnimator.h" +#ifndef __MWERKS__ +#include +#define FLT_MAX std::numeric_limits::max() +#endif + #if PLATFORM_WII || PLATFORM_SHIELD #include "Z2AudioLib/Z2AudioCS.h" #endif diff --git a/src/c/c_damagereaction.cpp b/src/c/c_damagereaction.cpp index f95ac063b4..3f98d76b9a 100644 --- a/src/c/c_damagereaction.cpp +++ b/src/c/c_damagereaction.cpp @@ -2,6 +2,7 @@ #include "d/actor/d_a_player.h" #include "d/d_com_inf_game.h" #include "f_op/f_op_actor_mng.h" +#include "d/d_s_play.h" u8 cDmr_SkipInfo; u8 data_80450C99; @@ -13,21 +14,27 @@ u8 data_80450C9D; u8 data_80450C9E; u8 cDmr_FishingWether; +#if DEBUG +void debug_actor_create() { + fopAc_ac_c* player = dComIfGp_getPlayer(0); +} +#endif + void JPTraceParticleCallBack4::execute(JPABaseEmitter* param_0, JPABaseParticle* param_1) { u32 age = param_1->getAge(); if (age != 0) { Vec* user_work = (Vec*)param_0->getUserWork(); JGeometry::TVec3 vec1, vec2, vec3; - f32 fVar1 = (25.0f - age) / 25.0f; + f32 fVar1 = ((25.0f + nREG_F(18)) - age) / (25.0f + nREG_F(18)); if (fVar1 < 0.0f) { fVar1 = 0.0f; } vec1 = user_work[age]; - vec1.scale(0.3f * fVar1); + vec1.scale((0.3f + nREG_F(16)) * fVar1); vec2 = user_work[0]; - vec2.scale(0.5f * fVar1); + vec2.scale((0.5f + nREG_F(17)) * fVar1); - param_1->getOffsetPosition(vec3); + param_1->getOffsetPosition(&vec3); vec3.add(vec1 + vec2); param_1->setOffsetPosition(vec3); } diff --git a/src/d/actor/d_a_alink.cpp b/src/d/actor/d_a_alink.cpp index f940a04974..650409f04c 100644 --- a/src/d/actor/d_a_alink.cpp +++ b/src/d/actor/d_a_alink.cpp @@ -2855,7 +2855,7 @@ s16 daAlink_c::getNeckAimAngle(cXyz* param_0, s16* param_1, s16* param_2, s16* p s16 sp18; s16 sp16 = field_0x2fe6 + mBodyAngle.y; if ((mProcID == PROC_GOAT_CATCH && mProcVar1.field_0x300a == 0) || (mProcID == PROC_HAND_PAT && mProcVar2.field_0x300c == 0)) { - ADD_ANGLE(sp16, 0x8000); + ADD_ANGLE_2(sp16, 0x8000); } cXyz sp28 = eyePos - field_0x34e0; diff --git a/src/d/actor/d_a_b_bq.cpp b/src/d/actor/d_a_b_bq.cpp index a99c2ea721..eb2d9f0247 100644 --- a/src/d/actor/d_a_b_bq.cpp +++ b/src/d/actor/d_a_b_bq.cpp @@ -16,7 +16,7 @@ #include "JSystem/J3DGraphBase/J3DMaterial.h" #include "SSystem/SComponent/c_math.h" #include "c/c_damagereaction.h" -#include +#include enum B_bq_RES_File_ID { /* BCK */ diff --git a/src/d/actor/d_a_b_tn.cpp b/src/d/actor/d_a_b_tn.cpp index 4600e64c7f..6febefa837 100644 --- a/src/d/actor/d_a_b_tn.cpp +++ b/src/d/actor/d_a_b_tn.cpp @@ -6,7 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_b_tn.h" -#include +#include #include "Z2AudioLib/Z2Instances.h" #include "d/actor/d_a_boomerang.h" #include "d/actor/d_a_nbomb.h" diff --git a/src/d/actor/d_a_b_zant.cpp b/src/d/actor/d_a_b_zant.cpp index ed9383a6e9..b38aa09b98 100644 --- a/src/d/actor/d_a_b_zant.cpp +++ b/src/d/actor/d_a_b_zant.cpp @@ -17,7 +17,7 @@ #include "SSystem/SComponent/c_math.h" #include "Z2AudioLib/Z2Instances.h" #include "JSystem/JAudio2/JAUSectionHeap.h" -#include +#include enum Joint { /* 0x00 */ JNT_CENTER, diff --git a/src/d/actor/d_a_b_zant_magic.cpp b/src/d/actor/d_a_b_zant_magic.cpp index 83482ffd36..f107187429 100644 --- a/src/d/actor/d_a_b_zant_magic.cpp +++ b/src/d/actor/d_a_b_zant_magic.cpp @@ -10,7 +10,7 @@ #include "d/d_com_inf_game.h" #include "d/actor/d_a_player.h" #include "SSystem/SComponent/c_math.h" -#include +#include int daB_ZANTM_c::draw() { g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); diff --git a/src/d/actor/d_a_b_zant_mobile.cpp b/src/d/actor/d_a_b_zant_mobile.cpp index 282bec5900..7778dadf81 100644 --- a/src/d/actor/d_a_b_zant_mobile.cpp +++ b/src/d/actor/d_a_b_zant_mobile.cpp @@ -11,7 +11,7 @@ #include "d/d_cc_uty.h" #include "d/actor/d_a_player.h" #include "SSystem/SComponent/c_math.h" -#include +#include namespace { dCcD_SrcSph cc_zant_src = { diff --git a/src/d/actor/d_a_bg_obj.cpp b/src/d/actor/d_a_bg_obj.cpp index cc3b88375b..e8c934afab 100644 --- a/src/d/actor/d_a_bg_obj.cpp +++ b/src/d/actor/d_a_bg_obj.cpp @@ -7,7 +7,7 @@ #include "d/actor/d_a_bg_obj.h" #include "JSystem/J3DGraphBase/J3DMaterial.h" -#include +#include #include "dolphin/os.h" #include "d/actor/d_a_set_bgobj.h" #include "d/d_s_play.h" diff --git a/src/d/actor/d_a_bullet.cpp b/src/d/actor/d_a_bullet.cpp index cf488e347d..ecce710fca 100644 --- a/src/d/actor/d_a_bullet.cpp +++ b/src/d/actor/d_a_bullet.cpp @@ -12,7 +12,7 @@ static char* l_resFileNameList[] = {"Hanjo1"}; static char* l_bmdFileNameList[] = {"hanjo_stone.bmd"}; -static daBullet_Param_c l_HIO; +static BULLET_HIO_CLASS l_HIO; const dCcD_SrcGObjInf daBullet_c::mCcDObjInfo = { {0, {{0, 0, 0}, {0x0, 0x0}, {0x79}}}, @@ -28,8 +28,28 @@ dCcD_SrcSph daBullet_c::mCcDSph = { } // mSphAttr }; +#if DEBUG +daBullet_HIO_c::daBullet_HIO_c() { + m = daBullet_HIO_c::m; +} + +void daBullet_HIO_c::listenPropertyEvent(const JORPropertyEvent*) { + // NONMATCHING +} + +void daBullet_HIO_c::genMessage(JORMContext*) { + // NONMATCHING +} +#endif + daBullet_c::~daBullet_c() { dComIfG_resDelete(&mPhase, getResName()); + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif } int daBullet_c::create() { @@ -71,7 +91,7 @@ daBullet_HIOParam const daBullet_Param_c::m = { }; int daBullet_c::Execute() { - gravity = daBullet_Param_c::m.gravity; + gravity = mpHIO->m.gravity; if (field_0x957 == 0) { if (mProcess != NULL) { @@ -155,10 +175,15 @@ void daBullet_c::initialize() { fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -10.0f, -10.0f, -10.0f, 10.0f, 10.0f, 10.0f); - mAcchCir.SetWall(daBullet_Param_c::m.width, daBullet_Param_c::m.knee_height); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("弾"); +#endif + + mAcchCir.SetWall(mpHIO->m.width, mpHIO->m.knee_height); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daBullet_Param_c::m.weight, 0, this); + mCcStts.Init(mpHIO->m.weight, 0, this); mCcSph.Set(mCcDSph); mCcSph.SetStts(&mCcStts); mAcch.CrrPos(dComIfG_Bgsp()); @@ -166,7 +191,7 @@ void daBullet_c::initialize() { mGroundY = mAcch.GetGroundH(); setProcess(&daBullet_c::wait); - mLifetime = daBullet_Param_c::m.lifetime; + mLifetime = mpHIO->m.lifetime; Execute(); } diff --git a/src/d/actor/d_a_cow.cpp b/src/d/actor/d_a_cow.cpp index df44ba3924..f6d7e88ada 100644 --- a/src/d/actor/d_a_cow.cpp +++ b/src/d/actor/d_a_cow.cpp @@ -21,14 +21,16 @@ #include "m_Do/m_Do_ext.h" #include "m_Do/m_Do_lib.h" #include "m_Do/m_Do_mtx.h" +#include "d/d_s_play.h" +#include "SSystem/SComponent/c_angle.h" #define GET_FLAG(mask) (mFlags & (mask)) // cLib_checkBit(mFlags, (mask)) -#define CLEAR_FLAG(mask) mFlags &= ~(mask) // cLib_offBit(mFlags, (mask)) + #define TICK_TIMER(name) \ if ((name)) { \ (name)--; \ } -#define COW_INDEX (u8)(fopAcM_GetParam(this) >> 8) +#define COW_INDEX (u8)((fopAcM_GetParam(this) & 0xff00) >> 8) #define CLAMP(val, min, max) \ if ((val) > (max)) { \ (val) = (max); \ @@ -78,8 +80,10 @@ int daCow_c::calcRunAnime(int resetRunType) { mRunType = daCow_c::RunType_Run; } break; - case daCow_c::RunType_Trot: { - f32 animationSpeed = (speedF * 3.0f) / 25.0f; + case daCow_c::RunType_Trot: + f32 animationSpeed; // needs bad switch-case variable initialization in order to match debug + + animationSpeed = (speedF * 3.0f) / 25.0f; if (animationSpeed > 5.0f) { animationSpeed = 5.0f; } @@ -88,7 +92,8 @@ int daCow_c::calcRunAnime(int resetRunType) { setBck(daCow_c::Animation_Run, J3DFrameCtrl::EMode_LOOP, 5.0f, 1.0f); mRunType = daCow_c::RunType_Run; } - } break; + + break; case daCow_c::RunType_Run: mpMorf->setPlaySpeed(1.3f); if (speedF < 35.0f) { @@ -101,13 +106,15 @@ int daCow_c::calcRunAnime(int resetRunType) { } void daCow_c::setBck(int i_index, u8 i_attr, f32 i_morf, f32 i_rate) { - J3DAnmTransform* animation = (J3DAnmTransform*)dComIfG_getObjectRes("Cow", i_index); - mpMorf->setAnm(animation, i_attr, i_morf, i_rate, 0.0f, -1.0f); + mpMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("Cow", i_index), i_attr, i_morf, i_rate, + 0.0f, -1.0f); } -u8 daCow_c::checkBck(int i_index) { - J3DAnmTransform* animation = (J3DAnmTransform*)dComIfG_getObjectRes("Cow", i_index); - return mpMorf->getAnm() == animation; +bool daCow_c::checkBck(int i_index) { + if (mpMorf->getAnm() == (J3DAnmTransform*)dComIfG_getObjectRes("Cow", i_index)) { + return TRUE; + } + return FALSE; } namespace { @@ -120,11 +127,12 @@ static u32 l_CowType = 0; } // namespace void daCow_c::setEffect() { + cXyz effectPos2; + cXyz effectPos3; + cXyz effectPos1; + JPABaseEmitter* emitter; if (mShouldSetEffect) { if (mShouldSetEffect == 1) { - cXyz effectPos2; - cXyz effectPos3; - cXyz effectPos1; if (mCounter1 & 1) { cXyz offset(0.0f, 10.0f, -70.0f); @@ -140,19 +148,17 @@ void daCow_c::setEffect() { mShouldSetEffect = 0; } - int roomNumber = fopAcM_GetRoomNo(this); - mParticle.setEffectTwo(&tevStr, ¤t.pos, 0, 0, mShouldSetEffect ? &effectPos1 : NULL, mShouldSetEffect ? &effectPos2 : NULL, mShouldSetEffect ? &effectPos3 : NULL, // - &mSavedAngle, NULL, roomNumber, 1.0f, speedF); + &mSavedAngle, NULL, fopAcM_GetRoomNo(this), 1.0f, speedF); static cXyz runScale(2.0f, 2.0f, 2.0f); for (int j, i = 0; i < 3; i++) { for (j = 0; j < 2; j++) { - JPABaseEmitter* emitter = mParticle.getEmitterTwo(i, j, 0); + emitter = mParticle.getEmitterTwo(i, j, 0); if (emitter) { emitter->setGlobalScale(runScale); emitter->setRate(1.3f); @@ -176,6 +182,7 @@ bool daCow_c::isChaseCowGame() { } void daCow_c::setCarryStatus() { + cXyz carryPosition; f32 zMax = 270.0f; f32 xMax = 70.0f; if (speedF >= 10.0f) { @@ -185,19 +192,19 @@ void daCow_c::setCarryStatus() { mDoMtx_stack_c::YrotS(-shape_angle.y); mDoMtx_stack_c::transM(-current.pos.x, -current.pos.y, -current.pos.z); - Vec carryPosition; mDoMtx_stack_c::multVec(&daPy_getPlayerActorClass()->current.pos, &carryPosition); if (fabsf(carryPosition.x) < xMax && carryPosition.z > 0.0f && carryPosition.z < zMax) { // todo: what does this mean - attention_info.flags |= fopAc_AttnFlag_CARRY_e; // in debug this is 0x80 + attention_info.flags |= fopAc_AttnFlag_CARRY_e; } } void daCow_c::setActetcStatus() { + s32 playerAngle; if (!mNadeNade) { - s32 playerAngle = fopAcM_seenPlayerAngleY(this); + playerAngle = fopAcM_seenPlayerAngleY(this); if (playerAngle < 0x6000 && playerAngle > 0x2000) { - attention_info.flags |= fopAc_AttnFlag_ETC_e; // in debug this is 0x800 + attention_info.flags |= fopAc_AttnFlag_ETC_e; } } } @@ -206,7 +213,7 @@ void daCow_c::setActetcStatus() { bool daCow_c::checkNadeNadeFinish() { if (GET_FLAG(daCow_c::Flag_NaderuFinish)) { - CLEAR_FLAG(daCow_c::Flag_NaderuFinish); + UNSET_FLAG(mFlags, daCow_c::Flag_NaderuFinish, u16); mNadeNade = false; return true; } @@ -215,7 +222,7 @@ bool daCow_c::checkNadeNadeFinish() { bool daCow_c::checkNadeNade() { if (GET_FLAG(daCow_c::Flag_Naderu)) { - CLEAR_FLAG(daCow_c::Flag_Naderu); + UNSET_FLAG(mFlags, daCow_c::Flag_Naderu, u16); mNadeNade = true; return 1; } @@ -239,13 +246,13 @@ bool daCow_c::checkThrow() { if (GET_FLAG(daCow_c::Flag_CrazyBeforeCatch)) { setProcess(&daCow_c::action_thrown, false); initCrazyBeforeCatch(0); - CLEAR_FLAG(daCow_c::Flag_CrazyBeforeCatch); + UNSET_FLAG(mFlags, daCow_c::Flag_CrazyBeforeCatch, u16); return true; } if (GET_FLAG(daCow_c::Flag_CrazyCatch)) { setProcess(&daCow_c::action_thrown, false); initCrazyCatch(0); - CLEAR_FLAG(daCow_c::Flag_CrazyCatch); + UNSET_FLAG(mFlags, daCow_c::Flag_CrazyCatch, u16); return true; } } @@ -276,18 +283,16 @@ void daCow_c::setBodyAngle2(s16 angle) { cLib_chaseS(&mJoint1Offset.y, offsetAngle * 0.3f, 0x100); daPy_py_c* player = daPy_getPlayerActorClass(); - s16 targetAngle = cLib_targetAngleY(¤t.pos, &player->current.pos); - s16 bodyAngle = mSavedAngle.y - targetAngle; + s16 bodyAngle = mSavedAngle.y - cLib_targetAngleY(¤t.pos, &player->current.pos); - s16 chaseAngle; if (abs(bodyAngle) < 0x5000) { CLAMP_COW_BODY_ANGLE(bodyAngle); - chaseAngle = bodyAngle; + offsetAngle = bodyAngle; } else { - chaseAngle = offsetAngle * 0.7f; + offsetAngle = offsetAngle * 0.7f; } - cLib_chaseS(&mJoint8Offset.y, chaseAngle, 0x100); + cLib_chaseS(&mJoint8Offset.y, offsetAngle, 0x100); } BOOL daCow_c::checkProcess(void (daCow_c::*process)()) { @@ -316,7 +321,7 @@ bool daCow_c::setProcess(void (daCow_c::*process)(), BOOL doAnim6) { void daCow_c::damage_check() { mCcStts.Move(); - if (getCowIn()) { + if (mCowIn) { return; } @@ -374,12 +379,13 @@ void daCow_c::damage_check() { } void daCow_c::setEnterCow20() { + cXyz spawnPosition; + csXyz spawnAngle; for (int iCow = 0; iCow < 20; iCow++) { - cXyz spawnPosition(l_CowRoomPosX[iCow], l_CowRoomPosY, l_CowRoomPosZ[iCow & 1]); + spawnPosition.set(l_CowRoomPosX[iCow], l_CowRoomPosY, l_CowRoomPosZ[iCow & 1]); l_CowRoomNo |= 1 << iCow; - csXyz spawnAngle; if (iCow & 1) { spawnAngle.set(0, 0, 0); } else { @@ -394,21 +400,24 @@ void daCow_c::setEnterCow20() { static u32 cow_number[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; void daCow_c::setEnterCow10() { - for (int iCow = 0; iCow < 10; iCow++) { - int cowNumber = cow_number[iCow]; + cXyz spawnPosition; + csXyz spawnAngle; + int cowNumber; - cXyz spawnPosition(l_CowRoomPosX[cowNumber], l_CowRoomPosY, l_CowRoomPosZ[cowNumber & 1]); + for (int iCow = 0; iCow < 10; iCow++) { + cowNumber = cow_number[iCow]; + + spawnPosition.set(l_CowRoomPosX[cowNumber], l_CowRoomPosY, l_CowRoomPosZ[cowNumber & 1]); l_CowRoomNo |= 1 << cowNumber; - csXyz spawnAngle; if (cowNumber & 1) { spawnAngle.set(0, 0, 0); } else { spawnAngle.set(0, -0x8000, 0); } - int roomNumber = fopAcM_GetRoomNo(this); - fopAcM_create(0x106, 0xFFFFFF04, &spawnPosition, roomNumber, &spawnAngle, 0, -1); + fopAcM_create(0x106, 0xFFFFFF04, &spawnPosition, fopAcM_GetRoomNo(this), &spawnAngle, 0, + -1); } } @@ -442,14 +451,13 @@ static s16 m_view_angle; static void* s_near_cow(void* candidate, void* data) { if (IS_VALID_COW_INTERACTION(candidate, data)) { - daCow_c* candidateCow = (daCow_c*)candidate; - daCow_c* self = (daCow_c*)data; - - if (!candidateCow->getCowIn()) { - s16 candidateAngleY = fopAcM_searchActorAngleY(self, candidateCow); - candidateAngleY = cLib_distanceAngleS(candidateAngleY, self->getShapeAngle().y); + if (((daCow_c*)candidate)->getCowIn() == FALSE) { + s16 candidateAngleY = fopAcM_searchActorAngleY((daCow_c*)data, (daCow_c*)candidate); + candidateAngleY = + cLib_distanceAngleS(candidateAngleY, ((daCow_c*)data)->getShapeAngle().y); if (cLib_distanceAngleS(candidateAngleY, m_view_angle) < m_view_angle_wide) { - f32 candidateDistance = fopAcM_searchActorDistance(candidateCow, self); + f32 candidateDistance = + fopAcM_searchActorDistance((daCow_c*)candidate, (daCow_c*)data); if (candidateDistance < m_near_dist) { m_near_dist = candidateDistance; } @@ -462,13 +470,12 @@ static void* s_near_cow(void* candidate, void* data) { static s16 m_angry_cow; static void* s_angry_cow(void* candidate, void* data) { - fopAc_ac_c* self = (fopAc_ac_c*)data; - if (IS_VALID_COW_INTERACTION(candidate, self)) { - daCow_c* candidateCow = (daCow_c*)candidate; - if ((candidateCow->isAngry() || candidateCow->isGuardFad()) && - fopAcM_searchActorDistance(candidateCow, self) < 500.0f) - { - m_angry_cow = true; + if (IS_VALID_COW_INTERACTION(candidate, (fopAc_ac_c*)data)) { + if (((daCow_c*)candidate)->isAngry() || ((daCow_c*)candidate)->isGuardFad()) { + f32 f = fopAcM_searchActorDistance((daCow_c*)candidate, (fopAc_ac_c*)data); + if (f < 500.0f) { + m_angry_cow = true; + } } } return NULL; @@ -476,10 +483,9 @@ static void* s_angry_cow(void* candidate, void* data) { static void* s_angry_cow2(void* candidate, void* self) { if (IS_VALID_COW_INTERACTION(candidate, (fopAc_ac_c*)self)) { - daCow_c* candidateCow = (daCow_c*)candidate; - if (candidateCow->isAngry()) { + if (((daCow_c*)candidate)->isAngry()) { m_angry_cow = true; - return candidateCow; + return candidate; } } return NULL; @@ -490,7 +496,7 @@ bool daCow_c::checkRun() { } bool daCow_c::checkNearCowRun() { - if (getCowIn()) { + if (mCowIn) { return false; } @@ -513,10 +519,9 @@ bool daCow_c::checkNearCowRun() { fopAc_ac_c* actor = dCc_GetAc(obj->GetAc()); if (actor && IS_COW(actor)) { - daCow_c* cow = static_cast(actor); - if (!cow->mNoNearCheckTimer && cow->checkRun()) { - s16 angle = fopAcM_searchActorAngleY(this, actor); - int angleDifference = cLib_distanceAngleS(angle, mSavedAngle.y); + if (!((daCow_c*)actor)->getNoNearCheckTimer() && ((daCow_c*)actor)->checkRun()) { + int angleDifference = + cLib_distanceAngleS(fopAcM_searchActorAngleY(this, actor), mSavedAngle.y); if (angleDifference >= 0x1000 && angleDifference < 0x7000) { return true; } @@ -529,6 +534,7 @@ bool daCow_c::checkNearCowRun() { void daCow_c::action_wait() { f32 rand = cM_rnd(); + s32 unused = 0; switch (mMode) { case daCow_c::Mode_0: @@ -552,66 +558,68 @@ void daCow_c::action_wait() { mMode = daCow_c::Mode_2; } - case daCow_c::Mode_2: { - s16 jointAngle = 0; - if (mWaitTimer > 30) { - jointAngle = mSavedAngle.y - fopAcM_searchPlayerAngleY(this); - CLAMP(jointAngle, -0x2800, 0x2800); - } - - cLib_addCalcAngleS2(&mJoint8Offset.y, jointAngle * 0.9f, 0x10, 0x100); - cLib_addCalcAngleS2(&mJoint1Offset.y, jointAngle * 0.1f, 0x10, 0x100); - - if (!getCowIn()) { - if (checkCowInOwn(0x8000)) { - return; + case daCow_c::Mode_2: + s16 jointAngle; + { + jointAngle = 0; + if (mWaitTimer > 30) { + jointAngle = mSavedAngle.y - fopAcM_searchPlayerAngleY(this); + CLAMP(jointAngle, -0x2800, 0x2800); } - if (mNadeNade) { - mWaitTimer = 0; - if (!checkNadeNadeFinish()) { + + cLib_addCalcAngleS2(&mJoint8Offset.y, jointAngle * 0.9f, 0x10, 0x100); + cLib_addCalcAngleS2(&mJoint1Offset.y, jointAngle * 0.1f, 0x10, 0x100); + + if (!mCowIn) { + if (checkCowInOwn(0x8000)) { + return; + } + if (mNadeNade) { + mWaitTimer = 0; + if (checkNadeNadeFinish()) { + setProcess(&daCow_c::action_moo, false); + } + return; + } + if (checkPlayerWait() && (checkPlayerSurprise() || checkPlayerPos())) { + setProcess(&daCow_c::action_run, false); + return; + } + if (checkWolfBusters()) { + return; + } + setActetcStatus(); + if (checkNadeNade()) { + return; + } + setCarryStatus(); + if (checkThrow()) { + return; + } + if (checkNearCowRun()) { + setProcess(&daCow_c::action_run, false); return; } - setProcess(&daCow_c::action_moo, false); - return; } - if (checkPlayerWait() && (checkPlayerSurprise() || checkPlayerPos())) { - setProcess(&daCow_c::action_run, false); - return; - } - if (checkWolfBusters()) { - return; - } - setActetcStatus(); - if (checkNadeNade()) { - return; - } - setCarryStatus(); - if (checkThrow()) { - return; - } - if (checkNearCowRun()) { - setProcess(&daCow_c::action_run, false); - return; - } - } - if (!cLib_calcTimer(&mIdleTimer) && !mWaitTimer) { - if (checkNearWolf()) { - setProcess(&daCow_c::action_moo, false); - } else { - daPy_py_c* playerActor = daPy_getPlayerActorClass(); - if (current.pos.absXZ(playerActor->current.pos) > 500.0f && rand < 0.4f) { + if (!cLib_calcTimer(&mIdleTimer) && !mWaitTimer) { + if (checkNearWolf()) { setProcess(&daCow_c::action_moo, false); - } else if (rand < 0.5f) { - setProcess(&daCow_c::action_eat, true); } else { - setProcess(&daCow_c::action_shake, true); + if (current.pos.absXZ(daPy_getPlayerActorClass()->current.pos) > 500.0f && + rand < 0.4f) + { + setProcess(&daCow_c::action_moo, false); + } else if (rand < 0.5f) { + setProcess(&daCow_c::action_eat, true); + } else { + setProcess(&daCow_c::action_shake, true); + } } } } - } break; + break; case daCow_c::Mode_3: - mJoint1Offset.y = 0; - mJoint8Offset.y = 0; + mJoint8Offset.y = mJoint1Offset.y = 0; mWaitTimer = 0; mNadeNade = false; break; @@ -643,7 +651,7 @@ void daCow_c::action_eat() { mSound.startCreatureVoice(Z2SE_GOAT_V_EAT, -1); } - if (!getCowIn()) { + if (!mCowIn) { if (checkNearCowRun() || checkPlayerWait()) { setProcess(&daCow_c::action_wait, false); return; @@ -706,7 +714,7 @@ void daCow_c::action_moo() { mSound.startCreatureVoice(Z2SE_GOAT_V_CRY, -1); } - if (!getCowIn()) { + if (!mCowIn) { if (checkNearCowRun() || checkPlayerWait()) { setProcess(&daCow_c::action_wait, false); return; @@ -758,7 +766,7 @@ void daCow_c::action_shake() { mSound.startCreatureVoice(Z2SE_GOAT_V_NOSE, -1); } - if (!getCowIn()) { + if (!mCowIn) { if (checkNearCowRun() || checkPlayerWait()) { setProcess(&daCow_c::action_wait, false); return; @@ -814,7 +822,7 @@ bool daCow_c::checkPlayerWait() { } bool daCow_c::checkPlayerSurprise() { - if (getCowIn()) { + if (mCowIn) { return false; } @@ -824,7 +832,8 @@ bool daCow_c::checkPlayerSurprise() { return false; } - if (fopAcM_searchPlayerDistance(this) < 1500.0f && player->checkCowGameLash()) { + f32 player_distance = fopAcM_searchPlayerDistance(this); + if (player_distance < 1500.0f && player->checkCowGameLash()) { mSound.startCreatureVoice(Z2SE_GOAT_V_CRY, -1); mRunTimer = 50; return true; @@ -834,7 +843,7 @@ bool daCow_c::checkPlayerSurprise() { } bool daCow_c::checkPlayerPos() { - if (getCowIn()) { + if (mCowIn) { return false; } @@ -889,11 +898,11 @@ bool daCow_c::checkPlayerPos() { void daCow_c::checkBeforeBg() { s16 x[3] = {0, -0x2000, 0x2000}; + cM3dGPla planes[3]; cXyz a; f32 y[3]; cXyz b, c; s16 z[3]; - cM3dGPla planes[3]; b = current.pos; b.y += 110.0f; @@ -925,7 +934,7 @@ void daCow_c::checkBeforeBg() { linChk.Set(&b, &c, this); if (dComIfG_Bgsp().LineCross(&linChk)) { planeTri[iPlane] = dComIfG_Bgsp().GetTriPla(linChk, &planes[iPlane]); - if ((f32)fabs(planes[iPlane].mNormal.y) <= cM_ssin(0x6000)) { + if (std::abs(planes[iPlane].mNormal.y) <= cM_ssin(0x6000)) { a = current.pos - linChk.GetCross(); y[iPlane] = a.absXZ(); z[iPlane] = cM_atan2s(planes[iPlane].mNormal.x, planes[iPlane].mNormal.z); @@ -944,18 +953,19 @@ void daCow_c::checkBeforeBg() { mIntersectedPlanes = 0; if (planeTri[0]) { - mIntersectedPlanes |= 1; + mIntersectedPlanes |= (u8)1; } if (planeTri[1]) { - mIntersectedPlanes |= 2; + mIntersectedPlanes |= (u8)2; } if (planeTri[2]) { - mIntersectedPlanes |= 4; + mIntersectedPlanes |= (u8)4; } if (cLib_calcTimer(&mTimer6)) { return; } - + + s16 sVar2; if (planeTri[1] && planeTri[2]) { switch (mAction) { case daCow_c::Action_NadeNade: @@ -988,7 +998,7 @@ void daCow_c::checkBeforeBg() { mAction = daCow_c::Action_3; } } else { - s16 sVar2 = z[0] - mSavedAngle.y; + sVar2 = z[0] - mSavedAngle.y; if (abs(sVar2) > 0x7800) { if (mExecute & 1) { mAction = daCow_c::Action_4; @@ -1061,7 +1071,7 @@ int daCow_c::checkOutOfGate(cXyz pos) { } cXyz x = pos - gate_pos; - mDoMtx_stack_c::YrotS(gate_dir); + mDoMtx_stack_c::YrotS((s16)gate_dir); mDoMtx_stack_c::multVecSR(&x, &x); if (x.z > 0.0f && fabsf(x.x) < 1100.0f) { @@ -1071,8 +1081,11 @@ int daCow_c::checkOutOfGate(cXyz pos) { x = pos - pen_pos; mDoMtx_stack_c::YrotS(-pen_dir); mDoMtx_stack_c::multVecSR(&x, &x); + if (x.z > 0.0f) { + return 2; + } - return x.z > 0.0f ? 2 : 0; + return 0; } s16 daCow_c::getCowshedAngle() { @@ -1146,15 +1159,17 @@ void daCow_c::action_run() { TICK_TIMER(mRunTimer); f32 acceleration = 1.0f; + u8 willGetAngry; + bool havePlayerPos = false; if (!mForgetCowPTimer) { - mCowP = NULL; + setCowP(NULL); } if (!isChaseCowGame()) { if (!mOutOfGate) { setCarryStatus(); } - u8 willGetAngry = mWillGetAngry; + willGetAngry = mWillGetAngry; if (checkThrow()) { dComIfGp_getVibration().StartShock(VIBMODE_S_POWER2, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); mWillGetAngry = willGetAngry; @@ -1167,7 +1182,7 @@ void daCow_c::action_run() { checkPlayerSurprise(); } - bool havePlayerPos = checkPlayerPos(); + havePlayerPos = checkPlayerPos(); if (mExecute == daCow_c::Execute_0 || mExecute == daCow_c::Execute_1 || mExecute == daCow_c::Execute_6) @@ -1185,16 +1200,14 @@ void daCow_c::action_run() { targetSpeed = (mSpeed - 10.0f) * (mBoostSpeed / 1000.0f); } } else { - f32 rand = cM_rndFX(200.0f) * 20.0f; - mTurningSpeed = rand; - mCowP = 0; + mTurningSpeed = cM_rndFX(200.0f) * 20.0f; + setCowP(NULL); acceleration = 2.0f; if (daPy_getPlayerActorClass()->checkHorseRide() || daPy_getPlayerActorClass()->checkNowWolf()) { - f32 rand = cM_rndF(100.0f); - mTimer1 = (u8)(rand + 30.0f); + mTimer1 = (u8)(cM_rndF(100.0f) + 30.0f); } targetSpeed = mSpeed * (mBoostSpeed / 1000.0f); } @@ -1203,7 +1216,7 @@ void daCow_c::action_run() { m_near_dist = 200.0f; m_view_angle = -0x8000; m_view_angle_wide = 0x2000; - fpcEx_Search(s_near_cow, this); + fpcM_Search(s_near_cow, this); if (m_near_dist < 200.0f) { targetSpeed = mSpeed * (mBoostSpeed / 1000.0f); } @@ -1211,31 +1224,31 @@ void daCow_c::action_run() { m_near_dist = 200.0f; m_view_angle = 0; m_view_angle_wide = 0x2000; - fpcEx_Search(s_near_cow, this); + fpcM_Search(s_near_cow, this); if (m_near_dist < 200.0f) { targetSpeed = mSpeed * (mBoostSpeed / 1000.0f) / 2.0f; } } if (mTimer6 == 0 || mTimer6 == 10) { s16 targetAngle = current.angle.y; - if (!mIntersectedPlanes && mCowP) { + if (!mIntersectedPlanes && getCowP()) { targetAngle = getCowP()->mSavedAngle.y; } switch (mAction) { case daCow_c::Action_NadeNade: - targetAngle -= 0x1000; + SUB_ANGLE_2(targetAngle, 0x1000); break; case daCow_c::Action_Cry: - targetAngle += 0x1000; + ADD_ANGLE_2(targetAngle, 0x1000); break; case daCow_c::Action_3: - targetAngle -= 0x4000; + SUB_ANGLE_2(targetAngle, 0x4000); break; case daCow_c::Action_4: - targetAngle += 0x4000; + ADD_ANGLE_2(targetAngle, 0x4000); break; - case daCow_c::Action_Wait: { + case daCow_c::Action_Wait: s16 cowshedAngle = getCowshedAngle(); s16 playerAngle = fopAcM_searchPlayerAngleY(this); targetAngle = playerAngle - (s16)0x8000; @@ -1244,7 +1257,7 @@ void daCow_c::action_run() { { targetAngle = cowshedAngle; } - } break; + break; } if (!havePlayerPos) { @@ -1306,6 +1319,7 @@ void daCow_c::action_run() { case daCow_c::Mode_2: break; case daCow_c::Mode_3: + int unused; mNoNearCheckTimer = 30; mRunTimer = 0; break; @@ -1313,14 +1327,13 @@ void daCow_c::action_run() { } bool daCow_c::checkCurringPen() { - daPy_py_c* player = daPy_getPlayerActorClass(); - if (player->current.pos.abs(pen_pos) < 2500.0f) { + if (daPy_getPlayerActorClass()->current.pos.abs(pen_pos) < 2500.0f) { return false; } cXyz positions; - camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); - int windowId = dComIfGp_getCameraWinID(fopCamM_GetParam(camera)); + u32 param = fopCamM_GetParam(dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0))); + int windowId = dComIfGp_getCameraWinID(param); scissor_class* scissor = dComIfGp_getWindow(windowId)->getScissor(); mDoLib_project(¤t.pos, &positions); @@ -1361,13 +1374,9 @@ void daCow_c::setCowInCage() { l_CowRoomNo |= 1 << cowIndex; if ((cowIndex & 1)) { - mSavedAngle.y = 0; - shape_angle.y = 0; - current.angle.y = 0; + current.angle.y = shape_angle.y = mSavedAngle.y = 0; } else { - mSavedAngle.y = -0x8000; - shape_angle.y = -0x8000; - current.angle.y = -0x8000; + current.angle.y = shape_angle.y = mSavedAngle.y = -0x8000; } } @@ -1379,7 +1388,7 @@ void daCow_c::setEnterCount() { mCrazy = daCow_c::Crazy_Dash; mEnterTimerDone = false; - if ((u32)dMeter2Info_getNowCount() == (u32)dMeter2Info_getMaxCount()) { + if (dMeter2Info_getNowCount() == (u8)dMeter2Info_getMaxCount()) { mEnterTimerDone = true; } } @@ -1444,7 +1453,7 @@ void daCow_c::action_enter() { speedF = 3.0f; mCrazy = daCow_c::Crazy_BeforeCatch; - if ((u32)dMeter2Info_getNowCount() == (u32)dMeter2Info_getMaxCount() && + if (dMeter2Info_getNowCount() == (u8)dMeter2Info_getMaxCount() && mEnterTimerDone) { daNpc_Aru_c* aru; @@ -1457,8 +1466,8 @@ void daCow_c::action_enter() { } break; case daCow_c::Crazy_BeforeCatch: { - s16 targetAngle = cLib_targetAngleY(¤t.pos, &mTarget); - cLib_addCalcAngleS2(¤t.angle.y, targetAngle, 4, 0x100); + cLib_addCalcAngleS2(¤t.angle.y, cLib_targetAngleY(¤t.pos, &mTarget), 4, + 0x100); cLib_addCalcAngleS2(&shape_angle.y, current.angle.y, 8, 0x800); mSavedAngle.y = shape_angle.y; @@ -1513,6 +1522,7 @@ void daCow_c::action_enter() { fVar2 = 2.0f; } cLib_chaseF(&speedF, fVar2, 1.5f); + break; } } break; case daCow_c::Mode_3: @@ -1525,14 +1535,14 @@ void daCow_c::action_enter() { } bool daCow_c::isAngry() { - if (checkProcess(&daCow_c::action_angry) && - (mCrazy == daCow_c::Crazy_Wait || mCrazy == daCow_c::Crazy_Dash || - mCrazy == daCow_c::Crazy_Attack)) - { - return true; - } else { - return false; + if (checkProcess(&daCow_c::action_angry)) { + if ((mCrazy == daCow_c::Crazy_Wait || mCrazy == daCow_c::Crazy_Dash || + mCrazy == daCow_c::Crazy_Attack)) + { + return true; + } } + return false; } bool daCow_c::isGuardFad() { @@ -1566,13 +1576,14 @@ void daCow_c::setAngryHit() { } bool daCow_c::checkBeforeBgAngry(s16 angle) { + f32 speed = 0.0f; + cXyz a, b; + s16 angleDistance; checkBeforeBg(); - if (mBoostSpeed < 1000.0f) { - s16 angleDistance = cLib_distanceAngleS(mBoostAngle, mSavedAngle.y); - if (mBoostSpeed < (fabsf(cM_ssin(angleDistance) * 250.0f) + 200.0f) && - angleDistance >= angle) - { + angleDistance = cLib_distanceAngleS(mBoostAngle, mSavedAngle.y); + speed = fabsf(cM_ssin(angleDistance) * 250.0f) + 200.0f; + if (mBoostSpeed < speed && angleDistance >= angle) { speedF = 0.0f; return true; } @@ -1646,28 +1657,29 @@ void daCow_c::action_angry() { return; } if (!mDealDamageTimer) { - if (!player->checkHorseRide() && mSph[0].ChkCoHit() && - fopAcM_GetName(mSph[0].GetCoHitObj()->GetAc()) == PROC_ALINK) - { - // if touched link who is not on a horse - s16 sangle = shape_angle.y; - cXyz pos = daPy_getPlayerActorClass()->current.pos; - pos.y += 100.0f; - cXyz pos2; - mDoMtx_stack_c::transS(pos); - mDoMtx_stack_c::YrotM(shape_angle.y); - mDoMtx_stack_c::transM(0.0f, 0.0f, 200.0f); - mDoMtx_stack_c::multVecZero(&pos2); + if (!player->checkHorseRide() && mSph[0].ChkCoHit()) { + fopAc_ac_c* a = dCc_GetAc(mSph[0].GetCoHitObj()->GetAc()); + if (fopAcM_GetName(a) == PROC_ALINK) { + // if touched link who is not on a horse + s16 sangle = shape_angle.y; + cXyz pos = daPy_getPlayerActorClass()->current.pos; + pos.y += 100.0f; + cXyz pos2; + mDoMtx_stack_c::transS(pos); + mDoMtx_stack_c::YrotM(shape_angle.y); + mDoMtx_stack_c::transM(0.0f, 0.0f, 200.0f); + mDoMtx_stack_c::multVecZero(&pos2); - dBgS_LinChk linkChck; - linkChck.Set(&pos, &pos2, this); + dBgS_LinChk linkChck; + linkChck.Set(&pos, &pos2, this); - if (dComIfG_Bgsp().LineCross(&linkChck)) { - sangle = shape_angle.y - (s16)0x8000; + if (dComIfG_Bgsp().LineCross(&linkChck)) { + sangle = shape_angle.y - (s16)0x8000; + } + + mDealDamageTimer = 30; + daPy_getPlayerActorClass()->setThrowDamage(sangle, 35.0f, 40.0f, 0, 0, 0); } - - mDealDamageTimer = 30; - daPy_getPlayerActorClass()->setThrowDamage(sangle, 35.0f, 40.0f, 0, 0, 0); } } else { mDealDamageTimer--; @@ -1802,14 +1814,13 @@ void daCow_c::action_angry() { cLib_addCalcAngleS2(¤t.angle.y, mTargetAngle, 8, 0x400); mSavedAngle.y = shape_angle.y = current.angle.y; setBodyAngle(mTargetAngle); - s32 angleDist = cLib_distanceAngleS(mTargetAngle, mSavedAngle.y); - if (angleDist < 0x200 && mJoint8Offset.y < 0x200) { + if (cLib_distanceAngleS(mTargetAngle, mSavedAngle.y) < 0x200 && mJoint8Offset.y < 0x200) + { if (mCrazy == daCow_c::Crazy_Throw) { setProcess(&daCow_c::action_run, false); } else { mCrazy = daCow_c::Crazy_Dash; - mJoint1Offset.y = 0; - mJoint8Offset.y = 0; + mJoint8Offset.y = mJoint1Offset.y = 0; } } break; @@ -1817,12 +1828,9 @@ void daCow_c::action_angry() { case daCow_c::Crazy_Attack: mpMorf->setPlaySpeed(1.0f); - playerAngle = fopAcM_searchPlayerAngleY(this); - cLib_chaseAngleS(&mSavedAngle.y, playerAngle, 0x800); + cLib_chaseAngleS(&mSavedAngle.y, fopAcM_searchPlayerAngleY(this), 0x800); - targetZ = mSavedAngle.y; - shape_angle.y = targetZ; - current.angle.y = targetZ; + current.angle.y = shape_angle.y = mSavedAngle.y; if (mpMorf->isStop()) { mCrazy = daCow_c::Crazy_Dash; @@ -1836,23 +1844,18 @@ void daCow_c::action_angry() { case daCow_c::Mode_2: break; case daCow_c::Mode_3: - mForgetCowPTimer = 0; - mTimer1 = 0; + mTimer1 = mForgetCowPTimer = 0; mTargetRedTev = 0.0f; - mJoint8Offset.z = 0; - mJoint1Offset.y = 0; - mJoint8Offset.y = 0; + mJoint8Offset.y = mJoint1Offset.y = mJoint8Offset.z = 0; attention_info.flags &= ~fopAc_AttnFlag_LOCK_e; - break; } } void daCow_c::calcCatchPos(f32 distance, BOOL someBool) { daPy_py_c* player = daPy_getPlayerActorClass(); s16 offsetAngle = player->shape_angle.y - (s16)0x8000; - f32 playerPosY = player->current.pos.y; - f32 diff = playerPosY - mGroundHeight; + f32 diff = player->current.pos.y - mGroundHeight; f32 abs = current.pos.absXZ(player->current.pos); int angle = cM_atan2s(abs, diff); @@ -1862,24 +1865,23 @@ void daCow_c::calcCatchPos(f32 distance, BOOL someBool) { if (someBool) { cLib_addCalcAngleS(&shape_angle.y, offsetAngle, 8, 0x400, 0x100); mSavedAngle.y = current.angle.y = shape_angle.y; - cXyz* pos = &daPy_getPlayerActorClass()->current.pos; cXyz target; - cLib_offsetPos(&target, pos, offsetAngle, &catchPos); + cLib_offsetPos(&target, &daPy_getPlayerActorClass()->current.pos, offsetAngle, &catchPos); cLib_chasePos(¤t.pos, target, 30.0f); } else { - cXyz* pos = &daPy_getPlayerActorClass()->current.pos; - cLib_offsetPos(¤t.pos, pos, offsetAngle, &catchPos); + cLib_offsetPos(¤t.pos, &daPy_getPlayerActorClass()->current.pos, offsetAngle, + &catchPos); mSavedAngle.y = current.angle.y = shape_angle.y = offsetAngle; } } void daCow_c::executeCrazyWait() { if (GET_FLAG(daCow_c::Flag_CrazyReady)) { - CLEAR_FLAG(daCow_c::Flag_CrazyReady); + UNSET_FLAG(mFlags, daCow_c::Flag_CrazyReady, u16); } if (GET_FLAG(daCow_c::Flag_CrazyReadyDrawOn)) { mDrawOff = false; - CLEAR_FLAG(daCow_c::Flag_CrazyReadyDrawOn); + UNSET_FLAG(mFlags, daCow_c::Flag_CrazyReadyDrawOn, u16); } if (GET_FLAG(daCow_c::Flag_CrazyGo)) { mCrazy = daCow_c::Crazy_Dash; @@ -1895,9 +1897,10 @@ void daCow_c::executeCrazyWait() { } void daCow_c::executeCrazyDash() { + cXyz pathPointPosition, vec2, vec3; mShouldSetEffect = 1; - cXyz pathPointPosition = dPath_GetPnt(mPath, mPointIndex)->m_position; - + pathPointPosition = dPath_GetPnt(mPath, mPointIndex)->m_position; + s16 sVar4, sVar5; setSeSnort(); setRushVibration(VIBMODE_S_POWER2); @@ -1911,29 +1914,27 @@ void daCow_c::executeCrazyDash() { if (GET_FLAG(daCow_c::Flag_CrazyBeforeCatch)) { initCrazyBeforeCatch(0); mPointIndex = 6; - CLEAR_FLAG(daCow_c::Flag_CrazyBeforeCatch); + UNSET_FLAG(mFlags, daCow_c::Flag_CrazyBeforeCatch, u16); } else if (GET_FLAG(daCow_c::Flag_CrazyCatch)) { initCrazyCatch(0); mPointIndex = 6; - CLEAR_FLAG(daCow_c::Flag_CrazyCatch); + UNSET_FLAG(mFlags, daCow_c::Flag_CrazyCatch, u16); dComIfGp_getVibration().StartShock(VIBMODE_S_POWER8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); } else if (GET_FLAG(daCow_c::Flag_CrazyDash)) { initCrazyAttack(0); mPointIndex = 6; - CLEAR_FLAG(daCow_c::Flag_CrazyDash); + UNSET_FLAG(mFlags, daCow_c::Flag_CrazyDash, u16); } } else { if (mPointIndex == 4) { - cXyz vec2 = dPath_GetPnt(mPath, mPointIndex - 1)->m_position; - s16 sVar4 = cLib_targetAngleY(&vec2, &pathPointPosition); + vec2 = dPath_GetPnt(mPath, mPointIndex - 1)->m_position; + sVar4 = cLib_targetAngleY(&vec2, &pathPointPosition); if (current.pos.abs(pathPointPosition) > 600.0f) { mExecute = daCow_c::Execute_0; - s16 sVar5 = - cLib_targetAngleY(&vec2, &daPy_getPlayerActorClass()->current.pos) - sVar4; + sVar5 = cLib_targetAngleY(&vec2, &daPy_getPlayerActorClass()->current.pos); - cXyz vec3; - if (sVar5 < 0) { + if ((s16)(sVar5 - sVar4) < 0) { vec3.set(200.0f, 0.0f, 0.0f); } else { vec3.set(-200.0f, 0.0f, 0.0f); @@ -1951,16 +1952,16 @@ void daCow_c::executeCrazyDash() { mTarget = pathPointPosition; } - s16 sVar4 = cLib_targetAngleY(¤t.pos, &mTarget); - cLib_addCalcAngleS(¤t.angle.y, sVar4, 0x10, 0x800, 0x100); + cLib_addCalcAngleS(¤t.angle.y, cLib_targetAngleY(¤t.pos, &mTarget), 0x10, + 0x800, 0x100); if (current.pos.abs(pathPointPosition) < 250.0f) { mPointIndex++; } } } else { - s16 sVar4 = cLib_targetAngleY(¤t.pos, &pathPointPosition); - cLib_addCalcAngleS(¤t.angle.y, sVar4, 0x10, 0x800, 0x100); + cLib_addCalcAngleS(¤t.angle.y, cLib_targetAngleY(¤t.pos, &pathPointPosition), + 0x10, 0x800, 0x100); if (current.pos.abs(pathPointPosition) < 200.0f) { mPointIndex++; if (mPointIndex >= mPath->m_num) { @@ -1979,7 +1980,8 @@ void daCow_c::executeCrazyDash() { mSavedAngle.y = shape_angle.y; } -void daCow_c::initCrazyBeforeCatch(int _unused) { +void daCow_c::initCrazyBeforeCatch(int arg) { + UNUSED(arg); mCrazy = daCow_c::Crazy_BeforeCatch; speedF = 0.0f; mJoint8Offset.z = 0; @@ -1991,7 +1993,7 @@ void daCow_c::executeCrazyBeforeCatch() { calcCatchPos(-220.0f, 1); if (GET_FLAG(daCow_c::Flag_CrazyCatch)) { initCrazyCatch(0); - CLEAR_FLAG(daCow_c::Flag_CrazyCatch); + UNSET_FLAG(mFlags, daCow_c::Flag_CrazyCatch, u16); dComIfGp_getVibration().StartShock(VIBMODE_S_POWER8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); } else if (GET_FLAG(daCow_c::Flag_CrazyDash)) { if (!daPy_getPlayerActorClass()->speedF) { @@ -1999,11 +2001,12 @@ void daCow_c::executeCrazyBeforeCatch() { } else { initCrazyAttack(1); } - CLEAR_FLAG(daCow_c::Flag_CrazyDash); + UNSET_FLAG(mFlags, daCow_c::Flag_CrazyDash, u16); } } -void daCow_c::initCrazyCatch(int _unused) { +void daCow_c::initCrazyCatch(int arg) { + UNUSED(arg); setBck(daCow_c::Animation_Shock, J3DFrameCtrl::EMode_NONE, 0.0f, 1.0f); mCrazy = daCow_c::Crazy_Catch; speedF = 0.0f; @@ -2092,9 +2095,7 @@ void daCow_c::initCrazyThrow(int nextAction) { mExecute = daCow_c::Execute_0; mJointIndex = 1; mCrazy = daCow_c::Crazy_Throw; - gravity = 0.0f; - speedF = 0.0f; - speed.y = 0.0f; + speed.y = speedF = gravity = 0.0f; for (int iSphere = 0; iSphere < N_COW_COLLIDERS; iSphere++) { mSph[iSphere].OffCoSetBit(); @@ -2108,6 +2109,7 @@ void daCow_c::initCrazyThrow(int nextAction) { } void daCow_c::executeCrazyThrow() { + cXyz a; dBgS_LinChk linChk; switch (mExecute) { @@ -2172,11 +2174,11 @@ void daCow_c::executeCrazyThrow() { if (mAction != daCow_c::Action_Wait) { setBck(daCow_c::Animation_DownR, J3DFrameCtrl::EMode_LOOP, 0.0f, 1.0f); - mSavedAngle.y -= 0x7000; + mSavedAngle.y -= (s16)0x7000; mThrowIntensity = -1000; } else { setBck(daCow_c::Animation_DownL, J3DFrameCtrl::EMode_LOOP, 0.0f, 1.0f); - mSavedAngle.y += 0x7000; + mSavedAngle.y += (s16)0x7000; mThrowIntensity = 1000; } } @@ -2248,7 +2250,7 @@ void daCow_c::executeCrazyAttack() { if (mPrm0 == 3) { initCrazyAway(0); } else { - setBck(daCow_c::Animation_ShakeA, J3DFrameCtrl::EMode_NONE, 7.0f, 1.0f); + setBck(daCow_c::Animation_ShakeA, J3DFrameCtrl::EMode_NONE, 7.0f + nREG_F(5), 1.0f); mAction = daCow_c::Action_Cry; } } @@ -2261,7 +2263,8 @@ void daCow_c::executeCrazyAttack() { } } -void daCow_c::initCrazyAway(int _unused) { +void daCow_c::initCrazyAway(int arg) { + UNUSED(arg); mCrazy = daCow_c::Crazy_Away; if (mPrm0 == 3) { setBck(daCow_c::Animation_Rush, J3DFrameCtrl::EMode_LOOP, 0.0f, 1.0f); @@ -2271,9 +2274,10 @@ void daCow_c::initCrazyAway(int _unused) { } void daCow_c::executeCrazyAway() { + cXyz pointPos; setSeSnort(); - if (current.pos.abs(daPy_getPlayerActorClass()->current.pos) < 2500.0f) { + if (current.pos.abs(daPy_getPlayerActorClass()->current.pos) < 2500.0f + nREG_F(0)) { setRushVibration(VIBMODE_S_POWER2); } @@ -2281,7 +2285,7 @@ void daCow_c::executeCrazyAway() { cLib_chaseF(&speedF, 30.0f, 2.0f); cLib_chaseS(&mJoint8Offset.z, 0x1000, 0x400); - cXyz pointPos = dPath_GetPnt(mPath, mPointIndex)->m_position; + pointPos = dPath_GetPnt(mPath, mPointIndex)->m_position; cLib_addCalcAngleS(¤t.angle.y, cLib_targetAngleY(¤t.pos, &pointPos), 0x10, 0x800, 0x100); @@ -2313,11 +2317,12 @@ void daCow_c::executeCrazyEnd() { mPath = dPath_GetRoomPath(COW_INDEX, fopAcM_GetRoomNo(this)); } -void daCow_c::initCrazyBack(int _unused) { +void daCow_c::initCrazyBack(int arg) { + UNUSED(arg); if (mPrm0 == 3) { setBck(daCow_c::Animation_WalkDejected, J3DFrameCtrl::EMode_LOOP, 10.0f, 1.0f); u8 pathIndex = COW_INDEX; - if (COW_INDEX != (u8)-1) { + if (pathIndex != (u8)-1) { mPath = dPath_GetRoomPath(pathIndex, fopAcM_GetRoomNo(this)); mPointIndex = 3; } @@ -2350,7 +2355,7 @@ void daCow_c::executeCrazyBack() { setBodyAngle(angle); if (current.pos.abs(pointPos) < 300.0f) { - mPointIndex -= 1; + mPointIndex -= (s8)1; if (mPointIndex < 0) { speedF = 0.0f; mAction = daCow_c::Action_3; @@ -2426,7 +2431,7 @@ void daCow_c::executeCrazyBack() { calcRunAnime(false); if (current.pos.abs(pointPos) < 300.0f) { - mPointIndex -= 1; + mPointIndex -= (s8)1; if (mPointIndex < 1 && !mTimer1) { setBck(daCow_c::Animation_WalkDejected, J3DFrameCtrl::EMode_LOOP, 10.0f, 1.0f); mAction = daCow_c::Action_Wait; @@ -2439,7 +2444,6 @@ void daCow_c::executeCrazyBack() { void daCow_c::action_crazy() { cXyz acStack_28; - s16 angle; switch (mMode) { case daCow_c::Mode_0: @@ -2450,10 +2454,8 @@ void daCow_c::action_crazy() { mPointIndex++; acStack_28 = dPath_GetPnt(mPath, mPointIndex)->m_position; - angle = cLib_targetAngleY(¤t.pos, &acStack_28); - current.angle.y = angle; - shape_angle.y = angle; - mSavedAngle.y = angle; + mSavedAngle.y = shape_angle.y = current.angle.y = + cLib_targetAngleY(¤t.pos, &acStack_28); mCrazy = daCow_c::Crazy_Wait; speedF = 0.0f; @@ -2516,9 +2518,7 @@ void daCow_c::action_crazy() { dComIfGoat_SetThrow(0); mDrawOff = false; mTargetRedTev = 0; - mJoint8Offset.z = 0; - mJoint1Offset.y = 0; - mJoint8Offset.y = 0; + mJoint8Offset.y = mJoint1Offset.y = mJoint8Offset.z = 0; } } @@ -2540,6 +2540,7 @@ void daCow_c::executeCrazyBack2() { return; } + s16 targetAngle; switch (mAction) { case daCow_c::Action_Wait: setBck(daCow_c::Animation_WalkDejected, J3DFrameCtrl::EMode_LOOP, 10.0f, 1.0f); @@ -2547,7 +2548,7 @@ void daCow_c::executeCrazyBack2() { mTimer1 = 600; case daCow_c::Action_NadeNade: { setActetcStatus(); - s16 targetAngle = cLib_targetAngleY(¤t.pos, &home.pos); + targetAngle = cLib_targetAngleY(¤t.pos, &home.pos); cLib_addCalcAngleS(¤t.angle.y, targetAngle, 0x10, 0x100, 0x80); cLib_chaseF(&speedF, 2.0f, 1.0f); cLib_addCalcAngleS(&shape_angle.y, current.angle.y, 8, 0x100, 0x800); @@ -2610,8 +2611,7 @@ void daCow_c::action_thrown() { executeCrazyAttack(); break; case 6: - player = daPy_getPlayerActorClass(); - if (checkOutOfGate(player->current.pos) || checkOutOfGate(current.pos)) { + if (checkOutOfGate( daPy_getPlayerActorClass()->current.pos) || checkOutOfGate(current.pos)) { setProcess(&daCow_c::action_run, false); mWillGetAngry = true; return; @@ -2635,9 +2635,7 @@ void daCow_c::action_thrown() { } break; case daCow_c::Mode_3: - mJoint8Offset.z = 0; - mJoint1Offset.y = 0; - mJoint8Offset.y = 0; + mJoint8Offset.y = mJoint1Offset.y = mJoint8Offset.z = 0; dComIfGoat_SetThrow(0); } } @@ -2683,7 +2681,9 @@ void daCow_c::action_wolf() { cXyz aruPos = aru->current.pos; s16 aruAngle = cLib_targetAngleY(¤t.pos, &aru->current.pos); - + s16 sp14; + s16 ang2; + switch (mMode) { case daCow_c::Mode_0: mMode = daCow_c::Mode_1; @@ -2692,8 +2692,10 @@ void daCow_c::action_wolf() { attention_info.flags |= fopAc_AttnFlag_LOCK_e; mSound.startCreatureVoice(Z2SE_GOAT_V_ANGRY, -1); mTimer10 = cM_rndF(90.0f) + 90.0f; + break; case daCow_c::Mode_1: + sp14 = 0; TICK_TIMER(mTimer1); TICK_TIMER(mTimer10); @@ -2706,7 +2708,7 @@ void daCow_c::action_wolf() { switch (mCrazy) { case daCow_c::Crazy_Wait: - cLib_chaseF(&speedF, 36.0f, 1.0f); + cLib_chaseF(&speedF, 36.0f + nREG_F(0), 1.0f); cLib_addCalcAngleS2(¤t.angle.y, aruAngle, 8, 0x400); mSavedAngle.y = shape_angle.y = current.angle.y; setBodyAngle2(aruAngle); @@ -2717,14 +2719,14 @@ void daCow_c::action_wolf() { break; case daCow_c::Crazy_Dash: if (cM_rnd() < 0.5f) { - aruAngle = aruAngle + 0x3000; + ang2 = aruAngle + 0x3000; } else { - aruAngle = aruAngle - 0x3000; + ang2 = aruAngle - 0x3000; } mTarget = aruPos; - mTarget.x += cM_ssin(aruAngle) * 500.0f; - mTarget.z += cM_scos(aruAngle) * 500.0f; + mTarget.x += cM_ssin(ang2) * 500.0f; + mTarget.z += cM_scos(ang2) * 500.0f; mTargetAngle = cLib_targetAngleY(¤t.pos, &mTarget); mCrazy = daCow_c::Crazy_BeforeCatch; mTimer1 = 150; @@ -2732,8 +2734,8 @@ void daCow_c::action_wolf() { mTargetAngle = cLib_targetAngleY(¤t.pos, &mTarget); f32 fVar13 = current.pos.absXZ(aru->current.pos) / 100.0f; - if (fVar13 < 7.0f) { - fVar13 = 7.0f; + if (fVar13 < 7.0f + nREG_F(10)) { + fVar13 = 7.0f + nREG_F(10); } cLib_chaseF(&speedF, fVar13, 1.0f); @@ -2760,7 +2762,7 @@ void daCow_c::action_wolf() { mTimer10 = cM_rndF(90.0f) + 150.0f; if (!checkOutOfGate(player->current.pos)) { m_angry_cow = false; - if (!fpcEx_Search(s_angry_cow2, this)) { + if (!fpcM_Search(s_angry_cow2, this)) { s16 angleDifference = fopAcM_searchPlayerAngleY(this) - mSavedAngle.y; if (abs(angleDifference) < 0x2000) { mReadyToDash = false; @@ -2773,27 +2775,24 @@ void daCow_c::action_wolf() { } } break; } - cLib_chaseS(&mJoint8Offset.z, 0, 0x400); + cLib_chaseS(&mJoint8Offset.z, sp14, 0x400); break; case daCow_c::Mode_2: break; case daCow_c::Mode_3: - mTimer10 = 0; - mForgetCowPTimer = 0; - mTimer1 = 0; + mTimer1 = mForgetCowPTimer = mTimer10 = 0; mTargetRedTev = 0.0f; - mJoint8Offset.z = 0; - mJoint1Offset.y = 0; - mJoint8Offset.y = 0; + mJoint8Offset.y = mJoint1Offset.y = mJoint8Offset.z = 0; attention_info.flags &= ~fopAc_AttnFlag_LOCK_e; - + int unused; for (int iWolfBuster = 0; iWolfBuster < N_WOLF_BUSTERS; iWolfBuster++) { if (gWolfBustersID[iWolfBuster] == fopAcM_GetID(this)) { gWolfBustersID[iWolfBuster] = -1; break; } } + break; } } @@ -2807,6 +2806,7 @@ void daCow_c::action_damage() { mChangeRedTev = 0; speedF = 0.0f; break; + case daCow_c::Mode_1: setRedTev(); if (mpMorf->isStop()) { @@ -2814,9 +2814,14 @@ void daCow_c::action_damage() { mRunDuration = 1; setProcess(&daCow_c::action_angry, false); } - break; + // fallthrough + case daCow_c::Mode_2: + (void)0; +#if !PLATFORM_SHIELD return; +#endif + case daCow_c::Mode_3: break; } @@ -2825,8 +2830,7 @@ void daCow_c::action_damage() { void daCow_c::action() { if (fopAcM_checkCarryNow(this)) { fopAcM_cancelCarryNow(this); - speedF = 0.0f; - speed.y = 0.0f; + speed.y = speedF = 0.0f; } TICK_TIMER(mNoNearCheckTimer); TICK_TIMER(mTakenDamageCounter); @@ -2835,7 +2839,7 @@ void daCow_c::action() { cLib_chaseF(&mRedTev, mTargetRedTev, 0.1f); damage_check(); s16 sVar2 = mSavedAngle.y; - if (!getCowIn()) { + if (!mCowIn) { for (int iSphere = 0; iSphere < N_COW_COLLIDERS; iSphere++) { mSph[iSphere].OnTgSetBit(); } @@ -2863,23 +2867,24 @@ void daCow_c::setMtx() { } void daCow_c::setAttnPos() { + if (mpMorf == NULL) { + return; + } + cXyz arg; cXyz pos; - - if (mpMorf) { - if (attention_info.flags & fopAc_AttnFlag_ETC_e) { - arg.set(0.0f, 0.0f, 0.0f); - mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(11)); - mDoMtx_stack_c::multVec(&arg, &eyePos); - pos = eyePos; - attention_info.position.set(pos.x, pos.y + 30.0f, pos.z); - } else { - arg.set(18.0f, 30.0f, 0.0f); - mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(9)); - mDoMtx_stack_c::multVec(&arg, &eyePos); - pos = eyePos; - attention_info.position.set(pos.x, pos.y + 80.0f, pos.z); - } + if (attention_info.flags & fopAc_AttnFlag_ETC_e) { + arg.set(0.0f, 0.0f, 0.0f); + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(11)); + mDoMtx_stack_c::multVec(&arg, &eyePos); + pos = eyePos; + attention_info.position.set(pos.x, pos.y + 30.0f, pos.z); + } else { + arg.set(18.0f, 30.0f, 0.0f); + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(9)); + mDoMtx_stack_c::multVec(&arg, &eyePos); + pos = eyePos; + attention_info.position.set(pos.x, pos.y + 80.0f, pos.z); } } @@ -2889,33 +2894,34 @@ void daCow_c::setCollisions() { J3DModel* pJVar1; Mtx* pMVar2; cCcS* pcVar3; - cXyz acStack_28[2]; - if (!mDrawOff) { - static cXyz headOfst(20.0f, 10.0f, 0.0f); - static cXyz backBornOfst(60.0f, 20.0f, 0.0f); - static cXyz waistOfst(-30.0f, 30.0f, 0.0f); - - cXyz ofstNow; - - mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(9)); - mDoMtx_stack_c::multVec(&headOfst, &ofstNow); - mSph[0].SetR(40.0f); - mSph[0].SetC(ofstNow); - dComIfG_Ccsp()->Set(&mSph[0]); - - mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(1)); - mDoMtx_stack_c::multVec(&backBornOfst, &ofstNow); - mSph[1].SetR(45.0f); - mSph[1].SetC(ofstNow); - dComIfG_Ccsp()->Set(&mSph[1]); - - mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(0xb)); - mDoMtx_stack_c::multVec(&waistOfst, &ofstNow); - mSph[2].SetR(45.0f); - mSph[2].SetC(ofstNow); - dComIfG_Ccsp()->Set(&mSph[2]); + if (mDrawOff) { + return; } + + static cXyz headOfst(20.0f, 10.0f, 0.0f); + static cXyz backBornOfst(60.0f, 20.0f, 0.0f); + static cXyz waistOfst(-30.0f, 30.0f, 0.0f); + + cXyz ofstNow; + + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(9)); + mDoMtx_stack_c::multVec(&headOfst, &ofstNow); + mSph[0].SetR(40.0f); + mSph[0].SetC(ofstNow); + dComIfG_Ccsp()->Set(&mSph[0]); + + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(1)); + mDoMtx_stack_c::multVec(&backBornOfst, &ofstNow); + mSph[1].SetR(45.0f); + mSph[1].SetC(ofstNow); + dComIfG_Ccsp()->Set(&mSph[1]); + + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(0xb)); + mDoMtx_stack_c::multVec(&waistOfst, &ofstNow); + mSph[2].SetR(45.0f); + mSph[2].SetC(ofstNow); + dComIfG_Ccsp()->Set(&mSph[2]); } int daCow_c::Execute() { @@ -2963,12 +2969,13 @@ static int daCow_Execute(void* actor) { } int daCow_c::CreateHeap() { - J3DModelData* modelData = static_cast(dComIfG_getObjectRes("Cow", 0x1f)); + J3DModelData* modelData = NULL; + modelData = static_cast(dComIfG_getObjectRes("Cow", 0x1f)); - JUT_ASSERT(3826, modelData); - - mpMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mSound, 0x80000, - 0x11020084); + JUT_ASSERT(3826, NULL != modelData); + int r24 = 0x11020084; + mpMorf = + new mDoExt_McaMorfSO(modelData, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mSound, 0x80000, r24); if (!mpMorf || !mpMorf->getModel()) { return cPhs_INIT_e; @@ -2989,28 +2996,30 @@ int daCow_c::CreateHeap() { return cPhs_ERROR_e; } - J3DAnmTexPattern* pattern = static_cast(dComIfG_getObjectRes("Cow", 0x22)); - modelData = mpMorf->getModel()->getModelData(); - if (mpBtp->init(modelData, pattern, 1, 0, 1.0f, 0, -1)) { - return cPhs_LOADING_e; - } else { + if (!mpBtp->init(mpMorf->getModel()->getModelData(), + static_cast(dComIfG_getObjectRes("Cow", 0x22)), 1, 0, 1.0f, + 0, -1)) + { return cPhs_ERROR_e; + } else { + return cPhs_LOADING_e; } } int daCow_c::createHeapCallBack(fopAc_ac_c* actor) { - return static_cast(actor)->CreateHeap(); + daCow_c* cow = static_cast(actor); + return cow->CreateHeap(); } -u8 daCow_c::initialize() { +bool daCow_c::initialize() { fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx()); mSound.init(¤t.pos, &eyePos, 3, 1); eventInfo.setArchiveName("Cow"); mAcchCir.SetWall(100.0f, 110.0f); - mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, &speed, - fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, + fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mCcStts.Init(220, 0, this); @@ -3026,9 +3035,9 @@ u8 daCow_c::initialize() { mGroundHeight = mAcch.GetGroundH(); - attention_info.distances[4] = 40; - attention_info.distances[0] = 22; - attention_info.distances[7] = 48; + attention_info.distances[fopAc_attn_CARRY_e] = 40; + attention_info.distances[fopAc_attn_LOCK_e] = 22; + attention_info.distances[fopAc_attn_ETC_e] = 48; attention_info.flags = 0; mParticle.init(&mAcch, 60.0f, 200.0f); current.angle.set(0, home.angle.y, 0); @@ -3040,25 +3049,25 @@ u8 daCow_c::initialize() { mPrm0 = 4; setCowInCage(); } - + + u8 prm1; switch (mPrm0) { case 3: { - u8 prm1 = COW_INDEX; + prm1 = COW_INDEX; if (prm1 != (u8)-1) { mPath = dPath_GetRoomPath(prm1, fopAcM_GetRoomNo(this)); mPointIndex = 0; - dPnt* point = dPath_GetPnt(mPath, mPointIndex); - current.pos = point->m_position; + current.pos = dPath_GetPnt(mPath, mPointIndex)->m_position; setProcess(&daCow_c::action_crazy, false); } } break; case 4: mCowIn = 1; + // fallthrough default: - int rand = cM_rndF(4.0f) + fopAcM_GetID(this); - int nextAction = rand % 4; + int nextAction = (int)(cM_rndF(4.0f) + fopAcM_GetID(this)) % 4; if (nextAction == 1) { setProcess(&daCow_c::action_shake, false); } else if (nextAction == 2) { @@ -3082,7 +3091,7 @@ u8 daCow_c::initialize() { iSpeed = 1; } } else { - if (rand >= 0.9f && !cLib_checkBit(l_CowType, 2)) { + if (rand >= 0.9f && !(l_CowType & 2)) { l_CowType |= 2; iSpeed = 2; } @@ -3121,6 +3130,7 @@ int daCow_c::create() { mPrm0 = 0; } + int res; switch (mPrm0) { case 2: setEnterCow20(); @@ -3131,7 +3141,7 @@ int daCow_c::create() { mDrawOff = true; return cPhs_ERROR_e; default: - int res = dComIfG_resLoad(&mPhase, "Cow"); + res = dComIfG_resLoad(&mPhase, "Cow"); if (res == cPhs_COMPLEATE_e) { if (!fopAcM_entrySolidHeap(this, daCow_c::createHeapCallBack, 0x1df0)) { return cPhs_ERROR_e; @@ -3140,8 +3150,8 @@ int daCow_c::create() { return cPhs_ERROR_e; } } - return res; } + return res; } static int daCow_Create(void* actor) { @@ -3149,7 +3159,9 @@ static int daCow_Create(void* actor) { } int daCow_c::ctrlJoint(J3DJoint* joint, J3DModel* model) { - int jointNo = joint->getJntNo(); + J3DJoint *_joint = joint; + int jointNo = _joint->getJntNo(); + cXyz currentMtx, currentOffset; mDoMtx_stack_c::copy(model->getAnmMtx(jointNo)); @@ -3166,7 +3178,6 @@ int daCow_c::ctrlJoint(J3DJoint* joint, J3DModel* model) { model->setAnmMtx(jointNo, mDoMtx_stack_c::get()); cMtx_copy(mDoMtx_stack_c::get(), &J3DSys::mCurrentMtx[0]); - cXyz currentMtx; if (!jointNo) { switch (mJointIndex) { @@ -3178,7 +3189,7 @@ int daCow_c::ctrlJoint(J3DJoint* joint, J3DModel* model) { currentMtx.set(J3DSys::mCurrentMtx[0][3], J3DSys::mCurrentMtx[1][3], J3DSys::mCurrentMtx[2][3]); - cXyz currentOffset = mJointPos - current.pos; + currentOffset = mJointPos - current.pos; currentMtx = mJointPos - currentMtx; current.pos -= currentMtx; mJointPos = currentOffset; @@ -3254,7 +3265,7 @@ static int daCow_Draw(void* actor) { } int daCow_c::Delete() { - fopAcM_GetID(this); + fpc_ProcID id = fopAcM_GetID(this); dComIfG_resDelete(&mPhase, "Cow"); if (heap != NULL) { diff --git a/src/d/actor/d_a_cstatue.cpp b/src/d/actor/d_a_cstatue.cpp index 727d2fb833..e055ec0c37 100644 --- a/src/d/actor/d_a_cstatue.cpp +++ b/src/d/actor/d_a_cstatue.cpp @@ -1043,7 +1043,7 @@ void daCstatue_c::initStartBrkBtk() { for (int iParticle = 0; iParticle < 2; iParticle++) { dComIfGp_particle_set(0x88bb, &mBallPos, &angle, NULL); dComIfGp_particle_set(0x88bc, &mBallPos, &angle, NULL); - ADD_ANGLE(angle.y, 0x8000); + ADD_ANGLE_2(angle.y, 0x8000); } } diff --git a/src/d/actor/d_a_demo00.cpp b/src/d/actor/d_a_demo00.cpp index e3e56e9d66..a5a071d17c 100644 --- a/src/d/actor/d_a_demo00.cpp +++ b/src/d/actor/d_a_demo00.cpp @@ -1174,14 +1174,15 @@ inline int daDemo00_c::execute() { if (field_0x6ae != 0) { f32 cutoff = 90.0f; - cutoff = shape_angle.z / 182.04445f; + // converting from short to degrees + cutoff = shape_angle.z / DEG2S_CONSTANT; GXColor color; color.r = scale.x; color.g = scale.y; color.b = scale.z; color.a = 0xFF; - f32 f30 = shape_angle.x / 182.04445f; - f32 f29 = shape_angle.y / 182.04445f; + f32 f30 = shape_angle.x / DEG2S_CONSTANT; + f32 f29 = shape_angle.y / DEG2S_CONSTANT; dKy_BossSpotLight_set(¤t.pos, f30, f29 - 90.0f, cutoff, &color, gravity, field_0x6b0, field_0x6af); } diff --git a/src/d/actor/d_a_e_dk.cpp b/src/d/actor/d_a_e_dk.cpp index b8f5114d6d..e97bc0672a 100644 --- a/src/d/actor/d_a_e_dk.cpp +++ b/src/d/actor/d_a_e_dk.cpp @@ -9,7 +9,7 @@ #include "d/actor/d_a_player.h" #include "d/d_com_inf_game.h" #include "d/d_s_play.h" -#include +#include #define ACTION_MODE_WAIT 0 #define ACTION_MODE_CHASE 1 diff --git a/src/d/actor/d_a_e_hzelda.cpp b/src/d/actor/d_a_e_hzelda.cpp index 6402b7f5ef..1630397e1a 100644 --- a/src/d/actor/d_a_e_hzelda.cpp +++ b/src/d/actor/d_a_e_hzelda.cpp @@ -1232,7 +1232,7 @@ static int daE_HZELDA_Execute(e_hzelda_class* i_this) { sp108.z = player->current.pos.z - i_this->mTrianglePos.z; cMtx_YrotS(*calc_mtx, -i_this->mTriangleRotY); MtxPosition(&sp108, &sp114); - + // 57.295 is close to 180 / PI, but not quite, probably a hand written constant f32 var_f31 = fabsf(57.295f * cM_atan2f(sp114.x, sp114.z)); if (var_f31 >= 60.0f && var_f31 <= 120.0f) { var_f31 = 120.0f - var_f31; diff --git a/src/d/actor/d_a_e_rd.cpp b/src/d/actor/d_a_e_rd.cpp index 89904ae397..41746956c3 100644 --- a/src/d/actor/d_a_e_rd.cpp +++ b/src/d/actor/d_a_e_rd.cpp @@ -36,7 +36,7 @@ public: /* ライダー (Rider) */ /* 0x08 */ f32 model_size; // 基本サイズ (Basic size) - /* 0x0C */ f32 field_0xc; // リーダーサイズ比 (Leader size ratio) + /* 0x0C */ f32 leader_size_ratio; // リーダーサイズ比 (Leader size ratio) /* 0x10 */ f32 movement_speed; // 移動速度 (Movement speed) /* こん棒兵の場合 (In the case of the club soldier) */ @@ -46,8 +46,7 @@ public: /* 0x20 */ f32 swing_speed; // 振り速さ (Swing speed) /* 矢兵の場合 (In the case of arrow soldiers) */ - /* 0x24 */ s16 field_0x24; // 号令→構えの間 (Command → Preparation) - /* 0x26 */ u8 padding[2]; + /* 0x24 */ s16 command_to_ready_stance; // 号令→構えの間 (Command → Preparation) /* 0x28 */ f32 attack_range; // 攻撃範囲 (Attack range) /* 0x2C */ f32 mounted_launch_distance; // 騎乗発射距離 (Mounted launch distance) /* 0x30 */ f32 wolf_falling_power_y; // 狼倒れ力Y (Wolf falling power Y) @@ -60,7 +59,7 @@ public: /* 0x3C */ f32 field_0x3c; // 一騎(ダ)サイズ (One-man army (Da) size) /* 0x40 */ f32 jump_g; // 飛びG (Jump G) /* 0x44 */ f32 jump_z; // 飛びZ (Jump Z) - /* 0x48 */ f32 field_0x48; // 飛びZ(騎乗停止) (Jump Z (Stop riding)) + /* 0x48 */ f32 jump_z_suspended; // 飛びZ(騎乗停止) (Jump Z (Stop riding)) /* 0x4C */ f32 jump_y; // 飛びY (Jump Y) }; @@ -207,13 +206,13 @@ enum Joint { daE_RD_HIO_c::daE_RD_HIO_c() { field_0x4 = -1; model_size = 1.2f; - field_0xc = 1.2f; + leader_size_ratio = 1.2f; movement_speed = 3.5f; dash_speed = 14.0f; battle_init_range = 250.0f; attack_init_range = 300.0f; swing_speed = 1.1f; - field_0x24 = 60; + command_to_ready_stance = 60; attack_range = 1300.0f; mounted_launch_distance = 2000.0f; wolf_falling_power_y = 3.0f; @@ -223,30 +222,84 @@ daE_RD_HIO_c::daE_RD_HIO_c() { eye_polygon = 1; one_hit_kill = 0; field_0x3c = 75.0f; - field_0x48 = 5.0f; + jump_z_suspended = 5.0f; jump_z = 10.0f; jump_y = 33.0f; jump_g = 5.0f; } +#if DEBUG +void daE_RD_HIO_c::genMessage(JORMContext* ctext) { + // Rider (a.k.a. Bulblins) + ctext->genLabel(" ライダー", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // basic size + ctext->genSlider("基本サイズ", &model_size, 0.0f, 5.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // leader size ratio + ctext->genSlider("リーダーサイズ比", &leader_size_ratio, 0.0f, 2.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // movement speed + ctext->genSlider("移動速度", &movement_speed, 0.0f, 20.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // ~~ In the case of a club-wielding soldier ~~ + ctext->genLabel(" ~~ こん棒兵の場合 ~~", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // speed rush + ctext->genSlider("突進速度", &dash_speed, 0.0f, 40.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // combat start range + ctext->genSlider("戦闘開始範囲", &battle_init_range, 0.0f, 2000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // attack range + ctext->genSlider("攻撃開始範囲", &attack_init_range, 0.0f, 1000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // swing speed + ctext->genSlider("振り速さ", &swing_speed, 0.0f, 3.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genLabel(" ", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // ~~ In the case of archers ~~ + ctext->genLabel(" ~~ 矢兵の場合 ~~", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // Command → Ready stance + ctext->genSlider("号令→構えの間", &command_to_ready_stance, 0, 200, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // attack range + ctext->genSlider("攻撃範囲", &attack_range, 0.0f, 2000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // riding firing distance + ctext->genSlider("騎乗発射距離", &mounted_launch_distance, 0.0f, 3000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // wolf takedown power Y + ctext->genSlider("狼倒れ力Y", &wolf_falling_power_y, 0.0f, 50.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // wolf takedown power Z + ctext->genSlider("狼倒れ力Z", &wolf_falling_power_z, 0.0f, 50.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // flying Z (Rider suspended) + ctext->genSlider("飛びZ(騎乗停止)", &jump_z_suspended, 0.0f, 50.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // flying Z + ctext->genSlider("飛びZ", &jump_z, 0.0f, 50.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // flying y + ctext->genSlider("飛びY", &jump_y, 0.0f, 50.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // jump g + ctext->genSlider("飛びG", &jump_g, 0.0f, 20.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // invincible + ctext->genCheckBox("不死身", &invulnerable, 1, 0, NULL, -1, -1, 0x200, 0x18); + // eye polygons + ctext->genCheckBox("目ポリゴン", &eye_polygon, 1, 0, NULL, -1, -1, 0x200, 0x18); + // one-hit kill + ctext->genCheckBox("一撃必殺", &one_hit_kill, 1, 0, NULL, -1, -1, 0x200, 0x18); + // ikki (da) size + ctext->genSlider("一騎(ダ)サイズ", &field_0x3c, 0.0f, 150.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); +} +#endif + static fopAc_ac_c* get_pla(fopAc_ac_c* a_this) { fopAc_ac_c* player = dComIfGp_getPlayer(0); + // "coach" refers to the Ilia/Telma transport wagon: fopAc_ac_c* actor = fopAcM_SearchByName(PROC_NPC_COACH); if (actor == NULL) { return dComIfGp_getPlayer(0); } - f32 fVar1, fVar2, fVar3, fVar4; - fVar1 = player->current.pos.x - a_this->current.pos.x; - fVar3 = player->current.pos.z - a_this->current.pos.z; - fVar2 = actor->current.pos.x - a_this->current.pos.x; - fVar4 = actor->current.pos.z - a_this->current.pos.z; - if (fVar1 * fVar1 + fVar3 * fVar3 > fVar2 * fVar2 + fVar4 * fVar4) { + + f32 link_rd_x_diff, coach_rd_x_diff, link_rd_z_diff, coach_rd_z_diff; + link_rd_x_diff = player->current.pos.x - a_this->current.pos.x; + link_rd_z_diff = player->current.pos.z - a_this->current.pos.z; + coach_rd_x_diff = actor->current.pos.x - a_this->current.pos.x; + coach_rd_z_diff = actor->current.pos.z - a_this->current.pos.z; + // If the XZ-dist of Link is further than the coach, then focus the coach. + if (SQUARE(link_rd_x_diff) + SQUARE(link_rd_z_diff) > SQUARE(coach_rd_x_diff) + SQUARE(coach_rd_z_diff)) { return actor; } return dComIfGp_getPlayer(0); - } static void anm_init(e_rd_class* i_this, int i_anmID, f32 i_morf, u8 i_mode, f32 i_speed) { @@ -278,22 +331,24 @@ static void horn_anm_init(e_rd_class* i_this, int i_anmID, f32 i_morf, u8 i_mode static int nodeCallBack(J3DJoint* i_joint, int param_2) { if (param_2 == 0) { - int jointNo = i_joint->getJntNo(); + J3DJoint* my_joint = i_joint; + int jointNo = my_joint->getJntNo(); J3DModel* model = j3dSys.getModel(); e_rd_class* i_this = (e_rd_class*)model->getUserArea(); + fopEn_enemy_c* a_this = &i_this->actor; if (i_this != NULL) { MTXCopy(model->getAnmMtx(jointNo), *calc_mtx); if (jointNo == JNT_KOSI) { if (i_this->field_0x9c8 == 3) { - cMtx_YrotM(*calc_mtx, i_this->field_0x9ca); + cMtx_YrotM(*calc_mtx, s16(i_this->field_0x9ca)); } } else if (jointNo == JNT_HIP1) { if (i_this->field_0x9c8 == 3) { cMtx_XrotM(*calc_mtx, i_this->field_0x9ca); } - cMtx_YrotM(*calc_mtx, i_this->field_0xae0); - cMtx_ZrotM(*calc_mtx, i_this->field_0xabc[2] + (i_this->field_0xade - i_this->field_0xa32[2].x)); + cMtx_YrotM(*calc_mtx, s16(i_this->field_0xade.y)); + cMtx_ZrotM(*calc_mtx, -i_this->field_0xa32[2].x + i_this->field_0xade.x + i_this->field_0xabc[2]); } else if (jointNo == JNT_KOKAL) { cMtx_YrotM(*calc_mtx, i_this->field_0xaca); } else if (jointNo == JNT_SUNEL1) { @@ -304,7 +359,6 @@ static int nodeCallBack(J3DJoint* i_joint, int param_2) { cMtx_ZrotM(*calc_mtx, i_this->field_0xacc[2]); } else if (jointNo == JNT_MUNE2) { cMtx_YrotM(*calc_mtx, i_this->field_0xa32[1].y); - if (i_this->field_0x9c8 == 3) { cMtx_XrotM(*calc_mtx, i_this->field_0x9ca); } @@ -323,15 +377,15 @@ static int nodeCallBack(J3DJoint* i_joint, int param_2) { } } else if (jointNo == JNT_HEAD) { if (i_this->field_0x9c8 != 3 && i_this->field_0x9c8 != 4) { - cMtx_YrotM(*calc_mtx, (i_this->field_0x9ce - i_this->field_0x9ca) / 2); - cMtx_ZrotM(*calc_mtx, (i_this->field_0xabc[0] + (i_this->field_0xa32[0].x - i_this->field_0x9cc)) / 2); + cMtx_YrotM(*calc_mtx, (-i_this->field_0x9ca + i_this->field_0x9ce) / 2); + cMtx_ZrotM(*calc_mtx, (-i_this->field_0x9cc + i_this->field_0xa32[0].x + i_this->field_0xabc[0]) / 2); } } else if (jointNo == JNT_KUBI) { cMtx_YrotM(*calc_mtx, i_this->field_0xa32[0].y); if (i_this->field_0x9c8 != 3 && i_this->field_0x9c8 != 4) { - cMtx_YrotM(*calc_mtx, (i_this->field_0x9ce - i_this->field_0x9ca) / 2); - cMtx_ZrotM(*calc_mtx, (i_this->field_0xabc[0] + (i_this->field_0xa32[0].x - i_this->field_0x9cc)) / 2); + cMtx_YrotM(*calc_mtx, (-i_this->field_0x9ca + i_this->field_0x9ce) / 2); + cMtx_ZrotM(*calc_mtx, (-i_this->field_0x9cc + i_this->field_0xa32[0].x + i_this->field_0xabc[0]) / 2); } else { cMtx_ZrotM(*calc_mtx, i_this->field_0xa32[0].x + i_this->field_0xabc[0]); } @@ -365,9 +419,11 @@ static int nodeCallBack(J3DJoint* i_joint, int param_2) { static int nodeCallBack_B(J3DJoint* i_joint, int param_2) { if (param_2 == 0) { - int jointNo = i_joint->getJntNo(); + J3DJoint* my_joint = i_joint; + int jointNo = my_joint->getJntNo(); J3DModel* model = j3dSys.getModel(); e_rd_class* i_this = (e_rd_class*)model->getUserArea(); + fopEn_enemy_c* a_this = &i_this->actor; if (i_this != NULL) { MTXCopy(model->getAnmMtx(jointNo), *calc_mtx); @@ -387,10 +443,11 @@ static int nodeCallBack_B(J3DJoint* i_joint, int param_2) { static int nodeCallBack_bow(J3DJoint* i_joint, int param_2) { if (param_2 == 0) { - int jointNo = i_joint->getJntNo(); + J3DJoint* my_joint = i_joint; + int jointNo = my_joint->getJntNo(); J3DModel* model = j3dSys.getModel(); e_rd_class* i_this = (e_rd_class*)model->getUserArea(); - + fopEn_enemy_c* a_this = &i_this->actor; if (i_this != NULL && i_this->field_0x9a8 != 0) { MTXCopy(model->getAnmMtx(jointNo), *calc_mtx); cMtx_ZrotM(*calc_mtx, i_this->field_0x9a8); @@ -405,11 +462,10 @@ static int nodeCallBack_bow(J3DJoint* i_joint, int param_2) { static int daE_RD_Draw(e_rd_class* i_this) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; J3DModel* model; - J3DModelData* modelData; J3DMaterial* matNode_p; + J3DModelData* model_data; i_this->field_0x5bb = 0; - if (i_this->field_0xafb != 0) { return 1; } @@ -419,19 +475,17 @@ static int daE_RD_Draw(e_rd_class* i_this) { g_env_light.setLightTevColorType_MAJI(model, &a_this->tevStr); if (i_this->mBossMode == 0 && i_this->field_0x968 != 0) { - modelData = model->getModelData(); - for (u16 i = 0; i < modelData->getMaterialNum(); i++) { - matNode_p = modelData->getMaterialNodePointer(i); - matNode_p->getTevColor(0)->r = i_this->field_0x96c; - matNode_p->getTevColor(0)->g = i_this->field_0x96c; - matNode_p->getTevColor(0)->b = i_this->field_0x96c; + model_data = model->getModelData(); + for (u16 i = 0; i < model_data->getMaterialNum(); i++) { + J3DMaterial* mat_node_p = model_data->getMaterialNodePointer(i); + mat_node_p->getTevColor(0)->r = i_this->field_0x96c; + mat_node_p->getTevColor(0)->g = i_this->field_0x96c; + mat_node_p->getTevColor(0)->b = i_this->field_0x96c; } } if (i_this->mBossMode == 3) { - modelData = model->getModelData(); - matNode_p = modelData->getMaterialNodePointer(3); - J3DShape* shape = matNode_p->getShape(); + J3DShape* shape = model->getModelData()->getMaterialNodePointer(3)->getShape(); if (shape != NULL) { shape->hide(); } @@ -440,7 +494,7 @@ static int daE_RD_Draw(e_rd_class* i_this) { i_this->mpModelMorf->entryDL(); if (i_this->mBossMode == 0 && i_this->field_0x968 != 0) { - modelData = model->getModelData(); + J3DModelData* modelData = model->getModelData(); for (u16 i = 0; i < modelData->getMaterialNum(); i++) { matNode_p = modelData->getMaterialNodePointer(i); matNode_p->getTevColor(0)->r = 0; @@ -479,10 +533,9 @@ static int daE_RD_Draw(e_rd_class* i_this) { if (i_this->field_0x1297 != 0) { for (int i = 0; i < 2; i++) { g_env_light.setLightTevColorType_MAJI(i_this->mpEyeModels[i], &a_this->tevStr); - - modelData = i_this->mpEyeModels[i]->getModelData(); - for (u16 j = 0; j < modelData->getMaterialNum(); j++) { - matNode_p = modelData->getMaterialNodePointer(j); + model_data = i_this->mpEyeModels[i]->getModelData(); + for (u16 j = 0; j < model_data->getMaterialNum(); j++) { + matNode_p = model_data->getMaterialNodePointer(j); matNode_p->getTevColor(1)->r = 0xFF; matNode_p->getTevColor(1)->g = 0x8A; matNode_p->getTevColor(1)->b = 0x18; @@ -496,10 +549,10 @@ static int daE_RD_Draw(e_rd_class* i_this) { cXyz sp44; sp44.set(a_this->current.pos.x, a_this->current.pos.y + 100.0f, a_this->current.pos.z); i_this->mShadowKey = dComIfGd_setShadow(i_this->mShadowKey, 1, model, &sp44, - 1200.0f, 0.0f, a_this->current.pos.y, - i_this->mObjAcch.GetGroundH(), i_this->mObjAcch.m_gnd, - &a_this->tevStr, 0, 1.0f, - dDlst_shadowControl_c::getSimpleTex()); + 1200.0f + BREG_F(19), 0.0f, a_this->current.pos.y, + i_this->mObjAcch.GetGroundH(), i_this->mObjAcch.m_gnd, + &i_this->actor.tevStr, 0, 1.0f, + dDlst_shadowControl_c::getSimpleTex()); if (i_this->field_0x5bc == 1) { dComIfGd_addRealShadow(i_this->mShadowKey, i_this->field_0x694); } @@ -520,6 +573,7 @@ static int daE_RD_Draw(e_rd_class* i_this) { static BOOL other_bg_check(e_rd_class* i_this, fopAc_ac_c* i_other) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; dBgS_LinChk lin_chk; + cXyz unused_vec; cXyz start; cXyz end; @@ -547,7 +601,6 @@ static BOOL otoCheck(fopAc_ac_c* i_actor, f32 param_2) { if (sp8c.abs() < param_2) { dBgS_LinChk lin_chk; cXyz start, end; - end = sound->position; end.y += 100.0f; start = i_actor->current.pos; @@ -559,7 +612,7 @@ static BOOL otoCheck(fopAc_ac_c* i_actor, f32 param_2) { } } } - + return FALSE; } @@ -587,11 +640,11 @@ static daE_RD_HIO_c l_HIO; static s16 S_find; -static s8 lbl_70_bss_AE; +static bool lbl_70_bss_AE; static cXyz S_find_pos; -static u8 data_80519200; +static u8 desert_substage; static u8 data_80519201; @@ -602,6 +655,7 @@ static int target_info_count; static s8 data_80519230; static void* s_b_sub(void* i_actor, void* i_data) { + UNUSED(i_data); if (fopAcM_IsActor(i_actor) && dBomb_c::checkBombActor((fopAc_ac_c*)i_actor) && !((dBomb_c*)i_actor)->checkStateExplode() && target_info_count < 10) { target_info[target_info_count] = (fopAc_ac_c*)i_actor; @@ -611,16 +665,80 @@ static void* s_b_sub(void* i_actor, void* i_data) { return NULL; } -static dBomb_c* search_bomb(e_rd_class* i_this, int param_2) { +static dBomb_c* search_bomb(e_rd_class* i_this, int param_1) { if ((i_this->field_0xa20 & 0x10000000) == 0) { return NULL; } + fopAc_ac_c* a_this = &i_this->actor; + dBomb_c* bomb; + target_info_count = 0; for (int i = 0; i < 10; i++) { target_info[i] = NULL; } + // For whatever reason, the original devs omitted this function call. Not sure if intentionall or by mistake. + // In any case, because target_info_count is left at 0 and only incremented + // in s_b_sub, the entire rest of this function disappears in release asm. +#if 0 + fpcM_Search(s_b_sub, i_this); +#endif + + f32 threshold = 100.0f; + f32 compare_val_f = 1500.0f; + if (target_info_count != 0) { + cXyz vec1, vec2, vec3; + for (int i = 0; i < target_info_count;) { + bomb = (dBomb_c*)target_info[i]; + vec1.x = bomb->current.pos.x - a_this->eyePos.x; + vec1.y = 50.0f + bomb->current.pos.y - a_this->eyePos.y; + vec1.z = bomb->current.pos.z - a_this->eyePos.z; + vec2.x = bomb->current.pos.x - a_this->current.pos.x; + vec2.z = bomb->current.pos.z - a_this->current.pos.z; + f32 dist1 = JMAFastSqrt(SQUARE(vec1.x) + SQUARE(vec1.z)); + f32 dist2 = JMAFastSqrt(SQUARE(vec2.x) + SQUARE(vec2.z)); + if (dist1 < threshold && !(dist2 > i_this->mPlayerDistance + 30.0f) + && (!other_bg_check(i_this, bomb) || !param_1)) + { + if (param_1) { + f32 abs_res = fabsf(50.0f + bomb->current.pos.y - a_this->eyePos.y); + if (abs_res <= 300.0f) { + s16 ang_y = a_this->shape_angle.y - cM_atan2s(vec1.x, vec1.z); + if (ang_y < 0) { + ang_y = (-1 * ang_y); + } + + if ((u16)ang_y < 20000) { + return bomb; + } + + cMtx_YrotS(*calc_mtx, -a_this->shape_angle.y); + MtxPosition(&vec1, &vec3); + if (fabsf(vec3.x) < 500.0f && fabsf(vec3.y) < 300.0f + && vec3.z > -125.0f && vec3.z < 500.0f) + { + return bomb; + } + } + } else { + return bomb; + } + } + + i++; + if (i == target_info_count) { + i = 0; + threshold += 100.0f; + if (threshold > compare_val_f) { + return NULL; + } + } + } + } else { + return NULL; + } + return NULL; } @@ -651,7 +769,7 @@ static void ride_off(e_rd_class* i_this) { e_wb_class* bullbo = (e_wb_class*)fopAcM_SearchByID(i_this->mWbActorID); if (bullbo != NULL) { - bullbo->mStatusFlags &= ~i_this->field_0x9be; + UNSET_FLAG(bullbo->mStatusFlags, i_this->field_0x9be, u16); i_this->field_0x9be = 0; if (bullbo->mActionID != 22 && bullbo->mActionID != 23 && bullbo->mActionID != 24) { @@ -692,13 +810,16 @@ static void ride_off(e_rd_class* i_this) { } static void* s_wb_sub(void* i_actor, void* i_data) { - if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_WB && ((e_wb_class*)i_actor)->mActionID != ACTION_DROP && - ((e_wb_class*)i_actor)->mActionID != ACTION_DAMAGE && ((e_wb_class*)i_actor)->mActionID != ACTION_A_DAMAGE && ((e_wb_class*)i_actor)->mActionID != ACTION_STAND) { + if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_WB) { + e_wb_class* wild_boar_p = (e_wb_class*) i_actor; e_rd_class* i_this = (e_rd_class*)i_data; - if (i_this->mBossMode == ((e_wb_class*)i_actor)->field_0x79d && - (data_80519230 != 0 || (((e_wb_class*)i_actor)->mStatusFlags & 3) != 3) && target_info_count < 10) { - target_info[target_info_count] = (fopAc_ac_c*)i_actor; - target_info_count++; + if (wild_boar_p->mActionID != ACTION_DROP && wild_boar_p->mActionID != ACTION_DAMAGE + && wild_boar_p->mActionID != ACTION_A_DAMAGE && wild_boar_p->mActionID != ACTION_STAND) { + if (i_this->mBossMode == wild_boar_p->field_0x79d && + (data_80519230 != 0 || (wild_boar_p->mStatusFlags & 3) != 3) && target_info_count < 10) { + target_info[target_info_count] = (fopAc_ac_c*)i_actor; + target_info_count++; + } } } @@ -725,7 +846,7 @@ static fpc_ProcID search_wb(e_rd_class* i_this, s16 param_2) { f32 fVar2 = 1500.0f; // Hyrule Field - Bridge of Eldin if (strcmp(dComIfGp_getStartStageName(), "F_SP121") == 0 && fopAcM_GetRoomNo(a_this) == 0) { - fVar2 = HREG_F(0) + 5000.0f; + fVar2 = hREG_F(0) + 5000.0f; } if (target_info_count != 0) { @@ -765,13 +886,18 @@ static fpc_ProcID search_wb(e_rd_class* i_this, s16 param_2) { } static void wb_check(e_rd_class* i_this, s16 param_2) { + e_wb_class* bullbo; fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; - if (data_80519200 != 118 || fopAcM_GetRoomNo(a_this) != 1) { + if (desert_substage != 118 || fopAcM_GetRoomNo(a_this) != 1) { + // Arbiter's Grounds Exterior - a.k.a. Bulblin camp + // OR most other areas in the game. Except for (non-exhaustive): + // 1. Outside Link's home + // 2. Ordon Spring i_this->mWbActorID = search_wb(i_this, param_2); - e_wb_class* bullbo = (e_wb_class*)fopAcM_SearchByID(i_this->mWbActorID); + bullbo = (e_wb_class*)fopAcM_SearchByID(i_this->mWbActorID); if (bullbo != NULL) { - if (data_80519200 != 0) { + if (desert_substage != 0) { if (i_this->field_0x5bc != 1) { if ((bullbo->mStatusFlags & 1) == 0) { return; @@ -785,10 +911,10 @@ static void wb_check(e_rd_class* i_this, s16 param_2) { i_this->mMode = 0; if ((bullbo->mStatusFlags & 1) == 0) { - bullbo->mStatusFlags |= 1; + bullbo->mStatusFlags |= (u16) 1; i_this->field_0x9be = 1; } else if ((bullbo->mStatusFlags & 2) == 0) { - bullbo->mStatusFlags |= 2; + bullbo->mStatusFlags |= (u16) 2; i_this->field_0x9be = 2; } } @@ -822,7 +948,7 @@ static BOOL pl_check(e_rd_class* i_this, f32 param_2, s16 param_3) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; fopAc_ac_c* actor = get_pla(a_this); - if ((data_80519200 == 0 && dComIfGp_event_runCheck())) { + if ((desert_substage == 0 && dComIfGp_event_runCheck())) { return FALSE; } @@ -843,7 +969,8 @@ static BOOL pl_check(e_rd_class* i_this, f32 param_2, s16 param_3) { for (int i = 0; i <= 2; i++) { if (i_this->field_0xd58[i].ChkCoHit()) { - if (daPy_getPlayerActorClass() == dCc_GetAc(i_this->field_0xd58[i].GetCoHitObj()->GetAc())) { + cCcD_Obj* hit_obj = i_this->field_0xd58[i].GetCoHitObj(); + if (daPy_getPlayerActorClass() == dCc_GetAc(hit_obj->GetAc())) { return TRUE; } } @@ -854,10 +981,12 @@ static BOOL pl_check(e_rd_class* i_this, f32 param_2, s16 param_3) { } static dBomb_c* bomb_view_check(e_rd_class* i_this) { + fopEn_enemy_c* unused_p = &i_this->actor; return search_bomb(i_this, 1); } static dBomb_c* bomb_check(e_rd_class* i_this) { + fopEn_enemy_c* unused_p = &i_this->actor; return search_bomb(i_this, 0); } @@ -909,7 +1038,7 @@ static BOOL way_check(e_rd_class* i_this) { dBgS_LinChk lin_chk; lin_chk.Set(&start, &end, a_this); if (dComIfG_Bgsp().LineCross(&lin_chk)) { - sVar1 += 0x1000; + sVar1 += (s16) 0x1000; } else { i_this->field_0x5cc = sVar1; return TRUE; @@ -929,13 +1058,13 @@ static BOOL path_check(e_rd_class* i_this) { cXyz start, end; start = a_this->current.pos; - start.y += hREG_F(0) + 10.0f; + start.y += WREG_F(0) + 10.0f; dPnt* points = i_this->mPath->m_points; for (int i = 0; i < i_this->mPath->m_num; i++, points++) { if (i < 0xFF) { end.x = points->m_position.x; - end.y = points->m_position.y + 10.0f + hREG_F(1); + end.y = points->m_position.y + 10.0f + WREG_F(1); end.z = points->m_position.z; lin_chk.Set(&start, &end, a_this); if (!dComIfG_Bgsp().LineCross(&lin_chk)) { @@ -949,7 +1078,8 @@ static BOOL path_check(e_rd_class* i_this) { f32 fVar2, fVar3, fVar4; f32 fVar1 = 100.0f; bool bVar1 = false; - for (int i = 0; i < 100; i++) { + f32 reg_f27; // unused + for (int i = 0; i < 100;) { points = i_this->mPath->m_points; for (int j = 0; j < i_this->mPath->m_num; j++, points++) { if (j < 0xFF && check_index[j] != 0) { @@ -964,8 +1094,12 @@ static BOOL path_check(e_rd_class* i_this) { } } - if (bVar1) break; - fVar1 += 50.0f; + if (bVar1) { + break; + } + + ++i; + reg_f27 = fVar1 += 50.0f; } if (!bVar1) { @@ -988,118 +1122,121 @@ static void e_rd_normal(e_rd_class* i_this) { if (wb_init_ride(i_this)) { i_this->field_0x5b6 = 0; } - } else { - f32 fVar1 = 0.0f; - s16 sVar1 = 0x4000; - if (data_80519200 != 0) { - sVar1 = 0x6000; - } - switch (i_this->mMode) { - case 0: - if (i_this->field_0x5bd != 0) { - anm_init(i_this, BCK_RD_ARMAMENT, 2.0f, 0, 1.0f); - i_this->mMode = 1; - } else { - i_this->mMode = 2; - } - break; + return; + } - case 1: - if ((int)i_this->mpModelMorf->getFrame() == 11) { - i_this->field_0x5bd = 0; + cXyz unused_vec_0, unused_vec_1; + f32 fVar1 = 0.0f; + s16 sVar1 = 0x4000; + if (desert_substage != 0) { + sVar1 = 0x6000; + } + + switch (i_this->mMode) { + case 0: + if (i_this->field_0x5bd != 0) { + anm_init(i_this, BCK_RD_ARMAMENT, 2.0f, 0, 1.0f); + i_this->mMode = 1; + } else { + i_this->mMode = 2; + } + break; + + case 1: + if ((int)i_this->mpModelMorf->getFrame() == 11) { + i_this->field_0x5bd = 0; + } + + if (i_this->mpModelMorf->isStop()) { + i_this->mMode = 2; + } + break; + + case 2: + if (i_this->field_0x990[0] == 0) { + if (i_this->mPath != NULL && path_check(i_this)) { + i_this->mAction = ACTION_JYUNKAI; + i_this->mMode = 0; + return; } - if (i_this->mpModelMorf->isStop()) { - i_this->mMode = 2; - } - break; - - case 2: - if (i_this->field_0x990[0] == 0) { - if (i_this->mPath != NULL && path_check(i_this)) { - i_this->mAction = ACTION_JYUNKAI; - i_this->mMode = 0; - return; - } - - if (way_check(i_this)) { - anm_init(i_this, BCK_RD_WALK, 10.0f, 2, 1.0f); - i_this->mMode = 3; - i_this->field_0x990[0] = cM_rndF(100.0f) + 100.0f; - } - } else if (data_80519200 != 0) { - sVar1 = 0x7000; - } else { - sVar1 = 0x6000; - } - break; - - case 3: - fVar1 = l_HIO.movement_speed; - if (a_this->speedF >= 3.0f && move_gake_check(i_this, 100.0f)) { - i_this->mMode = 4; - i_this->field_0x990[0] = cM_rndF(100.0f) + 50.0f; - anm_init(i_this, BCK_RD_KYORO2, 10.0f, 2, 1.0f); - } else { - if (i_this->field_0x990[0] == 0 || (a_this->speedF >= 3.0f && way_bg_check(i_this, 200.0f))) { - i_this->mMode = 2; - i_this->field_0x990[0] = cM_rndF(100.0f) + 50.0f; - anm_init(i_this, BCK_RD_KYORO2, 10.0f, 2, 1.0f); - } - } - break; - - case 4: - i_this->field_0x9c8 = 0xFF; - if (i_this->field_0x990[0] == 0) { - i_this->field_0x5cc = a_this->current.angle.y + 0x8000 + (s16)cM_rndFX(4000.0f); + if (way_check(i_this)) { anm_init(i_this, BCK_RD_WALK, 10.0f, 2, 1.0f); i_this->mMode = 3; i_this->field_0x990[0] = cM_rndF(100.0f) + 100.0f; } - } - - if (fVar1) { - cLib_addCalcAngleS2(&a_this->current.angle.y, i_this->field_0x5cc, 8, 0x400); - s16 sVar1 = a_this->current.angle.y - i_this->field_0x5cc; - if (sVar1 > 0x400 || sVar1 < -0x400) { - fVar1 = 0.0f; - } - } - - cLib_addCalc2(&a_this->speedF, fVar1, 1.0f, 3.0f); - f32 fVar2 = i_this->field_0x980; - BOOL bVar1 = FALSE; - if (i_this->field_0x9a1 == 1 || S_find != 0) { - if (i_this->field_0x9a1 == 1) { - bVar1 = TRUE; - } - - fVar2 = 10000.0f; - sVar1 = 0x7FFF; - } - - if (((i_this->field_0x970 & 7) == 0 || bVar1) && i_this->mMode >= 2) { - if ((i_this->field_0x970 & 8) != 0 && !bVar1) { - wb_check(i_this, sVar1); + } else if (desert_substage != 0) { + sVar1 = 0x7000; } else { - if (pl_check(i_this, fVar2, sVar1)) { - if (i_this->field_0x5bc == 1) { - i_this->mAction = ACTION_FIGHT_RUN; - i_this->mMode = 0xFFF6; - i_this->field_0x990[0] = 60; - } else if (i_this->field_0x5bc >= 2) { - i_this->mAction = ACTION_BOW_RUN; - i_this->mMode = 0xFFF6; - } - } + sVar1 = 0x6000; + } + break; - if (bomb_view_check(i_this) != NULL) { - i_this->mAction = ACTION_BOMB; - i_this->mMode = 0; + case 3: + fVar1 = l_HIO.movement_speed; + if (a_this->speedF >= 3.0f && move_gake_check(i_this, 100.0f)) { + i_this->mMode = 4; + i_this->field_0x990[0] = cM_rndF(100.0f) + 50.0f; + anm_init(i_this, BCK_RD_KYORO2, 10.0f, 2, 1.0f); + } else { + if (i_this->field_0x990[0] == 0 || (a_this->speedF >= 3.0f && way_bg_check(i_this, 200.0f))) { + i_this->mMode = 2; + i_this->field_0x990[0] = cM_rndF(100.0f) + 50.0f; + anm_init(i_this, BCK_RD_KYORO2, 10.0f, 2, 1.0f); } } + break; + + case 4: + i_this->field_0x9c8 = 0xFF; + if (i_this->field_0x990[0] == 0) { + i_this->field_0x5cc = a_this->current.angle.y + 0x8000 + (s16)cM_rndFX(4000.0f); + anm_init(i_this, BCK_RD_WALK, 10.0f, 2, 1.0f); + i_this->mMode = 3; + i_this->field_0x990[0] = cM_rndF(100.0f) + 100.0f; + } + } + + if (fVar1) { + cLib_addCalcAngleS2(&a_this->current.angle.y, i_this->field_0x5cc, 8, 0x400); + s16 sVar1 = a_this->current.angle.y - i_this->field_0x5cc; + if (sVar1 > 0x400 || sVar1 < -0x400) { + fVar1 = 0.0f; + } + } + + cLib_addCalc2(&a_this->speedF, fVar1, 1.0f, 3.0f); + f32 fVar2 = i_this->field_0x980; + BOOL bVar1 = FALSE; + if (i_this->field_0x9a1 == 1 || S_find != 0) { + if (i_this->field_0x9a1 == 1) { + bVar1 = TRUE; + } + + fVar2 = 10000.0f; + sVar1 = 0x7FFF; + } + + if (((i_this->field_0x970 & 7) == 0 || bVar1) && i_this->mMode >= 2) { + if ((i_this->field_0x970 & 8) != 0 && !bVar1) { + wb_check(i_this, sVar1); + } else { + if (pl_check(i_this, fVar2, sVar1)) { + if (i_this->field_0x5bc == 1) { + i_this->mAction = ACTION_FIGHT_RUN; + i_this->mMode = 0xFFF6; + i_this->field_0x990[0] = 60; + } else if (i_this->field_0x5bc >= 2) { + i_this->mAction = ACTION_BOW_RUN; + i_this->mMode = 0xFFF6; + } + } + + if (bomb_view_check(i_this) != NULL) { + i_this->mAction = ACTION_BOMB; + i_this->mMode = 0; + } } } } @@ -1120,7 +1257,7 @@ static void e_rd_fight_run(e_rd_class* i_this) { } f32 fVar1; - if (data_80519200 != 0) { + if (desert_substage != 0) { fVar1 = 24.0f; } else { fVar1 = l_HIO.dash_speed; @@ -1202,7 +1339,7 @@ static void e_rd_fight_run(e_rd_class* i_this) { } fVar3 = 0.0f; - a_this->speedF = fVar3; + a_this->speedF = 0.0f; if (!move_gake_check(i_this, 100.0f)) { i_this->mMode = 2; } @@ -1246,7 +1383,8 @@ static void e_rd_fight_run(e_rd_class* i_this) { i_this->field_0x998 = 20; } else if (i_this->field_0x5bd == 0 && i_this->mPlayerDistance < l_HIO.attack_init_range && i_this->field_0x990[2] == 0) { i_this->field_0x990[2] = cM_rndF(20.0f) + 20.0f; - if (cM_rndF(1.0f) < 0.5f) { + f32 compare_val_f = 0.5f; + if (cM_rndF(1.0f) < compare_val_f) { i_this->mAction = ACTION_FIGHT; i_this->mMode = 0; } @@ -1268,12 +1406,16 @@ static void e_rd_fight_run(e_rd_class* i_this) { } static fopAc_ac_c* at_hit_check(e_rd_class* i_this) { + fopEn_enemy_c* unused_p = &i_this->actor; + fopAc_ac_c* actor_p; if (i_this->mMode >= 10) { return NULL; } if (i_this->field_0x1100.ChkAtHit()) { - return i_this->field_0x1100.GetAtHitObj()->GetAc(); + cCcD_Obj* at_hit_obj_p = i_this->field_0x1100.GetAtHitObj(); + actor_p = dCc_GetAc(at_hit_obj_p->GetAc()); + return actor_p; } return NULL; @@ -1285,12 +1427,13 @@ static void e_rd_fight(e_rd_class* i_this) { int frame = i_this->mpModelMorf->getFrame(); switch (i_this->mMode) { - case 0: - anm_init(i_this, BCK_RD_ATTACK01, HREG_F(0) + 6.0f, 0, 1.0f); + case 0: { + anm_init(i_this, BCK_RD_ATTACK01, TREG_F(14) + 6.0f, 0, 1.0f); if (l_HIO.field_0x38 == 0) { i_this->field_0x990[0] = 25; } else if (l_HIO.field_0x38 == 1) { + // in practice, only goes in here i_this->field_0x990[0] = 15; } else if (l_HIO.field_0x38 == 2) { i_this->field_0x990[0] = 10; @@ -1300,8 +1443,9 @@ static void e_rd_fight(e_rd_class* i_this) { i_this->field_0x990[1] = 5; i_this->mSound.startCreatureVoice(Z2SE_EN_RD_V_WAND_ATTACK, -1); break; + } - case 1: + case 1: { if (i_this->field_0x990[1] != 0) { cLib_addCalcAngleS2(&a_this->current.angle.y, i_this->mPlayerAngleY, 4, 0x800); } @@ -1314,12 +1458,13 @@ static void e_rd_fight(e_rd_class* i_this) { i_this->mMode = 2; } break; + } - case 2: + case 2: { if (frame >= 44 && frame <= 47) { i_this->field_0x9ab = 1; } - + if (i_this->mpModelMorf->checkFrame(44.0f)) { i_this->mSound.startCreatureSound(Z2SE_EN_RD_SWING_CLUB, 0, -1); } @@ -1332,6 +1477,7 @@ static void e_rd_fight(e_rd_class* i_this) { if (l_HIO.field_0x38 == 0) { iVar1 = 64; } else if (l_HIO.field_0x38 == 1) { + // in practice, only goes in here iVar1 = 54; } else if (l_HIO.field_0x38 == 2) { iVar1 = 44; @@ -1342,6 +1488,7 @@ static void e_rd_fight(e_rd_class* i_this) { if (l_HIO.field_0x38 == 0) { i_this->field_0x990[0] = 20; } else if (l_HIO.field_0x38 == 1) { + // in practice, only goes in here i_this->field_0x990[0] = 15; } else if (l_HIO.field_0x38 == 2) { i_this->field_0x990[0] = 10; @@ -1349,26 +1496,28 @@ static void e_rd_fight(e_rd_class* i_this) { anm_init(i_this, BCK_RD_KAMAE, 5.0f, 2, 1.0f); } + } + // fallthrough intentional + default: break; case 3: - case 10: + case 10: { if (i_this->field_0x990[0] == 0) { i_this->mAction = ACTION_FIGHT_RUN; i_this->mMode = 0; } - break; + } } cLib_addCalc0(&a_this->speedF, 1.0f, 3.0f); - if (i_this->field_0x9ab != 0) { fopAc_ac_c* actor = at_hit_check(i_this); if (actor != NULL && fopAcM_GetName(actor) == PROC_ALINK) { if (daPy_getPlayerActorClass()->checkPlayerGuard()) { i_this->mpModelMorf->setPlaySpeed(-1.0f); dComIfGp_getVibration().StartShock(4, 31, cXyz(0.0f, 1.0f, 0.0f)); - dKy_Sound_set(a_this->current.pos, 100, fopAcM_GetID(a_this), 5); + dKy_Sound_set(a_this->current.pos, 100, fopAcM_GetID(i_this), 5); i_this->mMode = 10; i_this->field_0x990[0] = 10; } @@ -1378,9 +1527,10 @@ static void e_rd_fight(e_rd_class* i_this) { static void e_rd_bow_run(e_rd_class* i_this) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; + cXyz unused_vec_0, unused_vec_1; f32 fVar1 = 0.0f; f32 fVar2; - if (data_80519200 != 0) { + if (desert_substage != 0) { fVar2 = 24.0f; } else { fVar2 = l_HIO.dash_speed; @@ -1431,7 +1581,7 @@ static void e_rd_bow_run(e_rd_class* i_this) { case 1: fVar1 = fVar2; - playerAngleY += 0x8000; + ADD_ANGLE_2(playerAngleY, 0x8000); if (i_this->mPlayerDistance > l_HIO.attack_range || i_this->field_0x990[0] == 0 || i_this->mObjAcch.ChkWallHit() || move_gake_check(i_this, 100.0f)) { bVar1 = 1; } @@ -1481,12 +1631,14 @@ static void e_rd_bow_run(e_rd_class* i_this) { static void e_rd_bow(e_rd_class* i_this) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; + cXyz unused_vec_0, unused_vec_1; int frame = i_this->mpModelMorf->getFrame(); switch (i_this->mMode) { case 0: anm_init(i_this, BCK_RD_SHOOT_READY, 5.0f, 0, 1.0f); - i_this->mpMorfBowAnm->setAnm((J3DAnmTransform*)dComIfG_getObjectRes(i_this->mResName, 7), 0, 5.0f, 0.9f, 0.0f, -1.0f); + i_this->mpMorfBowAnm->setAnm((J3DAnmTransform*)dComIfG_getObjectRes(i_this->mResName, 7), + 0, 5.0f, 0.9f + TREG_F(3), 0.0f, -1.0f); i_this->mMode = 1; a_this->speedF = 0.0f; break; @@ -1525,12 +1677,12 @@ static void e_rd_bow(e_rd_class* i_this) { break; case 3: - if (frame <= 3) { + if (frame <= 3 + XREG_S(5)) { i_this->field_0x9a2 = 1; i_this->field_0x9c8 = 4; } - if (frame == 2) { + if (frame == 2 + XREG_S(7)) { i_this->field_0x9a3 = 1; } @@ -1562,6 +1714,7 @@ static void* s_command3_sub(void* i_actor, void* i_data) { static s8 e_rd_bow2(e_rd_class* i_this) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; fopAc_ac_c* actor = get_pla(a_this); + cXyz unused_vec_0, unused_vec_1; int frame = i_this->mpModelMorf->getFrame(); s8 rv = 0; @@ -1592,7 +1745,8 @@ static s8 e_rd_bow2(e_rd_class* i_this) { case 2: anm_init(i_this, BCK_RD_SHOOT_READY, 5.0f, 0, 1.0f); - i_this->mpMorfBowAnm->setAnm((J3DAnmTransform*)dComIfG_getObjectRes(i_this->mResName, 7), 0, 5.0f, 0.9f, 0.0f, -1.0f); + i_this->mpMorfBowAnm->setAnm((J3DAnmTransform*)dComIfG_getObjectRes(i_this->mResName, 7), + 0, 5.0f, 0.9f + TREG_F(3), 0.0f, -1.0f); i_this->mMode = 3; a_this->speedF = 0.0f; break; @@ -1633,12 +1787,12 @@ static s8 e_rd_bow2(e_rd_class* i_this) { break; case 5: - if (frame <= 3) { + if (frame <= 3 + XREG_S(5)) { i_this->field_0x9a2 = 1; i_this->field_0x9c8 = 4; } - if (frame == 2) { + if (frame == 2 + XREG_S(7)) { i_this->field_0x9a3 = 1; } @@ -1663,13 +1817,14 @@ static s8 e_rd_bow2(e_rd_class* i_this) { static void e_rd_bow_ikki(e_rd_class* i_this) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; - cXyz sp2c; + cXyz vec_0x24, vec_0x18; int frame = i_this->mpModelMorf->getFrame(); switch (i_this->mMode) { case 0: anm_init(i_this, BCK_RD_SHOOT_READY, 5.0f, 0, 1.0f); - i_this->mpMorfBowAnm->setAnm((J3DAnmTransform*)dComIfG_getObjectRes(i_this->mResName, 7), 0, 5.0f, 0.9f, 0.0f, -1.0f); + i_this->mpMorfBowAnm->setAnm((J3DAnmTransform*)dComIfG_getObjectRes(i_this->mResName, 7), + 0, 5.0f, 0.9f + TREG_F(3), 0.0f, -1.0f); i_this->mMode = 1; a_this->speedF = 0.0f; break; @@ -1700,11 +1855,11 @@ static void e_rd_bow_ikki(e_rd_class* i_this) { break; case 3: - if (frame <= 3) { + if (frame <= 3 + XREG_S(5)) { i_this->field_0x9a2 = 1; } - if (frame == 2) { + if (frame == 2 + XREG_S(7)) { i_this->field_0x9a3 = 1; } @@ -1717,8 +1872,8 @@ static void e_rd_bow_ikki(e_rd_class* i_this) { i_this->field_0x9c8 = 14; i_this->field_0x9d4.set(34800.0f, 100.0f, -14900.0f); - sp2c = i_this->field_0x9d4 - a_this->current.pos; - a_this->current.angle.y = cM_atan2s(sp2c.x, sp2c.z); + vec_0x24 = i_this->field_0x9d4 - a_this->current.pos; + a_this->current.angle.y = cM_atan2s(vec_0x24.x, vec_0x24.z); } static void e_rd_avoid(e_rd_class* i_this) { @@ -1729,8 +1884,8 @@ static void e_rd_avoid(e_rd_class* i_this) { case 0: anm_init(i_this, BCK_RD_AVOID, 1.0f, 0, 1.0f); i_this->mMode = 1; - a_this->speedF = -30.0f; - a_this->speed.y = 20.0f; + a_this->speedF = -30.0f + XREG_F(1); + a_this->speed.y = 20.0f + XREG_F(2); i_this->mSound.startCreatureVoice(Z2SE_EN_RD_V_DODGE, -1); break; @@ -1765,7 +1920,7 @@ static void e_rd_wb_search(e_rd_class* i_this) { s8 bVar1 = 0; fopAc_ac_c* bullbo_actor = fopAcM_SearchByID(i_this->mWbActorID); e_wb_class* bullbo = (e_wb_class*)bullbo_actor; - if (bullbo == NULL) { + if (bullbo_actor == NULL) { bVar1 = 1; } else { if (bullbo->mActionID == 22 || bullbo->mActionID == 21 || bullbo->mActionID == 23 || bullbo->mActionID == 24) { @@ -1773,8 +1928,9 @@ static void e_rd_wb_search(e_rd_class* i_this) { } else if (i_this->mMode <= 3) { for (int i = 0; i <= 2; i++) { if (i_this->field_0xd58[i].ChkCoHit()) { - e_wb_class* actor_p = (e_wb_class*)dCc_GetAc(i_this->field_0xd58[i].GetCoHitObj()->GetAc()); - if (actor_p != NULL && actor_p != bullbo && fopAcM_GetName(actor_p) == PROC_E_WB) { + cCcD_Obj* co_hit_obj_p = i_this->field_0xd58[i].GetCoHitObj(); + fopAc_ac_c* actor_p = dCc_GetAc(co_hit_obj_p->GetAc()); + if (actor_p != NULL && actor_p != bullbo_actor && fopAcM_GetName(actor_p) == PROC_E_WB) { bVar1 = 1; } } @@ -1847,7 +2003,7 @@ static void e_rd_wb_search(e_rd_class* i_this) { } sp54 = sp60 - a_this->current.pos; - i_this->field_0x5cc = cM_atan2s(sp54.x, sp54.z); + i_this->field_0x5cc = (s16) cM_atan2s(sp54.x, sp54.z); i_this->mMode = 3; anm_init(i_this, BCK_RD_RUN, 5.0f, 2, 1.5f); } @@ -1872,7 +2028,7 @@ static void e_rd_wb_search(e_rd_class* i_this) { sp60 += bullbo_actor->current.pos; sp54 = sp60 - a_this->current.pos; - i_this->field_0x5cc = cM_atan2s(sp54.x, sp54.z); + i_this->field_0x5cc = (s16) cM_atan2s(sp54.x, sp54.z); cLib_addCalcAngleS2(&a_this->current.angle.y, i_this->field_0x5cc, 2, 0x400); sp54 = sp60 - a_this->current.pos; sp54.y = 0.0f; @@ -1947,64 +2103,71 @@ static void e_rd_wb_search(e_rd_class* i_this) { static void e_rd_wb_ride(e_rd_class* i_this) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; cXyz sp1c, sp28; - e_wb_class* bullbo = (e_wb_class*)fopAcM_SearchByID(i_this->mWbActorID); + fopAc_ac_c* wb_actor_p = fopAcM_SearchByID(i_this->mWbActorID); - if (bullbo == NULL) { + if (wb_actor_p == NULL) { i_this->mAction = ACTION_NORMAL; i_this->mMode = 0; ride_off(i_this); - } else if ((bullbo->mStatusFlags & 3) == 0) { + return; + } + + e_wb_class* bullbo = (e_wb_class*) wb_actor_p; + if ((bullbo->mStatusFlags & 3) == 0) { OS_REPORT("......BOSS DL !!!!\n"); if (bullbo->mActionID == 1) { bullbo->mActionID = 0; } fopAcM_delete(a_this); - } else { - switch (i_this->mMode) { - case 0: - i_this->mMode = 1; - if (i_this->mBossMode == 0) { - anm_init(i_this, BCK_RD_JUMP_C, 1.0f, 0, 1.0f); - } - // fallthrough - case 1: - if (i_this->mpModelMorf->isStop() || i_this->mBossMode != 0) { - if (i_this->mBossMode != 0) { - bullbo->mActionMode = 0; - i_this->mMode = 0; + return; + } - if (i_this->mBossMode == 3) { - bullbo->mActionID = 17; - // Hyrule Field - if (strcmp(dComIfGp_getStartStageName(), "F_SP121") == 0) { - bullbo->mActionMode = -100; - i_this->mAction = ACTION_IKKI2_START; - } else { - i_this->mAction = ACTION_WB_RUN; - } - } else if (i_this->mBossMode == 2) { - bullbo->mActionID = 15; - i_this->mAction = ACTION_WB_RUN; - } else if (i_this->mBossMode == 4) { - bullbo->mActionID = 19; - i_this->mAction = ACTION_LV9_END; - } else if (cDmr_SkipInfo == 0) { - i_this->mAction = ACTION_KIBA_START; - bullbo->mActionID = 30; + switch (i_this->mMode) { + case 0: { + i_this->mMode = 1; + if (i_this->mBossMode == 0) { + anm_init(i_this, BCK_RD_JUMP_C, 1.0f, 0, 1.0f); + } + } + // fallthrough + case 1: { + if (i_this->mpModelMorf->isStop() || i_this->mBossMode != 0) { + if (i_this->mBossMode != 0) { + bullbo->mActionMode = 0; + i_this->mMode = 0; + + if (i_this->mBossMode == 3) { + bullbo->mActionID = 17; + // Hyrule Field + if (strcmp(dComIfGp_getStartStageName(), "F_SP121") == 0) { + bullbo->mActionMode = -100; + i_this->mAction = ACTION_IKKI2_START; } else { - bullbo->mActionID = 8; i_this->mAction = ACTION_WB_RUN; - bullbo->field_0x79c = 10; - Z2GetAudioMgr()->subBgmStart(Z2BGM_HORSE_BATTLE); } - } else { - bullbo->mActionID = 6; - bullbo->mActionMode = 0; + } else if (i_this->mBossMode == 2) { + bullbo->mActionID = 15; i_this->mAction = ACTION_WB_RUN; - i_this->mMode = 0; + } else if (i_this->mBossMode == 4) { + bullbo->mActionID = 19; + i_this->mAction = ACTION_LV9_END; + } else if (cDmr_SkipInfo == 0) { + i_this->mAction = ACTION_KIBA_START; + bullbo->mActionID = 30; + } else { + bullbo->mActionID = 8; + i_this->mAction = ACTION_WB_RUN; + bullbo->field_0x79c = 10; + Z2GetAudioMgr()->subBgmStart(Z2BGM_HORSE_BATTLE); } + } else { + bullbo->mActionID = 6; + bullbo->mActionMode = 0; + i_this->mAction = ACTION_WB_RUN; + i_this->mMode = 0; } } + } } } @@ -2263,8 +2426,9 @@ static void e_rd_wb_run(e_rd_class* i_this) { static void* s_wbrun_sub(void* i_actor, void* i_data) { if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_WB) { e_wb_class* bullbo = (e_wb_class*)i_actor; + fopAc_ac_c* actor_p = (fopAc_ac_c*)i_data; if (bullbo->field_0x79d == 0) { - cXyz sp24(bullbo->mEnemy.current.pos - ((fopAc_ac_c*)i_data)->current.pos); + cXyz sp24(bullbo->mEnemy.current.pos - actor_p->current.pos); if (sp24.abs() > KREG_F(11) + 7000.0f) { return i_actor; } @@ -2276,15 +2440,17 @@ static void* s_wbrun_sub(void* i_actor, void* i_data) { static void e_rd_wb_run_B(e_rd_class* i_this) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; - e_wb_class* bullbo = (e_wb_class*)fopAcM_SearchByID(i_this->mWbActorID); + cXyz unused_vec_0, unused_vec_1; + fopAc_ac_c* base_bulb_p = fopAcM_SearchByID(i_this->mWbActorID); dAttention_c* attention; - if (bullbo != NULL) { + if (base_bulb_p != NULL) { if (i_this->mBossMode == 2 || i_this->mBossMode == 3) { fopAcM_OffStatus(a_this, 0); a_this->attention_info.flags = 0; } + e_wb_class* bullbo = (e_wb_class*) base_bulb_p; if (daPy_getPlayerActorClass()->checkHorseRide()) { attention = dComIfGp_getAttention(); if (attention->Lockon() && a_this == attention->LockonTarget(0)) { @@ -2357,13 +2523,15 @@ static void e_rd_wb_run_B(e_rd_class* i_this) { static void e_rd_wb_bjump(e_rd_class* i_this) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; - e_wb_class* bullbo = (e_wb_class*)fopAcM_SearchByID(i_this->mWbActorID); + cXyz unused_vec_0, unused_vec_1; + fopAc_ac_c* base_bulb_p = fopAcM_SearchByID(i_this->mWbActorID); dAttention_c* attention; - if (bullbo != NULL) { + if (base_bulb_p != NULL) { + e_wb_class* bullbo = (e_wb_class*) base_bulb_p; if (daPy_getPlayerActorClass()->checkHorseRide()) { attention = dComIfGp_getAttention(); - if (attention->Lockon() && i_this == (e_rd_class*)attention->LockonTarget(0)) { + if (attention->Lockon() && a_this == attention->LockonTarget(0)) { bullbo->field_0x6c0 = 1; } } @@ -2404,6 +2572,7 @@ static void e_rd_bomb_action(e_rd_class* i_this) { cXyz sp48, sp54; dBomb_c* bomb = bomb_check(i_this); if (bomb == NULL) { + int _; // needed to force dbg stack into r31 i_this->mAction = ACTION_FIGHT_RUN; i_this->mMode = 0; return; @@ -2439,7 +2608,7 @@ static void e_rd_bomb_action(e_rd_class* i_this) { } } - sVar1 += 0x8000; + ADD_ANGLE_2(sVar1, 0x8000); fVar1 = l_HIO.dash_speed; if (JMAFastSqrt(sp48.x * sp48.x + sp48.z * sp48.z) > 600.0f) { i_this->mMode = 3; @@ -2508,7 +2677,7 @@ static void e_rd_s_damage(e_rd_class* i_this) { if (i_this->field_0x9be != 0) { e_wb_class* bullbo = (e_wb_class*)fopAcM_SearchByID(i_this->mWbActorID); if (bullbo != NULL) { - bullbo->mStatusFlags &= ~i_this->field_0x9be; + UNSET_FLAG(bullbo->mStatusFlags, i_this->field_0x9be, u16); } i_this->field_0x9be = 0; @@ -2518,15 +2687,16 @@ static void e_rd_s_damage(e_rd_class* i_this) { case 1: if (i_this->field_0x990[1] != 0) { - a_this->onHeadLockFlg(); + i_this->actor.onHeadLockFlg(); } if (i_this->mpModelMorf->isStop()) { + fopAc_ac_c* pla_p; if (i_this->field_0x974 == 7) { i_this->mAction = ACTION_BOW2; } else if (i_this->field_0x974 == 26) { i_this->mAction = ACTION_BOW3; - } else if (!other_bg_check(i_this, dComIfGp_getPlayer(0))) { + } else if (!other_bg_check(i_this, pla_p = dComIfGp_getPlayer(0))) { i_this->mAction = ACTION_FIGHT_RUN; i_this->field_0x990[0] = 40; } else { @@ -2555,18 +2725,18 @@ static int kado_check(e_rd_class* i_this) { cXyz sp9c, spa8, spb4; BOOL rv = FALSE; - cMtx_YrotS(*calc_mtx, i_this->field_0xa0e); + cMtx_YrotS(*calc_mtx, i_this->field_0xa0c.y); for (int i = 0; i < 2; i++) { spa8 = a_this->current.pos; - spa8.y += 100.0f; - sp9c.x = 0.0f; - sp9c.y = 0.0f; - sp9c.z = 70.0f; + spa8.y += 100.0f + JREG_F(0); + sp9c.x = JREG_F(1); + sp9c.y = JREG_F(2); + sp9c.z = 70.0f + JREG_F(3); MtxPosition(&sp9c, &spb4); spa8 += spb4; - sp9c.y = 50.0f; - sp9c.z = -150.0f; - sp9c.x = 1.0f * kado_check_x[i]; + sp9c.y = 50.0f + JREG_F(4); + sp9c.z = -150.0f + JREG_F(5); + sp9c.x = (1.0f + JREG_F(6)) * kado_check_x[i]; MtxPosition(&sp9c, &spb4); spb4 += spa8; lin_chk.Set(&spa8, &spb4, a_this); @@ -2590,16 +2760,16 @@ static void rd_disappear(e_rd_class* i_this) { sp1c.set(0.0f, 0.0f, 0.0f); MtxPosition(&sp1c, &sp28); - fopAc_ac_c* actor = fopAcM_SearchByName(PROC_NPC_COACH); - if (actor != NULL) { - fopAcM_createDisappear(a_this, &sp28, 10, 0, 51); + u8 reg_r27 = 0; + if (fopAcM_SearchByName(PROC_NPC_COACH) != NULL) { + fopAcM_createDisappear(a_this, &sp28, 10, reg_r27, 51); } else { - fopAcM_createDisappear(a_this, &sp28, 10, 0, 11); + fopAcM_createDisappear(a_this, &sp28, 10, reg_r27, 11); } fopAcM_delete(a_this); - int swBit = fopAcM_GetParam(a_this) >> 24; + int swBit = (fopAcM_GetParam(a_this) & 0xFF000000) >> 24; if (swBit != 0xFF) { dComIfGs_onSwitch(swBit, fopAcM_GetRoomNo(a_this)); } @@ -2607,7 +2777,7 @@ static void rd_disappear(e_rd_class* i_this) { if (i_this->field_0x9be != 0) { e_wb_class* bullbo = (e_wb_class*)fopAcM_SearchByID(i_this->mWbActorID); if (bullbo != NULL) { - bullbo->mStatusFlags &= ~i_this->field_0x9be; + UNSET_FLAG(bullbo->mStatusFlags, i_this->field_0x9be, u16); if (bullbo->mActionID == 1) { bullbo->mActionID = 0; } @@ -2616,12 +2786,12 @@ static void rd_disappear(e_rd_class* i_this) { } static BOOL body_gake(e_rd_class* i_this) { - fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; J3DModel* model = i_this->mpModelMorf->getModel(); + fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; cXyz sp7c, sp88; MTXCopy(model->getAnmMtx(11), *calc_mtx); - sp7c.set(40.0f, 0.0f, 0.0f); + sp7c.set(40.0f + BREG_F(10), BREG_F(11), BREG_F(12)); MtxPosition(&sp7c, &sp88); dBgS_ObjGndChk gnd_chk; @@ -2637,7 +2807,8 @@ static BOOL body_gake(e_rd_class* i_this) { } static void e_rd_damage(e_rd_class* i_this) { - fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; + fopAc_ac_c* a_this = &i_this->actor; + fopEn_enemy_c* rd_enemy_p = (fopEn_enemy_c*) a_this; cXyz sp34, sp40; if (a_this->health <= 0) { @@ -2648,7 +2819,7 @@ static void e_rd_damage(e_rd_class* i_this) { i_this->field_0x6d0 = 0.0f; if (daPy_py_c::checkNowWolf() != 0) { - if (i_this->field_0xafa == 0 && a_this->checkWolfDownStartFlg()) { + if (i_this->field_0xafa == 0 && rd_enemy_p->checkWolfDownStartFlg()) { if (i_this->field_0x990[0] > 40) { i_this->field_0x990[0] = 90; OS_REPORT(" RD WOLFHIT LONG \n"); @@ -2664,8 +2835,8 @@ static void e_rd_damage(e_rd_class* i_this) { i_this->field_0x990[1] = 16; i_this->field_0xafa = 1; } - } else if (a_this->checkCutDownHitFlg()) { - a_this->offCutDownHitFlg(); + } else if (rd_enemy_p->checkCutDownHitFlg()) { + rd_enemy_p->offCutDownHitFlg(); i_this->mMode = 3; i_this->field_0x990[0] = 100; i_this->field_0x990[1] = 45; @@ -2673,8 +2844,8 @@ static void e_rd_damage(e_rd_class* i_this) { i_this->mSound.startCreatureVoice(Z2SE_EN_RD_V_DEATH, -1); i_this->field_0x968 = 1; daPy_getPlayerActorClass()->onEnemyDead(); - i_this->field_0xadc = 15; - a_this->offDownFlg(); + i_this->field_0xadc = 15 + TREG_S(7); + rd_enemy_p->offDownFlg(); } s16 sVar1; @@ -2684,14 +2855,14 @@ static void e_rd_damage(e_rd_class* i_this) { i_this->mMode = 1; a_this->speedF = 0.0f; ride_off(i_this); - i_this->field_0xab8 = 8000.0f; + i_this->field_0xab8 = 8000.0f + BREG_F(10); if (a_this->health <= 0) { i_this->mSound.startCreatureVoice(Z2SE_EN_RD_V_DEATH, -1); i_this->field_0x968 = 1; daPy_getPlayerActorClass()->onEnemyDead(); - if (data_80519200 != 0) { + if (desert_substage != 0) { i_this->field_0x5ba = 0; } } else { @@ -2703,37 +2874,38 @@ static void e_rd_damage(e_rd_class* i_this) { case 1: if (i_this->mObjAcch.ChkWallHit() != 0 && i_this->field_0x990[0] == 0) { - int iVar1 = kado_check(i_this); - if (iVar1 != 0) { - OS_REPORT(" ..KADO KABE ..%x\n", iVar1); - if (iVar1 == 2) { + int kado_kabe; + if ((kado_kabe = kado_check(i_this)) != 0) { + OS_REPORT(" ..KADO KABE ..%x\n", kado_kabe); + if (kado_kabe == 2) { i_this->field_0x9f6 = 0x1000; - i_this->field_0xa0e += -7000; + i_this->field_0xa0c.y += (s16) (TREG_S(8) - 7000); } else { i_this->field_0x9f6 = -0x1000; - i_this->field_0xa0e += 7000; + i_this->field_0xa0c.y += (s16) -(TREG_S(8) - 7000); } - i_this->field_0xab8 = 8000.0f; - i_this->field_0xa24 = 100.0f; - i_this->field_0xa2c = 100.0f; + i_this->field_0xab8 = 8000.0f + BREG_F(10); + i_this->field_0xa24 = 100.0f + BREG_F(4); + i_this->field_0xa2c = 100.0f + BREG_F(5); i_this->field_0x990[0] = 60; - } else { - i_this->mMode = 10; - a_this->speed.y = 0.0f; - i_this->field_0x9ec *= 0.2f; - i_this->field_0xa0e += 0x8000; - i_this->field_0xaf0 = 5; - i_this->field_0xa24 = 100.0f; - i_this->field_0xa2c = 100.0f; - i_this->field_0x9f6 = 0; + break; } + + i_this->mMode = 10; + a_this->speed.y = 0.0f; + i_this->field_0x9ec *= 0.2f; + ADD_ANGLE_2(i_this->field_0xa0c.y, 0x8000); + i_this->field_0xaf0 = 5 + BREG_S(7); + i_this->field_0xa24 = 100.0f + BREG_F(4); + i_this->field_0xa2c = 100.0f + BREG_F(5); + i_this->field_0x9f6 = 0; } else { - cLib_addCalcAngleS2(&i_this->field_0xa0c, -0x4000, 1, 0x300); + cLib_addCalcAngleS2(&i_this->field_0xa0c.x, -0x4000, 1, 0x300 + BREG_S(4)); a_this->current.angle.y += i_this->field_0x9f6; a_this->shape_angle.y = a_this->current.angle.y; - if (i_this->field_0xa0c <= -0x3000 && i_this->mObjAcch.ChkGroundHit()) { + if (i_this->field_0xa0c.x <= -0x3000 && i_this->mObjAcch.ChkGroundHit()) { i_this->field_0xa1e = 10; if (i_this->field_0x1294 != 0) { @@ -2746,31 +2918,31 @@ static void e_rd_damage(e_rd_class* i_this) { if (i_this->field_0xa1f == 0) { anm_init(i_this, BCK_RD_DIEA, 3.0f, 0, 1.0f); - sVar1 = i_this->field_0xa0e; + sVar1 = (s16) i_this->field_0xa0c.y; } else { - sVar1 = i_this->field_0xa0e + 0x8000; + sVar1 = i_this->field_0xa0c.y + 0x8000; } a_this->current.angle.y = sVar1; if (i_this->field_0x9f8 != 0) { i_this->field_0x9ec = 0.0f; - i_this->field_0xab8 = 2000.0f; + i_this->field_0xab8 = 2000.0f + BREG_F(12); } else { if (i_this->field_0xa1f == 0) { - i_this->field_0xa24 = -100.0f; - i_this->field_0xa2c = -100.0f; + i_this->field_0xa24 = -100.0f - BREG_F(6); + i_this->field_0xa2c = -100.0f - BREG_F(7); } else { - i_this->field_0xa24 = 100.0f; - i_this->field_0xa2c = 100.0f; + i_this->field_0xa24 = 100.0f + BREG_F(4); + i_this->field_0xa2c = 100.0f + BREG_F(5); } i_this->field_0xa28 = -0x5000; i_this->field_0xa30 = -0x4000; i_this->field_0x9ec *= 0.5f; - a_this->speed.y = 20.0f; + a_this->speed.y = 20.0f + TREG_F(6); i_this->field_0x9f6 /= 2; - i_this->field_0xab8 = 8000.0f; + i_this->field_0xab8 = 8000.0f + BREG_F(12); i_this->field_0x125d = 1; } } @@ -2780,14 +2952,14 @@ static void e_rd_damage(e_rd_class* i_this) { case 2: a_this->current.angle.y += i_this->field_0x9f6; a_this->shape_angle.y = a_this->current.angle.y; - cLib_addCalcAngleS2(&i_this->field_0xa0c, -0x4000, 1, 0x300); + cLib_addCalcAngleS2(&i_this->field_0xa0c.x, -0x4000, 1, 0x300 + BREG_S(4)); if (i_this->mObjAcch.ChkGroundHit()) { if (a_this->health > 0 && daPy_py_c::checkNowWolf() == 0) { - a_this->onDownFlg(); + rd_enemy_p->onDownFlg(); } - dKy_Sound_set(a_this->current.pos, 100, fopAcM_GetID(a_this), 5); + dKy_Sound_set(a_this->current.pos, 100, fopAcM_GetID(i_this), 5); i_this->field_0xa1e = 10; if (i_this->field_0xa1f == 0) { @@ -2797,15 +2969,15 @@ static void e_rd_damage(e_rd_class* i_this) { } i_this->field_0x9ec = 0.0f; - i_this->field_0xa0c = -0x4000; + i_this->field_0xa0c.x = -0x4000; if (i_this->field_0xa1f == 0) { - sVar1 = i_this->field_0xa0e; + sVar1 = s16(i_this->field_0xa0c.y); for (int i = 0; i < 4; i++) { i_this->field_0xad2[i] = cM_rndF(10.0f); } } else { - sVar1 = i_this->field_0xa0e + 0x8000; + sVar1 = i_this->field_0xa0c.y + 0x8000; } a_this->current.angle.y = sVar1; @@ -2818,15 +2990,15 @@ static void e_rd_damage(e_rd_class* i_this) { } i_this->mMode = 3; - i_this->field_0xab8 = 1500.0f; + i_this->field_0xab8 = 1500.0f + BREG_F(13); i_this->field_0x125d = 1; } break; case 3: if (body_gake(i_this)) { - i_this->field_0x9ec = -20.0f; - i_this->field_0xa0c -= 0x300; + i_this->field_0x9ec = -20.0f + VREG_F(8); + i_this->field_0xa0c.x -= s16(0x300 + VREG_S(7)); } else { i_this->field_0x9ec = 0.0f; } @@ -2837,8 +3009,8 @@ static void e_rd_damage(e_rd_class* i_this) { } if (daPy_getPlayerActorClass()->getCutType() != daPy_py_c::CUT_TYPE_DOWN && i_this->field_0x990[0] == 0) { - i_this->field_0xa0c = -0x4000; - a_this->offDownFlg(); + i_this->field_0xa0c.x = -0x4000; + rd_enemy_p->offDownFlg(); i_this->mMode = 20; if (i_this->field_0xa1f == 0) { @@ -2851,51 +3023,49 @@ static void e_rd_damage(e_rd_class* i_this) { case 10: if (i_this->field_0xaf0 != 0) { - cLib_addCalcAngleS2(&i_this->field_0xa0c, 0, 1, 0x300); + cLib_addCalcAngleS2(&i_this->field_0xa0c.x, 0, 1, 0x300 + BREG_S(4)); } else { - cLib_addCalcAngleS2(&i_this->field_0xa0c, -0x4000, 1, 0x800); + cLib_addCalcAngleS2(&i_this->field_0xa0c.x, -0x4000, 1, 0x800 + BREG_S(5)); if (i_this->mObjAcch.ChkGroundHit()) { i_this->mMode = 2; if (i_this->field_0xa1f == 0) { anm_init(i_this, BCK_RD_DIEA, 3.0f, 0, 1.0f); - i_this->field_0xa24 = -100.0f; - i_this->field_0xa2c = -100.0f; + i_this->field_0xa24 = -100.0f - BREG_F(6); + i_this->field_0xa2c = -100.0f - BREG_F(7); } else { - i_this->field_0xa24 = 100.0f; - i_this->field_0xa2c = 100.0f; + i_this->field_0xa24 = 100.0f + BREG_F(4); + i_this->field_0xa2c = 100.0f + BREG_F(5); } i_this->field_0xa28 = -0x5000; i_this->field_0xa30 = -0x4000; i_this->field_0x9ec *= 0.5f; - a_this->speed.y = 20.0f; + a_this->speed.y = 20.0f + TREG_F(6); if (i_this->field_0xa1f == 0) { - sVar1 = i_this->field_0xa0e; + sVar1 = s16(i_this->field_0xa0c.y); } else { - sVar1 = i_this->field_0xa0e + 0x8000; + sVar1 = i_this->field_0xa0c.y + 0x8000; } a_this->current.angle.y = sVar1; - i_this->field_0xab8 = 8000.0f; + i_this->field_0xab8 = 8000.0f + BREG_F(12); } } break; case 20: if (i_this->mpModelMorf->getFrame() >= 35.0f) { - i_this->field_0xa1c = 0; - i_this->field_0xa18 = 0; + i_this->field_0xa18.x = i_this->field_0xa18.z = 0; } if (i_this->mpModelMorf->isStop()) { - i_this->field_0xa0e = 0; - i_this->field_0xa0c = 0; + i_this->field_0xa0c.x = i_this->field_0xa0c.y = 0; anm_init(i_this, BCK_RD_WAIT01, 0.0f, 2, 1.0f); i_this->field_0x990[0] = 5; i_this->mMode = 21; - a_this->offDownFlg(); + rd_enemy_p->offDownFlg(); } break; @@ -2923,7 +3093,7 @@ static void e_rd_damage(e_rd_class* i_this) { break; case 30: - if (!a_this->checkWolfDownPullFlg()) { + if (!rd_enemy_p->checkWolfDownPullFlg()) { i_this->field_0x990[1] = 0; } @@ -2937,8 +3107,8 @@ static void e_rd_damage(e_rd_class* i_this) { i_this->field_0x990[0] = 10; } else if (i_this->field_0x990[1] == 1) { - a_this->onWolfDownPullEndFlg(); - a_this->offCutDownHitFlg(); + rd_enemy_p->onWolfDownPullEndFlg(); + rd_enemy_p->offCutDownHitFlg(); a_this->health = 0; i_this->field_0x990[0] = 1000; i_this->field_0x990[1] = 35; @@ -2948,23 +3118,23 @@ static void e_rd_damage(e_rd_class* i_this) { case 31: if (i_this->field_0x990[0] == 0) { - a_this->offDownFlg(); + rd_enemy_p->offDownFlg(); i_this->mMode = 20; i_this->field_0xafa = 0; } } - if (a_this->checkDownFlg()) { + if (rd_enemy_p->checkDownFlg()) { MTXCopy(i_this->mpModelMorf->getModel()->getAnmMtx(11), *calc_mtx); sp34.set(BREG_F(0), BREG_F(1), BREG_F(2)); MtxPosition(&sp34, &sp40); - a_this->setDownPos(&sp40); + rd_enemy_p->setDownPos(&sp40); i_this->field_0x9ad = 0; } if (i_this->field_0xadc != 0) { i_this->field_0xadc--; - i_this->field_0xada = i_this->field_0xadc * cM_ssin(i_this->field_0xadc * 0x3800) * 100.0f; + i_this->field_0xada = i_this->field_0xadc * cM_ssin(i_this->field_0xadc * (0x3800 + TREG_S(9))) * (100.0f + TREG_F(5)); } } @@ -2975,7 +3145,7 @@ static s16 gake_check(e_rd_class* i_this, f32 param_2) { cXyz spf8, sp104, start, end; s16 sVar1 = a_this->shape_angle.y; - for (int i = 0; i < 16; i++, sVar1 += 0x1000) { + for (int i = 0; i < 16; i++) { cMtx_YrotS(*calc_mtx, sVar1); start.x = 0.0f; start.y = 100.0f; @@ -2992,13 +3162,15 @@ static s16 gake_check(e_rd_class* i_this, f32 param_2) { return sVar1; } } + + sVar1 += (s16) 0x1000; } return a_this->shape_angle.y; } static void* s_bikkuri_sub(void* i_actor, void* i_data) { - if (fopAc_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_RD && i_actor != i_data) { + if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_RD && i_actor != i_data) { if (((e_rd_class*)i_actor)->mAction == ACTION_BOW3 && ((e_rd_class*)i_actor)->mMode <= 2) { cXyz sp28 = ((fopAc_ac_c*)i_actor)->current.pos - ((fopAc_ac_c*)i_data)->current.pos; if (sp28.abs() < KREG_F(11) + 350.0f) { @@ -3013,7 +3185,7 @@ static void* s_bikkuri_sub(void* i_actor, void* i_data) { } static void* s_saku_sub(void* i_actor, void* i_data) { - if (fopAc_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_Obj_H_Saku) { + if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_Obj_H_Saku) { cXyz sp14 = ((daObjH_Saku_c*)i_actor)->field_0x5e0 - ((fopAc_ac_c*)i_data)->current.pos; if (sp14.abs() < 200.0f) { return i_actor; @@ -3033,7 +3205,7 @@ static void e_rd_drop(e_rd_class* i_this) { anm_init(i_this, BCK_RD_DAMAGE_S, 2.0f, 0, 1.0f); i_this->mMode = 1; - if (data_80519200 != 0) { + if (desert_substage != 0) { i_this->mDemoMode = 10; } break; @@ -3072,8 +3244,8 @@ static void e_rd_drop(e_rd_class* i_this) { if (move_gake_check(i_this, KREG_F(6) + 30.0f)) { i_this->mMode = 3; - i_this->field_0xa0e = a_this->shape_angle.y + 0x8000; - i_this->field_0xa0c = 0; + i_this->field_0xa0c.y = a_this->shape_angle.y + 0x8000; + i_this->field_0xa0c.x = 0; i_this->mpModelMorf->setPlaySpeed(0.3f); i_this->field_0xaf8 = 0; i_this->field_0x990[0] = 20; @@ -3090,31 +3262,31 @@ static void e_rd_drop(e_rd_class* i_this) { fVar1 = 3.0f; - if (i_this->field_0xa0c > -0x4000) { + if (i_this->field_0xa0c.x > -0x4000) { a_this->speed.y = 0.0f; i_this->mSound.startCreatureVoiceLevel(Z2SE_EN_RD_V_SNIPED_DAMAGE, -1); } else { - if (i_this->field_0xa0c > -0x6800) { - a_this->speed.y = -fabsf(cM_scos(i_this->field_0xa0c) * (TREG_F(8) + 70.0f)); + if (i_this->field_0xa0c.x > -0x6800) { + a_this->speed.y = -fabsf(cM_scos(i_this->field_0xa0c.x) * (TREG_F(8) + 70.0f)); i_this->mSound.startCreatureVoiceLevel(Z2SE_EN_RD_V_SNIPED_FALLING, -1); } else { i_this->mSound.startCreatureVoiceLevel(Z2SE_EN_RD_V_SNIPED_FALLING, -1); } } - cLib_addCalcAngleS2(&i_this->field_0xa0c, -0x7000, 2, i_this->field_0xaf8); + cLib_addCalcAngleS2(&i_this->field_0xa0c.x, -0x7000, 2, i_this->field_0xaf8); cLib_addCalcAngleS2(&i_this->field_0xaf8, 0x800, 1, 0x50); i_this->field_0x9ab = 2; - if (i_this->field_0x990[0] == 0 && a_this->current.pos.y <= (KREG_F(17) + i_this->mObjAcch.GetGroundH() + 100.0f)) { + if (i_this->field_0x990[0] == 0 && a_this->current.pos.y <= i_this->mObjAcch.GetGroundH() + 100.0f + KREG_F(17)) { if (i_this->field_0x5b7 == 13 || i_this->field_0x5b7 == 14) { i_this->mAction = ACTION_REG; i_this->mMode = 1; i_this->field_0xafb = 1; i_this->field_0xaf2 = 0; } else { - a_this->current.pos.y = KREG_F(17) + i_this->mObjAcch.GetGroundH() + 100.0f; - i_this->field_0xa0c = -0x4000; + a_this->current.pos.y = i_this->mObjAcch.GetGroundH() + 100.0f + KREG_F(17); + i_this->field_0xa0c.x = -0x4000; i_this->mAction = ACTION_DAMAGE; i_this->mMode = 0; i_this->field_0x9ec = 0.0f; @@ -3140,11 +3312,11 @@ static void e_rd_a_damage(e_rd_class* i_this) { anm_init(i_this, BCK_RD_DEAD_ARROW, 5.0f, 0, 1.0f); i_this->field_0x990[0] = 80; - if (data_80519200 != 0) { + if (desert_substage != 0) { i_this->field_0x5ba = 0; } - dKy_Sound_set(a_this->current.pos, 100, fopAcM_GetID(a_this), 5); + dKy_Sound_set(a_this->current.pos, 100, fopAcM_GetID(i_this), 5); break; case 1: @@ -3191,12 +3363,23 @@ static void e_rd_stand(e_rd_class* i_this) { } if ((i_this->field_0x970 & 7) == 0 && fopAcM_GetRoomNo(a_this) == 0) { - if ((S_find == 0 || (wb_check(i_this, sVar1), i_this->field_0x9be == 0)) && pl_check(i_this, 500.0f, 0x4000)) { + if (S_find != 0) { + wb_check(i_this, sVar1); + if (i_this->field_0x9be != 0) { + return; + } + } + + if (pl_check(i_this, 500.0f, 0x4000)) { i_this->mAction = ACTION_FIGHT_RUN; i_this->mMode = -10; i_this->field_0x990[0] = 60; } - } else if (((i_this->field_0x970 & 7) == 0 || bVar1) && pl_check(i_this, fVar1, sVar1) && i_this->field_0x5bc == 1) { + + return; + } + + if (((i_this->field_0x970 & 7) == 0 || bVar1) && pl_check(i_this, fVar1, sVar1) && i_this->field_0x5bc == 1) { OS_REPORT(" <<<<<<<<<<<<<< RD RIDE 4\n"); i_this->mAction = ACTION_FIGHT_RUN; i_this->mMode = -10; @@ -3213,8 +3396,10 @@ static s8 e_rd_bow3(e_rd_class* i_this) { i_this->field_0x990[0] = cM_rndF(20.0f) + 80.0f; } + cXyz unused_vec_0, unused_vec_1; int frame = i_this->mpModelMorf->getFrame(); s8 bVar1 = 1; + s8 retval = 0; switch (i_this->mMode) { case 0: @@ -3251,7 +3436,8 @@ static s8 e_rd_bow3(e_rd_class* i_this) { case 10: if (i_this->field_0x990[0] == 0) { anm_init(i_this, BCK_RD_SHOOT_READY, 5.0f, 0, 1.0f); - i_this->mpMorfBowAnm->setAnm((J3DAnmTransform*)dComIfG_getObjectRes(i_this->mResName, 7), 0, 5.0f, 0.9f, 0.0f, -1.0f); + i_this->mpMorfBowAnm->setAnm((J3DAnmTransform*)dComIfG_getObjectRes(i_this->mResName, 7), + 0, 5.0f, 0.9f + TREG_F(3), 0.0f, -1.0f); i_this->mMode = 11; a_this->speedF = 0.0f; } @@ -3259,7 +3445,6 @@ static s8 e_rd_bow3(e_rd_class* i_this) { case 11: i_this->field_0x9c8 = 4; - if (frame >= 10) { i_this->field_0x9a2 = 1; } @@ -3288,12 +3473,12 @@ static s8 e_rd_bow3(e_rd_class* i_this) { break; case 13: - if (frame <= 3) { + if (frame <= 3 + XREG_S(5)) { i_this->field_0x9a2 = 1; i_this->field_0x9c8 = 4; } - if (frame == 2) { + if (frame == 2 + XREG_S(7)) { i_this->field_0x9a3 = 1; } @@ -3312,11 +3497,13 @@ static s8 e_rd_bow3(e_rd_class* i_this) { i_this->field_0x1295 = 0; } - return 0; + return retval; } static void* s_command2_sub(void* i_actor, void* i_data) { - if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_RD && ((e_rd_class*)i_actor)->mAction == ACTION_BOW3 && ((e_rd_class*)i_actor)->mMode < 10) { + UNUSED(i_data); + if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_RD + && ((e_rd_class*)i_actor)->mAction == ACTION_BOW3 && ((e_rd_class*)i_actor)->mMode < 10) { ((e_rd_class*)i_actor)->field_0x990[0] = cM_rndF(10.0f) + 10.0f; ((e_rd_class*)i_actor)->mMode = 10; } @@ -3379,7 +3566,7 @@ static void e_rd_commander(e_rd_class* i_this) { i_this->mMode = 7; if (dComIfGp_event_runCheck()) { - i_this->field_0x990[0] = l_HIO.field_0x24 + 2; + i_this->field_0x990[0] = l_HIO.command_to_ready_stance + 2; } else { i_this->field_0x990[0] = 10; } @@ -3471,7 +3658,7 @@ static void e_rd_excite(e_rd_class* i_this) { } sp40 = i_this->field_0x5c0 - a_this->current.pos; - i_this->field_0x5cc = cM_atan2s(sp40.x, sp40.z); + i_this->field_0x5cc = (s16) cM_atan2s(sp40.x, sp40.z); } break; @@ -3510,13 +3697,12 @@ static void e_rd_excite(e_rd_class* i_this) { static void e_rd_water(e_rd_class* i_this) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; - cXyz sp28; i_this->field_0x998 = 10; switch (i_this->mMode) { case 0: - case 1: + case 1: { a_this->speed.y = 0.0f; if (i_this->field_0xa1f == 0) { anm_init(i_this, BCK_RD_DROWNEDA, 3.0f, 2, 1.0f); @@ -3525,11 +3711,8 @@ static void e_rd_water(e_rd_class* i_this) { } i_this->field_0x990[0] = 60; - a_this->speedF = 0.0f; - i_this->field_0x9ec = 0.0f; - i_this->field_0x9f0 = 0.0f; - - sp28 = a_this->current.pos; + i_this->field_0x9f0 = i_this->field_0x9ec = a_this->speedF = 0.0f; + cXyz sp28 = a_this->current.pos; sp28.y = i_this->field_0x984; if (i_this->mMode == 0) { fopKyM_createWpillar(&sp28, 1.5f, 0); @@ -3540,11 +3723,12 @@ static void e_rd_water(e_rd_class* i_this) { i_this->mMode = 10; break; + } case 10: a_this->speed.y = 0.0f; cLib_addCalc2(&a_this->current.pos.y, i_this->field_0x984, 0.5f, 5.0f); - cLib_addCalcAngleS2(&i_this->field_0xa0c, -0x4000, 4, 0x400); + cLib_addCalcAngleS2(&i_this->field_0xa0c.x, -0x4000, 4, 0x400 + BREG_S(4)); if (i_this->field_0x990[0] == 0) { rd_disappear(i_this); @@ -3594,6 +3778,7 @@ static void e_rd_kiba_start(e_rd_class* i_this) { if (i_this->mpModelMorf->isStop()) { i_this->mAction = ACTION_WB_RUN; i_this->mMode = 0; + fopAcM_OnStatus(a_this, 0); // statement does nothing. a_this->attention_info.flags = fopAc_AttnFlag_BATTLE_e; } } @@ -3655,7 +3840,7 @@ static void e_rd_kiba_end(e_rd_class* i_this) { sp28.y = BREG_F(9) + 20.0f; sp28.z = BREG_F(10) + 57.0f; MtxPosition(&sp28, &i_this->field_0x6b0); - i_this->field_0x6be = a_this->shape_angle.y; + i_this->field_0x6bc.y = a_this->shape_angle.y + BREG_S(0); sp28.x = BREG_F(11) + 80.0f; sp28.y = BREG_F(12); sp28.z = BREG_F(13); @@ -3714,7 +3899,7 @@ static void e_rd_ikki_end(e_rd_class* i_this) { fopAcM_OffStatus(a_this, 0); a_this->attention_info.flags = 0; i_this->field_0x998 = 10; - bullbo->field_0x1434 = fopAcM_GetID(a_this); + bullbo->field_0x1434 = fopAcM_GetID(i_this); switch (i_this->mMode) { case 0: @@ -3723,7 +3908,7 @@ static void e_rd_ikki_end(e_rd_class* i_this) { i_this->field_0x9bc = 0; if (daPy_getPlayerActorClass()->checkHorseRide() && bullbo != NULL) { - bullbo->mStatusFlags &= ~i_this->field_0x9be; + UNSET_FLAG(bullbo->mStatusFlags, i_this->field_0x9be, u16); i_this->field_0x9be = 0; bullbo->mActionID = 16; bullbo->mActionMode = 0; @@ -3731,13 +3916,13 @@ static void e_rd_ikki_end(e_rd_class* i_this) { } a_this->speedF = 0.0f; - a_this->speed.y = 40.0f; - i_this->field_0x9ec = 70.0f; + a_this->speed.y = 40.0f + KREG_F(7); + i_this->field_0x9ec = 70.0f + KREG_F(8); if (fopAcM_searchPlayerAngleY(a_this) < 0) { - i_this->field_0xa0e = 0x4000; + i_this->field_0xa0c.y = 0x4000; } else { - i_this->field_0xa0e = -0x4000; + i_this->field_0xa0c.y = -0x4000; } i_this->mSound.startCreatureVoice(Z2SE_EN_RDB_V_DEATH, -1); @@ -3751,7 +3936,7 @@ static void e_rd_ikki_end(e_rd_class* i_this) { } if (a_this->speed.y < 0.0f) { - cLib_addCalc2(&i_this->field_0x9ec, 0.0f, 0.1f, 1.0f); + cLib_addCalc2(&i_this->field_0x9ec, KREG_F(9), 0.1f, 1.0f); a_this->current.angle.y += i_this->field_0x9f6; } break; @@ -3765,7 +3950,7 @@ static void e_rd_ikki2_end(e_rd_class* i_this) { fopAcM_OffStatus(a_this, 0); a_this->attention_info.flags = 0; i_this->field_0x998 = 10; - bullbo->field_0x1434 = fopAcM_GetID(a_this); + bullbo->field_0x1434 = fopAcM_GetID(i_this); switch (i_this->mMode) { case 0: @@ -3791,27 +3976,28 @@ static void e_rd_ikki2_end(e_rd_class* i_this) { i_this->field_0x9bc = 0; if (bullbo != NULL) { - bullbo->mStatusFlags &= ~i_this->field_0x9be; + UNSET_FLAG(bullbo->mStatusFlags, i_this->field_0x9be, u16); i_this->field_0x9be = 0; } a_this->speedF = 0.0f; - a_this->speed.y = 50.0f; - i_this->field_0x9ec = 60.0f; - i_this->field_0xa0e = 0x4000; + a_this->speed.y = 50.0f + KREG_F(7); + i_this->field_0x9ec = 60.0f + KREG_F(8); + i_this->field_0xa0c.y = 0x4000; i_this->mSound.startCreatureVoice(Z2SE_EN_RDB_V_DEATH, -1); break; case 11: if (a_this->speed.y < 0.0f) { - cLib_addCalc2(&i_this->field_0x9ec, 0.0f, 0.1f, 1.0f); + cLib_addCalc2(&i_this->field_0x9ec, KREG_F(9), 0.1f, 1.0f); } break; } } static void* s_rdb_sub(void* i_actor, void* i_data) { + UNUSED(i_data); if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_RDB) { return i_actor; } @@ -3874,8 +4060,12 @@ static void e_rd_lv9_end(e_rd_class* i_this) { } static void* s_boom_sub(void* i_actor, void* i_data) { - if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_RD && ((e_rd_class*)i_actor)->field_0x99a != 0) { - return i_actor; + UNUSED(i_data); + if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_RD) { + e_rd_class* i_this = (e_rd_class*) i_actor; + if (i_this->field_0x99a != 0) { + return i_this; + } } return NULL; @@ -3887,7 +4077,7 @@ static void wolfkick_damage(e_rd_class* i_this) { i_this->mAction = ACTION_DAMAGE; i_this->mMode = 0; - i_this->field_0xa0e = player->shape_angle.y + 0x8000; + i_this->field_0xa0c.y = player->shape_angle.y + 0x8000; a_this->speed.y = l_HIO.wolf_falling_power_y; i_this->field_0x9ec = -l_HIO.wolf_falling_power_z; i_this->mSound.startCollisionSE(Z2SE_HIT_WOOD_WEAPON, 31); @@ -3910,12 +4100,12 @@ static void big_damage(e_rd_class* i_this) { i_this->field_0x9ec = 40.0f; } } else { - i_this->field_0x9ec = -l_HIO.field_0x48; + i_this->field_0x9ec = -l_HIO.jump_z_suspended; } - i_this->field_0xa0e = a_this->shape_angle.y + (s16)cM_rndFX(3000.0f); + i_this->field_0xa0c.y = a_this->shape_angle.y + (s16)cM_rndFX(3000.0f); } else { - i_this->field_0xa0e = i_this->mAtInfo.mHitDirection.y; + i_this->field_0xa0c.y = i_this->mAtInfo.mHitDirection.y; i_this->field_0x9ec = -l_HIO.jump_z; } @@ -3931,7 +4121,7 @@ static void big_damage(e_rd_class* i_this) { } else { if (fopAcM_GetName(i_this->mAtInfo.mpActor) == PROC_E_WB) { i_this->field_0x9f6 = cM_rndFX(8000.0f); - a_this->speed.y = cM_rndF(15.0f) + 35.0f; + a_this->speed.y = cM_rndF(15.0f) + (35.0f + TREG_F(17)); i_this->field_0x9ec = -(i_this->mAtInfo.mpActor->speedF * 0.5f); } else { i_this->field_0x9f6 = cM_rndFX(1000.0f); @@ -3968,12 +4158,13 @@ static void small_damage(e_rd_class* i_this, int param_2) { anm_init(i_this, BCK_RD_DAMAGE_W, 2.0f, 0, 1.0f); } - i_this->field_0x9f0 = 20.0f; + i_this->field_0x9f0 = 20.0f + TREG_F(10); i_this->field_0x9f4 = i_this->mAtInfo.mHitDirection.y; } static void part_break(e_rd_class* i_this) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; + cXyz unused_vec_0, unused_vec_1; for (int i = 0; i < 14; i++) { if (i_this->field_0x70c[i] == 0) { @@ -3990,7 +4181,7 @@ static void part_break(e_rd_class* i_this) { i_this->field_0x86c[i].y = cM_rndF(65536.0f); i_this->field_0x86c[i].x = cM_rndF(65536.0f); - u16 uVar1 = 1; + u16 uVar1; if (i_this->mAtInfo.mHitStatus != 0) { uVar1 = 3; } else { @@ -4008,35 +4199,38 @@ static void damage_check(e_rd_class* i_this) { daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); fopAc_ac_c* bullbo = fopAcM_SearchByID(i_this->mWbActorID); e_wb_class* bullbo_p = (e_wb_class*)bullbo; - int iVar1; - if (i_this->field_0x9bc == 2 && bullbo != NULL && (bullbo_p->mStatusFlags & 0xC0) != 0) { + if (i_this->field_0x9bc == 2 && bullbo_p != NULL && (bullbo_p->mStatusFlags & 0xC0) != 0) { if (i_this->mAction == ACTION_IKKI2_END) { i_this->mMode = 10; - return; - } - - i_this->mAction = ACTION_DAMAGE; - i_this->mMode = 0; - i_this->field_0x998 = 1000; - - if ((bullbo_p->mStatusFlags & 0x80) != 0) { - i_this->field_0xa0e = a_this->shape_angle.y + 0x8000 + (s16)cM_rndFX(3000.0f); - i_this->field_0x9f6 = (s16)cM_rndFX(1000.0f); } else { - i_this->field_0xa0e = a_this->shape_angle.y + (s16)cM_rndFX(8000.0f); - i_this->field_0x9f6 = (s16)cM_rndFX(3000.0f); + i_this->mAction = ACTION_DAMAGE; + i_this->mMode = 0; + i_this->field_0x998 = 1000; + + if ((bullbo_p->mStatusFlags & 0x80) != 0) { + i_this->field_0xa0c.y = a_this->shape_angle.y + 0x8000 + (s16)cM_rndFX(3000.0f); + i_this->field_0x9f6 = (s16)cM_rndFX(1000.0f); + } else { + i_this->field_0xa0c.y = a_this->shape_angle.y + (s16)cM_rndFX(8000.0f); + i_this->field_0x9f6 = (s16)cM_rndFX(3000.0f); + } + + a_this->speed.y = cM_rndF(15.0f) + (25.0f + TREG_F(13)); + i_this->field_0x9ec = -20.0f + TREG_F(18); } - a_this->speed.y = cM_rndF(15.0f) + 25.0f; - i_this->field_0x9ec = -20.0f; return; } i_this->mStts.Move(); if (i_this->field_0x998 == 0) { - if (i_this->mBossMode != 0) { + if (i_this->mBossMode != 0 +#if DEBUG + || l_HIO.invulnerable +#endif + ) { a_this->health = 100; } @@ -4080,12 +4274,7 @@ static void damage_check(e_rd_class* i_this) { sp40 += a_this->current.pos; cXyz sp4c(2.0f, 2.0f, 2.0f); dComIfGp_setHitMark(uVar1, a_this, &sp40, NULL, &sp4c, 0); - return; - } else { - if (i_this->mAtInfo.mHitType != 1) { - return; - } - + } else if (i_this->mAtInfo.mHitType == 1) { anm_init(i_this, e_rdb_class::BCK_RB_RGUARD_F, 2.0f, 0, 1.0f); bullbo_p->field_0x169e = 25; dScnPly_c::setPauseTimer(0); @@ -4093,7 +4282,8 @@ static void damage_check(e_rd_class* i_this) { cXyz sp58, sp64; cMtx_YrotS(*calc_mtx, bullbo->shape_angle.y); - if ((s16)(a_this->shape_angle.y - i_this->mPlayerAngleY) < 0) { + s16 angle_diff = a_this->shape_angle.y - i_this->mPlayerAngleY; + if (angle_diff < 0) { sp58.set(100.0f, nREG_F(9) + 150.0f, nREG_F(10) + 400.0f); } else { sp58.set(-100.0f, nREG_F(9) + 150.0f, nREG_F(10) + 400.0f); @@ -4107,8 +4297,9 @@ static void damage_check(e_rd_class* i_this) { i_this->mSound.startCollisionSE(Z2SE_HIT_SWORD, 40); i_this->field_0x998 = 30; - return; } + + return; } i_this->field_0x129c = 3; @@ -4133,6 +4324,8 @@ static void damage_check(e_rd_class* i_this) { i_this->field_0x99a = 5; } + s16 cur_health = a_this->health; // unused + OS_REPORT(" HIT AT %d\n", i_this->mAtInfo.mAttackPower); if (i_this->field_0x1295 != 0 && (i_this->mAtInfo.mpCollider->ChkAtType(AT_TYPE_SLINGSHOT) || (i_this->mAtInfo.mHitType != 1 && i_this->mAtInfo.mHitType != 16 && i_this->mAtInfo.mHitType != 2))) { i_this->field_0x998 = 1000; @@ -4167,7 +4360,7 @@ static void damage_check(e_rd_class* i_this) { } if (i_this->mAtInfo.mAttackPower <= 1) { - i_this->field_0x998 = 10; + i_this->field_0x998 = 10 + KREG_S(8); } i_this->field_0xa20 |= i_this->mAtInfo.mHitBit; @@ -4179,9 +4372,9 @@ static void damage_check(e_rd_class* i_this) { if (a_this->health <= 0 || i_this->mAtInfo.mHitStatus != 0 || i_this->field_0x9bc != 0) { if (player->getCutType() == daPy_py_c::CUT_TYPE_JUMP && player->checkCutJumpCancelTurn()) { small_damage(i_this, i); - i_this->field_0x998 = 3; + i_this->field_0x998 = 3 + NREG_S(7); } else { - if (i_this->mBossMode != 0 && bullbo != NULL) { + if (i_this->mBossMode != 0 && bullbo_p != NULL) { i_this->field_0x998 = 20; if (i_this->mBossMode == 2) { bullbo_p->mLapCount++; @@ -4198,25 +4391,25 @@ static void damage_check(e_rd_class* i_this) { mDoAud_bgmStop(30); i_this->mAction = ACTION_IKKI_END; i_this->mMode = 0; - + if ((i_this->mAtInfo.mHitBit & 0x80) != 0) { - i_this->field_0x9f6 = 0x300; + i_this->field_0x9f6 = 0x300 + YREG_S(0); } else { i_this->field_0x9f6 = cM_rndFX(100.0f); } dScnPly_c::setPauseTimer(10); - return; } else { if (i_this->field_0x680 == 0) { - iVar1 = i_this->mAnmID; + int anm_idx = i_this->mAnmID; anm_init(i_this, e_rdb_class::BCK_RB_RDOWNB, 2.0f, 0, 1.0f); - i_this->field_0x680 = iVar1; + i_this->field_0x680 = anm_idx; } i_this->mSound.startCreatureVoice(Z2SE_EN_RDB_V_DAMAGE_L, -1); - return; } + + return; } bullbo_p->mLapCount++; @@ -4257,15 +4450,16 @@ static void damage_check(e_rd_class* i_this) { if (i_this->field_0x680 == 0) { i_this->field_0x990[3] = cM_rndF(100.0f) + 200.0f; - iVar1 = i_this->mAnmID; + int anm_id = i_this->mAnmID; - if ((s16)(a_this->shape_angle.y - i_this->mPlayerAngleY) < 0) { + s16 angle_diff = a_this->shape_angle.y - i_this->mPlayerAngleY; + if (angle_diff < 0) { anm_init(i_this, e_rdb_class::BCK_RB_RDAMAGEL, 2.0f, 0, 1.0f); } else { anm_init(i_this, e_rdb_class::BCK_RB_RDAMAGER, 2.0f, 0, 1.0f); } - i_this->field_0x680 = iVar1; + i_this->field_0x680 = anm_id; } if (i_this->mAction != ACTION_WB_RUN) { @@ -4303,15 +4497,16 @@ static void damage_check(e_rd_class* i_this) { } } - for (int i = 0; i < 3; i++) { + for (int j = 0; j <= 2; j++) { if (a_this->health <= 1) { - i_this->field_0xd58[i].SetTgHitMark((CcG_Tg_HitMark)3); + i_this->field_0xd58[j].SetTgHitMark(CcG_Tg_UNK_MARK_3); } } } } static void* s_other_sub(void* i_actor, void* i_data) { + UNUSED(i_data); if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_RD && ((e_rd_class*)i_actor)->field_0x5b7 != 6) { return i_actor; } @@ -4320,11 +4515,12 @@ static void* s_other_sub(void* i_actor, void* i_data) { } static void* s_ep_sub(void* i_actor, void* i_data) { + UNUSED(i_data); fopAc_ac_c* player = dComIfGp_getPlayer(0); if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_Obj_Lv1Cdl00) { if (!fopAcM_isSwitch((fopAc_ac_c*)i_actor, fopAcM_GetParam(i_actor) & 0xFF)) { - f32 fVar1, fVar2; + f32 fVar2, fVar1; fVar2 = ((fopAc_ac_c*)i_actor)->current.pos.x - player->current.pos.x; fVar1 = ((fopAc_ac_c*)i_actor)->current.pos.z - player->current.pos.z; if (JMAFastSqrt(fVar2 * fVar2 + fVar1 * fVar1) < NREG_F(17) + 600.0f) { @@ -4338,6 +4534,7 @@ static void* s_ep_sub(void* i_actor, void* i_data) { static s8 e_rd_yagura(e_rd_class* i_this) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; + cXyz unused_vec_0, unused_vec_1; int frame = i_this->mpModelMorf->getFrame(); s8 rv = 1; s8 bVar1 = 0; @@ -4379,14 +4576,15 @@ static s8 e_rd_yagura(e_rd_class* i_this) { anm_init(i_this, BCK_RD_SHOUT, 5.0f, 0, 1.0f); i_this->mMode = 10; i_this->mSound.startCreatureVoice(Z2SE_EN_RD_V_FIND_LINK_YELL, -1); - dKy_Sound_set(a_this->current.pos, 100, fopAcM_GetID(a_this), 3); + dKy_Sound_set(a_this->current.pos, 100, fopAcM_GetID(i_this), 3); } break; case 10: if (i_this->mpModelMorf->isStop()) { anm_init(i_this, BCK_RD_SHOOT_READY, 5.0f, 0, 1.0f); - i_this->mpMorfBowAnm->setAnm((J3DAnmTransform*)dComIfG_getObjectRes(i_this->mResName, 7), 0, 5.0f, 0.9f, 0.0f, -1.0f); + i_this->mpMorfBowAnm->setAnm((J3DAnmTransform*)dComIfG_getObjectRes(i_this->mResName, 7), + 0, 5.0f, 0.9f + TREG_F(3), 0.0f, -1.0f); i_this->mMode = 11; a_this->speedF = 0.0f; } @@ -4423,12 +4621,12 @@ static s8 e_rd_yagura(e_rd_class* i_this) { break; case 13: - if (frame <= 3) { + if (frame <= 3 + XREG_S(5)) { i_this->field_0x9a2 = 1; i_this->field_0x9c8 = 4; } - if (frame == 2) { + if (frame == 2 + XREG_S(7)) { i_this->field_0x9a3 = 1; } @@ -4436,7 +4634,7 @@ static s8 e_rd_yagura(e_rd_class* i_this) { if (pl_check(i_this, 10000.0f, 0x7FFF)) { i_this->mMode = 10; anm_init(i_this, BCK_RD_SHOUT, 5.0f, 0, 1.0f); - dKy_Sound_set(a_this->current.pos, 100, fopAcM_GetID(a_this), 3); + dKy_Sound_set(a_this->current.pos, 100, fopAcM_GetID(i_this), 3); } else { i_this->mMode = 0; } @@ -4450,7 +4648,7 @@ static s8 e_rd_yagura(e_rd_class* i_this) { if (fabsf(i_this->mObjAcch.GetGroundH() - a_this->home.pos.y) > 10.0f) { i_this->mAction = ACTION_DAMAGE; i_this->mMode = 0; - i_this->field_0xa0e = a_this->shape_angle.y; + i_this->field_0xa0c.y = s16(a_this->shape_angle.y); a_this->speed.y = 20.0f; i_this->field_0x9ec = -20.0f; i_this->field_0x998 = 1000; @@ -4463,8 +4661,9 @@ static s8 e_rd_yagura(e_rd_class* i_this) { anm_init(i_this, BCK_RD_WAIT01, 4.0f, 2, 1.0f); i_this->field_0x990[0] = 30; i_this->mMode = 5; - if (S_find == 0 && (u8)lbl_70_bss_AE == 0 && !daPy_getPlayerActorClass()->checkBoarRide() && !dComIfGp_event_runCheck() && - i_this->mDemoMode == 0 && fpcM_Search(s_other_sub, i_this) != NULL) { + if (S_find == 0 && !lbl_70_bss_AE && !daPy_getPlayerActorClass()->checkBoarRide() + && !dComIfGp_event_runCheck() && i_this->mDemoMode == 0 + && fpcM_Search(s_other_sub, i_this) != NULL) { i_this->mDemoMode = 1; } } @@ -4478,22 +4677,22 @@ static s8 e_rd_yagura(e_rd_class* i_this) { static void e_rd_jyunkai(e_rd_class* i_this) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; + int frame = i_this->mpModelMorf->getFrame(); // unused f32 fVar1 = 0.0f; s16 sVar1 = 0x4000; cXyz sp58, sp64; - dPnt* points; - s8 sVar3; switch (i_this->mMode) { - case 0: + case 0: { anm_init(i_this, BCK_RD_WALK, 10.0f, 2, 1.0f); i_this->mMode = 1; - points = i_this->mPath->m_points; - sVar3 = i_this->field_0xb00; - i_this->field_0x5c0.x = points[sVar3].m_position.x; - i_this->field_0x5c0.y = points[sVar3].m_position.y; - i_this->field_0x5c0.z = points[sVar3].m_position.z; - // fallthrough + dPnt* pnt_p = i_this->mPath->m_points; + pnt_p += i_this->field_0xb00; + i_this->field_0x5c0.x = pnt_p->m_position.x; + i_this->field_0x5c0.y = pnt_p->m_position.y; + i_this->field_0x5c0.z = pnt_p->m_position.z; + } + // fallthrough case 1: fVar1 = l_HIO.movement_speed; sp58 = i_this->field_0x5c0 - a_this->current.pos; @@ -4502,7 +4701,7 @@ static void e_rd_jyunkai(e_rd_class* i_this) { if (sp58.abs() < 50.0f) { i_this->field_0xb00 += i_this->field_0xb01; if (i_this->field_0xb00 >= (i_this->mPath->m_num & 0xFF)) { - if ((i_this->mPath->m_closed & 1) != 0) { + if (dPath_ChkClose(i_this->mPath)) { i_this->field_0xb00 = 0; } else { i_this->field_0xb01 = 0xFF; @@ -4518,7 +4717,7 @@ static void e_rd_jyunkai(e_rd_class* i_this) { anm_init(i_this, BCK_RD_KYORO2, 10.0f, 2, 1.0f); } break; - + case 2: sVar1 = 0x6000; @@ -4530,13 +4729,12 @@ static void e_rd_jyunkai(e_rd_class* i_this) { case 10: anm_init(i_this, BCK_RD_SHOUT, 5.0f, 0, 1.0f); i_this->mMode = 11; - dKy_Sound_set(a_this->current.pos, 100, fopAcM_GetID(a_this), 3); + dKy_Sound_set(a_this->current.pos, 100, fopAcM_GetID(i_this), 3); S_find = 20; break; case 11: cLib_addCalcAngleS2(&a_this->current.angle.y, i_this->mPlayerAngleY, 2, 0x800); - if (i_this->mpModelMorf->isStop()) { i_this->mAction = ACTION_FIGHT_RUN; i_this->mMode = -10; @@ -4647,7 +4845,7 @@ static void e_rd_sleep(e_rd_class* i_this) { case 10: anm_init(i_this, BCK_RD_SHOUT, 5.0f, 0, 1.0f); i_this->mMode = 11; - dKy_Sound_set(a_this->current.pos, 100, fopAcM_GetID(a_this), 3); + dKy_Sound_set(a_this->current.pos, 100, fopAcM_GetID(i_this), 3); S_find = 20; break; @@ -4665,7 +4863,8 @@ static void e_rd_sleep(e_rd_class* i_this) { if (i_this->mMode < 5) { for (int i = 0; i <= 2; i++) { if (i_this->field_0xd58[i].ChkCoHit()) { - if (daPy_getPlayerActorClass() == dCc_GetAc(i_this->field_0xd58[i].GetCoHitObj()->GetAc())) { + cCcD_Obj* co_hit_obj_p = i_this->field_0xd58[i].GetCoHitObj(); + if (daPy_getPlayerActorClass() == dCc_GetAc(co_hit_obj_p->GetAc())) { cVar1 = 2; break; } @@ -4701,6 +4900,7 @@ static void e_rd_sleep(e_rd_class* i_this) { static int rd_count; static void* s_tag_sub(void* i_actor, void* i_data) { + UNUSED(i_data); if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_RD && ((e_rd_class*)i_actor)->field_0x5ba != 0) { rd_count++; } @@ -4709,16 +4909,15 @@ static void* s_tag_sub(void* i_actor, void* i_data) { } static void e_rd_tag(e_rd_class* i_this) { - // FAKEMATCH fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; fopAc_ac_c* player = dComIfGp_getPlayer(0); i_this->field_0x9ad = 0; i_this->field_0x998 = 10; - if (i_this->mMode) { - // Fakematch to prevent the compiler from optimizing out the unused comparison - a_this->speedF = a_this->speedF; + switch (i_this->mMode) { + case 0: + break; } if (S_find != 0 && (i_this->field_0x970 & 31) == 0 && !dComIfGp_event_runCheck() && i_this->mPlayerDistance < 3000.0f && i_this->mPlayerDistance > 500.0f && @@ -4745,6 +4944,7 @@ static void e_rd_tag(e_rd_class* i_this) { } static void e_rd_reg(e_rd_class* i_this) { + fopEn_enemy_c* a_this = &i_this->actor; fopAc_ac_c* player = dComIfGp_getPlayer(0); i_this->field_0x9ad = 0; @@ -4765,15 +4965,13 @@ static void e_rd_reg(e_rd_class* i_this) { return; } - if (i_this->mDemoMode != 0) { - return; - } - - f32 fVar1, fVar2; - fVar1 = player->current.pos.x - -5551.0f; - fVar2 = player->current.pos.z - 5525.0f; - if (JMAFastSqrt(fVar1 * fVar1 + fVar2 * fVar2) < 600.0f) { - i_this->mDemoMode = 20; + if (i_this->mDemoMode == 0) { + f32 fVar1, fVar2; + fVar1 = player->current.pos.x - -5551.0f; + fVar2 = player->current.pos.z - 5525.0f; + if (JMAFastSqrt(fVar1 * fVar1 + fVar2 * fVar2) < 600.0f) { + i_this->mDemoMode = 20; + } } } @@ -4798,9 +4996,10 @@ static void action(e_rd_class* i_this) { i_this->field_0x980 = NREG_F(7) + 10000.0f; } - if (data_80519200 != 0) { + if (desert_substage != 0) { if (i_this->field_0x9a0 == 0) { - int iVar1 = dKy_getEnvlight()->daytime / 15.0f; + dScnKy_env_light_c* env_light_p = dKy_getEnvlight(); + int iVar1 = env_light_p->daytime / 15.0f; if (iVar1 >= 6 && iVar1 <= 17) { i_this->field_0x980 = 10000.0f; } @@ -4809,9 +5008,9 @@ static void action(e_rd_class* i_this) { } } - s16 sVar1 = i_this->mAction; + s16 sp_0x2c = i_this->mAction; damage_check(i_this); - if (sVar1 == ACTION_WB_SEARCH && i_this->mAction != ACTION_WB_SEARCH) { + if (sp_0x2c == ACTION_WB_SEARCH && i_this->mAction != ACTION_WB_SEARCH) { e_wb_class* bullbo_p = (e_wb_class*)fopAcM_SearchByID(i_this->mWbActorID); if (bullbo_p != NULL && bullbo_p->mActionID == 1) { bullbo_p->mActionID = 0; @@ -4822,7 +5021,7 @@ static void action(e_rd_class* i_this) { s8 cVar2 = 0; s8 bVar1 = 1; s8 cVar3 = 0; - a_this->offHeadLockFlg(); + i_this->actor.offHeadLockFlg(); switch (i_this->mAction) { case ACTION_NORMAL: @@ -5015,7 +5214,7 @@ static void action(e_rd_class* i_this) { if (cVar2 != 0) { i_this->mSound.setLinkSearch(true); - if (data_80519200 != 0 && (i_this->field_0x5b7 == 6 || i_this->field_0x5b7 == 7 || i_this->field_0x5b7 == 8)) { + if (desert_substage != 0 && (i_this->field_0x5b7 == 6 || i_this->field_0x5b7 == 7 || i_this->field_0x5b7 == 8)) { S_find = 20; } } else { @@ -5023,7 +5222,7 @@ static void action(e_rd_class* i_this) { } if (cVar1) { - if (data_80519200 != 0) { + if (desert_substage != 0) { if (!dComIfGp_event_runCheck() && i_this->field_0x99c == 0 && i_this->mPlayerDistance > 700.0f && i_this->field_0x5bb != 0) { fopAcM_delete(a_this); } @@ -5040,7 +5239,7 @@ static void action(e_rd_class* i_this) { if (i_this->field_0x9bc == 0) { a_this->attention_info.distances[2] = 3; if (i_this->field_0x9ec) { - cMtx_YrotS(*calc_mtx, i_this->field_0xa0e); + cMtx_YrotS(*calc_mtx, i_this->field_0xa0c.y); if (i_this->field_0xaf0 == 0) { sp25c.z = i_this->field_0x9ec; } else { @@ -5083,13 +5282,12 @@ static void action(e_rd_class* i_this) { cMtx_YrotS(*calc_mtx, i_this->field_0x9f4); MtxPosition(&sp25c, &sp268); a_this->current.pos += sp268; - cLib_addCalc0(&i_this->field_0x9f0, 1.0f, 7.0f); + cLib_addCalc0(&i_this->field_0x9f0, 1.0f, 7.0f + TREG_F(12)); } } else { a_this->attention_info.distances[fopAc_attn_BATTLE_e] = 34; fopAc_ac_c* bullboActor = fopAcM_SearchByID(i_this->mWbActorID); - e_wb_class* bullbo = (e_wb_class*)bullboActor; - if (bullbo == NULL) { + if (bullboActor == NULL) { i_this->mAction = ACTION_NORMAL; i_this->mMode = 0; return; @@ -5103,6 +5301,7 @@ static void action(e_rd_class* i_this) { a_this->speed.set(0.0f, 0.0f, 0.0f); } + e_wb_class* bullbo = (e_wb_class*)bullboActor; if (i_this->field_0x9be == 1) { MTXCopy(bullbo->mpModelMorf->getModel()->getAnmMtx(bullbo->field_0x688 + 15), *calc_mtx); } else { @@ -5118,8 +5317,7 @@ static void action(e_rd_class* i_this) { if (i_this->field_0x9bc == 2) { a_this->current.pos = i_this->field_0x9b0; - a_this->current.angle = bullboActor->shape_angle; - a_this->shape_angle = a_this->current.angle; + a_this->shape_angle = a_this->current.angle = bullboActor->shape_angle; sp25c.x = 10.0f; MtxPosition(&sp25c, &sp268); @@ -5128,7 +5326,7 @@ static void action(e_rd_class* i_this) { a_this->shape_angle.x = a_this->current.angle.x; if (i_this->field_0x9be == 1) { - bullbo->field_0x1434 = fopAcM_GetID(a_this); + bullbo->field_0x1434 = fopAcM_GetID(i_this); } } else { sp25c = i_this->field_0x9b0 - a_this->current.pos; @@ -5149,7 +5347,7 @@ static void action(e_rd_class* i_this) { } i_this->field_0x9c0 += i_this->field_0x9c4; - i_this->field_0x9c4 -= 4.5f; + i_this->field_0x9c4 -= 4.5f + TREG_F(5); if (i_this->field_0x9c0 <= 0.0f) { i_this->field_0x9c0 = 0.0f; @@ -5157,10 +5355,12 @@ static void action(e_rd_class* i_this) { } } - s16 sVar2 = 0; + s16 sp_0x2a = 0; + s16 sp_0x28 = 0; + s16 sp_0x26 = 16000; i_this->field_0x9a4 = 0; cXyz sp274; - s16 sVar3 = 0x1000; + s16 sp_0x24 = 0x1000; if (i_this->field_0x9c8 == -1) { cMtx_YrotS(*calc_mtx, a_this->shape_angle.y); @@ -5171,58 +5371,59 @@ static void action(e_rd_class* i_this) { sp274 += a_this->current.pos; i_this->field_0x9c8 = 2; - sVar3 = KREG_S(7) + 0x800; + sp_0x24 = KREG_S(7) + 0x800; } else if (i_this->field_0x9c8 >= 11) { - i_this->field_0x9c8 -= 10; + i_this->field_0x9c8 -= (s8) 10; sp274 = i_this->field_0x9d4; } else { sp274 = actor->eyePos; } if (i_this->field_0x9bc == 2) { - sVar3 = 0x1000; + sp_0x24 = 0x1000; } if (i_this->field_0x9c8 != 0) { sp25c = sp274 - a_this->current.pos; sp25c.y += TREG_F(2) + -150.0f; - s16 sVar4 = cM_atan2s(sp25c.x, sp25c.z) - a_this->shape_angle.y; - sVar2 = a_this->shape_angle.x + cM_atan2s(sp25c.y, JMAFastSqrt(sp25c.x * sp25c.x + sp25c.z * sp25c.z)); + sp_0x2a = cM_atan2s(sp25c.x, sp25c.z) - a_this->shape_angle.y; + sp_0x28 = a_this->shape_angle.x + cM_atan2s(sp25c.y, JMAFastSqrt(sp25c.x * sp25c.x + sp25c.z * sp25c.z)); if (i_this->field_0x9c8 <= 2) { - if (sVar4 > 0x3E80) { - sVar4 = 16000; - } else if (sVar4 < -16000) { - sVar4 = -16000; + if (sp_0x2a > sp_0x26) { + sp_0x2a = sp_0x26; + } else if (sp_0x2a < (s16) -sp_0x26) { + sp_0x2a = -sp_0x26; } - if (sVar2 > 0x3E80) { - sVar2 = 16000; - } else if (sVar2 < -16000) { - sVar2 = -16000; + if (sp_0x28 > sp_0x26) { + sp_0x28 = sp_0x26; + } else if (sp_0x28 < (s16) -sp_0x26) { + sp_0x28 = -sp_0x26; } - cLib_addCalcAngleS2(&i_this->field_0x9ca, sVar4, 2, sVar3); + cLib_addCalcAngleS2(&i_this->field_0x9ca, sp_0x2a, 2, sp_0x24); } else if (i_this->field_0x9c8 == 5) { if ((i_this->field_0x970 & 15) == 0 && cM_rndF2(1.0f) < 0.3f) { i_this->field_0x9d0 = cM_rndFX2(2000.0f); } } else { - sVar1 = XREG_S(5) + 30000; - if (sVar1 < sVar4) { - sVar4 = sVar1; + sp_0x26 = XREG_S(5) + 30000; + s16 sp_0x22 = (XREG_S(6) + 25000); + if (sp_0x2a > sp_0x26) { + sp_0x2a = sp_0x26; i_this->field_0x9a4 = 1; - } else if (sVar4 < -(XREG_S(6) + 25000)) { - sVar4 = -(XREG_S(6) + 25000); + } else if (sp_0x2a < (s16) -sp_0x22) { + sp_0x2a = -sp_0x22; i_this->field_0x9a4 = 1; } - cLib_addCalcAngleS2(&i_this->field_0x9ca, sVar4 / 2, 2, 0x1000); - sVar2 = -cM_atan2s(sp25c.y, JMAFastSqrt(sp25c.x * sp25c.x + sp25c.z * sp25c.z)); - if (sVar2 > 0x2AF8) { - sVar2 = 11000; + cLib_addCalcAngleS2(&i_this->field_0x9ca, sp_0x2a / 2, 2, 0x1000); + sp_0x28 = -cM_atan2s(sp25c.y, JMAFastSqrt(sp25c.x * sp25c.x + sp25c.z * sp25c.z)); + if (sp_0x28 > 0x2AF8) { + sp_0x28 = 11000; i_this->field_0x9a4 = 1; - } else if (sVar2 < -8000) { - sVar2 = -8000; + } else if (sp_0x28 < -8000) { + sp_0x28 = -8000; i_this->field_0x9a4 = 1; } } @@ -5231,20 +5432,20 @@ static void action(e_rd_class* i_this) { i_this->field_0x9d0 = 0; } - cLib_addCalcAngleS2(&i_this->field_0x9cc, sVar2, 2, sVar3); + cLib_addCalcAngleS2(&i_this->field_0x9cc, sp_0x28, 2, sp_0x24); cLib_addCalcAngleS2(&i_this->field_0x9ce, i_this->field_0x9d0, 4, 0x500); if (fabsf(i_this->field_0xa2c) > 1.0f) { i_this->field_0xa74[1].x = i_this->field_0xa2c * cM_scos(i_this->field_0xa30) * (BREG_F(0) + 70.0f); i_this->field_0xa74[2].x += i_this->field_0xa74[1].x; - cLib_addCalc0(&i_this->field_0xa2c, 1.0f, 3.0f); - i_this->field_0xa30 += 4000; + cLib_addCalc0(&i_this->field_0xa2c, 1.0f, 3.0f + BREG_F(1)); + i_this->field_0xa30 += s16(4000 + BREG_S(0)); } if (fabsf(i_this->field_0xa24) > 1.0f) { i_this->field_0xa74[0].x = i_this->field_0xa24 * cM_scos(i_this->field_0xa28) * (BREG_F(2) + 70.0f); - cLib_addCalc0(&i_this->field_0xa24, 1.0f, 3.0f); - i_this->field_0xa28 += 4000; + cLib_addCalc0(&i_this->field_0xa24, 1.0f, 3.0f + BREG_F(3)); + i_this->field_0xa28 += s16(4000 + BREG_S(1)); } if (a_this->speed.y < 0.0f && i_this->mObjAcch.ChkGroundHit()) { @@ -5253,45 +5454,45 @@ static void action(e_rd_class* i_this) { } if (i_this->field_0x9ec) { - sVar1 = i_this->field_0xa0e - a_this->shape_angle.y; - i_this->field_0xa74[3].y = 0x4000 - sVar1; + sp_0x2a = i_this->field_0xa0c.y - a_this->shape_angle.y; + i_this->field_0xa74[3].y = -sp_0x2a + 0x4000; if (i_this->field_0xa74[3].y > 0x1770) { i_this->field_0xa74[3].y = 6000; } else if (i_this->field_0xa74[3].y < -12000) { i_this->field_0xa74[3].y = -12000; } - i_this->field_0xa74[4].y = 0x4000 - sVar1; + i_this->field_0xa74[4].y = -sp_0x2a + 0x4000; if (i_this->field_0xa74[4].y > 0x3A98) { i_this->field_0xa74[4].y = 15000; } else if (i_this->field_0xa74[4].y < 0) { i_this->field_0xa74[4].y = 0; } - i_this->field_0xa74[5].y = sVar1 + 0x4000; + i_this->field_0xa74[5].y = sp_0x2a + 0x4000; if (i_this->field_0xa74[5].y > 0x1770) { i_this->field_0xa74[5].y = 6000; } else if (i_this->field_0xa74[5].y < -12000) { i_this->field_0xa74[5].y = -12000; } - i_this->field_0xa74[6].y = sVar1 + 0x4000; + i_this->field_0xa74[6].y = sp_0x2a + 0x4000; if (i_this->field_0xa74[6].y > 0x3A98) { i_this->field_0xa74[6].y = 15000; } else if (i_this->field_0xa74[6].y < 0) { i_this->field_0xa74[6].y = 0; } - cMtx_YrotS(*calc_mtx, sVar1); + cMtx_YrotS(*calc_mtx, sp_0x2a); sp25c.x = 0.0f; sp25c.y = 0.0f; sp25c.z = 12000.0f; MtxPosition(&sp25c, &sp268); - i_this->field_0xae6 = -sp268.x; - i_this->field_0xae4 = -sp268.z * 1.3f; + i_this->field_0xae4.y = -sp268.x; + i_this->field_0xae4.x = -sp268.z * 1.3f; - if (i_this->field_0xae4 > 10000) { - i_this->field_0xae4 = 10000; + if (i_this->field_0xae4.x > 10000) { + i_this->field_0xae4.x = 10000; } } @@ -5306,19 +5507,20 @@ static void action(e_rd_class* i_this) { cLib_addCalcAngleS2(&i_this->field_0xa32[i].x, i_this->field_0xa74[i].x, 2, j_spd[i]); cLib_addCalcAngleS2(&i_this->field_0xa32[i].y, i_this->field_0xa74[i].y, 2, j_spd[i]); cLib_addCalcAngleS2(&i_this->field_0xa32[i].z, i_this->field_0xa74[i].z, 2, j_spd[i]); - i_this->field_0xa74[i].z = 0; - i_this->field_0xa74[i].x = 0; + i_this->field_0xa74[i].x = i_this->field_0xa74[i].z = 0; if (i >= 3 && i <= 6) { - if (i_this->field_0xacc[i] == 0) { + if (i_this->field_0xad2[i - 3] == 0) { + s16 sp_0x20; if (i == 4 || i == 6) { - sVar3 = 0x600; + sp_0x20 = 0x600; } else { - sVar3 = 0x800; + sp_0x20 = 0x800; } - cLib_addCalcAngleS2(&i_this->field_0xa74[i].y, 0, 1, sVar3); + + cLib_addCalcAngleS2(&i_this->field_0xa74[i].y, 0, 1, sp_0x20); } else { - i_this->field_0xacc[i]--; + --i_this->field_0xad2[i - 3]; } } else { i_this->field_0xa74[i].y = 0; @@ -5329,17 +5531,16 @@ static void action(e_rd_class* i_this) { } } - cLib_addCalc0(&i_this->field_0xab8, 1.0f, 100.0f); - cLib_addCalcAngleS2(&i_this->field_0xae0, i_this->field_0xae6, 2, 0x800); - cLib_addCalcAngleS2(&i_this->field_0xade, i_this->field_0xae4, 2, 0x800); - i_this->field_0xae4 = 0; - i_this->field_0xae6 = 0; - s32 sVar4 = 0; + cLib_addCalc0(&i_this->field_0xab8, 1.0f, 100.0f + BREG_F(11)); + cLib_addCalcAngleS2(&i_this->field_0xade.y, i_this->field_0xae4.y, 2, 0x800); + cLib_addCalcAngleS2(&i_this->field_0xade.x, i_this->field_0xae4.x, 2, 0x800); + i_this->field_0xae4.y = i_this->field_0xae4.x = 0; + s16 sVar4 = 0; s16 sVar5 = 0; if (i_this->field_0xa1e != 0) { i_this->field_0xa1e--; - if (i_this->field_0xa0c != 0) { + if (i_this->field_0xa0c.x != 0) { Vec sp280; cXyz sp28c, sp298; dBgS_GndChk gnd_chk; @@ -5360,8 +5561,11 @@ static void action(e_rd_class* i_this) { gnd_chk.SetPos(&sp280); sp280.y = dComIfG_Bgsp().GroundCross(&gnd_chk); + f32 x_diff, y_diff, z_diff; if (sp280.y != -G_CM3D_F_INF) { - sVar5 = -cM_atan2s(sp280.y - sp28c.y, sp280.z - sp28c.z); + y_diff = sp280.y - sp28c.y; + z_diff = sp280.z - sp28c.z; + sVar5 = -cM_atan2s(y_diff, z_diff); if (sVar5 > 0x3000 || sVar5 < -0x3000) { sVar5 = 0; } @@ -5374,7 +5578,9 @@ static void action(e_rd_class* i_this) { sp280.y = dComIfG_Bgsp().GroundCross(&gnd_chk); if (sp280.y != -G_CM3D_F_INF) { - sVar4 = cM_atan2s(sp280.y - sp28c.y, sp280.x - sp28c.x); + y_diff = sp280.y - sp28c.y; + x_diff = sp280.x - sp28c.x; + sVar4 = (s16) cM_atan2s(y_diff, x_diff); if (sVar4 > 0x3000 || sVar4 < -0x3000) { sVar4 = 0; } @@ -5403,13 +5609,13 @@ static void action(e_rd_class* i_this) { a_this->current.pos += sp268; } - i_this->field_0xa18 = sVar5; - i_this->field_0xa1c = sVar4; + i_this->field_0xa18.x = sVar5; + i_this->field_0xa18.z = sVar4; } } - cLib_addCalcAngleS2(&i_this->field_0xa12, i_this->field_0xa18, 1, 0x400); - cLib_addCalcAngleS2(&i_this->field_0xa16, i_this->field_0xa1c, 1, 0x400); + cLib_addCalcAngleS2(&i_this->field_0xa12.x, i_this->field_0xa18.x, 1, 0x400); + cLib_addCalcAngleS2(&i_this->field_0xa12.z, i_this->field_0xa18.z, 1, 0x400); if (i_this->field_0x129c != 0) { i_this->field_0x129c--; @@ -5419,7 +5625,8 @@ static void action(e_rd_class* i_this) { } if (i_this->field_0x125d != 0) { - MTXCopy(i_this->mpModelMorf->getModel()->getAnmMtx(11), *calc_mtx); + J3DModel* model_p = i_this->mpModelMorf->getModel(); + MTXCopy(model_p->getAnmMtx(11), *calc_mtx); sp25c.set(0.0f, 0.0f, 0.0f); MtxPosition(&sp25c, &sp268); @@ -5434,11 +5641,12 @@ static void action(e_rd_class* i_this) { 0x825A, }; - cXyz sp2c8(1.0f, 1.0f, 1.0f); + f32 reg_f30 = 1.0f; + cXyz prtcl_scale(reg_f30, reg_f30, reg_f30); csXyz cStack_330(0, 0, 0); for (int i = 0; i < 3; i++) { i_this->field_0x1268[i] = dComIfGp_particle_set(i_this->field_0x1268[i], w_eff_name[i], &sp268, &a_this->tevStr, - &cStack_330, &sp2c8, 0xFF, 0, -1, NULL, NULL, NULL); + &cStack_330, &prtcl_scale, 0xFF, 0, -1, NULL, NULL, NULL); } } else { fopAcM_effSmokeSet1(&i_this->field_0x1260, &i_this->field_0x1264, &sp268, NULL, 1.3f, &a_this->tevStr, 1); @@ -5497,15 +5705,20 @@ static void fire_eff_set(e_rd_class* i_this) { } static void* s_wb_sub2(void* i_actor, void* i_data) { - if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_WB && target_info_count < 2) { - target_info[target_info_count] = (fopAc_ac_c*)i_actor; - target_info_count++; + if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_WB) { + e_wb_class* unused_wb_p = (e_wb_class*) i_actor; + fopAc_ac_c* unused_actor_p = (fopAc_ac_c*) i_data; + if (target_info_count < 2) { + target_info[target_info_count] = (fopAc_ac_c*) i_actor; + target_info_count++; + } } return NULL; } static void* s_lv9dn_sub(void* i_actor, void* i_data) { + UNUSED(i_data); if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_DN && ((e_dn_class*)i_actor)->status != 0) { ((e_dn_class*)i_actor)->status = 0; return i_actor; @@ -5515,6 +5728,7 @@ static void* s_lv9dn_sub(void* i_actor, void* i_data) { } static void* s_lv9dn_sub2(void* i_actor, void* i_data) { + UNUSED(i_data); if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_DN && ((e_dn_class*)i_actor)->status == 0) { ((e_dn_class*)i_actor)->status = 1; ((e_dn_class*)i_actor)->mode = 0; @@ -5524,6 +5738,7 @@ static void* s_lv9dn_sub2(void* i_actor, void* i_data) { } static void* s_lv9dn_sub3(void* i_actor, void* i_data) { + UNUSED(i_data); if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_DN) { ((e_dn_class*)i_actor)->mode = 2; } @@ -5532,6 +5747,7 @@ static void* s_lv9dn_sub3(void* i_actor, void* i_data) { } static void* s_lv9rd_sub(void* i_actor, void* i_data) { + UNUSED(i_data); if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_RD && ((e_rd_class*)i_actor)->field_0xafb != 0) { ((e_rd_class*)i_actor)->field_0xafb = 0; } @@ -5542,25 +5758,26 @@ static void* s_lv9rd_sub(void* i_actor, void* i_data) { static u8 data_80519338; static void* s_lv9rd_sub2(void* i_actor, void* i_data) { - if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_RD && ((e_rd_class*)i_actor)->field_0x5b7 == data_80519338 && ((e_rd_class*)i_actor)->mAction != ACTION_DROP) { - e_rd_class* i_this = (e_rd_class*)i_actor; - fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; - - i_this->mAction = ACTION_DROP; - i_this->mMode = 2; - anm_init(i_this, BCK_RD_FURA2, 2.0f, 2, 1.0f); - i_this->field_0x990[0] = 1000; - i_this->field_0x5cc = a_this->home.angle.y; - dComIfGp_setHitMark(1, a_this, &a_this->eyePos, NULL, NULL, 0); - i_this->mSound.startCollisionSE(Z2SE_HIT_WOOD_WEAPON, 31); + UNUSED(i_data); + if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_RD + && ((e_rd_class*)i_actor)->field_0x5b7 == data_80519338 && ((e_rd_class*)i_actor)->mAction != ACTION_DROP) { + ((e_rd_class*)i_actor)->mAction = ACTION_DROP; + ((e_rd_class*)i_actor)->mMode = 2; + anm_init((e_rd_class*)i_actor, BCK_RD_FURA2, 2.0f, 2, 1.0f); + ((e_rd_class*)i_actor)->field_0x990[0] = 1000; + ((e_rd_class*)i_actor)->field_0x5cc = ((fopEn_enemy_c*)i_actor)->home.angle.y; + dComIfGp_setHitMark(1, ((fopEn_enemy_c*)i_actor), &((fopEn_enemy_c*)i_actor)->eyePos, NULL, NULL, 0); + ((e_rd_class*)i_actor)->mSound.startCollisionSE(Z2SE_HIT_WOOD_WEAPON, 31); return i_actor; } - + return NULL; } static void* s_lv9rd_sub3(void* i_actor, void* i_data) { - if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_RD && (((e_rd_class*)i_actor)->field_0x5b7 == 13 || ((e_rd_class*)i_actor)->field_0x5b7 == 14)) { + UNUSED(i_data); + if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_RD + && (((e_rd_class*)i_actor)->field_0x5b7 == 13 || ((e_rd_class*)i_actor)->field_0x5b7 == 14)) { ((e_rd_class*)i_actor)->field_0x9a4 = 1; ((e_rd_class*)i_actor)->field_0x980 = 50000.0f; } @@ -5569,6 +5786,7 @@ static void* s_lv9rd_sub3(void* i_actor, void* i_data) { } static void* s_lv9arrow_sub(void* i_actor, void* i_data) { + UNUSED(i_data); if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_ARROW) { ((e_arrow_class*)i_actor)->field_0xa14 = 1; } @@ -5577,6 +5795,7 @@ static void* s_lv9arrow_sub(void* i_actor, void* i_data) { } static void* s_lv9arrow_sub2(void* i_actor, void* i_data) { + UNUSED(i_data); if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_ARROW) { ((e_arrow_class*)i_actor)->field_0xa14 = 0; ((e_arrow_class*)i_actor)->mAction = ACTION_BOW_RUN; @@ -5613,7 +5832,8 @@ static void demo_camera(e_rd_class* i_this) { daNPC_TK_c* hawk_p = (daNPC_TK_c*) fopAcM_SearchByName(PROC_NPC_TK); fopAc_ac_c* a_hwk = hawk_p; cXyz sp38, sp44, sp50, sp5c; - s8 bVar1 = 0; + bool sp_0x9 = true; // unused + s8 bVar1 = false; s16 sVar1 = 0; switch (i_this->mDemoMode + 1) { @@ -5631,23 +5851,24 @@ static void demo_camera(e_rd_class* i_this) { camera->mCamera.SetTrimSize(3); i_this->mDemoCamCenter = a_this->current.pos; - i_this->mDemoCamCenter.y = a_this->eyePos.y - 80.0f + 60.0f; + i_this->mDemoCamCenter.y = a_this->eyePos.y - 80.0f + 60.0f + TREG_F(5); i_this->field_0x1300 = 2000.0f; a_this->current.angle.y = i_this->mPlayerAngleY; // fallthrough case 3: if (i_this->field_0x12a6 < 85) { - mDoMtx_stack_c::YrotS(a_this->current.angle.y); + mDoMtx_stack_c::YrotS(s16(a_this->current.angle.y)); mDoMtx_stack_c::XrotM(0x640); sp38.x = 0.0f; sp38.y = TREG_F(3); sp38.z = i_this->field_0x1300; mDoMtx_stack_c::multVec(&sp38, &i_this->mDemoCamEye); i_this->mDemoCamEye += a_this->current.pos; - cLib_addCalc2(&i_this->mDemoCamCenter.y, a_this->eyePos.y - 80.0f + 60.0f, 0.1f, 20.0f); + cLib_addCalc2(&i_this->mDemoCamCenter.y, a_this->eyePos.y - 80.0f + 60.0f + TREG_F(5), 0.1f, 20.0f); cLib_addCalc2(&i_this->field_0x1300, 400.0f, 0.5f, 150.0f); - } else if (data_80519200 == 124) { - lbl_70_bss_AE = 1; + } else if (desert_substage == 124) { + // main Gerudo Desert + lbl_70_bss_AE = true; target_info_count = 0; for (int i = 0; i < 2; i++) { target_info[i] = NULL; @@ -5657,16 +5878,16 @@ static void demo_camera(e_rd_class* i_this) { if (target_info[0] != NULL && target_info[1] != NULL) { i_this->mDemoCamCenter = target_info[0]->current.pos + ((target_info[1]->current.pos - target_info[0]->current.pos) * 0.5f); - i_this->mDemoCamCenter.y += 200.0f; + i_this->mDemoCamCenter.y += 200.0f + BREG_F(7); if (i_this->field_0x12a6 == 85) { i_this->mDemoCamEye = i_this->mDemoCamCenter; - i_this->mDemoCamEye.y += 100.0f; - i_this->mDemoCamEye.z += 900.0f; + i_this->mDemoCamEye.y += 100.0f + VREG_F(8); + i_this->mDemoCamEye.z += 900.0f + VREG_F(9); } else { cLib_addCalc2(&i_this->mDemoCamEye.x, i_this->mDemoCamCenter.x, 0.2f, 100.0f); - cLib_addCalc2(&i_this->mDemoCamEye.y, i_this->mDemoCamCenter.y + 100.0f, 0.2f, 100.0f); - cLib_addCalc2(&i_this->mDemoCamEye.z, i_this->mDemoCamCenter.z + 900.0f, 0.2f, 100.0f); + cLib_addCalc2(&i_this->mDemoCamEye.y, i_this->mDemoCamCenter.y + 100.0f + VREG_F(8), 0.2f, 100.0f); + cLib_addCalc2(&i_this->mDemoCamEye.z, i_this->mDemoCamCenter.z + 900.0f + VREG_F(9), 0.2f, 100.0f); } } @@ -5699,7 +5920,7 @@ static void demo_camera(e_rd_class* i_this) { i_this->field_0x1300 = 2000.0f; // fallthrough case 12: - mDoMtx_stack_c::YrotS(a_this->current.angle.y); + mDoMtx_stack_c::YrotS(s16(a_this->current.angle.y)); mDoMtx_stack_c::XrotM(0x640); sp38.x = 0.0f; sp38.y = TREG_F(3); @@ -5720,9 +5941,9 @@ static void demo_camera(e_rd_class* i_this) { cLib_addCalc2(&i_this->mDemoCamCenter.x, a_this->eyePos.x, 0.1f, 10.0f); cLib_addCalc2(&i_this->mDemoCamCenter.z, a_this->eyePos.z, 0.1f, 10.0f); - cLib_addCalc2(&i_this->mDemoCamCenter.y, a_this->eyePos.y - 80.0f + 60.0f, 0.1f, 100.0f); + cLib_addCalc2(&i_this->mDemoCamCenter.y, a_this->eyePos.y - 80.0f + 60.0f + TREG_F(5), 0.1f, 100.0f); - if (i_this->field_0x12a6 == 100) { + if (i_this->field_0x12a6 == s16(100 + KREG_S(8))) { bVar1 = true; } break; @@ -5780,7 +6001,7 @@ static void demo_camera(e_rd_class* i_this) { if (i_this->field_0x12a6 >= 70) { sp44.set(-5182.0f, 2000.0f, 5237.0f); - daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp44, 0xFFFFE051, 0); + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp44, -8111, 0); } if (i_this->field_0x12a6 == 120 || i_this->field_0x12a6 == 130 @@ -5863,10 +6084,10 @@ static void demo_camera(e_rd_class* i_this) { i_this->field_0x980 = 0.0f; if (i_this->field_0x12a6 >= 4) { - i_this->mBlureRate = 200; + i_this->mBlureRate = 200 + VREG_S(7); sVar1 = cM_scos(i_this->field_0x12a6 * 0x500) * 2500.0f; - i_this->field_0x130c = 0.03f; - cam_3d_morf(i_this, 0.5f); + i_this->field_0x130c = 0.03f + BREG_F(16); + cam_3d_morf(i_this, 0.5f + BREG_F(17)); if (i_this->field_0x12a6 == 4) { fpcM_Search(s_lv9arrow_sub, i_this); @@ -5953,7 +6174,7 @@ static void demo_camera(e_rd_class* i_this) { if (i_this->field_0x12a6 == 177) { sp44.set(-5821.0f, 2000.0f, 5850.0f); dBomb_c::createNormalBombExplode(&sp44); - dComIfGs_onTmpBit(dSv_event_tmp_flag_c::tempBitLabels[0x76]); + dComIfGs_onTmpBit((u16) dSv_event_tmp_flag_c::tempBitLabels[0x76]); } if (i_this->field_0x12a6 == 180) { @@ -6074,7 +6295,7 @@ static void demo_camera(e_rd_class* i_this) { i_this->mDemoCamEye.set(-4274.0f, 272.0f, 7969.0f); i_this->mDemoMode = 33; i_this->field_0x12a6 = 0; - dComIfGs_onTmpBit(dSv_event_tmp_flag_c::tempBitLabels[0x75]); + dComIfGs_onTmpBit((u16) dSv_event_tmp_flag_c::tempBitLabels[0x75]); } break; @@ -6100,7 +6321,7 @@ static void demo_camera(e_rd_class* i_this) { i_this->mDemoCamFovy = 55.0f; i_this->mDemoMode = 35; i_this->field_0x12a6 = 0; - dComIfGs_onTmpBit(dSv_event_tmp_flag_c::tempBitLabels[0x74]); + dComIfGs_onTmpBit((u16) dSv_event_tmp_flag_c::tempBitLabels[0x74]); } break; @@ -6219,7 +6440,7 @@ static int daE_RD_Execute(e_rd_class* i_this) { if (i_this->field_0x9bc != 2 && i_this->field_0xaf0 == 0 && i_this->mAction != ACTION_IKKI_END) { spa4.set(0.0f, 0.0f, 0.0f); if (i_this->field_0x9ec) { - cMtx_YrotS(*calc_mtx, i_this->field_0xa0e); + cMtx_YrotS(*calc_mtx, i_this->field_0xa0c.y); sp98.x = 0.0f; sp98.y = TREG_F(8); sp98.z = i_this->field_0xaec; @@ -6229,7 +6450,7 @@ static int daE_RD_Execute(e_rd_class* i_this) { cLib_addCalc0(&i_this->field_0xaec, 1.0f, TREG_F(17) + 5.0f); } - if (i_this->mAnmID == BCK_RD_DIEB && i_this->field_0xa0c != 0 && i_this->field_0xa1f == 0) { + if (i_this->mAnmID == BCK_RD_DIEB && i_this->field_0xa0c.x != 0 && i_this->field_0xa1f == 0) { spa4.y += KREG_F(0) + -20.0f; } @@ -6252,7 +6473,7 @@ static int daE_RD_Execute(e_rd_class* i_this) { i_this->mMode = 0; a_this->speed.y = 0.0f; i_this->field_0x9ec = -1.0f; - i_this->field_0xa0c = -0x3000; + i_this->field_0xa0c.x = -0x3000; i_this->field_0x998 = 1000; a_this->health = 0; } @@ -6269,18 +6490,18 @@ static int daE_RD_Execute(e_rd_class* i_this) { if (i_this->field_0xafb == 0) { mDoMtx_stack_c::transS(a_this->current.pos.x, a_this->current.pos.y + i_this->field_0x9c0, a_this->current.pos.z); - mDoMtx_stack_c::XrotM((s16) i_this->field_0xa12); - mDoMtx_stack_c::ZrotM((s16) i_this->field_0xa16); - mDoMtx_stack_c::YrotM((s16) i_this->field_0xa0e); - mDoMtx_stack_c::XrotM((s16) i_this->field_0xa0c); - mDoMtx_stack_c::YrotM(-i_this->field_0xa0e); + mDoMtx_stack_c::XrotM((s16) i_this->field_0xa12.x); + mDoMtx_stack_c::ZrotM((s16) i_this->field_0xa12.z); + mDoMtx_stack_c::YrotM((s16) i_this->field_0xa0c.y); + mDoMtx_stack_c::XrotM((s16) i_this->field_0xa0c.x); + mDoMtx_stack_c::YrotM(-i_this->field_0xa0c.y); mDoMtx_stack_c::YrotM((s16) a_this->shape_angle.y); mDoMtx_stack_c::XrotM((s16) a_this->shape_angle.x); mDoMtx_stack_c::ZrotM(a_this->shape_angle.z); f32 fVar1 = l_HIO.model_size * a_this->scale.x; if (i_this->mBossMode != 0) { - fVar1 *= l_HIO.field_0xc; + fVar1 *= l_HIO.leader_size_ratio; } mDoMtx_stack_c::scaleM(fVar1, fVar1, fVar1); @@ -6429,10 +6650,10 @@ static int daE_RD_Execute(e_rd_class* i_this) { if (i_this->field_0x9bc == 2) { a_this->attention_info.position = a_this->current.pos; - a_this->attention_info.position.y += 190.0f; + a_this->attention_info.position.y += 190.0f + JREG_F(8); if (i_this->mBossMode != 0) { - a_this->attention_info.position.y += 120.0f; + a_this->attention_info.position.y += 120.0f + JREG_F(9); } } else { a_this->attention_info.position = a_this->eyePos; @@ -6488,7 +6709,7 @@ static int daE_RD_Execute(e_rd_class* i_this) { } if (i_this->mBossMode == 3) { - for (int j = 0; j < 3; j++) { + for (int j = 0; j <= 2; j++) { i_this->field_0xd58[j].SetTgType(0x2022); i_this->field_0xd58[j].OnTgNoHitMark(); } @@ -6691,13 +6912,13 @@ static int daE_RD_Execute(e_rd_class* i_this) { } else { i_this->field_0x71c[i] += i_this->field_0x7c4[i]; i_this->field_0x7c4[i].y -= 3.0f; - i_this->field_0x86c[i].y += 0x900; - i_this->field_0x86c[i].x += 0xB00; + i_this->field_0x86c[i].y += (s16) 0x900; + i_this->field_0x86c[i].x += (s16) 0xB00; mDoMtx_stack_c::transS(i_this->field_0x71c[i].x, i_this->field_0x71c[i].y, i_this->field_0x71c[i].z); mDoMtx_stack_c::YrotM(i_this->field_0x86c[i].y); mDoMtx_stack_c::XrotM(i_this->field_0x86c[i].x); - f32 my_scale = l_HIO.field_0xc * (l_HIO.model_size * a_this->scale.x); + f32 my_scale = l_HIO.leader_size_ratio * (l_HIO.model_size * a_this->scale.x); mDoMtx_stack_c::scaleM(my_scale, my_scale, my_scale); i_this->mpBossArmorParts[i]->setBaseTRMtx(mDoMtx_stack_c::get()); @@ -6723,15 +6944,15 @@ static int daE_RD_Execute(e_rd_class* i_this) { i_this->field_0x6a4 += i_this->field_0x6b0; i_this->field_0x6b0.y -= 5.0f; MtxTrans(i_this->field_0x6a4.x, i_this->field_0x6a4.y, i_this->field_0x6a4.z, 0); - f32 fVar4 = l_HIO.field_0xc * ( l_HIO.model_size * a_this->scale.x); + f32 fVar4 = l_HIO.leader_size_ratio * ( l_HIO.model_size * a_this->scale.x); MtxScale(fVar4, fVar4, fVar4, 1); MtxTrans(BREG_F(5) + 80.0f, BREG_F(6) + 50.0f, BREG_F(7), 1); - cMtx_YrotM(*calc_mtx, i_this->field_0x6be); + cMtx_YrotM(*calc_mtx, i_this->field_0x6bc.y); cMtx_XrotM(*calc_mtx, 0x7FFF); - cMtx_ZrotM(*calc_mtx, i_this->field_0x6c0); + cMtx_ZrotM(*calc_mtx, i_this->field_0x6bc.z); MtxTrans(-(BREG_F(5) + 80.0f), -(BREG_F(6) + 50.0f), -(BREG_F(7) + 0.0f), 1); - i_this->field_0x6be += 0x200; - i_this->field_0x6c0 += 0xF00; + i_this->field_0x6bc.y += (s16) 0x200; + i_this->field_0x6bc.z += (s16) 0xF00; } i_this->mpMorfHornAnm->getModel()->setBaseTRMtx(*calc_mtx); @@ -6777,12 +6998,12 @@ static int daE_RD_Execute(e_rd_class* i_this) { sp98.z = (BREG_F(12) + 40.0f) - 30.0f; MtxPosition(&sp98, &spb0); spb0 += spa4; - a_this->setDownPos(&spb0); + i_this->actor.setDownPos(&spb0); } cXyz spd4(a_this->eyePos); spd4.y += NREG_F(7) + 130.0f; - a_this->setHeadLockPos(&spd4); + i_this->actor.setHeadLockPos(&spd4); demo_camera(i_this); i_this->field_0x5bb = 1; a_this->attention_info.flags |= fopAc_AttnFlag_UNK_0x200000; @@ -6794,16 +7015,18 @@ static u8 jv_offset[12] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -static int daE_RD_IsDelete(e_rd_class* i_this) { +static int daE_RD_IsDelete(e_rd_class*) { return 1; } static int daE_RD_Delete(e_rd_class* i_this) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; + fopAcM_RegisterDeleteID(i_this, "E_RD"); dComIfG_resDelete(&i_this->mPhase, i_this->mResName); if (i_this->field_0x125c != 0) { hio_set = 0; + mDoHIO_DELETE_CHILD(l_HIO.field_0x4); } if (a_this->heap != NULL) { @@ -6830,13 +7053,13 @@ static void ride_game_actor_set(e_rd_class* i_this) { }; dBgS_GndChk gnd_chk; + u32 i_parameters; int iVar1 = 6; if (i_this->mBossMode >= 2) { iVar1 = 1; } for (int i = 0; i < iVar1; i++) { - u32 i_parameters; if (i_this->mBossMode == 1) { cMtx_YrotS(*calc_mtx, player->shape_angle.y); sp70 = set_pos[i]; @@ -6850,7 +7073,7 @@ static void ride_game_actor_set(e_rd_class* i_this) { gnd_chk.SetPos(&i_pos); i_pos.y = dComIfG_Bgsp().GroundCross(&gnd_chk); i_angle = player->shape_angle; - i_angle.y += 0x4000; + i_angle.y += (s16) 0x4000; i_parameters = 0x80000005; } else if (i_this->mBossMode == 2) { i_pos.set(34789.0f, -290.0f, -36177.0f); @@ -6882,6 +7105,7 @@ static void ride_game_actor_set(e_rd_class* i_this) { static void coach_game_actor_set(e_rd_class* i_this) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; fopAc_ac_c* player = dComIfGp_getPlayer(0); + cXyz ununsed_vec_0, ununsed_vec_1; csXyz i_angle; OS_REPORT("COATH GAME ACTOR SET \n"); @@ -6905,8 +7129,8 @@ static s8 instanceCount; static int useHeapInit(fopAc_ac_c* a_this) { e_rd_class* i_this = (e_rd_class*)a_this; - J3DModel* model; J3DModelData* modelData; + J3DModel* model; if (i_this->mBossMode != 0) { i_this->mpModelMorf = new mDoExt_McaMorfSO((J3DModelData*)dComIfG_getObjectRes("E_rdb", e_rdb_class::BMDR_RB), NULL, NULL, @@ -6977,13 +7201,13 @@ static int useHeapInit(fopAc_ac_c* a_this) { return 0; } - model = i_this->mpModelMorf->getModel(); - model->setUserArea((uintptr_t)i_this); + J3DModel* model_2 = i_this->mpModelMorf->getModel(); + model_2->setUserArea((uintptr_t)i_this); mDoMtx_stack_c::scaleS(0.0f, 0.0f, 0.0f); - model->setBaseTRMtx(mDoMtx_stack_c::get()); + model_2->setBaseTRMtx(mDoMtx_stack_c::get()); - for (u16 i = 0; i < model->getModelData()->getJointNum(); i++) { - model->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack); + for (u16 i = 0; i < model_2->getModelData()->getJointNum(); i++) { + model_2->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack); } if (i_this->field_0x5bc == 1) { @@ -7009,13 +7233,13 @@ static int useHeapInit(fopAc_ac_c* a_this) { return 0; } - model = i_this->mpMorfBowAnm->getModel(); - model->setUserArea((uintptr_t)i_this); - model->setBaseTRMtx(mDoMtx_stack_c::get()); + model_2 = i_this->mpMorfBowAnm->getModel(); + model_2->setUserArea((uintptr_t)i_this); + model_2->setBaseTRMtx(mDoMtx_stack_c::get()); - for (u16 i = 0; i < model->getModelData()->getJointNum(); i++) { + for (u16 i = 0; i < model_2->getModelData()->getJointNum(); i++) { if (i == 2 || i == 3) { - model->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack_bow); + model_2->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack_bow); } } @@ -7053,11 +7277,11 @@ static int useHeapInit(fopAc_ac_c* a_this) { static cPhs__Step daE_RD_Create(fopAc_ac_c* a_this) { e_rd_class* i_this = (e_rd_class*)a_this; - fopAcM_ct(a_this, e_rd_class); + fopAcM_ct(&i_this->actor, e_rd_class); i_this->field_0x5b6 = fopAcM_GetParam(a_this); i_this->field_0x5b7 = i_this->field_0x5b6; - i_this->field_0x5b8 = fopAcM_GetParam(a_this) >> 12 & 15; + i_this->field_0x5b8 = (fopAcM_GetParam(a_this) & 0xF000) >> 12; if (i_this->field_0x5b8 == 15) { i_this->field_0x5b8 = 0; } @@ -7082,17 +7306,17 @@ static cPhs__Step daE_RD_Create(fopAc_ac_c* a_this) { if (phase == cPhs_COMPLEATE_e) { if (strcmp(dComIfGp_getStartStageName(), "F_SP124") == 0) { // Gerudo Desert - data_80519200 = 124; + desert_substage = 124; } else { if (strcmp(dComIfGp_getStartStageName(), "F_SP118") == 0) { - // Arbiter's Grounds Exterior - data_80519200 = 118; + // Arbiter's Grounds Exterior - a.k.a. Bulblin camp + desert_substage = 118; } else { - data_80519200 = 0; + desert_substage = 0; } } - int swBit = fopAcM_GetParam(a_this) >> 24; + int swBit = (fopAcM_GetParam(a_this) & 0xFF000000) >> 24; if (swBit != 0xFF) { if (dComIfGs_isSwitch(swBit, fopAcM_GetRoomNo(a_this))) { return cPhs_ERROR_e; @@ -7109,7 +7333,7 @@ static cPhs__Step daE_RD_Create(fopAc_ac_c* a_this) { i_this->field_0x5b6 = 1; } - i_this->field_0x5bc = fopAcM_GetParam(a_this) >> 8 & 15; + i_this->field_0x5bc = (fopAcM_GetParam(a_this) & 0xF00) >> 8; if (i_this->field_0x5bc == 15) { i_this->field_0x5bc = 0; } @@ -7118,7 +7342,7 @@ static cPhs__Step daE_RD_Create(fopAc_ac_c* a_this) { return cPhs_ERROR_e; } - i_this->field_0x5ba = fopAcM_GetParam(a_this) >> 16; + i_this->field_0x5ba = (fopAcM_GetParam(a_this) & 0xFF0000) >> 16; if (i_this->field_0x5ba == 0xFF) { i_this->field_0x5ba = 0; } @@ -7127,7 +7351,7 @@ static cPhs__Step daE_RD_Create(fopAc_ac_c* a_this) { fopAcM_setStageLayer(a_this); } - i_this->field_0x5b9 = fopAcM_GetParam(a_this) >> 24; + i_this->field_0x5b9 = (fopAcM_GetParam(a_this) & 0xFF000000) >> 24; if (i_this->field_0x5b8 == 3 || i_this->field_0x5b8 == 4 || i_this->field_0x5b8 == 5 || i_this->field_0x5b8 == 6 || i_this->field_0x5b8 == 7) { if (i_this->field_0x5b8 != 5) { i_this->field_0x1295 = 1; @@ -7155,7 +7379,7 @@ static cPhs__Step daE_RD_Create(fopAc_ac_c* a_this) { i_this->field_0x5b8 = 3; } else if (i_this->field_0x5b8 == 10) { i_this->mAction = ACTION_BOW_IKKI; - i_this->field_0x990[0] = 142; + i_this->field_0x990[0] = 142 + XREG_S(2); } else if (i_this->field_0x5b8 == 11) { fopAcM_create(PROC_E_RDY, fopAcM_GetParam(a_this), &a_this->home.pos, fopAcM_GetRoomNo(a_this), &a_this->home.angle, NULL, -1); @@ -7180,22 +7404,24 @@ static cPhs__Step daE_RD_Create(fopAc_ac_c* a_this) { i_this->mAction = ACTION_YAGURA; i_this->field_0x99c = 30; S_find = 0; - lbl_70_bss_AE = 0; + lbl_70_bss_AE = false; if (fopAcM_GetRoomNo(a_this) == 0) { fopAcM_setCullSizeFar(a_this, 30000.0f); } } else if (i_this->field_0x5b6 == 7) { i_this->mAction = ACTION_NORMAL; - if ((u32)(a_this->home.angle.x & 0xFF) != 0xFF) { - i_this->mPath = dPath_GetRoomPath(a_this->home.angle.x & 0xFF, fopAcM_GetRoomNo(a_this)); + u8 path_idx = a_this->home.angle.x & 0xFF; + if ((u32)(path_idx) != 0xFF) { + i_this->mPath = dPath_GetRoomPath(path_idx, fopAcM_GetRoomNo(a_this)); OS_REPORT("//////////////E_RD PPD %x!!\n", i_this->mPath); if (i_this->mPath == NULL) { OS_REPORT("......RD NONONONONONO PATH !!!!\n"); return cPhs_ERROR_e; } - OS_REPORT("//////////////E_RD P0.y %f\n", i_this->mPath->m_points->m_position.y); + dPnt* pnt_p = i_this->mPath->m_points; + OS_REPORT("//////////////E_RD P0.y %f\n", pnt_p->m_position.y); } } else if (i_this->field_0x5b6 == 8) { i_this->mAction = ACTION_SLEEP; @@ -7228,12 +7454,8 @@ static cPhs__Step daE_RD_Create(fopAc_ac_c* a_this) { i_this->field_0x5b6 = 0; } - a_this->shape_angle.x = 0; - a_this->current.angle.x = 0; - a_this->home.angle.x = 0; - a_this->shape_angle.z = 0; - a_this->current.angle.z = 0; - a_this->home.angle.z = 0; + a_this->home.angle.z = a_this->current.angle.z = a_this->shape_angle.z + = a_this->home.angle.x = a_this->current.angle.x = a_this->shape_angle.x = 0; u32 i_size; if (i_this->mBossMode == 1) { @@ -7258,7 +7480,8 @@ static cPhs__Step daE_RD_Create(fopAc_ac_c* a_this) { if (hio_set == 0) { i_this->field_0x125c = 1; hio_set = 1; - l_HIO.field_0x4 = -1; + // "rider" + l_HIO.field_0x4 = mDoHIO_CREATE_CHILD("ライダー", &l_HIO); } fopAcM_SetMtx(a_this, i_this->mpModelMorf->getModel()->getBaseTRMtx()); @@ -7268,8 +7491,7 @@ static cPhs__Step daE_RD_Create(fopAc_ac_c* a_this) { &i_this->mAcchCir, fopAcM_GetSpeed_p(a_this), NULL, NULL); i_this->mAcchCir.SetWall(50.0f, 50.0f); - a_this->health = 40; - a_this->field_0x560 = 40; + a_this->field_0x560 = a_this->health = 40; i_this->mStts.Init(150, 0, a_this); @@ -7307,7 +7529,7 @@ static cPhs__Step daE_RD_Create(fopAc_ac_c* a_this) { i_this->field_0x1100.Set(at_sph_src); i_this->field_0x1100.SetStts(&i_this->mStts); - i_this->field_0x970 = instanceCount | (u16)(cM_rndF(65535.0f)) & 0xFF00; + i_this->field_0x970 = instanceCount | (u16(cM_rndF(65535.0f)) & 0xFF00); instanceCount++; i_this->mSound.init(&a_this->current.pos, &a_this->eyePos, 3, 1); @@ -7327,10 +7549,11 @@ static cPhs__Step daE_RD_Create(fopAc_ac_c* a_this) { i_this->field_0x9a0 = 5; - if (!dStage_stagInfo_GetSTType(dComIfGp_getStage()->getStagInfo())) { + stage_stag_info_class* stage_info = dComIfGp_getStage()->getStagInfo(); + if (!dStage_stagInfo_GetSTType(stage_info)) { i_this->field_0x1298 = l_HIO.eye_polygon; - if (data_80519200 != 0 || strcmp(dComIfGp_getStartStageName(), "F_SP115") == 0 || + if (desert_substage != 0 || strcmp(dComIfGp_getStartStageName(), "F_SP115") == 0 || (strcmp(dComIfGp_getStartStageName(), "F_SP121") == 0 && fopAcM_GetRoomNo(a_this) == 0)) { // Lake Hylia or Hyrule Field fopAcM_OffStatus(a_this, fopAcM_STATUS_UNK_0x4000); diff --git a/src/d/actor/d_a_e_rdy.cpp b/src/d/actor/d_a_e_rdy.cpp index 0c7b4967e8..46624ca064 100644 --- a/src/d/actor/d_a_e_rdy.cpp +++ b/src/d/actor/d_a_e_rdy.cpp @@ -683,7 +683,7 @@ static BOOL way_check(e_rdy_class* i_this) { dBgS_LinChk lin_chk; lin_chk.Set(&start, &end, _this); if (dComIfG_Bgsp().LineCross(&lin_chk)) { - ADD_ANGLE(angle, 0x1000); + ADD_ANGLE_2(angle, 0x1000); } else { i_this->mTargetAngleY = angle; return TRUE; @@ -1165,7 +1165,7 @@ static void e_rdy_bow_run(e_rdy_class* i_this) { case 1: target_speed = run_speed; - ADD_ANGLE(target_angle, 0x8000); + ADD_ANGLE_2(target_angle, 0x8000); if (i_this->mPlayerDist > l_HIO.field_0x28 || i_this->mTimer[0] == 0 || i_this->mAcch.ChkWallHit()) { @@ -1933,7 +1933,7 @@ static void e_rdy_bomb_action(e_rdy_class* i_this) { break; } } - ADD_ANGLE(target_angle, 0x8000); + ADD_ANGLE_2(target_angle, 0x8000); target_speed = l_HIO.mRunSpeed; if (JMAFastSqrt(vec1.x * vec1.x + vec1.z * vec1.z) > 600.0f) { i_this->mMode = 3; @@ -2171,7 +2171,7 @@ static void e_rdy_damage(e_rdy_class* i_this) { i_this->mMode = 10; a_this->speed.y = 0.0f; i_this->field_0xabc *= 0.2f; - ADD_ANGLE(i_this->field_0xadc.y, 0x8000); + ADD_ANGLE_2(i_this->field_0xadc.y, 0x8000); i_this->field_0xbc0 = 5 + BREG_S(7); i_this->field_0xaf4 = 100.0f + BREG_F(4); i_this->field_0xafc = 100.0f + BREG_F(5); diff --git a/src/d/actor/d_a_e_s1.cpp b/src/d/actor/d_a_e_s1.cpp index a50615874e..352cdb985f 100644 --- a/src/d/actor/d_a_e_s1.cpp +++ b/src/d/actor/d_a_e_s1.cpp @@ -1487,6 +1487,8 @@ static void action(e_s1_class* i_this) { if (can_bibiri && (daPy_getPlayerActorClass()->checkWolfBark() || daPy_getPlayerActorClass()->checkWolfThreat()) && pl_at_check(i_this, l_HIO.mReactionDist)) { fopAc_ac_c* player = dComIfGp_getPlayer(0); s16 angle_to_player = player->shape_angle.y - (fopAcM_searchPlayerAngleY(a_this) + 0x8000); + // 182.04 is close to the degree -> short constant, but not quite, + // maybe someone calculated it on their own and rounded it off? s16 bibiri_angle = 182.04f * l_HIO.mReactionAngle; if (angle_to_player < bibiri_angle && angle_to_player > (s16)-bibiri_angle) { diff --git a/src/d/actor/d_a_e_st.cpp b/src/d/actor/d_a_e_st.cpp index 40b67695fe..77b85f7b0a 100644 --- a/src/d/actor/d_a_e_st.cpp +++ b/src/d/actor/d_a_e_st.cpp @@ -241,6 +241,18 @@ daE_ST_HIO_c::daE_ST_HIO_c() { field_0x20 = -1.0f; } +#if DEBUG +void daE_ST_HIO_c::genMessage(JORMContext* ctext) { + // "stalchura" - a.k.a. skultula + ctext->genLabel(" スタルチュラ", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("基本サイズ", &basic_size, 0.0f, 5.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("PL認識距離", &pl_recognize_dist, 0.0f, 5000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("戦闘開始距離", &combat_start_dist, 0.0f, 1000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("攻撃前間", &time_before_attack, 0, 50, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("ダウン時間", &down_time, 0, 300, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); +} +#endif + static void anm_init(e_st_class* i_this, int i_index, f32 i_morf, u8 i_attr, f32 i_rate) { i_this->mpModelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("E_st", i_index), i_attr, i_morf, i_rate, 0.0f, -1.0f); i_this->mAnm = i_index; @@ -248,29 +260,31 @@ static void anm_init(e_st_class* i_this, int i_index, f32 i_morf, u8 i_attr, f32 static int nodeCallBack(J3DJoint* i_joint, int param_2) { if (param_2 == 0) { - int jntNo = i_joint->getJntNo(); + J3DJoint* my_joint = i_joint; + int jntNo = my_joint->getJntNo(); J3DModel* model = j3dSys.getModel(); e_st_class* i_this = (e_st_class*)model->getUserArea(); + fopAc_ac_c* sp_0x10 = &i_this->actor; if (i_this != NULL) { MTXCopy(model->getAnmMtx(jntNo), *calc_mtx); if (jntNo >= JNT_LLEGA_1 && jntNo <= JNT_LLEGA_3) { - cMtx_ZrotM(*calc_mtx, i_this->mStFeet[0].mAngles[jntNo - 2]); + cMtx_ZrotM(*calc_mtx, i_this->mStFeet[0].mAngles[jntNo - JNT_LLEGA_1]); } else if (jntNo >= JNT_LLEGB_1 && jntNo <= JNT_LLEGB_3) { - cMtx_ZrotM(*calc_mtx, i_this->mStFeet[0].mAngles[jntNo + 7]); + cMtx_ZrotM(*calc_mtx, i_this->mStFeet[1].mAngles[jntNo - JNT_LLEGB_1]); } else if (jntNo >= JNT_LLEGC_1 && jntNo <= JNT_LLEGC_3) { - cMtx_ZrotM(*calc_mtx, i_this->mStFeet[1].mAngles[jntNo + 4]); + cMtx_ZrotM(*calc_mtx, i_this->mStFeet[2].mAngles[jntNo - JNT_LLEGC_1]); } else if (jntNo >= JNT_LLEGD_1 && jntNo <= JNT_LLEGD_3) { - cMtx_ZrotM(*calc_mtx, i_this->mStFeet[2].mAngles[jntNo + 1]); + cMtx_ZrotM(*calc_mtx, i_this->mStFeet[3].mAngles[jntNo - JNT_LLEGD_1]); } else if (jntNo >= JNT_RLEGA_1 && jntNo <= JNT_RLEGA_3) { - cMtx_ZrotM(*calc_mtx, i_this->mStFeet[3].mAngles[jntNo - 2]); + cMtx_ZrotM(*calc_mtx, i_this->mStFeet[4].mAngles[jntNo - JNT_RLEGA_1]); } else if (jntNo >= JNT_RLEGB_1 && jntNo <= JNT_RLEGB_3) { - cMtx_ZrotM(*calc_mtx, i_this->mStFeet[3].mAngles[jntNo + 7]); + cMtx_ZrotM(*calc_mtx, i_this->mStFeet[5].mAngles[jntNo - JNT_RLEGB_1]); } else if (jntNo >= JNT_RLEGC_1 && jntNo <= JNT_RLEGC_3) { - cMtx_ZrotM(*calc_mtx, i_this->mStFeet[4].mAngles[jntNo + 4]); + cMtx_ZrotM(*calc_mtx, i_this->mStFeet[6].mAngles[jntNo - JNT_RLEGC_1]); } else if (jntNo >= JNT_RLEGD_1 && jntNo <= JNT_RLEGD_3) { - cMtx_ZrotM(*calc_mtx, i_this->mStFeet[5].mAngles[jntNo + 1]); + cMtx_ZrotM(*calc_mtx, i_this->mStFeet[7].mAngles[jntNo - JNT_RLEGD_1]); } if (jntNo == TREG_S(0)) { @@ -371,9 +385,9 @@ static BOOL pl_check(e_st_class* i_this, f32 i_distance) { if (player->current.pos.y - a_this->current.pos.y >= 750.0f || dComIfGp_event_runCheck()) { return FALSE; } - + if (i_this->mPlayerDistance < i_distance) { - player = (fopAc_ac_c*)dComIfGp_getPlayer(0); + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); pos_delta = player->current.pos - a_this->current.pos; cMtx_XrotS(*calc_mtx, -i_this->field_0x69c.x); cMtx_YrotM(*calc_mtx, -i_this->field_0x69c.y); @@ -497,9 +511,9 @@ static void damage_check(e_st_class* i_this) { static int move_bg_check(e_st_class* i_this) { dBgS_LinChk lin_chk; + int rv = 0; cXyz spa0, spac; - int rv = 0; lin_chk.Set(&i_this->field_0x6bc, &i_this->field_0x6c8, NULL); if (dComIfG_Bgsp().LineCross(&lin_chk)) { rv = 1; @@ -671,7 +685,6 @@ static void e_st_wait(e_st_class* i_this) { i_this->mAction = ACTION_MOVE; i_this->mActionPhase = PHASE_INIT; } - break; } if (i_this->mTimers[1] == 0 && pl_check(i_this, l_HIO.pl_recognize_dist)) { @@ -821,8 +834,7 @@ static void e_st_pl_search(e_st_class* i_this) { } if (move_bg_check(i_this)) { - target = 0.0f; - a_this->speedF = 0.0f; + a_this->speedF = target = 0.0f; i_this->mAction = ACTION_WAIT; i_this->mActionPhase = PHASE_INIT; } @@ -868,7 +880,8 @@ static void e_st_shoot(e_st_class* i_this) { break; } - case SHOOT_PHASE_WAIT02: + case SHOOT_PHASE_WAIT02: { + int _; // needed to force b statement at end of case in dbg asm if (i_this->mTimers[0] == 0) { if (daPy_getPlayerActorClass()->getStCaught() && fopAcM_GetParam(a_this) == 1) { i_this->mAction = ACTION_JUMP_ATTACK; @@ -880,6 +893,7 @@ static void e_st_shoot(e_st_class* i_this) { } } break; + } } cLib_addCalcAngleS2(&a_this->current.angle.y, i_this->mAngleFromPlayer, 4, 0x1000); @@ -1002,7 +1016,8 @@ static void e_st_jump_attack(e_st_class* i_this) { pos = i_this->field_0x5bc - a_this->current.pos; f32 fVar2 = pos.abs(); - i_this->field_0x71c = cM_ssin((s16)((fVar2 / fVar1) * 32768.0f)) * 100.0f; + s16 sp_0xa = fVar2 / fVar1 * 32768.0f; + i_this->field_0x71c = cM_ssin(sp_0xa) * 100.0f; if (unk_flag == 1) { cLib_addCalcAngleS2(&i_this->field_0x69c.y, 0, 4, 0x800); @@ -1020,6 +1035,7 @@ static void e_st_jump_attack(e_st_class* i_this) { } static void roof_line_calc(e_st_class* i_this) { + fopAc_ac_c* a_this = &i_this->actor; cXyz sp40, sp4c; sp40 = (i_this->field_0x744 - i_this->field_0x710) * (1.0f / 19.0f); @@ -1036,9 +1052,9 @@ static void roof_line_calc(e_st_class* i_this) { i_this->mAction = ACTION_HANG_DROP; i_this->mActionPhase = PHASE_INIT; def_se_set(&i_this->mSound, i_this->mLineCyl.GetTgHitObj(), 0x21, NULL); - pos_p = i_this->mLineCyl.GetTgHitPosP(); + cXyz* tg_hit_pos_p = i_this->mLineCyl.GetTgHitPosP(); i_this->field_0x750 = i_this->field_0x744; - i_this->field_0x750.y = pos_p->y; + i_this->field_0x750.y = tg_hit_pos_p->y; i_this->field_0x764 = i_this->field_0x750.y - i_this->field_0x710.y; if (i_this->field_0x764 < 0.0f) { @@ -1062,6 +1078,7 @@ static void roof_line_calc(e_st_class* i_this) { } static void roof_line_calc2(e_st_class* i_this) { + fopAc_ac_c* a_this = &i_this->actor; cXyz sp50, sp5c; sp50 = (i_this->field_0x744 - i_this->field_0x750) * 0.05263158f; @@ -1163,8 +1180,10 @@ static void e_st_hang(e_st_class* i_this) { cLib_addCalcAngleS2(&a_this->current.angle.y, fopAcM_searchPlayerAngleY(a_this), 0x10, 0x200); if (i_this->arg1 == 0 && i_this->mTimers[1] == 0) { + int _; if (!daPy_getPlayerActorClass()->getStCaught() && fopAcM_searchPlayerDistanceXZ(a_this) < 300.0f && a_this->current.pos.y - player->current.pos.y > 0.0f) { - if (a_this->current.pos.y - dComIfGp_getPlayer(0)->current.pos.y > 1000.0f) { + fopAc_ac_c* pla_2_p = dComIfGp_getPlayer(0); + if (a_this->current.pos.y - pla_2_p->current.pos.y > 1000.0f) { i_this->mAction = ACTION_HANG_DROP; i_this->field_0x750 = i_this->field_0x710; i_this->field_0x720 = 2; @@ -1308,9 +1327,7 @@ static void e_st_hang_drop(e_st_class* i_this) { cLib_addCalcAngleS2(&i_this->field_0x69c.x, 0, 1, 0x1000); if (i_this->mpModelMorf->isStop()) { - i_this->field_0x69c.y = 0; - i_this->field_0x69c.x = 0; - a_this->current.angle.x = 0; + a_this->current.angle.x =i_this->field_0x69c.x = i_this->field_0x69c.y = 0; i_this->mAction = ACTION_G_NORMAL; i_this->mActionPhase = PHASE_INIT; i_this->arg0 = 2; @@ -1371,7 +1388,7 @@ static s8 e_st_hang_2(e_st_class* i_this) { pos.set(a_this->current.pos.x, a_this->current.pos.y, a_this->current.pos.z); if (fopAcM_gc_c::gndCheck(&pos)) { - pos.y = TREG_F(7) + fopAcM_gc_c::getGroundY() + 120.0f + 20.0f; + pos.y = fopAcM_gc_c::getGroundY() + 120.0f + TREG_F(7) + 20.0f; if (i_this->mBgPos.y < pos.y) { i_this->mBgPos.y = pos.y; @@ -1566,8 +1583,7 @@ static void e_st_damage(e_st_class* i_this) { MtxPosition(&sp54, &a_this->speed); } - i_this->field_0x6a2 = 0; - i_this->field_0x6a4 = 0; + i_this->field_0x6a4 = i_this->field_0x6a2 = 0; i_this->mTimers[2] = 10; break; @@ -1634,10 +1650,8 @@ static void e_st_damage(e_st_class* i_this) { } f32 fVar2 = i_this->mTimers[1] * (TREG_F(14) + 150.0f); - f32 fVar3 = cM_ssin(i_this->mTimers[1] * 4000); - s16 target = fVar2 * fVar3 + 32768.0f; - cLib_addCalcAngleS2(&a_this->current.angle.x, target, 4, maxStep); - cLib_addCalcAngleS2(&a_this->current.angle.z, (s16)(fVar2 * cM_scos(i_this->mTimers[1] * 3000)), 4, maxStep); + cLib_addCalcAngleS2(&a_this->current.angle.x, fVar2 * cM_ssin(i_this->mTimers[1] * 4000) + 32768.0f, 4, maxStep); + cLib_addCalcAngleS2(&a_this->current.angle.z, fVar2 * cM_scos(i_this->mTimers[1] * 3000), 4, maxStep); if (i_this->mActionPhase == DAMAGE_PHASE_4) { cLib_addCalc0(&i_this->field_0x7f4, 1.0f, 0.1f); @@ -1653,7 +1667,6 @@ static void e_st_damage(e_st_class* i_this) { if (i_this->mActionPhase >= DAMAGE_PHASE_4) { cLib_addCalcAngleS2(&i_this->field_0x7d4, 0, 1, 0x50); } - break; } cLib_addCalcAngleS2(&i_this->field_0x69c.y, 0, 4, maxStep); @@ -1670,6 +1683,7 @@ static void e_st_damage(e_st_class* i_this) { static void e_st_water(e_st_class* i_this) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; cXyz pos_delta, sp58; + f32 reg_f30 = 0.0f; pos_delta = a_this->home.pos - a_this->current.pos; @@ -1692,7 +1706,8 @@ static void e_st_water(e_st_class* i_this) { } if (i_this->mTimers[0] == 0) { - fopAcM_createDisappear(a_this, &a_this->current.pos, l_HIO.basic_size * 10.0f, 0, 6); + u8 size = l_HIO.basic_size * 10.0f; + fopAcM_createDisappear(a_this, &a_this->current.pos, size, 0, 6); fopAcM_delete(a_this); if (i_this->mSwBit != 0xFF) { @@ -1736,7 +1751,11 @@ static BOOL water_check(e_st_class* i_this) { i_this->mGroundCross = dComIfG_Bgsp().GroundCross(&gnd_chk_spl); } - return i_this->mGroundCross > a_this->current.pos.y + 10.0f + WREG_F(11) ? TRUE : FALSE; + if (i_this->mGroundCross > a_this->current.pos.y + 10.0f + WREG_F(11)) { + return TRUE; + } else { + return FALSE; + } } static BOOL gr_check(e_st_class* i_this) { @@ -1748,7 +1767,8 @@ static BOOL gr_check(e_st_class* i_this) { pos.z = a_this->current.pos.z; gnd_chk.SetPos(&pos); - if (a_this->current.pos.y - dComIfG_Bgsp().GroundCross(&gnd_chk) > 200.0f) { + f32 gnd_cross = dComIfG_Bgsp().GroundCross(&gnd_chk); + if (a_this->current.pos.y - gnd_cross > 200.0f) { return TRUE; } @@ -1759,6 +1779,8 @@ static void e_st_g_normal(e_st_class* i_this) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; cXyz pos, sp58; f32 target = 0.0f; + f32 reg_f30 = 1.0f; + s16 angle_delta; switch (i_this->mActionPhase) { case PHASE_INIT: @@ -1772,16 +1794,15 @@ static void e_st_g_normal(e_st_class* i_this) { if (i_this->mTimers[0] == 0) { i_this->mActionPhase = G_NORMAL_PHASE_TURN; pos.x = a_this->home.pos.x + cM_rndFX(700.0f); - f32 rndValue = cM_rndFX(700.0f); - pos.z = a_this->home.pos.z + rndValue; + pos.z = a_this->home.pos.z + cM_rndFX(700.0f); pos.x -= a_this->current.pos.x; pos.z -= a_this->current.pos.z; - i_this->mAngleFromPlayer = cM_atan2s(pos.x, pos.z); + i_this->mAngleFromPlayer = cM_atan2s(pos.x, pos.z); } break; - + case G_NORMAL_PHASE_TURN: { - s16 angle_delta = i_this->mAngleFromPlayer - a_this->current.angle.y; + angle_delta = i_this->mAngleFromPlayer - a_this->current.angle.y; if (angle_delta < 0x800 && angle_delta > -0x800) { anm_init(i_this, BCK_ST_MOVE, 5.0f, J3DFrameCtrl::EMode_LOOP, 1.0f); i_this->mActionPhase = G_NORMAL_PHASE_MOVE; @@ -1801,7 +1822,7 @@ static void e_st_g_normal(e_st_class* i_this) { break; } - cLib_addCalc2(&a_this->speedF, target, 1.0f, 1.0f); + cLib_addCalc2(&a_this->speedF, target, 1.0f, reg_f30); cLib_addCalcAngleS2(&a_this->current.angle.y, i_this->mAngleFromPlayer, 2, 0x100); if (pl_check(i_this, l_HIO.pl_recognize_dist)) { @@ -1815,6 +1836,7 @@ static s8 e_st_g_fight(e_st_class* i_this) { cXyz sp64, sp70; int frame = i_this->mpModelMorf->getFrame(); f32 target = 0.0f; + f32 reg_f29 = 2.0f; s16 maxStep = 0x200; s8 isStop = false; s8 isPreparingAttack = false; @@ -1885,7 +1907,7 @@ static s8 e_st_g_fight(e_st_class* i_this) { break; } - cLib_addCalc2(&a_this->speedF, target, 1.0f, 2.0f); + cLib_addCalc2(&a_this->speedF, target, 1.0f, reg_f29); cLib_addCalcAngleS2(&a_this->current.angle.y, i_this->mAngleFromPlayer, 2, maxStep); if (isPreparingAttack && i_this->mPlayerDistance > combat_start_dist + 100.0f) { @@ -1899,7 +1921,8 @@ static s8 e_st_g_fight(e_st_class* i_this) { } if (i_this->mAtSph.ChkAtHit()) { - fopAc_ac_c* actor_p = dCc_GetAc(i_this->mAtSph.GetAtHitObj()->GetAc()); + cCcD_Obj* at_hit_obj_p = i_this->mAtSph.GetAtHitObj(); + fopAc_ac_c* actor_p = dCc_GetAc(at_hit_obj_p->GetAc()); if (actor_p != NULL && fopAcM_GetName(actor_p) == PROC_ALINK) { dComIfGp_getVibration().StartShock(VIBMODE_S_POWER4, 31, cXyz(0.0f, 1.0f, 0.0f)); } @@ -1911,6 +1934,9 @@ static s8 e_st_g_fight(e_st_class* i_this) { static s8 e_st_g_def(e_st_class* i_this) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; cXyz sp48, sp54; + f32 reg_f31 = 0.0f; + f32 reg_f30 = 2.0f; + s8 rv = 1; i_this->field_0xcf4 = 1; @@ -1920,7 +1946,7 @@ static s8 e_st_g_def(e_st_class* i_this) { i_this->mSound.startCreatureVoice(Z2SE_EN_ST_V_DEFENSE, -1); i_this->mActionPhase = G_DEF_PHASE_DEFENSE; break; - + case G_DEF_PHASE_DEFENSE: if (i_this->mpModelMorf->isStop()) { i_this->mAction = ACTION_G_FIGHT; @@ -1929,16 +1955,18 @@ static s8 e_st_g_def(e_st_class* i_this) { break; } - cLib_addCalc2(&a_this->speedF, 0.0f, 1.0f, 2.0f); - return 1; + cLib_addCalc2(&a_this->speedF, reg_f31, 1.0f, reg_f30); + return rv; } static void e_st_g_damage(e_st_class* i_this) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; + f32 reg_f31 = 0.0f; + f32 reg_f30 = 2.0f; switch (i_this->mActionPhase) { case PHASE_INIT: - if ((i_this->mHorizHitDir & 1) != 0) { + if ((s8(i_this->mHorizHitDir) & 1) != 0) { anm_init(i_this, BCK_ST_HITL, 2.0f, J3DFrameCtrl::EMode_NONE, 1.0f); } else { anm_init(i_this, BCK_ST_HITR, 2.0f, J3DFrameCtrl::EMode_NONE, 1.0f); @@ -1948,7 +1976,7 @@ static void e_st_g_damage(e_st_class* i_this) { i_this->mHorizHitDir++; i_this->mActionPhase = G_DAMAGE_PHASE_HIT; break; - + case G_DAMAGE_PHASE_HIT: if (i_this->mpModelMorf->isStop()) { i_this->mAction = ACTION_G_FIGHT; @@ -1957,11 +1985,13 @@ static void e_st_g_damage(e_st_class* i_this) { break; } - cLib_addCalc2(&a_this->speedF, 0.0f, 1.0f, 2.0f); + cLib_addCalc2(&a_this->speedF, reg_f31, 1.0f, reg_f30); } static void e_st_g_s_damage(e_st_class* i_this) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; + f32 reg_f31 = 0.0f; + f32 reg_f30 = 2.0f; switch (i_this->mActionPhase) { case PHASE_INIT: @@ -1969,7 +1999,7 @@ static void e_st_g_s_damage(e_st_class* i_this) { anm_init(i_this, BCK_ST_DAMAGE, 2.0f, J3DFrameCtrl::EMode_NONE, 1.0f); i_this->mSound.startCreatureVoice(Z2SE_EN_ST_V_NODAMAGE, -1); break; - + case G_S_DAMAGE_PHASE_NODAMAGE: if (i_this->mpModelMorf->isStop()) { i_this->mAction = ACTION_G_FIGHT; @@ -1978,7 +2008,7 @@ static void e_st_g_s_damage(e_st_class* i_this) { break; } - cLib_addCalc2(&a_this->speedF, 0.0f, 1.0f, 2.0f); + cLib_addCalc2(&a_this->speedF, reg_f31, 1.0f, reg_f30); } static void e_st_g_wind(e_st_class* i_this) { @@ -2004,8 +2034,11 @@ static void e_st_g_wind(e_st_class* i_this) { } static void e_st_g_chance(e_st_class* i_this) { - fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; + fopAc_ac_c* a_this = &i_this->actor; + fopEn_enemy_c* enemy_a_this = (fopEn_enemy_c*) a_this; cXyz sp3c, sp48; + f32 reg_f31 = 0.0f; + f32 reg_f30 = 4.0f; i_this->field_0xcf4 = 2; @@ -2014,7 +2047,7 @@ static void e_st_g_chance(e_st_class* i_this) { anm_init(i_this, BCK_ST_DAWNA, 3.0f, J3DFrameCtrl::EMode_NONE, 1.0f); i_this->mSound.startCreatureVoice(Z2SE_EN_ST_V_DAWNA, -1); i_this->mActionPhase = G_CHANCE_PHASE_DAWNA; - a_this->onDownFlg(); + enemy_a_this->onDownFlg(); break; case G_CHANCE_PHASE_DAWNA: @@ -2029,7 +2062,7 @@ static void e_st_g_chance(e_st_class* i_this) { i_this->mTimers[0] = l_HIO.down_time; } break; - + case G_CHANCE_PHASE_DAWNB: if (i_this->mAnm == BCK_ST_DAWNC && i_this->mpModelMorf->isStop()) { anm_init(i_this, BCK_ST_DAWNB, 3.0f, J3DFrameCtrl::EMode_LOOP, 1.0f); @@ -2046,19 +2079,19 @@ static void e_st_g_chance(e_st_class* i_this) { if (i_this->mpModelMorf->isStop()) { i_this->mAction = ACTION_G_FIGHT; i_this->mActionPhase = PHASE_INIT; - a_this->offDownFlg(); + enemy_a_this->offDownFlg(); } break; } - cLib_addCalc2(&a_this->speedF, 0.0f, 1.0f, 4.0f); - a_this->setDownPos(&a_this->current.pos); + cLib_addCalc2(&a_this->speedF, reg_f31, 1.0f, reg_f30); + enemy_a_this->setDownPos(&a_this->current.pos); - if (a_this->checkCutDownHitFlg()) { + if (enemy_a_this->checkCutDownHitFlg()) { i_this->mAction = ACTION_G_END; i_this->mActionPhase = PHASE_INIT; - a_this->offCutDownHitFlg(); - a_this->offDownFlg(); + enemy_a_this->offCutDownHitFlg(); + enemy_a_this->offDownFlg(); i_this->mDeathFlag = 1; daPy_getPlayerActorClass()->onEnemyDead(); } @@ -2066,11 +2099,13 @@ static void e_st_g_chance(e_st_class* i_this) { static s8 e_st_g_end(e_st_class* i_this) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; + fopAc_ac_c* base_a_this = a_this; cXyz sp58, sp64; + f32 reg_f31 = 0.0f; + f32 reg_f30 = 4.0f; s8 rv = 1; - - i_this->mDefTimer = 10; - i_this->mInvulnerabilityTimer = 10; + + i_this->mInvulnerabilityTimer = i_this->mDefTimer = 10; switch (i_this->mActionPhase) { case PHASE_INIT: @@ -2078,14 +2113,15 @@ static s8 e_st_g_end(e_st_class* i_this) { i_this->mSound.startCreatureVoice(Z2SE_EN_ST_V_DEATH2, -1); i_this->mActionPhase = G_END_PHASE_DEATH2; break; - + case G_END_PHASE_DEATH2: if (i_this->mpModelMorf->checkFrame(36.5f)) { i_this->mSound.startCreatureSound(Z2SE_CM_BODYFALL_S, 0, -1); } if (i_this->mpModelMorf->isStop()) { - fopAcM_createDisappear(a_this, &a_this->current.pos, l_HIO.basic_size * 10.0f, 0, 6); + u8 size = l_HIO.basic_size * 10.0f; + fopAcM_createDisappear(a_this, &a_this->current.pos, size, 0, 6); fopAcM_delete(a_this); if (i_this->mSwBit != 0xFF) { @@ -2108,7 +2144,8 @@ static s8 e_st_g_end(e_st_class* i_this) { } if (i_this->mpModelMorf->isStop()) { - fopAcM_createDisappear(a_this, &a_this->current.pos, l_HIO.basic_size * 10.0f, 0, 6); + u8 size = l_HIO.basic_size * 10.0f; + fopAcM_createDisappear(a_this, &a_this->current.pos, size, 0, 6); fopAcM_delete(a_this); if (i_this->mSwBit != 0xFF) { @@ -2122,7 +2159,7 @@ static s8 e_st_g_end(e_st_class* i_this) { a_this->speedF = 0.0f; } - cLib_addCalc2(&a_this->speedF, 0.0f, 1.0f, 4.0f); + cLib_addCalc2(&a_this->speedF, reg_f31, 1.0f, reg_f30); return rv; } @@ -2196,7 +2233,7 @@ static void damage_check_g(e_st_class* i_this) { def_se_set(&i_this->mSound, i_this->mDefSph.GetTgHitObj(), 0x34, NULL); dScnPly_c::setPauseTimer(4); i_this->mDefTimer = 10; - cMtx_YrotS(*calc_mtx, a_this->shape_angle.y); + cMtx_YrotS(*calc_mtx, s16(a_this->shape_angle.y)); sp24.x = KREG_F(0); sp24.y = KREG_F(1) + 100.0f; sp24.z = KREG_F(2) + 50.0f; @@ -2215,15 +2252,16 @@ static void damage_check_g(e_st_class* i_this) { static void ground_angle_set(e_st_class* i_this) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; - dComIfGp_getPlayer(0); + fopAc_ac_c* player = dComIfGp_getPlayer(0); // unused s16 sVar1 = 0; s16 sVar2 = 0; + Vec spbc; cXyz spc8, spd4; dBgS_GndChk gnd_chk; f32 scale = (VREG_F(11) + 58.0f) * l_HIO.basic_size; + f32 reg_f31, reg_f29, reg_f28; if (i_this->mBgc.GetGroundH() != -1e9f) { - Vec spbc; spbc.x = a_this->current.pos.x; spbc.y = a_this->current.pos.y + 100.0f; spbc.z = a_this->current.pos.z + scale; @@ -2231,7 +2269,9 @@ static void ground_angle_set(e_st_class* i_this) { spbc.y = dComIfG_Bgsp().GroundCross(&gnd_chk); if (spbc.y != -1e9f) { - sVar2 = -cM_atan2s(spbc.y - a_this->current.pos.y, spbc.z - a_this->current.pos.z); + reg_f31 = spbc.y - a_this->current.pos.y; + reg_f28 = spbc.z - a_this->current.pos.z; + sVar2 = -cM_atan2s(reg_f31, reg_f28); if (sVar2 > 0x2000 || sVar2 < -0x2000) { sVar2 = 0; } @@ -2244,7 +2284,9 @@ static void ground_angle_set(e_st_class* i_this) { spbc.y = dComIfG_Bgsp().GroundCross(&gnd_chk); if (spbc.y != -1e9f) { - sVar1 = (s16)cM_atan2s(spbc.y - a_this->current.pos.y, spbc.x - a_this->current.pos.x); + reg_f31 = spbc.y - a_this->current.pos.y; + reg_f29 = spbc.x - a_this->current.pos.x; + sVar1 = (s16)cM_atan2s(reg_f31, reg_f29); if (sVar1 > 0x2000 || sVar1 < -0x2000) { sVar1 = 0; } @@ -2279,8 +2321,7 @@ static BOOL foot_control(e_st_class* i_this, st_foot* foot_p) { foot_p->mAngles[1] = foot_p->field_0x0 * l_HIO.field_0x1c; foot_p->mAngles[2] = foot_p->field_0x0 * l_HIO.field_0x20; } else { - foot_p->mAngles[2] = 0; - foot_p->mAngles[1] = 0; + foot_p->mAngles[1] = foot_p->mAngles[2] = 0; } return rv; @@ -2543,7 +2584,7 @@ static void action(e_st_class* i_this) { if (dComIfG_Bgsp().LineCross(&lin_chk)) { sp9c.x = 0.0f; sp9c.y = 0.0f; - sp9c.z = TREG_F(11) + fabsf(a_this->speedF) + 30.0f; + sp9c.z = fabsf(a_this->speedF) + 30.0f + TREG_F(11); MtxPosition(&sp9c, &spa8); a_this->current.pos += spa8; } @@ -2687,11 +2728,7 @@ static int daE_ST_Execute(e_st_class* i_this) { cMtx_YrotS(*calc_mtx, i_this->field_0x7f2); pos.x = 0.0f; pos.y = 0.0f; -#if VERSION == VERSION_WII_USA_R0 pos.z = i_this->field_0x7ec * -cM_ssin(i_this->field_0x7f0 * (TREG_S(4) + 900)); -#else - pos.z = i_this->field_0x7ec * -cM_ssin(i_this->field_0x7f0 * (TREG_F(4) + 900)); -#endif MtxPosition(&pos, &offset); i_this->field_0x7f0++; cLib_addCalc0(&i_this->field_0x7ec, 1.0f, 0.1f); @@ -2841,17 +2878,19 @@ static int daE_ST_Execute(e_st_class* i_this) { return 1; } -static int daE_ST_IsDelete(e_st_class* i_this) { +static int daE_ST_IsDelete(e_st_class*) { return 1; } static int daE_ST_Delete(e_st_class* i_this) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; + fopAcM_RegisterDeleteID(i_this, "E_ST"); dComIfG_resDelete(&i_this->mPhase, "E_st"); - + if (i_this->mIsFirstSpawn) { hio_set = false; + mDoHIO_DELETE_CHILD(l_HIO.id); } if (a_this->heap != NULL) { @@ -2899,7 +2938,7 @@ static int useHeapInit(fopAc_ac_c* a_this) { } J3DModel* model = i_this->mpModelMorf->getModel(); - model->setUserArea((uintptr_t)a_this); + model->setUserArea((uintptr_t)i_this); for (u16 i = 0; i < model->getModelData()->getJointNum(); i++) { model->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack); @@ -2968,7 +3007,7 @@ static BOOL roof_initial_pos_set(e_st_class* i_this) { static cPhs__Step daE_ST_Create(fopAc_ac_c* a_this) { e_st_class* i_this = (e_st_class*)a_this; - fopAcM_ct(a_this, e_st_class); + fopAcM_ct(&i_this->actor, e_st_class); cPhs__Step phase = (cPhs__Step)dComIfG_resLoad(&i_this->mPhase, "E_st"); if (phase == cPhs_COMPLEATE_e) { @@ -2983,17 +3022,17 @@ static cPhs__Step daE_ST_Create(fopAc_ac_c* a_this) { i_this->arg1 = 0; } - i_this->arg2 = fopAcM_GetParam(a_this) >> 8; + i_this->arg2 = (fopAcM_GetParam(a_this) & 0xFF00) >> 8; if (i_this->arg2 == 0xFF) { i_this->arg2 = 0; } - i_this->arg3 = fopAcM_GetParam(a_this) >> 16; + i_this->arg3 = (fopAcM_GetParam(a_this) & 0xFF0000) >> 16; if (i_this->arg3 == 0xFF) { i_this->arg3 = 0; } - i_this->mSwBit = fopAcM_GetParam(a_this) >> 24; + i_this->mSwBit = (fopAcM_GetParam(a_this) & 0xFF000000) >> 24; if (i_this->mSwBit != 0xFF) { if (dComIfGs_isSwitch(i_this->mSwBit, fopAcM_GetRoomNo(a_this))) { return cPhs_ERROR_e; @@ -3049,9 +3088,9 @@ static cPhs__Step daE_ST_Create(fopAc_ac_c* a_this) { if (!hio_set) { i_this->mIsFirstSpawn = true; hio_set = true; - l_HIO.id = -1; + l_HIO.id = mDoHIO_CREATE_CHILD("スタルチュラ", &l_HIO); } - + a_this->attention_info.flags = fopAc_AttnFlag_BATTLE_e; fopAcM_SetMtx(a_this, i_this->mpModelMorf->getModel()->getBaseTRMtx()); fopAcM_SetMin(a_this, -200.0f, -4000.0f, -200.0f); @@ -3141,11 +3180,9 @@ static cPhs__Step daE_ST_Create(fopAc_ac_c* a_this) { i_this->mAcchCir.SetWall(60.0f, 60.0f); if (small) { - a_this->health = 0; - a_this->field_0x560 = 0; + a_this->field_0x560 = a_this->health = 0; } else { - a_this->health = 80; - a_this->field_0x560 = 80; + a_this->field_0x560 = a_this->health = 80; } i_this->mFrameCounter = cM_rndF(65535.0f); diff --git a/src/d/actor/d_a_e_sw.cpp b/src/d/actor/d_a_e_sw.cpp index 1a8a58b611..82014649c9 100644 --- a/src/d/actor/d_a_e_sw.cpp +++ b/src/d/actor/d_a_e_sw.cpp @@ -9,7 +9,7 @@ #include "f_op/f_op_actor_enemy.h" #include "f_op/f_op_camera_mng.h" #include "d/d_bomb.h" -#include +#include #include "Z2AudioLib/Z2Instances.h" class daE_SW_HIO_c { diff --git a/src/d/actor/d_a_e_vt.cpp b/src/d/actor/d_a_e_vt.cpp index c43e04cb25..ed0c071dec 100644 --- a/src/d/actor/d_a_e_vt.cpp +++ b/src/d/actor/d_a_e_vt.cpp @@ -9,7 +9,7 @@ #include "JSystem/J3DGraphBase/J3DMaterial.h" #include "SSystem/SComponent/c_math.h" #include "c/c_damagereaction.h" -#include +#include #include "d/actor/d_a_player.h" #include "d/d_com_inf_game.h" #include "d/d_s_play.h" diff --git a/src/d/actor/d_a_e_wb.cpp b/src/d/actor/d_a_e_wb.cpp index 8a332e117d..f18148632d 100644 --- a/src/d/actor/d_a_e_wb.cpp +++ b/src/d/actor/d_a_e_wb.cpp @@ -3884,7 +3884,7 @@ static void demo_camera(e_wb_class* i_this) { i_this->field_0x1714 = 55.0f + KREG_F(7); i_this->field_0x16a0 = 0; s16 sp16 = local_194->actor.shape_angle.y + - (local_194->field_0xa0e - local_194->actor.shape_angle.y) / 2; + (local_194->field_0xa0c.y - local_194->actor.shape_angle.y) / 2; mDoMtx_stack_c::YrotS(sp16); local_3c.x = NREG_F(0); local_3c.y = NREG_F(1) + 500.0f; diff --git a/src/d/actor/d_a_e_ws.cpp b/src/d/actor/d_a_e_ws.cpp index fefe58fd45..4c4d80c248 100644 --- a/src/d/actor/d_a_e_ws.cpp +++ b/src/d/actor/d_a_e_ws.cpp @@ -7,7 +7,7 @@ #include "d/actor/d_a_e_ws.h" #include "d/actor/d_a_obj_carry.h" -#include +#include #include "f_op/f_op_actor_enemy.h" class daE_WS_HIO_c : public JORReflexible { diff --git a/src/d/actor/d_a_e_ymb.cpp b/src/d/actor/d_a_e_ymb.cpp index 956a31bc88..6ec159ca31 100644 --- a/src/d/actor/d_a_e_ymb.cpp +++ b/src/d/actor/d_a_e_ymb.cpp @@ -11,7 +11,7 @@ #include "d/actor/d_a_player.h" #include "d/d_com_inf_game.h" #include "f_op/f_op_camera_mng.h" -#include +#include #include "Z2AudioLib/Z2Instances.h" struct daE_YMB_HIO_c { diff --git a/src/d/actor/d_a_horse.cpp b/src/d/actor/d_a_horse.cpp index f77b11be6c..301245e996 100644 --- a/src/d/actor/d_a_horse.cpp +++ b/src/d/actor/d_a_horse.cpp @@ -17,7 +17,7 @@ #include "SSystem/SComponent/c_math.h" #include "Z2AudioLib/Z2Instances.h" #include "JSystem/JAudio2/JAUSectionHeap.h" -#include +#include #define ANM_HS_BACK_WALK 6 #define ANM_HS_WALK_START 7 diff --git a/src/d/actor/d_a_kago.cpp b/src/d/actor/d_a_kago.cpp index b9909276b2..ed46b10ddd 100644 --- a/src/d/actor/d_a_kago.cpp +++ b/src/d/actor/d_a_kago.cpp @@ -10,7 +10,7 @@ #include "d/d_com_inf_game.h" #include "d/d_msg_object.h" -#include +#include #include "d/actor/d_a_balloon_2D.h" #include "d/actor/d_a_e_ym.h" diff --git a/src/d/actor/d_a_mg_rod.cpp b/src/d/actor/d_a_mg_rod.cpp index f46f0c237e..3016f58aaa 100644 --- a/src/d/actor/d_a_mg_rod.cpp +++ b/src/d/actor/d_a_mg_rod.cpp @@ -22,7 +22,7 @@ #include "c/c_damagereaction.h" #include "SSystem/SComponent/c_counter.h" #include "Z2AudioLib/Z2Instances.h" -#include +#include class dmg_rod_HIO_c : public JORReflexible { public: @@ -5493,7 +5493,7 @@ static void play_camera_u(dmg_rod_class* i_this) { break; } case 20: - case 21: + case 21: { if (!actor->eventInfo.checkCommandDemoAccrpt()) { fopAcM_orderPotentialEvent(actor, 2, 0xFFFF, 0); actor->eventInfo.onCondition(dEvtCnd_CANDEMO_e); @@ -5647,6 +5647,7 @@ static void play_camera_u(dmg_rod_class* i_this) { daAlink_getAlinkActorClass()->changeFishGetFace(0); } break; + } case 90: sp18 = 1; break; diff --git a/src/d/actor/d_a_npc_aru.cpp b/src/d/actor/d_a_npc_aru.cpp index e6881a106c..3e126080bf 100644 --- a/src/d/actor/d_a_npc_aru.cpp +++ b/src/d/actor/d_a_npc_aru.cpp @@ -257,14 +257,6 @@ daNpc_Aru_c::cutFunc daNpc_Aru_c::mCutList[7] = { &daNpc_Aru_c::cutNoEntrance, }; -daNpc_Aru_c::~daNpc_Aru_c() { - if (mpMorf[0] != NULL) { - mpMorf[0]->stopZelAnime(); - } - - deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); -} - const daNpc_Aru_HIOParam daNpc_Aru_Param_c::m = { 220.0f, -3.0f, @@ -315,6 +307,36 @@ const daNpc_Aru_HIOParam daNpc_Aru_Param_c::m = { 45.0f, }; +static NPC_ARU_HIO_CLASS l_HIO; + +#if DEBUG +daNpc_Aru_HIO_c::daNpc_Aru_HIO_c() { + m = daNpc_Aru_Param_c::m; +} + +void daNpc_Aru_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_Aru_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpc_Aru_c::~daNpc_Aru_c() { + if (mpMorf[0] != NULL) { + mpMorf[0]->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + + deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); +} + cPhs__Step daNpc_Aru_c::create() { daNpcT_ct(this, daNpc_Aru_c, l_faceMotionAnmData, l_motionAnmData, l_faceMotionSequenceData, 4, l_motionSequenceData, 4, l_evtList, l_resNameList); @@ -349,9 +371,14 @@ cPhs__Step daNpc_Aru_c::create() { mSound.init(¤t.pos, &eyePos, 3, 1); field_0x9c0.init(&mAcch, 0.0f, 0.0f); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("ファド"); +#endif + reset(); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_Aru_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl.Set(mCcDCyl); mCyl.SetStts(&mCcStts); mCyl.SetTgHitCallback(tgHitCallBack); @@ -482,14 +509,14 @@ BOOL daNpc_Aru_c::chkThrust(fopAc_ac_c* actor_p) { f32 fVar2 = fopAcM_searchActorDistance(this, actor_p); s16 sVar1 = cM_atan2s(actor_p->speed.x, actor_p->speed.z) - fopAcM_searchActorAngleY(actor_p, this); - if (fVar2 < daNpc_Aru_Param_c::m.warning_range) { + if (fVar2 < mpHIO->m.warning_range) { if (abs(sVar1) < cM_deg2s(35.0f)) { return TRUE; } } } - if (fopAcM_GetName(actor_p) == PROC_ALINK && daPy_py_c::checkNowWolf() && actorDistance < daNpc_Aru_Param_c::m.warning_range) { + if (fopAcM_GetName(actor_p) == PROC_ALINK && daPy_py_c::checkNowWolf() && actorDistance < mpHIO->m.warning_range) { return TRUE; } } @@ -701,10 +728,10 @@ void daNpc_Aru_c::setParam() { selectAction(); srchActors(); u32 attnFlag = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e; - s16 talk_distance = daNpc_Aru_Param_c::m.common.talk_distance; - s16 talk_angle = daNpc_Aru_Param_c::m.common.talk_angle; - s16 attention_distance = daNpc_Aru_Param_c::m.common.attention_distance; - s16 attention_angle = daNpc_Aru_Param_c::m.common.attention_angle; + s16 talk_distance = mpHIO->m.common.talk_distance; + s16 talk_angle = mpHIO->m.common.talk_angle; + s16 attention_distance = mpHIO->m.common.attention_distance; + s16 attention_angle = mpHIO->m.common.attention_angle; if (daPy_getPlayerActorClass()->checkHorseRide()) { if (talk_distance < 7) { @@ -726,17 +753,17 @@ void daNpc_Aru_c::setParam() { attention_info.flags = attnFlag; - scale.set(daNpc_Aru_Param_c::m.common.scale, daNpc_Aru_Param_c::m.common.scale, daNpc_Aru_Param_c::m.common.scale); - mCcStts.SetWeight(daNpc_Aru_Param_c::m.common.weight); - mCylH = daNpc_Aru_Param_c::m.common.height; - mWallR = daNpc_Aru_Param_c::m.common.width; - mAttnFovY = daNpc_Aru_Param_c::m.common.fov; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; + mAttnFovY = mpHIO->m.common.fov; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_Aru_Param_c::m.common.knee_length); - mRealShadowSize = daNpc_Aru_Param_c::m.common.real_shadow_size; - mExpressionMorfFrame = daNpc_Aru_Param_c::m.common.expression_morf_frame; - mMorfFrames = daNpc_Aru_Param_c::m.common.morf_frame; - gravity = daNpc_Aru_Param_c::m.common.gravity; + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mRealShadowSize = mpHIO->m.common.real_shadow_size; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; + gravity = mpHIO->m.common.gravity; } BOOL daNpc_Aru_c::checkChangeEvt() { @@ -908,8 +935,6 @@ void daNpc_Aru_c::beforeMove() { } } -static daNpc_Aru_Param_c l_HIO; - void daNpc_Aru_c::setAttnPos() { cXyz sp40(-30.0f, 10.0f, 0.0f); cXyz sp4c(0.0f, 10.0f, 0.0f); @@ -918,11 +943,11 @@ void daNpc_Aru_c::setAttnPos() { f32 rad = cM_s2rad((s16)(mCurAngle.y - field_0xd7e.y)); mJntAnm.setParam(this, mpMorf[0]->getModel(), &sp40, getBackboneJointNo(), getNeckJointNo(), getHeadJointNo(), - daNpc_Aru_Param_c::m.common.body_angleX_min, daNpc_Aru_Param_c::m.common.body_angleX_max, - daNpc_Aru_Param_c::m.common.body_angleY_min, daNpc_Aru_Param_c::m.common.body_angleY_max, - daNpc_Aru_Param_c::m.common.head_angleX_min, daNpc_Aru_Param_c::m.common.head_angleX_max, - daNpc_Aru_Param_c::m.common.head_angleY_min, daNpc_Aru_Param_c::m.common.head_angleY_max, - daNpc_Aru_Param_c::m.common.neck_rotation_ratio, rad, &sp4c); + mpHIO->m.common.body_angleX_min, mpHIO->m.common.body_angleX_max, + mpHIO->m.common.body_angleY_min, mpHIO->m.common.body_angleY_max, + mpHIO->m.common.head_angleX_min, mpHIO->m.common.head_angleX_max, + mpHIO->m.common.head_angleY_min, mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, rad, &sp4c); mJntAnm.calcJntRad(0.2f, 1.0f, rad); setMtx(); @@ -932,7 +957,7 @@ void daNpc_Aru_c::setAttnPos() { mJntAnm.setEyeAngleY(eyePos, mCurAngle.y + field_0xd8a.y, TRUE, 1.0f, 0); sp40.set(0.0f, 0.0f, 20.0f); - sp40.y = daNpc_Aru_Param_c::m.common.attention_offset; + sp40.y = mpHIO->m.common.attention_offset; mDoMtx_stack_c::YrotS(mCurAngle.y); mDoMtx_stack_c::multVec(&sp40, &sp40); attention_info.position = current.pos + sp40; @@ -1080,7 +1105,7 @@ s16 daNpc_Aru_c::srchActorDirection(fopAc_ac_c* actor_p) { s16 rv; s16 sVar1 = fopAcM_searchActorAngleY(this, actor_p) - mCurAngle.y; s16 sVar2 = abs(sVar1); - s16 sVar3 = cM_deg2s(daNpc_Aru_Param_c::m.forward_visibility); + s16 sVar3 = cM_deg2s(mpHIO->m.forward_visibility); if (sVar2 < sVar3) { if (sVar1 > 0) { @@ -1112,7 +1137,7 @@ void daNpc_Aru_c::adjustMoveDir() { s16 sVar3[3]; sp84 = current.pos; - sp84.y += daNpc_Aru_Param_c::m.common.knee_length; + sp84.y += mpHIO->m.common.knee_length; for (int i = 0; i < 3; i++) { bVar1[i] = 0; @@ -1144,7 +1169,7 @@ void daNpc_Aru_c::adjustMoveDir() { } if (bVar1[1] != 0 && bVar1[2] != 0) { - mTimer = daNpc_Aru_Param_c::m.no_turn_time; + mTimer = mpHIO->m.no_turn_time; switch (field_0xfca) { case 1: @@ -1198,7 +1223,7 @@ void daNpc_Aru_c::adjustMoveDir() { case 1: case 7: field_0xfca = 6; - mTimer = daNpc_Aru_Param_c::m.no_turn_time; + mTimer = mpHIO->m.no_turn_time; break; case 2: @@ -1218,7 +1243,7 @@ void daNpc_Aru_c::adjustMoveDir() { case 1: case 7: field_0xfca = 2; - mTimer = daNpc_Aru_Param_c::m.no_turn_time; + mTimer = mpHIO->m.no_turn_time; break; case 6: @@ -1260,7 +1285,7 @@ void daNpc_Aru_c::adjustMoveDir() { int daNpc_Aru_c::duck(int param_1) { fopAc_ac_c* cow_p; - int iVar1 = daNpc_Aru_Param_c::m.avoid_time; + int iVar1 = mpHIO->m.avoid_time; cow_p = getCowP(param_1); if (cow_p != NULL) { @@ -1307,7 +1332,7 @@ int daNpc_Aru_c::duck(int param_1) { cLib_addCalcAngleS2(¤t.angle.y, sVar1, MREG_S(0) + 6, MREG_S(1) + 0x800); shape_angle.y = current.angle.y; mCurAngle.y = shape_angle.y; - cLib_chaseF(&speedF, daNpc_Aru_Param_c::m.run_speed, 1.5f); + cLib_chaseF(&speedF, mpHIO->m.run_speed, 1.5f); speedF *= cM_scos(mGroundAngle); if (mGroundAngle < 0) { @@ -2027,8 +2052,8 @@ int daNpc_Aru_c::test(void* param_1) { mMode = 2; // fallthrough case 2: - mFaceMotionSeqMngr.setNo(mHIO->param.common.face_expression, -1.0f, 0, 0); - mMotionSeqMngr.setNo(mHIO->param.common.motion, -1.0f, 0, 0); + mFaceMotionSeqMngr.setNo(mpHIO->m.common.face_expression, -1.0f, 0, 0); + mMotionSeqMngr.setNo(mpHIO->m.common.motion, -1.0f, 0, 0); mJntAnm.lookNone(0); attention_info.flags = 0; break; diff --git a/src/d/actor/d_a_npc_besu.cpp b/src/d/actor/d_a_npc_besu.cpp index 4948bd9aef..521ed21206 100644 --- a/src/d/actor/d_a_npc_besu.cpp +++ b/src/d/actor/d_a_npc_besu.cpp @@ -527,6 +527,22 @@ daNpc_Besu_c::cutFunc daNpc_Besu_c::mCutList[15] = { &daNpc_Besu_c::cutThankYou, }; +static NPC_BESU_HIO_CLASS l_HIO; + +#if DEBUG +daNpc_Besu_HIO_c::daNpc_Besu_HIO_c() { + m = daNpc_Besu_Param_c::m; +} + +void daNpc_Besu_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_Besu_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + daNpc_Besu_c::~daNpc_Besu_c() { // "Destruct": OS_REPORT("|%06d:%x|daNpc_Besu_c -> デストラクト\n", g_Counter.mCounter0, this); @@ -538,11 +554,11 @@ daNpc_Besu_c::~daNpc_Besu_c() { mpCupModelMorf->stopZelAnime(); } -// #if DEBUG -// if (field_0xe40 != NULL) { -// field_0xe40->removeHIO(); -// } -// #endif +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif deleteRes((l_loadResPtrnList)[mType], (const char**)l_resNameList); } @@ -631,16 +647,16 @@ int daNpc_Besu_c::create() { fopAcM_setCullSizeBox(this, -200.0f, -100.0f, -200.0f, 200.0f, 300.0f, 200.0f); mSound.init(¤t.pos, &eyePos, 3, 1); -// #if DEBUG -// field_0xe40 = &l_HIO; -// // "Beth": -// field_0xe40->entryHIO("ベス"); -// #endif +#if DEBUG + mpHIO = &l_HIO; + // "Beth": + mpHIO->entryHIO("ベス"); + #endif reset(); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_Besu_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl1.Set(mCcDCyl); mCyl1.SetStts(&mCcStts); mCyl1.SetTgHitCallback(tgHitCallBack); @@ -993,10 +1009,10 @@ void daNpc_Besu_c::setParam() { srchActors(); u32 att_flags = (fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e); - s16 talk_dist = daNpc_Besu_Param_c::m.common.talk_distance; - s16 talk_ang = daNpc_Besu_Param_c::m.common.talk_angle; - s16 att_dist = daNpc_Besu_Param_c::m.common.attention_distance; - s16 att_ang = daNpc_Besu_Param_c::m.common.attention_angle; + s16 talk_dist = mpHIO->m.common.talk_distance; + s16 talk_ang = mpHIO->m.common.talk_angle; + s16 att_dist = mpHIO->m.common.attention_distance; + s16 att_ang = mpHIO->m.common.attention_angle; if (daNpcKakashi_chkSwdTutorialStage() & 0xFF) { talk_dist = 11; talk_ang = 6; @@ -1038,11 +1054,11 @@ void daNpc_Besu_c::setParam() { attention_info.distances[3] = daNpcT_getDistTableIdx(talk_dist, talk_ang); attention_info.flags = att_flags; - scale.set(daNpc_Besu_Param_c::m.common.scale, daNpc_Besu_Param_c::m.common.scale, - daNpc_Besu_Param_c::m.common.scale); - mCcStts.SetWeight(daNpc_Besu_Param_c::m.common.weight); - mCylH = daNpc_Besu_Param_c::m.common.height; - mWallR = daNpc_Besu_Param_c::m.common.width; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, + mpHIO->m.common.scale); + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; if (mTwilight) { mCylH = 110.0f; } else if (mType == 5) { @@ -1050,21 +1066,21 @@ void daNpc_Besu_c::setParam() { mWallR = 60.0f; } - mAttnFovY = daNpc_Besu_Param_c::m.common.fov; + mAttnFovY = mpHIO->m.common.fov; if (mType == 3 || mType == 4) { mAttnFovY = 180.0f; } mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_Besu_Param_c::m.common.knee_length); - mRealShadowSize = daNpc_Besu_Param_c::m.common.real_shadow_size; + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mRealShadowSize = mpHIO->m.common.real_shadow_size; if (chkNurse()) { mRealShadowSize = 500.0f; } - mExpressionMorfFrame = daNpc_Besu_Param_c::m.common.expression_morf_frame; - mMorfFrames = daNpc_Besu_Param_c::m.common.morf_frame; - gravity = daNpc_Besu_Param_c::m.common.gravity; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; + gravity = mpHIO->m.common.gravity; } BOOL daNpc_Besu_c::checkChangeEvt() { @@ -1330,22 +1346,22 @@ void daNpc_Besu_c::setAttnPos() { if (chkNurse()) { mJntAnm.setParam( this, mpMorf[0]->getModel(), &eyeOffset, getBackboneJointNo(), getNeckJointNo(), - getHeadJointNo(), daNpc_Besu_Param_c::m.common.body_angleX_min, 0.0f, - 0.0f, 0.0f, -10.0f, daNpc_Besu_Param_c::m.common.head_angleX_max, - daNpc_Besu_Param_c::m.common.head_angleY_min, daNpc_Besu_Param_c::m.common.head_angleY_max, - daNpc_Besu_Param_c::m.common.neck_rotation_ratio, 0.0f, NULL); + getHeadJointNo(), mpHIO->m.common.body_angleX_min, 0.0f, + 0.0f, 0.0f, -10.0f, mpHIO->m.common.head_angleX_max, + mpHIO->m.common.head_angleY_min, mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, 0.0f, NULL); } else { mJntAnm.setParam( this, mpMorf[0]->getModel(), &eyeOffset, getBackboneJointNo(), getNeckJointNo(), - getHeadJointNo(), daNpc_Besu_Param_c::m.common.body_angleX_min, daNpc_Besu_Param_c::m.common.body_angleX_max, - daNpc_Besu_Param_c::m.common.body_angleY_min, daNpc_Besu_Param_c::m.common.body_angleY_max, - daNpc_Besu_Param_c::m.common.head_angleX_min, daNpc_Besu_Param_c::m.common.head_angleX_max, - daNpc_Besu_Param_c::m.common.head_angleY_min, daNpc_Besu_Param_c::m.common.head_angleY_max, - daNpc_Besu_Param_c::m.common.neck_rotation_ratio, 0.0f, NULL); + getHeadJointNo(), mpHIO->m.common.body_angleX_min, mpHIO->m.common.body_angleX_max, + mpHIO->m.common.body_angleY_min, mpHIO->m.common.body_angleY_max, + mpHIO->m.common.head_angleX_min, mpHIO->m.common.head_angleX_max, + mpHIO->m.common.head_angleY_min, mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, 0.0f, NULL); } mJntAnm.calcJntRad(0.2f, 1.0f, rad_val); - mpMorf[0]->setPlaySpeed(daNpc_Besu_Param_c::m.field_0x8c); + mpMorf[0]->setPlaySpeed(mpHIO->m.field_0x8c); setMtx(); if (mpCupModelMorf != NULL) { mpCupModelMorf->play(0, 0); @@ -1379,7 +1395,7 @@ void daNpc_Besu_c::setAttnPos() { mDoMtx_stack_c::multVec(&eyeOffset, &attention_info.position); } else { eyeOffset.set(0.0f, 0.0f, 0.0f); - eyeOffset.y = daNpc_Besu_Param_c::m.common.attention_offset; + eyeOffset.y = mpHIO->m.common.attention_offset; mDoMtx_stack_c::YrotS(mCurAngle.y); mDoMtx_stack_c::multVec(&eyeOffset, &eyeOffset); attention_info.position = current.pos + eyeOffset; @@ -2612,10 +2628,10 @@ int daNpc_Besu_c::wait(void* param_0) { actor_p = (daNpc_Len_c*) mActorMngr[3].getActorP(); if (actor_p != NULL && ((daNpc_Len_c*) actor_p)->checkStartDemo13StbEvt( - this, daNpc_Besu_Param_c::m.common.box_min_x, daNpc_Besu_Param_c::m.common.box_min_y, - daNpc_Besu_Param_c::m.common.box_min_z, daNpc_Besu_Param_c::m.common.box_max_x, - daNpc_Besu_Param_c::m.common.box_max_y, daNpc_Besu_Param_c::m.common.box_max_z, - daNpc_Besu_Param_c::m.common.box_offset)) + this, mpHIO->m.common.box_min_x, mpHIO->m.common.box_min_y, + mpHIO->m.common.box_min_z, mpHIO->m.common.box_max_x, + mpHIO->m.common.box_max_y, mpHIO->m.common.box_max_z, + mpHIO->m.common.box_offset)) { mEvtNo = EVENT_DEMO13_STB; field_0x112f = 1; @@ -2994,9 +3010,6 @@ static int daNpc_Besu_IsDelete(void*) { return true; } -static daNpc_Besu_Param_c l_HIO; - - static actor_method_class daNpc_Besu_MethodTable = { (process_method_func)daNpc_Besu_Create, (process_method_func)daNpc_Besu_Delete, diff --git a/src/d/actor/d_a_npc_blue_ns.cpp b/src/d/actor/d_a_npc_blue_ns.cpp index 32b934b090..0af2697a1f 100644 --- a/src/d/actor/d_a_npc_blue_ns.cpp +++ b/src/d/actor/d_a_npc_blue_ns.cpp @@ -37,7 +37,7 @@ static char* l_evtNames[7] = { static char* l_myName = "Blue_NS"; -static daNpcBlueNS_Param_c l_HIO; +static NPC_BLUE_NS_HIO_CLASS l_HIO; daNpcBlueNS_c::EventFn daNpcBlueNS_c::mEvtSeqList[] = { NULL, @@ -49,6 +49,16 @@ daNpcBlueNS_c::EventFn daNpcBlueNS_c::mEvtSeqList[] = { &daNpcBlueNS_c::_Evt_ChgYami_STNoppo, }; +#if DEBUG +daNpcBlueNS_HIO_c::daNpcBlueNS_HIO_c() { + m = daNpcBlueNS_Param_c::m; +} + +void daNpcBlueNS_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + daNpcBlueNS_c::daNpcBlueNS_c() {} daNpcBlueNS_c::~daNpcBlueNS_c() { @@ -59,6 +69,12 @@ daNpcBlueNS_c::~daNpcBlueNS_c() { if (heap != NULL) { mAnm_p->stopZelAnime(); } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif } const static dCcD_SrcCyl l_cyl_src = { @@ -143,18 +159,23 @@ int daNpcBlueNS_c::Create() { fopAcM_SetMtx(this, mAnm_p->getModel()->getBaseTRMtx()); fopAcM_setCullSizeFar(this, 3.0f); fopAcM_setCullSizeBox(this, -120.0f, -10.0f, -120.0f, 120.0f, 220.0f, 120.0f); - + mSound.init(¤t.pos, &eyePos, 3, 1); - mAcchCir.SetWall(daNpcBlueNS_Param_c::m.common.width, daNpcBlueNS_Param_c::m.common.knee_length); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("青のナイトストーカー"); +#endif + + mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mAcch.CrrPos(dComIfG_Bgsp()); - mCcStts.Init(daNpcBlueNS_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl.Set(l_cyl_src); mCyl.SetStts(&mCcStts); - mCyl.SetH(daNpcBlueNS_Param_c::m.common.height); - mCyl.SetR(daNpcBlueNS_Param_c::m.common.width); + mCyl.SetH(mpHIO->m.common.height); + mCyl.SetR(mpHIO->m.common.width); mGndChk = mAcch.m_gnd; mGroundH = mAcch.GetGroundH(); @@ -353,7 +374,7 @@ BOOL daNpcBlueNS_c::holyball_check_main(fopAc_ac_c* i_actor) { break; default: dist = fopAcM_searchActorDistanceXZ(this, i_actor); - range = daNpcBlueNS_Param_c::m.field_0x6c; + range = mpHIO->m.field_0x6c; } return dist <= range; @@ -384,7 +405,7 @@ int daNpcBlueNS_c::Draw() { mAnm_p->entryDL(); } - mShadowKey = dComIfGd_setShadow(mShadowKey, 1, mdl_p, ¤t.pos, daNpcBlueNS_Param_c::m.common.real_shadow_size, 20.0f + tREG_F(3), current.pos.y, mGroundH, mGndChk, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); + mShadowKey = dComIfGd_setShadow(mShadowKey, 1, mdl_p, ¤t.pos, mpHIO->m.common.real_shadow_size, 20.0f + tREG_F(3), current.pos.y, mGroundH, mGndChk, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); return 1; } @@ -409,7 +430,7 @@ int daNpcBlueNS_c::ctrlJoint(J3DJoint* param_0, J3DModel* i_model) { case 1: case 3: case 4: - setLookatMtx(jnt_no, spC, daNpcBlueNS_Param_c::m.common.neck_rotation_ratio); + setLookatMtx(jnt_no, spC, mpHIO->m.common.neck_rotation_ratio); } i_model->setAnmMtx(jnt_no, mDoMtx_stack_c::get()); @@ -436,16 +457,16 @@ int daNpcBlueNS_c::ctrlJointCallBack(J3DJoint* i_joint, int param_1) { void daNpcBlueNS_c::setParam() { srchActor(); - attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(daNpcBlueNS_Param_c::m.common.attention_distance, daNpcBlueNS_Param_c::m.common.attention_angle); + attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(mpHIO->m.common.attention_distance, mpHIO->m.common.attention_angle); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; - attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(daNpcBlueNS_Param_c::m.common.talk_distance, daNpcBlueNS_Param_c::m.common.talk_angle); + attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(mpHIO->m.common.talk_distance, mpHIO->m.common.talk_angle); attention_info.flags = 0; #if !PLATFORM_GCN - scale.set(daNpcBlueNS_Param_c::m.common.scale, daNpcBlueNS_Param_c::m.common.scale, daNpcBlueNS_Param_c::m.common.scale); - mAcchCir.SetWallR(daNpcBlueNS_Param_c::m.common.width); - mAcchCir.SetWallH(daNpcBlueNS_Param_c::m.common.height); - gravity = daNpcBlueNS_Param_c::m.common.gravity; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); + mAcchCir.SetWallR(mpHIO->m.common.width); + mAcchCir.SetWallH(mpHIO->m.common.height); + gravity = mpHIO->m.common.gravity; #endif } @@ -590,7 +611,7 @@ void daNpcBlueNS_c::setAttnPos() { mHeadAngle.x = cLib_targetAngleX(&mHeadPos, &sp20); mHeadAngle.y = cLib_targetAngleY(&mHeadPos, &sp20); - attention_info.position.set(mHeadPos.x, mHeadPos.y + daNpcBlueNS_Param_c::m.common.attention_offset, mHeadPos.z); + attention_info.position.set(mHeadPos.x, mHeadPos.y + mpHIO->m.common.attention_offset, mHeadPos.z); cXyz cyl_center; mDoMtx_stack_c::copy(mAnm_p->getModel()->getAnmMtx(1)); @@ -691,13 +712,13 @@ void daNpcBlueNS_c::playMotion() { daNpcF_anmPlayData anm5_phase1 = {5, 0.0f, 0}; daNpcF_anmPlayData* anm5[] = {&anm5_phase1}; - daNpcF_anmPlayData anm6_phase1 = {6, daNpcBlueNS_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData anm6_phase1 = {6, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* anm6[] = {&anm6_phase1}; - daNpcF_anmPlayData anm7_phase1 = {7, daNpcBlueNS_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData anm7_phase1 = {7, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* anm7[] = {&anm7_phase1}; - daNpcF_anmPlayData anm8_phase1 = {8, daNpcBlueNS_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData anm8_phase1 = {8, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* anm8[] = {&anm8_phase1}; daNpcF_anmPlayData** anmData_p[] = { @@ -741,14 +762,14 @@ void daNpcBlueNS_c::lookat() { J3DModel* model_p = mAnm_p->getModel(); int var_r28 = 0; - f32 body_angleX_min = daNpcBlueNS_Param_c::m.common.body_angleX_min; - f32 body_angleX_max = daNpcBlueNS_Param_c::m.common.body_angleX_max; - f32 body_angleY_min = daNpcBlueNS_Param_c::m.common.body_angleY_min; - f32 body_angleY_max = daNpcBlueNS_Param_c::m.common.body_angleY_max; - f32 head_angleX_min = daNpcBlueNS_Param_c::m.common.head_angleX_min; - f32 head_angleX_max = daNpcBlueNS_Param_c::m.common.head_angleX_max; - f32 head_angleY_min = daNpcBlueNS_Param_c::m.common.head_angleY_min; - f32 head_angleY_max = daNpcBlueNS_Param_c::m.common.head_angleY_max; + f32 body_angleX_min = mpHIO->m.common.body_angleX_min; + f32 body_angleX_max = mpHIO->m.common.body_angleX_max; + f32 body_angleY_min = mpHIO->m.common.body_angleY_min; + f32 body_angleY_max = mpHIO->m.common.body_angleY_max; + f32 head_angleX_min = mpHIO->m.common.head_angleX_min; + f32 head_angleX_max = mpHIO->m.common.head_angleX_max; + f32 head_angleY_min = mpHIO->m.common.head_angleY_min; + f32 head_angleY_max = mpHIO->m.common.head_angleY_max; s16 temp_r26 = mCurAngle.y - mOldAngle.y; cXyz sp30[] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; @@ -814,7 +835,7 @@ BOOL daNpcBlueNS_c::step(s16 i_angY, int param_1) { } BOOL daNpcBlueNS_c::chkFindPlayer() { - if (!chkActorInSight(daPy_getPlayerActorClass(), daNpcBlueNS_Param_c::m.common.fov)) { + if (!chkActorInSight(daPy_getPlayerActorClass(), mpHIO->m.common.fov)) { mActorMngr[0].remove(); return false; } diff --git a/src/d/actor/d_a_npc_bou.cpp b/src/d/actor/d_a_npc_bou.cpp index 629f5f6ab5..c630a1a4c2 100644 --- a/src/d/actor/d_a_npc_bou.cpp +++ b/src/d/actor/d_a_npc_bou.cpp @@ -146,17 +146,43 @@ daNpc_Bou_c::~daNpc_Bou_c() { if (mpMorf[0] != 0) { mpMorf[0]->stopZelAnime(); } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + deleteRes(l_loadResPtrnList[mType], (char const**)l_resNameList); } -daNpc_Bou_Param_c::Data const daNpc_Bou_Param_c::m= { - 210.0f, -3.0f, 1.0f, 600.0f, 255.0f, 200.0f, 35.0f, 40.0f, - 0.0f, 0.0f, 10.0f, -10.0f, 30.0f, -10.0f, 45.0f, -45.0f, - 0.6f, 12.0f, 3, 6, 5, 6, 110.0f, 500.0f, 300.0f, -300.0f, - 60, 8, 0.0f, 0.0f, 4.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 16.0f, 1000.0f, 500.0f, -500.0f, +daNpc_Bou_HIOParam const daNpc_Bou_Param_c::m = { + { + 210.0f, -3.0f, 1.0f, 600.0f, 255.0f, 200.0f, 35.0f, 40.0f, + 0.0f, 0.0f, 10.0f, -10.0f, 30.0f, -10.0f, 45.0f, -45.0f, + 0.6f, 12.0f, 3, 6, 5, 6, 110.0f, 500.0f, 300.0f, -300.0f, + 60, 8, 0, 0, 0, 0, 0, 4.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, + }, + 16.0f, 1000.0f, 500.0f, -500.0f, }; +static NPC_BOU_HIO_CLASS l_HIO; + +#if DEBUG +daNpc_Bou_HIO_c::daNpc_Bou_HIO_c() { + m = daNpc_Bou_Param_c::m; +} + +void daNpc_Bou_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_Bou_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + int daNpc_Bou_c::create() { static int const heapSize[6] = {15696, 15696, 15696, 15696, 15696, 0}; daNpcT_ct(this, daNpc_Bou_c, l_faceMotionAnmData, l_motionAnmData, @@ -180,11 +206,17 @@ int daNpc_Bou_c::create() { fopAcM_SetMtx(this, mpMorf[0]->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -200.0f, -100.0f, -200.0f, 200.0f, 300.0f, 200.0f); mSound.init(¤t.pos, &eyePos, 3, 1); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("ボウ"); +#endif + reset(); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_Bou_Param_c::m.field_0x10, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl1.Set(mCcDCyl); mCyl1.SetStts(&mCcStts); mCyl1.SetTgHitCallback(tgHitCallBack); @@ -394,10 +426,10 @@ void daNpc_Bou_c::setParam() { selectAction(); srchActors(); u32 uVar7 = (fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e); - s16 sVar10 = daNpc_Bou_Param_c::m.field_0x48; - s16 sVar9 = daNpc_Bou_Param_c::m.field_0x4a; - s16 sVar8 = daNpc_Bou_Param_c::m.field_0x4c; - s16 sVar7 = daNpc_Bou_Param_c::m.field_0x4e; + s16 sVar10 = mpHIO->m.common.talk_distance; + s16 sVar9 = mpHIO->m.common.talk_angle; + s16 sVar8 = mpHIO->m.common.attention_distance; + s16 sVar7 = mpHIO->m.common.attention_angle; if (mType == TYPE_1) { field_0xfe0 = 3; field_0xfe4 = 6; @@ -433,18 +465,18 @@ void daNpc_Bou_c::setParam() { } attention_info.flags = uVar7; - scale.set(daNpc_Bou_Param_c::m.field_0x08, daNpc_Bou_Param_c::m.field_0x08, - daNpc_Bou_Param_c::m.field_0x08); - mCcStts.SetWeight(daNpc_Bou_Param_c::m.field_0x10); - mCylH = daNpc_Bou_Param_c::m.field_0x14; - mWallR = daNpc_Bou_Param_c::m.field_0x1c; - mAttnFovY = daNpc_Bou_Param_c::m.field_0x50; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, + mpHIO->m.common.scale); + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; + mAttnFovY = mpHIO->m.common.fov; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_Bou_Param_c::m.field_0x18); - mRealShadowSize = daNpc_Bou_Param_c::m.field_0x0c; - mExpressionMorfFrame = daNpc_Bou_Param_c::m.field_0x6c; - mMorfFrames = daNpc_Bou_Param_c::m.field_0x44; - gravity = daNpc_Bou_Param_c::m.field_0x04; + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mRealShadowSize = mpHIO->m.common.real_shadow_size; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; + gravity = mpHIO->m.common.gravity; } BOOL daNpc_Bou_c::checkChangeEvt() { @@ -606,7 +638,7 @@ void daNpc_Bou_c::action() { switch (((daTag_Push_c*) hit_actor)->getId()) { case 7: { mEvtNo = 8; - if (daNpc_Bou_Param_c::m.field_0x54 < current.pos.absXZ(daPy_getPlayerActorClass()->current.pos)) { + if (mpHIO->m.common.search_distance < current.pos.absXZ(daPy_getPlayerActorClass()->current.pos)) { if (daPy_getPlayerActorClass()->checkHorseRide()) { mEvtNo = 9; } @@ -635,11 +667,12 @@ void daNpc_Bou_c::setAttnPos() { f32 dVar8 = cM_s2rad(mCurAngle.y - field_0xd7e.y); J3DModel* model = mpMorf[0]->getModel(); mJntAnm.setParam(this, model, &cStack_3c, getBackboneJointNo(), getNeckJointNo(), - getHeadJointNo(), daNpc_Bou_Param_c::m.field_0x24, daNpc_Bou_Param_c::m.field_0x20, - daNpc_Bou_Param_c::m.field_0x2c, daNpc_Bou_Param_c::m.field_0x28, - daNpc_Bou_Param_c::m.field_0x34, daNpc_Bou_Param_c::m.field_0x30, - daNpc_Bou_Param_c::m.field_0x3c, daNpc_Bou_Param_c::m.field_0x38, - daNpc_Bou_Param_c::m.field_0x40, dVar8, NULL); + getHeadJointNo(), + mpHIO->m.common.body_angleX_min, mpHIO->m.common.body_angleX_max, + mpHIO->m.common.body_angleY_min, mpHIO->m.common.body_angleY_max, + mpHIO->m.common.head_angleX_min, mpHIO->m.common.head_angleX_max, + mpHIO->m.common.head_angleY_min, mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, dVar8, NULL); mJntAnm.calcJntRad(0.2f, 1.0f, dVar8); setMtx(); mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getHeadJointNo())); @@ -647,7 +680,7 @@ void daNpc_Bou_c::setAttnPos() { mJntAnm.setEyeAngleX(eyePos, 1.0f, 0); mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, 1, 1.0f, 0); cStack_3c.set(0.0f, 0.0f, 10.0f); - cStack_3c.y = daNpc_Bou_Param_c::m.field_0x00; + cStack_3c.y = mpHIO->m.common.attention_offset; mDoMtx_stack_c::YrotS(mCurAngle.y); mDoMtx_stack_c::multVec(&cStack_3c, &cStack_3c); attention_info.position = current.pos + cStack_3c; @@ -1213,7 +1246,7 @@ int daNpc_Bou_c::cutFindWolf(int arg) { cLib_chaseS(&shape_angle.y, current.angle.y, 0x800); mCurAngle.y = shape_angle.y; field_0xd7e.y = mCurAngle.y; - cLib_chaseF(&speedF, daNpc_Bou_Param_c::m.field_0x8c, 0.5f); + cLib_chaseF(&speedF, mpHIO->m.field_0x8c, 0.5f); mAcch.SetWallNone(); if (!cLib_calcTimer(&mEventTimer)) { ret_val = 1; @@ -1548,8 +1581,8 @@ int daNpc_Bou_c::talk(void* param_0) { daNpcT_offTmpBit(0x59); daHorse_c* horse_p = dComIfGp_getHorseActor(); if (horse_p && !horse_p->checkHorseCallWait()) { - if (chkPointInArea(horse_p->current.pos, current.pos, daNpc_Bou_Param_c::m.field_0x90, - daNpc_Bou_Param_c::m.field_0x94, daNpc_Bou_Param_c::m.field_0x98, 0)) { + if (chkPointInArea(horse_p->current.pos, current.pos, mpHIO->m.field_0x90, + mpHIO->m.field_0x94, mpHIO->m.field_0x98, 0)) { daNpcT_onTmpBit(0x59); } } @@ -1655,5 +1688,3 @@ actor_process_profile_definition g_profile_NPC_BOU = { fopAc_NPC_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType }; - -static daNpc_Bou_Param_c l_HIO; diff --git a/src/d/actor/d_a_npc_bouS.cpp b/src/d/actor/d_a_npc_bouS.cpp index 7bc2432317..4fa1b66694 100644 --- a/src/d/actor/d_a_npc_bouS.cpp +++ b/src/d/actor/d_a_npc_bouS.cpp @@ -953,6 +953,23 @@ void daNpcBouS_c::lookat() { mLookat.calc(this, mdl_p->getBaseTRMtx(), lookatAngle, i_snap, angle_delta, FALSE); } +BOOL daNpcBouS_c::chkFindPlayer() { + BOOL inArea = FALSE; + if (mActorMngrs[0].getActorP() == NULL) { + inArea = chkPlayerInSpeakArea(this); + } else { + inArea = chkPlayerInTalkArea(this); + } + + if (inArea) { + mActorMngrs[0].entry(daPy_getPlayerActorClass()); + } else { + mActorMngrs[0].remove(); + } + + return inArea; +} + BOOL daNpcBouS_c::step(s16 i_turnTargetAngle, int param_2) { if (mTurnMode == 0) { if (param_2 != 0) { @@ -1594,7 +1611,7 @@ int daNpcBouS_c::drawDbgInfo() { return 0; } -void daNpcBouS_c::drawOtherMdls() {} +inline void daNpcBouS_c::drawOtherMdls() {} AUDIO_INSTANCES; diff --git a/src/d/actor/d_a_npc_cd2.cpp b/src/d/actor/d_a_npc_cd2.cpp index 227ea5703b..503bff2d3f 100644 --- a/src/d/actor/d_a_npc_cd2.cpp +++ b/src/d/actor/d_a_npc_cd2.cpp @@ -815,7 +815,7 @@ static inline s16 Cd2_HIO_jntRZ(int param_1, int param_2) { } else { rv = l_Cd2_HIO.field_0x20c4[param_1 - 16].field_0x004[param_2].field_0x04.field_0x0C[2]; } - return 182.04444885253906f * rv; + return DEG2S(rv); } static inline s16 Cd2_HIO_jntRY(int param_1, int param_2) { @@ -825,7 +825,7 @@ static inline s16 Cd2_HIO_jntRY(int param_1, int param_2) { } else { rv = l_Cd2_HIO.field_0x20c4[param_1 - 16].field_0x004[param_2].field_0x04.field_0x0C[1]; } - return 182.04444885253906f * rv; + return DEG2S(rv); } static inline s16 Cd2_HIO_jntRX(int param_1, int param_2) { @@ -835,7 +835,7 @@ static inline s16 Cd2_HIO_jntRX(int param_1, int param_2) { } else { rv = l_Cd2_HIO.field_0x20c4[param_1 - 16].field_0x004[param_2].field_0x04.field_0x0C[0]; } - return 182.04444885253906f * rv; + return DEG2S(rv); } int daNpcCd2_c::jntNodeCB(J3DJoint* param_1, J3DModel* param_2) { diff --git a/src/d/actor/d_a_npc_chat.cpp b/src/d/actor/d_a_npc_chat.cpp index f650a01ffe..4bd1b8ef80 100644 --- a/src/d/actor/d_a_npc_chat.cpp +++ b/src/d/actor/d_a_npc_chat.cpp @@ -2180,22 +2180,12 @@ static char* l_evtNames[1] = { static char* l_myName = "Chat"; -static daNpcChat_Param_c l_HIO; +static NPC_CHAT_HIO_CLASS l_HIO; daNpcChat_c::eventFunc daNpcChat_c::mEvtSeqList[1] = { NULL, }; -daNpcChat_c::daNpcChat_c() {} - -daNpcChat_c::~daNpcChat_c() { - removeResrc(mType, mObjNum); - - if (heap != NULL) { - mAnm_p->stopZelAnime(); - } -} - static anmTblPrm const l_objTbl[13] = { {"object", BMDR_B_TUBO}, {"object", BMDR_B_TUBO}, @@ -2264,6 +2254,32 @@ daNpcChat_HIOParam const daNpcChat_Param_c::m = { false, }; +#if DEBUG +daNpcChat_HIO_c::daNpcChat_HIO_c() { + m = daNpcChat_Param_c::m; +} + +void daNpcChat_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpcChat_c::daNpcChat_c() {} + +daNpcChat_c::~daNpcChat_c() { + removeResrc(mType, mObjNum); + + if (heap != NULL) { + mAnm_p->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif +} + BOOL daNpcChat_c::NpcCreate(int type) { J3DModelData* a_mdlData_p = getNpcMdlDataP(type); @@ -2698,15 +2714,15 @@ cPhs__Step daNpcChat_c::Create() { mSound.setMdlType(mType, false, mTwilight & 0xFF); #if DEBUG - // mHIO = l_HIO; - mHIO->entryHIO("多人数会話NPC"); + mpHIO = &l_HIO; + mpHIO->entryHIO("多人数会話NPC"); #endif mAcchCir.SetWall(ChkWallH(mType), ChkWallR(mType)); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mAcch.CrrPos(dComIfG_Bgsp()); - mCcStts.Init(daNpcChat_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl.Set(mCcDCyl); mCyl.SetStts(&mCcStts); mCyl.SetTgType(0); @@ -2789,7 +2805,7 @@ int daNpcChat_c::Execute() { } int daNpcChat_c::Draw() { - draw(0, 0, daNpcChat_Param_c::m.common.real_shadow_size, NULL, 0); + draw(0, 0, mpHIO->m.common.real_shadow_size, NULL, 0); return 1; } @@ -2872,15 +2888,15 @@ inline f32 JntTZ(int type, int jnt_no) { } inline s16 JntRX(int type, int jnt_no) { - return (type < 16 ? a_jntTbl_M[type].jntPrm[jnt_no].jntR[0] : a_jntTbl_W[type - 16].jntPrm[jnt_no].jntR[0]) * 182.04445f; + return DEG2S(type < 16 ? a_jntTbl_M[type].jntPrm[jnt_no].jntR[0] : a_jntTbl_W[type - 16].jntPrm[jnt_no].jntR[0]); } inline s16 JntRY(int type, int jnt_no) { - return (type < 16 ? a_jntTbl_M[type].jntPrm[jnt_no].jntR[1] : a_jntTbl_W[type - 16].jntPrm[jnt_no].jntR[1]) * 182.04445f; + return DEG2S(type < 16 ? a_jntTbl_M[type].jntPrm[jnt_no].jntR[1] : a_jntTbl_W[type - 16].jntPrm[jnt_no].jntR[1]); } inline s16 JntRZ(int type, int jnt_no) { - return (type < 16 ? a_jntTbl_M[type].jntPrm[jnt_no].jntR[2] : a_jntTbl_W[type - 16].jntPrm[jnt_no].jntR[2]) * 182.04445f; + return DEG2S(type < 16 ? a_jntTbl_M[type].jntPrm[jnt_no].jntR[2] : a_jntTbl_W[type - 16].jntPrm[jnt_no].jntR[2]); } int daNpcChat_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { @@ -3063,10 +3079,10 @@ void daNpcChat_c::setParam() { } #if DEBUG - scale.set(daNpcChat_Param_c::m.common.scale, daNpcChat_Param_c::m.common.scale, daNpcChat_Param_c::m.common.scale); - mAcchCir.SetWallR(daNpcChat_Param_c::m.common.width); - mAcchCir.SetWallH(daNpcChat_Param_c::m.common.knee_length); - gravity = daNpcChat_Param_c::m.common.gravity; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); + mAcchCir.SetWallR(mpHIO->m.common.width); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + gravity = mpHIO->m.common.gravity; #endif } @@ -3577,153 +3593,153 @@ void daNpcChat_c::reset() { } void daNpcChat_c::playMotion() { - daNpcF_anmPlayData dat0 = {ANM_TALK_A, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat0 = {ANM_TALK_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1 = {ANM_WAIT_A, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat1 = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[1] = {&dat1}; - daNpcF_anmPlayData dat2 = {ANM_WAIT_B, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat2 = {ANM_WAIT_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[1] = {&dat2}; - daNpcF_anmPlayData dat3 = {ANM_TALK_A, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat3 = {ANM_TALK_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[1] = {&dat3}; - daNpcF_anmPlayData dat4 = {ANM_TALK_B, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat4 = {ANM_TALK_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat4[1] = {&dat4}; - daNpcF_anmPlayData dat5a = {ANM_TALK_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat5b = {ANM_WAIT_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat5c = {ANM_TALK_B, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat5d = {ANM_WAIT_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat5e = {ANM_TALK_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat5f = {ANM_TALK_B, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat5a = {ANM_TALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat5b = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat5c = {ANM_TALK_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat5d = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat5e = {ANM_TALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat5f = {ANM_TALK_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat5[6] = {&dat5a, &dat5b, &dat5c, &dat5d, &dat5e, &dat5f}; - daNpcF_anmPlayData dat6 = {ANM_TALK_C, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat6 = {ANM_TALK_C, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat6[1] = {&dat6}; - daNpcF_anmPlayData dat7a = {ANM_TALK_B, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat7b = {ANM_TALK_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat7c = {ANM_TALK_C, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat7d = {ANM_WAIT_A, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat7a = {ANM_TALK_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat7b = {ANM_TALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat7c = {ANM_TALK_C, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat7d = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat7[4] = {&dat7a, &dat7b, &dat7c, &dat7d}; - daNpcF_anmPlayData dat8a = {ANM_TALK_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat8b = {ANM_WAIT_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat8c = {ANM_TALK_B, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat8d = {ANM_WAIT_B, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat8e = {ANM_TALK_C, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat8a = {ANM_TALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat8b = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat8c = {ANM_TALK_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat8d = {ANM_WAIT_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat8e = {ANM_TALK_C, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat8[5] = {&dat8a, &dat8b, &dat8c, &dat8d, &dat8e}; - daNpcF_anmPlayData dat9a = {ANM_BROWSE_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat9b = {ANM_BROWSE_B, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat9a = {ANM_BROWSE_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat9b = {ANM_BROWSE_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat9[2] = {&dat9a, &dat9b}; - daNpcF_anmPlayData dat10a = {ANM_BROWSE_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat10b = {ANM_BROWSE_B, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat10c = {ANM_TALK_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat10d = {ANM_TALK_B, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat10e = {ANM_WAIT_A, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat10a = {ANM_BROWSE_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat10b = {ANM_BROWSE_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat10c = {ANM_TALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat10d = {ANM_TALK_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat10e = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat10[5] = {&dat10a, &dat10b, &dat10c, &dat10d, &dat10e}; - daNpcF_anmPlayData dat11a = {ANM_BROWSE_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat11b = {ANM_BROWSE_B, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat11c = {ANM_TALK_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat11d = {ANM_TALK_B, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat11e = {ANM_TALK_C, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat11f = {ANM_WAIT_A, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat11a = {ANM_BROWSE_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11b = {ANM_BROWSE_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11c = {ANM_TALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11d = {ANM_TALK_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11e = {ANM_TALK_C, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11f = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat11[6] = {&dat11a, &dat11b, &dat11c, &dat11d, &dat11e, &dat11f}; - daNpcF_anmPlayData dat12a = {ANM_2LADYTALK_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat12b = {ANM_2NORMALTALK_A, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat12a = {ANM_2LADYTALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat12b = {ANM_2NORMALTALK_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat12[2] = {&dat12a, &dat12b}; - daNpcF_anmPlayData dat13a = {ANM_2LADYTALK_B, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat13b = {ANM_2NORMALTALK_B, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat13a = {ANM_2LADYTALK_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat13b = {ANM_2NORMALTALK_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat13[2] = {&dat13a, &dat13b}; - daNpcF_anmPlayData dat14a = {ANM_TALK_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat14b = {ANM_2LADYTALK_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat14c = {ANM_WAIT_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat14d = {ANM_TALK_B, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat14e = {ANM_WAIT_A, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat14a = {ANM_TALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat14b = {ANM_2LADYTALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat14c = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat14d = {ANM_TALK_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat14e = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat14[5] = {&dat14a, &dat14b, &dat14c, &dat14d, &dat14e}; - daNpcF_anmPlayData dat15a = {ANM_WAIT_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat15b = {ANM_2LADYTALK_B, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat15c = {ANM_TALK_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat15d = {ANM_WAIT_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat15e = {ANM_TALK_B, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat15a = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat15b = {ANM_2LADYTALK_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat15c = {ANM_TALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat15d = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat15e = {ANM_TALK_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat15[5] = {&dat15a, &dat15b, &dat15c, &dat15d, &dat15e}; - daNpcF_anmPlayData dat16a = {ANM_TALK_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat16b = {ANM_2LADYTALK_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat16c = {ANM_WAIT_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat16d = {ANM_TALK_B, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat16e = {ANM_WAIT_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat16f = {ANM_2NORMALTALK_A, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat16a = {ANM_TALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat16b = {ANM_2LADYTALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat16c = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat16d = {ANM_TALK_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat16e = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat16f = {ANM_2NORMALTALK_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat16[6] = {&dat16a, &dat16b, &dat16c, &dat16d, &dat16e, &dat16f}; - daNpcF_anmPlayData dat17a = {ANM_WAIT_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat17b = {ANM_2LADYTALK_B, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat17c = {ANM_TALK_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat17d = {ANM_WAIT_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat17e = {ANM_TALK_B, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat17f = {ANM_2NORMALTALK_B, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat17a = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat17b = {ANM_2LADYTALK_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat17c = {ANM_TALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat17d = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat17e = {ANM_TALK_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat17f = {ANM_2NORMALTALK_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat17[6] = {&dat17a, &dat17b, &dat17c, &dat17d, &dat17e, &dat17f}; - daNpcF_anmPlayData dat18a = {ANM_TALK_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat18b = {ANM_2LADYTALK_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat18c = {ANM_2LADYTALK_B, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat18d = {ANM_WAIT_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat18e = {ANM_TALK_B, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat18f = {ANM_WAIT_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat18g = {ANM_2NORMALTALK_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat18h = {ANM_2NORMALTALK_B, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat18a = {ANM_TALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat18b = {ANM_2LADYTALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat18c = {ANM_2LADYTALK_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat18d = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat18e = {ANM_TALK_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat18f = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat18g = {ANM_2NORMALTALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat18h = {ANM_2NORMALTALK_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat18[8] = {&dat18a, &dat18b, &dat18c, &dat18d, &dat18e, &dat18f, &dat18g, &dat18h}; - daNpcF_anmPlayData dat19 = {ANM_LOOK_A, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat19 = {ANM_LOOK_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat19[1] = {&dat19}; - daNpcF_anmPlayData dat20 = {ANM_LOOK_B, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat20 = {ANM_LOOK_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat20[1] = {&dat20}; - daNpcF_anmPlayData dat21a = {ANM_LOOK_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat21b = {ANM_LOOK_B, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat21c = {ANM_WAIT_A, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat21a = {ANM_LOOK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat21b = {ANM_LOOK_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat21c = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat21[3] = {&dat21a, &dat21b, &dat21c}; - daNpcF_anmPlayData dat22 = {ANM_WAIT_WALL, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat22 = {ANM_WAIT_WALL, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat22[1] = {&dat22}; - daNpcF_anmPlayData dat23a = {ANM_TALK_WALL, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat23b = {ANM_WAIT_WALL, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat23c = {ANM_TALK_B_WALL, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat23d = {ANM_WAIT_WALL, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat23e = {ANM_TALK_WALL, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat23f = {ANM_TALK_B_WALL, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat23a = {ANM_TALK_WALL, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat23b = {ANM_WAIT_WALL, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat23c = {ANM_TALK_B_WALL, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat23d = {ANM_WAIT_WALL, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat23e = {ANM_TALK_WALL, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat23f = {ANM_TALK_B_WALL, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat23[6] = {&dat23a, &dat23b, &dat23c, &dat23d, &dat23e, &dat23f}; - daNpcF_anmPlayData dat24 = {ANM_SITWAIT_A, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat24 = {ANM_SITWAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat24[1] = {&dat24}; - daNpcF_anmPlayData dat25a = {ANM_SITTALK_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat25b = {ANM_SITWAIT_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat25c = {ANM_SITTALK_A_B, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat25d = {ANM_SITWAIT_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat25e = {ANM_SITTALK_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat25f = {ANM_SITTALK_A_B, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat25a = {ANM_SITTALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat25b = {ANM_SITWAIT_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat25c = {ANM_SITTALK_A_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat25d = {ANM_SITWAIT_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat25e = {ANM_SITTALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat25f = {ANM_SITTALK_A_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat25[6] = {&dat25a, &dat25b, &dat25c, &dat25d, &dat25e, &dat25f}; - daNpcF_anmPlayData dat26 = {ANM_SITWAIT_B, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat26 = {ANM_SITWAIT_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat26[1] = {&dat26}; - daNpcF_anmPlayData dat27a = {ANM_SITTALK_B, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat27b = {ANM_SITWAIT_B, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat27c = {ANM_SITTALK_B_B, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat27d = {ANM_SITWAIT_B, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat27e = {ANM_SITTALK_B, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat27f = {ANM_SITTALK_B_B, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat27a = {ANM_SITTALK_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat27b = {ANM_SITWAIT_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat27c = {ANM_SITTALK_B_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat27d = {ANM_SITWAIT_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat27e = {ANM_SITTALK_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat27f = {ANM_SITTALK_B_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat27[6] = {&dat27a, &dat27b, &dat27c, &dat27d, &dat27e, &dat27f}; - daNpcF_anmPlayData dat28 = {ANM_SING, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat28 = {ANM_SING, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat28[1] = {&dat28}; - daNpcF_anmPlayData dat29 = {ANM_SITTALK_A, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat29 = {ANM_SITTALK_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat29[1] = {&dat29}; - daNpcF_anmPlayData dat30 = {ANM_SITTALK_A_B, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat30 = {ANM_SITTALK_A_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat30[1] = {&dat30}; - daNpcF_anmPlayData dat31a = {ANM_SITTALK_A, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat31b = {ANM_SITTALK_A_B, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat31a = {ANM_SITTALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat31b = {ANM_SITTALK_A_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat31[2] = {&dat31a, &dat31b}; - daNpcF_anmPlayData dat32 = {ANM_SITTALK_B, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat32 = {ANM_SITTALK_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat32[1] = {&dat32}; - daNpcF_anmPlayData dat33 = {ANM_SITTALK_B_B, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat33 = {ANM_SITTALK_B_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat33[1] = {&dat33}; - daNpcF_anmPlayData dat34a = {ANM_SITTALK_B, daNpcChat_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat34b = {ANM_SITTALK_B_B, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat34a = {ANM_SITTALK_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat34b = {ANM_SITTALK_B_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat34[2] = {&dat34a, &dat34b}; - daNpcF_anmPlayData dat35 = {ANM_KAMAE, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat35 = {ANM_KAMAE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat35[1] = {&dat35}; - daNpcF_anmPlayData dat36 = {ANM_KAMAE_C, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat36 = {ANM_KAMAE_C, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat36[1] = {&dat36}; - daNpcF_anmPlayData dat37 = {ANM_KAMAE_STEP, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat37 = {ANM_KAMAE_STEP, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat37[1] = {&dat37}; - daNpcF_anmPlayData dat38 = {ANM_SURPRISE, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat38 = {ANM_SURPRISE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat38[1] = {&dat38}; - daNpcF_anmPlayData dat39 = {ANM_TO_WOLF, daNpcChat_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat39 = {ANM_TO_WOLF, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat39[1] = {&dat39}; daNpcF_anmPlayData** ppDat[40] = { diff --git a/src/d/actor/d_a_npc_doorboy.cpp b/src/d/actor/d_a_npc_doorboy.cpp index f8b48b07a0..8bebf0dfb4 100644 --- a/src/d/actor/d_a_npc_doorboy.cpp +++ b/src/d/actor/d_a_npc_doorboy.cpp @@ -115,24 +115,12 @@ static char* l_evtNames[1] = {NULL}; static char* l_myName = "DoorBoy"; -static daNpcDoorBoy_Param_c l_HIO; +static NPC_DOORBOY_HIO_CLASS l_HIO; daNpcDoorBoy_c::EventFn daNpcDoorBoy_c::mEvtSeqList[1] = { NULL }; -daNpcDoorBoy_c::daNpcDoorBoy_c() {} - -daNpcDoorBoy_c::~daNpcDoorBoy_c() { - for (int i = 0; i < 2; i++) { - dComIfG_resDelete(&mPhases[i], l_arcNames[i]); - } - - if (heap != NULL) { - mAnm_p->stopZelAnime(); - } -} - daNpcDoorBoy_HIOParam const daNpcDoorBoy_Param_c::m = { 55.0f, 0.0f, @@ -169,6 +157,34 @@ daNpcDoorBoy_HIOParam const daNpcDoorBoy_Param_c::m = { false, }; +#if DEBUG +daNpcDoorBoy_HIO_c::daNpcDoorBoy_HIO_c() { + m = daNpcDoorBoy_Param_c::m; +} + +void daNpcDoorBoy_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpcDoorBoy_c::daNpcDoorBoy_c() {} + +daNpcDoorBoy_c::~daNpcDoorBoy_c() { + for (int i = 0; i < 2; i++) { + dComIfG_resDelete(&mPhases[i], l_arcNames[i]); + } + + if (heap != NULL) { + mAnm_p->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif +} + cPhs__Step daNpcDoorBoy_c::Create() { fopAcM_ct(this, daNpcDoorBoy_c); @@ -193,18 +209,23 @@ cPhs__Step daNpcDoorBoy_c::Create() { mSound.init(¤t.pos, &eyePos, 3, 1); mSound.setMdlType(5, false, dKy_darkworld_check()); - mAcchCir.SetWall(daNpcDoorBoy_Param_c::m.common.width, daNpcDoorBoy_Param_c::m.common.knee_length); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("ドアボーイ"); +#endif + + mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mAcch.CrrPos(dComIfG_Bgsp()); - mCcStts.Init(daNpcDoorBoy_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); field_0xc98.Set(mCcDCyl); field_0xc98.SetStts(&mCcStts); field_0xc98.SetTgType(0); field_0xc98.SetTgSPrm(0); - field_0xc98.SetH(daNpcDoorBoy_Param_c::m.common.height); - field_0xc98.SetR(daNpcDoorBoy_Param_c::m.common.width); + field_0xc98.SetH(mpHIO->m.common.height); + field_0xc98.SetR(mpHIO->m.common.width); mGndChk = mAcch.m_gnd; mGroundH = mAcch.GetGroundH(); @@ -257,7 +278,7 @@ int daNpcDoorBoy_c::Execute() { } int daNpcDoorBoy_c::Draw() { - draw(FALSE, FALSE, daNpcDoorBoy_Param_c::m.common.real_shadow_size, NULL, FALSE); + draw(FALSE, FALSE, mpHIO->m.common.real_shadow_size, NULL, FALSE); dComIfGd_setSimpleShadow(¤t.pos, mAcch.GetGroundH(), 50.0f, mAcch.m_gnd, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); return 1; } @@ -281,7 +302,7 @@ int daNpcDoorBoy_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { case JNT_BACKBONE: case JNT_NECK: case JNT_HEAD: - setLookatMtx(jointNo, i_jointList, daNpcDoorBoy_Param_c::m.common.neck_rotation_ratio); + setLookatMtx(jointNo, i_jointList, mpHIO->m.common.neck_rotation_ratio); } i_model->setAnmMtx(jointNo, mDoMtx_stack_c::get()); @@ -374,17 +395,17 @@ BOOL daNpcDoorBoy_c::setAction(actionFunc action) { } inline void daNpcDoorBoy_c::playMotion() { - daNpcF_anmPlayData dat0 = {ANM_WAIT_A, daNpcDoorBoy_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat0 = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1 = {ANM_SING, daNpcDoorBoy_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat1 = {ANM_SING, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[1] = {&dat1}; - daNpcF_anmPlayData dat2 = {ANM_TALK_B, daNpcDoorBoy_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat2 = {ANM_TALK_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[1] = {&dat2}; - daNpcF_anmPlayData dat3 = {ANM_TALK_A, daNpcDoorBoy_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat3 = {ANM_TALK_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[1] = {&dat3}; - daNpcF_anmPlayData dat4 = {ANM_TALK_C, daNpcDoorBoy_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat4 = {ANM_TALK_C, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat4[1] = {&dat4}; - daNpcF_anmPlayData dat5 = {ANM_SIT_TO_WOLF_A, daNpcDoorBoy_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat5 = {ANM_SIT_TO_WOLF_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat5[1] = {&dat5}; daNpcF_anmPlayData** ppDat[12] = { pDat0, @@ -412,14 +433,14 @@ inline void daNpcDoorBoy_c::lookat() { J3DModel* model_p = mAnm_p->getModel(); int iVar1 = 0; - f32 body_angleX_min = daNpcDoorBoy_Param_c::m.common.body_angleX_min; - f32 body_angleX_max = daNpcDoorBoy_Param_c::m.common.body_angleX_max; - f32 body_angleY_min = daNpcDoorBoy_Param_c::m.common.body_angleY_min; - f32 body_angleY_max = daNpcDoorBoy_Param_c::m.common.body_angleY_max; - f32 head_angleX_min = daNpcDoorBoy_Param_c::m.common.head_angleX_min; - f32 head_angleX_max = daNpcDoorBoy_Param_c::m.common.head_angleX_max; - f32 head_angleY_min = daNpcDoorBoy_Param_c::m.common.head_angleY_min; - f32 head_angleY_max = daNpcDoorBoy_Param_c::m.common.head_angleY_max; + f32 body_angleX_min = mpHIO->m.common.body_angleX_min; + f32 body_angleX_max = mpHIO->m.common.body_angleX_max; + f32 body_angleY_min = mpHIO->m.common.body_angleY_min; + f32 body_angleY_max = mpHIO->m.common.body_angleY_max; + f32 head_angleX_min = mpHIO->m.common.head_angleX_min; + f32 head_angleX_max = mpHIO->m.common.head_angleX_max; + f32 head_angleY_min = mpHIO->m.common.head_angleY_min; + f32 head_angleY_max = mpHIO->m.common.head_angleY_max; s16 temp_r26 = mCurAngle.y - mOldAngle.y; cXyz sp30[] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; @@ -460,7 +481,7 @@ inline void daNpcDoorBoy_c::lookat() { inline bool daNpcDoorBoy_c::chkFindPlayer() { bool rv; - if (!chkActorInSight(daPy_getPlayerActorClass(), daNpcDoorBoy_Param_c::m.common.fov)) { + if (!chkActorInSight(daPy_getPlayerActorClass(), mpHIO->m.common.fov)) { mActorMngr[0].remove(); return false; } @@ -786,16 +807,16 @@ static int daNpcDoorBoy_IsDelete(void* a_this) { } void daNpcDoorBoy_c::setParam() { - attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(daNpcDoorBoy_Param_c::m.common.attention_distance, - daNpcDoorBoy_Param_c::m.common.attention_angle); + attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(mpHIO->m.common.attention_distance, + mpHIO->m.common.attention_angle); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; - attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(daNpcDoorBoy_Param_c::m.common.talk_distance, - daNpcDoorBoy_Param_c::m.common.talk_angle); + attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(mpHIO->m.common.talk_distance, + mpHIO->m.common.talk_angle); attention_info.flags = daPy_py_c::checkNowWolf() ? 0 : (fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e); - scale.setall(daNpcDoorBoy_Param_c::m.common.scale); - mAcchCir.SetWallR(daNpcDoorBoy_Param_c::m.common.width); - mAcchCir.SetWallH(daNpcDoorBoy_Param_c::m.common.knee_length); - gravity = daNpcDoorBoy_Param_c::m.common.gravity; + scale.setall(mpHIO->m.common.scale); + mAcchCir.SetWallR(mpHIO->m.common.width); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + gravity = mpHIO->m.common.gravity; } BOOL daNpcDoorBoy_c::main() { @@ -835,8 +856,8 @@ void daNpcDoorBoy_c::setAttnPos() { field_0xc98.SetC(sp28); #if DEBUG - field_0xc98.SetH(daNpcDoorBoy_Param_c::m.common.height); - field_0xc98.SetR(daNpcDoorBoy_Param_c::m.common.width); + field_0xc98.SetH(mpHIO->m.common.height); + field_0xc98.SetR(mpHIO->m.common.width); #endif dComIfG_Ccsp()->Set(&field_0xc98); } diff --git a/src/d/actor/d_a_npc_drainSol.cpp b/src/d/actor/d_a_npc_drainSol.cpp index d66a99b13a..313d4b449b 100644 --- a/src/d/actor/d_a_npc_drainSol.cpp +++ b/src/d/actor/d_a_npc_drainSol.cpp @@ -23,16 +23,6 @@ static char* l_arcNames[2] = { "DrainSol2", }; -daNpcDrSol_c::daNpcDrSol_c() {} - -daNpcDrSol_c::~daNpcDrSol_c() { - dComIfG_resDelete(&mPhase, l_arcNames[mType]); - - if (heap != NULL) { - mAnm_p->stopZelAnime(); - } -} - const daNpcDrSol_HIOParam daNpcDrSol_Param_c::m = { 40.0f, 0.0f, @@ -69,6 +59,34 @@ const daNpcDrSol_HIOParam daNpcDrSol_Param_c::m = { 0, }; +static NPC_DRSOL_HIO_CLASS l_HIO; + +#if DEBUG +daNpcDrSol_HIO_c::daNpcDrSol_HIO_c() { + m = daNpcDrSol_Param_c::m; +} + +void daNpcDrSol_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpcDrSol_c::daNpcDrSol_c() {} + +daNpcDrSol_c::~daNpcDrSol_c() { + dComIfG_resDelete(&mPhase, l_arcNames[mType]); + + if (heap != NULL) { + mAnm_p->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif +} + int daNpcDrSol_c::Create() { fopAcM_ct(this, daNpcDrSol_c); @@ -91,7 +109,12 @@ int daNpcDrSol_c::Create() { fopAcM_setCullSizeBox(this, -60.0f, -10.0f, -60.0f, 60.0f, 200.0f, 60.0f); mSound.init(¤t.pos, &eyePos, 3, 1); - mAcchCir.SetWall(daNpcDrSol_Param_c::m.common.width, daNpcDrSol_Param_c::m.common.knee_length); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("下水道の兵士"); +#endif + + mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mAcch.CrrPos(dComIfG_Bgsp()); @@ -167,7 +190,7 @@ int daNpcDrSol_c::Execute() { } int daNpcDrSol_c::Draw() { - draw(FALSE, FALSE, daNpcDrSol_Param_c::m.common.real_shadow_size, NULL, 0); + draw(FALSE, FALSE, mpHIO->m.common.real_shadow_size, NULL, 0); return 1; } @@ -185,17 +208,17 @@ int daNpcDrSol_c::createHeapCallBack(fopAc_ac_c* actor) { } void daNpcDrSol_c::playMotion() { - daNpcF_anmPlayData dat0 = {0, daNpcDrSol_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat0 = {0, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[] = {&dat0}; - daNpcF_anmPlayData dat1 = {1, daNpcDrSol_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat1 = {1, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[] = {&dat1}; - daNpcF_anmPlayData dat2a = {2, daNpcDrSol_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat2a = {2, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat2b = {1, 0.0f, 0}; daNpcF_anmPlayData* pDat2[] = {&dat2a, &dat2b}; - daNpcF_anmPlayData dat3a = {0, daNpcDrSol_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat3a = {0, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[] = {&dat3a}; daNpcF_anmPlayData** ppDat[5] = { @@ -236,9 +259,9 @@ void daNpcDrSol_c::reset() { mTwilight = dKy_darkworld_check(); - attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(daNpcDrSol_Param_c::m.common.attention_distance, daNpcDrSol_Param_c::m.common.attention_angle); + attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(mpHIO->m.common.attention_distance, mpHIO->m.common.attention_angle); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; - attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(daNpcDrSol_Param_c::m.common.talk_distance, daNpcDrSol_Param_c::m.common.talk_angle); + attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(mpHIO->m.common.talk_distance, mpHIO->m.common.talk_angle); setAction(&daNpcDrSol_c::wait); } @@ -373,12 +396,12 @@ void daNpcDrSol_c::setParam() { } #if PLATFORM_SHIELD - attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(daNpcDrSol_Param_c::m.common.attention_distance, daNpcDrSol_Param_c::m.common.attention_angle); + attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(mpHIO->m.common.attention_distance, mpHIO->m.common.attention_angle); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; - attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(daNpcDrSol_Param_c::m.common.talk_distance, daNpcDrSol_Param_c::m.common.talk_angle); + attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(mpHIO->m.common.talk_distance, mpHIO->m.common.talk_angle); - mAcchCir.SetWallR(daNpcDrSol_Param_c::m.common.width); - mAcchCir.SetWallH(daNpcDrSol_Param_c::m.common.knee_length); + mAcchCir.SetWallR(mpHIO->m.common.width); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); #endif } @@ -400,7 +423,7 @@ void daNpcDrSol_c::setAttnPos() { mDoMtx_stack_c::multVecZero(&mHeadPos); mDoMtx_stack_c::multVec(&sp14, &eyePos); - attention_info.position.set(mHeadPos.x, mHeadPos.y + daNpcDrSol_Param_c::m.common.attention_offset, mHeadPos.z); + attention_info.position.set(mHeadPos.x, mHeadPos.y + mpHIO->m.common.attention_offset, mHeadPos.z); cXyz sp8; mDoMtx_stack_c::copy(mAnm_p->getModel()->getAnmMtx(2)); @@ -408,8 +431,8 @@ void daNpcDrSol_c::setAttnPos() { sp8.y = current.pos.y; mCyl.SetC(sp8); - mCyl.SetH(daNpcDrSol_Param_c::m.common.height); - mCyl.SetR(daNpcDrSol_Param_c::m.common.width); + mCyl.SetH(mpHIO->m.common.height); + mCyl.SetR(mpHIO->m.common.width); dComIfG_Ccsp()->Set(&mCyl); } @@ -430,8 +453,6 @@ BOOL daNpcDrSol_c::drawDbgInfo() { return false; } -static daNpcDrSol_Param_c l_HIO; - static char* dummyString() { return "Shoe"; }; diff --git a/src/d/actor/d_a_npc_fairy_seirei.cpp b/src/d/actor/d_a_npc_fairy_seirei.cpp index e3457d0919..f5cc87f8f4 100644 --- a/src/d/actor/d_a_npc_fairy_seirei.cpp +++ b/src/d/actor/d_a_npc_fairy_seirei.cpp @@ -60,19 +60,38 @@ daNpc_FairySeirei_c::cutFunc daNpc_FairySeirei_c::mCutList[1] = { NULL, }; + +const daNpc_FairySeirei_HIOParam daNpc_FairySeirei_Param_c::m = { + 600.0f, 0.0f, 1.0f, 4000.0f, 255.0f, 200.0f, 0.0f, 60.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0, 0.0f, 0.0f, 0.0f, 0.0f, 0, 0, + 0, 0, 0, 0, 0, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 600.0f, +}; + +static NPC_FAIRY_SEIREI_HIO_CLASS l_HIO; + +#if DEBUG +daNpc_FairySeirei_HIO_c::daNpc_FairySeirei_HIO_c() { + m = daNpc_FairySeirei_Param_c::m; +} + +void daNpc_FairySeirei_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + daNpc_FairySeirei_c::~daNpc_FairySeirei_c() { if (heap != NULL) { mpMorf[0]->stopZelAnime(); } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif } - -const f32 daNpc_FairySeirei_Param_c::m[37] = { - 600.0f, 0.0f, 1.0f, 4000.0f, 255.0f, 200.0f, 0.0f, 60.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 600.0f, -}; - int daNpc_FairySeirei_c::create() { daNpcT_ct(this, daNpc_FairySeirei_c, &l_faceMotionAnmData, l_motionAnmData, l_faceMotionSequenceData, 4, l_motionSequenceData, 4, l_evtList, @@ -83,9 +102,15 @@ int daNpc_FairySeirei_c::create() { if (isDelete()) { return cPhs_ERROR_e; } + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("大妖精の残留思念"); +#endif + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_FairySeirei_Param_c::m[4], 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl.Set(mCcDCyl); mCyl.SetStts(&mCcStts); mAcch.CrrPos(dComIfG_Bgsp()); @@ -140,24 +165,24 @@ void daNpc_FairySeirei_c::reset() { void daNpc_FairySeirei_c::setParam() { selectAction(); srchActors(); - dComIfGp_getAttention()->getDistTable(0x28).mDistMax = daNpc_FairySeirei_Param_c::m[36]; - dComIfGp_getAttention()->getDistTable(0x28).mDistMaxRelease = daNpc_FairySeirei_Param_c::m[36]; - dComIfGp_getAttention()->getDistTable(0x27).mDistMax = daNpc_FairySeirei_Param_c::m[36]; - dComIfGp_getAttention()->getDistTable(0x27).mDistMaxRelease = daNpc_FairySeirei_Param_c::m[36]; + dComIfGp_getAttention()->getDistTable(0x28).mDistMax = mpHIO->m.field_0x90; + dComIfGp_getAttention()->getDistTable(0x28).mDistMaxRelease = mpHIO->m.field_0x90; + dComIfGp_getAttention()->getDistTable(0x27).mDistMax = mpHIO->m.field_0x90; + dComIfGp_getAttention()->getDistTable(0x27).mDistMaxRelease = mpHIO->m.field_0x90; attention_info.distances[fopAc_attn_LOCK_e] = 0x27; attention_info.distances[fopAc_attn_TALK_e] = 0x27; attention_info.distances[fopAc_attn_SPEAK_e] = 0x27; attention_info.flags = fopAc_AttnFlag_SPEAK_e; - mCcStts.SetWeight(daNpc_FairySeirei_Param_c::m[4]); - mCylH = daNpc_FairySeirei_Param_c::m[5]; - mWallR = daNpc_FairySeirei_Param_c::m[7]; - mAttnFovY = daNpc_FairySeirei_Param_c::m[20]; + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; + mAttnFovY = mpHIO->m.common.fov; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_FairySeirei_Param_c::m[6]); - mRealShadowSize = daNpc_FairySeirei_Param_c::m[3]; - mExpressionMorfFrame = daNpc_FairySeirei_Param_c::m[27]; - mMorfFrames = daNpc_FairySeirei_Param_c::m[17]; - gravity = daNpc_FairySeirei_Param_c::m[1]; + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mRealShadowSize = mpHIO->m.common.real_shadow_size; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; + gravity = mpHIO->m.common.gravity; } void daNpc_FairySeirei_c::srchActors() { @@ -245,7 +270,7 @@ void daNpc_FairySeirei_c::setCollision() { void daNpc_FairySeirei_c::setAttnPos() { attention_info.position = current.pos; - attention_info.position.y += daNpc_FairySeirei_Param_c::m[0] - 350.0f; + attention_info.position.y += mpHIO->m.common.attention_offset - 350.0f; eyePos = attention_info.position; setPrtcls(); ptcl_se(); @@ -386,9 +411,6 @@ static int daNpc_FairySeirei_IsDelete(void* i_this) { return 1; } - -static daNpc_FairySeirei_Param_c l_HIO; - static actor_method_class daNpc_FairySeirei_MethodTable = { daNpc_FairySeirei_Create, daNpc_FairySeirei_Delete, daNpc_FairySeirei_Execute, daNpc_FairySeirei_IsDelete, daNpc_FairySeirei_Draw, diff --git a/src/d/actor/d_a_npc_gra.cpp b/src/d/actor/d_a_npc_gra.cpp index 246aa4c9b5..07fc92ca16 100644 --- a/src/d/actor/d_a_npc_gra.cpp +++ b/src/d/actor/d_a_npc_gra.cpp @@ -26,12 +26,6 @@ const daNpc_grA_HIOParam daNpc_grA_Param_c::m = { 1.35f, }; -#if DEBUG -#define GET_HIO(x) mpHio->mHioParams.x -#else -#define GET_HIO(x) daNpc_grA_Param_c::m.x -#endif - static int l_bmdGetParamList[][2] = { 3, 1, 3, 2, @@ -131,7 +125,7 @@ static int l_evtGetParamList[][2] = { #if DEBUG daNpc_grA_HIO_c::daNpc_grA_HIO_c() { - mHioParams = daNpc_grA_Param_c::m; + m = daNpc_grA_Param_c::m; } #endif @@ -256,20 +250,20 @@ void daNpc_grA_HIO_c::listenPropertyEvent(const JORPropertyEvent* i_event) { if (file.open(6, "すべてのファイル(*.*)\0*.*\0", NULL, NULL, NULL)) { memset(buff, 0, sizeof(buff)); len = 0; - daNpcF_commonListenPropertyEvent(buff, &len, &this->mHioParams.mNpcFParams); - sprintf(buff + len, "%d, \t// お辞儀タイマー\n", this->mHioParams.mBowTimer); + daNpcF_commonListenPropertyEvent(buff, &len, &m.common); + sprintf(buff + len, "%d, \t// お辞儀タイマー\n", m.mBowTimer); len = strlen(buff); - sprintf(buff + len, "%3.3f, \t// 回転移動速度係数\n", this->mHioParams.mRotationalSpeed); + sprintf(buff + len, "%3.3f, \t// 回転移動速度係数\n", m.mRotationalSpeed); len = strlen(buff); - sprintf(buff + len, "%3.3f, \t// 歩き移動速度\n", this->mHioParams.mWalkingSpeed); + sprintf(buff + len, "%3.3f, \t// 歩き移動速度\n", m.mWalkingSpeed); len = strlen(buff); - sprintf(buff + len, "%3.3f, \t// 歩きアニメ速度\n", this->mHioParams.mWalkingAnimationSpeed); + sprintf(buff + len, "%3.3f, \t// 歩きアニメ速度\n", m.mWalkingAnimationSpeed); len = strlen(buff); - sprintf(buff + len, "%d, \t// 歩行回転速度\n", this->mHioParams.mWalkingRotationSpeed); + sprintf(buff + len, "%d, \t// 歩行回転速度\n", m.mWalkingRotationSpeed); len = strlen(buff); - sprintf(buff + len, "%d, \t// 歩行回転分割数\n", this->mHioParams.mWalkingRotationDivisions); + sprintf(buff + len, "%d, \t// 歩行回転分割数\n", m.mWalkingRotationDivisions); len = strlen(buff); - sprintf(buff + len, "%3.3f, \t// パーティクルサイズ\n", this->mHioParams.mParticleSize); + sprintf(buff + len, "%3.3f, \t// パーティクルサイズ\n", m.mParticleSize); // @BUG: should update len here, otherwise the final length won't include the final sprintf file.writeData(buff, len); file.close(); @@ -281,14 +275,14 @@ void daNpc_grA_HIO_c::listenPropertyEvent(const JORPropertyEvent* i_event) { } void daNpc_grA_HIO_c::genMessage(JORMContext* context) { - daNpcF_commonGenMessage(context, &mHioParams.mNpcFParams); - context->genSlider("お辞儀タイマー ", &mHioParams.mBowTimer, 0, 1000, 0, NULL, -1, -1, 0x200, 0x18); - context->genSlider("回転移動速度係数", &mHioParams.mRotationalSpeed, 0.0f, 100.0f, 0, NULL, -1, -1, 0x200, 0x18); - context->genSlider("歩き移動速度 ", &mHioParams.mWalkingSpeed, 0.0f, 100.0f, 0, NULL, -1, -1, 0x200, 0x18); - context->genSlider("歩きアニメ速度 ", &mHioParams.mWalkingAnimationSpeed, 0.0f, 10.0f, 0, NULL, -1, -1, 0x200, 0x18); - context->genSlider("歩行回転角度 ", &mHioParams.mWalkingRotationSpeed, 0, 0x7fff, 0, NULL, -1, -1, 0x200, 0x18); - context->genSlider("歩行回転分割数 ", &mHioParams.mWalkingRotationDivisions, 0, 0x100, 0, NULL, -1, -1, 0x200, 0x18); - context->genSlider("エフェクトサイズ", &mHioParams.mParticleSize, 0.0f, 10.0f, 0, NULL, -1, -1, 0x200, 0x18); + daNpcF_commonGenMessage(context, &m.common); + context->genSlider("お辞儀タイマー ", &m.mBowTimer, 0, 1000, 0, NULL, -1, -1, 0x200, 0x18); + context->genSlider("回転移動速度係数", &m.mRotationalSpeed, 0.0f, 100.0f, 0, NULL, -1, -1, 0x200, 0x18); + context->genSlider("歩き移動速度 ", &m.mWalkingSpeed, 0.0f, 100.0f, 0, NULL, -1, -1, 0x200, 0x18); + context->genSlider("歩きアニメ速度 ", &m.mWalkingAnimationSpeed, 0.0f, 10.0f, 0, NULL, -1, -1, 0x200, 0x18); + context->genSlider("歩行回転角度 ", &m.mWalkingRotationSpeed, 0, 0x7fff, 0, NULL, -1, -1, 0x200, 0x18); + context->genSlider("歩行回転分割数 ", &m.mWalkingRotationDivisions, 0, 0x100, 0, NULL, -1, -1, 0x200, 0x18); + context->genSlider("エフェクトサイズ", &m.mParticleSize, 0.0f, 10.0f, 0, NULL, -1, -1, 0x200, 0x18); context->genButton("ファイル書き出し", 0x40000002, 0, NULL, -1, -1, 0x200, 0x18); } #endif @@ -336,8 +330,8 @@ daNpc_grA_c::~daNpc_grA_c() { } #if DEBUG - if (mpHio != NULL) { - mpHio->removeHIO(); + if (mpHIO != NULL) { + mpHIO->removeHIO(); } #endif } @@ -381,21 +375,21 @@ BOOL daNpc_grA_c::create() { mCreature.init(¤t.pos, &eyePos, 3, 1); #if DEBUG - mpHio = &l_HIO; - mpHio->entryHIO("ゴロン一般"); + mpHIO = &l_HIO; + mpHIO->entryHIO("ゴロン一般"); #endif f32 v; if (mType == 2) { v = 120.0f; } else { - v = GET_HIO(mNpcFParams.width); + v = mpHIO->m.common.width; } - mAcchCir.SetWall(v, GET_HIO(mNpcFParams.knee_length)); + mAcchCir.SetWall(v, mpHIO->m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(GET_HIO(mNpcFParams.weight), 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); field_0xC98.Set(mCcDCyl); field_0xC98.SetStts(&mCcStts); @@ -503,7 +497,7 @@ BOOL daNpc_grA_c::Execute() { } BOOL daNpc_grA_c::Draw() { - return draw(chkAction(&daNpc_grA_c::test), 0, GET_HIO(mNpcFParams.real_shadow_size), NULL, 0); + return draw(chkAction(&daNpc_grA_c::test), 0, mpHIO->m.common.real_shadow_size, NULL, 0); } BOOL daNpc_grA_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { @@ -525,7 +519,7 @@ BOOL daNpc_grA_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { case 1: case 3: case 4: - setLookatMtx(jntNo, arr, GET_HIO(mNpcFParams.neck_rotation_ratio)); + setLookatMtx(jntNo, arr, mpHIO->m.common.neck_rotation_ratio); } if (jntNo == 1) { @@ -719,10 +713,10 @@ void daNpc_grA_c::setParam() { } else { field_0x145C = 0; field_0x1460 = 0; - talkDistance = GET_HIO(mNpcFParams.talk_distance); - talkAngle = GET_HIO(mNpcFParams.talk_angle); - attnDistance = GET_HIO(mNpcFParams.attention_distance); - attnAngle = GET_HIO(mNpcFParams.attention_angle); + talkDistance = mpHIO->m.common.talk_distance; + talkAngle = mpHIO->m.common.talk_angle; + attnDistance = mpHIO->m.common.attention_distance; + attnAngle = mpHIO->m.common.attention_angle; } if (mType == 5) @@ -745,17 +739,17 @@ void daNpc_grA_c::setParam() { attention_info.flags = flags; } } - scale.set(GET_HIO(mNpcFParams.scale), GET_HIO(mNpcFParams.scale), GET_HIO(mNpcFParams.scale)); + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); f32 width; if (mType == 2) { width = 120.0f; } else { - width = GET_HIO(mNpcFParams.width); + width = mpHIO->m.common.width; } mAcchCir.SetWallR(width); - mAcchCir.SetWallH(GET_HIO(mNpcFParams.knee_length)); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); if (mType != 6) { - gravity = GET_HIO(mNpcFParams.gravity); + gravity = mpHIO->m.common.gravity; } } @@ -764,7 +758,7 @@ BOOL daNpc_grA_c::main() { JUT_ASSERT(1367, mAnm_p != NULL); // TODO: update "mAnm_p" to "mAnm_p" if (doEvent() == 0) { if (hitChk2(&field_0xC98, TRUE, FALSE)) { - setDamage(GET_HIO(mNpcFParams.damage_time), 0x17, 0); + setDamage(mpHIO->m.common.damage_time, 0x17, 0); setLookMode(1); } else if (mIsDamaged && mDamageTimer == 0) { field_0x1472 = 0; @@ -783,7 +777,7 @@ BOOL daNpc_grA_c::main() { if (checkHide()) { attention_info.flags = 0; } - if (GET_HIO(mNpcFParams.debug_mode_ON) == 0 && + if (mpHIO->m.common.debug_mode_ON == 0 && (!dComIfGp_event_runCheck() || (mOrderNewEvt && dComIfGp_getEvent()->isOrderOK()))) { u16 j = 1; @@ -820,7 +814,7 @@ void daNpc_grA_c::setAttnPos() { cXyz viewVector, offset, o_pos; f32 attnOffset = 0.0f; if (mOrderEvtNo != 1) { - attnOffset = GET_HIO(mNpcFParams.attention_offset); + attnOffset = mpHIO->m.common.attention_offset; } mDoMtx_stack_c::YrotS(field_0x990); cLib_addCalc2(&field_0x984[0], 0.0f, 0.1f, 125.0f); @@ -893,12 +887,12 @@ void daNpc_grA_c::setAttnPos() { } } f32 width = 0.0f; - f32 height = GET_HIO(mNpcFParams.height); + f32 height = mpHIO->m.common.height; if (mType == 2) { width = 120.0f; height = 215.0f; } else { - width = GET_HIO(mNpcFParams.width); + width = mpHIO->m.common.width; } if (chkAction(&daNpc_grA_c::waitSpaWater)) { cXyz center(0.0f, 0.0f, -80.0f); @@ -1179,7 +1173,7 @@ void daNpc_grA_c::setMotion(int i_motion, f32 i_MorfOverride, int param_2) { BOOL daNpc_grA_c::drawDbgInfo() { #if DEBUG - if (GET_HIO(mNpcFParams.debug_info_ON) != 0) { + if (mpHIO->m.common.debug_info_ON != 0) { cXyz o_pos; f32 maxSpeakDist = dComIfGp_getAttention()->getDistTable(attention_info.distances[fopAc_attn_SPEAK_e]).mDistMax; f32 maxTalkDist = dComIfGp_getAttention()->getDistTable(attention_info.distances[fopAc_attn_TALK_e]).mDistMax; @@ -1191,23 +1185,23 @@ BOOL daNpc_grA_c::drawDbgInfo() { dDbVw_drawCircleOpa(attention_info.position, maxTalkDist, (GXColor){0xc8, 0, 0, 0xff}, 1, 12); - if (GET_HIO(mNpcFParams.fov) != 180.0f) { - cXyz offset(0.0f, 0.0f, GET_HIO(mNpcFParams.search_distance)); + if (mpHIO->m.common.fov != 180.0f) { + cXyz offset(0.0f, 0.0f, mpHIO->m.common.search_distance); mDoMtx_stack_c::transS(attention_info.position); mDoMtx_stack_c::YrotM(mHeadAngle.y); - mDoMtx_stack_c::YrotM(cM_deg2s(-GET_HIO(mNpcFParams.fov))); + mDoMtx_stack_c::YrotM(cM_deg2s(-mpHIO->m.common.fov)); mDoMtx_stack_c::multVec(&offset, &o_pos); dDbVw_drawLineOpa(attention_info.position, o_pos, (GXColor){0, 0, 0xc8, 0xff}, 1, 12); mDoMtx_stack_c::transS(attention_info.position); mDoMtx_stack_c::YrotM(mHeadAngle.y); - mDoMtx_stack_c::YrotM(cM_deg2s(GET_HIO(mNpcFParams.fov))); + mDoMtx_stack_c::YrotM(cM_deg2s(mpHIO->m.common.fov)); mDoMtx_stack_c::multVec(&offset, &o_pos); dDbVw_drawLineOpa(attention_info.position, o_pos, (GXColor){0, 0, 0xc8, 0xff}, 1, 12); } - dDbVw_drawCircleOpa(attention_info.position, GET_HIO(mNpcFParams.search_distance), + dDbVw_drawCircleOpa(attention_info.position, mpHIO->m.common.search_distance, (GXColor){0, 0, 0xc8, 0xff}, 1, 12); dDbVw_drawSphereXlu(eyePos, 18.f, (GXColor){0x80, 0x80, 0x80, 0xA0}, 1); @@ -1456,82 +1450,82 @@ void daNpc_grA_c::reset() { } void daNpc_grA_c::playExpression() { - daNpcF_anmPlayData dat0 = {1, GET_HIO(mNpcFParams.morf_frame), 1}; - daNpcF_anmPlayData dat0_ = {0, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat0 = {1, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat0_ = {0, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[] = {&dat0, &dat0_}; - daNpcF_anmPlayData dat1 = {2, GET_HIO(mNpcFParams.morf_frame), 1}; - daNpcF_anmPlayData dat1_ = {0, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat1 = {2, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat1_ = {0, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[] = {&dat1, &dat1_}; - daNpcF_anmPlayData dat2 = {7, GET_HIO(mNpcFParams.morf_frame), 1}; - daNpcF_anmPlayData dat2_ = {6, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat2 = {7, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat2_ = {6, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[] = {&dat2, &dat2_ }; - daNpcF_anmPlayData dat3 = {5, GET_HIO(mNpcFParams.morf_frame), 1}; - daNpcF_anmPlayData dat3_ = {4, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat3 = {5, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat3_ = {4, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[] = {&dat3, &dat3_}; - daNpcF_anmPlayData dat5 = {15, GET_HIO(mNpcFParams.morf_frame), 1}; - daNpcF_anmPlayData dat5_ = {12, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat5 = {15, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat5_ = {12, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat5[] = {&dat5, &dat5_}; - daNpcF_anmPlayData dat6 = {13, GET_HIO(mNpcFParams.morf_frame), 1}; - daNpcF_anmPlayData dat6_ = {14, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat6 = {13, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat6_ = {14, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat6[] = {&dat6, &dat6_}; - daNpcF_anmPlayData dat7 = {0x13, GET_HIO(mNpcFParams.morf_frame), 1}; - daNpcF_anmPlayData dat7_ = {0x17, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat7 = {0x13, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat7_ = {0x17, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat7[] = {&dat7, &dat7_}; - daNpcF_anmPlayData dat8 = {0x14, GET_HIO(mNpcFParams.morf_frame), 1}; - daNpcF_anmPlayData dat8_ = {0x17, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat8 = {0x14, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat8_ = {0x17, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat8[] = {&dat8, &dat8_}; - daNpcF_anmPlayData dat9 = {0x15, GET_HIO(mNpcFParams.morf_frame), 1}; - daNpcF_anmPlayData dat9_ = {0xe, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat9 = {0x15, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat9_ = {0xe, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat9[] = {&dat9, &dat9_}; - daNpcF_anmPlayData dat11 = {8, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat11 = {8, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat11[] = {&dat11}; - daNpcF_anmPlayData dat12 = {9, GET_HIO(mNpcFParams.morf_frame), 1}; - daNpcF_anmPlayData dat12_ = {8, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat12 = {9, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat12_ = {8, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat12[] = {&dat12, &dat12_}; - daNpcF_anmPlayData dat13 = {10, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat13 = {10, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat13[] = {&dat13}; - daNpcF_anmPlayData dat14 = {0xb, GET_HIO(mNpcFParams.morf_frame), 1}; - daNpcF_anmPlayData dat14_ = {0xa, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat14 = {0xb, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat14_ = {0xa, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat14[] = {&dat14, &dat14_}; - daNpcF_anmPlayData dat15 = {6, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat15 = {6, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat15[] = {&dat15}; - daNpcF_anmPlayData dat16 = {4, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat16 = {4, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat16[] = {&dat16}; - daNpcF_anmPlayData dat17 = {0xc, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat17 = {0xc, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat17[] = {&dat17}; - daNpcF_anmPlayData dat18 = {0xe, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat18 = {0xe, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat18[] = {&dat18}; - daNpcF_anmPlayData dat19 = {16, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat19 = {16, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat19[] = {&dat19}; - daNpcF_anmPlayData dat20 = {17, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat20 = {17, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat20[] = {&dat20}; - daNpcF_anmPlayData dat21 = {18, GET_HIO(mNpcFParams.morf_frame), 1}; + daNpcF_anmPlayData dat21 = {18, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat21_ = {0xe, 0.0f, 0}; daNpcF_anmPlayData* pDat21[] = {&dat21, &dat21_}; - daNpcF_anmPlayData dat22 = {12, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat22 = {12, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat22[] = {&dat22}; - daNpcF_anmPlayData dat23 = {0, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat23 = {0, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat23[] = {&dat23}; daNpcF_anmPlayData** ppDat[24] = { @@ -1567,81 +1561,81 @@ void daNpc_grA_c::playExpression() { } void daNpc_grA_c::playMotion() { - daNpcF_anmPlayData dat0 = {0x16, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat0 = {0x16, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[] = {&dat0}; - daNpcF_anmPlayData dat1 = {0x18, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat1 = {0x18, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[] = {&dat1}; - daNpcF_anmPlayData dat2 = {0x27, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat2 = {0x27, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[] = {&dat2}; - daNpcF_anmPlayData dat3 = {0x1D, GET_HIO(mNpcFParams.morf_frame), 1}; + daNpcF_anmPlayData dat3 = {0x1D, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat3_ = {0x16, 0.0f, 0}; daNpcF_anmPlayData* pDat3[] = {&dat3, &dat3_}; - daNpcF_anmPlayData dat4 = {0x1e, GET_HIO(mNpcFParams.morf_frame), 1}; + daNpcF_anmPlayData dat4 = {0x1e, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat4_ = {0x16, 0.0f, 0}; daNpcF_anmPlayData* pDat4[] = {&dat4, &dat4_}; - daNpcF_anmPlayData dat5 = {0x17, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat5 = {0x17, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat5[] = {&dat5}; - daNpcF_anmPlayData dat6 = {0x28, GET_HIO(mNpcFParams.morf_frame), 1}; + daNpcF_anmPlayData dat6 = {0x28, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat6_ = {0x29, 0.0f, 0}; daNpcF_anmPlayData* pDat6[] = {&dat6, &dat6_}; - daNpcF_anmPlayData dat7 = {0x29, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat7 = {0x29, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat7[] = {&dat7}; - daNpcF_anmPlayData dat8 = {0x2a, GET_HIO(mNpcFParams.morf_frame), 1}; + daNpcF_anmPlayData dat8 = {0x2a, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat8_ = {0x2b, 0.0f, 0}; daNpcF_anmPlayData* pDat8[] = {&dat8, &dat8_}; - daNpcF_anmPlayData dat9 = {0x2b, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat9 = {0x2b, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat9[] = {&dat9}; - daNpcF_anmPlayData dat10 = {0x2f, GET_HIO(mNpcFParams.morf_frame), 1}; + daNpcF_anmPlayData dat10 = {0x2f, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat10_ = {0x16, 0.0f, 0}; daNpcF_anmPlayData* pDat10[] = {&dat10, &dat10_}; - daNpcF_anmPlayData dat11 = {0x22, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat11 = {0x22, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat11[] = {&dat11}; - daNpcF_anmPlayData dat12 = {0x23, GET_HIO(mNpcFParams.morf_frame), 1}; - daNpcF_anmPlayData dat12_ = {0x22, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat12 = {0x23, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat12_ = {0x22, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat12[] = {&dat12, &dat12_}; - daNpcF_anmPlayData dat13 = {0x24, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat13 = {0x24, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat13[] = {&dat13}; - daNpcF_anmPlayData dat14 = {0x25, GET_HIO(mNpcFParams.morf_frame), 1}; - daNpcF_anmPlayData dat14_ = {0x24, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat14 = {0x25, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat14_ = {0x24, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat14[] = {&dat14, &dat14_}; - daNpcF_anmPlayData dat15 = {0x32, GET_HIO(mNpcFParams.morf_frame), 1}; + daNpcF_anmPlayData dat15 = {0x32, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat15_ = {0x30, 0.0f, 0}; daNpcF_anmPlayData* pDat15[] = {&dat15, &dat15_}; - daNpcF_anmPlayData dat16 = {0x30, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat16 = {0x30, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat16[] = {&dat16}; - daNpcF_anmPlayData dat17 = {0x31, GET_HIO(mNpcFParams.morf_frame), 1}; + daNpcF_anmPlayData dat17 = {0x31, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat17_ = {0x30, 0.0f, 0}; daNpcF_anmPlayData* pDat17[] = {&dat17, &dat17_}; - daNpcF_anmPlayData dat18 = {0x1b, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat18 = {0x1b, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat18[] = {&dat18}; - daNpcF_anmPlayData dat19 = {0x1a, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat19 = {0x1a, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat19[] = {&dat19}; - daNpcF_anmPlayData dat20 = {0x19, GET_HIO(mNpcFParams.morf_frame), 1}; - daNpcF_anmPlayData dat20_ = {0x16, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat20 = {0x19, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat20_ = {0x16, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat20[] = {&dat20, &dat20_}; - daNpcF_anmPlayData dat21 = {0x1f, GET_HIO(mNpcFParams.morf_frame), 1}; - daNpcF_anmPlayData dat21_ = {0x16, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat21 = {0x1f, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat21_ = {0x16, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat21[] = {&dat21, &dat21_}; daNpcF_anmPlayData dat22 = {0x1c, 4.0f, 0}; @@ -1653,17 +1647,17 @@ void daNpc_grA_c::playMotion() { daNpcF_anmPlayData dat24 = {0x21, 2.0f, 0}; daNpcF_anmPlayData* pDat24[] = {&dat24}; - daNpcF_anmPlayData dat25 = {0x2c, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat25 = {0x2c, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat25[] = {&dat25}; - daNpcF_anmPlayData dat26 = {0x2d, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat26 = {0x2d, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat26[] = {&dat26}; - daNpcF_anmPlayData dat27 = {0x2e, GET_HIO(mNpcFParams.morf_frame), 1}; + daNpcF_anmPlayData dat27 = {0x2e, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat27_ = {0x29, 0.0f, 0}; daNpcF_anmPlayData* pDat27[] = {&dat27, &dat27_}; - daNpcF_anmPlayData dat28 = {38, GET_HIO(mNpcFParams.morf_frame), 0}; + daNpcF_anmPlayData dat28 = {38, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat28[] = {&dat28}; daNpcF_anmPlayData** ppDat[29] = { @@ -1722,7 +1716,7 @@ BOOL daNpc_grA_c::setAction(daNpc_grA_c_Action i_action) { BOOL daNpc_grA_c::selectAction() { mAction2 = NULL; - if (GET_HIO(mNpcFParams.debug_mode_ON)) { + if (mpHIO->m.common.debug_mode_ON) { mAction2 = &daNpc_grA_c::test; } else { switch (mType) { @@ -1906,14 +1900,14 @@ void daNpc_grA_c::lookat() { fopAc_ac_c* player = NULL; J3DModel* model = mAnm_p->getModel(); BOOL r27 = FALSE; - f32 bodyAngleXMin = GET_HIO(mNpcFParams.body_angleX_min); - f32 bodyAngleXMax = GET_HIO(mNpcFParams.body_angleX_max); - f32 bodyAngleYMin = GET_HIO(mNpcFParams.body_angleY_min); - f32 bodyAngleYMax = GET_HIO(mNpcFParams.body_angleY_max); - f32 headAngleXMin = GET_HIO(mNpcFParams.head_angleX_min); - f32 headAngleXMan = GET_HIO(mNpcFParams.head_angleX_max); - f32 headAnglyMin = GET_HIO(mNpcFParams.head_angleY_min); - f32 headAngleYMax = GET_HIO(mNpcFParams.head_angleY_max); + f32 bodyAngleXMin = mpHIO->m.common.body_angleX_min; + f32 bodyAngleXMax = mpHIO->m.common.body_angleX_max; + f32 bodyAngleYMin = mpHIO->m.common.body_angleY_min; + f32 bodyAngleYMax = mpHIO->m.common.body_angleY_max; + f32 headAngleXMin = mpHIO->m.common.head_angleX_min; + f32 headAngleXMan = mpHIO->m.common.head_angleX_max; + f32 headAnglyMin = mpHIO->m.common.head_angleY_min; + f32 headAngleYMax = mpHIO->m.common.head_angleY_max; s16 diffInAngle = mCurAngle.y - mOldAngle.y; cXyz pLookPositions[] = { mLookatPos[0], @@ -2233,7 +2227,7 @@ BOOL daNpc_grA_c::ECut_grDSRoll(int i_staffID) { break; case 0x50: setLookMode(2); - mEventTimer = GET_HIO(mBowTimer); + mEventTimer = mpHIO->m.mBowTimer; break; case 0x2d: break; @@ -2282,7 +2276,7 @@ BOOL daNpc_grA_c::ECut_grDSRoll(int i_staffID) { field_0x14D4 += 0.2f; } mAnm_p->setPlaySpeed(field_0x14D4); - speedF = field_0x14D4 * GET_HIO(mRotationalSpeed); + speedF = field_0x14D4 * mpHIO->m.mRotationalSpeed; } r28 = 1; break; @@ -2291,7 +2285,7 @@ BOOL daNpc_grA_c::ECut_grDSRoll(int i_staffID) { if (field_0x14D4 > 1.0f) { field_0x14D4 -= 0.25f; mAnm_p->setPlaySpeed(field_0x14D4); - speedF = field_0x14D4 * GET_HIO(mRotationalSpeed); + speedF = field_0x14D4 * mpHIO->m.mRotationalSpeed; } else { if (mAnm_p->getFrame() >= 0.0f && mAnm_p->getFrame() <= 5.0f) { setMotion(0x14, -1.0f, 0); @@ -2550,8 +2544,8 @@ BOOL daNpc_grA_c::ECut_kickOut(int i_staffID) { case 0x14: setExpression(0x17, -1.0f); setMotion(1, -1.0f, 0); - speedF = GET_HIO(mWalkingSpeed); - mAnm_p->setPlaySpeed(GET_HIO(mWalkingSpeed) * GET_HIO(mWalkingAnimationSpeed)); + speedF = mpHIO->m.mWalkingSpeed; + mAnm_p->setPlaySpeed(mpHIO->m.mWalkingSpeed * mpHIO->m.mWalkingAnimationSpeed); break; case 0x1e: Z2GetAudioMgr()->seStart(0x600b2, ¤t.pos, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); @@ -2574,8 +2568,8 @@ BOOL daNpc_grA_c::ECut_kickOut(int i_staffID) { } break; case 0x14: - speedF = GET_HIO(mWalkingSpeed); - mAnm_p->setPlaySpeed(GET_HIO(mWalkingSpeed) * GET_HIO(mWalkingAnimationSpeed)); + speedF = mpHIO->m.mWalkingSpeed; + mAnm_p->setPlaySpeed(mpHIO->m.mWalkingSpeed * mpHIO->m.mWalkingAnimationSpeed); r28 = 1; break; case 0x1e: @@ -3128,7 +3122,7 @@ BOOL daNpc_grA_c::ECut_rollRockCrash(int i_staffID) { if (field_0x14D4 >= 1.0f) { f32 f31 = 1.0f; if (sp24 >= 0x3c) { - f31 = GET_HIO(mParticleSize); + f31 = mpHIO->m.mParticleSize; } setRollPrtcl(current.pos, f31); } @@ -3454,7 +3448,7 @@ BOOL daNpc_grA_c::waitKickOut(void*) { { mOrderEvtNo = 3; } else if (daPy_getPlayerActorClass()->checkWolfRopeHang() && - chkActorInSight(daPy_getPlayerActorClass(), GET_HIO(mNpcFParams.fov))) + chkActorInSight(daPy_getPlayerActorClass(), mpHIO->m.common.fov)) { mOrderEvtNo = 3; } else if (field_0xDD4.getPathInfo() != NULL) { @@ -3472,9 +3466,9 @@ BOOL daNpc_grA_c::waitKickOut(void*) { } else { s16 r27 = cLib_targetAngleY(¤t.pos, &c); speedF = 5.0f; - mAnm_p->setPlaySpeed(speedF * GET_HIO(mWalkingAnimationSpeed)); - cLib_addCalcAngleS2(¤t.angle.y, r27, GET_HIO(mWalkingRotationDivisions), - GET_HIO(mWalkingRotationSpeed)); + mAnm_p->setPlaySpeed(speedF * mpHIO->m.mWalkingAnimationSpeed); + cLib_addCalcAngleS2(¤t.angle.y, r27, mpHIO->m.mWalkingRotationDivisions, + mpHIO->m.mWalkingRotationSpeed); setAngle(current.angle.y); } } else if (cLib_calcTimer(&field_0x1694) == 0) { @@ -3860,7 +3854,7 @@ BOOL daNpc_grA_c::crashRollWait(void*) { mDoMtx_stack_c::YrotS(shape_angle.y); mDoMtx_stack_c::multVec(&c, &c); c += current.pos; - setRollPrtcl(c, GET_HIO(mParticleSize)); + setRollPrtcl(c, mpHIO->m.mParticleSize); } f32 a = cLib_minMaxLimit(fabsf(field_0x14D4) * 20.0f, 1.0f, 127.0f); u32 b = a; @@ -4069,11 +4063,11 @@ BOOL daNpc_grA_c::test(void*) { // fallthrough case 2: - if (GET_HIO(mNpcFParams.face_expression) != mExpression) { - setExpression(GET_HIO(mNpcFParams.face_expression), GET_HIO(mNpcFParams.morf_frame)); + if (mpHIO->m.common.face_expression != mExpression) { + setExpression(mpHIO->m.common.face_expression, mpHIO->m.common.morf_frame); } - setMotion(GET_HIO(mNpcFParams.motion), GET_HIO(mNpcFParams.morf_frame), 0); - setLookMode(GET_HIO(mNpcFParams.look_mode)); + setMotion(mpHIO->m.common.motion, mpHIO->m.common.morf_frame, 0); + setLookMode(mpHIO->m.common.look_mode); mOrderEvtNo = 0; attention_info.flags = 0; case 1: diff --git a/src/d/actor/d_a_npc_grc.cpp b/src/d/actor/d_a_npc_grc.cpp index 7b72766233..c226de23cf 100644 --- a/src/d/actor/d_a_npc_grc.cpp +++ b/src/d/actor/d_a_npc_grc.cpp @@ -153,7 +153,7 @@ enum Event_Cut_Nums { /* 0x1 */ NUM_EVT_CUTS_e = 0x1, }; -static daNpc_grC_Param_c l_HIO; +static NPC_GRC_HIO_CLASS l_HIO; static daNpc_GetParam1 l_bmdGetParamList[2] = { {BMDR_GRC_A, GRC_MDL}, @@ -233,18 +233,6 @@ char* daNpc_grC_c::mEvtCutNameList = ""; daNpc_grC_c::EventFn daNpc_grC_c::mEvtCutList[1] = {NULL}; -daNpc_grC_c::daNpc_grC_c() {} - -daNpc_grC_c::~daNpc_grC_c() { - for (int i = 0; l_loadRes_list[mType][i] >= 0; i++) { - dComIfG_resDelete(&mPhases[i], l_resNames[l_loadRes_list[mType][i]]); - } - - if (heap != NULL) { - mAnm_p->stopZelAnime(); - } -} - daNpc_grC_HIOParam const daNpc_grC_Param_c::m = { 40.0f, -3.0f, @@ -281,6 +269,38 @@ daNpc_grC_HIOParam const daNpc_grC_Param_c::m = { false, }; +#if DEBUG +daNpc_grC_HIO_c::daNpc_grC_HIO_c() { + m = daNpc_grC_Param_c::m; +} + +void daNpc_grC_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_grC_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpc_grC_c::daNpc_grC_c() {} + +daNpc_grC_c::~daNpc_grC_c() { + for (int i = 0; l_loadRes_list[mType][i] >= 0; i++) { + dComIfG_resDelete(&mPhases[i], l_resNames[l_loadRes_list[mType][i]]); + } + + if (heap != NULL) { + mAnm_p->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif +} + cPhs__Step daNpc_grC_c::create() { fopAcM_ct(this, daNpc_grC_c); @@ -321,11 +341,16 @@ cPhs__Step daNpc_grC_c::create() { mSound.init(¤t.pos, &eyePos, 3, 1); - mAcchCir.SetWall(daNpc_grC_Param_c::m.common.width, daNpc_grC_Param_c::m.common.knee_length); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("子供ゴロン"); +#endif + + mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mPaPo.init(&mAcch, daNpc_grC_Param_c::m.common.height, daNpc_grC_Param_c::m.common.height); - mCcStts.Init(daNpc_grC_Param_c::m.common.weight, 0, this); + mPaPo.init(&mAcch, mpHIO->m.common.height, mpHIO->m.common.height); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl.Set(mCcDCyl); mCyl.SetStts(&mCcStts); mCyl.SetTgHitCallback(tgHitCallBack); @@ -395,7 +420,7 @@ int daNpc_grC_c::Execute() { } int daNpc_grC_c::Draw() { - return draw(chkAction(&daNpc_grC_c::test), FALSE, daNpc_grC_Param_c::m.common.real_shadow_size, NULL, FALSE); + return draw(chkAction(&daNpc_grC_c::test), FALSE, mpHIO->m.common.real_shadow_size, NULL, FALSE); } int daNpc_grC_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { @@ -417,7 +442,7 @@ int daNpc_grC_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { case JNT_BACKBONE1: case JNT_NECK: case JNT_HEAD: - setLookatMtx(jntNo, i_jointList, daNpc_grC_Param_c::m.common.neck_rotation_ratio); + setLookatMtx(jntNo, i_jointList, mpHIO->m.common.neck_rotation_ratio); break; } @@ -477,18 +502,18 @@ void daNpc_grC_c::setParam() { field_0xe30 = 0; field_0xe34 = 0; - s16 talk_distance = daNpc_grC_Param_c::m.common.talk_distance; - s16 talk_angle = daNpc_grC_Param_c::m.common.talk_angle; + s16 talk_distance = mpHIO->m.common.talk_distance; + s16 talk_angle = mpHIO->m.common.talk_angle; - attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(daNpc_grC_Param_c::m.common.attention_distance, daNpc_grC_Param_c::m.common.attention_angle); + attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(mpHIO->m.common.attention_distance, mpHIO->m.common.attention_angle); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(talk_distance, talk_angle); attention_info.flags = uVar1; - scale.set(daNpc_grC_Param_c::m.common.scale, daNpc_grC_Param_c::m.common.scale, daNpc_grC_Param_c::m.common.scale); - mAcchCir.SetWallR(daNpc_grC_Param_c::m.common.width); - mAcchCir.SetWallH(daNpc_grC_Param_c::m.common.knee_length); - gravity = daNpc_grC_Param_c::m.common.gravity; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); + mAcchCir.SetWallR(mpHIO->m.common.width); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + gravity = mpHIO->m.common.gravity; } BOOL daNpc_grC_c::main() { @@ -500,7 +525,7 @@ BOOL daNpc_grC_c::main() { attention_info.flags = 0; } - if (!daNpc_grC_Param_c::m.common.debug_mode_ON && (!dComIfGp_event_runCheck() || (mOrderNewEvt && dComIfGp_getEvent()->isOrderOK()))) { + if (!mpHIO->m.common.debug_mode_ON && (!dComIfGp_event_runCheck() || (mOrderNewEvt && dComIfGp_getEvent()->isOrderOK()))) { if (mOrderEvtNo != 0) { eventInfo.setArchiveName(l_resNames[l_evtGetParamList[mOrderEvtNo].arcIdx]); } @@ -528,7 +553,7 @@ void daNpc_grC_c::setAttnPos() { static cXyz const eyeOffset(16.0f, 60.0f, 0.0f); cXyz sp7c, sp88, sp94, spa0; - f32 attention_offset = daNpc_grC_Param_c::m.common.attention_offset; + f32 attention_offset = mpHIO->m.common.attention_offset; mDoMtx_stack_c::YrotS(field_0x990); cLib_addCalc2(&field_0x984[0], 0.0f, 0.1f, 125.0f); @@ -598,8 +623,8 @@ void daNpc_grC_c::setAttnPos() { mDoMtx_stack_c::multVecZero(&sp7c); sp7c.y = current.pos.y; mCyl.SetC(sp7c); - mCyl.SetH(daNpc_grC_Param_c::m.common.height + fVar1); - mCyl.SetR(daNpc_grC_Param_c::m.common.width + fVar2); + mCyl.SetH(mpHIO->m.common.height + fVar1); + mCyl.SetR(mpHIO->m.common.width + fVar2); dComIfG_Ccsp()->Set(&mCyl); } @@ -900,27 +925,27 @@ void daNpc_grC_c::reset() { } void daNpc_grC_c::playExpression() { - daNpcF_anmPlayData dat0a = {ANM_F_TALK_A, daNpc_grC_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat0b = {ANM_F_WAIT_A, daNpc_grC_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat0a = {ANM_F_TALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat0b = {ANM_F_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[2] = {&dat0a, &dat0b}; - daNpcF_anmPlayData dat1a = {ANM_GRUMPY_T, daNpc_grC_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat1b = {ANM_GRUMPY, daNpc_grC_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat1a = {ANM_GRUMPY_T, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat1b = {ANM_GRUMPY, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[2] = {&dat1a, &dat1b}; - daNpcF_anmPlayData dat2a = {ANM_F_CHEERFUL_T, daNpc_grC_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat2b = {ANM_F_CHEERFUL, daNpc_grC_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat2a = {ANM_F_CHEERFUL_T, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat2b = {ANM_F_CHEERFUL, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[2] = {&dat2a, &dat2b}; - daNpcF_anmPlayData dat3a = {ANM_F_SAD_TALK, daNpc_grC_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat3b = {ANM_FH_SAD_TALK, daNpc_grC_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat3a = {ANM_F_SAD_TALK, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat3b = {ANM_FH_SAD_TALK, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[2] = {&dat3a, &dat3b}; - daNpcF_anmPlayData dat4 = {ANM_FH_CLOSEEYE, daNpc_grC_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat4 = {ANM_FH_CLOSEEYE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat4[1] = {&dat4}; - daNpcF_anmPlayData dat5 = {ANM_GRUMPY, daNpc_grC_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat5 = {ANM_GRUMPY, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat5[1] = {&dat5}; - daNpcF_anmPlayData dat6 = {ANM_F_CHEERFUL, daNpc_grC_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat6 = {ANM_F_CHEERFUL, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat6[1] = {&dat6}; - daNpcF_anmPlayData dat7 = {ANM_FH_SAD_TALK, daNpc_grC_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat7 = {ANM_FH_SAD_TALK, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat7[1] = {&dat7}; - daNpcF_anmPlayData dat8 = {ANM_NONE, daNpc_grC_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat8 = {ANM_NONE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat8[1] = {&dat8}; daNpcF_anmPlayData** ppDat[15] = { @@ -947,27 +972,27 @@ void daNpc_grC_c::playExpression() { } void daNpc_grC_c::playMotion() { - daNpcF_anmPlayData dat0 = {ANM_WAIT_A, daNpc_grC_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat0 = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1a = {ANM_GET_UP, daNpc_grC_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat1a = {ANM_GET_UP, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat1b = {ANM_WAIT_A, 0.0f, 0}; daNpcF_anmPlayData* pDat1[2] = {&dat1a, &dat1b}; - daNpcF_anmPlayData dat2 = {ANM_TALK_A, daNpc_grC_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat2 = {ANM_TALK_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[1] = {&dat2}; - daNpcF_anmPlayData dat3a = {ANM_TALK_B, daNpc_grC_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat3a = {ANM_TALK_B, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat3b = {ANM_WAIT_A, 0.0f, 0}; daNpcF_anmPlayData* pDat3[2] = {&dat3a, &dat3b}; - daNpcF_anmPlayData dat4a = {ANM_TOSIT_A, daNpc_grC_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat4a = {ANM_TOSIT_A, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat4b = {ANM_SIT_A, 0.0f, 0}; daNpcF_anmPlayData* pDat4[2] = {&dat4a, &dat4b}; - daNpcF_anmPlayData dat5 = {ANM_SIT_A, daNpc_grC_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat5 = {ANM_SIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat5[1] = {&dat5}; - daNpcF_anmPlayData dat6a = {ANM_SAD_TALK, daNpc_grC_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat6a = {ANM_SAD_TALK, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat6b = {ANM_SAD_WAIT, 0.0f, 0}; daNpcF_anmPlayData* pDat6[2] = {&dat6a, &dat6b}; - daNpcF_anmPlayData dat7 = {ANM_SAD_WAIT, daNpc_grC_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat7 = {ANM_SAD_WAIT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat7[1] = {&dat7}; - daNpcF_anmPlayData dat8 = {ANM_STEP, daNpc_grC_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat8 = {ANM_STEP, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat8[1] = {&dat8}; daNpcF_anmPlayData** ppDat[9] = { @@ -1011,7 +1036,7 @@ BOOL daNpc_grC_c::setAction(ActionFn action) { BOOL daNpc_grC_c::selectAction() { mNextAction = NULL; - if (daNpc_grC_Param_c::m.common.debug_mode_ON) { + if (mpHIO->m.common.debug_mode_ON) { mNextAction = &daNpc_grC_c::test; } else { switch (mType) { @@ -1042,7 +1067,7 @@ void daNpc_grC_c::doNormalAction(int param_1) { if (mCutType == daPy_py_c::CUT_TYPE_TURN_RIGHT) { i_timer = 20; } else { - i_timer = daNpc_grC_Param_c::m.common.damage_time; + i_timer = mpHIO->m.common.damage_time; } setDamage(i_timer, 14, 0); @@ -1144,14 +1169,14 @@ void daNpc_grC_c::lookat() { daPy_py_c* player = NULL; J3DModel* model = mAnm_p->getModel(); BOOL i_snap = FALSE; - f32 body_angleX_min = daNpc_grC_Param_c::m.common.body_angleX_min; - f32 body_angleX_max = daNpc_grC_Param_c::m.common.body_angleX_max; - f32 body_angleY_min = daNpc_grC_Param_c::m.common.body_angleY_min; - f32 body_angleY_max = daNpc_grC_Param_c::m.common.body_angleY_max; - f32 head_angleX_min = daNpc_grC_Param_c::m.common.head_angleX_min; - f32 head_angleX_max = daNpc_grC_Param_c::m.common.head_angleX_max; - f32 head_angleY_min = daNpc_grC_Param_c::m.common.head_angleY_min; - f32 head_angleY_max = daNpc_grC_Param_c::m.common.head_angleY_max; + f32 body_angleX_min = mpHIO->m.common.body_angleX_min; + f32 body_angleX_max = mpHIO->m.common.body_angleX_max; + f32 body_angleY_min = mpHIO->m.common.body_angleY_min; + f32 body_angleY_max = mpHIO->m.common.body_angleY_max; + f32 head_angleX_min = mpHIO->m.common.head_angleX_min; + f32 head_angleX_max = mpHIO->m.common.head_angleX_max; + f32 head_angleY_min = mpHIO->m.common.head_angleY_min; + f32 head_angleY_max = mpHIO->m.common.head_angleY_max; s16 angle_delta = mCurAngle.y - mOldAngle.y; cXyz lookatPos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; csXyz* lookatAngle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; @@ -1347,8 +1372,8 @@ BOOL daNpc_grC_c::waitSpa(void* param_1) { } if (home.angle.y == mCurAngle.y) { - fopAc_ac_c* actor = getAttnActorP(mActorMngr[0].getActorP() != NULL, srchAttnActor1, daNpc_grC_Param_c::m.common.search_distance, - daNpc_grC_Param_c::m.common.search_height, daNpc_grC_Param_c::m.common.search_depth, daNpc_grC_Param_c::m.common.fov, + fopAc_ac_c* actor = getAttnActorP(mActorMngr[0].getActorP() != NULL, srchAttnActor1, mpHIO->m.common.search_distance, + mpHIO->m.common.search_height, mpHIO->m.common.search_depth, mpHIO->m.common.fov, shape_angle.y, 120, TRUE); if (actor != NULL) { mActorMngr[1].entry(actor); @@ -1487,12 +1512,12 @@ BOOL daNpc_grC_c::test(void* param_1) { mMode = 2; // fallthrough case 2: - if (daNpc_grC_Param_c::m.common.face_expression != mExpression) { - setExpression(daNpc_grC_Param_c::m.common.face_expression, daNpc_grC_Param_c::m.common.morf_frame); + if (mpHIO->m.common.face_expression != mExpression) { + setExpression(mpHIO->m.common.face_expression, mpHIO->m.common.morf_frame); } - setMotion(daNpc_grC_Param_c::m.common.motion, daNpc_grC_Param_c::m.common.morf_frame, 0); - setLookMode(daNpc_grC_Param_c::m.common.look_mode); + setMotion(mpHIO->m.common.motion, mpHIO->m.common.morf_frame, 0); + setLookMode(mpHIO->m.common.look_mode); mOrderEvtNo = 0; attention_info.flags = 0; break; diff --git a/src/d/actor/d_a_npc_grm.cpp b/src/d/actor/d_a_npc_grm.cpp index f0f2270f75..c7b9ab1877 100644 --- a/src/d/actor/d_a_npc_grm.cpp +++ b/src/d/actor/d_a_npc_grm.cpp @@ -131,6 +131,28 @@ daNpc_grM_c::cutFunc daNpc_grM_c::mCutList[2] = { &daNpc_grM_c::cutTalkSpa, }; +static NPC_GRM_HIO_CLASS l_HIO; + +daNpc_grM_HIOParam const daNpc_grM_Param_c::m = { + 300.0f, -3.0f, 1.0f, 600.0f, 255.0f, 260.0f, 35.0f, 70.0f, 0.0f, 0.0f, 30.0f, + -30.0f, 30.0f, -10.0f, 20.0f, -20.0f, 0.6f, 12.0f, 8, 6, 8, 6, + 0.0f, 0.0f, 0.0f, 0.0f, 60, 8, 0, 0, 0, false, false, + 4.0f, -20.0f, 0.0f, -20.0f, 20.0f, 40.0f, 20.0f, 110.0f}; + +#if DEBUG +daNpc_grM_HIO_c::daNpc_grM_HIO_c() { + m = daNpc_grM_Param_c::m; +} + +void daNpc_grM_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_grM_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + daNpc_grM_c::~daNpc_grM_c() { deleteObject(); @@ -138,15 +160,15 @@ daNpc_grM_c::~daNpc_grM_c() { mpMorf[0]->stopZelAnime(); } +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); } -daNpc_grM_HIOParam const daNpc_grM_Param_c::m = { - 300.0f, -3.0f, 1.0f, 600.0f, 255.0f, 260.0f, 35.0f, 70.0f, 0.0f, 0.0f, 30.0f, - -30.0f, 30.0f, -10.0f, 20.0f, -20.0f, 0.6f, 12.0f, 8, 6, 8, 6, - 0.0f, 0.0f, 0.0f, 0.0f, 60, 8, 0, 0, 0, false, false, - 4.0f, -20.0f, 0.0f, -20.0f, 20.0f, 40.0f, 20.0f, 110.0f}; - cPhs__Step daNpc_grM_c::create() { daNpcT_ct(this, daNpc_grM_c, l_faceMotionAnmData, l_motionAnmData, l_faceMotionSequenceData, 4, l_motionSequenceData, 4, l_evtList, l_resNameList); @@ -176,6 +198,11 @@ cPhs__Step daNpc_grM_c::create() { fopAcM_setCullSizeBox(this, -300.0f, -50.0f, -300.0f, 300.0f, 450.0f, 300.0f); mSound.init(¤t.pos, &eyePos, 3, 1); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("店ゴロン"); +#endif + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mAcch.CrrPos(dComIfG_Bgsp()); @@ -184,7 +211,7 @@ cPhs__Step daNpc_grM_c::create() { setEnvTevColor(); setRoomNo(); - mCcStts.Init(daNpc_grM_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl.Set(mCcDCyl); mCyl.SetStts(&mCcStts); mCyl.SetTgHitCallback(tgHitCallBack); @@ -344,10 +371,10 @@ void daNpc_grM_c::setParam() { selectAction(); srchActors(); - s16 talk_distance = daNpc_grM_Param_c::m.common.talk_distance; - s16 talk_angle = daNpc_grM_Param_c::m.common.talk_angle; - s16 attention_distance = daNpc_grM_Param_c::m.common.attention_distance; - s16 attention_angle = daNpc_grM_Param_c::m.common.attention_angle; + s16 talk_distance = mpHIO->m.common.talk_distance; + s16 talk_angle = mpHIO->m.common.talk_angle; + s16 attention_distance = mpHIO->m.common.attention_distance; + s16 attention_angle = mpHIO->m.common.attention_angle; attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle); @@ -356,17 +383,17 @@ void daNpc_grM_c::setParam() { daNpcT_getDistTableIdx(talk_distance, talk_angle); attention_info.flags = uVar1; - scale.set(daNpc_grM_Param_c::m.common.scale, daNpc_grM_Param_c::m.common.scale, - daNpc_grM_Param_c::m.common.scale); - mCcStts.SetWeight(daNpc_grM_Param_c::m.common.weight); - mCylH = daNpc_grM_Param_c::m.common.height; - mWallR = daNpc_grM_Param_c::m.common.width; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, + mpHIO->m.common.scale); + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_grM_Param_c::m.common.knee_length); - mRealShadowSize = daNpc_grM_Param_c::m.common.real_shadow_size; - gravity = daNpc_grM_Param_c::m.common.gravity; - mExpressionMorfFrame = daNpc_grM_Param_c::m.common.expression_morf_frame; - mMorfFrames = daNpc_grM_Param_c::m.common.morf_frame; + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mRealShadowSize = mpHIO->m.common.real_shadow_size; + gravity = mpHIO->m.common.gravity; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; } void daNpc_grM_c::setAfterTalkMotion() { @@ -521,12 +548,12 @@ void daNpc_grM_c::setAttnPos() { mStagger.calc(FALSE); mJntAnm.setParam( this, mpMorf[0]->getModel(), &sp48, getBackboneJointNo(), getNeckJointNo(), - getHeadJointNo(), daNpc_grM_Param_c::m.common.body_angleX_min, - daNpc_grM_Param_c::m.common.body_angleX_max, daNpc_grM_Param_c::m.common.body_angleY_min, - daNpc_grM_Param_c::m.common.body_angleY_max, daNpc_grM_Param_c::m.common.head_angleX_min, - daNpc_grM_Param_c::m.common.head_angleX_max, daNpc_grM_Param_c::m.common.head_angleY_min, - daNpc_grM_Param_c::m.common.head_angleY_max, - daNpc_grM_Param_c::m.common.neck_rotation_ratio, 0.0f, NULL); + getHeadJointNo(), mpHIO->m.common.body_angleX_min, + mpHIO->m.common.body_angleX_max, mpHIO->m.common.body_angleY_min, + mpHIO->m.common.body_angleY_max, mpHIO->m.common.head_angleX_min, + mpHIO->m.common.head_angleX_max, mpHIO->m.common.head_angleY_min, + mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, 0.0f, NULL); mJntAnm.calcJntRad(0.2f, 1.0f, cM_s2rad((s16)(mCurAngle.y - field_0xd7e.y))); J3DModelData* modelData = mpMorf[0]->getModel()->getModelData(); @@ -540,7 +567,7 @@ void daNpc_grM_c::setAttnPos() { mJntAnm.setEyeAngleX(eyePos, 1.0f, 0); mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, FALSE, 1.0f, 0); attention_info.position = current.pos; - attention_info.position.y += daNpc_grM_Param_c::m.common.attention_offset; + attention_info.position.y += mpHIO->m.common.attention_offset; } void daNpc_grM_c::setCollision() { @@ -784,8 +811,6 @@ static BOOL daNpc_grM_IsDelete(void* param_0) { return TRUE; } -static daNpc_grM_Param_c l_HIO; - static actor_method_class daNpc_grM_MethodTable = { (process_method_func)daNpc_grM_Create, (process_method_func)daNpc_grM_Delete, (process_method_func)daNpc_grM_Execute, (process_method_func)daNpc_grM_IsDelete, diff --git a/src/d/actor/d_a_npc_grmc.cpp b/src/d/actor/d_a_npc_grmc.cpp index fd9671e4e0..52d82a8acd 100644 --- a/src/d/actor/d_a_npc_grmc.cpp +++ b/src/d/actor/d_a_npc_grmc.cpp @@ -161,6 +161,12 @@ daNpc_grMC_c::~daNpc_grMC_c() { mpMorf[0]->stopZelAnime(); } +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); } @@ -208,6 +214,22 @@ daNpc_grMC_HIOParam const daNpc_grMC_Param_c::m = { 110.0f }; +static NPC_GRMC_HIO_CLASS l_HIO; + +#if DEBUG +daNpc_grMC_HIO_c::daNpc_grMC_HIO_c() { + m = daNpc_grMC_Param_c::m; +} + +void daNpc_grMC_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_grMC_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + cPhs__Step daNpc_grMC_c::create() { daNpcT_ct(this, daNpc_grMC_c, l_faceMotionAnmData, l_motionAnmData, l_faceMotionSequenceData, 4, l_motionSequenceData, 4, l_evtList, l_resNameList); @@ -237,6 +259,11 @@ cPhs__Step daNpc_grMC_c::create() { fopAcM_setCullSizeBox(this, -300.0f, -50.0f, -300.0f, 300.0f, 450.0f, 300.0f); mSound.init(¤t.pos, &eyePos, 3, 1); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("店チビゴロン"); +#endif + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mAcch.CrrPos(dComIfG_Bgsp()); @@ -245,7 +272,7 @@ cPhs__Step daNpc_grMC_c::create() { setEnvTevColor(); setRoomNo(); - mCcStts.Init(daNpc_grMC_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl.Set(mCcDCyl); mCyl.SetStts(&mCcStts); mCyl.SetTgHitCallback(tgHitCallBack); @@ -413,26 +440,26 @@ void daNpc_grMC_c::setParam() { } srchActors(); - s16 talk_distance = daNpc_grMC_Param_c::m.common.talk_distance; - s16 talk_angle = daNpc_grMC_Param_c::m.common.talk_angle; - s16 attention_distance = daNpc_grMC_Param_c::m.common.attention_distance; - s16 attention_angle = daNpc_grMC_Param_c::m.common.attention_angle; + s16 talk_distance = mpHIO->m.common.talk_distance; + s16 talk_angle = mpHIO->m.common.talk_angle; + s16 attention_distance = mpHIO->m.common.attention_distance; + s16 attention_angle = mpHIO->m.common.attention_angle; attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle); attention_info.flags = uVar1; - scale.set(daNpc_grMC_Param_c::m.common.scale, daNpc_grMC_Param_c::m.common.scale, daNpc_grMC_Param_c::m.common.scale); - mCcStts.SetWeight(daNpc_grMC_Param_c::m.common.weight); - mCylH = daNpc_grMC_Param_c::m.common.height; - mWallR = daNpc_grMC_Param_c::m.common.width; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_grMC_Param_c::m.common.knee_length); - mRealShadowSize = daNpc_grMC_Param_c::m.common.real_shadow_size; - gravity = daNpc_grMC_Param_c::m.common.gravity; - mExpressionMorfFrame = daNpc_grMC_Param_c::m.common.expression_morf_frame; - mMorfFrames = daNpc_grMC_Param_c::m.common.morf_frame; + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mRealShadowSize = mpHIO->m.common.real_shadow_size; + gravity = mpHIO->m.common.gravity; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; } void daNpc_grMC_c::setAfterTalkMotion() { @@ -533,11 +560,11 @@ void daNpc_grMC_c::setAttnPos() { mStagger.calc(FALSE); mJntAnm.setParam(this, mpMorf[0]->getModel(), &sp48, getBackboneJointNo(), getNeckJointNo(), getHeadJointNo(), - daNpc_grMC_Param_c::m.common.body_angleX_min, daNpc_grMC_Param_c::m.common.body_angleX_max, - daNpc_grMC_Param_c::m.common.body_angleY_min, daNpc_grMC_Param_c::m.common.body_angleY_max, - daNpc_grMC_Param_c::m.common.head_angleX_min, daNpc_grMC_Param_c::m.common.head_angleX_max, - daNpc_grMC_Param_c::m.common.head_angleY_min, daNpc_grMC_Param_c::m.common.head_angleY_max, - daNpc_grMC_Param_c::m.common.neck_rotation_ratio, 0.0f, NULL); + mpHIO->m.common.body_angleX_min, mpHIO->m.common.body_angleX_max, + mpHIO->m.common.body_angleY_min, mpHIO->m.common.body_angleY_max, + mpHIO->m.common.head_angleX_min, mpHIO->m.common.head_angleX_max, + mpHIO->m.common.head_angleY_min, mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, 0.0f, NULL); mJntAnm.calcJntRad(0.2f, 1.0f, cM_s2rad((s16)(mCurAngle.y - field_0xd7e.y))); J3DModelData* modelData = mpMorf[0]->getModel()->getModelData(); @@ -551,7 +578,7 @@ void daNpc_grMC_c::setAttnPos() { mJntAnm.setEyeAngleX(eyePos, 1.0f, 0); mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, FALSE, 1.0f, 0); attention_info.position = current.pos; - attention_info.position.y += daNpc_grMC_Param_c::m.common.attention_offset; + attention_info.position.y += mpHIO->m.common.attention_offset; } void daNpc_grMC_c::setCollision() { @@ -748,8 +775,8 @@ int daNpc_grMC_c::test(void* param_1) { mMode = 2; // fallthrough case 2: - mFaceMotionSeqMngr.setNo(mHIO->m.common.face_expression, -1.0f, FALSE, 0); - mMotionSeqMngr.setNo(mHIO->m.common.motion, -1.0f, FALSE, 0); + mFaceMotionSeqMngr.setNo(mpHIO->m.common.face_expression, -1.0f, FALSE, 0); + mMotionSeqMngr.setNo(mpHIO->m.common.motion, -1.0f, FALSE, 0); mJntAnm.lookNone(0); attention_info.flags = 0; break; @@ -781,8 +808,6 @@ static int daNpc_grMC_IsDelete(void* a_this) { return 1; } -static daNpc_grMC_Param_c l_HIO; - static actor_method_class daNpc_grMC_MethodTable = { (process_method_func)daNpc_grMC_Create, (process_method_func)daNpc_grMC_Delete, diff --git a/src/d/actor/d_a_npc_grr.cpp b/src/d/actor/d_a_npc_grr.cpp index 76f2c743fb..93271a80cc 100644 --- a/src/d/actor/d_a_npc_grr.cpp +++ b/src/d/actor/d_a_npc_grr.cpp @@ -121,7 +121,7 @@ enum Event_Cut_Nums { /* 0x1 */ NUM_EVT_CUTS_e = 0x1, }; -static daNpc_grR_Param_c l_HIO; +static NPC_GRR_HIO_CLASS l_HIO; static int l_bmdGetParamList[1][2] = { {BMDR_GRR, GRR}, @@ -204,24 +204,6 @@ daNpc_grR_c::cutFunc daNpc_grR_c::mEvtCutList[1] = { NULL, }; -daNpc_grR_c::daNpc_grR_c() {} - -daNpc_grR_c::~daNpc_grR_c() { - for (int i = 0; l_loadRes_list[mType][i] >= 0; i++) { - dComIfG_resDelete(&mPhases[i], l_resNames[l_loadRes_list[mType][i]]); - } - - if (heap != NULL) { - mAnm_p->stopZelAnime(); - } - - #if DEBUG - if (mHIO != NULL) { - mHIO->removeHIO(); - } - #endif -} - daNpc_grR_HIOParam const daNpc_grR_Param_c::m = { 60.0f, -3.0f, @@ -258,6 +240,24 @@ daNpc_grR_HIOParam const daNpc_grR_Param_c::m = { false }; +daNpc_grR_c::daNpc_grR_c() {} + +daNpc_grR_c::~daNpc_grR_c() { + for (int i = 0; l_loadRes_list[mType][i] >= 0; i++) { + dComIfG_resDelete(&mPhases[i], l_resNames[l_loadRes_list[mType][i]]); + } + + if (heap != NULL) { + mAnm_p->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif +} + cPhs__Step daNpc_grR_c::create() { fopAcM_ct(this, daNpc_grR_c); @@ -300,10 +300,15 @@ cPhs__Step daNpc_grR_c::create() { fopAcM_setCullSizeBox(this, -300.0f, -50.0f, -300.0f, 300.0f, 450.0f, 300.0f); mSound.init(¤t.pos, &eyePos, 3, 1); - mAcchCir.SetWall(daNpc_grR_Param_c::m.common.width, daNpc_grR_Param_c::m.common.knee_length); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("ラスタ長老ゴロン"); +#endif + + mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_grR_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl.Set(mCcDCyl); mCyl.SetStts(&mCcStts); mCyl.SetTgHitCallback(tgHitCallBack); @@ -372,7 +377,7 @@ int daNpc_grR_c::Execute() { int daNpc_grR_c::Draw() { mAnm_p->getModel()->getModelData()->getMaterialNodePointer(1)->setMaterialAnm(mpMatAnm); - return draw(chkAction(&daNpc_grR_c::test), FALSE, daNpc_grR_Param_c::m.common.real_shadow_size, NULL, FALSE); + return draw(chkAction(&daNpc_grR_c::test), FALSE, mpHIO->m.common.real_shadow_size, NULL, FALSE); } int daNpc_grR_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { @@ -394,7 +399,7 @@ int daNpc_grR_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { case 1: case 3: case 4: - setLookatMtx(jntNo, i_jointList, daNpc_grR_Param_c::m.common.neck_rotation_ratio); + setLookatMtx(jntNo, i_jointList, mpHIO->m.common.neck_rotation_ratio); break; } @@ -453,16 +458,16 @@ void daNpc_grR_c::setParam() { field_0xdf8 = 0; field_0xdfc = 0; - s16 talk_distance = daNpc_grR_Param_c::m.common.talk_distance; - s16 attention_distance = daNpc_grR_Param_c::m.common.attention_distance; + s16 talk_distance = mpHIO->m.common.talk_distance; + s16 attention_distance = mpHIO->m.common.attention_distance; s16 attention_angle; s16 talk_angle; if (mType == TYPE_MARO) { talk_angle = 6; attention_angle = 6; } else { - talk_angle = daNpc_grR_Param_c::m.common.talk_angle; - attention_angle = daNpc_grR_Param_c::m.common.attention_angle; + talk_angle = mpHIO->m.common.talk_angle; + attention_angle = mpHIO->m.common.attention_angle; if (mAnm != ANM_AGURA_WAIT && !field_0xe18) { uVar1 = 0; @@ -474,10 +479,10 @@ void daNpc_grR_c::setParam() { attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(talk_distance, talk_angle); attention_info.flags = uVar1; - scale.set(daNpc_grR_Param_c::m.common.scale, daNpc_grR_Param_c::m.common.scale, daNpc_grR_Param_c::m.common.scale); - mAcchCir.SetWallR(daNpc_grR_Param_c::m.common.width); - mAcchCir.SetWallH(daNpc_grR_Param_c::m.common.knee_length); - gravity = daNpc_grR_Param_c::m.common.gravity; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); + mAcchCir.SetWallR(mpHIO->m.common.width); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + gravity = mpHIO->m.common.gravity; } BOOL daNpc_grR_c::main() { @@ -489,7 +494,7 @@ BOOL daNpc_grR_c::main() { attention_info.flags = 0; } - if (!daNpc_grR_Param_c::m.common.debug_mode_ON && (!dComIfGp_event_runCheck() || (mOrderNewEvt && dComIfGp_getEvent()->isOrderOK()))) { + if (!mpHIO->m.common.debug_mode_ON && (!dComIfGp_event_runCheck() || (mOrderNewEvt && dComIfGp_getEvent()->isOrderOK()))) { if (mOrderEvtNo != 0) { eventInfo.setArchiveName(l_resNames[l_evtGetParamList[mOrderEvtNo].arcIdx]); } @@ -535,7 +540,7 @@ void daNpc_grR_c::setAttnPos() { static cXyz eyeOffset(24.0f, 30.0f, 0.0f); cXyz sp7c, sp88, sp94, spa0; - f32 attention_offset = daNpc_grR_Param_c::m.common.attention_offset; + f32 attention_offset = mpHIO->m.common.attention_offset; mDoMtx_stack_c::YrotS(field_0x990); cLib_addCalc2(&field_0x984[0], 0.0f, 0.1f, 125.0f); @@ -600,8 +605,8 @@ void daNpc_grR_c::setAttnPos() { } mCyl.SetC(sp7c); - mCyl.SetH(daNpc_grR_Param_c::m.common.height + fVar1); - mCyl.SetR(daNpc_grR_Param_c::m.common.width + fVar2); + mCyl.SetH(mpHIO->m.common.height + fVar1); + mCyl.SetR(mpHIO->m.common.width + fVar2); dComIfG_Ccsp()->Set(&mCyl); } @@ -887,24 +892,24 @@ void daNpc_grR_c::reset() { } void daNpc_grR_c::playExpression() { - daNpcF_anmPlayData dat0 = {ANM_F_TALK_A, daNpc_grR_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat0 = {ANM_F_TALK_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1a = {ANM_F_LAUGH, daNpc_grR_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat1a = {ANM_F_LAUGH, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat1b = {ANM_FH_LAUGH, 0.0f, 0}; daNpcF_anmPlayData* pDat1[2] = {&dat1a, &dat1b}; - daNpcF_anmPlayData dat2 = {ANM_F_SWING, daNpc_grR_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat2 = {ANM_F_SWING, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[1] = {&dat2}; - daNpcF_anmPlayData dat3a = {ANM_F_KEEE, daNpc_grR_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat3a = {ANM_F_KEEE, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat3b = {ANM_FH_KEEE, 0.0f, 0}; daNpcF_anmPlayData* pDat3[2] = {&dat3a, &dat3b}; - daNpcF_anmPlayData dat4a = {ANM_F_KEEETALK, daNpc_grR_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat4a = {ANM_F_KEEETALK, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat4b = {ANM_FH_KEEE, 0.0f, 0}; daNpcF_anmPlayData* pDat4[2] = {&dat4a, &dat4b}; - daNpcF_anmPlayData dat5 = {ANM_FH_LAUGH, daNpc_grR_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat5 = {ANM_FH_LAUGH, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat5[1] = {&dat5}; - daNpcF_anmPlayData dat6 = {ANM_FH_KEEE, daNpc_grR_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat6 = {ANM_FH_KEEE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat6[1] = {&dat6}; - daNpcF_anmPlayData dat7 = {ANM_NONE, daNpc_grR_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat7 = {ANM_NONE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat7[1] = {&dat7}; daNpcF_anmPlayData** ppDat[8] = { @@ -924,33 +929,33 @@ void daNpc_grR_c::playExpression() { } void daNpc_grR_c::playMotion() { - daNpcF_anmPlayData dat0 = {ANM_WAIT_A, daNpc_grR_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat0 = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1a = {ANM_TALK_A, daNpc_grR_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat1b = {ANM_WAIT_A, daNpc_grR_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat1a = {ANM_TALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat1b = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[2] = {&dat1a, &dat1b}; - daNpcF_anmPlayData dat2 = {ANM_SWING, daNpc_grR_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat2 = {ANM_SWING, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[1] = {&dat2}; - daNpcF_anmPlayData dat3 = {ANM_AGURA_WAIT, daNpc_grR_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat3 = {ANM_AGURA_WAIT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[1] = {&dat3}; - daNpcF_anmPlayData dat4a = {ANM_AGURA_TALK, daNpc_grR_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat4a = {ANM_AGURA_TALK, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat4b = {ANM_AGURA_WAIT, 0.0f, 0}; daNpcF_anmPlayData* pDat4[2] = {&dat4a, &dat4b}; - daNpcF_anmPlayData dat5a = {ANM_TO_AGURA, daNpc_grR_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat5a = {ANM_TO_AGURA, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat5b = {ANM_AGURA_WAIT, 0.0f, 0}; daNpcF_anmPlayData* pDat5[2] = {&dat5a, &dat5b}; - daNpcF_anmPlayData dat6a = {ANM_AGURA_GETUP, daNpc_grR_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat6a = {ANM_AGURA_GETUP, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat6b = {ANM_WAIT_A, 0.0f, 0}; daNpcF_anmPlayData* pDat6[2] = {&dat6a, &dat6b}; - daNpcF_anmPlayData dat7a = {ANM_LAUGH, daNpc_grR_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat7a = {ANM_LAUGH, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat7b = {ANM_WAIT_A, 0.0f, 0}; daNpcF_anmPlayData* pDat7[2] = {&dat7a, &dat7b}; - daNpcF_anmPlayData dat8a = {ANM_TALK_B, daNpc_grR_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat8a = {ANM_TALK_B, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat8b = {ANM_WAIT_B, 0.0f, 0}; daNpcF_anmPlayData* pDat8[2] = {&dat8a, &dat8b}; - daNpcF_anmPlayData dat9 = {ANM_WAIT_B, daNpc_grR_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat9 = {ANM_WAIT_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat9[1] = {&dat9}; - daNpcF_anmPlayData dat10 = {ANM_STEP, daNpc_grR_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat10 = {ANM_STEP, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat10[1] = {&dat10}; daNpcF_anmPlayData** ppDat[11] = { @@ -1000,7 +1005,7 @@ BOOL daNpc_grR_c::setAction(actionFunc action) { BOOL daNpc_grR_c::selectAction() { mNextAction = NULL; - if (daNpc_grR_Param_c::m.common.debug_mode_ON) { + if (mpHIO->m.common.debug_mode_ON) { mNextAction = &daNpc_grR_c::test; } else { switch (mType) { @@ -1024,7 +1029,7 @@ void daNpc_grR_c::doNormalAction(int param_1) { if (mCutType == daPy_py_c::CUT_TYPE_TURN_RIGHT) { i_timer = 20; } else { - i_timer = daNpc_grR_Param_c::m.common.damage_time; + i_timer = mpHIO->m.common.damage_time; } setDamage(i_timer, 7, 0); @@ -1124,14 +1129,14 @@ void daNpc_grR_c::lookat() { daPy_py_c* player = NULL; J3DModel* model = mAnm_p->getModel(); BOOL i_snap = FALSE; - f32 body_angleX_min = daNpc_grR_Param_c::m.common.body_angleX_min; - f32 body_angleX_max = daNpc_grR_Param_c::m.common.body_angleX_max; - f32 body_angleY_min = daNpc_grR_Param_c::m.common.body_angleY_min; - f32 body_angleY_max = daNpc_grR_Param_c::m.common.body_angleY_max; - f32 head_angleX_min = daNpc_grR_Param_c::m.common.head_angleX_min; - f32 head_angleX_max = daNpc_grR_Param_c::m.common.head_angleX_max; - f32 head_angleY_min = daNpc_grR_Param_c::m.common.head_angleY_min; - f32 head_angleY_max = daNpc_grR_Param_c::m.common.head_angleY_max; + f32 body_angleX_min = mpHIO->m.common.body_angleX_min; + f32 body_angleX_max = mpHIO->m.common.body_angleX_max; + f32 body_angleY_min = mpHIO->m.common.body_angleY_min; + f32 body_angleY_max = mpHIO->m.common.body_angleY_max; + f32 head_angleX_min = mpHIO->m.common.head_angleX_min; + f32 head_angleX_max = mpHIO->m.common.head_angleX_max; + f32 head_angleY_min = mpHIO->m.common.head_angleY_min; + f32 head_angleY_max = mpHIO->m.common.head_angleY_max; s16 angle_delta = mCurAngle.y - mOldAngle.y; cXyz lookatPos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; csXyz* lookatAngle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; @@ -1386,12 +1391,12 @@ int daNpc_grR_c::test(void* param_1) { mMode = 2; // fallthrough case 2: - if (daNpc_grR_Param_c::m.common.face_expression != mExpression) { - setExpression(daNpc_grR_Param_c::m.common.face_expression, daNpc_grR_Param_c::m.common.morf_frame); + if (mpHIO->m.common.face_expression != mExpression) { + setExpression(mpHIO->m.common.face_expression, mpHIO->m.common.morf_frame); } - setMotion(daNpc_grR_Param_c::m.common.motion, daNpc_grR_Param_c::m.common.morf_frame, 0); - setLookMode(daNpc_grR_Param_c::m.common.look_mode); + setMotion(mpHIO->m.common.motion, mpHIO->m.common.morf_frame, 0); + setLookMode(mpHIO->m.common.look_mode); mOrderEvtNo = 0; attention_info.flags = 0; break; diff --git a/src/d/actor/d_a_npc_grz.cpp b/src/d/actor/d_a_npc_grz.cpp index bc1d19c0d8..a5140c604e 100644 --- a/src/d/actor/d_a_npc_grz.cpp +++ b/src/d/actor/d_a_npc_grz.cpp @@ -241,7 +241,7 @@ enum Event_Cut_Nums { /* 0x7 */ NUM_EVT_CUTS_e = 0x7, }; -static daNpc_Grz_Param_c l_HIO; +static NPC_GRZ_HIO_CLASS l_HIO; static int l_bmdGetParamList[1][2] = { {BMDR_GRZ, GRZ}, @@ -373,6 +373,20 @@ daNpc_Grz_c::cutFunc daNpc_Grz_c::mEvtCutList[7] = { &daNpc_Grz_c::doStoneSmashSkipCut, }; +#if DEBUG +daNpc_Grz_HIO_c::daNpc_Grz_HIO_c() { + m = daNpc_Grz_Param_c::m; +} + +void daNpc_Grz_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_Grz_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + daNpc_Grz_c::daNpc_Grz_c() {} daNpc_Grz_c::~daNpc_Grz_c() { @@ -383,6 +397,12 @@ daNpc_Grz_c::~daNpc_Grz_c() { if (heap != NULL) { mAnm_p->stopZelAnime(); } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif } daNpc_Grz_HIOParam const daNpc_Grz_Param_c::m = { @@ -468,13 +488,18 @@ cPhs__Step daNpc_Grz_c::create() { fopAcM_SetMtx(this, mAnm_p->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -300.0f, -50.0f, -300.0f, 300.0f, 450.0f, 300.0f); - + mSound.init(¤t.pos, &eyePos, 3, 1); - - mAcchCir.SetWall(daNpc_Grz_Param_c::m.common.width, daNpc_Grz_Param_c::m.common.knee_length); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("族長ゴロン"); +#endif + + mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_Grz_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); resetCol(); mAcch.CrrPos(dComIfG_Bgsp()); mGndChk = mAcch.m_gnd; @@ -591,7 +616,7 @@ int daNpc_Grz_c::Draw() { mBrkAnm.remove(mdlData_p); } - mShadowKey = dComIfGd_setShadow(mShadowKey, 1, model, ¤t.pos, daNpc_Grz_Param_c::m.common.real_shadow_size, + mShadowKey = dComIfGd_setShadow(mShadowKey, 1, model, ¤t.pos, mpHIO->m.common.real_shadow_size, 20.0f, current.pos.y, mGroundH, mGndChk, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); drawOtherMdls(); @@ -619,7 +644,7 @@ int daNpc_Grz_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { case JNT_BACKBONE1: case JNT_NECK: case JNT_HEAD: - setLookatMtx(jntNo, i_jointList, daNpc_Grz_Param_c::m.common.neck_rotation_ratio); + setLookatMtx(jntNo, i_jointList, mpHIO->m.common.neck_rotation_ratio); break; } @@ -695,10 +720,10 @@ void daNpc_Grz_c::setParam() { break; } - scale.set(daNpc_Grz_Param_c::m.common.scale, daNpc_Grz_Param_c::m.common.scale, daNpc_Grz_Param_c::m.common.scale); - mAcchCir.SetWallR(daNpc_Grz_Param_c::m.common.width); - mAcchCir.SetWallH(daNpc_Grz_Param_c::m.common.knee_length); - gravity = daNpc_Grz_Param_c::m.common.gravity; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); + mAcchCir.SetWallR(mpHIO->m.common.width); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + gravity = mpHIO->m.common.gravity; } BOOL daNpc_Grz_c::main() { @@ -710,7 +735,7 @@ BOOL daNpc_Grz_c::main() { attention_info.flags = 0; } - if (!daNpc_Grz_Param_c::m.common.debug_mode_ON) { + if (!mpHIO->m.common.debug_mode_ON) { if (!dComIfGp_event_runCheck() || mOrderNewEvt && dComIfGp_getEvent()->isOrderOK()) { if (mOrderEvtNo != EVT_NONE) { eventInfo.setArchiveName(l_resNames[l_evtGetParamList[mOrderEvtNo].arcIdx]); @@ -757,7 +782,7 @@ void daNpc_Grz_c::setAttnPos() { static cXyz eyeOffset(20.0f, 40.0f, 0.0f); cXyz sp80, sp8c, sp98, spa4; - f32 attention_offset = daNpc_Grz_Param_c::m.common.attention_offset; + f32 attention_offset = mpHIO->m.common.attention_offset; f32 fVar2 = 0.0f; f32 fVar3 = 0.0f; @@ -841,8 +866,8 @@ void daNpc_Grz_c::setAttnPos() { } mCyl1.SetC(sp80); - mCyl1.SetH(daNpc_Grz_Param_c::m.common.height + fVar2); - mCyl1.SetR(daNpc_Grz_Param_c::m.common.width + fVar3); + mCyl1.SetH(mpHIO->m.common.height + fVar2); + mCyl1.SetR(mpHIO->m.common.width + fVar3); dComIfG_Ccsp()->Set(&mCyl1); } @@ -909,9 +934,9 @@ void daNpc_Grz_c::setCollisionPunch() { mCyl2.OnTgNoHitMark(); mCyl2.SetC(sp6c); f32 heightOffset = 50.0f; - mCyl2.SetH(daNpc_Grz_Param_c::m.common.height + heightOffset); + mCyl2.SetH(mpHIO->m.common.height + heightOffset); f32 widthOffset = 15.0f; - mCyl2.SetR(daNpc_Grz_Param_c::m.common.width + widthOffset); + mCyl2.SetR(mpHIO->m.common.width + widthOffset); dComIfG_Ccsp()->Set(&mCyl2); } } @@ -1266,9 +1291,9 @@ void daNpc_Grz_c::reset() { if (mType == TYPE_LIEDOWN) { field_0x1a84 = 2; mMsgNo = 208; - mColor.r = daNpc_Grz_Param_c::m.color_r; - mColor.g = daNpc_Grz_Param_c::m.color_g; - mColor.b = daNpc_Grz_Param_c::m.color_b; + mColor.r = mpHIO->m.color_r; + mColor.g = mpHIO->m.color_g; + mColor.b = mpHIO->m.color_b; setExpression(EXPR_LIEDOWN, -1.0f); setMotion(MOT_LIEDOWN, 0.0f, 0); } else { @@ -1312,32 +1337,32 @@ void daNpc_Grz_c::resetCol() { } void daNpc_Grz_c::playExpression() { - daNpcF_anmPlayData dat0a = {ANM_F_TALK_A, daNpc_Grz_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat0b= {ANM_FH_TALK_A, daNpc_Grz_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat0a = {ANM_F_TALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat0b= {ANM_FH_TALK_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[2] = {&dat0a, &dat0b}; - daNpcF_anmPlayData dat1a = {ANM_F_WEAK_TALK, daNpc_Grz_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat1b = {ANM_F_WEAK_WAIT, daNpc_Grz_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat1a = {ANM_F_WEAK_TALK, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat1b = {ANM_F_WEAK_WAIT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[2] = {&dat1a, &dat1b}; - daNpcF_anmPlayData dat2a = {ANM_F_SNIFF, daNpc_Grz_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat2b = {ANM_FH_TALK_A, daNpc_Grz_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat2a = {ANM_F_SNIFF, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat2b = {ANM_FH_TALK_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[2] = {&dat2a, &dat2b}; - daNpcF_anmPlayData dat3a = {ANM_F_LAUGH, daNpc_Grz_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat3b = {ANM_NONE, daNpc_Grz_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat3a = {ANM_F_LAUGH, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat3b = {ANM_NONE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[2] = {&dat3a, &dat3b}; - daNpcF_anmPlayData dat4 = {ANM_FH_TALK_A, daNpc_Grz_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat4 = {ANM_FH_TALK_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat4[1] = {&dat4}; - daNpcF_anmPlayData dat5 = {ANM_F_PUNCHING, daNpc_Grz_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat5 = {ANM_F_PUNCHING, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat5[1] = {&dat5}; - daNpcF_anmPlayData dat6a = {ANM_F_PUNCH, daNpc_Grz_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat6b = {ANM_NONE, daNpc_Grz_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat6a = {ANM_F_PUNCH, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat6b = {ANM_NONE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat6[2] = {&dat6a, &dat6b}; - daNpcF_anmPlayData dat7 = {ANM_LIEDOWN, daNpc_Grz_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat7 = {ANM_LIEDOWN, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat7[1] = {&dat7}; - daNpcF_anmPlayData dat8 = {ANM_GETUP, daNpc_Grz_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat8 = {ANM_GETUP, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData* pDat8[1] = {&dat8}; - daNpcF_anmPlayData dat9 = {ANM_F_WEAK_WAIT, daNpc_Grz_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat9 = {ANM_F_WEAK_WAIT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat9[1] = {&dat9}; - daNpcF_anmPlayData dat10 = {ANM_NONE, daNpc_Grz_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat10 = {ANM_NONE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat10[1] = {&dat10}; daNpcF_anmPlayData** ppDat[11] = { @@ -1360,37 +1385,37 @@ void daNpc_Grz_c::playExpression() { } void daNpc_Grz_c::playMotion() { - daNpcF_anmPlayData dat0 = {ANM_WAIT_A, daNpc_Grz_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat0 = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1 = {ANM_WEAK_WAIT, daNpc_Grz_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat1 = {ANM_WEAK_WAIT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[1] = {&dat1}; - daNpcF_anmPlayData dat2a = {ANM_WEAK_TURN, daNpc_Grz_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat2b = {ANM_WEAK_WAIT, daNpc_Grz_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat2a = {ANM_WEAK_TURN, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat2b = {ANM_WEAK_WAIT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[2] = {&dat2a, &dat2b}; - daNpcF_anmPlayData dat3 = {ANM_WAIT_B, daNpc_Grz_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat3 = {ANM_WAIT_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[1] = {&dat3}; - daNpcF_anmPlayData dat4a = {ANM_SNIFF, daNpc_Grz_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat4b = {ANM_WAIT_B, daNpc_Grz_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat4a = {ANM_SNIFF, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat4b = {ANM_WAIT_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat4[2] = {&dat4a, &dat4b}; - daNpcF_anmPlayData dat5a = {ANM_LAUGH, daNpc_Grz_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat5b = {ANM_WAIT_B, daNpc_Grz_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat5a = {ANM_LAUGH, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat5b = {ANM_WAIT_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat5[2] = {&dat5a, &dat5b}; - daNpcF_anmPlayData dat6 = {ANM_PUNCHING, daNpc_Grz_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat6 = {ANM_PUNCHING, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat6[1] = {&dat6}; - daNpcF_anmPlayData dat7a = {ANM_PUNCH, daNpc_Grz_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat7b = {ANM_WAIT_A, daNpc_Grz_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat7a = {ANM_PUNCH, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat7b = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat7[2] = {&dat7a, &dat7b}; - daNpcF_anmPlayData dat8a = {ANM_TO_STONE_NORMAL, daNpc_Grz_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat8a = {ANM_TO_STONE_NORMAL, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat8b = {ANM_ROTATE, 6.0f, 0}; daNpcF_anmPlayData* pDat8[2] = {&dat8a, &dat8b}; - daNpcF_anmPlayData dat9a = {ANM_UNAZUKI, daNpc_Grz_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat9b = {ANM_WAIT_A, daNpc_Grz_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat9a = {ANM_UNAZUKI, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat9b = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat9[2] = {&dat9a, &dat9b}; - daNpcF_anmPlayData dat10 = {ANM_WALK_A, daNpc_Grz_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat10 = {ANM_WALK_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat10[1] = {&dat10}; - daNpcF_anmPlayData dat11 = {ANM_LIEDOWN_2, daNpc_Grz_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat11 = {ANM_LIEDOWN_2, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat11[1] = {&dat11}; - daNpcF_anmPlayData dat12 = {ANM_GETUP_2, daNpc_Grz_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat12 = {ANM_GETUP_2, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat12[1] = {&dat12}; daNpcF_anmPlayData dat13 = {ANM_STEP, 6.0f, 0}; daNpcF_anmPlayData* pDat13[1] = {&dat13}; @@ -1444,7 +1469,7 @@ BOOL daNpc_Grz_c::setAction(actionFunc action) { BOOL daNpc_Grz_c::selectAction() { mNextAction = NULL; - if (daNpc_Grz_Param_c::m.common.debug_mode_ON) { + if (mpHIO->m.common.debug_mode_ON) { mNextAction = &daNpc_Grz_c::test; } else { switch (mType) { @@ -1476,7 +1501,7 @@ void daNpc_Grz_c::doNormalAction(int param_1) { if (mCutType == 8) { damage_time = 20; } else { - damage_time = daNpc_Grz_Param_c::m.common.damage_time; + damage_time = mpHIO->m.common.damage_time; } setDamage(damage_time, 10, 0); @@ -1619,14 +1644,14 @@ void daNpc_Grz_c::lookat() { daPy_py_c* player = NULL; J3DModel* model = mAnm_p->getModel(); BOOL bVar1 = FALSE; - f32 body_angleX_min = daNpc_Grz_Param_c::m.common.body_angleX_min; - f32 body_angleX_max = daNpc_Grz_Param_c::m.common.body_angleX_max; - f32 body_angleY_min = daNpc_Grz_Param_c::m.common.body_angleY_min; - f32 body_angleY_max = daNpc_Grz_Param_c::m.common.body_angleY_max; - f32 head_angleX_min = daNpc_Grz_Param_c::m.common.head_angleX_min; - f32 head_angleX_max = daNpc_Grz_Param_c::m.common.head_angleX_max; - f32 head_angleY_min = daNpc_Grz_Param_c::m.common.head_angleY_min; - f32 head_angleY_max = daNpc_Grz_Param_c::m.common.head_angleY_max; + f32 body_angleX_min = mpHIO->m.common.body_angleX_min; + f32 body_angleX_max = mpHIO->m.common.body_angleX_max; + f32 body_angleY_min = mpHIO->m.common.body_angleY_min; + f32 body_angleY_max = mpHIO->m.common.body_angleY_max; + f32 head_angleX_min = mpHIO->m.common.head_angleX_min; + f32 head_angleX_max = mpHIO->m.common.head_angleX_max; + f32 head_angleY_min = mpHIO->m.common.head_angleY_min; + f32 head_angleY_max = mpHIO->m.common.head_angleY_max; s16 angle_delta = mCurAngle.y - mOldAngle.y; cXyz lookat_pos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; csXyz* lookat_angle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; @@ -1744,8 +1769,8 @@ int daNpc_Grz_c::wait(void* param_1) { if (home.angle.y == mCurAngle.y) { fopAc_ac_c* actor_p = getAttnActorP(mActorMngrs[0].getActorP() != NULL, srchAttnActor1, - daNpc_Grz_Param_c::m.common.search_distance, daNpc_Grz_Param_c::m.common.search_height, - daNpc_Grz_Param_c::m.common.search_depth, daNpc_Grz_Param_c::m.common.fov, + mpHIO->m.common.search_distance, mpHIO->m.common.search_height, + mpHIO->m.common.search_depth, mpHIO->m.common.fov, shape_angle.y, 120, TRUE); if (actor_p != NULL) { mActorMngrs[1].entry(actor_p); @@ -1829,7 +1854,7 @@ int daNpc_Grz_c::waitSmash(void* param_1) { home.pos = old.pos; } } else if (!daPy_py_c::checkNowWolf()) { - if ((daPy_getPlayerActorClass()->current.pos - current.pos).absXZ() < daNpc_Grz_Param_c::m.demo_start_distance) { + if ((daPy_getPlayerActorClass()->current.pos - current.pos).absXZ() < mpHIO->m.demo_start_distance) { mOrderEvtNo = EVT_STONE_SMASH; } } @@ -1945,12 +1970,12 @@ int daNpc_Grz_c::test(void* param_1) { mMode = 2; // fallthrough case 2: - if (daNpc_Grz_Param_c::m.common.face_expression != mExpression) { - setExpression(daNpc_Grz_Param_c::m.common.face_expression, daNpc_Grz_Param_c::m.common.morf_frame); + if (mpHIO->m.common.face_expression != mExpression) { + setExpression(mpHIO->m.common.face_expression, mpHIO->m.common.morf_frame); } - setMotion(daNpc_Grz_Param_c::m.common.motion, daNpc_Grz_Param_c::m.common.morf_frame, 0); - setLookMode(daNpc_Grz_Param_c::m.common.look_mode); + setMotion(mpHIO->m.common.motion, mpHIO->m.common.morf_frame, 0); + setLookMode(mpHIO->m.common.look_mode); mOrderEvtNo = EVT_NONE; attention_info.flags = 0; break; @@ -2012,7 +2037,7 @@ int daNpc_Grz_c::doRebirthCut(int i_staffId) { int rv = 0; if (dComIfGp_getEventManager().getIsAddvance(i_staffId)) { - mTimer = daNpc_Grz_Param_c::m.color_time; + mTimer = mpHIO->m.color_time; } if (cLib_calcTimer(&mTimer) == 0) { @@ -2021,9 +2046,9 @@ int daNpc_Grz_c::doRebirthCut(int i_staffId) { mColor.b = 0; rv = 1; } else { - mColor.r = daNpc_Grz_Param_c::m.color_r * ((f32)mTimer / daNpc_Grz_Param_c::m.color_time); - mColor.g = daNpc_Grz_Param_c::m.color_g * ((f32)mTimer / daNpc_Grz_Param_c::m.color_time); - mColor.b = daNpc_Grz_Param_c::m.color_b * ((f32)mTimer / daNpc_Grz_Param_c::m.color_time); + mColor.r = mpHIO->m.color_r * ((f32)mTimer / mpHIO->m.color_time); + mColor.g = mpHIO->m.color_g * ((f32)mTimer / mpHIO->m.color_time); + mColor.b = mpHIO->m.color_b * ((f32)mTimer / mpHIO->m.color_time); } return rv; @@ -2092,10 +2117,12 @@ int daNpc_Grz_c::doTalkStandCut(int i_staffId) { int daNpc_Grz_c::doGoOutCut(int i_staffId) { cXyz sp30(150.0f, 0.0f, 1020.0f); dEvent_manager_c* eventManager = (dEvent_manager_c*)&dComIfGp_getEventManager(); + fopAc_ac_c* actor_p = NULL; int rv = 0; + int* piVar1 = NULL; int prm = -1; int timer = 0; - int* piVar1 = dComIfGp_evmng_getMyIntegerP(i_staffId, "prm"); + piVar1 = dComIfGp_evmng_getMyIntegerP(i_staffId, "prm"); if (piVar1 != NULL) { prm = *piVar1; } @@ -2137,7 +2164,7 @@ int daNpc_Grz_c::doGoOutCut(int i_staffId) { setLookMode(LOOK_NONE); setMotion(MOT_WALK_A, -1.0f, 0); setExpression(EXPR_NONE, -1.0f); - speedF = daNpc_Grz_Param_c::m.walk_speed; + speedF = mpHIO->m.walk_speed; mEventTimer = timer; break; @@ -2156,7 +2183,7 @@ int daNpc_Grz_c::doGoOutCut(int i_staffId) { switch (prm) { case 0: { - fopAc_ac_c* actor_p = mActorMngrs[2].getActorP(); + actor_p = mActorMngrs[2].getActorP(); JUT_ASSERT(3415, NULL != actor_p); @@ -2187,7 +2214,7 @@ int daNpc_Grz_c::doGoOutCut(int i_staffId) { case 20: if (mEventTimer != 0 || eventManager->getIsAddvance(i_staffId)) { if ((current.pos - sp30).abs() > 50.0f) { - speedF = daNpc_Grz_Param_c::m.walk_speed; + speedF = mpHIO->m.walk_speed; cLib_addCalcAngleS2(&mCurAngle.y, cLib_targetAngleY(¤t.pos, &sp30), 4, 0x400); setAngle(mCurAngle.y); } else { @@ -2400,7 +2427,7 @@ int daNpc_Grz_c::doStoneSmashCut(int i_staffId) { f32 playSpeed = mAnm_p->getPlaySpeed(); cLib_addCalc2(&playSpeed, 1.0f, 0.1f, 0.1f); mAnm_p->setPlaySpeed(playSpeed); - speedF = daNpc_Grz_Param_c::m.rotation_movement_speed * playSpeed; + speedF = mpHIO->m.rotation_movement_speed * playSpeed; } rv = 1; diff --git a/src/d/actor/d_a_npc_gwolf.cpp b/src/d/actor/d_a_npc_gwolf.cpp index e97fb66ff4..8859b84ad4 100644 --- a/src/d/actor/d_a_npc_gwolf.cpp +++ b/src/d/actor/d_a_npc_gwolf.cpp @@ -87,7 +87,7 @@ enum Motion { /* 0x8 */ MOT_DASHA, }; -static daNpc_GWolf_Param_c l_HIO; +static NPC_GWOLF_HIO_CLASS l_HIO; static daNpc_GetParam1 l_bmdGetParamList[1] = { {BMDR_GW, GWOLF}, @@ -207,18 +207,6 @@ daNpc_GWolf_c::cutFunc daNpc_GWolf_c::mEvtCutList[5] = { &daNpc_GWolf_c::ECut_meetGWolf, }; -daNpc_GWolf_c::daNpc_GWolf_c() {} - -daNpc_GWolf_c::~daNpc_GWolf_c() { - for (int i = 0; l_loadRes_list[mType][i] >= 0; i++) { - dComIfG_resDelete(&mPhases[i], l_resNames[l_loadRes_list[mType][i]]); - } - - if (heap != NULL) { - mAnm_p->stopZelAnime(); - } -} - daNpc_GWolf_HIOParam const daNpc_GWolf_Param_c::m = { 30.0f, -4.0f, @@ -263,6 +251,38 @@ daNpc_GWolf_HIOParam const daNpc_GWolf_Param_c::m = { 120.0f, }; +#if DEBUG +daNpc_GWolf_HIO_c::daNpc_GWolf_HIO_c() { + m = daNpc_GWolf_Param_c::m; +} + +void daNpc_GWolf_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_GWolf_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpc_GWolf_c::daNpc_GWolf_c() {} + +daNpc_GWolf_c::~daNpc_GWolf_c() { + for (int i = 0; l_loadRes_list[mType][i] >= 0; i++) { + dComIfG_resDelete(&mPhases[i], l_resNames[l_loadRes_list[mType][i]]); + } + + if (heap != NULL) { + mAnm_p->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif +} + cPhs__Step daNpc_GWolf_c::create() { fopAcM_ct(this, daNpc_GWolf_c); @@ -308,17 +328,22 @@ cPhs__Step daNpc_GWolf_c::create() { mSound.init(¤t.pos, &eyePos, 3, 1); - mAcchCir.SetWall(daNpc_GWolf_Param_c::m.common.width, daNpc_GWolf_Param_c::m.common.knee_length); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("ゴールドウルフ"); +#endif + + mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_GWolf_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl.Set(mCcDCyl); mCyl.SetStts(&mCcStts); mCyl.SetTgHitCallback(tgHitCallBack); mAcch.CrrPos(dComIfG_Bgsp()); mGndChk = mAcch.m_gnd; mGroundH = mAcch.GetGroundH(); - + setEnvTevColor(); setRoomNo(); reset(); @@ -379,7 +404,7 @@ int daNpc_GWolf_c::Draw() { mdlData_p->getMaterialNodePointer(2)->setMaterialAnm(mpMatAnm); return draw( - chkAction(&daNpc_GWolf_c::test), FALSE, daNpc_GWolf_Param_c::m.common.real_shadow_size, NULL, 0 + chkAction(&daNpc_GWolf_c::test), FALSE, mpHIO->m.common.real_shadow_size, NULL, 0 ); } @@ -475,7 +500,7 @@ int daNpc_GWolf_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { case 1: case 3: case 4: - setLookatMtx(jntNo, i_jointList, daNpc_GWolf_Param_c::m.common.neck_rotation_ratio); + setLookatMtx(jntNo, i_jointList, mpHIO->m.common.neck_rotation_ratio); break; } @@ -540,12 +565,12 @@ void daNpc_GWolf_c::setParam() { attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(3, 6); attention_info.flags = flag; - scale.set(daNpc_GWolf_Param_c::m.common.scale, daNpc_GWolf_Param_c::m.common.scale, daNpc_GWolf_Param_c::m.common.scale); - mAcchCir.SetWallR(daNpc_GWolf_Param_c::m.common.width); - mAcchCir.SetWallH(daNpc_GWolf_Param_c::m.common.knee_length); + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); + mAcchCir.SetWallR(mpHIO->m.common.width); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); if (!dComIfGp_event_runCheck()) { - gravity = daNpc_GWolf_Param_c::m.common.gravity; + gravity = mpHIO->m.common.gravity; } } @@ -558,7 +583,7 @@ BOOL daNpc_GWolf_c::main() { attention_info.flags = 0; } - if (!daNpc_GWolf_Param_c::m.common.debug_mode_ON && (!dComIfGp_event_runCheck() || (mOrderNewEvt && dComIfGp_getEvent()->isOrderOK()))) { + if (!mpHIO->m.common.debug_mode_ON && (!dComIfGp_event_runCheck() || (mOrderNewEvt && dComIfGp_getEvent()->isOrderOK()))) { if (mOrderEvtNo != EVT_NONE) { eventInfo.setArchiveName(l_resNames[l_evtGetParamList[mOrderEvtNo].arcIdx]); } @@ -625,7 +650,7 @@ void daNpc_GWolf_c::setAttnPos() { static cXyz eyeOffset(35.0f, 0.0f, 0.0f); cXyz sp7c, sp88, sp94, spa0; - f32 attention_offset = daNpc_GWolf_Param_c::m.common.attention_offset; + f32 attention_offset = mpHIO->m.common.attention_offset; mDoMtx_stack_c::YrotS(field_0x990); cLib_addCalc2(&field_0x984[0], 0.0f, 0.1f, 125.0f); @@ -691,8 +716,8 @@ void daNpc_GWolf_c::setAttnPos() { } mCyl.SetC(sp7c); - mCyl.SetH(daNpc_GWolf_Param_c::m.common.height + fVar1); - mCyl.SetR(daNpc_GWolf_Param_c::m.common.width + fVar2); + mCyl.SetH(mpHIO->m.common.height + fVar1); + mCyl.SetR(mpHIO->m.common.width + fVar2); dComIfG_Ccsp()->Set(&mCyl); } @@ -922,25 +947,25 @@ void daNpc_GWolf_c::reset() { } void daNpc_GWolf_c::playMotion() { - daNpcF_anmPlayData dat0 = {ANM_WAITSIT, daNpc_GWolf_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat0 = {ANM_WAITSIT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1 = {ANM_AT, daNpc_GWolf_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat1 = {ANM_AT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[1] = {&dat1}; daNpcF_anmPlayData dat2a = {ANM_ATTACKAST, 3.0f, 1}; daNpcF_anmPlayData dat2b = {ANM_ATTACKA, 0.0f, 0}; daNpcF_anmPlayData* pDat2[2] = {&dat2a, &dat2b}; daNpcF_anmPlayData dat3a = {ANM_ATTACKAED, 3.0f, 1}; - daNpcF_anmPlayData dat3b = {ANM_AT, daNpc_GWolf_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat3b = {ANM_AT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[2] = {&dat3a, &dat3b}; - daNpcF_anmPlayData dat4 = {ANM_HOWLB, daNpc_GWolf_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat4 = {ANM_HOWLB, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat4[1] = {&dat4}; - daNpcF_anmPlayData dat5 = {ANM_HOWLC, daNpc_GWolf_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat5 = {ANM_HOWLC, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat5[1] = {&dat5}; daNpcF_anmPlayData dat6 = {ANM_JUMPAST, 0.0f, 0}; daNpcF_anmPlayData* pDat6[1] = {&dat6}; daNpcF_anmPlayData dat7 = {ANM_JUMPA, 0.0f, 0}; daNpcF_anmPlayData* pDat7[1] = {&dat7}; - daNpcF_anmPlayData dat8 = {ANM_DASHA, daNpc_GWolf_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat8 = {ANM_DASHA, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat8[1] = {&dat8}; daNpcF_anmPlayData** ppDat[9] = { @@ -1006,7 +1031,7 @@ BOOL daNpc_GWolf_c::setAction(actionFunc action) { BOOL daNpc_GWolf_c::selectAction() { mNextAction = NULL; - if (daNpc_GWolf_Param_c::m.common.debug_mode_ON) { + if (mpHIO->m.common.debug_mode_ON) { mNextAction = &daNpc_GWolf_c::test; } else { switch (mType) { @@ -1033,7 +1058,7 @@ void daNpc_GWolf_c::doNormalAction(int param_1) { if (mCutType == daPy_py_c::CUT_TYPE_TURN_RIGHT) { damage_time = 20; } else { - damage_time = daNpc_GWolf_Param_c::m.common.damage_time; + damage_time = mpHIO->m.common.damage_time; } setDamage(damage_time, -1, 0); @@ -1150,14 +1175,14 @@ void daNpc_GWolf_c::lookat() { daPy_py_c* player = NULL; J3DModel* model = mAnm_p->getModel(); BOOL i_snap = FALSE; - f32 body_angleX_min = daNpc_GWolf_Param_c::m.common.body_angleX_min; - f32 body_angleX_max = daNpc_GWolf_Param_c::m.common.body_angleX_max; - f32 body_angleY_min = daNpc_GWolf_Param_c::m.common.body_angleY_min; - f32 body_angleY_max = daNpc_GWolf_Param_c::m.common.body_angleY_max; - f32 head_angleX_min = daNpc_GWolf_Param_c::m.common.head_angleX_min; - f32 head_angleX_max = daNpc_GWolf_Param_c::m.common.head_angleX_max; - f32 head_angleY_min = daNpc_GWolf_Param_c::m.common.head_angleY_min; - f32 head_angleY_max = daNpc_GWolf_Param_c::m.common.head_angleY_max; + f32 body_angleX_min = mpHIO->m.common.body_angleX_min; + f32 body_angleX_max = mpHIO->m.common.body_angleX_max; + f32 body_angleY_min = mpHIO->m.common.body_angleY_min; + f32 body_angleY_max = mpHIO->m.common.body_angleY_max; + f32 head_angleX_min = mpHIO->m.common.head_angleX_min; + f32 head_angleX_max = mpHIO->m.common.head_angleX_max; + f32 head_angleY_min = mpHIO->m.common.head_angleY_min; + f32 head_angleY_max = mpHIO->m.common.head_angleY_max; s16 angle_delta = mCurAngle.y - mOldAngle.y; cXyz lookatPos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; csXyz* lookatAngle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; @@ -1243,7 +1268,7 @@ BOOL daNpc_GWolf_c::ECut_attackWarp(int i_staffId) { case 15: mEventTimer = 20; - dCam_getBody()->StartBlure(5000, this, daNpc_GWolf_Param_c::m.blur_opacity, daNpc_GWolf_Param_c::m.blur_scale); + dCam_getBody()->StartBlure(5000, this, mpHIO->m.blur_opacity, mpHIO->m.blur_scale); break; case 20: @@ -1254,8 +1279,8 @@ BOOL daNpc_GWolf_c::ECut_attackWarp(int i_staffId) { case 30: { mCyl.OnCoNoCrrBit(); mCyl.OnCoNoCoHitInfSet(); - speedF = daNpc_GWolf_Param_c::m.attack_spd_horizontal; - speed.y = daNpc_GWolf_Param_c::m.attack_spd_vertical; + speedF = mpHIO->m.attack_spd_horizontal; + speed.y = mpHIO->m.attack_spd_vertical; cXyz sp5c(player->current.pos); speed.y += (sp5c.y - current.pos.y) / ((sp5c - current.pos).absXZ() / speedF); break; @@ -1263,7 +1288,7 @@ BOOL daNpc_GWolf_c::ECut_attackWarp(int i_staffId) { case 40: f32 fVar3 = 0.5f; - speedF = daNpc_GWolf_Param_c::m.attack_spd_horizontal * fVar3; + speedF = mpHIO->m.attack_spd_horizontal * fVar3; break; } } @@ -1313,7 +1338,7 @@ BOOL daNpc_GWolf_c::ECut_attackWarp(int i_staffId) { } f32 fVar1 = (daPy_getPlayerActorClass()->current.pos - current.pos).absXZ(); - f32 fVar2 = daNpc_GWolf_Param_c::m.warp_start_dist; + f32 fVar2 = mpHIO->m.warp_start_dist; if (fVar1 < fVar2) { if (l_appearTmpFlag[mParamMode] != -1) { daNpcT_onTmpBit(l_appearTmpFlag[mParamMode]); @@ -1380,8 +1405,8 @@ BOOL daNpc_GWolf_c::ECut_attackWarpHorse(int i_staffId) { case 30: { mCyl.OnCoNoCrrBit(); mCyl.OnCoNoCoHitInfSet(); - speedF = daNpc_GWolf_Param_c::m.attack_spd_horizontal_horse; - speed.y = daNpc_GWolf_Param_c::m.attack_spd_vertical_horse; + speedF = mpHIO->m.attack_spd_horizontal_horse; + speed.y = mpHIO->m.attack_spd_vertical_horse; cXyz sp54(player->current.pos); speed.y += (sp54.y - current.pos.y) / ((sp54 - current.pos).absXZ() / speedF); break; @@ -1389,7 +1414,7 @@ BOOL daNpc_GWolf_c::ECut_attackWarpHorse(int i_staffId) { case 40: f32 fVar3 = 0.5f; - speedF = daNpc_GWolf_Param_c::m.attack_spd_horizontal * fVar3; + speedF = mpHIO->m.attack_spd_horizontal * fVar3; break; } } @@ -1443,7 +1468,7 @@ BOOL daNpc_GWolf_c::ECut_attackWarpHorse(int i_staffId) { } f32 fVar1 = (daPy_getPlayerActorClass()->current.pos - current.pos).absXZ(); - f32 fVar2 = daNpc_GWolf_Param_c::m.warp_start_dist; + f32 fVar2 = mpHIO->m.warp_start_dist; if (fVar1 < fVar2) { if (l_appearTmpFlag[mParamMode] != -1) { daNpcT_onTmpBit(l_appearTmpFlag[mParamMode]); @@ -1670,7 +1695,7 @@ BOOL daNpc_GWolf_c::wait(void* param_1) { if (!mHide && !daPy_py_c::checkNowWolf() && fabsf(sp30.y - current.pos.y) < 200.0f) { f32 fVar1 = (sp30 - current.pos).absXZ(); - f32 fVar2 = daNpc_GWolf_Param_c::m.demo_start_dist; + f32 fVar2 = mpHIO->m.demo_start_dist; if (fVar1 < fVar2) { if (daPy_getPlayerActorClass()->checkHorseRide()) { @@ -1707,9 +1732,9 @@ BOOL daNpc_GWolf_c::wait(void* param_1) { if (home.angle.y == mCurAngle.y) { bVar1 = mActorMngrs[0].getActorP() != NULL; - fopAc_ac_c* actor_p = getAttnActorP(bVar1, srchAttnActor1, daNpc_GWolf_Param_c::m.common.search_distance, - daNpc_GWolf_Param_c::m.common.search_height, daNpc_GWolf_Param_c::m.common.search_depth, - daNpc_GWolf_Param_c::m.common.fov, shape_angle.y, 0x78, TRUE); + fopAc_ac_c* actor_p = getAttnActorP(bVar1, srchAttnActor1, mpHIO->m.common.search_distance, + mpHIO->m.common.search_height, mpHIO->m.common.search_depth, + mpHIO->m.common.fov, shape_angle.y, 0x78, TRUE); if (actor_p != NULL) { mActorMngrs[1].entry(actor_p); setLookMode(LOOK_ACTOR); @@ -1844,8 +1869,8 @@ BOOL daNpc_GWolf_c::test(void* param_1) { mMode = 2; // fallthrough case 2: - setMotion(daNpc_GWolf_Param_c::m.common.motion, daNpc_GWolf_Param_c::m.common.morf_frame, 0); - setLookMode(daNpc_GWolf_Param_c::m.common.look_mode); + setMotion(mpHIO->m.common.motion, mpHIO->m.common.morf_frame, 0); + setLookMode(mpHIO->m.common.look_mode); mOrderEvtNo = EVT_NONE; attention_info.flags = 0; break; diff --git a/src/d/actor/d_a_npc_hanjo.cpp b/src/d/actor/d_a_npc_hanjo.cpp index 9d644e9017..29ba7567af 100644 --- a/src/d/actor/d_a_npc_hanjo.cpp +++ b/src/d/actor/d_a_npc_hanjo.cpp @@ -140,19 +140,10 @@ dCcD_SrcSph daNpc_Hanjo_c::mStoneCcDSph = { daNpc_Hanjo_c::mStoneCcDObjInfo, {} }; - -daNpc_Hanjo_c::~daNpc_Hanjo_c() { - OS_REPORT("|%06d:%x|daNpc_Hanjo_c -> デストラクト\n", g_Counter.mCounter0, this); - if (mpMorf[0] != 0) { - mpMorf[0]->stopZelAnime(); - } - deleteRes(l_loadResPtrnList[mType], (char const**)l_resNameList); -} - -daNpc_Hanjo_Param_c::Data const daNpc_Hanjo_Param_c::m = { +daNpc_Hanjo_HIOParam const daNpc_Hanjo_Param_c::m = { 160.0f, -3.0f, 1.0f, 400.0f, 255.0f, 160.0f, 35.0f, 30.0f, 0.0f, 0.0f, 10.0f, -10.0f, 30.0f, -10.0f, 45.0f, - -45.0f, 0.6f, 12.0f, 3, 6, 5, 6, 110.0f, 500.0f, 300.0f, -300.0f, 60, 8, 0, 0, + -45.0f, 0.6f, 12.0f, 3, 6, 5, 6, 110.0f, 500.0f, 300.0f, -300.0f, 60, 8, 0, 0, 0, 0, 0, 4.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 24.0f, 16.0f, 4.0f, 80.0f, 65.0f, 4.0f, 600.0f, 136.0f, 0x500, 90, 90, 2, @@ -165,6 +156,38 @@ dCcD_SrcGObjInf const daNpc_Hanjo_c::mStoneCcDObjInfo = { {{0}}, }; +static NPC_HANJO_HIO_CLASS l_HIO; + +#if DEBUG +daNpc_Hanjo_HIO_c::daNpc_Hanjo_HIO_c() { + m = daNpc_Hanjo_Param_c::m; +} + +void daNpc_Hanjo_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_Hanjo_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + + +daNpc_Hanjo_c::~daNpc_Hanjo_c() { + OS_REPORT("|%06d:%x|daNpc_Hanjo_c -> デストラクト\n", g_Counter.mCounter0, this); + if (mpMorf[0] != 0) { + mpMorf[0]->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + + deleteRes(l_loadResPtrnList[mType], (char const**)l_resNameList); +} + int daNpc_Hanjo_c::create() { static int const heapSize[5] = {0x61B0, 0x41D0, 0x39D0, 0x39C0, 0}; daNpcT_ct(this, daNpc_Hanjo_c, l_faceMotionAnmData, @@ -191,11 +214,17 @@ int daNpc_Hanjo_c::create() { fopAcM_setCullSizeBox2(this, modelData); mSound.init(¤t.pos, &eyePos, 3, 1); field_0x9c0.init(&mAcch, 60.0f, 0.0f); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("ハンジョ-"); +#endif + reset(); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_Hanjo_Param_c::m.field_0x10, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl1.Set(mCcDCyl); mCyl1.SetStts(&mCcStts); mCyl1.SetTgHitCallback(tgHitCallBack); @@ -414,10 +443,10 @@ void daNpc_Hanjo_c::afterJntAnm(int param_1) { void daNpc_Hanjo_c::setParam() { selectAction(); srchActors(); - s16 sVar6 = daNpc_Hanjo_Param_c::m.field_0x48; - s16 sVar5 = daNpc_Hanjo_Param_c::m.field_0x4a; - s16 sVar4 = daNpc_Hanjo_Param_c::m.field_0x4c; - s16 sVar1 = daNpc_Hanjo_Param_c::m.field_0x4e; + s16 sVar6 = mpHIO->m.common.talk_distance; + s16 sVar5 = mpHIO->m.common.talk_angle; + s16 sVar4 = mpHIO->m.common.attention_distance; + s16 sVar1 = mpHIO->m.common.attention_angle; if (field_0x1721 != 0) { sVar6 = 6; sVar5 = 6; @@ -438,18 +467,18 @@ void daNpc_Hanjo_c::setParam() { attention_info.distances[1] = attention_info.distances[0]; attention_info.distances[3] = daNpcT_getDistTableIdx(sVar6, sVar5); attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e; - scale.set(daNpc_Hanjo_Param_c::m.field_0x08, daNpc_Hanjo_Param_c::m.field_0x08, - daNpc_Hanjo_Param_c::m.field_0x08); - mCcStts.SetWeight(daNpc_Hanjo_Param_c::m.field_0x10); - mCylH = daNpc_Hanjo_Param_c::m.field_0x14; - mWallR = daNpc_Hanjo_Param_c::m.field_0x1c; - mAttnFovY = daNpc_Hanjo_Param_c::m.field_0x50; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, + mpHIO->m.common.scale); + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; + mAttnFovY = mpHIO->m.common.fov; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_Hanjo_Param_c::m.field_0x18); - mRealShadowSize = daNpc_Hanjo_Param_c::m.field_0x0c; - mExpressionMorfFrame = daNpc_Hanjo_Param_c::m.field_0x6c; - mMorfFrames = daNpc_Hanjo_Param_c::m.field_0x44; - gravity = daNpc_Hanjo_Param_c::m.field_0x04; + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mRealShadowSize = mpHIO->m.common.real_shadow_size; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; + gravity = mpHIO->m.common.gravity; } BOOL daNpc_Hanjo_c::checkChangeEvt() { @@ -651,8 +680,6 @@ void daNpc_Hanjo_c::afterMoved() { } } -static daNpc_Hanjo_Param_c l_HIO; - void daNpc_Hanjo_c::setAttnPos() { cXyz cStack_38(-10.0f, 10.0f, 0.0f); cXyz cStack_44; @@ -660,11 +687,12 @@ void daNpc_Hanjo_c::setAttnPos() { f32 dVar8 = cM_s2rad(mCurAngle.y - field_0xd7e.y); J3DModel* model = mpMorf[0]->getModel(); mJntAnm.setParam(this, model, &cStack_38, getBackboneJointNo(), getNeckJointNo(), - getHeadJointNo(), daNpc_Hanjo_Param_c::m.field_0x24, daNpc_Hanjo_Param_c::m.field_0x20, - daNpc_Hanjo_Param_c::m.field_0x2c, daNpc_Hanjo_Param_c::m.field_0x28, - daNpc_Hanjo_Param_c::m.field_0x34, daNpc_Hanjo_Param_c::m.field_0x30, - daNpc_Hanjo_Param_c::m.field_0x3c, daNpc_Hanjo_Param_c::m.field_0x38, - daNpc_Hanjo_Param_c::m.field_0x40, dVar8, NULL); + getHeadJointNo(), + mpHIO->m.common.body_angleX_min, mpHIO->m.common.body_angleX_max, + mpHIO->m.common.body_angleY_min, mpHIO->m.common.body_angleY_max, + mpHIO->m.common.head_angleX_min, mpHIO->m.common.head_angleX_max, + mpHIO->m.common.head_angleY_min, mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, dVar8, NULL); mJntAnm.calcJntRad(0.2f, 1.0f, dVar8); setMtx(); mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getHeadJointNo())); @@ -672,7 +700,7 @@ void daNpc_Hanjo_c::setAttnPos() { mJntAnm.setEyeAngleX(eyePos, 1.0f, 0); mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, 1, 1.0f, 0); cStack_38.set(0.0f, 0.0f, 20.0f); - cStack_38.y = daNpc_Hanjo_Param_c::m.field_0x00; + cStack_38.y = mpHIO->m.common.attention_offset; if (field_0x1721 != 0) { cStack_38.set(0.0f, 170.0f, -10.0f); } else if (mMotionSeqMngr.getNo() == 2) { @@ -859,8 +887,8 @@ void daNpc_Hanjo_c::initShoot(int param_1) { int daNpc_Hanjo_c::shoot(int param_1) { csXyz cStack_60; - f32 dVar13 = daNpc_Hanjo_Param_c::m.field_0x98; - s16 sVar9 = cM_deg2s(daNpc_Hanjo_Param_c::m.field_0x9c); + f32 dVar13 = mpHIO->m.field_0x98; + s16 sVar9 = cM_deg2s(mpHIO->m.field_0x9c); if (mMotionSeqMngr.getNo() == 16 || mMotionSeqMngr.getNo() == 15) { switch(mMotionSeqMngr.getStepNo()) { case 0: @@ -875,7 +903,7 @@ int daNpc_Hanjo_c::shoot(int param_1) { mStones[i].initialize(); mStones[i].setTmr(0x708); cStack_60 = current.angle; - cStack_60.y += daNpc_Hanjo_Param_c::m.field_0xac; + cStack_60.y += mpHIO->m.field_0xac; mStones[i].setAngle(cStack_60); field_0x170c = i; } @@ -907,7 +935,7 @@ int daNpc_Hanjo_c::shoot(int param_1) { void daNpc_Hanjo_c::initDive() { mFaceMotionSeqMngr.setNo(6, -1.0f, 0, 0); mMotionSeqMngr.setNo(18, -1.0f, 0, 0); - speed.y = daNpc_Hanjo_Param_c::m.field_0x8c; + speed.y = mpHIO->m.field_0x8c; field_0x1721 = 1; } @@ -929,7 +957,7 @@ void daNpc_Hanjo_c::dive() { cLib_addCalc(&speed.y, 2.0f, 0.5f, 5.5f, 0.5f); } } - if (0.0f < speed.y && local_34 < current.pos.y + daNpc_Hanjo_Param_c::m.field_0xa8) + if (0.0f < speed.y && local_34 < current.pos.y + mpHIO->m.field_0xa8) { field_0x171f = 1; if (mMotionSeqMngr.getNo() == 18) { @@ -953,7 +981,7 @@ void daNpc_Hanjo_c::dive() { dComIfGp_particle_set(0xffffffff, 0x8364, &cStack_30, 0, 0); dComIfGp_particle_set(0xffffffff, 0x8365, &cStack_30, 0, 0); } - current.pos.y = local_34 - daNpc_Hanjo_Param_c::m.field_0xa8; + current.pos.y = local_34 - mpHIO->m.field_0xa8; current.pos.y += dVar7 * -20.0f; } cLib_chaseF(&speedF, 0.0f, 0.3f); @@ -1220,7 +1248,7 @@ int daNpc_Hanjo_c::cutPursuitBee(int param_1) { fopAc_ac_c* hitActor = mStones[i].getSphP()->GetCoHitObj()->GetAc(); fopAc_ac_c* hitActor2 = dCc_GetAc(hitActor); if (hitActor2 != NULL && fopAcM_GetName(hitActor2) == PROC_E_NEST) { - mEventTimer = daNpc_Hanjo_Param_c::m.field_0xb0; + mEventTimer = mpHIO->m.field_0xb0; } mStones[i].initialize(); } @@ -1243,7 +1271,7 @@ int daNpc_Hanjo_c::cutPursuitBee(int param_1) { shape_angle.y = current.angle.y; mCurAngle.y = current.angle.y; field_0xd7e.y = mCurAngle.y; - cLib_chaseF(&speedF, daNpc_Hanjo_Param_c::m.field_0x90, 0.5f); + cLib_chaseF(&speedF, mpHIO->m.field_0x90, 0.5f); if (mEventTimer != 0 && mCyl1.ChkCoHit()) { @@ -1491,7 +1519,7 @@ int daNpc_Hanjo_c::cutDive(int param_1) { cStack_2c.y = attention_info.position.y; mGndChk.SetPos(&cStack_2c); f32 dVar7 = dComIfG_Bgsp().GroundCross(&mGndChk); - if ((dVar7 - mGroundH) < -daNpc_Hanjo_Param_c::m.field_0x18) { + if ((dVar7 - mGroundH) < -mpHIO->m.common.knee_length) { rv = 1; } if (mType == TYPE_1) { @@ -1507,7 +1535,7 @@ int daNpc_Hanjo_c::cutDive(int param_1) { cLib_addCalcAngleS2(¤t.angle.y, cStack_34.y, 4, 0x800); shape_angle.y = current.angle.y; mCurAngle.y = current.angle.y; - cLib_chaseF(&speedF, daNpc_Hanjo_Param_c::m.field_0x90, 1.0f); + cLib_chaseF(&speedF, mpHIO->m.field_0x90, 1.0f); break; } case 3: @@ -1554,8 +1582,7 @@ int daNpc_Hanjo_c::wait(void* param_0) { switch(mType) { case TYPE_0: if (chkPointInArea(daPy_getPlayerActorClass()->current.pos, current.pos, - daNpc_Hanjo_Param_c::m.field_0x54, 150.0f, - -150.0f, 0)) { + mpHIO->m.common.search_distance, 150.0f, -150.0f, 0)) { if (daPy_getPlayerActorClass()->checkBeeChildDrink()) { mSpeakEvent = 1; field_0x1723 = 1; @@ -1646,7 +1673,7 @@ int daNpc_Hanjo_c::wait(void* param_0) { } int daNpc_Hanjo_c::throwStone(void* param_0) { - int sVar4 = daNpc_Hanjo_Param_c::m.field_0xae; + int sVar4 = mpHIO->m.field_0xae; switch(mMode) { case 0: case 1: @@ -1664,7 +1691,7 @@ int daNpc_Hanjo_c::throwStone(void* param_0) { case 2: if (daNpcT_chkEvtBit(0x8b) && !daNpcT_chkEvtBit(0xad) && !daNpcT_chkEvtBit(0xb7)) { if (chkPointInArea(daPy_getPlayerActorClass()->current.pos, current.pos, - daNpc_Hanjo_Param_c::m.field_0xa4, 1000.0f, -1000.0f, 0) == false) + mpHIO->m.field_0xa4, 1000.0f, -1000.0f, 0) == false) { mEvtNo = 8; } @@ -1717,7 +1744,7 @@ int daNpc_Hanjo_c::throwStone(void* param_0) { } int daNpc_Hanjo_c::takayose(void* param_0) { - f32 dVar8 = daNpc_Hanjo_Param_c::m.field_0xae; + f32 dVar8 = mpHIO->m.field_0xae; cXyz cStack_50; cXyz cStack_5c; switch (mMode) { diff --git a/src/d/actor/d_a_npc_henna.cpp b/src/d/actor/d_a_npc_henna.cpp index e81a8a2b8c..cf2ce2f665 100644 --- a/src/d/actor/d_a_npc_henna.cpp +++ b/src/d/actor/d_a_npc_henna.cpp @@ -11,7 +11,7 @@ #include "SSystem/SComponent/c_m3d_g_pla.h" #include "Z2AudioLib/Z2Instances.h" #include "c/c_damagereaction.h" -#include +#include #include "d/actor/d_a_alink.h" #include "d/actor/d_a_canoe.h" #include "d/actor/d_a_mg_fshop.h" diff --git a/src/d/actor/d_a_npc_hoz.cpp b/src/d/actor/d_a_npc_hoz.cpp index 1990a7cf2b..016975028f 100644 --- a/src/d/actor/d_a_npc_hoz.cpp +++ b/src/d/actor/d_a_npc_hoz.cpp @@ -254,6 +254,22 @@ const daNpc_Hoz_HIOParam daNpc_Hoz_Param_c::m = { 600.0f, }; +static NPC_HOZ_HIO_CLASS l_HIO; + +#if DEBUG +daNpc_Hoz_HIO_c::daNpc_Hoz_HIO_c() { + m = daNpc_Hoz_Param_c::m; +} + +void daNpc_Hoz_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_Hoz_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + daNpc_Hoz_c::~daNpc_Hoz_c() { if (mType == 1) { daNpcT_offTmpBit(0x46); @@ -263,6 +279,12 @@ daNpc_Hoz_c::~daNpc_Hoz_c() { mpMorf[0]->stopZelAnime(); } +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); } @@ -307,6 +329,11 @@ int daNpc_Hoz_c::create() { mSound.init(¤t.pos, &eyePos, 3, 1); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("ホズ"); +#endif + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mAcch.CrrPos(dComIfG_Bgsp()); mGndChk = mAcch.m_gnd; @@ -315,7 +342,7 @@ int daNpc_Hoz_c::create() { setEnvTevColor(); setRoomNo(); - mCcStts.Init(daNpc_Hoz_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl.Set(mCcDCyl); mCyl.SetStts(&mCcStts); mCyl.SetTgHitCallback(tgHitCallBack); @@ -402,7 +429,7 @@ int daNpc_Hoz_c::Draw() { #else FALSE, #endif - FALSE, daNpc_Hoz_Param_c::m.common.real_shadow_size, NULL, 100.0f, FALSE, FALSE, FALSE + FALSE, mpHIO->m.common.real_shadow_size, NULL, 100.0f, FALSE, FALSE, FALSE ); } @@ -515,10 +542,10 @@ void daNpc_Hoz_c::setParam() { selectAction(); srchActors(); - s16 talk_dist = daNpc_Hoz_Param_c::m.common.talk_distance; - s16 talk_angle = daNpc_Hoz_Param_c::m.common.talk_angle; - s16 attn_dist = daNpc_Hoz_Param_c::m.common.attention_distance; - s16 attn_angle = daNpc_Hoz_Param_c::m.common.attention_angle; + s16 talk_dist = mpHIO->m.common.talk_distance; + s16 talk_angle = mpHIO->m.common.talk_angle; + s16 attn_dist = mpHIO->m.common.attention_distance; + s16 attn_angle = mpHIO->m.common.attention_angle; attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attn_dist, attn_angle); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; @@ -540,23 +567,23 @@ void daNpc_Hoz_c::setParam() { attention_info.flags = attn_flags; } - scale.set(daNpc_Hoz_Param_c::m.common.scale, daNpc_Hoz_Param_c::m.common.scale, daNpc_Hoz_Param_c::m.common.scale); + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); - mAcchCir.SetWallR(daNpc_Hoz_Param_c::m.common.width); - mAcchCir.SetWallH(daNpc_Hoz_Param_c::m.common.knee_length); + mAcchCir.SetWallR(mpHIO->m.common.width); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); - mCcStts.SetWeight(daNpc_Hoz_Param_c::m.common.weight); - mCylH = daNpc_Hoz_Param_c::m.common.height; - mWallR = daNpc_Hoz_Param_c::m.common.width; + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; if (mType == 4 || mType == 6) { gravity = 0.0f; } else { - gravity = daNpc_Hoz_Param_c::m.common.gravity; + gravity = mpHIO->m.common.gravity; } - mExpressionMorfFrame = daNpc_Hoz_Param_c::m.common.expression_morf_frame; - mMorfFrames = daNpc_Hoz_Param_c::m.common.morf_frame; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; } void daNpc_Hoz_c::setAfterTalkMotion() {} @@ -728,11 +755,11 @@ void daNpc_Hoz_c::setAttnPos() { cXyz sp34(0.0f, -30.0f, 0.0f); mJntAnm.setParam(this, mpMorf[0]->getModel(), &sp34, getBackboneJointNo(), getNeckJointNo(), getHeadJointNo(), - daNpc_Hoz_Param_c::m.common.body_angleX_min, daNpc_Hoz_Param_c::m.common.body_angleX_max, - daNpc_Hoz_Param_c::m.common.body_angleY_min, daNpc_Hoz_Param_c::m.common.body_angleY_max, - daNpc_Hoz_Param_c::m.common.head_angleX_min, daNpc_Hoz_Param_c::m.common.head_angleX_max, - daNpc_Hoz_Param_c::m.common.head_angleY_min, daNpc_Hoz_Param_c::m.common.head_angleY_max, - daNpc_Hoz_Param_c::m.common.neck_rotation_ratio, 0.0f, NULL); + mpHIO->m.common.body_angleX_min, mpHIO->m.common.body_angleX_max, + mpHIO->m.common.body_angleY_min, mpHIO->m.common.body_angleY_max, + mpHIO->m.common.head_angleX_min, mpHIO->m.common.head_angleX_max, + mpHIO->m.common.head_angleY_min, mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, 0.0f, NULL); f32 var_f31 = cM_s2rad(mCurAngle.y - field_0xd7e.y); mJntAnm.calcJntRad(0.2f, 1.0f, var_f31); @@ -748,7 +775,7 @@ void daNpc_Hoz_c::setAttnPos() { cXyz sp28; mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(4)); mDoMtx_stack_c::multVecZero(&sp28); - attention_info.position.set(sp28.x, sp28.y + daNpc_Hoz_Param_c::m.common.attention_offset, sp28.z); + attention_info.position.set(sp28.x, sp28.y + mpHIO->m.common.attention_offset, sp28.z); } void daNpc_Hoz_c::setCollision() { @@ -770,12 +797,12 @@ void daNpc_Hoz_c::setCollision() { } pos.y -= 30.0f; - cyl_h = daNpc_Hoz_Param_c::m.common.height; - cyl_r = daNpc_Hoz_Param_c::m.common.width; + cyl_h = mpHIO->m.common.height; + cyl_r = mpHIO->m.common.width; } else { pos = current.pos; - cyl_h = daNpc_Hoz_Param_c::m.common.height; - cyl_r = daNpc_Hoz_Param_c::m.common.width; + cyl_h = mpHIO->m.common.height; + cyl_r = mpHIO->m.common.width; } mCyl.SetH(cyl_h); @@ -827,9 +854,8 @@ int daNpc_Hoz_c::test(void* i_this) { mMode = 2; // fall-through case 2: - // TODO: determine pointer type of field_0xE40 - mFaceMotionSeqMngr.setNo(field_0xE40, -1.0f, 0, 0); - mMotionSeqMngr.setNo(field_0xE40, -1.0f, 0, 0); + mFaceMotionSeqMngr.setNo((int)mpHIO, -1.0f, 0, 0); + mMotionSeqMngr.setNo((int)mpHIO, -1.0f, 0, 0); mJntAnm.lookNone(0); attention_info.flags = 0; case 3: @@ -1183,7 +1209,7 @@ int daNpc_Hoz_c::waitBoat1_5(void* param_0) { } } - if (field_0xf8a == 0 && (current.pos - daPy_getPlayerActorClass()->current.pos).absXZ() <= daNpc_Hoz_Param_c::m.field_0x8c) { + if (field_0xf8a == 0 && (current.pos - daPy_getPlayerActorClass()->current.pos).absXZ() <= mpHIO->m.field_0x8c) { mSpeakEvent = 1; } @@ -1665,8 +1691,6 @@ static int daNpc_Hoz_IsDelete(void* i_this) { return true; } -static daNpc_Hoz_Param_c l_HIO; - static actor_method_class daNpc_Hoz_MethodTable = { (process_method_func)daNpc_Hoz_Create, (process_method_func)daNpc_Hoz_Delete, diff --git a/src/d/actor/d_a_npc_ins.cpp b/src/d/actor/d_a_npc_ins.cpp index 0badcf95dd..2d4724503a 100644 --- a/src/d/actor/d_a_npc_ins.cpp +++ b/src/d/actor/d_a_npc_ins.cpp @@ -212,7 +212,7 @@ enum Type { /* 0x2 */ TYPE_2, }; -static daNpcIns_Param_c l_HIO; +static NPC_INS_HIO_CLASS l_HIO; static daNpc_GetParam2 l_bckGetParamList[24] = { {-1, J3DFrameCtrl::EMode_LOOP, INS}, @@ -291,18 +291,6 @@ daNpcIns_c::eventFunc daNpcIns_c::mEvtSeqList[1] = { NULL, }; -daNpcIns_c::daNpcIns_c() {} - -daNpcIns_c::~daNpcIns_c() { - for (int i = 0; l_loadRes_list[mType][i] >= 0; i++) { - dComIfG_resDelete(&mPhases[i], l_arcNames[l_loadRes_list[mType][i]]); - } - - if (heap != 0) { - mAnm_p->stopZelAnime(); - } -} - static insect_param_data const l_insectParams[24] = { {0x0191, 0x709, 0, 0}, {0x0192, 0x709, 0, 0}, @@ -367,6 +355,34 @@ daNpcIns_HIOParam const daNpcIns_Param_c::m = { 1.5f, }; +#if DEBUG +daNpcIns_HIO_c::daNpcIns_HIO_c() { + m = daNpcIns_Param_c::m; +} + +void daNpcIns_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpcIns_c::daNpcIns_c() {} + +daNpcIns_c::~daNpcIns_c() { + for (int i = 0; l_loadRes_list[mType][i] >= 0; i++) { + dComIfG_resDelete(&mPhases[i], l_arcNames[l_loadRes_list[mType][i]]); + } + + if (heap != 0) { + mAnm_p->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif +} + cPhs__Step daNpcIns_c::Create() { fopAcM_ct(this, daNpcIns_c); @@ -416,19 +432,25 @@ cPhs__Step daNpcIns_c::Create() { fopAcM_SetMtx(this, mAnm_p->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -160.0f, -50.0f, -160.0f, 160.0f, 220.0f, 160.0f); mSound.init(¤t.pos, &eyePos, 3, 1); - mAcchCir.SetWall(daNpcIns_Param_c::m.common.width, daNpcIns_Param_c::m.common.knee_length); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("ゴスロリ蟲屋"); +#endif + + mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mAcch.SetRoofNone(); mAcch.SetWaterNone(); mAcch.CrrPos(dComIfG_Bgsp()); - mCcStts.Init(daNpcIns_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl.Set(mCcDCyl); mCyl.SetStts(&mCcStts); mCyl.SetTgType(0); mCyl.SetTgSPrm(0); - mCyl.SetH(daNpcIns_Param_c::m.common.height); - mCyl.SetR(daNpcIns_Param_c::m.common.width); + mCyl.SetH(mpHIO->m.common.height); + mCyl.SetR(mpHIO->m.common.width); mGndChk = mAcch.m_gnd; mGroundH = mAcch.GetGroundH(); setEnvTevColor(); @@ -522,7 +544,7 @@ int daNpcIns_c::Execute() { int daNpcIns_c::Draw() { mAnm_p->getModel()->getModelData()->getMaterialNodePointer(1)->setMaterialAnm(mpMatAnm); - draw(FALSE, FALSE, daNpcIns_Param_c::m.common.real_shadow_size, NULL, FALSE); + draw(FALSE, FALSE, mpHIO->m.common.real_shadow_size, NULL, FALSE); if (mpUmbrellaModel != NULL) { g_env_light.setLightTevColorType_MAJI(mpUmbrellaModel, &tevStr); @@ -560,7 +582,7 @@ int daNpcIns_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { case JNT_BACKBONE1: case JNT_NECK: case JNT_HEAD: - setLookatMtx(jntNo, lookatJoints, daNpcIns_Param_c::m.common.neck_rotation_ratio); + setLookatMtx(jntNo, lookatJoints, mpHIO->m.common.neck_rotation_ratio); break; } @@ -594,25 +616,25 @@ int daNpcIns_c::ctrlJointCallBack(J3DJoint* i_joint, int param_2) { } void daNpcIns_c::playExpression() { - daNpcF_anmPlayData dat0 = {ANM_F_TALK_A, daNpcIns_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat0 = {ANM_F_TALK_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1 = {ANM_F_SNIFF, daNpcIns_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat1 = {ANM_F_SNIFF, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[1] = {&dat1}; daNpcF_anmPlayData dat2 = {ANM_F_SURPRISED, 0.0f, 0}; daNpcF_anmPlayData* pDat2[1] = {&dat2}; - daNpcF_anmPlayData dat3 = {ANM_F_HAPPY, daNpcIns_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat3 = {ANM_F_HAPPY, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[1] = {&dat3}; - daNpcF_anmPlayData dat4 = {ANM_F_MAD, daNpcIns_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat4 = {ANM_F_MAD, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat4[1] = {&dat4}; - daNpcF_anmPlayData dat5 = {ANM_FH_SNIFF, daNpcIns_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat5 = {ANM_FH_SNIFF, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat5[1] = {&dat5}; daNpcF_anmPlayData dat6 = {ANM_FH_SURPRISED, 0.0f, 0}; daNpcF_anmPlayData* pDat6[1] = {&dat6}; - daNpcF_anmPlayData dat7 = {ANM_FH_HAPPY, daNpcIns_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat7 = {ANM_FH_HAPPY, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat7[1] = {&dat7}; - daNpcF_anmPlayData dat8 = {ANM_FH_MAD, daNpcIns_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat8 = {ANM_FH_MAD, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat8[1] = {&dat8}; - daNpcF_anmPlayData dat9 = {ANM_NONE, daNpcIns_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat9 = {ANM_NONE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat9[1] = {&dat9}; daNpcF_anmPlayData** ppDat[10] = { @@ -634,35 +656,35 @@ void daNpcIns_c::playExpression() { } void daNpcIns_c::playMotion() { - daNpcF_anmPlayData dat0 = {ANM_WAIT_A, daNpcIns_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat0 = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1a = {ANM_TALK_A, daNpcIns_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat1a = {ANM_TALK_A, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat1b = {ANM_TALK_A_WAIT, 0.0f, 0}; daNpcF_anmPlayData* pDat1[2] = {&dat1a, &dat1b}; - daNpcF_anmPlayData dat2 = {ANM_TALK_A_WAIT, daNpcIns_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat2 = {ANM_TALK_A_WAIT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[1] = {&dat2}; - daNpcF_anmPlayData dat3a = {ANM_HI, daNpcIns_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat3b = {ANM_WAIT_A, daNpcIns_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat3a = {ANM_HI, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat3b = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[2] = {&dat3a, &dat3b}; - daNpcF_anmPlayData dat4 = {ANM_K_WAIT, daNpcIns_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat4 = {ANM_K_WAIT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat4[1] = {&dat4}; daNpcF_anmPlayData dat5a = {ANM_SURPRISED, 0.0f, 1}; daNpcF_anmPlayData dat5b = {ANM_SURPRISED_WAIT, 0.0f, 0}; daNpcF_anmPlayData* pDat5[2] = {&dat5a, &dat5b}; - daNpcF_anmPlayData dat6a = {ANM_SNIFF, daNpcIns_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat6a = {ANM_SNIFF, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat6b = {ANM_TALK_A_WAIT, 0.0f, 0}; daNpcF_anmPlayData* pDat6[2] = {&dat6a, &dat6b}; - daNpcF_anmPlayData dat7 = {ANM_K_WALK, daNpcIns_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat7 = {ANM_K_WALK, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat7[1] = {&dat7}; - daNpcF_anmPlayData dat8 = {ANM_K_LOOKING, daNpcIns_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat8 = {ANM_K_LOOKING, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat8[1] = {&dat8}; - daNpcF_anmPlayData dat9 = {ANM_K_SEARCHING_A, daNpcIns_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat9 = {ANM_K_SEARCHING_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat9[1] = {&dat9}; - daNpcF_anmPlayData dat10 = {ANM_K_SEARCHING_B, daNpcIns_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat10 = {ANM_K_SEARCHING_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat10[1] = {&dat10}; - daNpcF_anmPlayData dat11 = {ANM_STEP, daNpcIns_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat11 = {ANM_STEP, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat11[1] = {&dat11}; - daNpcF_anmPlayData dat12 = {ANM_K_STEP, daNpcIns_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat12 = {ANM_K_STEP, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat12[1] = {&dat12}; daNpcF_anmPlayData** ppDat[13] = { @@ -687,18 +709,18 @@ void daNpcIns_c::playMotion() { } void daNpcIns_c::setParam() { - attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(daNpcIns_Param_c::m.common.attention_distance, daNpcIns_Param_c::m.common.attention_angle); + attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(mpHIO->m.common.attention_distance, mpHIO->m.common.attention_angle); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; - attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(daNpcIns_Param_c::m.common.talk_distance, daNpcIns_Param_c::m.common.talk_angle); + attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(mpHIO->m.common.talk_distance, mpHIO->m.common.talk_angle); attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e; if (daPy_py_c::checkNowWolf()) { attention_info.flags |= fopAc_AttnFlag_UNK_0x800000; } - mAcchCir.SetWallR(daNpcIns_Param_c::m.common.width); - mAcchCir.SetWallH(daNpcIns_Param_c::m.common.knee_length); - gravity = daNpcIns_Param_c::m.common.gravity; + mAcchCir.SetWallR(mpHIO->m.common.width); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + gravity = mpHIO->m.common.gravity; } int daNpcIns_c::drawDbgInfo() { @@ -949,7 +971,7 @@ void daNpcIns_c::setAttnPos() { mEyeAngle.x = 0; } - attention_info.position.set(mHeadPos.x, mHeadPos.y + daNpcIns_Param_c::m.common.attention_offset, mHeadPos.z); + attention_info.position.set(mHeadPos.x, mHeadPos.y + mpHIO->m.common.attention_offset, mHeadPos.z); mCyl.SetC(current.pos); dComIfG_Ccsp()->Set(&mCyl); } @@ -958,14 +980,14 @@ void daNpcIns_c::lookat() { daPy_py_c* player = NULL; J3DModel* model = mAnm_p->getModel(); BOOL i_snap = FALSE; - f32 body_angleX_min = daNpcIns_Param_c::m.common.body_angleX_min; - f32 body_angleX_max = daNpcIns_Param_c::m.common.body_angleX_max; - f32 body_angleY_min = daNpcIns_Param_c::m.common.body_angleY_min; - f32 body_angleY_max = daNpcIns_Param_c::m.common.body_angleY_max; - f32 head_angleX_min = daNpcIns_Param_c::m.common.head_angleX_min; - f32 head_angleX_max = daNpcIns_Param_c::m.common.head_angleX_max; - f32 head_angleY_min = daNpcIns_Param_c::m.common.head_angleY_min; - f32 head_angleY_max = daNpcIns_Param_c::m.common.head_angleY_max; + f32 body_angleX_min = mpHIO->m.common.body_angleX_min; + f32 body_angleX_max = mpHIO->m.common.body_angleX_max; + f32 body_angleY_min = mpHIO->m.common.body_angleY_min; + f32 body_angleY_max = mpHIO->m.common.body_angleY_max; + f32 head_angleX_min = mpHIO->m.common.head_angleX_min; + f32 head_angleX_max = mpHIO->m.common.head_angleX_max; + f32 head_angleY_min = mpHIO->m.common.head_angleY_min; + f32 head_angleY_max = mpHIO->m.common.head_angleY_max; s16 angle_delta = mCurAngle.y - mOldAngle.y; cXyz lookatPos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; csXyz* lookatAngle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; @@ -1105,7 +1127,7 @@ BOOL daNpcIns_c::step(s16 i_turnTargetAngle, int param_2) { BOOL daNpcIns_c::chkFindPlayer() { BOOL rv; - if (!chkActorInSight(daPy_getPlayerActorClass(), daNpcIns_Param_c::m.common.fov)) { + if (!chkActorInSight(daPy_getPlayerActorClass(), mpHIO->m.common.fov)) { mActorMngr[0].remove(); return FALSE; } @@ -1356,7 +1378,7 @@ int daNpcIns_c::goHome(void* param_1) { if (step(cLib_targetAngleY(¤t.pos, &targetPoint), 1)) { setExpression(EXPR_NONE, -1.0f); setMotion(MOT_K_WALK, -1.0f, 0); - speedF = daNpcIns_Param_c::m.walk_speed; + speedF = mpHIO->m.walk_speed; mInsectMsgNo = 0x27; mMode = 2; } @@ -1372,7 +1394,7 @@ int daNpcIns_c::goHome(void* param_1) { setLookMode(LOOK_NONE); } - speedF = daNpcIns_Param_c::m.walk_speed; + speedF = mpHIO->m.walk_speed; if (checkPoint(current.pos, speedF) && setNextPoint()) { fopAcM_delete(this); diff --git a/src/d/actor/d_a_npc_kakashi.cpp b/src/d/actor/d_a_npc_kakashi.cpp index 0b7d665fae..efa8931a47 100644 --- a/src/d/actor/d_a_npc_kakashi.cpp +++ b/src/d/actor/d_a_npc_kakashi.cpp @@ -88,17 +88,6 @@ int (daNpc_Kakashi_c::*daNpc_Kakashi_c::mCutList[])(int) = { &daNpc_Kakashi_c::cutMarosWhisper, }; -daNpc_Kakashi_c::~daNpc_Kakashi_c() { - OS_REPORT("|%06d:%x|daNpc_Kakashi_c -> デストラクト\n", g_Counter.mCounter0, this); - - if (heap != NULL) { - mpMorf[0]->stopZelAnime(); - mSound.deleteObject(); - } - - deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); -} - const daNpc_Kakashi_HIOParam daNpc_Kakashi_Param_c::m = { 190.0f, -6.0f, @@ -146,6 +135,39 @@ const daNpc_Kakashi_HIOParam daNpc_Kakashi_Param_c::m = { 27.0f, }; +static NPC_KAKASHI_HIO_CLASS l_HIO; + +#if DEBUG +daNpc_Kakashi_HIO_c::daNpc_Kakashi_HIO_c() { + m = daNpc_Kakashi_Param_c::m; +} + +void daNpc_Kakashi_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_Kakashi_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpc_Kakashi_c::~daNpc_Kakashi_c() { + OS_REPORT("|%06d:%x|daNpc_Kakashi_c -> デストラクト\n", g_Counter.mCounter0, this); + + if (heap != NULL) { + mpMorf[0]->stopZelAnime(); + mSound.deleteObject(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + + deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); +} + int daNpc_Kakashi_c::create() { daNpcT_ct(this, daNpc_Kakashi_c, l_faceMotionAnmData, l_motionAnmData, l_faceMotionSequenceData, 4, l_motionSequenceData, 4, @@ -178,11 +200,16 @@ int daNpc_Kakashi_c::create() { mSound.init(¤t.pos, 3); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("かかし"); +#endif + reset(); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_Kakashi_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); for (int i = 0; i < 3; i++) { mCcSph[i].Set(mCcDSph); mCcSph[i].SetStts(&mCcStts); @@ -404,18 +431,18 @@ void daNpc_Kakashi_c::setParam() { attention_info.flags = attn_flags; - scale.setall(daNpc_Kakashi_Param_c::m.common.scale); + scale.setall(mpHIO->m.common.scale); - mCcStts.SetWeight(daNpc_Kakashi_Param_c::m.common.weight); - mCylH = daNpc_Kakashi_Param_c::m.common.height; - mWallR = daNpc_Kakashi_Param_c::m.common.width; - mAttnFovY = daNpc_Kakashi_Param_c::m.common.fov; + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; + mAttnFovY = mpHIO->m.common.fov; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_Kakashi_Param_c::m.common.knee_length); - mRealShadowSize = daNpc_Kakashi_Param_c::m.common.real_shadow_size; - mExpressionMorfFrame = daNpc_Kakashi_Param_c::m.common.expression_morf_frame; - mMorfFrames = daNpc_Kakashi_Param_c::m.common.morf_frame; - gravity = daNpc_Kakashi_Param_c::m.common.gravity; + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mRealShadowSize = mpHIO->m.common.real_shadow_size; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; + gravity = mpHIO->m.common.gravity; } void daNpc_Kakashi_c::srchActors() {} @@ -501,7 +528,7 @@ void daNpc_Kakashi_c::setAttnPos() { cXyz sp14; cXyz sp8; - f32 attn_offset = daNpc_Kakashi_Param_c::m.common.attention_offset; + f32 attn_offset = mpHIO->m.common.attention_offset; if (field_0x1392 == 0) { mDoMtx_stack_c::YrotS(field_0x138c); @@ -554,8 +581,6 @@ void daNpc_Kakashi_c::setAttnPos() { } } -static daNpc_Kakashi_Param_c l_HIO; - void daNpc_Kakashi_c::setCollision() { if (!mHide) { static cXyz armROfst(80.0f, 0.0f, 0.0f); @@ -777,7 +802,7 @@ fopAc_ac_c* daNpc_Kakashi_c::hitChk() { void daNpc_Kakashi_c::setStaggerParam(fopAc_ac_c* i_hitActor) { csXyz sp14; f32 var_f31 = 1.0f; - f32 sp28[3] = {daNpc_Kakashi_Param_c::m.field_0x8c, daNpc_Kakashi_Param_c::m.field_0x90, daNpc_Kakashi_Param_c::m.field_0x94}; + f32 sp28[3] = {mpHIO->m.field_0x8c, mpHIO->m.field_0x90, mpHIO->m.field_0x94}; field_0x138c = 0; diff --git a/src/d/actor/d_a_npc_kasi_hana.cpp b/src/d/actor/d_a_npc_kasi_hana.cpp index fdd6f52e93..f80de722ce 100644 --- a/src/d/actor/d_a_npc_kasi_hana.cpp +++ b/src/d/actor/d_a_npc_kasi_hana.cpp @@ -632,8 +632,8 @@ daNpcKasiHana_c::~daNpcKasiHana_c() { } #if DEBUG - if (mHIO) { - mHIO->removeHIO(); + if (mpHIO) { + mpHIO->removeHIO(); } #endif } @@ -663,12 +663,12 @@ cPhs__Step daNpcKasiHana_c::Create() { fopAcM_setCullSizeBox(this, -60.0f, -10.0f, -60.0f, 60.0f, 160.0f, 60.0f); mSound.init(¤t.pos, &eyePos, 3, 1); #if DEBUG - mHIO = &l_HIO; + mpHIO = &l_HIO; // three daughters: Hana: - mHIO->entryHIO("三人娘:ハナ"); + mpHIO->entryHIO("三人娘:ハナ"); #endif - mAcchCir.SetWall(mHIO->m.common.width, mHIO->m.common.knee_length); + mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mAcch.CrrPos(dComIfG_Bgsp()); @@ -677,8 +677,8 @@ cPhs__Step daNpcKasiHana_c::Create() { mCyl.SetStts(&mCcStts); mCyl.SetTgType(0); mCyl.SetTgSPrm(0); - mCyl.SetH(mHIO->m.common.height); - mCyl.SetR(mHIO->m.common.width); + mCyl.SetH(mpHIO->m.common.height); + mCyl.SetR(mpHIO->m.common.width); mGndChk = mAcch.m_gnd; mGroundH = mAcch.GetGroundH(); @@ -734,7 +734,7 @@ int daNpcKasiHana_c::Execute() { int daNpcKasiHana_c::Draw() { if (!mEscape) { - draw(FALSE, FALSE, mHIO->m.common.real_shadow_size, NULL, FALSE); + draw(FALSE, FALSE, mpHIO->m.common.real_shadow_size, NULL, FALSE); } return 1; @@ -759,7 +759,7 @@ int daNpcKasiHana_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { case JNT_BACKBONE: case JNT_NECK: case JNT_HEAD: - setLookatMtx(jntNo, i_jointList, mHIO->m.common.neck_rotation_ratio); + setLookatMtx(jntNo, i_jointList, mpHIO->m.common.neck_rotation_ratio); break; } @@ -792,16 +792,16 @@ void daNpcKasiHana_c::setParam() { mKasiMng.initPath(getRailNo(), 6); } - attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(mHIO->m.common.attention_distance, mHIO->m.common.attention_angle); + attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(mpHIO->m.common.attention_distance, mpHIO->m.common.attention_angle); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; - attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(mHIO->m.common.talk_distance, mHIO->m.common.talk_angle); + attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(mpHIO->m.common.talk_distance, mpHIO->m.common.talk_angle); attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e; #if DEBUG - scale.set(mHIO->m.common.scale, mHIO->m.common.scale, mHIO->m.common.scale); - mAcchCir.SetWallR(mHIO->m.common.width); - mAcchCir.SetWallH(mHIO->m.common.knee_length); - gravity = mHIO->m.common.gravity; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); + mAcchCir.SetWallR(mpHIO->m.common.width); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + gravity = mpHIO->m.common.gravity; #endif } @@ -882,7 +882,7 @@ void daNpcKasiHana_c::setAttnPos() { mHeadAngle.x = cLib_targetAngleX(&mHeadPos, &sp1c); mHeadAngle.y = cLib_targetAngleY(&mHeadPos, &sp1c); - attention_info.position.set(mHeadPos.x, mHeadPos.y + mHIO->m.common.attention_offset, mHeadPos.z); + attention_info.position.set(mHeadPos.x, mHeadPos.y + mpHIO->m.common.attention_offset, mHeadPos.z); cXyz sp28; @@ -891,8 +891,8 @@ void daNpcKasiHana_c::setAttnPos() { sp28.y = current.pos.y; mCyl.SetC(sp28); #if DEBUG - mCyl.SetH(mHIO->m.common.height); - mCyl.SetR(mHIO->m.common.width); + mCyl.SetH(mpHIO->m.common.height); + mCyl.SetR(mpHIO->m.common.width); #endif dComIfG_Ccsp()->Set(&mCyl); } @@ -974,34 +974,34 @@ void daNpcKasiHana_c::reset() { } void daNpcKasiHana_c::playMotion() { - daNpcF_anmPlayData dat0 = {ANM_MICH_KYA_TALK, mHIO->m.common.morf_frame, 0}; + daNpcF_anmPlayData dat0 = {ANM_MICH_KYA_TALK, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1 = {ANM_MICH_IYAN_WAIT, mHIO->m.common.morf_frame, 0}; + daNpcF_anmPlayData dat1 = {ANM_MICH_IYAN_WAIT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[1] = {&dat1}; - daNpcF_anmPlayData dat2 = {ANM_MICH_OUEN_WAIT_A, mHIO->m.common.morf_frame, 0}; + daNpcF_anmPlayData dat2 = {ANM_MICH_OUEN_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[1] = {&dat2}; - daNpcF_anmPlayData dat3 = {ANM_MICH_OUEN_WAIT_B, mHIO->m.common.morf_frame, 0}; + daNpcF_anmPlayData dat3 = {ANM_MICH_OUEN_WAIT_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[1] = {&dat3}; - daNpcF_anmPlayData dat4 = {ANM_W_WAIT_A, mHIO->m.common.morf_frame, 0}; + daNpcF_anmPlayData dat4 = {ANM_W_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat4[1] = {&dat4}; - daNpcF_anmPlayData dat5 = {ANM_W_TALK_B, mHIO->m.common.morf_frame, 0}; + daNpcF_anmPlayData dat5 = {ANM_W_TALK_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat5[1] = {&dat5}; - daNpcF_anmPlayData dat6 = {ANM_W_TO_WOLF, mHIO->m.common.morf_frame, 0}; + daNpcF_anmPlayData dat6 = {ANM_W_TO_WOLF, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat6[1] = {&dat6}; - daNpcF_anmPlayData dat7 = {ANM_W_WALK_A, mHIO->m.common.morf_frame, 0}; + daNpcF_anmPlayData dat7 = {ANM_W_WALK_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat7[1] = {&dat7}; - daNpcF_anmPlayData dat8 = {ANM_W_LOOK_B, mHIO->m.common.morf_frame, 0}; + daNpcF_anmPlayData dat8 = {ANM_W_LOOK_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat8[1] = {&dat8}; - daNpcF_anmPlayData dat9 = {ANM_W_RUN_A, mHIO->m.common.morf_frame, 0}; + daNpcF_anmPlayData dat9 = {ANM_W_RUN_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat9[1] = {&dat9}; - daNpcF_anmPlayData dat10 = {ANM_W_SURPRISE, mHIO->m.common.morf_frame, 0}; + daNpcF_anmPlayData dat10 = {ANM_W_SURPRISE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat10[1] = {&dat10}; - daNpcF_anmPlayData dat11a = {ANM_W_WAIT_A_2, mHIO->m.common.morf_frame, 1}; - daNpcF_anmPlayData dat11b = {ANM_W_2LADYTALK_B, mHIO->m.common.morf_frame, 1}; - daNpcF_anmPlayData dat11c = {ANM_W_TALK_A, mHIO->m.common.morf_frame, 1}; - daNpcF_anmPlayData dat11d = {ANM_W_WAIT_A_2, mHIO->m.common.morf_frame, 1}; - daNpcF_anmPlayData dat11e = {ANM_W_TALK_B, mHIO->m.common.morf_frame, 1}; - daNpcF_anmPlayData dat11f = {ANM_W_2NORMALTALK_B, mHIO->m.common.morf_frame, 0}; + daNpcF_anmPlayData dat11a = {ANM_W_WAIT_A_2, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11b = {ANM_W_2LADYTALK_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11c = {ANM_W_TALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11d = {ANM_W_WAIT_A_2, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11e = {ANM_W_TALK_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11f = {ANM_W_2NORMALTALK_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat11[6] = {&dat11a, &dat11b, &dat11c, &dat11d, &dat11e, &dat11f}; daNpcF_anmPlayData** ppDat[12] = { @@ -1054,7 +1054,7 @@ void daNpcKasiHana_c::playMotionAnmLoop(daNpcF_c::daNpcF_anmPlayData*** i_data) if (mMotionPhase == 0) { if (mMotion == MOT_W_WAIT_A_LOOP) { - i_morf = mHIO->m.common.morf_frame; + i_morf = mpHIO->m.common.morf_frame; } else if (0.0f <= mMotionMorfOverride) { i_morf = mMotionMorfOverride; } @@ -1095,14 +1095,14 @@ void daNpcKasiHana_c::lookat() { daPy_py_c* player = NULL; J3DModel* model = mAnm_p->getModel(); BOOL i_snap = FALSE; - f32 body_angleX_min = mHIO->m.common.body_angleX_min; - f32 body_angleX_max = mHIO->m.common.body_angleX_max; - f32 body_angleY_min = mHIO->m.common.body_angleY_min; - f32 body_angleY_max = mHIO->m.common.body_angleY_max; - f32 head_angleX_min = mHIO->m.common.head_angleX_min; - f32 head_angleX_max = mHIO->m.common.head_angleX_max; - f32 head_angleY_min = mHIO->m.common.head_angleY_min; - f32 head_angleY_max = mHIO->m.common.head_angleY_max; + f32 body_angleX_min = mpHIO->m.common.body_angleX_min; + f32 body_angleX_max = mpHIO->m.common.body_angleX_max; + f32 body_angleY_min = mpHIO->m.common.body_angleY_min; + f32 body_angleY_max = mpHIO->m.common.body_angleY_max; + f32 head_angleX_min = mpHIO->m.common.head_angleX_min; + f32 head_angleX_max = mpHIO->m.common.head_angleX_max; + f32 head_angleY_min = mpHIO->m.common.head_angleY_min; + f32 head_angleY_max = mpHIO->m.common.head_angleY_max; s16 angle_delta = mCurAngle.y - mOldAngle.y; cXyz lookatPos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; csXyz* lookatAngle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; @@ -1174,7 +1174,7 @@ BOOL daNpcKasiHana_c::step(s16 i_targetAngle, int param_2) { } BOOL daNpcKasiHana_c::chkFindPlayer() { - if (!chkActorInSight(daPy_getPlayerActorClass(), mHIO->m.common.fov)) { + if (!chkActorInSight(daPy_getPlayerActorClass(), mpHIO->m.common.fov)) { mActorMngr[0].remove(); return FALSE; } @@ -1250,14 +1250,14 @@ int daNpcKasiHana_c::wait(int param_1) { } f32 distFromCenter = mKasiMng.getDistFromCenter(); - if (distFromCenter >= 0.0f && distFromCenter < mHIO->m.track_start_dist) { + if (distFromCenter >= 0.0f && distFromCenter < mpHIO->m.track_start_dist) { field_0x1441 = 1; mKasiMng.onSygnal(0x200); setAction(&daNpcKasiHana_c::chace_st); return 1; } } else if (pl_front_check()) { - if (actorDistance >= mHIO->m.track_stop_dist + 50.0f) { + if (actorDistance >= mpHIO->m.track_stop_dist + 50.0f) { setAction(&daNpcKasiHana_c::chace); return 1; } @@ -1337,7 +1337,7 @@ int daNpcKasiHana_c::chace(int param_1) { setMotion(MOT_W_RUN_A, -1.0f, 0); setLookMode(LOOK_NONE); fopAcM_SetSpeed(this, 0.0f, 0.0f, 0.0f); - fopAcM_SetSpeedF(this, mHIO->m.track_spd); + fopAcM_SetSpeedF(this, mpHIO->m.track_spd); mKasiMng.chgWeightLight(); mMode = 1; break; @@ -1347,7 +1347,7 @@ int daNpcKasiHana_c::chace(int param_1) { _turn_pos(chacePos, 0x800); if (pl_front_check()) { - if (fopAcM_searchActorDistanceXZ(this, daPy_getPlayerActorClass()) < mHIO->m.track_stop_dist) { + if (fopAcM_searchActorDistanceXZ(this, daPy_getPlayerActorClass()) < mpHIO->m.track_stop_dist) { setAction(&daNpcKasiHana_c::wait); } } else { @@ -1666,7 +1666,7 @@ int daNpcKasiHana_c::escape(int param_1) { case 0: setMotion(MOT_W_RUN_A, -1.0f, 0); fopAcM_SetSpeed(this, 0.0f, 0.0f, 0.0f); - fopAcM_SetSpeedF(this, mHIO->m.escape_spd); + fopAcM_SetSpeedF(this, mpHIO->m.escape_spd); setEscapePathDir(); mKasiMng.onSygnal(0x20); mSound.startCreatureVoice(Z2SE_HANA_V_FEAR, -1); diff --git a/src/d/actor/d_a_npc_kasi_kyu.cpp b/src/d/actor/d_a_npc_kasi_kyu.cpp index ebda0254da..75d27aa733 100644 --- a/src/d/actor/d_a_npc_kasi_kyu.cpp +++ b/src/d/actor/d_a_npc_kasi_kyu.cpp @@ -103,7 +103,7 @@ enum Motion { /* 0xC */ MOT_W_2NORMALTALK_A, }; -static daNpcKasiKyu_Param_c l_HIO; +static NPC_KASI_KYU_HIO_CLASS l_HIO; static daNpc_GetParam2 l_bckGetParamList[16] = { {BCK_MICH_IYAN_WAIT, J3DFrameCtrl::EMode_LOOP, GIRLS}, @@ -144,18 +144,6 @@ daNpcKasiKyu_c::EventFn daNpcKasiKyu_c::mEvtSeqList[1] = { NULL }; -daNpcKasiKyu_c::daNpcKasiKyu_c() {} - -daNpcKasiKyu_c::~daNpcKasiKyu_c() { - for (int i = 0; i < 3; i ++) { - dComIfG_resDelete(&mPhases[i], l_arcNames[i]); - } - - if (heap != NULL) { - mAnm_p->stopZelAnime(); - } -} - daNpcKasiKyu_HIOParam const daNpcKasiKyu_Param_c::m = { 55.0f, -3.0f, @@ -194,6 +182,34 @@ daNpcKasiKyu_HIOParam const daNpcKasiKyu_Param_c::m = { 16.0f, }; +#if DEBUG +daNpcKasiKyu_HIO_c::daNpcKasiKyu_HIO_c() { + m = daNpcKasiKyu_Param_c::m; +} + +void daNpcKasiKyu_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpcKasiKyu_c::daNpcKasiKyu_c() {} + +daNpcKasiKyu_c::~daNpcKasiKyu_c() { + for (int i = 0; i < 3; i ++) { + dComIfG_resDelete(&mPhases[i], l_arcNames[i]); + } + + if (heap != NULL) { + mAnm_p->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif +} + cPhs__Step daNpcKasiKyu_c::Create() { fopAcM_ct(this, daNpcKasiKyu_c); @@ -219,7 +235,12 @@ cPhs__Step daNpcKasiKyu_c::Create() { fopAcM_setCullSizeBox(this, -60.0f, -10.0f, -60.0f, 60.0f, 220.0f, 60.0f); mSound.init(¤t.pos, &eyePos, 3, 1); - mAcchCir.SetWall(daNpcKasiKyu_Param_c::m.common.width, daNpcKasiKyu_Param_c::m.common.knee_length); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("三人娘:キウ"); +#endif + + mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mAcch.CrrPos(dComIfG_Bgsp()); @@ -228,8 +249,8 @@ cPhs__Step daNpcKasiKyu_c::Create() { mCyl.SetStts(&mCcStts); mCyl.SetTgType(0); mCyl.SetTgSPrm(0); - mCyl.SetH(daNpcKasiKyu_Param_c::m.common.height); - mCyl.SetR(daNpcKasiKyu_Param_c::m.common.width); + mCyl.SetH(mpHIO->m.common.height); + mCyl.SetR(mpHIO->m.common.width); mGndChk = mAcch.m_gnd; mGroundH = mAcch.GetGroundH(); @@ -285,7 +306,7 @@ int daNpcKasiKyu_c::Execute() { int daNpcKasiKyu_c::Draw() { if (!mEscape) { - draw(FALSE, FALSE, daNpcKasiKyu_Param_c::m.common.real_shadow_size, NULL, FALSE); + draw(FALSE, FALSE, mpHIO->m.common.real_shadow_size, NULL, FALSE); } return 1; @@ -310,7 +331,7 @@ int daNpcKasiKyu_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { case 1: case 2: case 3: - setLookatMtx(jntNo, i_jointList, daNpcKasiKyu_Param_c::m.common.neck_rotation_ratio); + setLookatMtx(jntNo, i_jointList, mpHIO->m.common.neck_rotation_ratio); break; } @@ -339,9 +360,9 @@ int daNpcKasiKyu_c::ctrlJointCallBack(J3DJoint* i_joint, int param_2) { } void daNpcKasiKyu_c::setParam() { - attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(daNpcKasiKyu_Param_c::m.common.attention_distance, daNpcKasiKyu_Param_c::m.common.attention_angle); + attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(mpHIO->m.common.attention_distance, mpHIO->m.common.attention_angle); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; - attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(daNpcKasiKyu_Param_c::m.common.talk_distance, daNpcKasiKyu_Param_c::m.common.talk_angle); + attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(mpHIO->m.common.talk_distance, mpHIO->m.common.talk_angle); attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e; } @@ -407,7 +428,7 @@ void daNpcKasiKyu_c::setAttnPos() { mHeadAngle.x = cLib_targetAngleX(&mHeadPos, &sp1c); mHeadAngle.y = cLib_targetAngleY(&mHeadPos, &sp1c); - attention_info.position.set(mHeadPos.x, mHeadPos.y + daNpcKasiKyu_Param_c::m.common.attention_offset, mHeadPos.z); + attention_info.position.set(mHeadPos.x, mHeadPos.y + mpHIO->m.common.attention_offset, mHeadPos.z); cXyz sp28; @@ -416,8 +437,8 @@ void daNpcKasiKyu_c::setAttnPos() { sp28.y = current.pos.y; mCyl.SetC(sp28); #if DEBUG - mCyl.SetH(daNpcKasiKyu_Param_c::m.common.height); - mCyl.SetR(daNpcKasiKyu_Param_c::m.common.width); + mCyl.SetH(mpHIO->m.common.height); + mCyl.SetR(mpHIO->m.common.width); #endif dComIfG_Ccsp()->Set(&mCyl); } @@ -498,37 +519,37 @@ void daNpcKasiKyu_c::reset() { } void daNpcKasiKyu_c::playMotion() { - daNpcF_anmPlayData dat0 = {ANM_MICH_KYA_TALK, daNpcKasiKyu_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat0 = {ANM_MICH_KYA_TALK, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1 = {ANM_MICH_IYAN_WAIT, daNpcKasiKyu_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat1 = {ANM_MICH_IYAN_WAIT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[1] = {&dat1}; - daNpcF_anmPlayData dat2 = {ANM_MICH_OUEN_WAIT_A, daNpcKasiKyu_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat2 = {ANM_MICH_OUEN_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[1] = {&dat2}; - daNpcF_anmPlayData dat3 = {ANM_MICH_OUEN_WAIT_B, daNpcKasiKyu_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat3 = {ANM_MICH_OUEN_WAIT_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[1] = {&dat3}; - daNpcF_anmPlayData dat4 = {ANM_W_WAIT_A, daNpcKasiKyu_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat4 = {ANM_W_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat4[1] = {&dat4}; - daNpcF_anmPlayData dat5 = {ANM_W_TALK_B, daNpcKasiKyu_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat5 = {ANM_W_TALK_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat5[1] = {&dat5}; - daNpcF_anmPlayData dat6 = {ANM_W_WALK_A, daNpcKasiKyu_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat6 = {ANM_W_WALK_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat6[1] = {&dat6}; - daNpcF_anmPlayData dat7 = {ANM_W_CELLME, daNpcKasiKyu_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat7 = {ANM_W_CELLME, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat7[1] = {&dat7}; - daNpcF_anmPlayData dat8 = {ANM_W_RUN_A, daNpcKasiKyu_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat8 = {ANM_W_RUN_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat8[1] = {&dat8}; - daNpcF_anmPlayData dat9 = {ANM_W_TO_WOLF, daNpcKasiKyu_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat9 = {ANM_W_TO_WOLF, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat9[1] = {&dat9}; - daNpcF_anmPlayData dat10 = {ANM_W_SURPRISE, daNpcKasiKyu_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat10 = {ANM_W_SURPRISE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat10[1] = {&dat10}; - daNpcF_anmPlayData dat11a = {ANM_W_WAIT_A_2, daNpcKasiKyu_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat11b = {ANM_W_2LADYTALK_B, daNpcKasiKyu_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat11c = {ANM_W_TALK_B_2, daNpcKasiKyu_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat11d = {ANM_W_WAIT_A_2, daNpcKasiKyu_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat11e = {ANM_W_TALK_B, daNpcKasiKyu_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat11f = {ANM_W_2NORMALTALK_B, daNpcKasiKyu_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat11a = {ANM_W_WAIT_A_2, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11b = {ANM_W_2LADYTALK_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11c = {ANM_W_TALK_B_2, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11d = {ANM_W_WAIT_A_2, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11e = {ANM_W_TALK_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11f = {ANM_W_2NORMALTALK_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat11[6] = {&dat11a, &dat11b, &dat11c, &dat11d, &dat11e, &dat11f}; - daNpcF_anmPlayData dat12a = {ANM_W_2NORMALTALK_A, daNpcKasiKyu_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat12b = {ANM_W_WAIT_A, daNpcKasiKyu_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat12a = {ANM_W_2NORMALTALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat12b = {ANM_W_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat12[2] = {&dat12a, &dat12b}; daNpcF_anmPlayData** ppDat[13] = { @@ -582,7 +603,7 @@ void daNpcKasiKyu_c::playMotionAnmLoop(daNpcF_c::daNpcF_anmPlayData*** i_data) { if (mMotionPhase == 0) { if (mMotion == MOT_W_WAIT_A_LOOP) { - i_morf = daNpcKasiKyu_Param_c::m.common.morf_frame; + i_morf = mpHIO->m.common.morf_frame; } else if (0.0f <= mMotionMorfOverride) { i_morf = mMotionMorfOverride; } @@ -623,14 +644,14 @@ void daNpcKasiKyu_c::lookat() { daPy_py_c* player = NULL; J3DModel* model = mAnm_p->getModel(); BOOL i_snap = FALSE; - f32 body_angleX_min = daNpcKasiKyu_Param_c::m.common.body_angleX_min; - f32 body_angleX_max = daNpcKasiKyu_Param_c::m.common.body_angleX_max; - f32 body_angleY_min = daNpcKasiKyu_Param_c::m.common.body_angleY_min; - f32 body_angleY_max = daNpcKasiKyu_Param_c::m.common.body_angleY_max; - f32 head_angleX_min = daNpcKasiKyu_Param_c::m.common.head_angleX_min; - f32 head_angleX_max = daNpcKasiKyu_Param_c::m.common.head_angleX_max; - f32 head_angleY_min = daNpcKasiKyu_Param_c::m.common.head_angleY_min; - f32 head_angleY_max = daNpcKasiKyu_Param_c::m.common.head_angleY_max; + f32 body_angleX_min = mpHIO->m.common.body_angleX_min; + f32 body_angleX_max = mpHIO->m.common.body_angleX_max; + f32 body_angleY_min = mpHIO->m.common.body_angleY_min; + f32 body_angleY_max = mpHIO->m.common.body_angleY_max; + f32 head_angleX_min = mpHIO->m.common.head_angleX_min; + f32 head_angleX_max = mpHIO->m.common.head_angleX_max; + f32 head_angleY_min = mpHIO->m.common.head_angleY_min; + f32 head_angleY_max = mpHIO->m.common.head_angleY_max; s16 angle_delta = mCurAngle.y - mOldAngle.y; cXyz lookatPos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; csXyz* lookatAngle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; @@ -702,7 +723,7 @@ BOOL daNpcKasiKyu_c::step(s16 i_targetAngle, int param_2) { } BOOL daNpcKasiKyu_c::chkFindPlayer() { - if (!chkActorInSight(daPy_getPlayerActorClass(), daNpcKasiKyu_Param_c::m.common.fov)) { + if (!chkActorInSight(daPy_getPlayerActorClass(), mpHIO->m.common.fov)) { mActorMngr[0].remove(); return FALSE; } @@ -1247,13 +1268,13 @@ int daNpcKasiKyu_c::escape(int param_1) { setMotion(MOT_W_RUN_A, -1.0f, 0); fopAcM_SetSpeed(this, 0.0f, 0.0f, 0.0f); fopAcM_SetSpeedF(this, 0.0f); - field_0x1430 = daNpcKasiKyu_Param_c::m.escape_time; + field_0x1430 = mpHIO->m.escape_time; mMode = 1; break; case 1: if (--field_0x1430 <= 0) { - fopAcM_SetSpeedF(this, daNpcKasiKyu_Param_c::m.escape_spd); + fopAcM_SetSpeedF(this, mpHIO->m.escape_spd); mSound.startCreatureVoice(Z2SE_KIU_V_FEAR, -1); mMode = 2; } diff --git a/src/d/actor/d_a_npc_kasi_mich.cpp b/src/d/actor/d_a_npc_kasi_mich.cpp index fdef4db8c3..cb24b87b35 100644 --- a/src/d/actor/d_a_npc_kasi_mich.cpp +++ b/src/d/actor/d_a_npc_kasi_mich.cpp @@ -103,7 +103,7 @@ enum Motion { /* 0xC */ MOT_W_2NORMALTALK_B }; -static daNpcKasiMich_Param_c l_HIO; +static NPC_KASI_MICH_HIO_CLASS l_HIO; static daNpc_GetParam2 l_bckGetParamList[16] = { {BCK_MICH_IYAN_WAIT, J3DFrameCtrl::EMode_LOOP, GIRLS}, @@ -144,18 +144,6 @@ daNpcKasiMich_c::EventFn daNpcKasiMich_c::mEvtSeqList[1] = { NULL }; -daNpcKasiMich_c::daNpcKasiMich_c() {} - -daNpcKasiMich_c::~daNpcKasiMich_c() { - for (int i = 0; i < 3; i ++) { - dComIfG_resDelete(&mPhases[i], l_arcNames[i]); - } - - if (heap != NULL) { - mAnm_p->stopZelAnime(); - } -} - daNpcKasiMich_HIOParam const daNpcKasiMich_Param_c::m = { 55.0f, -3.0f, @@ -194,6 +182,34 @@ daNpcKasiMich_HIOParam const daNpcKasiMich_Param_c::m = { 16.0f, }; +#if DEBUG +daNpcKasiMich_HIO_c::daNpcKasiMich_HIO_c() { + m = daNpcKasiMich_Param_c::m; +} + +void daNpcKasiMich_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpcKasiMich_c::daNpcKasiMich_c() {} + +daNpcKasiMich_c::~daNpcKasiMich_c() { + for (int i = 0; i < 3; i ++) { + dComIfG_resDelete(&mPhases[i], l_arcNames[i]); + } + + if (heap != NULL) { + mAnm_p->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif +} + cPhs__Step daNpcKasiMich_c::Create() { fopAcM_ct(this, daNpcKasiMich_c); @@ -219,7 +235,12 @@ cPhs__Step daNpcKasiMich_c::Create() { fopAcM_setCullSizeBox(this, -60.0f, -10.0f, -60.0f, 60.0f, 220.0f, 60.0f); mSound.init(¤t.pos, &eyePos, 3, 1); - mAcchCir.SetWall(daNpcKasiMich_Param_c::m.common.width, daNpcKasiMich_Param_c::m.common.knee_length); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("三人娘:ミチ"); +#endif + + mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mAcch.CrrPos(dComIfG_Bgsp()); @@ -228,8 +249,8 @@ cPhs__Step daNpcKasiMich_c::Create() { mCyl.SetStts(&mCcStts); mCyl.SetTgType(0); mCyl.SetTgSPrm(0); - mCyl.SetH(daNpcKasiMich_Param_c::m.common.height); - mCyl.SetR(daNpcKasiMich_Param_c::m.common.width); + mCyl.SetH(mpHIO->m.common.height); + mCyl.SetR(mpHIO->m.common.width); mGndChk = mAcch.m_gnd; mGroundH = mAcch.GetGroundH(); @@ -285,7 +306,7 @@ int daNpcKasiMich_c::Execute() { int daNpcKasiMich_c::Draw() { if (!mEscape) { - draw(FALSE, FALSE, daNpcKasiMich_Param_c::m.common.real_shadow_size, NULL, FALSE); + draw(FALSE, FALSE, mpHIO->m.common.real_shadow_size, NULL, FALSE); } return 1; @@ -310,7 +331,7 @@ int daNpcKasiMich_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { case 1: case 2: case 3: - setLookatMtx(jntNo, i_jointList, daNpcKasiMich_Param_c::m.common.neck_rotation_ratio); + setLookatMtx(jntNo, i_jointList, mpHIO->m.common.neck_rotation_ratio); break; } @@ -339,9 +360,9 @@ int daNpcKasiMich_c::ctrlJointCallBack(J3DJoint* i_joint, int param_2) { } void daNpcKasiMich_c::setParam() { - attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(daNpcKasiMich_Param_c::m.common.attention_distance, daNpcKasiMich_Param_c::m.common.attention_angle); + attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(mpHIO->m.common.attention_distance, mpHIO->m.common.attention_angle); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; - attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(daNpcKasiMich_Param_c::m.common.talk_distance, daNpcKasiMich_Param_c::m.common.talk_angle); + attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(mpHIO->m.common.talk_distance, mpHIO->m.common.talk_angle); attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e; } @@ -407,7 +428,7 @@ void daNpcKasiMich_c::setAttnPos() { mHeadAngle.x = cLib_targetAngleX(&mHeadPos, &sp1c); mHeadAngle.y = cLib_targetAngleY(&mHeadPos, &sp1c); - attention_info.position.set(mHeadPos.x, mHeadPos.y + daNpcKasiMich_Param_c::m.common.attention_offset, mHeadPos.z); + attention_info.position.set(mHeadPos.x, mHeadPos.y + mpHIO->m.common.attention_offset, mHeadPos.z); cXyz sp28; @@ -416,8 +437,8 @@ void daNpcKasiMich_c::setAttnPos() { sp28.y = current.pos.y; mCyl.SetC(sp28); #if DEBUG - mCyl.SetH(daNpcKasiMich_Param_c::m.common.height); - mCyl.SetR(daNpcKasiMich_Param_c::m.common.width); + mCyl.SetH(mpHIO->m.common.height); + mCyl.SetR(mpHIO->m.common.width); #endif dComIfG_Ccsp()->Set(&mCyl); } @@ -498,37 +519,37 @@ void daNpcKasiMich_c::reset() { } void daNpcKasiMich_c::playMotion() { - daNpcF_anmPlayData dat0 = {ANM_MICH_KYA_TALK, daNpcKasiMich_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat0 = {ANM_MICH_KYA_TALK, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1 = {ANM_MICH_IYAN_WAIT, daNpcKasiMich_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat1 = {ANM_MICH_IYAN_WAIT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[1] = {&dat1}; - daNpcF_anmPlayData dat2 = {ANM_MICH_OUEN_WAIT_A, daNpcKasiMich_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat2 = {ANM_MICH_OUEN_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[1] = {&dat2}; - daNpcF_anmPlayData dat3 = {ANM_MICH_OUEN_WAIT_B, daNpcKasiMich_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat3 = {ANM_MICH_OUEN_WAIT_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[1] = {&dat3}; - daNpcF_anmPlayData dat4 = {ANM_W_WAIT_A, daNpcKasiMich_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat4 = {ANM_W_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat4[1] = {&dat4}; - daNpcF_anmPlayData dat5 = {ANM_W_TALK_B, daNpcKasiMich_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat5 = {ANM_W_TALK_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat5[1] = {&dat5}; - daNpcF_anmPlayData dat6 = {ANM_W_WALK_A, daNpcKasiMich_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat6 = {ANM_W_WALK_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat6[1] = {&dat6}; - daNpcF_anmPlayData dat7 = {ANM_W_LOOK_B, daNpcKasiMich_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat7 = {ANM_W_LOOK_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat7[1] = {&dat7}; - daNpcF_anmPlayData dat8 = {ANM_W_RUN_A, daNpcKasiMich_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat8 = {ANM_W_RUN_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat8[1] = {&dat8}; - daNpcF_anmPlayData dat9 = {ANM_W_TO_WOLF, daNpcKasiMich_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat9 = {ANM_W_TO_WOLF, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat9[1] = {&dat9}; - daNpcF_anmPlayData dat10 = {ANM_W_SURPRISE, daNpcKasiMich_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat10 = {ANM_W_SURPRISE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat10[1] = {&dat10}; - daNpcF_anmPlayData dat11a = {ANM_W_TALK_A, daNpcKasiMich_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat11b = {ANM_W_2LADYTALK_A, daNpcKasiMich_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat11c = {ANM_W_WAIT_A_2, daNpcKasiMich_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat11d = {ANM_W_TALK_B, daNpcKasiMich_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat11e = {ANM_W_WAIT_A_2, daNpcKasiMich_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat11f = {ANM_W_2NORMALTALK_A, daNpcKasiMich_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat11a = {ANM_W_TALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11b = {ANM_W_2LADYTALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11c = {ANM_W_WAIT_A_2, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11d = {ANM_W_TALK_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11e = {ANM_W_WAIT_A_2, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11f = {ANM_W_2NORMALTALK_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat11[6] = {&dat11a, &dat11b, &dat11c, &dat11d, &dat11e, &dat11f}; - daNpcF_anmPlayData dat12a = {ANM_W_2NORMALTALK_B, daNpcKasiMich_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat12b = {ANM_W_WAIT_A, daNpcKasiMich_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat12a = {ANM_W_2NORMALTALK_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat12b = {ANM_W_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat12[2] = {&dat12a, &dat12b}; daNpcF_anmPlayData** ppDat[13] = { @@ -582,7 +603,7 @@ void daNpcKasiMich_c::playMotionAnmLoop(daNpcF_c::daNpcF_anmPlayData*** i_data) if (mMotionPhase == 0) { if (mMotion == MOT_W_TALK_A) { - i_morf = daNpcKasiMich_Param_c::m.common.morf_frame; + i_morf = mpHIO->m.common.morf_frame; } else if (0.0f <= mMotionMorfOverride) { i_morf = mMotionMorfOverride; } @@ -623,14 +644,14 @@ void daNpcKasiMich_c::lookat() { daPy_py_c* player = NULL; J3DModel* model = mAnm_p->getModel(); BOOL i_snap = FALSE; - f32 body_angleX_min = daNpcKasiMich_Param_c::m.common.body_angleX_min; - f32 body_angleX_max = daNpcKasiMich_Param_c::m.common.body_angleX_max; - f32 body_angleY_min = daNpcKasiMich_Param_c::m.common.body_angleY_min; - f32 body_angleY_max = daNpcKasiMich_Param_c::m.common.body_angleY_max; - f32 head_angleX_min = daNpcKasiMich_Param_c::m.common.head_angleX_min; - f32 head_angleX_max = daNpcKasiMich_Param_c::m.common.head_angleX_max; - f32 head_angleY_min = daNpcKasiMich_Param_c::m.common.head_angleY_min; - f32 head_angleY_max = daNpcKasiMich_Param_c::m.common.head_angleY_max; + f32 body_angleX_min = mpHIO->m.common.body_angleX_min; + f32 body_angleX_max = mpHIO->m.common.body_angleX_max; + f32 body_angleY_min = mpHIO->m.common.body_angleY_min; + f32 body_angleY_max = mpHIO->m.common.body_angleY_max; + f32 head_angleX_min = mpHIO->m.common.head_angleX_min; + f32 head_angleX_max = mpHIO->m.common.head_angleX_max; + f32 head_angleY_min = mpHIO->m.common.head_angleY_min; + f32 head_angleY_max = mpHIO->m.common.head_angleY_max; s16 angle_delta = mCurAngle.y - mOldAngle.y; cXyz lookatPos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; csXyz* lookatAngle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; @@ -702,7 +723,7 @@ BOOL daNpcKasiMich_c::step(s16 i_targetAngle, int param_2) { } BOOL daNpcKasiMich_c::chkFindPlayer() { - if (!chkActorInSight(daPy_getPlayerActorClass(), daNpcKasiMich_Param_c::m.common.fov)) { + if (!chkActorInSight(daPy_getPlayerActorClass(), mpHIO->m.common.fov)) { mActorMngr[0].remove(); return FALSE; } @@ -1190,13 +1211,13 @@ int daNpcKasiMich_c::escape(int param_1) { setMotion(MOT_W_RUN_A, -1.0f, 0); fopAcM_SetSpeed(this, 0.0f, 0.0f, 0.0f); fopAcM_SetSpeedF(this, 0.0f); - field_0x1430 = daNpcKasiMich_Param_c::m.escape_time; + field_0x1430 = mpHIO->m.escape_time; mMode = 1; break; case 1: if (--field_0x1430 <= 0) { - fopAcM_SetSpeedF(this, daNpcKasiMich_Param_c::m.escape_spd); + fopAcM_SetSpeedF(this, mpHIO->m.escape_spd); mSound.startCreatureVoice(Z2SE_MICH_V_FEAR, -1); mMode = 2; } diff --git a/src/d/actor/d_a_npc_kkri.cpp b/src/d/actor/d_a_npc_kkri.cpp index edfd036138..204cf216c3 100644 --- a/src/d/actor/d_a_npc_kkri.cpp +++ b/src/d/actor/d_a_npc_kkri.cpp @@ -233,15 +233,7 @@ int (daNpc_Kkri_c::*daNpc_Kkri_c::mCutList[])(int) = { &daNpc_Kkri_c::cutYmLook, }; -daNpc_Kkri_c::~daNpc_Kkri_c() { - OS_REPORT("|%06d:%x|daNpc_Kkri_c -> デストラクト\n", g_Counter.mCounter0, this); - - if (mpMorf[0] != NULL) { - mpMorf[0]->stopZelAnime(); - } - - deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); -} +static NPC_KKRI_HIO_CLASS l_HIO; const daNpc_Kkri_HIOParam daNpc_Kkri_Param_c::m = { 180.0f, @@ -287,6 +279,36 @@ const daNpc_Kkri_HIOParam daNpc_Kkri_Param_c::m = { 0.0f, }; +#if DEBUG +daNpc_Kkri_HIO_c::daNpc_Kkri_HIO_c() { + m = daNpc_Kkri_Param_c::m; +} + +void daNpc_Kkri_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_Kkri_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpc_Kkri_c::~daNpc_Kkri_c() { + OS_REPORT("|%06d:%x|daNpc_Kkri_c -> デストラクト\n", g_Counter.mCounter0, this); + + if (mpMorf[0] != NULL) { + mpMorf[0]->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + + deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); +} + int daNpc_Kkri_c::create() { daNpcT_ct(this, daNpc_Kkri_c, l_faceMotionAnmData, l_motionAnmData, l_faceMotionSequenceData, 4, l_motionSequenceData, 4, @@ -321,14 +343,19 @@ int daNpc_Kkri_c::create() { J3DModelData* modelData = mpMorf[0]->getModel()->getModelData(); fopAcM_SetMtx(this, mpMorf[0]->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -200.0f, -100.0f, -200.0f, 200.0f, 300.0f, 200.0f); - + mSound.init(¤t.pos, &eyePos, 3, 1); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("キコリ"); +#endif + reset(); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - - mCcStts.Init(daNpc_Kkri_Param_c::m.common.weight, 0, this); + + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCcCyl.Set(mCcDCyl); mCcCyl.SetStts(&mCcStts); @@ -418,7 +445,7 @@ int daNpc_Kkri_c::Draw() { mdlData_p->getMaterialNodePointer(getEyeballMaterialNo())->setMaterialAnm(mpMatAnm[0]); } - return draw(FALSE, FALSE, daNpc_Kkri_Param_c::m.common.real_shadow_size, NULL, 100.0f, FALSE, FALSE, FALSE); + return draw(FALSE, FALSE, mpHIO->m.common.real_shadow_size, NULL, 100.0f, FALSE, FALSE, FALSE); } int daNpc_Kkri_c::createHeapCallBack(fopAc_ac_c* i_this) { @@ -513,10 +540,10 @@ void daNpc_Kkri_c::setParam() { srchActors(); u32 attn_flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e; - s16 talk_dist = daNpc_Kkri_Param_c::m.common.talk_distance; - s16 talk_angle = daNpc_Kkri_Param_c::m.common.talk_angle; - s16 attn_dist = daNpc_Kkri_Param_c::m.common.attention_distance; - s16 attn_angle = daNpc_Kkri_Param_c::m.common.attention_angle; + s16 talk_dist = mpHIO->m.common.talk_distance; + s16 talk_angle = mpHIO->m.common.talk_angle; + s16 attn_dist = mpHIO->m.common.attention_distance; + s16 attn_angle = mpHIO->m.common.attention_angle; if (mType == 0) { talk_dist = 3; @@ -551,18 +578,18 @@ void daNpc_Kkri_c::setParam() { attention_info.flags = attn_flags; - scale.set(daNpc_Kkri_Param_c::m.common.scale, daNpc_Kkri_Param_c::m.common.scale, daNpc_Kkri_Param_c::m.common.scale); + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); - mCcStts.SetWeight(daNpc_Kkri_Param_c::m.common.weight); - mCylH = daNpc_Kkri_Param_c::m.common.height; - mWallR = daNpc_Kkri_Param_c::m.common.width; - mAttnFovY = daNpc_Kkri_Param_c::m.common.fov; + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; + mAttnFovY = mpHIO->m.common.fov; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_Kkri_Param_c::m.common.knee_length); - mRealShadowSize = daNpc_Kkri_Param_c::m.common.real_shadow_size; - mExpressionMorfFrame = daNpc_Kkri_Param_c::m.common.expression_morf_frame; - mMorfFrames = daNpc_Kkri_Param_c::m.common.morf_frame; - gravity = daNpc_Kkri_Param_c::m.common.gravity; + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mRealShadowSize = mpHIO->m.common.real_shadow_size; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; + gravity = mpHIO->m.common.gravity; if (mType == 0) { mAcch.SetGrndNone(); @@ -673,23 +700,23 @@ void daNpc_Kkri_c::setAttnPos() { mJntAnm.setParam(this, mpMorf[0]->getModel(), &sp34, getBackboneJointNo(), getNeckJointNo(), getHeadJointNo(), 0.0f, 0.0f, 0.0f, 0.0f, - daNpc_Kkri_Param_c::m.common.head_angleX_min, daNpc_Kkri_Param_c::m.common.head_angleX_max, + mpHIO->m.common.head_angleX_min, mpHIO->m.common.head_angleX_max, -30.0f, 30.0f, - daNpc_Kkri_Param_c::m.common.neck_rotation_ratio, 0.0f, NULL); + mpHIO->m.common.neck_rotation_ratio, 0.0f, NULL); } else if (mType == 1) { mJntAnm.setParam(this, mpMorf[0]->getModel(), &sp34, getBackboneJointNo(), getNeckJointNo(), getHeadJointNo(), 0.0f, 0.0f, 0.0f, 0.0f, - daNpc_Kkri_Param_c::m.common.head_angleX_min, daNpc_Kkri_Param_c::m.common.head_angleX_max, - daNpc_Kkri_Param_c::m.common.head_angleY_min, daNpc_Kkri_Param_c::m.common.head_angleY_max, - daNpc_Kkri_Param_c::m.common.neck_rotation_ratio, 0.0f, NULL); + mpHIO->m.common.head_angleX_min, mpHIO->m.common.head_angleX_max, + mpHIO->m.common.head_angleY_min, mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, 0.0f, NULL); } else { mJntAnm.setParam(this, mpMorf[0]->getModel(), &sp34, getBackboneJointNo(), getNeckJointNo(), getHeadJointNo(), - daNpc_Kkri_Param_c::m.common.body_angleX_min, daNpc_Kkri_Param_c::m.common.body_angleX_max, - daNpc_Kkri_Param_c::m.common.body_angleY_min, daNpc_Kkri_Param_c::m.common.body_angleY_max, - daNpc_Kkri_Param_c::m.common.head_angleX_min, daNpc_Kkri_Param_c::m.common.head_angleX_max, - daNpc_Kkri_Param_c::m.common.head_angleY_min, daNpc_Kkri_Param_c::m.common.head_angleY_max, - daNpc_Kkri_Param_c::m.common.neck_rotation_ratio, 0.0f, NULL); + mpHIO->m.common.body_angleX_min, mpHIO->m.common.body_angleX_max, + mpHIO->m.common.body_angleY_min, mpHIO->m.common.body_angleY_max, + mpHIO->m.common.head_angleX_min, mpHIO->m.common.head_angleX_max, + mpHIO->m.common.head_angleY_min, mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, 0.0f, NULL); } mJntAnm.calcJntRad(0.2f, 1.0f, var_f31); @@ -703,7 +730,7 @@ void daNpc_Kkri_c::setAttnPos() { mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, 0, 1.0f, 0); sp34.set(0.0f, 0.0f, 0.0f); - sp34.y = daNpc_Kkri_Param_c::m.common.attention_offset; + sp34.y = mpHIO->m.common.attention_offset; if (mType == 0) { sp34.set(0.0f, 160.0f, -20.0f); @@ -1209,8 +1236,6 @@ static int daNpc_Kkri_IsDelete(void* i_this) { return 1; } -static daNpc_Kkri_Param_c l_HIO; - static actor_method_class daNpc_Kkri_MethodTable = { (process_method_func)daNpc_Kkri_Create, (process_method_func)daNpc_Kkri_Delete, diff --git a/src/d/actor/d_a_npc_kolin.cpp b/src/d/actor/d_a_npc_kolin.cpp index f6c24e9ad7..44a3e9e2ba 100644 --- a/src/d/actor/d_a_npc_kolin.cpp +++ b/src/d/actor/d_a_npc_kolin.cpp @@ -335,14 +335,6 @@ daNpc_Kolin_c::cutFunc daNpc_Kolin_c::mCutList[11] = { &daNpc_Kolin_c::cutThankYou }; -daNpc_Kolin_c::~daNpc_Kolin_c() { - if (mpMorf[0] != NULL) { - mpMorf[0]->stopZelAnime(); - } - - deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); -} - daNpc_Kolin_HIOParam const daNpc_Kolin_Param_c::m = { 140.0f, -3.0f, @@ -393,6 +385,36 @@ daNpc_Kolin_HIOParam const daNpc_Kolin_Param_c::m = { 2.0f, }; +static NPC_KOLIN_HIO_CLASS l_HIO; + +#if DEBUG +daNpc_Kolin_HIO_c::daNpc_Kolin_HIO_c() { + m = daNpc_Kolin_Param_c::m; +} + +void daNpc_Kolin_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_Kolin_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpc_Kolin_c::~daNpc_Kolin_c() { + if (mpMorf[0] != NULL) { + mpMorf[0]->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + + deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); +} + cPhs__Step daNpc_Kolin_c::create() { daNpcT_ct(this, daNpc_Kolin_c, l_faceMotionAnmData, l_motionAnmData, l_faceMotionSequenceData, 4, l_motionSequenceData, 4, l_evtList, l_resNameList); @@ -431,11 +453,16 @@ cPhs__Step daNpc_Kolin_c::create() { mSound.init(¤t.pos, &eyePos, 3, 1); field_0x9c0.init(&mAcch, 0.0f, 0.0f); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("コリン"); +#endif + reset(); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_Kolin_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); field_0xe48.Set(mCcDCyl); field_0xe48.SetStts(&mCcStts); @@ -732,10 +759,10 @@ void daNpc_Kolin_c::setParam() { selectAction(); srchActors(); - s16 talk_distance = daNpc_Kolin_Param_c::m.common.talk_distance; - s16 talk_angle = daNpc_Kolin_Param_c::m.common.talk_angle; - s16 attention_distance = daNpc_Kolin_Param_c::m.common.attention_distance; - s16 attention_angle = daNpc_Kolin_Param_c::m.common.attention_angle; + s16 talk_distance = mpHIO->m.common.talk_distance; + s16 talk_angle = mpHIO->m.common.talk_angle; + s16 attention_distance = mpHIO->m.common.attention_distance; + s16 attention_angle = mpHIO->m.common.attention_angle; if (mType == 3) { talk_distance = 7; @@ -770,22 +797,22 @@ void daNpc_Kolin_c::setParam() { fopAcM_OffStatus(this, fopAcM_STATUS_UNK_0x100); } - scale.set(daNpc_Kolin_Param_c::m.common.scale, daNpc_Kolin_Param_c::m.common.scale, daNpc_Kolin_Param_c::m.common.scale); - mCcStts.SetWeight(daNpc_Kolin_Param_c::m.common.weight); + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); + mCcStts.SetWeight(mpHIO->m.common.weight); if (&daNpc_Kolin_c::follow == mNextAction) { mCcStts.SetWeight(109); } - mCylH = daNpc_Kolin_Param_c::m.common.height; - mWallR = daNpc_Kolin_Param_c::m.common.width; - mAttnFovY = daNpc_Kolin_Param_c::m.common.fov; + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; + mAttnFovY = mpHIO->m.common.fov; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_Kolin_Param_c::m.common.knee_length); - mRealShadowSize = daNpc_Kolin_Param_c::m.common.real_shadow_size; - mExpressionMorfFrame = daNpc_Kolin_Param_c::m.common.expression_morf_frame; - mMorfFrames = daNpc_Kolin_Param_c::m.common.morf_frame; - gravity = daNpc_Kolin_Param_c::m.common.gravity; + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mRealShadowSize = mpHIO->m.common.real_shadow_size; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; + gravity = mpHIO->m.common.gravity; } BOOL daNpc_Kolin_c::checkChangeEvt() { @@ -956,8 +983,6 @@ void daNpc_Kolin_c::beforeMove() { } } -static daNpc_Kolin_Param_c l_HIO; - void daNpc_Kolin_c::setAttnPos() { cXyz sp3c(5.0f, 30.0f, 0.0f); @@ -968,11 +993,11 @@ void daNpc_Kolin_c::setAttnPos() { mStagger.calc(FALSE); f32 rad_val = cM_s2rad(mCurAngle.y - field_0xd7e.y); mJntAnm.setParam(this, mpMorf[0]->getModel(), &sp3c, getBackboneJointNo(), getNeckJointNo(), getHeadJointNo(), - daNpc_Kolin_Param_c::m.common.body_angleX_min, daNpc_Kolin_Param_c::m.common.body_angleX_max, - daNpc_Kolin_Param_c::m.common.body_angleY_min, daNpc_Kolin_Param_c::m.common.body_angleY_max, - daNpc_Kolin_Param_c::m.common.head_angleX_min, daNpc_Kolin_Param_c::m.common.head_angleX_max, - daNpc_Kolin_Param_c::m.common.head_angleY_min, daNpc_Kolin_Param_c::m.common.head_angleY_max, - daNpc_Kolin_Param_c::m.common.neck_rotation_ratio, rad_val, NULL); + mpHIO->m.common.body_angleX_min, mpHIO->m.common.body_angleX_max, + mpHIO->m.common.body_angleY_min, mpHIO->m.common.body_angleY_max, + mpHIO->m.common.head_angleX_min, mpHIO->m.common.head_angleX_max, + mpHIO->m.common.head_angleY_min, mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, rad_val, NULL); mJntAnm.calcJntRad(0.2f, 1.0f, rad_val); setMtx(); @@ -982,10 +1007,10 @@ void daNpc_Kolin_c::setAttnPos() { mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, FALSE, 1.0f, 0); sp3c.set(0.0f, 0.0f, 0.0f); - sp3c.y = daNpc_Kolin_Param_c::m.common.attention_offset; + sp3c.y = mpHIO->m.common.attention_offset; if (mType == 10) { sp3c.set(26.54f, 0.0f, -97.77f); - sp3c.y = daNpc_Kolin_Param_c::m.common.attention_offset; + sp3c.y = mpHIO->m.common.attention_offset; } mDoMtx_stack_c::YrotS(mCurAngle.y); @@ -1091,7 +1116,7 @@ int daNpc_Kolin_c::selectAction() { mNextAction = NULL; #if DEBUG - if (daNpc_Kolin_Param_c::m.common.debug_mode_ON) { + if (mpHIO->m.common.debug_mode_ON) { mNextAction = &daNpc_Kolin_c::test; return 1; } @@ -1150,8 +1175,8 @@ void daNpc_Kolin_c::calcFollowSpeedAndAngle(fopAc_ac_c* actor, int param_2, int if (param_3 != 0) { f32 fVar1; - if (daNpc_Kolin_Param_c::m.follow_distance <= actor_distance) { - fVar1 = actor_distance - daNpc_Kolin_Param_c::m.follow_distance; + if (mpHIO->m.follow_distance <= actor_distance) { + fVar1 = actor_distance - mpHIO->m.follow_distance; } else { fVar1 = 0.0f; } @@ -1164,7 +1189,7 @@ void daNpc_Kolin_c::calcFollowSpeedAndAngle(fopAc_ac_c* actor, int param_2, int } if (mMotionSeqMngr.getNo() == MOT_RUN) { - cLib_chaseF(&speedF, daNpc_Kolin_Param_c::m.run_speed, 0.5f); + cLib_chaseF(&speedF, mpHIO->m.run_speed, 0.5f); } else if (mFootLOffset.y < mFootROffset.y) { speedF = (mFootLOffset - mOldFootLOffset).absXZ(); } else { @@ -1236,7 +1261,7 @@ void daNpc_Kolin_c::followPlayer(int param_1) { mMotionSeqMngr.setNo(MOT_WAIT_A, -1.0f, FALSE, 0); } } else if (mMotionSeqMngr.getNo() != MOT_RUN) { - if (fopAcM_searchActorDistanceXZ(this, daPy_getPlayerActorClass()) < daNpc_Kolin_Param_c::m.start_distance) { + if (fopAcM_searchActorDistanceXZ(this, daPy_getPlayerActorClass()) < mpHIO->m.start_distance) { if (mMotionSeqMngr.getNo() != MOT_WALK_B) { mMotionSeqMngr.setNo(MOT_WALK_B, 4.0f, FALSE, 0); } @@ -1848,10 +1873,10 @@ int daNpc_Kolin_c::wait(void* param_1) { if (mType == 4) { actor_p = mActorMngr[4].getActorP(); if (actor_p != NULL && - ((daNpc_Len_c*)actor_p)->checkStartDemo13StbEvt(this, daNpc_Kolin_Param_c::m.common.box_min_x, daNpc_Kolin_Param_c::m.common.box_min_y, - daNpc_Kolin_Param_c::m.common.box_min_z, daNpc_Kolin_Param_c::m.common.box_max_x, - daNpc_Kolin_Param_c::m.common.box_max_y, daNpc_Kolin_Param_c::m.common.box_max_z, - daNpc_Kolin_Param_c::m.common.box_offset)) { + ((daNpc_Len_c*)actor_p)->checkStartDemo13StbEvt(this, mpHIO->m.common.box_min_x, mpHIO->m.common.box_min_y, + mpHIO->m.common.box_min_z, mpHIO->m.common.box_max_x, + mpHIO->m.common.box_max_y, mpHIO->m.common.box_max_z, + mpHIO->m.common.box_offset)) { mEvtNo = 7; field_0x1015 = 1; } @@ -1980,8 +2005,8 @@ int daNpc_Kolin_c::wait(void* param_1) { int daNpc_Kolin_c::timidWalk(void* param_1) { fopAc_ac_c* actor_p; cXyz work; - int shy_walk_time = daNpc_Kolin_Param_c::m.shy_walk_time; - int sulk_time = daNpc_Kolin_Param_c::m.sulk_time; + int shy_walk_time = mpHIO->m.shy_walk_time; + int sulk_time = mpHIO->m.sulk_time; switch (mMode) { case 0: @@ -2107,7 +2132,7 @@ int daNpc_Kolin_c::follow(void* param_1) { } int daNpc_Kolin_c::clothWait(void* param_1) { - int sulk_time = daNpc_Kolin_Param_c::m.sulk_time; + int sulk_time = mpHIO->m.sulk_time; switch (mMode) { case 0: diff --git a/src/d/actor/d_a_npc_kolinb.cpp b/src/d/actor/d_a_npc_kolinb.cpp index 0f55b887e3..ef3a2f795a 100644 --- a/src/d/actor/d_a_npc_kolinb.cpp +++ b/src/d/actor/d_a_npc_kolinb.cpp @@ -196,17 +196,7 @@ daNpc_Kolinb_c::cutFunc daNpc_Kolinb_c::mCutList[7] = { &daNpc_Kolinb_c::cutThankYou }; -daNpc_Kolinb_c::~daNpc_Kolinb_c() { - if (mpMorf[0] != NULL) { - mpMorf[0]->stopZelAnime(); - } - - if (mpBgW != NULL) { - dComIfG_Bgsp().Release(mpBgW); - } - - deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); -} +static NPC_KOLINB_HIO_CLASS l_HIO; daNpc_Kolinb_HIOParam const daNpc_Kolinb_Param_c::m = { 100.0f, @@ -252,6 +242,38 @@ daNpc_Kolinb_HIOParam const daNpc_Kolinb_Param_c::m = { 0.0f, }; +#if DEBUG +daNpc_Kolinb_HIO_c::daNpc_Kolinb_HIO_c() { + m = daNpc_Kolinb_Param_c::m; +} + +void daNpc_Kolinb_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_Kolinb_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpc_Kolinb_c::~daNpc_Kolinb_c() { + if (mpMorf[0] != NULL) { + mpMorf[0]->stopZelAnime(); + } + + if (mpBgW != NULL) { + dComIfG_Bgsp().Release(mpBgW); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + + deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); +} + cPhs__Step daNpc_Kolinb_c::create() { daNpcT_ct(this, daNpc_Kolinb_c, l_faceMotionAnmData, l_motionAnmData, l_faceMotionSequenceData, 4, l_motionSequenceData, 4, l_evtList, l_resNameList); @@ -289,11 +311,16 @@ cPhs__Step daNpc_Kolinb_c::create() { mSound.init(¤t.pos, &eyePos, 3, 1); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("寝床コリン"); +#endif + reset(); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_Kolinb_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); field_0xe44.Set(mCcDCyl); field_0xe44.SetStts(&mCcStts); @@ -461,27 +488,27 @@ void daNpc_Kolinb_c::setParam() { selectAction(); srchActors(); - s16 talk_distance = daNpc_Kolinb_Param_c::m.common.talk_distance; - s16 talk_angle = daNpc_Kolinb_Param_c::m.common.talk_angle; - s16 attention_distance = daNpc_Kolinb_Param_c::m.common.attention_distance; - s16 attention_angle = daNpc_Kolinb_Param_c::m.common.attention_angle; + s16 talk_distance = mpHIO->m.common.talk_distance; + s16 talk_angle = mpHIO->m.common.talk_angle; + s16 attention_distance = mpHIO->m.common.attention_distance; + s16 attention_angle = mpHIO->m.common.attention_angle; attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle); attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e; - scale.set(daNpc_Kolinb_Param_c::m.common.scale, daNpc_Kolinb_Param_c::m.common.scale, daNpc_Kolinb_Param_c::m.common.scale); - mCcStts.SetWeight(daNpc_Kolinb_Param_c::m.common.weight); + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); + mCcStts.SetWeight(mpHIO->m.common.weight); - mCylH = daNpc_Kolinb_Param_c::m.common.height; - mWallR = daNpc_Kolinb_Param_c::m.common.width; - mAttnFovY = daNpc_Kolinb_Param_c::m.common.fov; + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; + mAttnFovY = mpHIO->m.common.fov; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_Kolinb_Param_c::m.common.knee_length); - mRealShadowSize = daNpc_Kolinb_Param_c::m.common.real_shadow_size; - mExpressionMorfFrame = daNpc_Kolinb_Param_c::m.common.expression_morf_frame; - mMorfFrames = daNpc_Kolinb_Param_c::m.common.morf_frame; - gravity = daNpc_Kolinb_Param_c::m.common.gravity; + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mRealShadowSize = mpHIO->m.common.real_shadow_size; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; + gravity = mpHIO->m.common.gravity; } BOOL daNpc_Kolinb_c::checkChangeEvt() { @@ -568,7 +595,7 @@ void daNpc_Kolinb_c::setAttnPos() { mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getHeadJointNo())); mDoMtx_stack_c::multVec(&work, &eyePos); work.set(100.0f, 0.0f, 0.0f); - work.y = daNpc_Kolinb_Param_c::m.common.attention_offset; + work.y = mpHIO->m.common.attention_offset; mDoMtx_stack_c::YrotS(mCurAngle.y); mDoMtx_stack_c::multVec(&work, &work); attention_info.position = current.pos + work; @@ -591,7 +618,7 @@ int daNpc_Kolinb_c::selectAction() { mNextAction = NULL; #if DEBUG - if (daNpc_Kolinb_Param_c::m.common.debug_mode_ON) { + if (mpHIO->m.common.debug_mode_ON) { mNextAction = &daNpc_Kolinb_c::test; return 1; } @@ -907,8 +934,6 @@ static int daNpc_Kolinb_IsDelete(void* a_this) { return 1; } -static daNpc_Kolinb_Param_c l_HIO; - static actor_method_class daNpc_Kolinb_MethodTable = { (process_method_func)daNpc_Kolinb_Create, (process_method_func)daNpc_Kolinb_Delete, diff --git a/src/d/actor/d_a_npc_ks.cpp b/src/d/actor/d_a_npc_ks.cpp index 0ddaae6de8..73402448f0 100644 --- a/src/d/actor/d_a_npc_ks.cpp +++ b/src/d/actor/d_a_npc_ks.cpp @@ -326,29 +326,11 @@ static void* s_b_sub(void* i_actor, void* i_data) { static int target_bgc[10]; +// FIXME: possible fakematch? #if DEBUG - -// fakematch to get proper casting -#define NPC_KS_18DEG_ROT (s16) 0x800 -#define NPC_KS_36DEG_ROT (s16) 0x1600 -#define NPC_KS_45DEG_ROT (s16) 0x2000 -#define NPC_KS_90DEG_ROT (s16) 0x4000 -#define NPC_KS_180DEG_ROT (s16) 0x8000 -#define NPC_KS_NEG_180DEG_ROT (s16) -0x8000 - #define NPC_KS_FABSF fabsf - #else - -#define NPC_KS_18DEG_ROT 0x800 -#define NPC_KS_36DEG_ROT 0x1600 -#define NPC_KS_45DEG_ROT 0x2000 -#define NPC_KS_90DEG_ROT 0x4000 -#define NPC_KS_180DEG_ROT 0x8000 -#define NPC_KS_NEG_180DEG_ROT -0x8000 - #define NPC_KS_FABSF std::fabsf - #endif static fopAc_ac_c* search_bomb(npc_ks_class* i_this, int param_2) { @@ -706,7 +688,7 @@ static int npc_ks_ori(npc_ks_class* i_this) { if (i_this->timer[0] == 1) { anm_init(i_this, 32, 2.0f, 0, 1.0f); if (fopAcM_GetRoomNo(actor) == 11) { - actor->current.angle.y += NPC_KS_36DEG_ROT; + ADD_ANGLE_2(actor->current.angle.y, 0x1600); } } @@ -854,7 +836,7 @@ static int npc_ks_ori2(npc_ks_class* i_this) { break; case 2: - sVar1 += NPC_KS_NEG_180DEG_ROT; + ADD_ANGLE_2(sVar1, -0x8000); if (i_this->timer[0] == 0) { if (cage_p->partBreak()) { anm_init(i_this, 22, 5.0f, 2, 1.0f); @@ -926,7 +908,7 @@ static int npc_ks_ori2(npc_ks_class* i_this) { case 6: i_this->field_0x5fc = 0; fVar1 = -20.0f; - sVar1 += NPC_KS_45DEG_ROT; + ADD_ANGLE_2(sVar1, 0x2000); if (i_this->model->isStop()) { anm_init(i_this, 33, 1.0f, 0, 1.0f); actor->speedF = 40.0f; @@ -941,7 +923,7 @@ static int npc_ks_ori2(npc_ks_class* i_this) { case 7: i_this->field_0x5fc = 0; - sVar1 += NPC_KS_90DEG_ROT; + ADD_ANGLE_2(sVar1, 0x4000); actor->gravity = -5.0f; break; @@ -1115,7 +1097,7 @@ static path move_path_02[5] = { static int npc_ks_demo_02(npc_ks_class* i_this) { fopAc_ac_c* actor = &i_this->actor; - fopAc_ac_c* unused_p = dComIfGp_getPlayer(0); + fopAc_ac_c* unused_pla_p = dComIfGp_getPlayer(0); cXyz mae, ato; f32 speed = 0.0f; int rv = 1; @@ -2187,7 +2169,7 @@ static void npc_ks_hang_s(npc_ks_class* i_this) { s16 sVar2 = i_this->field_0x602; cLib_addCalcAngleS2(&i_this->field_0x602, i_this->field_0x60c * cM_ssin(i_this->field_0x5fa), 4, 0x1000); i_this->field_0x604 = i_this->field_0x602 - sVar2; - i_this->field_0x5fa += NPC_KS_18DEG_ROT; + ADD_ANGLE_2(i_this->field_0x5fa, 0x800); actor->current.angle.z = -(i_this->field_0x602 / 4); if (i_this->field_0x620 != 2) { @@ -2267,7 +2249,7 @@ static void npc_ks_e_hang(npc_ks_class* i_this) { actor->current.pos = sw_p->field_0x920[i_this->field_0x630]; cLib_addCalcAngleS2(&i_this->field_0x602, i_this->field_0x60c * cM_ssin(i_this->field_0x5fa), 4, 0x1000); - i_this->field_0x5fa += NPC_KS_18DEG_ROT; + ADD_ANGLE_2(i_this->field_0x5fa, 0x800); actor->current.angle.z = -(i_this->field_0x602 / 4); cLib_addCalc0(&i_this->field_0x60c, 0.5f, 100.0f + TREG_F(3)); } @@ -3229,8 +3211,10 @@ static void demo_camera(npc_ks_class* i_this) { if (midna_p->checkShadowReturnEnd() != 0) { i_this->demo_mode = 100; } - break; } + // fallthrough intentional + default: + break; case 300: if (!actor->eventInfo.checkCommandDemoAccrpt()) { @@ -3439,14 +3423,15 @@ static void demo_camera(npc_ks_class* i_this) { i_this->msg_flow.doFlow(actor, NULL, 0); break; - case 363: + case 363: { + int _; // force b asm at end of case in dbg asm cam_3d_morf(i_this, 0.1f + BREG_F(17)); cLib_addCalc2(&i_this->field_0xbc4, 0.3f + BREG_F(18), 1.0f, 0.01f + BREG_F(19)); if (i_this->msg_flow.doFlow(actor, NULL, 0) != 0) { i_this->demo_mode = 100; } break; - + } } if (i_this->demo_mode == 99 || i_this->demo_mode == 98) { @@ -3899,7 +3884,7 @@ static int npc_ks_option(npc_ks_class* i_this) { case 30: target_speed = l_HIO.holding_speed_h; - i_this->current_angle.y += NPC_KS_180DEG_ROT; + ADD_ANGLE_2(i_this->current_angle.y, 0x8000); if (fVar2 > 400.0f) { i_this->mode = 31; anm_init(i_this, 51, 5.0f, 2, 1.0f); @@ -3920,8 +3905,7 @@ static int npc_ks_option(npc_ks_class* i_this) { anm_init(i_this, 39, 5.0f, 2, 1.0f); i_this->mode = 41; i_this->timer[0] = cM_rndF(80.0f) + 100.0f; - // ditto. - i_this->current_angle.y += NPC_KS_180DEG_ROT; + ADD_ANGLE_2(i_this->current_angle.y, 0x8000); break; case 41: @@ -4247,7 +4231,7 @@ static int npc_ks_guide_00(npc_ks_class* i_this) { actor->speedF = 0.0f; // fallthrough case 1: - if (i_this->dis > 700.0f || guide_path_00[i_this->path_no].field_0x0 < 0) { + if (i_this->dis > 700.0f + YREG_F(16) || guide_path_00[i_this->path_no].field_0x0 < 0) { if ((call_pt & 1) != 0) { anm_init(i_this, 8, 5.0f, 2, 1.0f); } else { @@ -4285,7 +4269,7 @@ static int npc_ks_guide_00(npc_ks_class* i_this) { i_this->current_angle.y = i_this->target_angle; } - if (i_this->dis < 550.0f && guide_path_00[i_this->path_no].field_0x0 >= 0) { + if (i_this->dis < 550.0f + YREG_F(17) && guide_path_00[i_this->path_no].field_0x0 >= 0) { i_this->mode = 1; } else { if (i_this->dis < 150.0f && i_this->res_id != 51) { @@ -4301,7 +4285,7 @@ static int npc_ks_guide_00(npc_ks_class* i_this) { mae.y = player->current.pos.y - (i_this->child_no->field_0x904[0].y - 450.0f); mae.z = player->current.pos.z - i_this->child_no->field_0x904[0].z; - if (mae.abs() < 300.0f) { + if (mae.abs() < 300.0f + YREG_F(11)) { i_this->field_0xbd9 = 1; i_this->action = 20; i_this->mode = 0; @@ -4390,6 +4374,7 @@ static int npc_ks_guide_00(npc_ks_class* i_this) { static int npc_ks_guide_00_2(npc_ks_class* i_this) { fopAc_ac_c* actor = &i_this->actor; + fopAc_ac_c* unused_pla_p = dComIfGp_getPlayer(0); cXyz mae, ato; int rv = 1; int frame = i_this->model->getFrame(); @@ -4402,7 +4387,7 @@ static int npc_ks_guide_00_2(npc_ks_class* i_this) { actor->speedF = 0.0f; // fallthrough case 1: - if (i_this->dis > 900.0f || guide_path_00_2[i_this->path_no].field_0x0 < 0) { + if (i_this->dis > 900.0f + YREG_F(16) || guide_path_00_2[i_this->path_no].field_0x0 < 0) { if ((call_pt & 1) != 0) { anm_init(i_this, 8, 5.0f, 2, 1.0f); } else { @@ -4444,7 +4429,7 @@ static int npc_ks_guide_00_2(npc_ks_class* i_this) { i_this->current_angle.y = i_this->target_angle + 0x8000; } - if (i_this->dis < 750.0f && guide_path_00_2[i_this->path_no].field_0x0 >= 0) { + if (i_this->dis < 750.0f + YREG_F(17) && guide_path_00_2[i_this->path_no].field_0x0 >= 0) { i_this->mode = 1; } } @@ -4468,6 +4453,8 @@ static int npc_ks_guide_00_2(npc_ks_class* i_this) { static int npc_ks_guide_00_3(npc_ks_class* i_this) { fopAc_ac_c* actor = &i_this->actor; + fopAc_ac_c* unused_pla_p = dComIfGp_getPlayer(0); + cXyz mae, ato; int rv = 1; int frame = i_this->model->getFrame(); @@ -4480,7 +4467,7 @@ static int npc_ks_guide_00_3(npc_ks_class* i_this) { actor->speedF = 0.0f; // fallthrough case 1: - if (i_this->dis > 500.0f || guide_path_00_3[i_this->path_no].field_0x0 < 0) { + if (i_this->dis > 500.0f + YREG_F(16) || guide_path_00_3[i_this->path_no].field_0x0 < 0) { if ((call_pt & 1) != 0) { anm_init(i_this, 8, 5.0f, 2, 1.0f); } else { @@ -4505,7 +4492,7 @@ static int npc_ks_guide_00_3(npc_ks_class* i_this) { mae.x = i_this->guide_path.x - actor->current.pos.x; mae.z = i_this->guide_path.z - actor->current.pos.z; i_this->current_angle.y = cM_atan2s(mae.x, mae.z); - if (JMAFastSqrt(mae.x * mae.x + mae.z * mae.z) < actor->speedF * 1.2f) { + if (JMAFastSqrt(mae.x * mae.x + mae.z * mae.z) < actor->speedF * (1.2f + JREG_F(12))) { i_this->path_no++; i_this->mode = 1; } @@ -4518,7 +4505,7 @@ static int npc_ks_guide_00_3(npc_ks_class* i_this) { i_this->current_angle.y = i_this->target_angle; } - if (i_this->dis < 400.0f && guide_path_00_3[i_this->path_no].field_0x0 >= 0) { + if (i_this->dis < 400.0f + YREG_F(17) && guide_path_00_3[i_this->path_no].field_0x0 >= 0) { i_this->mode = 1; } else { if (i_this->dis < 150.0f && i_this->res_id != 51) { @@ -4599,6 +4586,7 @@ static int npc_ks_guide_00_3(npc_ks_class* i_this) { static int npc_ks_guide_01(npc_ks_class* i_this) { fopAc_ac_c* actor = &i_this->actor; + fopAc_ac_c* unused_pla_p = dComIfGp_getPlayer(0); cXyz mae, ato; int rv = 1; int frame = i_this->model->getFrame(); @@ -4617,7 +4605,7 @@ static int npc_ks_guide_01(npc_ks_class* i_this) { // fallthrough case 1: case 101: - if (i_this->mode == 1 && (i_this->dis > 900.0f || guide_path_01[i_this->path_no].field_0x0 < 0)) { + if (i_this->mode == 1 && (i_this->dis > 900.0f + YREG_F(16) || guide_path_01[i_this->path_no].field_0x0 < 0)) { if ((call_pt & 1) != 0) { anm_init(i_this, 8, 5.0f, 2, 1.0f); } else { @@ -4651,7 +4639,7 @@ static int npc_ks_guide_01(npc_ks_class* i_this) { rv = 2; if (i_this->res_id == 32 && i_this->model->isStop()) { anm_init(i_this, 33, 1.0f, 0, 1.0f); - actor->speedF = 40.0f; + actor->speedF = 40.0f + TREG_F(9); i_this->sound.startCreatureVoice(Z2SE_KOSARU_V_JUMP, -1); i_this->sound.startCreatureSound(Z2SE_KOSARU_JUMP_START, 0, -1); i_this->sound.startCreatureSound(Z2SE_KOSARU_JUMP_WIND, 0, -1); @@ -4687,7 +4675,7 @@ static int npc_ks_guide_01(npc_ks_class* i_this) { } if (guide_path_01[i_this->path_no].field_0x0 >= 0) { - if (i_this->dis < 600.0f) { + if (i_this->dis < 600.0f + YREG_F(17)) { i_this->mode = 1; } @@ -4703,7 +4691,7 @@ static int npc_ks_guide_01(npc_ks_class* i_this) { } else if (i_this->dis < 150.0f) { i_this->action = 100; i_this->mode = 0; - return 1; + return rv; } break; @@ -4871,7 +4859,8 @@ static int npc_ks_guide_02(npc_ks_class* i_this) { i_this->current_angle.y = i_this->target_angle + 0x8000; } - if (((player->current.pos.y - actor->current.pos.y) > 10.0f || i_this->dis < (fVar1 - 150.0f)) && guide_path_02[i_this->path_no].field_0x0 >= 0) { + if (((player->current.pos.y - actor->current.pos.y) > 10.0f || i_this->dis < (fVar1 - 150.0f + YREG_F(7))) + && guide_path_02[i_this->path_no].field_0x0 >= 0) { i_this->mode = 1; } @@ -4937,6 +4926,7 @@ static path guide_path_22[6] = { static int npc_ks_guide_22(npc_ks_class* i_this) { fopAc_ac_c* actor = &i_this->actor; + fopAc_ac_c* unused_pla_p = dComIfGp_getPlayer(0); i_this->dis = fopAcM_searchPlayerDistance(actor); cXyz mae, ato; int rv = 1; @@ -4950,7 +4940,7 @@ static int npc_ks_guide_22(npc_ks_class* i_this) { actor->speedF = 0.0f; // fallthrough case 1: - if (i_this->dis > 500.0f || guide_path_22[i_this->path_no].field_0x0 < 0) { + if (i_this->dis > 500.0f + YREG_F(16) || guide_path_22[i_this->path_no].field_0x0 < 0) { if ((call_pt & 1) != 0) { anm_init(i_this, 8, 5.0f, 2, 1.0f); } else { @@ -5008,7 +4998,7 @@ static int npc_ks_guide_22(npc_ks_class* i_this) { mae.z = i_this->guide_path.z - actor->current.pos.z; i_this->current_angle.y = cM_atan2s(mae.x, mae.z); - if (JMAFastSqrt(mae.x * mae.x + mae.z * mae.z) < actor->speedF * 1.2f) { + if (JMAFastSqrt(mae.x * mae.x + mae.z * mae.z) < actor->speedF * (1.2f + JREG_F(12))) { i_this->path_no++; i_this->mode = 1; } @@ -5021,7 +5011,7 @@ static int npc_ks_guide_22(npc_ks_class* i_this) { i_this->current_angle.y = i_this->target_angle; } - if (i_this->dis < 300.0f && guide_path_22[i_this->path_no].field_0x0 >= 0) { + if (i_this->dis < 300.0f + YREG_F(17) && guide_path_22[i_this->path_no].field_0x0 >= 0) { i_this->mode = 1; } @@ -5121,7 +5111,7 @@ static int npc_ks_guide_09(npc_ks_class* i_this) { cXyz mae, ato; int rv = 1; int frame = i_this->model->getFrame(); - f32 fVar1 = 0.0f; + f32 fVar1 = 0.0f; // used but not changed switch (i_this->mode) { case 0: @@ -5131,7 +5121,7 @@ static int npc_ks_guide_09(npc_ks_class* i_this) { actor->speedF = 0.0f; // fallthrough case 1: - if (i_this->dis > 900.0f || guide_path_09[i_this->path_no].field_0x0 < 0) { + if (i_this->dis > 900.0f + YREG_F(16) || guide_path_09[i_this->path_no].field_0x0 < 0) { if ((call_pt & 1) != 0) { anm_init(i_this, 8, 5.0f, 2, 1.0f); } else { @@ -5166,7 +5156,7 @@ static int npc_ks_guide_09(npc_ks_class* i_this) { rv = 2; if (i_this->res_id == 32 && i_this->model->isStop()) { anm_init(i_this, 33, 1.0f, 0, 1.0f); - actor->speedF = 40.0f; + actor->speedF = 40.0f + TREG_F(9); i_this->sound.startCreatureVoice(Z2SE_KOSARU_V_JUMP, -1); i_this->sound.startCreatureSound(Z2SE_KOSARU_JUMP_START, 0, -1); i_this->sound.startCreatureSound(Z2SE_KOSARU_JUMP_WIND, 0, -1); @@ -5202,14 +5192,14 @@ static int npc_ks_guide_09(npc_ks_class* i_this) { } if (guide_path_09[i_this->path_no].field_0x0 >= 0) { - if (i_this->dis < 600.0f) { + if (i_this->dis < 600.0f + YREG_F(17)) { i_this->mode = 1; } } else { if (i_this->dis < 150.0f && i_this->res_id != 51) { anm_init(i_this, 51, 5.0f, 2, 1.0f); } - + if (i_this->res_id == 51) { i_this->field_0x5fc = 1; } @@ -5249,7 +5239,7 @@ static int npc_ks_guide_09(npc_ks_class* i_this) { } } - cLib_addCalcAngleS2(&actor->current.angle.x, 0, 1, 0x800); + cLib_addCalcAngleS2(&actor->current.angle.x, 0, 1, 0x800); if (checkDoorDemo()) { i_this->action = 100; @@ -5266,7 +5256,7 @@ static int npc_ks_guide_09(npc_ks_class* i_this) { } if (i_this->mode >= 40 && i_this->mode <= 41) { - fopAc_ac_c* enemy_p = enemy_check(i_this, 700.0f); + fopAc_ac_c* enemy_p = enemy_check(i_this, 700.0f + fVar1); if (enemy_p == NULL) { i_this->mode = 42; i_this->timer[0] = 30; @@ -5275,7 +5265,7 @@ static int npc_ks_guide_09(npc_ks_class* i_this) { mae.z = enemy_p->current.pos.z - actor->current.pos.z; i_this->current_angle.y = cM_atan2s(mae.x, mae.z) + 0x8000; } - } else if (enemy_view_check(i_this, 600.0f) != NULL) { + } else if (enemy_view_check(i_this, 600.0f + fVar1) != NULL) { i_this->mode = 40; actor->speedF = 0.0f; } @@ -5299,6 +5289,7 @@ static int npc_ks_demo_12(npc_ks_class* i_this) { cXyz mae, ato; int rv = 1; int frame = i_this->model->getFrame(); + f32 reg_f31 = 0.0f; // unused switch (i_this->mode) { case 0: @@ -5337,7 +5328,7 @@ static int npc_ks_demo_12(npc_ks_class* i_this) { rv = 2; if (i_this->res_id == 32 && i_this->model->isStop()) { anm_init(i_this, 33, 1.0f, 0, 1.0f); - actor->speedF = 40.0f; + actor->speedF = 40.0f + TREG_F(9); i_this->sound.startCreatureVoice(Z2SE_KOSARU_V_JUMP, -1); i_this->sound.startCreatureSound(Z2SE_KOSARU_JUMP_START, 0, -1); i_this->sound.startCreatureSound(Z2SE_KOSARU_JUMP_WIND, 0, -1); @@ -5399,7 +5390,7 @@ static path guide_path_0409[5] = { static int npc_ks_guide_0409(npc_ks_class* i_this) { fopAc_ac_c* actor = &i_this->actor; fopAc_ac_c* player = dComIfGp_getPlayer(0); - cXyz mae; + cXyz mae, unused_vec; int rv = 1; int frame = i_this->model->getFrame(); @@ -5411,7 +5402,8 @@ static int npc_ks_guide_0409(npc_ks_class* i_this) { actor->speedF = 0.0f; // fallthrough case 1: - if (player->current.pos.z > actor->current.pos.z && (i_this->dis > 700.0f || guide_path_0409[i_this->path_no].field_0x0 < 0)) { + if (player->current.pos.z > actor->current.pos.z + && (i_this->dis > 700.0f + YREG_F(16) || guide_path_0409[i_this->path_no].field_0x0 < 0)) { if ((call_pt & 1) != 0) { anm_init(i_this, 8, 5.0f, 2, 1.0f); } else { @@ -5451,7 +5443,7 @@ static int npc_ks_guide_0409(npc_ks_class* i_this) { i_this->current_angle.y = i_this->target_angle; } - if ((i_this->dis < 550.0f || player->current.pos.z < actor->current.pos.z) + if ((i_this->dis < 550.0f + YREG_F(17) || player->current.pos.z < actor->current.pos.z) && guide_path_0409[i_this->path_no].field_0x0 >= 0) { i_this->mode = 1; } else { @@ -5492,7 +5484,8 @@ static int path_search(npc_ks_class* i_this) { while (path_index < 255) { dPath* path_p = dPath_GetRoomPath(path_index, fopAcM_GetRoomNo(actor)); if (path_p != NULL) { - cXyz sp28 = actor->current.pos - path_p->m_points->m_position; + dPnt* pnt_p = path_p->m_points; + cXyz sp28 = actor->current.pos - pnt_p->m_position; if (sp28.abs() < 200.0f) { OS_REPORT(" サルがが%d番のレール発見しました。\n", path_index); i_this->field_0xc18 = path_p; @@ -5524,7 +5517,7 @@ static int npc_ks_mori(npc_ks_class* i_this) { if (!dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[226])) { i_this->mode = 302; i_this->field_0xc17 = 3; - dComIfGp_setItemOilCount(-(dComIfGs_getMaxOil() & 0xFFFF)); + dComIfGp_setItemOilCount(-dComIfGs_getMaxOil()); } } else { i_this->field_0xaec = 1; @@ -5546,7 +5539,7 @@ static int npc_ks_mori(npc_ks_class* i_this) { mae.set(-27426.0f, player->current.pos.y, -20000.0f); mae -= player->current.pos; - if (mae.abs() < 7500.0f) { + if (mae.abs() < 7500.0f + NREG_F(17)) { i_this->mode = 1; i_this->timer[0] = 10; } @@ -5571,8 +5564,8 @@ static int npc_ks_mori(npc_ks_class* i_this) { case 2: cMtx_YrotS(*calc_mtx, player->shape_angle.y); mae.x = i_this->field_0xbb4; - mae.y = 0.0f; - mae.z = 100.0f; + mae.y = AREG_F(1); + mae.z = 100.0f + AREG_F(2); MtxPosition(&mae, &ato); actor->current.pos = player->current.pos + ato; actor->current.angle.y = player->shape_angle.y - 0x4000; @@ -5681,7 +5674,7 @@ static int npc_ks_mori(npc_ks_class* i_this) { mae.x = -30900.0f - player->current.pos.x; mae.z = -15756.0f - player->current.pos.z; - if (JMAFastSqrt(mae.x * mae.x + mae.z * mae.z) < 1300.0f || i_this->dis < fVar1) { + if (JMAFastSqrt(mae.x * mae.x + mae.z * mae.z) < 1300.0f + YREG_F(13) || i_this->dis < fVar1) { i_this->demo_mode = 300; i_this->mode = 300; } @@ -5879,7 +5872,7 @@ static int npc_ks_fsdemo(npc_ks_class* i_this) { if (i_this->path_no == 0) { anm_init(i_this, 45, 3.0f, 0, 1.0f); i_this->mode = 3; - i_this->current_angle.y += 0x8000; + ADD_ANGLE_2(i_this->current_angle.y, 0x8000); actor->speedF = 0.0f; } else { i_this->mode = 1; @@ -5892,7 +5885,7 @@ static int npc_ks_fsdemo(npc_ks_class* i_this) { case 3: if (i_this->model->isStop()) { - i_this->current_angle.y += 0x8000; + ADD_ANGLE_2(i_this->current_angle.y, 0x8000); i_this->mode = 1; } break; @@ -5941,9 +5934,10 @@ static int npc_ks_fsdemo(npc_ks_class* i_this) { i_this->mode = 22; i_this->sound.startCreatureVoice(Z2SE_KOSARU_V_WALK, -1); } - - break; } + // falthrough intentional + default: + break; case 22: sVar1 = 0x800; @@ -6025,6 +6019,8 @@ static int npc_ks_fsdemo(npc_ks_class* i_this) { static void npc_ks_kago(npc_ks_class* i_this) { fopAc_ac_c* actor = &i_this->actor; + fopAc_ac_c* unused_pla_p = dComIfGp_getPlayer(0); + cXyz unused_xyz_0, unused_xyz_1; i_this->field_0x5fc = 0; @@ -6179,7 +6175,7 @@ static void anm_se_set(npc_ks_class* i_this) { } } else if (i_this->res_id == 34) { if (i_this->model->checkFrame(1.0f)) { - f32 fVar1 = i_this->dis * 0.0215f; + f32 fVar1 = i_this->dis * (0.0215f + XREG_F(17)); if (fVar1 > 127.0f) { fVar1 = 127.0f; } @@ -6599,6 +6595,7 @@ static void action(npc_ks_class* i_this) { } static void* s_kago_sub(void* i_actor, void* i_data) { + UNUSED(i_data); if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_OBJ_KAGO) { if (((daObj_Kago_c*)i_actor)->getType() == 0) { return i_actor; @@ -6715,9 +6712,9 @@ static int daNpc_Ks_Execute(npc_ks_class* i_this) { f32 fVar1 = mae.abs(); mae = i_this->field_0x91c - actor->current.pos; f32 fVar2 = mae.abs(); - f32 fVar3 = fVar1 * 0.2f; - if (fVar3 > 200.0f) { - fVar3 = 200.0f; + f32 fVar3 = fVar1 * (0.2f + BREG_F(19)); + if (fVar3 > 200.0f + BREG_F(18)) { + fVar3 = 200.0f + BREG_F(18); } i_this->field_0x908 = fVar3 * cM_ssin((fVar2 / fVar1) * 32768.0f); i_this->field_0x90c = 0; @@ -6726,8 +6723,8 @@ static int daNpc_Ks_Execute(npc_ks_class* i_this) { } mDoMtx_stack_c::transS(actor->current.pos.x, actor->current.pos.y + i_this->field_0x908, actor->current.pos.z); - mDoMtx_stack_c::YrotM(actor->shape_angle.y); - mDoMtx_stack_c::XrotM(actor->shape_angle.x); + mDoMtx_stack_c::YrotM(s16(actor->shape_angle.y)); + mDoMtx_stack_c::XrotM(s16(actor->shape_angle.x)); mDoMtx_stack_c::ZrotM(actor->shape_angle.z); mDoMtx_stack_c::transM(0.0f, i_this->field_0x928, 0.0f); mDoMtx_stack_c::scaleM(l_HIO.basic_size, l_HIO.basic_size, l_HIO.basic_size); @@ -6749,13 +6746,13 @@ static int daNpc_Ks_Execute(npc_ks_class* i_this) { daObj_Kago_c* kago = (daObj_Kago_c*)fpcM_Search(s_kago_sub, i_this); if (kago != NULL) { MTXCopy(i_this->model->getModel()->getAnmMtx(14), mDoMtx_stack_c::get()); - mDoMtx_stack_c::YrotM(-2000); - mDoMtx_stack_c::XrotM(-0x3638); - mDoMtx_stack_c::ZrotM(-0x2E68); - mDoMtx_stack_c::transM(-60.0f, 0.0f, 0.0f); - mDoMtx_stack_c::YrotM(0); - mDoMtx_stack_c::XrotM(0); - mDoMtx_stack_c::ZrotM(0); + mDoMtx_stack_c::YrotM(VREG_S(0) - 2000); + mDoMtx_stack_c::XrotM(VREG_S(1) - 13880); + mDoMtx_stack_c::ZrotM(VREG_S(2) - 11880); + mDoMtx_stack_c::transM(-60.0f + VREG_F(7), VREG_F(8), VREG_F(9)); + mDoMtx_stack_c::YrotM(s16(VREG_S(3))); + mDoMtx_stack_c::XrotM(s16(VREG_S(4))); + mDoMtx_stack_c::ZrotM(s16(VREG_S(5))); kago->setMtx(mDoMtx_stack_c::get()); if (fopAcM_checkHawkCarryNow(kago) != 0) { @@ -6780,11 +6777,11 @@ static int daNpc_Ks_Execute(npc_ks_class* i_this) { } MTXCopy(model->getAnmMtx(10), *calc_mtx); - mae.set(30.0f, 0.0f, 0.0f); + mae.set(30.0f + BREG_F(0), BREG_F(1), BREG_F(2)); MtxPosition(&mae, &i_this->field_0x614); MTXCopy(model->getAnmMtx(14), *calc_mtx); - mae.set(30.0f, -0.0f, 0.0f); + mae.set(30.0f + BREG_F(0), -BREG_F(1), BREG_F(2)); MtxPosition(&mae, &ato); i_this->field_0x614 += (ato - i_this->field_0x614) * 0.5f; @@ -6797,7 +6794,7 @@ static int daNpc_Ks_Execute(npc_ks_class* i_this) { mae.z = obj_pos.z - i_this->field_0x614.z; if ((mae.x * mae.x + mae.z * mae.z) <= 15.0f) { i_this->field_0x620 = 2; - i_this->field_0x621 = 10; + i_this->field_0x621 = 10 + AREG_S(9); leader->field_0x92c = 0; dComIfGp_getVibration().StartShock(2, 31, cXyz(0.0f, 1.0f, 0.0f)); } @@ -6808,7 +6805,7 @@ static int daNpc_Ks_Execute(npc_ks_class* i_this) { } i_this->field_0x638 += i_this->field_0x634; - i_this->field_0x634 += -3.0f; + i_this->field_0x634 += -3.0f + BREG_F(11); if (i_this->field_0x638 < 0.0f) { i_this->field_0x638 = 0.0f; @@ -6828,10 +6825,10 @@ static int daNpc_Ks_Execute(npc_ks_class* i_this) { } player->changeDemoParam0(1); - cLib_addCalcAngleS2(&i_this->field_0x610, i_this->field_0x602 << 1, 1, 4000); + cLib_addCalcAngleS2(&i_this->field_0x610, i_this->field_0x602 << 1, 1, 4000 + TREG_S(7)); } else { player->changeDemoParam0(0); - cLib_addCalcAngleS2(&i_this->field_0x610, 10000, 4, 4000); + cLib_addCalcAngleS2(&i_this->field_0x610, 10000 + TREG_S(6), 4, 4000 + TREG_S(7)); } if (i_this->field_0x620 != 0) { diff --git a/src/d/actor/d_a_npc_kyury.cpp b/src/d/actor/d_a_npc_kyury.cpp index 329ccdfea6..fc17e0fa54 100644 --- a/src/d/actor/d_a_npc_kyury.cpp +++ b/src/d/actor/d_a_npc_kyury.cpp @@ -51,20 +51,6 @@ const daNpc_Kyury_HIOParam daNpc_Kyury_Param_c::m = { 0.0f, // box_offset }; -#if DEBUG -daNpc_Kyury_HIO_c::daNpc_Kyury_HIO_c() { - m = daNpc_Kyury_Param_c::m; -} - -void daNpc_Kyury_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { - // TODO -} - -void daNpc_Kyury_HIO_c::genMessage(JORMContext* ctext) { - // TODO -} -#endif - static int l_bmdData[3][2] = { {41, 1}, {42, 1}, @@ -150,10 +136,33 @@ daNpc_Kyury_c::cutFunc daNpc_Kyury_c::mCutList[2] = { &daNpc_Kyury_c::cutConversation, }; +NPC_KYURY_HIO_CLASS l_HIO; + +#if DEBUG +daNpc_Kyury_HIO_c::daNpc_Kyury_HIO_c() { + m = daNpc_Kyury_Param_c::m; +} + +void daNpc_Kyury_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_Kyury_HIO_c::genMessage(JORMContext* ctext) { + // NONMATCHING +} +#endif + daNpc_Kyury_c::~daNpc_Kyury_c() { if (mpMorf[0] != 0) { mpMorf[0]->stopZelAnime(); } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + deleteRes(l_loadResPtrnList[mType], (char const**)l_resNameList); } @@ -177,10 +186,16 @@ int daNpc_Kyury_c::create() { fopAcM_SetMtx(this, mpMorf[0]->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -200.0f, -100.0f, -200.0f, 200.0f, 300.0f, 200.0f); mSound.init(¤t.pos, &eyePos, 3, 1); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("キュリ-"); +#endif + reset(); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_Kyury_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl.Set(mCcDCyl); mCyl.SetStts(&mCcStts); mCyl.SetTgHitCallback(tgHitCallBack); @@ -868,8 +883,6 @@ static int daNpc_Kyury_IsDelete(void* i_this) { return 1; } -NPC_KYURY_HIO_CLASS l_HIO; - static actor_method_class daNpc_Kyury_MethodTable = { (process_method_func)daNpc_Kyury_Create, (process_method_func)daNpc_Kyury_Delete, (process_method_func)daNpc_Kyury_Execute, (process_method_func)daNpc_Kyury_IsDelete, diff --git a/src/d/actor/d_a_npc_maro.cpp b/src/d/actor/d_a_npc_maro.cpp index 8c1f861d88..f22bb5eb2a 100644 --- a/src/d/actor/d_a_npc_maro.cpp +++ b/src/d/actor/d_a_npc_maro.cpp @@ -155,19 +155,6 @@ daNpc_Maro_c::cutFunc daNpc_Maro_c::mCutList[17] = { &daNpc_Maro_c::cutTalkToKakashi, }; -daNpc_Maro_c::~daNpc_Maro_c() { - deleteObject(); - if (field_0x10bc != 0xFFFFFFFF) { - dComIfG_TimerDeleteRequest(0); - } - - if (mpMorf[0] != 0) { - mpMorf[0]->stopZelAnime(); - } - - deleteRes(l_loadResPtrnList[mType], (char const**)l_resNameList); -} - const daNpc_Maro_HIOParam daNpc_Maro_Param_c::m = { 100.0f, -3.0f, @@ -210,9 +197,44 @@ const daNpc_Maro_HIOParam daNpc_Maro_Param_c::m = { 30.0f, 15.0f, 30.0f, - 0x00780000, + 0x0078, }; +static NPC_MARO_HIO_CLASS l_HIO; + +#if DEBUG +daNpc_Maro_HIO_c::daNpc_Maro_HIO_c() { + m = daNpc_Maro_Param_c::m; +} + +void daNpc_Maro_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_Maro_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpc_Maro_c::~daNpc_Maro_c() { + deleteObject(); + if (field_0x10bc != 0xFFFFFFFF) { + dComIfG_TimerDeleteRequest(0); + } + + if (mpMorf[0] != 0) { + mpMorf[0]->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + + deleteRes(l_loadResPtrnList[mType], (char const**)l_resNameList); +} + int daNpc_Maro_c::create() { static int const heapSize[17] = { 0x3310, 0x3310, 0, 0x3260, @@ -246,11 +268,17 @@ int daNpc_Maro_c::create() { fopAcM_SetMtx(this, mpMorf[0]->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -200.0f, -100.0f, -200.0f, 200.0f, 300.0f, 200.0f); mSound.init(¤t.pos, &eyePos, 3, 1); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("マロ"); +#endif + reset(); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_Maro_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl1.Set(mCcDCyl); mCyl1.SetStts(&mCcStts); mCyl1.SetTgHitCallback(tgHitCallBack); @@ -603,10 +631,10 @@ void daNpc_Maro_c::setParam() { srchActors(); u32 uVar7 = (fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e); - s16 sVar10 = daNpc_Maro_Param_c::m.common.talk_distance; - s16 sVar9 = daNpc_Maro_Param_c::m.common.talk_angle; - s16 sVar8 = daNpc_Maro_Param_c::m.common.attention_distance; - s16 sVar7 = daNpc_Maro_Param_c::m.common.attention_angle; + s16 sVar10 = mpHIO->m.common.talk_distance; + s16 sVar9 = mpHIO->m.common.talk_angle; + s16 sVar8 = mpHIO->m.common.attention_distance; + s16 sVar7 = mpHIO->m.common.attention_angle; if (&daNpc_Maro_c::swdTutorial == field_0x110c) { sVar10 = 11; sVar9 = 6; @@ -646,18 +674,18 @@ void daNpc_Maro_c::setParam() { attention_info.distances[3] = daNpcT_getDistTableIdx(sVar10, sVar9); attention_info.flags = uVar7; - scale.set(daNpc_Maro_Param_c::m.common.scale, daNpc_Maro_Param_c::m.common.scale, - daNpc_Maro_Param_c::m.common.scale); - mCcStts.SetWeight(daNpc_Maro_Param_c::m.common.weight); - mCylH = daNpc_Maro_Param_c::m.common.height; - mWallR = daNpc_Maro_Param_c::m.common.width; - mAttnFovY = daNpc_Maro_Param_c::m.common.fov; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, + mpHIO->m.common.scale); + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; + mAttnFovY = mpHIO->m.common.fov; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_Maro_Param_c::m.common.knee_length); - mRealShadowSize = daNpc_Maro_Param_c::m.common.real_shadow_size; - mExpressionMorfFrame = daNpc_Maro_Param_c::m.common.expression_morf_frame; - mMorfFrames = daNpc_Maro_Param_c::m.common.morf_frame; - gravity = daNpc_Maro_Param_c::m.common.gravity; + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mRealShadowSize = mpHIO->m.common.real_shadow_size; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; + gravity = mpHIO->m.common.gravity; } BOOL daNpc_Maro_c::checkChangeEvt() { @@ -975,11 +1003,11 @@ void daNpc_Maro_c::setAttnPos() { f32 dVar8 = cM_s2rad(mCurAngle.y - field_0xd7e.y); mJntAnm.setParam( this, mpMorf[0]->getModel(), &eyeOffset, getBackboneJointNo(), getNeckJointNo(), - getHeadJointNo(), daNpc_Maro_Param_c::m.common.body_angleX_min, daNpc_Maro_Param_c::m.common.body_angleX_max, - daNpc_Maro_Param_c::m.common.body_angleY_min, daNpc_Maro_Param_c::m.common.body_angleY_max, - daNpc_Maro_Param_c::m.common.head_angleX_min, daNpc_Maro_Param_c::m.common.head_angleX_max, - daNpc_Maro_Param_c::m.common.head_angleY_min, daNpc_Maro_Param_c::m.common.head_angleY_max, - daNpc_Maro_Param_c::m.common.neck_rotation_ratio, 0.0f, NULL); + getHeadJointNo(), mpHIO->m.common.body_angleX_min, mpHIO->m.common.body_angleX_max, + mpHIO->m.common.body_angleY_min, mpHIO->m.common.body_angleY_max, + mpHIO->m.common.head_angleX_min, mpHIO->m.common.head_angleX_max, + mpHIO->m.common.head_angleY_min, mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, 0.0f, NULL); mJntAnm.calcJntRad(0.2f, 1.0f, (float)dVar8); setMtx(); mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getHeadJointNo())); @@ -987,7 +1015,7 @@ void daNpc_Maro_c::setAttnPos() { mJntAnm.setEyeAngleX(eyePos, 1.0f, 0); mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, 0, 1.0f, 0); eyeOffset.set(0.0f, 0.0f, 0.0f); - eyeOffset.y = daNpc_Maro_Param_c::m.common.attention_offset; + eyeOffset.y = mpHIO->m.common.attention_offset; mDoMtx_stack_c::YrotS(mCurAngle.y); mDoMtx_stack_c::multVec(&eyeOffset, &eyeOffset); attention_info.position = current.pos + eyeOffset; @@ -2861,10 +2889,10 @@ int daNpc_Maro_c::wait(void* param_0) { actor_p = (daNpc_Len_c*)mActorMngr[8].getActorP(); if (actor_p != NULL && ((daNpc_Len_c*) actor_p)->checkStartDemo13StbEvt( - this, daNpc_Maro_Param_c::m.common.box_min_x, daNpc_Maro_Param_c::m.common.box_min_y, - daNpc_Maro_Param_c::m.common.box_min_z, daNpc_Maro_Param_c::m.common.box_max_x, - daNpc_Maro_Param_c::m.common.box_max_y, daNpc_Maro_Param_c::m.common.box_max_z, - daNpc_Maro_Param_c::m.common.box_offset)) + this, mpHIO->m.common.box_min_x, mpHIO->m.common.box_min_y, + mpHIO->m.common.box_min_z, mpHIO->m.common.box_max_x, + mpHIO->m.common.box_max_y, mpHIO->m.common.box_max_z, + mpHIO->m.common.box_offset)) { mEvtNo = 7; field_0x1133 = 1; @@ -3381,8 +3409,6 @@ static int daNpc_Maro_IsDelete(void* i_this) { return 1; } -static daNpc_Maro_Param_c l_HIO; - static actor_method_class daNpc_Maro_MethodTable = { (process_method_func)daNpc_Maro_Create, (process_method_func)daNpc_Maro_Delete, diff --git a/src/d/actor/d_a_npc_midp.cpp b/src/d/actor/d_a_npc_midp.cpp index 2ef3eb0a52..bfc79d1939 100644 --- a/src/d/actor/d_a_npc_midp.cpp +++ b/src/d/actor/d_a_npc_midp.cpp @@ -65,14 +65,6 @@ char* daNpc_midP_c::mCutNameList = ""; daNpc_midP_c::cutFunc daNpc_midP_c::mCutList[1] = { 0 }; -daNpc_midP_c::~daNpc_midP_c() { - OS_REPORT("|%06d:%x|daNpc_midP_c -> デストラクト\n", g_Counter.mCounter0, this); - if (heap != 0) { - mpMorf[0]->stopZelAnime(); - } - deleteRes(l_loadResPtrnList[mType], (char const**)l_resNameList); -} - daNpc_midP_HIOParam const daNpc_midP_Param_c::m = { 210.0f, -3.0f, @@ -117,6 +109,37 @@ daNpc_midP_HIOParam const daNpc_midP_Param_c::m = { 0.0f, }; +static NPC_MIDP_HIO_CLASS l_HIO; + +#if DEBUG +daNpc_midP_HIO_c::daNpc_midP_HIO_c() { + m = daNpc_midP_Param_c::m; +} + +void daNpc_midP_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_midP_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpc_midP_c::~daNpc_midP_c() { + OS_REPORT("|%06d:%x|daNpc_midP_c -> デストラクト\n", g_Counter.mCounter0, this); + if (heap != 0) { + mpMorf[0]->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + + deleteRes(l_loadResPtrnList[mType], (char const**)l_resNameList); +} + int daNpc_midP_c::create() { daNpcT_ct(this, daNpc_midP_c, &l_faceMotionAnmData, &l_motionAnmData, l_faceMotionSequenceData, 4, l_motionSequenceData, 4, l_evtList, l_resNameList); @@ -147,9 +170,14 @@ int daNpc_midP_c::create() { mSound.init(¤t.pos, &eyePos, 3, 1); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("ミドナ姫"); +#endif + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_midP_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl.Set(mCcDCyl); mCyl.SetStts(&mCcStts); mCyl.SetTgHitCallback(tgHitCallBack); @@ -325,27 +353,27 @@ void daNpc_midP_c::setParam() { selectAction(); srchActors(); - s16 sVar1 = daNpc_midP_Param_c::m.common.talk_distance; - s16 sVar2 = daNpc_midP_Param_c::m.common.talk_angle; - s16 sVar3 = daNpc_midP_Param_c::m.common.attention_distance; - s16 sVar4 = daNpc_midP_Param_c::m.common.attention_angle; + s16 sVar1 = mpHIO->m.common.talk_distance; + s16 sVar2 = mpHIO->m.common.talk_angle; + s16 sVar3 = mpHIO->m.common.attention_distance; + s16 sVar4 = mpHIO->m.common.attention_angle; attention_info.distances[0] = daNpcT_getDistTableIdx(sVar3, sVar4); attention_info.distances[1] = attention_info.distances[0]; attention_info.distances[3] = daNpcT_getDistTableIdx(sVar1, sVar2); attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e; - scale.setall(daNpc_midP_Param_c::m.common.scale); - mCcStts.SetWeight(daNpc_midP_Param_c::m.common.weight); - mCylH = daNpc_midP_Param_c::m.common.height; - mWallR = daNpc_midP_Param_c::m.common.width; - mAttnFovY = daNpc_midP_Param_c::m.common.fov; + scale.setall(mpHIO->m.common.scale); + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; + mAttnFovY = mpHIO->m.common.fov; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_midP_Param_c::m.common.knee_length); - mRealShadowSize = daNpc_midP_Param_c::m.common.real_shadow_size; - mExpressionMorfFrame = daNpc_midP_Param_c::m.common.expression_morf_frame; - mMorfFrames = daNpc_midP_Param_c::m.common.morf_frame; - gravity = daNpc_midP_Param_c::m.common.gravity; + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mRealShadowSize = mpHIO->m.common.real_shadow_size; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; + gravity = mpHIO->m.common.gravity; } void daNpc_midP_c::setAfterTalkMotion() { @@ -420,11 +448,11 @@ void daNpc_midP_c::setAttnPos() { f32 dVar5 = cM_s2rad(mCurAngle.y - field_0xd7e.y); J3DModel* model = mpMorf[0]->getModel(); mJntAnm.setParam(this, model, &sp3c, getBackboneJointNo(), getNeckJointNo(), - getHeadJointNo(), daNpc_midP_Param_c::m.common.body_angleX_min, daNpc_midP_Param_c::m.common.body_angleX_max, - daNpc_midP_Param_c::m.common.body_angleY_min, daNpc_midP_Param_c::m.common.body_angleY_max, - daNpc_midP_Param_c::m.common.head_angleX_min, daNpc_midP_Param_c::m.common.head_angleX_max, - daNpc_midP_Param_c::m.common.head_angleY_min, daNpc_midP_Param_c::m.common.head_angleY_max, - daNpc_midP_Param_c::m.common.neck_rotation_ratio, dVar5, &sp48); + getHeadJointNo(), mpHIO->m.common.body_angleX_min, mpHIO->m.common.body_angleX_max, + mpHIO->m.common.body_angleY_min, mpHIO->m.common.body_angleY_max, + mpHIO->m.common.head_angleX_min, mpHIO->m.common.head_angleX_max, + mpHIO->m.common.head_angleY_min, mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, dVar5, &sp48); mJntAnm.calcJntRad(0.2f, 1.0f, dVar5); setMtx(); @@ -434,7 +462,7 @@ void daNpc_midP_c::setAttnPos() { mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, 0, 1.0f, 0); attention_info.position = current.pos; - attention_info.position.y += daNpc_midP_Param_c::m.common.attention_offset; + attention_info.position.y += mpHIO->m.common.attention_offset; } void daNpc_midP_c::setCollision() { @@ -609,8 +637,6 @@ static int daNpc_midP_IsDelete(void* i_this) { return 1; } -static daNpc_midP_Param_c l_HIO; - static actor_method_class daNpc_midP_MethodTable = { (process_method_func)daNpc_midP_Create, (process_method_func)daNpc_midP_Delete, diff --git a/src/d/actor/d_a_npc_moi.cpp b/src/d/actor/d_a_npc_moi.cpp index a7bbec2aef..50462a6f25 100644 --- a/src/d/actor/d_a_npc_moi.cpp +++ b/src/d/actor/d_a_npc_moi.cpp @@ -244,10 +244,19 @@ enum Motion { /* 0x2F */ MOT_UNK_47 = 47, }; +NPC_MOI_HIO_CLASS l_HIO; + daNpc_Moi_c::~daNpc_Moi_c() { if (mpMorf[0] != 0) { mpMorf[0]->stopZelAnime(); } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + deleteRes(l_loadResPtrnList[mType], (char const**)l_resNameList); } @@ -277,6 +286,12 @@ int daNpc_Moi_c::create() { fopAcM_setCullSizeBox(this, -200.0f, -100.0f, -200.0f, 200.0f, 300.0f, 200.0f); mSound.init(¤t.pos, &eyePos, 3, 1); field_0x9c0.init(&mAcch, 0.0f, 0.0f); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("モイ"); +#endif + reset(); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); @@ -784,8 +799,6 @@ void daNpc_Moi_c::beforeMove() { } } -NPC_MOI_HIO_CLASS l_HIO; - void daNpc_Moi_c::setAttnPos() { cXyz acStack_3c(-30.0f, 10.0f, 0.0f); @@ -1259,7 +1272,7 @@ int daNpc_Moi_c::injuryWalk() { } int daNpc_Moi_c::poise() { - int iVar13 = daNpc_Moi_Param_c::m.field_0x98; + int iVar13 = mpHIO->m.field_0x98; if (field_0x1669 != 0) { if (field_0x166c != 0) { diff --git a/src/d/actor/d_a_npc_myna2.cpp b/src/d/actor/d_a_npc_myna2.cpp index 86fd8dbec7..de8756360b 100644 --- a/src/d/actor/d_a_npc_myna2.cpp +++ b/src/d/actor/d_a_npc_myna2.cpp @@ -14,7 +14,7 @@ enum { NUM_EVT_CUTS_e = 5, }; -static daNpc_myna2_Param_c l_HIO; +static NPC_MYNA2_HIO_CLASS l_HIO; static daNpc_GetParam1 l_bmdGetParamList[] = { {0x17, 0}, @@ -106,24 +106,6 @@ daNpc_myna2_c::EventFn daNpc_myna2_c::mEvtCutList[] = { &daNpc_myna2_c::ECut_gameGoalSuccess, }; -daNpc_myna2_c::daNpc_myna2_c() {} - -daNpc_myna2_c::~daNpc_myna2_c() { - OS_REPORT("|%06d:%x|daNpc_myna2_c -> デストラクト%d\n", g_Counter.mCounter0, mType); - - if (mType == 1) { - daNpcF_offTmpBit(0x4A); - } - - for (int i = 0; l_loadRes_list[mType][i] >= 0; i++) { - dComIfG_resDelete(&mPhase[i], l_resNames[l_loadRes_list[mType][i]]); - } - - if (heap != NULL) { - mAnm_p->stopZelAnime(); - } -} - const daNpc_myna2_HIOParam daNpc_myna2_Param_c::m = { 60.0f, 0.0f, @@ -162,6 +144,44 @@ const daNpc_myna2_HIOParam daNpc_myna2_Param_c::m = { 2500.0f, }; +#if DEBUG +daNpc_myna2_HIO_c::daNpc_myna2_HIO_c() { + m = daNpc_myna2_Param_c::m; +} + +void daNpc_myna2_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_myna2_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpc_myna2_c::daNpc_myna2_c() {} + +daNpc_myna2_c::~daNpc_myna2_c() { + OS_REPORT("|%06d:%x|daNpc_myna2_c -> デストラクト%d\n", g_Counter.mCounter0, mType); + + if (mType == 1) { + daNpcF_offTmpBit(0x4A); + } + + for (int i = 0; l_loadRes_list[mType][i] >= 0; i++) { + dComIfG_resDelete(&mPhase[i], l_resNames[l_loadRes_list[mType][i]]); + } + + if (heap != NULL) { + mAnm_p->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif +} + int daNpc_myna2_c::create() { fopAcM_ct(this, daNpc_myna2_c); @@ -205,11 +225,16 @@ int daNpc_myna2_c::create() { fopAcM_setCullSizeBox(this, -300.0f, -50.0f, -300.0f, 300.0f, 450.0f, 300.0f); mSound.init(¤t.pos, &eyePos, 3, 1); - mAcchCir.SetWall(daNpc_myna2_Param_c::m.common.width, daNpc_myna2_Param_c::m.common.knee_length); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("トリル2"); +#endif + + mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_myna2_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl.Set(mCcDCyl); mCyl.SetStts(&mCcStts); mCyl.SetTgHitCallback(tgHitCallBack); @@ -266,7 +291,7 @@ int daNpc_myna2_c::Execute() { } int daNpc_myna2_c::Draw() { - return draw(chkAction(&daNpc_myna2_c::test), FALSE, daNpc_myna2_Param_c::m.common.real_shadow_size, NULL, 0); + return draw(chkAction(&daNpc_myna2_c::test), FALSE, mpHIO->m.common.real_shadow_size, NULL, 0); } int daNpc_myna2_c::createHeapCallBack(fopAc_ac_c* actor) { @@ -292,10 +317,10 @@ void daNpc_myna2_c::setParam() { attention_info.distances[fopAc_attn_SPEAK_e] = 0x50; attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e; - scale.set(daNpc_myna2_Param_c::m.common.scale, daNpc_myna2_Param_c::m.common.scale, daNpc_myna2_Param_c::m.common.scale); - mAcchCir.SetWallR(daNpc_myna2_Param_c::m.common.width); - mAcchCir.SetWallH(daNpc_myna2_Param_c::m.common.knee_length); - gravity = daNpc_myna2_Param_c::m.common.gravity; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); + mAcchCir.SetWallR(mpHIO->m.common.width); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + gravity = mpHIO->m.common.gravity; } BOOL daNpc_myna2_c::main() { @@ -307,7 +332,7 @@ BOOL daNpc_myna2_c::main() { attention_info.flags = 0; } - if (!daNpc_myna2_Param_c::m.common.debug_mode_ON && (!dComIfGp_event_runCheck() || (mOrderNewEvt && dComIfGp_getEvent()->isOrderOK()))) { + if (!mpHIO->m.common.debug_mode_ON && (!dComIfGp_event_runCheck() || (mOrderNewEvt && dComIfGp_getEvent()->isOrderOK()))) { if (mOrderEvtNo != 0) { eventInfo.setArchiveName(l_resNames[l_evtGetParamList[mOrderEvtNo].arcIdx]); } @@ -355,7 +380,7 @@ void daNpc_myna2_c::setAttnPos() { static cXyz eyeOffset(30.0f, 10.0f, 0.0f); cXyz sp2C, sp20, sp14, sp18; - f32 attention_offset = daNpc_myna2_Param_c::m.common.attention_offset; + f32 attention_offset = mpHIO->m.common.attention_offset; setMtx(); @@ -389,8 +414,8 @@ void daNpc_myna2_c::setAttnPos() { } mCyl.SetC(sp2C); - mCyl.SetH(daNpc_myna2_Param_c::m.common.height + var_f30); - mCyl.SetR(daNpc_myna2_Param_c::m.common.width + var_f29); + mCyl.SetH(mpHIO->m.common.height + var_f30); + mCyl.SetR(mpHIO->m.common.width + var_f29); dComIfG_Ccsp()->Set(&mCyl); } @@ -569,31 +594,31 @@ void daNpc_myna2_c::reset() { } void daNpc_myna2_c::playMotion() { - daNpcF_anmPlayData dat0 = {0, daNpc_myna2_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat0 = {0, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[] = {&dat0}; - daNpcF_anmPlayData dat1 = {12, daNpc_myna2_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat1 = {12, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[] = {&dat1}; - daNpcF_anmPlayData dat2a = {13, daNpc_myna2_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat2a = {13, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[] = {&dat2a}; - daNpcF_anmPlayData dat3a = {9, daNpc_myna2_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat3b = {12, daNpc_myna2_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat3a = {9, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat3b = {12, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[] = {&dat3a, &dat3b}; - daNpcF_anmPlayData dat4a = {10, daNpc_myna2_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat4b = {13, daNpc_myna2_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat4a = {10, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat4b = {13, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat4[] = {&dat4a, &dat4b}; - daNpcF_anmPlayData dat5a = {11, daNpc_myna2_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat5b = {14, daNpc_myna2_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat5a = {11, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat5b = {14, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat5[] = {&dat5a, &dat5b}; - daNpcF_anmPlayData dat6 = {14, daNpc_myna2_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat6 = {14, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat6[] = {&dat6}; - daNpcF_anmPlayData dat7 = {7, daNpc_myna2_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat7 = {7, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat7[] = {&dat7}; daNpcF_anmPlayData** ppDat[8] = { @@ -636,7 +661,7 @@ int daNpc_myna2_c::setAction(int (daNpc_myna2_c::*i_action)(void*)) { int daNpc_myna2_c::selectAction() { mNextAction = NULL; - if (daNpc_myna2_Param_c::m.common.debug_mode_ON) { + if (mpHIO->m.common.debug_mode_ON) { mNextAction = &daNpc_myna2_c::test; } else { switch (mType) { @@ -664,7 +689,7 @@ void daNpc_myna2_c::doNormalAction(int param_0) { if (mCutType == daPy_py_c::CUT_TYPE_TURN_RIGHT) { damage_time = 20; } else { - damage_time = daNpc_myna2_Param_c::m.common.damage_time; + damage_time = mpHIO->m.common.damage_time; } setLookMode(LOOK_RESET); @@ -805,7 +830,7 @@ int daNpc_myna2_c::waitHovering(void* param_0) { mSound.playSumomoBgm((sp2C - current.pos).abs()); calcHovering(0, 0); - if ((sp2C - current.pos).absXZ() >= daNpc_myna2_Param_c::m.field_0x70 && fopAcM_CheckCondition(this, 4)) { + if ((sp2C - current.pos).absXZ() >= mpHIO->m.field_0x70 && fopAcM_CheckCondition(this, 4)) { dComIfGs_offSwitch(field_0xe0d, fopAcM_GetRoomNo(this)); daNpcF_offTmpBit(0x4A); fopAcM_delete(this); @@ -813,7 +838,7 @@ int daNpc_myna2_c::waitHovering(void* param_0) { } if (!daNpcF_chkEvtBit(0x11D) && daPy_py_c::checkNowWolf()) { - if (((sp2C - current.pos).absXZ() <= daNpc_myna2_Param_c::m.field_0x6c && (home.pos.y - sp2C.y) < 100.0f) && !player->checkPlayerFly() && daPy_getPlayerActorClass()->checkSwimUp()) { + if (((sp2C - current.pos).absXZ() <= mpHIO->m.field_0x6c && (home.pos.y - sp2C.y) < 100.0f) && !player->checkPlayerFly() && daPy_getPlayerActorClass()->checkSwimUp()) { mOrderEvtNo = 1; } } @@ -956,8 +981,8 @@ int daNpc_myna2_c::test(void* param_0) { mMode = 2; /* fallthrough */ case 2: - setMotion(daNpc_myna2_Param_c::m.common.motion, daNpc_myna2_Param_c::m.common.morf_frame, 0); - setLookMode(daNpc_myna2_Param_c::m.common.look_mode); + setMotion(mpHIO->m.common.motion, mpHIO->m.common.morf_frame, 0); + setLookMode(mpHIO->m.common.look_mode); mOrderEvtNo = 0; attention_info.flags = 0; break; diff --git a/src/d/actor/d_a_npc_pachi_besu.cpp b/src/d/actor/d_a_npc_pachi_besu.cpp index 8fbdd03c22..352e0cc3f7 100644 --- a/src/d/actor/d_a_npc_pachi_besu.cpp +++ b/src/d/actor/d_a_npc_pachi_besu.cpp @@ -468,14 +468,6 @@ daNpc_Pachi_Besu_c::cutFunc daNpc_Pachi_Besu_c::mCutList[11] = { &daNpc_Pachi_Besu_c::cutTutrialCaution, }; -daNpc_Pachi_Besu_c::~daNpc_Pachi_Besu_c() { - if (mpMorf[0] != NULL) { - mpMorf[0]->stopZelAnime(); - } - - deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); -} - daNpc_Pachi_Besu_HIOParam const daNpc_Pachi_Besu_Param_c::m = { 160.0f, -3.0f, @@ -520,6 +512,36 @@ daNpc_Pachi_Besu_HIOParam const daNpc_Pachi_Besu_Param_c::m = { 70.0f, }; +static NPC_PACHI_BESU_HIO_CLASS l_HIO; + +#if DEBUG +daNpc_Pachi_Besu_HIO_c::daNpc_Pachi_Besu_HIO_c() { + m = daNpc_Pachi_Besu_Param_c::m; +} + +void daNpc_Pachi_Besu_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_Pachi_Besu_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpc_Pachi_Besu_c::~daNpc_Pachi_Besu_c() { + if (mpMorf[0] != NULL) { + mpMorf[0]->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + + deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); +} + cPhs__Step daNpc_Pachi_Besu_c::create() { daNpcT_ct(this, daNpc_Pachi_Besu_c, l_faceMotionAnmData, l_motionAnmData, l_faceMotionSequenceData, 4, l_motionSequenceData, 4, @@ -548,9 +570,14 @@ cPhs__Step daNpc_Pachi_Besu_c::create() { fopAcM_setCullSizeBox(this, -300.0f, -50.0f, -300.0f, 300.0f, 450.0f, 300.0f); mSound.init(¤t.pos, &eyePos, 3, 1); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("パチチュー:ベス"); +#endif + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_Pachi_Besu_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl.Set(mCcDCyl); mCyl.SetStts(&mCcStts); mCyl.SetTgHitCallback(tgHitCallBack); @@ -713,29 +740,27 @@ void daNpc_Pachi_Besu_c::setParam() { selectAction(); srchActors(); - s16 talk_distance = daNpc_Pachi_Besu_Param_c::m.common.talk_distance; - s16 talk_angle = daNpc_Pachi_Besu_Param_c::m.common.talk_angle; + s16 talk_distance = mpHIO->m.common.talk_distance; + s16 talk_angle = mpHIO->m.common.talk_angle; - attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(daNpc_Pachi_Besu_Param_c::m.common.attention_distance, daNpc_Pachi_Besu_Param_c::m.common.attention_angle); + attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(mpHIO->m.common.attention_distance, mpHIO->m.common.attention_angle); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle); attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e; - scale.set(daNpc_Pachi_Besu_Param_c::m.common.scale, daNpc_Pachi_Besu_Param_c::m.common.scale, daNpc_Pachi_Besu_Param_c::m.common.scale); - mCcStts.SetWeight(daNpc_Pachi_Besu_Param_c::m.common.weight); - mCylH = daNpc_Pachi_Besu_Param_c::m.common.height; - mWallR = daNpc_Pachi_Besu_Param_c::m.common.width; - mAttnFovY = daNpc_Pachi_Besu_Param_c::m.common.fov; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; + mAttnFovY = mpHIO->m.common.fov; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_Pachi_Besu_Param_c::m.common.knee_length); - mRealShadowSize = daNpc_Pachi_Besu_Param_c::m.common.real_shadow_size; - mExpressionMorfFrame = daNpc_Pachi_Besu_Param_c::m.common.expression_morf_frame; - mMorfFrames = daNpc_Pachi_Besu_Param_c::m.common.morf_frame; - gravity = daNpc_Pachi_Besu_Param_c::m.common.gravity; + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mRealShadowSize = mpHIO->m.common.real_shadow_size; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; + gravity = mpHIO->m.common.gravity; } -static daNpc_Pachi_Besu_Param_c l_HIO; - void daNpc_Pachi_Besu_c::afterMoved() { fopAc_ac_c* actor_p1 = mActorMngrs[0].getActorP(); fopAc_ac_c* actor_p2 = mActorMngrs[1].getActorP(); @@ -912,11 +937,11 @@ void daNpc_Pachi_Besu_c::setAttnPos() { J3DModel* model = mpMorf[0]->getModel(); mJntAnm.setParam(this, model, &sp38, getBackboneJointNo(), getNeckJointNo(), getHeadJointNo(), - daNpc_Pachi_Besu_Param_c::m.common.body_angleX_min, daNpc_Pachi_Besu_Param_c::m.common.body_angleX_max, - daNpc_Pachi_Besu_Param_c::m.common.body_angleY_min, daNpc_Pachi_Besu_Param_c::m.common.body_angleY_max, - daNpc_Pachi_Besu_Param_c::m.common.head_angleX_min, daNpc_Pachi_Besu_Param_c::m.common.head_angleX_max, - daNpc_Pachi_Besu_Param_c::m.common.head_angleY_min, daNpc_Pachi_Besu_Param_c::m.common.head_angleY_max, - daNpc_Pachi_Besu_Param_c::m.common.neck_rotation_ratio, 0.0f, NULL); + mpHIO->m.common.body_angleX_min, mpHIO->m.common.body_angleX_max, + mpHIO->m.common.body_angleY_min, mpHIO->m.common.body_angleY_max, + mpHIO->m.common.head_angleX_min, mpHIO->m.common.head_angleX_max, + mpHIO->m.common.head_angleY_min, mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, 0.0f, NULL); mJntAnm.calcJntRad(0.2f, 1.0f, fVar1); setMtx(); @@ -926,7 +951,7 @@ void daNpc_Pachi_Besu_c::setAttnPos() { mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, TRUE, 1.0f, 0); attention_info.position = current.pos; - attention_info.position.y += daNpc_Pachi_Besu_Param_c::m.common.attention_offset; + attention_info.position.y += mpHIO->m.common.attention_offset; } void daNpc_Pachi_Besu_c::setCollision() { @@ -1097,8 +1122,8 @@ BOOL daNpc_Pachi_Besu_c::test(void* param_1) { mMode = 2; // fallthrough case 2: - mFaceMotionSeqMngr.setNo(mHIO->param.common.face_expression, -1.0f, 0, 0); - mMotionSeqMngr.setNo(mHIO->param.common.motion, -1.0f, 0, 0); + mFaceMotionSeqMngr.setNo(mpHIO->m.common.face_expression, -1.0f, 0, 0); + mMotionSeqMngr.setNo(mpHIO->m.common.motion, -1.0f, 0, 0); mJntAnm.lookNone(0); attention_info.flags = 0; break; diff --git a/src/d/actor/d_a_npc_prayer.cpp b/src/d/actor/d_a_npc_prayer.cpp index 13b39e0bbb..4974fad798 100644 --- a/src/d/actor/d_a_npc_prayer.cpp +++ b/src/d/actor/d_a_npc_prayer.cpp @@ -8,7 +8,7 @@ #include "d/actor/d_a_npc_prayer.h" #include "d/d_com_inf_game.h" -static daNpcPray_Param_c l_HIO; +static NPC_PRAY_HIO_CLASS l_HIO; static struct { int resIdx; @@ -47,24 +47,6 @@ daNpcPray_c::EvtSeq daNpcPray_c::mEvtSeqList[] = { &daNpcPray_c::_Evt_GetHeart, }; -daNpcPray_c::daNpcPray_c() {} - -daNpcPray_c::~daNpcPray_c() { - for (int i = 0; i < 2; i++) { - dComIfG_resDelete(&mPhase[i], l_arcNames[i]); - } - - fopAc_ac_c* actor = mActorMngr[1].getActorP(); - if (actor != NULL) { - fopAcM_delete(actor); - mActorMngr[1].remove(); - } - - if (heap != NULL) { - mAnm_p->stopZelAnime(); - } -} - const daNpcPray_HIOParam daNpcPray_Param_c::m = { 55.0f, -3.0f, @@ -101,6 +83,40 @@ const daNpcPray_HIOParam daNpcPray_Param_c::m = { false, }; +#if DEBUG +daNpcPray_HIO_c::daNpcPray_HIO_c() { + m = daNpcPray_Param_c::m; +} + +void daNpcPray_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpcPray_c::daNpcPray_c() {} + +daNpcPray_c::~daNpcPray_c() { + for (int i = 0; i < 2; i++) { + dComIfG_resDelete(&mPhase[i], l_arcNames[i]); + } + + fopAc_ac_c* actor = mActorMngr[1].getActorP(); + if (actor != NULL) { + fopAcM_delete(actor); + mActorMngr[1].remove(); + } + + if (heap != NULL) { + mAnm_p->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif +} + int daNpcPray_c::Create() { fopAcM_ct(this, daNpcPray_c); @@ -126,17 +142,22 @@ int daNpcPray_c::Create() { mSound.init(¤t.pos, &eyePos, 3, 1); mSound.setMdlType(25, 0, 0); - mAcchCir.SetWall(daNpcPray_Param_c::m.common.width, daNpcPray_Param_c::m.common.knee_length); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("祈祷師"); +#endif + + mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mAcch.CrrPos(dComIfG_Bgsp()); - mCcStts.Init(daNpcPray_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCcCyl.Set(mCcDCyl); mCcCyl.SetStts(&mCcStts); mCcCyl.SetTgType(0); mCcCyl.SetTgSPrm(0); - mCcCyl.SetH(daNpcPray_Param_c::m.common.height); - mCcCyl.SetR(daNpcPray_Param_c::m.common.width); + mCcCyl.SetH(mpHIO->m.common.height); + mCcCyl.SetR(mpHIO->m.common.width); mGndChk = mAcch.m_gnd; mGroundH = mAcch.GetGroundH(); @@ -190,7 +211,7 @@ int daNpcPray_c::Execute() { } int daNpcPray_c::Draw() { - draw(FALSE, FALSE, daNpcPray_Param_c::m.common.real_shadow_size, NULL, FALSE); + draw(FALSE, FALSE, mpHIO->m.common.real_shadow_size, NULL, FALSE); return 1; } @@ -215,7 +236,7 @@ int daNpcPray_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { case 1: case 2: case 3: - setLookatMtx(jnt_no, spC, daNpcPray_Param_c::m.common.neck_rotation_ratio); + setLookatMtx(jnt_no, spC, mpHIO->m.common.neck_rotation_ratio); break; } @@ -241,16 +262,16 @@ int daNpcPray_c::ctrlJointCallBack(J3DJoint* i_joint, int param_1) { } void daNpcPray_c::setParam() { - attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(daNpcPray_Param_c::m.common.attention_distance, daNpcPray_Param_c::m.common.attention_angle); + attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(mpHIO->m.common.attention_distance, mpHIO->m.common.attention_angle); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; - attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(daNpcPray_Param_c::m.common.talk_distance, daNpcPray_Param_c::m.common.talk_angle); + attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(mpHIO->m.common.talk_distance, mpHIO->m.common.talk_angle); attention_info.flags = (fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e); #if DEBUG - scale.set(daNpcPray_Param_c::m.common.scale, daNpcPray_Param_c::m.common.scale, daNpcPray_Param_c::m.common.scale); - mAcchCir.SetWallR(daNpcPray_Param_c::m.common.width); - mAcchCir.SetWallH(daNpcPray_Param_c::m.common.knee_length); - gravity = daNpcPray_Param_c::m.common.gravity; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); + mAcchCir.SetWallR(mpHIO->m.common.width); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + gravity = mpHIO->m.common.gravity; #endif } @@ -283,7 +304,7 @@ void daNpcPray_c::setAttnPos() { mHeadAngle.x = cLib_targetAngleX(&mHeadPos, &sp14); mHeadAngle.y = cLib_targetAngleY(&mHeadPos, &sp14); - attention_info.position.set(mHeadPos.x, mHeadPos.y + daNpcPray_Param_c::m.common.attention_offset, mHeadPos.z); + attention_info.position.set(mHeadPos.x, mHeadPos.y + mpHIO->m.common.attention_offset, mHeadPos.z); cXyz cyl_center; mDoMtx_stack_c::copy(mAnm_p->getModel()->getAnmMtx(1)); @@ -292,8 +313,8 @@ void daNpcPray_c::setAttnPos() { mCcCyl.SetC(cyl_center); #if DEBUG - mCcCyl.SetH(daNpcPray_Param_c::m.common.height); - mCcCyl.SetR(daNpcPray_Param_c::m.common.width); + mCcCyl.SetH(mpHIO->m.common.height); + mCcCyl.SetR(mpHIO->m.common.width); #endif dComIfG_Ccsp()->Set(&mCcCyl); } @@ -357,18 +378,18 @@ void daNpcPray_c::reset() { } void daNpcPray_c::playMotion() { - daNpcF_anmPlayData wait_phase1 = {2, daNpcPray_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData wait_phase1 = {2, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* wait_m[] = {&wait_phase1}; - daNpcF_anmPlayData pray_phase1 = {0, daNpcPray_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData pray_phase2 = {2, daNpcPray_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData pray_phase1 = {0, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData pray_phase2 = {2, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pray_m[] = {&pray_phase1, &pray_phase2}; - daNpcF_anmPlayData praytalk_phase1 = {1, daNpcPray_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData praytalk_phase2 = {2, daNpcPray_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData praytalk_phase1 = {1, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData praytalk_phase2 = {2, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* praytalk_m[] = {&praytalk_phase1, &praytalk_phase2}; - daNpcF_anmPlayData wolf_phase1 = {5, daNpcPray_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData wolf_phase1 = {5, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* wolf_m[] = {&wolf_phase1}; daNpcF_anmPlayData** anmData_p[] = {wait_m, pray_m, praytalk_m, wolf_m}; @@ -406,14 +427,14 @@ void daNpcPray_c::lookat() { J3DModel* model_p = mAnm_p->getModel(); int var_r28 = 0; - f32 body_angleX_min = daNpcPray_Param_c::m.common.body_angleX_min; - f32 body_angleX_max = daNpcPray_Param_c::m.common.body_angleX_max; - f32 body_angleY_min = daNpcPray_Param_c::m.common.body_angleY_min; - f32 body_angleY_max = daNpcPray_Param_c::m.common.body_angleY_max; - f32 head_angleX_min = daNpcPray_Param_c::m.common.head_angleX_min; - f32 head_angleX_max = daNpcPray_Param_c::m.common.head_angleX_max; - f32 head_angleY_min = daNpcPray_Param_c::m.common.head_angleY_min; - f32 head_angleY_max = daNpcPray_Param_c::m.common.head_angleY_max; + f32 body_angleX_min = mpHIO->m.common.body_angleX_min; + f32 body_angleX_max = mpHIO->m.common.body_angleX_max; + f32 body_angleY_min = mpHIO->m.common.body_angleY_min; + f32 body_angleY_max = mpHIO->m.common.body_angleY_max; + f32 head_angleX_min = mpHIO->m.common.head_angleX_min; + f32 head_angleX_max = mpHIO->m.common.head_angleX_max; + f32 head_angleY_min = mpHIO->m.common.head_angleY_min; + f32 head_angleY_max = mpHIO->m.common.head_angleY_max; s16 temp_r26 = mCurAngle.y - mOldAngle.y; cXyz sp30[] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; @@ -480,7 +501,7 @@ bool daNpcPray_c::step(s16 i_targetAngle, int) { } bool daNpcPray_c::chkFindPlayer() { - if (!chkActorInSight(daPy_getPlayerActorClass(), daNpcPray_Param_c::m.common.fov)) { + if (!chkActorInSight(daPy_getPlayerActorClass(), mpHIO->m.common.fov)) { mActorMngr[0].remove(); return 0; } diff --git a/src/d/actor/d_a_npc_raca.cpp b/src/d/actor/d_a_npc_raca.cpp index 8452338247..3d259c2033 100644 --- a/src/d/actor/d_a_npc_raca.cpp +++ b/src/d/actor/d_a_npc_raca.cpp @@ -155,14 +155,6 @@ daNpc_Raca_c::cutFunc daNpc_Raca_c::mCutList[1] = { NULL, }; -daNpc_Raca_c::~daNpc_Raca_c() { - if (heap != NULL) { - mpMorf[0]->stopZelAnime(); - } - - deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); -} - daNpc_Raca_HIOParam const daNpc_Raca_Param_c::m = { 230.0f, -3.0f, @@ -207,6 +199,36 @@ daNpc_Raca_HIOParam const daNpc_Raca_Param_c::m = { 0.0f, }; +static NPC_RACA_HIO_CLASS l_HIO; + +#if DEBUG +daNpc_Raca_HIO_c::daNpc_Raca_HIO_c() { + m = daNpc_Raca_Param_c::m; +} + +void daNpc_Raca_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_Raca_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpc_Raca_c::~daNpc_Raca_c() { + if (heap != NULL) { + mpMorf[0]->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + + deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); +} + cPhs__Step daNpc_Raca_c::create() { daNpcT_ct(this, daNpc_Raca_c, l_faceMotionAnmData, l_motionAnmData, l_faceMotionSequenceData, 4, l_motionSequenceData, 4, l_evtList, l_resNameList); @@ -236,9 +258,14 @@ cPhs__Step daNpc_Raca_c::create() { mSound.init(¤t.pos, &eyePos, 3, 1); field_0x9c0.init(&mAcch, 0.0f, 0.0f); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("ラッカ"); +#endif + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_Raca_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl.Set(mCcDCyl); mCyl.SetStts(&mCcStts); mCyl.SetTgHitCallback(tgHitCallBack); @@ -420,25 +447,25 @@ void daNpc_Raca_c::setParam() { selectAction(); srchActors(); - s16 talk_distance = daNpc_Raca_Param_c::m.common.talk_distance; - s16 talk_angle = daNpc_Raca_Param_c::m.common.talk_angle; + s16 talk_distance = mpHIO->m.common.talk_distance; + s16 talk_angle = mpHIO->m.common.talk_angle; - attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(daNpc_Raca_Param_c::m.common.attention_distance, daNpc_Raca_Param_c::m.common.attention_angle); + attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(mpHIO->m.common.attention_distance, mpHIO->m.common.attention_angle); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle); attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e; - scale.set(daNpc_Raca_Param_c::m.common.scale, daNpc_Raca_Param_c::m.common.scale, daNpc_Raca_Param_c::m.common.scale); - mCcStts.SetWeight(daNpc_Raca_Param_c::m.common.weight); - mCylH = daNpc_Raca_Param_c::m.common.height; - mWallR = daNpc_Raca_Param_c::m.common.width; - mAttnFovY = daNpc_Raca_Param_c::m.common.fov; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; + mAttnFovY = mpHIO->m.common.fov; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_Raca_Param_c::m.common.knee_length); - mRealShadowSize = daNpc_Raca_Param_c::m.common.real_shadow_size; - gravity = daNpc_Raca_Param_c::m.common.gravity; - mExpressionMorfFrame = daNpc_Raca_Param_c::m.common.expression_morf_frame; - mMorfFrames = daNpc_Raca_Param_c::m.common.morf_frame; + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mRealShadowSize = mpHIO->m.common.real_shadow_size; + gravity = mpHIO->m.common.gravity; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; } void daNpc_Raca_c::setAfterTalkMotion() { @@ -544,11 +571,11 @@ void daNpc_Raca_c::setAttnPos() { J3DModel* model = mpMorf[0]->getModel(); mJntAnm.setParam(this, model, &sp38, getBackboneJointNo(), getNeckJointNo(), getHeadJointNo(), - daNpc_Raca_Param_c::m.common.body_angleX_min, daNpc_Raca_Param_c::m.common.body_angleX_max, - daNpc_Raca_Param_c::m.common.body_angleY_min, daNpc_Raca_Param_c::m.common.body_angleY_max, - daNpc_Raca_Param_c::m.common.head_angleX_min, daNpc_Raca_Param_c::m.common.head_angleX_max, - daNpc_Raca_Param_c::m.common.head_angleY_min, daNpc_Raca_Param_c::m.common.head_angleY_max, - daNpc_Raca_Param_c::m.common.neck_rotation_ratio, fVar1, NULL); + mpHIO->m.common.body_angleX_min, mpHIO->m.common.body_angleX_max, + mpHIO->m.common.body_angleY_min, mpHIO->m.common.body_angleY_max, + mpHIO->m.common.head_angleX_min, mpHIO->m.common.head_angleX_max, + mpHIO->m.common.head_angleY_min, mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, fVar1, NULL); mJntAnm.calcJntRad(0.2f, 1.0f, fVar1); setMtx(); @@ -558,7 +585,7 @@ void daNpc_Raca_c::setAttnPos() { mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, TRUE, 1.0f, 0); attention_info.position = current.pos; - attention_info.position.y += daNpc_Raca_Param_c::m.common.attention_offset; + attention_info.position.y += mpHIO->m.common.attention_offset; setFootPos(); } @@ -815,8 +842,6 @@ static int daNpc_Raca_IsDelete(void* a_this) { return 1; } -static daNpc_Raca_Param_c l_HIO; - static actor_method_class daNpc_Raca_MethodTable = { (process_method_func)daNpc_Raca_Create, (process_method_func)daNpc_Raca_Delete, diff --git a/src/d/actor/d_a_npc_saru.cpp b/src/d/actor/d_a_npc_saru.cpp index dc0dddaf08..b7e9a2b835 100644 --- a/src/d/actor/d_a_npc_saru.cpp +++ b/src/d/actor/d_a_npc_saru.cpp @@ -227,14 +227,6 @@ daNpc_Saru_c::cutFunc daNpc_Saru_c::mCutList[4] = { &daNpc_Saru_c::cutYmLook, }; -daNpc_Saru_c::~daNpc_Saru_c() { - if (mpMorf[0] != NULL) { - mpMorf[0]->stopZelAnime(); - } - - deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); -} - daNpc_Saru_HIOParam const daNpc_Saru_Param_c::m = { 140.0f, -3.0f, @@ -278,9 +270,38 @@ daNpc_Saru_HIOParam const daNpc_Saru_Param_c::m = { 20.0f, 100.0f, 180, - 0, }; +static NPC_SARU_HIO_CLASS l_HIO; + +#if DEBUG +daNpc_Saru_HIO_c::daNpc_Saru_HIO_c() { + m = daNpc_Saru_Param_c::m; +} + +void daNpc_Saru_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_Saru_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpc_Saru_c::~daNpc_Saru_c() { + if (mpMorf[0] != NULL) { + mpMorf[0]->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + + deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); +} + int daNpc_Saru_c::create() { static int const heapSize[4] = { 14480, 14480, 14464, 0, @@ -313,13 +334,14 @@ int daNpc_Saru_c::create() { fopAcM_setCullSizeBox(this, -200.0f, -100.0f, -200.0f, 200.0f, 300.0f, 200.0f); mSound.init(¤t.pos, &eyePos, 3, 1); #if DEBUG - field_0xe90->entryHIO("サル"); // Monkey + mpHIO = &l_HIO; + mpHIO->entryHIO("サル"); // Monkey #endif reset(); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_Saru_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); field_0xe4c.Set(mCcDCyl); field_0xe4c.SetStts(&mCcStts); field_0xe4c.SetTgHitCallback(tgHitCallBack); @@ -518,10 +540,10 @@ void daNpc_Saru_c::setParam() { srchActors(); u32 uVar1 = (fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e); - s16 sVar1 = daNpc_Saru_Param_c::m.common.talk_distance; - s16 sVar2 = daNpc_Saru_Param_c::m.common.talk_angle; - s16 sVar3 = daNpc_Saru_Param_c::m.common.attention_distance; - s16 sVar4 = daNpc_Saru_Param_c::m.common.attention_angle; + s16 sVar1 = mpHIO->m.common.talk_distance; + s16 sVar2 = mpHIO->m.common.talk_angle; + s16 sVar3 = mpHIO->m.common.attention_distance; + s16 sVar4 = mpHIO->m.common.attention_angle; attention_info.distances[0] = daNpcT_getDistTableIdx(sVar3, sVar4); attention_info.distances[1] = attention_info.distances[0]; @@ -533,22 +555,22 @@ void daNpc_Saru_c::setParam() { attention_info.flags = uVar1; - scale.set(daNpc_Saru_Param_c::m.common.scale, daNpc_Saru_Param_c::m.common.scale, daNpc_Saru_Param_c::m.common.scale); + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); if (mType != 0) { scale.setall(0.8f); } - mCcStts.SetWeight(daNpc_Saru_Param_c::m.common.weight); - mCylH = daNpc_Saru_Param_c::m.common.height; - mWallR = daNpc_Saru_Param_c::m.common.width; - mAttnFovY = daNpc_Saru_Param_c::m.common.fov; + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; + mAttnFovY = mpHIO->m.common.fov; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_Saru_Param_c::m.common.knee_length); - mRealShadowSize = daNpc_Saru_Param_c::m.common.real_shadow_size; - mExpressionMorfFrame = daNpc_Saru_Param_c::m.common.expression_morf_frame; - mMorfFrames = daNpc_Saru_Param_c::m.common.morf_frame; - gravity = daNpc_Saru_Param_c::m.common.gravity; + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mRealShadowSize = mpHIO->m.common.real_shadow_size; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; + gravity = mpHIO->m.common.gravity; } void daNpc_Saru_c::setAfterTalkMotion() { @@ -645,11 +667,11 @@ void daNpc_Saru_c::setAttnPos() { mStagger.calc(FALSE); f32 fVar1 = cM_s2rad(mCurAngle.y - field_0xd7e.y); mJntAnm.setParam(this, mpMorf[0]->getModel(), &sp3c, getBackboneJointNo(), getNeckJointNo(), - getHeadJointNo(), daNpc_Saru_Param_c::m.common.body_angleX_min, daNpc_Saru_Param_c::m.common.body_angleX_max, - daNpc_Saru_Param_c::m.common.body_angleY_min, daNpc_Saru_Param_c::m.common.body_angleY_max, - daNpc_Saru_Param_c::m.common.head_angleX_min, daNpc_Saru_Param_c::m.common.head_angleX_max, - daNpc_Saru_Param_c::m.common.head_angleY_min, daNpc_Saru_Param_c::m.common.head_angleY_max, - daNpc_Saru_Param_c::m.common.neck_rotation_ratio, fVar1, NULL); + getHeadJointNo(), mpHIO->m.common.body_angleX_min, mpHIO->m.common.body_angleX_max, + mpHIO->m.common.body_angleY_min, mpHIO->m.common.body_angleY_max, + mpHIO->m.common.head_angleX_min, mpHIO->m.common.head_angleX_max, + mpHIO->m.common.head_angleY_min, mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, fVar1, NULL); mJntAnm.calcJntRad(0.2f, 1.0f, fVar1); setMtx(); @@ -663,7 +685,7 @@ void daNpc_Saru_c::setAttnPos() { mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, 0, 1.0f, 0); sp3c.set(0.0f, 0.0f, 60.0f); - sp3c.y = daNpc_Saru_Param_c::m.common.attention_offset; + sp3c.y = mpHIO->m.common.attention_offset; mDoMtx_stack_c::YrotS(mCurAngle.y); mDoMtx_stack_c::multVec(&sp3c, &sp3c); attention_info.position = sp3c + current.pos; @@ -1200,8 +1222,6 @@ static int daNpc_Saru_IsDelete(void* param_1) { return 1; } -static daNpc_Saru_Param_c l_HIO; - static actor_method_class daNpc_Saru_MethodTable = { (process_method_func)daNpc_Saru_Create, (process_method_func)daNpc_Saru_Delete, diff --git a/src/d/actor/d_a_npc_seib.cpp b/src/d/actor/d_a_npc_seib.cpp index 129ae3fb7e..525a3566b8 100644 --- a/src/d/actor/d_a_npc_seib.cpp +++ b/src/d/actor/d_a_npc_seib.cpp @@ -51,15 +51,7 @@ daNpc_seiB_c::cutFunc daNpc_seiB_c::mCutList[1] = { 0, }; -daNpc_seiB_c::~daNpc_seiB_c() { - if (heap != NULL) { - mpMorf[0]->stopZelAnime(); - } - - deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); -} - -daNpc_seiB_Param_c::Data const daNpc_seiB_Param_c::m = { +daNpc_seiB_HIOParam const daNpc_seiB_Param_c::m = { 0.0f, 0.0f, 1.0f, @@ -78,16 +70,22 @@ daNpc_seiB_Param_c::Data const daNpc_seiB_Param_c::m = { 0.0f, 0.0f, 0.0f, + 0, + 0, + 0, + 0, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, - 0.0f, - 0.0f, - 0.0f, - 0.0f, - 0.0f, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, 0.0f, 0.0f, 0.0f, @@ -99,6 +97,36 @@ daNpc_seiB_Param_c::Data const daNpc_seiB_Param_c::m = { 1200.0f, }; +static NPC_SEIB_HIO_CLASS l_HIO; + +#if DEBUG +daNpc_seiB_HIO_c::daNpc_seiB_HIO_c() { + m = daNpc_seiB_Param_c::m; +} + +void daNpc_seiB_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_seiB_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpc_seiB_c::~daNpc_seiB_c() { + if (heap != NULL) { + mpMorf[0]->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + + deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); +} + int daNpc_seiB_c::create() { daNpcT_ct(this, daNpc_seiB_c, &l_faceMotionAnmData, l_motionAnmData, l_faceMotionSequenceData, 4, l_motionSequenceData, 4, l_evtList, @@ -124,6 +152,12 @@ int daNpc_seiB_c::create() { fopAcM_SetMtx(this, mpMorf[0]->getModel()->getBaseTRMtx()); mSound.init(¤t.pos, &eyePos, 3, 1); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("光の精霊b"); +#endif + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mAcch.CrrPos(dComIfG_Bgsp()); @@ -132,7 +166,7 @@ int daNpc_seiB_c::create() { setEnvTevColor(); setRoomNo(); - mCcStts.Init(mpParam->m.mWeight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); reset(); mCreating = true; Execute(); @@ -227,27 +261,27 @@ void daNpc_seiB_c::setParam() { selectAction(); srchActors(); - dComIfGp_getAttention()->getDistTable(0x28).mDistMax = mpParam->m.mDist; - dComIfGp_getAttention()->getDistTable(0x28).mDistMaxRelease = mpParam->m.mDist; - dComIfGp_getAttention()->getDistTable(0x27).mDistMax = mpParam->m.mDist; - dComIfGp_getAttention()->getDistTable(0x27).mDistMaxRelease = mpParam->m.mDist; + dComIfGp_getAttention()->getDistTable(0x28).mDistMax = mpHIO->m.mDist; + dComIfGp_getAttention()->getDistTable(0x28).mDistMaxRelease = mpHIO->m.mDist; + dComIfGp_getAttention()->getDistTable(0x27).mDistMax = mpHIO->m.mDist; + dComIfGp_getAttention()->getDistTable(0x27).mDistMaxRelease = mpHIO->m.mDist; attention_info.distances[0] = 39; attention_info.distances[1] = 39; attention_info.distances[3] = 39; attention_info.flags = 0; - scale.set(mpParam->m.mScale, mpParam->m.mScale, mpParam->m.mScale); - mCcStts.SetWeight(mpParam->m.mWeight); - mCylH = mpParam->m.mCylH; - mWallR = mpParam->m.mWallR; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(mpParam->m.mWallH); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); - mRealShadowSize = mpParam->m.field_0xc; - gravity = mpParam->m.mGravity; - mExpressionMorfFrame = mpParam->m.field_0x6c; - mMorfFrames = mpParam->m.mMorfFrames; + mRealShadowSize = mpHIO->m.common.real_shadow_size; + gravity = mpHIO->m.common.gravity; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; } void daNpc_seiB_c::srchActors() { @@ -523,8 +557,6 @@ static int daNpc_seiB_IsDelete(void* param_1) { return 1; } -static daNpc_seiB_Param_c l_HIO; - static actor_method_class daNpc_seiB_MethodTable = { (process_method_func)daNpc_seiB_Create, (process_method_func)daNpc_seiB_Delete, (process_method_func)daNpc_seiB_Execute, (process_method_func)daNpc_seiB_IsDelete, diff --git a/src/d/actor/d_a_npc_seic.cpp b/src/d/actor/d_a_npc_seic.cpp index 1fca422939..d9f79b3d5f 100644 --- a/src/d/actor/d_a_npc_seic.cpp +++ b/src/d/actor/d_a_npc_seic.cpp @@ -54,22 +54,6 @@ daNpc_seiC_c::cutFunc daNpc_seiC_c::mCutList[1] = { 0 }; -daNpc_seiC_c::~daNpc_seiC_c() { - OS_REPORT("|%06d:%x|daNpc_seiC_c -> デストラクト\n", g_Counter.mCounter0, this); - - if (heap != NULL) { - mpMorf[0]->stopZelAnime(); - } - - #if DEBUG - if (field_0xe40 != NULL) { - field_0xe40->removeHIO(); - } - #endif - - deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); -} - daNpc_seiC_HIOParam const daNpc_seiC_Param_c::m = { 0.0f, 0.0f, @@ -89,15 +73,21 @@ daNpc_seiC_HIOParam const daNpc_seiC_Param_c::m = { 0.0f, 0.0f, 0.0f, + 0, + 0, + 0, + 0, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, - 0.0f, - 0.0f, - 0.0f, - 0.0f, + 0, + 0, + 0, + 0, + 0, + 0, + 0, 0.0f, 0.0f, 0.0f, @@ -110,7 +100,37 @@ daNpc_seiC_HIOParam const daNpc_seiC_Param_c::m = { 1200.0f, }; -static daNpc_seiC_Param_c l_HIO; +static NPC_SEIC_HIO_CLASS l_HIO; + +#if DEBUG +daNpc_seiC_HIO_c::daNpc_seiC_HIO_c() { + m = daNpc_seiC_Param_c::m; +} + +void daNpc_seiC_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_seiC_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpc_seiC_c::~daNpc_seiC_c() { + OS_REPORT("|%06d:%x|daNpc_seiC_c -> デストラクト\n", g_Counter.mCounter0, this); + + if (heap != NULL) { + mpMorf[0]->stopZelAnime(); + } + + #if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } + #endif + + deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); +} int daNpc_seiC_c::create() { daNpcT_ct(this, daNpc_seiC_c, &l_faceMotionAnmData, &l_motionAnmData, l_faceMotionSequenceData, @@ -138,8 +158,8 @@ int daNpc_seiC_c::create() { mSound.init(¤t.pos, &eyePos, 3, 1); #if DEBUG - //field_0xe40->field_0x8 = &l_HIO; - field_0xe40->entryHIO("光の精霊c"); // Spirit of Light c + mpHIO = &l_HIO; + mpHIO->entryHIO("光の精霊c"); // Spirit of Light c #endif mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, @@ -150,7 +170,7 @@ int daNpc_seiC_c::create() { setEnvTevColor(); setRoomNo(); - mCcStts.Init(daNpc_seiC_Param_c::m.mSttsWeight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); reset(); mCreating = true; @@ -238,7 +258,7 @@ void daNpc_seiC_c::reset() { if (mpMatAnm[0] != NULL) { mpMatAnm[0]->initialize(); } - + setAngle(home.angle.y); mMotionSeqMngr.setNo(0, -1.0f, 0, 0); } @@ -247,27 +267,27 @@ void daNpc_seiC_c::setParam() { selectAction(); srchActors(); - dComIfGp_getAttention()->getDistTable(0x28).mDistMax = daNpc_seiC_Param_c::m.field_0x90; - dComIfGp_getAttention()->getDistTable(0x28).mDistMaxRelease = daNpc_seiC_Param_c::m.field_0x90; + dComIfGp_getAttention()->getDistTable(0x28).mDistMax = mpHIO->m.field_0x90; + dComIfGp_getAttention()->getDistTable(0x28).mDistMaxRelease = mpHIO->m.field_0x90; - dComIfGp_getAttention()->getDistTable(0x27).mDistMax = daNpc_seiC_Param_c::m.field_0x90; - dComIfGp_getAttention()->getDistTable(0x27).mDistMaxRelease = daNpc_seiC_Param_c::m.field_0x90; + dComIfGp_getAttention()->getDistTable(0x27).mDistMax = mpHIO->m.field_0x90; + dComIfGp_getAttention()->getDistTable(0x27).mDistMaxRelease = mpHIO->m.field_0x90; attention_info.distances[0] = 39; attention_info.distances[1] = 39; attention_info.distances[3] = 39; attention_info.flags = 0; - scale.set(daNpc_seiC_Param_c::m.mScale, daNpc_seiC_Param_c::m.mScale, daNpc_seiC_Param_c::m.mScale); - mCcStts.SetWeight(daNpc_seiC_Param_c::m.mSttsWeight); - mCylH = daNpc_seiC_Param_c::m.mCylH; - mWallR = daNpc_seiC_Param_c::m.mWallR; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_seiC_Param_c::m.mWallH); - mRealShadowSize = daNpc_seiC_Param_c::m.field_0x0c; - gravity = daNpc_seiC_Param_c::m.mGravity; - mExpressionMorfFrame = daNpc_seiC_Param_c::m.field_0x6c; - mMorfFrames = daNpc_seiC_Param_c::m.mMorfFrames; + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mRealShadowSize = mpHIO->m.common.real_shadow_size; + gravity = mpHIO->m.common.gravity; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; } void daNpc_seiC_c::srchActors() { diff --git a/src/d/actor/d_a_npc_seid.cpp b/src/d/actor/d_a_npc_seid.cpp index f5ae798253..504fdaa912 100644 --- a/src/d/actor/d_a_npc_seid.cpp +++ b/src/d/actor/d_a_npc_seid.cpp @@ -54,22 +54,6 @@ daNpc_seiD_c::cutFunc daNpc_seiD_c::mCutList[1] = { 0 }; -daNpc_seiD_c::~daNpc_seiD_c() { - OS_REPORT("|%06d:%x|daNpc_seiD_c -> デストラクト\n", g_Counter.mCounter0, this); - - if (heap != NULL) { - mpMorf[0]->stopZelAnime(); - } - - #if DEBUG - if (field_0xe40 != NULL) { - field_0xe40->removeHIO(); - } - #endif - - deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); -} - daNpc_seiD_HIOParam const daNpc_seiD_Param_c::m = { 0.0f, 0.0f, @@ -89,15 +73,21 @@ daNpc_seiD_HIOParam const daNpc_seiD_Param_c::m = { 0.0f, 0.0f, 0.0f, + 0, + 0, + 0, + 0, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, - 0.0f, - 0.0f, - 0.0f, - 0.0f, + 0, + 0, + 0, + 0, + 0, + 0, + 0, 0.0f, 0.0f, 0.0f, @@ -110,7 +100,37 @@ daNpc_seiD_HIOParam const daNpc_seiD_Param_c::m = { 1200.0f, }; -static daNpc_seiD_Param_c l_HIO; +static NPC_SEID_HIO_CLASS l_HIO; + +#if DEBUG +daNpc_seiD_HIO_c::daNpc_seiD_HIO_c() { + m = daNpc_seiD_Param_c::m; +} + +void daNpc_seiD_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_seiD_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpc_seiD_c::~daNpc_seiD_c() { + OS_REPORT("|%06d:%x|daNpc_seiD_c -> デストラクト\n", g_Counter.mCounter0, this); + + if (heap != NULL) { + mpMorf[0]->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + + deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); +} int daNpc_seiD_c::create() { daNpcT_ct(this, daNpc_seiD_c, l_faceMotionAnmData, l_motionAnmData, l_faceMotionSequenceData, @@ -138,8 +158,8 @@ int daNpc_seiD_c::create() { mSound.init(¤t.pos, &eyePos, 3, 1); #if DEBUG - //field_0xe40->field_0x8 = &l_HIO; - field_0xe40->entryHIO("光の精霊d"); // Spirit of Light d + mpHIO = &l_HIO; + mpHIO->entryHIO("光の精霊d"); // Spirit of Light d #endif mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, @@ -150,7 +170,7 @@ int daNpc_seiD_c::create() { setEnvTevColor(); setRoomNo(); - mCcStts.Init(daNpc_seiD_Param_c::m.mSttsWeight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); reset(); mCreating = true; @@ -247,26 +267,26 @@ void daNpc_seiD_c::setParam() { selectAction(); srchActors(); - dComIfGp_getAttention()->getDistTable(0x28).mDistMax = daNpc_seiD_Param_c::m.field_0x90; - dComIfGp_getAttention()->getDistTable(0x28).mDistMaxRelease = daNpc_seiD_Param_c::m.field_0x90; - dComIfGp_getAttention()->getDistTable(0x27).mDistMax = daNpc_seiD_Param_c::m.field_0x90; - dComIfGp_getAttention()->getDistTable(0x27).mDistMaxRelease = daNpc_seiD_Param_c::m.field_0x90; + dComIfGp_getAttention()->getDistTable(0x28).mDistMax = mpHIO->m.field_0x90; + dComIfGp_getAttention()->getDistTable(0x28).mDistMaxRelease = mpHIO->m.field_0x90; + dComIfGp_getAttention()->getDistTable(0x27).mDistMax = mpHIO->m.field_0x90; + dComIfGp_getAttention()->getDistTable(0x27).mDistMaxRelease = mpHIO->m.field_0x90; attention_info.distances[0] = 39; attention_info.distances[1] = 39; attention_info.distances[3] = 39; attention_info.flags = 0; - scale.set(daNpc_seiD_Param_c::m.mScale, daNpc_seiD_Param_c::m.mScale, daNpc_seiD_Param_c::m.mScale); - mCcStts.SetWeight(daNpc_seiD_Param_c::m.mSttsWeight); - mCylH = daNpc_seiD_Param_c::m.mCylH; - mWallR = daNpc_seiD_Param_c::m.mWallR; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_seiD_Param_c::m.mWallH); - mRealShadowSize = daNpc_seiD_Param_c::m.field_0x0c; - gravity = daNpc_seiD_Param_c::m.mGravity; - mExpressionMorfFrame = daNpc_seiD_Param_c::m.field_0x6c; - mMorfFrames = daNpc_seiD_Param_c::m.mMorfFrames; + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mRealShadowSize = mpHIO->m.common.real_shadow_size; + gravity = mpHIO->m.common.gravity; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; } void daNpc_seiD_c::srchActors() { diff --git a/src/d/actor/d_a_npc_seira.cpp b/src/d/actor/d_a_npc_seira.cpp index 81e3f10ed3..a0ec617f87 100644 --- a/src/d/actor/d_a_npc_seira.cpp +++ b/src/d/actor/d_a_npc_seira.cpp @@ -120,20 +120,7 @@ daNpc_Seira_c::cutFunc daNpc_Seira_c::mCutList[2] = { &daNpc_Seira_c::cutConversationAboutSaru, }; -static daNpc_Seira_Param_c l_HIO; - -daNpc_Seira_c::~daNpc_Seira_c() { - deleteObject(); - if (mpMorf[0] != 0) { - mpMorf[0]->stopZelAnime(); - } - - if (mpSeiraMorf != NULL) { - mpSeiraMorf->stopZelAnime(); - } - - deleteRes(l_loadResPtrnList[mType], (char const**)l_resNameList); -} +static NPC_SEIRA_HIO_CLASS l_HIO; const daNpc_Seira_HIOParam daNpc_Seira_Param_c::m = { 210.0f, @@ -179,6 +166,39 @@ const daNpc_Seira_HIOParam daNpc_Seira_Param_c::m = { 0.0f, }; +#if DEBUG +daNpc_Seira_HIO_c::daNpc_Seira_HIO_c() { + m = daNpc_Seira_Param_c::m; +} + +void daNpc_Seira_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_Seira_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpc_Seira_c::~daNpc_Seira_c() { + deleteObject(); + if (mpMorf[0] != 0) { + mpMorf[0]->stopZelAnime(); + } + + if (mpSeiraMorf != NULL) { + mpSeiraMorf->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + + deleteRes(l_loadResPtrnList[mType], (char const**)l_resNameList); +} + int daNpc_Seira_c::create() { daNpcT_ct(this, daNpc_Seira_c, l_faceMotionAnmData, l_motionAnmData, l_faceMotionSequenceData, 4, l_motionSequenceData, 4, @@ -206,6 +226,12 @@ int daNpc_Seira_c::create() { fopAcM_SetMtx(this, mpMorf[0]->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -300.0f, -50.0f, -300.0f, 300.0f, 450.0f, 300.0f); mSound.init(¤t.pos, &eyePos, 3, 1); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("セ-ラ"); +#endif + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); @@ -214,7 +240,7 @@ int daNpc_Seira_c::create() { mGroundH = mAcch.GetGroundH(); setEnvTevColor(); setRoomNo(); - mCcStts.Init(daNpc_Seira_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl1.Set(mCcDCyl); mCyl1.SetStts(&mCcStts); mCyl1.SetTgHitCallback(tgHitCallBack); @@ -445,10 +471,10 @@ void daNpc_Seira_c::setParam() { srchActors(); u32 att_flags = (fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e); - s16 talk_dist = daNpc_Seira_Param_c::m.common.talk_distance; - s16 talk_ang = daNpc_Seira_Param_c::m.common.talk_angle; - s16 att_dist = daNpc_Seira_Param_c::m.common.attention_distance; - s16 att_ang = daNpc_Seira_Param_c::m.common.attention_angle; + s16 talk_dist = mpHIO->m.common.talk_distance; + s16 talk_ang = mpHIO->m.common.talk_angle; + s16 att_dist = mpHIO->m.common.attention_distance; + s16 att_ang = mpHIO->m.common.attention_angle; if (checkStageIsSeirasShop()) { talk_dist = 4; @@ -463,19 +489,19 @@ void daNpc_Seira_c::setParam() { attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_dist, talk_ang); attention_info.flags = att_flags; - scale.set(daNpc_Seira_Param_c::m.common.scale, daNpc_Seira_Param_c::m.common.scale, - daNpc_Seira_Param_c::m.common.scale); - mCcStts.SetWeight(daNpc_Seira_Param_c::m.common.weight); - mCylH = daNpc_Seira_Param_c::m.common.height; - mWallR = daNpc_Seira_Param_c::m.common.width; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, + mpHIO->m.common.scale); + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_Seira_Param_c::m.common.knee_length); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); - mRealShadowSize = daNpc_Seira_Param_c::m.common.real_shadow_size; - gravity = daNpc_Seira_Param_c::m.common.gravity; - mExpressionMorfFrame = daNpc_Seira_Param_c::m.common.expression_morf_frame; - mMorfFrames = daNpc_Seira_Param_c::m.common.morf_frame; + mRealShadowSize = mpHIO->m.common.real_shadow_size; + gravity = mpHIO->m.common.gravity; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; } BOOL daNpc_Seira_c::checkChangeEvt() { @@ -630,11 +656,11 @@ void daNpc_Seira_c::setAttnPos() { mStagger.calc(0); mJntAnm.setParam( this, mpMorf[0]->getModel(), &eyeOffset, getBackboneJointNo(), getNeckJointNo(), getHeadJointNo(), - daNpc_Seira_Param_c::m.common.body_angleX_min, daNpc_Seira_Param_c::m.common.body_angleX_max, - daNpc_Seira_Param_c::m.common.body_angleY_min, daNpc_Seira_Param_c::m.common.body_angleY_max, - daNpc_Seira_Param_c::m.common.head_angleX_min, daNpc_Seira_Param_c::m.common.head_angleX_max, - daNpc_Seira_Param_c::m.common.head_angleY_min, daNpc_Seira_Param_c::m.common.head_angleY_max, - daNpc_Seira_Param_c::m.common.neck_rotation_ratio, 0.0f, NULL); + mpHIO->m.common.body_angleX_min, mpHIO->m.common.body_angleX_max, + mpHIO->m.common.body_angleY_min, mpHIO->m.common.body_angleY_max, + mpHIO->m.common.head_angleX_min, mpHIO->m.common.head_angleX_max, + mpHIO->m.common.head_angleY_min, mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, 0.0f, NULL); f32 rad_val = cM_s2rad(mCurAngle.y - field_0xd7e.y); mJntAnm.calcJntRad(0.2f, 1.0f, rad_val); @@ -662,7 +688,7 @@ void daNpc_Seira_c::setAttnPos() { mDoMtx_stack_c::multVec(&eyeOffset, &attention_info.position); } else { attention_info.position = current.pos; - attention_info.position.y += daNpc_Seira_Param_c::m.common.attention_offset; + attention_info.position.y += mpHIO->m.common.attention_offset; } } diff --git a/src/d/actor/d_a_npc_seira2.cpp b/src/d/actor/d_a_npc_seira2.cpp index b02408954e..7f79648d9a 100644 --- a/src/d/actor/d_a_npc_seira2.cpp +++ b/src/d/actor/d_a_npc_seira2.cpp @@ -106,20 +106,7 @@ char* daNpc_Seira2_c::mCutNameList[1] = {""}; daNpc_Seira2_c::cutFunc daNpc_Seira2_c::mCutList[1] = { NULL }; -static daNpc_Seira2_Param_c l_HIO; - -daNpc_Seira2_c::~daNpc_Seira2_c() { - deleteObject(); - if (mpMorf[0] != 0) { - mpMorf[0]->stopZelAnime(); - } - - if (mpSeiraMorf != NULL) { - mpSeiraMorf->stopZelAnime(); - } - - deleteRes(l_loadResPtrnList[mType], (char const**)l_resNameList); -} +static NPC_SEIRA2_HIO_CLASS l_HIO; const daNpc_Seira2_HIOParam daNpc_Seira2_Param_c::m = { 210.0f, @@ -165,6 +152,39 @@ const daNpc_Seira2_HIOParam daNpc_Seira2_Param_c::m = { 0.0f, }; +#if DEBUG +daNpc_Seira2_HIO_c::daNpc_Seira2_HIO_c() { + m = daNpc_Seira2_Param_c::m; +} + +void daNpc_Seira2_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_Seira2_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpc_Seira2_c::~daNpc_Seira2_c() { + deleteObject(); + if (mpMorf[0] != 0) { + mpMorf[0]->stopZelAnime(); + } + + if (mpSeiraMorf != NULL) { + mpSeiraMorf->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + + deleteRes(l_loadResPtrnList[mType], (char const**)l_resNameList); +} + int daNpc_Seira2_c::create() { daNpcT_ct(this, daNpc_Seira2_c, l_faceMotionAnmData, l_motionAnmData, l_faceMotionSequenceData, 4, l_motionSequenceData, 4, @@ -191,6 +211,12 @@ int daNpc_Seira2_c::create() { fopAcM_SetMtx(this, mpMorf[0]->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -300.0f, -50.0f, -300.0f, 300.0f, 450.0f, 300.0f); mSound.init(¤t.pos, &eyePos, 3, 1); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("セ-ラ2"); +#endif + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); @@ -199,7 +225,7 @@ int daNpc_Seira2_c::create() { mGroundH = mAcch.GetGroundH(); setEnvTevColor(); setRoomNo(); - mCcStts.Init(daNpc_Seira2_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl1.Set(mCcDCyl); mCyl1.SetStts(&mCcStts); mCyl1.SetTgHitCallback(tgHitCallBack); @@ -398,10 +424,10 @@ void daNpc_Seira2_c::setParam() { srchActors(); u32 att_flags = (fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e); - s16 talk_dist = daNpc_Seira2_Param_c::m.common.talk_distance; - s16 talk_ang = daNpc_Seira2_Param_c::m.common.talk_angle; - s16 att_dist = daNpc_Seira2_Param_c::m.common.attention_distance; - s16 att_ang = daNpc_Seira2_Param_c::m.common.attention_angle; + s16 talk_dist = mpHIO->m.common.talk_distance; + s16 talk_ang = mpHIO->m.common.talk_angle; + s16 att_dist = mpHIO->m.common.attention_distance; + s16 att_ang = mpHIO->m.common.attention_angle; if (checkStageIsSeira2sShop()) { talk_dist = 4; @@ -413,19 +439,19 @@ void daNpc_Seira2_c::setParam() { attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_dist, talk_ang); attention_info.flags = att_flags; - scale.set(daNpc_Seira2_Param_c::m.common.scale, daNpc_Seira2_Param_c::m.common.scale, - daNpc_Seira2_Param_c::m.common.scale); - mCcStts.SetWeight(daNpc_Seira2_Param_c::m.common.weight); - mCylH = daNpc_Seira2_Param_c::m.common.height; - mWallR = daNpc_Seira2_Param_c::m.common.width; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, + mpHIO->m.common.scale); + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_Seira2_Param_c::m.common.knee_length); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); - mRealShadowSize = daNpc_Seira2_Param_c::m.common.real_shadow_size; - gravity = daNpc_Seira2_Param_c::m.common.gravity; - mExpressionMorfFrame = daNpc_Seira2_Param_c::m.common.expression_morf_frame; - mMorfFrames = daNpc_Seira2_Param_c::m.common.morf_frame; + mRealShadowSize = mpHIO->m.common.real_shadow_size; + gravity = mpHIO->m.common.gravity; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; } void daNpc_Seira2_c::setAfterTalkMotion() { @@ -539,11 +565,11 @@ void daNpc_Seira2_c::setAttnPos() { mStagger.calc(0); mJntAnm.setParam( this, mpMorf[0]->getModel(), &eyeOffset, getBackboneJointNo(), getNeckJointNo(), getHeadJointNo(), - daNpc_Seira2_Param_c::m.common.body_angleX_min, daNpc_Seira2_Param_c::m.common.body_angleX_max, - daNpc_Seira2_Param_c::m.common.body_angleY_min, daNpc_Seira2_Param_c::m.common.body_angleY_max, - daNpc_Seira2_Param_c::m.common.head_angleX_min, daNpc_Seira2_Param_c::m.common.head_angleX_max, - daNpc_Seira2_Param_c::m.common.head_angleY_min, daNpc_Seira2_Param_c::m.common.head_angleY_max, - daNpc_Seira2_Param_c::m.common.neck_rotation_ratio, 0.0f, NULL); + mpHIO->m.common.body_angleX_min, mpHIO->m.common.body_angleX_max, + mpHIO->m.common.body_angleY_min, mpHIO->m.common.body_angleY_max, + mpHIO->m.common.head_angleX_min, mpHIO->m.common.head_angleX_max, + mpHIO->m.common.head_angleY_min, mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, 0.0f, NULL); f32 rad_val = cM_s2rad(mCurAngle.y - field_0xd7e.y); mJntAnm.calcJntRad(0.2f, 1.0f, rad_val); @@ -571,7 +597,7 @@ void daNpc_Seira2_c::setAttnPos() { mDoMtx_stack_c::multVec(&eyeOffset, &attention_info.position); } else { attention_info.position = current.pos; - attention_info.position.y += daNpc_Seira2_Param_c::m.common.attention_offset; + attention_info.position.y += mpHIO->m.common.attention_offset; } } diff --git a/src/d/actor/d_a_npc_seirei.cpp b/src/d/actor/d_a_npc_seirei.cpp index d9984b9047..ff4cece557 100644 --- a/src/d/actor/d_a_npc_seirei.cpp +++ b/src/d/actor/d_a_npc_seirei.cpp @@ -150,14 +150,6 @@ daNpc_Seirei_c::cutFunc daNpc_Seirei_c::mCutList[2] = { &daNpc_Seirei_c::cutConversation, }; -daNpc_Seirei_c::~daNpc_Seirei_c() { - if (mpMorf[0] != NULL) { - mpMorf[0]->stopZelAnime(); - } - - deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); -} - daNpc_Seirei_HIOParam const daNpc_Seirei_Param_c::m = { 600.0f, 0.0f, @@ -204,6 +196,36 @@ daNpc_Seirei_HIOParam const daNpc_Seirei_Param_c::m = { 1200.0f, }; +static NPC_SEIREI_HIO_CLASS l_HIO; + +#if DEBUG +daNpc_Seirei_HIO_c::daNpc_Seirei_HIO_c() { + m = daNpc_Seirei_Param_c::m; +} + +void daNpc_Seirei_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_Seirei_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpc_Seirei_c::~daNpc_Seirei_c() { + if (mpMorf[0] != NULL) { + mpMorf[0]->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + + deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); +} + cPhs__Step daNpc_Seirei_c::create() { daNpcT_ct(this, daNpc_Seirei_c, l_faceMotionAnmData, l_motionAnmData, l_faceMotionSequenceData, 4, l_motionSequenceData, 4, l_evtList, l_resNameList); @@ -235,9 +257,14 @@ cPhs__Step daNpc_Seirei_c::create() { mSound.init(¤t.pos, &eyePos, 3, 1); } +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("光の精霊a"); +#endif + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_Seirei_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mAcch.CrrPos(dComIfG_Bgsp()); mGndChk = mAcch.m_gnd; mGroundH = mAcch.GetGroundH(); @@ -362,10 +389,10 @@ void daNpc_Seirei_c::setParam() { srchActors(); dComIfGp_getAttention(); - dComIfGp_getAttention()->getDistTable(0x28).mDistMax = daNpc_Seirei_Param_c::m.talk_dist; - dComIfGp_getAttention()->getDistTable(0x28).mDistMaxRelease = daNpc_Seirei_Param_c::m.talk_dist; - dComIfGp_getAttention()->getDistTable(0x27).mDistMax = daNpc_Seirei_Param_c::m.talk_dist; - dComIfGp_getAttention()->getDistTable(0x27).mDistMaxRelease = daNpc_Seirei_Param_c::m.talk_dist; + dComIfGp_getAttention()->getDistTable(0x28).mDistMax = mpHIO->m.talk_dist; + dComIfGp_getAttention()->getDistTable(0x28).mDistMaxRelease = mpHIO->m.talk_dist; + dComIfGp_getAttention()->getDistTable(0x27).mDistMax = mpHIO->m.talk_dist; + dComIfGp_getAttention()->getDistTable(0x27).mDistMaxRelease = mpHIO->m.talk_dist; attention_info.distances[fopAc_attn_LOCK_e] = 39; attention_info.distances[fopAc_attn_TALK_e] = 39; @@ -377,16 +404,16 @@ void daNpc_Seirei_c::setParam() { attention_info.flags = 0; } - mCcStts.SetWeight(daNpc_Seirei_Param_c::m.common.weight); - mCylH = daNpc_Seirei_Param_c::m.common.height; - mWallR = daNpc_Seirei_Param_c::m.common.width; - mAttnFovY = daNpc_Seirei_Param_c::m.common.fov; + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; + mAttnFovY = mpHIO->m.common.fov; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_Seirei_Param_c::m.common.knee_length); - mRealShadowSize = daNpc_Seirei_Param_c::m.common.real_shadow_size; - mExpressionMorfFrame = daNpc_Seirei_Param_c::m.common.expression_morf_frame; - mMorfFrames = daNpc_Seirei_Param_c::m.common.morf_frame; - gravity = daNpc_Seirei_Param_c::m.common.gravity; + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mRealShadowSize = mpHIO->m.common.real_shadow_size; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; + gravity = mpHIO->m.common.gravity; } BOOL daNpc_Seirei_c::checkChangeEvt() { @@ -464,13 +491,13 @@ void daNpc_Seirei_c::setAttnPos() { sp18.set(300.0f, 40.0f, 0.0f); mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(JNT_HEAD)); mDoMtx_stack_c::multVec(&sp18, &eyePos); - sp18.set(0.0f, daNpc_Seirei_Param_c::m.common.attention_offset, 800.0f); + sp18.set(0.0f, mpHIO->m.common.attention_offset, 800.0f); mDoMtx_stack_c::YrotS(mCurAngle.y); mDoMtx_stack_c::multVec(&sp18, &attention_info.position); attention_info.position += current.pos; } else { attention_info.position = current.pos; - attention_info.position.y += daNpc_Seirei_Param_c::m.common.attention_offset - 350.0f; + attention_info.position.y += mpHIO->m.common.attention_offset - 350.0f; eyePos = attention_info.position; } @@ -787,8 +814,6 @@ static int daNpc_Seirei_IsDelete(void* a_this) { return 1; } -static daNpc_Seirei_Param_c l_HIO; - static actor_method_class daNpc_Seirei_MethodTable = { (process_method_func)daNpc_Seirei_Create, (process_method_func)daNpc_Seirei_Delete, diff --git a/src/d/actor/d_a_npc_shad.cpp b/src/d/actor/d_a_npc_shad.cpp index b08ed46f8b..157dffcafa 100644 --- a/src/d/actor/d_a_npc_shad.cpp +++ b/src/d/actor/d_a_npc_shad.cpp @@ -2234,7 +2234,7 @@ BOOL daNpcShad_c::EvCut_Disappear(int i_cutIndex) { setExpression(EXPR_H_SURPRISE, -1.0f); setMotion(MOT_RUN_A, -1.0f, FALSE); mTurnMode = 0; - speedF = daNpcShad_Param_c::m.traveling_speed; + speedF = mpHIO->m.traveling_speed; break; case '0006': diff --git a/src/d/actor/d_a_npc_sola.cpp b/src/d/actor/d_a_npc_sola.cpp index 0a622914ec..a8361e6b7e 100644 --- a/src/d/actor/d_a_npc_sola.cpp +++ b/src/d/actor/d_a_npc_sola.cpp @@ -65,14 +65,6 @@ daNpc_solA_c::cutFunc daNpc_solA_c::mCutList[1] = { NULL, }; -daNpc_solA_c::~daNpc_solA_c() { - if (heap != NULL) { - mpMorf[0]->stopZelAnime(); - } - - deleteRes(l_loadResPtrnList[field_0xf80], (const char**)l_resNameList); -} - daNpc_solA_HIOParam const daNpc_solA_Param_c::m = { 220.0f, -3.0f, 1.0f, 400.0f, 255.0f, 200.0f, 35.0f, 30.0f, 0.0f, 0.0f, 10.0f, -10.0f, 30.0f, -10.0f, 45.0f, -45.0f, 0.6f, 12.0f, 3, 6, 5, 6, @@ -80,6 +72,36 @@ daNpc_solA_HIOParam const daNpc_solA_Param_c::m = { 4.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, }; +static NPC_SOLA_HIO_CLASS l_HIO; + +#if DEBUG +daNpc_solA_HIO_c::daNpc_solA_HIO_c() { + m = daNpc_solA_Param_c::m; +} + +void daNpc_solA_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_solA_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpc_solA_c::~daNpc_solA_c() { + if (heap != NULL) { + mpMorf[0]->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + + deleteRes(l_loadResPtrnList[field_0xf80], (const char**)l_resNameList); +} + int daNpc_solA_c::create() { daNpcT_ct(this, daNpc_solA_c, l_faceMotionAnmData, l_motionAnmData, l_faceMotionSequenceData, 4, l_motionSequenceData, 4, l_evtList, l_resNameList); @@ -101,6 +123,12 @@ int daNpc_solA_c::create() { fopAcM_SetMtx(this, mpMorf[0]->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -300.0f, -50.0f, -300.0f, 300.0f, 450.0f, 300.0f); mSound.init(¤t.pos, &eyePos, 3, 1); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("ハイリア兵"); +#endif + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mAcch.CrrPos(dComIfG_Bgsp()); @@ -109,7 +137,7 @@ int daNpc_solA_c::create() { setEnvTevColor(); setRoomNo(); - mCcStts.Init(daNpc_solA_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl.Set(mCcDCyl); mCyl.SetStts(&mCcStts); mCyl.SetTgHitCallback(tgHitCallBack); @@ -170,7 +198,7 @@ void daNpc_solA_c::Draw() { J3DModelData* mdlData_p = mpMorf[0]->getModel()->getModelData(); mdlData_p->getMaterialNodePointer(getEyeballMaterialNo())->setMaterialAnm(mpMatAnm[0]); } - draw(FALSE, FALSE, daNpc_solA_Param_c::m.common.real_shadow_size, NULL, 100.0f, FALSE, FALSE, + draw(FALSE, FALSE, mpHIO->m.common.real_shadow_size, NULL, 100.0f, FALSE, FALSE, FALSE); return; } @@ -224,27 +252,27 @@ void daNpc_solA_c::setParam() { selectAction(); srchActors(); - s16 talk_distance = daNpc_solA_Param_c::m.common.talk_distance; - s16 talk_angle = daNpc_solA_Param_c::m.common.talk_angle; + s16 talk_distance = mpHIO->m.common.talk_distance; + s16 talk_angle = mpHIO->m.common.talk_angle; attention_info.distances[fopAc_attn_LOCK_e] = - daNpcT_getDistTableIdx(daNpc_solA_Param_c::m.common.attention_distance, - daNpc_solA_Param_c::m.common.attention_angle); + daNpcT_getDistTableIdx(mpHIO->m.common.attention_distance, + mpHIO->m.common.attention_angle); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle); attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e; - scale.set(daNpc_solA_Param_c::m.common.scale, daNpc_solA_Param_c::m.common.scale, - daNpc_solA_Param_c::m.common.scale); - mAcchCir.SetWallR(daNpc_solA_Param_c::m.common.width); - mAcchCir.SetWallH(daNpc_solA_Param_c::m.common.knee_length); - mCcStts.SetWeight(daNpc_solA_Param_c::m.common.weight); - mCylH = daNpc_solA_Param_c::m.common.height; - mWallR = daNpc_solA_Param_c::m.common.width; - gravity = daNpc_solA_Param_c::m.common.gravity; - mExpressionMorfFrame = daNpc_solA_Param_c::m.common.expression_morf_frame; - mMorfFrames = daNpc_solA_Param_c::m.common.morf_frame; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, + mpHIO->m.common.scale); + mAcchCir.SetWallR(mpHIO->m.common.width); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; + gravity = mpHIO->m.common.gravity; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; } void daNpc_solA_c::setAfterTalkMotion() { @@ -309,12 +337,12 @@ void daNpc_solA_c::setAttnPos() { cXyz local_38(30.0f, 0.0f, 0.0f); mJntAnm.setParam( this, mpMorf[0]->getModel(), &local_38, getBackboneJointNo(), getNeckJointNo(), - getHeadJointNo(), daNpc_solA_Param_c::m.common.body_angleX_min, - daNpc_solA_Param_c::m.common.body_angleX_max, daNpc_solA_Param_c::m.common.body_angleY_min, - daNpc_solA_Param_c::m.common.body_angleY_max, daNpc_solA_Param_c::m.common.head_angleX_min, - daNpc_solA_Param_c::m.common.head_angleX_max, daNpc_solA_Param_c::m.common.head_angleY_min, - daNpc_solA_Param_c::m.common.head_angleY_max, - daNpc_solA_Param_c::m.common.neck_rotation_ratio, 0.0f, NULL); + getHeadJointNo(), mpHIO->m.common.body_angleX_min, + mpHIO->m.common.body_angleX_max, mpHIO->m.common.body_angleY_min, + mpHIO->m.common.body_angleY_max, mpHIO->m.common.head_angleX_min, + mpHIO->m.common.head_angleX_max, mpHIO->m.common.head_angleY_min, + mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, 0.0f, NULL); f32 fVar1 = cM_s2rad(mCurAngle.y - field_0xd7e.y); mJntAnm.calcJntRad(0.2f, 1.0f, fVar1); @@ -325,7 +353,7 @@ void daNpc_solA_c::setAttnPos() { mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, FALSE, 1.0f, 0); attention_info.position = current.pos; - attention_info.position.y += daNpc_solA_Param_c::m.common.attention_offset; + attention_info.position.y += mpHIO->m.common.attention_offset; } void daNpc_solA_c::setCollision() { @@ -335,8 +363,8 @@ void daNpc_solA_c::setCollision() { mCyl.SetCoSPrm(prm); pos = current.pos; - f32 height = daNpc_solA_Param_c::m.common.height; - f32 width = daNpc_solA_Param_c::m.common.width; + f32 height = mpHIO->m.common.height; + f32 width = mpHIO->m.common.width; mCyl.SetH(height); mCyl.SetR(width); mCyl.SetC(pos); @@ -460,8 +488,6 @@ static bool daNpc_solA_IsDelete(void* param_0) { return true; } -static daNpc_solA_Param_c l_HIO; - static actor_method_class daNpc_solA_MethodTable = { (process_method_func)daNpc_solA_Create, (process_method_func)daNpc_solA_Delete, (process_method_func)daNpc_solA_Execute, (process_method_func)daNpc_solA_IsDelete, diff --git a/src/d/actor/d_a_npc_taro.cpp b/src/d/actor/d_a_npc_taro.cpp index b4009d49bf..d68fb52e52 100644 --- a/src/d/actor/d_a_npc_taro.cpp +++ b/src/d/actor/d_a_npc_taro.cpp @@ -237,7 +237,27 @@ daNpc_Taro_c::cutFunc daNpc_Taro_c::mCutList[17] = { &daNpc_Taro_c::cutTagPush4, }; -static daNpc_Taro_Param_c l_HIO; +static NPC_TARO_HIO_CLASS l_HIO; + +daNpc_Taro_HIOParam const daNpc_Taro_Param_c::m = { + 140.0f, -3.0f, 1.0f, 400.0f, 255.0f, 120.0f, 35.0f, 30.0f, 0.0f, 0.0f, 10.0f, + -10.0f, 30.0f, -10.0f, 45.0f, -45.0f, 0.6f, 12.0f, 3, 6, 5, 6, + 110.0f, 0.0f, 0.0f, 0.0f, 60, 8, 0, 0, 0, 0, 0, + 4.0f, -15.0f, 0.0f, -10.0f, 15.0f, 30.0f, 10.0f, 55.0f, 120, 90}; + +#if DEBUG +daNpc_Taro_HIO_c::daNpc_Taro_HIO_c() { + m = daNpc_Taro_Param_c::m; +} + +void daNpc_Taro_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_Taro_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif daNpc_Taro_c::~daNpc_Taro_c() { OS_REPORT("|%06d:%x|daNpc_Taro_c -> デストラクト\n", g_Counter.mCounter0, this); @@ -245,21 +265,15 @@ daNpc_Taro_c::~daNpc_Taro_c() { mpMorf[0]->stopZelAnime(); } - #if DEBUG - if (field_0xe40 != NULL) { - field_0xe40->removeHIO(); +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); } - #endif +#endif deleteRes((l_loadResPtrnList)[mType], (const char**)l_resNameList); } -daNpc_Taro_HIOParam const daNpc_Taro_Param_c::m = { - 140.0f, -3.0f, 1.0f, 400.0f, 255.0f, 120.0f, 35.0f, 30.0f, 0.0f, 0.0f, - 10.0f, -10.0f, 30.0f, -10.0f, 45.0f, -45.0f, 0.6f, 12.0f, 3, 6, - 5, 6, 110.0f, 0.0f, 0.0f, 0.0f, 60, 8, 0.0f, 0.0f, - 4.0f, -15.0f, 0.0f, -10.0f, 15.0f, 30.0f, 10.0f, 55.0f, 120, 90}; - int daNpc_Taro_c::create() { daNpcT_ct(this, daNpc_Taro_c, l_faceMotionAnmData, l_motionAnmData, l_faceMotionSequenceData, @@ -301,15 +315,14 @@ int daNpc_Taro_c::create() { field_0x9c0.init(&mAcch, 0.0f, 0.0f); #if DEBUG - // I'm unsure exactly how we're supposed to set + use the param ptr in the debug build... - // field_0xe40 = &l_HIO; - // field_0xe40->entryHIO("タロ"); + mpHIO = &l_HIO; + mpHIO->entryHIO("タロ"); #endif reset(); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_Taro_Param_c::m.mSttsWeight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl1.Set(mCcDCyl); mCyl1.SetStts(&mCcStts); mCyl1.SetTgHitCallback(tgHitCallBack); @@ -626,10 +639,10 @@ void daNpc_Taro_c::setParam() { selectAction(); srchActors(); int attentionFlags = (fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e); - s16 sVar7 = daNpc_Taro_Param_c::m.field_0x48; - s16 sVar5 = daNpc_Taro_Param_c::m.field_0x4a; - s16 sVar6 = daNpc_Taro_Param_c::m.field_0x4c; - s16 sVar4 = daNpc_Taro_Param_c::m.field_0x4e; + s16 sVar7 = mpHIO->m.common.talk_distance; + s16 sVar5 = mpHIO->m.common.talk_angle; + s16 sVar6 = mpHIO->m.common.attention_distance; + s16 sVar4 = mpHIO->m.common.attention_angle; if (mType == TYPE_13) { sVar5 = 6; @@ -663,27 +676,27 @@ void daNpc_Taro_c::setParam() { attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(sVar7, sVar5); attention_info.flags = attentionFlags; - scale.set(daNpc_Taro_Param_c::m.mScale, daNpc_Taro_Param_c::m.mScale, - daNpc_Taro_Param_c::m.mScale); - mCcStts.SetWeight(daNpc_Taro_Param_c::m.mSttsWeight); - mCylH = daNpc_Taro_Param_c::m.mCylH; - mWallR = daNpc_Taro_Param_c::m.mWallR; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, + mpHIO->m.common.scale); + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; if (mTwilight) { mCylH = 100.0f; } - mAttnFovY = daNpc_Taro_Param_c::m.mAttnFovY; + mAttnFovY = mpHIO->m.common.fov; if (mType == TYPE_13) { mAttnFovY = 180.0f; } mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_Taro_Param_c::m.mWallH); - mRealShadowSize = daNpc_Taro_Param_c::m.field_0x0c; + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mRealShadowSize = mpHIO->m.common.real_shadow_size; if (&daNpc_Taro_c::practice == mAction) { mRealShadowSize = 500.0f; } - mExpressionMorfFrame = daNpc_Taro_Param_c::m.field_0x6c; - mMorfFrames = daNpc_Taro_Param_c::m.mMorfFrames; - gravity = daNpc_Taro_Param_c::m.mGravity; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; + gravity = mpHIO->m.common.gravity; } BOOL daNpc_Taro_c::checkChangeEvt() { @@ -967,11 +980,12 @@ void daNpc_Taro_c::setAttnPos() { f32 dVar8 = cM_s2rad(mCurAngle.y - field_0xd7e.y); mJntAnm.setParam( this, mpMorf[0]->getModel(), &eyeOffset, getBackboneJointNo(), getNeckJointNo(), - getHeadJointNo(), daNpc_Taro_Param_c::m.mBodyUpAngle, daNpc_Taro_Param_c::m.mBodyDownAngle, - daNpc_Taro_Param_c::m.mBodyLeftAngle, daNpc_Taro_Param_c::m.mBodyRightAngle, - daNpc_Taro_Param_c::m.mHeadUpAngle, daNpc_Taro_Param_c::m.mHeadDownAngle, - daNpc_Taro_Param_c::m.mHeadLeftAngle, daNpc_Taro_Param_c::m.mHeadRightAngle, - daNpc_Taro_Param_c::m.field_0x40, 0.0f, NULL); + getHeadJointNo(), + mpHIO->m.common.body_angleX_min, mpHIO->m.common.body_angleX_max, + mpHIO->m.common.body_angleY_min, mpHIO->m.common.body_angleY_max, + mpHIO->m.common.head_angleX_min, mpHIO->m.common.head_angleX_max, + mpHIO->m.common.head_angleY_min, mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, 0.0f, NULL); mJntAnm.calcJntRad(0.2f, 1.0f, (float)dVar8); setMtx(); mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getHeadJointNo())); @@ -979,7 +993,7 @@ void daNpc_Taro_c::setAttnPos() { mJntAnm.setEyeAngleX(eyePos, 1.0f, 0); mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, 1, 1.0f, 0); eyeOffset.set(0.0f, 0.0f, 0.0f); - eyeOffset.y = daNpc_Taro_Param_c::m.mAttentionPosYOffset; + eyeOffset.y = mpHIO->m.common.attention_offset; mDoMtx_stack_c::YrotS(mCurAngle.y); mDoMtx_stack_c::multVec(&eyeOffset, &eyeOffset); attention_info.position = current.pos + eyeOffset; @@ -2761,7 +2775,7 @@ int daNpc_Taro_c::cutTagPush4(int param_1) { int daNpc_Taro_c::wait(void* param_0) { fopAc_ac_c* actor_p; - int iVar10 = daNpc_Taro_Param_c::m.field_0x8e; + int iVar10 = mpHIO->m.field_0x8e; s16 local_5e = home.angle.y; switch (mMode) { @@ -2834,10 +2848,10 @@ int daNpc_Taro_c::wait(void* param_0) { daNpc_Len_c* pLen = (daNpc_Len_c*)mActors[22].getActorP(); if (pLen != NULL && pLen->checkStartDemo13StbEvt( - this, daNpc_Taro_Param_c::m.field_0x70, daNpc_Taro_Param_c::m.field_0x74, - daNpc_Taro_Param_c::m.field_0x78, daNpc_Taro_Param_c::m.field_0x7c, - daNpc_Taro_Param_c::m.field_0x80, daNpc_Taro_Param_c::m.field_0x84, - daNpc_Taro_Param_c::m.field_0x88)) + this, mpHIO->m.common.box_min_x, mpHIO->m.common.box_min_y, + mpHIO->m.common.box_min_z, mpHIO->m.common.box_max_x, + mpHIO->m.common.box_max_y, mpHIO->m.common.box_max_z, + mpHIO->m.common.box_offset)) { mEvtNo = 12; field_0x11a1 = 1; @@ -3118,7 +3132,7 @@ int daNpc_Taro_c::swdTutorial(void* param_0) { int daNpc_Taro_c::talk_withMaro(void* param_0) { daNpc_Maro_c* pMaro = (daNpc_Maro_c*)mActors[0].getActorP(); fopAc_ac_c* player = daPy_getPlayerActorClass(); - int choccaiTimer = daNpc_Taro_Param_c::m.mChoccaiTimer; + int choccaiTimer = mpHIO->m.mChoccaiTimer; switch (mMode) { case MODE_ENTER: @@ -3177,7 +3191,7 @@ int daNpc_Taro_c::talk_withMaro(void* param_0) { } int daNpc_Taro_c::practice(void* param_0) { - int iVar4 = daNpc_Taro_Param_c::m.field_0x8e; + int iVar4 = mpHIO->m.field_0x8e; int iVar3 = 0; switch (mMode) { diff --git a/src/d/actor/d_a_npc_tkj.cpp b/src/d/actor/d_a_npc_tkj.cpp index 3127a4a338..dbf059f6b8 100644 --- a/src/d/actor/d_a_npc_tkj.cpp +++ b/src/d/actor/d_a_npc_tkj.cpp @@ -73,16 +73,6 @@ int (daNpcTkj_c::*daNpcTkj_c::mCutList[])(int) = { &daNpcTkj_c::cutLv7Start, }; -daNpcTkj_c::~daNpcTkj_c() { - OS_REPORT("|%06d:%x|daNpcTkj_c -> デストラクト\n", g_Counter.mCounter0, this); - - if (heap != NULL) { - mpMorf[0]->stopZelAnime(); - } - - deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); -} - const daNpc_Tkj_HIOParam daNpc_Tkj_Param_c::m = { 120.0f, -3.0f, @@ -127,6 +117,38 @@ const daNpc_Tkj_HIOParam daNpc_Tkj_Param_c::m = { 110.0f, }; +static NPC_TKJ_HIO_CLASS l_HIO; + +#if DEBUG +daNpc_Tkj_HIO_c::daNpc_Tkj_HIO_c() { + m = daNpc_Tkj_Param_c::m; +} + +void daNpc_Tkj_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_Tkj_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpcTkj_c::~daNpcTkj_c() { + OS_REPORT("|%06d:%x|daNpcTkj_c -> デストラクト\n", g_Counter.mCounter0, this); + + if (heap != NULL) { + mpMorf[0]->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + + deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); +} + int daNpcTkj_c::create() { daNpcT_ct(this, daNpcTkj_c, l_faceMotionAnmData, l_motionAnmData, l_faceMotionSequenceData, 4, l_motionSequenceData, 4, @@ -161,6 +183,11 @@ int daNpcTkj_c::create() { mSound.init(¤t.pos, &eyePos, 3, 1); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("天空人"); +#endif + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mAcch.CrrPos(dComIfG_Bgsp()); mGndChk = mAcch.m_gnd; @@ -169,7 +196,7 @@ int daNpcTkj_c::create() { setEnvTevColor(); setRoomNo(); - mCcStts.Init(daNpc_Tkj_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCcCyl.Set(mCcDCyl); mCcCyl.SetStts(&mCcStts); mCcCyl.SetTgHitCallback(tgHitCallBack); @@ -239,7 +266,7 @@ int daNpcTkj_c::Draw() { mdlData_p->getMaterialNodePointer(getEyeballMaterialNo())->setMaterialAnm(mpMatAnm[0]); } - return draw(FALSE, 0, daNpc_Tkj_Param_c::m.common.real_shadow_size, NULL, 100.0f, FALSE, FALSE, FALSE); + return draw(FALSE, 0, mpHIO->m.common.real_shadow_size, NULL, 100.0f, FALSE, FALSE, FALSE); } int daNpcTkj_c::createHeapCallBack(fopAc_ac_c* i_this) { @@ -355,11 +382,11 @@ void daNpcTkj_c::setAttnPos() { cXyz sp28(0.0f, -30.0f, 0.0f); mJntAnm.setParam(this, mpMorf[0]->getModel(), &sp28, getBackboneJointNo(), getNeckJointNo(), getHeadJointNo(), - daNpc_Tkj_Param_c::m.common.body_angleX_min, daNpc_Tkj_Param_c::m.common.body_angleX_max, - daNpc_Tkj_Param_c::m.common.body_angleY_min, daNpc_Tkj_Param_c::m.common.body_angleY_max, - daNpc_Tkj_Param_c::m.common.head_angleX_min, daNpc_Tkj_Param_c::m.common.head_angleX_max, - daNpc_Tkj_Param_c::m.common.head_angleY_min, daNpc_Tkj_Param_c::m.common.head_angleY_max, - daNpc_Tkj_Param_c::m.common.neck_rotation_ratio, 0.0f, NULL); + mpHIO->m.common.body_angleX_min, mpHIO->m.common.body_angleX_max, + mpHIO->m.common.body_angleY_min, mpHIO->m.common.body_angleY_max, + mpHIO->m.common.head_angleX_min, mpHIO->m.common.head_angleX_max, + mpHIO->m.common.head_angleY_min, mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, 0.0f, NULL); mJntAnm.calcJntRad(0.2f, 1.0f, cM_s2rad(mCurAngle.y - field_0xd7e.y)); J3DModelData* mdlData_p = mpMorf[0]->getModel()->getModelData(); @@ -377,7 +404,7 @@ void daNpcTkj_c::setAttnPos() { attention_info.position = current.pos; - attention_info.position.y += daNpc_Tkj_Param_c::m.common.attention_offset; + attention_info.position.y += mpHIO->m.common.attention_offset; } void daNpcTkj_c::setCollision() { @@ -386,8 +413,8 @@ void daNpcTkj_c::setCollision() { mCcCyl.SetCoSPrm(mTwilight == TRUE ? 0x69 : 0x79); pos = current.pos; - f32 height = daNpc_Tkj_Param_c::m.common.height; - f32 radius = daNpc_Tkj_Param_c::m.common.width; + f32 height = mpHIO->m.common.height; + f32 radius = mpHIO->m.common.width; mCcCyl.SetH(height); mCcCyl.SetR(radius); @@ -618,10 +645,10 @@ void daNpcTkj_c::setParam() { selectAction(); srchActors(); - s16 talk_dist = daNpc_Tkj_Param_c::m.common.talk_distance; - s16 talk_angle = daNpc_Tkj_Param_c::m.common.talk_angle; - s16 attn_dist = daNpc_Tkj_Param_c::m.common.attention_distance; - s16 attn_angle = daNpc_Tkj_Param_c::m.common.attention_angle; + s16 talk_dist = mpHIO->m.common.talk_distance; + s16 talk_angle = mpHIO->m.common.talk_angle; + s16 attn_dist = mpHIO->m.common.attention_distance; + s16 attn_angle = mpHIO->m.common.attention_angle; attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attn_dist, attn_angle); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[0]; @@ -632,20 +659,20 @@ void daNpcTkj_c::setParam() { if (mType == 1) { size = 0.7f; } else { - size = daNpc_Tkj_Param_c::m.common.scale; + size = mpHIO->m.common.scale; } scale.setall(size); - mAcchCir.SetWallR(daNpc_Tkj_Param_c::m.common.width); - mAcchCir.SetWallH(daNpc_Tkj_Param_c::m.common.knee_length); - mCcStts.SetWeight(daNpc_Tkj_Param_c::m.common.weight); - mCylH = daNpc_Tkj_Param_c::m.common.height; - mWallR = daNpc_Tkj_Param_c::m.common.width; - gravity = daNpc_Tkj_Param_c::m.common.gravity; + mAcchCir.SetWallR(mpHIO->m.common.width); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; + gravity = mpHIO->m.common.gravity; - mExpressionMorfFrame = daNpc_Tkj_Param_c::m.common.expression_morf_frame; - mMorfFrames = daNpc_Tkj_Param_c::m.common.morf_frame; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; } void daNpcTkj_c::beforeMove() { @@ -654,8 +681,6 @@ void daNpcTkj_c::beforeMove() { } } -static daNpc_Tkj_Param_c l_HIO; - static actor_method_class daNpc_Tkj_MethodTable = { (process_method_func)daNpc_Tkj_Create, (process_method_func)daNpc_Tkj_Delete, diff --git a/src/d/actor/d_a_npc_tks.cpp b/src/d/actor/d_a_npc_tks.cpp index 1a104cb9dd..161de1d346 100644 --- a/src/d/actor/d_a_npc_tks.cpp +++ b/src/d/actor/d_a_npc_tks.cpp @@ -133,7 +133,7 @@ enum RES_Name { /* 0x2 */ K_TUBO02, }; -static daNpcTks_Param_c l_HIO; +static NPC_TKS_HIO_CLASS l_HIO; static daNpc_GetParam3 l_bckGetParamList[22] = { {-1, J3DFrameCtrl::EMode_LOOP}, @@ -201,22 +201,6 @@ static char* l_arcName = "TKS"; static char* l_myName = "Tks"; -daNpcTks_c::daNpcTks_c() {} - -daNpcTks_c::~daNpcTks_c() { - for (int i = 0; l_loadRes_list[mTksTsubo.mTsuboType][i] >= 0; i++) { - dComIfG_resDelete(&mPhases[i], l_arcNames[l_loadRes_list[mTksTsubo.mTsuboType][i]]); - } - - if (heap != NULL) { - mAnm_p->stopZelAnime(); - } - - if (parentActorID != fpcM_ERROR_PROCESS_ID_e) { - fopAcM_delete(parentActorID); - } -} - daNpcTks_HIOParam const daNpcTks_Param_c::m = { 90.0f, -3.0f, @@ -264,6 +248,42 @@ daNpcTks_HIOParam const daNpcTks_Param_c::m = { 5.0f, }; +#if DEBUG +daNpcTks_HIO_c::daNpcTks_HIO_c() { + m = daNpcTks_Param_c::m; +} + +void daNpcTks_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpcTks_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpcTks_c::daNpcTks_c() {} + +daNpcTks_c::~daNpcTks_c() { + for (int i = 0; l_loadRes_list[mTksTsubo.mTsuboType][i] >= 0; i++) { + dComIfG_resDelete(&mPhases[i], l_arcNames[l_loadRes_list[mTksTsubo.mTsuboType][i]]); + } + + if (heap != NULL) { + mAnm_p->stopZelAnime(); + } + + if (parentActorID != fpcM_ERROR_PROCESS_ID_e) { + fopAcM_delete(parentActorID); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif +} + cPhs__Step daNpcTks_c::Create() { fopAcM_ct(this, daNpcTks_c); @@ -309,7 +329,12 @@ cPhs__Step daNpcTks_c::Create() { mSound.init(¤t.pos, &eyePos, 3, 1); mTksTsubo.mSound.init(&mTksTsubo.mPos, &mTksTsubo.mPos, 3, 1); - mAcchCir.SetWall(daNpcTks_Param_c::m.common.width, daNpcTks_Param_c::m.common.knee_length); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("はぐれ天空人"); +#endif + + mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mAcch.SetRoofNone(); @@ -317,13 +342,13 @@ cPhs__Step daNpcTks_c::Create() { mGndChk = mAcch.m_gnd; mGroundH = mAcch.GetGroundH(); - mCcStts.Init(daNpcTks_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl.Set(mCcDCyl); mCyl.SetStts(&mCcStts); mCyl.SetTgType(0); mCyl.SetTgSPrm(0); - mCyl.SetH(daNpcTks_Param_c::m.common.height); - mCyl.SetR(daNpcTks_Param_c::m.common.width); + mCyl.SetH(mpHIO->m.common.height); + mCyl.SetR(mpHIO->m.common.width); mTksTsubo.mCyl.Set(mCcDCyl); mTksTsubo.mCyl.SetStts(&mCcStts); mTksTsubo.mCyl.SetTgType(0xD8FBFDFF); @@ -400,7 +425,7 @@ int daNpcTks_c::Execute() { int daNpcTks_c::Draw() { mAnm_p->getModel()->getModelData()->getMaterialNodePointer(2)->setMaterialAnm(mpMatAnm); - draw(FALSE, FALSE, daNpcTks_Param_c::m.common.real_shadow_size, NULL, FALSE); + draw(FALSE, FALSE, mpHIO->m.common.real_shadow_size, NULL, FALSE); return 1; } @@ -423,7 +448,7 @@ int daNpcTks_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { case JNT_NECK1: case JNT_NECK2: case JNT_HEAD: - setLookatMtx(jntNo, i_jointList, daNpcTks_Param_c::m.common.neck_rotation_ratio); + setLookatMtx(jntNo, i_jointList, mpHIO->m.common.neck_rotation_ratio); break; } @@ -611,7 +636,7 @@ void daNpcTks_c::reset() { mMode = 0; field_0x138a = true; mPlayerArea = -1; - scale.setall(daNpcTks_Param_c::m.common.scale); + scale.setall(mpHIO->m.common.scale); dKy_tevstr_init(&mTksTsubo.mTevStr, fopAcM_GetRoomNo(this), 0xFF); setAngle(shape_angle.y); @@ -754,8 +779,8 @@ BOOL daNpcTks_c::setAction(actionFunc action) { int daNpcTks_c::getPlayerArea() { f32 fVar3, fVar2, fVar1; - fVar1 = std::pow(daNpcTks_Param_c::m.area_a_dist, 2.0f); - fVar2 = std::pow(daNpcTks_Param_c::m.area_b_dist, 2.0f); + fVar1 = std::pow(mpHIO->m.area_a_dist, 2.0f); + fVar2 = std::pow(mpHIO->m.area_b_dist, 2.0f); fVar3 = fopAcM_searchPlayerDistanceXZ2(this); if (fVar3 > 0.0f && fVar3 <= fVar2) { @@ -770,9 +795,9 @@ int daNpcTks_c::getPlayerArea() { }; void daNpcTks_c::playExpression() { - daNpcF_anmPlayData dat0 = {ANM_F_TALK_A, daNpcTks_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat0 = {ANM_F_TALK_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1 = {ANM_NONE, daNpcTks_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat1 = {ANM_NONE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[1] = {&dat1}; daNpcF_anmPlayData** ppDat[2] = { @@ -786,13 +811,13 @@ void daNpcTks_c::playExpression() { }; void daNpcTks_c::playMotion() { - daNpcF_anmPlayData dat0 = {ANM_WAIT_A, daNpcTks_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat0 = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1 = {ANM_SWIM, daNpcTks_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat1 = {ANM_SWIM, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[1] = {&dat1}; - daNpcF_anmPlayData dat2 = {ANM_RUN, daNpcTks_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat2 = {ANM_RUN, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[1] = {&dat2}; - daNpcF_anmPlayData dat3 = {ANM_WALK_A, daNpcTks_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat3 = {ANM_WALK_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[1] = {&dat3}; daNpcF_anmPlayData dat4a = {ANM_JUMP_S, 4.0f, 1}; daNpcF_anmPlayData dat4b = {ANM_FLY, 0.0f, 0}; @@ -825,14 +850,14 @@ void daNpcTks_c::lookat() { daPy_py_c* player = NULL; J3DModel* model = mAnm_p->getModel(); BOOL i_snap = FALSE; - f32 body_angleX_min = daNpcTks_Param_c::m.common.body_angleX_min; - f32 body_angleX_max = daNpcTks_Param_c::m.common.body_angleX_max; - f32 body_angleY_min = daNpcTks_Param_c::m.common.body_angleY_min; - f32 body_angleY_max = daNpcTks_Param_c::m.common.body_angleY_max; - f32 head_angleX_min = field_0x138a ? 0.0f : daNpcTks_Param_c::m.common.head_angleX_min; - f32 head_angleX_max = field_0x138a ? 0.0f : daNpcTks_Param_c::m.common.head_angleX_max; - f32 head_angleY_min = daNpcTks_Param_c::m.common.head_angleY_min; - f32 head_angleY_max = daNpcTks_Param_c::m.common.head_angleY_max; + f32 body_angleX_min = mpHIO->m.common.body_angleX_min; + f32 body_angleX_max = mpHIO->m.common.body_angleX_max; + f32 body_angleY_min = mpHIO->m.common.body_angleY_min; + f32 body_angleY_max = mpHIO->m.common.body_angleY_max; + f32 head_angleX_min = field_0x138a ? 0.0f : mpHIO->m.common.head_angleX_min; + f32 head_angleX_max = field_0x138a ? 0.0f : mpHIO->m.common.head_angleX_max; + f32 head_angleY_min = mpHIO->m.common.head_angleY_min; + f32 head_angleY_max = mpHIO->m.common.head_angleY_max; s16 angle_delta = mCurAngle.y - mOldAngle.y; cXyz lookatPos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; csXyz* lookatAngle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; @@ -903,7 +928,7 @@ void daNpcTks_c::playTsuboAnm() { }; BOOL daNpcTks_c::checkFindPlayer() { - f32 fVar1 = pow(daNpcTks_Param_c::m.area_a_dist, 2.0); + f32 fVar1 = pow(mpHIO->m.area_a_dist, 2.0); f32 fVar2 = fopAcM_searchPlayerDistanceXZ2(this); mActorMngr[0].remove(); @@ -984,7 +1009,7 @@ void daNpcTks_c::setMotionAnm(int i_index, f32 i_morf) { mMotionLoops = 0; if (i_index == ANM_RUN) { - mAnm_p->setPlaySpeed(speedF / daNpcTks_Param_c::m.walk_spd); + mAnm_p->setPlaySpeed(speedF / mpHIO->m.walk_spd); } else { mAnm_p->setPlaySpeed(1.0f); } @@ -1224,7 +1249,7 @@ void daNpcTks_c::hide() { case 0: setMotionAnm(ANM_HIDE, 0.0f); field_0x138a = true; - field_0x1370 = cLib_getRndValue(daNpcTks_Param_c::m.hide_time_1, daNpcTks_Param_c::m.hide_time_2 - daNpcTks_Param_c::m.hide_time_1); + field_0x1370 = cLib_getRndValue(mpHIO->m.hide_time_1, mpHIO->m.hide_time_2 - mpHIO->m.hide_time_1); speedF = 0.0f; mMode = 2; break; @@ -1321,7 +1346,7 @@ void daNpcTks_c::showUpWait() { case 0: setMotionAnm(ANM_SHOW_UP_WAIT, 0.0f); field_0x138a = true; - field_0x1370 = cLib_getRndValue(daNpcTks_Param_c::m.show_up_wait_time_1, daNpcTks_Param_c::m.show_up_wait_time_2 - daNpcTks_Param_c::m.show_up_wait_time_1); + field_0x1370 = cLib_getRndValue(mpHIO->m.show_up_wait_time_1, mpHIO->m.show_up_wait_time_2 - mpHIO->m.show_up_wait_time_1); speedF = 0.0f; mMode = 2; break; @@ -1499,7 +1524,7 @@ void daNpcTks_c::broken() { mTksTsubo.field_0x586 = 0; fopAcM_onSwitch(this, getSwitchNo()); speedF = 0.0f; - speed.y = daNpcTks_Param_c::m.launch_spd; + speed.y = mpHIO->m.launch_spd; mMode = 2; break; @@ -1572,8 +1597,8 @@ void daNpcTks_c::demo_appear() { cLib_offBit(attention_info.flags, fopAc_AttnFlag_CARRY_e); field_0x138a = false; mTksTsubo.field_0x586 = 0; - speedF = daNpcTks_Param_c::m.movement_spd; - speed.y = daNpcTks_Param_c::m.launch_spd; + speedF = mpHIO->m.movement_spd; + speed.y = mpHIO->m.launch_spd; break; case '0004': @@ -2882,9 +2907,9 @@ static int daNpcTks_IsDelete(void* a_this) { } void daNpcTks_c::setParam() { - mAcchCir.SetWallR(daNpcTks_Param_c::m.common.width); - mAcchCir.SetWallH(daNpcTks_Param_c::m.common.knee_length); - gravity = fopAcM_checkCarryNow(this) != 0 ? 0.0f: daNpcTks_Param_c::m.common.gravity; + mAcchCir.SetWallR(mpHIO->m.common.width); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + gravity = fopAcM_checkCarryNow(this) != 0 ? 0.0f: mpHIO->m.common.gravity; maxFallSpeed = -50.0f; } @@ -2945,14 +2970,14 @@ void daNpcTks_c::setAttnPos() { mEyeAngle.x = 0; } - attention_info.position.set(current.pos.x, current.pos.y + daNpcTks_Param_c::m.common.attention_offset, current.pos.z); + attention_info.position.set(current.pos.x, current.pos.y + mpHIO->m.common.attention_offset, current.pos.z); if (!fopAcM_checkCarryNow(this)) { if (!field_0x138a) { mCyl.SetC(current.pos); #if DEBUG - mCyl.SetH(daNpcTks_Param_c::m.common.height); - mCyl.SetR(daNpcTks_Param_c::m.common.width); + mCyl.SetH(mpHIO->m.common.height); + mCyl.SetR(mpHIO->m.common.width); #endif dComIfG_Ccsp()->Set(&mCyl); } @@ -3005,7 +3030,7 @@ void daNpcTks_c::drawOtherMdls() { } mTksTsubo.mShadowKey = dComIfGd_setShadow(mTksTsubo.mShadowKey, 1, model, - pcVar1, daNpcTks_Param_c::m.common.real_shadow_size, + pcVar1, mpHIO->m.common.real_shadow_size, 30.0f, pcVar1->y, fVar1, *polyBase, &mTksTsubo.mTevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); } diff --git a/src/d/actor/d_a_npc_uri.cpp b/src/d/actor/d_a_npc_uri.cpp index 0392c6fa4b..d1594f2450 100644 --- a/src/d/actor/d_a_npc_uri.cpp +++ b/src/d/actor/d_a_npc_uri.cpp @@ -209,10 +209,19 @@ daNpc_Uri_c::cutFunc daNpc_Uri_c::mCutList[7] = { &daNpc_Uri_c::cutMeetingAgain, }; +NPC_URI_HIO_CLASS l_HIO; + daNpc_Uri_c::~daNpc_Uri_c() { if (mpMorf[0] != 0) { mpMorf[0]->stopZelAnime(); } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + deleteRes(l_loadResPtrnList[mType], (char const**)l_resNameList); } @@ -242,10 +251,16 @@ int daNpc_Uri_c::create() { fopAcM_setCullSizeBox(this, -200.0f, -100.0f, -200.0f, 200.0f, 300.0f, 200.0f); mSound.init(¤t.pos, &eyePos, 3, 1); field_0x9c0.init(&mAcch, 0.0f, 0.0f); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("ウ-リ"); +#endif + reset(); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_Uri_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl.Set(mCcDCyl); mCyl.SetStts(&mCcStts); mCyl.SetTgHitCallback(tgHitCallBack); @@ -706,8 +721,6 @@ void daNpc_Uri_c::beforeMove() { } } -NPC_URI_HIO_CLASS l_HIO; - void daNpc_Uri_c::setAttnPos() { cXyz acStack_3c(-30.0f, 10.0f, 0.0f); diff --git a/src/d/actor/d_a_npc_yelia.cpp b/src/d/actor/d_a_npc_yelia.cpp index 100b20b170..d7ee35d686 100644 --- a/src/d/actor/d_a_npc_yelia.cpp +++ b/src/d/actor/d_a_npc_yelia.cpp @@ -295,7 +295,7 @@ enum Motion { /* 0x21 */ MOTION_KIZUKU_WAIT, }; -daNpc_Yelia_Param_c::param const daNpc_Yelia_Param_c::m = { +daNpc_Yelia_HIOParam const daNpc_Yelia_Param_c::m = { 170.0f, // mAttnOffsetY -3.0f, // mGravity 1.0f, // mScale @@ -328,6 +328,7 @@ daNpc_Yelia_Param_c::param const daNpc_Yelia_Param_c::m = { 0, // mTestMotion 0, // mTestLookMode false, // mTest + false, 4.0f, 0.0f, 0.0f, @@ -338,12 +339,33 @@ daNpc_Yelia_Param_c::param const daNpc_Yelia_Param_c::m = { 0.0f, }; -static daNpc_Yelia_Param_c l_HIO; +static NPC_YELIA_HIO_CLASS l_HIO; + +#if DEBUG +daNpc_Yelia_HIO_c::daNpc_Yelia_HIO_c() { + m = daNpc_Yelia_Param_c::m; +} + +void daNpc_Yelia_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_Yelia_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif daNpc_Yelia_c::~daNpc_Yelia_c() { if (mpMorf[0] != NULL) { mpMorf[0]->stopZelAnime(); } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); } @@ -374,10 +396,16 @@ cPhs__Step daNpc_Yelia_c::create() { fopAcM_SetMtx(this, mpMorf[0]->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -200.0f, -100.0f, -200.0f, 200.0f, 300.0, 200.0f); mSound.init(¤t.pos, &eyePos, 3, 1); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("イリア"); +#endif + reset(); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(l_HIO.m.mCcWeight, 0, this); + mCcStts.Init(l_HIO.m.common.weight, 0, this); mCcCyl.Set(mCcDCyl); mCcCyl.SetStts(&mCcStts); mCcCyl.SetTgHitCallback(tgHitCallBack); @@ -557,10 +585,10 @@ void daNpc_Yelia_c::setParam() { selectAction(); srchActors(); - s16 speak_dist_idx = l_HIO.m.mSpeakDistIdx; - s16 speak_angle_idx = l_HIO.m.mSpeakAngleIdx; - s16 talk_dist_idx = l_HIO.m.mTalkDistIdx; - s16 talk_angle_idx = l_HIO.m.mTalkAngleIdx; + s16 speak_dist_idx = l_HIO.m.common.talk_distance; + s16 speak_angle_idx = l_HIO.m.common.talk_angle; + s16 talk_dist_idx = l_HIO.m.common.attention_distance; + s16 talk_angle_idx = l_HIO.m.common.attention_angle; if (mType == TYPE_8) { speak_dist_idx = 16; speak_angle_idx = 6; @@ -585,20 +613,20 @@ void daNpc_Yelia_c::setParam() { daNpcT_getDistTableIdx(speak_dist_idx, speak_angle_idx); attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e; - scale.set(l_HIO.m.mScale, l_HIO.m.mScale, l_HIO.m.mScale); - mCcStts.SetWeight(l_HIO.m.mCcWeight); - mCylH = l_HIO.m.mCylH; - mWallR = l_HIO.m.mWallR; - mAttnFovY = l_HIO.m.mAttnFovY; + scale.set(l_HIO.m.common.scale, l_HIO.m.common.scale, l_HIO.m.common.scale); + mCcStts.SetWeight(l_HIO.m.common.weight); + mCylH = l_HIO.m.common.height; + mWallR = l_HIO.m.common.width; + mAttnFovY = l_HIO.m.common.fov; if (mType == TYPE_8) { mAttnFovY = 135.0f; } mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(l_HIO.m.mWallH); - mRealShadowSize = l_HIO.m.mShadowDepth; - gravity = l_HIO.m.mGravity; - mExpressionMorfFrame = l_HIO.m.field_0x6c; - mMorfFrames = l_HIO.m.mMorfFrames; + mAcchCir.SetWallH(l_HIO.m.common.knee_length); + mRealShadowSize = l_HIO.m.common.real_shadow_size; + gravity = l_HIO.m.common.gravity; + mExpressionMorfFrame = l_HIO.m.common.expression_morf_frame; + mMorfFrames = l_HIO.m.common.morf_frame; if (mType == TYPE_TWILIGHT || mType == TYPE_AFTER_ESCORT) { mAcch.SetGrndNone(); mAcch.SetWallNone(); @@ -806,14 +834,17 @@ void daNpc_Yelia_c::setAttnPos() { if (mType == TYPE_TWILIGHT || mType == TYPE_AFTER_ESCORT) { mJntAnm.setParam(this, mpMorf[0]->getModel(), &eye_offset, getBackboneJointNo(), getNeckJointNo(), getHeadJointNo(), 0.0f, 0.0f, 0.0f, 0.0f, - l_HIO.m.mHeadDownAngle, l_HIO.m.mHeadUpAngle, l_HIO.m.mHeadRightAngle, - l_HIO.m.mHeadLeftAngle, l_HIO.m.mNeckAngleScl, angle_diff, &vec); + l_HIO.m.common.head_angleX_min, l_HIO.m.common.head_angleX_max, + l_HIO.m.common.head_angleY_min, l_HIO.m.common.head_angleY_max, + l_HIO.m.common.neck_rotation_ratio, angle_diff, &vec); } else { mJntAnm.setParam(this, mpMorf[0]->getModel(), &eye_offset, getBackboneJointNo(), - getNeckJointNo(), getHeadJointNo(), l_HIO.m.mBodyDownAngle, - l_HIO.m.mBodyUpAngle, l_HIO.m.mBodyRightAngle, l_HIO.m.mBodyLeftAngle, - l_HIO.m.mHeadDownAngle, l_HIO.m.mHeadUpAngle, l_HIO.m.mHeadRightAngle, - l_HIO.m.mHeadLeftAngle, l_HIO.m.mNeckAngleScl, angle_diff, &vec); + getNeckJointNo(), getHeadJointNo(), + l_HIO.m.common.body_angleX_min, l_HIO.m.common.body_angleX_max, + l_HIO.m.common.body_angleY_min, l_HIO.m.common.body_angleY_max, + l_HIO.m.common.head_angleX_min, l_HIO.m.common.head_angleX_max, + l_HIO.m.common.head_angleY_min, l_HIO.m.common.head_angleY_max, + l_HIO.m.common.neck_rotation_ratio, angle_diff, &vec); } mJntAnm.calcJntRad(0.2f, 1.0f, angle_diff); @@ -826,7 +857,7 @@ void daNpc_Yelia_c::setAttnPos() { if (mType == TYPE_TWILIGHT || mType == TYPE_AFTER_ESCORT) { vec.set(0.0f, 150.0f, 20.0f); } else { - vec.set(0.0f, l_HIO.m.mAttnOffsetY, 10.0f); + vec.set(0.0f, l_HIO.m.common.attention_offset, 10.0f); } mDoMtx_stack_c::YrotS(mCurAngle.y); mDoMtx_stack_c::multVec(&vec, &vec); diff --git a/src/d/actor/d_a_npc_ykw.cpp b/src/d/actor/d_a_npc_ykw.cpp index 8694e2bf99..70c6694dac 100644 --- a/src/d/actor/d_a_npc_ykw.cpp +++ b/src/d/actor/d_a_npc_ykw.cpp @@ -176,11 +176,7 @@ daNpc_ykW_c::cutFunc daNpc_ykW_c::mCutList[8] = { &daNpc_ykW_c::cutHug, }; -#if DEBUG -static daNpc_ykW_HIO_c l_HIO; -#else -static daNpc_ykW_Param_c l_HIO; -#endif +static NPC_YKW_HIO_CLASS l_HIO; #if DEBUG void daNpc_ykW_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { diff --git a/src/d/actor/d_a_npc_zant.cpp b/src/d/actor/d_a_npc_zant.cpp index 0a385505c2..d605614e49 100644 --- a/src/d/actor/d_a_npc_zant.cpp +++ b/src/d/actor/d_a_npc_zant.cpp @@ -56,7 +56,28 @@ daNpc_Zant_c::cutFunc daNpc_Zant_c::mCutList[1] = { NULL }; -static daNpc_Zant_Param_c l_HIO; +static NPC_ZANT_HIO_CLASS l_HIO; + +daNpc_Zant_HIOParam const daNpc_Zant_Param_c::m = { + 270.0f, -3.0f, 1.0f, 500.0f, 255.0f, 250.0f, 35.0f, 50.0f, + 0.0f, 0.0f, 10.0f, -10.0f, 30.0f, -10.0f, 45.0f, -45.0f, + 0.6f, 12.0f, 3, 6, 5, 6, 110.0f, 0.0f, 0.0f, 0.0f, 60, 8, + 0, 0, 0, 0, 0, 4.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f +}; + +#if DEBUG +daNpc_Zant_HIO_c::daNpc_Zant_HIO_c() { + m = daNpc_Zant_Param_c::m; +} + +void daNpc_Zant_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_Zant_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif daNpc_Zant_c::~daNpc_Zant_c() { OS_REPORT("|%06d:%x|daNpc_Zant_c -> デストラクト\n", g_Counter.mCounter0, this); @@ -64,16 +85,15 @@ daNpc_Zant_c::~daNpc_Zant_c() { mpMorf[0]->stopZelAnime(); } +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + deleteRes(l_loadResPtrnList[mType], (const char **)l_resNameList); } -daNpc_Zant_Param_c::Data const daNpc_Zant_Param_c::m = { - 270.0f, -3.0f, 1.0f, 500.0f, 255.0f, 250.0f, 35.0f, 50.0f, - 0.0f, 0.0f, 10.0f, -10.0f, 30.0f, -10.0f, 45.0f, -45.0f, - 0.6f, 12.0f, 3, 6, 5, 6, 110.0f, 0.0f, 0.0f, 0.0f, 60, 8, - 0, 0, 4.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f -}; - int daNpc_Zant_c::create() { int rv; @@ -96,9 +116,15 @@ int daNpc_Zant_c::create() { fopAcM_OnStatus(this, 0x8000000); mSound.init(¤t.pos, &eyePos, 3, 1); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("ザント"); +#endif + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, &speed, ¤t.angle, &shape_angle); - mCcStts.Init(daNpc_Zant_Param_c::m.field_0x10, 0, this); - + mCcStts.Init(mpHIO->m.common.weight, 0, this); + mCyl.Set(mCcDCyl); mCyl.SetStts(&mCcStts); mCyl.SetTgHitCallback(tgHitCallBack); @@ -233,29 +259,29 @@ void daNpc_Zant_c::setParam() { selectAction(); srchActors(); - s16 sVar1 = daNpc_Zant_Param_c::m.field_0x48; - s16 sVar2 = daNpc_Zant_Param_c::m.field_0x4a; - attention_info.distances[0] = daNpcT_getDistTableIdx(daNpc_Zant_Param_c::m.field_0x4c, daNpc_Zant_Param_c::m.field_0x4e); + s16 sVar1 = mpHIO->m.common.talk_distance; + s16 sVar2 = mpHIO->m.common.talk_angle; + attention_info.distances[0] = daNpcT_getDistTableIdx(mpHIO->m.common.attention_distance, mpHIO->m.common.attention_angle); attention_info.distances[1] = attention_info.distances[0]; attention_info.distances[3] = daNpcT_getDistTableIdx(sVar1, sVar2); attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e; - scale.setall(daNpc_Zant_Param_c::m.field_0x8); + scale.setall(mpHIO->m.common.scale); - mCcStts.SetWeight(daNpc_Zant_Param_c::m.field_0x10); + mCcStts.SetWeight(mpHIO->m.common.weight); - mCylH = daNpc_Zant_Param_c::m.field_0x14; - mWallR = daNpc_Zant_Param_c::m.field_0x1c; - mAttnFovY = daNpc_Zant_Param_c::m.field_0x50; + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; + mAttnFovY = mpHIO->m.common.fov; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_Zant_Param_c::m.field_0x18); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); - mRealShadowSize = daNpc_Zant_Param_c::m.field_0xc; - gravity = daNpc_Zant_Param_c::m.field_0x4; - mExpressionMorfFrame = daNpc_Zant_Param_c::m.field_0x6c; - mMorfFrames = daNpc_Zant_Param_c::m.field_0x44; + mRealShadowSize = mpHIO->m.common.real_shadow_size; + gravity = mpHIO->m.common.gravity; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; } void daNpc_Zant_c::setAfterTalkMotion() { @@ -333,12 +359,12 @@ void daNpc_Zant_c::setAttnPos() { f32 fVar1 = cM_s2rad(mCurAngle.y - field_0xd7e.y); J3DModel* model = mpMorf[0]->getModel(); mJntAnm.setParam(this, model, &cStack1, getBackboneJointNo(), - getNeckJointNo(), getHeadJointNo(), daNpc_Zant_Param_c::m.field_0x24, - daNpc_Zant_Param_c::m.field_0x20, daNpc_Zant_Param_c::m.field_0x2c, - daNpc_Zant_Param_c::m.field_0x28, daNpc_Zant_Param_c::m.field_0x34, - daNpc_Zant_Param_c::m.field_0x30, daNpc_Zant_Param_c::m.field_0x3c, - daNpc_Zant_Param_c::m.field_0x38, daNpc_Zant_Param_c::m.field_0x40, - fVar1, NULL); + getNeckJointNo(), getHeadJointNo(), + mpHIO->m.common.body_angleX_min, mpHIO->m.common.body_angleX_max, + mpHIO->m.common.body_angleY_min, mpHIO->m.common.body_angleY_max, + mpHIO->m.common.head_angleX_min, mpHIO->m.common.head_angleX_max, + mpHIO->m.common.head_angleY_min, mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, fVar1, NULL); mJntAnm.calcJntRad(0.2f, 1.0f, fVar1); setMtx(); @@ -346,7 +372,7 @@ void daNpc_Zant_c::setAttnPos() { mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, 1, 1.0f, 0); attention_info.position = current.pos; - attention_info.position.y += daNpc_Zant_Param_c::m.field_0x0; + attention_info.position.y += mpHIO->m.common.attention_offset; eyePos = attention_info.position; } diff --git a/src/d/actor/d_a_npc_zelR.cpp b/src/d/actor/d_a_npc_zelR.cpp index ce17fc78c4..4ea2a6a18c 100644 --- a/src/d/actor/d_a_npc_zelR.cpp +++ b/src/d/actor/d_a_npc_zelR.cpp @@ -62,15 +62,7 @@ daNpc_ZelR_c::EventFn daNpc_ZelR_c::mCutList[1] = { NULL }; -daNpc_ZelR_c::~daNpc_ZelR_c() { - OS_REPORT("|%06d:%x|daNpc_ZelR_c -> デストラクト\n", g_Counter.mCounter0, this); - if (heap) { - mpMorf[0]->stopZelAnime(); - } - deleteRes(l_loadResPtrnList[mType], (char const**)l_resNameList); -} - -static daNpc_ZelR_Param_c l_HIO; +static NPC_ZELR_HIO_CLASS l_HIO; daNpc_ZelR_HIOParam const daNpc_ZelR_Param_c::m = { 190.0f, @@ -116,6 +108,35 @@ daNpc_ZelR_HIOParam const daNpc_ZelR_Param_c::m = { 0.0f, }; +#if DEBUG +daNpc_ZelR_HIO_c::daNpc_ZelR_HIO_c() { + m = daNpc_ZelR_Param_c::m; +} + +void daNpc_ZelR_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_ZelR_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpc_ZelR_c::~daNpc_ZelR_c() { + OS_REPORT("|%06d:%x|daNpc_ZelR_c -> デストラクト\n", g_Counter.mCounter0, this); + if (heap) { + mpMorf[0]->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + + deleteRes(l_loadResPtrnList[mType], (char const**)l_resNameList); +} + int daNpc_ZelR_c::create() { daNpcT_ct(this, daNpc_ZelR_c, l_faceMotionAnmData, &l_motionAnmData, l_faceMotionSequenceData, 4, @@ -145,6 +166,11 @@ int daNpc_ZelR_c::create() { mSound.init(¤t.pos, &eyePos, 3, 1); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("フ-ド付きロ-ブゼルダ"); +#endif + mAcch.Set(¤t.pos, &old.pos, this, 1, &mAcchCir, &speed, ¤t.angle, &shape_angle); mAcch.CrrPos(dComIfG_Bgsp()); mGndChk = mAcch.m_gnd; @@ -153,7 +179,7 @@ int daNpc_ZelR_c::create() { setEnvTevColor(); setRoomNo(); - mCcStts.Init(daNpc_ZelR_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl.Set(mCcDCyl); mCyl.SetStts(&mCcStts); mCyl.SetTgHitCallback(tgHitCallBack); @@ -440,10 +466,11 @@ void daNpc_ZelR_c::setAttnPos() { mStagger.calc(FALSE); mJntAnm.setParam(this, mpMorf[0]->getModel(), &sp38, getBackboneJointNo(), getNeckJointNo(), getHeadJointNo(), - l_HIO.m.common.body_angleX_min, l_HIO.m.common.body_angleX_max, l_HIO.m.common.body_angleY_min, - l_HIO.m.common.body_angleY_max, l_HIO.m.common.head_angleX_min, l_HIO.m.common.head_angleX_max, - l_HIO.m.common.head_angleY_min, l_HIO.m.common.head_angleY_max, l_HIO.m.common.neck_rotation_ratio, - 0.0f, NULL); + mpHIO->m.common.body_angleX_min, mpHIO->m.common.body_angleX_max, + mpHIO->m.common.body_angleY_min, mpHIO->m.common.body_angleY_max, + mpHIO->m.common.head_angleX_min, mpHIO->m.common.head_angleX_max, + mpHIO->m.common.head_angleY_min, mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, 0.0f, NULL); mJntAnm.calcJntRad(0.2f, 1.0f, cM_s2rad(mCurAngle.y - field_0xd7e.y)); @@ -455,7 +482,7 @@ void daNpc_ZelR_c::setAttnPos() { mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, 0, 1.0f, 0); attention_info.position = current.pos; - attention_info.position.y += l_HIO.m.common.attention_offset; + attention_info.position.y += mpHIO->m.common.attention_offset; } void daNpc_ZelR_c::setCollision() { diff --git a/src/d/actor/d_a_npc_zelRo.cpp b/src/d/actor/d_a_npc_zelRo.cpp index dd042dbb28..afc1a2faf1 100644 --- a/src/d/actor/d_a_npc_zelRo.cpp +++ b/src/d/actor/d_a_npc_zelRo.cpp @@ -88,14 +88,6 @@ daNpc_ZelRo_c::cutFunc daNpc_ZelRo_c::mCutList[1] = { NULL }; -daNpc_ZelRo_c::~daNpc_ZelRo_c() { - if (heap != NULL) { - mpMorf[0]->stopZelAnime(); - } - - deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); -} - const daNpc_ZelRo_HIOParam daNpc_ZelRo_Param_c::m = { 190.0f, -3.0f, @@ -140,6 +132,36 @@ const daNpc_ZelRo_HIOParam daNpc_ZelRo_Param_c::m = { 0.0f, }; +static NPC_ZELRO_HIO_CLASS l_HIO; + +#if DEBUG +daNpc_ZelRo_HIO_c::daNpc_ZelRo_HIO_c() { + m = daNpc_ZelRo_Param_c::m; +} + +void daNpc_ZelRo_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_ZelRo_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daNpc_ZelRo_c::~daNpc_ZelRo_c() { + if (heap != NULL) { + mpMorf[0]->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + + deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); +} + cPhs__Step daNpc_ZelRo_c::create() { daNpcT_ct(this, daNpc_ZelRo_c, l_faceMotionAnmData, l_motionAnmData, l_faceMotionSequenceData, 4, l_motionSequenceData, 4, l_evtList, l_resNameList); @@ -170,6 +192,11 @@ cPhs__Step daNpc_ZelRo_c::create() { mSound.init(¤t.pos, &eyePos, 3, 1); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("フ-ドなしロ-ブゼルダ"); +#endif + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); @@ -180,7 +207,7 @@ cPhs__Step daNpc_ZelRo_c::create() { setEnvTevColor(); setRoomNo(); - mCcStts.Init(daNpc_ZelRo_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl.Set(mCcDCyl); mCyl.SetStts(&mCcStts); mCyl.SetTgHitCallback(tgHitCallBack); @@ -374,25 +401,25 @@ void daNpc_ZelRo_c::setParam() { selectAction(); srchActors(); - s16 talk_distance = daNpc_ZelRo_Param_c::m.common.talk_distance; - s16 talk_angle = daNpc_ZelRo_Param_c::m.common.talk_angle; + s16 talk_distance = mpHIO->m.common.talk_distance; + s16 talk_angle = mpHIO->m.common.talk_angle; - attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(daNpc_ZelRo_Param_c::m.common.attention_distance, daNpc_ZelRo_Param_c::m.common.attention_angle); + attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(mpHIO->m.common.attention_distance, mpHIO->m.common.attention_angle); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle); attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e; - scale.set(daNpc_ZelRo_Param_c::m.common.scale, daNpc_ZelRo_Param_c::m.common.scale, daNpc_ZelRo_Param_c::m.common.scale); - mCcStts.SetWeight(daNpc_ZelRo_Param_c::m.common.weight); - mCylH = daNpc_ZelRo_Param_c::m.common.height; - mWallR = daNpc_ZelRo_Param_c::m.common.width; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_ZelRo_Param_c::m.common.knee_length); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); - mRealShadowSize = daNpc_ZelRo_Param_c::m.common.real_shadow_size; - gravity = daNpc_ZelRo_Param_c::m.common.gravity; - mExpressionMorfFrame = daNpc_ZelRo_Param_c::m.common.expression_morf_frame; - mMorfFrames = daNpc_ZelRo_Param_c::m.common.morf_frame; + mRealShadowSize = mpHIO->m.common.real_shadow_size; + gravity = mpHIO->m.common.gravity; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; } void daNpc_ZelRo_c::setAfterTalkMotion() { @@ -479,11 +506,11 @@ void daNpc_ZelRo_c::setAttnPos() { mStagger.calc(FALSE); mJntAnm.setParam(this, mpMorf[0]->getModel(), &sp48, getBackboneJointNo(), getNeckJointNo(), getHeadJointNo(), - daNpc_ZelRo_Param_c::m.common.body_angleX_min, daNpc_ZelRo_Param_c::m.common.body_angleX_max, - daNpc_ZelRo_Param_c::m.common.body_angleY_min, daNpc_ZelRo_Param_c::m.common.body_angleY_max, - daNpc_ZelRo_Param_c::m.common.head_angleX_min, daNpc_ZelRo_Param_c::m.common.head_angleX_max, - daNpc_ZelRo_Param_c::m.common.head_angleY_min, daNpc_ZelRo_Param_c::m.common.head_angleY_max, - daNpc_ZelRo_Param_c::m.common.neck_rotation_ratio, 0.0f, NULL); + mpHIO->m.common.body_angleX_min, mpHIO->m.common.body_angleX_max, + mpHIO->m.common.body_angleY_min, mpHIO->m.common.body_angleY_max, + mpHIO->m.common.head_angleX_min, mpHIO->m.common.head_angleX_max, + mpHIO->m.common.head_angleY_min, mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, 0.0f, NULL); mJntAnm.calcJntRad(0.2f, 1.0f, cM_s2rad((s16)(mCurAngle.y - field_0xd7e.y))); setMtx(); @@ -492,7 +519,7 @@ void daNpc_ZelRo_c::setAttnPos() { mJntAnm.setEyeAngleX(eyePos, 1.0f, 0); mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, FALSE, 1.0f, 0); attention_info.position = current.pos; - attention_info.position.y += daNpc_ZelRo_Param_c::m.common.attention_offset; + attention_info.position.y += mpHIO->m.common.attention_offset; } void daNpc_ZelRo_c::setCollision() { @@ -651,8 +678,6 @@ static int daNpc_ZelRo_IsDelete(void* a_this) { return 1; } -static daNpc_ZelRo_Param_c l_HIO; - static actor_method_class daNpc_ZelRo_MethodTable = { (process_method_func)daNpc_ZelRo_Create, (process_method_func)daNpc_ZelRo_Delete, diff --git a/src/d/actor/d_a_npc_zelda.cpp b/src/d/actor/d_a_npc_zelda.cpp index 0010b053ef..eaa27db6b9 100644 --- a/src/d/actor/d_a_npc_zelda.cpp +++ b/src/d/actor/d_a_npc_zelda.cpp @@ -11,12 +11,6 @@ #include "d/actor/d_a_hozelda.h" #include "d/d_debug_viewer.h" -#if DEBUG -#define HIO_PARAM(i_this) (i_this->mHIO->param) -#else -#define HIO_PARAM(_) (daNpc_Zelda_Param_c::m) -#endif - static u32 l_bmdData[2] = { 11, 1 }; static daNpcT_evtData_c l_evtList[2] = { @@ -61,19 +55,15 @@ static daNpcT_MotionSeqMngr_c::sequenceStepData_c l_motionSequenceData[8] = { const char* daNpc_Zelda_c::mCutNameList = ""; daNpc_Zelda_c::cutFunc daNpc_Zelda_c::mCutList[1] = { 0 }; -#if DEBUG -static daNpc_Zelda_HIO_c l_HIO; -#else -static daNpc_Zelda_Param_c l_HIO; -#endif +static NPC_ZELDA_HIO_CLASS l_HIO; #if DEBUG daNpc_Zelda_HIO_c::daNpc_Zelda_HIO_c() { - param = daNpc_Zelda_Param_c::m; + m = daNpc_Zelda_Param_c::m; } void daNpc_Zelda_HIO_c::genMessage(JORMContext* ctx) { - daNpcT_cmnGenMessage(ctx, ¶m.common); + daNpcT_cmnGenMessage(ctx, &m.common); ctx->genButton ("ファイル書き出し",0x40000002,0,NULL,0xffff,0xffff,0x200,0x18); } @@ -89,7 +79,7 @@ void daNpc_Zelda_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { if (aJStack_910.open(6, "", NULL, NULL, NULL) != 0) { memset(auStack_7e0, 0, 2000); int retval = 0; - daNpcT_cmnListenPropertyEvent(auStack_7e0, &retval, ¶m.common); + daNpcT_cmnListenPropertyEvent(auStack_7e0, &retval, &m.common); aJStack_910.writeData(auStack_7e0, retval); aJStack_910.close(); OS_REPORT("write append success!::%6d\n", retval); @@ -109,8 +99,8 @@ daNpc_Zelda_c::~daNpc_Zelda_c() { } #if DEBUG - if (mHIO != NULL) { - mHIO->removeHIO(); + if (mpHIO != NULL) { + mpHIO->removeHIO(); } #endif @@ -201,9 +191,9 @@ int daNpc_Zelda_c::create() { mSound.init(¤t.pos, &eyePos, 3, 1); #if DEBUG - mHIO = &l_HIO; + mpHIO = &l_HIO; // Zelda - mHIO->entryHIO("ゼルダ"); + mpHIO->entryHIO("ゼルダ"); #endif reset(); @@ -212,7 +202,7 @@ int daNpc_Zelda_c::create() { &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(HIO_PARAM(this).common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl.Set(mCcDCyl); mCyl.SetStts(&mCcStts); @@ -434,26 +424,26 @@ void daNpc_Zelda_c::setParam() { srchActors(); s32 attnFlag = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e; - s16 talkDist = HIO_PARAM(this).common.talk_distance; - s16 talkAngle = HIO_PARAM(this).common.talk_angle; - s16 attnDist = HIO_PARAM(this).common.attention_distance; - s16 attnAngle = HIO_PARAM(this).common.attention_angle; + s16 talkDist = mpHIO->m.common.talk_distance; + s16 talkAngle = mpHIO->m.common.talk_angle; + s16 attnDist = mpHIO->m.common.attention_distance; + s16 attnAngle = mpHIO->m.common.attention_angle; attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attnDist, attnAngle); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talkDist, talkAngle); attention_info.flags = attnFlag; - scale.set(HIO_PARAM(this).common.scale, HIO_PARAM(this).common.scale, HIO_PARAM(this).common.scale); - mCcStts.SetWeight(HIO_PARAM(this).common.weight); - mCylH = HIO_PARAM(this).common.height; - mWallR = HIO_PARAM(this).common.width; - mAttnFovY = HIO_PARAM(this).common.fov; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; + mAttnFovY = mpHIO->m.common.fov; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(HIO_PARAM(this).common.knee_length); - mRealShadowSize = HIO_PARAM(this).common.real_shadow_size; - mExpressionMorfFrame = HIO_PARAM(this).common.expression_morf_frame; - mMorfFrames = HIO_PARAM(this).common.morf_frame; - gravity = HIO_PARAM(this).common.gravity; + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mRealShadowSize = mpHIO->m.common.real_shadow_size; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; + gravity = mpHIO->m.common.gravity; if (field_0xf80 == 0) { mAcch.SetGrndNone(); mAcch.SetWallNone(); @@ -540,15 +530,15 @@ void daNpc_Zelda_c::setAttnPos() { getBackboneJointNo(), getNeckJointNo(), getHeadJointNo(), - HIO_PARAM(this).common.body_angleX_min, - HIO_PARAM(this).common.body_angleX_max, - HIO_PARAM(this).common.body_angleY_min, - HIO_PARAM(this).common.body_angleY_max, - HIO_PARAM(this).common.head_angleX_min, - HIO_PARAM(this).common.head_angleX_max, - HIO_PARAM(this).common.head_angleY_min, - HIO_PARAM(this).common.head_angleY_max, - HIO_PARAM(this).common.neck_rotation_ratio, + mpHIO->m.common.body_angleX_min, + mpHIO->m.common.body_angleX_max, + mpHIO->m.common.body_angleY_min, + mpHIO->m.common.body_angleY_max, + mpHIO->m.common.head_angleX_min, + mpHIO->m.common.head_angleX_max, + mpHIO->m.common.head_angleY_min, + mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, 0.0f, NULL); mJntAnm.calcJntRad(0.2f, 1.0f, dVar6); @@ -560,7 +550,7 @@ void daNpc_Zelda_c::setAttnPos() { mJntAnm.setEyeAngleX(eyePos, 1.0f, 0); mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, 0, 1.0f, 0); acStack_3c.set(0.0f, 0.0f, 0.0f); - acStack_3c.y = HIO_PARAM(this).common.attention_offset; + acStack_3c.y = mpHIO->m.common.attention_offset; if (field_0xf80 == 0) { acStack_3c.set(0.0f, 170.0f, 10.0f); } @@ -621,7 +611,7 @@ void daNpc_Zelda_c::setCollision() { int daNpc_Zelda_c::drawDbgInfo() { #if DEBUG const daNpc_Zelda_HIOParam* m = &daNpc_Zelda_Param_c::m; - if (HIO_PARAM(this).common.debug_info_ON != 0) { + if (mpHIO->m.common.debug_info_ON != 0) { f32 distMax1 = dComIfGp_getAttention()->getDistTable( attention_info.distances[fopAc_attn_JUEL_e]).mDistMax; f32 distMax2 = dComIfGp_getAttention()->getDistTable( diff --git a/src/d/actor/d_a_npc_zra.cpp b/src/d/actor/d_a_npc_zra.cpp index 2f262464da..ddc75b50d6 100644 --- a/src/d/actor/d_a_npc_zra.cpp +++ b/src/d/actor/d_a_npc_zra.cpp @@ -19,20 +19,9 @@ #include "d/actor/d_a_npc_hoz.h" #include "d/actor/d_a_obj_zraMark.h" -class daNpc_zrA_HIO_c { -public: - daNpc_zrA_Param_c::param m; -}; +static NPC_ZRA_HIO_CLASS l_HIO; -#if DEBUG -#define HIO_PARAM(i_this) (i_this->mpHIO->m) -#else -#define HIO_PARAM(_) (daNpc_zrA_Param_c::m) -#endif - -static daNpc_zrA_Param_c l_HIO; - -daNpc_zrA_Param_c::param const daNpc_zrA_Param_c::m = { +daNpc_zrA_HIOParam const daNpc_zrA_Param_c::m = { 230.0f, // mAttnOffsetY -3.0f, // mGravity 1.0f, // mScale @@ -65,6 +54,7 @@ daNpc_zrA_Param_c::param const daNpc_zrA_Param_c::m = { 0, // mTestMotion 0, // mTestLookMode false, // mTest + false, 20.0f, // mSwimSpeed 0.5f, // mMinSwimSpeedScale 0x580, // mSwimAngleSpeed @@ -447,6 +437,20 @@ daNpc_zrA_c::EventFn daNpc_zrA_c::mEvtCutList[11] = { &daNpc_zrA_c::ECut_talkMulti, }; +#if DEBUG +daNpc_zrA_HIO_c::daNpc_zrA_HIO_c() { + m = daNpc_zrA_Param_c::m; +} + +void daNpc_zrA_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_zrA_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + daNpc_zrA_c::daNpc_zrA_c() {} daNpc_zrA_c::~daNpc_zrA_c() { @@ -476,6 +480,12 @@ daNpc_zrA_c::~daNpc_zrA_c() { if (heap != NULL) { mAnm_p->stopZelAnime(); } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif } cPhs__Step daNpc_zrA_c::create() { @@ -547,11 +557,17 @@ cPhs__Step daNpc_zrA_c::create() { fopAcM_SetMtx(this, mAnm_p->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -300.0f, -50.0f, -300.0f, 300.0f, 450.0f, 300.0f); mCreatureSound.init(¤t.pos, &eyePos, 3, 1); - mAcchCir.SetWall(daNpc_zrA_Param_c::m.mWallR, daNpc_zrA_Param_c::m.mWallH); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("ゾ-ラ"); +#endif + + mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mPaPo.init(&mAcch, daNpc_zrA_Param_c::m.mCylH, daNpc_zrA_Param_c::m.mCylH); - mCcStts.Init(daNpc_zrA_Param_c::m.mCcWeight, 0, this); + mPaPo.init(&mAcch, mpHIO->m.common.height, mpHIO->m.common.height); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCcCyl.Set(mCcDCyl); mCcCyl.SetStts(&mCcStts); mCcCyl.SetTgHitCallback(tgHitCallBack); @@ -734,7 +750,7 @@ int daNpc_zrA_c::Draw() { } mShadowKey = dComIfGd_setShadow(mShadowKey, 1, model, ¤t.pos, - daNpc_zrA_Param_c::m.mShadowDepth, 20.0f, + mpHIO->m.common.real_shadow_size, 20.0f, current.pos.y, mGroundH, mGndChk, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); @@ -794,7 +810,7 @@ int daNpc_zrA_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { case 1: case 3: case 4: - setLookatMtx(jnt_no, lookat_joints, daNpc_zrA_Param_c::m.mNeckAngleScl); + setLookatMtx(jnt_no, lookat_joints, mpHIO->m.common.neck_rotation_ratio); break; } @@ -878,18 +894,18 @@ void daNpc_zrA_c::setParam() { attention_info.flags = attn_flags; - scale.set(daNpc_zrA_Param_c::m.mScale, - daNpc_zrA_Param_c::m.mScale, - daNpc_zrA_Param_c::m.mScale); + scale.set(mpHIO->m.common.scale, + mpHIO->m.common.scale, + mpHIO->m.common.scale); if (mSwimMode != SWIM_WAIT) { scale *= mScaleFactor; } - mAcchCir.SetWallR(daNpc_zrA_Param_c::m.mWallR); - mAcchCir.SetWallH(daNpc_zrA_Param_c::m.mWallH); + mAcchCir.SetWallR(mpHIO->m.common.width); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); if ((mType == TYPE_WAIT && !in_water) || mType == TYPE_SPA) { - gravity = daNpc_zrA_Param_c::m.mGravity; + gravity = mpHIO->m.common.gravity; } } @@ -909,7 +925,7 @@ BOOL daNpc_zrA_c::main() { attention_info.flags = 0; } - if (!daNpc_zrA_Param_c::m.mTest + if (!mpHIO->m.common.debug_mode_ON && (!dComIfGp_event_runCheck() || (mOrderNewEvt && dComIfGp_getEvent()->isOrderOK()))) { if (mOrderEvtNo != EVT_NONE) { @@ -986,7 +1002,7 @@ BOOL daNpc_zrA_c::ctrlBtk() { void daNpc_zrA_c::setAttnPos() { static cXyz eyeOffset(-20.0f, 10.0f, 0.0f); - f32 offset = daNpc_zrA_Param_c::m.mAttnOffsetY; + f32 offset = mpHIO->m.common.attention_offset; cXyz center, vec2, vec3, vec4, vec5; mDoMtx_stack_c::YrotS(field_0x990); @@ -1078,7 +1094,7 @@ void daNpc_zrA_c::setAttnPos() { } else if (mType == TYPE_SWIM && mPath.getPathInfo() != NULL) { extra_height = -150.0f; } - + center = current.pos; attention_info.position.set(center.x, center.y + offset, center.z); } @@ -1114,8 +1130,8 @@ void daNpc_zrA_c::setAttnPos() { } mCcCyl.SetC(center); - mCcCyl.SetH(daNpc_zrA_Param_c::m.mCylH + extra_height); - mCcCyl.SetR(daNpc_zrA_Param_c::m.mWallR + extra_radius); + mCcCyl.SetH(mpHIO->m.common.height + extra_height); + mCcCyl.SetR(mpHIO->m.common.width + extra_radius); dComIfG_Ccsp()->Set(&mCcCyl); } @@ -1665,7 +1681,7 @@ void daNpc_zrA_c::reset() { mSpinAngle = 0; mSpinTimer = 0; mSwimSpeedScale = 1.0f; - mSwimSpeedF = mSwimSpeedScale * daNpc_zrA_Param_c::m.mSwimSpeed; + mSwimSpeedF = mSwimSpeedScale * mpHIO->m.mSwimSpeed; mSwimMode = SWIM_WAIT; field_0x1521 = false; mWaistAngle.set(0, 0, 0); @@ -1707,57 +1723,57 @@ void daNpc_zrA_c::reset() { } void daNpc_zrA_c::playExpression() { - daNpcF_anmPlayData dat0a = {ANM_F_TALK_NOMAL, daNpc_zrA_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat0b = {ANM_FH_TALK_NOMAL, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat0a = {ANM_F_TALK_NOMAL, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat0b = {ANM_FH_TALK_NOMAL, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[2] = {&dat0a, &dat0b}; - daNpcF_anmPlayData dat1 = {ANM_FH_SADSIT_A, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat1 = {ANM_FH_SADSIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[1] = {&dat1}; - daNpcF_anmPlayData dat2 = {ANM_FH_SADSIT_B, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat2 = {ANM_FH_SADSIT_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[1] = {&dat2}; - daNpcF_anmPlayData dat3 = {ANM_FH_SADSIT_C, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat3 = {ANM_FH_SADSIT_C, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[1] = {&dat3}; - daNpcF_anmPlayData dat4 = {ANM_FH_SADSIT_D, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat4 = {ANM_FH_SADSIT_D, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat4[1] = {&dat4}; - daNpcF_anmPlayData dat5 = {ANM_FH_SADSIT_E, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat5 = {ANM_FH_SADSIT_E, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat5[1] = {&dat5}; - daNpcF_anmPlayData dat6a = {ANM_F_LOOKING_SP, daNpc_zrA_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat6b = {ANM_FH_LOOKING_SP, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat6a = {ANM_F_LOOKING_SP, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat6b = {ANM_FH_LOOKING_SP, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat6[2] = {&dat6a, &dat6b}; - daNpcF_anmPlayData dat7a = {ANM_F_LOOKUP, daNpc_zrA_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat7b = {ANM_FH_LOOKUP, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat7a = {ANM_F_LOOKUP, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat7b = {ANM_FH_LOOKUP, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat7[2] = {&dat7a, &dat7b}; - daNpcF_anmPlayData dat8a = {ANM_F_SPA_TALK_A, daNpc_zrA_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat8b = {ANM_FH_SPA_WAIT_A, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat8a = {ANM_F_SPA_TALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat8b = {ANM_FH_SPA_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat8[2] = {&dat8a, &dat8b}; - daNpcF_anmPlayData dat9a = {ANM_F_SPA_TALK_B, daNpc_zrA_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat9b = {ANM_FH_SPA_WAIT_B, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat9a = {ANM_F_SPA_TALK_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat9b = {ANM_FH_SPA_WAIT_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat9[2] = {&dat9a, &dat9b}; - daNpcF_anmPlayData dat10a = {ANM_F_TALK_SWIM_SP, daNpc_zrA_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat10b = {ANM_NONE, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat10a = {ANM_F_TALK_SWIM_SP, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat10b = {ANM_NONE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat10[2] = {&dat10a, &dat10b}; - daNpcF_anmPlayData dat11a = {ANM_F_TALK_B_SP, daNpc_zrA_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat11b = {ANM_NONE, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat11a = {ANM_F_TALK_B_SP, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11b = {ANM_NONE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat11[2] = {&dat11a, &dat11b}; - daNpcF_anmPlayData dat12a = {ANM_F_TALK_A, daNpc_zrA_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat12b = {ANM_NONE, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat12a = {ANM_F_TALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat12b = {ANM_NONE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat12[2] = {&dat12a, &dat12b}; - daNpcF_anmPlayData dat13a = {ANM_F_WAIT_SWIM, daNpc_zrA_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat13b = {ANM_NONE, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat13a = {ANM_F_WAIT_SWIM, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat13b = {ANM_NONE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat13[2] = {&dat13a, &dat13b}; - daNpcF_anmPlayData dat14a = {ANM_F_TALK_A_SP, daNpc_zrA_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat14b = {ANM_NONE, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat14a = {ANM_F_TALK_A_SP, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat14b = {ANM_NONE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat14[2] = {&dat14a, &dat14b}; - daNpcF_anmPlayData dat15 = {ANM_FH_TALK_NOMAL, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat15 = {ANM_FH_TALK_NOMAL, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat15[1] = {&dat15}; - daNpcF_anmPlayData dat16 = {ANM_FH_LOOKING_SP, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat16 = {ANM_FH_LOOKING_SP, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat16[1] = {&dat16}; - daNpcF_anmPlayData dat17 = {ANM_FH_LOOKUP, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat17 = {ANM_FH_LOOKUP, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat17[1] = {&dat17}; - daNpcF_anmPlayData dat18 = {ANM_FH_SPA_WAIT_A, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat18 = {ANM_FH_SPA_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat18[1] = {&dat18}; - daNpcF_anmPlayData dat19 = {ANM_FH_SPA_WAIT_B, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat19 = {ANM_FH_SPA_WAIT_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat19[1] = {&dat19}; - daNpcF_anmPlayData dat20 = {ANM_NONE, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat20 = {ANM_NONE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat20[1] = {&dat20}; daNpcF_anmPlayData** ppDat[21] = { pDat0, pDat1, pDat2, pDat3, pDat4, pDat5, pDat6, pDat7, pDat8, pDat9, pDat10, pDat11, @@ -1769,90 +1785,90 @@ void daNpc_zrA_c::playExpression() { } void daNpc_zrA_c::playMotion() { - daNpcF_anmPlayData dat0 = {ANM_WAIT_A, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat0 = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1 = {ANM_WAIT_SWIM, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat1 = {ANM_WAIT_SWIM, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[1] = {&dat1}; - daNpcF_anmPlayData dat2a = {ANM_SWIM_TALK, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat2a = {ANM_SWIM_TALK, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat2b = {ANM_WAIT_SWIM, 0.0f, 0}; daNpcF_anmPlayData* pDat2[2] = {&dat2a, &dat2b}; - daNpcF_anmPlayData dat3 = {ANM_WAIT_A, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat3 = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[1] = {&dat3}; - daNpcF_anmPlayData dat4 = {ANM_WAIT_SWIM, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat4 = {ANM_WAIT_SWIM, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat4[1] = {&dat4}; - daNpcF_anmPlayData dat5a = {ANM_TALK_A, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat5a = {ANM_TALK_A, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat5b = {ANM_WAIT_A, 0.0f, 0}; daNpcF_anmPlayData* pDat5[2] = {&dat5a, &dat5b}; - daNpcF_anmPlayData dat6 = {ANM_SADSIT_A, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat6 = {ANM_SADSIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat6[1] = {&dat6}; - daNpcF_anmPlayData dat7 = {ANM_SADSIT_B, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat7 = {ANM_SADSIT_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat7[1] = {&dat7}; - daNpcF_anmPlayData dat8 = {ANM_SADSIT_C, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat8 = {ANM_SADSIT_C, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat8[1] = {&dat8}; - daNpcF_anmPlayData dat9 = {ANM_SADSIT_D, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat9 = {ANM_SADSIT_D, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat9[1] = {&dat9}; - daNpcF_anmPlayData dat10 = {ANM_SADSIT_E, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat10 = {ANM_SADSIT_E, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat10[1] = {&dat10}; - daNpcF_anmPlayData dat11 = {ANM_LOOKING_SP, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat11 = {ANM_LOOKING_SP, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat11[1] = {&dat11}; - daNpcF_anmPlayData dat12 = {ANM_LOOKUP, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat12 = {ANM_LOOKUP, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat12[1] = {&dat12}; - daNpcF_anmPlayData dat13a = {ANM_SPA_TALK_A, daNpc_zrA_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat13b = {ANM_SPA_WAIT_A, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat13a = {ANM_SPA_TALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat13b = {ANM_SPA_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat13[2] = {&dat13a, &dat13b}; - daNpcF_anmPlayData dat14a = {ANM_SPA_TALK_B, daNpc_zrA_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat14b = {ANM_SPA_WAIT_B, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat14a = {ANM_SPA_TALK_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat14b = {ANM_SPA_WAIT_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat14[2] = {&dat14a, &dat14b}; - daNpcF_anmPlayData dat15a = {ANM_TALK_SWIM_SP, daNpc_zrA_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat15b = {ANM_WAIT_SWIM_SP, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat15a = {ANM_TALK_SWIM_SP, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat15b = {ANM_WAIT_SWIM_SP, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat15[2] = {&dat15a, &dat15b}; - daNpcF_anmPlayData dat16a = {ANM_TALK_B_SP, daNpc_zrA_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat16b = {ANM_WAIT_SP, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat16a = {ANM_TALK_B_SP, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat16b = {ANM_WAIT_SP, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat16[2] = {&dat16a, &dat16b}; - daNpcF_anmPlayData dat17a = {ANM_TALK_A, daNpc_zrA_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat17b = {ANM_WAIT_A, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat17a = {ANM_TALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat17b = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat17[2] = {&dat17a, &dat17b}; - daNpcF_anmPlayData dat18 = {ANM_SPA_WAIT_A, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat18 = {ANM_SPA_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat18[1] = {&dat18}; - daNpcF_anmPlayData dat19 = {ANM_SPA_WAIT_B, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat19 = {ANM_SPA_WAIT_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat19[1] = {&dat19}; - daNpcF_anmPlayData dat20 = {ANM_WALK_A, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat20 = {ANM_WALK_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat20[1] = {&dat20}; - daNpcF_anmPlayData dat22 = {ANM_SWIM_A, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat22 = {ANM_SWIM_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat22[1] = {&dat22}; - daNpcF_anmPlayData dat23 = {ANM_SWIM_B, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat23 = {ANM_SWIM_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat23[1] = {&dat23}; - daNpcF_anmPlayData dat24a = {ANM_DIVE, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat24a = {ANM_DIVE, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat24b = {ANM_SWIM_A, 0.0f, 0}; daNpcF_anmPlayData* pDat24[2] = {&dat24a, &dat24b}; daNpcF_anmPlayData dat25a = {ANM_DIVE_B, 3.0f, 1}; daNpcF_anmPlayData dat25b = {ANM_SWIM_A, 0.0f, 0}; daNpcF_anmPlayData* pDat25[2] = {&dat25a, &dat25b}; - daNpcF_anmPlayData dat26a = {ANM_DIVE, daNpc_zrA_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat26b = {ANM_SWIM_B, daNpc_zrA_Param_c::m.mMorfFrames / 2.0f, 0}; + daNpcF_anmPlayData dat26a = {ANM_DIVE, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat26b = {ANM_SWIM_B, mpHIO->m.common.morf_frame / 2.0f, 0}; daNpcF_anmPlayData* pDat26[2] = {&dat26a, &dat26b}; daNpcF_anmPlayData dat27a = {ANM_DIVE_B, 3.0f, 1}; - daNpcF_anmPlayData dat27b = {ANM_SWIM_B, daNpc_zrA_Param_c::m.mMorfFrames / 2.0f, 0}; + daNpcF_anmPlayData dat27b = {ANM_SWIM_B, mpHIO->m.common.morf_frame / 2.0f, 0}; daNpcF_anmPlayData* pDat27[2] = {&dat27a, &dat27b}; daNpcF_anmPlayData dat28 = {ANM_STEP, 2.0f, 0}; daNpcF_anmPlayData* pDat28[1] = {&dat28}; - daNpcF_anmPlayData dat29a = {ANM_FLOAT, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat29a = {ANM_FLOAT, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat29b = {ANM_WAIT_SWIM, 2.0f, 0}; daNpcF_anmPlayData* pDat29[2] = {&dat29a, &dat29b}; - daNpcF_anmPlayData dat30a = {ANM_FLOAT_B, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat30a = {ANM_FLOAT_B, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat30b = {ANM_WAIT_SWIM, 2.0f, 0}; daNpcF_anmPlayData* pDat30[2] = {&dat30a, &dat30b}; - daNpcF_anmPlayData dat31a = {ANM_SWIM_TURN, daNpc_zrA_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat31b = {ANM_STILL, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat31a = {ANM_SWIM_TURN, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat31b = {ANM_STILL, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat31[2] = {&dat31a, &dat31b}; - daNpcF_anmPlayData dat32 = {ANM_TOBIKOMI_S, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat32 = {ANM_TOBIKOMI_S, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat32[1] = {&dat32}; daNpcF_anmPlayData dat33 = {ANM_TOBIKOMI_T, 0.0f, 0}; daNpcF_anmPlayData* pDat33[1] = {&dat33}; - daNpcF_anmPlayData dat34a = {ANM_TOBIKOMI_E, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat34a = {ANM_TOBIKOMI_E, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat34b = {ANM_SWIM_A, 0.0f, 0}; daNpcF_anmPlayData* pDat34[2] = {&dat34a, &dat34b}; - daNpcF_anmPlayData dat35 = {ANM_FALLSWIM, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat35 = {ANM_FALLSWIM, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat35[1] = {&dat35}; daNpcF_anmPlayData** ppDat[36] = { pDat0, pDat1, pDat2, pDat3, pDat4, pDat5, pDat6, pDat7, pDat8, pDat9, pDat10, pDat11, @@ -1884,7 +1900,7 @@ bool daNpc_zrA_c::setAction(ActionFn i_action) { bool daNpc_zrA_c::selectAction() { mpNextActionFn = NULL; - if (daNpc_zrA_Param_c::m.mTest) { + if (mpHIO->m.common.debug_mode_ON) { mpNextActionFn = &daNpc_zrA_c::test; } else { switch (mType) { @@ -2147,14 +2163,14 @@ void daNpc_zrA_c::lookat() { fopAc_ac_c* attn_actor = NULL; J3DModel* model = mAnm_p->getModel(); BOOL snap = false; - f32 body_down_angle = daNpc_zrA_Param_c::m.mBodyDownAngle; - f32 body_up_angle = daNpc_zrA_Param_c::m.mBodyUpAngle; - f32 body_right_angle = daNpc_zrA_Param_c::m.mBodyRightAngle; - f32 body_left_angle = daNpc_zrA_Param_c::m.mBodyLeftAngle; - f32 head_down_angle = daNpc_zrA_Param_c::m.mHeadDownAngle; - f32 head_up_angle = daNpc_zrA_Param_c::m.mHeadUpAngle; - f32 head_right_angle = daNpc_zrA_Param_c::m.mHeadRightAngle; - f32 head_left_angle = daNpc_zrA_Param_c::m.mHeadLeftAngle; + f32 body_down_angle = mpHIO->m.common.body_angleX_min; + f32 body_up_angle = mpHIO->m.common.body_angleX_max; + f32 body_right_angle = mpHIO->m.common.body_angleY_min; + f32 body_left_angle = mpHIO->m.common.body_angleY_max; + f32 head_down_angle = mpHIO->m.common.head_angleX_min; + f32 head_up_angle = mpHIO->m.common.head_angleX_max; + f32 head_right_angle = mpHIO->m.common.head_angleY_min; + f32 head_left_angle = mpHIO->m.common.head_angleY_max; s16 angle_delta = mCurAngle.y - mOldAngle.y; cXyz lookat_pos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; csXyz* lookat_angle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; @@ -2271,11 +2287,11 @@ BOOL daNpc_zrA_c::test(void* param_0) { // fallthrough case 2: - if (daNpc_zrA_Param_c::m.mTestExpression != mExpression) { - setExpression(daNpc_zrA_Param_c::m.mTestExpression, daNpc_zrA_Param_c::m.mMorfFrames); + if (mpHIO->m.common.face_expression != mExpression) { + setExpression(mpHIO->m.common.face_expression, mpHIO->m.common.morf_frame); } - setMotion(daNpc_zrA_Param_c::m.mTestMotion, daNpc_zrA_Param_c::m.mMorfFrames, false); - setLookMode(daNpc_zrA_Param_c::m.mTestLookMode); + setMotion(mpHIO->m.common.motion, mpHIO->m.common.morf_frame, false); + setLookMode(mpHIO->m.common.look_mode); mOrderEvtNo = EVT_NONE; attention_info.flags = 0; break; diff --git a/src/d/actor/d_a_npc_zra.inc b/src/d/actor/d_a_npc_zra.inc index 4ef98c107b..e377682c71 100644 --- a/src/d/actor/d_a_npc_zra.inc +++ b/src/d/actor/d_a_npc_zra.inc @@ -105,10 +105,10 @@ void daNpc_zrA_c::walkCalc() { mPath.getDstPosDstXZ(current.pos, next_pnt); } s16 target_angle = cLib_targetAngleY(¤t.pos, &next_pnt); - speedF = HIO_PARAM(this).mWalkSpeed; - mAnm_p->setPlaySpeed(HIO_PARAM(this).mWalkSpeed / HIO_PARAM(this).mWalkAnmRate); + speedF = mpHIO->m.mWalkSpeed; + mAnm_p->setPlaySpeed(mpHIO->m.mWalkSpeed / mpHIO->m.mWalkAnmRate); cLib_addCalcAngleS2(¤t.angle.y, target_angle, - HIO_PARAM(this).mWalkAngleScale, HIO_PARAM(this).mWalkAngleSpeed); + mpHIO->m.mWalkAngleScale, mpHIO->m.mWalkAngleSpeed); mCurAngle = current.angle; shape_angle = mCurAngle; mOldAngle.y = mCurAngle.y; @@ -395,7 +395,7 @@ BOOL daNpc_zrA_c::swim(void* param_0) { mSpinTimer = (int)(cM_rnd() * 60.0f) + 90; mSwimMode = SWIM_RAIL; field_0x1521 = true; - mScaleFactor = HIO_PARAM(this).mMaxScaleFactor; + mScaleFactor = mpHIO->m.mMaxScaleFactor; mCcStts.SetWeight(0); } } else { @@ -435,7 +435,7 @@ BOOL daNpc_zrA_c::swim(void* param_0) { } BOOL daNpc_zrA_c::railSwim() { - s16 ang_step = HIO_PARAM(this).mSwimAngleSpeed; + s16 ang_step = mpHIO->m.mSwimAngleSpeed; s16 ang_scale = 8; f32 fvar15 = 0.1f; f32 fvar2 = 1.0f; @@ -477,7 +477,7 @@ BOOL daNpc_zrA_c::railSwim() { mCreatureSound.startCreatureSound(Z2SE_ZRA_DIVE_SPLASH, 0, -1); } - if (current.pos.y <= water_height - HIO_PARAM(this).mMinDepth) { + if (current.pos.y <= water_height - mpHIO->m.mMinDepth) { field_0x153e = false; field_0x153c = false; mSwimSpeedScale = 1.0f; @@ -597,11 +597,11 @@ BOOL daNpc_zrA_c::railSwim() { calcSwimAngle(angle, mSwimAngleCalc, ang_scale, ang_step); } - if (mSwimSpeedF > fvar3 * HIO_PARAM(this).mSwimSpeed) { + if (mSwimSpeedF > fvar3 * mpHIO->m.mSwimSpeed) { fvar15 *= 2.0f; fvar2 *= 0.5f; } - cLib_addCalc2(&mSwimSpeedF, fvar3 * HIO_PARAM(this).mSwimSpeed, fvar15, fvar2); + cLib_addCalc2(&mSwimSpeedF, fvar3 * mpHIO->m.mSwimSpeed, fvar15, fvar2); if (field_0x153c == true && mIsAboveWater == true) { if (mAnm_p->getFrame() > 13.0f && mAnm_p->getFrame() < 21.0f) { @@ -611,7 +611,7 @@ BOOL daNpc_zrA_c::railSwim() { } } else if (!bvar6) { f32 play_speed = mAnm_p->getPlaySpeed(); - cLib_addCalc2(&play_speed, mSwimSpeedF / HIO_PARAM(this).mSwimAnmRate, 0.2f, 0.1f); + cLib_addCalc2(&play_speed, mSwimSpeedF / mpHIO->m.mSwimAnmRate, 0.2f, 0.1f); mAnm_p->setPlaySpeed(play_speed); } @@ -619,9 +619,9 @@ BOOL daNpc_zrA_c::railSwim() { calcSwimPos(swim_speed); if (!field_0x153c && mAcch.ChkWaterHit() - && current.pos.y > water_height - HIO_PARAM(this).mMinDepth) + && current.pos.y > water_height - mpHIO->m.mMinDepth) { - current.pos.y = water_height - HIO_PARAM(this).mMinDepth; + current.pos.y = water_height - mpHIO->m.mMinDepth; } if (cLib_calcTimer(&mSpinTimer) == 0) { @@ -653,8 +653,8 @@ BOOL daNpc_zrA_c::railSwim() { } else { mSpinTimer = (int)(cM_rnd() * 60.0f) + 90; mSpinAngle = 0; - mSwimSpeedScale = cM_rnd() * (1.0f - HIO_PARAM(this).mMinSwimSpeedScale) - + HIO_PARAM(this).mMinSwimSpeedScale; + mSwimSpeedScale = cM_rnd() * (1.0f - mpHIO->m.mMinSwimSpeedScale) + + mpHIO->m.mMinSwimSpeedScale; } } @@ -697,8 +697,8 @@ BOOL daNpc_zrA_c::waitSwim() { if (home.angle.y == mCurAngle.y) { fopAc_ac_c* actor = getAttnActorP(mActorMngr[0].getActorP() != NULL, srchAttnActor1, - HIO_PARAM(this).mAttnRadius, HIO_PARAM(this).mAttnUpperY, - HIO_PARAM(this).mAttnLowerY, HIO_PARAM(this).mAttnFovY, + mpHIO->m.common.search_distance, mpHIO->m.common.search_height, + mpHIO->m.common.search_depth, mpHIO->m.common.fov, shape_angle.y, 120, true); if (actor != NULL) { mActorMngr[1].entry(actor); @@ -734,7 +734,7 @@ BOOL daNpc_zrA_c::turnSwimInit() { } BOOL daNpc_zrA_c::turnSwim() { - s16 ang_step = HIO_PARAM(this).mSwimAngleSpeed; + s16 ang_step = mpHIO->m.mSwimAngleSpeed; cXyz pos; csXyz angle; mPath.getDstPosDst2(current.pos, pos); @@ -755,14 +755,14 @@ BOOL daNpc_zrA_c::turnSwim() { mAnm_p->setPlaySpeed(0.8f); } else { cXyz swim_speed; - mSwimSpeedF = 1.5f * HIO_PARAM(this).mSwimSpeed; + mSwimSpeedF = 1.5f * mpHIO->m.mSwimSpeed; swim_speed.set(0.0f, 0.0f, mSwimSpeedF); calcSwimPos(swim_speed); mAnm_p->setPlaySpeed(1.0f); } } else if (mBaseMotionAnm == ANM_STILL) { cXyz swim_speed; - mSwimSpeedF = 1.5f * HIO_PARAM(this).mSwimSpeed; + mSwimSpeedF = 1.5f * mpHIO->m.mSwimSpeed; swim_speed.set(0.0f, 0.0f, mSwimSpeedF); calcSwimPos(swim_speed); mAnm_p->setPlaySpeed(1.0f); @@ -783,9 +783,9 @@ BOOL daNpc_zrA_c::turnSwim() { } if (mAcch.ChkWaterHit() - && current.pos.y > mAcch.m_wtr.GetHeight() - HIO_PARAM(this).mMinDepth) + && current.pos.y > mAcch.m_wtr.GetHeight() - mpHIO->m.mMinDepth) { - current.pos.y = mAcch.m_wtr.GetHeight() - HIO_PARAM(this).mMinDepth; + current.pos.y = mAcch.m_wtr.GetHeight() - mpHIO->m.mMinDepth; } return true; @@ -868,9 +868,9 @@ void daNpc_zrA_c::calcBank(s16 i_step, s16 i_scale, s16& i_angY, s16& o_angZ) { void daNpc_zrA_c::calcWaistAngle() { if (mResetWaistAngle) { - cLib_chaseAngleS(&mWaistAngle.x, 0, HIO_PARAM(this).mSwimAngleSpeed / 2); - cLib_chaseAngleS(&mWaistAngle.y, 0, HIO_PARAM(this).mSwimAngleSpeed / 2); - cLib_chaseAngleS(&mWaistAngle.z, 0, HIO_PARAM(this).mSwimAngleSpeed / 2); + cLib_chaseAngleS(&mWaistAngle.x, 0, mpHIO->m.mSwimAngleSpeed / 2); + cLib_chaseAngleS(&mWaistAngle.y, 0, mpHIO->m.mSwimAngleSpeed / 2); + cLib_chaseAngleS(&mWaistAngle.z, 0, mpHIO->m.mSwimAngleSpeed / 2); } else { mDoMtx_stack_c::push(); @@ -878,18 +878,18 @@ void daNpc_zrA_c::calcWaistAngle() { angle.x = cLib_targetAngleX(&field_0x1578, ¤t.pos); angle.y = cLib_targetAngleY(¤t.pos, &field_0x1578); angle.z = 0; - cXyz vec(0.0f, 0.0f, HIO_PARAM(this).field_0x8c); + cXyz vec(0.0f, 0.0f, mpHIO->m.field_0x8c); mDoMtx_stack_c::ZXYrotS(angle); mDoMtx_stack_c::multVec(&vec, &field_0x1578); if (mIsTurning) { - vec.set(0.0f, 0.0f, HIO_PARAM(this).field_0x90); + vec.set(0.0f, 0.0f, mpHIO->m.field_0x90); cXyz vec2; mDoMtx_stack_c::ZXYrotS(current.angle); mDoMtx_stack_c::multVec(&vec, &vec2); field_0x1578 -= vec2; field_0x1578.normalize(); - field_0x1578 *= HIO_PARAM(this).field_0x8c; + field_0x1578 *= mpHIO->m.field_0x8c; } mDoMtx_stack_c::ZXYrotS(current.angle); @@ -906,7 +906,7 @@ void daNpc_zrA_c::calcWaistAngle() { } void daNpc_zrA_c::calcWaistAngleInit() { - cXyz vec(0.0f, 0.0f, -HIO_PARAM(this).field_0x8c); + cXyz vec(0.0f, 0.0f, -mpHIO->m.field_0x8c); mDoMtx_stack_c::ZXYrotS(mCurAngle); mDoMtx_stack_c::transM(vec); mDoMtx_stack_c::multVecZero(&field_0x1578); @@ -971,17 +971,17 @@ void daNpc_zrA_c::calcSwimPos(cXyz& i_speed) { } void daNpc_zrA_c::calcWaitSwim(BOOL param_0) { - cLib_chaseAngleS(¤t.angle.x, 0, HIO_PARAM(this).mSwimAngleSpeed); - cLib_chaseAngleS(¤t.angle.z, 0, HIO_PARAM(this).mSwimAngleSpeed); + cLib_chaseAngleS(¤t.angle.x, 0, mpHIO->m.mSwimAngleSpeed); + cLib_chaseAngleS(¤t.angle.z, 0, mpHIO->m.mSwimAngleSpeed); mCurAngle = current.angle; shape_angle = mCurAngle; cLib_chaseF(&mSwimSpeedF, 0.0f, 2.0f); - cLib_chaseF(&mScaleFactor, 1.0f, (HIO_PARAM(this).mMaxScaleFactor - 1.0f) / 30.0f); + cLib_chaseF(&mScaleFactor, 1.0f, (mpHIO->m.mMaxScaleFactor - 1.0f) / 30.0f); calcModulation(); if (param_0 && mAcch.ChkWaterHit() - && current.pos.y > mAcch.m_wtr.GetHeight() - HIO_PARAM(this).mMinDepth) + && current.pos.y > mAcch.m_wtr.GetHeight() - mpHIO->m.mMinDepth) { - current.pos.y = mAcch.m_wtr.GetHeight() - HIO_PARAM(this).mMinDepth; + current.pos.y = mAcch.m_wtr.GetHeight() - mpHIO->m.mMinDepth; } } @@ -1000,7 +1000,7 @@ BOOL daNpc_zrA_c::ECut_talkSwim(int i_staffID) { mAcch.ClrGrndNone(); mAcch.ClrWallNone(); setExpression(EXPR_NONE, -1.0f); - setMotion(MOT_FLOAT, HIO_PARAM(this).mMorfFrames, true); + setMotion(MOT_FLOAT, mpHIO->m.common.morf_frame, true); mTurnMode = 0; mMode = 2; mSwimSpeed.set(0.0f, 0.0f, mSwimSpeedF); @@ -1031,19 +1031,19 @@ BOOL daNpc_zrA_c::ECut_talkSwim(int i_staffID) { break; } - cLib_chaseAngleS(¤t.angle.x, 0, HIO_PARAM(this).mSwimAngleSpeed); - cLib_chaseAngleS(¤t.angle.z, 0, HIO_PARAM(this).mSwimAngleSpeed); + cLib_chaseAngleS(¤t.angle.x, 0, mpHIO->m.mSwimAngleSpeed); + cLib_chaseAngleS(¤t.angle.z, 0, mpHIO->m.mSwimAngleSpeed); cLib_chaseAngleS(¤t.angle.y, fopAcM_searchPlayerAngleY(this), - HIO_PARAM(this).mSwimAngleSpeed); - cLib_chaseF(&mScaleFactor, 1.0f, (HIO_PARAM(this).mMaxScaleFactor - 1.0f) / 30.0f); + mpHIO->m.mSwimAngleSpeed); + cLib_chaseF(&mScaleFactor, 1.0f, (mpHIO->m.mMaxScaleFactor - 1.0f) / 30.0f); cXyz zero(0.0f, 0.0f, 0.0f); cLib_chasePos(&mSwimSpeed, zero, 0.5f); current.pos += mSwimSpeed; f32 water_y; if (fopAcM_getWaterY(¤t.pos, &water_y) - && current.pos.y > water_y - HIO_PARAM(this).mMinDepth - 50.0f) + && current.pos.y > water_y - mpHIO->m.mMinDepth - 50.0f) { - cLib_chaseF(¤t.pos.y, water_y - HIO_PARAM(this).mMinDepth - 50.0f, 20.0f); + cLib_chaseF(¤t.pos.y, water_y - mpHIO->m.mMinDepth - 50.0f, 20.0f); } mCurAngle = current.angle; shape_angle = mCurAngle; @@ -1054,13 +1054,13 @@ BOOL daNpc_zrA_c::ECut_talkSwim(int i_staffID) { calcModulation(); if (talkProc(NULL, true, NULL)) { if (mActionType == ACT_TYPE_0) { - setMotion(MOT_DIVE_SWIM_B, HIO_PARAM(this).mMorfFrames / 2.0f, true); + setMotion(MOT_DIVE_SWIM_B, mpHIO->m.common.morf_frame / 2.0f, true); } else { - setMotion(MOT_DIVE_SWIM_A, HIO_PARAM(this).mMorfFrames / 2.0f, true); + setMotion(MOT_DIVE_SWIM_A, mpHIO->m.common.morf_frame / 2.0f, true); } mSwimAngleCalc = current.angle; mSwimSpeedScale = 1.0f; - mSwimSpeedF = mSwimSpeedScale * HIO_PARAM(this).mSwimSpeed; + mSwimSpeedF = mSwimSpeedScale * mpHIO->m.mSwimSpeed; setLookMode(LOOK_NONE); ret = true; } @@ -1068,9 +1068,9 @@ BOOL daNpc_zrA_c::ECut_talkSwim(int i_staffID) { case 2: { resetModulation(); - s16 swim_angle_speed = HIO_PARAM(this).mSwimAngleSpeed; - cLib_chaseF(&mScaleFactor, HIO_PARAM(this).mMaxScaleFactor, - (HIO_PARAM(this).mMaxScaleFactor - 1.0f) / 30.0f); + s16 swim_angle_speed = mpHIO->m.mSwimAngleSpeed; + cLib_chaseF(&mScaleFactor, mpHIO->m.mMaxScaleFactor, + (mpHIO->m.mMaxScaleFactor - 1.0f) / 30.0f); cXyz vec; csXyz angle; mPath.getDstPosDst2(current.pos, vec); @@ -1086,7 +1086,7 @@ BOOL daNpc_zrA_c::ECut_talkSwim(int i_staffID) { if (!calcWaistAngleCheck()) { calcWaistAngleInit(); mSwimSpeedScale = 1.0f; - mSwimSpeedF = mSwimSpeedScale * HIO_PARAM(this).mSwimSpeed; + mSwimSpeedF = mSwimSpeedScale * mpHIO->m.mSwimSpeed; } cXyz swim_speed(0.0f, 0.0f, mSwimSpeedF); calcSwimPos(swim_speed); @@ -1095,9 +1095,9 @@ BOOL daNpc_zrA_c::ECut_talkSwim(int i_staffID) { } if (mAcch.ChkWaterHit() - && current.pos.y > mAcch.m_wtr.GetHeight() - HIO_PARAM(this).mMinDepth) + && current.pos.y > mAcch.m_wtr.GetHeight() - mpHIO->m.mMinDepth) { - current.pos.y = mAcch.m_wtr.GetHeight() - HIO_PARAM(this).mMinDepth; + current.pos.y = mAcch.m_wtr.GetHeight() - mpHIO->m.mMinDepth; } break; } @@ -1172,7 +1172,7 @@ BOOL daNpc_zrA_c::waitWaterfall(void* param_0) { } BOOL daNpc_zrA_c::swimWaterfall(void* param_0) { - s16 angle_step = HIO_PARAM(this).mSwimAngleSpeed * 2; + s16 angle_step = mpHIO->m.mSwimAngleSpeed * 2; s16 angle_scale = 2; cXyz point, swim_speed; @@ -1191,7 +1191,7 @@ BOOL daNpc_zrA_c::swimWaterfall(void* param_0) { setMotion(MOT_SWIM_A, -1.0f, false); } mSwimMode = SWIM_RAIL; - mScaleFactor = HIO_PARAM(this).mMaxScaleFactor; + mScaleFactor = mpHIO->m.mMaxScaleFactor; mCcStts.SetWeight(0); setLookMode(LOOK_NONE); mAttnChangeTimer = 0; @@ -1266,14 +1266,14 @@ BOOL daNpc_zrA_c::swimWaterfall(void* param_0) { } else { mSwimSpeedScale = 1.0f; } - cLib_addCalc2(&mSwimSpeedF, mSwimSpeedScale * HIO_PARAM(this).mSwimSpeed, 0.1f, 1.0f); + cLib_addCalc2(&mSwimSpeedF, mSwimSpeedScale * mpHIO->m.mSwimSpeed, 0.1f, 1.0f); swim_speed.set(0.0f, 0.0f, mSwimSpeedF); calcSwimPos(swim_speed); if (!bvar5) { f32 play_speed = mAnm_p->getPlaySpeed(); f32 target_speed = - cLib_minMaxLimit(mSwimSpeedF / HIO_PARAM(this).mSwimAnmRate, 0.0f, 1.5f); + cLib_minMaxLimit(mSwimSpeedF / mpHIO->m.mSwimAnmRate, 0.0f, 1.5f); cLib_addCalc2(&play_speed, target_speed, 0.2f, 0.1f); mAnm_p->setPlaySpeed(play_speed); } @@ -1302,7 +1302,7 @@ BOOL daNpc_zrA_c::diveWaterfall(void* param_0) { setMotion(MOT_DIVE_B_SWIM_A, -1.0f, false); mSwimAngleCalc = current.angle; mSwimSpeedScale = 1.0f; - mSwimSpeedF = mSwimSpeedScale * HIO_PARAM(this).mSwimSpeed; + mSwimSpeedF = mSwimSpeedScale * mpHIO->m.mSwimSpeed; setLookMode(LOOK_NONE); mSwimMode = SWIM_RAIL; mActionSelect = 3; @@ -1310,7 +1310,7 @@ BOOL daNpc_zrA_c::diveWaterfall(void* param_0) { // fallthrough case 2: - if (diveCalc(HIO_PARAM(this).mSwimAngleSpeed, 4, false)) { + if (diveCalc(mpHIO->m.mSwimAngleSpeed, 4, false)) { mActionSelect = 1; setAction(&daNpc_zrA_c::swimWaterfall); } @@ -1362,7 +1362,7 @@ BOOL daNpc_zrA_c::talkSwim(void* param_0) { field_0x1558 = 1; mSwimAngleCalc = current.angle; mSwimSpeedScale = 1.0f; - mSwimSpeedF = mSwimSpeedScale * HIO_PARAM(this).mSwimSpeed; + mSwimSpeedF = mSwimSpeedScale * mpHIO->m.mSwimSpeed; setLookMode(LOOK_NONE); } else { mMode = 3; @@ -1420,7 +1420,7 @@ BOOL daNpc_zrA_c::ECut_carryWaterfall(int i_staffID) { mAcch.SetWallNone(); field_0x153d = false; mSwimMode = SWIM_RAIL; - mScaleFactor = HIO_PARAM(this).mMaxScaleFactor; + mScaleFactor = mpHIO->m.mMaxScaleFactor; mCcStts.SetWeight(0); setLookMode(LOOK_NONE); mAttnChangeTimer = 0; @@ -1469,7 +1469,7 @@ BOOL daNpc_zrA_c::ECut_carryWaterfall(int i_staffID) { } ret = true; } else { - s16 angle_step = HIO_PARAM(this).mSwimAngleSpeed * 2; + s16 angle_step = mpHIO->m.mSwimAngleSpeed * 2; cXyz pos, swim_speed; f32 speed_scale = mSwimSpeedScale; if (mPath.getDstPosDst2(current.pos, pos) && mPath.getIdx() == mPath.getNextIdx()) { @@ -1485,7 +1485,7 @@ BOOL daNpc_zrA_c::ECut_carryWaterfall(int i_staffID) { angle.y = cLib_targetAngleY(¤t.pos, &pos); angle.z = current.angle.z; calcSwimAngle(angle, mSwimAngleCalc, 4, angle_step); - cLib_addCalc2(&mSwimSpeedF, speed_scale * HIO_PARAM(this).mSwimSpeed, + cLib_addCalc2(&mSwimSpeedF, speed_scale * mpHIO->m.mSwimSpeed, 0.1f, 1.0f); swim_speed.set(0.0f, 0.0f, mSwimSpeedF); calcSwimPos(swim_speed); @@ -1511,7 +1511,7 @@ BOOL daNpc_zrA_c::ECut_carryWaterfall(int i_staffID) { mSwimMode = SWIM_WAIT; } cLib_chaseAngleS(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), - HIO_PARAM(this).mSwimAngleSpeed); + mpHIO->m.mSwimAngleSpeed); setAngle(mCurAngle.y); break; @@ -1582,7 +1582,7 @@ BOOL daNpc_zrA_c::ECut_carryWaterfallSkip(int i_staffID) { mSwimMode = SWIM_WAIT; } cLib_chaseAngleS(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), - HIO_PARAM(this).mSwimAngleSpeed); + mpHIO->m.mSwimAngleSpeed); setAngle(mCurAngle.y); break; @@ -1599,8 +1599,8 @@ BOOL daNpc_zrA_c::ECut_carryWaterfallSkip(int i_staffID) { } BOOL daNpc_zrA_c::diveCalc(s16 i_angleStep, s16 i_angleScale, BOOL param_2) { - cLib_chaseF(&mScaleFactor, HIO_PARAM(this).mMaxScaleFactor, - (HIO_PARAM(this).mMaxScaleFactor - 1.0f) / 30.0f); + cLib_chaseF(&mScaleFactor, mpHIO->m.mMaxScaleFactor, + (mpHIO->m.mMaxScaleFactor - 1.0f) / 30.0f); cXyz pos; mPath.getDstPosDst2(current.pos, pos); csXyz angle; @@ -1630,9 +1630,9 @@ BOOL daNpc_zrA_c::diveCalc(s16 i_angleStep, s16 i_angleScale, BOOL param_2) { current.pos += dive_speed; if (param_2 && mAcch.ChkWaterIn() - && current.pos.y > mAcch.m_wtr.GetHeight() - HIO_PARAM(this).mMinDepth) + && current.pos.y > mAcch.m_wtr.GetHeight() - mpHIO->m.mMinDepth) { - current.pos.y = mAcch.m_wtr.GetHeight() - HIO_PARAM(this).mMinDepth; + current.pos.y = mAcch.m_wtr.GetHeight() - mpHIO->m.mMinDepth; } if (mBaseMotionAnm == ANM_SWIM_A || mBaseMotionAnm == ANM_SWIM_B) { @@ -1732,7 +1732,7 @@ BOOL daNpc_zrA_c::waitRiverDescend(void* param_0) { } else if (mGameMode == GAME_MODE_1) { if (field_0x15c0 == 0) { if ((player->current.pos - current.pos).absXZ() - < HIO_PARAM(this).field_0xa8) { + < mpHIO->m.field_0xa8) { field_0x15c0 = 1; mOrderEvtNo = EVT_BEFORE_BLAST_ZRR; } @@ -1778,7 +1778,7 @@ BOOL daNpc_zrA_c::swimRiverDescend(void* param_0) { cXyz pos_sp94; cXyz swim_speed_sp88; - s16 angle_step_r28 = (s16)HIO_PARAM(this).mSwimAngleSpeed; + s16 angle_step_r28 = (s16)mpHIO->m.mSwimAngleSpeed; s16 angle_scale_r27 = 6; f32 sp28 = 0.25f; f32 sp24 = 4.0f; @@ -1811,8 +1811,8 @@ BOOL daNpc_zrA_c::swimRiverDescend(void* param_0) { case 2: { csXyz angle_sp44; daPy_py_c* player_r26 = daPy_getPlayerActorClass(); - cLib_chaseF(&mScaleFactor, HIO_PARAM(this).mMaxScaleFactor, - (HIO_PARAM(this).mMaxScaleFactor - 1.0f) / 30.0f); + cLib_chaseF(&mScaleFactor, mpHIO->m.mMaxScaleFactor, + (mpHIO->m.mMaxScaleFactor - 1.0f) / 30.0f); int ivar8_sp20 = mRiverPathIdx; moveRiverPosCalc(pos_sp94); @@ -1858,7 +1858,7 @@ BOOL daNpc_zrA_c::swimRiverDescend(void* param_0) { mAnm_p->setPlaySpeed(1.0f); } - if (current.pos.y <= water_height - HIO_PARAM(this).mMinDepth) { + if (current.pos.y <= water_height - mpHIO->m.mMinDepth) { field_0x153e = false; field_0x153c = false; mSwimSpeedF = mSwimSpeed.abs(); @@ -1874,7 +1874,7 @@ BOOL daNpc_zrA_c::swimRiverDescend(void* param_0) { angle_sp44.x = -0x3000; if (mAcch.ChkWaterHit()) { if (head_pos_sp7c.y < water_height) { - angle_step_r28 = HIO_PARAM(this).mSwimAngleSpeed * 2; + angle_step_r28 = mpHIO->m.mSwimAngleSpeed * 2; angle_scale_r27 = 2; } else if (!mIsAboveWater) { cXyz wpillar_pos_sp64 = head_pos_sp7c; @@ -1929,8 +1929,8 @@ BOOL daNpc_zrA_c::swimRiverDescend(void* param_0) { cXyz vec_sp58 = field_0x1500 - player_r26->current.pos; f32 target_speed_f31 = vec_sp58.abs(); - if (target_speed_f31 < HIO_PARAM(this).mSwimSpeed) { - target_speed_f31 = HIO_PARAM(this).mSwimSpeed; + if (target_speed_f31 < mpHIO->m.mSwimSpeed) { + target_speed_f31 = mpHIO->m.mSwimSpeed; } else { target_speed_f31 *= 1.4f; } @@ -1940,8 +1940,8 @@ BOOL daNpc_zrA_c::swimRiverDescend(void* param_0) { } if (field_0x153c) { - if (target_speed_f31 < 3.0f * HIO_PARAM(this).mSwimSpeed) { - target_speed_f31 = 3.0f * HIO_PARAM(this).mSwimSpeed; + if (target_speed_f31 < 3.0f * mpHIO->m.mSwimSpeed) { + target_speed_f31 = 3.0f * mpHIO->m.mSwimSpeed; } target_speed_f31 *= 1.2f; } else if (mRiverPathIdx >= mPath.getIdx()) { @@ -1978,9 +1978,9 @@ BOOL daNpc_zrA_c::swimRiverDescend(void* param_0) { mAnm_p->setPlaySpeed(play_speed_sp14); if (!field_0x153c && mAcch.ChkWaterHit() - && current.pos.y > water_height - HIO_PARAM(this).mMinDepth) + && current.pos.y > water_height - mpHIO->m.mMinDepth) { - current.pos.y = water_height - HIO_PARAM(this).mMinDepth; + current.pos.y = water_height - mpHIO->m.mMinDepth; } calcBank(angle_step_r28, angle_scale_r27, angle_sp44.y, angle_sp44.z); @@ -1997,7 +1997,7 @@ BOOL daNpc_zrA_c::swimRiverDescend(void* param_0) { BOOL daNpc_zrA_c::swimRiverDescend2(void* param_0) { cXyz pos, swim_speed; - s16 angle_step = HIO_PARAM(this).mSwimAngleSpeed; + s16 angle_step = mpHIO->m.mSwimAngleSpeed; f32 water_height = mAcch.m_wtr.GetHeight(); switch (mMode) { @@ -2042,13 +2042,13 @@ BOOL daNpc_zrA_c::swimRiverDescend2(void* param_0) { setAction(&daNpc_zrA_c::waitRiverDescend); } else { csXyz angle; - cLib_chaseF(&mScaleFactor, HIO_PARAM(this).mMaxScaleFactor, - (HIO_PARAM(this).mMaxScaleFactor - 1.0f) / 30.0f); + cLib_chaseF(&mScaleFactor, mpHIO->m.mMaxScaleFactor, + (mpHIO->m.mMaxScaleFactor - 1.0f) / 30.0f); angle.x = cLib_targetAngleX(&vec, ¤t.pos); angle.y = cLib_targetAngleY(¤t.pos, &vec); angle.z = current.angle.z; - cLib_addCalc2(&mSwimSpeedF, 2.0f * HIO_PARAM(this).mSwimSpeed, 0.25f, 4.0f); + cLib_addCalc2(&mSwimSpeedF, 2.0f * mpHIO->m.mSwimSpeed, 0.25f, 4.0f); calcSwimAngle(angle, mSwimAngleCalc, 6, angle_step); swim_speed.set(0.0f, 0.0f, mSwimSpeedF); @@ -2059,9 +2059,9 @@ BOOL daNpc_zrA_c::swimRiverDescend2(void* param_0) { mAnm_p->setPlaySpeed(play_speed); if (mAcch.ChkWaterHit() - && current.pos.y > water_height - HIO_PARAM(this).mMinDepth) + && current.pos.y > water_height - mpHIO->m.mMinDepth) { - current.pos.y = water_height - HIO_PARAM(this).mMinDepth; + current.pos.y = water_height - mpHIO->m.mMinDepth; } calcBank(angle_step, 6, angle.y, angle.z); @@ -2080,7 +2080,7 @@ BOOL daNpc_zrA_c::swimRiverDescend2(void* param_0) { } BOOL daNpc_zrA_c::diveRiverDescend(void* param_0) { - s16 angle_step = HIO_PARAM(this).mSwimAngleSpeed * 2; + s16 angle_step = mpHIO->m.mSwimAngleSpeed * 2; switch (mMode) { case 0: @@ -2098,8 +2098,8 @@ BOOL daNpc_zrA_c::diveRiverDescend(void* param_0) { // fallthrough case 2: { - cLib_chaseF(&mScaleFactor, HIO_PARAM(this).mMaxScaleFactor, - (HIO_PARAM(this).mMaxScaleFactor - 1.0f) / 30.0f); + cLib_chaseF(&mScaleFactor, mpHIO->m.mMaxScaleFactor, + (mpHIO->m.mMaxScaleFactor - 1.0f) / 30.0f); cXyz pos; csXyz angle; mPath.getDstPos(current.pos, pos); @@ -2162,7 +2162,7 @@ BOOL daNpc_zrA_c::diveRiverDescend(void* param_0) { BOOL daNpc_zrA_c::swimGoalRiverDescend(void* param_0) { daPy_py_c* player; cXyz pos, swim_speed; - s16 angle_step = HIO_PARAM(this).mSwimAngleSpeed; + s16 angle_step = mpHIO->m.mSwimAngleSpeed; switch (mMode) { case 0: @@ -2178,14 +2178,14 @@ BOOL daNpc_zrA_c::swimGoalRiverDescend(void* param_0) { mSwimAngleCalc = current.angle; calcWaistAngleInit(); field_0x1500 = daPy_getPlayerActorClass()->current.pos; - mSwimSpeedF = HIO_PARAM(this).mSwimSpeed; + mSwimSpeedF = mpHIO->m.mSwimSpeed; mMode = 2; // fallthrough case 2: player = daPy_getPlayerActorClass(); - cLib_chaseF(&mScaleFactor, HIO_PARAM(this).mMaxScaleFactor, - (HIO_PARAM(this).mMaxScaleFactor - 1.0f) / 30.0f); + cLib_chaseF(&mScaleFactor, mpHIO->m.mMaxScaleFactor, + (mpHIO->m.mMaxScaleFactor - 1.0f) / 30.0f); if (player->current.pos.y < -14100.0f) { if (!daNpcF_chkEvtBit(0x60)) { mOrderEvtNo = EVT_THANKS_BLAST; @@ -2209,8 +2209,8 @@ BOOL daNpc_zrA_c::swimGoalRiverDescend(void* param_0) { if (mPath.getIdx() != mPath.getNextIdx()) { vec = field_0x1500 - player->current.pos; target_speed = vec.abs() * 1.2f; - if (target_speed < HIO_PARAM(this).mSwimSpeed) { - target_speed = HIO_PARAM(this).mSwimSpeed; + if (target_speed < mpHIO->m.mSwimSpeed) { + target_speed = mpHIO->m.mSwimSpeed; } } else { target_speed = 0.0f; @@ -2253,7 +2253,7 @@ BOOL daNpc_zrA_c::swimGoalRiverDescend(void* param_0) { BOOL daNpc_zrA_c::returnRiverDescend(void* param_0) { cXyz pos, swim_speed; - s16 angle_step = HIO_PARAM(this).mSwimAngleSpeed; + s16 angle_step = mpHIO->m.mSwimAngleSpeed; f32 swim_speed_scale = mSwimSpeedScale; switch (mMode) { @@ -2307,18 +2307,18 @@ BOOL daNpc_zrA_c::returnRiverDescend(void* param_0) { calcSwimAngle(angle, mSwimAngleCalc, 8, angle_step); } - cLib_addCalc2(&mSwimSpeedF, swim_speed_scale * HIO_PARAM(this).mSwimSpeed, + cLib_addCalc2(&mSwimSpeedF, swim_speed_scale * mpHIO->m.mSwimSpeed, 0.2f, 3.0f); swim_speed.set(0.0f, 0.0f, mSwimSpeedF); calcSwimPos(swim_speed); if (mAcch.ChkWaterHit()) { - current.pos.y = mAcch.m_wtr.GetHeight() - HIO_PARAM(this).mMinDepth; + current.pos.y = mAcch.m_wtr.GetHeight() - mpHIO->m.mMinDepth; } if (!bvar4) { f32 play_speed = mAnm_p->getPlaySpeed(); - cLib_addCalc2(&play_speed, mSwimSpeedF / HIO_PARAM(this).mSwimAnmRate, + cLib_addCalc2(&play_speed, mSwimSpeedF / mpHIO->m.mSwimAnmRate, 0.2f, 0.1f); mAnm_p->setPlaySpeed(play_speed); } @@ -2526,7 +2526,7 @@ BOOL daNpc_zrA_c::ECut_thanksBlast(int i_staffID) { dEvent_manager_c& event_manager = dComIfGp_getEventManager(); BOOL ret = false; int prm = -1; - s16 angle_step = HIO_PARAM(this).mSwimAngleSpeed; + s16 angle_step = mpHIO->m.mSwimAngleSpeed; f32 water_height = mAcch.m_wtr.GetHeight(); daPy_py_c* player = daPy_getPlayerActorClass(); cXyz player_pos = player->current.pos; @@ -2570,8 +2570,8 @@ BOOL daNpc_zrA_c::ECut_thanksBlast(int i_staffID) { case 20: { mPath.onReverse(); mPath.setIdx(mPath.getEndIdx() - 1); - cXyz pos1(-77941.7f, -18800.0f - HIO_PARAM(this).mMinDepth - 30.0f, 39645.3f); - cXyz pos2(-78941.7f, -18800.0f - HIO_PARAM(this).mMinDepth - 30.0f, 39645.3f); + cXyz pos1(-77941.7f, -18800.0f - mpHIO->m.mMinDepth - 30.0f, 39645.3f); + cXyz pos2(-78941.7f, -18800.0f - mpHIO->m.mMinDepth - 30.0f, 39645.3f); current.pos = pos1; current.angle.y = cLib_targetAngleY(&pos1, &player_pos); setAngle(current.angle.y); @@ -2582,14 +2582,14 @@ BOOL daNpc_zrA_c::ECut_thanksBlast(int i_staffID) { water_pos.y = water_y; } - cXyz offset(0.0f, 0.0f, HIO_PARAM(this).field_0xa0); + cXyz offset(0.0f, 0.0f, mpHIO->m.field_0xa0); csXyz angle(0, cLib_targetAngleY(&pos1, &pos2), 0); mDoMtx_stack_c::ZXYrotS(angle); mDoMtx_stack_c::transM(offset); mDoMtx_stack_c::multVecZero(&field_0x159c[0]); field_0x159c[0] += water_pos; - offset.set(0.0f, 0.0f, HIO_PARAM(this).field_0xa4); + offset.set(0.0f, 0.0f, mpHIO->m.field_0xa4); mDoMtx_stack_c::ZXYrotS(angle); mDoMtx_stack_c::transM(offset); mDoMtx_stack_c::multVecZero(&field_0x159c[1]); @@ -2656,8 +2656,8 @@ BOOL daNpc_zrA_c::ECut_thanksBlast(int i_staffID) { mPath.getDstPos(current.pos, pos); cXyz vec = field_0x1500 - player->current.pos; target_speed = vec.abs() * 1.2f; - if (target_speed < HIO_PARAM(this).mSwimSpeed) { - target_speed = HIO_PARAM(this).mSwimSpeed; + if (target_speed < mpHIO->m.mSwimSpeed) { + target_speed = mpHIO->m.mSwimSpeed; } } else { if ((field_0x1500 - player->current.pos).absXZ() < 5.0f) { @@ -2673,7 +2673,7 @@ BOOL daNpc_zrA_c::ECut_thanksBlast(int i_staffID) { pos = vec3; } if ((player_pos - current.pos).absXZ() > 450.0f) { - target_speed = HIO_PARAM(this).mSwimSpeed * 1.5f * 1.5f; + target_speed = mpHIO->m.mSwimSpeed * 1.5f * 1.5f; } else { target_speed = 15.0f; pos = player_pos; @@ -2705,9 +2705,9 @@ BOOL daNpc_zrA_c::ECut_thanksBlast(int i_staffID) { cXyz swim_speed(0.0f, 0.0f, mSwimSpeedF); calcSwimPos(swim_speed); if (mAcch.ChkWaterHit() - && current.pos.y > water_height - HIO_PARAM(this).mMinDepth) + && current.pos.y > water_height - mpHIO->m.mMinDepth) { - current.pos.y = water_height - HIO_PARAM(this).mMinDepth; + current.pos.y = water_height - mpHIO->m.mMinDepth; } if ((field_0x1500 - player->current.pos).absXZ() < 10.0f @@ -2728,7 +2728,7 @@ BOOL daNpc_zrA_c::ECut_thanksBlast(int i_staffID) { } } else { cLib_chaseAngleS(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), - HIO_PARAM(this).mSwimAngleSpeed); + mpHIO->m.mSwimAngleSpeed); setAngle(mCurAngle.y); } } @@ -2758,7 +2758,7 @@ BOOL daNpc_zrA_c::ECut_thanksBlast(int i_staffID) { ret = true; mSwimAngleCalc = current.angle; mSwimSpeedScale = 1.0f; - mSwimSpeedF = mSwimSpeedScale * HIO_PARAM(this).mSwimSpeed; + mSwimSpeedF = mSwimSpeedScale * mpHIO->m.mSwimSpeed; setLookMode(LOOK_NONE); } break; @@ -2771,9 +2771,9 @@ BOOL daNpc_zrA_c::ECut_thanksBlast(int i_staffID) { break; case 50: { - s16 angle_step = HIO_PARAM(this).mSwimAngleSpeed; - cLib_chaseF(&mScaleFactor, HIO_PARAM(this).mMaxScaleFactor, - (HIO_PARAM(this).mMaxScaleFactor - 1.0f) / 30.0f); + s16 angle_step = mpHIO->m.mSwimAngleSpeed; + cLib_chaseF(&mScaleFactor, mpHIO->m.mMaxScaleFactor, + (mpHIO->m.mMaxScaleFactor - 1.0f) / 30.0f); cXyz pos; csXyz angle; mPath.getDstPosDst2(current.pos, pos); @@ -2809,7 +2809,7 @@ BOOL daNpc_zrA_c::ECut_thanksBlast(int i_staffID) { if (!calcWaistAngleCheck()) { calcWaistAngleInit(); mSwimSpeedScale = 1.0f; - mSwimSpeedF = mSwimSpeedScale * HIO_PARAM(this).mSwimSpeed; + mSwimSpeedF = mSwimSpeedScale * mpHIO->m.mSwimSpeed; } cXyz swim_speed(0.0f, 0.0f, mSwimSpeedF); calcSwimPos(swim_speed); @@ -2837,8 +2837,8 @@ BOOL daNpc_zrA_c::ECut_thanksBlast(int i_staffID) { shape_angle = mCurAngle = current.angle; cXyz swim_speed(0.0f, 0.0f, mSwimSpeedF); calcSwimPos(swim_speed); - if (mAcch.ChkWaterHit() && current.pos.y > water_y - HIO_PARAM(this).mMinDepth) { - current.pos.y = water_y - HIO_PARAM(this).mMinDepth; + if (mAcch.ChkWaterHit() && current.pos.y > water_y - mpHIO->m.mMinDepth) { + current.pos.y = water_y - mpHIO->m.mMinDepth; } calcCanoeMove(true); if (cLib_calcTimer(&mEventTimer) == 0) { @@ -2859,7 +2859,7 @@ BOOL daNpc_zrA_c::ECut_resultAnnounce(int i_staffID) { dEvent_manager_c& event_manager = dComIfGp_getEventManager(); BOOL ret = false; int prm = -1; - s16 angle_step = HIO_PARAM(this).mSwimAngleSpeed; + s16 angle_step = mpHIO->m.mSwimAngleSpeed; f32 water_height = mAcch.m_wtr.GetHeight(); daPy_py_c* player = daPy_getPlayerActorClass(); cXyz player_pos = player->current.pos; @@ -2899,8 +2899,8 @@ BOOL daNpc_zrA_c::ECut_resultAnnounce(int i_staffID) { case 20: { mPath.onReverse(); mPath.setIdx(mPath.getEndIdx() - 1); - cXyz pos1(-77941.7f, -18800.0f - HIO_PARAM(this).mMinDepth - 30.0f, 39645.3f); - cXyz pos2(-78941.7f, -18800.0f - HIO_PARAM(this).mMinDepth - 30.0f, 39645.3f); + cXyz pos1(-77941.7f, -18800.0f - mpHIO->m.mMinDepth - 30.0f, 39645.3f); + cXyz pos2(-78941.7f, -18800.0f - mpHIO->m.mMinDepth - 30.0f, 39645.3f); current.pos = pos1; current.angle.y = cLib_targetAngleY(&pos1, &player_pos); setAngle(current.angle.y); @@ -2911,14 +2911,14 @@ BOOL daNpc_zrA_c::ECut_resultAnnounce(int i_staffID) { water_pos.y = water_y; } - cXyz offset(0.0f, 0.0f, HIO_PARAM(this).field_0xa0); + cXyz offset(0.0f, 0.0f, mpHIO->m.field_0xa0); csXyz angle(0, cLib_targetAngleY(&pos1, &pos2), 0); mDoMtx_stack_c::ZXYrotS(angle); mDoMtx_stack_c::transM(offset); mDoMtx_stack_c::multVecZero(&field_0x159c[0]); field_0x159c[0] += water_pos; - offset.set(0.0f, 0.0f, HIO_PARAM(this).field_0xa4); + offset.set(0.0f, 0.0f, mpHIO->m.field_0xa4); mDoMtx_stack_c::ZXYrotS(angle); mDoMtx_stack_c::transM(offset); mDoMtx_stack_c::multVecZero(&field_0x159c[1]); @@ -2971,8 +2971,8 @@ BOOL daNpc_zrA_c::ECut_resultAnnounce(int i_staffID) { mPath.getDstPos(current.pos, pos); cXyz vec = field_0x1500 - player->current.pos; target_speed = vec.abs() * 1.2f; - if (target_speed < HIO_PARAM(this).mSwimSpeed) { - target_speed = HIO_PARAM(this).mSwimSpeed; + if (target_speed < mpHIO->m.mSwimSpeed) { + target_speed = mpHIO->m.mSwimSpeed; } } else { if ((field_0x1500 - player->current.pos).absXZ() < 5.0f) { @@ -2988,7 +2988,7 @@ BOOL daNpc_zrA_c::ECut_resultAnnounce(int i_staffID) { pos = vec3; } if ((player_pos - current.pos).absXZ() > 450.0f) { - target_speed = HIO_PARAM(this).mSwimSpeed * 1.5f * 1.5f; + target_speed = mpHIO->m.mSwimSpeed * 1.5f * 1.5f; } else { target_speed = 15.0f; pos = player_pos; @@ -3020,9 +3020,9 @@ BOOL daNpc_zrA_c::ECut_resultAnnounce(int i_staffID) { cXyz swim_speed(0.0f, 0.0f, mSwimSpeedF); calcSwimPos(swim_speed); if (mAcch.ChkWaterHit() - && current.pos.y > water_height - HIO_PARAM(this).mMinDepth) + && current.pos.y > water_height - mpHIO->m.mMinDepth) { - current.pos.y = water_height - HIO_PARAM(this).mMinDepth; + current.pos.y = water_height - mpHIO->m.mMinDepth; } if ((field_0x1500 - player->current.pos).absXZ() < 10.0f @@ -3043,7 +3043,7 @@ BOOL daNpc_zrA_c::ECut_resultAnnounce(int i_staffID) { } } else { cLib_chaseAngleS(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), - HIO_PARAM(this).mSwimAngleSpeed); + mpHIO->m.mSwimAngleSpeed); setAngle(mCurAngle.y); } } @@ -3075,16 +3075,16 @@ BOOL daNpc_zrA_c::ECut_resultAnnounce(int i_staffID) { ret = true; mSwimAngleCalc = current.angle; mSwimSpeedScale = 1.0f; - mSwimSpeedF = mSwimSpeedScale * HIO_PARAM(this).mSwimSpeed; + mSwimSpeedF = mSwimSpeedScale * mpHIO->m.mSwimSpeed; setLookMode(LOOK_NONE); } } break; case 40: { - s16 angle_step = HIO_PARAM(this).mSwimAngleSpeed; - cLib_chaseF(&mScaleFactor, HIO_PARAM(this).mMaxScaleFactor, - (HIO_PARAM(this).mMaxScaleFactor - 1.0f) / 30.0f); + s16 angle_step = mpHIO->m.mSwimAngleSpeed; + cLib_chaseF(&mScaleFactor, mpHIO->m.mMaxScaleFactor, + (mpHIO->m.mMaxScaleFactor - 1.0f) / 30.0f); cXyz pos; csXyz angle; mPath.getDstPosDst2(current.pos, pos); @@ -3120,7 +3120,7 @@ BOOL daNpc_zrA_c::ECut_resultAnnounce(int i_staffID) { if (!calcWaistAngleCheck()) { calcWaistAngleInit(); mSwimSpeedScale = 1.0f; - mSwimSpeedF = mSwimSpeedScale * HIO_PARAM(this).mSwimSpeed; + mSwimSpeedF = mSwimSpeedScale * mpHIO->m.mSwimSpeed; } cXyz swim_speed(0.0f, 0.0f, mSwimSpeedF); calcSwimPos(swim_speed); @@ -3148,8 +3148,8 @@ BOOL daNpc_zrA_c::ECut_resultAnnounce(int i_staffID) { shape_angle = mCurAngle = current.angle; cXyz swim_speed(0.0f, 0.0f, mSwimSpeedF); calcSwimPos(swim_speed); - if (mAcch.ChkWaterHit() && current.pos.y > water_y - HIO_PARAM(this).mMinDepth) { - current.pos.y = water_y - HIO_PARAM(this).mMinDepth; + if (mAcch.ChkWaterHit() && current.pos.y > water_y - mpHIO->m.mMinDepth) { + current.pos.y = water_y - mpHIO->m.mMinDepth; } calcCanoeMove(true); if (cLib_calcTimer(&mEventTimer) == 0) { @@ -3179,7 +3179,7 @@ void daNpc_zrA_c::calcCanoeMove(BOOL param_0) { angle.y = cLib_targetAngleY(&water_pos, &field_0x159c[0]); angle.z = 0; - vec.set(0.0f, 0.0f, HIO_PARAM(this).field_0xa0); + vec.set(0.0f, 0.0f, mpHIO->m.field_0xa0); mDoMtx_stack_c::ZXYrotS(angle); mDoMtx_stack_c::multVec(&vec, &field_0x159c[0]); field_0x159c[0] += water_pos; @@ -3190,7 +3190,7 @@ void daNpc_zrA_c::calcCanoeMove(BOOL param_0) { angle.x = cLib_targetAngleX(&field_0x159c[1], &field_0x159c[0]); angle.y = cLib_targetAngleY(&field_0x159c[0], &field_0x159c[1]); - vec.set(0.0f, 0.0f, HIO_PARAM(this).field_0xa4); + vec.set(0.0f, 0.0f, mpHIO->m.field_0xa4); mDoMtx_stack_c::ZXYrotS(angle); mDoMtx_stack_c::multVec(&vec, &field_0x159c[1]); field_0x159c[1] += field_0x159c[0]; @@ -3201,7 +3201,7 @@ void daNpc_zrA_c::calcCanoeMove(BOOL param_0) { if (param_0) { f32 fvar2 = (water_pos - field_0x159c[2]).abs(); (water_pos - field_0x159c[1]).abs(); - if (fvar2 > HIO_PARAM(this).field_0xa0 + HIO_PARAM(this).field_0xa4) + if (fvar2 > mpHIO->m.field_0xa0 + mpHIO->m.field_0xa4) { cLib_addCalcPos2(&field_0x159c[2], field_0x159c[1], 0.2f, mSwimSpeedF * 1.2f); if (fopAcM_getWaterY(&field_0x159c[2], &water_y)) { @@ -3371,7 +3371,7 @@ BOOL daNpc_zrA_c::tobikomi3(void* param_0) { // fallthrough case 2: { - cXyz vec(0.0f, 0.0f, HIO_PARAM(this).mSwimSpeed * 1.5f); + cXyz vec(0.0f, 0.0f, mpHIO->m.mSwimSpeed * 1.5f); mDoMtx_stack_c::YrotS(mCurAngle.y); mDoMtx_stack_c::multVec(&vec, &vec); cLib_chasePos(&mSwimSpeed, vec, 25.0f); @@ -3397,7 +3397,7 @@ BOOL daNpc_zrA_c::tobiJump(void* param_0) { cXyz swim_speed; csXyz angle; f32 water_y; - s16 angle_step = HIO_PARAM(this).mSwimAngleSpeed * 2; + s16 angle_step = mpHIO->m.mSwimAngleSpeed * 2; s16 angle_scale = 4; switch (mMode) { @@ -3437,7 +3437,7 @@ BOOL daNpc_zrA_c::tobiJump(void* param_0) { mIsAboveWater = false; } - if (current.pos.y <= water_y - HIO_PARAM(this).mMinDepth) { + if (current.pos.y <= water_y - mpHIO->m.mMinDepth) { setAction(&daNpc_zrA_c::tobiEnd); mSwimSpeedF = mSwimSpeed.absXZ(); } @@ -3450,7 +3450,7 @@ BOOL daNpc_zrA_c::tobiJump(void* param_0) { angle.z = current.angle.z; if (fopAcM_getWaterY(¤t.pos, &water_y)) { - angle_step = HIO_PARAM(this).mSwimAngleSpeed * 2; + angle_step = mpHIO->m.mSwimAngleSpeed * 2; angle_scale = 2; if (!(head_pos.y < water_y)) { if (!mIsAboveWater) { @@ -3472,11 +3472,11 @@ BOOL daNpc_zrA_c::tobiJump(void* param_0) { } calcSwimAngle(angle, mSwimAngleCalc, angle_scale, angle_step); - cLib_addCalc2(&mSwimSpeedF, 2.0f * HIO_PARAM(this).mSwimSpeed, 0.7f, 10.0f); + cLib_addCalc2(&mSwimSpeedF, 2.0f * mpHIO->m.mSwimSpeed, 0.7f, 10.0f); swim_speed.set(0.0f, 0.0f, mSwimSpeedF); calcSwimPos(swim_speed); f32 play_speed = mAnm_p->getPlaySpeed(); - cLib_addCalc2(&play_speed, mSwimSpeedF / HIO_PARAM(this).mSwimAnmRate, 0.2f, 0.1f); + cLib_addCalc2(&play_speed, mSwimSpeedF / mpHIO->m.mSwimAnmRate, 0.2f, 0.1f); mAnm_p->setPlaySpeed(play_speed); shape_angle = mCurAngle = current.angle; } @@ -3493,7 +3493,7 @@ BOOL daNpc_zrA_c::tobiJump(void* param_0) { BOOL daNpc_zrA_c::tobiEnd(void* param_0) { cXyz swim_speed; - s16 angle_step = HIO_PARAM(this).mSwimAngleSpeed; + s16 angle_step = mpHIO->m.mSwimAngleSpeed; switch (mMode) { case 0: @@ -3514,12 +3514,12 @@ BOOL daNpc_zrA_c::tobiEnd(void* param_0) { angle.y = current.angle.y; angle.z = current.angle.z; calcSwimAngle(angle, mSwimAngleCalc, 8, angle_step); - cLib_chaseF(&mSwimSpeedF, HIO_PARAM(this).mSwimSpeed, - HIO_PARAM(this).mSwimSpeed / 3.0f); + cLib_chaseF(&mSwimSpeedF, mpHIO->m.mSwimSpeed, + mpHIO->m.mSwimSpeed / 3.0f); swim_speed.set(0.0f, 0.0f, mSwimSpeedF); calcSwimPos(swim_speed); f32 play_speed = mAnm_p->getPlaySpeed(); - cLib_addCalc2(&play_speed, mSwimSpeedF / HIO_PARAM(this).mSwimAnmRate, 0.2f, 0.1f); + cLib_addCalc2(&play_speed, mSwimSpeedF / mpHIO->m.mSwimAnmRate, 0.2f, 0.1f); mAnm_p->setPlaySpeed(play_speed); calcBank(angle_step, 8, angle.y, angle.z); current.angle.z = angle.z; @@ -3685,7 +3685,7 @@ BOOL daNpc_zrA_c::ECut_searchPrince1(int i_staffID) { if (mBaseMotionAnm == ANM_SWIM_A) { ret = true; } - cXyz swim_speed(0.0f, 0.0f, HIO_PARAM(this).mSwimSpeed); + cXyz swim_speed(0.0f, 0.0f, mpHIO->m.mSwimSpeed); mDoMtx_stack_c::YrotS(mCurAngle.y); mDoMtx_stack_c::multVec(&swim_speed, &swim_speed); cLib_chasePos(&mSwimSpeed, swim_speed, 25.0f); @@ -3695,15 +3695,15 @@ BOOL daNpc_zrA_c::ECut_searchPrince1(int i_staffID) { case 50: { cXyz pos(-4807.7f, -207.444f, 5109.854f); - cXyz swim_speed(0.0f, 0.0f, HIO_PARAM(this).mSwimSpeed); + cXyz swim_speed(0.0f, 0.0f, mpHIO->m.mSwimSpeed); csXyz angle; angle.x = cLib_targetAngleX(&pos, ¤t.pos); angle.y = cLib_targetAngleY(¤t.pos, &pos); angle.z = current.angle.z; - mAnm_p->setPlaySpeed(HIO_PARAM(this).mSwimSpeed / HIO_PARAM(this).mSwimAnmRate); - calcSwimAngle(angle, mSwimAngleCalc, 23, HIO_PARAM(this).mSwimAngleSpeed / 2); + mAnm_p->setPlaySpeed(mpHIO->m.mSwimSpeed / mpHIO->m.mSwimAnmRate); + calcSwimAngle(angle, mSwimAngleCalc, 23, mpHIO->m.mSwimAngleSpeed / 2); calcSwimPos(swim_speed); - calcBank(HIO_PARAM(this).mSwimAngleSpeed / 2, 16, angle.y, angle.z); + calcBank(mpHIO->m.mSwimAngleSpeed / 2, 16, angle.y, angle.z); current.angle.z = angle.z; shape_angle = mCurAngle = current.angle; if ((pos - current.pos).absXZ() < 100.0f) { @@ -3817,7 +3817,7 @@ BOOL daNpc_zrA_c::ECut_searchPrince2(int i_staffID) { if (mBaseMotionAnm == ANM_SWIM_A) { ret = true; } - cXyz swim_speed(0.0f, 0.0f, HIO_PARAM(this).mSwimSpeed); + cXyz swim_speed(0.0f, 0.0f, mpHIO->m.mSwimSpeed); mDoMtx_stack_c::YrotS(mCurAngle.y); mDoMtx_stack_c::multVec(&swim_speed, &swim_speed); cLib_chasePos(&mSwimSpeed, swim_speed, 25.0f); @@ -3827,15 +3827,15 @@ BOOL daNpc_zrA_c::ECut_searchPrince2(int i_staffID) { case 50: { cXyz pos(-4807.7f, -207.444f, 5109.854f); - cXyz swim_speed(0.0f, 0.0f, HIO_PARAM(this).mSwimSpeed); + cXyz swim_speed(0.0f, 0.0f, mpHIO->m.mSwimSpeed); csXyz angle; angle.x = cLib_targetAngleX(&pos, ¤t.pos); angle.y = cLib_targetAngleY(¤t.pos, &pos); angle.z = current.angle.z; - mAnm_p->setPlaySpeed(HIO_PARAM(this).mSwimSpeed / HIO_PARAM(this).mSwimAnmRate); - calcSwimAngle(angle, mSwimAngleCalc, 23, HIO_PARAM(this).mSwimAngleSpeed / 2); + mAnm_p->setPlaySpeed(mpHIO->m.mSwimSpeed / mpHIO->m.mSwimAnmRate); + calcSwimAngle(angle, mSwimAngleCalc, 23, mpHIO->m.mSwimAngleSpeed / 2); calcSwimPos(swim_speed); - calcBank(HIO_PARAM(this).mSwimAngleSpeed / 2, 16, angle.y, angle.z); + calcBank(mpHIO->m.mSwimAngleSpeed / 2, 16, angle.y, angle.z); current.angle.z = angle.z; shape_angle = mCurAngle = current.angle; if ((pos - current.pos).absXZ() < 100.0f) { diff --git a/src/d/actor/d_a_npc_zrc.cpp b/src/d/actor/d_a_npc_zrc.cpp index da829e33d7..f4fbab26e0 100644 --- a/src/d/actor/d_a_npc_zrc.cpp +++ b/src/d/actor/d_a_npc_zrc.cpp @@ -15,9 +15,9 @@ enum Event_Cut_Nums { /* 0x2 */ NUM_EVT_CUTS_e = 0x2, }; -static daNpc_zrC_Param_c l_HIO; +static NPC_ZRC_HIO_CLASS l_HIO; -daNpc_zrC_Param_c::param const daNpc_zrC_Param_c::m = { +daNpc_zrC_HIOParam const daNpc_zrC_Param_c::m = { 50.0f, // mAttnOffsetY -3.0f, // mGravity 1.0f, // mScale @@ -50,6 +50,7 @@ daNpc_zrC_Param_c::param const daNpc_zrC_Param_c::m = { 0, // mTestMotion 0, // mTestLookMode false, // mTest + false, 350.0f, 2300.0f, }; @@ -180,6 +181,20 @@ daNpc_zrC_c::EventFn daNpc_zrC_c::mEvtCutList[2] = { &daNpc_zrC_c::ECut_earringGet, }; +#if DEBUG +daNpc_zrC_HIO_c::daNpc_zrC_HIO_c() { + m = daNpc_zrC_Param_c::m; +} + +void daNpc_zrC_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_zrC_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + daNpc_zrC_c::daNpc_zrC_c() { } @@ -195,6 +210,12 @@ daNpc_zrC_c::~daNpc_zrC_c() { if (heap != NULL) { mAnm_p->stopZelAnime(); } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif } cPhs__Step daNpc_zrC_c::create() { @@ -237,10 +258,16 @@ cPhs__Step daNpc_zrC_c::create() { fopAcM_SetMtx(this, mAnm_p->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -300.0f, -50.0f, -300.0f, 300.0f, 450.0f, 300.0f); mCreatureSound.init(¤t.pos, &eyePos, 3, 1); - mAcchCir.SetWall(daNpc_zrC_Param_c::m.mWallR, daNpc_zrC_Param_c::m.mWallH); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("ゾ-ラ王子"); +#endif + + mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_zrC_Param_c::m.mCcWeight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCcCyl.Set(mCcDCyl); mCcCyl.SetStts(&mCcStts); mCcCyl.SetTgHitCallback(tgHitCallBack); @@ -326,7 +353,7 @@ int daNpc_zrC_c::Execute() { int daNpc_zrC_c::Draw() { mAnm_p->getModel()->getModelData()->getMaterialNodePointer(1)->setMaterialAnm(mpMatAnm); BOOL is_test = chkAction(&daNpc_zrC_c::test); - return draw(is_test, true, daNpc_zrC_Param_c::m.mShadowDepth, NULL, false); + return draw(is_test, true, mpHIO->m.common.real_shadow_size, NULL, false); } int daNpc_zrC_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { @@ -348,7 +375,7 @@ int daNpc_zrC_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { case 1: // backbone1 case 3: // neck case 4: // head - setLookatMtx(jnt_no, lookat_joints, daNpc_zrC_Param_c::m.mNeckAngleScl); + setLookatMtx(jnt_no, lookat_joints, mpHIO->m.common.neck_rotation_ratio); break; } @@ -422,7 +449,7 @@ void daNpc_zrC_c::setParam() { if (mType == 3) { gravity = 0.0f; } else { - gravity = daNpc_zrC_Param_c::m.mGravity; + gravity = mpHIO->m.common.gravity; } } else { @@ -433,12 +460,12 @@ void daNpc_zrC_c::setParam() { gravity = 0.0f; } - scale.set(daNpc_zrC_Param_c::m.mScale, - daNpc_zrC_Param_c::m.mScale, - daNpc_zrC_Param_c::m.mScale); + scale.set(mpHIO->m.common.scale, + mpHIO->m.common.scale, + mpHIO->m.common.scale); - mAcchCir.SetWallR(daNpc_zrC_Param_c::m.mWallR); - mAcchCir.SetWallH(daNpc_zrC_Param_c::m.mWallH); + mAcchCir.SetWallR(mpHIO->m.common.width); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); } BOOL daNpc_zrC_c::main() { @@ -450,7 +477,7 @@ BOOL daNpc_zrC_c::main() { attention_info.flags = 0; } - if (!daNpc_zrC_Param_c::m.mTest + if (!mpHIO->m.common.debug_mode_ON && (!dComIfGp_event_runCheck() || (mOrderNewEvt && dComIfGp_getEvent()->isOrderOK()))) { if (mOrderEvtNo != EVT_NONE) { @@ -497,7 +524,7 @@ BOOL daNpc_zrC_c::ctrlBtk() { void daNpc_zrC_c::setAttnPos() { static cXyz eyeOffset(10.0f, 10.0f, 0.0f); - f32 offset = daNpc_zrC_Param_c::m.mAttnOffsetY; + f32 offset = mpHIO->m.common.attention_offset; cXyz center, vec2, vec3, vec4; mDoMtx_stack_c::YrotS(field_0x990); @@ -569,8 +596,8 @@ void daNpc_zrC_c::setAttnPos() { mCcCyl.SetTgSPrm(0); } mCcCyl.SetC(center); - mCcCyl.SetH(daNpc_zrC_Param_c::m.mCylH + extra_height); - mCcCyl.SetR(daNpc_zrC_Param_c::m.mWallR + extra_radius); + mCcCyl.SetH(mpHIO->m.common.height + extra_height); + mCcCyl.SetR(mpHIO->m.common.width + extra_radius); dComIfG_Ccsp()->Set(&mCcCyl); } mCcCyl.ClrTgHit(); @@ -897,51 +924,51 @@ void daNpc_zrC_c::reset() { } void daNpc_zrC_c::playExpression() { - daNpcF_anmPlayData dat0a = {ANM_F_TALK_A, daNpc_zrC_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat0b = {ANM_F_WAIT_A, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat0a = {ANM_F_TALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat0b = {ANM_F_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[2] = {&dat0a, &dat0b}; - daNpcF_anmPlayData dat1a = {ANM_F_SIT_TALK, daNpc_zrC_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat1b = {ANM_F_SIT, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat1a = {ANM_F_SIT_TALK, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat1b = {ANM_F_SIT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[2] = {&dat1a, &dat1b}; - daNpcF_anmPlayData dat2 = {ANM_F_PRAY, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat2 = {ANM_F_PRAY, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[1] = {&dat2}; - daNpcF_anmPlayData dat3a = {ANM_F_SAD, daNpc_zrC_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat3b = {ANM_FH_SAD, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat3a = {ANM_F_SAD, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat3b = {ANM_FH_SAD, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[2] = {&dat3a, &dat3b}; - daNpcF_anmPlayData dat4a = {ANM_F_SMILE, daNpc_zrC_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat4b = {ANM_FH_SMILE, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat4a = {ANM_F_SMILE, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat4b = {ANM_FH_SMILE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat4[2] = {&dat4a, &dat4b}; - daNpcF_anmPlayData dat5a = {ANM_F_KIZUKU, daNpc_zrC_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat5b = {ANM_FH_KIZUKU, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat5a = {ANM_F_KIZUKU, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat5b = {ANM_FH_KIZUKU, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat5[2] = {&dat5a, &dat5b}; - daNpcF_anmPlayData dat6a = {ANM_F_SAD_WAIT, daNpc_zrC_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat6b = {ANM_FH_SAD, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat6a = {ANM_F_SAD_WAIT, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat6b = {ANM_FH_SAD, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat6[2] = {&dat6a, &dat6b}; - daNpcF_anmPlayData dat7a = {ANM_F_TALK_NORMAL, daNpc_zrC_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat7b = {ANM_F_WAIT_A, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat7a = {ANM_F_TALK_NORMAL, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat7b = {ANM_F_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat7[2] = {&dat7a, &dat7b}; - daNpcF_anmPlayData dat8a = {ANM_F_KIZUKU_WAIT, daNpc_zrC_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat8a = {ANM_F_KIZUKU_WAIT, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat8b = {ANM_FH_KIZUKU, 0.0f, 0}; daNpcF_anmPlayData* pDat8[2] = {&dat8a, &dat8b}; - daNpcF_anmPlayData dat9 = {ANM_FH_KIZUKU, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat9 = {ANM_FH_KIZUKU, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat9[1] = {&dat9}; - daNpcF_anmPlayData dat10 = {ANM_FH_SAD, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat10 = {ANM_FH_SAD, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat10[1] = {&dat10}; - daNpcF_anmPlayData dat11 = {ANM_FH_SMILE, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat11 = {ANM_FH_SMILE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat11[1] = {&dat11}; - daNpcF_anmPlayData dat12 = {ANM_F_STEP, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat12 = {ANM_F_STEP, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat12[1] = {&dat12}; - daNpcF_anmPlayData dat13a = {ANM_F_TOPRAY, daNpc_zrC_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat13b = {ANM_F_PRAY, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat13a = {ANM_F_TOPRAY, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat13b = {ANM_F_PRAY, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat13[2] = {&dat13a, &dat13b}; - daNpcF_anmPlayData dat14a = {ANM_F_GETUP, daNpc_zrC_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat14b = {ANM_F_WAIT_A, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat14a = {ANM_F_GETUP, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat14b = {ANM_F_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat14[2] = {&dat14a, &dat14b}; - daNpcF_anmPlayData dat15 = {ANM_F_SIT, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat15 = {ANM_F_SIT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat15[1] = {&dat15}; - daNpcF_anmPlayData dat16 = {ANM_F_SICK_DEMO_WAIT, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat16 = {ANM_F_SICK_DEMO_WAIT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat16[1] = {&dat16}; - daNpcF_anmPlayData dat17 = {ANM_F_WAIT_A, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat17 = {ANM_F_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat17[1] = {&dat17}; daNpcF_anmPlayData** ppDat[18] = { pDat0, pDat1, pDat2, pDat3, pDat4, pDat5, pDat6, pDat7, pDat8, pDat9, pDat10, pDat11, @@ -953,40 +980,40 @@ void daNpc_zrC_c::playExpression() { } void daNpc_zrC_c::playMotion() { - daNpcF_anmPlayData dat0 = {ANM_WAIT_A, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat0 = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1a = {ANM_SIT_TALK, daNpc_zrC_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat1b = {ANM_SIT, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat1a = {ANM_SIT_TALK, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat1b = {ANM_SIT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[2] = {&dat1a, &dat1b}; - daNpcF_anmPlayData dat2 = {ANM_PRAY, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat2 = {ANM_PRAY, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[1] = {&dat2}; - daNpcF_anmPlayData dat3 = {ANM_SIT, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat3 = {ANM_SIT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[1] = {&dat3}; - daNpcF_anmPlayData dat4a = {ANM_SAD_TALK, daNpc_zrC_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat4a = {ANM_SAD_TALK, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat4b = {ANM_SAD_WAIT, 0.0f, 0}; daNpcF_anmPlayData* pDat4[2] = {&dat4a, &dat4b}; - daNpcF_anmPlayData dat5 = {ANM_SAD_WAIT, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat5 = {ANM_SAD_WAIT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat5[1] = {&dat5}; - daNpcF_anmPlayData dat6a = {ANM_TALK_A, daNpc_zrC_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat6a = {ANM_TALK_A, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat6b = {ANM_WAIT_A, 0.0f, 0}; daNpcF_anmPlayData* pDat6[2] = {&dat6a, &dat6b}; - daNpcF_anmPlayData dat7a = {ANM_KIZUKU, daNpc_zrC_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat7a = {ANM_KIZUKU, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat7b = {ANM_KIZUKU_WAIT, 0.0f, 0}; daNpcF_anmPlayData* pDat7[2] = {&dat7a, &dat7b}; - daNpcF_anmPlayData dat8 = {ANM_KIZUKU_WAIT, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat8 = {ANM_KIZUKU_WAIT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat8[1] = {&dat8}; - daNpcF_anmPlayData dat9a = {ANM_SMILE_TALK, daNpc_zrC_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat9a = {ANM_SMILE_TALK, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat9b = {ANM_WAIT_A, 0.0f, 0}; daNpcF_anmPlayData* pDat9[2] = {&dat9a, &dat9b}; - daNpcF_anmPlayData dat10a = {ANM_TOPRAY, daNpc_zrC_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat10b = {ANM_PRAY, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat10a = {ANM_TOPRAY, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat10b = {ANM_PRAY, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat10[2] = {&dat10a, &dat10b}; - daNpcF_anmPlayData dat11a = {ANM_GETUP, daNpc_zrC_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat11b = {ANM_WAIT_A, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat11a = {ANM_GETUP, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11b = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat11[2] = {&dat11a, &dat11b}; daNpcF_anmPlayData dat12 = {ANM_STEP, 3.0f, 0}; daNpcF_anmPlayData* pDat12[1] = {&dat12}; - daNpcF_anmPlayData dat13 = {ANM_SICK_DEMO_WAIT, daNpc_zrC_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat13 = {ANM_SICK_DEMO_WAIT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat13[1] = {&dat13}; daNpcF_anmPlayData** ppDat[14] = { pDat0, pDat1, pDat2, pDat3, pDat4, pDat5, pDat6, pDat7, pDat8, pDat9, pDat10, pDat11, @@ -1048,7 +1075,7 @@ BOOL daNpc_zrC_c::setAction(ActionFn i_action) { BOOL daNpc_zrC_c::selectAction() { mpNextActionFn = NULL; - if (daNpc_zrC_Param_c::m.mTest) { + if (mpHIO->m.common.debug_mode_ON) { mpNextActionFn = &daNpc_zrC_c::test; } else { switch (mType) { @@ -1075,7 +1102,7 @@ void daNpc_zrC_c::doNormalAction(BOOL param_0) { if (mCutType == daPy_py_c::CUT_TYPE_TURN_RIGHT) { damage_timer = 20; } else { - damage_timer = daNpc_zrC_Param_c::m.mDamageTimer; + damage_timer = mpHIO->m.common.damage_time; } setDamage(damage_timer, EXPR_WAIT_A, MOT_WAIT_A); setLookMode(LOOK_RESET); @@ -1200,14 +1227,14 @@ void daNpc_zrC_c::lookat() { fopAc_ac_c* attn_actor = NULL; J3DModel* model = mAnm_p->getModel(); BOOL snap = false; - f32 body_down_angle = daNpc_zrC_Param_c::m.mBodyDownAngle; - f32 body_up_angle = daNpc_zrC_Param_c::m.mBodyUpAngle; - f32 body_right_angle = daNpc_zrC_Param_c::m.mBodyRightAngle; - f32 body_left_angle = daNpc_zrC_Param_c::m.mBodyLeftAngle; - f32 head_down_angle = daNpc_zrC_Param_c::m.mHeadDownAngle; - f32 head_up_angle = daNpc_zrC_Param_c::m.mHeadUpAngle; - f32 head_right_angle = daNpc_zrC_Param_c::m.mHeadRightAngle; - f32 head_left_angle = daNpc_zrC_Param_c::m.mHeadLeftAngle; + f32 body_down_angle = mpHIO->m.common.body_angleX_min; + f32 body_up_angle = mpHIO->m.common.body_angleX_max; + f32 body_right_angle = mpHIO->m.common.body_angleY_min; + f32 body_left_angle = mpHIO->m.common.body_angleY_max; + f32 head_down_angle = mpHIO->m.common.head_angleX_min; + f32 head_up_angle = mpHIO->m.common.head_angleX_max; + f32 head_right_angle = mpHIO->m.common.head_angleY_min; + f32 head_left_angle = mpHIO->m.common.head_angleY_max; s16 angle_delta = mCurAngle.y - mOldAngle.y; cXyz lookat_pos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; csXyz* lookat_angle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; @@ -1318,9 +1345,9 @@ BOOL daNpc_zrC_c::wait(void* param_0) { if (home.angle.y == mCurAngle.y) { BOOL player_attn = mActorMngr[0].getActorP() != NULL; fopAc_ac_c* attn_actor = getAttnActorP( - player_attn, srchAttnActor1, daNpc_zrC_Param_c::m.mAttnRadius, - daNpc_zrC_Param_c::m.mAttnUpperY, daNpc_zrC_Param_c::m.mAttnLowerY, - daNpc_zrC_Param_c::m.mAttnFovY, shape_angle.y, 120, TRUE); + player_attn, srchAttnActor1, mpHIO->m.common.search_distance, + mpHIO->m.common.search_height, mpHIO->m.common.search_depth, + mpHIO->m.common.fov, shape_angle.y, 120, TRUE); if (attn_actor != NULL) { mActorMngr[1].entry(attn_actor); setLookMode(LOOK_ACTOR); @@ -1383,7 +1410,7 @@ BOOL daNpc_zrC_c::waitPray(void* param_0) { case 2: if (!daNpcF_chkEvtBit(0x1df) && field_0xe30 && !daPy_py_c::checkNowWolf() - && player_dist <= daNpc_zrC_Param_c::m.field_0x6c + && player_dist <= mpHIO->m.field_0x6c && !daPy_getPlayerActorClass()->checkPlayerFly() && daPy_getPlayerActorClass()->checkSwimUp() && !dComIfGp_checkPlayerStatus0(0, 0x100)) { @@ -1401,7 +1428,7 @@ BOOL daNpc_zrC_c::waitPray(void* param_0) { } if (field_0xe30 == true) { - if (player_dist > daNpc_zrC_Param_c::m.field_0x70) { + if (player_dist > mpHIO->m.field_0x70) { setLookMode(LOOK_NONE); if (home.angle.y != mCurAngle.y) { if (step(home.angle.y, EXPR_TOPRAY, MOT_TOPRAY, 30)) { @@ -1415,12 +1442,12 @@ BOOL daNpc_zrC_c::waitPray(void* param_0) { field_0xe30 = false; } } else if (mLookMode == LOOK_PLAYER || mLookMode == LOOK_PLAYER_TALK) { - if (player_dist > daNpc_zrC_Param_c::m.field_0x70) { + if (player_dist > mpHIO->m.field_0x70) { setLookMode(LOOK_NONE); setMotion(MOT_PRAY, -1.0f, FALSE); setExpression(EXPR_PRAY, -1.0f); } - } else if (player_dist > daNpc_zrC_Param_c::m.field_0x6c) { + } else if (player_dist > mpHIO->m.field_0x6c) { setLookMode(LOOK_NONE); if (home.angle.y != mCurAngle.y) { if (step(home.angle.y, -1, -1, 30)) { @@ -1460,7 +1487,7 @@ BOOL daNpc_zrC_c::waitPray(void* param_0) { mMode = 0; } } else if (field_0xe30) { - s16 angle = cM_deg2s(daNpc_zrC_Param_c::m.mHeadLeftAngle); + s16 angle = cM_deg2s(mpHIO->m.common.head_angleY_max); if (abs((s16)(player_angle - current.angle.y)) > angle && step(player_angle, EXPR_WAIT_A, MOT_STEP, 15)) { @@ -1591,11 +1618,11 @@ BOOL daNpc_zrC_c::test(void* param_0) { // fallthrough case 2: - if (daNpc_zrC_Param_c::m.mTestExpression != mExpression) { - setExpression(daNpc_zrC_Param_c::m.mTestExpression, daNpc_zrC_Param_c::m.mMorfFrames); + if (mpHIO->m.common.face_expression != mExpression) { + setExpression(mpHIO->m.common.face_expression, mpHIO->m.common.morf_frame); } - setMotion(daNpc_zrC_Param_c::m.mTestMotion, daNpc_zrC_Param_c::m.mMorfFrames, FALSE); - setLookMode(daNpc_zrC_Param_c::m.mTestLookMode); + setMotion(mpHIO->m.common.motion, mpHIO->m.common.morf_frame, FALSE); + setLookMode(mpHIO->m.common.look_mode); mOrderEvtNo = EVT_NONE; attention_info.flags = 0; break; diff --git a/src/d/actor/d_a_npc_zrz.cpp b/src/d/actor/d_a_npc_zrz.cpp index dbd5f675d8..f327729b8d 100644 --- a/src/d/actor/d_a_npc_zrz.cpp +++ b/src/d/actor/d_a_npc_zrz.cpp @@ -13,9 +13,9 @@ #include "d/actor/d_a_obj_zra_rock.h" #include "Z2AudioLib/Z2Instances.h" -static daNpc_zrZ_Param_c l_HIO; +static NPC_ZRZ_HIO_CLASS l_HIO; -daNpc_zrZ_Param_c::param const daNpc_zrZ_Param_c::m = { +daNpc_zrZ_HIOParam const daNpc_zrZ_Param_c::m = { 700.0f, // mAttnOffsetY 0.0f, // mGravity 1.0f, // mScale @@ -48,6 +48,7 @@ daNpc_zrZ_Param_c::param const daNpc_zrZ_Param_c::m = { 0, // mTestMotion 0, // mTestLookMode false, // mTest + false, 1200.0f, 1000.0f, // mFollowDst 3000.0f, // mRestoreDst @@ -159,6 +160,20 @@ daNpc_zrZ_c::EventFn daNpc_zrZ_c::mEvtCutList[8] = { &daNpc_zrZ_c::ECut_srSkip, }; +#if DEBUG +daNpc_zrZ_HIO_c::daNpc_zrZ_HIO_c() { + m = daNpc_zrZ_Param_c::m; +} + +void daNpc_zrZ_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daNpc_zrZ_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + daNpc_zrZ_c::daNpc_zrZ_c() { /* empty function */ } @@ -171,6 +186,12 @@ daNpc_zrZ_c::~daNpc_zrZ_c() { if (heap != NULL) { mAnm_p->stopZelAnime(); } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif } cPhs__Step daNpc_zrZ_c::create() { @@ -212,10 +233,16 @@ cPhs__Step daNpc_zrZ_c::create() { fopAcM_SetMtx(this, mAnm_p->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -300.0f, -50.0f, -300.0f, 300.0f, 800.0f, 300.0f); mCreatureSound.init(¤t.pos, &eyePos, 3, 1); - mAcchCir.SetWall(daNpc_zrZ_Param_c::m.mWallR, daNpc_zrZ_Param_c::m.mWallH); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("ゾ-ラ族長"); +#endif + + mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_zrZ_Param_c::m.mCcWeight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCcCyl.Set(mCcDCyl); mCcCyl.SetStts(&mCcStts); mCcCyl.SetTgHitCallback(tgHitCallBack); @@ -295,9 +322,9 @@ int daNpc_zrZ_c::Execute() { int daNpc_zrZ_c::Draw() { mAnm_p->getModel()->getModelData()->getMaterialNodePointer(1)->setMaterialAnm(mpMatAnm); if (mType == 1) { - return draw(chkAction(&daNpc_zrZ_c::test), false, daNpc_zrZ_Param_c::m.mShadowDepth, NULL, false); + return draw(chkAction(&daNpc_zrZ_c::test), false, mpHIO->m.common.real_shadow_size, NULL, false); } else { - return daNpcF_c::draw(chkAction(&daNpc_zrZ_c::test), false, daNpc_zrZ_Param_c::m.mShadowDepth, + return daNpcF_c::draw(chkAction(&daNpc_zrZ_c::test), false, mpHIO->m.common.real_shadow_size, NULL, false); } } @@ -401,7 +428,7 @@ int daNpc_zrZ_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { case 1: // backbone1 case 3: // neck case 4: // head - setLookatMtx(jnt_no, lookat_joints, daNpc_zrZ_Param_c::m.mNeckAngleScl); + setLookatMtx(jnt_no, lookat_joints, mpHIO->m.common.neck_rotation_ratio); break; case 14: // armL1 @@ -505,13 +532,13 @@ void daNpc_zrZ_c::setParam() { attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(3, 6); attention_info.flags = attn_flags; - scale.set(daNpc_zrZ_Param_c::m.mScale, - daNpc_zrZ_Param_c::m.mScale, - daNpc_zrZ_Param_c::m.mScale); + scale.set(mpHIO->m.common.scale, + mpHIO->m.common.scale, + mpHIO->m.common.scale); - mAcchCir.SetWallR(daNpc_zrZ_Param_c::m.mWallR); - mAcchCir.SetWallH(daNpc_zrZ_Param_c::m.mWallH); - gravity = daNpc_zrZ_Param_c::m.mGravity; + mAcchCir.SetWallR(mpHIO->m.common.width); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + gravity = mpHIO->m.common.gravity; u32 uvar4 = cLib_minMaxLimit(tevStr.TevColor.a * 100 / 0xff, 1, 100); mCreatureSound.startCreatureSoundLevel(Z2SE_ZRZ_MV, uvar4, -1); @@ -524,7 +551,7 @@ BOOL daNpc_zrZ_c::main() { attention_info.flags = 0; - if (!daNpc_zrZ_Param_c::m.mTest + if (!mpHIO->m.common.debug_mode_ON && (!dComIfGp_event_runCheck() || (mOrderNewEvt && dComIfGp_getEvent()->isOrderOK()))) { if (mOrderEvtNo != EVT_NONE) { @@ -588,7 +615,7 @@ BOOL daNpc_zrZ_c::ctrlBtk() { void daNpc_zrZ_c::setAttnPos() { static cXyz eyeOffset(-10.0f, 10.0f, 0.0f); - f32 offset = daNpc_zrZ_Param_c::m.mAttnOffsetY; + f32 offset = mpHIO->m.common.attention_offset; cXyz center, vec2, vec3, vec4; mDoMtx_stack_c::YrotS(field_0x990); @@ -654,8 +681,8 @@ void daNpc_zrZ_c::setAttnPos() { } mCcCyl.SetC(center); - mCcCyl.SetH(daNpc_zrZ_Param_c::m.mCylH + extra_height); - mCcCyl.SetR(daNpc_zrZ_Param_c::m.mWallR + extra_radius); + mCcCyl.SetH(mpHIO->m.common.height + extra_height); + mCcCyl.SetR(mpHIO->m.common.width + extra_radius); dComIfG_Ccsp()->Set(&mCcCyl); mCcCyl.SetCoSPrm(0x69); } @@ -925,7 +952,7 @@ void daNpc_zrZ_c::reset() { mpClothActor = NULL; mpRockActor = NULL; mLimbCalcPos = current.pos; - mLimbCalcPos.y -= daNpc_zrZ_Param_c::m.field_0x80; + mLimbCalcPos.y -= mpHIO->m.field_0x80; mLimbAngle.set(0, 0, 0); mClothesObtained = false; mMusicSet = false; @@ -934,10 +961,10 @@ void daNpc_zrZ_c::reset() { } void daNpc_zrZ_c::playExpression() { - daNpcF_anmPlayData dat0a = {ANM_F_TALK_A, daNpc_zrZ_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat0b = {ANM_NONE, daNpc_zrZ_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat0a = {ANM_F_TALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat0b = {ANM_NONE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[2] = {&dat0a, &dat0b}; - daNpcF_anmPlayData dat1 = {ANM_NONE, daNpc_zrZ_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat1 = {ANM_NONE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[1] = {&dat1}; daNpcF_anmPlayData** ppDat[2] = { pDat0, pDat1, @@ -948,12 +975,12 @@ void daNpc_zrZ_c::playExpression() { } void daNpc_zrZ_c::playMotion() { - daNpcF_anmPlayData dat0 = {ANM_WAIT_GT_A, daNpc_zrZ_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat0 = {ANM_WAIT_GT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1a = {ANM_COMEON, daNpc_zrZ_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat1b = {ANM_WAIT_GT_A, daNpc_zrZ_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat1a = {ANM_COMEON, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat1b = {ANM_WAIT_GT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[2] = {&dat1a, &dat1b}; - daNpcF_anmPlayData dat2 = {ANM_LEAD, daNpc_zrZ_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat2 = {ANM_LEAD, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[1] = {&dat2}; daNpcF_anmPlayData** ppDat[3] = { pDat0, pDat1, pDat2, @@ -982,7 +1009,7 @@ BOOL daNpc_zrZ_c::setAction(ActionFn i_action) { BOOL daNpc_zrZ_c::selectAction() { mpNextActionFn = NULL; - if (daNpc_zrZ_Param_c::m.mTest) { + if (mpHIO->m.common.debug_mode_ON) { mpNextActionFn = &daNpc_zrZ_c::test; } else { switch (mDemoMode) { @@ -1006,7 +1033,7 @@ void daNpc_zrZ_c::doNormalAction(BOOL param_0) { if (mCutType == daPy_py_c::CUT_TYPE_TURN_RIGHT) { timer = 20; } else { - timer = daNpc_zrZ_Param_c::m.mDamageTimer; + timer = mpHIO->m.common.damage_time; } setDamage(timer, EXPR_NONE, MOT_WAIT_GT_A); setLookMode(LOOK_RESET); @@ -1153,14 +1180,14 @@ void daNpc_zrZ_c::lookat() { fopAc_ac_c* attn_actor = NULL; J3DModel* model = mAnm_p->getModel(); BOOL snap = false; - f32 body_down_angle = daNpc_zrZ_Param_c::m.mBodyDownAngle; - f32 body_up_angle = daNpc_zrZ_Param_c::m.mBodyUpAngle; - f32 body_right_angle = daNpc_zrZ_Param_c::m.mBodyRightAngle; - f32 body_left_angle = daNpc_zrZ_Param_c::m.mBodyLeftAngle; - f32 head_down_angle = daNpc_zrZ_Param_c::m.mHeadDownAngle; - f32 head_up_angle = daNpc_zrZ_Param_c::m.mHeadUpAngle; - f32 head_right_angle = daNpc_zrZ_Param_c::m.mHeadRightAngle; - f32 head_left_angle = daNpc_zrZ_Param_c::m.mHeadLeftAngle; + f32 body_down_angle = mpHIO->m.common.body_angleX_min; + f32 body_up_angle = mpHIO->m.common.body_angleX_max; + f32 body_right_angle = mpHIO->m.common.body_angleY_min; + f32 body_left_angle = mpHIO->m.common.body_angleY_max; + f32 head_down_angle = mpHIO->m.common.head_angleX_min; + f32 head_up_angle = mpHIO->m.common.head_angleX_max; + f32 head_right_angle = mpHIO->m.common.head_angleY_min; + f32 head_left_angle = mpHIO->m.common.head_angleY_max; s16 angle_delta = mCurAngle.y - mOldAngle.y; cXyz lookat_pos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; csXyz* lookat_angle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; @@ -1605,7 +1632,7 @@ BOOL daNpc_zrZ_c::ECut_restoreLink(int i_staffID) { if (event_manager.getIsAddvance(i_staffID)) { switch (prm) { case 0: - pullbackPlayer(daNpc_zrZ_Param_c::m.mRestoreDst - 500.0f); + pullbackPlayer(mpHIO->m.mRestoreDst - 500.0f); setAngle(fopAcM_searchPlayerAngleY(this)); break; @@ -1970,7 +1997,7 @@ BOOL daNpc_zrZ_c::ECut_sealRelease(int i_staffID) { cXyz pos = mPath.getPntPos(mPath.getIdx()); if (!mPath.chkPassedDst(current.pos)) { cLib_chaseS(&tevStr.TevColor.a, 8, 8); - cLib_addCalc2(&mSpeed, daNpc_zrZ_Param_c::m.mMaxSpeed, 0.1f, 1.0f); + cLib_addCalc2(&mSpeed, mpHIO->m.mMaxSpeed, 0.1f, 1.0f); s16 ang_y = cLib_targetAngleY(¤t.pos, &pos); s16 ang_x = cLib_targetAngleX(&pos, ¤t.pos); cLib_addCalcAngleS2(&mMoveAngle.y, ang_y, 2, 0x800); @@ -2081,9 +2108,9 @@ BOOL daNpc_zrZ_c::wait(void* param_0) { if (home.angle.y == mCurAngle.y) { BOOL player_attn = mActorMngr[0].getActorP() != NULL; fopAc_ac_c* attn_actor = getAttnActorP( - player_attn, srchAttnActor1, daNpc_zrZ_Param_c::m.mAttnRadius, - daNpc_zrZ_Param_c::m.mAttnUpperY, daNpc_zrZ_Param_c::m.mAttnLowerY, - daNpc_zrZ_Param_c::m.mAttnFovY, shape_angle.y, 120, true + player_attn, srchAttnActor1, mpHIO->m.common.search_distance, + mpHIO->m.common.search_height, mpHIO->m.common.search_depth, + mpHIO->m.common.fov, shape_angle.y, 120, true ); if (attn_actor != NULL) { mActorMngr[1].entry(attn_actor); @@ -2130,21 +2157,21 @@ BOOL daNpc_zrZ_c::comeHere(void* param_0) { setAngle(mCurAngle.y); if (!mIsLeading) { - if ((pnt_pos - player_pos).absXZ() < daNpc_zrZ_Param_c::m.mFollowDst) { + if ((pnt_pos - player_pos).absXZ() < mpHIO->m.mFollowDst) { mActorMngr[0].entry(daPy_getPlayerActorClass()); setLookMode(LOOK_PLAYER); setAngle(fopAcM_searchPlayerAngleY(this)); setMotion(MOT_LEAD, -1.0f, false); mIsLeading = true; } else if (!dComIfGs_isSwitch(mSwitch1, fopAcM_GetRoomNo(this)) - && (current.pos - player_pos).absXZ() > daNpc_zrZ_Param_c::m.mRestoreDst) + && (current.pos - player_pos).absXZ() > mpHIO->m.mRestoreDst) { mOrderEvtNo = EVT_RESTORE_LINK; setAngle(fopAcM_searchPlayerAngleY(this)); } } else { if (mPath.chkPassedDst(current.pos)) { - if ((pnt_pos - player_pos).absXZ() < daNpc_zrZ_Param_c::m.mFollowDst) { + if ((pnt_pos - player_pos).absXZ() < mpHIO->m.mFollowDst) { mPath.setNextIdxDst(current.pos); pnt_pos = mPath.getPntPos(mPath.getIdx()); mIsMoving = true; @@ -2166,7 +2193,7 @@ BOOL daNpc_zrZ_c::comeHere(void* param_0) { } if (mIsMoving) { - cLib_addCalc2(&mSpeed, daNpc_zrZ_Param_c::m.mMaxSpeed, 0.1f, 1.0f); + cLib_addCalc2(&mSpeed, mpHIO->m.mMaxSpeed, 0.1f, 1.0f); s16 angle_y = cLib_targetAngleY(¤t.pos, &pnt_pos); s16 angle_x = cLib_targetAngleX(&pnt_pos, ¤t.pos); cLib_addCalcAngleS2(&mMoveAngle.y, angle_y, 2, 0x800); @@ -2181,7 +2208,7 @@ BOOL daNpc_zrZ_c::comeHere(void* param_0) { current.pos += move_speed; if (!dComIfGs_isSwitch(mSwitch1, fopAcM_GetRoomNo(this)) - && (current.pos - player_pos).absXZ() > daNpc_zrZ_Param_c::m.mRestoreDst) + && (current.pos - player_pos).absXZ() > mpHIO->m.mRestoreDst) { mOrderEvtNo = EVT_RESTORE_LINK; setAngle(fopAcM_searchPlayerAngleY(this)); @@ -2237,13 +2264,13 @@ BOOL daNpc_zrZ_c::comeHere2(void* param_0) { if (mPath.getIdx() == mPath.getNextIdx()) { mIsMoving = false; setMotion(MOT_WAIT_GT_A, -1.0f, false); - if ((current.pos - player_pos).absXZ() < daNpc_zrZ_Param_c::m.mClothesGetDst + if ((current.pos - player_pos).absXZ() < mpHIO->m.mClothesGetDst && player_pos.y > 450.0f) { mClothesObtained = true; mOrderEvtNo = EVT_CLOTHES_GET; } - } else if ((pnt_pos - player_pos).absXZ() < daNpc_zrZ_Param_c::m.mFollowDst) { + } else if ((pnt_pos - player_pos).absXZ() < mpHIO->m.mFollowDst) { mPath.setNextIdxDst(current.pos); pnt_pos = mPath.getPntPos(mPath.getIdx()); mIsMoving = true; @@ -2266,7 +2293,7 @@ BOOL daNpc_zrZ_c::comeHere2(void* param_0) { cLib_chaseS(&tevStr.TevColor.a, 0xff, 8); } - cLib_addCalc2(&mSpeed, daNpc_zrZ_Param_c::m.mMaxSpeed, 0.1f, 1.0f); + cLib_addCalc2(&mSpeed, mpHIO->m.mMaxSpeed, 0.1f, 1.0f); s16 angle_y = cLib_targetAngleY(¤t.pos, &pnt_pos); s16 angle_x = cLib_targetAngleX(&pnt_pos, ¤t.pos); cLib_addCalcAngleS2(&mMoveAngle.y, angle_y, 2, 0x800); @@ -2281,7 +2308,7 @@ BOOL daNpc_zrZ_c::comeHere2(void* param_0) { mDoMtx_stack_c::multVec(&move_speed, &move_speed); current.pos += move_speed; - if ((current.pos - player_pos).absXZ() > daNpc_zrZ_Param_c::m.mRestoreDst) { + if ((current.pos - player_pos).absXZ() > mpHIO->m.mRestoreDst) { mOrderEvtNo = EVT_RESTORE_LINK; setAngle(fopAcM_searchPlayerAngleY(this)); } @@ -2356,11 +2383,11 @@ BOOL daNpc_zrZ_c::test(void* param_0) { // fallthrough case 2: - if (daNpc_zrZ_Param_c::m.mTestExpression != mExpression) { - setExpression(daNpc_zrZ_Param_c::m.mTestExpression, daNpc_zrZ_Param_c::m.mMorfFrames); + if (mpHIO->m.common.face_expression != mExpression) { + setExpression(mpHIO->m.common.face_expression, mpHIO->m.common.morf_frame); } - setMotion(daNpc_zrZ_Param_c::m.mTestMotion, daNpc_zrZ_Param_c::m.mMorfFrames, false); - setLookMode(daNpc_zrZ_Param_c::m.mTestLookMode); + setMotion(mpHIO->m.common.motion, mpHIO->m.common.morf_frame, false); + setLookMode(mpHIO->m.common.look_mode); mOrderEvtNo = EVT_NONE; attention_info.flags = 0; break; @@ -2377,8 +2404,8 @@ void daNpc_zrZ_c::himoCalc() { vec1.y += 470.0f; cXyz vec2 = mLimbCalcPos - vec1; vec2.normalize(); - vec2 = vec2 * daNpc_zrZ_Param_c::m.field_0x80; - cXyz vec3(0.0f, -daNpc_zrZ_Param_c::m.field_0x80, 0.0f); + vec2 = vec2 * mpHIO->m.field_0x80; + cXyz vec3(0.0f, -mpHIO->m.field_0x80, 0.0f); cLib_addCalcPos2(&vec2, vec3, 0.2f, 25.0f); mLimbCalcPos = vec2 + vec1; diff --git a/src/d/actor/d_a_obj_automata.cpp b/src/d/actor/d_a_obj_automata.cpp index 1ee6793581..7a54a16fce 100644 --- a/src/d/actor/d_a_obj_automata.cpp +++ b/src/d/actor/d_a_obj_automata.cpp @@ -19,7 +19,7 @@ static char* l_resNameList[2] = { "AutoMata", }; -f32 const daObj_AutoMata_Param_c::m[3] = { +daObj_AutoMata_HIOParam const daObj_AutoMata_Param_c::m = { 220.0f, 80.0f, 40.0f, }; @@ -49,11 +49,34 @@ static dCcD_SrcSph l_ccDSph = { } // mSphAttr }; +static OBJ_AUTOMATA_HIO_CLASS l_HIO; + +#if DEBUG +daObj_AutoMata_HIO_c::daObj_AutoMata_HIO_c() { + m = daObj_AutoMata_Param_c::m; +} + +void daObj_AutoMata_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daObj_AutoMata_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + daObj_AutoMata_c::~daObj_AutoMata_c() { OS_REPORT("|%06d:%x|daObj_AutoMata_c -> デストラクト\n", g_Counter.mCounter0, this); if (mpMorf != NULL) { mpMorf->stopZelAnime(); } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + dComIfG_resDelete(&mPhase, l_resNameList[l_bmdData[field_0xb30][1]]); } @@ -70,6 +93,12 @@ int daObj_AutoMata_c::create() { fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -200.0f, -100.0f, -200.0f, 200.0f, 300.0f, 200.0f); mCreature.init(¤t.pos, &eyePos, 3, 1); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("オ-トマタ"); +#endif + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &field_0x834, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mStts.Init(0xff, 0, this); @@ -143,10 +172,10 @@ int daObj_AutoMata_c::Execute() { mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(3)); mDoMtx_stack_c::multVec(&cStack_28, &sphCenter); mSph.SetC(sphCenter); - mSph.SetR(daObj_AutoMata_Param_c::m[2]); + mSph.SetR(mpHIO->m.field_0x8); dComIfG_Ccsp()->Set(&mSph); - mCyl.SetH(daObj_AutoMata_Param_c::m[0]); - mCyl.SetR(daObj_AutoMata_Param_c::m[1]); + mCyl.SetH(mpHIO->m.field_0x0); + mCyl.SetR(mpHIO->m.field_0x4); mCyl.SetC(current.pos); dComIfG_Ccsp()->Set(&mCyl); } @@ -301,8 +330,6 @@ static int daObj_AutoMata_IsDelete(void* i_this) { return 1; } -static daObj_AutoMata_Param_c l_HIO; - static actor_method_class daObj_AutoMata_MethodTable = { (process_method_func)daObj_AutoMata_Create, (process_method_func)daObj_AutoMata_Delete, diff --git a/src/d/actor/d_a_obj_bed.cpp b/src/d/actor/d_a_obj_bed.cpp index d2248c3b55..ea83d6ff33 100644 --- a/src/d/actor/d_a_obj_bed.cpp +++ b/src/d/actor/d_a_obj_bed.cpp @@ -14,12 +14,35 @@ static char* l_resName = "KH_Bed"; -daObj_Bed_Param_c::params const daObj_Bed_Param_c::m = {NULL, -3.0f, 1.0f, 600.0f}; +static OBJ_BED_HIO_CLASS l_HIO; + +#if DEBUG +daObj_Bed_HIO_c::daObj_Bed_HIO_c() { + m = daObj_Bed_Param_c::m; +} + +void daObj_Bed_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daObj_Bed_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daObj_Bed_HIOParam const daObj_Bed_Param_c::m = {NULL, -3.0f, 1.0f, 600.0f}; daObj_Bed_c::~daObj_Bed_c() { if (mpCollider != NULL) { dComIfG_Bgsp().Release(mpCollider); } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + dComIfG_resDelete(&mPhase, getResName()); } @@ -41,6 +64,12 @@ cPhs__Step daObj_Bed_c::create() { } fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -200.0f, -100.0f, -200.0f, 200.0f, 200.0f, 200.0f); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("ベッド"); +#endif + mAcch.Set(¤t.pos, &old.pos, this, 1, &mAcchCir, &speed, ¤t.angle, &shape_angle); mAcch.CrrPos(dComIfG_Bgsp()); @@ -105,7 +134,7 @@ int daObj_Bed_c::Draw() { mDoExt_modelUpdateDL(mpModel); if (mGroundH != -G_CM3D_F_INF) { mShadow = dComIfGd_setShadow(mShadow, 1, mpModel, ¤t.pos, - daObj_Bed_Param_c::m.field_0xc, 20.0f, + mpHIO->m.field_0xc, 20.0f, current.pos.y, mGroundH, mGndChk, &tevStr, 0, 1.0f, &dDlst_shadowControl_c::mSimpleTexObj); } @@ -170,8 +199,6 @@ static int daObj_Bed_IsDelete(void* param_0) { return 1; } -static daObj_Bed_Param_c l_HIO; - static actor_method_class daObj_Bed_MethodTable = { (process_method_func)daObj_Bed_Create, (process_method_func)daObj_Bed_Delete, diff --git a/src/d/actor/d_a_obj_bemos.cpp b/src/d/actor/d_a_obj_bemos.cpp index 44a8c086e7..9f80da3f3e 100644 --- a/src/d/actor/d_a_obj_bemos.cpp +++ b/src/d/actor/d_a_obj_bemos.cpp @@ -1823,7 +1823,7 @@ void daObjBm_c::debugDraw() { } if (CHECK_DRAW) { - mpBgW->CalcPlane(); + mpBgW->DebugDraw(); } } #endif diff --git a/src/d/actor/d_a_obj_bhbridge.cpp b/src/d/actor/d_a_obj_bhbridge.cpp index 59e2ed6fd5..9ada8dfdc7 100644 --- a/src/d/actor/d_a_obj_bhbridge.cpp +++ b/src/d/actor/d_a_obj_bhbridge.cpp @@ -11,7 +11,7 @@ #include "d/d_com_inf_game.h" #include "d/d_s_play.h" #include "d/actor/d_a_player.h" -#include +#include void daObjBhbridge_c::RideOn_Angle(s16& param_1, f32 param_2, s16 param_3, f32 param_4) { cLib_addCalcAngleS(¶m_1, param_3 * (param_2 / param_4), 1, 0x100, 1); diff --git a/src/d/actor/d_a_obj_boumato.cpp b/src/d/actor/d_a_obj_boumato.cpp index 95ca898d01..85a81d4e39 100644 --- a/src/d/actor/d_a_obj_boumato.cpp +++ b/src/d/actor/d_a_obj_boumato.cpp @@ -14,7 +14,7 @@ static const char* dummyString() { return ""; } -f32 const daObj_BouMato_Param_c::m[7] = { +daObj_BouMato_HIOParam const daObj_BouMato_Param_c::m = { 0.0f, -3.0f, 1.0f, 400.0f, 300.0f, 4.0f, 20.0f, }; @@ -39,8 +39,35 @@ static dCcD_SrcCyl l_ccDCyl = { static char* l_resName = "H_BouMato"; +static daArrow_c* l_findActorPtrs[100]; + +static u32 l_findCount; + +static OBJ_BOUMATO_HIO_CLASS l_HIO; + +#if DEBUG +daObj_BouMato_HIO_c::daObj_BouMato_HIO_c() { + m = daObj_BouMato_Param_c::m; +} + +void daObj_BouMato_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daObj_BouMato_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + daObj_BouMato_c::~daObj_BouMato_c() { OS_REPORT("|%06d:%x|daObj_BouMato_c -> デストラクト\n", g_Counter.mCounter0, this); + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + dComIfG_resDelete(&mPhase, getResName()); } @@ -58,6 +85,12 @@ int daObj_BouMato_c::create() { mModel->getModelData(); fopAcM_SetMtx(this, mModel->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -300.0f, -50.0f, -300.0f, 300.0f, 450.0f, 300.0f); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("棒的"); +#endif + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mAcch.CrrPos(dComIfG_Bgsp()); @@ -178,12 +211,12 @@ int daObj_BouMato_c::Execute() { cLib_addCalc2(field_0xa18 + 2, 0, 0.125f, 125.0f); setMtx(); attention_info.position = current.pos; - attention_info.position.y += daObj_BouMato_Param_c::m[0]; + attention_info.position.y += mpHIO->m.field_0x00; eyePos = attention_info.position; if (field_0xa38 == 0) { mCyl.SetC(current.pos); - mCyl.SetH(daObj_BouMato_Param_c::m[4]); - mCyl.SetR(daObj_BouMato_Param_c::m[5]); + mCyl.SetH(mpHIO->m.field_0x10); + mCyl.SetR(mpHIO->m.field_0x14); dComIfG_Ccsp()->Set(&mCyl); } mCyl.ClrTgHit(); @@ -197,7 +230,7 @@ int daObj_BouMato_c::Draw() { mDoExt_modelUpdateDL(mModel); if (mGroundH != -G_CM3D_F_INF) { mShadowId = - dComIfGd_setShadow(mShadowId, 1, mModel, ¤t.pos, daObj_BouMato_Param_c::m[3], + dComIfGd_setShadow(mShadowId, 1, mModel, ¤t.pos, mpHIO->m.field_0x0c, 20.0f, current.pos.y, mGroundH, mGndChk, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); } @@ -222,10 +255,6 @@ void daObj_BouMato_c::tgHitCallBack(fopAc_ac_c* param_1, dCcD_GObjInf* param_2, static_cast(param_1)->setCutType(cutType); } -static daArrow_c* l_findActorPtrs[100]; - -static u32 l_findCount; - void* daObj_BouMato_c::srchArrow(void* param_1, void* param_2) { if (l_findCount < 100 && param_1 != NULL && param_1 != param_2) { if (fopAcM_IsExecuting(fopAcM_GetID(param_1)) && fopAcM_GetName(param_1) == PROC_ARROW && @@ -255,7 +284,7 @@ char* daObj_BouMato_c::getResName() { void daObj_BouMato_c::setSwayParam(fopAc_ac_c* param_1) { f32 dVar7 = 1.0f; - f32 local_48[3] = {0.0f, 0.0f, daObj_BouMato_Param_c::m[6]};; + f32 local_48[3] = {0.0f, 0.0f, mpHIO->m.field_0x18}; field_0xa2a = (fopAcM_searchActorAngleY(this, param_1) - shape_angle.y) + 0x8000; field_0xa10 = 8; mIsCurTurnRight = false; @@ -330,8 +359,6 @@ static int daObj_BouMato_IsDelete(void* i_this) { return 1; } -static daObj_BouMato_Param_c l_HIO; - static actor_method_class daObj_BouMato_MethodTable = { (process_method_func)daObj_BouMato_Create, (process_method_func)daObj_BouMato_Delete, diff --git a/src/d/actor/d_a_obj_carry.cpp b/src/d/actor/d_a_obj_carry.cpp index e3960aebce..bea4671174 100644 --- a/src/d/actor/d_a_obj_carry.cpp +++ b/src/d/actor/d_a_obj_carry.cpp @@ -7,7 +7,7 @@ #include "d/actor/d_a_obj_carry.h" #include "d/actor/d_a_player.h" -#include +#include #include "d/d_com_inf_game.h" #include "SSystem/SComponent/c_math.h" #include "d/actor/d_a_obj_swBallA.h" diff --git a/src/d/actor/d_a_obj_cowdoor.cpp b/src/d/actor/d_a_obj_cowdoor.cpp index da2151d4d1..91d587f860 100644 --- a/src/d/actor/d_a_obj_cowdoor.cpp +++ b/src/d/actor/d_a_obj_cowdoor.cpp @@ -9,39 +9,44 @@ #include "d/d_procname.h" void daCowdoor_c::setBaseMtx() { - MTXTrans(mDoMtx_stack_c::now, current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::transS( current.pos.x, current.pos.y, current.pos.z); mDoMtx_stack_c::YrotM(shape_angle.y); - MTXCopy(mDoMtx_stack_c::now, field_0x5a8->mBaseTransformMtx); - MTXCopy(mDoMtx_stack_c::now, mBgMtx); + field_0x5a8->setBaseTRMtx(mDoMtx_stack_c::get()); + MTXCopy(mDoMtx_stack_c::get(), mBgMtx); } int daCowdoor_c::Create() { setBaseMtx(); - cullMtx = field_0x5a8->mBaseTransformMtx; + + fopAcM_SetMtx(this, field_0x5a8->getBaseTRMtx()); fopAcM_setCullSizeBox2(this, field_0x5a8->getModelData()); - cullSizeFar = 5.0f; - return 1; + fopAcM_setCullSizeFar(this, 5.0f); + return TRUE; } static const char* l_arcName = "A_UHDoor"; static const char* l_bmdName = "A_UHDoor.bmd"; -int daCowdoor_c::CreateHeap() { - field_0x5a8 = mDoExt_J3DModel__create( - (J3DModelData*)dComIfG_getObjectRes(l_arcName, l_bmdName), 0x80000, 0x11000084); - return (field_0x5a8 != NULL) ? 1 : 0; -} - static const char* l_dzbName = "A_UHDoor.dzb"; +int daCowdoor_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, l_bmdName); + JUT_ASSERT(140, modelData != NULL); + field_0x5a8 = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (field_0x5a8 == NULL) { + return FALSE; + } + return TRUE; +} + int daCowdoor_c::create() { fopAcM_ct(this, daCowdoor_c); int phase = dComIfG_resLoad(&field_0x5a0, l_arcName); if (phase == cPhs_COMPLEATE_e) { - phase = - MoveBGCreate(l_arcName, dComIfG_getObjctResName2Index(l_arcName, l_dzbName), - dBgS_MoveBGProc_TypicalRotY, 0x4000, NULL); + int dzb_id = dComIfG_getObjctResName2Index(l_arcName, l_dzbName); + JUT_ASSERT(169, dzb_id != -1); + phase = MoveBGCreate(l_arcName, dzb_id, dBgS_MoveBGProc_TypicalRotY, 0x4000, NULL); if (phase == cPhs_ERROR_e) { return phase; } @@ -52,7 +57,7 @@ int daCowdoor_c::create() { int daCowdoor_c::Execute(Mtx** param_0) { *param_0 = &mBgMtx; setBaseMtx(); - return 1; + return TRUE; } int daCowdoor_c::Draw() { @@ -61,28 +66,33 @@ int daCowdoor_c::Draw() { dComIfGd_setListBG(); mDoExt_modelUpdateDL(field_0x5a8); dComIfGd_setList(); - return 1; + return TRUE; } int daCowdoor_c::Delete() { dComIfG_resDelete(&field_0x5a0, l_arcName); - return 1; + return TRUE; } static int daCowdoor_Draw(daCowdoor_c* i_this) { - return static_cast(i_this)->Draw(); + return i_this->MoveBGDraw(); } static int daCowdoor_Execute(daCowdoor_c* i_this) { - return static_cast(i_this)->MoveBGExecute(); + return i_this->MoveBGExecute(); } static int daCowdoor_Delete(daCowdoor_c* i_this) { - return static_cast(i_this)->MoveBGDelete(); + fpc_ProcID id = fopAcM_GetID(i_this); + (void)"Delete -> Cowdoor(id=%d)\n"; + return i_this->MoveBGDelete(); } static int daCowdoor_Create(fopAc_ac_c* i_this) { - return static_cast(i_this)->create(); + daCowdoor_c* cowDoor = (daCowdoor_c*)i_this; + fpc_ProcID id = fopAcM_GetID(i_this); + (void)"Create -> Cowdoor(id=%d)\n"; + return cowDoor->create(); } static actor_method_class l_daCowdoor_Method = { diff --git a/src/d/actor/d_a_obj_cwall.cpp b/src/d/actor/d_a_obj_cwall.cpp index 7a54788e6b..b7805ef4ac 100644 --- a/src/d/actor/d_a_obj_cwall.cpp +++ b/src/d/actor/d_a_obj_cwall.cpp @@ -12,7 +12,7 @@ #include "Z2AudioLib/Z2Instances.h" #include "d/d_cc_d.h" #include "d/d_com_inf_game.h" -#include +#include void daObjCwall_c::initBaseMtx() { mWallModel->setBaseScale(scale); diff --git a/src/d/actor/d_a_obj_digsnow.cpp b/src/d/actor/d_a_obj_digsnow.cpp index 62f3922ee6..f474cd4719 100644 --- a/src/d/actor/d_a_obj_digsnow.cpp +++ b/src/d/actor/d_a_obj_digsnow.cpp @@ -8,7 +8,7 @@ #include "d/actor/d_a_obj_digsnow.h" #include "d/actor/d_a_player.h" #include "d/d_com_inf_game.h" -#include +#include void daObjDigSnow_c::initBaseMtx() { mpModel->setBaseScale(scale); diff --git a/src/d/actor/d_a_obj_drop.cpp b/src/d/actor/d_a_obj_drop.cpp index 1ee2d25856..eff54e3af1 100644 --- a/src/d/actor/d_a_obj_drop.cpp +++ b/src/d/actor/d_a_obj_drop.cpp @@ -7,7 +7,7 @@ #include "d/actor/d_a_obj_drop.h" #include "SSystem/SComponent/c_math.h" -#include +#include #include "d/actor/d_a_player.h" #include "d/d_com_inf_game.h" #include "d/d_camera.h" diff --git a/src/d/actor/d_a_obj_fallobj.cpp b/src/d/actor/d_a_obj_fallobj.cpp index 063df5327a..f5acf8a7b7 100644 --- a/src/d/actor/d_a_obj_fallobj.cpp +++ b/src/d/actor/d_a_obj_fallobj.cpp @@ -365,7 +365,7 @@ int daObjFallObj_c::Draw() { #if DEBUG if (l_HIO.mCheckDisplay) { - mpBgW->CalcPlane(); + mpBgW->DebugDraw(); daPy_py_c* player = daPy_getPlayerActorClass(); GXColor color = (GXColor){0xff, 0, 0, 0xff}; cXyz cStack_1c(attention_info.position); diff --git a/src/d/actor/d_a_obj_gra2_soldier.inc b/src/d/actor/d_a_obj_gra2_soldier.inc index 879062983f..f31da3b0fe 100644 --- a/src/d/actor/d_a_obj_gra2_soldier.inc +++ b/src/d/actor/d_a_obj_gra2_soldier.inc @@ -1,7 +1,7 @@ #include "d/actor/d_a_obj_gra2.h" #include "d/d_camera.h" #include "d/actor/d_a_tag_gra.h" -#include +#include f32 daObj_GrA_c::getSrchCircleR() { f32 srchCircleR; diff --git a/src/d/actor/d_a_obj_hb.cpp b/src/d/actor/d_a_obj_hb.cpp index 331bb831af..5bb7aa2b54 100644 --- a/src/d/actor/d_a_obj_hb.cpp +++ b/src/d/actor/d_a_obj_hb.cpp @@ -411,13 +411,12 @@ static void action(obj_hb_class* i_this) { if (cc_move_p != NULL) { a_this->current.pos.x += cc_move_p->x * 0.5f; a_this->current.pos.z += cc_move_p->z * 0.5f; - if (fabsf(cc_move_p->x) >= 2.0f || fabsf(cc_move_p->z) >= 2.0f) { cLib_addCalc2(&i_this->field_0x688, NREG_F(5) + 1000.0f, 0.1f, NREG_F(6) + 200.0f); s16 target = fopAcM_searchPlayerAngleY(a_this); s16 angle_delta = i_this->field_0x676.y - target; if (angle_delta > 0x4000 || angle_delta < -0x4000) { - target -= 0x8000; + ADD_ANGLE(target, 0x8000); } cLib_addCalcAngleS2(&i_this->field_0x676.y, target, 4, 0x100); } @@ -427,7 +426,7 @@ static void action(obj_hb_class* i_this) { i_this->mBgc.CrrPos(dComIfG_Bgsp()); sVar1 = 1; break; - + case ACTION_FLOAT: obj_hb_float(i_this); i_this->mBgc.CrrPos(dComIfG_Bgsp()); @@ -449,8 +448,9 @@ static void action(obj_hb_class* i_this) { i_this->field_0x6b0 = 0; if (i_this->mAtInfo.mHitType == HIT_TYPE_LINK_NORMAL_ATTACK) { - if (daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_TURN_RIGHT || daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_UNK_9) { - a_this->speedF = WREG_F(16) + cM_rndF(10.0f) + 40.0f; + if (daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_TURN_RIGHT + || daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_UNK_9) { + a_this->speedF = cM_rndF(10.0f) + 40.0f + WREG_F(16); i_this->field_0x690 = cM_rndF(2000.0f) + 5500.0f; i_this->field_0x688 = (s16)(cM_rndF(1000.0f) + 5000.0f); } else { @@ -477,8 +477,8 @@ static void action(obj_hb_class* i_this) { cLib_addCalcAngleS2(&i_this->field_0x68e, 0, 8, 0x100); cLib_addCalcAngleS2(&i_this->field_0x690, 0, 1, WREG_S(6) + 0x96); } else { - i_this->field_0x68c = i_this->field_0x688 * cM_ssin(i_this->field_0x650 * (NREG_F(3) + 3000)); - i_this->field_0x68e = i_this->field_0x688 * cM_ssin(i_this->field_0x650 * (NREG_F(4) + 4000)); + i_this->field_0x68c = i_this->field_0x688 * cM_ssin(i_this->field_0x650 * (NREG_S(3) + 3000)); + i_this->field_0x68e = i_this->field_0x688 * cM_ssin(i_this->field_0x650 * (NREG_S(4) + 4000)); cLib_addCalc0(&i_this->field_0x688, 0.1f, NREG_F(1) + 50.0f); cLib_addCalcAngleS2(&i_this->field_0x690, 0, 1, WREG_S(5) + 0x32); } @@ -503,7 +503,8 @@ static void action(obj_hb_class* i_this) { } a_this->speedF = 0.0f; - cXyz scale(a_this->scale.x, a_this->scale.x, a_this->scale.x); + f32 val_scale = a_this->scale.x; + cXyz scale(val_scale, val_scale, val_scale); cXyz pos(a_this->current.pos); pos.y = i_this->mGroundCross; @@ -522,7 +523,8 @@ static void action(obj_hb_class* i_this) { if (i_this->field_0x6a4 != 0) { i_this->field_0x6a4--; if (i_this->field_0x6a4 != 0) { - cLib_addCalc2(&a_this->scale.x, i_this->field_0x6a4 * (BREG_F(2) + 0.01f) * cM_ssin(i_this->field_0x6a4 * (KREG_S(3) + 15000)) + 1.0f, 1.0f, 0.2f); + f32 reg_f30 = i_this->field_0x6a4 * (BREG_F(2) + 0.01f); + cLib_addCalc2(&a_this->scale.x, reg_f30 * cM_ssin(i_this->field_0x6a4 * (KREG_S(3) + 15000)) + 1.0f, 1.0f, 0.2f); } else { a_this->scale.x = 1.0f; } diff --git a/src/d/actor/d_a_obj_ice_l.cpp b/src/d/actor/d_a_obj_ice_l.cpp index 396e79fcf9..34d489308c 100644 --- a/src/d/actor/d_a_obj_ice_l.cpp +++ b/src/d/actor/d_a_obj_ice_l.cpp @@ -12,7 +12,7 @@ #include "d/actor/d_a_player.h" #include "d/d_procname.h" #include "d/d_s_play.h" -#include +#include f32 dummyLiteral() { return 0.0f; diff --git a/src/d/actor/d_a_obj_ice_s.cpp b/src/d/actor/d_a_obj_ice_s.cpp index ba8ad44d1f..c829b2c55a 100644 --- a/src/d/actor/d_a_obj_ice_s.cpp +++ b/src/d/actor/d_a_obj_ice_s.cpp @@ -12,7 +12,7 @@ #include "d/d_s_play.h" #include "SSystem/SComponent/c_lib.h" #include "SSystem/SComponent/c_math.h" -#include +#include class daOBJ_ICE_S_HIO_c : public JORReflexible { public: diff --git a/src/d/actor/d_a_obj_ita.cpp b/src/d/actor/d_a_obj_ita.cpp index d163fe19a3..47c8c9e643 100644 --- a/src/d/actor/d_a_obj_ita.cpp +++ b/src/d/actor/d_a_obj_ita.cpp @@ -15,13 +15,7 @@ public: daObj_ITA_HIO_c(); virtual ~daObj_ITA_HIO_c() {} - void genMessage(JORMContext* ctx) { - ctx->genLabel("ヒメクジ", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); - ctx->genSlider("サーチエリア", &search_area, 0.0f, 2000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); - ctx->genSlider("飛ばし方向スピード", &launch_dir_spd, 0.0f, -100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); - ctx->genSlider("飛ばし方向Yスピード", &launch_dir_y_spd, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); - ctx->genSlider("重力設定", &gravity_settings, 0.0f, -20.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); - } + void genMessage(JORMContext* ctx); /* ヒメクジ */ /* 0x04 */ s8 id; @@ -31,8 +25,6 @@ public: /* 0x14 */ f32 gravity_settings; }; -static char* l_arcName = "M_Ita"; - daObj_ITA_HIO_c::daObj_ITA_HIO_c() { id = -1; search_area = 600.0f; @@ -41,6 +33,18 @@ daObj_ITA_HIO_c::daObj_ITA_HIO_c() { gravity_settings = -9.0f; } +#if DEBUG +void daObj_ITA_HIO_c::genMessage(JORMContext* ctx) { + ctx->genLabel("ヒメクジ", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("サーチエリア", &search_area, 0.0f, 2000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("飛ばし方向スピード", &launch_dir_spd, 0.0f, -100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("飛ばし方向Yスピード", &launch_dir_y_spd, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("重力設定", &gravity_settings, 0.0f, -20.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); +} +#endif + +static char* l_arcName = "M_Ita"; + static f32 dummy() { return 0.0f; } @@ -59,16 +63,15 @@ namespace { } // namespace void daObjIta_c::Search_Ymb() { - f32 zero = 0.0f; + f32 speed_f = 0.0f; cXyz pos(e_ymb_Pos->x - current.pos.x, e_ymb_Pos->y - current.pos.y, e_ymb_Pos->z - current.pos.z); mDoMtx_stack_c::YrotS(-shape_angle.y); mDoMtx_stack_c::multVec(&pos, &pos); if (pos.x < BREG_F(0) + 750.0f && pos.x > -750.0f - BREG_F(0) && pos.z < 450.0f + BREG_F(1) && pos.z > -450.0f - BREG_F(1) && pos.y < BREG_F(7) + 600.0f) { - f32 speed_f = fopAcM_GetSpeedF(e_ymb); - zero = 0.0f; - if (speed_f > zero) { + speed_f = fopAcM_GetSpeedF(e_ymb); + if (speed_f > 0.0f) { field_0x5b0 = speed_f * (BREG_F(6) + 16.0f) + 256.0f; e_ymb->setHitBoardSe(); field_0x5a0 = speed_f * (BREG_F(5) + 31.0f); @@ -98,15 +101,21 @@ void daObjIta_c::Search_Ymb() { BOOL daObjIta_c::Check_RideOn() { daPy_py_c* player = daPy_getPlayerActorClass(); cXyz& pos = fopAcM_GetPosition(player); + f32 speed_f = 0.0f; + int reg_r26 = 0; // unused field_0x6c0 = 1; cXyz vecTrans(pos.x - current.pos.x, pos.y - current.pos.y, pos.z - current.pos.z); mDoMtx_stack_c::YrotS(-shape_angle.y); mDoMtx_stack_c::multVec(&vecTrans, &vecTrans); - if (vecTrans.x < 1000.0f && vecTrans.x > -1000.0f && vecTrans.z < 700.0f && vecTrans.z > -700.0f && fopAcM_GetSpeedF(player) > 0.0f) { - cLib_addCalcAngleS(&field_0x5b0, 0x150, 11, 0x100, 0); - field_0x5c8 = 0x400; + if (vecTrans.x < 1000.0f && vecTrans.x > -1000.0f && vecTrans.z < 700.0f && vecTrans.z > -700.0f) { + f32 reg_f30 = 0.0f; + speed_f = fopAcM_GetSpeedF(player); + if (speed_f > 0.0f) { + cLib_addCalcAngleS(&field_0x5b0, 0x150, 11, 0x100, 0); + field_0x5c8 = 0x400; + } } return FALSE; @@ -123,16 +132,18 @@ void daObjIta_c::setBaseMtx() { mDoMtx_stack_c::XrotM(shape_angle.z); mDoMtx_stack_c::ZrotM(shape_angle.x); mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); - MTXCopy(mDoMtx_stack_c::get(), mBgMtx); + cMtx_copy(mDoMtx_stack_c::get(), mBgMtx); } static void rideCallBack(dBgW* param_1, fopAc_ac_c* a_this, fopAc_ac_c* i_player) { + UNUSED(param_1); + (void) a_this; // it is used, but this is needed for dbg matching daObjIta_c* i_this = (daObjIta_c*)a_this; if (fopAcM_GetName(i_player) == PROC_ALINK) { daPy_py_c* player = daPy_getPlayerActorClass(); if (i_this->field_0x5ac < 0.0f) { - i_this->field_0x5a8 = i_this->field_0x5ac * 0.8f; + i_this->field_0x5a8 = (0.8f + HREG_F(2)) * i_this->field_0x5ac; i_this->field_0x5ac = 0.0f; } @@ -148,20 +159,19 @@ static int daObjIta_Execute(daObjIta_c* i_this) { return i_this->MoveBGExecute(); } -static int daObjIta_IsDelete(daObjIta_c* i_this) { +static int daObjIta_IsDelete(daObjIta_c*) { return 1; } static int daObjIta_Delete(daObjIta_c* i_this) { - fpc_ProcID id = fopAcM_GetID(i_this); + fopAcM_RegisterDeleteID(i_this, "Obj_Ita"); i_this->MoveBGDelete(); return 1; } -static int daObjIta_Create(fopAc_ac_c* a_this) { - daObjIta_c* i_this = (daObjIta_c*)a_this; - fpc_ProcID id = fopAcM_GetID(a_this); - return i_this->create(); +static int daObjIta_Create(fopAc_ac_c* i_this) { + fopAcM_RegisterCreateID(daObjIta_c, i_this, "Obj_Ita"); + return a_this->create(); } int daObjIta_c::CreateHeap() { @@ -196,7 +206,7 @@ cPhs__Step daObjIta_c::create() { cXyz pos(current.pos.x, current.pos.y + 300.0f, current.pos.z); if (fopAcM_wt_c::waterCheck(&pos)) { - current.pos.y = oREG_F(0) + HREG_F(0) + fopAcM_wt_c::getWaterY() + 50.0f; + current.pos.y = fopAcM_wt_c::getWaterY() + 50.0f + HREG_F(0) + oREG_F(0); } return phase; @@ -218,6 +228,7 @@ int daObjIta_c::Execute(Mtx** mtx) { } daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz& unused_pos = fopAcM_GetPosition(player); cXyz& playerSpeed = fopAcM_GetSpeed(player); if (fopAcM_SearchByName(PROC_E_YMB, (fopAc_ac_c**)&e_ymb) != 0 && e_ymb != NULL) { @@ -242,7 +253,7 @@ int daObjIta_c::Execute(Mtx** mtx) { } cLib_addCalc(¤t.pos.y, field_0x5d4 + (posY + 60.0f + field_0x5a8 * (HREG_F(0) + 5.0f) + cM_ssin(field_0x5cc) * 20.0f), 0.1f, 15.0f, 0.1f); - cLib_addCalcAngleS(&shape_angle.x, field_0x5ce.x + (nREG_F(0) + 1.0f) * field_0x5b0 * cM_ssin(field_0x5ca + oREG_F(1) + 0x2000), 2, 0x1000, 1); + cLib_addCalcAngleS(&shape_angle.x, field_0x5ce.x + (nREG_F(0) + 1.0f) * field_0x5b0 * cM_ssin(field_0x5ca + oREG_S(1) + 0x2000), 2, 0x1000, 1); cLib_addCalcAngleS(&shape_angle.z, field_0x5ce.z + (nREG_F(1) + 1.0f) * field_0x5b0 * cM_ssin(field_0x5cc), 2, 0x1000, 1); cLib_addCalc(&field_0x5a4, field_0x5c8, HREG_F(13) + 0.05f, 100.0f, 0.0f); cLib_addCalc2(&field_0x5a8, 0.0f, HREG_F(1) + 0.1f, 10.0f); diff --git a/src/d/actor/d_a_obj_kago.cpp b/src/d/actor/d_a_obj_kago.cpp index 6f25e54dd2..bbe15d1baf 100644 --- a/src/d/actor/d_a_obj_kago.cpp +++ b/src/d/actor/d_a_obj_kago.cpp @@ -14,7 +14,7 @@ #include "d/d_com_inf_game.h" #include "f_op/f_op_actor_mng.h" -daObj_Kago_Param_c::Data const daObj_Kago_Param_c::m = { +daObj_Kago_HIOParam const daObj_Kago_Param_c::m = { 0.0f, -5.0f, 1.0f, @@ -61,12 +61,34 @@ static dCcD_SrcCyl l_ccDCyl = { } }; +static OBJ_KAGO_HIO_CLASS l_HIO; + +#if DEBUG +daObj_Kago_HIO_c::daObj_Kago_HIO_c() { + m = daObj_Kago_Param_c::m; +} + +void daObj_Kago_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daObj_Kago_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + daObj_Kago_c::~daObj_Kago_c() { OS_REPORT("|%06d:%x|daObj_Kago_c -> デストラクト\n", g_Counter.mCounter0, this); if (mType == 0 && daNpcT_chkTmpBit(7)) { daNpcT_onEvtBit(0x92); } +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + dComIfG_resDelete(&mPhase, l_resNameList[l_bmdData[0][1]]); } @@ -94,6 +116,12 @@ cPhs__Step daObj_Kago_c::create() { fopAcM_SetMtx(this, field_0x574->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -100.0f, -50.0f, -100.0f, 100.0f, 100.0f, 100.0f); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("ウ-リのかご"); +#endif + reset(); if (mType == 0) { @@ -101,11 +129,11 @@ cPhs__Step daObj_Kago_c::create() { health = 1; } - mAcchCir.SetWall(daObj_Kago_Param_c::m.mWallH, daObj_Kago_Param_c::m.mWallR); + mAcchCir.SetWall(mpHIO->m.mWallH, mpHIO->m.mWallR); mObjAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mStts.Init(daObj_Kago_Param_c::m.mWeight, 0, this); - + mStts.Init(mpHIO->m.mWeight, 0, this); + field_0x808[0].Set(l_ccDCyl); field_0x808[0].SetStts(&mStts); field_0x808[1].Set(l_ccDCyl); @@ -154,26 +182,26 @@ int daObj_Kago_c::Delete() { int daObj_Kago_c::Execute() { int iVar1 = 0; f32 fVar1; - f32 reg_f30 = daObj_Kago_Param_c::m.field_0x28; + f32 reg_f30 = mpHIO->m.field_0x28; s16 sp_0xc = 0; s16 sVar2 = 0; int iVar3; s16 sp_0x8; - scale.set(daObj_Kago_Param_c::m.field_0x08 * field_0xb0c, daObj_Kago_Param_c::m.field_0x08 * field_0xb0c, daObj_Kago_Param_c::m.field_0x08 * field_0xb0c); + scale.set(mpHIO->m.field_0x08 * field_0xb0c, mpHIO->m.field_0x08 * field_0xb0c, mpHIO->m.field_0x08 * field_0xb0c); attention_info.flags = 0; fopAcM_OffCarryType(this, fopAcM_CARRY_CHICKEN); attention_info.distances[4] = 13; if (mType == 0) { - mStts.SetWeight(daObj_Kago_Param_c::m.mWeight); - mAcchCir.SetWall(daObj_Kago_Param_c::m.mWallH, 50.0f); + mStts.SetWeight(mpHIO->m.mWeight); + mAcchCir.SetWall(mpHIO->m.mWallH, 50.0f); } else { mStts.SetWeight(0xFF); - mAcchCir.SetWall(daObj_Kago_Param_c::m.mWallH, daObj_Kago_Param_c::m.mWallR); + mAcchCir.SetWall(mpHIO->m.mWallH, mpHIO->m.mWallR); } - gravity = daObj_Kago_Param_c::m.mGravity; + gravity = mpHIO->m.mGravity; iVar1 = 0; if ((fopAcM_checkCarryNow(this) != 0 || fopAcM_checkHawkCarryNow(this) != 0) || field_0xba2 != 0) { iVar1 = 1; @@ -218,7 +246,7 @@ int daObj_Kago_c::Execute() { mObjAcch.ClrGrndNone(); if (field_0xba0 != 0 && cM3d_IsZero(speedF) == 0) { - popup(daObj_Kago_Param_c::m.field_0x20, daObj_Kago_Param_c::m.field_0x24, NULL); + popup(mpHIO->m.field_0x20, mpHIO->m.field_0x24, NULL); if (fopAcM_carryOffRevise(this) != 0) { speed.setall(0.0f); } @@ -454,8 +482,8 @@ int daObj_Kago_c::Execute() { dComIfG_Ccsp()->Set(&field_0x808[1]); } else { field_0x808[0].ClrCoHit(); - field_0x808[0].SetR(daObj_Kago_Param_c::m.mWallR); - field_0x808[0].SetH(daObj_Kago_Param_c::m.field_0x14); + field_0x808[0].SetR(mpHIO->m.mWallR); + field_0x808[0].SetH(mpHIO->m.field_0x14); field_0x808[0].SetC(current.pos); dComIfG_Ccsp()->Set(&field_0x808[0]); } @@ -486,7 +514,7 @@ int daObj_Kago_c::Draw() { model = field_0x574; } else if (mGroundH != -G_CM3D_F_INF) { field_0xb78 = dComIfGd_setShadow(field_0xb78, 1, field_0x574, ¤t.pos, - daObj_Kago_Param_c::m.field_0x0c, 20.0f, + mpHIO->m.field_0x0c, 20.0f, current.pos.y, mGroundH, field_0x7cc, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); } @@ -578,8 +606,6 @@ int daObj_Kago_c::getWallAngle(s16 param_1, s16* param_2) { return 1; } -static daObj_Kago_Param_c l_HIO; - void daObj_Kago_c::setGoalPosAndAngle() { static cXyz pos(1593.0f, 659.0f, -334.0f); static s16 angle = 0x471C; diff --git a/src/d/actor/d_a_obj_kanban2.cpp b/src/d/actor/d_a_obj_kanban2.cpp index 9bab3f6ea2..b59d130f83 100644 --- a/src/d/actor/d_a_obj_kanban2.cpp +++ b/src/d/actor/d_a_obj_kanban2.cpp @@ -11,7 +11,7 @@ #include "d/actor/d_a_npc_tk.h" #include "d/d_s_play.h" #include "Z2AudioLib/Z2Instances.h" -#include +#include #define PARTS_ALL 0x3FFFF #define PART_TOP_LEFT_UNDER (1 << 0) diff --git a/src/d/actor/d_a_obj_kbacket.cpp b/src/d/actor/d_a_obj_kbacket.cpp index 33895045cd..092c033550 100644 --- a/src/d/actor/d_a_obj_kbacket.cpp +++ b/src/d/actor/d_a_obj_kbacket.cpp @@ -38,21 +38,27 @@ static dCcD_SrcCyl l_ccDCyl = { } }; -static daObj_KBacket_Param_c l_HIO; +static OBJ_KBACKET_HIO_CLASS l_HIO; -static inline const daObj_KBacket_HIOParam* get_params(daObj_KBacket_c* i_this) { #if DEBUG - return &i_this->mHIO->param; -#else - return &daObj_KBacket_Param_c::m; -#endif +daObj_KBacket_HIO_c::daObj_KBacket_HIO_c() { + m = daObj_KBacket_Param_c::m; } +void daObj_KBacket_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daObj_KBacket_HIO_c::genMessage(JORMContext*) { + // NONMATCHING +} +#endif + daObj_KBacket_c::~daObj_KBacket_c() { OS_REPORT("|%06d:%x|daObj_KBacket_c -> デストラクト\n", g_Counter.mCounter0, this); #if DEBUG - if (mHIO != NULL) { - mHIO->removeHIO(); + if (mpHIO != NULL) { + mpHIO->removeHIO(); } #endif dComIfG_resDelete(&field_0x56c, l_resNameList[l_bmdData[field_0x9d0 * 2 + 1]]); @@ -79,8 +85,8 @@ int daObj_KBacket_c::create() { fopAcM_setCullSizeBox(this, -50.0f, -50.0f, -50.0f, 50.0f, 50.0f, 50.0f); #if DEBUG - //TODO: init mHIO - mHIO->entryHIO("カカシのバケツ"); + mpHIO = &l_HIO; + mpHIO->entryHIO("カカシのバケツ"); #endif reset(); @@ -92,7 +98,7 @@ int daObj_KBacket_c::create() { mObjAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mStts.Init(get_params(this)->field_0x10, 0, this); + mStts.Init(mpHIO->m.field_0x10, 0, this); mCyl.Set(l_ccDCyl); mCyl.SetStts(&mStts); mObjAcch.CrrPos(dComIfG_Bgsp()); @@ -143,8 +149,8 @@ int daObj_KBacket_c::Delete() { int daObj_KBacket_c::Execute() { - f32 movePMag = get_params(this)->field_0x28; - f32 scaleFactor = get_params(this)->field_0x8; + f32 movePMag = mpHIO->m.field_0x28; + f32 scaleFactor = mpHIO->m.field_0x08; s16 wallAngle = 0; scale.set(scaleFactor, scaleFactor, scaleFactor); @@ -152,10 +158,10 @@ int daObj_KBacket_c::Execute() { attention_info.distances[4] = 6; - mAcchCir.SetWallR(get_params(this)->field_0x1c); - mAcchCir.SetWallH(get_params(this)->field_0x18); + mAcchCir.SetWallR(mpHIO->m.field_0x1c); + mAcchCir.SetWallH(mpHIO->m.field_0x18); - gravity = get_params(this)->field_0x4; + gravity = mpHIO->m.field_0x04; BOOL isCarry = FALSE; if (fopAcM_checkCarryNow(this) != 0) { @@ -200,14 +206,14 @@ int daObj_KBacket_c::Execute() { } else { s16 wallAngleDiff; // needs to be declared up here for regalloc - mStts.SetWeight(get_params(this)->field_0x10); + mStts.SetWeight(mpHIO->m.field_0x10); mObjAcch.ClrWallNone(); mObjAcch.ClrGrndNone(); if (field_0xa49 != 0 && cM3d_IsZero(speedF) == FALSE) { - s16 angle = cM_deg2s(get_params(this)->field_0x24); + s16 angle = cM_deg2s(mpHIO->m.field_0x24); speed.setall(0.0f); - speed.y = get_params(this)->field_0x20 * cM_ssin(angle); - speedF = get_params(this)->field_0x20 * cM_scos(angle); + speed.y = mpHIO->m.field_0x20 * cM_ssin(angle); + speedF = mpHIO->m.field_0x20 * cM_scos(angle); field_0xa18 = 0x4000; @@ -494,8 +500,8 @@ int daObj_KBacket_c::Execute() { field_0xa18 = calcRollAngle(field_0xa18, 0x10000); } - mCyl.SetR(get_params(this)->field_0x1c); - mCyl.SetH(get_params(this)->field_0x14); + mCyl.SetR(mpHIO->m.field_0x1c); + mCyl.SetH(mpHIO->m.field_0x14); mCyl.SetC(current.pos); dComIfG_Ccsp()->Set(&mCyl); diff --git a/src/d/actor/d_a_obj_ladder.cpp b/src/d/actor/d_a_obj_ladder.cpp index 9f49f2b73c..abeb80afaf 100644 --- a/src/d/actor/d_a_obj_ladder.cpp +++ b/src/d/actor/d_a_obj_ladder.cpp @@ -10,40 +10,50 @@ #include "SSystem/SComponent/c_math.h" #include "d/d_com_inf_game.h" #include "d/d_bg_s.h" -#include "d/d_bg_w.h" #include "f_op/f_op_actor_mng.h" namespace daObjLadder { namespace { -struct Attr { - /* 0x00 */ f32 field_0x00; - /* 0x04 */ f32 field_0x04; - /* 0x08 */ f32 field_0x08; - /* 0x0C */ f32 field_0x0c; - /* 0x10 */ u8 field_0x10; - /* 0x11 */ u8 field_0x11; - /* 0x12 */ u8 field_0x12; - /* 0x13 */ u8 field_0x13; - /* 0x14 */ u8 field_0x14; - /* 0x16 */ s16 field_0x16; - /* 0x18 */ s16 field_0x18; - /* 0x1A */ s16 vibrationTimer; - /* 0x1C */ f32 field_0x1c; - /* 0x20 */ f32 field_0x20; +struct Attr_c { + /* 0x00 */ f32 gravity; + /* 0x04 */ f32 viscous_resistance; + /* 0x08 */ f32 inertia_resistance; + /* 0x0C */ f32 reflectance; + /* 0x10 */ u8 num_of_bounces; + /* 0x11 */ u8 bound_vol_0; + /* 0x12 */ u8 bound_vol_1; + /* 0x13 */ u8 bound_vol_2; + /* 0x14 */ u8 bound_vol_3; + /* 0x16 */ s16 vibration_speed_x; + /* 0x18 */ s16 vibration_speed_y; + /* 0x1A */ s16 vibration_timer; + /* 0x1C */ f32 vibration_amp_x; + /* 0x20 */ f32 vibration_amp_y; }; -static Attr const L_attr = { - -3.0f, 0.005f, 0.0005f, - 0.5f, 0x03, 0x4B, 0x32, 0x2D, 0x28, 0x4E20, - 0x3CC3, 0x0F, 2.0f, 1.0f, +static Attr_c const L_attr = { + -3.0f, + 0.005f, + 0.0005f, + 0.5f, + // + 3, + 75, + 50, + 45, + 40, + // + 20000, + 15555, + 15, + 2.0f, + 1.0f, }; -inline static const Attr& attr() { +inline static const Attr_c& attr() { return L_attr; } -char const Act_c::M_arcname[5] = "Mhsg"; - struct AttrType { /* 0x0 */ s16 field_0x0; /* 0x2 */ s16 field_0x2; @@ -59,10 +69,110 @@ static AttrType L_attr_type[6] = { { 0x06, 0x0E, 300.0f}, }; -static inline const AttrType& attr_type(Act_c::Type_e type) { +static inline const AttrType& attr_type(Type_e type) { return L_attr_type[type]; } +#if DEBUG +class Hio_c : public JORReflexible { +public: + Hio_c(); + virtual ~Hio_c() {} + + void default_set(); + void ct(); + void dt(); + void listenPropertyEvent(const JORPropertyEvent*); + void genMessage(JORMContext*); + + Attr_c attr; + int mCount; + bool field_0x2c; + bool field_0x2d; +}; + +Hio_c::Hio_c() { + mCount = 0; + field_0x2c = false; + field_0x2d = false; + default_set(); +} + +void Hio_c::default_set() { + attr = L_attr; +} + +void Hio_c::ct() { + if (mCount++ == 0) { + // ladder + daObj::HioVarious_c::init(this, "はしご"); + } +} + +void Hio_c::dt() { + if (--mCount == 0) { + daObj::HioVarious_c::clean(this); + } +} + +void Hio_c::genMessage(JORMContext* ctx) { + // ladder + ctx->genLabel("§ はしご §\n", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // reset to initial position + ctx->genButton("初期位置に", 1, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + // attack + ctx->genButton("アタック", 2, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + // gravity + ctx->genSlider("重力", &attr.gravity, -30.0f, 0.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // viscous resistance + ctx->genSlider("粘性抵抗", &attr.viscous_resistance, 0.0f, 0.1f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // inertia resistance + ctx->genSlider("慣性抵抗", &attr.inertia_resistance, 0.0f, 0.1f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // reflectance + ctx->genSlider("反射率", &attr.reflectance, 0.0f, 1.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // + // number of bounces + ctx->genSlider("バウンド回数", &attr.num_of_bounces, 0, 10, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // Bound Vol_0, 1, 2, 3 + ctx->genSlider("バウンド Vol_0", &attr.bound_vol_0, 0, 100, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("バウンド Vol_1", &attr.bound_vol_1, 0, 100, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("バウンド Vol_2", &attr.bound_vol_2, 0, 100, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("バウンド Vol_3", &attr.bound_vol_3, 0, 100, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // + // vibration speed x, y + ctx->genSlider("vib 速度 x", &attr.vibration_speed_x, 0, 0x7fff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("vib 速度 y", &attr.vibration_speed_y, 0, 0x7fff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // vibration time + ctx->genSlider("vib 時間", &attr.vibration_timer, 0, 50, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // vibration amplitude x, y + ctx->genSlider("vib 振幅 x", &attr.vibration_amp_x, 0.0f, 5.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("vib 振幅 y", &attr.vibration_amp_y, 0.0f, 5.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); +} + +void Hio_c::listenPropertyEvent(const JORPropertyEvent* property) { + JORReflexible::listenPropertyEvent(property); + + switch ((u32)property->id) { + case 1: { + field_0x2c = true; + break; + } + + case 2: { + field_0x2d = true; + break; + } + } + // TODO. +} + +Hio_c L_hio; +#endif + +} + +char const Act_c::M_arcname[5] = "Mhsg"; + int Act_c::CreateHeap() { J3DModelData* model_data = (J3DModelData*)dComIfG_getObjectRes(M_arcname, attr_type(mType).field_0x0); JUT_ASSERT(382, model_data != NULL); @@ -94,7 +204,12 @@ int Act_c::Create() { } else { mode_wait_init(); } - + + if (mHeight <= -G_CM3D_F_INF) { + // "The ladder is falling <%s %d>\n" + OS_REPORT_ERROR("はしごは落ちる<%s %d>\n", "d_a_obj_ladder.cpp", 459); + } + return 1; } @@ -106,6 +221,9 @@ int Act_c::Mthd_Create() { phase_state = MoveBGCreate(M_arcname, attr_type(mType).field_0x2, dBgS_MoveBGProc_Trans, 0xcb0, NULL); JUT_ASSERT(486, (phase_state == cPhs_COMPLEATE_e) || (phase_state == cPhs_ERROR_e)); +#if DEBUG + L_hio.ct(); +#endif } return phase_state; } @@ -115,6 +233,9 @@ int Act_c::Delete() { } int Act_c::Mthd_Delete() { +#if DEBUG + L_hio.dt(); +#endif int rv = MoveBGDelete(); dComIfG_resDelete(&mPhase, M_arcname); return rv; @@ -161,17 +282,17 @@ void Act_c::mode_demoreq() { } void Act_c::mode_vib_init() { - mVibrationTimer = attr().vibrationTimer; + mVibrationTimer = attr().vibration_timer; field_0x610 = 0; field_0x612 = 0; mMode = MODE_VIB; } void Act_c::mode_vib() { - field_0x610 += attr().field_0x16; - field_0x612 += attr().field_0x18; - field_0x614 = cM_scos(field_0x610) * attr().field_0x1c; - field_0x618 = cM_scos(field_0x612) * attr().field_0x20; + field_0x610 += attr().vibration_speed_x; + field_0x612 += attr().vibration_speed_y; + field_0x614 = cM_scos(field_0x610) * attr().vibration_amp_x; + field_0x618 = cM_scos(field_0x612) * attr().vibration_amp_y; if (--mVibrationTimer <= 0) { mode_drop_init(); } @@ -180,27 +301,27 @@ void Act_c::mode_vib() { void Act_c::mode_drop_init() { gravity = -5.0f; speed.set(cXyz::Zero); - field_0x5b6 = attr().field_0x10; + field_0x5b6 = attr().num_of_bounces; mMode = MODE_DROP; } void Act_c::mode_drop() { - daObj::posMoveF_stream(this, NULL, &cXyz::Zero, attr().field_0x04, attr().field_0x08); + daObj::posMoveF_stream(this, NULL, &cXyz::Zero, attr().viscous_resistance, attr().inertia_resistance); if (current.pos.y < mHeight) { - if (field_0x5b6 == attr().field_0x10) { + if (field_0x5b6 == attr().num_of_bounces) { fopAcM_seStart(this, Z2SE_SY_DUMMY, dComIfG_Bgsp().GetMtrlSndId(mGndChk)); dComIfGp_getVibration().StartShock(4, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); } else { int uVar7; - int iVar5 = attr().field_0x10 - field_0x5b6; + int iVar5 = attr().num_of_bounces - field_0x5b6; if (iVar5 == 1) { - uVar7 = attr().field_0x11; + uVar7 = attr().bound_vol_0; } else if (iVar5 == 2) { - uVar7 = attr().field_0x12; + uVar7 = attr().bound_vol_1; } else if (iVar5 == 3) { - uVar7 = attr().field_0x13; + uVar7 = attr().bound_vol_2; } else { - uVar7 = attr().field_0x14; + uVar7 = attr().bound_vol_3; } fopAcM_seStart(this, Z2SE_SY_DUMMY, uVar7); } @@ -263,35 +384,36 @@ int Act_c::Draw() { return 1; } -static int Mthd_Create(void* i_this) { - return ((Act_c*)i_this)->Mthd_Create(); +namespace { + static int Mthd_Create(void* i_this) { + return ((Act_c*)i_this)->Mthd_Create(); + } + + static int Mthd_Delete(void* i_this) { + return ((Act_c*)i_this)->Mthd_Delete(); + } + + static int Mthd_Execute(void* i_this) { + return ((Act_c*)i_this)->MoveBGExecute(); + } + + static int Mthd_Draw(void* i_this) { + return ((Act_c*)i_this)->MoveBGDraw(); + } + + static int Mthd_IsDelete(void* i_this) { + return ((Act_c*)i_this)->MoveBGIsDelete(); + } + + static actor_method_class Mthd_Table = { + (process_method_func)Mthd_Create, + (process_method_func)Mthd_Delete, + (process_method_func)Mthd_Execute, + (process_method_func)Mthd_IsDelete, + (process_method_func)Mthd_Draw, + }; } -static int Mthd_Delete(void* i_this) { - return ((Act_c*)i_this)->Mthd_Delete(); -} - -static int Mthd_Execute(void* i_this) { - return ((Act_c*)i_this)->MoveBGExecute(); -} - -static int Mthd_Draw(void* i_this) { - return ((Act_c*)i_this)->MoveBGDraw(); -} - -static int Mthd_IsDelete(void* i_this) { - return ((Act_c*)i_this)->MoveBGIsDelete(); -} - -static actor_method_class Mthd_Table = { - (process_method_func)Mthd_Create, - (process_method_func)Mthd_Delete, - (process_method_func)Mthd_Execute, - (process_method_func)Mthd_IsDelete, - (process_method_func)Mthd_Draw, -}; - -} } actor_process_profile_definition g_profile_Obj_Ladder = { diff --git a/src/d/actor/d_a_obj_lv4digsand.cpp b/src/d/actor/d_a_obj_lv4digsand.cpp index 9aab3a1190..2cda594ce7 100644 --- a/src/d/actor/d_a_obj_lv4digsand.cpp +++ b/src/d/actor/d_a_obj_lv4digsand.cpp @@ -9,7 +9,7 @@ #include "d/d_com_inf_game.h" #include "d/actor/d_a_player.h" #include "d/d_item.h" -#include +#include void daObjL4DigSand_c::initBaseMtx() { mpModel->setBaseScale(scale); diff --git a/src/d/actor/d_a_obj_lv7PropellerY.cpp b/src/d/actor/d_a_obj_lv7PropellerY.cpp index 1725cd5bec..c1458bb9e0 100644 --- a/src/d/actor/d_a_obj_lv7PropellerY.cpp +++ b/src/d/actor/d_a_obj_lv7PropellerY.cpp @@ -199,7 +199,7 @@ void daPropY_c::init_modeMove2() { void daPropY_c::modeMove2() { cLib_chaseF(&speedF, l_HIO.max_rot_speed, l_HIO.rot_accel); - s16 temp_r30 = cLib_addCalcAngleS(&shape_angle.y, field_0x5b6, 1, (182.04445f * fopAcM_GetSpeedF(this)), 1); + s16 temp_r30 = cLib_addCalcAngleS(&shape_angle.y, field_0x5b6, 1, DEG2S(fopAcM_GetSpeedF(this)), 1); field_0x5c4 = 127.0f * (speedF / l_HIO.max_rot_speed); mDoAud_seStartLevel(Z2SE_OBJ_AMI_ROLL, ¤t.pos, field_0x5c4, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); @@ -240,7 +240,7 @@ void daPropY_c::modeStop() { if (mTurnType == 0) { var_r30 = cLib_addCalcAngleS(&shape_angle.y, field_0x5b6, 16, fopAcM_GetSpeedF(this), cM_deg2s(0.1f)); } else { - var_r30 = cLib_addCalcAngleS(&shape_angle.y, field_0x5b6, 1, (182.04445f * fopAcM_GetSpeedF(this)), 1); + var_r30 = cLib_addCalcAngleS(&shape_angle.y, field_0x5b6, 1, DEG2S(fopAcM_GetSpeedF(this)), 1); } // probably not a real version difference - GCN has fsub for some reason instead of fsubs diff --git a/src/d/actor/d_a_obj_magLiftRot.cpp b/src/d/actor/d_a_obj_magLiftRot.cpp index ca5970915a..ce64f16e90 100644 --- a/src/d/actor/d_a_obj_magLiftRot.cpp +++ b/src/d/actor/d_a_obj_magLiftRot.cpp @@ -242,8 +242,7 @@ void daMagLiftRot_c::init_modeMove() { void daMagLiftRot_c::modeMove() { cLib_chaseF(&speedF, l_HIO.mMaxSpeed, l_HIO.mAcceleration); - if (cLib_addCalcAngleS(¤t.angle.z, field_0x5e2, 1, fopAcM_GetSpeedF(this) * 182.04445f, - 1) == 0) + if (cLib_addCalcAngleS(¤t.angle.z, field_0x5e2, 1, DEG2S(fopAcM_GetSpeedF(this)), 1) == 0) { field_0x5e2 += 0x8000; field_0x5e4 = 0; diff --git a/src/d/actor/d_a_obj_mie.cpp b/src/d/actor/d_a_obj_mie.cpp index 099296a979..4c2cc4cf98 100644 --- a/src/d/actor/d_a_obj_mie.cpp +++ b/src/d/actor/d_a_obj_mie.cpp @@ -46,29 +46,39 @@ static dCcD_SrcCyl l_ccDCyl = { } // mCylAttr }; +static OBJ_MIE_HIO_CLASS l_HIO; + #if DEBUG +daObj_Mie_HIO_c::daObj_Mie_HIO_c() { + m = daObj_Mie_Param_c::m; +} + +void daObj_Mie_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + void daObj_Mie_HIO_c::genMessage(JORMContext* ctx) { - ctx->genSlider("注目オフセット ", &mParams.focus_offset, 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, + ctx->genSlider("注目オフセット ", &m.focus_offset, 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); - ctx->genSlider("重力 ", &mParams.gravity, -100.0f, 100.0f, 0, NULL, 0xffff, + ctx->genSlider("重力 ", &m.gravity, -100.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); - ctx->genSlider("スケ−ル ", &mParams.scale, 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, + ctx->genSlider("スケ−ル ", &m.scale, 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); - ctx->genSlider("リアル影サイズ ", &mParams.real_shadow_size, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, + ctx->genSlider("リアル影サイズ ", &m.real_shadow_size, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); - ctx->genSlider("体重 ", &mParams.weight, 0.0f, 255.0f, 0, NULL, 0xffff, 0xffff, + ctx->genSlider("体重 ", &m.weight, 0.0f, 255.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); - ctx->genSlider("高さ ", &mParams.height, 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, + ctx->genSlider("高さ ", &m.height, 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); - ctx->genSlider("ひざ丈 ", &mParams.knee_length, 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, + ctx->genSlider("ひざ丈 ", &m.knee_length, 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); - ctx->genSlider("幅 ", &mParams.width, 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, + ctx->genSlider("幅 ", &m.width, 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); - ctx->genSlider("発射速度 ", &mParams.firing_rate, 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, + ctx->genSlider("発射速度 ", &m.firing_rate, 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); - ctx->genSlider("発射角度 ", &mParams.launch_angle, 0.0f, 90.0f, 0, NULL, 0xffff, 0xffff, + ctx->genSlider("発射角度 ", &m.launch_angle, 0.0f, 90.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); - ctx->genSlider("浮きオフセット ", &mParams.floating_offset, -100.0f, 100.0f, 0, NULL, 0xffff, + ctx->genSlider("浮きオフセット ", &m.floating_offset, -100.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); ctx->genButton("ファイル書き出し", 0x40000002, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); } @@ -78,8 +88,8 @@ daObj_Mie_c::~daObj_Mie_c() { OS_REPORT("|%06d:%x|daObj_Mie_c -> デストラクト\n", g_Counter.mCounter0, this); #if DEBUG - if (mHIO) { - mHIO->removeHIO(); + if (mpHIO) { + mpHIO->removeHIO(); } #endif @@ -95,7 +105,7 @@ int daObj_Mie_c::create() { return cPhs_ERROR_e; } OS_REPORT("\t(%s:%d) <%08x>\n", fopAcM_getProcNameString(this), getType(), fopAcM_GetParam(this)); - + // @bug - seems like this returns cPhs_ERROR_e no matter what if (mType == TYPE_0 && dComIfGs_getPohSpiritNum() >= 50) { return cPhs_ERROR_e; @@ -125,14 +135,14 @@ int daObj_Mie_c::Delete() { int daObj_Mie_c::Execute() { BOOL local_a8 = fopAcM_checkCarryNow(this) != 0; s16 local_b6; - f32 dVar16 = daObj_Mie_Param_c::m.floating_offset; - scale.set(daObj_Mie_Param_c::m.scale, daObj_Mie_Param_c::m.scale, - daObj_Mie_Param_c::m.scale); + f32 dVar16 = mpHIO->m.floating_offset; + scale.set(mpHIO->m.scale, mpHIO->m.scale, + mpHIO->m.scale); attention_info.flags = 0; attention_info.distances[fopAc_attn_CARRY_e] = 6; - mAcchCir.SetWallR(daObj_Mie_Param_c::m.width); - mAcchCir.SetWallH(daObj_Mie_Param_c::m.knee_length); - gravity = daObj_Mie_Param_c::m.gravity; + mAcchCir.SetWallR(mpHIO->m.width); + mAcchCir.SetWallH(mpHIO->m.knee_length); + gravity = mpHIO->m.gravity; if ((s32)local_a8 || field_0xa40) { mAcch.ClrWallHit(); mAcch.ClrGroundHit(); @@ -149,13 +159,13 @@ int daObj_Mie_c::Execute() { field_0xa44 = 0; field_0xa47 = 0; } else { - mStts.SetWeight(daObj_Mie_Param_c::m.weight); + mStts.SetWeight(mpHIO->m.weight); mAcch.ClrWallNone(); mAcch.ClrGrndNone(); if (field_0xa46 != 0 && cM3d_IsZero(speedF) == 0) { fopAcM_carryOffRevise(this); - popup(daObj_Mie_Param_c::m.firing_rate, - daObj_Mie_Param_c::m.launch_angle, NULL); + popup(mpHIO->m.firing_rate, + mpHIO->m.launch_angle, NULL); } else { fopAcM_getWaterY(¤t.pos, &field_0xa04); if (field_0xa04 != -G_CM3D_F_INF && dVar16 < field_0xa04 - field_0xa00 && @@ -335,13 +345,13 @@ int daObj_Mie_c::Execute() { } attention_info.position = current.pos; - attention_info.position.y += daObj_Mie_Param_c::m.focus_offset; + attention_info.position.y += mpHIO->m.focus_offset; eyePos = current.pos; setMtx(); field_0xa14 = calcRollAngle(field_0xa14, 0x10000); if (field_0xa45 == 0 && field_0xa41 == 0) { - mCyl.SetR(daObj_Mie_Param_c::m.width); - mCyl.SetH(daObj_Mie_Param_c::m.height); + mCyl.SetR(mpHIO->m.width); + mCyl.SetH(mpHIO->m.height); mCyl.SetC(current.pos); dComIfG_Ccsp()->Set(&mCyl); } @@ -473,8 +483,6 @@ void daObj_Mie_c::setSmokePrtcl() { dComIfGp_particle_levelEmitterOnEventMove(field_0xa3c); } -static daObj_Mie_Param_c l_HIO; - void daObj_Mie_c::setWaterPrtcl() { static u16 emttrId[4] = { 0x01B8, 0x01B9, 0x01BA, 0x01BB, diff --git a/src/d/actor/d_a_obj_mirror_chain.cpp b/src/d/actor/d_a_obj_mirror_chain.cpp index 65cd8c533a..75bb7fd32f 100644 --- a/src/d/actor/d_a_obj_mirror_chain.cpp +++ b/src/d/actor/d_a_obj_mirror_chain.cpp @@ -98,7 +98,7 @@ void dScissorBegin_packet_c::draw() { f32 sp2C = view_p->fovy; f32 sp28 = view_p->aspect; - f32 sp24 = std::tan(0.017453292f * (0.5f * sp2C)); + f32 sp24 = std::tan((M_PI / 180.0f) * (0.5f * sp2C)); f32 sp20, sp1C, sp18, sp14; view_port_class* viewport_p = dComIfGd_getViewport(); diff --git a/src/d/actor/d_a_obj_nougu.cpp b/src/d/actor/d_a_obj_nougu.cpp index 37e50a7a5b..f7fcddf3d5 100644 --- a/src/d/actor/d_a_obj_nougu.cpp +++ b/src/d/actor/d_a_obj_nougu.cpp @@ -18,11 +18,6 @@ dCcD_SrcSph daObj_Nougu_c::mCcDSph = { static char* l_resName = "Jagar4"; -daObj_Nougu_c::~daObj_Nougu_c() { - OS_REPORT("|%06d:%x|daObj_Nougu_c -> デストラクト\n", g_Counter.mCounter0, this); - dComIfG_resDelete(&mPhase, getResName()); -} - const daObj_Nougu_HIOParam daObj_Nougu_Param_c::m = { 0.0f, -3.0f, @@ -30,6 +25,34 @@ const daObj_Nougu_HIOParam daObj_Nougu_Param_c::m = { 200.0f }; +static OBJ_NOUGU_HIO_CLASS l_HIO; + +#if DEBUG +daObj_Nougu_HIO_c::daObj_Nougu_HIO_c() { + m = daObj_Nougu_Param_c::m; +} + +void daObj_Nougu_HIO_c::listenPropertyEvent(const JORPropertyEvent*) { + // NONMATCHING +} + +void daObj_Nougu_HIO_c::genMessage(JORMContext*) { + // NONMATCHING +} +#endif + +daObj_Nougu_c::~daObj_Nougu_c() { + OS_REPORT("|%06d:%x|daObj_Nougu_c -> デストラクト\n", g_Counter.mCounter0, this); + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + + dComIfG_resDelete(&mPhase, getResName()); +} + int daObj_Nougu_c::create() { fopAcM_ct(this, daObj_Nougu_c); @@ -43,16 +66,21 @@ int daObj_Nougu_c::create() { OS_REPORT("===>isDelete:TRUE\n"); return cPhs_ERROR_e; } - + OS_REPORT("\n"); if (!fopAcM_entrySolidHeap(this, createHeapCallBack, 0x800)) { return cPhs_ERROR_e; } - + mpModel->getModelData(); fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -75.0f, -50.0f, -100.0f, 75.0f, 50.0f, 100.0f); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("農具"); +#endif + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mCcStts.Init(0xFF, 0, this); @@ -128,7 +156,7 @@ int daObj_Nougu_c::Execute() { } attention_info.position = current.pos; - attention_info.position.y += daObj_Nougu_Param_c::m.attention_offset; + attention_info.position.y += mpHIO->m.attention_offset; eyePos = attention_info.position; attention_info.flags = 0; return 1; @@ -140,7 +168,7 @@ int daObj_Nougu_c::Draw() { mDoExt_modelUpdateDL(mpModel); if (-G_CM3D_F_INF != mGroundH) { - mShadowId = dComIfGd_setShadow(mShadowId, 1, mpModel, ¤t.pos, daObj_Nougu_Param_c::m.shadow_size, 20.0f, current.pos.y, mGroundH, mGndChk, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); + mShadowId = dComIfGd_setShadow(mShadowId, 1, mpModel, ¤t.pos, mpHIO->m.shadow_size, 20.0f, current.pos.y, mGroundH, mGndChk, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); } return 1; @@ -199,8 +227,6 @@ static int daObj_Nougu_IsDelete(void* i_this) { return 1; } -static daObj_Nougu_Param_c l_HIO; - static actor_method_class daObj_Nougu_MethodTable = { (process_method_func)daObj_Nougu_Create, (process_method_func)daObj_Nougu_Delete, diff --git a/src/d/actor/d_a_obj_pdoor.cpp b/src/d/actor/d_a_obj_pdoor.cpp index 91c6f80b4a..ba07ba88dc 100644 --- a/src/d/actor/d_a_obj_pdoor.cpp +++ b/src/d/actor/d_a_obj_pdoor.cpp @@ -9,7 +9,7 @@ #include "d/actor/d_a_player.h" #include "SSystem/SComponent/c_lib.h" #include "SSystem/SComponent/c_math.h" -#include +#include #include "d/d_com_inf_game.h" #include "d/d_bg_w.h" diff --git a/src/d/actor/d_a_obj_pleaf.cpp b/src/d/actor/d_a_obj_pleaf.cpp index fac9e4b42e..ad6f39ab2c 100644 --- a/src/d/actor/d_a_obj_pleaf.cpp +++ b/src/d/actor/d_a_obj_pleaf.cpp @@ -9,11 +9,33 @@ static char* l_resName = "J_Hatake"; -daObj_Pleaf_c::~daObj_Pleaf_c() { - dComIfG_resDelete(&mPhaseReq, getResName()); +daObj_Pleaf_HIOParam const daObj_Pleaf_Param_c::m = {0, -3.0f, 1.0f, 900.0f}; + +static OBJ_PLEAF_HIO_CLASS l_HIO; + +#if DEBUG +daObj_Pleaf_HIO_c::daObj_Pleaf_HIO_c() { + m = daObj_Pleaf_Param_c::m; } -daObj_Pleaf_Param_c::params const daObj_Pleaf_Param_c::m = {0, -3.0f, 1.0f, 900.0f}; +void daObj_Pleaf_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daObj_Pleaf_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daObj_Pleaf_c::~daObj_Pleaf_c() { +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + + dComIfG_resDelete(&mPhaseReq, getResName()); +} int daObj_Pleaf_c::create() { fopAcM_ct(this, daObj_Pleaf_c); @@ -28,6 +50,12 @@ int daObj_Pleaf_c::create() { } fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -300.0f, -50.0f, -300.0f, 300.0f, 50.0f, 300.0f); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("かぼちゃ畑の葉っぱ"); +#endif + mObjAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); @@ -85,7 +113,7 @@ int daObj_Pleaf_c::Draw() { if (mGroundDist != -G_CM3D_F_INF) { mShadowKey = dComIfGd_setShadow(mShadowKey, 1, mpModel, ¤t.pos, - daObj_Pleaf_Param_c::m.field_0xc, 20.0f, current.pos.y, mGroundDist, + mpHIO->m.field_0xc, 20.0f, current.pos.y, mGroundDist, mGndChk, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); } return 1; @@ -166,5 +194,3 @@ actor_process_profile_definition g_profile_OBJ_PLEAF = { fopAc_ACTOR_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType }; - -static daObj_Pleaf_Param_c l_HIO; diff --git a/src/d/actor/d_a_obj_prop.cpp b/src/d/actor/d_a_obj_prop.cpp index 166752ad62..fc2b773538 100644 --- a/src/d/actor/d_a_obj_prop.cpp +++ b/src/d/actor/d_a_obj_prop.cpp @@ -20,9 +20,8 @@ daObjProp_c::~daObjProp_c() { dComIfG_resDelete(this, l_arcName); } -static const u32 BMD_IDX[] = {3, 4}; - bool daObjProp_c::createHeap() { + static const u32 BMD_IDX[] = {3, 4}; u32 nameArg = getNameArg_0(); u32 bmd = BMD_IDX[nameArg]; mpModel = mDoExt_J3DModel__create((J3DModelData*)dComIfG_getObjectRes(l_arcName, bmd), 0x80000, @@ -60,9 +59,8 @@ int daObjProp_c::draw() { return 1; } -static const s16 ADD_ANGLE[] = {0x1800, -0x1800}; - int daObjProp_c::execute() { + static const s16 ADD_ANGLE[] = {0x1800, -0x1800}; shape_angle.y += ADD_ANGLE[mArg]; setModelMtx(); return 1; diff --git a/src/d/actor/d_a_obj_pumpkin.cpp b/src/d/actor/d_a_obj_pumpkin.cpp index db62ad2fa3..f841a75adc 100644 --- a/src/d/actor/d_a_obj_pumpkin.cpp +++ b/src/d/actor/d_a_obj_pumpkin.cpp @@ -243,6 +243,7 @@ int daObj_Pumpkin_c::Delete() { } int daObj_Pumpkin_c::Execute() { + int sp_0x30 = 0; f32 var_f29 = mpHIO->m.floating_offset; f32 f_scale = mpHIO->m.scale; s16 sp_0x14 = 0; @@ -278,7 +279,7 @@ int daObj_Pumpkin_c::Execute() { mAcchCir.SetWallR(mpHIO->m.width * mPumpkinScale); mAcchCir.SetWallH(mpHIO->m.knee_length * mPumpkinScale); gravity = mpHIO->m.gravity * mPumpkinScale; - int sp_0x30 = 0; + sp_0x30 = 0; if (fopAcM_checkCarryNow(this) || fopAcM_checkHawkCarryNow(this) || field_0xbb3) { sp_0x30 = 1; } @@ -449,8 +450,8 @@ int daObj_Pumpkin_c::Execute() { current.angle.y = cM_atan2s(sp_0x4C.x, sp_0x4C.z); } - sp_0x10 *= streamPower; - cLib_chaseAngleS(&field_0xB38.y, (field_0xB38.y < 0) ? -sp_0x10 : sp_0x10, 0x10); + MULT_ANGLE_2(sp_0x10, streamPower); + cLib_chaseAngleS(&field_0xB38.y, (field_0xB38.y < 0) ? sp_0x10*-1 : sp_0x10, 0x10); if (field_0xBAB) { cLib_addCalc2(&speedF, streamPower * 1.55f, 0.15f, 1.0f); } else { diff --git a/src/d/actor/d_a_obj_rotBridge.cpp b/src/d/actor/d_a_obj_rotBridge.cpp index cdc6e7fb42..bee843be0f 100644 --- a/src/d/actor/d_a_obj_rotBridge.cpp +++ b/src/d/actor/d_a_obj_rotBridge.cpp @@ -210,7 +210,7 @@ void daRotBridge_c::moveBridge() { int daRotBridge_c::Draw() { #if DEBUG if (l_HIO.draw_wall_collision && mpBgW2 != NULL) { - mpBgW2->CalcPlane(); + mpBgW2->DebugDraw(); } #endif diff --git a/src/d/actor/d_a_obj_sekidoor.cpp b/src/d/actor/d_a_obj_sekidoor.cpp index 44d54ccffd..ceae036eab 100644 --- a/src/d/actor/d_a_obj_sekidoor.cpp +++ b/src/d/actor/d_a_obj_sekidoor.cpp @@ -6,7 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_obj_sekidoor.h" - + static struct { u32 bmdIdx; @@ -20,11 +20,33 @@ static struct { static char* l_resNameList[2] = {"", "SekiDoor"}; +static OBJ_SEKIDOOR_HIO_CLASS l_HIO; + +const daObj_SekiDoor_HIOParam daObj_SekiDoor_Param_c::m = {0}; + +static const f32 reference_posy = 460.0f; + +static const f32 rising_speed_y = 4.0f; + +#if DEBUG +daObj_SekiDoor_HIO_c::daObj_SekiDoor_HIO_c() { + m = daObj_SekiDoor_Param_c::m; +} + +void daObj_SekiDoor_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daObj_SekiDoor_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + int daObj_SekiDoor_c::create() { fopAcM_ct(this, daObj_SekiDoor_c); mBitSW = 0; - + cPhs__Step step = (cPhs__Step)dComIfG_resLoad(&mPhaseReq, l_resNameList[l_bmdData[mBitSW].resIdx]); if (step == cPhs_COMPLEATE_e) { if (getBitSW() != 0xff){ @@ -72,19 +94,18 @@ int daObj_SekiDoor_c::Create() { } int daObj_SekiDoor_c::Delete() { +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + dComIfG_resDelete(&mPhaseReq, l_resNameList[l_bmdData[mBitSW].resIdx]); return 1; } -const u8 daObj_SekiDoor_Param_c::m = 0; - -static const f32 reference_posy = 460.0f; - -static const f32 rising_speed_y = 4.0f; - - int daObj_SekiDoor_c::Execute(Mtx** i_mtx) { cXyz temp_y_position; *i_mtx = &mBgMtx; @@ -246,9 +267,6 @@ static int daObj_SekiDoor_IsDelete(void* param_0) { return 1; } - -static daObj_SekiDoor_Param_c l_HIO; - static actor_method_class daObj_SekiDoor_MethodTable = { (process_method_func)daObj_SekiDoor_Create, (process_method_func)daObj_SekiDoor_Delete, diff --git a/src/d/actor/d_a_obj_sekizo.cpp b/src/d/actor/d_a_obj_sekizo.cpp index ad9cdeb4d6..dda9c26f3e 100644 --- a/src/d/actor/d_a_obj_sekizo.cpp +++ b/src/d/actor/d_a_obj_sekizo.cpp @@ -21,6 +21,26 @@ static struct { static char* l_resNameList[2] = {"", "Sekizo"}; +static u8 lit_3800[12]; + +daObj_Sekizo_HIOParam const daObj_Sekizo_Param_c::m = {}; + +static OBJ_SEKIZO_HIO_CLASS l_HIO; + +#if DEBUG +daObj_Sekizo_HIO_c::daObj_Sekizo_HIO_c() { + m = daObj_Sekizo_Param_c::m; +} + +void daObj_Sekizo_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daObj_Sekizo_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + cPhs__Step daObj_Sekizo_c::create() { fopAcM_ct(this, daObj_Sekizo_c); @@ -59,6 +79,12 @@ int daObj_Sekizo_c::Create() { } int daObj_Sekizo_c::Delete() { +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + dComIfG_resDelete(&mPhaseReq, l_resNameList[l_bmdData[field_0x5b0].resIdx]); return 1; } @@ -123,10 +149,6 @@ static int daObj_Sekizo_IsDelete(void* i_this) { return 1; } -static u8 lit_3800[12]; - -static daObj_Sekizo_Param_c l_HIO; - static actor_method_class daObj_Sekizo_MethodTable = { (process_method_func)daObj_Sekizo_Create, (process_method_func)daObj_Sekizo_Delete, (process_method_func)daObj_Sekizo_Execute, (process_method_func)daObj_Sekizo_IsDelete, diff --git a/src/d/actor/d_a_obj_sekizoa.cpp b/src/d/actor/d_a_obj_sekizoa.cpp index e944baca10..5147442ba9 100644 --- a/src/d/actor/d_a_obj_sekizoa.cpp +++ b/src/d/actor/d_a_obj_sekizoa.cpp @@ -115,12 +115,29 @@ static cXyz l_srcPosR(-600.0f, 1000.0f, 1800.0f); static cXyz l_srcPosL(600.0f, 1000.0f, 1800.0f); -daObj_Sekizoa_Param_c::Data const daObj_Sekizoa_Param_c::m = { - 600.0, -10.0, 1.0, 1100.0, 255.0, 550.0, 100.0, 70.0, 0.0, 0.0, 30.0, 0.0, 30.0, -30.0, - 45.0, -45.0, 0.6, 8.0, 0x3, 0x6, 0x5, 0x6, 0.0, 0.0, 0.0, 0.0, 0x3C0008, 0.0, - 0.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 600.0, 30.0, 0.004, 0, +daObj_Sekizoa_HIOParam const daObj_Sekizoa_Param_c::m = { + 600.0f, -10.0f, 1.0f, 1100.0f, 255.0f, 550.0f, 100.0f, 70.0f, 0.0f, 0.0f, 30.0f, + 0.0f, 30.0f, -30.0f, 45.0f, -45.0f, 0.6f, 8.0f, 0x3, 0x6, 0x5, 0x6, + 0.0f, 0.0f, 0.0f, 0.0f, 0x3C0008, 0.0f, 0.0f, 4.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 600.0f, 30.0f, 0.004f, 0, }; +static OBJ_SEKIZOA_HIO_CLASS l_HIO; + +#if DEBUG +daObj_Sekizoa_HIO_c::daObj_Sekizoa_HIO_c() { + m = daObj_Sekizoa_Param_c::m; +} + +void daObj_Sekizoa_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daObj_Sekizoa_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + daObj_Sekizoa_c::~daObj_Sekizoa_c() { if (mpMorf[0] != NULL) { mpMorf[0]->stopZelAnime(); @@ -131,6 +148,13 @@ daObj_Sekizoa_c::~daObj_Sekizoa_c() { if (mpMorf[1] != NULL) { mpMorf[1]->stopZelAnime(); } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + if (mType == TYPE_0) { if (daNpcT_chkTmpBit(0x31)) { mDoAud_subBgmStop(); @@ -164,11 +188,17 @@ int daObj_Sekizoa_c::create() { fopAcM_SetMtx(this, mpMorf[0]->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox2(this, mpModelData); mSound.init(¤t.pos, &eyePos, 3, 1); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("石像"); +#endif + reset(); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daObj_Sekizoa_Param_c::m.field_0x10, 0, + mCcStts.Init(mpHIO->m.inner.field_0x10, 0, this); mCyl.Set(mCcDCyl); @@ -455,19 +485,19 @@ void daObj_Sekizoa_c::setParam() { attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; attention_info.distances[fopAc_attn_SPEAK_e] = 0x13; attention_info.flags = 0; - scale.set(daObj_Sekizoa_Param_c::m.field_0x08, daObj_Sekizoa_Param_c::m.field_0x08, - daObj_Sekizoa_Param_c::m.field_0x08); - mCcStts.SetWeight(daObj_Sekizoa_Param_c::m.field_0x10); - mCylH = daObj_Sekizoa_Param_c::m.field_0x14; - mWallR = daObj_Sekizoa_Param_c::m.field_0x1C; - mAttnFovY = daObj_Sekizoa_Param_c::m.field_0x50; + scale.set(mpHIO->m.inner.field_0x08, mpHIO->m.inner.field_0x08, + mpHIO->m.inner.field_0x08); + mCcStts.SetWeight(mpHIO->m.inner.field_0x10); + mCylH = mpHIO->m.inner.field_0x14; + mWallR = mpHIO->m.inner.field_0x1C; + mAttnFovY = mpHIO->m.inner.field_0x50; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daObj_Sekizoa_Param_c::m.field_0x18); - mRealShadowSize = daObj_Sekizoa_Param_c::m.field_0x0C; - mExpressionMorfFrame = daObj_Sekizoa_Param_c::m.field_0x6C; - mMorfFrames = daObj_Sekizoa_Param_c::m.field_0x44; - gravity = daObj_Sekizoa_Param_c::m.field_0x04; + mAcchCir.SetWallH(mpHIO->m.inner.field_0x18); + mRealShadowSize = mpHIO->m.inner.field_0x0C; + mExpressionMorfFrame = mpHIO->m.inner.field_0x6C; + mMorfFrames = mpHIO->m.inner.field_0x44; + gravity = mpHIO->m.inner.field_0x04; if (mType == TYPE_2 || mType == TYPE_3) { gravity = 0.0f; @@ -685,11 +715,11 @@ void daObj_Sekizoa_c::setAttnPos() { mStagger.calc(0); f32 rad_angle_y = cM_s2rad(mCurAngle.y - field_0xd7e.y); mJntAnm.setParam(this, mpMorf[0]->getModel(), &vec_pos, getBackboneJointNo(), getNeckJointNo(), - getHeadJointNo(), daObj_Sekizoa_Param_c::m.field_0x24, - daObj_Sekizoa_Param_c::m.field_0x20, daObj_Sekizoa_Param_c::m.field_0x2C, - daObj_Sekizoa_Param_c::m.field_0x28, daObj_Sekizoa_Param_c::m.field_0x34, - daObj_Sekizoa_Param_c::m.field_0x30, daObj_Sekizoa_Param_c::m.field_0x3C, - daObj_Sekizoa_Param_c::m.field_0x38, daObj_Sekizoa_Param_c::m.field_0x40, 0.0f, + getHeadJointNo(), mpHIO->m.inner.field_0x24, + mpHIO->m.inner.field_0x20, mpHIO->m.inner.field_0x2C, + mpHIO->m.inner.field_0x28, mpHIO->m.inner.field_0x34, + mpHIO->m.inner.field_0x30, mpHIO->m.inner.field_0x3C, + mpHIO->m.inner.field_0x38, mpHIO->m.inner.field_0x40, 0.0f, NULL); mJntAnm.calcJntRad(0.2f, 1.0f, rad_angle_y); setMtx(); @@ -720,7 +750,7 @@ void daObj_Sekizoa_c::setAttnPos() { mJntAnm.setEyeAngleX(eyePos, 1.0f, 0); mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, 1, 1.0f, 0); attention_info.position = current.pos; - attention_info.position.y += daObj_Sekizoa_Param_c::m.field_0x00; + attention_info.position.y += mpHIO->m.inner.field_0x00; } @@ -1070,19 +1100,19 @@ int daObj_Sekizoa_c::checkMoveDirection() { cXyz temp_vec; cXyz temp_vec2; - f32 temp_float_y = daObj_Sekizoa_Param_c::m.field_0x00 * 0.33f; + f32 temp_float_y = mpHIO->m.inner.field_0x00 * 0.33f; fopAc_ac_c* actor_3 = mActorMngrs[3].getActorP(); - temp_vec.set(0.0f, 0.0f, daObj_Sekizoa_Param_c::m.field_0x8C); + temp_vec.set(0.0f, 0.0f, mpHIO->m.field_0x8C); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(current.angle.y); mDoMtx_stack_c::multVec(&temp_vec, &temp_vec2); - if (chkPointInArea(actor_3->current.pos, temp_vec2, daObj_Sekizoa_Param_c::m.field_0x8C / 2, + if (chkPointInArea(actor_3->current.pos, temp_vec2, mpHIO->m.field_0x8C / 2, 300.0f, -300.0f, 0) == false) { temp_vec2.y += 10.0f; mGndChk.SetPos(&temp_vec2); if (fabsf(dComIfG_Bgsp().GroundCross(&mGndChk) - current.pos.y) < 0.1f) { - temp_vec.set(0.0f, temp_float_y, daObj_Sekizoa_Param_c::m.field_0x8C); + temp_vec.set(0.0f, temp_float_y, mpHIO->m.field_0x8C); mDoMtx_stack_c::YrotS(current.angle.y); mDoMtx_stack_c::multVec(&temp_vec, &temp_vec2); temp_vec2 = current.pos + temp_vec2; @@ -1207,7 +1237,7 @@ void daObj_Sekizoa_c::jump() { break; } mCXyzJump = current.pos; - mJumpSpeed = daObj_Sekizoa_Param_c::m.field_0x90; + mJumpSpeed = mpHIO->m.field_0x90; return; } } else { @@ -1222,27 +1252,27 @@ void daObj_Sekizoa_c::jump() { mSound.startCreatureVoice(Z2SE_SEKI_V_COL2, -1); mSound.startCreatureSound(Z2SE_SEKI_JUMP_COL, 0, -1); } - mJumpSpeed = daObj_Sekizoa_Param_c::m.field_0x90; + mJumpSpeed = mpHIO->m.field_0x90; mJump = 3; } if (mJump == 2) { - cLib_chaseF(&mJumpHeight, daObj_Sekizoa_Param_c::m.field_0x8C, mJumpSpeed); + cLib_chaseF(&mJumpHeight, mpHIO->m.field_0x8C, mJumpSpeed); } else { cLib_chaseF(&mJumpHeight, 0.0f, mJumpSpeed); } - f32 var_f31 = daObj_Sekizoa_Param_c::m.field_0x94; - f32 var_f29 = var_f31 * ((daObj_Sekizoa_Param_c::m.field_0x8C * 0.5f) * - (daObj_Sekizoa_Param_c::m.field_0x8C * 0.5f)); - f32 var_f30 = mJumpHeight - (daObj_Sekizoa_Param_c::m.field_0x8C * 0.5f); + f32 var_f31 = mpHIO->m.field_0x94; + f32 var_f29 = var_f31 * ((mpHIO->m.field_0x8C * 0.5f) * + (mpHIO->m.field_0x8C * 0.5f)); + f32 var_f30 = mJumpHeight - (mpHIO->m.field_0x8C * 0.5f); temp_vec.set(0.0f, var_f29 + (-var_f31 * (var_f30 * var_f30)), mJumpHeight); mDoMtx_stack_c::YrotS(current.angle.y); mDoMtx_stack_c::multVec(&temp_vec, &temp_vec2); current.pos = mCXyzJump + temp_vec2; - cLib_chaseF(&mJumpSpeed, daObj_Sekizoa_Param_c::m.field_0x90 * 0.5f, 0.25f); - if (mJumpHeight <= 0 || daObj_Sekizoa_Param_c::m.field_0x8C <= mJumpHeight) { + cLib_chaseF(&mJumpSpeed, mpHIO->m.field_0x90 * 0.5f, 0.25f); + if (mJumpHeight <= 0 || mpHIO->m.field_0x8C <= mJumpHeight) { landing(); mJump = 4; return; @@ -2322,7 +2352,7 @@ int daObj_Sekizoa_c::puzzle(void* param_0) { } if (daPy_getPlayerActorClass()->checkPlayerFly() != 0) { if (mType == TYPE_0) { - mLatencyTime = daObj_Sekizoa_Param_c::m.field_0x98; + mLatencyTime = mpHIO->m.field_0x98; mEvtNo = 5; } } else { @@ -2410,9 +2440,6 @@ static int daObj_Sekizoa_IsDelete(void* i_this) { return 1; } - -static daObj_Sekizoa_Param_c l_HIO; - static actor_method_class daObj_Sekizoa_MethodTable = { daObj_Sekizoa_Create, daObj_Sekizoa_Delete, daObj_Sekizoa_Execute, daObj_Sekizoa_IsDelete, daObj_Sekizoa_Draw, diff --git a/src/d/actor/d_a_obj_shield.cpp b/src/d/actor/d_a_obj_shield.cpp index c10e53e2be..b7ce69ed51 100644 --- a/src/d/actor/d_a_obj_shield.cpp +++ b/src/d/actor/d_a_obj_shield.cpp @@ -11,7 +11,7 @@ #include "d/d_com_inf_game.h" #include "d/d_cc_d.h" #include "d/d_item_data.h" -#include +#include const static dCcD_SrcCyl l_cyl_src = { { diff --git a/src/d/actor/d_a_obj_smgdoor.cpp b/src/d/actor/d_a_obj_smgdoor.cpp index 7df8c9e12f..000df5e1c3 100644 --- a/src/d/actor/d_a_obj_smgdoor.cpp +++ b/src/d/actor/d_a_obj_smgdoor.cpp @@ -387,7 +387,7 @@ int daObjSmgDoor_c::Draw() { #if DEBUG if (l_HIO.field_0x6 != 0) { - mpBgW->CalcPlane(); + mpBgW->DebugDraw(); } #endif diff --git a/src/d/actor/d_a_obj_smtile.cpp b/src/d/actor/d_a_obj_smtile.cpp index 57586d252e..ebe2baaffa 100644 --- a/src/d/actor/d_a_obj_smtile.cpp +++ b/src/d/actor/d_a_obj_smtile.cpp @@ -27,8 +27,33 @@ static s8 l_tileMoveData[21][4] = { 0x02, 0x02, -0x1, 0x03, 0x05, 0x02, -0x1, 0x02, 0x04, 0x02, -0x1, 0x01, 0x03, 0x02, }; +static OBJ_SMTILE_HIO_CLASS l_HIO; + +daObj_SMTile_HIOParam const daObj_SMTile_Param_c::m = {600.0f, 20.0f}; + +#if DEBUG +daObj_SMTile_HIO_c::daObj_SMTile_HIO_c() { + m = daObj_SMTile_Param_c::m; +} + +void daObj_SMTile_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daObj_SMTile_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + daObj_SMTile_c::~daObj_SMTile_c() { OS_REPORT("|%06d:%x|daObj_SMTile_c -> デストラクト\n", g_Counter.mCounter0, this); + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + dComIfG_resDelete( &mPhase, l_resNameList[l_bmdData[mType][1]]); @@ -53,16 +78,18 @@ int daObj_SMTile_c::create() { if (fopAcM_entrySolidHeap(this, createHeapCallBack, 0x800) == 0) { return cPhs_ERROR_e; } + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("石像の間の光るタイル"); +#endif + field_0xb2b = 1; Execute(); } return rv; } -f32 const daObj_SMTile_Param_c::m[2] = { - 600.0f, 20.0f, -}; - int daObj_SMTile_c::CreateHeap() { J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes( l_resNameList[l_bmdData[mType][1]], @@ -191,8 +218,8 @@ void daObj_SMTile_c::setDstPos() { local_2c.x = l_tileMoveData[i][0]; local_2c.z = l_tileMoveData[i][1]; local_38 = local_2c; - local_38.x *= daObj_SMTile_Param_c::m[0]; - local_38.z *= daObj_SMTile_Param_c::m[0]; + local_38.x *= mpHIO->m.field_0x0; + local_38.z *= mpHIO->m.field_0x0; mDoMtx_stack_c::multVec(&local_38, &field_0x68c[i]); switch ((u8)l_tileMoveData[i][3]) { case 0: @@ -209,8 +236,8 @@ void daObj_SMTile_c::setDstPos() { break; } - local_2c.x *= daObj_SMTile_Param_c::m[0]; - local_2c.z *= daObj_SMTile_Param_c::m[0]; + local_2c.x *= mpHIO->m.field_0x0; + local_2c.z *= mpHIO->m.field_0x0; mDoMtx_stack_c::multVec(&local_2c, &field_0x590[i]); } } @@ -225,7 +252,7 @@ void daObj_SMTile_c::setPrtcls(int param_1, int param_2) { mDoAud_seStart(Z2SE_OBJ_SEKI_TILE_EMERGE, &field_0x788[i], 0, 0); } field_0x788[i] = current.pos + field_0x68c[i]; - mParticleTimers[i] = daObj_SMTile_Param_c::m[1]; + mParticleTimers[i] = mpHIO->m.field_0x4; field_0xa28[i] = param_1; } } @@ -254,21 +281,21 @@ void daObj_SMTile_c::touchPrtcls(f32 param_1) { dComIfGp_particle_set(mParticleIds[i], id[field_0xa28[i]], &field_0x788[i], 0, 0); JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mParticleIds[i]); if (emitter != NULL) { - f32 dVar6 = daObj_SMTile_Param_c::m[1] - mParticleTimers[i]; - dVar6 /= daObj_SMTile_Param_c::m[1]; + f32 dVar6 = mpHIO->m.field_0x4 - mParticleTimers[i]; + dVar6 /= mpHIO->m.field_0x4; local_3c.setall(0.0f); switch ((u8)l_tileMoveData[i][3]) { case 0: - local_3c.z = daObj_SMTile_Param_c::m[0] * dVar6; + local_3c.z = mpHIO->m.field_0x0 * dVar6; break; case 1: - local_3c.x = daObj_SMTile_Param_c::m[0] * dVar6; + local_3c.x = mpHIO->m.field_0x0 * dVar6; break; case 2: - local_3c.x = daObj_SMTile_Param_c::m[0] * dVar6 * -1.0f; + local_3c.x = mpHIO->m.field_0x0 * dVar6 * -1.0f; break; case 3: - local_3c.z = daObj_SMTile_Param_c::m[0] * dVar6 * -1.0f; + local_3c.z = mpHIO->m.field_0x0 * dVar6 * -1.0f; break; } @@ -313,8 +340,6 @@ static int daObj_SMTile_IsDelete(void* i_this) { return 1; } -static daObj_SMTile_Param_c l_HIO; - static actor_method_class daObj_SMTile_MethodTable = { (process_method_func)daObj_SMTile_Create, (process_method_func)daObj_SMTile_Delete, diff --git a/src/d/actor/d_a_obj_stick.cpp b/src/d/actor/d_a_obj_stick.cpp index b4abdbea94..2569f2f4b9 100644 --- a/src/d/actor/d_a_obj_stick.cpp +++ b/src/d/actor/d_a_obj_stick.cpp @@ -11,7 +11,7 @@ #include "m_Do/m_Do_ext.h" #include "d/actor/d_a_npc.h" -const daObj_Stick_Param_c::daObj_Stick_HIOParam daObj_Stick_Param_c::m = { +const daObj_Stick_HIOParam daObj_Stick_Param_c::m = { 0.0f, -3.0f, 1.0f, 100.0f }; @@ -24,7 +24,29 @@ dCcD_SrcSph daObj_Stick_c::mCcDSph = { static char* l_resName = "Taro6"; +static OBJ_STICK_HIO_CLASS l_HIO; + +#if DEBUG +daObj_Stick_HIO_c::daObj_Stick_HIO_c() { + m = daObj_Stick_Param_c::m; +} + +void daObj_Stick_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daObj_Stick_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + daObj_Stick_c::~daObj_Stick_c() { +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + dComIfG_resDelete(&mPhase, getResName()); } @@ -47,6 +69,12 @@ int daObj_Stick_c::create() { modelData = mpModel->getModelData(); fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -50.0, -50.0, -75.0, 50.0, 50.0, 75.0); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("タロの棒"); +#endif + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, @@ -105,7 +133,7 @@ int daObj_Stick_c::Execute() { setMtx(); mSph.ClrCoHit(); attention_info.position = current.pos; - attention_info.position.y += daObj_Stick_Param_c::m.attention_offset; + attention_info.position.y += mpHIO->m.attention_offset; eyePos = attention_info.position; attention_info.flags = 0; @@ -122,7 +150,7 @@ int daObj_Stick_c::Draw() { 1, mpModel, ¤t.pos, - daObj_Stick_Param_c::m.real_shadow_size, + mpHIO->m.real_shadow_size, 20.0f, current.pos.y, mGroundHeight, @@ -214,5 +242,3 @@ actor_process_profile_definition g_profile_OBJ_STICK = { fopAc_ACTOR_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType }; - -static daObj_Stick_Param_c l_HIO; diff --git a/src/d/actor/d_a_obj_stone.cpp b/src/d/actor/d_a_obj_stone.cpp index 852361498a..c5ddc061b9 100644 --- a/src/d/actor/d_a_obj_stone.cpp +++ b/src/d/actor/d_a_obj_stone.cpp @@ -14,7 +14,7 @@ #include "f_op/f_op_kankyo_mng.h" #include "global.h" #include "SSystem/SComponent/c_math.h" -#include +#include const static int l_bmdIdx[2] = {3, 3}; diff --git a/src/d/actor/d_a_obj_swLight.cpp b/src/d/actor/d_a_obj_swLight.cpp index f5e8efc05f..688aea247c 100644 --- a/src/d/actor/d_a_obj_swLight.cpp +++ b/src/d/actor/d_a_obj_swLight.cpp @@ -437,7 +437,7 @@ int daObjSwLight_c::Draw() { #if DEBUG if (l_HIO.mCheckRendering) { - mpBgW->CalcPlane(); + mpBgW->DebugDraw(); } #endif diff --git a/src/d/actor/d_a_obj_swturn.cpp b/src/d/actor/d_a_obj_swturn.cpp index 909b94da11..4acb54bf03 100644 --- a/src/d/actor/d_a_obj_swturn.cpp +++ b/src/d/actor/d_a_obj_swturn.cpp @@ -11,7 +11,7 @@ #include "SSystem/SComponent/c_lib.h" #include "d/d_com_inf_game.h" #include "d/d_bg_w.h" -#include +#include static u32 const l_bmd[2] = { 4, 4, diff --git a/src/d/actor/d_a_obj_taFence.cpp b/src/d/actor/d_a_obj_taFence.cpp index 2a58db6e0d..ff6823ff43 100644 --- a/src/d/actor/d_a_obj_taFence.cpp +++ b/src/d/actor/d_a_obj_taFence.cpp @@ -353,7 +353,7 @@ void daTaFence_c::init_modeMove() { void daTaFence_c::modeMove() { cLib_chaseF(&speedF, mFallSpeed, mFallSpeed / 30.0f); - if (cLib_addCalcAngleS(&shape_angle.x, field_0x1384, 1, (182.04445f * fopAcM_GetSpeedF(this)), 1) == 0) { + if (cLib_addCalcAngleS(&shape_angle.x, field_0x1384, 1, DEG2S(fopAcM_GetSpeedF(this)), 1) == 0) { init_modeMoveEnd(); } } diff --git a/src/d/actor/d_a_obj_tks.cpp b/src/d/actor/d_a_obj_tks.cpp index 92ebccbca1..c921014d4d 100644 --- a/src/d/actor/d_a_obj_tks.cpp +++ b/src/d/actor/d_a_obj_tks.cpp @@ -51,6 +51,12 @@ daObjTks_c::~daObjTks_c() { if (parentActorID != fpcM_ERROR_PROCESS_ID_e) { fopAcM_delete(parentActorID); } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif } const daObjTks_HIOParam daObjTks_Param_c::m = { @@ -94,6 +100,18 @@ const daObjTks_HIOParam daObjTks_Param_c::m = { 0.8f, }; +static OBJ_TKS_HIO_CLASS l_HIO; + +#if DEBUG +daObjTks_HIO_c::daObjTks_HIO_c() { + m = daObjTks_Param_c::m; +} + +void daObjTks_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + int daObjTks_c::Create() { fopAcM_ct(this, daObjTks_c); @@ -109,12 +127,18 @@ int daObjTks_c::Create() { mSound.init(¤t.pos, &eyePos, 3, 1); - mAcchCir.SetWall(daObjTks_Param_c::m.common.width, daObjTks_Param_c::m.common.knee_length); - mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("おばちゃんアイテム"); +#endif + + mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length); + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, + fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mAcch.OffClrSpeedY(); mAcch.SetWallNone(); - mCcStts.Init(daObjTks_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCcCyl.Set(mCcDCyl); mCcCyl.SetStts(&mCcStts); mCcCyl.SetTgType(0); @@ -122,8 +146,8 @@ int daObjTks_c::Create() { mCcCyl.SetCoIGrp(8); mCcCyl.SetCoVsGrp(0x40); - mCcCyl.SetH(daObjTks_Param_c::m.common.height); - mCcCyl.SetR(daObjTks_Param_c::m.common.width); + mCcCyl.SetH(mpHIO->m.common.height); + mCcCyl.SetR(mpHIO->m.common.width); mAcch.CrrPos(dComIfG_Bgsp()); @@ -209,7 +233,7 @@ int daObjTks_c::Draw() { } mAnm_p->getModel()->getModelData()->getMaterialNodePointer(2)->setMaterialAnm(mpMatAnm); - draw(FALSE, FALSE, daObjTks_Param_c::m.common.real_shadow_size, NULL, FALSE); + draw(FALSE, FALSE, mpHIO->m.common.real_shadow_size, NULL, FALSE); return 1; } @@ -234,7 +258,7 @@ int daObjTks_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { case 15: case 16: case 17: - setLookatMtx(jnt_no, spC, daObjTks_Param_c::m.common.neck_rotation_ratio); + setLookatMtx(jnt_no, spC, mpHIO->m.common.neck_rotation_ratio); break; } @@ -369,7 +393,7 @@ void daObjTks_c::reset() { daPy_py_c* player = daPy_getPlayerActorClass(); mDoMtx_stack_c::transS(*fopAcM_GetPosition_p(player)); mDoMtx_stack_c::YrotM(fopAcM_GetAngle_p(player)->y); - mDoMtx_stack_c::transM(daObjTks_Param_c::m.offset_x, daObjTks_Param_c::m.offset_y, daObjTks_Param_c::m.offset_z); + mDoMtx_stack_c::transM(mpHIO->m.offset_x, mpHIO->m.offset_y, mpHIO->m.offset_z); mDoMtx_stack_c::multVecZero(&home.pos); old.pos = home.pos; current.pos = home.pos; @@ -432,10 +456,10 @@ void daObjTks_c::setExpression(int i_expression, f32 i_morf) { } void daObjTks_c::playExpression() { - daNpcF_anmPlayData anm0_phase1 = {1, daObjTks_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData anm0_phase1 = {1, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* anm0_m[] = {&anm0_phase1}; - daNpcF_anmPlayData anm1_phase1 = {0, daObjTks_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData anm1_phase1 = {0, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* anm1_m[] = {&anm1_phase1}; daNpcF_anmPlayData** anmData_p[] = {anm0_m, anm1_m}; @@ -446,16 +470,16 @@ void daObjTks_c::playExpression() { } void daObjTks_c::playMotion() { - daNpcF_anmPlayData anm0_phase1 = {2, daObjTks_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData anm0_phase1 = {2, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* anm0_m[] = {&anm0_phase1}; - daNpcF_anmPlayData anm1_phase1 = {3, daObjTks_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData anm1_phase1 = {3, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData* anm1_m[] = {&anm1_phase1, NULL}; - daNpcF_anmPlayData anm2_phase1 = {4, daObjTks_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData anm2_phase1 = {4, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* anm2_m[] = {&anm2_phase1}; - daNpcF_anmPlayData anm3_phase1 = {5, daObjTks_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData anm3_phase1 = {5, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData* anm3_m[] = {&anm3_phase1, NULL}; daNpcF_anmPlayData** anmData_p[] = {anm0_m, anm1_m, anm2_m, anm3_m}; @@ -470,14 +494,14 @@ void daObjTks_c::lookat() { J3DModel* model_p = mAnm_p->getModel(); int var_r28 = 0; - f32 body_angleX_min = daObjTks_Param_c::m.common.body_angleX_min; - f32 body_angleX_max = daObjTks_Param_c::m.common.body_angleX_max; - f32 body_angleY_min = daObjTks_Param_c::m.common.body_angleY_min; - f32 body_angleY_max = daObjTks_Param_c::m.common.body_angleY_max; - f32 head_angleX_min = daObjTks_Param_c::m.common.head_angleX_min; - f32 head_angleX_max = daObjTks_Param_c::m.common.head_angleX_max; - f32 head_angleY_min = daObjTks_Param_c::m.common.head_angleY_min; - f32 head_angleY_max = daObjTks_Param_c::m.common.head_angleY_max; + f32 body_angleX_min = mpHIO->m.common.body_angleX_min; + f32 body_angleX_max = mpHIO->m.common.body_angleX_max; + f32 body_angleY_min = mpHIO->m.common.body_angleY_min; + f32 body_angleY_max = mpHIO->m.common.body_angleY_max; + f32 head_angleX_min = mpHIO->m.common.head_angleX_min; + f32 head_angleX_max = mpHIO->m.common.head_angleX_max; + f32 head_angleY_min = mpHIO->m.common.head_angleY_min; + f32 head_angleY_max = mpHIO->m.common.head_angleY_max; s16 temp_r26 = mCurAngle.y - mOldAngle.y; cXyz sp30[] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; @@ -723,7 +747,7 @@ void daObjTks_c::warp() { if (eventMgr.getIsAddvance(staff_id)) { switch (*(u32*)cut_name) { case '0002': - gravity = daObjTks_Param_c::m.common.gravity; + gravity = mpHIO->m.common.gravity; break; case '0001': JUT_ASSERT(1419, FALSE); @@ -790,8 +814,8 @@ void daObjTks_c::setParam() { scale.setall(field_0xdcc); #if DEBUG - mAcchCir.SetWallR(daObjTks_Param_c::m.common.width); - mAcchCir.SetWallH(daObjTks_Param_c::m.common.height); + mAcchCir.SetWallR(mpHIO->m.common.width); + mAcchCir.SetWallH(mpHIO->m.common.height); #endif } @@ -854,13 +878,13 @@ void daObjTks_c::setAttnPos() { mEyeAngle.x = 0; } - attention_info.position.set(current.pos.x, current.pos.y + daObjTks_Param_c::m.common.attention_offset, current.pos.z); + attention_info.position.set(current.pos.x, current.pos.y + mpHIO->m.common.attention_offset, current.pos.z); if (!fopAcM_checkCarryNow(this)) { mCcCyl.SetC(current.pos); #if DEBUG - mCcCyl.SetH(daObjTks_Param_c::m.common.height); - mCcCyl.SetR(daObjTks_Param_c::m.common.width); + mCcCyl.SetH(mpHIO->m.common.height); + mCcCyl.SetR(mpHIO->m.common.width); #endif dComIfG_Ccsp()->Set(&mCcCyl); } @@ -872,8 +896,6 @@ BOOL daObjTks_c::drawDbgInfo() { void daObjTks_c::drawOtherMdls() {} -static daObjTks_Param_c l_HIO; - static actor_method_class daObjTks_MethodTable = { (process_method_func)daObjTks_Create, (process_method_func)daObjTks_Delete, diff --git a/src/d/actor/d_a_obj_tobyhouse.cpp b/src/d/actor/d_a_obj_tobyhouse.cpp index 2c9738b6bb..beee845586 100644 --- a/src/d/actor/d_a_obj_tobyhouse.cpp +++ b/src/d/actor/d_a_obj_tobyhouse.cpp @@ -521,7 +521,7 @@ int daObjTobyHouse_c::Draw() { #if DEBUG if (l_HIO.mDrawCollision) { - mpBgW->CalcPlane(); + mpBgW->DebugDraw(); } #endif diff --git a/src/d/actor/d_a_obj_wdStick.cpp b/src/d/actor/d_a_obj_wdStick.cpp index 0e4abd5d4c..af9a3d9dc3 100644 --- a/src/d/actor/d_a_obj_wdStick.cpp +++ b/src/d/actor/d_a_obj_wdStick.cpp @@ -10,7 +10,7 @@ #include "d/actor/d_a_player.h" #include "d/d_com_inf_game.h" #include "f_op/f_op_kankyo_mng.h" -#include +#include static daWdStick_HIO_c l_HIO; diff --git a/src/d/actor/d_a_obj_wood_pendulum.cpp b/src/d/actor/d_a_obj_wood_pendulum.cpp index 8cf29afb59..b762f6d1ce 100644 --- a/src/d/actor/d_a_obj_wood_pendulum.cpp +++ b/src/d/actor/d_a_obj_wood_pendulum.cpp @@ -64,7 +64,7 @@ int daObjWPndlm_c::Create() { if (arg0 == 0 || arg0 == 255) { arg0 = 0; } - field_0x958 = arg0 * 182.04445f; + field_0x958 = DEG2S(arg0); return 1; } diff --git a/src/d/actor/d_a_obj_yel_bag.cpp b/src/d/actor/d_a_obj_yel_bag.cpp index 2d2d41a8b3..08ba1d64e0 100644 --- a/src/d/actor/d_a_obj_yel_bag.cpp +++ b/src/d/actor/d_a_obj_yel_bag.cpp @@ -38,6 +38,22 @@ static u16 emttrId[4] = { 0x01B8, 0x01B9, 0x01BA, 0x01BB, }; +static OBJ_YBAG_HIO_CLASS l_HIO; + +#if DEBUG +daObj_YBag_HIO_c::daObj_YBag_HIO_c() { + m = daObj_YBag_Param_c::m; +} + +void daObj_YBag_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daObj_YBag_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + daObj_YBag_c::daObj_YBag_c() { } @@ -45,6 +61,12 @@ daObj_YBag_c::~daObj_YBag_c() { for (int i = 0; l_loadRes_list[mType][i] >= 0; i++) { dComIfG_resDelete(&mPhases[i], l_resNames[l_loadRes_list[mType][i]]); } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif } const dCcD_SrcGObjInf daObj_YBag_c::mCcDObjInfo = { @@ -54,7 +76,7 @@ const dCcD_SrcGObjInf daObj_YBag_c::mCcDObjInfo = { {0}, }; -f32 const daObj_YBag_Param_c::m[11] = { +daObj_YBag_HIOParam const daObj_YBag_Param_c::m = { 0.0f, -4.0f, 1.0f, 400.0f, 255.0f, 10.0f, 4.0f, 10.0f, 41.0f, 32.0f, 3.0f, }; @@ -82,10 +104,16 @@ int daObj_YBag_c::create() { } fopAcM_SetMtx(this, mModel->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -300.0, -50.0f, -300.0, 300.0f, 450.0f, 300.0f); - mAcchCir.SetWall(daObj_YBag_Param_c::m[7], daObj_YBag_Param_c::m[6]); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("イリアのバッグ"); +#endif + + mAcchCir.SetWall(mpHIO->m.field_0x1c, mpHIO->m.field_0x18); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mStts.Init(daObj_YBag_Param_c::m[4], 0, this); + mStts.Init(mpHIO->m.field_0x10, 0, this); mCyl.Set(mCcDCyl); mCyl.SetStts(&mStts); mAcch.CrrPos(dComIfG_Bgsp()); @@ -122,12 +150,12 @@ int daObj_YBag_c::Delete() { int daObj_YBag_c::Execute() { int local_8c = fopAcM_checkCarryNow(this) != 0; - scale.set(daObj_YBag_Param_c::m[2], daObj_YBag_Param_c::m[2], daObj_YBag_Param_c::m[2]); + scale.set(mpHIO->m.field_0x08, mpHIO->m.field_0x08, mpHIO->m.field_0x08); attention_info.flags = 0; attention_info.distances[4] = 6; - mAcchCir.SetWallR(daObj_YBag_Param_c::m[7]); - mAcchCir.SetWallH(daObj_YBag_Param_c::m[6]); - gravity = daObj_YBag_Param_c::m[1]; + mAcchCir.SetWallR(mpHIO->m.field_0x1c); + mAcchCir.SetWallH(mpHIO->m.field_0x18); + gravity = mpHIO->m.field_0x04; if (local_8c != 0) { mAcch.ClrWallHit(); mAcch.ClrGroundHit(); @@ -145,17 +173,17 @@ int daObj_YBag_c::Execute() { mAcch.ClrGrndNone(); if (field_0xa34 != 0 && cM3d_IsZero(speedF) == false) { fopAcM_carryOffRevise(this); - s16 sVar11 = cM_deg2s(daObj_YBag_Param_c::m[9]); + s16 sVar11 = cM_deg2s(mpHIO->m.field_0x24); speed.setall(0.0f); speed.y = - daObj_YBag_Param_c::m[8] * cM_ssin(sVar11); + mpHIO->m.field_0x20 * cM_ssin(sVar11); speedF = - daObj_YBag_Param_c::m[8] * cM_scos(sVar11); + mpHIO->m.field_0x20 * cM_scos(sVar11); field_0xa04 = 0x4000; field_0xa33 = 1; } else { fopAcM_getWaterY(¤t.pos, &field_0x9f4); - if (field_0x9f4 != -G_CM3D_F_INF && daObj_YBag_Param_c::m[10] < field_0x9f4 - field_0x9f0 && + if (field_0x9f4 != -G_CM3D_F_INF && mpHIO->m.field_0x28 < field_0x9f4 - field_0x9f0 && current.pos.y <= field_0x9f4 && field_0xa32 == 0) { if (field_0xa33 != 0) { @@ -177,7 +205,7 @@ int daObj_YBag_c::Execute() { cLib_addCalc(&speed.y, 2.0f, 0.5f, 0.5f, 0.5f); } if (field_0x9f4 < - current.pos.y + daObj_YBag_Param_c::m[10]) + current.pos.y + mpHIO->m.field_0x28) { field_0x9dc.y = 0x100; mAcch.ClrGroundHit(); @@ -205,7 +233,7 @@ int daObj_YBag_c::Execute() { } else { cLib_chaseF(&speedF, 0.0f, 0.1f); } - cLib_addCalc2(¤t.pos.y, field_0x9f4 - daObj_YBag_Param_c::m[10], 0.5f, + cLib_addCalc2(¤t.pos.y, field_0x9f4 - mpHIO->m.field_0x28, 0.5f, 2.0f); speed.y = 0.0f; setHamonPrtcl(); @@ -313,13 +341,13 @@ int daObj_YBag_c::Execute() { setRoomNo(); } attention_info.position = current.pos; - attention_info.position.y += daObj_YBag_Param_c::m[0]; + attention_info.position.y += mpHIO->m.field_0x00; eyePos = current.pos; setMtx(); field_0xa04 = calcRollAngle(field_0xa04, 0x10000); mCyl.ClrCoHit(); - mCyl.SetR(daObj_YBag_Param_c::m[7]); - mCyl.SetH(daObj_YBag_Param_c::m[5]); + mCyl.SetR(mpHIO->m.field_0x1c); + mCyl.SetH(mpHIO->m.field_0x14); mCyl.SetC(current.pos); dComIfG_Ccsp()->Set(&mCyl); field_0xa34 = local_8c != 0; @@ -344,7 +372,7 @@ int daObj_YBag_c::Draw() { } else { ; mShadowId = dComIfGd_setShadow(mShadowId, 1, mModel, ¤t.pos, - daObj_YBag_Param_c::m[3], 20.0f, + mpHIO->m.field_0x0c, 20.0f, current.pos.y, field_0x9f0, mGndChk, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); } @@ -470,8 +498,6 @@ void daObj_YBag_c::setSmokePrtcl() { dComIfGp_particle_levelEmitterOnEventMove(field_0xa14); } -static daObj_YBag_Param_c l_HIO; - void daObj_YBag_c::setWaterPrtcl() { static const cXyz scl(0.4f, 0.4f, 0.4f); diff --git a/src/d/actor/d_a_peru.cpp b/src/d/actor/d_a_peru.cpp index 3875e0a95f..ebceb11bf0 100644 --- a/src/d/actor/d_a_peru.cpp +++ b/src/d/actor/d_a_peru.cpp @@ -102,15 +102,7 @@ daPeru_c::cutAppearFunc daPeru_c::mCutList[3] = { &daPeru_c::cutAppear_skip, }; -daPeru_c::~daPeru_c() { - OS_REPORT("|%06d:%x|daPeru_c -> デストラクト\n", g_Counter.mCounter0, this); - if (heap != NULL) { - mpMorf[0]->stopZelAnime(); - } - deleteRes(l_loadResPtrnList[mType], (const char**) l_resNameList); -} - -PeruParams const daPeru_Param_c::m = { +daPeru_HIOParam const daPeru_Param_c::m = { 60.0f, -3.0f, 1.0f, @@ -154,6 +146,37 @@ PeruParams const daPeru_Param_c::m = { 0.0f, }; +static PERU_HIO_CLASS l_HIO; + +#if DEBUG +daPeru_HIO_c::daPeru_HIO_c() { + m = daPeru_Param_c::m; +} + +void daPeru_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daPeru_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daPeru_c::~daPeru_c() { + OS_REPORT("|%06d:%x|daPeru_c -> デストラクト\n", g_Counter.mCounter0, this); + if (heap != NULL) { + mpMorf[0]->stopZelAnime(); + } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + + deleteRes(l_loadResPtrnList[mType], (const char**) l_resNameList); +} + int daPeru_c::create() { daNpcT_ct(this, daPeru_c, (daNpcT_faceMotionAnmData_c*)l_faceMotionAnmData, (daNpcT_motionAnmData_c*)l_motionAnmData, (daNpcT_MotionSeqMngr_c::sequenceStepData_c*)l_faceMotionSequenceData, 4, (daNpcT_MotionSeqMngr_c::sequenceStepData_c*)l_motionSequenceData, 4, l_evtList, l_resNameList); OS_REPORT("------------ ルイーズ生成処理開始\n"); @@ -182,9 +205,15 @@ int daPeru_c::create() { -300.0f, 300.0f, 450.0f, 300.0f); mSound.init(¤t.pos, &eyePos, 3, 1); + +#if DEBUG + mpHIO = &l_HIO; + mpHIO->entryHIO("ルイーズ"); +#endif + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daPeru_Param_c::m.field_0x00[4], 0, this); + mCcStts.Init(mpHIO->m.inner.field_0x10, 0, this); for (int i = 0; i < 2; i++) { mCyls[i].Set(mCcDCyl); mCyls[i].SetStts(&mCcStts); @@ -279,7 +308,7 @@ int daPeru_c::Draw() { u16 eyeballMat = getEyeballMaterialNo(); modelData->getMaterialNodePointer(eyeballMat)->setMaterialAnm(matAnm); } - return draw(0, 0, daPeru_Param_c::m.field_0x00[3], NULL, 100.0f, 0, field_0xe80, 0); + return draw(0, 0, mpHIO->m.inner.field_0x0C, NULL, 100.0f, 0, field_0xe80, 0); } int daPeru_c::createHeapCallBack(fopAc_ac_c* i_this) { @@ -311,20 +340,20 @@ int daPeru_c::isDelete() { void daPeru_c::reset() { initialize(); - attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(daPeru_Param_c::m.field_0x48[2], daPeru_Param_c::m.field_0x48[3]); + attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(mpHIO->m.inner.field_0x4C, mpHIO->m.inner.field_0x4E); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[0]; - attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(daPeru_Param_c::m.field_0x48[0], daPeru_Param_c::m.field_0x48[1]); + attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(mpHIO->m.inner.field_0x48, mpHIO->m.inner.field_0x4A); attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e; - scale.setall(daPeru_Param_c::m.field_0x00[2]); - mCcStts.SetWeight(daPeru_Param_c::m.field_0x00[4]); - mCylH = daPeru_Param_c::m.field_0x00[5]; - mWallR = daPeru_Param_c::m.field_0x00[7]; + scale.setall(mpHIO->m.inner.field_0x08); + mCcStts.SetWeight(mpHIO->m.inner.field_0x10); + mCylH = mpHIO->m.inner.field_0x14; + mWallR = mpHIO->m.inner.field_0x1C; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daPeru_Param_c::m.field_0x00[6]); - mRealShadowSize = daPeru_Param_c::m.field_0x00[3]; - gravity = daPeru_Param_c::m.field_0x00[1]; - mExpressionMorfFrame = daPeru_Param_c::m.field_0x64[2]; - mMorfFrames = daPeru_Param_c::m.field_0x00[17]; + mAcchCir.SetWallH(mpHIO->m.inner.field_0x18); + mRealShadowSize = mpHIO->m.inner.field_0x0C; + gravity = mpHIO->m.inner.field_0x04; + mExpressionMorfFrame = mpHIO->m.inner.field_0x6C; + mMorfFrames = mpHIO->m.inner.field_0x44; mActionFunc = NULL; if (mpMatAnm[0] != NULL) { mpMatAnm[0]->initialize(); @@ -346,19 +375,19 @@ void daPeru_c::setParam() { if (mType == 0 && !daNpcT_chkEvtBit(0x127)) { attention_info.flags = 0; } - attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(daPeru_Param_c::m.field_0x48[2], daPeru_Param_c::m.field_0x48[3]); + attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(mpHIO->m.inner.field_0x4C, mpHIO->m.inner.field_0x4E); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[0]; - attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(daPeru_Param_c::m.field_0x48[0], daPeru_Param_c::m.field_0x48[1]); - scale.setall(daPeru_Param_c::m.field_0x00[2]); - mCcStts.SetWeight(daPeru_Param_c::m.field_0x00[4]); - mCylH = daPeru_Param_c::m.field_0x00[5]; - mWallR = daPeru_Param_c::m.field_0x00[7]; + attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(mpHIO->m.inner.field_0x48, mpHIO->m.inner.field_0x4A); + scale.setall(mpHIO->m.inner.field_0x08); + mCcStts.SetWeight(mpHIO->m.inner.field_0x10); + mCylH = mpHIO->m.inner.field_0x14; + mWallR = mpHIO->m.inner.field_0x1C; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daPeru_Param_c::m.field_0x00[6]); - mRealShadowSize = daPeru_Param_c::m.field_0x00[3]; - gravity = daPeru_Param_c::m.field_0x00[1]; - mExpressionMorfFrame = daPeru_Param_c::m.field_0x64[2]; - mMorfFrames = daPeru_Param_c::m.field_0x00[17]; + mAcchCir.SetWallH(mpHIO->m.inner.field_0x18); + mRealShadowSize = mpHIO->m.inner.field_0x0C; + gravity = mpHIO->m.inner.field_0x04; + mExpressionMorfFrame = mpHIO->m.inner.field_0x6C; + mMorfFrames = mpHIO->m.inner.field_0x44; } void daPeru_c::setAfterTalkMotion() { @@ -418,11 +447,11 @@ void daPeru_c::setAttnPos() { f32 dVar9 = cM_s2rad(mCurAngle.y - field_0xd7e.y); mJntAnm.setParam( this, mpMorf[0]->getModel(), &acStack_3c, getBackboneJointNo(), getNeckJointNo(), - getHeadJointNo(), daPeru_Param_c::m.field_0x00[9], daPeru_Param_c::m.field_0x00[8], - daPeru_Param_c::m.field_0x00[11], daPeru_Param_c::m.field_0x00[10], - daPeru_Param_c::m.field_0x00[13], daPeru_Param_c::m.field_0x00[12], - daPeru_Param_c::m.field_0x00[15], daPeru_Param_c::m.field_0x00[14], - daPeru_Param_c::m.field_0x00[16], dVar9, NULL); + getHeadJointNo(), mpHIO->m.inner.field_0x24, mpHIO->m.inner.field_0x20, + mpHIO->m.inner.field_0x2C, mpHIO->m.inner.field_0x28, + mpHIO->m.inner.field_0x34, mpHIO->m.inner.field_0x30, + mpHIO->m.inner.field_0x3C, mpHIO->m.inner.field_0x38, + mpHIO->m.inner.field_0x40, dVar9, NULL); mJntAnm.calcJntRad(0.2f, 1.0f, dVar9); setMtx(); mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getHeadJointNo())); @@ -430,7 +459,7 @@ void daPeru_c::setAttnPos() { mJntAnm.setEyeAngleX(eyePos, 1.0f, 0); mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, 0, 1.0f, 0); - cXyz cStack_48(0.0f, daPeru_Param_c::m.field_0x00[0], 30.0f); + cXyz cStack_48(0.0f, mpHIO->m.inner.field_0x00, 30.0f); mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getBaseTRMtx()); mDoMtx_stack_c::multVec(&cStack_48, &attention_info.position); } @@ -502,7 +531,7 @@ int daPeru_c::wait(int param_0) { if (!mStagger.checkStagger()) { if (mPlayerActorMngr.getActorP() != NULL && !mTwilight) { mJntAnm.lookNone(0); - if (chkActorInSight(mPlayerActorMngr.getActorP(), daPeru_Param_c::m.field_0x50[0], + if (chkActorInSight(mPlayerActorMngr.getActorP(), mpHIO->m.inner.field_0x50, mCurAngle.y)) { mJntAnm.lookPlayer(0); @@ -904,8 +933,6 @@ int daPeru_c::cutAppear(int param_1) { return _cutAppear_Main(*pCutId); } -static daPeru_Param_c l_HIO; - int daPeru_c::_cutAppear_Init(int const& param_1) { switch(param_1) { case 10: diff --git a/src/d/actor/d_a_set_bgobj.cpp b/src/d/actor/d_a_set_bgobj.cpp index f072a3f6a9..6beae751cd 100644 --- a/src/d/actor/d_a_set_bgobj.cpp +++ b/src/d/actor/d_a_set_bgobj.cpp @@ -6,7 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_set_bgobj.h" -#include +#include #include "f_op/f_op_actor_mng.h" static const char l_specName[] = "spec.dat"; diff --git a/src/d/actor/d_a_tag_camera.cpp b/src/d/actor/d_a_tag_camera.cpp index ee95c98107..f1b34e8084 100644 --- a/src/d/actor/d_a_tag_camera.cpp +++ b/src/d/actor/d_a_tag_camera.cpp @@ -1,7 +1,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_tag_camera.h" -#include +#include #include "d/actor/d_a_alink.h" #include "d/d_com_inf_game.h" #include "d/actor/d_a_horse.h" diff --git a/src/d/actor/d_a_tag_chkpoint.cpp b/src/d/actor/d_a_tag_chkpoint.cpp index 06f2a51779..04ca0a80ab 100644 --- a/src/d/actor/d_a_tag_chkpoint.cpp +++ b/src/d/actor/d_a_tag_chkpoint.cpp @@ -6,7 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_tag_chkpoint.h" -#include +#include #include "d/actor/d_a_player.h" int daTag_Chk_c::execute() { diff --git a/src/d/actor/d_a_tag_firewall.cpp b/src/d/actor/d_a_tag_firewall.cpp index fa6470cdda..c9917cc79f 100644 --- a/src/d/actor/d_a_tag_firewall.cpp +++ b/src/d/actor/d_a_tag_firewall.cpp @@ -6,7 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_tag_firewall.h" -#include +#include #include "d/actor/d_a_player.h" #include "d/d_com_inf_game.h" #include "d/d_bomb.h" diff --git a/src/d/actor/d_a_tag_lantern.cpp b/src/d/actor/d_a_tag_lantern.cpp index 9960d5886c..30f269b70f 100644 --- a/src/d/actor/d_a_tag_lantern.cpp +++ b/src/d/actor/d_a_tag_lantern.cpp @@ -8,7 +8,29 @@ #include "d/actor/d_a_tag_lantern.h" #include "d/d_procname.h" -daTag_Lantern_c::~daTag_Lantern_c() {} +static TAG_LANTERN_HIO_CLASS l_HIO; + +#if DEBUG +daTag_Lantern_HIO_c::daTag_Lantern_HIO_c() { + m = daTag_Lantern_Param_c::m; +} + +void daTag_Lantern_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // NONMATCHING +} + +void daTag_Lantern_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} +#endif + +daTag_Lantern_c::~daTag_Lantern_c() { +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif +} int daTag_Lantern_c::create() { fopAcM_ct(this, daTag_Lantern_c); @@ -100,8 +122,6 @@ static int daTag_Lantern_IsDelete(void* i_this) { return 1; } -static daTag_Lantern_Param_c l_HIO; - static actor_method_class daTag_Lantern_MethodTable = { (process_method_func)daTag_Lantern_Create, (process_method_func)daTag_Lantern_Delete, (process_method_func)daTag_Lantern_Execute, (process_method_func)daTag_Lantern_IsDelete, diff --git a/src/d/actor/d_a_tag_mhint.cpp b/src/d/actor/d_a_tag_mhint.cpp index 1844169355..3352b1e9ab 100644 --- a/src/d/actor/d_a_tag_mhint.cpp +++ b/src/d/actor/d_a_tag_mhint.cpp @@ -55,8 +55,8 @@ int daTagMhint_c::create() { ->m_entries[field_0x56d] .m_arrow_idx]; - eyePos.set(arrow_data_p->position.x, arrow_data_p->position.y, - arrow_data_p->position.z); + eyePos.set(arrow_data_p->posX, arrow_data_p->posY, + arrow_data_p->posZ); attention_info.position = eyePos; } diff --git a/src/d/actor/d_a_tag_mmsg.cpp b/src/d/actor/d_a_tag_mmsg.cpp index 05f86f48cc..ef52c329b4 100644 --- a/src/d/actor/d_a_tag_mmsg.cpp +++ b/src/d/actor/d_a_tag_mmsg.cpp @@ -25,11 +25,10 @@ int daTagMmsg_c::create() { if (!checkNoAttention()) { s32 roomNo = fopAcM_GetRoomNo(this); - cXyz* tmp = + stage_arrow_data_class* arrowData = &dComIfGp_getRoomArrow(roomNo) - ->m_entries[dComIfGp_getRoomCamera(roomNo)->m_entries[mAttention].m_arrow_idx] - .position; - eyePos.set(tmp->x, tmp->y, tmp->z); + ->m_entries[dComIfGp_getRoomCamera(roomNo)->m_entries[mAttention].m_arrow_idx]; + eyePos.set(arrowData->posX, arrowData->posY, arrowData->posZ); attention_info.position = eyePos; } diff --git a/src/d/actor/d_a_tag_mstop.cpp b/src/d/actor/d_a_tag_mstop.cpp index 83f41a4678..c58e6b0935 100644 --- a/src/d/actor/d_a_tag_mstop.cpp +++ b/src/d/actor/d_a_tag_mstop.cpp @@ -55,11 +55,10 @@ int daTagMstop_c::create() { if (!checkNoAttention()) { s32 room = fopAcM_GetRoomNo(this); - cXyz* pos = &dComIfGp_getRoomArrow(room) - ->m_entries[dComIfGp_getRoomCamera(room)->m_entries[idx].m_arrow_idx] - .position; + stage_arrow_data_class* arrowData = &dComIfGp_getRoomArrow(room) + ->m_entries[dComIfGp_getRoomCamera(room)->m_entries[idx].m_arrow_idx]; - eyePos.set(pos->x, pos->y, pos->z); + eyePos.set(arrowData->posX, arrowData->posY, arrowData->posZ); attention_info.position = eyePos; } diff --git a/src/d/actor/d_a_tag_sppath.cpp b/src/d/actor/d_a_tag_sppath.cpp index e736d8d82e..c703b5ce68 100644 --- a/src/d/actor/d_a_tag_sppath.cpp +++ b/src/d/actor/d_a_tag_sppath.cpp @@ -7,7 +7,7 @@ #include "d/actor/d_a_tag_sppath.h" #include "d/actor/d_a_player.h" -#include +#include static dCcD_SrcCyl l_cylSrc = { { diff --git a/src/d/actor/d_a_tbox.cpp b/src/d/actor/d_a_tbox.cpp index 117c9b02ba..47e5803a3b 100644 --- a/src/d/actor/d_a_tbox.cpp +++ b/src/d/actor/d_a_tbox.cpp @@ -9,7 +9,7 @@ #include "f_op/f_op_camera_mng.h" #include "SSystem/SComponent/c_math.h" #include "Z2AudioLib/Z2Instances.h" -#include +#include static const f32 l_cull_size_box[6] = { -150.0f, -10.0f, -150.0f, 150.0f, 300.0f, 100.0f }; @@ -1498,8 +1498,8 @@ void daTbox_c::settingDropDemoCamera() { cXyz spA0; cXyz spAC; - spA0.x = stage_arrow_data->position.x; - spA0.z = stage_arrow_data->position.z; + spA0.x = stage_arrow_data->posX; + spA0.z = stage_arrow_data->posZ; spAC.x = home.pos.x; spAC.z = home.pos.z; f32 var_f30 = spA0.abs(spAC); @@ -1510,16 +1510,16 @@ void daTbox_c::settingDropDemoCamera() { s16 angle; getDropSAngle(&angle); - spB8.x = stage_arrow_data->position.x; + spB8.x = stage_arrow_data->posX; spB8.y = 0.0f; - spB8.z = stage_arrow_data->position.z; + spB8.z = stage_arrow_data->posZ; spB8 -= home.pos; Mtx mtx; MTXRotAxisRad(mtx, &spC4, cM_s2rad(angle)); mDoMtx_multVec(mtx, &spB8, &spB8); spB8 += home.pos; - spB8.y = stage_arrow_data->position.y; + spB8.y = stage_arrow_data->posY; cXyz cam_eye; cXyz cam_center; @@ -1527,10 +1527,10 @@ void daTbox_c::settingDropDemoCamera() { cam_eye = spB8; cam_center = home.pos; - f32 var_f29 = cM_ssin(stage_arrow_data->angle.x); - f32 var_f28 = cM_scos(stage_arrow_data->angle.x); + f32 var_f29 = cM_ssin(stage_arrow_data->angleX); + f32 var_f28 = cM_scos(stage_arrow_data->angleX); f32 dist = var_f30 * (var_f29 / var_f28); - if (stage_arrow_data->angle.x > 0) { + if (stage_arrow_data->angleX > 0) { dist = -dist; } diff --git a/src/d/d_bg_s.cpp b/src/d/d_bg_s.cpp index 256f343ca3..190e2badc9 100644 --- a/src/d/d_bg_s.cpp +++ b/src/d/d_bg_s.cpp @@ -789,6 +789,17 @@ fopAc_ac_c* dBgS::PushPullCallBack(cBgS_PolyInfo const& param_0, fopAc_ac_c* i_p i_label); } +#if DEBUG + +void dBgS::DrawPoly(cBgS_PolyInfo const& polyInfo, GXColor const& color) { + dBgW_Base* pdBgw = dComIfG_Bgsp().GetBgWBasePointer(polyInfo); + if (pdBgw != NULL) { + pdBgw->DrawPoly(polyInfo, color); + } +} + +#endif + bool dBgS_CheckBWallPoly(cBgS_PolyInfo const& poly) { cM3dGPla pla; diff --git a/src/d/d_bg_w_kcol.cpp b/src/d/d_bg_w_kcol.cpp index 8c39fa39aa..76d7c81511 100644 --- a/src/d/d_bg_w_kcol.cpp +++ b/src/d/d_bg_w_kcol.cpp @@ -6,7 +6,7 @@ #include "d/d_bg_s_cap_poly.h" #include -#include +#include #include "SSystem/SComponent/c_bg_s_shdw_draw.h" #include "SSystem/SComponent/c_m2d.h" diff --git a/src/d/d_cam_param.cpp b/src/d/d_cam_param.cpp index d6b383a007..77e62ac4bf 100644 --- a/src/d/d_cam_param.cpp +++ b/src/d/d_cam_param.cpp @@ -7,49 +7,87 @@ #include "d/d_cam_param.h" +#include "JSystem/JHostIO/JORFile.h" +#include "JSystem/JHostIO/JORServer.h" #include "SSystem/SComponent/c_math.h" #include "d/actor/d_a_player.h" #include "d/d_camera.h" #include "d/d_com_inf_game.h" +enum CameraFlags { + CAM_PARAM_GAPX, CAM_PARAM_GAPZ, + CAM_PARAM_HBAS, CAM_PARAM_HMIN, CAM_PARAM_HMAX, + CAM_PARAM_CDST, CAM_PARAM_CANG, + CAM_PARAM_RBAS, CAM_PARAM_RMIN, CAM_PARAM_RMAX, CAM_PARAM_RNAR, CAM_PARAM_RFAR, + CAM_PARAM_VBAS, CAM_PARAM_VMIN, CAM_PARAM_VMAX, CAM_PARAM_VNAR, CAM_PARAM_VFAR, + CAM_PARAM_FBAS, CAM_PARAM_FMIN, CAM_PARAM_FMAX, CAM_PARAM_FNAR, CAM_PARAM_FFAR, + CAM_PARAM_UTRN, CAM_PARAM_UNAR, CAM_PARAM_UFAR, + CAM_PARAM_HNAR, CAM_PARAM_HFAR, + CAM_PARAM_USLW, +}; + +#if DEBUG +namespace camera_names { + const char* engine_name[] = { + "LET", "CHASE", "LOCKON", "TALK", + "SUBJECT", "FIXEDPOS", "FIXEDFRM", "TOWER", + "RIDE", "MANUAL", "EVENT", "HOOKSHOT", + "COLOSSEUM", "OBSERVE", "MAGNE", "RAIL", + "PARARAIL", "ONESIDE", "TEST1", "TEST2", + }; + const char* mode_name[] = { + "NORMAL", "PARALLEL", "LOCKON", "TALK", + "SUBJECT", "ATTACK", "ATTACK2", "SHOOT", + "OBJSHOOT", "HOOKSHOT", "PUSHPULL", + }; + const char* param_name[] = { + "GAPX", "GAPZ", "HBAS", "HMIN", "HMAX", "CDST", "CANG", "RBAS", + "RMIN", "RMAX", "RNAR", "RFAR", "VBAS", "VMIN", "VMAX", "VNAR", + "VFAR", "FBAS", "FMIN", "FMAX", "FNAR", "FFAR", "UTRN", "UNAR", + "UFAR", "HNAR", "HFAR", "USLW", + }; + const char* flag_name[] = { + "BGCHECK", "BGCHKLIGHT", "BGCHECKOFF", "BUSHCHECK", + "COCHKOFF", "FWDCHECKH", "ROLLOFF", "HIGHOFF", + "DIRECTSTK", "USEMAPTOOL", "RZOOM", "WIDEUSE1", + "WIDEUSE2", "TARGETUSE", "FWDCHECK", + }; +} +#endif + f32 dCamMath::rationalBezierRatio(f32 param_0, f32 param_1) { - f64 var_f31; - f32 var_f1 = param_0; + f64 sp68; - if (var_f1 >= 0.0f) { - var_f31 = 1.0; + if (param_0 >= 0.0f) { + sp68 = 1.0; } else { - var_f31 = -1.0; - var_f1 = -var_f1; + sp68 = -1.0; + param_0 = -param_0; } - f64 temp_f2 = 2.0 * var_f1; - f64 temp_f2_2 = ((temp_f2 * param_1) - temp_f2) - (2.0 * param_1); - f64 temp_f29 = -temp_f2_2; - f64 temp_f28 = temp_f29 - 1.0; - f64 var_f1_2 = (temp_f2_2 * temp_f2_2) - (4.0 * temp_f28 * var_f1); + f64 sp60 = 2.0 * param_0; + f64 sp58 = 2.0 * param_1; + f64 sp50 = sp60 * param_1; + f64 var_f31 = sp50 - sp60 - sp58; + f64 sp48 = -var_f31 - 1.0; + f64 sp40 = param_0; + f64 sp38 = (var_f31 * var_f31) - (4.0 * sp48 * sp40); - if (var_f1_2 > 0.0) { - var_f1_2 = sqrt(var_f1_2); - } else { - var_f1_2 = 0.0; - } + f64 sp30 = -var_f31 - (sp38 > 0.0 ? sqrt(sp38) : 0.0); + f64 sp28 = sp48 * 2.0; + if (sp28 > 1e-07 || sp28 < -1e-07) { + f64 var_f30 = sp30 / sp28; + f64 sp20 = var_f30 * var_f30; + f64 sp18 = 1.0 - var_f30; + f64 sp10 = sp20 + ((sp18 * sp18) + (param_1 * (2.0 * sp18 * var_f30))); - f64 temp = temp_f29 - var_f1_2; - f64 temp_f2_3 = temp_f28 * 2.0; - if (temp_f2_3 > 1e-07 || temp_f2_3 < -1e-07) { - f64 temp_f2_4 = temp / temp_f2_3; - f64 temp_f3 = temp_f2_4 * temp_f2_4; - f64 temp_f4 = 1.0 - temp_f2_4; - f64 temp_f1 = temp_f3 + ((temp_f4 * temp_f4) + (param_1 * (2.0 * temp_f4 * temp_f2_4))); - - if (temp_f1 > 1.0000000116860974e-07) { - return var_f31 * (temp_f3 / temp_f1); + if (sp10 > 1.0000000116860974e-07) { + return sp68 * (sp20 / sp10); } return 0.0f; + } else { + return 0.0f; } - - return 0.0f; } static f32 dummy_literal1() { @@ -59,16 +97,14 @@ static f32 dummy_literal1() { f32 dCamMath::zoomFovy(f32 param_0, f32 param_1) { cDegree deg(param_0); - f32 radian = cM_atan2f(deg.Sin(), param_1 * deg.Cos()); - return cAngle::r2d(radian); + return cAngle::r2d(cM_atan2f(deg.Sin(), param_1 * deg.Cos())); } cXyz dCamMath::xyzRotateX(cXyz& i_xyz, cSAngle i_angle) { Mtx m; cXyz rot_xyz; - s16 angle = i_angle.Val(); - mDoMtx_XrotS(m, angle); + cMtx_XrotS(m, i_angle.Val()); MTXMultVec(m, &i_xyz, &rot_xyz); return rot_xyz; } @@ -77,8 +113,7 @@ cXyz dCamMath::xyzRotateY(cXyz& i_xyz, cSAngle i_angle) { Mtx m; cXyz rot_xyz; - s16 angle = i_angle.Val(); - mDoMtx_YrotS(m, angle); + cMtx_YrotS(m, i_angle.Val()); MTXMultVec(m, &i_xyz, &rot_xyz); return rot_xyz; } @@ -94,9 +129,41 @@ dCstick_c::dCstick_c() { mThresholdLow = 0.2f; mThresholdHigh = 0.95f; mInputSpeed = 6; +#if DEBUG + mDisplayPosX = 170; + mDisplayPosY = 40; +#endif } +#if DEBUG +void dCstick_c::genMessage(JORMContext* ctx) { + // "- Switch" + ctx->genLabel("- スイッチ", 0, 0, NULL, -1, -1, 0x200); + // " Threshold: Low" + ctx->genSlider(" しきい値 低", &mThresholdLow, 0.0f, 1.0f, 0, NULL, -1, -1, 0x200); + // " High" + ctx->genSlider(" 高", &mThresholdHigh, 0.0f, 1.0f, 0, 0, -1, -1, 0x200); + // " Input speed" + ctx->genSlider(" 入力スピード", &mInputSpeed, 0x0, 0x50, 0, 0, -1); + + ctx->genLabel("-", 0, 0, NULL, -1, -1, 0x200); + // " Debug display" + ctx->genCheckBox(" デバッグ表示", &mIsDebugDisplay, -0x8000, 0, 0, -1, -1); + // " Display position X" + ctx->genSlider(" 表示位置 X", &mDisplayPosX, 0x0, 0x280, 0, 0, -1); + // " Y" + ctx->genSlider(" Y", &mDisplayPosY, 0x0, 0x1e0, 0, 0, -1); + + ctx->genLabel("-", 0, 0, NULL, -1, -1, 0x200); +} +#endif + bool dCstick_c::Shift(u32 param_0) { + UNUSED(param_0); +#if DEBUG + CheckFlag(0x8000); +#endif + return false; } @@ -124,11 +191,68 @@ dCamBGChk_c::dCamBGChk_c() { mCornerAngleMax = 120.0f; } +#if DEBUG +void dCamBGChk_c::genMessage(JORMContext* ctx) { + ctx->genLabel("-", 0, 0, 0, -1, -1, 0x200); + // "- Floor check" + ctx->genLabel("- 床チェック", 0, 0, 0, -1, -1, 0x200); + // " Margin" + ctx->genSlider(" マージン", &mFloorMargin, 0.0f, 1000.0f, 0, 0, -1, -1, 0x200); + ctx->genLabel("-", 0, 0, 0, -1, -1, 0x200); + // "- Forward check" + ctx->genLabel("- 前方チェック", 0, 0, 0, -1, -1, 0x200); + // " [0]Angle" + ctx->genSlider(" [0]角度", &mChkInfo[0].mChkAngle, 1.0f, 90.0f, 0, 0, -1, -1, 0x200); + // " [0]Length (height X)" + ctx->genSlider(" [0]長さ(身長X)", &mChkInfo[0].mDistance, 1.0f, 25.0f, 0, 0, -1, -1, 0x200); + // " [0]Weight+" + ctx->genSlider(" [0]ウエイト+", &mChkInfo[0].mWeightH, 0.0f, 1.0f, 0, 0, -1, -1, 0x200); + // " [0]Weight-" + ctx->genSlider(" [0]ウエイト-", &mChkInfo[0].mWeightL, 0.0f, 1.0f, 0, 0, -1, -1, 0x200); + // " [1]Angle" + ctx->genSlider(" [1]角度", &mChkInfo[1].mChkAngle, 1.0f, 90.0f, 0, 0, -1, -1, 0x200); + // " [1]Length (height X)" + ctx->genSlider(" [1]長さ(身長X)", &mChkInfo[1].mDistance, 1.0f, 25.0f, 0, 0, -1, -1, 0x200); + // " [1]Weight+" + ctx->genSlider(" [1]ウエイト+", &mChkInfo[1].mWeightH, 0.0f, 1.0f, 0, 0, -1, -1, 0x200); + // " [1]Weight-" + ctx->genSlider(" [1]ウエイト-", &mChkInfo[1].mWeightL, 0.0f, 1.0f, 0, 0, -1, -1, 0x200); + // " Margin" + ctx->genSlider(" マージン", &mFwdBackMargin, 0.0f, 1000.0f, 0, 0, -1, -1, 0x200); + // " Cusion" + ctx->genSlider(" クッション", &mFwdCushion, 0.0f, 1.0f, 0, 0, -1, -1, 0x200); + ctx->genLabel("-", 0, 0, 0, -1, -1, 0x200); + // "- Per camera" + ctx->genLabel("- カメラあたり", 0, 0, 0, -1, -1, 0x200); + // " Margin" + ctx->genSlider(" マージン", &mGazeBackMargin, 0.0f, 1000.0f, 0, 0, -1, -1, 0x200); + // BUG: second parameter should be &mCornerAngleMax + // " Corner wall detection angle" + ctx->genSlider(" 角壁判別角度", &mCornerCushion, 0.0f, 180.0f, 0, 0, -1, -1, 0x200); + // " Corner cushion" + ctx->genSlider(" 角クッション", &mCornerCushion, 0.0f, 1.0f, 0, 0, -1, -1, 0x200); + // " Wall cushion" + ctx->genSlider(" 壁クッション", &mWallCushion, 0.0f, 1.0f, 0, 0, -1, -1, 0x200); + // " Wall up distance" + ctx->genSlider(" 壁上がり距離", &mWallUpDistance, 0.0f, 1000.0f, 0, 0, -1, -1, 0x200); + // " Wall back cushion" + ctx->genSlider(" 壁戻クッション", &mWallBackCushion, 0.0f, 1.0f, 0, 0, -1, -1, 0x200); + ctx->genLabel("-", 0, 0, 0, -1, -1, 0x200); +} +#endif + dCamParam_c::dCamParam_c(s32 i_styleID) { - u8* cam_data = (u8*)dComIfG_getObjectRes(dComIfGp_getCameraParamFileName(0), "camstyle.dat"); + const char* fileName = dComIfGp_getCameraParamFileName(0); + void* objRes = dComIfG_getObjectRes(fileName, "camstyle.dat"); + u8* cam_data = (u8*)objRes; mCamStyleData = (dCamStyleData::StyleData*)(cam_data + 8); mStyleNum = ((dCamStyleData*)cam_data)->mStyleNum; + +#if DEBUG + mpHIOChild = mDoHIO_createChild("カメラパラメタ", this); +#endif + Change(i_styleID); mMapToolFovy = 0xFF; @@ -137,12 +261,21 @@ dCamParam_c::dCamParam_c(s32 i_styleID) { mMapToolArg2 = -1; } -dCamParam_c::~dCamParam_c() {} +dCamParam_c::~dCamParam_c() { +#if DEBUG + mDoHIO_deleteChild(mpHIOChild); +#endif +} int dCamParam_c::Change(s32 i_styleID) { if (i_styleID >= 0 && i_styleID < mStyleNum) { mStyleID = i_styleID; mCurrentStyle = &mCamStyleData[mStyleID]; + +#if DEBUG + mDoHIO_updateChild(mpHIOChild); +#endif + return 1; } @@ -153,17 +286,263 @@ int dCamParam_c::Change(s32 i_styleID) { int dCamParam_c::SearchStyle(u32 param_0) { int styleID = -1; - - for (int i = 0; i < mStyleNum; i++) { + int i = 0; + while (i < mStyleNum) { if (param_0 == mCamStyleData[i].field_0x0) { styleID = i; break; } + i++; } return styleID; } +#if DEBUG +void dCamParam_c::genMessage(JORMContext* ctx) { + ctx->genSlider(" STYLE ID", &mStyleID, 0, mStyleNum, 0x40000000, NULL, 0xffff, 0xffff, 0x200, + 0x18); + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Origin C" + ctx->genLabel("- 原点C", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Front/back (GAPZ)" + ctx->genSlider(" 前後(GAPZ)", &mCurrentStyle->mParams[CAM_PARAM_GAPZ], -10000.0f, 10000.0f, 0, + NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Left/right (GAPX)" + ctx->genSlider(" 左右(GAPX)", &mCurrentStyle->mParams[CAM_PARAM_GAPX], -10000.0f, 10000.0f, 0, + NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Distance (CDST)" + ctx->genSlider(" 距離(CDST)", &mCurrentStyle->mParams[CAM_PARAM_CDST], -1.0f, 1.0f, 0, NULL, + 0xffff, 0xffff, 0x200, 0x18); + // "Angle (CANG)" + ctx->genSlider(" 角度(CANG)", &mCurrentStyle->mParams[CAM_PARAM_CANG], -1.0f, 1.0f, 0, NULL, + 0xffff, 0xffff, 0x200, 0x18); + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "- Origin point high" + ctx->genLabel("- 原点高", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Standard (HBAS)" + ctx->genSlider(" 標準(HBAS)", &mCurrentStyle->mParams[CAM_PARAM_HBAS], -10000.0f, 10000.0f, 0, + NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Minimum (HMIN)" + ctx->genSlider(" 最小(HMIN)", &mCurrentStyle->mParams[CAM_PARAM_HMIN], -10000.0f, 10000.0f, 0, + NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Maximum (HMAX)" + ctx->genSlider(" 最大(HMAX)", &mCurrentStyle->mParams[CAM_PARAM_HMAX], -10000.0f, 10000.0f, 0, + NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Nearest (HNAR)" + ctx->genSlider(" 最近(HNAR)", &mCurrentStyle->mParams[CAM_PARAM_HNAR], -10000.0f, 10000.0f, 0, + NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Farthest (HFAR)" + ctx->genSlider(" 最遠(HFAR)", &mCurrentStyle->mParams[CAM_PARAM_HFAR], -10000.0f, 10000.0f, 0, + NULL, 0xffff, 0xffff, 0x200, 0x18); + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "- Distance" + ctx->genLabel("- 距離", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider(" 標準(RBAS)", &mCurrentStyle->mParams[CAM_PARAM_RBAS], -10000.0f, 10000.0f, 0, + NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider(" 最小(RMIN)", &mCurrentStyle->mParams[CAM_PARAM_RMIN], -10000.0f, 10000.0f, 0, + NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider(" 最大(RMAX)", &mCurrentStyle->mParams[CAM_PARAM_RMAX], -10000.0f, 10000.0f, 0, + NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider(" 最近(RNAR)", &mCurrentStyle->mParams[CAM_PARAM_RNAR], -10000.0f, 10000.0f, 0, + NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider(" 最遠(RFAR)", &mCurrentStyle->mParams[CAM_PARAM_RFAR], -10000.0f, 10000.0f, 0, + NULL, 0xffff, 0xffff, 0x200, 0x18); + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genLabel("- 縦角", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Standard (VBAS)" + ctx->genSlider(" 標準(VBAS)", &mCurrentStyle->mParams[CAM_PARAM_VBAS], -180.0f, 180.0f, 0, + NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Minimuum (VMIN)" + ctx->genSlider(" 最小(VMIN)", &mCurrentStyle->mParams[CAM_PARAM_VMIN], -180.0f, 180.0f, 0, + NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Maximum (VMAX)" + ctx->genSlider(" 最大(VMAX)", &mCurrentStyle->mParams[CAM_PARAM_VMAX], -180.0f, 180.0f, 0, + NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Nearest (VNAR)" + ctx->genSlider(" 最近(VNAR)", &mCurrentStyle->mParams[CAM_PARAM_VNAR], -180.0f, 180.0f, 0, + NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Farthest (VFAR)" + ctx->genSlider(" 最遠(VFAR)", &mCurrentStyle->mParams[CAM_PARAM_VFAR], -180.0f, 180.0f, 0, + NULL, 0xffff, 0xffff, 0x200, 0x18); + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "- Horizontal angle" + ctx->genLabel("- 横角", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Rotation speed (UTRN)" + ctx->genSlider(" 回速(UTRN)", &mCurrentStyle->mParams[CAM_PARAM_UTRN], -1.0f, 1.0f, 0, NULL, + 0xffff, 0xffff, 0x200, 0x18); + // "Lap behind (USLW)" + ctx->genSlider(" 回遅(USLW)", &mCurrentStyle->mParams[CAM_PARAM_USLW], -1.0f, 1.0f, 0, NULL, + 0xffff, 0xffff, 0x200, 0x18); + // "Nearest (UNAR)" + ctx->genSlider(" 最近(UNAR)", &mCurrentStyle->mParams[CAM_PARAM_UNAR], -180.0f, 180.0f, 0, + NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Farthest (UFAR)" + ctx->genSlider(" 最遠(UFAR)", &mCurrentStyle->mParams[CAM_PARAM_UFAR], -180.0f, 180.0f, 0, + NULL, 0xffff, 0xffff, 0x200, 0x18); + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "- Field of view" + ctx->genLabel("- 画角", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Standard (FBAS)" + ctx->genSlider(" 標準(FBAS)", &mCurrentStyle->mParams[CAM_PARAM_FBAS], -30.0f, 90.0f, 0, NULL, + 0xffff, 0xffff, 0x200, 0x18); + // "Minimum (FMIN)" + ctx->genSlider(" 最小(FMIN)", &mCurrentStyle->mParams[CAM_PARAM_FMIN], -30.0f, 90.0f, 0, NULL, + 0xffff, 0xffff, 0x200, 0x18); + // "Maximum (FMAX)" + ctx->genSlider(" 最大(FMAX)", &mCurrentStyle->mParams[CAM_PARAM_FMAX], -30.0f, 90.0f, 0, NULL, + 0xffff, 0xffff, 0x200, 0x18); + // "Nearest (FNAR)" + ctx->genSlider(" 最近(FNAR)", &mCurrentStyle->mParams[CAM_PARAM_FNAR], -30.0f, 90.0f, 0, NULL, + 0xffff, 0xffff, 0x200, 0x18); + // "Farthest (FFAR)" + ctx->genSlider(" 最遠(FFAR)", &mCurrentStyle->mParams[CAM_PARAM_FFAR], -30.0f, 90.0f, 0, NULL, + 0xffff, 0xffff, 0x200, 0x18); + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + + // "- Flag" + ctx->genLabel("- フラグ", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "BG check (BGCHECK)" + ctx->genCheckBox(" BGチェック(BGCHECK)", &mCurrentStyle->mFlags, 0x1, 0, NULL, 0xffff, + 0xffff, 0x200, 0x18); + // "BG check light (BGCHKLIGHT)" + ctx->genCheckBox(" BGチェック軽(BGCHKLIGHT)", &mCurrentStyle->mFlags, 0x2, 0, NULL, 0xffff, + 0xffff, 0x200, 0x18); + // "Grass check (BUSHCHECK)" + ctx->genCheckBox(" 草チェック(BUSHCHECK)", &mCurrentStyle->mFlags, 0x8, 0, NULL, 0xffff, + 0xffff, 0x200, 0x18); + // "Front check (FWDCHECK)" + ctx->genCheckBox(" 前方チェック(FWDCHECK)", &mCurrentStyle->mFlags, 0x4000, 0, NULL, 0xffff, + 0xffff, 0x200, 0x18); + // "CO check prohibited (COCHKOFF)" + ctx->genCheckBox(" COチェック禁止(COCHKOFF)", &mCurrentStyle->mFlags, 0x10, 0, NULL, + 0xffff, 0xffff, 0x200, 0x18); + // "R button zoom (RZOOM)" + ctx->genCheckBox(" Rボタンズーム(RZOOM)", &mCurrentStyle->mFlags, 0x400, 0, NULL, 0xffff, + 0xffff, 0x200, 0x18); + // "Stick direct value (DIRECTSTK)" + ctx->genCheckBox(" スティック直値(DIRECTSTK)", &mCurrentStyle->mFlags, 0x100, 0, NULL, + 0xffff, 0xffff, 0x200, 0x18); + // "Use map tool (USEMAPTOOL)" + ctx->genCheckBox(" マップツール使用(USEMAPTOOL)", &mCurrentStyle->mFlags, 0x200, 0, NULL, + 0xffff, 0xffff, 0x200, 0x18); + // "No BG check (BGCHECKOFF)" + ctx->genCheckBox(" BGチェック無(BGCHECKOFF)", &mCurrentStyle->mFlags, 0x4, 0, NULL, 0xffff, + 0xffff, 0x200, 0x18); + // "Forward check distance (FWDCHECKH)" + ctx->genCheckBox(" 前方チェック遠(FWDCHECKH)", &mCurrentStyle->mFlags, 0x20, 0, NULL, 0xffff, + 0xffff, 0x200, 0x18); + // "C-axis rotation prohibited (ROLLOFF)" + ctx->genCheckBox(" C回転禁止(ROLLOFF)", &mCurrentStyle->mFlags, 0x40, 0, NULL, 0xffff, + 0xffff, 0x200, 0x18); + // "C pulling prohibited (HIGHOFF)" + ctx->genCheckBox(" C引き禁止(HIGHOFF)", &mCurrentStyle->mFlags, 0x80, 0, NULL, 0xffff, + 0xffff, 0x200, 0x18); + // "General purpose 1 (WIDEUSE1)" + ctx->genCheckBox(" 汎用1(WIDEUSE1)", &mCurrentStyle->mFlags, 0x800, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + // "General purpose 2 (WIDEUSE2)" + ctx->genCheckBox(" 汎用2(WIDEUSE2)", &mCurrentStyle->mFlags, 0x1000, 0, NULL, 0xffff, + 0xffff, 0x200, 0x18); + // "Target specification (TARGETUSE)" + ctx->genCheckBox(" 対象指定(TARGETUSE)", &mCurrentStyle->mFlags, 0x2000, 0, NULL, 0xffff, + 0xffff, 0x200, 0x18); + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "- Map tools" + ctx->genLabel("- マップツール", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Field of view" + ctx->genSlider(" 画角 ", &mMapToolFovy, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Argument 0" + ctx->genSlider(" 引数0", &mMapToolArg0, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Argument 1" + ctx->genSlider(" 引数1", &mMapToolArg1, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Argument 2" + ctx->genSlider(" 引数2", &mMapToolArg2, 0, 0xffff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "- Output file" + ctx->genLabel("- ファイル出力", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Save" + ctx->genButton(" 保存 ", 0x12d, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); +} + +void dCamParam_c::listenPropertyEvent(const JORPropertyEvent* event) { + JORReflexible::listenPropertyEvent(event); + JORMContext* ctx = attachJORMContext(8); + switch ((int)event->id) { + case 0x12d: + writeParamXML(); + break; + } +} + +int dCamParam_c::writeParamXML() { + int i; + char styleName[5]; + styleName[0] = (mCurrentStyle->field_0x0 >> 24) & 0xff; + styleName[1] = (mCurrentStyle->field_0x0 >> 16) & 0xff; + styleName[2] = (mCurrentStyle->field_0x0 >> 8) & 0xff; + styleName[3] = (mCurrentStyle->field_0x0 >> 0) & 0xff; + styleName[4] = '\0'; + + OpenFile(); + PrintFile("\n"); + PrintFile(" \n"); + PrintFile("\n"); + CloseFile(); + return 1; +} + +void dCamParam_c::OpenFile() { + char fileSuffix[9]; + fileSuffix[0] = (mCurrentStyle->field_0x0 >> 24) & 0xff; + fileSuffix[1] = (mCurrentStyle->field_0x0 >> 16) & 0xff; + fileSuffix[2] = (mCurrentStyle->field_0x0 >> 8) & 0xff; + fileSuffix[3] = (mCurrentStyle->field_0x0 >> 0) & 0xff; + fileSuffix[4] = '.'; + fileSuffix[5] = 'x'; + fileSuffix[6] = 'c'; + fileSuffix[7] = 's'; + fileSuffix[8] = '\0'; + const char ext[] = "パラメタベースファイル(*.xcs)\0*.xcs\0その他のファイル(*.*)\0*.*\0"; + mFile.open(JORFile::EFlags_WRITE | JORFile::EFlags_UNK_0x4, ext, "xcs", NULL, fileSuffix); +} + +void dCamParam_c::PrintFile(char* i_fmt, ...) { + UNUSED(i_fmt); + char buf[0x100]; + va_list args; + va_start(args, i_fmt); + vsnprintf(buf, sizeof(buf), i_fmt, args); + va_end(args); + + mFile.writeData(buf, strlen(buf)); +} + +void dCamParam_c::CloseFile() { + mFile.close(); +} +#endif + static f32 dummy_literal2() { return 0.25f; } @@ -202,8 +581,8 @@ dCamSetup_c::dCamSetup_c() { mDebugFlags = 1; mFlags2 = 0x118; - mFlags2 |= 0x200; - mFlags2 |= 0x400; + mFlags2 |= (u16)0x200; + mFlags2 |= (u16)0x400; mChargeLatitude = 27.0f; mChargeTimer = 90; @@ -227,12 +606,28 @@ dCamSetup_c::dCamSetup_c() { mWindShakeFvy = 0.3f; mMapToolCamShortTimer = 60; mMapToolCamLongTimer = 120; - mDebugFlags |= 0x4800; +#if DEBUG + mDebugFlags |= (u16)0x3000; + mpHIOChild = mDoHIO_createChild("カメラ", this); +#endif +#if PLATFORM_WII + mDebugFlags |= (u16)0x7800; +#else + mDebugFlags |= (u16)0x4800; +#endif field_0x15c = 0.0f; field_0x160 = 0.0f; - mDebugFlags |= 0x800; + mDebugFlags |= (u16)0x800; +#if PLATFORM_GCN mWaitRollTimer = 120; +#else + mWaitRollTimer = 20; +#endif +#if PLATFORM_GCN mWaitRollSpeed = 0.02f; +#else + mWaitRollSpeed = 0.05f; +#endif field_0x16c = 1200.0f; field_0xe0 = 0.06f; field_0xec = 25; @@ -248,7 +643,11 @@ dCamSetup_c::dCamSetup_c() { dCam_getBody()->EventRecoverNotime(); } -dCamSetup_c::~dCamSetup_c() {} +dCamSetup_c::~dCamSetup_c() { +#if DEBUG + mDoHIO_deleteChild(mpHIOChild); +#endif +} bool dCamSetup_c::CheckLatitudeRange(s16* param_0) { s16 temp0 = cAngle::d2s(field_0x60); @@ -268,9 +667,244 @@ bool dCamSetup_c::CheckLatitudeRange(s16* param_0) { } f32 dCamSetup_c::PlayerHideDist() { - if (daPy_py_c::checkNowWolf()) { - return 120.0f; - } - - return mSubjLinkCullDist; + return daPy_py_c::checkNowWolf() ? 120.0f : mSubjLinkCullDist; } + +#if DEBUG +void dCamSetup_c::genMessage(JORMContext* ctx) { + int i; + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "- Debug" + ctx->genLabel("- デバッグ", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Camera information display" + ctx->genCheckBox(" カメラ情報表示", &mDebugFlags, 0x8000, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Event information display" + ctx->genCheckBox(" イベント情報表示", &mDebugFlags, 0x40, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Player 2D position" + ctx->genCheckBox(" プレイヤ2D位置", &mDebugFlags, 0x80, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Imaginary line" + ctx->genCheckBox(" イマジナリライン", &mDebugFlags, 0x100, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + // "Location information" + ctx->genCheckBox(" 位置情報", &mDebugFlags, 0x200, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Camera type switching" + ctx->startComboBox("カメラタイプ切替", &mForceType, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a); + // "Unused" + ctx->genComboBoxItem("未使用", -1); + for (i = 0; i < mTypeNum; i++) { + ctx->genComboBoxItem((char*)((int)mTypeTable + i * 0x44), i); + } + ctx->endComboBox(); + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "- Wolf special attack" + ctx->genLabel("- 狼特殊攻撃", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Return timer" + ctx->genSlider(" もどりタイマー", &mChargeTimer, 1, 3000, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "- Screensaver" + ctx->genLabel("- スクリーンセーバー", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Enabled" + ctx->genCheckBox(" 有効", &mFlags2, 0x800, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Initial wait time (s)" + ctx->genSlider(" 待ち時間最初(s)", &mScreensaverFirstWaitTimer, 1, 0xe10, 0, NULL, 0xffff, + 0xffff, 0x200, 0x18); + // "Wait time" + ctx->genSlider(" 待ち時間(s)", &mScreensaverWaitTimer, 1, 0xe10, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + // "Execution time" + ctx->genSlider(" 実行時間(s)", &mScreensaverExecTimer, 1, 0xe10, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "- Event" + ctx->genLabel("- イベント", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Conversation cut switching" + ctx->startComboBox("会話カット切替", &mModeSwitchType, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a); + // "Unused" + ctx->genComboBoxItem("未使用", -1); + // "00. Default" + ctx->genComboBoxItem("00.デフォルト", 0); + // "50. Default (no connection)" + ctx->genComboBoxItem("50.デフォルト繋ぎ無", 50); + // "11. Speaker to listener" + ctx->genComboBoxItem("11.話し手から聞き手", 11); + // "12. Listener to speaker" + ctx->genComboBoxItem("12.聞き手から話し手", 12); + // "13. Long shot" + ctx->genComboBoxItem("13.ロングショット", 13); + // "14. Listener's point of view" + ctx->genComboBoxItem("14.聞き手の主観", 14); + // "15. Speaker's point of view" + ctx->genComboBoxItem("15.話し手の主観", 15); + // "16. Close-up of listener" + ctx->genComboBoxItem("16.聞き手のアップ", 16); + // "17. Close-up of speaker" + ctx->genComboBoxItem("17.話し手のアップ", 17); + // "61. Close of of speaker B" + ctx->genComboBoxItem("61.話し手のアップB", 61); + // "18. From the side of the listener" + ctx->genComboBoxItem("18.聞き手の横から", 18); + // "19. From the side of the speaker" + ctx->genComboBoxItem("19.話し手の横から", 19); + // "20. Listener from the front" + ctx->genComboBoxItem("20.聞き手正面", 20); + // "21. Speaker from the front" + ctx->genComboBoxItem("21.話し手正面", 21); + // "62. Speaker from the front B" + ctx->genComboBoxItem("62.話し手正面B", 62); + // "22. Listener bust shot" + ctx->genComboBoxItem("22.聞き手胸像", 22); + // "23. Speaker bust shot" + ctx->genComboBoxItem("23.話し手胸像", 23); + // "63. Speaker bust shot B" + ctx->genComboBoxItem("63.話し手胸像B", 63); + // "24. Listener from the front diagonal" + ctx->genComboBoxItem("24.聞き手斜前", 24); + // "25. Speaker from the front diagonal" + ctx->genComboBoxItem("25.話し手斜前", 25); + // "26. Listener from the lower diagonal" + ctx->genComboBoxItem("26.聞き手斜下", 26); + // "27 Speaker from the lower diagonal" + ctx->genComboBoxItem("27.話し手斜下", 27); + // "28. From the side" + ctx->genComboBoxItem("28.横から", 28); + // "29. Large face from the front" + ctx->genComboBoxItem("29.でか顔正面", 29); + // "30. Speaker to listener (wide)" + ctx->genComboBoxItem("30.話し手から聞き手広", 30); + // "31. Listener to speaker (wide)" + ctx->genComboBoxItem("31.聞き手から話し手広", 31); + // "32. Long shot from the side" + ctx->genComboBoxItem("32.横からロング", 32); + // "33. Midna" + ctx->genComboBoxItem("33.ミドナ", 33); + // "34. Midna back" + ctx->genComboBoxItem("34.ミドナ後", 34); + // "35. Midna diagonal" + ctx->genComboBoxItem("35.ミドナ斜", 35); + // "36. Midna diagonal back" + ctx->genComboBoxItem("36.ミドナ斜後", 36); + // "37. Midna attention, long shot" + ctx->genComboBoxItem("37.ミドナ注目ロング", 37); + // "38. Over the shoulder shot" + ctx->genComboBoxItem("38.肩なめ", 38); + // "39. Listener from the front (upper body)" + ctx->genComboBoxItem("39.聞き手正面上", 39); + // "40. Speaker from the front (upper body)" + ctx->genComboBoxItem("40.話し手正面上", 40); + // "64: Speaker from the front (upper body) B" + ctx->genComboBoxItem("64.話し手正面上B", 64); + // "41. Listener from the waist up" + ctx->genComboBoxItem("41.聞き手腰上", 41); + // "42. Speaker from the waist up" + ctx->genComboBoxItem("42.話し手腰上", 42); + // "65. Speaker from the waist up B" + ctx->genComboBoxItem("65.話し手腰上B", 65); + ctx->endComboBox(); + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Short connection" + ctx->genSlider(" 短つなぎ", &mMapToolCamShortTimer, 0, 3000, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + // "Long connection" + ctx->genSlider(" 長つなぎ", &mMapToolCamLongTimer, 0, 3000, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "- Attention" + ctx->genLabel("- 注目", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Switching timer" + ctx->genSlider(" 切替タイマー", &mLockonChangeTimer, 0, 400, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + // "Switching cushion" + ctx->genSlider(" 切替クッション", &mLockonChangeCushion, 0.0f, 1.0f, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "- Subject" + ctx->genLabel("- 主観", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Distance to cull the link" + ctx->genSlider(" リンク消す距離", &mSubjLinkCullDist, 0.0f, 400.0f, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "- Manual" + ctx->genLabel("- マニュアル", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Start C threshold" + ctx->genSlider(" 開始Cしきい", &mManualStartCThreshold, 0.0f, 400.0f, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Trimming" + ctx->genLabel("- トリミング", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Vista" + ctx->genSlider(" ビスタ", &mTrimVistaHeight, 0.0f, 200.0f, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + // "Cinemascope" + ctx->genSlider(" シネスコ", &mTrimCineScopeHeight, 0.0f, 200.0f, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "- Fake angle system" + ctx->genLabel("- 嘘アングルシステム", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Value" + ctx->genSlider(" 値", &mFalseValue, 0.0f, 1.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Angle" + ctx->genSlider(" 角度", &mFalseAngle, 0.0f, 180.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "- Forced attention" + ctx->genLabel("- 強制注目", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Limit distance" + ctx->genSlider(" 限界距離", &mForceLockOffDist, 0.0, 100000.0, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + // "Timer" + ctx->genSlider(" タイマー", &mForceLockOffTimer, 0, 100000, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Object avoidance" + ctx->genLabel("- オブジェクト避け", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Valid" + ctx->genCheckBox(" 有効", &mFlags2, 0x400, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "- Windstorm shaking experiment" + ctx->genLabel("- 暴風揺れ実験", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Valid" + ctx->genCheckBox(" 有効", &mFlags2, 0x100, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Focal point" + ctx->genSlider(" 注視点", &mWindShakeCtr, 0.0, 100.0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Angle of view" + ctx->genSlider(" 画角", &mWindShakeFvy, 0.0, 10.0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "- After throwing" + ctx->genLabel("- 投げ後", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Angle" + ctx->genSlider(" 角度", &mThrowVAngle, -180.0f, 180.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Height (relative)" + ctx->genSlider(" 高さ(相対)", &mThrowCtrOffset, -180.0f, 180.0f, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + // "Timer" + ctx->genSlider(" タイマー", &mThrowTimer, 1, 3000, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Cushion" + ctx->genSlider(" クッション", &mThrowCushion, 0.0f, 1.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "- Drawing settings" + ctx->genLabel("- 描画設定", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // "Valid" + ctx->genCheckBox(" 有効", &mDebugFlags, 0x400, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider(" near", &mDrawNear, 0.0f, 1000000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider(" far", &mDrawFar, 0.0f, 1000000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + + ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); +} +#endif diff --git a/src/d/d_camera.cpp b/src/d/d_camera.cpp index 00acd50d42..61774641f8 100644 --- a/src/d/d_camera.cpp +++ b/src/d/d_camera.cpp @@ -3,7 +3,6 @@ #include "d/d_camera.h" #include "SSystem/SComponent/c_counter.h" #include "SSystem/SComponent/c_math.h" -#include #include "d/actor/d_a_alink.h" #include "d/actor/d_a_boomerang.h" #include "d/actor/d_a_horse.h" @@ -21,7 +20,12 @@ #include "m_Do/m_Do_controller_pad.h" #include "m_Do/m_Do_graphic.h" #include "m_Do/m_Do_lib.h" -#include +#include + +#if DEBUG +#include "d/d_debug_pad.h" +#include "d/d_debug_camera.h" +#endif namespace { @@ -46,8 +50,10 @@ inline static bool is_player(fopAc_ac_c* actor) { static void hideActor(fopAc_ac_c* actor) { if (is_player(actor)) { dComIfGp_onCameraAttentionStatus(0, 2); - if (((daPy_py_c*)actor)->checkHorseRide()) { - fopAcM_OnStatus(dComIfGp_getHorseActor(), 0x1000000); + daPy_py_c* player = (daPy_py_c*)actor; + if (player->checkHorseRide()) { + daHorse_c* horse = dComIfGp_getHorseActor(); + fopAcM_OnStatus(horse, 0x1000000); } } else { fopAcM_OnStatus(actor, 0x1000000); @@ -55,8 +61,8 @@ static void hideActor(fopAc_ac_c* actor) { } static bool defaultRadius(f32 param_0, f32 param_1, f32* param_2) { - f32 var_f30; f32 var_f31; + f32 var_f30; if (param_0 < param_1) { var_f31 = param_0; @@ -110,27 +116,28 @@ static bool posInLine2D(cXyz* param_0, cXyz* param_1, cXyz* param_2) { static cXyz relationalPos2(fopAc_ac_c* i_actor1, fopAc_ac_c* i_actor2, cXyz* param_2, f32 param_3, cSAngle param_4) { if (i_actor1 == NULL || i_actor2 == NULL) { + OS_REPORT("camera: error: actor NULL in relationalPos() \n"); return cXyz::Zero; + } else { + cXyz pos1 = i_actor1->attention_info.position; + cXyz pos2 = i_actor2->attention_info.position; + cXyz pos_diff = pos2 - pos1; + cSGlobe diff_globe(pos_diff); + pos_diff.normalize(); + pos1 -= pos_diff * i_actor1->attention_info.field_0xa; + pos2 += pos_diff * i_actor2->attention_info.field_0xa; + cXyz mid = pos1 + (pos2 - pos1) * 0.5f; + cXyz vec = *param_2; + cSAngle angle = param_4 - diff_globe.U(); + if (angle < cSAngle::_0) { + vec.x = -vec.x; + } + cSGlobe globe2(vec); + globe2.U(diff_globe.U() + globe2.U()); + diff_globe.R(0.5f * diff_globe.R() * angle.Cos() * param_3); + cXyz ret = mid + diff_globe.Xyz() + globe2.Xyz(); + return ret; } - - cXyz pos1 = i_actor1->attention_info.position; - cXyz pos2 = i_actor2->attention_info.position; - cXyz pos_diff = pos2 - pos1; - cSGlobe diff_globe(pos_diff); - pos_diff.normalize(); - pos1 -= pos_diff * i_actor1->attention_info.field_0xa; - pos2 += pos_diff * i_actor2->attention_info.field_0xa; - cXyz mid = pos1 + (pos2 - pos1) * 0.5f; - cXyz vec = *param_2; - cSAngle angle = param_4 - diff_globe.U(); - if (angle < cSAngle::_0) { - vec.x = -vec.x; - } - cSGlobe globe2(vec); - globe2.U(diff_globe.U() + globe2.U()); - diff_globe.R(0.5f * diff_globe.R() * angle.Cos() * param_3); - cXyz ret = mid + diff_globe.Xyz() + globe2.Xyz(); - return ret; } inline static cSAngle sAngleY(cXyz& i_vec) { @@ -154,13 +161,13 @@ int dCamMapToolData::Set(s32 param_0, s32 roomNo, fopAc_ac_c* param_2, u16 param mFlags = (mCamData.field_0x14 >> 0xE) & 3; if (param_3 & 0x8000) { - mFlags |= 0x10; + mFlags |= (u8)0x10; } - if (mCamData.field_0x14 & 0x2000) { - mCamData.field_0x14 |= 0xC000; + if (mCamData.field_0x14 & (u16)0x2000) { + mCamData.field_0x14 |= (u16)0xC000; } else { - mCamData.field_0x14 &= ~0xC000; + mCamData.field_0x14 &= (u16)~0xC000; } mArrowIndex = mCamData.m_arrow_idx; @@ -318,7 +325,7 @@ inline static void setComStat(u32 param_0) { dComIfGp_onCameraAttentionStatus(0, param_0); } -inline static bool getComStat(u32 param_0) { +inline static BOOL getComStat(u32 param_0) { return dComIfGp_getCameraAttentionStatus(0) & param_0; } @@ -338,10 +345,11 @@ inline static void setComZoomForcus(f32 param_0) { void dCamera_c::initialize(camera_class* i_camera, fopAc_ac_c* i_player, u32 i_cameraID, u32 i_padID) { - char* type_data = - (char*)dComIfG_getObjectRes(dComIfGp_getCameraParamFileName(0), "camtype.dat"); - mCamTypeData = (dCamera_type_data*)(type_data + 8); - mCamTypeNum = *(int*)(type_data + 4); + const char* fileName = dComIfGp_getCameraParamFileName(0); + void* objRes = dComIfG_getObjectRes(fileName, "camtype.dat"); + char* typeData = (char*)objRes; + mCamTypeData = (dCamera_type_data*)(typeData + 8); + mCamTypeNum = *(int*)(typeData + 4); field_0x0 = i_camera; field_0x20 = 1; @@ -417,7 +425,7 @@ void dCamera_c::initialize(camera_class* i_camera, fopAc_ac_c* i_player, u32 i_c specialType[CAM_TYPE_PEEP] = GetCameraTypeFromCameraName("Peep"); field_0x698 = 0xFF; field_0x69c = 0; - mIsWolf = daPy_py_c::checkNowWolf() != 0; + mIsWolf = daPy_py_c::checkNowWolf() != 0 ? TRUE : FALSE; mCurMode = 0; mEngineHoldState = 0; mForcedMode = 11; @@ -427,29 +435,25 @@ void dCamera_c::initialize(camera_class* i_camera, fopAc_ac_c* i_player, u32 i_c mFrameCounter = 0; mTicks = cM_rndFX(0x7FFF); field_0x84 = 1.0f; - field_0x91c = 0.0f; - - mTrimHeight = 0.0f; + mTrimHeight = field_0x91c = 0.0f; mTrimSize = 0; mTrimTypeForce = -1; mGear = 0; field_0x944 = 0; field_0x950 = mGear; +#if DEBUG + dbg_field_0xd8 = 0; +#endif - mBG.field_0x5c.field_0x0 = 0; - mBG.field_0x0.field_0x0 = 0; + mBG.field_0x0.field_0x0 = mBG.field_0x5c.field_0x0 = false; mBG.field_0xc0.field_0x3c = 0xFF; - mBG.field_0x5c.field_0x58 = -G_CM3D_F_INF; - mBG.field_0x0.field_0x58 = -G_CM3D_F_INF; + mBG.field_0x0.field_0x58 = mBG.field_0x5c.field_0x58 = -G_CM3D_F_INF; mBG.field_0x0.field_0x4.OffNormalGrp(); mBG.field_0x0.field_0x4.OnWaterGrp(); - mBG.field_0xc0.field_0x1 = 0; - mBG.field_0xc0.field_0x0 = 0; - mBG.field_0xc0.field_0x10 = cXyz::Zero; - mBG.field_0xc0.field_0x4 = mBG.field_0xc0.field_0x10; + mBG.field_0xc0.field_0x0 = mBG.field_0xc0.field_0x1 = 0; + mBG.field_0xc0.field_0x4 = mBG.field_0xc0.field_0x10 = cXyz::Zero; mBG.field_0xc0.field_0x20 = 0; - mBG.field_0xc0.field_0x1e = cSAngle::_0; - mBG.field_0xc0.field_0x1c = mBG.field_0xc0.field_0x1e; + mBG.field_0xc0.field_0x1c = mBG.field_0xc0.field_0x1e = cSAngle::_0; mBG.field_0xc0.field_0x34 = 0; mBG.field_0x108.field_0x0 = 0; mBG.field_0x108.field_0x4 = 0.0f; @@ -473,11 +477,7 @@ void dCamera_c::initialize(camera_class* i_camera, fopAc_ac_c* i_player, u32 i_c dStage_dt_c* stage_dt = dComIfGp_getStage(); stage_stag_info_class* stag_info; - if (stage_dt != NULL) { - stag_info = stage_dt->getStagInfo(); - } else { - stag_info = NULL; - } + stag_info = stage_dt != NULL ? stage_dt->getStagInfo() : NULL; if (stag_info != NULL && mMapToolType == 0xFF) { switch (dStage_stagInfo_GetSTType(stag_info)) { @@ -540,8 +540,7 @@ void dCamera_c::initialize(camera_class* i_camera, fopAc_ac_c* i_player, u32 i_c mControlledYaw = mViewCache.mDirection.U().Inv(); mUp = dComIfGs_getTurnRestart().getCameraUp(); - mBank = cSAngle::_0; - mViewCache.mBank = mBank; + mViewCache.mBank = mBank = cSAngle::_0; mViewCache.mFovy = mFovy = dComIfGs_getTurnRestart().getCameraFvy(); } else if (daAlink_getAlinkActorClass()->checkStartFall()) { @@ -561,8 +560,7 @@ void dCamera_c::initialize(camera_class* i_camera, fopAc_ac_c* i_player, u32 i_c mEye = mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); mUp = dComIfGs_getTurnRestart().getCameraUp(); - mBank = cSAngle::_0; - mViewCache.mBank = mBank; + mViewCache.mBank = mBank = cSAngle::_0; mViewCache.mFovy = mFovy = dComIfGs_getTurnRestart().getCameraFvy(); } else { cXyz attn_pos = attentionPos(mpPlayerActor); @@ -579,21 +577,20 @@ void dCamera_c::initialize(camera_class* i_camera, fopAc_ac_c* i_player, u32 i_c mDirection = mViewCache.mDirection; mControlledYaw = mViewCache.mDirection.U().Inv(); - mFovy = 60.0f; - mViewCache.mFovy = 60.0f; + mViewCache.mFovy = mFovy = 60.0f; mUp.set(0.0f, 1.0f, 0.0f); - mBank = cSAngle::_0; - mViewCache.mBank = mBank; + mViewCache.mBank = mBank = cSAngle::_0; } mFakeAngleSys.field_0x0 = 0; - field_0x674 = 0xFF; - field_0x670 = 0xFF; - field_0x668 = 0; - field_0x66c = 0; + field_0x670 = field_0x674 = 0xFF; + field_0x66c = field_0x668 = 0; field_0x678 = 1; mZoomRatio = 0.0f; field_0x738 = 85.0f; +#if DEBUG + mCamSetup.SetTypeTable(mCamTypeData, mCamTypeNum); +#endif mFastShotState = 0; field_0x611 = 0; @@ -622,6 +619,8 @@ void dCamera_c::initialize(camera_class* i_camera, fopAc_ac_c* i_player, u32 i_c mMidnaRidingAndVisible = player->checkMidnaRide() && !midna->checkNoDraw(); mLastBumpCase = 0; field_0x95c = cXyz::Zero; + f32 unusedFloat1 = 0.2f; + f32 unusedFloat2 = 0.0f; } void dCamera_c::Start() { @@ -731,7 +730,7 @@ void dCamera_c::initPad() { } void dCamera_c::updatePad() { - dComIfGp_getAttention(); + dAttention_c* attn = dComIfGp_getAttention(); int var_r30 = mCamParam.Algorythmn(mCamStyle); f32 var_f31; @@ -893,8 +892,15 @@ void dCamera_c::updatePad() { { mCameraInputActive = 1; } -} +#if DEBUG + if (mCamSetup.CheckFlag(0x8000) && !dComIfGp_evmng_cameraPlay()) { + if (((mGear + 1) & ~0x3) == 0) { + dDbVw_Report(20, 235, "%c", "LMH?"[mGear + 1]); + } + } +#endif +} void dCamera_c::initMonitor() { if (mpPlayerActor != NULL) { @@ -903,43 +909,44 @@ void dCamera_c::initMonitor() { mMonitor.field_0x0 = cXyz::Zero; } - field_0x2c0 = 0.0f; - mMonitor.field_0x10 = 0.0f; - mMonitor.field_0xc = 0.0f; + mMonitor.field_0xc = mMonitor.field_0x10 = field_0x2c0 = 0.0f; mIdleFrameCount = 0; field_0x2c8 = 0.0f; - mMonitor.field_0x14 = cXyz::Zero; + mMonitor.field_0x14.field_0x0 = cXyz::Zero; } void dCamera_c::updateMonitor() { - if (mpPlayerActor != NULL) { - cXyz sp24 = positionOf(mpPlayerActor); - mMonitor.field_0x14 = sp24 - mMonitor.field_0x0; - - if (mBG.field_0xc0.field_0x1) { - dComIfG_Bgsp().MoveBgMatrixCrrPos(mBG.field_0x5c.field_0x4, true, &mMonitor.field_0x0, NULL, NULL); - } - - f32 var_f31; - if (chkFlag(0x10000)) { - var_f31 = cXyz(sp24 - mMonitor.field_0x0).abs(); - } else { - var_f31 = dCamMath::xyzHorizontalDistance(sp24, mMonitor.field_0x0); - } - - field_0x2c0 = var_f31 - mMonitor.field_0xc; - mMonitor.field_0x10 += (var_f31 - mMonitor.field_0x10) * 0.01f; - mMonitor.field_0xc = var_f31; - mMonitor.field_0x0 = sp24; - - if (!push_any_key()) { - mIdleFrameCount++; - } else { - mIdleFrameCount = 0; - } - - field_0x2c8 = mDirection.R() - field_0x2c8; + if (mpPlayerActor == NULL) { + return; } + + cXyz sp24 = positionOf(mpPlayerActor); + mMonitor.field_0x14.field_0x0 = sp24 - mMonitor.field_0x0; + + if (mBG.field_0xc0.field_0x1) { + dComIfG_Bgsp().MoveBgMatrixCrrPos(mBG.field_0x5c.field_0x4, true, &mMonitor.field_0x0, NULL, + NULL); + } + + f32 var_f31; + if (chkFlag(0x10000)) { + var_f31 = cXyz(sp24 - mMonitor.field_0x0).abs(); + } else { + var_f31 = dCamMath::xyzHorizontalDistance(sp24, mMonitor.field_0x0); + } + + field_0x2c0 = var_f31 - mMonitor.field_0xc; + mMonitor.field_0x10 += (var_f31 - mMonitor.field_0x10) * 0.01f; + mMonitor.field_0xc = var_f31; + mMonitor.field_0x0 = sp24; + + if (!push_any_key()) { + mIdleFrameCount++; + } else { + mIdleFrameCount = 0; + } + + field_0x2c8 = mDirection.R() - field_0x2c8; } bool dCamera_c::checkForceLockTarget() { @@ -963,6 +970,26 @@ bool dCamera_c::checkForceLockTarget() { void dCamera_c::infoReport() { #if DEBUG + int x = 20; + int y = 190; + + const char* c1; + if (mBG.field_0xc0.field_0x44 != 0) { + c1 = " "; + } else { + c1 = "j"; + } + + const char* c2; + if (mStyleSettle.mFinished != 0) { + c2 = "O"; + } else { + c2 = "x"; + } + + dDbVw_Report(x, y, "%s%s", c2, c1); + dDbVw_Report(x, y + 15, "TY%03d MD%03d", mCurType, mCurMode); + dDbVw_Report(x, y + 30, "ST%03d AL%03d", mCamStyle, mCamParam.Algorythmn()); #endif } @@ -982,19 +1009,29 @@ inline bool chkCornerCos(f32 param_0) { } // namespace +void dCamera_c::debugDrawInit() { +#if DEBUG + dbg_field_0xd4 = 0; +#endif +} + bool dCamera_c::Run() { daAlink_c* link = daAlink_getAlinkActorClass(); daMidna_c* midna = daPy_py_c::getMidnaActor(); mMidnaRidingAndVisible = link->checkMidnaRide() && !midna->checkNoDraw(); - bool bVar9 = false; + bool sp10 = false; + bool sp0F = false; clrComStat(0x804); +#if DEBUG + debugDrawInit(); + dDbgCamera.InitlChk(); +#endif int iVar8 = mIsWolf; mIsWolf = daPy_py_c::checkNowWolf() ? 1 : 0; mFocusLine.Off(); clrFlag(0x10168C21); clrFlag(0x10); - mpAuxTargetActor2 = NULL; - mpAuxTargetActor1 = NULL; + mpAuxTargetActor1 = mpAuxTargetActor2 = NULL; s32 stay_no = dComIfGp_roomControl_getStayNo(); if (stay_no != mRoomCtx.mRoomNo) { onRoomChange(stay_no); @@ -1029,12 +1066,12 @@ bool dCamera_c::Run() { } if (dComIfGp_getEvent()->runCheck()) { - mPadInfo.mMainStick.mLastValue = 0.0f; - mPadInfo.mMainStick.mLastPosY = 0.0f; - mPadInfo.mMainStick.mLastPosX = 0.0f; - mPadInfo.mCStick.mLastValue = 0.0f; - mPadInfo.mCStick.mLastPosY = 0.0f; - mPadInfo.mCStick.mLastPosX = 0.0f; + mPadInfo.mMainStick.mLastPosX = + mPadInfo.mMainStick.mLastPosY = + mPadInfo.mMainStick.mLastValue = 0.0f; + mPadInfo.mCStick.mLastPosX = + mPadInfo.mCStick.mLastPosY = + mPadInfo.mCStick.mLastValue = 0.0f; } if (!checkForceLockTarget()) { @@ -1045,6 +1082,10 @@ bool dCamera_c::Run() { mNextType = nextType(mCurType); if (mNextType != mCurType && onTypeChange(mCurType, mNextType)) { + if (mCamSetup.CheckFlag(0x8000)) { + OS_REPORT("%06d: camera: type change %d -> %d (%s)\n", + mFrameCounter, mCurType, mNextType, mCamTypeData[mNextType].name); + } mCurType = mNextType; } @@ -1058,6 +1099,11 @@ bool dCamera_c::Run() { && mCamTypeData[mCurType].field_0x18[mIsWolf][mNextMode] >= 0 && onModeChange(mCurMode, mNextMode)) { + if (mCamSetup.CheckFlag(0x8000)) { + OS_REPORT("%06d: camera: mode change %d -> %d\n", + mFrameCounter, mCurMode, mNextMode); + } + mCurMode = mNextMode; mCurCamStyleTimer = 0; } @@ -1067,6 +1113,13 @@ bool dCamera_c::Run() { int style = mCamTypeData[mCurType].field_0x18[mIsWolf][mCurMode]; if (style >= 0 && mCamStyle != style && onStyleChange(mCamStyle, style)) { + u32 id = mCamParam.Id(style); + if (mCamSetup.CheckFlag(0x8000)) { + OS_REPORT("%06d: camera: style change %d -> %d (%c%c%c%c)\n", + mFrameCounter, mCamStyle, style, + (id >> 24) & 0xff, (id >> 16) & 0xff, (id >> 8) & 0xff, id & 0xff); + } + mCamStyle = style; mCamParam.Change(mCamStyle); setFlag(0x200); @@ -1096,7 +1149,7 @@ bool dCamera_c::Run() { clrFlag(0x200000); } } else { - bVar9 = (this->*engine_tbl[mCamParam.Algorythmn(mCamStyle)])(mCamStyle); + sp0F = (this->*engine_tbl[mCamParam.Algorythmn(mCamStyle)])(mCamStyle); field_0x170++; field_0x160++; mCurCamStyleTimer++; @@ -1104,7 +1157,7 @@ bool dCamera_c::Run() { mFrameCounter++; mTicks++; - if (!bVar9) { + if (!sp0F) { mEngineHoldState = 0; } defaultTriming(); @@ -1133,10 +1186,15 @@ bool dCamera_c::Run() { if (mCamParam.CheckFlag(0x10)) { mBumpCheckFlags &= ~0x4000; } - mBumpCheckFlags &= ~8; - if (mCamParam.CheckFlag(4)) { - mBumpCheckFlags = 0; + mBumpCheckFlags &= ~0x8; + if (mCamParam.CheckFlag(0x4)) { + mBumpCheckFlags = 0x0; } +#if PLATFORM_WII + if (mCurMode == 7 && !dComIfGp_checkPlayerStatus0(mPadID, 0x200000)) { + mBumpCheckFlags = 0x2000; + } +#endif } mFovy = mViewCache.mFovy; @@ -1151,11 +1209,20 @@ bool dCamera_c::Run() { } if (mFakeAngleSys.field_0x0 != 0) { mControlledYaw = getUSOAngle(mPadInfo.mMainStick.mAngle); +#if DEBUG + if (mCamSetup.CheckFlag(0x8000) && dComIfGp_evmng_cameraPlay() == 0) { + int x = 90; + int y = 190; + dDbVw_Report(x, y, " F"); + } +#endif } else { mControlledYaw = mDirection.U().Inv(); } if (mCamSetup.CheckFlag(0x8000)) { + int x = 20; + int y = 235; infoReport(); } @@ -1191,7 +1258,7 @@ bool dCamera_c::Run() { Z2GetAudioMgr()->setCameraInWaterDepth(0.0f); } - if (mStyleSettle.mFinished) { + if (isModeOK()) { setComStat(0x10); } else { clrComStat(0x10); @@ -1201,16 +1268,82 @@ bool dCamera_c::Run() { if (mDirection.R() < hide_dist) { if (chkFlag(0x800) & 1) { setComStat(2); + +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(20, 235, " H"); + } +#endif } else if (chkFlag(0x10000000)) { setComStat(0x20); + +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(20, 235, " h"); + } +#endif + } else { +#if DEBUG + if (mCurType != specialType[1] && false) { + mDirection.R(hide_dist + 0.1f); + mEye = mCenter + mDirection.Xyz(); + + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(20, 235, " <"); + } + } +#endif } } runEventRecoveryTrans(); + +#if DEBUG + if (mCamSetup.CheckFlag(0x200)) { + int x = 20; + int y = 320; + int yStep = 15; + cXyz aPos = attentionPos(mpPlayerActor); + cSAngle sp40 = directionOf(mpPlayerActor); + dDbVw_Report(x, y, "APOS %11.3f %11.3f %11.3f", aPos.x, aPos.y, aPos.z); + dDbVw_Report(x, y += yStep, "iCTR %11.3f %11.3f %11.3f", + mViewCache.mCenter.x, mViewCache.mCenter.y, mViewCache.mCenter.z); + dDbVw_Report(x, y += yStep, "iEYE %11.3f %11.3f %11.3f", + mViewCache.mEye.x, mViewCache.mEye.y, mViewCache.mEye.z); + + dDbVw_Report(x, y += yStep, "iC2E %11.3f %11.3f %11.3f", + mViewCache.mDirection.R(), mViewCache.mDirection.V().Degree(), + mViewCache.mDirection.U().Degree()); + dDbVw_Report(x, y += yStep, "CTR %11.3f %11.3f %11.3f", + mCenter.x, mCenter.y, mCenter.z); + dDbVw_Report(x, y += yStep, "EYE %11.3f %11.3f %11.3f", + mEye.x, mEye.y, mEye.z); + + dDbVw_Report(x, y += yStep, "C2E %11.3f %11.3f %11.3f", + mDirection.R(), mDirection.V().Degree(), mDirection.U().Degree()); + + dDbVw_Report(x, y += yStep, "FVY %11.3f AANG %11.3f", + mFovy, sp40.Degree()); + } + + if (mCamSetup.CheckFlag(0x100)) { + if (mpPlayerActor != NULL) { + cXyz spCC = attentionPos(mpPlayerActor); + debugDrawPoint(spCC); + if (mpLockonTarget != NULL) { + cXyz spC0 = attentionPos(mpLockonTarget); + debugDrawPoint(spC0); + debugDrawLine(spCC, spC0); + } + } + debugDrawPoint(mCenter); + } +#endif + clrFlag(0x1000); mTagCamTool.Clr(); field_0x89c.Clr(); - return bVar9; + return sp0F; } bool dCamera_c::NotRun() { @@ -1244,6 +1377,28 @@ bool dCamera_c::NotRun() { shakeCamera(); blureCamera(); field_0x21 = 0; + +#if DEBUG + if (mCamSetup.CheckFlag(0x200)) { + int x = 20; + int y = 320; + int yStep = 15; + + dDbVw_Report(x, y, "iCTR %11.3f %11.3f %11.3f", + mViewCache.mCenter.x, mViewCache.mCenter.y, mViewCache.mCenter.z); + dDbVw_Report(x, y += yStep, "iEYE %11.3f %11.3f %11.3f", + mViewCache.mEye.x, mViewCache.mEye.y, mViewCache.mEye.z); + + dDbVw_Report(x, y += yStep, "iC2E %11.3f %11.3f %11.3f", + mViewCache.mDirection.R(), mViewCache.mDirection.V().Degree(), + mViewCache.mDirection.U().Degree()); + + dDbVw_Report(x, y += yStep, "CTR %11.3f %11.3f %11.3f", mCenter.x, mCenter.y, mCenter.z); + dDbVw_Report(x, y += yStep, "EYE %11.3f %11.3f %11.3f", mEye.x, mEye.y, mEye.z); + dDbVw_Report(x, y += yStep, "FVY %11.3f ", mFovy); + } +#endif + if (mBankOverride != cSAngle::_0) { mBank = mBankOverride; } @@ -1299,6 +1454,12 @@ void dCamera_c::CalcTrimSize() { mTrimHeight += -mTrimHeight * 0.25f; break; case 2: +#if WIDESCREEN_SUPPORT + if (mDoGph_gInf_c::isWide() && mDoGph_gInf_c::isWideZoom()) { + mTrimHeight += (16.0f - mTrimHeight) * 0.25f; + break; + } +#endif mTrimHeight += (mCamSetup.CinemaScopeTrimHeight() - mTrimHeight) * 0.25f; break; case 1: @@ -1334,6 +1495,58 @@ int dCamera_c::Draw() { return 1; } +void dCamera_c::debugDraw() { +#if DEBUG + GXColor color; + u32 i; + for (i = 0; i < dbg_field_0xd4; i++) { + color.r = (i & 0x1) != 0 ? 0xff : (i & 0x8) != 0 ? 0xc0 : 0x80; + color.g = (i & 0x2) != 0 ? 0xff : (i & 0x8) != 0 ? 0xc0 : 0x80; + color.b = (i & 0x4) != 0 ? 0xff : (i & 0x8) != 0 ? 0xc0 : 0x80; + color.a = 0x80; + if (dbg_field_0xc4[i] == 0) { + dDbVw_drawSphereXlu(dbg_field_0x04[i], 20.0f, color, 1); + } else if (dbg_field_0xc4[i] == 1) { + dDbVw_drawLineXlu(dbg_field_0x04[i], dbg_field_0x04[i + 1], color, 1, 12); + i++; + } + } + + dbg_field_0xd4 = 0; +#endif +} + +int dCamera_c::debugDrawPoint(cXyz& i_point) { +#if DEBUG + if (dbg_field_0xd4 >= 16) { + return 0; + } + + dbg_field_0x04[dbg_field_0xd4] = i_point; + dbg_field_0xc4[dbg_field_0xd4] = 0; + dbg_field_0xd4++; +#endif + + return 1; +} + +int dCamera_c::debugDrawLine(cXyz& i_point_1, cXyz& i_point_2) { +#if DEBUG + if (dbg_field_0xd4 + 1 >= 16) { + return 0; + } + + dbg_field_0x04[dbg_field_0xd4] = i_point_1; + dbg_field_0xc4[dbg_field_0xd4] = 1; + dbg_field_0xd4++; + dbg_field_0x04[dbg_field_0xd4] = i_point_2; + dbg_field_0xc4[dbg_field_0xd4] = 2; + dbg_field_0xd4++; +#endif + + return 1; +} + void dCamera_c::setStageMapToolData() { int cameraIndex = 0xFF; int var_r27 = 0xFF; @@ -1379,19 +1592,49 @@ void dCamera_c::setMapToolData() { int var_r26 = 0xFF; if (mBG.field_0xc0.field_0x40 == 0x1FF && mRoomMapTool.mpActor == NULL) { +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(20, 190, " k"); + } +#endif + return; } if (mBG.field_0xc0.field_0x40 != 0xFF) { +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(20, 190, " p"); + } +#endif + mRoomMapTool.Clr(); var_r29 = mBG.field_0xc0.field_0x40; } else if (field_0x8d8.mCameraIndex != 0xFF) { +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(20, 190, " e"); + } +#endif + mRoomMapTool.Clr(); var_r29 = field_0x8d8.mCameraIndex; } else if (mDefRoomCamTool.mCameraIndex != 0xFF) { +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(20, 190, " r"); + } +#endif + mRoomMapTool = mDefRoomCamTool; return; } else if (mStageCamTool.mCameraIndex != 0xFF) { +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(20, 190, " s"); + } +#endif + mRoomMapTool = mStageCamTool; return; } else { @@ -1402,12 +1645,7 @@ void dCamera_c::setMapToolData() { } void dCamera_c::SetTagData(fopAc_ac_c* param_0, s32 param_1, u16 param_2, u8 param_3) { - s32 room_no; - if (param_0 != NULL) { - room_no = fopAcM_GetRoomNo(param_0); - } else { - room_no = dComIfGp_roomControl_getStayNo(); - } + int room_no = param_0 != NULL ? fopAcM_GetRoomNo(param_0) : dComIfGp_roomControl_getStayNo(); mTagCamTool.Set(param_1, room_no, param_0, param_2, param_3); } @@ -1425,12 +1663,35 @@ s32 dCamera_c::nextMode(s32 i_curMode) { if (mBG.field_0x0.field_0x58 > player_pos.y) { field_0x223 = 0; } + + switch (i_curMode) { + case 1: + case 2: + case 4: + case 7: + case 8: + default: + break; + } + if (!link->checkFastShotTime()) { mFastShotState = 0; } if (mForcedMode != 11 && mCamTypeData[mCurType].field_0x18[mIsWolf][mForcedMode] >= 0) { next_mode = mForcedMode; + +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(20, 205, " MD---"); + } +#endif +#if DEBUG + } else if (check_owner_action(mPadID, 0x200000) && attn->LockonTruth()) { + next_mode = 2; + } else if (check_owner_action(mPadID, 0x200000)) { +#else } else if (check_owner_action(mPadID, 0x200000) && !attn->Lockon()) { +#endif if (check_owner_action(mPadID, 0x25040)) { next_mode = 7; } else { @@ -1530,6 +1791,7 @@ s32 dCamera_c::nextMode(s32 i_curMode) { } bool dCamera_c::onModeChange(s32 i_curMode, s32 i_nextMode) { + dAttention_c* unusedAttn = dComIfGp_getAttention(); field_0x160 = 0; field_0x164 = 0; field_0x168 = 1; @@ -1580,106 +1842,152 @@ int dCamera_c::ModeFix(s32 param_0) { return 1; } +static int l_debugMode; + s32 dCamera_c::nextType(s32 i_curType) { s32 next_type = i_curType; + int sp30 = 0; + s8 var_r28 = 0x20; - if (mEngineHoldState != 1) { - s32 iVar14 = 0xff; - if (mTagCamTool.mCameraIndex != 0xff) { - s32 type = GetCameraTypeFromToolData(&mTagCamTool.mCamData); - if (type != 0xff) { - iVar14 = type; +#if DEBUG + if (l_debugMode == true) { + next_type = GetCameraTypeFromCameraName("Cheat"); + } else if (mCamSetup.ForceType() != -1) { + next_type = mCamSetup.ForceType(); + } else +#endif + { +#if DEBUG + if (mEngineHoldState == 0) { +#else + if (mEngineHoldState != 1) { +#endif + s32 iVar14 = 0xff; + if (mTagCamTool.mCameraIndex != 0xff) { + s32 type = GetCameraTypeFromToolData(&mTagCamTool.mCamData); + if (type != 0xff) { + iVar14 = type; + } } - } - daAlink_c* link = daAlink_getAlinkActorClass(); + daAlink_c* link = daAlink_getAlinkActorClass(); + daHorse_c* horse = dComIfGp_getHorseActor(); - bool bVar2 = false; - bool bVar1 = false; - if (link->checkMagneBootsOn()) { - cXyz* top_vec = link->getMagneBootsTopVec(); - if (cBgW_CheckBRoof(top_vec->y)) { - bVar2 = true; - } else if (cBgW_CheckBWall(top_vec->y)) { - bVar1 = true; + bool bVar2 = false; + bool bVar1 = false; + if (link->checkMagneBootsOn()) { + cXyz* top_vec = link->getMagneBootsTopVec(); + if (cBgW_CheckBRoof(top_vec->y)) { + bVar2 = true; + } else if (cBgW_CheckBWall(top_vec->y)) { + bVar1 = true; + } } - } - bool copy_rod = false; - fopAc_ac_c* copyRodCameraActor = link->getCopyRodCameraActor(); - if (copyRodCameraActor != NULL) { - copy_rod = true; - } - - if (check_owner_action(mPadID, 0x200000) && ChangeModeOK(4) - && !dComIfGp_getAttention()->Lockon()) { - next_type = specialType[CAM_TYPE_SCOPE]; - } else if (iVar14 != 0xff && !(mTagCamTool.mFlags & 0x10)) { - next_type = iVar14; - mRoomMapTool = mTagCamTool; - } else if (link->checkMidnaLockJumpPoint() && - (daPy_py_c::getMidnaActor()->checkFlyWaitAnime() - || daPy_py_c::getMidnaActor()->checkNoInput())) { - next_type = specialType[CAM_TYPE_MIDNA_TAG]; - } else if (daPy_py_c::getMidnaActor()->checkPortalObjCall()) { - next_type = specialType[CAM_TYPE_WARP_OBJ]; - } else if (link->checkGoatStopGame()) { - next_type = specialType[CAM_TYPE_GOAT_BATTLE]; - } else if (chkFlag(0x10000)) { - next_type = specialType[CAM_TYPE_GORON_JUMP]; - } else if (link->checkHorseRide()) { - next_type = specialType[CAM_TYPE_HORSE_T]; - } else if (bVar1) { - next_type = specialType[CAM_TYPE_MAGNE_WALL]; - } else if (bVar2) { - next_type = specialType[CAM_TYPE_MAGNE_ROOF]; - } else if (copy_rod) { - next_type = specialType[CAM_TYPE_COPY_ROD_HALL]; - } else if (link->checkBoarRide()) { - next_type = specialType[CAM_TYPE_BOAR]; - } else if (link->checkCanoeRide()) { - next_type = specialType[CAM_TYPE_CANOE]; - } else if (link->checkBoardRide()) { - next_type = specialType[CAM_TYPE_BOARD]; - } else if (link->checkSpinnerRide()) { - next_type = specialType[CAM_TYPE_SPINNER]; - } else if (check_owner_action1(mPadID, 0x2000000)) { - next_type = specialType[CAM_TYPE_HOOK_WALL]; - } else if (check_owner_action1(mPadID, 0x10000)) { - if (link->getHookshotRoofWaitActor() != NULL) { - next_type = specialType[CAM_TYPE_HOOK_ACTOR]; - } else { - next_type = specialType[CAM_TYPE_HOOK_ROOF]; + bool copy_rod = false; + fopAc_ac_c* copyRodCameraActor = link->getCopyRodCameraActor(); + if (copyRodCameraActor != NULL) { + copy_rod = true; } - } else if (check_owner_action1(mPadID, 0x100000)) { - next_type = specialType[CAM_TYPE_ROOF_HUNG]; - } else if (link->checkCokkoGlide()) { - next_type = specialType[CAM_TYPE_COCCO_JUMP]; - } else if (check_owner_action(mPadID, 0x100000)) { - if (getComStat(0x800)) { - next_type = specialType[CAM_TYPE_WATER_SURF]; - } else if (mBG.field_0xc0.field_0x3c != 0xff) { - setRoomMapToolData(&mRoomMapTool, mBG.field_0xc0.field_0x3c, - dComIfGp_roomControl_getStayNo()); + + if (check_owner_action(mPadID, 0x200000) && ChangeModeOK(4) + && !dComIfGp_getAttention()->Lockon()) { + next_type = specialType[CAM_TYPE_SCOPE]; + var_r28 = 0x6f; + } else if (iVar14 != 0xff && !(mTagCamTool.mFlags & 0x10)) { + next_type = iVar14; + mRoomMapTool = mTagCamTool; + var_r28 = 0x74; + } else if (link->checkMidnaLockJumpPoint() && + (daPy_py_c::getMidnaActor()->checkFlyWaitAnime() + || daPy_py_c::getMidnaActor()->checkNoInput())) { + next_type = specialType[CAM_TYPE_MIDNA_TAG]; + var_r28 = 0x78; + } else if (daPy_py_c::getMidnaActor()->checkPortalObjCall()) { + next_type = specialType[CAM_TYPE_WARP_OBJ]; + var_r28 = 0x58; + } else if (link->checkGoatStopGame()) { + next_type = specialType[CAM_TYPE_GOAT_BATTLE]; + var_r28 = 0x62; + } else if (chkFlag(0x10000)) { + next_type = specialType[CAM_TYPE_GORON_JUMP]; + var_r28 = 0x4a; + } else if (link->checkHorseRide()) { + next_type = specialType[CAM_TYPE_HORSE_T]; + var_r28 = 0x48; + } else if (bVar1) { + next_type = specialType[CAM_TYPE_MAGNE_WALL]; + var_r28 = 0x75; + } else if (bVar2) { + next_type = specialType[CAM_TYPE_MAGNE_ROOF]; + var_r28 = 0x55; + } else if (copy_rod) { + next_type = specialType[CAM_TYPE_COPY_ROD_HALL]; + var_r28 = 0x72; + } else if (link->checkBoarRide()) { + next_type = specialType[CAM_TYPE_BOAR]; + var_r28 = 0x49; + } else if (link->checkCanoeRide()) { + next_type = specialType[CAM_TYPE_CANOE]; + var_r28 = 0x43; + } else if (link->checkBoardRide()) { + next_type = specialType[CAM_TYPE_BOARD]; + var_r28 = 0x42; + } else if (link->checkSpinnerRide()) { + next_type = specialType[CAM_TYPE_SPINNER]; + var_r28 = 0x40; + } else if (check_owner_action1(mPadID, 0x2000000)) { + next_type = specialType[CAM_TYPE_HOOK_WALL]; + var_r28 = 0x3e; + } else if (check_owner_action1(mPadID, 0x10000)) { + if (link->getHookshotRoofWaitActor() != NULL) { + next_type = specialType[CAM_TYPE_HOOK_ACTOR]; + var_r28 = 0x5e; + } else { + next_type = specialType[CAM_TYPE_HOOK_ROOF]; + var_r28 = 0x5e; + } + } else if (check_owner_action1(mPadID, 0x100000)) { + next_type = specialType[CAM_TYPE_ROOF_HUNG]; + var_r28 = 0x7e; + } else if (link->checkCokkoGlide()) { + next_type = specialType[CAM_TYPE_COCCO_JUMP]; + var_r28 = 0x66; + } else if (check_owner_action(mPadID, 0x100000)) { + if (getComStat(0x800)) { + next_type = specialType[CAM_TYPE_WATER_SURF]; + var_r28 = 0x77; + } else if (mBG.field_0xc0.field_0x3c != 0xff) { + s32 stayNo = dComIfGp_roomControl_getStayNo(); + setRoomMapToolData(&mRoomMapTool, mBG.field_0xc0.field_0x3c, stayNo); + s32 type = GetCameraTypeFromToolData(&mRoomMapTool.mCamData); + if (type != 0xff) { + next_type = type; + var_r28 = 0x6d; + } else { + next_type = specialType[CAM_TYPE_WATER]; + var_r28 = 0x57; + } + } else { + next_type = specialType[CAM_TYPE_WATER]; + var_r28 = 0x57; + } + } else if (iVar14 != 0xff) { + next_type = iVar14; + mRoomMapTool = mTagCamTool; + var_r28 = 0x54; + } else if (mRoomMapTool.mCameraIndex != 0xff) { s32 type = GetCameraTypeFromToolData(&mRoomMapTool.mCamData); if (type != 0xff) { next_type = type; - } else { - next_type = specialType[CAM_TYPE_WATER]; + var_r28 = 0x6d; } - } else { - next_type = specialType[CAM_TYPE_WATER]; + } else if (mRoomMapTool.mCameraIndex != 0x1ff) { + next_type = mMapToolType; + var_r28 = 0x44; } - } else if (iVar14 != 0xff) { - next_type = iVar14; - mRoomMapTool = mTagCamTool; - } else if (mRoomMapTool.mCameraIndex != 0xff) { - s32 type = GetCameraTypeFromToolData(&mRoomMapTool.mCamData); - if (type != 0xff) { - next_type = type; - } - } else if (mRoomMapTool.mCameraIndex != 0x1ff) { - next_type = mMapToolType; + } else { + var_r28 = 0x3d; } } @@ -1687,10 +1995,12 @@ s32 dCamera_c::nextType(s32 i_curType) { field_0x69c = 0; if (mCamTypeData[mCurType].field_0x18[mIsWolf][0] < 0) { next_type = mMapToolType; + var_r28 = 0x21; if (mRoomMapTool.mCameraIndex != 0xff) { s32 type = GetCameraTypeFromToolData(&mRoomMapTool.mCamData); if (type != 0xff) { next_type = type; + var_r28 = 0x5f; } } } @@ -1711,12 +2021,20 @@ s32 dCamera_c::nextType(s32 i_curType) { setComStat(4); dComIfGp_getAttention()->LockSoundOff(); } + +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(20, 190, " %c%02x", var_r28, mRoomMapTool.mCameraIndex); + } +#endif } return next_type; } bool dCamera_c::onTypeChange(s32 i_curType, s32 i_nextType) { + daAlink_c* unusedPlayer = daAlink_getAlinkActorClass(); + if (i_curType == specialType[CAM_TYPE_EVENT]) { if (mCamSetup.CheckFlag(0x4000)) { mGear = 0; @@ -1731,7 +2049,9 @@ bool dCamera_c::onTypeChange(s32 i_curType, s32 i_nextType) { } mRecovery.field_0x4 = 0; +#if PLATFORM_GCN field_0x668 = 0; +#endif clearInfo(&mSavedView, 0); clearInfo(&mSavedViewStack[0], 0); clearInfo(&mSavedViewStack[1], 0); @@ -1765,7 +2085,9 @@ bool dCamera_c::onTypeChange(s32 i_curType, s32 i_nextType) { clrFlag(0x200000); pushInfo(&mSavedView, 1); mSightFitRadius = 0.0f; +#if PLATFORM_GCN field_0x668 = 0; +#endif } field_0x170 = 0; @@ -1803,8 +2125,9 @@ bool dCamera_c::onStyleChange(s32 param_0, s32 param_1) { } break; case 1: - mCamParam.Algorythmn(param_1); - mCamParam.Algorythmn(param_0); + if (mCamParam.Algorythmn(param_0) == mCamParam.Algorythmn(param_1)) { + // empty block + } break; case 5: case 6: @@ -1843,18 +2166,27 @@ int dCamera_c::onRoomChange(s32 i_roomNo) { fopAc_ac_c* dCamera_c::getParamTargetActor(s32 param_0) { daAlink_c* player = daAlink_getAlinkActorClass(); - switch (*(u32*)&mCamTypeData[param_0].name[16]) { + fopAc_ac_c* result; + u32* name = (u32*)(mCamTypeData[param_0].name + 16); + //name += 16; + switch (*name) { case '@LOC': - return dComIfGp_getAttention()->LockonTarget(0); + result = dComIfGp_getAttention()->LockonTarget(0); + break; case '@ACT': - return dComIfGp_getAttention()->ActionTarget(0); + result = dComIfGp_getAttention()->ActionTarget(0); + break; case '@CHK': - return dComIfGp_getAttention()->CheckObjectTarget(0); + result = dComIfGp_getAttention()->CheckObjectTarget(0); + break; case '@CPY': - return player->getCopyRodCameraActor(); + result = player->getCopyRodCameraActor(); + break; + default: + result = fopAcM_searchFromName4Event(mCamTypeData[param_0].name + 16, -1); + break; } - - return fopAcM_searchFromName4Event(&mCamTypeData[param_0].name[16], -1); + return result; } int dCamera_c::GetCameraTypeFromMapToolID(s32 param_0, s32 i_roomNo) { @@ -1879,15 +2211,8 @@ int dCamera_c::GetCameraTypeFromMapToolID(s32 param_0, s32 i_roomNo) { } if (param_0 < 0 || camera == NULL || (camera != NULL && param_0 >= camera->num)) { - int sp28; - if (camera != NULL) { - sp28 = camera->num; - } else { - sp28 = -99; - } - - OS_REPORT("camera: bad number %d for map data ID [%x:%d] room %d\n", param_0, camera, sp28, - i_roomNo); + OS_REPORT("camera: bad number %d for map data ID [%x:%d] room %d\n", param_0, camera, + camera != NULL ? camera->num : -99, i_roomNo); return 0xFF; } @@ -1912,9 +2237,9 @@ int dCamera_c::GetCameraTypeFromMapToolID(s32 param_0, s32 i_roomNo) { mRoomMapTool.mFlags = (mRoomMapTool.mCamData.field_0x14 >> 0xE) & 3; if (mRoomMapTool.mCamData.field_0x14 & 0x2000) { - mRoomMapTool.mCamData.field_0x14 |= 0xC000; + mRoomMapTool.mCamData.field_0x14 |= (u16)0xC000; } else { - mRoomMapTool.mCamData.field_0x14 &= ~0xC000; + mRoomMapTool.mCamData.field_0x14 &= (u16)~0xC000; } mRoomMapTool.mArrowIndex = mRoomMapTool.mCamData.m_arrow_idx; @@ -1953,14 +2278,14 @@ int dCamera_c::GetCameraTypeFromCameraName(char const* i_name) { int dCamera_c::GetCameraTypeFromToolData(stage_camera2_data_class* i_data) { if (i_data->field_0x16 != 0xFFFF) { return i_data->field_0x16; - } + } else { + int type = GetCameraTypeFromCameraName(i_data->m_cam_type); + if (type < 0xFFFF) { + i_data->field_0x16 = type; + } - int type = GetCameraTypeFromCameraName(i_data->m_cam_type); - if (type < 0xFFFF) { - i_data->field_0x16 = type; + return type; } - - return type; } void dCamera_c::pushInfo(dCamera_c::dCamInfo_c* i_info, s16 param_1) { @@ -1975,13 +2300,34 @@ void dCamera_c::popInfo(dCamera_c::dCamInfo_c* i_info) { mCenter = mViewCache.mCenter = i_info->mCenter; mEye = mViewCache.mEye = i_info->mEye; mFovy = mViewCache.mFovy = i_info->mFovy; - mViewCache.mBank = i_info->mBank; - mBank = mViewCache.mBank; + mBank = mViewCache.mBank = i_info->mBank; +} + +bool limited_range_addition(f32* o_result, f32 i_addend, f32 i_min, f32 i_max) { + f32 min = i_min; + f32 max = i_max; + if (i_min > i_max) { + i_addend = -i_addend; + min = i_max; + max = i_min; + } + + *o_result += i_addend; + if (*o_result < min) { + *o_result = min; + return false; + } + if (*o_result > max) { + *o_result = max; + return false; + } + return true; } f32 dCamera_c::heightOf(fopAc_ac_c* i_actor) { if (is_player(i_actor)) { - return ((daPy_py_c*)i_actor)->getHeight(); + daPy_py_c* player = (daPy_py_c*)i_actor; + return player->getHeight(); } else { return (i_actor->eyePos.y - i_actor->current.pos.y) * 1.1f; } @@ -1989,41 +2335,42 @@ f32 dCamera_c::heightOf(fopAc_ac_c* i_actor) { cXyz dCamera_c::relationalPos(fopAc_ac_c* i_actor, cXyz* i_offset) { if (i_actor == NULL) { + OS_REPORT("camera: error: actor NULL in relationalPos() \n"); return cXyz::Zero; } - cXyz offset = dCamMath::xyzRotateY(*i_offset, cSAngle(i_actor->shape_angle.y)); + cXyz offset; + offset = dCamMath::xyzRotateY(*i_offset, cSAngle(i_actor->shape_angle.y)); return attentionPos(i_actor) + offset; } cXyz dCamera_c::relationalPos(fopAc_ac_c* i_actor1, fopAc_ac_c* i_actor2, cXyz* i_offset, f32 param_3) { if (i_actor1 == NULL) { + OS_REPORT("camera: error: actor NULL in relationalPos() \n"); return cXyz::Zero; - } - - if (i_actor2 == NULL) { + } else if (i_actor2 == NULL) { return relationalPos(i_actor1, i_offset); + } else { + cXyz pos1 = attentionPos(i_actor1); + cXyz pos2 = attentionPos(i_actor2); + cXyz delta = pos2 - pos1; + cSGlobe delta_globe(delta); + delta.normalize(); + pos1 -= delta * i_actor1->attention_info.field_0xa; + pos2 += delta * i_actor2->attention_info.field_0xa; + cXyz mid = pos1 + (pos2 - pos1) * 0.5f; + cXyz offset = *i_offset; + cSAngle angle = mViewCache.mDirection.U() - delta_globe.U(); + if (angle < cSAngle::_0) { + offset.x = -offset.x; + } + cSGlobe offset_globe(offset); + offset_globe.U(delta_globe.U() + offset_globe.U()); + delta_globe.R(0.5f * delta_globe.R() * angle.Cos() * param_3); + cXyz ret = mid + delta_globe.Xyz() + offset_globe.Xyz(); + return ret; } - - cXyz pos1 = attentionPos(i_actor1); - cXyz pos2 = attentionPos(i_actor2); - cXyz delta = pos2 - pos1; - cSGlobe delta_globe(delta); - delta.normalize(); - pos1 -= delta * i_actor1->attention_info.field_0xa; - pos2 += delta * i_actor2->attention_info.field_0xa; - cXyz mid = pos1 + (pos2 - pos1) * 0.5f; - cXyz offset = *i_offset; - cSAngle angle = mViewCache.mDirection.U() - delta_globe.U(); - if (angle < cSAngle::_0) { - offset.x = -offset.x; - } - cSGlobe offset_globe(offset); - offset_globe.U(delta_globe.U() + offset_globe.U()); - delta_globe.R(0.5f * delta_globe.R() * angle.Cos() * param_3); - cXyz ret = mid + delta_globe.Xyz() + offset_globe.Xyz(); - return ret; } void dCamera_c::setUSOAngle() { @@ -2033,16 +2380,23 @@ void dCamera_c::setUSOAngle() { } cSAngle dCamera_c::getUSOAngle(cSAngle param_0) { + UNUSED(param_0); return mFakeAngleSys.field_0x2; } bool dCamera_c::pointInSight(cXyz* i_point) { cXyz proj; - dDlst_window_c* window = get_window(field_0x0); - scissor_class* scissor = window->getScissor(); + scissor_class* scissor = get_window(field_0x0)->getScissor(); f32 scissor_width = scissor->width; f32 scissor_height = scissor->height; mDoLib_project(i_point, &proj); +#if DEBUG + if (mCamSetup.CheckFlag(0x80)) { + dDbVw_Report(100, 250, "VP %11.3f %11.3f %11.3f", proj.x, proj.y, proj.z); + OS_REPORT("VP %11.3f %11.3f %11.3f\n", proj.x, proj.y, proj.z); + OS_REPORT("VS %11.3f %11.3f\n", scissor_width, scissor_height); + } +#endif return (proj.x > 0.0f && proj.x < scissor_width) && (proj.y > 0.0f && proj.y < scissor_height); } @@ -2050,11 +2404,12 @@ f32 dCamera_c::radiusActorInSight(fopAc_ac_c* i_actor1, fopAc_ac_c* i_actor2, cX cXyz* i_eye, f32 i_fovY, s16 i_bank, f32 param_6) { dDlst_window_c* window = get_window(field_0x0); scissor_class* scissor = window->getScissor(); - f32 dVar3 = cAngle::d2r(i_fovY) * 0.5f; - f32 tmp = (scissor->height - mTrimHeight * 2.0f) / FB_HEIGHT * dVar3; - f32 fVar8 = tmp * (mTrimHeight < 0.01f ? 0.95f : 1.0f); - dVar3 *= mWindowAspect; - f32 fVar7 = dVar3 * (scissor->width / FB_WIDTH) * 0.85f; + f32 var_f29 = cAngle::d2r(i_fovY) * 0.5f; + f32 var_f28 = (scissor->height - mTrimHeight * 2.0f) / FB_HEIGHT; + f32 sp34 = var_f29 * var_f28 * (mTrimHeight < 0.01f ? 0.95f : 1.0f); + var_f29 *= mWindowAspect; + var_f28 = scissor->width / FB_WIDTH; + f32 sp30 = var_f29 * var_f28 * 0.85f; cXyz pos1 = attentionPos(i_actor1); pos1.y += (positionOf(i_actor1).y - attentionPos(i_actor1).y) * 0.5f; @@ -2083,21 +2438,21 @@ f32 dCamera_c::radiusActorInSight(fopAc_ac_c* i_actor1, fopAc_ac_c* i_actor2, cX int bVar2 = 0; - f32 fVar5 = fabsf(cM_atan2f(pos1.x, -pos1.z)); - f32 fVar6 = fabsf(cM_atan2f(pos1.y, -pos1.z)); - if (fVar5 > fVar7) { + var_f29 = std::fabsf(cM_atan2f(pos1.x, -pos1.z)); + var_f28 = std::fabsf(cM_atan2f(pos1.y, -pos1.z)); + if (var_f29 > sp30) { bVar2 |= 1; } - if (fVar6 > fVar8) { + if (var_f28 > sp34) { bVar2 |= 2; } - fVar5 = fabsf(cM_atan2f(pos2.x, -pos2.z)); - fVar6 = fabsf(cM_atan2f(pos2.y, -pos2.z)); - if (fVar5 > fVar7) { + var_f29 = std::fabsf(cM_atan2f(pos2.x, -pos2.z)); + var_f28 = std::fabsf(cM_atan2f(pos2.y, -pos2.z)); + if (var_f29 > sp30) { bVar2 |= 4; } - if (fVar6 > fVar8) { + if (var_f28 > sp34) { bVar2 |= 8; } @@ -2110,34 +2465,35 @@ f32 dCamera_c::radiusActorInSight(fopAc_ac_c* i_actor1, fopAc_ac_c* i_actor2, cX f32 local_12c = 1.0f; f32 local_130 = 1.0f; if (bVar2 & 5) { - local_12c = tanf(fVar7); + local_12c = tanf(sp30); } if (bVar2 & 0xA) { - local_130 = tanf(fVar8); + local_130 = tanf(sp34); } + f32 var_f31; if (bVar2 & 1) { - f32 dVar4 = pos1.z + fabsf(pos1.x) / local_12c; - if (dVar4 > ret) { - ret = dVar4; + var_f31 = pos1.z + std::fabsf(pos1.x) / local_12c; + if (var_f31 > ret) { + ret = var_f31; } } if (bVar2 & 2) { - f32 dVar4 = pos1.z + fabsf(pos1.y) / local_130; - if (dVar4 > ret) { - ret = dVar4; + var_f31 = pos1.z + std::fabsf(pos1.y) / local_130; + if (var_f31 > ret) { + ret = var_f31; } } if (bVar2 & 4) { - f32 dVar4 = pos2.z + fabsf(pos2.x) / local_12c; - if (dVar4 > ret) { - ret = dVar4; + var_f31 = pos2.z + std::fabsf(pos2.x) / local_12c; + if (var_f31 > ret) { + ret = var_f31; } } if (bVar2 & 8) { - f32 dVar4 = pos2.z + fabsf(pos2.y) / local_130; - if (dVar4 > ret) { - ret = dVar4; + var_f31 = pos2.z + std::fabsf(pos2.y) / local_130; + if (var_f31 > ret) { + ret = var_f31; } } @@ -2153,21 +2509,19 @@ f32 dCamera_c::groundHeight(cXyz* param_0) { gndchk_wtr.SetPos(param_0); f32 wtr_y = dComIfG_Bgsp().GroundCross(&gndchk_wtr); + //TODO: unsure if this is an actual version difference or a fakematch, the ternary matches + // for everything except GCN but the if-else matches for GCN and Wii but not ShieldD +#if PLATFORM_GCN f32 height; if (gnd_y >= wtr_y) { height = gnd_y; } else { height = wtr_y; } - - f32 height_correct; - if (height == -G_CM3D_F_INF) { - height_correct = param_0->y; - } else { - height_correct = height; - } - - return height_correct; +#else + f32 height = gnd_y >= wtr_y ? gnd_y : wtr_y; +#endif + return height == -G_CM3D_F_INF ? param_0->y : height; } bool dCamera_c::lineBGCheck(cXyz* i_start, cXyz* i_end, dBgS_LinChk* i_linChk, u32 i_flags) { @@ -2221,8 +2575,9 @@ bool dCamera_c::lineBGCheck(cXyz* i_start, cXyz* i_end, cXyz* o_cross, u32 i_fla return true; } else { *o_cross = *i_end; - return false; } + + return false; } bool dCamera_c::lineBGCheck(cXyz* i_start, cXyz* i_end, u32 i_flags) { @@ -2386,10 +2741,14 @@ cSAngle dCamera_c::forwardCheckAngle() { } bool dCamera_c::bumpCheck(u32 i_flags) { - int uVar14 = 0; + int var_r27 = 0; + +#if PLATFORM_GCN static int prev_plat1 = 0; static int prev_plat2 = 0; - int uVar13 = 0; +#endif + + int var_r28 = 0; f32 gaze_back_margin = mCamSetup.mBGChk.GazeBackMargin() + 0.5f; f32 wall_cushion = mCamSetup.mBGChk.WallCushion(); @@ -2405,7 +2764,8 @@ bool dCamera_c::bumpCheck(u32 i_flags) { if (mCamSetup.CheckFlag2(0x100) && dKy_TeachWind_existence_chk()) { f32 wind_pow = dKyw_get_wind_pow(); if (wind_pow > 0.3f) { - cSGlobe wind_globe(*dKyw_get_wind_vec()); + cXyz* spD4 = dKyw_get_wind_vec(); + cSGlobe wind_globe(*spD4); wind_globe.R(mViewCache.mDirection.R() * cM_rndFX(mCamSetup.WindShakeGap4Ctr() * 0.0001f)); center += wind_globe.Xyz(); if (wind_pow > 1.0f) { @@ -2413,12 +2773,17 @@ bool dCamera_c::bumpCheck(u32 i_flags) { } wind_pow -= 0.3f; cSAngle angle = wind_globe.U() - mViewCache.mDirection.U(); - mFovy += mCamSetup.WindShakeGap4Fvy() * cM_rndFX(wind_pow / 0.7f) * (1.0f - fabsf(angle.Norm())); + mFovy += mCamSetup.WindShakeGap4Fvy() * cM_rndFX(wind_pow / 0.7f) * (1.0f - std::fabsf(angle.Norm())); + +#if DEBUG + dDbVw_Report(300, 180, "wind %f %f", wind_pow, angle.Norm()); +#endif } } if (is_player(mpPlayerActor)) { - u32 grab_actor_id = static_cast(mpPlayerActor)->getGrabActorID(); + fopAc_ac_c* spD0 = mpPlayerActor; + u32 grab_actor_id = static_cast(spD0)->getGrabActorID(); if (grab_actor_id != -1) { fopAc_ac_c* grab_actor = fopAcM_SearchByID(grab_actor_id); if (grab_actor != NULL && !fopAcM_CheckCarryType(grab_actor, @@ -2432,119 +2797,150 @@ bool dCamera_c::bumpCheck(u32 i_flags) { } } - f32 fVar1 = mViewCache.mDirection.R() * mViewCache.mDirection.V().Sin(); + f32 spC4 = mViewCache.mDirection.R() * mViewCache.mDirection.V().Sin(); if (i_flags & 0x10) { - if (fVar1 > wall_up_distance) { - wall_up_distance = fVar1; + if (spC4 > wall_up_distance) { + wall_up_distance = spC4; } } else { clrFlag(0x4000); } + bool sp0E = false; + if (chkFlag(0x2002)) { if (mpAuxTargetActor1 != NULL && mpAuxTargetActor2 != NULL) { f32 sight_radius = radiusActorInSight(mpPlayerActor, mpAuxTargetActor1, mpAuxTargetActor2); if (sight_radius > 0.0f) { - f32 fVar17, fVar18; - if (chkFlag(2)) { - fVar17 = 0.33f; - } else { - fVar17 = 0.08f; + f32 spBC = chkFlag(2) ? 0.33f : 0.08f; + mSightFitRadius += spBC * (sight_radius - mSightFitRadius); + var_r28 |= 0x40; + +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(20, 235, " *"); } - mSightFitRadius += fVar17 * (sight_radius - mSightFitRadius); - uVar13 |= 0x40; - fVar18 = 1.0f; +#endif + + f32 spB8 = 1.0f; if (field_0x160 < 10) { - fVar18 = (f32)field_0x160 / 10.0f; + spB8 = (f32)field_0x160 / 10.0f; } - direction.R(mSightFitRadius * fVar18 + direction.R()); + direction.R(mSightFitRadius * spB8 + direction.R()); eye = center + direction.Xyz(); } } else if (mpAuxTargetActor1 != NULL) { - f32 sight_radius = radiusActorInSight(mpPlayerActor, mpAuxTargetActor1, &mViewCache.mCenter, - &mViewCache.mEye, mFovy, mBank, 0.05f); + f32 sight_radius = radiusActorInSight(mpPlayerActor, mpAuxTargetActor1); if (sight_radius > 0.0f) { - f32 fVar17, fVar18; - if (chkFlag(2)) { - fVar17 = 0.33f; - } else { - fVar17 = 0.08f; + f32 spB0 = chkFlag(2) ? 0.33f : 0.08f; + mSightFitRadius += spB0 * (sight_radius - mSightFitRadius); + var_r28 |= 0x40; + +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(20, 235, " +"); } - mSightFitRadius += fVar17 * (sight_radius - mSightFitRadius); - uVar13 |= 0x40; - fVar18 = 1.0f; +#endif + + f32 spAC = 1.0f; if (field_0x160 < 10) { - fVar18 = (f32)field_0x160 / 10.0f; + spAC = (f32)field_0x160 / 10.0f; } - direction.R(mSightFitRadius * fVar18 + direction.R()); + direction.R(mSightFitRadius * spAC + direction.R()); eye = center + direction.Xyz(); } } } - if (mSightFitRadius > 0.1f && !(uVar13 & 0x40)) { + if (mSightFitRadius > 0.1f && !(var_r28 & 0x40)) { +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(20, 235, " >"); + } +#endif + mSightFitRadius -= mSightFitRadius * 0.08f; direction.R(mSightFitRadius + direction.R()); eye = center + direction.Xyz(); } if ((i_flags & 0x80) && mBG.field_0x108.field_0x0 != 0) { +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(20, 235, " B"); + } +#endif + direction.V(mBG.field_0x108.field_0x4 + direction.V().Degree()); eye = center + direction.Xyz(); - uVar13 |= 0x20; + var_r28 |= 0x20; } dBgS_CamLinChk lin_chk1; dBgS_CamLinChk lin_chk2; cXyz norm_dir_vec = cXyz(eye - center).norm(); cXyz vec = eye + norm_dir_vec * gaze_back_margin; - cXyz pos, mid; - bool bVar8 = false; + bool var_r26 = false; if (i_flags & 0xb7) { if (lineBGCheck(¢er, &vec, &lin_chk1, i_flags)) { - cSGlobe unused1, unused2; +#if DEBUG + dDbgCamera.SetlChk(lin_chk1); +#endif + + cXyz pos, mid; + cXyz sp3E0; + cSAngle sp44; + cSGlobe sp110, sp108; cM3dGPla plane1; dComIfG_Bgsp().GetTriPla(lin_chk1, &plane1); cM3dGPla plane2; + bool sp0D = false; cXyz* normal1 = plane1.GetNP(); if ((i_flags & 1) && normal1->y >= 0.75f) { - uVar14 = 4; + var_r27 = 4; } else if ((i_flags & 4) && normal1->y < -0.5f) { - uVar14 = 3; + var_r27 = 3; } else if (i_flags & 2) { if (!(i_flags & 0x10)) { - uVar14 = 1; + var_r27 = 1; } else if (!(i_flags & 0x20)) { - uVar14 = 2; + var_r27 = 2; } else { if (lineBGCheck(&vec, ¢er, &lin_chk2, i_flags)) { - cXyz(lin_chk1.GetCross() - lin_chk2.GetCross()).abs(); - dComIfG_Bgsp().GetTriPla(lin_chk2, &plane2); +#if DEBUG + dDbgCamera.SetlChk(lin_chk2); +#endif + f32 spA4 = cXyz(lin_chk1.GetCross() - lin_chk2.GetCross()).abs(); + sp0D = dComIfG_Bgsp().GetTriPla(lin_chk2, &plane2); cXyz* normal2 = plane2.GetNP(); cXyz cross; f32 dot = VECDotProduct(normal1, normal2); VECCrossProduct(normal1, normal2, &cross); - if (chkCornerCos(dot) && fabsf(cross.y) > 0.5f + if (chkCornerCos(dot) && std::fabsf(cross.y) > 0.5f && cBgW_CheckBWall(normal2->y)) { - uVar14 = 5; - } else if (mLastBumpCase != 5 && mLastBumpCase != 6) { - uVar14 = 7; + var_r27 = 5; } else { - uVar14 = 8; + if (mLastBumpCase != 5 && mLastBumpCase != 6) { + var_r27 = 7; + } else { + var_r27 = 8; + } } - } else if (mLastBumpCase == 5 || mLastBumpCase == 8) { - uVar14 = 8; } else { - uVar14 = 2; + if (mLastBumpCase == 5 || mLastBumpCase == 8) { + var_r27 = 8; + } else { + var_r27 = 2; + } } } } - switch (uVar14) { + switch (var_r27) { case 5: case 6: { - uVar13 |= 2; + var_r28 |= 2; cXyz cross1 = lin_chk1.GetCross(); cXyz cross2 = lin_chk2.GetCross(); mid = (cross1 + cross2) * 0.5f; @@ -2570,8 +2966,8 @@ bool dCamera_c::bumpCheck(u32 i_flags) { mWallRecoverStepCount = dist / 1.5f; } } - f32 tmp = 1.0f / mWallRecoverStepCount; - direction.V(mDirection.V() + (direction.V() - mDirection.V()) * tmp); + f32 sp94 = 1.0f / mWallRecoverStepCount; + direction.V(mDirection.V() + (direction.V() - mDirection.V()) * sp94); vec = center + direction.Xyz(); if (--mWallRecoverStepCount == 0) { clrFlag(0x4000); @@ -2581,8 +2977,15 @@ bool dCamera_c::bumpCheck(u32 i_flags) { vec = lin_chk1.GetCross(); } eye = compWallMargin(&vec, ¢er, gaze_back_margin); - bVar8 = true; + var_r26 = true; setFlag(0x80000); + +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(20, 235, " C"); + } +#endif + break; } } @@ -2592,26 +2995,28 @@ bool dCamera_c::bumpCheck(u32 i_flags) { case 2: case 7: case 8: { - uVar13 |= 1; + var_r28 |= 1; vec = mLastHitPos = lin_chk1.GetCross(); if (i_flags & 0x10) { + bool sp0C; switch (mLastBumpCase) { case 2: case 7: case 8: - bVar8 = false; + sp0C = false; break; default: - bVar8 = true; + sp0C = true; break; } - f32 tmp2 = wall_up_distance - (vec.y - center.y); - if (tmp2 < 10.0f) { - tmp2 = 10.0f; + f32 sp90 = vec.y - center.y; + f32 sp8C = wall_up_distance - sp90; + if (sp8C < 10.0f) { + sp8C = 10.0f; } cSGlobe globe(*plane1.GetNP()); globe.V(globe.V() + cSAngle::_90); - globe.R(tmp2 * globe.V().Sin()); + globe.R(sp8C * globe.V().Sin()); cXyz vec2 = vec + globe.Xyz(); cXyz vec3 = *plane1.GetNP(); vec3.y = 0.0f; @@ -2619,13 +3024,13 @@ bool dCamera_c::bumpCheck(u32 i_flags) { field_0x968 = 1.0f; field_0x96c = 0.0f; } - if (bVar8) { + if (sp0C) { field_0x96c = 0.0f; } else { field_0x96c += (1.0f - field_0x96c) * 0.1f; } - if (bVar8 || !(mMonitor.field_0xc < 5.0f) - || !(fabsf(mPadInfo.mCStick.mLastPosX) < 0.05f)) { + if (sp0C || !(mMonitor.field_0xc < 5.0f) + || !(std::fabsf(mPadInfo.mCStick.mLastPosX) < 0.05f)) { field_0x968 = 0.2f; } else { field_0x968 *= mMonitor.field_0xc / 5.0f; @@ -2642,9 +3047,16 @@ bool dCamera_c::bumpCheck(u32 i_flags) { if (lineBGCheck(¢er, &vec, &lin_chk1, i_flags)) { vec = lin_chk1.GetCross(); } + +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(20, 235, " U"); + } +#endif + eye = compWallMargin(&vec, ¢er, gaze_back_margin); tooNearEscape(&eye); - bVar8 = true; + var_r26 = true; setFlag(0x80); setFlag(0x4000); break; @@ -2655,19 +3067,44 @@ bool dCamera_c::bumpCheck(u32 i_flags) { case 1: case 3: case 4: { - uVar13 |= 4; + var_r28 |= 4; setFlag(0x80); vec = mLastHitPos = lin_chk1.GetCross(); eye = compWallMargin(&vec, ¢er, gaze_back_margin); tooNearEscape(&eye); - bVar8 = true; + var_r26 = true; + +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(20, 235, " L"); + } +#endif + break; } + default: { +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(20, 235, " -"); + } +#endif + } } +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(20, 190, " !"); + } +#endif } else { - uVar14 = 0; + var_r27 = 0; if (chkFlag(0x4000)) { +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(20, 235, " W+"); + } +#endif + if (mWallRecoverStepCount == 0) { f32 dist = cXyz(mEye - mViewCache.mEye).abs(); if (dist > 60.0f) { @@ -2691,73 +3128,90 @@ bool dCamera_c::bumpCheck(u32 i_flags) { clrFlag(0x4000); } } else { +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(20, 235, " o"); + } +#endif + vec = eye; } eye = compWallMargin(&vec, ¢er, gaze_back_margin); - bVar8 = true; + var_r26 = true; } } - mLastBumpCase = uVar14; + mLastBumpCase = var_r27; + int i; if ((i_flags & 0x4000) && mCamSetup.CheckFlag2(0x400)) { + i = 0; cCcD_ShapeAttr::Shape shape; - for (int i = 0; i < 3; i++) { + for (i = 0; i < 3; i++) { if (!dComIfG_Ccsp()->chkCameraPoint(eye, &shape, mpPlayerActor, NULL)) { break; } bool bVar9 = false; cXyz vec; - f32 var_f29, var_f28; + f32 sp78, sp74; switch (shape._0) { case 0: vec = shape._4; vec.y -= shape._10; - var_f29 = shape._10; - var_f28 = var_f29 * 2.0f; + sp78 = shape._10; + sp74 = shape._10 * 2.0f; bVar9 = true; break; case 1: vec = shape._4; - var_f29 = shape._10; - var_f28 = shape._14; + sp78 = shape._10; + sp74 = shape._14; bVar9 = true; break; } - if (bVar9 && center.y >= vec.y && center.y <= vec.y + var_f28) { + if (bVar9 && center.y >= vec.y && center.y <= vec.y + sp74) { cXyz vec2; vec2.x = vec.x - center.x; vec2.y = 0.0f; vec2.z = vec.z - center.z; - if (vec2.abs() <= var_f29) { + if (vec2.abs() <= sp78) { bVar9 = false; } } if (bVar9) { - cM3dGCyl cyl(&vec, var_f29, var_f28); - cM3dGLin lin(center, eye); cXyz vec2, vec3, vec4; - if (cM3d_Cross_CylLin(&cyl, &lin, &vec2, &vec3)) { + cM3dGCyl cyl(&vec, sp78, sp74); + cM3dGLin lin(center, eye); + int cylLine = cM3d_Cross_CylLin(&cyl, &lin, &vec2, &vec3); + if (cylLine) { vec4.x = vec2.x - vec.x; vec4.y = 0.0f; vec4.z = vec2.z - vec.z; vec4.normalize(); eye = vec2 + vec4 * 2.0f; - bVar8 = true; + var_r26 = true; } } } + +#if DEBUG + if (i != 0 && mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(20, 235, " C%d", i); + } +#endif } if (i_flags & 0x80) { dBgS_GndChk gnd_chk; gnd_chk.SetPos(&eye); + f32 sp6C = dComIfG_Bgsp().GroundCross(&gnd_chk); + f32 sp68 = mBG.field_0x5c.field_0x58; cXyz vec1, vec2; - if (dComIfG_Bgsp().GroundCross(&gnd_chk) < mBG.field_0x5c.field_0x58 + 40.0f) { + if (sp6C < sp68 + 40.0f) { vec1 = eye; vec2 = center; vec2 += (vec1 - vec2) * 0.5f; @@ -2766,32 +3220,55 @@ bool dCamera_c::bumpCheck(u32 i_flags) { vec1 = center; vec1 += (vec2 - vec1) * 0.5f; } - if (mBG.field_0xc0.field_0x44 && (lineCollisionCheckBush(&vec1, &vec2) & 6) != 0) { - cXyz mass_cam_top_pos; - dComIfG_Ccsp()->GetMassCamTopPos(&mass_cam_top_pos); - if (eye.y < mass_cam_top_pos.y) { - eye.y = mEye.y + (mass_cam_top_pos.y - mEye.y) * 0.2f; - bVar8 = true; + + f32 sp64 = 0.0f; + if (mBG.field_0xc0.field_0x44) { + int sp60 = lineCollisionCheckBush(&vec1, &vec2) & 6; + if (sp60 != 0) { + cXyz mass_cam_top_pos; + dComIfG_Ccsp()->GetMassCamTopPos(&mass_cam_top_pos); + if (eye.y < mass_cam_top_pos.y) { + eye.y = mEye.y + (mass_cam_top_pos.y - mEye.y) * 0.2f; + var_r26 = true; + +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(20, 235, " B"); + } +#endif + } } } } else if (i_flags & 0xb7) { f32 fVar1 = eye.y - mBG.field_0x0.field_0x58; if (fVar1 >= 0.0f && fVar1 < 3.0f) { eye.y = mBG.field_0x0.field_0x58 + 3.0f; - bVar8 = true; + var_r26 = true; + +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(20, 235, " W"); + } +#endif } else if (fVar1 <= 0.0f && fVar1 > -3.0f) { eye.y = mBG.field_0x0.field_0x58 - 3.0f; - bVar8 = true; + var_r26 = true; + +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(20, 235, " W"); + } +#endif } } mCenter = center; mEye = eye; - if (bVar8) { + if (var_r26) { direction.Val(eye - center); } mDirection = direction; - return uVar13 != 0 ? true : false; + return var_r28 != 0 ? true : false; } bool dCamera_c::lineBGCheckBoth(cXyz* i_start, cXyz* i_end, dBgS_LinChk* i_linchk, @@ -2834,11 +3311,12 @@ BOOL dCamera_c::jutOutCheck(cXyz* param_0, f32 param_1) { } void dCamera_c::tooNearEscape(cXyz* param_0) { + f32 maxDist = 40.0f; cXyz sp2C = attentionPos(mpPlayerActor); cSGlobe sp58(*param_0 - sp2C); - if (sp58.R() < 40.0f) { - sp58.R(40.0f); + if (sp58.R() < maxDist) { + sp58.R(maxDist); *param_0 = sp2C + sp58.Xyz(); } } @@ -2876,6 +3354,7 @@ void dCamera_c::checkGroundInfo() { } cXyz roof_chk_pos = gnd_chk_pos; + int var_r24 = 0; gnd_chk_pos.y += 20.0f; dBgS_RoofChk roof_chk; roof_chk.SetUnderwaterRoof(); @@ -2917,7 +3396,8 @@ void dCamera_c::checkGroundInfo() { } else if (player->checkSpinnerRide()) { mBG.field_0xc0.field_0x44 = 1; } else if (player->checkMagneBootsOn()) { - if (!cBgW_CheckBWall(player->getMagneBootsTopVec()->y)) { + Vec* bootsTopVec = player->getMagneBootsTopVec(); + if (!cBgW_CheckBWall(bootsTopVec->y)) { mBG.field_0xc0.field_0x44 = 1; } } else if (footHeightOf(mpPlayerActor) - mBG.field_0x5c.field_0x58 > mCamSetup.mBGChk.FloorMargin()) { @@ -3016,6 +3496,12 @@ bool dCamera_c::chaseCamera(s32 param_0) { f32 val23 = mCamParam.Val(param_0, 23); f32 val24 = mCamParam.Val(param_0, 24); +#if WIDESCREEN_SUPPORT + if (mDoGph_gInf_c::isWide()) { + val22 *= WideTurnSaving; + } +#endif + cSAngle ang1 = -75.0f; cSAngle ang2 = 75.0f; f32 dVar52 = 0.25f; @@ -3083,14 +3569,21 @@ bool dCamera_c::chaseCamera(s32 param_0) { } if (player->checkMagneBootsOn()) { bVar7 = true; - if (cBgW_CheckBWall(player->getMagneBootsTopVec()->y)) { + Vec* bootsTopVec = player->getMagneBootsTopVec(); + if (cBgW_CheckBWall(bootsTopVec->y)) { bVar2 = true; } } cSAngle player_angle_delta = player_direction - mViewCache.mDirection.U(); field_0x944 = 1; - if (mRoomMapTool.mCameraIndex != 0xff && mCamParam.Flag(param_0, 0x200)) { + if (mRoomMapTool.mCameraIndex != 0xff && mCamParam.Flag(param_0, 0x200) && +#if DEBUG + mCamSetup.ForceType() == -1 +#else + true +#endif + ) { if (mRoomMapTool.mCameraIndex != chase->field_0x9c) { mCamParam.Fovy(mRoomMapTool.mCamData.field_0x11); mCamParam.Arg0(mRoomMapTool.mCamData.field_0x12); @@ -3134,19 +3627,20 @@ bool dCamera_c::chaseCamera(s32 param_0) { val17 = val18 = val19; } - bool bVar10, bVar8; - bool bVar9 = false; - bool bVar3 = false; - bool bVar1 = false; + bool sp1E = true; + bool sp1D = false; + bool sp1C = false; + bool sp1B = false; if (mIsWolf == 0) { if (isPlayerCharging(mPadID)) { - bVar1 = true; + sp1B = true; } if (check_owner_action(mPadID, 0x8000000)) { - bVar3 = true; + sp1C = true; } + f32 sp1E0; if (check_owner_action1(mPadID, 0x2000000)) { clrFlag(0x80); cXyz* left_foot_pos = player->getLeftFootPosP(); @@ -3155,37 +3649,37 @@ bool dCamera_c::chaseCamera(s32 param_0) { val0 = -val0; } } else if (mThrowTimer != 0 && !chkFlag(0x100000)) { - f32 throw_ctr_adjust = mCamSetup.ThrowCtrAdjust(); - val2 += throw_ctr_adjust; - val3 += throw_ctr_adjust; - f32 throw_v_angle = mCamSetup.ThrowVAngle(); - if (val12 < throw_v_angle) { - val12 = throw_v_angle; + sp1E0 = mCamSetup.ThrowCtrAdjust(); + val2 += sp1E0; + val3 += sp1E0; + sp1E0 = mCamSetup.ThrowVAngle(); + if (val12 < sp1E0) { + val12 = sp1E0; } - if (val13 < throw_v_angle) { - val13 = throw_v_angle; + if (val13 < sp1E0) { + val13 = sp1E0; } - f32 throw_cushion = mCamSetup.ThrowCushion(); - val16 = throw_cushion; - val5 = throw_cushion; + sp1E0 = mCamSetup.ThrowCushion(); + val16 = sp1E0; + val5 = sp1E0; mForwardTiltOffset = cSAngle::_0; chase->field_0x94 = true; } else if ((player->getGrabActorID() != fpcM_ERROR_PROCESS_ID_e || mThrowTimer != 0) && chkFlag(0x100000)) { - val9 = mCamSetup.ThrowCtrAdjust(); + sp1E0 = mCamSetup.ThrowCtrAdjust(); if (mThrowTimer != 0) { - val9 *= (f32)mThrowTimer / mCamSetup.ThrowTimer(); + sp1E0 *= (f32)mThrowTimer / mCamSetup.ThrowTimer(); } - val2 += val9; - val3 += val9; + val2 += sp1E0; + val3 += sp1E0; } else if (player->checkCanoeRideTandem()) { val1 -= 100.0f; } else if (check_owner_action(mPadID, 0x100000)) { - val9 = mMonitor.field_0x10 / 22.0f; - if (val9 > 1.0f) { - val9 = 1.0f; + sp1E0 = mMonitor.field_0x10 / 22.0f; + if (sp1E0 > 1.0f) { + sp1E0 = 1.0f; } - val1 *= val9; + val1 *= sp1E0; } if (chase->field_0x94) { @@ -3193,22 +3687,22 @@ bool dCamera_c::chaseCamera(s32 param_0) { chase->field_0x94 = false; } if (mThrowTimer == 0) { - bVar9 = true; + sp1D = true; } } else if (chase->field_0x92 && chase->field_0x1a > 14) { - f32 min = 550.0f; - if (val8 < min) { - val8 = min; + sp1E0 = 550.0f; + if (val8 < sp1E0) { + val8 = sp1E0; } - min *= 1.1f; - if (val7 < min) { - val7 = min; + sp1E0 *= 1.1f; + if (val7 < sp1E0) { + val7 = sp1E0; } } } else { if (isPlayerCharging(mPadID)) { - bVar1 = true; + sp1B = true; } if (mMidnaRidingAndVisible != 0) { @@ -3227,8 +3721,9 @@ bool dCamera_c::chaseCamera(s32 param_0) { } if ((check_owner_action1(mPadID, 0x800000) || chase->field_0x73) && !chkFlag(0x100000)) { - val2 = val3 = val1 = -70.0f; - bVar1 = true; + val1 = -70.0f; + val2 = val3 = -70.0f; + sp1B = true; f32 search_ball_scale = player->getSearchBallScale(); search_ball_scale *= 1.5f; if (val8 < search_ball_scale) { @@ -3247,6 +3742,12 @@ bool dCamera_c::chaseCamera(s32 param_0) { val16 = val13 = 1.0f; } val17 = val18 = 90.0f / mWindowAspect; + +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(90, 190, " W"); + } +#endif } if (chase->field_0x73) { @@ -3254,6 +3755,12 @@ bool dCamera_c::chaseCamera(s32 param_0) { val16 = 0.0001f; val10 = 0.0001f; val21 = 0.0001f; + +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(90, 190, " A"); + } +#endif } if (mCurMode == 1 && val8 < 300.0f && val7 > 300.0f) { @@ -3271,15 +3778,18 @@ bool dCamera_c::chaseCamera(s32 param_0) { val16 = 0.25f; } - bool bVar33 = false; + bool sp1A = false; if (check_owner_action1(mPadID, 0x10000)) { cXyz hs_sub_chain_top_pos = daAlink_getAlinkActorClass()->getHsSubChainTopPos(); if (hs_sub_chain_top_pos.y - attentionPos(mpPlayerActor).y > 100.0f) { - bVar33 = true; + sp1A = true; } } if (check_owner_action(mPadID, 0x100)) { +#if DEBUG + val6 = 0.25f; +#endif val7 -= 50.0f; val8 -= 50.0f; if (mIsWolf == 1) { @@ -3304,6 +3814,12 @@ bool dCamera_c::chaseCamera(s32 param_0) { } val6 = 0.05f; val16 = 0.15f; + +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(90, 190, " H"); + } +#endif } else if (check_owner_action(mPadID, 0x2000208)) { val1 -= 50.0f; val6 = 0.25f; @@ -3319,7 +3835,19 @@ bool dCamera_c::chaseCamera(s32 param_0) { } mForwardTiltOffset = cSAngle::_0; val16 = 0.15f; - } else if (bVar33) { + +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(90, 190, " L"); + } +#endif + } else if (sp1A) { +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(90, 190, " R"); + } +#endif + mForwardTiltOffset = cSAngle::_0; mBG.field_0xc0.field_0x44 = 0; } @@ -3331,11 +3859,22 @@ bool dCamera_c::chaseCamera(s32 param_0) { if (val3 < -30.0f) { val3 = -30.0f; } + if (val4 < -30.0f) { + val4 = -30.0f; + } } cXyz player_attention_pos = attentionPos(mpPlayerActor); - lineBGCheck(&player_attention_pos, &mViewCache.mEye, 0x40b7); + f32 sp1CC; + if (lineBGCheck(&player_attention_pos, &mViewCache.mEye, 0x40b7)) { + if (val4 > 20.0f) { + val4 = 20.0f; + } else if (val4 < -40.0f) { + val4 = -40.0f; + } + } + sp1CC = 0.05f; if (mCurCamStyleTimer == 0) { chase->field_0x38 = val0; } else if (chkFlag(0x100000) && !check_owner_action1(mPadID, 0x2000000) @@ -3347,30 +3886,23 @@ bool dCamera_c::chaseCamera(s32 param_0) { chase->field_0x71 = false; } - f32 tmp; - if (chase->field_0x71) { - tmp = -45.0f; - } else { - tmp = 45.0f; - } - chase->field_0x38 += (tmp - chase->field_0x38) * 0.04f; + chase->field_0x38 += ((chase->field_0x71 ? -45.0f : 45.0f) - chase->field_0x38) * 0.04f; } else { chase->field_0x38 += (val0 - chase->field_0x38) * 0.06f; } + f32 sp1C8; if (mGear == 1 || val7 <= val8) { chase->field_0xa4 = 0.0f; } else if (!mCamParam.Flag(param_0, 0x400)) { - val14 = mViewCache.mDirection.R(); - if (val14 < val8) { - val9 = val8; - } else if (val14 > val7) { - val9 = val7; - } else { - val9 = val14; + sp1C8 = mViewCache.mDirection.R(); + if (sp1C8 < val8) { + sp1C8 = val8; + } else if (sp1C8 > val7) { + sp1C8 = val7; } - f32 tmp = (val7 - val9) / (val7 - val8); + f32 tmp = (val7 - sp1C8) / (val7 - val8); if (mCurCamStyleTimer == 0) { chase->field_0xa4 = tmp; } else { @@ -3398,12 +3930,9 @@ bool dCamera_c::chaseCamera(s32 param_0) { chase->field_0x10 = 30; chase->field_0x28 = val8; chase->field_0x2c = val7; - chase->field_0x18 = 0; - chase->field_0x1a = 0; - chase->field_0x14 = 0; + chase->field_0x14 = chase->field_0x1a = chase->field_0x18 = 0; chase->field_0x54 = 0.01f; - chase->field_0x7c = 0.01f; - chase->field_0x78 = 0.01f; + chase->field_0x78 = chase->field_0x7c = 0.01f; chase->field_0x80 = 0.01f; chase->field_0x74 = 0.01f; chase->field_0x84 = val6; @@ -3420,8 +3949,9 @@ bool dCamera_c::chaseCamera(s32 param_0) { chase->field_0x4c = 1.0f; chase->field_0xa8 = 0; + f32 sp1BC = 0.0f; + int timer; if (dComIfGp_evmng_cameraPlay()) { - int timer; getEvIntData(&timer, "Timer", 20); chase->field_0x4 = timer != 0 ? timer : 1; chase->field_0x95 = true; @@ -3443,7 +3973,7 @@ bool dCamera_c::chaseCamera(s32 param_0) { } cSAngle ang; - if ((chkFlag(0x100000) || bVar3 || bVar6) && std::fabsf(mPadInfo.mCStick.mLastPosX) < 0.05f) { + if ((chkFlag(0x100000) || sp1C || bVar6) && std::fabsf(mPadInfo.mCStick.mLastPosX) < 0.05f) { ang.Val(directionOf(mpPlayerActor).Inv()); } else { ang.Val(mViewCache.mDirection.U()); @@ -3452,27 +3982,22 @@ bool dCamera_c::chaseCamera(s32 param_0) { cXyz pos3 = pos + globe2.Xyz(); f32 dist1 = cXyz(mEye - pos3).abs() * 2.5f; + f32 sp1AC; + dist = val3 + (val2 - val3) * chase->field_0xa4; pos3 = pos; pos.y += dist; - f32 dist2 = cXyz(mCenter - pos3).abs() * 8.0f; - f32 abs_dist_max = std::fabsf(dist1 > dist2 ? dist1 : dist2); + sp1AC = cXyz(mCenter - pos3).abs() * 8.0f; + sp1BC = std::fabsf(dist1 > sp1AC ? dist1 : sp1AC); - f32 tmp2 = val18 + (val17 - val18) * chase->field_0xa4; - f32 fovy_diff = std::fabsf(mFovy - tmp2); - f32 sin = cSAngle(mFovy > tmp2 ? mFovy : tmp2).Sin(); - f32 tmp3 = 100.0f * (sin * sin) * fovy_diff; - f32 tmp5; - if (abs_dist_max > tmp3) { - tmp5 = abs_dist_max; - } else { - tmp5 = tmp3; - } - f32 tmp6 = std::fabsf(tmp5); - tmp6 *= 1.2f; - tmp6 *= 0.00625f; - val3 = JMAFastSqrt(tmp6); - chase->field_0x4 = (int)(val3 * 2.2f) + 1; + dist1 = val18 + (val17 - val18) * chase->field_0xa4; + sp1AC = std::fabsf(mFovy - dist1); + f32 sin = cSAngle(mFovy > dist1 ? mFovy : dist1).Sin(); + sp1AC = 100.0f * (sin * sin) * sp1AC; + sp1BC = std::fabsf(sp1BC > sp1AC ? sp1BC : sp1AC); + sp1BC *= 1.2f; + sp1BC *= 0.00625f; + chase->field_0x4 = (int)(JMAFastSqrt(sp1BC) * 2.2f) + 1; if (chase->field_0x4 < 5) { chase->field_0x4 = 5; } @@ -3483,13 +4008,14 @@ bool dCamera_c::chaseCamera(s32 param_0) { } else if (mCurType == specialType[CAM_TYPE_LV9_GZELDA_TRI]) { chase->field_0x4 = 45; } else if (chkFlag(0x20)) { - int tmp2 = chase->field_0x4; - int tmp = tmp2 / 6; - chase->field_0x4 = tmp2 + (tmp > 15 ? 15 : tmp < 5 ? 5 : tmp); + int sp1A4 = chase->field_0x4 / 6; + sp1A4 = sp1A4 > 15 ? 15 : sp1A4 < 5 ? 5 : sp1A4; + chase->field_0x4 = chase->field_0x4 + sp1A4; } else if (player->checkMagneBootsOn()) { cXyz* magne_boots_top_vec = player->getMagneBootsTopVec(); cXyz vec2 = mDirection.Xyz().norm(); - if (VECDotProduct(magne_boots_top_vec, &vec2) < -0.1f) { + f32 sp19C = VECDotProduct(magne_boots_top_vec, &vec2); + if (sp19C < -0.1f) { vec2 = (vec2 + *magne_boots_top_vec) * 0.5f; mViewCache.mDirection.Val(vec2); mViewCache.mDirection.R(val8); @@ -3515,9 +4041,7 @@ bool dCamera_c::chaseCamera(s32 param_0) { chase->field_0x64 = mViewCache.mEye; chase->field_0x34 = mViewCache.mFovy; if (chkFlag(0x200)) { - f32 dist = mViewCache.mDirection.R(); - chase->field_0x2c = dist; - chase->field_0x28 = dist; + chase->field_0x28 = chase->field_0x2c = mViewCache.mDirection.R(); } chase->field_0x8 = chase->field_0x4 * (chase->field_0x4 + 1) >> 1; chase->field_0xc = 0.0f; @@ -3529,9 +4053,11 @@ bool dCamera_c::chaseCamera(s32 param_0) { cXyz pos = relationalPos(mpPlayerActor, &vec); fopAc_ac_c* copy_rod_camera = player->getCopyRodCameraActor(); + bool sp19 = false; if (copy_rod_camera != NULL) { cXyz attention_pos = attentionPos(mpPlayerActor); if (!lineBGCheck(&attention_pos, &mViewCache.mEye, 0x40b7)) { + sp19 = true; mpAuxTargetActor1 = copy_rod_camera; setFlag(0x2000); } @@ -3540,8 +4066,12 @@ bool dCamera_c::chaseCamera(s32 param_0) { if (player->checkHorseRide()) { pos.y -= 100.0f; } - jutOutCheck(&pos, 5.0f); + if (!DEBUG || sp1E) { + jutOutCheck(&pos, 5.0f); + } + + bool sp18 = false; cXyz vec2(0.0f, 0.0f, mMonitor.field_0xc * 10.0f); cXyz vec3 = attentionPos(mpPlayerActor) + dCamMath::xyzRotateY(vec2, player_direction); dBgS_CamLinChk lin_chk; @@ -3560,6 +4090,7 @@ bool dCamera_c::chaseCamera(s32 param_0) { &chase->field_0x58, NULL, NULL); } chase->field_0xc = chase->field_0x4 - (int)mCurCamStyleTimer; + f32 sp194; f32 rate = chase->field_0xc / chase->field_0x8; chase->field_0x58 = pos; if (chase->field_0x95) { @@ -3583,16 +4114,16 @@ bool dCamera_c::chaseCamera(s32 param_0) { } } - f32 dVar43 = limitf(mViewCache.mDirection.R(), val8, val7); + sp194 = limitf(mViewCache.mDirection.R(), val8, val7); cSAngle ang = val12 + chase->field_0xa4 * (val13 - val12); if (!chase->field_0x95) { ang += mForwardTiltOffset; } chase->field_0x50 = ang.Degree(); - cSGlobe globe(dVar43, ang, cSAngle(mControlledYaw.Inv())); + cSGlobe globe(sp194, ang, cSAngle(mControlledYaw.Inv())); mViewCache.mDirection.R(mViewCache.mDirection.R() + (globe.R() - mViewCache.mDirection.R()) * rate); mViewCache.mDirection.V(mViewCache.mDirection.V() + (globe.V() - mViewCache.mDirection.V()) * rate); - if (chkFlag(0x100000) || bVar3 || bVar6) { + if (chkFlag(0x100000) || sp1C || bVar6) { mViewCache.mDirection.U(mViewCache.mDirection.U() + (chase->field_0x96 - mViewCache.mDirection.U()) * rate); } chase->field_0x64 = mViewCache.mCenter + mViewCache.mDirection.Xyz(); @@ -3603,7 +4134,8 @@ bool dCamera_c::chaseCamera(s32 param_0) { } chase->field_0x28 = chase->field_0x2c = mViewCache.mDirection.R(); - mViewCache.mFovy += (val17 + chase->field_0xa4 * (val18 - val17) - mViewCache.mFovy) * rate; + f32 sp188 = val17 + chase->field_0xa4 * (val18 - val17); + mViewCache.mFovy += (sp188 - mViewCache.mFovy) * rate; chase->field_0x8 -= chase->field_0xc; chase->field_0x8c = 0; chase->field_0x90 = false; @@ -3616,7 +4148,8 @@ bool dCamera_c::chaseCamera(s32 param_0) { chase->field_0xa0 = mGear; } if (chase->field_0x1c != 0) { - dVar52 = dCamMath::rationalBezierRatio(1.0f - (chase->field_0x1c - 1) / 20.0f, 0.5f); + f32 sp184 = 1.0f - (chase->field_0x1c - 1) / 20.0f; + dVar52 = dCamMath::rationalBezierRatio(sp184, 0.5f); } if (player->checkThrowDamage()) { @@ -3630,28 +4163,27 @@ bool dCamera_c::chaseCamera(s32 param_0) { chase->field_0x91 = false; } - bVar10 = false; - bool bVar11 = false; - bool bVar34 = false; + bool sp17 = false; + bool sp16 = false; + bool sp15 = false; cXyz player_pos = positionOf(mpPlayerActor); player_pos.y += 10.0f; - groundHeight(&player_pos); - footHeightOf(mpPlayerActor); + f32 sp17C = footHeightOf(mpPlayerActor) - groundHeight(&player_pos); if (mBG.field_0xc0.field_0x44 != 0 && !check_owner_action(mPadID, 0x200)) { chase->field_0x20 = 0.0f; chase->field_0x10 = 0; } else if (chase->field_0x10 < 30) { - bVar10 = true; + sp17 = true; chase->field_0x10++; chase->field_0x20 += (JumpCushion - chase->field_0x20) * dCamMath::rationalBezierRatio(chase->field_0x10 / 30.0f, 1.25f); } else if (!bVar2) { - bVar11 = true; + sp16 = true; if (mBG.field_0x5c.field_0x0 && dComIfG_Bgsp().GetGroundCode(mBG.field_0x5c.field_0x4) == 4) { - bVar34 = true; + sp15 = true; } else if (player->checkCokkoGlide()) { - bVar10 = true; - bVar11 = false; + sp17 = true; + sp16 = false; } val10 = 0.01f; chase->field_0x20 += (1.0f - chase->field_0x20) * 0.1f; @@ -3680,9 +4212,16 @@ bool dCamera_c::chaseCamera(s32 param_0) { } if (chase->field_0x91) { + if (val2 < -10.0f) { + val2 = -10.0f; + } + if (val3 < -10.0f) { + val3 = -10.0f; + } chase->field_0x88 = 0.25f; - } else if (bVar10 || bVar11) { - chase->field_0x88 = val5 * 0.1f + (0.9f - val5 * 0.1f) * chase->field_0x20; + } else if (sp17 || sp16) { + f32 sp178 = val5 * 0.1f; + chase->field_0x88 = sp178 + (0.9f - sp178) * chase->field_0x20; if (chkFlag(0x100000) && chase->field_0x84 > 0.25f) { chase->field_0x84 = chase->field_0x20 * 0.75f + 0.25f; } @@ -3698,24 +4237,25 @@ bool dCamera_c::chaseCamera(s32 param_0) { cXyz vec4(chase->field_0x84, chase->field_0x88, chase->field_0x84); - bVar8 = false; - bool bVar5 = false; - if (chkFlag(0x80) && mDirection.R() < val8) { - bVar5 = true; + bool sp14 = false; + bool sp13 = true; + bool sp12 = chkFlag(0x80) && mDirection.R() < val8; + + if (chkFlag(0x100000) || + check_owner_action(mPadID, 0x2800108) || + isPlayerCharging(mPadID) || + sp17) { + sp13 = false; } - if (!chkFlag(0x100000) && !check_owner_action(mPadID, 0x2800108)) { - isPlayerCharging(mPadID); - } - - if (bVar5 && mMonitor.field_0xc < 0.1f && !chkFlag(0x100000) + if (sp12 && mMonitor.field_0xc < 0.1f && !chkFlag(0x100000) && !check_owner_action(mPadID, 0x2800108) && !check_owner_action1(mPadID, 0x2110000)) { - bVar8 = true; + sp14 = true; } if (mCamParam.Flag(param_0, 0x1000)) { - f32 fVar55 = 0.0f; + f32 sp174 = 0.0f; if (push_any_key()) { chase->field_0x8c = 0; chase->field_0x90 = false; @@ -3731,15 +4271,15 @@ bool dCamera_c::chaseCamera(s32 param_0) { if (std::fabsf(vec5.y) < 200.0f) { vec5.y = 0.0f; vec5.x *= 0.5f; - f32 tmp = vec5.abs(); - if (tmp < 500.0f) { - fVar55 = -delta.x * 0.55f * (1.0f - tmp / 500.0f); + f32 sp16C = vec5.abs(); + if (sp16C < 500.0f) { + sp174 = -delta.x * 0.55f * (1.0f - sp16C / 500.0f); } } } } - chase->field_0x40 += (fVar55 - chase->field_0x40) * 0.01f; + chase->field_0x40 += (sp174 - chase->field_0x40) * 0.01f; cSGlobe globe(chase->field_0x40, mViewCache.mDirection.V(), mViewCache.mDirection.U() + cSAngle::_270); pos += globe.Xyz(); } @@ -3747,19 +4287,21 @@ bool dCamera_c::chaseCamera(s32 param_0) { mViewCache.mCenter += (pos - mViewCache.mCenter) * vec4; cSGlobe globe = mViewCache.mEye - mViewCache.mCenter; + f32 sp168; if (chase->field_0x1a > 0 && chase->field_0x1a <= 14) { - f32 tmp = chase->field_0x1a / 14.0f; - if (tmp > 1.0f) { - tmp = 1.0f; + sp168 = chase->field_0x1a / 14.0f; + if (sp168 > 1.0f) { + sp168 = 1.0f; } - f32 rate = dCamMath::rationalBezierRatio(tmp, charge_b_ratio); + f32 rate = dCamMath::rationalBezierRatio(sp168, charge_b_ratio); chase->field_0x70 = true; chase->field_0x48 = (1.0f - chase->field_0x48) * rate; } else if (bVar6) { + f32 sp160 = 0.2f; f32 target = 1.0f; - f32 tmp = dCamMath::rationalBezierRatio(mPadInfo.mMainStick.mLastPosX, val23); + sp168 = dCamMath::rationalBezierRatio(mPadInfo.mMainStick.mLastPosX, val23); if (!mDoCPd_c::getHoldA(mPadID)) { - target = 1.0f - ((1.0f - val24) + val24 * cSAngle(tmp * 180.0f).Cos()); + target = 1.0f - ((1.0f - val24) + val24 * cSAngle(sp168 * 180.0f).Cos()); target *= mPadInfo.mMainStick.mLastValue; } chase->field_0x24 += (target - chase->field_0x24) * 0.4f; @@ -3767,24 +4309,24 @@ bool dCamera_c::chaseCamera(s32 param_0) { chase->field_0x48 = 0.05f; } chase->field_0x70 = false; - chase->field_0x48 += (val24 * chase->field_0x24 - chase->field_0x48) * 0.2f; - } else if (chkFlag(0x100000) || bVar3) { + chase->field_0x48 += (val24 * chase->field_0x24 - chase->field_0x48) * sp160; + } else if (chkFlag(0x100000) || sp1C) { + f32 sp158 = 0.2f; if (chase->field_0x70) { chase->field_0x48 = 0.05f; } chase->field_0x70 = false; - f32 tmp = 0.2f; - chase->field_0x48 += (1.0f - chase->field_0x48) * tmp; + chase->field_0x48 += (1.0f - chase->field_0x48) * sp158; } else { chase->field_0x70 = true; if (mFakeAngleSys.field_0x0 != 0) { chase->field_0x48 = 0.0f; } else if (mPadInfo.mMainStick.mLastPosY >= 0.0f) { - f32 tmp = dCamMath::rationalBezierRatio(mPadInfo.mMainStick.mLastPosX, val23); - chase->field_0x48 = 1.0f - (1.0f - val24 + val24 * cSAngle(tmp * 180.0f).Cos()); + sp168 = dCamMath::rationalBezierRatio(mPadInfo.mMainStick.mLastPosX, val23); + chase->field_0x48 = 1.0f - (1.0f - val24 + val24 * cSAngle(sp168 * 180.0f).Cos()); } else { - f32 tmp = dCamMath::rationalBezierRatio(mPadInfo.mMainStick.mLastPosX, val23 * 2.0f); - chase->field_0x48 = 1.0f - (1.0f - val24 + val24 * cSAngle(tmp * 180.0f).Cos()); + sp168 = dCamMath::rationalBezierRatio(mPadInfo.mMainStick.mLastPosX, val23 * 2.0f); + chase->field_0x48 = 1.0f - (1.0f - val24 + val24 * cSAngle(sp168 * 180.0f).Cos()); } chase->field_0x48 *= mPadInfo.mMainStick.mLastValue; chase->field_0x48 *= val22; @@ -3797,13 +4339,18 @@ bool dCamera_c::chaseCamera(s32 param_0) { } else { chase->field_0x14 = -1; } - } else if (chase->field_0x14 < 0) { - chase->field_0x14--; - } else if (chase->field_0x14 < 30) { - chase->field_0x48 = chase->field_0x14 / 30.0f * 0.5f; - chase->field_0x14++; } else { - chase->field_0x48 = 0.5f; + int sp154 = 32; + int sp150 = 30; + f32 sp14C = 0.5f; + if (chase->field_0x14 < 0) { + chase->field_0x14--; + } else if (chase->field_0x14 < sp150) { + chase->field_0x48 = chase->field_0x14 / (f32)sp150 * sp14C; + chase->field_0x14++; + } else { + chase->field_0x48 = sp14C; + } } } else { chase->field_0x14 = 0; @@ -3811,23 +4358,24 @@ bool dCamera_c::chaseCamera(s32 param_0) { } cSAngle ang3; - f32 dVar39 = chase->field_0x48 * globe.V().Cos(); + f32 sp148 = chase->field_0x48 * globe.V().Cos(); if (chkFlag(0x80000)) { cXyz vec5 = mLastHitPos; cSGlobe globe = vec5 - mViewCache.mCenter; ang3 = globe.U(); - dVar39 = sAngleX(mCornerNormalSum).Cos() * 0.3f + 0.35f; + sp148 = sAngleX(mCornerNormalSum).Cos() * 0.3f + 0.35f; } else if (chase->field_0x90) { ang3 = player_direction.Inv(); - dVar39 = mCamSetup.WaitRollSpeed(); - } else if (bVar8) { + sp148 = mCamSetup.WaitRollSpeed(); + } else if (sp14) { ang3 = mViewCache.mDirection.U(); - } else if (bVar3) { + } else if (sp1C) { ang3 = player_direction.Inv(); } else if (chkFlag(0x100000) || bVar6) { if (player->checkChainBlockPushPull()) { - cSGlobe globe = mViewCache.mCenter - attentionPos(player->getChainGrabActor()); + fopAc_ac_c* sp144 = player->getChainGrabActor(); + cSGlobe globe = mViewCache.mCenter - attentionPos(sp144); ang3 = globe.U(); } else if ((mIsWolf != 1 || mCurMode != 1) && !mCamParam.Flag(param_0, 0x100)) { ang3 = player_direction.Inv(); @@ -3838,15 +4386,20 @@ bool dCamera_c::chaseCamera(s32 param_0) { ang3 = player_direction.Inv(); } + bool sp11 = false; + f32 sp140 = 0.05f; f32 last_pos_x = mPadInfo.mCStick.mLastPosX; - std::fabsf(last_pos_x); - std::fabsf(mPadInfo.mCStick.mLastPosY); + f32 sp138 = std::fabsf(last_pos_x); + f32 sp134 = mPadInfo.mCStick.mLastPosY; + f32 sp130 = std::fabsf(sp134); + f32 sp12C = 8.0f; + f32 sp128 = 12.0f; chase->field_0x93 = false; - if (!mCamParam.Flag(param_0, 0x40) && std::fabsf(last_pos_x) > 0.05f) { - chase->field_0xac += (dCamMath::rationalBezierRatio(last_pos_x, 0.5f) * 8.0f - chase->field_0xac) * chase->field_0x4c; + if (sp11 || (!mCamParam.Flag(param_0, 0x40) && std::fabsf(last_pos_x) > sp140)) { + chase->field_0xac += (dCamMath::rationalBezierRatio(last_pos_x, 0.5f) * sp12C - chase->field_0xac) * chase->field_0x4c; ang3 = globe.U() + cSAngle(chase->field_0xac); - dVar39 = std::fabsf(last_pos_x) - 0.05f; + sp148 = std::fabsf(last_pos_x) - 0.05f; if (mCamSetup.CheckFlag(0x1000) && mFakeAngleSys.field_0x0 == 0) { setUSOAngle(); } @@ -3873,18 +4426,24 @@ bool dCamera_c::chaseCamera(s32 param_0) { chase->field_0x93 = true; } + if (sp18) { + sp148 *= 0.6f; + } + if (chase->field_0x93) { mViewCache.mDirection.U(chase->field_0x9a); } else { - mViewCache.mDirection.U(globe.U() + (ang3 - globe.U()) * dVar39); + mViewCache.mDirection.U(globe.U() + (ang3 - globe.U()) * sp148); } cSAngle ang4; + f32 sp124 = chase->field_0x78; - if (bVar1 && !bVar7) { + if (sp1B && !bVar7) { chase->field_0x50 = charge_latitude; if (chase->field_0x1a < 14) { - chase->field_0x78 = dCamMath::rationalBezierRatio(chase->field_0x1a / 14.0f, charge_b_ratio); + f32 sp120 = chase->field_0x1a / 14.0f; + chase->field_0x78 = dCamMath::rationalBezierRatio(sp120, charge_b_ratio); setFlag(0x4000000); chase->field_0x1a++; } else { @@ -3903,25 +4462,27 @@ bool dCamera_c::chaseCamera(s32 param_0) { } chase->field_0x1a = 0; if (mCurMode == 1) { - f32 tmp = val12 + (val13 - val12) * chase->field_0xa4; + f32 sp11C = val12 + (val13 - val12) * chase->field_0xa4; chase->field_0x78 = 0.5f; - chase->field_0x50 += (tmp - chase->field_0x50) * chase->field_0x48; + chase->field_0x50 += (sp11C - chase->field_0x50) * chase->field_0x48; } else { - check_owner_action1(mPadID, 0x800000); - if (check_owner_action1(mPadID, 0x1000000) || chase->field_0x73) { + if (check_owner_action1(mPadID, 0x800000) && false) { + chase->field_0x78 = 0.25f; + chase->field_0x50 = val12; + } else if (check_owner_action1(mPadID, 0x1000000) || chase->field_0x73) { chase->field_0x78 = 0.75f; chase->field_0x50 = val12; } else if (chkFlag(0x10000)) { chase->field_0x50 += (val12 - chase->field_0x50) * chase->field_0x20; chase->field_0x78 = val16; - } else if (chkFlag(0x80000) || bVar8 || bVar9) { + } else if (chkFlag(0x80000) || sp14 || sp1D) { chase->field_0x78 = 0.0f; chase->field_0x50 = mViewCache.mDirection.V().Degree(); - } else if ((!bVar10 && !bVar11 && (!bVar2 || mCurMode != 0 || mGear != 0)) || bVar12) { - f32 tmp = val12 + (val13 - val12) * chase->field_0xa4; - tmp += mForwardTiltOffset.Degree(); - chase->field_0x50 += (tmp - chase->field_0x50) * val16; - chase->field_0x78 += (JumpCushion - chase->field_0x78) * 0.05f; + } else if ((!sp17 && !sp16 && (!bVar2 || mCurMode != 0 || mGear != 0)) || bVar12) { + f32 sp118 = val12 + (val13 - val12) * chase->field_0xa4; + sp118 += mForwardTiltOffset.Degree(); + chase->field_0x50 += (sp118 - chase->field_0x50) * val16; + chase->field_0x78 += (JumpCushion - chase->field_0x78) * sp1CC; } else if (bVar2) { chase->field_0x50 = globe.V().Degree(); chase->field_0x78 = 0.95f; @@ -3965,14 +4526,15 @@ bool dCamera_c::chaseCamera(s32 param_0) { if (chase->field_0x1c != 0) { val11 = 1.0f; } + f32 sp110 = chase->field_0x2c; chase->field_0x28 += (val8 - chase->field_0x28) * val11; chase->field_0x2c += (val7 - chase->field_0x2c) * val11; bool bVar6a = false; bool bVar2a = false; - if (bVar11 && !check_owner_action(mPadID, 0x100000)) { + if (sp16 && !check_owner_action(mPadID, 0x100000)) { fVar55 = mViewCache.mDirection.R() + (fVar55 - mViewCache.mDirection.R()) * 0.4f; - if (!bVar34 && fVar55 > val7 * 1.5f) { + if (!sp15 && fVar55 > val7 * 1.5f) { fVar55 = val7 * 1.5f; } } else if (fVar55 < chase->field_0x28) { @@ -3983,9 +4545,9 @@ bool dCamera_c::chaseCamera(s32 param_0) { bVar2a = true; } - if (bVar10) { + if (sp17) { chase->field_0x74 += (chase->field_0x20 - chase->field_0x74) * 0.01f; - } else if (bVar11) { + } else if (sp16) { chase->field_0x74 += (chase->field_0x20 - chase->field_0x74) * 0.01f; } else if (chase->field_0x1c != 0) { chase->field_0x74 = dVar52; @@ -3997,7 +4559,7 @@ bool dCamera_c::chaseCamera(s32 param_0) { chase->field_0x74 = 1.0f; } - mViewCache.mDirection.R(); + sp110 = mViewCache.mDirection.R(); mViewCache.mDirection.R(mViewCache.mDirection.R() + (fVar55 - mViewCache.mDirection.R()) * chase->field_0x74); chase->field_0x64 = mViewCache.mCenter + mViewCache.mDirection.Xyz(); mViewCache.mEye = chase->field_0x64; @@ -4007,12 +4569,13 @@ bool dCamera_c::chaseCamera(s32 param_0) { } else { chase->field_0x80 += (val21 - chase->field_0x80) * 0.01f; } - mViewCache.mFovy += ((val17 + (val18 - val17) * chase->field_0xa4) - mViewCache.mFovy) * chase->field_0x80; + f32 sp10C = val17 + (val18 - val17) * chase->field_0xa4; + mViewCache.mFovy += (sp10C - mViewCache.mFovy) * chase->field_0x80; if (chase->field_0x1c != 0) { chase->field_0x1c--; } - return 1; + return true; } bool dCamera_c::lockonCamera(s32 param_0) { @@ -4020,7 +4583,7 @@ bool dCamera_c::lockonCamera(s32 param_0) { cSAngle charge_latitude = cSAngle(mCamSetup.ChargeLatitude()); f32 charge_b_ratio = mCamSetup.ChargeBRatio(); int lockon_change_timer = mCamSetup.LockonChangeTimer(); - f32 unkFloatConst1 = 0.15f; + f32 sp200 = 0.15f; f32 val1 = mCamParam.Val(param_0, 1); f32 val5 = mCamParam.Val(param_0, 5); f32 val6 = mCamParam.Val(param_0, 6); @@ -4069,8 +4632,7 @@ bool dCamera_c::lockonCamera(s32 param_0) { if (mViewCache.mCenter.x == attention_pos.x && mViewCache.mCenter.z == attention_pos.z) { lockon->field_0x34.U(directionOf(mpPlayerActor)); } - lockon->field_0x58 = 0.0f; - lockon->field_0x54 = 0.0f; + lockon->field_0x54 = lockon->field_0x58 = 0.0f; lockon->field_0x5c = mCamSetup.Cushion4Base(); lockon->field_0x60 = 1.0f; lockon->field_0x14 = 0; @@ -4210,8 +4772,8 @@ bool dCamera_c::lockonCamera(s32 param_0) { cSGlobe globe; f32 curveWeight = mCamSetup.CurveWeight(); f32 lockon_release_distance = attention->LockonReleaseDistanse(); + f32 sp1A0; f32 sp19C = 10000.0f; - f32 fVar42; if (mpLockonTarget != NULL) { cXyz target_attention_pos = attentionPos(mpLockonTarget); @@ -4224,8 +4786,8 @@ bool dCamera_c::lockonCamera(s32 param_0) { #if DEBUG if (mCamSetup.CheckFlag(0x8000)) { - char name[dStage_NAME_LENGTH]; - fopAcM_getNameString(mpPlayerActor, name); + char name[16]; + fopAcM_getNameString(mpLockonTarget, name); dDbVw_Report(0x1e0, 0x109, "%s", name); } #endif @@ -4237,20 +4799,20 @@ bool dCamera_c::lockonCamera(s32 param_0) { globe.Val(target_attention_pos - player_attention_pos); globe.R(globe.R() + mpLockonTarget->attention_info.field_0xa); - fVar42 = globe.R() / lockon_release_distance; - if (fVar42 > 1.0f) { - fVar42 = 1.0f; + sp1A0 = globe.R() / lockon_release_distance; + if (sp1A0 > 1.0f) { + sp1A0 = 1.0f; } sp19C = dCamMath::xyzHorizontalDistance(target_attention_pos, player_attention_pos); } else { OS_REPORT("NULL TARGET&&&&&&&&&&&&& \n"); globe.Val(mCamSetup.ParallelDist(), cSAngle::_0, directionOf(mpPlayerActor)); - fVar42 = 1.0f; + sp1A0 = 1.0f; } cSAngle ang1 = globe.U(); - cSAngle ang2 = rangef(val23, val24, fVar42); + cSAngle ang2 = rangef(val23, val24, sp1A0); if (player->checkHorseRide()) { ang1.Val(directionOf(mpPlayerActor)); @@ -4273,13 +4835,13 @@ bool dCamera_c::lockonCamera(s32 param_0) { } } - f32 fVar14; + f32 sp194; if (mCurCamStyleTimer < lockon_change_timer && !lockon->field_0x2a) { - fVar14 = dCamMath::rationalBezierRatio((f32)mCurCamStyleTimer / lockon_change_timer, 0.5f); - ang2 *= fVar14; + sp194 = dCamMath::rationalBezierRatio((f32)mCurCamStyleTimer / lockon_change_timer, 0.5f); + ang2 *= sp194; } else if (mCurCamStyleTimer >= lockon_change_timer) { lockon->field_0x2a = true; - fVar14 = 1.0f; + sp194 = 1.0f; } cSAngle ang3(mViewCache.mDirection.U().Inv() - ang1); @@ -4301,19 +4863,18 @@ bool dCamera_c::lockonCamera(s32 param_0) { } cXyz attention_pos = attentionPos(mpPlayerActor); - bool bVar4 = false; - if (bVar4) { - f32 sp31c = positionOf(mpPlayerActor).x; - f32 sp324 = positionOf(mpPlayerActor).x; + if (mIsWolf == 1 && false) { + attention_pos.x = positionOf(mpPlayerActor).x; + attention_pos.z = positionOf(mpPlayerActor).z; } - u8 unusedByte1 = 0; + bool sp0C = false; if (chkFlag(0x80080)) { cXyz attention_pos = attentionPos(mpPlayerActor); if (!pointInSight(&attention_pos)) { if (lockon->field_0x14 == 0) { lockon->field_0x30 = lockon->field_0x2c == 1 ? 0 : 1; } - bVar4 = true; + sp0C = true; lockon->field_0x14 = 30; } } @@ -4323,10 +4884,10 @@ bool dCamera_c::lockonCamera(s32 param_0) { if (lockon->field_0x14 == 0 && mPadInfo.mMainStick.mLastValue <= 0.1f) { lockon->field_0x14 = 1; } - bVar4 = true; + sp0C = true; } - f32 fVar43 = 1.0f - fabsf(mPadInfo.mCStick.mLastPosY); + f32 fVar43 = 1.0f - std::fabsf(mPadInfo.mCStick.mLastPosY); f32 fVar44; if (bVar1) { @@ -4337,7 +4898,7 @@ bool dCamera_c::lockonCamera(s32 param_0) { } else if (mBG.field_0xc0.field_0x44 == 0) { fVar44 = mCamSetup.Cushion4Jump(); } else { - fVar44 = fVar14 * mCamSetup.Cushion4Base(); + fVar44 = sp194 * mCamSetup.Cushion4Base(); } lockon->field_0x5c += (fVar44 - lockon->field_0x5c) * mCamSetup.CusCus(); @@ -4345,10 +4906,10 @@ bool dCamera_c::lockonCamera(s32 param_0) { lockon->field_0x1c.z = attention_pos.z; f32 dVar37; - if (bVar4) { - dVar37 = rangef(val25, val26, fVar42) + 25.0f; + if (sp0C) { + dVar37 = rangef(val25, val26, sp1A0) + 25.0f; } else { - dVar37 = rangef(val25, val26, fVar42); + dVar37 = rangef(val25, val26, sp1A0); } lockon->field_0x1c.y += ((attention_pos.y + dVar37) - lockon->field_0x1c.y) * lockon->field_0x5c; @@ -4358,23 +4919,24 @@ bool dCamera_c::lockonCamera(s32 param_0) { lockon->field_0x34.Val(mViewCache.mCenter - vec); if (mViewCache.mCenter.x == vec.x && mViewCache.mCenter.z == vec.z) { lockon->field_0x34.U(directionOf(mpPlayerActor)); - f32 sp180 = globe.R() * 0.05f; } } - f32 fVar44a; + f32 sp184; + f32 sp180 = globe.R() * 0.05f; + f32 r; if (mpLockonTarget != NULL) { - f32 dVar28 = ang3.Cos(); - f32 dVar37 = cSAngle(globe.V()).Cos(); - if (dVar28 < 0.0f) { - dVar37 = -dVar37; + f32 sp178 = ang3.Cos(); + f32 sp174 = cSAngle(globe.V()).Cos(); + if (sp178 < 0.0f) { + sp174 = -sp174; } - f32 tmp = std::fabs(dVar28) < std::fabs(dVar37) ? dVar28 : dVar37; - tmp *= val4 < 0.5f ? val4 : 1.0f - val4; - fVar44a = val4 * globe.R() - tmp * globe.R() * val1; + f32 sp170 = std::fabs(sp178) < std::fabs(sp174) ? sp178 : sp174; + r = sp170 * (val4 < 0.5f ? val4 : 1.0f - val4); + sp184 = val4 * globe.R() - r * globe.R() * val1; } else { - fVar44a = globe.R() * 0.5f; - fVar44a += fVar44a * ang3.Cos(); + f32 sp16C = globe.R() * 0.5f; + sp184 = sp16C + sp16C * ang3.Cos(); } cSAngle ang4 = globe.U(); @@ -4383,15 +4945,13 @@ bool dCamera_c::lockonCamera(s32 param_0) { cSAngle u, v; cSAngle ang5 = globe.V() - lockon->field_0x34.V(); - f32 r; - if (bVar4) { - r = lockon->field_0x34.R(); - r = r * 0.75f * fabsf(ang5.Cos()); + if (sp0C) { + r = lockon->field_0x34.R() * 0.75f * std::fabsf(ang5.Cos()); u.Val(lockon->field_0x34.U() + (ang4 - lockon->field_0x34.U()) * lockon->field_0x58); v.Val(lockon->field_0x34.V() + ang5 * 0.05f); } else { - r = lockon->field_0x34.R(); - r = r + (fVar44a - r) * lockon->field_0x54 * fabsf(ang5.Cos()); + r = lockon->field_0x34.R() + (sp184 - lockon->field_0x34.R()) * + lockon->field_0x54 * std::fabsf(ang5.Cos()); u.Val(lockon->field_0x34.U() + (ang4 - lockon->field_0x34.U()) * lockon->field_0x58); v.Val(lockon->field_0x34.V() + ang5 * lockon->field_0x58); } @@ -4424,11 +4984,13 @@ bool dCamera_c::lockonCamera(s32 param_0) { cSAngle u2 = mViewCache.mDirection.U(); cSAngle v2 = mViewCache.mDirection.V(); f32 r2 = mViewCache.mDirection.R(); + f32 sp160; cSAngle ang6 = ang3 - ang2; - f32 curve_weight = mCamSetup.CurveWeight(); - f32 fVar47 = mPadInfo.mCStick.mLastPosX; + curveWeight = mCamSetup.CurveWeight(); + f32 sp15C; + f32 sp158 = mPadInfo.mCStick.mLastPosX; if (mCamParam.Flag(param_0, 0x40)) { - fVar47 = 0.0f; + sp158 = 0.0f; } if (mPadInfo.mCStick.mLastPosY > mCamSetup.mCStick.SwTHH()) { @@ -4442,10 +5004,9 @@ bool dCamera_c::lockonCamera(s32 param_0) { } bool bVar3 = false; - f32 fVar31; - if (fabsf(fVar47) > 0.05f) { - cSAngle ang = globe2.U() + cSAngle(dCamMath::rationalBezierRatio(fVar47, 0.5f) * 7.5f); - fVar31 = fabsf(fVar47) - 0.05f; + if (std::fabsf(sp158) > 0.05f) { + cSAngle ang = globe2.U() + cSAngle(dCamMath::rationalBezierRatio(sp158, 0.5f) * 7.5f); + sp15C = std::fabsf(sp158) - 0.05f; lockon->field_0x42 = ang; lockon->field_0x4c = 0.0f; bVar3 = true; @@ -4460,7 +5021,7 @@ bool dCamera_c::lockonCamera(s32 param_0) { ang1.Val(directionOf(mpPlayerActor)); } } else if (lockon->field_0x40) { - fVar31 = 1.0f; + sp15C = 1.0f; lockon->field_0x4c = 1.0f; } else { lockon->field_0x40 = false; @@ -4468,8 +5029,8 @@ bool dCamera_c::lockonCamera(s32 param_0) { } if (lockon->field_0x40 || bVar3) { - u2 = globe2.U() + (lockon->field_0x42 - globe2.U()) * fVar31; - } else if (bVar4) { + u2 = globe2.U() + (lockon->field_0x42 - globe2.U()) * sp15C; + } else if (sp0C) { cSAngle ang; if (lockon->field_0x30 == 1) { ang.Val(15.0f); @@ -4480,37 +5041,39 @@ bool dCamera_c::lockonCamera(s32 param_0) { } else if (check_owner_action1(mPadID, 0x1200000)) { u2 = globe2.U(); } else { + f32 sp154; if (mpLockonTarget == NULL) { - fVar31 = fVar14 * 0.15f; + sp15C = sp200 * sp194; } else if (ang3 < ang2) { - f32 ratio = dCamMath::rationalBezierRatio(-((f32)ang6.Val() / ang2.Val()), curve_weight); - fVar31 = val27 * ratio; + sp154 = (f32)ang6.Val() / ang2.Val(); + sp15C = val27 * dCamMath::rationalBezierRatio(-sp154, curveWeight); } else { cSAngle ang = ang2 + (cSAngle::_180 - ang2) * 0.5f; if (ang6 > ang) { ang6 = cSAngle::_180 - ang6; ang = cSAngle::_180 - ang; } - fVar31 = val27 + (val22 - val27) * dCamMath::rationalBezierRatio((f32)ang6.Val() / ang.Val(), curve_weight); + sp154 = (f32)ang6.Val() / ang.Val(); + sp15C = val27 + (val22 - val27) * dCamMath::rationalBezierRatio(sp154, curveWeight); } if (!lockon->field_0x2a) { - int iVar27 = lockon_change_timer >> 1; - if (mCurCamStyleTimer < iVar27) { - fVar31 = lockon_change_cushion * ((f32)mCurCamStyleTimer / iVar27); + f32 sp150; + int sp14C = lockon_change_timer >> 1; + if (mCurCamStyleTimer < sp14C) { + sp150 = (f32)mCurCamStyleTimer / sp14C; + sp15C = lockon_change_cushion * sp150; } else { - fVar31 = fVar31 * ((f32)(mCurCamStyleTimer - iVar27) / iVar27) - + lockon_change_cushion * (1.0f - (f32)(mCurCamStyleTimer - iVar27) / iVar27); + sp150 = (f32)(mCurCamStyleTimer - sp14C) / sp14C; + sp15C = sp15C * sp150 + lockon_change_cushion * (1.0f - sp150); } } ang6 = ang1.Inv() - mViewCache.mDirection.U(); - fabsf(ang6.Degree()) < 2.0f; - bool temp2 = false; - if (temp2) { + if (std::fabsf(ang6.Degree()) < 2.0f && false) { lockon->field_0x2a = true; } - u2 += ang6 * fVar31 * lockon->field_0x4c; + u2 += ang6 * sp15C * lockon->field_0x4c; } if (sp0E) { @@ -4535,14 +5098,14 @@ bool dCamera_c::lockonCamera(s32 param_0) { } else { lockon->field_0xc = 0; if (!mBG.field_0xc0.field_0x44 && !bVar1) { - v2 += (globe2.V() - v2) * fVar43 * fabsf(mViewCache.mDirection.V().Cos()); + v2 += (globe2.V() - v2) * fVar43 * std::fabsf(mViewCache.mDirection.V().Cos()); } else { cSAngle ang7 = lockon->field_0x34.V(); ang7 *= cSAngle(lockon->field_0x34.U() - mViewCache.mDirection.U()).Cos(); ang7 *= val13; - cSAngle ang8 = rangef(val15, val16, fVar42); + cSAngle ang8 = rangef(val15, val16, sp1A0); ang8 *= 1.0f - val13; - v2 += ((ang7 + ang8) - v2) * 0.15f * fVar14; + v2 += ((ang7 + ang8) - v2) * sp200 * sp194; } s16 val = v2.Val(); if (!mCamSetup.CheckLatitudeRange(&val)) { @@ -4550,22 +5113,20 @@ bool dCamera_c::lockonCamera(s32 param_0) { } } - if (bVar4) { + if (sp0C) { r2 += (280.0f - r2) * 0.05f; } else { - f32 radius = globe2.R(); - if (defaultRadius(val10, val11, &radius)) { - f32 radius2 = radius; - f32 range = rangef(val10, val11, fVar42) - radius2; - r2 = radius2 + (range) * 0.02f; + sp160 = globe2.R(); + if (defaultRadius(val10, val11, &sp160)) { + r2 = sp160 + (rangef(val10, val11, sp1A0) - sp160) * 0.02f; } else { - r2 += (radius - r2) * 0.4f * fVar14; + r2 += (sp160 - r2) * 0.4f * sp194; } } mViewCache.mDirection.Val(r2, v2, u2); mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); - mViewCache.mFovy += (rangef(val20, val21, fVar42) - mViewCache.mFovy) * 0.15f * fVar14; + mViewCache.mFovy += (rangef(val20, val21, sp1A0) - mViewCache.mFovy) * 0.15f * sp194; if (mpLockonTarget != NULL) { setFlag(0x2000); @@ -4591,32 +5152,47 @@ bool dCamera_c::lockonCamera(s32 param_0) { fopAc_ac_c* dCamera_c::getMsgCmdSpeaker() { dComIfG_MesgCamInfo_c* info = dComIfGp_getMesgCameraInfo(); fopAc_ac_c* actor = NULL; + int idx = 0; + char var_r28 = '\0'; + int sp10 = 0; if (info->mBasicID >= 1 && info->mBasicID <= 10) { - int idx = info->mBasicID - 1; + idx = info->mBasicID - 1; actor = info->mActor[idx]; + var_r28 = 'A'; } if (info->mID >= 1 && info->mID <= 10) { - int idx = info->mID - 1; + idx = info->mID - 1; actor = info->mActor[idx]; + var_r28 = 'T'; } +#if DEBUG + int sp0C; + if (mCamSetup.CheckFlag(0x8000)) { + if (actor != NULL) { + dDbVw_Report(20, 280, "ACT %c%02d", var_r28, var_r28 == 'a' ? idx + 1 : idx + 1); + } + } +#endif + return actor; } s32 dCamera_c::getMsgCmdCut(s32 param_0) { dComIfG_MesgCamInfo_c* info = dComIfGp_getMesgCameraInfo(); + s32 retval = param_0; if (!(info->mBasicID >= 1 && info->mBasicID <= 10) && info->mBasicID > 0) { - param_0 = info->mBasicID; + retval = info->mBasicID; } if (!(info->mID >= 1 && info->mID <= 10) && info->mID > 0) { - param_0 = info->mID; + retval = info->mID; } - return param_0; + return retval; } bool dCamera_c::talktoCamera(s32 param_0) { @@ -4635,14 +5211,15 @@ bool dCamera_c::talktoCamera(s32 param_0) { f32 val17 = mCamParam.Val(param_0, 17); f32 val18 = mCamParam.Val(param_0, 18); - f32 fVar21 = 300.0f; - fopAc_ac_c* ride_actor = NULL; - - TalkData* talk = (TalkData*)mWork; - + f32 sp480 = 300.0f; s32 zero = 0; - bool uVar18 = true; + fopAc_ac_c* listener; + fopAc_ac_c* speaker; + TalkData* talk = (TalkData*)mWork; + fopAc_ac_c* ride_actor = NULL; + bool sp5D = true; daAlink_c* player = (daAlink_c*)mpPlayerActor; + int val; if (mCurCamStyleTimer == 0) { talk->field_0x0 = 'TALK'; @@ -4658,20 +5235,18 @@ bool dCamera_c::talktoCamera(s32 param_0) { talk->field_0x89 = false; talk->field_0x88 = false; talk->field_0x8c = mBumpCheckFlags; - mBumpCheckFlags &= ~8; + mBumpCheckFlags &= ~0x8; if (!dComIfGp_evmng_cameraPlay()) { talk->field_0x84 = 0; talk->field_0x86 = 0; talk->field_0x54 = val7; talk->field_0x64 = val8; - talk->field_0x68 = val17; - talk->field_0x58 = val17; + talk->field_0x58 = talk->field_0x68 = val17; talk->field_0x6c = val18; talk->field_0x70 = mpPlayerActor; talk->field_0x74 = mpLockonTarget; } else { - int val; getEvIntData(&val, "Smoothless", 0); talk->field_0x84 = val; getEvIntData(&val, "Mode", 0); @@ -4697,12 +5272,10 @@ bool dCamera_c::talktoCamera(s32 param_0) { talk->field_0x80 = val2; } - fopAc_ac_c* speaker; - fopAc_ac_c* listener; - fopAc_ac_c* msg_speaker = getMsgCmdSpeaker(); - if (msg_speaker != NULL) { + fopAc_ac_c* msg_speaker_sp464 = getMsgCmdSpeaker(); + if (msg_speaker_sp464 != NULL) { listener = talk->field_0x70; - speaker = msg_speaker; + speaker = msg_speaker_sp464; } else if (dComIfGp_evmng_cameraPlay()) { listener = talk->field_0x70; speaker = talk->field_0x74; @@ -4711,9 +5284,13 @@ bool dCamera_c::talktoCamera(s32 param_0) { speaker = mpLockonTarget; } +#if DEBUG + JUT_ASSERT(7287, listener != speaker); +#else if (listener == speaker) { speaker = NULL; } +#endif if (listener == NULL || speaker == NULL) { mStyleSettle.mFinished = true; @@ -4723,97 +5300,132 @@ bool dCamera_c::talktoCamera(s32 param_0) { if (talk->field_0x78 != speaker) { mCurCamStyleTimer = 0; mStyleSettle.mFinished = false; +#if DEBUG + char name1[16]; + char name2[16]; + fopAcM_getNameString(talk->field_0x78, name1); + fopAcM_getNameString(speaker, name2); + OS_REPORT("camera: speaker change %s -> %s\n", name1, name2); +#endif talk->field_0x44 = 0; talk->field_0x78 = speaker; } - bool bVar3 = false; + bool sp5C = false; if (fopAcM_GetName(speaker) == PROC_NI || fopAcM_GetName(speaker) == PROC_BD || fopAcM_GetName(speaker) == PROC_SQ || fopAcM_GetName(speaker) == PROC_FR || fopAcM_GetName(speaker) == PROC_DO || fopAcM_GetName(speaker) == PROC_NPC_NE) { - bVar3 = true; + sp5C = true; talk->field_0x54 = 260.0f; talk->field_0x64 = 210.0f; - talk->field_0x68 = 45.0f; - talk->field_0x58 = 45.0f; + talk->field_0x58 = talk->field_0x68 = 45.0f; talk->field_0x6c = 48.0f; val24 = 80.0f; val23 = 40.0f; } - if (fopAcM_GetName(speaker) == PROC_Tag_Mwait && ((daTagMwait_c*)speaker)->checkEndMessage()) { - talk->field_0x3c = 35; - speaker = daPy_py_c::getMidnaActor(); + if (fopAcM_GetName(speaker) == PROC_Tag_Mwait) { + daTagMwait_c* tagMwait = (daTagMwait_c*)speaker; + if (tagMwait->checkEndMessage()) { + talk->field_0x3c = 35; + speaker = daPy_py_c::getMidnaActor(); + } } if (talk->field_0x86 != 0) { talk->field_0x3c = talk->field_0x86; } talk->field_0x3c = getMsgCmdCut(talk->field_0x3c); + +#if DEBUG + if (mCamSetup.ModeSwitchType() > 0) { + talk->field_0x3c = mCamSetup.ModeSwitchType(); + } + + if (mCamSetup.CheckFlag(0x8000)) { + char name[16]; + int x = 20; + int y = 190; + fopAcM_getNameString(speaker, name); + dDbVw_Report(x, y + 75, "%s", name); + dDbVw_Report(x + 70, y, "CUT%02d", talk->field_0x3c); + } + + if (mCamSetup.CheckFlag(0x100)) { + cXyz speakerAttnPos = attentionPos(speaker); + cXyz listenerAttnPos = attentionPos(listener); + debugDrawPoint(speakerAttnPos); + debugDrawPoint(listenerAttnPos); + debugDrawLine(speakerAttnPos, listenerAttnPos); + } +#endif + if (talk->field_0x3c != talk->field_0x40) { + OS_REPORT("%06d: talk cut change %d \n", mFrameCounter, talk->field_0x3c); + talk->field_0x44 = 0; talk->field_0x40 = talk->field_0x3c; } - cSAngle stack_134c = val16; - cSAngle stack_1350 = val15; - cSAngle stack_1354 = val24; - cSAngle stack_1358 = val23; + cSAngle sp298 = val16; + cSAngle sp294 = val15; + cSAngle sp290 = val24; + cSAngle sp28C = val23; if (mCurCamStyleTimer == 0) { - cSAngle stack_135c; - cXyz stack_13c; - cSGlobe stack_12c0 = positionOf(speaker) - positionOf(listener); - cXyz stack_148; - cXyz stack_154; + cSAngle sp288; + cXyz sp15BC; + cSGlobe sp540 = positionOf(speaker) - positionOf(listener); + cXyz sp15B0; + cXyz sp15A4; if (mCamParam.Flag(param_0, 0x400) || player->checkCanoeRide() || player->checkHorseRide() || check_owner_action(mPadID, 0x100000)) { - stack_148 = attentionPos(listener); - stack_154 = attentionPos(speaker); + sp15B0 = attentionPos(listener); + sp15A4 = attentionPos(speaker); if (player->checkCanoeRide() && listener == mpPlayerActor) { - stack_148.y += 40.0f; + sp15B0.y += 40.0f; } } else { - stack_13c = attentionPos(listener) - positionOf(listener); - stack_135c.Val(stack_12c0.U() - directionOf(listener)); - stack_148 = positionOf(listener) + dCamMath::xyzRotateY(stack_13c, stack_135c); - stack_13c = attentionPos(speaker) - positionOf(speaker); - stack_135c.Val(stack_12c0.U().Inv() - directionOf(speaker)); - stack_154 = positionOf(speaker) + dCamMath::xyzRotateY(stack_13c, stack_135c); + sp15BC = attentionPos(listener) - positionOf(listener); + sp288.Val(sp540.U() - directionOf(listener)); + sp15B0 = positionOf(listener) + dCamMath::xyzRotateY(sp15BC, sp288); + sp15BC = attentionPos(speaker) - positionOf(speaker); + sp288.Val(sp540.U().Inv() - directionOf(speaker)); + sp15A4 = positionOf(speaker) + dCamMath::xyzRotateY(sp15BC, sp288); } if (mIsWolf == 1) { if (listener == mpPlayerActor) { - stack_148.y += 80.0f; + sp15B0.y += 80.0f; } if (speaker == mpPlayerActor) { - stack_154.y += 80.0f; + sp15A4.y += 80.0f; } } talk->field_0x28 = mViewCache.mDirection; - talk->field_0xb4 = stack_148 - stack_154; + talk->field_0xb4 = sp15B0 - sp15A4; talk->field_0x30.Val(talk->field_0xb4); talk->field_0xb4.normalize(); - stack_148 += talk->field_0xb4 * listener->attention_info.field_0xa; - stack_154 -= talk->field_0xb4 * speaker->attention_info.field_0xa; + sp15B0 += talk->field_0xb4 * listener->attention_info.field_0xa; + sp15A4 -= talk->field_0xb4 * speaker->attention_info.field_0xa; if (talk->field_0x30.R() < 88.0f) { talk->field_0x30.R(88.0f); } - f32 dVar25 = dCamMath::xyzHorizontalDistance(stack_148, stack_154); - f32 fVar1 = dVar25 - 88.0f; - fVar21 -= 88.0f; - talk->field_0x7c = fVar1 > fVar21 ? 1.0f : fVar1 / fVar21; + f32 sp454 = dCamMath::xyzHorizontalDistance(sp15B0, sp15A4); + f32 sp450 = sp454 - 88.0f; + sp480 -= 88.0f; + talk->field_0x7c = sp450 > sp480 ? 1.0f : sp450 / sp480; talk->field_0x80 = val3 + (val2 - val3) * talk->field_0x7c; cXyz stack_160(val0, talk->field_0x80, val1); - f32 dVar21 = talk->field_0x64 + (talk->field_0x54 - talk->field_0x64) * talk->field_0x7c; - if (dVar21 < dVar25) { - dVar21 = dVar25; + f32 sp44C = talk->field_0x64 + (talk->field_0x54 - talk->field_0x64) * talk->field_0x7c; + if (sp44C < sp454) { + sp44C = sp454; } - talk->field_0x28.R(dVar21); + talk->field_0x28.R(sp44C); if (talk->field_0x84 != 0) { talk->field_0x48 = 1; @@ -4828,103 +5440,108 @@ bool dCamera_c::talktoCamera(s32 param_0) { talk->field_0x48 += 8; } - cSAngle stack_1360; - cSAngle stack_1364; + cSAngle sp284; + cSAngle sp280; if (talk->field_0x5c >= -180.0f && talk->field_0x5c <= 360.0f) { - stack_1360.Val(talk->field_0x5c); - stack_1364 = stack_1360 - talk->field_0x30.U(); - talk->field_0x28.U(stack_1360); + sp284.Val(talk->field_0x5c); + sp280 = sp284 - talk->field_0x30.U(); + talk->field_0x28.U(sp284); } else if (fopAcM_GetName(speaker) == PROC_OBJ_KANBAN2 || fopAcM_GetName(speaker) == PROC_TAG_KMSG || fopAcM_GetName(speaker) == PROC_KNOB20 || fopAcM_GetName(speaker) == PROC_Obj_NamePlate) { - stack_1360.Val(directionOf(speaker)); - stack_1364 = stack_1360 - talk->field_0x30.U(); - talk->field_0x28.U(stack_1360); + sp284.Val(directionOf(speaker)); + sp280 = sp284 - talk->field_0x30.U(); + talk->field_0x28.U(sp284); } else { - stack_1360.Val(mViewCache.mDirection.U()); - stack_1364 = stack_1360 - talk->field_0x30.U(); - if (stack_1364 > cSAngle::_90) { - stack_1364 = cSAngle::_90 - (stack_1364 - cSAngle::_90); + sp284.Val(mViewCache.mDirection.U()); + sp280 = sp284 - talk->field_0x30.U(); + if (sp280 > cSAngle::_90) { + sp280 = cSAngle::_90 - (sp280 - cSAngle::_90); } - if (stack_1364 < cSAngle::_270) { - stack_1364 = cSAngle::_270 - (stack_1364 - cSAngle::_270); + if (sp280 < cSAngle::_270) { + sp280 = cSAngle::_270 - (sp280 - cSAngle::_270); } - if (stack_1364 > stack_1354) { - stack_1364 = stack_1354; + if (sp280 > sp290) { + sp280 = sp290; } - if (stack_1364 > cSAngle::_0 && stack_1364 < stack_1358) { - stack_1364 = stack_1358; + if (sp280 > cSAngle::_0 && sp280 < sp28C) { + sp280 = sp28C; } - if (stack_1364 < -stack_1354) { - stack_1364 = -stack_1354; + if (sp280 < -sp290) { + sp280 = -sp290; } - if (stack_1364 < cSAngle::_0 && stack_1364 > -stack_1358) { - stack_1364 = -stack_1358; + if (sp280 < cSAngle::_0 && sp280 > -sp28C) { + sp280 = -sp28C; } - talk->field_0x28.U(talk->field_0x30.U() + stack_1364); + talk->field_0x28.U(talk->field_0x30.U() + sp280); } + fopAc_ac_c* sp448 = listener; + fopAc_ac_c* sp444 = speaker; + f32 sp440 = 0.25f; + { - cSAngle stack_1368 = talk->field_0x28.U(); - cXyz stack_16c = stack_148; - cXyz stack_178 = stack_154; - cXyz stack_184 = stack_178 - stack_16c; - cSGlobe stack_12c8 = stack_184; - stack_184.normalize(); - stack_16c -= stack_184 * listener->attention_info.field_0xa; - stack_178 += stack_184 * speaker->attention_info.field_0xa; + cSAngle sp27C = talk->field_0x28.U(); + cXyz sp158C = sp15B0; + cXyz sp1580 = sp15A4; + cXyz sp1574 = sp1580 - sp158C; + cSGlobe sp538 = sp1574; + sp1574.normalize(); + sp158C -= sp1574 * listener->attention_info.field_0xa; + sp1580 += sp1574 * sp444->attention_info.field_0xa; - cXyz stack_190; - cXyz stack_19c = stack_178 - stack_16c; - if (lineBGCheck(&stack_16c, &stack_178, &stack_190, 0x40b7)) { - stack_178 = stack_190 - stack_19c.norm() * 10.0f; - stack_19c = stack_178 - stack_16c; + cXyz sp1568; + cXyz sp15CC = sp1580 - sp158C; + if (lineBGCheck(&sp158C, &sp1580, &sp1568, 0x40b7)) { + sp1580 = sp1568 - sp15CC.norm() * 10.0f; + sp15CC = sp1580 - sp158C; } - cXyz stack_1a8 = stack_16c + stack_19c * 0.5f; - cXyz stack_1b4 = stack_160; - cSAngle stack_136c = stack_1368 - stack_12c8.U(); - if (stack_136c < cSAngle::_0) { - stack_1b4.x = -stack_1b4.x; + cXyz sp1550 = sp158C + sp15CC * 0.5f; + cXyz sp1544 = stack_160; + cSAngle sp278 = sp27C - sp538.U(); + if (sp278 < cSAngle::_0) { + sp1544.x = -sp1544.x; } - cSGlobe stack_12d0 = stack_1b4; - stack_12d0.U(stack_12c8.U() + stack_12d0.U()); - stack_12c8.R(stack_12c8.R() * 0.5f * stack_136c.Cos() * 0.25f); - talk->field_0x4 = stack_1a8 + stack_12c8.Xyz() + stack_12d0.Xyz(); - talk->field_0xc0 = stack_178; + cSGlobe sp530 = sp1544; + sp530.U(sp538.U() + sp530.U()); + sp538.R(sp538.R() * 0.5f * sp278.Cos() * sp440); + talk->field_0x4 = sp1550 + sp538.Xyz() + sp530.Xyz(); + talk->field_0xc0 = sp1580; } - cSAngle stack_1370; + cSAngle sp274; if (talk->field_0x60 != 999.9f) { - stack_1370.Val(talk->field_0x60); + sp274.Val(talk->field_0x60); } else { - stack_1370 = talk->field_0x30.V() * (stack_1364.Cos() + 0.1f) * val6 + cSAngle(val12); - if (stack_1370 > stack_134c) { - stack_1370 = stack_134c; + sp274 = talk->field_0x30.V() * (sp280.Cos() + 0.1f) * val6 + cSAngle(val12); + if (sp274 > sp298) { + sp274 = sp298; } - if (stack_1370 < stack_1350) { - stack_1370 = stack_1350; + if (sp274 < sp294) { + sp274 = sp294; } } - talk->field_0x28.V(stack_1370); + talk->field_0x28.V(sp274); - cSAngle stack_1374; + cSAngle sp270; if (player->checkRide()) { ride_actor = player->getRideActor(); } if (talk->field_0x30.U() - talk->field_0x28.U() > cSAngle::_0) { - stack_1374 = cSAngle(10.0f); + sp270 = cSAngle(10.0f); } else { - stack_1374 = cSAngle(-10.0f); + sp270 = cSAngle(-10.0f); } talk->field_0x10 = talk->field_0x4 + talk->field_0x28.Xyz(); talk->field_0x58 = talk->field_0x6c + (talk->field_0x68 - talk->field_0x6c) * talk->field_0x7c; - bool bVar13 = false; + bool sp5B = false; + int i = 0; if (fopAcM_GetName(speaker) == PROC_MIDNA && mMidnaRidingAndVisible) { talk->field_0x4 = attentionPos(speaker); talk->field_0x4.y -= 35.0f; @@ -4936,10 +5553,10 @@ bool dCamera_c::talktoCamera(s32 param_0) { talk->field_0x48 = 16; talk->field_0x58 = 55.0f; talk->field_0x88 = true; - bVar13 = true; + sp5B = true; } - if (bVar3) { + if (sp5C) { talk->field_0x4.y = attentionPos(speaker).y - 10.0f; } @@ -4947,17 +5564,16 @@ bool dCamera_c::talktoCamera(s32 param_0) { talk->field_0x28.U(mViewCache.mDirection.U()); } - cSAngle stack_1378; - int i; - bool bVar2 = false; - cXyz stack_1c0 = cXyz::Zero; + cSAngle sp26C; + bool sp5A = false; + cXyz sp1538 = cXyz::Zero; for (i = 0; i < 36; i++) { - stack_1378 = talk->field_0x28.U() - talk->field_0x30.U(); - if (std::fabsf(stack_1378.Degree()) < 10.0f) { - talk->field_0x28.U(talk->field_0x28.U() + stack_1374); + sp26C = talk->field_0x28.U() - talk->field_0x30.U(); + if (std::fabsf(sp26C.Degree()) < 10.0f) { + talk->field_0x28.U(talk->field_0x28.U() + sp270); } else { - if (!bVar13) { + if (!sp5B) { f32 radius = radiusActorInSight(listener, speaker, &talk->field_0x4, &talk->field_0x10, talk->field_0x58, 0, 0.1f); @@ -4967,36 +5583,36 @@ bool dCamera_c::talktoCamera(s32 param_0) { } } - if (!lineBGCheck(&stack_148, &talk->field_0x10, talk->field_0x8c) + if (!lineBGCheck(&sp15B0, &talk->field_0x10, talk->field_0x8c) && !lineBGCheck(&talk->field_0x4, &talk->field_0x10, talk->field_0x8c) - && !lineCollisionCheck(stack_148, talk->field_0x10, listener, speaker, ride_actor)) + && !lineCollisionCheck(sp15B0, talk->field_0x10, listener, speaker, ride_actor)) { - if (!lineBGCheck(&stack_154, &talk->field_0x10, talk->field_0x8c) - && !lineCollisionCheck(stack_154, talk->field_0x10, listener, speaker, ride_actor)) + if (!lineBGCheck(&sp15A4, &talk->field_0x10, talk->field_0x8c) + && !lineCollisionCheck(sp15A4, talk->field_0x10, listener, speaker, ride_actor)) { - bVar2 = true; + sp5A = true; break; } - stack_1c0 = talk->field_0x10; + sp1538 = talk->field_0x10; } - talk->field_0x28.U(talk->field_0x28.U() + stack_1374); + talk->field_0x28.U(talk->field_0x28.U() + sp270); if (talk->field_0x60 != 999.9f) { - stack_1370.Val(talk->field_0x60); + sp274.Val(talk->field_0x60); } else { - stack_1370 = talk->field_0x30.V() + sp274 = talk->field_0x30.V() * (cSAngle(talk->field_0x30.U() - talk->field_0x28.U()).Cos() + 0.1f) * val6 + cSAngle(val12); - if (stack_1370 > stack_134c) { - stack_1370 = stack_134c; + if (sp274 > sp298) { + sp274 = sp298; } - if (stack_1370 < stack_1350) { - stack_1370 = stack_1350; + if (sp274 < sp294) { + sp274 = sp294; } } - talk->field_0x28.V(stack_1370); + talk->field_0x28.V(sp274); if (!talk->field_0x88) { talk->field_0x4 = relationalPos2(listener, speaker, &stack_160, 0.25f, @@ -5006,16 +5622,16 @@ bool dCamera_c::talktoCamera(s32 param_0) { } } - if (!bVar2) { - stack_1c0.set(0.0f, 15.0f, -20.0f); - talk->field_0x4 = relationalPos(mpPlayerActor, &stack_1c0); - stack_1c0.set(60.0f, 70.0f, -200.0f); - talk->field_0x10 = relationalPos(mpPlayerActor, &stack_1c0); + if (!sp5A) { + sp1538.set(0.0f, 15.0f, -20.0f); + talk->field_0x4 = relationalPos(mpPlayerActor, &sp1538); + sp1538.set(60.0f, 70.0f, -200.0f); + talk->field_0x10 = relationalPos(mpPlayerActor, &sp1538); talk->field_0x28.Val(talk->field_0x10 - talk->field_0x4); } - talk->field_0xcc = stack_148; - talk->field_0xd8 = stack_154; + talk->field_0xcc = sp15B0; + talk->field_0xd8 = sp15A4; talk->field_0x4c = talk->field_0x48 * (talk->field_0x48 + 1) >> 1; if (talk->field_0x38 == -1) { @@ -5030,13 +5646,13 @@ bool dCamera_c::talktoCamera(s32 param_0) { if ((fopAcM_GetName(speaker) == PROC_Tag_Mhint && ((daTagMhint_c*)speaker)->checkNoAttention()) || (fopAcM_GetName(speaker) == PROC_Tag_Mstop && ((daTagMstop_c*)speaker)->checkNoAttention())) { - bool bVar13 = false; + bool sp59 = false; if (mIsWolf == 1 && check_owner_action(mPadID, 0x100000)) { - bVar13 = true; + sp59 = true; } if (mCurCamStyleTimer == 0) { - if (!bVar13) { + if (!sp59) { talk->field_0x28.U(cSAngle(15.0f) + directionOf(listener)); talk->field_0x28.V(cSAngle(5.0f)); talk->field_0x28.R(140.0f); @@ -5052,425 +5668,462 @@ bool dCamera_c::talktoCamera(s32 param_0) { } talk->field_0x4 = positionOf(listener); - if (!bVar13) { + if (!sp59) { talk->field_0x4.y += 110.0f; } else { talk->field_0x4.y += 10.0f; } } - cXyz stack_1cc = cXyz::Zero; - bool bVar13 = false; + cXyz sp152C = cXyz::Zero; + bool sp58 = false; if (is_player(listener) && mIsWolf == 1) { - cXyz stack_1d8(0.0f, 0.0f, 45.0f); - stack_1cc = dCamMath::xyzRotateY(stack_1d8, directionOf(listener)); - bVar13 = true; + cXyz sp1520(0.0f, 0.0f, 45.0f); + sp152C = dCamMath::xyzRotateY(sp1520, directionOf(listener)); + sp58 = true; } - cXyz stack_1e4; - cXyz stack_1f0; - cXyz stack_1fc; - cXyz stack_208; - fopAc_ac_c* actor1; - fopAc_ac_c* actor2; - int iVar5 = talk->field_0x3c; + cXyz sp1514; + cXyz sp1508; + cXyz sp14FC; + cXyz sp14F0; + int sp430 = talk->field_0x3c; - switch (iVar5) { + switch (sp430) { case 0: break; case 50: talk->field_0x48 = 1; talk->field_0x4c = 1.0f; - iVar5 = 0; + sp430 = 0; break; case 20: case 21: - case 62: - if (iVar5 != 20) { - actor1 = listener; - stack_1e4 = talkEyePos(listener); - stack_1f0 = talkEyePos(speaker); - stack_1fc = talkBasePos(listener); - stack_208 = talkBasePos(speaker); - if (bVar3) { - stack_1f0.y = attentionPos(speaker).y; + case 62: { + fopAc_ac_c* actor1_sp42C; + fopAc_ac_c* actor2_sp428; + + if (sp430 != 20) { + actor1_sp42C = speaker; + actor2_sp428 = listener; + sp1514 = talkEyePos(actor2_sp428); + sp1508 = talkEyePos(actor1_sp42C); + sp14FC = talkBasePos(actor2_sp428); + sp14F0 = talkBasePos(actor1_sp42C); + if (sp5C) { + sp1508.y = attentionPos(speaker).y; } if (fopAcM_GetName(speaker) == PROC_NPC_KKRI) { - stack_1f0.y = attentionPos(speaker).y - 40.0f; + sp1508.y = attentionPos(speaker).y - 40.0f; } - if (bVar13) { - stack_1fc += stack_1cc; + if (sp58) { + sp14FC += sp152C; } } else { - actor1 = speaker; - stack_1e4 = talkEyePos(speaker); - stack_1f0 = talkEyePos(listener); - stack_1fc = talkBasePos(speaker); - stack_208 = talkBasePos(listener); - if (bVar3) { - stack_1e4.y = attentionPos(speaker).y; + actor1_sp42C = listener; + actor2_sp428 = speaker; + sp1514 = talkEyePos(actor2_sp428); + sp1508 = talkEyePos(actor1_sp42C); + sp14FC = talkBasePos(actor2_sp428); + sp14F0 = talkBasePos(actor1_sp42C); + if (sp5C) { + sp1514.y = attentionPos(speaker).y; } - if (bVar13) { - stack_208 += stack_1cc; + if (sp58) { + sp14F0 += sp152C; } } - mViewCache.mCenter = stack_208; + mViewCache.mCenter = sp14F0; if (talk->field_0x44 == 0) { - cXyz stack_214 = stack_1fc; - stack_214.y = stack_1e4.y; - cXyz stack_220 = stack_208; - stack_220.y = stack_1f0.y; - mViewCache.mDirection.Val(stack_214 - stack_220); - if (iVar5 == 62) { + cXyz sp14E4 = sp14FC; + sp14E4.y = sp1514.y; + cXyz sp14D8 = sp14F0; + sp14D8.y = sp1508.y; + mViewCache.mDirection.Val(sp14E4 - sp14D8); + if (sp430 == 62) { mViewCache.mDirection.U(directionOf(speaker)); } mViewCache.mDirection.R(125.0f); - talk->field_0x1c.y = stack_1f0.y - 25.0f - stack_208.y; + talk->field_0x1c.y = sp1508.y - 25.0f - sp14F0.y; mStyleSettle.mFinished = true; } - mViewCache.mCenter.y = stack_208.y + talk->field_0x1c.y; + mViewCache.mCenter.y = sp14F0.y + talk->field_0x1c.y; mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); mViewCache.mFovy = 60.0f; - hideActor(actor1); + hideActor(actor2_sp428); break; + } case 39: case 40: - case 64: - if (iVar5 != 39) { - actor1 = speaker; - actor2 = listener; + case 64: { + fopAc_ac_c* actor1_sp424; + fopAc_ac_c* actor2_sp420; + + if (sp430 != 39) { + actor1_sp424 = speaker; + actor2_sp420 = listener; } else { - actor1 = listener; - actor2 = speaker; + actor1_sp424 = listener; + actor2_sp420 = speaker; } if (talk->field_0x44 == 0) { - if (iVar5 != 39) { - stack_1e4 = talkEyePos(actor2); - stack_1f0 = talkEyePos(actor1); - stack_1fc = talkBasePos(actor2); - stack_208 = talkBasePos(actor1); - if (bVar3) { - stack_1f0.y = attentionPos(speaker).y; + if (sp430 != 39) { + sp1514 = talkEyePos(actor2_sp420); + sp1508 = talkEyePos(actor1_sp424); + sp14FC = talkBasePos(actor2_sp420); + sp14F0 = talkBasePos(actor1_sp424); + if (sp5C) { + sp1508.y = attentionPos(speaker).y; } - if (bVar13) { - stack_1fc += stack_1cc; + if (sp58) { + sp14FC += sp152C; } } else { - stack_1e4 = talkEyePos(actor2); - stack_1f0 = talkEyePos(actor1); - stack_1fc = talkBasePos(actor2); - stack_208 = talkBasePos(actor1); - if (bVar3) { - stack_1e4.y = attentionPos(speaker).y; + sp1514 = talkEyePos(actor2_sp420); + sp1508 = talkEyePos(actor1_sp424); + sp14FC = talkBasePos(actor2_sp420); + sp14F0 = talkBasePos(actor1_sp424); + if (sp5C) { + sp1514.y = attentionPos(speaker).y; } - if (bVar13) { - stack_208 += stack_1cc; + if (sp58) { + sp14F0 += sp152C; } } - mViewCache.mCenter = stack_208; - cXyz stack_22c = stack_1fc; - stack_22c.y = stack_1e4.y; - cXyz stack_238 = stack_208; - stack_238.y = stack_1f0.y; - mViewCache.mDirection.Val(stack_22c - stack_238); - if (iVar5 == 64) { + mViewCache.mCenter = sp14F0; + cXyz sp14CC = sp14FC; + sp14CC.y = sp1514.y; + cXyz sp14C0 = sp14F0; + sp14C0.y = sp1508.y; + mViewCache.mDirection.Val(sp14CC - sp14C0); + if (sp430 == 64) { mViewCache.mDirection.U(directionOf(speaker)); } mViewCache.mDirection.R(125.0f); mViewCache.mDirection.V(cSAngle(35.0f)); - talk->field_0x1c.y = stack_1f0.y - 25.0f - stack_208.y; + talk->field_0x1c.y = sp1508.y - 25.0f - sp14F0.y; mStyleSettle.mFinished = true; - mViewCache.mCenter.y = stack_208.y + talk->field_0x1c.y; + mViewCache.mCenter.y = sp14F0.y + talk->field_0x1c.y; mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); mViewCache.mFovy = 60.0f; } - hideActor(actor2); + hideActor(actor2_sp420); break; + } case 16: case 17: - case 61: - if (iVar5 != 16) { - actor1 = listener; - stack_1e4 = talkEyePos(listener); - stack_1f0 = talkEyePos(speaker); - stack_1fc = talkBasePos(listener); - stack_208 = talkBasePos(speaker); - if (bVar3) { - stack_1f0.y = attentionPos(speaker).y; + case 61: { + fopAc_ac_c* actor1_sp41C; + fopAc_ac_c* actor2_sp418; + + if (sp430 != 16) { + actor1_sp41C = speaker; + actor2_sp418 = listener; + sp1514 = talkEyePos(actor2_sp418); + sp1508 = talkEyePos(actor1_sp41C); + sp14FC = talkBasePos(actor2_sp418); + sp14F0 = talkBasePos(actor1_sp41C); + if (sp5C) { + sp1508.y = attentionPos(speaker).y; } - if (bVar13) { - stack_1fc += stack_1cc; + if (sp58) { + sp14FC += sp152C; } } else { - actor1 = speaker; - stack_1e4 = talkEyePos(speaker); - stack_1f0 = talkEyePos(listener); - stack_1fc = talkBasePos(speaker); - stack_208 = talkBasePos(listener); - if (bVar3) { - stack_1e4.y = attentionPos(speaker).y; + actor1_sp41C = listener; + actor2_sp418 = speaker; + sp1514 = talkEyePos(actor2_sp418); + sp1508 = talkEyePos(actor1_sp41C); + sp14FC = talkBasePos(actor2_sp418); + sp14F0 = talkBasePos(actor1_sp41C); + if (sp5C) { + sp1514.y = attentionPos(speaker).y; } - if (bVar13) { - stack_208 += stack_1cc; + if (sp58) { + sp14F0 += sp152C; } } - mViewCache.mCenter = stack_208; + mViewCache.mCenter = sp14F0; if (talk->field_0x44 == 0) { - cXyz stack_244 = stack_1fc; - stack_244.y = stack_1e4.y; - cXyz stack_250 = stack_208; - stack_250.y = stack_1f0.y; - mViewCache.mDirection.Val(stack_244 - stack_250); - if (iVar5 == 61) { + cXyz sp14B4 = sp14FC; + sp14B4.y = sp1514.y; + cXyz sp14A8 = sp14F0; + sp14A8.y = sp1508.y; + mViewCache.mDirection.Val(sp14B4 - sp14A8); + if (sp430 == 61) { mViewCache.mDirection.U(directionOf(speaker)); } mViewCache.mDirection.R(76.0f); - talk->field_0x1c.y = stack_1f0.y - 10.0f - stack_208.y; + talk->field_0x1c.y = sp1508.y - 10.0f - sp14F0.y; mStyleSettle.mFinished = true; } - mViewCache.mCenter.y = stack_208.y + talk->field_0x1c.y; + mViewCache.mCenter.y = sp14F0.y + talk->field_0x1c.y; mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); mViewCache.mFovy = 50.0f; - hideActor(actor1); + hideActor(actor2_sp418); break; + } case 22: case 23: - case 63: - if (iVar5 != 22) { - actor1 = listener; - stack_1e4 = talkEyePos(listener); - stack_1f0 = talkEyePos(speaker); - stack_1fc = talkBasePos(listener); - stack_208 = talkBasePos(speaker); - if (bVar3) { - stack_1f0.y = attentionPos(speaker).y; + case 63: { + fopAc_ac_c* actor1_sp414; + fopAc_ac_c* actor2_sp410; + + if (sp430 != 22) { + actor1_sp414 = speaker; + actor2_sp410 = listener; + sp1514 = talkEyePos(actor2_sp410); + sp1508 = talkEyePos(actor1_sp414); + sp14FC = talkBasePos(actor2_sp410); + sp14F0 = talkBasePos(actor1_sp414); + if (sp5C) { + sp1508.y = attentionPos(speaker).y; } - if (bVar13) { - stack_1fc += stack_1cc; + if (sp58) { + sp14FC += sp152C; } } else { - actor1 = speaker; - stack_1e4 = talkEyePos(speaker); - stack_1f0 = talkEyePos(listener); - stack_1fc = talkBasePos(speaker); - stack_208 = talkBasePos(listener); - if (bVar3) { - stack_1e4.y = attentionPos(speaker).y; + actor1_sp414 = listener; + actor2_sp410 = speaker; + sp1514 = talkEyePos(actor2_sp410); + sp1508 = talkEyePos(actor1_sp414); + sp14FC = talkBasePos(actor2_sp410); + sp14F0 = talkBasePos(actor1_sp414); + if (sp5C) { + sp1514.y = attentionPos(speaker).y; } - if (bVar13) { - stack_208 += stack_1cc; + if (sp58) { + sp14F0 += sp152C; } } - mViewCache.mCenter = stack_208; + mViewCache.mCenter = sp14F0; if (talk->field_0x44 == 0) { - cXyz stack_25c = stack_1fc; - stack_25c.y = stack_1e4.y; - cXyz stack_268 = stack_1f0; - stack_268.y = stack_1f0.y; - mViewCache.mDirection.Val(stack_25c - stack_268); - if (iVar5 == 63) { + cXyz sp149C = sp14FC; + sp149C.y = sp1514.y; + cXyz sp1490 = sp1508; + sp1490.y = sp1508.y; + mViewCache.mDirection.Val(sp149C - sp1490); + if (sp430 == 63) { mViewCache.mDirection.U(directionOf(speaker)); } mViewCache.mDirection.R(125.0f); - talk->field_0x1c.y = stack_1f0.y - 15.0f - stack_208.y; + talk->field_0x1c.y = sp1508.y - 15.0f - sp14F0.y; mStyleSettle.mFinished = true; } - mViewCache.mCenter.y = stack_208.y + talk->field_0x1c.y; + mViewCache.mCenter.y = sp14F0.y + talk->field_0x1c.y; mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); mViewCache.mFovy = 45.0f; - hideActor(actor1); + hideActor(actor2_sp410); break; + } case 41: case 42: case 65: { - if (iVar5 != 41) { - actor1 = speaker; - actor2 = listener; - stack_1e4 = talkEyePos(listener); - stack_1f0 = talkEyePos(speaker); - stack_1fc = talkBasePos(listener); - stack_208 = talkBasePos(speaker); - if (bVar3) { - stack_1f0.y = attentionPos(speaker).y; + fopAc_ac_c* actor1_sp40C; + fopAc_ac_c* actor2_sp408; + + if (sp430 != 41) { + actor1_sp40C = speaker; + actor2_sp408 = listener; + sp1514 = talkEyePos(actor2_sp408); + sp1508 = talkEyePos(actor1_sp40C); + sp14FC = talkBasePos(actor2_sp408); + sp14F0 = talkBasePos(actor1_sp40C); + if (sp5C) { + sp1508.y = attentionPos(speaker).y; } - if (bVar13) { - stack_1fc += stack_1cc; + if (sp58) { + sp14FC += sp152C; } } else { - actor1 = listener; - actor2 = speaker; - stack_1e4 = talkEyePos(speaker); - stack_1f0 = talkEyePos(listener); - stack_1fc = talkBasePos(speaker); - stack_208 = talkBasePos(listener); - if (bVar3) { - stack_1e4.y = attentionPos(speaker).y; + actor1_sp40C = listener; + actor2_sp408 = speaker; + sp1514 = talkEyePos(actor2_sp408); + sp1508 = talkEyePos(actor1_sp40C); + sp14FC = talkBasePos(actor2_sp408); + sp14F0 = talkBasePos(actor1_sp40C); + if (sp5C) { + sp1514.y = attentionPos(speaker).y; } - if (bVar13) { - stack_208 += stack_1cc; + if (sp58) { + sp14F0 += sp152C; } } - talk->field_0x90 = stack_208; + talk->field_0x90 = sp14F0; if (talk->field_0x44 == 0) { - cXyz stack_274 = stack_1fc; - stack_274.y = stack_1e4.y; - cXyz stack_280 = stack_1f0; - stack_280.y = stack_1f0.y; - talk->field_0xa8.Val(stack_274 - stack_280); + cXyz sp1484 = sp14FC; + sp1484.y = sp1514.y; + cXyz sp1478 = sp1508; + sp1478.y = sp1508.y; + talk->field_0xa8.Val(sp1484 - sp1478); talk->field_0xa8.R(190.0f); - if (iVar5 == 0x41) { + if (sp430 == 0x41) { talk->field_0xa8.U(directionOf(speaker)); } - talk->field_0x1c.y = stack_1f0.y - 40.0f - stack_208.y; + talk->field_0x1c.y = sp1508.y - 40.0f - sp14F0.y; mStyleSettle.mFinished = true; } - talk->field_0x90.y = stack_208.y + talk->field_0x1c.y; + talk->field_0x90.y = sp14F0.y + talk->field_0x1c.y; talk->field_0x9c = talk->field_0x90 + talk->field_0xa8.Xyz(); talk->field_0xb0 = 45.0f; - cXyz stack_28c = attentionPos(actor1); - if (lineBGCheck(&stack_28c, &talk->field_0x9c, talk->field_0x8c) - || lineCollisionCheck(stack_28c, talk->field_0x9c, listener, speaker, NULL)) + cXyz sp146C = attentionPos(actor1_sp40C); + if (lineBGCheck(&sp146C, &talk->field_0x9c, talk->field_0x8c) + || lineCollisionCheck(sp146C, talk->field_0x9c, listener, speaker, NULL)) { - iVar5 = 0; + sp430 = 0; + +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(90, 190, "-----"); + } +#endif } else { mViewCache.mCenter = talk->field_0x90; mViewCache.mEye = talk->field_0x9c; mViewCache.mDirection = talk->field_0xa8; mViewCache.mFovy = talk->field_0xb0; - hideActor(actor2); + hideActor(actor2_sp408); } break; } case 14: case 15: { - if (iVar5 == 14) { - actor1 = speaker; - actor2 = listener; - stack_1e4 = talkEyePos(listener); - stack_1f0 = talkEyePos(speaker); - cSGlobe stack_12d8 = talk->field_0x30; - stack_1fc = talkBasePos(listener); - stack_208 = talkBasePos(speaker); - if (bVar3) { - stack_1f0.y = attentionPos(speaker).y; + fopAc_ac_c* actor1_sp404; + fopAc_ac_c* actor2_sp400; + + if (sp430 == 14) { + actor1_sp404 = speaker; + actor2_sp400 = listener; + sp1514 = talkEyePos(actor2_sp400); + sp1508 = talkEyePos(actor1_sp404); + cSGlobe sp528 = talk->field_0x30; + sp14FC = talkBasePos(actor2_sp400); + sp14F0 = talkBasePos(actor1_sp404); + if (sp5C) { + sp1508.y = attentionPos(speaker).y; } - if (bVar13) { - stack_1fc += stack_1cc; + if (sp58) { + sp14FC += sp152C; } } else { - actor1 = listener; - actor2 = speaker; - stack_1e4 = talkEyePos(speaker); - stack_1f0 = talkEyePos(listener); - stack_1fc = talkBasePos(speaker); - stack_208 = talkBasePos(listener); - if (bVar3) { - stack_1e4.y = attentionPos(speaker).y; + actor1_sp404 = listener; + actor2_sp400 = speaker; + sp1514 = talkEyePos(actor2_sp400); + sp1508 = talkEyePos(actor1_sp404); + sp14FC = talkBasePos(actor2_sp400); + sp14F0 = talkBasePos(actor1_sp404); + if (sp5C) { + sp1514.y = attentionPos(speaker).y; } - if (bVar13) { - stack_208 += stack_1cc; + if (sp58) { + sp14F0 += sp152C; } } - mViewCache.mCenter = stack_208; - mViewCache.mCenter.y = stack_1f0.y - 10.0f - talk->field_0x7c * 10.0f; + mViewCache.mCenter = sp14F0; + mViewCache.mCenter.y = sp1508.y - 10.0f - talk->field_0x7c * 10.0f; if (talk->field_0x44 == 0) { - mViewCache.mDirection.Val(stack_1e4 - stack_1f0); + mViewCache.mDirection.Val(sp1514 - sp1508); mViewCache.mDirection.R(mViewCache.mDirection.R() - 5.0f); mStyleSettle.mFinished = true; } mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); - f32 tmp1 = 35.0f; - f32 tmp2 = 85.0f; - mViewCache.mFovy = tmp2 + (tmp1 - tmp2) * talk->field_0x7c; - cXyz stack_298 = attentionPos(actor1); - hideActor(actor2); + f32 sp3FC = 85.0f; + f32 sp3F8 = 35.0f; + mViewCache.mFovy = sp3FC + (sp3F8 - sp3FC) * talk->field_0x7c; + cXyz sp404 = attentionPos(actor1_sp404); + hideActor(actor2_sp400); break; } case 18: case 19: { - int uVar17; - if (iVar5 == 18) { - actor1 = listener; - uVar17 = talk->field_0x38; - stack_1e4 = talkEyePos(speaker); - stack_1f0 = talkEyePos(listener); - stack_1fc = talkBasePos(speaker); - stack_208 = talkBasePos(listener); - if (bVar3) { - stack_1e4.y = attentionPos(speaker).y; + fopAc_ac_c* actor1_sp3F4; + fopAc_ac_c* actor2_sp3F0; + + int sp3EC; + if (sp430 == 18) { + actor1_sp3F4 = listener; + actor2_sp3F0 = speaker; + sp3EC = talk->field_0x38; + sp1514 = talkEyePos(actor2_sp3F0); + sp1508 = talkEyePos(actor1_sp3F4); + sp14FC = talkBasePos(actor2_sp3F0); + sp14F0 = talkBasePos(actor1_sp3F4); + if (sp5C) { + sp1514.y = attentionPos(speaker).y; } - if (bVar13) { - stack_208 += stack_1cc; + if (sp58) { + sp14F0 += sp152C; } } else { - actor1 = speaker; - uVar17 = talk->field_0x38 ? 0 : 1; - stack_1e4 = talkEyePos(listener); - stack_1f0 = talkEyePos(speaker); - stack_1fc = talkBasePos(listener); - stack_208 = talkBasePos(speaker); - if (bVar3) { - stack_1f0.y = attentionPos(speaker).y; + actor1_sp3F4 = speaker; + actor2_sp3F0 = listener; + sp3EC = talk->field_0x38 ? 0 : 1; + sp1514 = talkEyePos(actor2_sp3F0); + sp1508 = talkEyePos(actor1_sp3F4); + sp14FC = talkBasePos(actor2_sp3F0); + sp14F0 = talkBasePos(actor1_sp3F4); + if (sp5C) { + sp1508.y = attentionPos(speaker).y; } - if (bVar13) { - stack_1fc += stack_1cc; + if (sp58) { + sp14FC += sp152C; } } if (talk->field_0x44 == 0) { mStyleSettle.mFinished = true; - cXyz stack_2a4(0.0f, -15.0f, 15.0f); - cSGlobe stack_12e0 = stack_1e4 - attentionPos(actor1); - cSGlobe stack_12e8 = stack_2a4; - stack_12e8.U(stack_12e8.U() + stack_12e0.U()); - talk->field_0x1c = stack_208 + stack_12e8.Xyz(); - talk->field_0x1c.y += stack_1f0.y - stack_208.y; - f32 fVar36; - if (uVar17) { - fVar36 = -80.0f; - } else { - fVar36 = 75.0f; - } - cSAngle stack_137c = fVar36; + cXyz sp1454(0.0f, -15.0f, 15.0f); + cSGlobe sp520 = sp1514 - attentionPos(actor1_sp3F4); + cSGlobe sp518 = sp1454; + sp518.U(sp518.U() + sp520.U()); + talk->field_0x1c = sp14F0 + sp518.Xyz(); + talk->field_0x1c.y += sp1508.y - sp14F0.y; + cSAngle sp268 = sp3EC ? -80.0f : 75.0f; talk->field_0x90 = talk->field_0x1c; - talk->field_0xa8.Val(120.0f, cSAngle::_0, stack_137c + directionOf(actor1)); + talk->field_0xa8.Val(120.0f, cSAngle::_0, sp268 + directionOf(actor1_sp3F4)); } talk->field_0x9c = talk->field_0x90 + talk->field_0xa8.Xyz(); talk->field_0xb0 = 50.0f; - cXyz stack_2b0 = attentionPos(actor1); - if (lineBGCheck(&stack_2b0, &talk->field_0x9c, talk->field_0x8c) - || lineCollisionCheck(stack_2b0, talk->field_0x9c, listener, speaker, NULL)) + cXyz sp1448 = attentionPos(actor1_sp3F4); + if (lineBGCheck(&sp1448, &talk->field_0x9c, talk->field_0x8c) + || lineCollisionCheck(sp1448, talk->field_0x9c, listener, speaker, NULL)) { - iVar5 = 0; + sp430 = 0; + +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(90, 190, "-----"); + } +#endif } else { mViewCache.mCenter = talk->field_0x90; mViewCache.mEye = talk->field_0x9c; @@ -5482,61 +6135,66 @@ bool dCamera_c::talktoCamera(s32 param_0) { case 24: case 25: { - int uVar17; - if (iVar5 == 24) { - actor1 = listener; - uVar17 = talk->field_0x38; - stack_1e4 = talkEyePos(speaker); - stack_1f0 = talkEyePos(listener); - stack_1fc = talkBasePos(speaker); - stack_208 = talkBasePos(listener); - if (bVar3) { - stack_1e4.y = attentionPos(speaker).y; + fopAc_ac_c* actor1_sp3E8; + fopAc_ac_c* actor2_sp3E4; + + int sp3E0; + if (sp430 == 24) { + actor1_sp3E8 = listener; + actor2_sp3E4 = speaker; + sp3E0 = talk->field_0x38; + sp1514 = talkEyePos(actor2_sp3E4); + sp1508 = talkEyePos(actor1_sp3E8); + sp14FC = talkBasePos(actor2_sp3E4); + sp14F0 = talkBasePos(actor1_sp3E8); + if (sp5C) { + sp1514.y = attentionPos(speaker).y; } - if (bVar13) { - stack_208 += stack_1cc; + if (sp58) { + sp14F0 += sp152C; } } else { - actor1 = speaker; - uVar17 = talk->field_0x38 ? 0 : 1; - stack_1e4 = talkEyePos(listener); - stack_1f0 = talkEyePos(speaker); - stack_1fc = talkBasePos(listener); - stack_208 = talkBasePos(speaker); - if (bVar3) { - stack_1f0.y = attentionPos(speaker).y; + actor1_sp3E8 = speaker; + actor2_sp3E4 = listener; + sp3E0 = talk->field_0x38 ? 0 : 1; + sp1514 = talkEyePos(actor2_sp3E4); + sp1508 = talkEyePos(actor1_sp3E8); + sp14FC = talkBasePos(actor2_sp3E4); + sp14F0 = talkBasePos(actor1_sp3E8); + if (sp5C) { + sp1508.y = attentionPos(speaker).y; } - if (bVar13) { - stack_1fc += stack_1cc; + if (sp58) { + sp14FC += sp152C; } } if (talk->field_0x44 == 0) { mStyleSettle.mFinished = true; - cXyz stack_2bc(0.0f, -10.0f, 20.0f); - cSGlobe stack_12f0 = stack_1e4 - attentionPos(actor1); - cSGlobe stack_12f8 = stack_2bc; - stack_12f8.U(stack_12f8.U() + stack_12f0.U()); - talk->field_0x1c = stack_1f0 + stack_12f8.Xyz(); - f32 fVar36; - if (uVar17) { - fVar36 = -45.0f; - } else { - fVar36 = 45.0f; - } - cSAngle stack_1380 = fVar36; + cXyz sp143C(0.0f, -10.0f, 20.0f); + cSGlobe sp510 = sp1514 - attentionPos(actor1_sp3E8); + cSGlobe sp508 = sp143C; + sp508.U(sp508.U() + sp510.U()); + talk->field_0x1c = sp1508 + sp508.Xyz(); + cSAngle sp264 = sp3E0 ? -45.0f : 45.0f; talk->field_0x90 = talk->field_0x1c; - talk->field_0xa8.Val(120.0f, cSAngle(25.0f), stack_1380 + directionOf(actor1)); + talk->field_0xa8.Val(120.0f, cSAngle(25.0f), sp264 + directionOf(actor1_sp3E8)); } talk->field_0x9c = talk->field_0x90 + talk->field_0xa8.Xyz(); talk->field_0xb0 = 45.0f; - cXyz stack_2c8 = attentionPos(actor1); - if (lineBGCheck(&stack_2c8, &talk->field_0x9c, talk->field_0x8c) - || lineCollisionCheck(stack_2c8, talk->field_0x9c, listener, speaker, NULL)) + cXyz sp3E8 = attentionPos(actor1_sp3E8); + if (lineBGCheck(&sp3E8, &talk->field_0x9c, talk->field_0x8c) + || lineCollisionCheck(sp3E8, talk->field_0x9c, listener, speaker, NULL)) { - iVar5 = 0; + sp430 = 0; + +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(90, 190, "-----"); + } +#endif } else { mViewCache.mCenter = talk->field_0x90; mViewCache.mEye = talk->field_0x9c; @@ -5548,72 +6206,70 @@ bool dCamera_c::talktoCamera(s32 param_0) { case 26: case 27: { - int uVar17; - if (iVar5 != 26) { - actor1 = listener; - actor2 = speaker; - uVar17 = talk->field_0x38; - stack_1e4 = talkEyePos(speaker); - stack_1f0 = talkEyePos(listener); - stack_1fc = talkBasePos(speaker); - stack_208 = talkBasePos(listener); - if (bVar3) { - stack_1e4.y = attentionPos(speaker).y; + fopAc_ac_c* actor1_sp3DC; + fopAc_ac_c* actor2_sp3D8; + + int sp3D4; + if (sp430 != 26) { + actor1_sp3DC = listener; + actor2_sp3D8 = speaker; + sp3D4 = talk->field_0x38; + sp1514 = talkEyePos(actor2_sp3D8); + sp1508 = talkEyePos(actor1_sp3DC); + sp14FC = talkBasePos(actor2_sp3D8); + sp14F0 = talkBasePos(actor1_sp3DC); + if (sp5C) { + sp1514.y = attentionPos(speaker).y; } - if (bVar13) { - stack_208 += stack_1cc; + if (sp58) { + sp14F0 += sp152C; } } else { - actor1 = speaker; - actor2 = listener; - uVar17 = talk->field_0x38 ? 0 : 1; - stack_1e4 = talkEyePos(listener); - stack_1f0 = talkEyePos(speaker); - stack_1fc = talkBasePos(listener); - stack_208 = talkBasePos(speaker); - if (bVar3) { - stack_1f0.y = attentionPos(speaker).y; + actor1_sp3DC = speaker; + actor2_sp3D8 = listener; + sp3D4 = talk->field_0x38 ? 0 : 1; + sp1514 = talkEyePos(actor2_sp3D8); + sp1508 = talkEyePos(actor1_sp3DC); + sp14FC = talkBasePos(actor2_sp3D8); + sp14F0 = talkBasePos(actor1_sp3DC); + if (sp5C) { + sp1508.y = attentionPos(speaker).y; } - if (bVar13) { - stack_1fc += stack_1cc; + if (sp58) { + sp14FC += sp152C; } } if (talk->field_0x44 == 0) { mStyleSettle.mFinished = true; - cXyz stack_2d4(0.0f, -30.0f, 20.0f); - if (bVar3 && iVar5 == 27) { - stack_2d4.y = -5.0f; + cXyz sp1424(0.0f, -30.0f, 20.0f); + if (sp5C && sp430 == 27) { + sp1424.y = -5.0f; } - cSGlobe stack_1300 = attentionPos(actor2) - attentionPos(actor1); - cSGlobe stack_1308 = stack_2d4; - stack_1308.U(stack_1308.U() + stack_1300.U()); - talk->field_0x1c = stack_1f0 + stack_1308.Xyz(); - f32 fVar36; - if (uVar17) { - fVar36 = -30.0f; - } else { - fVar36 = 35.0f; - } - cSAngle stack_1384 = fVar36; - if (bVar3) { - fVar36 = 0.0f; - } else { - fVar36 = -35.0f; - } - cSAngle stack_1388 = fVar36; + cSGlobe sp500 = attentionPos(actor2_sp3D8) - attentionPos(actor1_sp3DC); + cSGlobe sp4F8 = sp1424; + sp4F8.U(sp4F8.U() + sp500.U()); + talk->field_0x1c = sp1508 + sp4F8.Xyz(); + cSAngle sp260 = sp3D4 ? -30.0f : 35.0f; + cSAngle sp25C = sp5C ? 0.0f : -35.0f; talk->field_0x90 = talk->field_0x1c; - talk->field_0xa8.Val(90.0f, cSAngle(-35.0f), stack_1384 + directionOf(actor1)); + talk->field_0xa8.Val(90.0f, cSAngle(-35.0f), sp260 + directionOf(actor1_sp3DC)); } talk->field_0x9c = talk->field_0x90 + talk->field_0xa8.Xyz(); talk->field_0xb0 = 55.0f; - cXyz stack_2e0 = attentionPos(actor1); - if (lineBGCheck(&stack_2e0, &talk->field_0x9c, talk->field_0x8c) - || lineCollisionCheck(stack_2e0, talk->field_0x9c, listener, speaker, NULL)) + cXyz sp1418 = attentionPos(actor1_sp3DC); + if (lineBGCheck(&sp1418, &talk->field_0x9c, talk->field_0x8c) + || lineCollisionCheck(sp1418, talk->field_0x9c, listener, speaker, NULL)) { - iVar5 = 0; + sp430 = 0; + +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(90, 190, "-----"); + } +#endif } else { mViewCache.mCenter = talk->field_0x90; mViewCache.mEye = talk->field_0x9c; @@ -5627,69 +6283,79 @@ bool dCamera_c::talktoCamera(s32 param_0) { case 12: case 30: case 31: { - fopAc_ac_c* actor; - int uVar17; - if (iVar5 != 11 && iVar5 != 30) { - actor = speaker; - uVar17 = talk->field_0x38; - stack_1e4 = talkEyePos(listener); - stack_1f0 = talkEyePos(speaker); - stack_1fc = talkBasePos(listener); - stack_208 = talkBasePos(speaker); - if (bVar3) { - stack_1f0.y = attentionPos(speaker).y; + fopAc_ac_c* actor1_sp3D0; + fopAc_ac_c* actor2_sp3CC; + int sp3C8; + if (sp430 != 11 && sp430 != 30) { + actor1_sp3D0 = speaker; + actor2_sp3CC = listener; + sp3C8 = talk->field_0x38; + sp1514 = talkEyePos(actor2_sp3CC); + sp1508 = talkEyePos(actor1_sp3D0); + sp14FC = talkBasePos(actor2_sp3CC); + sp14F0 = talkBasePos(actor1_sp3D0); + if (sp5C) { + sp1508.y = attentionPos(speaker).y; } - if (bVar13) { - stack_1fc += stack_1cc; + if (sp58) { + sp14FC += sp152C; } } else { - actor = listener; - uVar17 = talk->field_0x38 ? 0 : 1; - stack_1e4 = talkEyePos(speaker); - stack_1f0 = talkEyePos(listener); - stack_1fc = talkBasePos(speaker); - stack_208 = talkBasePos(listener); - if (bVar3) { - stack_1e4.y = attentionPos(speaker).y; + actor1_sp3D0 = listener; + actor2_sp3CC = speaker; + sp3C8 = talk->field_0x38 ? 0 : 1; + sp1514 = talkEyePos(actor2_sp3CC); + sp1508 = talkEyePos(actor1_sp3D0); + sp14FC = talkBasePos(actor2_sp3CC); + sp14F0 = talkBasePos(actor1_sp3D0); + if (sp5C) { + sp1514.y = attentionPos(speaker).y; } - if (bVar13) { - stack_208 += stack_1cc; + if (sp58) { + sp14F0 += sp152C; } } if (talk->field_0x44 == 0) { - f32 fVar36 = (stack_1f0.y - talkBasePos(actor).y) * 1.2f; - f32 fVar37 = (stack_1e4.y - stack_1f0.y) * 0.45f; - f32 fVar38 = fVar36 * 0.7f + fVar37; - cXyz stack_2ec(25.0f, 10.0f, talk->field_0x30.R() * 0.45f); - cXyz stack_2f8(75.0f, fVar37, -75.0f); - if (uVar17) { - stack_2ec.x = -stack_2ec.x; - stack_2f8.x = -stack_2f8.x; + f32 sp3C4 = 0.45f; + f32 sp3C0 = (sp1508.y - talkBasePos(actor1_sp3D0).y) * 1.2f; + f32 sp3BC = (sp1514.y - sp1508.y) * sp3C4; + f32 sp3B8 = sp3C0 * 0.7f + sp3BC; + cXyz sp140C(25.0f, 10.0f, talk->field_0x30.R() * sp3C4); + cXyz sp1400(75.0f, sp3BC, -75.0f); + if (sp3C8) { + sp140C.x = -sp140C.x; + sp1400.x = -sp1400.x; } - cSGlobe stack_1310 = stack_1e4 - stack_1f0; - cSGlobe stack_1318 = stack_2ec; - stack_1318.U(stack_1318.U() + stack_1310.U()); - talk->field_0x90 = attentionPos(actor) + stack_1318.Xyz(); - talk->field_0x90.y = stack_208.y + fVar38; - stack_1318.Val(stack_2f8); - stack_1318.U(stack_1318.U() + stack_1310.U().Inv()); - stack_1318.V(stack_1318.V() * 0.25f + stack_1310.V() * 0.75f); - talk->field_0x9c = stack_1e4 + stack_1318.Xyz(); + cSGlobe sp4F0 = sp1514 - sp1508; + cSGlobe sp4E8 = sp140C; + sp4E8.U(sp4E8.U() + sp4F0.U()); + talk->field_0x90 = attentionPos(actor1_sp3D0) + sp4E8.Xyz(); + talk->field_0x90.y = sp14F0.y + sp3B8; + sp4E8.Val(sp1400); + sp4E8.U(sp4E8.U() + sp4F0.U().Inv()); + sp4E8.V(sp4E8.V() * 0.25f + sp4F0.V() * 0.75f); + talk->field_0x9c = sp1514 + sp4E8.Xyz(); talk->field_0xa8.Val(talk->field_0x9c - talk->field_0x90); mStyleSettle.mFinished = true; - if (iVar5 == 11 || iVar5 == 12) { + if (sp430 == 11 || sp430 == 12) { talk->field_0xb0 = 55.0f; } else { talk->field_0xb0 = 65.0f; } } - cXyz stack_304 = attentionPos(actor); - if (lineBGCheck(&stack_304, &talk->field_0x9c, talk->field_0x8c) - || lineCollisionCheck(stack_304, talk->field_0x9c, listener, speaker, NULL)) + cXyz sp13F4 = attentionPos(actor1_sp3D0); + if (lineBGCheck(&sp13F4, &talk->field_0x9c, talk->field_0x8c) + || lineCollisionCheck(sp13F4, talk->field_0x9c, listener, speaker, NULL)) { - iVar5 = 0; + sp430 = 0; + +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(90, 190, "-----"); + } +#endif } else { mViewCache.mCenter = talk->field_0x90; mViewCache.mEye = talk->field_0x9c; @@ -5705,31 +6371,32 @@ bool dCamera_c::talktoCamera(s32 param_0) { } mViewCache.mCenter = talk->field_0x4; mViewCache.mDirection.Val(400.0f, cSAngle(35.0f), talk->field_0x28.U()); - if (mViewCache.mDirection.V() > stack_134c) { - mViewCache.mDirection.V(stack_134c); + if (mViewCache.mDirection.V() > sp298) { + mViewCache.mDirection.V(sp298); } - if (mViewCache.mDirection.V() < stack_1350) { - mViewCache.mDirection.V(stack_1350); + if (mViewCache.mDirection.V() < sp294) { + mViewCache.mDirection.V(sp294); } - cXyz stack_310 = attentionPos(listener); - cXyz stack_31c = attentionPos(speaker); - cSAngle stack_138c; + cXyz sp13E8 = attentionPos(listener); + cXyz sp13DC = attentionPos(speaker); + cSAngle sp258; if (talk->field_0x38) { - stack_138c = 20.0f; + sp258 = 20.0f; } else { - stack_138c = -20.0f; + sp258 = -20.0f; } - for (int i = 0; i < 18; i++) { + int i = 0; + for (i = 0; i < 18; i++) { mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); - if (!lineBGCheck(&stack_310, &mViewCache.mEye, talk->field_0x8c) - && !lineBGCheck(&stack_31c, &mViewCache.mEye, talk->field_0x8c) - && !lineCollisionCheck(stack_310, mViewCache.mEye, listener, speaker, NULL) - && !lineCollisionCheck(stack_31c, mViewCache.mEye, listener, speaker, NULL)) + if (!lineBGCheck(&sp13E8, &mViewCache.mEye, talk->field_0x8c) + && !lineBGCheck(&sp13DC, &mViewCache.mEye, talk->field_0x8c) + && !lineCollisionCheck(sp13E8, mViewCache.mEye, listener, speaker, NULL) + && !lineCollisionCheck(sp13DC, mViewCache.mEye, listener, speaker, NULL)) { break; } - mViewCache.mDirection.U(mViewCache.mDirection.U() + stack_138c); + mViewCache.mDirection.U(mViewCache.mDirection.U() + sp258); } mViewCache.mFovy = 60.0f; @@ -5740,37 +6407,38 @@ bool dCamera_c::talktoCamera(s32 param_0) { if (talk->field_0x44 == 0) { mStyleSettle.mFinished = true; mViewCache.mCenter = talk->field_0x4; - cSAngle stack_1390; + cSAngle sp254; if (talk->field_0x38) { - stack_1390 = talk->field_0x30.U() + cSAngle::_90; + sp254 = talk->field_0x30.U() + cSAngle::_90; } else { - stack_1390 = talk->field_0x30.U() + cSAngle::_270; + sp254 = talk->field_0x30.U() + cSAngle::_270; } - mViewCache.mDirection.Val(400.0f, cSAngle(15.0f), stack_1390); - if (mViewCache.mDirection.V() > stack_134c) { - mViewCache.mDirection.V(stack_134c); + mViewCache.mDirection.Val(400.0f, cSAngle(15.0f), sp254); + if (mViewCache.mDirection.V() > sp298) { + mViewCache.mDirection.V(sp298); } - if (mViewCache.mDirection.V() < stack_1350) { - mViewCache.mDirection.V(stack_1350); + if (mViewCache.mDirection.V() < sp294) { + mViewCache.mDirection.V(sp294); } - cXyz stack_328 = attentionPos(listener); - cXyz stack_334 = attentionPos(speaker); - cSAngle stack_1394 = cSAngle::_0; + cXyz sp13D0 = attentionPos(listener); + cXyz sp13C4 = attentionPos(speaker); + cSAngle sp250 = cSAngle::_0; - for (int i = 0; i < 18; i++) { + int i = 0; + for (i = 0; i < 18; i++) { mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); - if (!lineBGCheck(&stack_328, &mViewCache.mEye, talk->field_0x8c) - && !lineBGCheck(&stack_334, &mViewCache.mEye, talk->field_0x8c) - && !lineCollisionCheck(stack_328, mViewCache.mEye, listener, speaker, NULL) - && !lineCollisionCheck(stack_334, mViewCache.mEye, listener, speaker, NULL)) + if (!lineBGCheck(&sp13D0, &mViewCache.mEye, talk->field_0x8c) + && !lineBGCheck(&sp13C4, &mViewCache.mEye, talk->field_0x8c) + && !lineCollisionCheck(sp13D0, mViewCache.mEye, listener, speaker, NULL) + && !lineCollisionCheck(sp13C4, mViewCache.mEye, listener, speaker, NULL)) { break; } if ((i & 1) == 0) { - stack_1394 += cSAngle(20.0f); - mViewCache.mDirection.U(stack_1390 + stack_1394); + sp250 += cSAngle(20.0f); + mViewCache.mDirection.U(sp254 + sp250); } else { - mViewCache.mDirection.U(stack_1390 - stack_1394); + mViewCache.mDirection.U(sp254 - sp250); } } @@ -5782,31 +6450,37 @@ bool dCamera_c::talktoCamera(s32 param_0) { if (talk->field_0x44 == 0) { mStyleSettle.mFinished = true; } - cXyz stack_340 = talkBasePos(speaker); - cXyz stack_34c = talkBasePos(listener); - cXyz stack_358 = stack_340 - stack_34c; - cSGlobe stack_1320 = stack_358; - cSAngle stack_1398; - f32 dVar21 = dCamMath::xyzHorizontalDistance(stack_340, stack_34c) * 2.0f * 0.5f; - cDegree stack_1348 = mWindowAspect * 60.0f * 0.5f; - dVar21 /= stack_1348.Tan(); + cXyz sp13B8 = talkBasePos(speaker); + cXyz sp13AC = talkBasePos(listener); + cXyz sp13A0 = sp13B8 - sp13AC; + cSGlobe sp4E0 = sp13A0; + cSAngle sp24C; + f32 sp3AC = dCamMath::xyzHorizontalDistance(sp13B8, sp13AC) * 2.0f * 0.5f; + cDegree sp3A8 = mWindowAspect * 60.0f * 0.5f; + f32 sp3A4 = sp3AC / sp3A8.Tan(); if (talk->field_0x38) { - stack_1398 = cSAngle::_270; + sp24C = cSAngle::_270; } else { - stack_1398 = cSAngle::_90; + sp24C = cSAngle::_90; } - talk->field_0x90 = talkBasePos(listener) + stack_358 * 0.5f; + talk->field_0x90 = talkBasePos(listener) + sp13A0 * 0.5f; talk->field_0x90.y = (talkEyePos(speaker).y + talkEyePos(listener).y) * 0.5f - 30.0f; - talk->field_0xa8.Val(dVar21, cSAngle::_0, stack_1320.U() + stack_1398); + talk->field_0xa8.Val(sp3A4, cSAngle::_0, sp4E0.U() + sp24C); talk->field_0x9c = talk->field_0x90 + talk->field_0xa8.Xyz(); talk->field_0xb0 = 60.0f; - if (lineBGCheck(&stack_340, &talk->field_0x9c, talk->field_0x8c) - || lineBGCheck(&stack_34c, &talk->field_0x9c, talk->field_0x8c) - || lineCollisionCheck(stack_340, talk->field_0x9c, listener, speaker, NULL) - || lineCollisionCheck(stack_34c, talk->field_0x9c, listener, speaker, NULL)) + if (lineBGCheck(&sp13B8, &talk->field_0x9c, talk->field_0x8c) + || lineBGCheck(&sp13AC, &talk->field_0x9c, talk->field_0x8c) + || lineCollisionCheck(sp13B8, talk->field_0x9c, listener, speaker, NULL) + || lineCollisionCheck(sp13AC, talk->field_0x9c, listener, speaker, NULL)) { - iVar5 = 0; + sp430 = 0; + +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(90, 190, "-----"); + } +#endif } else { mViewCache.mCenter = talk->field_0x90; mViewCache.mEye = talk->field_0x9c; @@ -5817,31 +6491,40 @@ bool dCamera_c::talktoCamera(s32 param_0) { } case 29: { - talk->field_0x90 = talkBasePos(speaker); + fopAc_ac_c* actor1_sp3A0 = speaker; + fopAc_ac_c* actor2_sp39C = listener; + + talk->field_0x90 = talkBasePos(actor1_sp3A0); if (talk->field_0x44 == 0) { - cXyz stack_364 = talkBasePos(listener); - stack_364.y = talkEyePos(listener).y; - cXyz stack_370 = talkBasePos(speaker); - if (bVar3) { - stack_370.y = attentionPos(speaker).y; + cXyz sp1394 = talkBasePos(actor2_sp39C); + sp1394.y = talkEyePos(actor2_sp39C).y; + cXyz sp1388 = talkBasePos(actor1_sp3A0); + if (sp5C) { + sp1388.y = attentionPos(actor1_sp3A0).y; } - stack_370.y = talkEyePos(speaker).y; - talk->field_0xa8.Val(stack_364 - stack_370); + sp1388.y = talkEyePos(actor1_sp3A0).y; + talk->field_0xa8.Val(sp1394 - sp1388); talk->field_0xa8.R(200.0f); - talk->field_0x1c.y = attentionPos(speaker).y - 68.0f - talkBasePos(speaker).y; + talk->field_0x1c.y = attentionPos(actor1_sp3A0).y - 68.0f - talkBasePos(actor1_sp3A0).y; mStyleSettle.mFinished = true; } - talk->field_0x90.y = talk->field_0x1c.y + talkBasePos(speaker).y; + talk->field_0x90.y = talk->field_0x1c.y + talkBasePos(actor1_sp3A0).y; talk->field_0x9c = talk->field_0x90 + talk->field_0xa8.Xyz(); talk->field_0xb0 = 55.0f; - cXyz stack_37c = attentionPos(speaker); - if (lineBGCheck(&stack_37c, &talk->field_0x9c, talk->field_0x8c) - || lineCollisionCheck(stack_37c, talk->field_0x9c, listener, speaker, NULL)) + cXyz sp137C = attentionPos(actor1_sp3A0); + if (lineBGCheck(&sp137C, &talk->field_0x9c, talk->field_0x8c) + || lineCollisionCheck(sp137C, talk->field_0x9c, listener, actor1_sp3A0, NULL)) { - iVar5 = 0; + sp430 = 0; + +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(90, 190, "-----"); + } +#endif } else { mViewCache.mCenter = talk->field_0x90; mViewCache.mEye = talk->field_0x9c; @@ -5854,51 +6537,54 @@ bool dCamera_c::talktoCamera(s32 param_0) { case 37: if (talk->field_0x44 == 0) { - stack_1e4 = talkEyePos(listener); - stack_1f0 = talkEyePos(speaker); - stack_1fc = talkBasePos(listener); - stack_208 = talkBasePos(speaker); - if (bVar3) { - stack_1f0.y = attentionPos(speaker).y; + fopAc_ac_c* actor1_sp398 = speaker; + fopAc_ac_c* actor2_sp394 = listener; + + sp1514 = talkEyePos(actor2_sp394); + sp1508 = talkEyePos(actor1_sp398); + sp14FC = talkBasePos(actor2_sp394); + sp14F0 = talkBasePos(actor1_sp398); + if (sp5C) { + sp1508.y = attentionPos(actor1_sp398).y; } - if (bVar13) { - stack_1fc += stack_1cc; + if (sp58) { + sp14FC += sp152C; } - mViewCache.mCenter = stack_208; - cXyz stack_388 = stack_1fc; - stack_388.y = stack_1e4.y; - cXyz stack_394 = stack_208; - stack_394.y = stack_1f0.y; - mViewCache.mDirection.Val(stack_388 - stack_394); + mViewCache.mCenter = sp14F0; + cXyz sp1370 = sp14FC; + sp1370.y = sp1514.y; + cXyz sp1364 = sp14F0; + sp1364.y = sp1508.y; + mViewCache.mDirection.Val(sp1370 - sp1364); mViewCache.mDirection.V(mViewCache.mDirection.V() + cSAngle(5.0f)); mViewCache.mDirection.R(750.0f); - talk->field_0x1c.y = stack_1f0.y - stack_208.y; + talk->field_0x1c.y = sp1508.y - sp14F0.y; mStyleSettle.mFinished = true; - mViewCache.mCenter.y = stack_208.y + talk->field_0x1c.y; + mViewCache.mCenter.y = sp14F0.y + talk->field_0x1c.y; - cXyz stack_3a0 = attentionPos(listener); - cXyz stack_3ac = attentionPos(speaker); - cSAngle stack_139c; + cXyz sp1358 = attentionPos(actor2_sp394); + cXyz sp134C = attentionPos(actor1_sp398); + cSAngle sp248; if (talk->field_0x38) { mViewCache.mDirection.U(mViewCache.mDirection.U() + cSAngle(10.0f)); - stack_139c = 20.0f; + sp248 = 20.0f; } else { mViewCache.mDirection.U(mViewCache.mDirection.U() - cSAngle(10.0f)); - stack_139c = -20.0f; + sp248 = -20.0f; } - int i; + int i = 0; fopAc_ac_c* midna = daPy_py_c::getMidnaActor(); for (i = 0; i < 18; i++) { mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); - if (!lineBGCheck(&stack_3a0, &mViewCache.mEye, talk->field_0x8c) - && !lineBGCheck(&stack_3ac, &mViewCache.mEye, talk->field_0x8c) - && !lineCollisionCheck(stack_3a0, mViewCache.mEye, listener, midna, NULL) - && !lineCollisionCheck(stack_3ac, mViewCache.mEye, listener, midna, NULL)) + if (!lineBGCheck(&sp1358, &mViewCache.mEye, talk->field_0x8c) + && !lineBGCheck(&sp134C, &mViewCache.mEye, talk->field_0x8c) + && !lineCollisionCheck(sp1358, mViewCache.mEye, actor2_sp394, midna, NULL) + && !lineCollisionCheck(sp134C, mViewCache.mEye, actor2_sp394, midna, NULL)) { break; } - mViewCache.mDirection.U(mViewCache.mDirection.U() + stack_139c); + mViewCache.mDirection.U(mViewCache.mDirection.U() + sp248); } mViewCache.mFovy = 60.0f; @@ -5906,51 +6592,61 @@ bool dCamera_c::talktoCamera(s32 param_0) { break; case 38: { - stack_1e4 = talkEyePos(listener); - stack_1f0 = talkEyePos(speaker); - cSGlobe stack_1328 = stack_1e4 - stack_1f0; + fopAc_ac_c* actor1_sp388 = speaker; + fopAc_ac_c* actor2_sp384 = listener; + + sp1514 = talkEyePos(actor2_sp384); + sp1508 = talkEyePos(actor1_sp388); + cSGlobe sp4D8 = sp1514 - sp1508; if (talk->field_0x44 == 0) { mStyleSettle.mFinished = true; - cSGlobe stack_1330 = stack_1328; - stack_1330.R(stack_1328.R() * 0.5f); - mViewCache.mCenter = stack_1f0 + stack_1330.Xyz(); - mViewCache.mCenter.y = stack_1f0.y - 20.0f - talk->field_0x7c * 10.0f; + cSGlobe sp4D0 = sp4D8; + sp4D0.R(sp4D8.R() * 0.5f); + mViewCache.mCenter = sp1508 + sp4D0.Xyz(); + mViewCache.mCenter.y = sp1508.y - 20.0f - talk->field_0x7c * 10.0f; + f32 sp380 = 1.0f - talk->field_0x7c; if (talk->field_0x38) { - stack_1330.Val(cXyz(-45.0f + talk->field_0x7c * 20.0f, 5.0f, -80.0f - talk->field_0x7c * 40.0f)); + sp4D0.Val(cXyz(-45.0f + talk->field_0x7c * 20.0f, 5.0f, -80.0f - talk->field_0x7c * 40.0f)); } else { - stack_1330.Val(cXyz(65.0f - talk->field_0x7c * 20.0f, 5.0f, -80.0f - talk->field_0x7c * 40.0f)); + sp4D0.Val(cXyz(65.0f - talk->field_0x7c * 20.0f, 5.0f, -80.0f - talk->field_0x7c * 40.0f)); } - stack_1330.U(stack_1330.U() + directionOf(listener)); - stack_1330.V(stack_1330.V() + stack_1328.V()); - mViewCache.mEye = stack_1e4 + stack_1330.Xyz(); + sp4D0.U(sp4D0.U() + directionOf(actor2_sp384)); + sp4D0.V(sp4D0.V() + sp4D8.V()); + mViewCache.mEye = sp1514 + sp4D0.Xyz(); mViewCache.mDirection.Val(mViewCache.mEye - mViewCache.mCenter); - f32 tmp1 = 25.0f; - f32 tmp2 = 40.0f; - mViewCache.mFovy = tmp2 + (tmp1 - tmp2) * talk->field_0x7c; + f32 sp37C = 25.0f; + f32 sp378 = 40.0f; + mViewCache.mFovy = sp378 + (sp37C - sp378) * talk->field_0x7c; } break; } case 33: { - cXyz stack_3b8(0.0f, 25.0f, -70.0f); - cSGlobe stack_1338 = stack_3b8; - stack_1338.U(stack_1338.U() + directionOf(listener)); - mViewCache.mCenter = attentionPos(listener) + stack_1338.Xyz(); - mViewCache.mDirection.Val(140.0f, cSAngle(-20.0f), cSAngle(-40.0f) + directionOf(listener)); + fopAc_ac_c* actor1_sp374 = listener; + fopAc_ac_c* actor2_sp370 = speaker; + + cXyz sp1340(0.0f, 25.0f, -70.0f); + cSGlobe sp4C8 = sp1340; + sp4C8.U(sp4C8.U() + directionOf(actor1_sp374)); + mViewCache.mCenter = attentionPos(actor1_sp374) + sp4C8.Xyz(); + mViewCache.mDirection.Val(140.0f, cSAngle(-20.0f), cSAngle(-40.0f) + directionOf(actor1_sp374)); mStyleSettle.mFinished = true; mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); mViewCache.mFovy = 58.0f; break; } - case 34: - mViewCache.mCenter = talkBasePos(listener); + case 34: { + fopAc_ac_c* actor1_sp36C = listener; + fopAc_ac_c* actor2_sp368 = speaker; + + mViewCache.mCenter = talkBasePos(actor1_sp36C); if (talk->field_0x44 == 0) { mViewCache.mDirection.V(cSAngle(20.0f)); mViewCache.mDirection.R(160.0f); - mViewCache.mDirection.U(directionOf(listener).Inv()); + mViewCache.mDirection.U(directionOf(actor1_sp36C).Inv()); talk->field_0x1c.y = 95.0f; mStyleSettle.mFinished = true; } @@ -5959,47 +6655,62 @@ bool dCamera_c::talktoCamera(s32 param_0) { mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); mViewCache.mFovy = 58.0f; break; + } case 35: case 36: { - stack_1e4 = attentionPos(speaker); - stack_1f0 = attentionPos(listener); - stack_1fc = talkBasePos(speaker); - stack_208 = talkBasePos(listener); + fopAc_ac_c* actor1_sp364 = listener; + fopAc_ac_c* actor2_sp360 = speaker; + int sp35C = talk->field_0x38; + + sp1514 = attentionPos(actor2_sp360); + sp1508 = attentionPos(actor1_sp364); + sp14FC = talkBasePos(actor2_sp360); + sp14F0 = talkBasePos(actor1_sp364); + // first condition might not be correct as it's not actually present in assembly + if (sp35C && false) { + sp14F0 += sp152C; + } if (talk->field_0x44 == 0) { mStyleSettle.mFinished = true; } - cXyz stack_3c4(0.0f, 10.0f, -60.0f); - cSGlobe stack_1340 = stack_3c4; - stack_1340.U(stack_1340.U() + directionOf(listener)); - talk->field_0x90 = stack_1f0 + stack_1340.Xyz(); - cSAngle stack_13a0; + cXyz sp1334(0.0f, 10.0f, -60.0f); + cSGlobe sp4C0 = sp1334; + sp4C0.U(sp4C0.U() + directionOf(actor1_sp364)); + talk->field_0x90 = sp1508 + sp4C0.Xyz(); + cSAngle sp98; - if (iVar5 == 36) { - stack_13a0.Val(-150.0f); - talk->field_0xa8.Val(200.0f, cSAngle::_0, stack_13a0 + directionOf(listener)); + if (sp430 == 36) { + sp98.Val(-150.0f); + talk->field_0xa8.Val(200.0f, cSAngle::_0, sp98 + directionOf(actor1_sp364)); } else { - stack_13a0.Val(-35.0f); - talk->field_0xa8.Val(160.0f, cSAngle::_0, stack_13a0 + directionOf(listener)); + sp98.Val(-35.0f); + talk->field_0xa8.Val(160.0f, cSAngle::_0, sp98 + directionOf(actor1_sp364)); } talk->field_0xb0 = 60.0f; talk->field_0x9c = talk->field_0x90 + talk->field_0xa8.Xyz(); - cXyz stack_3d0 = attentionPos(listener); - if (lineBGCheck(&stack_3d0, &talk->field_0x9c, talk->field_0x8c) - || lineCollisionCheck(stack_3d0, talk->field_0x9c, listener, speaker, NULL)) + cXyz sp1328 = attentionPos(actor1_sp364); + if (lineBGCheck(&sp1328, &talk->field_0x9c, talk->field_0x8c) + || lineCollisionCheck(sp1328, talk->field_0x9c, listener, speaker, NULL)) { talk->field_0x90.y -= 20.0f; - talk->field_0xa8.Val(180.0f, cSAngle(35.0f), stack_13a0 + directionOf(listener)); + talk->field_0xa8.Val(180.0f, cSAngle(35.0f), sp98 + directionOf(actor1_sp364)); talk->field_0x9c = talk->field_0x90 + talk->field_0xa8.Xyz(); - if (lineBGCheck(&stack_3d0, &talk->field_0x9c, talk->field_0x8c) - || lineCollisionCheck(stack_3d0, talk->field_0x9c, listener, speaker, NULL)) + if (lineBGCheck(&sp1328, &talk->field_0x9c, talk->field_0x8c) + || lineCollisionCheck(sp1328, talk->field_0x9c, listener, speaker, NULL)) { - iVar5 = 0; + sp430 = 0; + +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + dDbVw_Report(90, 190, "-----"); + } +#endif } else { mViewCache.mCenter = talk->field_0x90; mViewCache.mEye = talk->field_0x9c; @@ -6015,16 +6726,18 @@ bool dCamera_c::talktoCamera(s32 param_0) { break; } - default: - iVar5 = 0; + default: { + OS_REPORT("camera: WARNING: talk: unknown cut(%d)!\n", sp430); + sp430 = 0; break; } + } if (talk->field_0x84 != 0) { mStyleSettle.mFinished = true; } - if (iVar5 == 0) { + if (sp430 == 0) { if (mStyleSettle.mFinished) { mViewCache.mCenter = talk->field_0x4; mViewCache.mDirection = talk->field_0x28; @@ -6032,26 +6745,26 @@ bool dCamera_c::talktoCamera(s32 param_0) { mViewCache.mFovy = talk->field_0x58; } else { talk->field_0x50 = (f32)(talk->field_0x44 + 1) / talk->field_0x48; - f32 dVar21 = dCamMath::rationalBezierRatio(talk->field_0x50, 0.28f); - mViewCache.mCenter += (talk->field_0x4 - mViewCache.mCenter) * dVar21; + f32 sp358 = dCamMath::rationalBezierRatio(talk->field_0x50, 0.28f); + mViewCache.mCenter += (talk->field_0x4 - mViewCache.mCenter) * sp358; mViewCache.mDirection.R(mViewCache.mDirection.R() - + (talk->field_0x28.R() - mViewCache.mDirection.R()) * dVar21); + + (talk->field_0x28.R() - mViewCache.mDirection.R()) * sp358); mViewCache.mDirection.V(mViewCache.mDirection.V() - + (talk->field_0x28.V() - mViewCache.mDirection.V()) * dVar21); + + (talk->field_0x28.V() - mViewCache.mDirection.V()) * sp358); mViewCache.mDirection.U(mViewCache.mDirection.U() - + (talk->field_0x28.U() - mViewCache.mDirection.U()) * dVar21); + + (talk->field_0x28.U() - mViewCache.mDirection.U()) * sp358); mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); - mViewCache.mFovy += (talk->field_0x58 - mViewCache.mFovy) * dVar21; + mViewCache.mFovy += (talk->field_0x58 - mViewCache.mFovy) * sp358; talk->field_0x4c -= talk->field_0x50; if (talk->field_0x44 >= talk->field_0x48 - 1) { mStyleSettle.mFinished = true; } - uVar18 = false; + sp5D = false; } } talk->field_0x44++; - return uVar18; + return sp5D; } bool dCamera_c::CalcSubjectAngle(s16* param_0, s16* param_1) { @@ -6092,12 +6805,12 @@ bool dCamera_c::subjectCamera(s32 param_0) { SubjectData* subject = (SubjectData*)mWork; - bool bVar13 = check_owner_action(mPadID, 0x1040) != 0; - bool bVar14 = check_owner_action(mPadID, 0x4000) != 0; - bool bVar15 = check_owner_action(mPadID, 0x400) != 0; + bool sp14 = check_owner_action(mPadID, 0x1040) != 0; + bool sp13 = check_owner_action(mPadID, 0x4000) != 0; + bool sp12 = check_owner_action(mPadID, 0x400) != 0; bool magne_boots_on = player->checkMagneBootsOn() != 0; - check_owner_action(mPadID, 0x80080); - bool bVar16 = check_owner_action(mPadID, 0x40) != 0; + bool sp10 = check_owner_action(mPadID, 0x80080) != 0; + bool sp0F = check_owner_action(mPadID, 0x40) != 0; if (mCurCamStyleTimer == 0) { subject->field_0x0 = 'SUBN'; @@ -6115,10 +6828,10 @@ bool dCamera_c::subjectCamera(s32 param_0) { subject->field_0x20 = 0.0f; subject->field_0x1d = false; - if (bVar13 || bVar15) { + if (sp14 || sp12) { subject->field_0x1d = directionOf(mpPlayerActor) - mViewCache.mDirection.U() > cSAngle::_0; - } else if (bVar14) { - subject->field_0x1d = player->getHookshotLeft(); + } else if (sp13) { + subject->field_0x1d = player->getHookshotLeft() != 0; } } @@ -6141,27 +6854,28 @@ bool dCamera_c::subjectCamera(s32 param_0) { stack_448 = directionOf(mpPlayerActor); } - cXyz stack_1c8, stack_1d4, stack_1e0; + cXyz sp2D0, sp1D4, sp2B8; s16 bow_angle_x, bow_angle_y; cSAngle angle_x = player->getCameraAngleX(); cSAngle angle_y = player->getCameraAngleY(); cXyz* bow_pos = player->checkBowCameraArrowPosP(&bow_angle_x, &bow_angle_y); + bool sp0E = false; if (check_owner_action(mPadID, 0x200000) && bow_pos != NULL) { - stack_1c8 = *bow_pos; + sp2D0 = *bow_pos; angle_x.Val(bow_angle_x); angle_y.Val(bow_angle_y); - } else if (bVar14) { + } else if (sp13) { if (player->getHookshotLeft()) { - stack_1c8 = player->getLeftHandPos(); + sp2D0 = player->getLeftHandPos(); } else { - stack_1c8 = player->getRightHandPos(); + sp2D0 = player->getRightHandPos(); } } else if (player->checkIronBallThrowReturnMode()) { - stack_1c8 = attentionPos(mpPlayerActor); + sp2D0 = attentionPos(mpPlayerActor); cXyz* iron_ball_pos = player->getIronBallCenterPos(); - cSGlobe globe = stack_1c8 - *iron_ball_pos; - f32 tmp = cXyz(*iron_ball_pos - stack_1c8).abs(); + cSGlobe globe = sp2D0 - *iron_ball_pos; + f32 tmp = cXyz(*iron_ball_pos - sp2D0).abs(); if (tmp > 200.0f) { angle_x = globe.V(); angle_y = globe.U().Inv(); @@ -6170,17 +6884,21 @@ bool dCamera_c::subjectCamera(s32 param_0) { angle_y = subject->field_0x2a; } angle_x += cSAngle(5.0f); - } else if (bVar15) { - stack_1c8 = attentionPos(mpPlayerActor); + } else if (sp12) { + sp2D0 = attentionPos(mpPlayerActor); subject->field_0x28 = angle_x; subject->field_0x2a = angle_y; angle_x += cSAngle(5.0f); } else { - stack_1c8 = *player->getSubjectEyePos(); + sp2D0 = *player->getSubjectEyePos(); } - subject->field_0x2e = angle_x; - subject->field_0x2c = angle_y; + if (!sp0E) { + subject->field_0x2e = angle_x; + subject->field_0x2c = angle_y; + } + + bool sp0D = false; if (magne_boots_on) { cXyz player_pos = positionOf(mpPlayerActor); @@ -6201,9 +6919,15 @@ bool dCamera_c::subjectCamera(s32 param_0) { field_0x738 = val16; } - bool bVar17 = false; + bool sp0C = false; + bool sp0B = false; + bool sp0A; + f32 spA4 = 1.0f; if (mGear == -1) { - bVar17 = true; + sp0B = true; + sp0C = true; + } else { + sp0A = false; } if (mCurType == specialType[CAM_TYPE_SCOPE]) { @@ -6221,41 +6945,41 @@ bool dCamera_c::subjectCamera(s32 param_0) { } else { mCStickYState = 0; } - } else if (bVar15 || player->checkIronBallThrowReturnMode()) { + } else if (sp12 || player->checkIronBallThrowReturnMode()) { val0 = 0.0f; val2 = 40.0f; val1 = 50.0f; val7 = 270.0f; val17 = 70.0f; - } else if (bVar14 || bVar13) { + } else if (sp13 || sp14) { + f32 spA0 = mCamSetup.mCStick.SwTHH(); + f32 sp9C = mPadInfo.mCStick.mLastPosX; + if (mGear == -1) { - bVar17 = true; + sp0C = true; } - if (bVar17) { - val16 = subject->field_0x20; - subject->field_0x20 = val16 + (1.0f - val16) * 0.3f; + if (sp0C) { + subject->field_0x20 += (1.0f - subject->field_0x20) * 0.3f; } else { - val16 = subject->field_0x20; - subject->field_0x20 = val16 + (0.0f - val16) * 0.3f; + subject->field_0x20 += (0.0f - subject->field_0x20) * 0.3f; } subject->field_0x20 = 1.0f; mCamParam.SetFlag(0x10); mCamParam.SetFlag(4); - if (bVar14) { - val20 = player->getHookshotLeft() ? val20 : -val20; - val0 += (val20 - val0) * subject->field_0x20; + if (sp13) { + val0 += ((player->getHookshotLeft() ? val20 : -val20) - val0) * subject->field_0x20; val2 += (val19 - val2) * subject->field_0x20; val1 += (val21 - val1) * subject->field_0x20; val7 += (val10 - val7) * subject->field_0x20; - } else if (bVar16) { + } else if (sp0F) { val0 += (19.0f - val0) * subject->field_0x20; val2 += (0.0f - val2) * subject->field_0x20; val1 += (val26 - val1) * subject->field_0x20; val7 += (val10 - val7) * subject->field_0x20; - } else if (bVar13) { + } else if (sp14) { val0 += (val25 - val0) * subject->field_0x20; val2 += (val4 - val2) * subject->field_0x20; val1 += (val26 - val1) * subject->field_0x20; @@ -6282,72 +7006,77 @@ bool dCamera_c::subjectCamera(s32 param_0) { setFlag(0x10000000); } - cXyz stack_1f8(val0, val2, val1); - stack_1d4 = dCamMath::xyzRotateX(stack_1f8, angle_x); - stack_1f8 = dCamMath::xyzRotateY(stack_1d4, angle_y); - f32 tmp = bVar15 ? 40.0f : 0.0f; - cXyz stack_204(0.0f, tmp, -val7); - stack_1d4 = dCamMath::xyzRotateX(stack_204, angle_x); - stack_204 = dCamMath::xyzRotateY(stack_1d4, angle_y); + cXyz sp1E0(val0, val2, val1); + sp1D4 = dCamMath::xyzRotateX(sp1E0, angle_x); + sp1E0 = dCamMath::xyzRotateY(sp1D4, angle_y); + f32 sp6C = sp12 ? 40.0f : 0.0f; + cXyz sp294(0.0f, sp6C, -val7); + sp1D4 = dCamMath::xyzRotateX(sp294, angle_x); + sp294 = dCamMath::xyzRotateY(sp1D4, angle_y); if (magne_boots_on) { - mDoMtx_multVecSR(mtx, &stack_1f8, &stack_1f8); - mDoMtx_multVecSR(mtx, &stack_204, &stack_204); + mDoMtx_multVecSR(mtx, &sp1E0, &sp1E0); + mDoMtx_multVecSR(mtx, &sp294, &sp294); } - f32 fVar1 = 1.0f; + f32 sp94 = 1.0f; + f32 sp90 = 1.0f; if (player->checkIronBallThrowReturnMode()) { - fVar1 = 0.1f; + sp94 = sp90 = 0.1f; } else if (player->checkHorseRide() || player->checkCanoeRide()) { - fVar1 = 1.0f; + sp94 = sp90 = 1.0f; } - cXyz stack_210 = stack_1c8 + stack_1f8; + cXyz sp288 = sp2D0 + sp1E0; dBgS_CamLinChk lin_chk; if (mIsWolf == 1) { - cXyz stack_21c = positionOf(mpPlayerActor); - stack_21c.y = stack_1c8.y; - if (lineBGCheck(&stack_21c, &stack_210, &lin_chk, 0x40b7)) { + cXyz sp27C = positionOf(mpPlayerActor); + sp27C.y = sp2D0.y; + if (lineBGCheck(&sp27C, &sp288, &lin_chk, 0x40b7)) { cM3dGPla plane; dComIfG_Bgsp().GetTriPla(lin_chk, &plane); - stack_210 = lin_chk.GetCross(); - stack_210 += *plane.GetNP() * 5.0f; + sp288 = lin_chk.GetCross(); + sp288 += *plane.GetNP() * 5.0f; } + } else if (mCurMode == 7) { + // empty block } - stack_210 = mViewCache.mCenter + (stack_210 - mViewCache.mCenter) * fVar1; - cXyz stack_228 = stack_210 + stack_204; - stack_228 = mViewCache.mEye + (stack_228 - mViewCache.mEye) * fVar1; + sp288 = mViewCache.mCenter + (sp288 - mViewCache.mCenter) * sp94; + cXyz sp270 = sp288 + sp294; + sp270 = mViewCache.mEye + (sp270 - mViewCache.mEye) * sp90; if (magne_boots_on) { setFlag(0x10); - stack_1e0 = stack_1bc; + sp2B8 = stack_1bc; } else { - stack_1e0 = cXyz::BaseY; + sp2B8 = cXyz::BaseY; } - cXyz stack_234 = stack_228 - stack_210; +#if PLATFORM_GCN + cXyz stack_234 = sp270 - sp288; cXyz stack_240, stack_24c; stack_234.normalize(); - stack_240 = stack_210 + stack_234 * 40.0f; - if (lineBGCheck(&stack_240, &stack_210, &stack_24c, 0x40b7)) { - stack_228 = stack_24c + stack_234 * 10.0f; + stack_240 = sp288 + stack_234 * 40.0f; + if (lineBGCheck(&stack_240, &sp288, &stack_24c, 0x40b7)) { + sp270 = stack_24c + stack_234 * 10.0f; } +#endif if (mStyleSettle.mFinished) { - mViewCache.mCenter = stack_210; - mViewCache.mEye = stack_228; + mViewCache.mCenter = sp288; + mViewCache.mEye = sp270; } else { - cSGlobe stack_43c = stack_228 - stack_210; + cSGlobe stack_43c = sp270 - sp288; f32 tmp = 1.0f / (subject->field_0x14 - subject->field_0x10); - mViewCache.mCenter += (stack_210 - mViewCache.mCenter) * tmp; + mViewCache.mCenter += (sp288 - mViewCache.mCenter) * tmp; mViewCache.mDirection.R(mViewCache.mDirection.R() + (stack_43c.R() - mViewCache.mDirection.R()) * tmp); mViewCache.mDirection.V(mViewCache.mDirection.V() + (stack_43c.V() - mViewCache.mDirection.V()) * tmp); mViewCache.mDirection.U(mViewCache.mDirection.U() + (stack_43c.U() - mViewCache.mDirection.U()) * tmp); mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); mViewCache.mFovy += (val17 - mViewCache.mFovy) * tmp; - subject->field_0x3c += (stack_1e0 - subject->field_0x3c) * tmp; - stack_1e0 = subject->field_0x3c.norm(); + subject->field_0x3c += (sp2B8 - subject->field_0x3c) * tmp; + sp2B8 = subject->field_0x3c.norm(); if (subject->field_0x10 == subject->field_0x14 - 1) { mStyleSettle.mFinished = true; @@ -6358,7 +7087,7 @@ bool dCamera_c::subjectCamera(s32 param_0) { mUpOverride.field_0x0 = mViewCache.mCenter; mUpOverride.field_0xc = mViewCache.mEye; mUpOverride.field_0x24 = mViewCache.mDirection; - mUpOverride.field_0x18 = stack_1e0; + mUpOverride.field_0x18 = sp2B8; } return true; @@ -6368,44 +7097,43 @@ bool dCamera_c::subjectCamera(s32 param_0) { mUpOverride.field_0x0 = mViewCache.mCenter; mUpOverride.field_0xc = mViewCache.mEye; mUpOverride.field_0x24 = mViewCache.mDirection; - mUpOverride.field_0x18 = stack_1e0; + mUpOverride.field_0x18 = sp2B8; if (mCamParam.Flag(param_0, 0x400)) { - f32 dVar17 = 0.0f; - f32 dVar16 = 0.0f; - int iVar2 = 0; + f32 sp88 = 0.0f; + f32 sp84 = 0.0f; + int sp80 = 0; if (mPadInfo.mCStick.mLastPosY > 0.01f) { - dVar17 = dCamMath::rationalBezierRatio(mPadInfo.mCStick.mLastPosY, mCamSetup.CurveWeight()); - iVar2 = -1; + sp88 = dCamMath::rationalBezierRatio(mPadInfo.mCStick.mLastPosY, mCamSetup.CurveWeight()); + sp80 = -1; } else if (mPadInfo.mCStick.mLastPosY < -0.01f) { - dVar16 = dCamMath::rationalBezierRatio(-mPadInfo.mCStick.mLastPosY, mCamSetup.CurveWeight()); - iVar2 = 1; + sp84 = dCamMath::rationalBezierRatio(-mPadInfo.mCStick.mLastPosY, mCamSetup.CurveWeight()); + sp80 = 1; } - f32 tmp = subject->mZoomRatio + val18 * (dVar17 - dVar16) * 0.1f; + f32 sp7C = subject->mZoomRatio + val18 * (sp88 - sp84) * 0.1f; - if (tmp < 0.0f) { + if (sp7C < 0.0f) { subject->mZoomRatio = 0.0f; - } else if (tmp > 1.0f) { + } else if (sp7C > 1.0f) { subject->mZoomRatio = 1.0f; } else { - subject->mZoomRatio = tmp; - if (iVar2 == -1) { + subject->mZoomRatio = sp7C; + if (sp80 == -1) { mDoAud_seStartLevel(Z2SE_AL_HAWK_EYE_ZOOMIN, NULL, 0, 0); - } else if (iVar2 == 1) { + } else if (sp80 == 1) { mDoAud_seStartLevel(Z2SE_AL_HAWK_EYE_ZOOMOUT, NULL, 0, 0); } } if (subject->mZoomRatio == 0.0f || subject->mZoomRatio == 0.5f || subject->mZoomRatio == 1.0f) { - dVar17 = 0.0f; - dVar16 = 0.0f; + sp84 = sp88 = 0.0f; } f32 tmp2 = subject->mZoomRatio * 8.0f + 1.0f; f32 zoom_fovy = dCamMath::zoomFovy(val17 * 0.5f, tmp2) * 2.0f; mViewCache.mFovy += (zoom_fovy - mViewCache.mFovy) * val22; setComZoomScale(tmp2); - setComZoomForcus(1.0f - fabsf(dVar17 - dVar16) * -511.0f); + setComZoomForcus(1.0f - std::fabsf(sp88 - sp84) * -511.0f); if (check_owner_action(mPadID, 0x200000)) { setComStat(8); } @@ -6433,22 +7161,23 @@ bool dCamera_c::magneCamera(s32 param_0) { f32 val17 = mCamParam.Val(param_0, 17); f32 val18 = mCamParam.Val(param_0, 18); f32 val21 = mCamParam.Val(param_0, 21); - daAlink_c* player = (daAlink_c*)mpPlayerActor; MagneData* magne = (MagneData*)mWork; + daAlink_c* player = (daAlink_c*)mpPlayerActor; mStyleSettle.mFinished = mCurCamStyleTimer != 0; - cSAngle stack_234; + bool sp08 = false; + cSAngle sp54; MtxP mtx, inv_mtx; if (player->checkMagneBootsOn()) { mtx = player->getMagneBootsMtx(); inv_mtx = player->getMagneBootsInvMtx(); - stack_234 = player->getMagneBootsModelShapeAngle(); + sp54 = player->getMagneBootsModelShapeAngle(); } else { mtx = mDoMtx_getIdentity(); inv_mtx = mDoMtx_getIdentity(); - stack_234 = directionOf(mpPlayerActor); + sp54 = directionOf(mpPlayerActor); } cXyz player_pos = positionOf(mpPlayerActor); @@ -6464,19 +7193,20 @@ bool dCamera_c::magneCamera(s32 param_0) { magne->field_0x1c.Val(magne->field_0x10 - magne->field_0x4); } - f32 fVar1 = (magne->field_0x1c.R() - val8) / (val7 - val8); - if (fVar1 > 1.0f) { - fVar1 = 1.0f; - } else if (fVar1 < 0.0f) { - fVar1 = 0.0f; + f32 var_f31 = (magne->field_0x1c.R() - val8) / (val7 - val8); + if (var_f31 > 1.0f) { + var_f31 = 1.0f; + } else if (var_f31 < 0.0f) { + var_f31 = 0.0f; } - cXyz stack_12c(val0, val3 + (val2 - val3) * fVar1, val1); - stack_12c = dCamMath::xyzRotateY(stack_12c, stack_234); - cXyz stack_138 = attentionPos(mpPlayerActor) - player_pos; - mDoMtx_multVecSR(inv_mtx, &stack_138, &stack_138); - stack_138 += player_pos; - magne->field_0x4 += ((stack_138 + stack_12c) - magne->field_0x4) * val5; + f32 sp74 = val3 + (val2 - val3) * var_f31; + cXyz sp18C(val0, sp74, val1); + sp18C = dCamMath::xyzRotateY(sp18C, sp54); + cXyz sp180 = attentionPos(mpPlayerActor) - player_pos; + mDoMtx_multVecSR(inv_mtx, &sp180, &sp180); + sp180 += player_pos; + magne->field_0x4 += ((sp180 + sp18C) - magne->field_0x4) * val5; cSGlobe stack_230 = magne->field_0x10 - magne->field_0x4; f32 fVar2 = stack_230.R(); @@ -6493,19 +7223,18 @@ bool dCamera_c::magneCamera(s32 param_0) { cSAngle stack_238; if (mCurMode == 1) { - stack_238 = stack_234.Inv(); - } else if (fabsf(cstick_x) > 0.05f) { - f32 tmp = dCamMath::rationalBezierRatio(cstick_x, 0.5f) * 10.0f; - stack_238 = magne->field_0x1c.U() + cSAngle(tmp); + stack_238 = sp54.Inv(); + } else if (std::fabsf(cstick_x) > 0.05f) { + stack_238 = magne->field_0x1c.U() + cSAngle(dCamMath::rationalBezierRatio(cstick_x, 0.5f) * 10.0f); } else { - cSAngle stack_23c = stack_234.Inv() - stack_230.U(); + cSAngle stack_23c = sp54.Inv() - stack_230.U(); f32 sin = stack_23c.Sin(); - f32 tmp = fabsf(sin * mPadInfo.mMainStick.mLastValue); + f32 tmp = std::fabsf(sin * mPadInfo.mMainStick.mLastValue); f32 tmp2 = stack_23c.Cos() > 0.0f ? 8.0f : 4.0f; stack_238 = stack_230.U() + cSAngle(sin * tmp2 * dCamMath::rationalBezierRatio(tmp, 1.0f)); } - cSAngle stack_240 = val13 + (val12 - val13) * fVar1; + cSAngle stack_240 = val13 + (val12 - val13) * var_f31; magne->field_0x1c.Val(fVar2, stack_240, stack_238); magne->field_0x10 = magne->field_0x4 + magne->field_0x1c.Xyz(); cXyz stack_144 = magne->field_0x4 - player_pos; @@ -6523,7 +7252,8 @@ bool dCamera_c::magneCamera(s32 param_0) { mViewCache.mDirection.U(mViewCache.mDirection.U() + (stack_230.U() - mViewCache.mDirection.U()) * val24 * stack_230.V().Cos()); mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); - mViewCache.mFovy += ((val18 + (val17 - val18) * fVar1) - mViewCache.mFovy) * val21; + f32 sp5C = val18 + (val17 - val18) * var_f31; + mViewCache.mFovy += (sp5C - mViewCache.mFovy) * val21; return true; } @@ -6560,9 +7290,9 @@ bool dCamera_c::colosseumCamera(s32 param_0) { colosseum->field_0x14 = 0.0f; colosseum->field_0x18 = 40; if (mRoomMapTool.mCameraIndex != 0xff && mCamParam.Flag(param_0, 0x200)) { - colosseum->field_0x8.x = mRoomMapTool.mArrowData.position.x; - colosseum->field_0x8.y = mRoomMapTool.mArrowData.position.y; - colosseum->field_0x8.z = mRoomMapTool.mArrowData.position.z; + colosseum->field_0x8.x = mRoomMapTool.mArrowData.posX; + colosseum->field_0x8.y = mRoomMapTool.mArrowData.posY; + colosseum->field_0x8.z = mRoomMapTool.mArrowData.posZ; } else if (mCamParam.Flag(param_0, 0x2000)) { fopAc_ac_c* target = getParamTargetActor(mCurType); colosseum->field_0x8.x = positionOf(target).x; @@ -6589,29 +7319,34 @@ bool dCamera_c::colosseumCamera(s32 param_0) { stack_100 += attentionPos(mpPlayerActor); cSGlobe stack_1bc = stack_100 - stack_e8; - f32 tmp; + f32 var_f31; if (stack_1bc.R() < val10) { - tmp = 0.0f; + var_f31 = 0.0f; stack_1bc.R(val10); } else if (stack_1bc.R() > val11) { - tmp = 1.0f; + var_f31 = 1.0f; stack_1bc.R(val11); } else { - tmp = (stack_1bc.R() - val10) / (val11 - val10); - stack_1bc.R(val10 + (val11 - val10) * tmp); + var_f31 = (stack_1bc.R() - val10) / (val11 - val10); + stack_1bc.R(val10 + (val11 - val10) * var_f31); } static f32 Dsp[5] = {0.0f, 0.0f, 0.25f, 1.0f, 1.0f}; - f32 dVar7 = mEventData.field_0xf0.Spot(Dsp, tmp); + f32 sp3C = mEventData.field_0xf0.Spot(Dsp, var_f31); + +#if DEBUG + dDbVw_Report(180, 320, "D %6.3f (%6.3f)", sp3C, var_f31); +#endif + var_f31 = sp3C; cXyz stack_10c; stack_10c = stack_e8 + stack_1bc.Xyz(); if (!mCamParam.Flag(param_0, 0x800)) { stack_10c.y = 0.0f; } - stack_10c.y += val3 + (val2 - val3) * dVar7; - f32 fVar8 = val8 + (val7 - val8) * dVar7; - cSAngle stack_1c0 = val13 + (val12 - val13) * dVar7; + stack_10c.y += val3 + (val2 - val3) * var_f31; + f32 fVar8 = val8 + (val7 - val8) * var_f31; + cSAngle stack_1c0 = val13 + (val12 - val13) * var_f31; if (mCamParam.Flag(param_0, 0x1000)) { stack_1c0 += stack_1bc.V(); } @@ -6631,7 +7366,7 @@ bool dCamera_c::colosseumCamera(s32 param_0) { } mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); - f32 fVar9 = val18 + (val17 - val18) * dVar7; + f32 fVar9 = val18 + (val17 - val18) * var_f31; mViewCache.mFovy += (fVar9 - mViewCache.mFovy) * colosseum->field_0x14; return true; } @@ -6646,9 +7381,11 @@ bool dCamera_c::test2Camera(s32 param_0) { bool dCamera_c::towerCamera(s32 param_0) { cSAngle stack_444 = cSAngle(mCamSetup.ChargeLatitude()); + f32 sp224 = mCamSetup.ChargeBRatio(); cSAngle stack_448 = 80.0f; cSAngle stack_44c = -60.0f; cSAngle stack_450 = 60.0f; + f32 sp220 = 8.0f; f32 unkFloatConst1 = 0.9f; f32 val0 = mCamParam.Val(param_0, 0); f32 val2 = mCamParam.Val(param_0, 2); @@ -6677,8 +7414,6 @@ bool dCamera_c::towerCamera(s32 param_0) { f32 val14 = mCamParam.Val(param_0, 14); f32 val19 = mCamParam.Val(param_0, 19); - TowerData* tower = (TowerData*)mWork; - if (mGear == 1) { val7 = val9; val8 = val9 * 0.9f; @@ -6687,14 +7422,16 @@ bool dCamera_c::towerCamera(s32 param_0) { val17 = val18 = val19; } + TowerData* tower = (TowerData*)mWork; + daAlink_c* player = (daAlink_c*)mpPlayerActor; - dComIfGp_getAttention(); + dAttention_c* sp1B4 = dComIfGp_getAttention(); if (mCurCamStyleTimer == 0) { - tower->field_0x54.x = mRoomMapTool.mArrowData.position.x; - tower->field_0x54.y = mRoomMapTool.mArrowData.position.y; - tower->field_0x54.z = mRoomMapTool.mArrowData.position.z; - tower->field_0x60 = mRoomMapTool.mArrowData.angle.y; + tower->field_0x54.x = mRoomMapTool.mArrowData.posX; + tower->field_0x54.y = mRoomMapTool.mArrowData.posY; + tower->field_0x54.z = mRoomMapTool.mArrowData.posZ; + tower->field_0x60 = mRoomMapTool.mArrowData.angleY; tower->field_0x64 = stack_454 <= cSAngle::_90 ? 1 : 0; } @@ -6717,9 +7454,9 @@ bool dCamera_c::towerCamera(s32 param_0) { } cSGlobe stack_41c = attentionPos(mpPlayerActor) - tower->field_0x54; - cSAngle stack_45c = directionOf(mpPlayerActor); + cSAngle sp11C = directionOf(mpPlayerActor); bool uVar2 = stack_41c.U() - mViewCache.mDirection.U() > cSAngle::_0; - bool uVar1 = stack_41c.U() - stack_45c > cSAngle::_0; + bool uVar1 = stack_41c.U() - sp11C > cSAngle::_0; if (mCurCamStyleTimer == 0) { tower->field_0x0 = 'TOWR'; @@ -6806,12 +7543,12 @@ bool dCamera_c::towerCamera(s32 param_0) { tower->field_0x4 = 1; } else { cXyz stack_21c = relationalPos(mpPlayerActor, &stack_210); - f32 fVar19 = cXyz(mEye - stack_21c).abs() - val7; - f32 fVar18 = cXyz(mCenter - stack_21c).abs() - val7; - f32 fVar17 = fabsf(fVar19 > fVar18 ? fVar19 : fVar18); - f32 player_height = heightOf(mpPlayerActor); - f32 tmp = fVar17 / (player_height < 10.0f ? 10.0f : player_height); - tower->field_0x4 = (int)(JMAFastSqrt(tmp) * 8.0f) + 1; + f32 sp1A8 = cXyz(mEye - stack_21c).abs() - val7; + f32 sp1A4 = cXyz(mCenter - stack_21c).abs() - val7; + f32 sp1A0 = std::fabsf(sp1A8 > sp1A4 ? sp1A8 : sp1A4); + sp1A8 = heightOf(mpPlayerActor); + sp1A0 /= (sp1A8 < 10.0f ? 10.0f : sp1A8); + tower->field_0x4 = (int)(JMAFastSqrt(sp1A0) * sp220) + 1; } tower->field_0x8 = tower->field_0x4 * (tower->field_0x4 + 1) >> 1; @@ -6836,7 +7573,7 @@ bool dCamera_c::towerCamera(s32 param_0) { stack_228 = attentionPos(mpPlayerActor) + stack_424.Xyz(); } - cXyz stack_234; + cXyz sp40C; if (!mStyleSettle.mFinished) { if (mBG.field_0xc0.field_0x1) { @@ -6845,35 +7582,35 @@ bool dCamera_c::towerCamera(s32 param_0) { } tower->field_0xc = tower->field_0x4 - (int)mCurCamStyleTimer; - f32 fVar18; + f32 sp19C; f32 ratio = tower->field_0xc / tower->field_0x8; tower->field_0x48 += (stack_228 - tower->field_0x48) * ratio; mViewCache.mCenter += (tower->field_0x48 - mViewCache.mCenter) * val6; - stack_234 = attentionPos(mpPlayerActor); - stack_234.y -= 15.0f; + sp40C = attentionPos(mpPlayerActor); + sp40C.y -= 15.0f; dBgS_CamLinChk lin_chk; - if (lineBGCheck(&stack_234, &mViewCache.mCenter, &lin_chk, 0x40b7)) { + if (lineBGCheck(&sp40C, &mViewCache.mCenter, &lin_chk, 0x40b7)) { cM3dGPla plane; dComIfG_Bgsp().GetTriPla(lin_chk, &plane); mViewCache.mCenter = lin_chk.GetCross(); mViewCache.mCenter += *plane.GetNP(); } - fVar18 = limitf(mViewCache.mDirection.R(), val8, val7); - cSAngle stack_468; - stack_468 = mViewCache.mDirection.V(); + sp19C = limitf(mViewCache.mDirection.R(), val8, val7); + cSAngle sp110; + sp110 = mViewCache.mDirection.V(); if (bVar5) { - stack_468 = cSAngle(val12); + sp110 = cSAngle(val12); } - if (stack_468 < stack_44c) { - stack_468 = stack_44c; + if (sp110 < stack_44c) { + sp110 = stack_44c; } - if (stack_468 > stack_450) { - stack_468 = stack_450; + if (sp110 > stack_450) { + sp110 = stack_450; } - cSGlobe stack_42c(fVar18, stack_468, cSAngle(mControlledYaw.Inv())); + cSGlobe stack_42c(sp19C, sp110, cSAngle(mControlledYaw.Inv())); mViewCache.mDirection.R(mViewCache.mDirection.R() + (stack_42c.R() - mViewCache.mDirection.R()) * ratio); mViewCache.mDirection.V(mViewCache.mDirection.V() @@ -6891,9 +7628,9 @@ bool dCamera_c::towerCamera(s32 param_0) { return true; } - cXyz stack_240 = positionOf(mpPlayerActor); - stack_240.y += 10.0f; - f32 heightOffGround = footHeightOf(mpPlayerActor) - groundHeight(&stack_240); + cXyz sp408 = positionOf(mpPlayerActor); + sp408.y += 10.0f; + f32 heightOffGround = footHeightOf(mpPlayerActor) - groundHeight(&sp408); if (mBG.field_0xc0.field_0x44) { tower->field_0x18 = 0.0f; tower->field_0x10 = 0; @@ -6903,12 +7640,12 @@ bool dCamera_c::towerCamera(s32 param_0) { * dCamMath::rationalBezierRatio(tower->field_0x10 / 80.0f, 1.25f); } - cSAngle stack_46c = stack_45c - mViewCache.mDirection.U(); - cXyz stack_24c(tower->field_0x80, tower->field_0x84, tower->field_0x80); - mViewCache.mCenter += (stack_228 - mViewCache.mCenter) * stack_24c; - stack_234 = attentionPos(mpPlayerActor); - stack_234.y -= 15.0f; - cSGlobe stack_434 = mViewCache.mEye - mViewCache.mCenter; + cSAngle sp10C = sp11C - mViewCache.mDirection.U(); + cXyz sp3F4(tower->field_0x80, tower->field_0x84, tower->field_0x80); + mViewCache.mCenter += (stack_228 - mViewCache.mCenter) * sp3F4; + sp40C = attentionPos(mpPlayerActor); + sp40C.y -= 15.0f; + cSGlobe sp238 = mViewCache.mEye - mViewCache.mCenter; f32 fVar18 = 1.0f; if (val7 > val8) { @@ -6923,20 +7660,20 @@ bool dCamera_c::towerCamera(s32 param_0) { bool spinner_path_move_temp = player->checkSpinnerPathMove(); bool spinner_path_move = spinner_path_move_temp; - val6 = mPadInfo.mCStick.mLastPosX; - val3 = spinner_path_move ? 1.0f : mPadInfo.mMainStick.mLastValue; - f32 unkFloatConst2 = 0.05f; - f32 unkFloatConst3 = 8.0f; - cSAngle stack_470; - cSAngle stack_474 = stack_454 + (stack_454 - stack_458) * val3; + f32 sp18C = mPadInfo.mCStick.mLastPosX; + f32 sp188 = spinner_path_move ? 1.0f : mPadInfo.mMainStick.mLastValue; + f32 sp184 = 0.05f; + f32 sp180 = 8.0f; + cSAngle sp108; + cSAngle sp104 = stack_454 + (stack_454 - stack_458) * sp188; - if (!mCamParam.Flag(param_0, 0x40) && fabsf(val6) > unkFloatConst2) { - cSAngle stack_478 = mViewCache.mDirection.U() + cSAngle(dCamMath::rationalBezierRatio(val6, 0.5f) * unkFloatConst3); - f32 tmp2 = fabsf(val6) - unkFloatConst2; - stack_470.Val(mViewCache.mDirection.U() + (stack_478 - mViewCache.mDirection.U()) * tmp2); + if (!mCamParam.Flag(param_0, 0x40) && std::fabsf(sp18C) > sp184) { + cSAngle sp100 = mViewCache.mDirection.U() + cSAngle(dCamMath::rationalBezierRatio(sp18C, 0.5f) * sp180); + f32 sp17C = std::fabsf(sp18C) - sp184; + sp108.Val(mViewCache.mDirection.U() + (sp100 - mViewCache.mDirection.U()) * sp17C); tower->field_0x6a = true; tower->field_0x78 += (0.8f - tower->field_0x78) * 0.05f; - tower->field_0x28 = stack_470; + tower->field_0x28 = sp108; } else { if (tower->field_0x6a) { @@ -6965,33 +7702,33 @@ bool dCamera_c::towerCamera(s32 param_0) { tower->field_0x78 += (0.5f - tower->field_0x78) * 0.05f; if (tower->field_0x64 == 0) { - cSAngle stack_480 = cSAngle::_180 - stack_474; + cSAngle stack_480 = cSAngle::_180 - sp104; tower->field_0x28 = stack_41c.U().Inv() - stack_480 * tower->field_0x44; } else { - cSAngle stack_484 = stack_474; + cSAngle stack_484 = sp104; tower->field_0x28 = stack_41c.U() - stack_484 * tower->field_0x44; } } else if (mCamParam.Flag(param_0, 0x100)) { if (!uVar2) { - cSAngle stack_488 = stack_434.U() - stack_41c.U(); + cSAngle stack_488 = sp238.U() - stack_41c.U(); f32 tmp = dCamMath::rationalBezierRatio(fVar18, val20); - if (stack_488 > stack_474) { + if (stack_488 > sp104) { tmp = 1.0f; } - stack_470.Val(stack_434.U() + ((stack_41c.U() + stack_474) - stack_434.U()) * tmp); + sp108.Val(sp238.U() + ((stack_41c.U() + sp104) - sp238.U()) * tmp); } else { - cSAngle stack_48c = stack_41c.U() - stack_434.U(); + cSAngle stack_48c = stack_41c.U() - sp238.U(); f32 tmp = dCamMath::rationalBezierRatio(fVar18, val20); - if (stack_48c > stack_474) { + if (stack_48c > sp104) { tmp = 1.0f; } - stack_470.Val(stack_434.U() + ((stack_41c.U() - stack_474) - stack_434.U()) * tmp); + sp108.Val(sp238.U() + ((stack_41c.U() - sp104) - sp238.U()) * tmp); } - tower->field_0x28 += (stack_470 - tower->field_0x28) * 0.33f; + tower->field_0x28 += (sp108 - tower->field_0x28) * 0.33f; - f32 var_f15 = val3; + f32 var_f15 = sp188; if (check_owner_action(mPadID, 0x2000108)) { var_f15 = 0.0f; } @@ -6999,18 +7736,21 @@ bool dCamera_c::towerCamera(s32 param_0) { } else { if (uVar1) { - stack_470.Val(stack_434.U() + ((stack_41c.U() + stack_474) - stack_434.U()) * 1.0f); + f32 sp168 = 1.0f; + sp108.Val(sp238.U() + ((stack_41c.U() + sp104) - sp238.U()) * sp168); } else { - f32 oneF = 1.0f; - stack_470.Val(stack_434.U() + ((stack_41c.U() - stack_474) - stack_434.U()) * oneF); + f32 sp164 = 1.0f; + sp108.Val(sp238.U() + ((stack_41c.U() - sp104) - sp238.U()) * sp164); } - tower->field_0x28 += (stack_470 - tower->field_0x28) * 0.33f; + tower->field_0x28 += (sp108 - tower->field_0x28) * 0.33f; + f32 sp160 = sp188; if (check_owner_action(mPadID, 0x2000108) || tower->field_0x69 != uVar1) { tower->field_0x78 = 0.0f; } else { - tower->field_0x78 += ((val27 + val22 * val3) - tower->field_0x78) * 0.05f; + f32 sp15C = val27 + val22 * sp160; + tower->field_0x78 += (sp15C - tower->field_0x78) * 0.05f; } } } @@ -7030,7 +7770,7 @@ bool dCamera_c::towerCamera(s32 param_0) { stack_490.Val(tower->field_0x24 + mForwardTiltOffset.Degree()); tower->field_0x74 += (val16 - tower->field_0x74) * 0.01f; } else { - stack_490 = stack_434.V(); + stack_490 = sp238.V(); tower->field_0x24 = stack_490.Degree(); tower->field_0x74 = dCamMath::rationalBezierRatio(tower->field_0x18, 0.7f); } @@ -7043,7 +7783,7 @@ bool dCamera_c::towerCamera(s32 param_0) { mViewCache.mDirection.V(mViewCache.mDirection.V() + (stack_490 - mViewCache.mDirection.V()) * tower->field_0x74); - f32 dVar20 = stack_434.R(); + f32 dVar20 = sp238.R(); tower->field_0x1c += (val8 - tower->field_0x1c) * val11; tower->field_0x20 += (val7 - tower->field_0x20) * val11; @@ -7094,8 +7834,6 @@ bool dCamera_c::hookshotCamera(s32 param_0) { f32 val23 = mCamParam.Val(param_0, 23); f32 val17 = mCamParam.Val(param_0, 17); - HookshotData* hookshot = (HookshotData*)mWork; - cXyz stack_9c[4] = { cXyz(180.0f, 20.0f, -160.0f), cXyz(160.0f, 60.0f, -200.0f), @@ -7108,6 +7846,10 @@ bool dCamera_c::hookshotCamera(s32 param_0) { cXyz(80.0f, -50.0f, 200.0f), cXyz(40.0f, -80.0f, -160.0f), }; + + int var_r23 = 8; + HookshotData* hookshot = (HookshotData*)mWork; + cXyz stack_d8; cXyz stack_e4(val0, val2, val1); @@ -7159,7 +7901,7 @@ bool dCamera_c::hookshotCamera(s32 param_0) { } f32 fovy; - if (hookshot->field_0x20 && mCurCamStyleTimer > 8 && mCamParam.Flag(param_0, 0x800)) { + if (hookshot->field_0x20 && mCurCamStyleTimer > var_r23 && mCamParam.Flag(param_0, 0x800)) { stack_d8 = hookshot->field_0x14; fovy = val17; val23 = 1.0f; @@ -7204,7 +7946,7 @@ bool dCamera_c::railCamera(s32 param_0) { f32 searchRadius = mCamParam.Val(param_0, 11); f32 influenceDistMax = mCamParam.Val(param_0, 9); #if DEBUG - influenceDistMax = mCamParam.Val(param_0, 12); + f32 val12 = mCamParam.Val(param_0, 12); #endif f32 val27 = mCamParam.Val(param_0, 27); f32 fovFar = mCamParam.Val(param_0, 17); @@ -7236,7 +7978,8 @@ bool dCamera_c::railCamera(s32 param_0) { return false; } - dPath* roomPath = dPath_GetRoomPath(mRoomMapTool.mPathId, fopAcM_GetRoomNo(this->mpPlayerActor)); + s8 roomNo = fopAcM_GetRoomNo(this->mpPlayerActor); + dPath* roomPath = dPath_GetRoomPath(mRoomMapTool.mPathId, roomNo); if (roomPath == NULL) { OS_REPORT("camera: rail data not found!\n"); return false; @@ -7248,6 +7991,7 @@ bool dCamera_c::railCamera(s32 param_0) { } s32 roomPathLen = roomPath->m_num; + f32 bestHorDist = 0.0f; if (mCurCamStyleTimer == 0) { rail->field_0x00 = 'RAIL'; mStyleSettle.mFinished = true; @@ -7255,7 +7999,7 @@ bool dCamera_c::railCamera(s32 param_0) { rail->field_0x14 = attentionPos(this->mpPlayerActor); if (mCamParam.Flag(param_0, 0x800)) { rail->field_0x08 = getParamTargetActor(mCurType); - if (rail->field_0x00 == NULL) { + if (rail->field_0x08 == NULL) { OS_REPORT("camera: target %s actor not found!\n", &mCamTypeData[mCurType].name[16]); } } @@ -7264,9 +8008,9 @@ bool dCamera_c::railCamera(s32 param_0) { if (rail->field_0x0d != mRoomMapTool.mPathId) { rail->field_0x0d = mRoomMapTool.mPathId; - rail->field_0x20.x = mRoomMapTool.mArrowData.position.x; - rail->field_0x20.y = mRoomMapTool.mArrowData.position.y; - rail->field_0x20.z = mRoomMapTool.mArrowData.position.z; + rail->field_0x20.x = mRoomMapTool.mArrowData.posX; + rail->field_0x20.y = mRoomMapTool.mArrowData.posY; + rail->field_0x20.z = mRoomMapTool.mArrowData.posZ; if (mCamParam.Flag(param_0, 0x800)) { cXyz attnPos = attentionPos(mpPlayerActor); cXyz curPointPos = roomPath->m_points->m_position; @@ -7367,12 +8111,12 @@ bool dCamera_c::railCamera(s32 param_0) { mViewCache.mCenter += (desiredCenter - mViewCache.mCenter) * centerLerpGainVec; - f32 proximityEase = dCamMath::rationalBezierRatio(proximityRatio, proximityEaseBias); + proximityRatio = dCamMath::rationalBezierRatio(proximityRatio, proximityEaseBias); cM3dGSph searchSphere; searchSphere.Set(mViewCache.mCenter, searchRadius); - f32 bestHorDist = 0.0f; + bestHorDist = 0.0f; cXyz bestEyePos = mViewCache.mEye; s32 intersectCount = 0; if (mCamParam.Flag(param_0, 0x800)) { @@ -7384,12 +8128,12 @@ bool dCamera_c::railCamera(s32 param_0) { cXyz crossPosB; cM3dGLin segLine; + f32 horDist; for (i = 0; i < roomPathLen - 1; i++) { segStart.set(roomPath->m_points[i].m_position); segEnd.set(roomPath->m_points[i + 1].m_position); segLine.set(segStart, segEnd); - f32 horDist; switch (cM3d_Cross_LinSph_CrossPos(searchSphere, segLine, &crossPosA, &crossPosB)) { case 2: if (posInLine2D(&segStart, &segEnd, &crossPosB) != 0) { @@ -7418,7 +8162,6 @@ bool dCamera_c::railCamera(s32 param_0) { segEnd.set(roomPath->m_points->m_position); segLine.set(segStart, segEnd); - f32 horDist; switch (cM3d_Cross_LinSph_CrossPos(searchSphere, segLine, &crossPosA, &crossPosB)) { case 2: if (posInLine2D(&segStart, &segEnd, &crossPosB) != 0) { @@ -7444,6 +8187,10 @@ bool dCamera_c::railCamera(s32 param_0) { roomPathLen++; } + if (intersectCount == 0) { + // empty block + } + cSGlobe eyeFromCenter = bestEyePos - mViewCache.mCenter; cSAngle unkAngle1 = eyeFromCenter.U() - mViewCache.mDirection.U(); @@ -7456,7 +8203,7 @@ bool dCamera_c::railCamera(s32 param_0) { if (mCamParam.Flag(param_0, 0x1000)) { desiredRadius = eyeFromCenter.R(); } else { - desiredRadius = targetRadiusFar - proximityEase * (targetRadiusFar - targetRadiusNear); + desiredRadius = targetRadiusFar - proximityRatio * (targetRadiusFar - targetRadiusNear); } mViewCache.mDirection.R(mViewCache.mDirection.R() + @@ -7467,7 +8214,8 @@ bool dCamera_c::railCamera(s32 param_0) { (eyeFromCenter.V() - mViewCache.mDirection.V()) * rail->field_0x10); mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); - mViewCache.mFovy += responseGain * (fovFar - proximityEase * (fovFar - fovNear) - mViewCache.mFovy); + f32 sp28 = fovFar - proximityRatio * (fovFar - fovNear); + mViewCache.mFovy += responseGain * (sp28 - mViewCache.mFovy); return true; } @@ -8250,7 +8998,7 @@ bool dCamera_c::rideCamera(s32 param_0) { case 5: sp1E4 = 8; var_f31 = 1.0f / (f32)(s32)(sp1E4 - mCurCamStyleTimer); - mViewCache.mCenter += mMonitor.field_0x14; + mViewCache.mCenter += mMonitor.field_0x14.field_0x0; mViewCache.mCenter += (wk->field_0x3c - mViewCache.mCenter) * var_f31; sp128 = sp260.V(); if (wk->field_0x9c != NULL && mCamParam.Flag(param_0, 0x100) && mGear != 1) { @@ -8382,7 +9130,7 @@ bool dCamera_c::rideCamera(s32 param_0) { } } - if (wk->field_0x98 != 0 && wk->field_0x91 != 0 && mMonitor.field_0x14.y < -1.0f) { + if (wk->field_0x98 != 0 && wk->field_0x91 != 0 && mMonitor.field_0x14.field_0x0.y < -1.0f) { sp15C = 0.9f; } else { if (wk->field_0x91 != 0) { @@ -8426,12 +9174,265 @@ bool dCamera_c::rideCamera(s32 param_0) { } bool dCamera_c::manualCamera(s32 param_0) { +#if DEBUG + f32 val0 = mCamParam.Val(param_0, 0); + f32 val1 = mCamParam.Val(param_0, 1); + f32 val6 = mCamParam.Val(param_0, 6); + f32 val5 = mCamParam.Val(param_0, 5); + f32 val27 = mCamParam.Val(param_0, 27); + f32 val22 = mCamParam.Val(param_0, 22); + f32 val26 = mCamParam.Val(param_0, 26); + f32 val3 = mCamParam.Val(param_0, 3); + f32 val4 = mCamParam.Val(param_0, 4); + f32 val11 = mCamParam.Val(param_0, 11); + f32 val8 = mCamParam.Val(param_0, 8); + f32 val9 = mCamParam.Val(param_0, 9); + f32 val24 = mCamParam.Val(param_0, 24); + f32 val16 = mCamParam.Val(param_0, 16); + f32 val13 = mCamParam.Val(param_0, 13); + f32 val14 = mCamParam.Val(param_0, 14); + f32 val21 = mCamParam.Val(param_0, 21); + f32 val18 = mCamParam.Val(param_0, 18); + f32 val19 = mCamParam.Val(param_0, 19); + + ManualData* manual = (ManualData*)mWork; + + bool sp09 = dComIfGp_getAttention()->LockonTruth() != 0; + if (mCurCamStyleTimer == 0) { + manual->field_0x00 = 'MAN_'; + mStyleSettle.mFinished = true; + if (sp09 && mpLockonTarget != NULL) { + manual->field_0x1c = 1.0f; + } else { + manual->field_0x1c = 0.0f; + } + cXyz attnPos = attentionPos(mpPlayerActor); + manual->field_0x20 = mViewCache.mCenter.y - attnPos.y; + manual->field_0x2c = val8; + mViewCache.mDirection.Val(mViewCache.mEye - mViewCache.mCenter); + if (isPlayerCharging(mPadID)) { + manual->field_0x28 = 1; + } else { + manual->field_0x28 = 0; + } + manual->field_0x30 = mViewCache.mDirection; + manual->field_0x04 = cXyz::Zero; + manual->field_0x40 = 0; + manual->field_0x44 = mViewCache.mDirection.U(); + manual->field_0x48 = mPadInfo.mCStick.mLastPosX; + if (mCamParam.Flag(param_0, 0x100)) { + s16 sp24 = ((s16)mViewCache.mDirection.U() >> 0xe) & 0x3; + if (manual->field_0x48 > 0.0f) { + manual->field_0x48 = -0.8f; + } else { + manual->field_0x48 = 0.8f; + } + } + } + if (check_owner_action(mPadID, 0x8000000)) { + if (val13 < 4.0f) { + val13 = 4.0f; + } + if (val3 < -10.0f) { + val3 = -10.0f; + } + } else if (check_owner_action(mPadID, 0x2800108)) { + if (check_owner_action(mPadID, 0x2000000)) { + val13 = -58.0f; + } else { + val13 = -70.0f; + } + val14 = 70.0f; + val16 = 4.0f; + val6 = 0.45f; + if (val9 > 500.0f) { + val9 = 500.0f; + } + } + + f32 sp98[2]; + if (mPadInfo.mCStick.mLastPosX >= 0.75f) { + sp98[0] = 1.0f; + } else if (mPadInfo.mCStick.mLastPosX <= -0.75f) { + sp98[0] = -1.0f; + } else { + sp98[0] = dCamMath::rationalBezierRatio(mPadInfo.mCStick.mLastPosX * 1.3333334f, 2.0f); + } + if (mPadInfo.mCStick.mLastPosY >= 0.75f) { + sp98[1] = 1.0f; + } else if (mPadInfo.mCStick.mLastPosY <= -0.75f) { + sp98[1] = -1.0f; + } else { + sp98[1] = dCamMath::rationalBezierRatio(mPadInfo.mCStick.mLastPosY * 1.3333334f, 2.0f); + } + + UnkManualCameraParam sp188; + sp188.r = sp188.v = sp188.fov = sp188.u = val27; + if (check_owner_action(mPadID, 0x2800008) && mFakeAngleSys.field_0x0 == 0) { + setUSOAngle(); + } + + f32 sp48 = manual->field_0x20; + if (!limited_range_addition(&sp48, -sp98[1] * val26, val3, val4)) + { + sp188.fov = val22; + } + manual->field_0x20 += sp188.fov * (sp48 - manual->field_0x20); + + if (check_owner_action(mPadID, 0x100) != 0) { + if (val1 > -10.0f) { + val1 = -10.0f; + } + if (manual->field_0x20 < 30.0f) { + manual->field_0x20 = 30.0f; + } + } + + cXyz sp94(val0, manual->field_0x20, val1); + bool sp08 = false; + if (sp09 && mpLockonTarget != NULL) { + manual->field_0x10 = relationalPos(mpPlayerActor, mpLockonTarget, &sp94, 0.5f); + cXyz sp178 = relationalPos(mpPlayerActor, &sp94); + dBgS_CamLinChk sp2B0; + dBgS_CamLinChk sp240; + if (lineBGCheck(&sp178, &manual->field_0x10, &sp2B0, 0x40b7) && + lineBGCheckBoth(&mEye, &sp178, &sp240, 0x40b7) != 0) { + cM3dGPla cStack_198; + dComIfG_Bgsp().GetTriPla(sp240, &cStack_198); + } else { + manual->field_0x04 = manual->field_0x10 - sp178; + if (manual->field_0x1c < 1.0f) { + manual->field_0x1c += 0.05f; + manual->field_0x10 = sp178 + manual->field_0x04 * manual->field_0x1c; + } else if (manual->field_0x1c > 1.0f) { + manual->field_0x1c = 1.0f; + } + } + } else { + sp08 = true; + } + + if (sp08) { + manual->field_0x10 = relationalPos(mpPlayerActor, &sp94); + if (manual->field_0x1c > 0.0f) { + manual->field_0x1c -= 0.05f; + manual->field_0x10 = manual->field_0x10 + manual->field_0x04 * manual->field_0x1c; + } else if (manual->field_0x1c < 0.0f) { + manual->field_0x1c = 0.0f; + } + } + + f32 sp44; + f32 sp40; + if (mCurCamStyleTimer == 0) { + sp44 = cXyz(manual->field_0x10 - mViewCache.mCenter).abs(); + sp40 = sp44 > 100.0f ? 0.0f : 1.0f - sp44 / 100.0f; + manual->field_0x38 = val6 * sp40; + manual->field_0x3c = val5 * sp40; + } else { + manual->field_0x38 += (val6 - manual->field_0x38) * 0.05f; + manual->field_0x3c += (val5 - manual->field_0x3c) * 0.05f; + } + + cXyz sp160(manual->field_0x38, manual->field_0x3c, manual->field_0x38); + mViewCache.mCenter += (manual->field_0x10 - mViewCache.mCenter) * sp160; + if (mpLockonTarget == NULL) { + cXyz sp154 = attentionPos(mpPlayerActor); + if (check_owner_action(mPadID, 0x8100100)) { + sp154.y = eyePos(mpPlayerActor).y + 30.0f; + } else { + sp154.y -= 15.0f; + } + + dBgS_CamLinChk sp158; + if (lineBGCheck(&sp154, &mViewCache.mCenter, &sp158, 0x40b7)) { + cM3dGPla sp1A4; + dComIfG_Bgsp().GetTriPla(sp158, &sp1A4); + mViewCache.mCenter = sp158.GetCross(); + mViewCache.mCenter += *sp1A4.GetNP(); + } + } + + f32 sp3C = manual->field_0x30.R(); + if (!limited_range_addition(&sp3C, (-sp98[1] * val11), val8, val9)) { + sp188.r = val22; + } + + f32 sp38 = manual->field_0x30.V().Degree(); + if (!limited_range_addition(&sp38, -sp98[1] * val16, val13, val14)) { + sp188.v = val22; + } + + f32 sp34; + if (!mCamParam.Flag(param_0, 0x100)) { + sp34 = manual->field_0x30.U().Degree(); + sp34 += sp98[0] * val24; + } + manual->field_0x30.Val(sp3C, cAngle::d2s(sp38), cAngle::d2s(sp34)); + + if (sp09 && mpLockonTarget != NULL) { + setFlag(0x2000); + mpAuxTargetActor1 = mpLockonTarget; + } + + mViewCache.mDirection.R(mViewCache.mDirection.R() + + (manual->field_0x30.R() - mViewCache.mDirection.R()) * sp188.r); + mViewCache.mDirection.V(mViewCache.mDirection.V() + + (manual->field_0x30.V() - mViewCache.mDirection.V()) * sp188.v); + mViewCache.mDirection.U(mViewCache.mDirection.U() + + (manual->field_0x30.U() - mViewCache.mDirection.U()) * sp188.u); + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + f32 sp30 = mViewCache.mFovy; + if (!limited_range_addition(&sp30, -sp98[1] * val21, val18, val19)) { + sp188.fov = mCamParam.Val(param_0, 22); + } + + mViewCache.mFovy += sp188.fov * (sp30 - mViewCache.mFovy); + + int sp2C = manual->field_0x40; + if (mPadInfo.mMainStick.mLastValue > 0.01f || + dComIfGp_getAttention()->LockonTruth() || + check_owner_action(mPadID, 0x100000)) { + sp2C = 0; + } else { + switch (manual->field_0x40) { + default: + sp2C = 0; + case 0: + if (sp3C < val8 * 1.0001f) { + setComStat(0x400); + if (sp98[1] < 0.3f) { + sp2C = 1; + } + } + break; + case 1: + if (sp98[1] < -0.01f) { + sp2C = 0; + } else if (sp98[1] > 0.9f) { + sp2C = 2; + setComStat(0x1000); + setComStat(0x400); + } else { + setComStat(0x400); + } + break; + case 2: + if (sp98[1] < 0.9f) { + sp2C = 0; + } + break; + } + } + + manual->field_0x40 = sp2C; +#endif + return true; } bool dCamera_c::observeCamera(s32 param_0) { - - f32 dVar8 = mCamSetup.CurveWeight(); + f32 curveWeight = mCamSetup.CurveWeight(); f32 val0 = mCamParam.Val(param_0, 0); f32 val17 = mCamParam.Val(param_0, 17); cSAngle val16 = mCamParam.Val(param_0, 16); @@ -8444,10 +9445,10 @@ bool dCamera_c::observeCamera(s32 param_0) { mStyleSettle.mFinished = true; if (mRoomMapTool.mCameraIndex != 0xff && mCamParam.Flag(param_0, 0x200) != 0) { - mCamParam.Fovy((mRoomMapTool).mCamData.field_0x11); - mCamParam.Arg0((mRoomMapTool).mCamData.field_0x12); - mCamParam.Arg1((mRoomMapTool).mCamData.field_0x13); - mCamParam.Arg2((mRoomMapTool).mCamData.field_0x14); + mCamParam.Fovy(mRoomMapTool.mCamData.field_0x11); + mCamParam.Arg0(mRoomMapTool.mCamData.field_0x12); + mCamParam.Arg1(mRoomMapTool.mCamData.field_0x13); + mCamParam.Arg2(mRoomMapTool.mCamData.field_0x14); if (param_0 == mCamTypeData[mCurType].field_0x18[mIsWolf][mCurMode]) { mCamParam.Change(param_0); } @@ -8461,15 +9462,15 @@ bool dCamera_c::observeCamera(s32 param_0) { } } if (mRoomMapTool.mArrowIndex != 0xff) { - observe->field_0x04 = cXyz(mRoomMapTool.mArrowData.position.x, mRoomMapTool.mArrowData.position.y, - mRoomMapTool.mArrowData.position.z); - cSGlobe cStack_c0(50.0f, -mRoomMapTool.mArrowData.angle.x, - mRoomMapTool.mArrowData.angle.y); - observe->field_0x28 = observe->field_0x04 + cStack_c0.Xyz(); + observe->field_0x04 = cXyz(mRoomMapTool.mArrowData.posX, mRoomMapTool.mArrowData.posY, + mRoomMapTool.mArrowData.posZ); + cSGlobe sp60(50.0f, -mRoomMapTool.mArrowData.angleX, + mRoomMapTool.mArrowData.angleY); + observe->field_0x28 = observe->field_0x04 + sp60.Xyz(); } else { observe->field_0x04 = mViewCache.mEye; - cSGlobe cStack_c8(50.0f, mViewCache.mDirection.V().Inv(), mViewCache.mDirection.U().Inv()); - observe->field_0x28 = observe->field_0x04 + cStack_c8.Xyz(); + cSGlobe sp58(50.0f, mViewCache.mDirection.V().Inv(), mViewCache.mDirection.U().Inv()); + observe->field_0x28 = observe->field_0x04 + sp58.Xyz(); } observe->field_0x10.Val(observe->field_0x04 - observe->field_0x28); mViewCache.mCenter = observe->field_0x28; @@ -8479,43 +9480,45 @@ bool dCamera_c::observeCamera(s32 param_0) { if (mCamParam.Flag(param_0, 0x200)) { if (mCamParam.Fovy() != 0xff) { - val17 = (s32)(s8)mCamParam.Fovy(); + val17 = (s8)mCamParam.Fovy(); } if (mCamParam.Arg0() != 0xff) { - val16 = (f32)(s32)(s8)mCamParam.Arg0(); + val16 = (f32)(s8)mCamParam.Arg0(); } if (mCamParam.Arg1() != 0xff) { - val24 = (f32)(s32)(s8)mCamParam.Arg1(); + val24 = (f32)(s8)mCamParam.Arg1(); } } - f32 sp54; - f32 sp50; + // not sure how else to get these on the stack instead of in registers, this seems plausible + // given they're used quite a bit and it makes sense for the compiler to not want to spill them + // otherwise + f32 sp50[2]; int zero = 0; if (zero == 0) { if (mPadInfo.mMainStick.mLastPosX >= 0.75f) { - sp50 = 1.0f; + sp50[0] = 1.0f; } else if (mPadInfo.mMainStick.mLastPosX <= -0.75f) { - sp50 = -1.0f; + sp50[0] = -1.0f; } else { - sp50 = dCamMath::rationalBezierRatio(mPadInfo.mMainStick.mLastPosX * 1.3333334f, dVar8); + sp50[0] = dCamMath::rationalBezierRatio(mPadInfo.mMainStick.mLastPosX * (4.0f / 3.0f), curveWeight); } if (mPadInfo.mMainStick.mLastPosY >= 0.75f) { - sp54 = 1.0f; + sp50[1] = 1.0f; } else if (mPadInfo.mMainStick.mLastPosY <= -0.75f) { - sp54 = -1.0f; + sp50[1] = -1.0f; } else { - sp54 = dCamMath::rationalBezierRatio(mPadInfo.mMainStick.mLastPosY * 1.3333334f, dVar8); + sp50[1] = dCamMath::rationalBezierRatio(mPadInfo.mMainStick.mLastPosY * (4.0f / 3.0f), curveWeight); } if (dComIfGs_getOptCameraControl() != 0) { - sp54 = -sp54; + sp50[1] = -sp50[1]; } } cSAngle sp40; - cSAngle sp3C = mViewCache.mDirection.V() + (cSAngle)(val0 * sp54); + cSAngle sp3C = mViewCache.mDirection.V() + (cSAngle)(val0 * sp50[1]); sp40 = sp3C - observe->field_0x10.V(); if (sp40 > val16) { sp3C = observe->field_0x10.V() + val16; @@ -8524,7 +9527,7 @@ bool dCamera_c::observeCamera(s32 param_0) { } mViewCache.mDirection.V(sp3C); - cSAngle sp38 = mViewCache.mDirection.U() - (cSAngle)(val0 * sp50); + cSAngle sp38 = mViewCache.mDirection.U() - (cSAngle)(val0 * sp50[0]); sp40 = sp38 - observe->field_0x10.U(); if (sp40 > val24) { sp38 = observe->field_0x10.U() + val24; @@ -8562,11 +9565,11 @@ bool dCamera_c::fixedFrameCamera(s32 param_0) { if (mCurCamStyleTimer == 0) { fixedFrame->field_0x00 = 'FIXF'; - fixedFrame->field_0x04 = cXyz(mRoomMapTool.mArrowData.position.x, mRoomMapTool.mArrowData.position.y, - mRoomMapTool.mArrowData.position.z); + fixedFrame->field_0x04 = cXyz(mRoomMapTool.mArrowData.posX, mRoomMapTool.mArrowData.posY, + mRoomMapTool.mArrowData.posZ); - cSGlobe spFC(100000.0f, -mRoomMapTool.mArrowData.angle.x, - mRoomMapTool.mArrowData.angle.y); + cSGlobe spFC(100000.0f, -mRoomMapTool.mArrowData.angleX, + mRoomMapTool.mArrowData.angleY); fixedFrame->field_0x2c = fixedFrame->field_0x38 = fixedFrame->field_0x04 + spFC.Xyz(); cM3dGLin sp14C(fixedFrame->field_0x2c, fixedFrame->field_0x04); @@ -8577,8 +9580,8 @@ bool dCamera_c::fixedFrameCamera(s32 param_0) { fixedFrame->field_0x2c = sp120; } else { f32 temp = cXyz(fixedFrame->field_0x04 - attentionPos(mpPlayerActor)).abs(); - spFC.Val(temp, -mRoomMapTool.mArrowData.angle.x, - mRoomMapTool.mArrowData.angle.y); + spFC.Val(temp, -mRoomMapTool.mArrowData.angleX, + mRoomMapTool.mArrowData.angleY); fixedFrame->field_0x2c = fixedFrame->field_0x04 + spFC.Xyz(); } @@ -8621,7 +9624,7 @@ bool dCamera_c::fixedFrameCamera(s32 param_0) { mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); mViewCache.mFovy = mViewCache.mFovy + fVar11 * (fixedFrame->field_0x24 - mViewCache.mFovy); - if (mCurCamStyleTimer >= fixedFrame->field_0x18 - 1) { + if (mCurCamStyleTimer >= (u32)fixedFrame->field_0x18 - 1) { mStyleSettle.mFinished = true; } } @@ -8672,9 +9675,9 @@ bool dCamera_c::fixedPositionCamera(s32 param_0) { fixedPosition->field_0x30 = mRoomMapTool.mCameraIndex; } - anchorPos.x = mRoomMapTool.mArrowData.position.x; - anchorPos.y = mRoomMapTool.mArrowData.position.y; - anchorPos.z = mRoomMapTool.mArrowData.position.z; + anchorPos.x = mRoomMapTool.mArrowData.posX; + anchorPos.y = mRoomMapTool.mArrowData.posY; + anchorPos.z = mRoomMapTool.mArrowData.posZ; if (fixedPosition->field_0x1c != anchorPos) { setUSOAngle(); } @@ -8750,7 +9753,7 @@ bool dCamera_c::fixedPositionCamera(s32 param_0) { mViewCache.mCenter += (fixedPosition->field_0x10 - mViewCache.mCenter) * centerLerpGain; cSGlobe targetDirection = anchorPos - mViewCache.mCenter; if (mCamParam.Flag(param_0, 0x20)) { - targetDirection.V((s16)-mRoomMapTool.mArrowData.angle.x); + targetDirection.V((s16)-mRoomMapTool.mArrowData.angleX); } if (targetDirection.R() < targetRadiusMin) { @@ -8778,7 +9781,7 @@ bool dCamera_c::fixedPositionCamera(s32 param_0) { mViewCache.mCenter += (targetCenter - mViewCache.mCenter) * centerLerpGain; cSGlobe cStack_1a8 = anchorPos - mViewCache.mCenter; if (mCamParam.Flag(param_0, 0x20)) { - cStack_1a8.V((s16)-mRoomMapTool.mArrowData.angle.x); + cStack_1a8.V((s16)-mRoomMapTool.mArrowData.angleX); } if (cStack_1a8.R() < targetRadiusMin) { cStack_1a8.R(targetRadiusMin); @@ -8800,7 +9803,6 @@ bool dCamera_c::fixedPositionCamera(s32 param_0) { } bool dCamera_c::oneSideCamera(s32 param_1) { - f32 unkRatio; f32 focusOffsetX = mCamParam.Val(param_1, 0); f32 focusOffsetY = mCamParam.Val(param_1, 2); @@ -8833,6 +9835,7 @@ bool dCamera_c::oneSideCamera(s32 param_1) { oneSide->field_0x28 = 0; cSAngle unkAngle1; + f32 fovY; if (mCamParam.Flag(param_1, 0x200) && mRoomMapTool.mArrowIndex != 0xff) { if (mRoomMapTool.mCameraIndex != oneSide->field_0x34) { mCamParam.Fovy(mRoomMapTool.mCamData.field_0x11); @@ -8844,14 +9847,15 @@ bool dCamera_c::oneSideCamera(s32 param_1) { } oneSide->field_0x34 = mRoomMapTool.mCameraIndex; } - arrowPos.x = mRoomMapTool.mArrowData.position.x; - arrowPos.y = mRoomMapTool.mArrowData.position.y; - arrowPos.z = mRoomMapTool.mArrowData.position.z; + arrowPos.x = mRoomMapTool.mArrowData.posX; + arrowPos.y = mRoomMapTool.mArrowData.posY; + arrowPos.z = mRoomMapTool.mArrowData.posZ; if (oneSide->field_0x1c != arrowPos) { setUSOAngle(); } oneSide->field_0x1c = arrowPos; + if (mCamParam.Fovy() != 0xff) { f32 fovY = mCamParam.Fovy(); mCamParam.SetVal(param_1, 17, fovY); @@ -8876,18 +9880,13 @@ bool dCamera_c::oneSideCamera(s32 param_1) { focusPosOffset = dCamMath::xyzRotateY(focusPosOffset, directionOf(mpPlayerActor)); cXyz focusPosWithOffset = attentionPos(mpPlayerActor) + focusPosOffset; cSGlobe focusGlobe = focusPosWithOffset - arrowPos; - if (focusGlobe.R() >= angle180) { - unkRatio = 1.0f; - } else { - f32 ratio = focusGlobe.R() / angle180; - unkRatio = ratio; - } + f32 unkRatio = focusGlobe.R() >= angle180 ? 1.0f : focusGlobe.R() / angle180; if (!mCamParam.Flag(param_1, 0x800)) { - focusGlobe.V((s16)-mRoomMapTool.mArrowData.angle.x); + focusGlobe.V((s16)-mRoomMapTool.mArrowData.angleX); } - cSAngle arrowAngle = (s16)(s32)mRoomMapTool.mArrowData.angle.y; + cSAngle arrowAngle = (s16)(s32)mRoomMapTool.mArrowData.angleY; cSAngle unkAngle2 = focusGlobe.U() - arrowAngle; cSAngle unkAngle3; cSAngle unkAngle4 = unkAngle2 * val24; @@ -8912,7 +9911,7 @@ bool dCamera_c::oneSideCamera(s32 param_1) { mViewCache.mCenter = center; mViewCache.mEye = arrowPos; mViewCache.mDirection.Val(mViewCache.mEye - mViewCache.mCenter); - f32 fovY = val17; + fovY = val17; mViewCache.mFovy = fovY; return true; @@ -9117,8 +10116,10 @@ bool dCamera_c::eventCamera(s32 param_0) { int sp0C; if (mCurCamStyleTimer == 0) { +#if DEBUG OS_REPORT("camera: event: cut [%s]\n", ActionNames[var_r29]); +#endif if (getEvFloatData(&sp28, "KeepDist") != 0 && mViewCache.mDirection.R() < sp28) { @@ -9342,11 +10343,22 @@ void dCamera_c::setEventRecoveryTrans(s16 param_0) { s16 dCamera_c::runEventRecoveryTrans() { if (mRecovery.field_0x8.field_0x1e > 0) { +#if PLATFORM_GCN field_0x668++; +#endif +#if PLATFORM_GCN if (field_0x668 >= mRecovery.field_0x8.field_0x1e) { +#else + if ((int)field_0x170 >= mRecovery.field_0x8.field_0x1e) { +#endif mRecovery.field_0x8.field_0x1e = 0; } else { - f32 ratio = dCamMath::rationalBezierRatio(1.0f - (f32)field_0x668 / (f32)mRecovery.field_0x8.field_0x1e, 1.0f); +#if PLATFORM_GCN + f32 var_f30 = (f32)field_0x668 / (f32)mRecovery.field_0x8.field_0x1e; +#else + f32 var_f30 = (f32)field_0x170 / (f32)mRecovery.field_0x8.field_0x1e; +#endif + f32 ratio = dCamMath::rationalBezierRatio(1.0f - var_f30, 1.0f); mCenter = mViewCache.mCenter + (mRecovery.field_0x8.mCenter - mViewCache.mCenter) * ratio; cXyz attPos = attentionPos(mpPlayerActor); dBgS_CamLinChk lin_chk; @@ -9489,12 +10501,20 @@ f32 dCamera_c::shakeCamera() { return var_f31; } -// supposed to be some anonymous static class member or something? -static const int PatternLengthMax[] = {0x00000004}; // array to make it go in correct section - int dCamera_c::StartShake(s32 i_length, u8* i_pattern, s32 i_flags, cXyz i_pos) { - if (i_length < 0 || i_length > (PatternLengthMax[0] << 3)) { - i_length = (PatternLengthMax[0] << 3); + // This function originally used a constant defined as a static data member in one of + // dCamera_c's anonymous classes, but this is illegal in C++ and is not accepted by + // MWCC for Wii. It seems this was resolved for the Shield release by hardcoding the constant + // (or possibly using a define). +#if defined(__MWERKS__) && __MWERKS__ < 0x4200 +#define PATTERN_LENGTH_MAX mViewCache.PatternLengthMax +#else +#define PATTERN_LENGTH_MAX 4 +#endif + + if (i_length < 0 || i_length > PATTERN_LENGTH_MAX << 3) { + OS_REPORT("camera: shake: too long data\n"); + i_length = PATTERN_LENGTH_MAX << 3; } mShake.m_length = i_length; @@ -9504,23 +10524,24 @@ int dCamera_c::StartShake(s32 i_length, u8* i_pattern, s32 i_flags, cXyz i_pos) mBlure.field_0x4 = mBlure.field_0x14; } - int var_r31; + int i; int var_r28 = i_length >> 3; - for (var_r31 = 0; var_r31 < PatternLengthMax[0]; var_r31++) { - mShake.field_0x0[var_r31] = mShake.field_0x4[var_r31] = 0; + + for (i = 0; i < PATTERN_LENGTH_MAX; i++) { + mShake.field_0x0[i] = mShake.field_0x4[i] = 0; } - for (var_r31 = 0; var_r31 < var_r28; var_r31++) { - mShake.field_0x0[var_r31] = mShake.field_0x4[var_r31] = i_pattern[var_r31]; + for (i = 0; i < var_r28; i++) { + mShake.field_0x0[i] = mShake.field_0x4[i] = i_pattern[i]; } var_r28 = i_length & 7; - mShake.field_0x0[var_r31] = (0xFF << (8 - var_r28)) & i_pattern[var_r31]; + mShake.field_0x0[i] = (0xFF << (8 - var_r28)) & i_pattern[i]; - if (i_length == (PatternLengthMax[0] << 3)) { - mShake.field_0x4[var_r31] = mShake.field_0x0[var_r31] | (i_pattern[0] >> var_r28); + if (i_length == PATTERN_LENGTH_MAX << 3) { + mShake.field_0x4[i] = mShake.field_0x0[i] | (i_pattern[0] >> var_r28); } else { - mShake.field_0x4[var_r31] = mShake.field_0x0[var_r31]; + mShake.field_0x4[i] = mShake.field_0x0[i]; } mShake.m_pos = i_pos.norm(); @@ -9555,6 +10576,12 @@ void dCamera_c::StartBlure(int param_0, fopAc_ac_c* i_actor, f32 i_alpha, f32 i_ mBlure.field_0x8.y = 0; mBlure.field_0x8.z = 0; mBlure.field_0x4 = param_0; + +#if DEBUG + if (mCamSetup.CheckFlag(0x8000)) { + OS_REPORT("camera: start blure: timer %d, type %d\n", param_0, mCurType); + } +#endif } void dCamera_c::ResetBlure() { @@ -9600,8 +10627,7 @@ void dCamera_c::SetBlureActor(fopAc_ac_c* i_actor) { int dCamera_c::blureCamera() { if (mBlure.field_0x4 > 0) { if (mBlure.mpActor != NULL) { - dDlst_window_c* window = get_window(field_0x0); - scissor_class* scissor = window->getScissor(); + scissor_class* scissor = get_window(field_0x0)->getScissor(); cXyz eyePosition = eyePos(mBlure.mpActor); cXyz res; @@ -9612,8 +10638,8 @@ int dCamera_c::blureCamera() { } mBlure.field_0x4--; - cXyz xyz; f32 mult = (f32)mBlure.field_0x4 / (f32)mBlure.field_0x14; + cXyz xyz; xyz.x = mBlure.mScale.x + (1.0f - mBlure.mScale.x) * mult; xyz.y = mBlure.mScale.y + (1.0f - mBlure.mScale.y) * mult; xyz.z = 0.0f; @@ -9639,7 +10665,13 @@ int dCamera_c::blureCamera() { void dCamera_c::onHorseDush() { dComIfGp_getVibration().StartShock(VIBMODE_S_POWER2, 1, cXyz(0.0f, 1.0f, 0.0f)); - StartBlure(55, mpPlayerActor, 0.75f, 1.0f); + // debug indicates this function somehow has scoped declarations, so we add a useless block here + { + int var_r30 = 55; + f32 alpha = 0.75f; + f32 scale = 1.0f; + StartBlure(var_r30, mpPlayerActor, alpha, scale); + } } fopAc_ac_c* dCamera_c::GetForceLockOnActor() { @@ -9692,12 +10724,14 @@ camera_class* dCam_getCamera() { } dCamera_c* dCam_getBody() { - return &dCam_getCamera()->mCamera; + camera_class* camera = dCam_getCamera(); + return &camera->mCamera; } static void preparation(camera_process_class* i_this) { + camera_process_class* process = i_this; camera_class* a_this = (camera_class*)i_this; - dCamera_c* camera = &a_this->mCamera; + dCamera_c* camera = &((camera_class*)i_this)->mCamera; int camera_id = get_camera_id(a_this); dDlst_window_c* window = get_window(camera_id); @@ -9705,7 +10739,7 @@ static void preparation(camera_process_class* i_this) { f32 aspect = mDoGph_gInf_c::getAspect(); camera->SetWindow(viewport->width, viewport->height); - fopCamM_SetAspect(a_this, aspect); + fopCamM_SetAspect((camera_class*)i_this, aspect); if (!daAlink_c::getE3Zhint()) { dComIfGp_offCameraAttentionStatus(camera_id, 0x1002B); @@ -9730,27 +10764,38 @@ static void view_setup(camera_process_class* i_this) { dComIfGd_setView(view); f32 far; + f32 var_f30; if (getComStat(8)) { far = view->far; } else { - far = dStage_stagInfo_GetCullPoint(dComIfGp_getStageStagInfo()); +#if DEBUG + if (g_envHIO.mOther.mAdjustCullFar != 0) { + var_f30 = g_envHIO.mOther.mCullFarValue; + } else +#endif + { + var_f30 = dStage_stagInfo_GetCullPoint(dComIfGp_getStageStagInfo()); + } + far = var_f30; } mDoLib_clipper::setup(view->fovy, view->aspect, view->near, far); } static void store(camera_process_class* i_camera) { - camera_class* a_camera = (camera_class*)i_camera; - dCamera_c* dCamera = &a_camera->mCamera; - int camera_id = get_camera_id(a_camera); + camera_process_class* process = (camera_process_class*)i_camera; + camera_class* camera = (camera_class*)i_camera; + dCamera_c* dCamera = &((camera_class*)i_camera)->mCamera; + int camera_id = get_camera_id(camera); dDlst_window_c* window = get_window(camera_id); view_port_class* viewport = window->getViewPort(); bool error = false; - cXyz center(*fopCamM_GetCenter_p(a_camera)); - cXyz eye(*fopCamM_GetEye_p(a_camera)); - cXyz up(*fopCamM_GetUp_p(a_camera)); - cSAngle angle(fopCamM_GetBank(a_camera)); - f32 fovy = fopCamM_GetFovy(a_camera); + + cXyz center(*fopCamM_GetCenter_p(camera)); + cXyz eye(*fopCamM_GetEye_p(camera)); + cXyz up(*fopCamM_GetUp_p(camera)); + cSAngle angle(fopCamM_GetBank(camera)); + f32 fovy = fopCamM_GetFovy(camera); dDemo_camera_c* demoCamera = dDemo_c::getCamera(); if (demoCamera != NULL && !dComIfGp_getPEvtManager()->cameraPlay()) { @@ -9769,6 +10814,22 @@ static void store(camera_process_class* i_camera) { if (demoCamera->checkEnable(dDemo_camera_c::ENABLE_PROJ_FOVY_e)) { fovy = demoCamera->getFovy(); } +#if DEBUG + } else if (dDebugPad.Enable(0) && dCamera->CameraID() == 0) { + if (dDbgCamera.Playing()) { + center = dCamera->Center(); + eye = dCamera->Eye(); + up = dCamera->Up(); + angle = dCamera->Bank(); + fovy = dCamera->Fovy(); + } else { + center = dDbgCamera.Center(); + eye = dDbgCamera.Eye(); + up = dDbgCamera.Up(); + angle = dDbgCamera.Bank(); + fovy = dDbgCamera.Fovy(); + } +#endif } else if (!dCamera->CheckFlag(1)) { center = dCamera->Center(); eye = dCamera->Eye(); @@ -9795,33 +10856,43 @@ static void store(camera_process_class* i_camera) { } if (!error) { - fopCamM_SetCenter(a_camera, center.x, center.y, center.z); - fopCamM_SetEye(a_camera, eye.x, eye.y, eye.z); - fopCamM_SetUp(a_camera, up.x, up.y, up.z); - fopCamM_SetBank(a_camera, angle); - fopCamM_SetFovy(a_camera, fovy); + fopCamM_SetCenter(camera, center.x, center.y, center.z); + fopCamM_SetEye(camera, eye.x, eye.y, eye.z); + fopCamM_SetUp(camera, up.x, up.y, up.z); + fopCamM_SetBank(camera, angle); + fopCamM_SetFovy(camera, fovy); } dStage_dt_c* stage = (dStage_dt_c*)dComIfGp_getStage(); - if (a_camera->mCamera.mCamSetup.CheckFlag(0x400)) { - //TODO +#if DEBUG + if (dCamera->mCamSetup.CheckFlag(0x400)) { + fopCamM_SetNear(camera, dCamera->Near4Debug()); + fopCamM_SetFar(camera, dCamera->Far4Debug()); + } else if (stage != NULL) { + if (dComIfGp_getCameraAttentionStatus(camera_id) & 0x8) { + fopCamM_SetNear(camera, 30.0f); + } else { + fopCamM_SetNear(camera, stage->getStagInfo()->mNear); + } + fopCamM_SetFar(camera, stage->getStagInfo()->mFar); } - - if (dComIfGp_getCameraAttentionStatus(camera_id) & 8) { - fopCamM_SetNear(a_camera, 30.0f); +#else + if (dComIfGp_getCameraAttentionStatus(camera_id) & 0x8) { + fopCamM_SetNear(camera, 30.0f); } else { if (stage != NULL) { - fopCamM_SetNear(a_camera, stage->getStagInfo()->mNear); + fopCamM_SetNear(camera, stage->getStagInfo()->mNear); } } if (stage != NULL) { - fopCamM_SetFar(a_camera, stage->getStagInfo()->mFar); + fopCamM_SetFar(camera, stage->getStagInfo()->mFar); } +#endif cSGlobe globe(eye - center); - fopCamM_SetAngleY(a_camera, globe.U().Inv()); - fopCamM_SetAngleX(a_camera, globe.V()); + fopCamM_SetAngleY(camera, globe.U().Inv()); + fopCamM_SetAngleX(camera, globe.V()); } cXyz dCamera_c::Up() { @@ -9841,52 +10912,102 @@ cXyz dCamera_c::Center() { } static int camera_execute(camera_process_class* i_this) { - camera_class* a_this = (camera_class*)i_this; - preparation(i_this); + // this variable is likely fake as it doesn't exist in debug, + // but directly casting the parameter on each use breaks retail + camera_class* camera = (camera_class*)i_this; + preparation(camera); if (dDemo_c::getCamera() != NULL) { - a_this->mCamera.ResetView(); + camera->mCamera.ResetView(); } dComIfGp_offCameraAttentionStatus(0, 0x40); - if (a_this->mCamera.Active()) { - a_this->mCamera.Run(); + if (camera->mCamera.Active()) { + camera->mCamera.Run(); } else { - a_this->mCamera.NotRun(); + camera->mCamera.NotRun(); } - a_this->mCamera.CalcTrimSize(); + camera->mCamera.CalcTrimSize(); - store(i_this); - view_setup(i_this); + store(camera); + view_setup(camera); return 1; } static int camera_draw(camera_process_class* i_this) { camera_class* a_this = (camera_class*)i_this; dCamera_c* body = &((camera_class*)i_this)->mCamera; - dDlst_window_c* window = get_window(a_this); view_port_class* viewport = window->getViewPort(); + camera_process_class* process = i_this; int camera_id = get_camera_id(a_this); +#if DEBUG + if (dDebugPad.Enable(0) && body->CameraID() == 0) { + if (dDebugPad.Trigger() != 0) { + dDbgCamera.Reset(body); + } + + dDbgCamera.Run(); + + cXyz center; + cXyz eye; + cXyz up; + cSAngle bank; + f32 fovY; + + if (dDebugPad.Trigger() == 0) { + if (dDbgCamera.Playing()) { + center = body->Center(); + eye = body->Eye(); + up = body->Up(); + bank = body->Bank(); + fovY = body->Fovy(); + } else { + center = dDbgCamera.Center(); + eye = dDbgCamera.Eye(); + up = dDbgCamera.Up(); + bank = dDbgCamera.Bank(); + fovY = dDbgCamera.Fovy(); + + dDbgCamera.DrawShape(); + } + + body->U2(cSGlobe(eye - center).U().Inv()); + + fopCamM_SetCenter(a_this, center.x, center.y, center.z); + fopCamM_SetEye(a_this, eye.x, eye.y, eye.z); + fopCamM_SetUp(a_this, up.x, up.y, up.z); + fopCamM_SetBank(a_this, bank); + fopCamM_SetFovy(a_this, fovY); + fopCamM_SetAngleY(a_this, body->U()); + fopCamM_SetAngleX(a_this, body->V()); + } + } +#endif + int trim_height = body->TrimHeight(); window->setScissor(0.0f, trim_height, FB_WIDTH, FB_HEIGHT - trim_height * 2.0f); - C_MTXPerspective(i_this->projMtx, i_this->fovy, i_this->aspect, i_this->near, i_this->far); - mDoMtx_lookAt(i_this->viewMtx, &i_this->lookat.eye, &i_this->lookat.center, - &i_this->lookat.up, i_this->bank); + C_MTXPerspective(process->projMtx, process->fovy, process->aspect, process->near, process->far); + mDoMtx_lookAt(process->viewMtx, &process->lookat.eye, &process->lookat.center, + &process->lookat.up, process->bank); - j3dSys.setViewMtx(i_this->viewMtx); - cMtx_inverse(i_this->viewMtx, i_this->invViewMtx); +#if WIDESCREEN_SUPPORT + mDoGph_gInf_c::setWideZoomProjection(process->projMtx); +#endif - Z2GetAudience()->setAudioCamera(i_this->viewMtx, i_this->lookat.eye, i_this->lookat.center, - i_this->fovy, i_this->aspect, getComStat(0x80), camera_id, + j3dSys.setViewMtx(process->viewMtx); + cMtx_inverse(process->viewMtx, process->invViewMtx); + + Z2GetAudience()->setAudioCamera(process->viewMtx, process->lookat.eye, process->lookat.center, + process->fovy, process->aspect, getComStat(0x80), camera_id, false); dBgS_GndChk gndchk; gndchk.OnWaterGrp(); - gndchk.SetPos(&i_this->lookat.eye); + gndchk.SetPos(&process->lookat.eye); f32 cross = dComIfG_Bgsp().GroundCross(&gndchk); if (cross != -G_CM3D_F_INF) { @@ -9898,26 +11019,27 @@ static int camera_draw(camera_process_class* i_this) { mDoAud_setCameraGroupInfo(dComIfG_Bgsp().GetGrpSoundId(gndchk)); Vec spDC; - spDC.x = i_this->lookat.eye.x; + spDC.x = process->lookat.eye.x; spDC.y = cross; - spDC.z = i_this->lookat.eye.z; + spDC.z = process->lookat.eye.z; Z2AudioMgr::getInterface()->setCameraPolygonPos(&spDC); } else { Z2AudioMgr::getInterface()->setCameraPolygonPos(NULL); } - MTXCopy(i_this->viewMtx, i_this->viewMtxNoTrans); - i_this->viewMtxNoTrans[0][3] = 0.0f; - i_this->viewMtxNoTrans[1][3] = 0.0f; - i_this->viewMtxNoTrans[2][3] = 0.0f; - cMtx_concatProjView(i_this->projMtx, i_this->viewMtx, i_this->projViewMtx); + MTXCopy(process->viewMtx, process->viewMtxNoTrans); + process->viewMtxNoTrans[0][3] = 0.0f; + process->viewMtxNoTrans[1][3] = 0.0f; + process->viewMtxNoTrans[2][3] = 0.0f; + cMtx_concatProjView(process->projMtx, process->viewMtx, process->projViewMtx); body->Draw(); return 1; } static int init_phase1(camera_class* i_this) { + camera_class* camera = i_this; int camera_id = get_camera_id(i_this); dComIfGp_setCamera(camera_id, i_this); @@ -9928,13 +11050,13 @@ static int init_phase1(camera_class* i_this) { i_this->field_0x238 = 0; i_this->field_0x22f = 71; - i_this->mCamera.field_0xb0c = 0; + camera->mCamera.field_0xb0c = 0; return cPhs_NEXT_e; } static int init_phase2(camera_class* i_this) { - camera_process_class* a_this = (camera_process_class*)i_this; - dCamera_c* body = &i_this->mCamera; + camera_class* camera = (camera_class*)i_this; + dCamera_c* body = &camera->mCamera; int camera_id = get_camera_id(i_this); i_this->field_0x238++; @@ -9969,33 +11091,45 @@ static int init_phase2(camera_class* i_this) { new (body) dCamera_c(i_this); + f32 var_f31 = 0.0f; f32 var_f30 = 160000.0f; if (dComIfGp_getStage()->getStagInfo() != NULL) { dStage_dt_c* stage_dt = dComIfGp_getStage(); - stage_dt->getStagInfo(); - + var_f31 = stage_dt->getStagInfo()->mNear; var_f30 = stage_dt->getStagInfo()->mFar; } - get_window(camera_id)->getViewPort(); + dDlst_window_c* window = get_window(camera_id); + view_port_class* viewport = window->getViewPort(); - fopCamM_SetNear(i_this, 1.0f); + var_f31 = 1.0f; + fopCamM_SetNear(i_this, var_f31); fopCamM_SetFar(i_this, var_f30); fopCamM_SetFovy(i_this, 30.0f); fopCamM_SetAspect(i_this, mDoGph_gInf_c::getAspect()); fopCamM_SetCenter(i_this, player->current.pos.x, player->current.pos.y, player->current.pos.z); fopCamM_SetBank(i_this, 0); - store(a_this); - view_setup(a_this); + store(camera); + view_setup(camera); - i_this->mCamera.field_0xb0c = 1; + camera->mCamera.field_0xb0c = 1; + if (body->CameraID() == 0) { +#if DEBUG + dDbgCamera.Init(body); +#endif + } i_this->field_0x238 = 0; dComIfGp_getAttention()->Init(player, PAD_1); return cPhs_NEXT_e; } +static void dummy() { + const char* s1 = "Create -> Camera\n"; + const char* s2 = "Delete -> Camera\n"; +} + static int camera_create(camera_class* i_this) { static request_of_phase_process_fn l_method[3] = { (request_of_phase_process_fn)init_phase1, @@ -10003,15 +11137,17 @@ static int camera_create(camera_class* i_this) { (request_of_phase_process_fn)NULL, }; - return dComLbG_PhaseHandler(&i_this->phase_request, l_method, i_this); + camera_class* camera = i_this; + return dComLbG_PhaseHandler(&camera->phase_request, l_method, i_this); } static int camera_delete(camera_process_class* i_this) { dCamera_c* camera = &((camera_class*)i_this)->mCamera; if (camera->CameraID() == 0) { - // not implemented - //dDbgCamera.Finish(); +#if DEBUG + dDbgCamera.Finish(); +#endif } camera->~dCamera_c(); @@ -10057,8 +11193,8 @@ void dCamForcusLine::Draw() { } bool dCamForcusLine::Off() { - field_0x49 = 0; - return field_0x49 == 0; + field_0x49 = false; + return field_0x49 == false; } static leafdraw_method_class method = { diff --git a/src/d/d_com_inf_game.cpp b/src/d/d_com_inf_game.cpp index 87708c6dca..50099a9a91 100644 --- a/src/d/d_com_inf_game.cpp +++ b/src/d/d_com_inf_game.cpp @@ -22,7 +22,7 @@ #include "m_Do/m_Do_Reset.h" #include "m_Do/m_Do_controller_pad.h" #include "m_Do/m_Do_graphic.h" -#include +#include void dComIfG_play_c::ct() { mWindowNum = 0; diff --git a/src/d/d_com_static.cpp b/src/d/d_com_static.cpp index f3bace3685..05ec34453c 100644 --- a/src/d/d_com_static.cpp +++ b/src/d/d_com_static.cpp @@ -12,7 +12,7 @@ #include "d/actor/d_a_tag_magne.h" #include "d/actor/d_a_tag_mist.h" #include "d/actor/d_a_tag_stream.h" -#include +#include void daSus_c::data_c::set(s8 i_roomNo, cXyz const& param_1, cXyz const& param_2, u8 param_3, u8 param_4, u8 i_type) { diff --git a/src/d/d_debug_camera.cpp b/src/d/d_debug_camera.cpp index d80eb3202b..32f281e527 100644 --- a/src/d/d_debug_camera.cpp +++ b/src/d/d_debug_camera.cpp @@ -519,26 +519,27 @@ int dDbgCamera_c::moveTool() { mKeys[field_0x58] = PlaneKey(); } - mRunKey.mCenter = mKeys[field_0x58].mCenter; + mRunKey = mKeys[field_0x58]; break; } + cXyz* sp30; + fopAc_ac_c* player; + if (mCmdMode == 3) { - fopAc_ac_c* sp2C = dComIfGp_getPlayer(0); - /* if (this->unk730 != 0x3E7) { - &field_0x704 = &sp2C->unk558 - this->unk730 = 0x3E7; + player = dComIfGp_getPlayer(0); + if (*(int*)&field_0x704.field_0x10[2].y != 999) { + *(cXyz*)&field_0x704.field_0x0 = player->attention_info.position; + *(int*)&field_0x704.field_0x10[2].y = 999; } else { - (sp15C, (Vec* ) &sp2C->unk558); - &mRunKey.mCenter += sp15C - &field_0x704 = &sp2C->unk558 - } */ + mRunKey.mCenter += player->attention_info.position - *(cXyz*)&field_0x704.field_0x0; + *(cXyz*)&field_0x704.field_0x0 = player->attention_info.position; + } } else { - // this->unk730 = 3; + *(int*)&field_0x704.field_0x10[2].y = 3; } cXyz* var_r28; - cXyz* sp30; f32 temp_f31; f32 var_f30; f32 var_f29; @@ -634,11 +635,9 @@ int dDbgCamera_c::moveTool() { mRunKey.mBank -= cDegree(mCamSetup.FovyTick()) * 0.1f; break; case 8: - s16 temp_r26 = mCamSetup.Rotate(var_f29 * (stick_x * field_0xc14)); - field_0x44.U(field_0x44.U() + temp_r26); - - temp_r26 = mCamSetup.Rotate(var_f29 * (stick_y * field_0xc14)); - field_0x44.V(field_0x44.V() + temp_r26); + field_0x44.U(field_0x44.U() + mCamSetup.Rotate(var_f29 * (stick_x * field_0xc14))); + field_0x44.V(field_0x44.V() + mCamSetup.Rotate(var_f29 * (stick_y * field_0xc14))); + break; } if (sp8 != 0) { @@ -1697,11 +1696,14 @@ int dDbgCamera_c::DrawShape() { if (mCamSetup.CheckFlag(0x10)) { switch (mLchkNum) { - case 2: - // dComIfG_Bgsp().DrawPoly(mLchk[1], l_color2); + case 2: { + static GXColor l_color2 = {0xC0, 0x78, 0x0, 0x80}; + dComIfG_Bgsp().DrawPoly(mLchk[1], l_color2); /* fallthrough */ + } case 1: - // dComIfG_Bgsp().DrawPoly(mLchk[0], l_color1); + static GXColor l_color1 = {0xC0, 0x78, 0x78, 0x80}; + dComIfG_Bgsp().DrawPoly(mLchk[0], l_color1); break; } } diff --git a/src/d/d_demo.cpp b/src/d/d_demo.cpp index d3332240bf..b4433c5e02 100644 --- a/src/d/d_demo.cpp +++ b/src/d/d_demo.cpp @@ -397,9 +397,9 @@ void dDemo_actor_c::JSGSetScaling(Vec const& i_scale) { } void dDemo_actor_c::JSGSetRotation(Vec const& i_rotate) { - mRotate.x = i_rotate.x * 182.04444885253906f; - mRotate.y = i_rotate.y * 182.04444885253906f; - mRotate.z = i_rotate.z * 182.04444885253906f; + mRotate.x = DEG2S(i_rotate.x); + mRotate.y = DEG2S(i_rotate.y); + mRotate.z = DEG2S(i_rotate.z); onEnable(ENABLE_ROTATE_e); } @@ -560,8 +560,8 @@ f32 dDemo_camera_c::JSGGetViewRoll() const { if (view == NULL) { return 0.0f; } - - return view->bank * 0.0054931640625f; + + return S2DEG(view->bank); } void dDemo_camera_c::JSGSetViewRoll(f32 i_roll) { diff --git a/src/d/d_drawlist.cpp b/src/d/d_drawlist.cpp index 6d90b08181..ddea5f1128 100644 --- a/src/d/d_drawlist.cpp +++ b/src/d/d_drawlist.cpp @@ -1544,7 +1544,7 @@ int dDlst_shadowControl_c::setReal(u32 param_1, s8 param_2, J3DModel* param_3, c }; f32 fVar1; - f32 dVar16 = (param_2 == 0) ? 1.0f : (1.0f - 0.003000000026077032f * param_6); + f32 dVar16 = (param_2 == 0) ? 1.0f : (1.0f - 0.003f * param_6); if (dVar16 <= 0.0f) { return 0; } @@ -1558,8 +1558,7 @@ int dDlst_shadowControl_c::setReal(u32 param_1, s8 param_2, J3DModel* param_3, c } f32 dVar17 = acStack_94.z + param_5; if (dVar17 < -1000.0f) { - f32 fVar1 = 0.0010000000474974513f * - (-1000.0f - dVar17); + f32 fVar1 = 0.001f * (-1000.0f - dVar17); if (fVar1 >= 1.0f) { return 0; } diff --git a/src/d/d_error_msg.cpp b/src/d/d_error_msg.cpp index 9bfc896a71..ecbb1d2a0a 100644 --- a/src/d/d_error_msg.cpp +++ b/src/d/d_error_msg.cpp @@ -209,8 +209,8 @@ void dDvdErrorMsg_c::draw(s32 status) { JFWDisplay::getManager()->resetFader(); } -u8 dDvdErrorMsg_c::execute() { - static u8 l_dvdError; +bool dDvdErrorMsg_c::execute() { + static bool l_dvdError; s32 drive_status = DVDGetDriveStatus(); if (drive_status != DVD_STATE_END && drive_status != DVD_STATE_BUSY && !l_dvdError) { diff --git a/src/d/d_ev_camera.cpp b/src/d/d_ev_camera.cpp index ac2d2ca32f..1cd4c3e3b7 100644 --- a/src/d/d_ev_camera.cpp +++ b/src/d/d_ev_camera.cpp @@ -2260,8 +2260,8 @@ bool dCamera_c::gameOverEvCamera() { } if (!bVar9 && bVar3) { - mViewCache.mCenter += mMonitor.field_0x14; - mViewCache.mEye += (mMonitor.field_0x14 * 0.98f); + mViewCache.mCenter += mMonitor.field_0x14.field_0x0; + mViewCache.mEye += (mMonitor.field_0x14.field_0x0 * 0.98f); } mViewCache.mDirection.Val(mViewCache.mEye - mViewCache.mCenter); @@ -3348,8 +3348,8 @@ bool dCamera_c::possessedEvCamera() { cXyz sp60; mDoLib_project(&mEyePos, &sp60); SetBlurePosition(sp60.x / scissor->width, sp60.y / scissor->height, 0.0f); - SetBlureAlpha((fVar1 * 0.699999988079071f) + 0.5f); - SetBlureScale((fVar1 * 0.09000000357627869f) + 1.1f, 0.98f - (fVar1 * 0.18000000715255737f), 0.0f); + SetBlureAlpha((fVar1 * 0.7f) + 0.5f); + SetBlureScale((fVar1 * 0.09f) + 1.1f, 0.98f - (fVar1 * 0.18f), 0.0f); } } diff --git a/src/d/d_file_sel_info.cpp b/src/d/d_file_sel_info.cpp index 642ccc6764..df0bee5aa9 100644 --- a/src/d/d_file_sel_info.cpp +++ b/src/d/d_file_sel_info.cpp @@ -11,7 +11,7 @@ #include "d/d_com_inf_game.h" #include "d/d_meter2_info.h" #include "d/d_pane_class_alpha.h" -#include +#include dFile_info_c::dFile_info_c(JKRArchive* i_archive, u8 param_1) { mArchive = i_archive; diff --git a/src/d/d_file_select.cpp b/src/d/d_file_select.cpp index 153811b6fe..efd4dff429 100644 --- a/src/d/d_file_select.cpp +++ b/src/d/d_file_select.cpp @@ -5439,7 +5439,7 @@ void dFile_select3D_c::toItem3Dpos(f32 param_0, f32 param_1, f32 param_2, cXyz* param_1 = (2.0f * ((param_1 - -100.0f) / 448.0f) - 1.0f); calcViewMtx(adStack_98); cMtx_inverse(adStack_98, auStack_c8); - f32 tangent = std::tan(0.39269909262657166); + f32 tangent = std::tan(M_PI / 8.0f); f32 dVar12 = -param_2; cXyz cStack_d4((param_0 * param_2) * (mDoGph_gInf_c::getAspect() * tangent), (tangent * (param_1 * dVar12)), dVar12); diff --git a/src/d/d_kankyo.cpp b/src/d/d_kankyo.cpp index 209de4cd58..54752a1bbf 100644 --- a/src/d/d_kankyo.cpp +++ b/src/d/d_kankyo.cpp @@ -24,7 +24,7 @@ #include "f_op/f_op_kankyo.h" #include "m_Do/m_Do_graphic.h" #include "m_Do/m_Do_lib.h" -#include +#include static void GxXFog_set(); diff --git a/src/d/d_kankyo_rain.cpp b/src/d/d_kankyo_rain.cpp index ae2cfd0210..3769ab6f10 100644 --- a/src/d/d_kankyo_rain.cpp +++ b/src/d/d_kankyo_rain.cpp @@ -117,7 +117,7 @@ void dKyr_lenzflare_move() { dKyr_get_vectle_calc(¢er, &proj, &vect); lenz_packet->field_0x94 = cM_atan2s(vect.x, vect.y); - lenz_packet->field_0x94 *= 0.0054931640625f; // Maybe 45 / 8192 + lenz_packet->field_0x94 *= S2DEG_CONSTANT; // convert from short angle to degrees lenz_packet->field_0x94 += 180.0f; dKyr_get_vectle_calc(&camera->lookat.eye, &camera->lookat.center, &camFwd); diff --git a/src/d/d_map.cpp b/src/d/d_map.cpp index 922a0aea39..a26715f9d7 100644 --- a/src/d/d_map.cpp +++ b/src/d/d_map.cpp @@ -775,7 +775,7 @@ void dMap_c::changeTextureSize(int param_1, int param_2, int param_3) { mTexSizeH = param_2 >> param_3; u32 imageSize = GXGetTexBufferSize(mTexSizeW, mTexSizeH, 9, 0, 0); - OS_REPORT("imageSize<%d> <%d kbyte>mTexSizeW<%d>mTexSizeH<%d>\n", imageSize, imageSize * 0.0009765625f, mTexSizeW, mTexSizeH); + OS_REPORT("imageSize<%d> <%d kbyte>mTexSizeW<%d>mTexSizeH<%d>\n", imageSize, imageSize * (1.0f / 1024.f), mTexSizeW, mTexSizeH); JUT_ASSERT(2682, mImage_p != NULL); diff --git a/src/d/d_menu_dmap_map.cpp b/src/d/d_menu_dmap_map.cpp index 468b2c2f17..e2f157ff88 100644 --- a/src/d/d_menu_dmap_map.cpp +++ b/src/d/d_menu_dmap_map.cpp @@ -4,7 +4,7 @@ #include "d/dolzel.h" // IWYU pragma: keep -#include +#include #include "d/d_com_inf_game.h" #include "d/d_map_path_dmap.h" #include "d/d_menu_dmap.h" diff --git a/src/d/d_menu_fmap.cpp b/src/d/d_menu_fmap.cpp index b9b22f841b..7e847452cd 100644 --- a/src/d/d_menu_fmap.cpp +++ b/src/d/d_menu_fmap.cpp @@ -5,7 +5,7 @@ #include "JSystem/JKernel/JKRAramArchive.h" #include "JSystem/JKernel/JKRExpHeap.h" #include "JSystem/JKernel/JKRMemArchive.h" -#include +#include #include "f_op/f_op_msg_mng.h" #include "d/d_com_inf_game.h" #include "d/d_lib.h" diff --git a/src/d/d_menu_insect.cpp b/src/d/d_menu_insect.cpp index 953cd73589..c8f8cc6d51 100644 --- a/src/d/d_menu_insect.cpp +++ b/src/d/d_menu_insect.cpp @@ -19,7 +19,7 @@ #include "d/d_msg_string.h" #include "m_Do/m_Do_controller_pad.h" #include "m_Do/m_Do_graphic.h" -#include +#include typedef void (dMenu_Insect_c::*initFunc)(); static initFunc map_init_process[] = { diff --git a/src/d/d_menu_item_explain.cpp b/src/d/d_menu_item_explain.cpp index cc901b9a72..5f3dd5c2d4 100644 --- a/src/d/d_menu_item_explain.cpp +++ b/src/d/d_menu_item_explain.cpp @@ -9,7 +9,7 @@ #include "JSystem/J2DGraph/J2DTextBox.h" #include "JSystem/JKernel/JKRExpHeap.h" #include "JSystem/JUtility/JUTTexture.h" -#include +#include #include "d/actor/d_a_player.h" #include "d/d_com_inf_game.h" #include "d/d_item.h" diff --git a/src/d/d_menu_letter.cpp b/src/d/d_menu_letter.cpp index 57a20807f4..95c2d0ae65 100644 --- a/src/d/d_menu_letter.cpp +++ b/src/d/d_menu_letter.cpp @@ -4,7 +4,7 @@ #include "JSystem/J2DGraph/J2DGrafContext.h" #include "JSystem/J2DGraph/J2DTextBox.h" #include "JSystem/JKernel/JKRMemArchive.h" -#include +#include #include "d/d_com_inf_game.h" #include "d/d_select_cursor.h" #include "d/d_meter2_info.h" diff --git a/src/d/d_menu_ring.cpp b/src/d/d_menu_ring.cpp index 4785e46bf0..49c3e4000b 100644 --- a/src/d/d_menu_ring.cpp +++ b/src/d/d_menu_ring.cpp @@ -27,7 +27,7 @@ #include "m_Do/m_Do_graphic.h" #include -#include +#include typedef void (dMenu_Ring_c::*initFunc)(); static initFunc stick_init[] = { diff --git a/src/d/d_menu_save.cpp b/src/d/d_menu_save.cpp index b9737e3a4b..823ea577fc 100644 --- a/src/d/d_menu_save.cpp +++ b/src/d/d_menu_save.cpp @@ -3,7 +3,7 @@ #include "d/d_menu_save.h" #include "JSystem/JKernel/JKRExpHeap.h" #include "JSystem/JKernel/JKRMemArchive.h" -#include +#include #include "d/d_com_inf_game.h" #include "d/d_lib.h" #include "d/d_select_cursor.h" diff --git a/src/d/d_msg_class.cpp b/src/d/d_msg_class.cpp index 683b192bb6..64ed967111 100644 --- a/src/d/d_msg_class.cpp +++ b/src/d/d_msg_class.cpp @@ -1,7 +1,7 @@ #include "d/dolzel.h" // IWYU pragma: keep #include "d/d_msg_class.h" -#include +#include #include "d/d_meter2_info.h" #include "d/d_msg_object.h" #include "d/d_msg_unit.h" diff --git a/src/d/d_msg_object.cpp b/src/d/d_msg_object.cpp index f1a9c6945c..534346aa92 100644 --- a/src/d/d_msg_object.cpp +++ b/src/d/d_msg_object.cpp @@ -22,7 +22,7 @@ #include "d/d_meter2.h" #include "d/actor/d_a_midna.h" #include "f_op/f_op_msg_mng.h" -#include +#include #include "m_Do/m_Do_controller_pad.h" #include "m_Do/m_Do_lib.h" #include "JSystem/JKernel/JKRExpHeap.h" diff --git a/src/d/d_msg_scrn_explain.cpp b/src/d/d_msg_scrn_explain.cpp index a6618cf265..3df29b4e11 100644 --- a/src/d/d_msg_scrn_explain.cpp +++ b/src/d/d_msg_scrn_explain.cpp @@ -11,7 +11,7 @@ #include "d/d_msg_string.h" #include "d/d_pane_class.h" #include "m_Do/m_Do_controller_pad.h" -#include +#include #if VERSION == VERSION_GCN_JPN #define STR_BUF_LEN 528 diff --git a/src/d/d_msg_unit.cpp b/src/d/d_msg_unit.cpp index 0e2447b4b0..4619977315 100644 --- a/src/d/d_msg_unit.cpp +++ b/src/d/d_msg_unit.cpp @@ -2,7 +2,7 @@ #include "d/d_msg_unit.h" #include "d/d_com_inf_game.h" -#include +#include #include "d/d_kankyo.h" #include "d/d_meter2_info.h" diff --git a/src/d/d_name.cpp b/src/d/d_name.cpp index bd2515ecc3..e45a9ee0d1 100644 --- a/src/d/d_name.cpp +++ b/src/d/d_name.cpp @@ -6,7 +6,7 @@ #include "d/d_lib.h" #include "m_Do/m_Do_audio.h" #include "m_Do/m_Do_controller_pad.h" -#include +#include #include "JSystem/J2DGraph/J2DAnmLoader.h" #include "f_op/f_op_msg_mng.h" diff --git a/src/d/d_particle.cpp b/src/d/d_particle.cpp index fec0de589c..b0597577b6 100644 --- a/src/d/d_particle.cpp +++ b/src/d/d_particle.cpp @@ -17,7 +17,7 @@ #include "JSystem/JParticle/JPAResourceManager.h" #include "JSystem/JMath/JMATrigonometric.h" #include "d/d_s_play.h" -#include +#include #include "d/d_com_inf_game.h" #include "m_Do/m_Do_lib.h" #include "m_Do/m_Do_graphic.h" diff --git a/src/d/d_resorce.cpp b/src/d/d_resorce.cpp index be4e71b9f3..f47814388a 100644 --- a/src/d/d_resorce.cpp +++ b/src/d/d_resorce.cpp @@ -14,7 +14,7 @@ #include "d/d_com_inf_game.h" #include "f_op/f_op_camera_mng.h" #include "m_Do/m_Do_graphic.h" -#include +#include dRes_info_c::dRes_info_c() { mCount = 0; diff --git a/src/d/d_s_menu.cpp b/src/d/d_s_menu.cpp index e86cc5f062..bc7414f8e4 100644 --- a/src/d/d_s_menu.cpp +++ b/src/d/d_s_menu.cpp @@ -19,7 +19,7 @@ #include "JSystem/JUtility/JUTDbPrint.h" #include "JSystem/JUtility/JUTReport.h" -#include +#include #if DEBUG void dScnMenu_setItem(int i_slotNo, u8 i_itemNo); diff --git a/src/d/d_s_room.cpp b/src/d/d_s_room.cpp index b0b6ad1e19..836a9a1a18 100644 --- a/src/d/d_s_room.cpp +++ b/src/d/d_s_room.cpp @@ -10,7 +10,7 @@ #include "d/d_s_play.h" #include "d/d_s_room.h" #include "m_Do/m_Do_Reset.h" -#include +#include static int dScnRoom_Draw(room_of_scene_class* i_this) { return 1; diff --git a/src/d/d_save.cpp b/src/d/d_save.cpp index 99bcced05a..fed8634d8b 100644 --- a/src/d/d_save.cpp +++ b/src/d/d_save.cpp @@ -13,7 +13,7 @@ #include "d/d_save.h" #include "d/d_save_init.h" #include "f_op/f_op_scene_mng.h" -#include +#include #if PLATFORM_WII || PLATFORM_SHIELD #include diff --git a/src/d/d_stage.cpp b/src/d/d_stage.cpp index 7c6a9dc2c0..809afb65fc 100644 --- a/src/d/d_stage.cpp +++ b/src/d/d_stage.cpp @@ -17,7 +17,7 @@ #include "f_op/f_op_scene_mng.h" #include "global.h" #include "m_Do/m_Do_Reset.h" -#include +#include void dStage_nextStage_c::set(const char* i_stage, s8 i_roomId, s16 i_point, s8 i_layer, s8 i_wipe, u8 i_speed) { diff --git a/src/f_ap/f_ap_game.cpp b/src/f_ap/f_ap_game.cpp index f3583e9c80..3c877bb134 100644 --- a/src/f_ap/f_ap_game.cpp +++ b/src/f_ap/f_ap_game.cpp @@ -61,10 +61,10 @@ fapGm_HIO_c::fapGm_HIO_c() { } #if DEBUG -static u8 data_8073f6e8 = 1; -static u8 data_8073f6e9 = 1; -static u8 data_8073f6ea = 1; -static u8 data_8073f6eb = 1; +u8 fapGm_HIO_c::mCaptureMagnification = 1; +u8 fapGm_HIO_c::mCaptureScreenDivH = 1; +u8 fapGm_HIO_c::mCaptureScreenDivV = 1; +u8 fapGm_HIO_c::mPackArchiveMode = 1; CaptureScreen* fapGm_HIO_c::mCaptureScreen; void* fapGm_HIO_c::mCaptureScreenBuffer; @@ -83,7 +83,7 @@ u8 fapGm_HIO_c::mParticle254Fix; void fapGm_HIO_c::genMessage(JORMContext* mctx) { mctx->genButton("警告消去", 0x4000020, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genButton("BMPキャプチャー", 0x4000003, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); - mctx->genSlider("BMPキャプチャー倍率", &data_8073f6e8, 1, 8, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("BMPキャプチャー倍率", &mCaptureMagnification, 1, 8, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genButton("スナップショット", 0x4000002, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genButton("CPU時間", 0x4000007, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genCheckBox("ホストIO使用", &mUsingHostIO, 1, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); @@ -92,7 +92,7 @@ void fapGm_HIO_c::genMessage(JORMContext* mctx) { mctx->genCheckBox("2D表示", &mDisplay2D, 1, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genCheckBox("パーティクル表示", &mDisplayParticle, 1, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genCheckBox("パーティクル254固定", &mParticle254Fix, 1, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); - mctx->genCheckBox("パックアーカイブモード", &data_8073f6eb, 1, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genCheckBox("パックアーカイブモード", &mPackArchiveMode, 1, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genLabel("−−−−−−−【プリント】−−−−−−−", 0x4000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genSlider(" 色 R", &mColor.r, 0, 0xFF, 0x4000010, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); @@ -205,10 +205,10 @@ int dumpTagObject(void* i_object, void*) { fopAc_ac_c* a_actor = (fopAc_ac_c*)i_object; const char* actorname = dStage_getName(profname, -1); - fapGm_dataMem::printfTag(fapGm_dataMem::TagAtt_Fixed_e, fapGm_dataMem::TagType_Object_e, 0, profname_str, a_actor, NULL, *actorname == 0 ? NULL : actorname, NULL); + fapGm_dataMem::printfTag(fapGm_dataMem::TagAtt_Variable_e, fapGm_dataMem::TagType_Object_e, 0, profname_str, a_actor, NULL, *actorname == 0 ? NULL : actorname, NULL); if (a_actor->heap != NULL) { - fapGm_dataMem::printfTag(fapGm_dataMem::TagAtt_Fixed_e, fapGm_dataMem::TagType_Object_e, 0, profname_str, a_actor->heap, NULL, actorname, NULL); + fapGm_dataMem::printfTag(fapGm_dataMem::TagAtt_Variable_e, fapGm_dataMem::TagType_Object_e, 0, profname_str, a_actor->heap, NULL, actorname, NULL); } u32 other_heap_size = 0; @@ -221,10 +221,10 @@ int dumpTagObject(void* i_object, void*) { } if (other_heap_size != 0) { - fapGm_dataMem::printfTag(fapGm_dataMem::TagAtt_Fixed_e, fapGm_dataMem::TagType_Object_e, 6, profname_str, NULL, other_heap_size, NULL, NULL); + fapGm_dataMem::printfTag(fapGm_dataMem::TagAtt_Variable_e, fapGm_dataMem::TagType_Object_e, 6, profname_str, NULL, other_heap_size, NULL, NULL); } } else { - fapGm_dataMem::printfTag(fapGm_dataMem::TagAtt_Fixed_e, fapGm_dataMem::TagType_Object_e, 0, profname_str, i_object, NULL, NULL, NULL); + fapGm_dataMem::printfTag(fapGm_dataMem::TagAtt_Variable_e, fapGm_dataMem::TagType_Object_e, 0, profname_str, i_object, NULL, NULL, NULL); } return 1; @@ -410,77 +410,77 @@ int fapGm_dataMem::findParentHeap(void* i_object) { void fapGm_dataMem::dumpTag() { *mCsv = 0; - printfTag(TagAtt_Fixed_e, TagType_Heap_e, HeapType_Root_e, NULL, JKRHeap::getRootHeap(), 0, NULL, NULL); - printfTag(TagAtt_Fixed_e, TagType_Heap_e, HeapType_System_e, NULL, JKRGetSystemHeap(), 0, NULL, NULL); - printfTag(TagAtt_Fixed_e, TagType_Heap_e, HeapType_Zelda_e, NULL, mDoExt_getZeldaHeap(), 0, NULL, NULL); - printfTag(TagAtt_Variable_e, TagType_Heap_e, HeapType_Archive_e, NULL, mDoExt_getArchiveHeap(), 0, NULL, NULL); - printfTag(TagAtt_Variable_e, TagType_Heap_e, HeapType_J2D_e, NULL, mDoExt_getJ2dHeap(), 0, NULL, NULL); + printfTag(TagAtt_Variable_e, TagType_Heap_e, HeapType_Root_e, NULL, JKRHeap::getRootHeap(), 0, NULL, NULL); + printfTag(TagAtt_Variable_e, TagType_Heap_e, HeapType_System_e, NULL, JKRGetSystemHeap(), 0, NULL, NULL); + printfTag(TagAtt_Variable_e, TagType_Heap_e, HeapType_Zelda_e, NULL, mDoExt_getZeldaHeap(), 0, NULL, NULL); + printfTag(TagAtt_Fixed_e, TagType_Heap_e, HeapType_Archive_e, NULL, mDoExt_getArchiveHeap(), 0, NULL, NULL); + printfTag(TagAtt_Fixed_e, TagType_Heap_e, HeapType_J2D_e, NULL, mDoExt_getJ2dHeap(), 0, NULL, NULL); #if PLATFORM_WII || PLATFORM_SHIELD - printfTag(TagAtt_Variable_e, TagType_Heap_e, HeapType_Dynamic_e, NULL, DynamicModuleControlBase::getHeap(), 0, NULL, NULL); + printfTag(TagAtt_Fixed_e, TagType_Heap_e, HeapType_Dynamic_e, NULL, DynamicModuleControlBase::getHeap(), 0, NULL, NULL); #endif - printfTag(TagAtt_Variable_e, TagType_Heap_e, HeapType_Game_e, NULL, mDoExt_getGameHeap(), 0, NULL, NULL); - printfTag(TagAtt_Variable_e, TagType_Heap_e, HeapType_Command_e, NULL, mDoExt_getCommandHeap(), 0, NULL, NULL); - printfTag(TagAtt_Variable_e, TagType_Heap_e, HeapType_ARAM_e, NULL, NULL, 0, NULL, NULL); - printfTag(TagAtt_Variable_e, TagType_Audio_e, 0, "オーディオ", g_mDoAud_audioHeap, 0x169000, NULL, NULL); - printfTag(TagAtt_Variable_e, TagType_Particle_e, 0, "パーティクルアーカイブ", g_dComIfG_gameInfo.play.getParticle()->getResHeap(), 0, NULL, NULL); - printfTag(TagAtt_Variable_e, TagType_Particle_e, 0, "パーティクル(常駐)", g_dComIfG_gameInfo.play.getParticle()->getHeap(), 0, NULL, NULL); - printfTag(TagAtt_Fixed_e, TagType_Particle_e, 0, "パーティクル(ステージ)", g_dComIfG_gameInfo.play.getParticle()->getSceneHeap(), 0, NULL, NULL); - printfTag(TagAtt_Variable_e, TagType_System_e, HeapType_System_e, "グラフィックFIFO", NULL, 0xA0000, 0, NULL); + printfTag(TagAtt_Fixed_e, TagType_Heap_e, HeapType_Game_e, NULL, mDoExt_getGameHeap(), 0, NULL, NULL); + printfTag(TagAtt_Fixed_e, TagType_Heap_e, HeapType_Command_e, NULL, mDoExt_getCommandHeap(), 0, NULL, NULL); + printfTag(TagAtt_Fixed_e, TagType_Heap_e, HeapType_ARAM_e, NULL, NULL, 0, NULL, NULL); + printfTag(TagAtt_Fixed_e, TagType_Audio_e, 0, "オーディオ", g_mDoAud_audioHeap, 0x169000, NULL, NULL); + printfTag(TagAtt_Fixed_e, TagType_Particle_e, 0, "パーティクルアーカイブ", g_dComIfG_gameInfo.play.getParticle()->getResHeap(), 0, NULL, NULL); + printfTag(TagAtt_Fixed_e, TagType_Particle_e, 0, "パーティクル(常駐)", g_dComIfG_gameInfo.play.getParticle()->getHeap(), 0, NULL, NULL); + printfTag(TagAtt_Variable_e, TagType_Particle_e, 0, "パーティクル(ステージ)", g_dComIfG_gameInfo.play.getParticle()->getSceneHeap(), 0, NULL, NULL); + printfTag(TagAtt_Fixed_e, TagType_System_e, HeapType_System_e, "グラフィックFIFO", NULL, 0xA0000, 0, NULL); #if PLATFORM_WII || PLATFORM_SHIELD - printfTag(TagAtt_Variable_e, TagType_System_e, 0, "グラフィック関係バッファ", mDoGph_gInf_c::getHeap(), 0, NULL, NULL); + printfTag(TagAtt_Fixed_e, TagType_System_e, 0, "グラフィック関係バッファ", mDoGph_gInf_c::getHeap(), 0, NULL, NULL); #endif if (mDoGph_gInf_c::getBloom()->getBuffer() != NULL) { - printfTag(TagAtt_Fixed_e, TagType_System_e, 0, "飽和加算用バッファ", mDoGph_gInf_c::getBloom()->getBuffer(), NULL, 0, NULL); + printfTag(TagAtt_Variable_e, TagType_System_e, 0, "飽和加算用バッファ", mDoGph_gInf_c::getBloom()->getBuffer(), NULL, 0, NULL); } if (dComIfGp_getSimpleModel() != NULL) { - printfTag(TagAtt_Variable_e, TagType_System_e, 0, "シンプルモデルバッファ", dComIfGp_getSimpleModel(), NULL, 0, NULL); + printfTag(TagAtt_Fixed_e, TagType_System_e, 0, "シンプルモデルバッファ", dComIfGp_getSimpleModel(), NULL, 0, NULL); } if (dMdl_mng_c::m_myObj != NULL) { - printfTag(TagAtt_Variable_e, TagType_System_e, 0, "節約モデルバッファ", dMdl_mng_c::m_myObj, NULL, 0, NULL); + printfTag(TagAtt_Fixed_e, TagType_System_e, 0, "節約モデルバッファ", dMdl_mng_c::m_myObj, NULL, 0, NULL); } if (daGrass_c::getGrass() != NULL) { - printfTag(TagAtt_Fixed_e, TagType_System_e, 0, "草バッファ", daGrass_c::getGrass(), NULL, 0, NULL); + printfTag(TagAtt_Variable_e, TagType_System_e, 0, "草バッファ", daGrass_c::getGrass(), NULL, 0, NULL); } if (daGrass_c::getFlower() != NULL) { - printfTag(TagAtt_Fixed_e, TagType_System_e, 0, "花バッファ", daGrass_c::getFlower(), NULL, 0, NULL); + printfTag(TagAtt_Variable_e, TagType_System_e, 0, "花バッファ", daGrass_c::getFlower(), NULL, 0, NULL); } if (dTres_c::getTypeGroupData() != NULL) { - printfTag(TagAtt_Variable_e, TagType_System_e, 0, "常駐宝箱バッファ", (char*)dTres_c::getTypeGroupData() - 16, NULL, 0, NULL); + printfTag(TagAtt_Fixed_e, TagType_System_e, 0, "常駐宝箱バッファ", (char*)dTres_c::getTypeGroupData() - 16, NULL, 0, NULL); } if (dComIfGp_getAttention()->getHeap() != NULL) { - printfTag(TagAtt_Variable_e, TagType_System_e, 0, "注目処理用バッファ", dComIfGp_getAttention()->getHeap(), NULL, 0, NULL); + printfTag(TagAtt_Fixed_e, TagType_System_e, 0, "注目処理用バッファ", dComIfGp_getAttention()->getHeap(), NULL, 0, NULL); } - printfTag(TagAtt_Variable_e, TagType_2D_e, 0, "2D転送用", dComIfGp_getExpHeap2D(), JKRGetMemBlockSize(NULL, dComIfGp_getExpHeap2D()) + JKRGetMemBlockSize(NULL, dComIfGp_getMsgExpHeap()), 0, NULL); - printfTag(TagAtt_Variable_e, TagType_Message_e, 0, "メッセージデータ(常駐)", ((JKRAramArchive*)dComIfGp_getMsgDtArchive())->mBlock, NULL, 0, NULL); - printfTag(TagAtt_Fixed_e, TagType_Message_e, 0, "メッセージデータ(ステージ)", ((JKRAramArchive*)dComIfGp_getMsgDtArchive(1))->mBlock, NULL, 0, NULL); - printfTag(TagAtt_Variable_e, TagType_2D_e, 0, "メーター関係", ((JKRAramArchive*)dComIfGp_getMain2DArchive())->mBlock, NULL, 0, NULL); - printfTag(TagAtt_Variable_e, TagType_System_e, 0, "アイテム出現テーブル", dComIfGp_getItemTable(), NULL, 0, NULL); - printfTag(TagAtt_Variable_e, TagType_Message_e, HeapType_Zelda_e, "キャッシュフォントバッファ", NULL, JKRGetMemBlockSize(NULL, ((JKRAramArchive*)dComIfGp_getRubyArchive())->mBlock) + 0x1C328, 0, NULL); - printfTag(TagAtt_Variable_e, TagType_Audio_e, HeapType_ARAM_e, "オーディオ", NULL, 0xB00000, 0, NULL); - printfTag(TagAtt_Variable_e, TagType_Player_e, HeapType_ARAM_e, "リンクアニメーション", NULL, ((JKRAramArchive*)dComIfGp_getAnmArchive())->mBlock->getSize(), 0, NULL); - printfTag(TagAtt_Variable_e, TagType_2D_e, HeapType_ARAM_e, "フィールドマップレイアウト", NULL, ((JKRAramArchive*)dComIfGp_getFmapResArchive())->mBlock->getSize(), 0, NULL); - printfTag(TagAtt_Variable_e, TagType_2D_e, HeapType_ARAM_e, "フィールドマップデータ", NULL, ((JKRAramArchive*)dComIfGp_getFieldMapArchive2())->mBlock->getSize(), 0, NULL); - printfTag(TagAtt_Variable_e, TagType_2D_e, HeapType_ARAM_e, "ダンジョンマップレイアウト", NULL, ((JKRAramArchive*)dComIfGp_getDmapResArchive())->mBlock->getSize(), 0, NULL); - printfTag(TagAtt_Variable_e, TagType_2D_e, HeapType_ARAM_e, "コレクト&セーブ&オプション", NULL, ((JKRAramArchive*)dComIfGp_getCollectResArchive())->mBlock->getSize(), 0, NULL); - printfTag(TagAtt_Variable_e, TagType_2D_e, HeapType_ARAM_e, "リングアイテム選択", NULL, ((JKRAramArchive*)dComIfGp_getRingResArchive())->mBlock->getSize(), 0, NULL); - printfTag(TagAtt_Variable_e, TagType_2D_e, HeapType_ARAM_e, "アイテムアイコン", NULL, ((JKRAramArchive*)dComIfGp_getItemIconArchive())->mBlock->getSize(), 0, NULL); - printfTag(TagAtt_Variable_e, TagType_2D_e, HeapType_ARAM_e, "アイテム説明画面", NULL, ((JKRAramArchive*)dComIfGp_getDemoMsgArchive())->mBlock->getSize(), 0, NULL); - printfTag(TagAtt_Variable_e, TagType_2D_e, HeapType_ARAM_e, "強調ボタン表示", NULL, ((JKRAramArchive*)dComIfGp_getMeterButtonArchive())->mBlock->getSize(), 0, NULL); - printfTag(TagAtt_Variable_e, TagType_Message_e, HeapType_ARAM_e, "フキダシ共通2Dデータ", NULL, ((JKRAramArchive*)dComIfGp_getMsgCommonArchive())->mBlock->getSize(), 0, NULL); - printfTag(TagAtt_Variable_e, TagType_Message_e, HeapType_ARAM_e, "キャッシュフォント", NULL, mDoExt_getAraCacheSize(), 0, NULL); + printfTag(TagAtt_Fixed_e, TagType_2D_e, 0, "2D転送用", dComIfGp_getExpHeap2D(), JKRGetMemBlockSize(NULL, dComIfGp_getExpHeap2D()) + JKRGetMemBlockSize(NULL, dComIfGp_getMsgExpHeap()), 0, NULL); + printfTag(TagAtt_Fixed_e, TagType_Message_e, 0, "メッセージデータ(常駐)", ((JKRAramArchive*)dComIfGp_getMsgDtArchive())->mBlock, NULL, 0, NULL); + printfTag(TagAtt_Variable_e, TagType_Message_e, 0, "メッセージデータ(ステージ)", ((JKRAramArchive*)dComIfGp_getMsgDtArchive(1))->mBlock, NULL, 0, NULL); + printfTag(TagAtt_Fixed_e, TagType_2D_e, 0, "メーター関係", ((JKRAramArchive*)dComIfGp_getMain2DArchive())->mBlock, NULL, 0, NULL); + printfTag(TagAtt_Fixed_e, TagType_System_e, 0, "アイテム出現テーブル", dComIfGp_getItemTable(), NULL, 0, NULL); + printfTag(TagAtt_Fixed_e, TagType_Message_e, HeapType_Zelda_e, "キャッシュフォントバッファ", NULL, JKRGetMemBlockSize(NULL, ((JKRAramArchive*)dComIfGp_getRubyArchive())->mBlock) + 0x1C328, 0, NULL); + printfTag(TagAtt_Fixed_e, TagType_Audio_e, HeapType_ARAM_e, "オーディオ", NULL, 0xB00000, 0, NULL); + printfTag(TagAtt_Fixed_e, TagType_Player_e, HeapType_ARAM_e, "リンクアニメーション", NULL, ((JKRAramArchive*)dComIfGp_getAnmArchive())->mBlock->getSize(), 0, NULL); + printfTag(TagAtt_Fixed_e, TagType_2D_e, HeapType_ARAM_e, "フィールドマップレイアウト", NULL, ((JKRAramArchive*)dComIfGp_getFmapResArchive())->mBlock->getSize(), 0, NULL); + printfTag(TagAtt_Fixed_e, TagType_2D_e, HeapType_ARAM_e, "フィールドマップデータ", NULL, ((JKRAramArchive*)dComIfGp_getFieldMapArchive2())->mBlock->getSize(), 0, NULL); + printfTag(TagAtt_Fixed_e, TagType_2D_e, HeapType_ARAM_e, "ダンジョンマップレイアウト", NULL, ((JKRAramArchive*)dComIfGp_getDmapResArchive())->mBlock->getSize(), 0, NULL); + printfTag(TagAtt_Fixed_e, TagType_2D_e, HeapType_ARAM_e, "コレクト&セーブ&オプション", NULL, ((JKRAramArchive*)dComIfGp_getCollectResArchive())->mBlock->getSize(), 0, NULL); + printfTag(TagAtt_Fixed_e, TagType_2D_e, HeapType_ARAM_e, "リングアイテム選択", NULL, ((JKRAramArchive*)dComIfGp_getRingResArchive())->mBlock->getSize(), 0, NULL); + printfTag(TagAtt_Fixed_e, TagType_2D_e, HeapType_ARAM_e, "アイテムアイコン", NULL, ((JKRAramArchive*)dComIfGp_getItemIconArchive())->mBlock->getSize(), 0, NULL); + printfTag(TagAtt_Fixed_e, TagType_2D_e, HeapType_ARAM_e, "アイテム説明画面", NULL, ((JKRAramArchive*)dComIfGp_getDemoMsgArchive())->mBlock->getSize(), 0, NULL); + printfTag(TagAtt_Fixed_e, TagType_2D_e, HeapType_ARAM_e, "強調ボタン表示", NULL, ((JKRAramArchive*)dComIfGp_getMeterButtonArchive())->mBlock->getSize(), 0, NULL); + printfTag(TagAtt_Fixed_e, TagType_Message_e, HeapType_ARAM_e, "フキダシ共通2Dデータ", NULL, ((JKRAramArchive*)dComIfGp_getMsgCommonArchive())->mBlock->getSize(), 0, NULL); + printfTag(TagAtt_Fixed_e, TagType_Message_e, HeapType_ARAM_e, "キャッシュフォント", NULL, mDoExt_getAraCacheSize(), 0, NULL); for (int i = 0; i < 6; i++) { char label[64]; sprintf(label, "メッセージ(%d)枠ほか", i); - printfTag(TagAtt_Variable_e, TagType_Message_e, HeapType_ARAM_e, label, NULL, ((JKRAramArchive*)dComIfGp_getMsgArchive(i))->mBlock->getSize(), 0, NULL); + printfTag(TagAtt_Fixed_e, TagType_Message_e, HeapType_ARAM_e, label, NULL, ((JKRAramArchive*)dComIfGp_getMsgArchive(i))->mBlock->getSize(), 0, NULL); } g_dComIfG_gameInfo.mResControl.dumpTag(); @@ -494,8 +494,8 @@ void fapGm_dataMem::dumpTag() { } if (var_r28 != NULL) { - printfTag(TagAtt_Fixed_e, TagType_Stage_e, 0, "ステージメモリーブロック", dStage_roomControl_c::getMemoryBlockHeap(0), var_r28, 0, NULL); - printfTag(TagAtt_Fixed_e, TagType_Heap_e, HeapType_Stage_e, NULL, NULL, var_r28, 0, NULL); + printfTag(TagAtt_Variable_e, TagType_Stage_e, 0, "ステージメモリーブロック", dStage_roomControl_c::getMemoryBlockHeap(0), var_r28, 0, NULL); + printfTag(TagAtt_Variable_e, TagType_Heap_e, HeapType_Stage_e, NULL, NULL, var_r28, 0, NULL); } DynamicModuleControlBase::dumpTag(); @@ -696,6 +696,7 @@ void fapGm_HIO_c::startCpuTimer() { } if (m_CpuTimerOff) { + int stackDummy; JUT_ASSERT(1302, !m_CpuTimerStart) m_CpuTimerStart = TRUE; m_CpuTimerTick = OSGetTick(); @@ -754,5 +755,3 @@ void fapGm_Create() { #endif g_HIO.field_0x04 = mDoHIO_CREATE_CHILD("ゲームシステム", &g_HIO); } - -fapGm_HIO_c::~fapGm_HIO_c() {} diff --git a/src/f_pc/f_pc_base.cpp b/src/f_pc/f_pc_base.cpp index d59864a4ea..36af52f905 100644 --- a/src/f_pc/f_pc_base.cpp +++ b/src/f_pc/f_pc_base.cpp @@ -95,8 +95,8 @@ int fpcBs_Delete(base_process_class* i_proc) { JSUList* allList = Z2GetAudioMgr()->getAllList(); for (JSUListIterator it(allList->getFirst()); it != allList->getEnd(); it++) { - static JSULink* DUMMY_FILL_IT = NULL; - static Z2SoundObjBase* DUMMY_FILL_P = NULL; + static JSULink* DUMMY_FILL_IT = (JSULink*)0xdddddddd; + static Z2SoundObjBase* DUMMY_FILL_P = (Z2SoundObjBase*)0xdddddddd; if (it == DUMMY_FILL_IT || it.getObject() == DUMMY_FILL_P) { const char* stageName = dStage_getName2(profname, 0); if (stageName == NULL) { @@ -154,7 +154,7 @@ int fpcBs_SubCreate(base_process_class* i_proc) { i_proc->state.create_phase = cPhs_NEXT_e; return cPhs_NEXT_e; case cPhs_INIT_e: -case cPhs_LOADING_e: + case cPhs_LOADING_e: i_proc->state.init_state = 1; i_proc->state.create_phase = cPhs_INIT_e; return cPhs_INIT_e; diff --git a/src/f_pc/f_pc_create_req.cpp b/src/f_pc/f_pc_create_req.cpp index 36fbcf9604..5e54f21ea4 100644 --- a/src/f_pc/f_pc_create_req.cpp +++ b/src/f_pc/f_pc_create_req.cpp @@ -13,8 +13,8 @@ #include "f_pc/f_pc_debug_sv.h" BOOL fpcCtRq_isCreatingByID(create_tag* i_createTag, fpc_ProcID* i_id) { - create_request* req = (create_request*)i_createTag->base.mpTagData; - if (req->id == *i_id) { + fpc_ProcID id = ((create_request*)i_createTag->base.mpTagData)->id; + if (id == *i_id) { return TRUE; } else { return FALSE; diff --git a/src/f_pc/f_pc_create_tag.cpp b/src/f_pc/f_pc_create_tag.cpp index f25096cc17..89578cd54b 100644 --- a/src/f_pc/f_pc_create_tag.cpp +++ b/src/f_pc/f_pc_create_tag.cpp @@ -15,7 +15,7 @@ void fpcCtTg_CreateQTo(create_tag* i_createTag) { cTg_SingleCut(&i_createTag->base); } -s32 fpcCtTg_Init(create_tag* i_createTag, void* i_data) { +int fpcCtTg_Init(create_tag* i_createTag, void* i_data) { cTg_Create(&i_createTag->base, i_data); return 1; } diff --git a/src/f_pc/f_pc_delete_tag.cpp b/src/f_pc/f_pc_delete_tag.cpp index 2dc2b5a4c3..e627f5ec8c 100644 --- a/src/f_pc/f_pc_delete_tag.cpp +++ b/src/f_pc/f_pc_delete_tag.cpp @@ -26,7 +26,7 @@ void fpcDtTg_DeleteQTo(delete_tag_class* i_deleteTag) { cTg_SingleCut(&i_deleteTag->base); } -s32 fpcDtTg_Do(delete_tag_class* i_deleteTag, delete_tag_func i_func) { +int fpcDtTg_Do(delete_tag_class* i_deleteTag, delete_tag_func i_func) { if (i_deleteTag->timer <= 0) { fpcDtTg_DeleteQTo(i_deleteTag); @@ -50,7 +50,7 @@ s32 fpcDtTg_Do(delete_tag_class* i_deleteTag, delete_tag_func i_func) { } } -s32 fpcDtTg_Init(delete_tag_class* i_deleteTag, void* i_data) { +int fpcDtTg_Init(delete_tag_class* i_deleteTag, void* i_data) { cTg_Create(&i_deleteTag->base, i_data); return 1; } diff --git a/src/f_pc/f_pc_deletor.cpp b/src/f_pc/f_pc_deletor.cpp index 6eec2c76e2..be6d169bed 100644 --- a/src/f_pc/f_pc_deletor.cpp +++ b/src/f_pc/f_pc_deletor.cpp @@ -16,7 +16,7 @@ BOOL fpcDt_IsComplete() { return fpcDtTg_IsEmpty(); } -s32 fpcDt_deleteMethod(base_process_class* i_proc) { +int fpcDt_deleteMethod(base_process_class* i_proc) { fpc_ProcID id = i_proc->id; layer_class* layer = i_proc->delete_tag.layer; s16 profname = i_proc->profname; @@ -42,7 +42,7 @@ void fpcDt_Handler() { cLsIt_Method(&g_fpcDtTg_Queue, (cNdIt_MethodFunc)fpcDtTg_Do, (void*)fpcDt_deleteMethod); } -s32 fpcDt_ToQueue(base_process_class* i_proc) { +int fpcDt_ToQueue(base_process_class* i_proc) { if (i_proc->unk_0xA != 1 && fpcBs_IsDelete(i_proc) == 1) { if (fpcPi_IsInQueue(&i_proc->priority) == 1) { fpcPi_Delete(&i_proc->priority); @@ -51,13 +51,16 @@ s32 fpcDt_ToQueue(base_process_class* i_proc) { i_proc->delete_tag.layer = i_proc->layer_tag.layer; fpcDtTg_ToDeleteQ(&i_proc->delete_tag); fpcLy_DeletingMesg(i_proc->layer_tag.layer); +#if DEBUG + i_proc->delete_tag.unk_0x1c = 60; +#endif return 1; } return 0; } -s32 fpcDt_ToDeleteQ(base_process_class* i_proc) { +int fpcDt_ToDeleteQ(base_process_class* i_proc) { if (i_proc->unk_0xA == 1) { return 0; } @@ -97,39 +100,37 @@ s32 fpcDt_ToDeleteQ(base_process_class* i_proc) { i_proc->state.init_state = 3; return 1; } - + return 0; } -s32 fpcDt_Delete(void* i_proc) { - base_process_class* proc = (base_process_class*)i_proc; - - if (proc != NULL) { +int fpcDt_Delete(void* i_proc) { + if (i_proc != NULL) { #if DEBUG - if (!fpcBs_Is_JustOfType(g_fpcBs_type, proc->type)) { + if (!fpcBs_Is_JustOfType(g_fpcBs_type, ((base_process_class*)i_proc)->type)) { if (g_fpcDbSv_service[12] != NULL) { - g_fpcDbSv_service[12](proc); + g_fpcDbSv_service[12](i_proc); } - + return 0; } #endif - if (fpcCt_IsDoing(proc) == TRUE) + if (fpcCt_IsDoing((base_process_class*)i_proc) == TRUE) return 0; - if (proc->state.init_state == 3) + if (((base_process_class*)i_proc)->state.init_state == 3) return 0; - int ret = fpcDt_ToDeleteQ(proc); + int ret = fpcDt_ToDeleteQ((base_process_class*)i_proc); #if DEBUG if (ret == 0) { if (g_fpcDbSv_service[5] != NULL) { - g_fpcDbSv_service[5](proc); + g_fpcDbSv_service[5](i_proc); } } #endif return ret; } - + return 1; } diff --git a/src/f_pc/f_pc_draw.cpp b/src/f_pc/f_pc_draw.cpp index 6ea0b429f8..5a5b220f82 100644 --- a/src/f_pc/f_pc_draw.cpp +++ b/src/f_pc/f_pc_draw.cpp @@ -9,10 +9,10 @@ #include "f_pc/f_pc_node.h" #include "f_pc/f_pc_pause.h" -s32 fpcDw_Execute(base_process_class* i_proc) { +int fpcDw_Execute(base_process_class* i_proc) { if (!fpcPause_IsEnable(i_proc, 2)) { layer_class* save_layer; - s32 ret; + int ret; process_method_func draw_func; save_layer = fpcLy_CurrentLayer(); @@ -31,8 +31,8 @@ s32 fpcDw_Execute(base_process_class* i_proc) { return 0; } -s32 fpcDw_Handler(fpcDw_HandlerFuncFunc i_iterHandler, fpcDw_HandlerFunc i_func) { - s32 ret; +int fpcDw_Handler(fpcDw_HandlerFuncFunc i_iterHandler, fpcDw_HandlerFunc i_func) { + int ret; cAPIGph_BeforeOfDraw(); ret = i_iterHandler(i_func); cAPIGph_AfterOfDraw(); diff --git a/src/f_pc/f_pc_executor.cpp b/src/f_pc/f_pc_executor.cpp index de6b0c6b66..b2a343aab2 100644 --- a/src/f_pc/f_pc_executor.cpp +++ b/src/f_pc/f_pc_executor.cpp @@ -4,20 +4,21 @@ */ #include "f_pc/f_pc_executor.h" +#include "f_pc/f_pc_debug_sv.h" +#include "f_pc/f_pc_manager.h" #include "f_pc/f_pc_node.h" #include "f_pc/f_pc_pause.h" #include "f_pc/f_pc_searcher.h" -#include "f_pc/f_pc_debug_sv.h" base_process_class* fpcEx_Search(fpcLyIt_JudgeFunc i_judgeFunc, void* i_data) { return (base_process_class*)fpcLyIt_AllJudge(i_judgeFunc, i_data); } base_process_class* fpcEx_SearchByID(fpc_ProcID i_id) { - if (i_id + 2 <= 1) - return NULL; - - return fpcEx_Search(fpcSch_JudgeByID, &i_id); + if (!(i_id == fpcM_UNK_PROCESS_ID_e || i_id == fpcM_ERROR_PROCESS_ID_e)) { + return fpcEx_Search(fpcSch_JudgeByID, &i_id); + } + return NULL; } BOOL fpcEx_IsExist(fpc_ProcID i_id) { @@ -28,14 +29,14 @@ BOOL fpcEx_IsExist(fpc_ProcID i_id) { } } -s32 fpcEx_Execute(base_process_class* i_proc) { +int fpcEx_Execute(base_process_class* i_proc) { if (i_proc->state.init_state != 2 || fpcPause_IsEnable(i_proc, 1) == TRUE) return 0; return fpcBs_Execute(i_proc); } -s32 fpcEx_ToLineQ(base_process_class* i_proc) { +int fpcEx_ToLineQ(base_process_class* i_proc) { base_process_class* process = &i_proc->layer_tag.layer->process_node->base; if (i_proc->layer_tag.layer->layer_id == fpcLy_ROOT_e || cTg_IsUse(&process->line_tag_.base) == TRUE) { @@ -62,7 +63,7 @@ s32 fpcEx_ToLineQ(base_process_class* i_proc) { return 0; } -s32 fpcEx_ExecuteQTo(base_process_class* i_proc) { +int fpcEx_ExecuteQTo(base_process_class* i_proc) { if (fpcLyTg_QueueTo(&i_proc->layer_tag) == 1) { i_proc->state.init_state = 3; return 1; @@ -71,7 +72,7 @@ s32 fpcEx_ExecuteQTo(base_process_class* i_proc) { return 0; } -s32 fpcEx_ToExecuteQ(base_process_class* i_proc) { +int fpcEx_ToExecuteQ(base_process_class* i_proc) { process_priority_class* priority = &i_proc->priority; if (fpcLyTg_ToQueue(&i_proc->layer_tag, priority->current_info.layer_id, priority->current_info.list_id, priority->current_info.list_priority) == 1) { fpcEx_ToLineQ(i_proc); diff --git a/src/f_pc/f_pc_fstcreate_req.cpp b/src/f_pc/f_pc_fstcreate_req.cpp index 5757d9900f..08ff536ec7 100644 --- a/src/f_pc/f_pc_fstcreate_req.cpp +++ b/src/f_pc/f_pc_fstcreate_req.cpp @@ -8,7 +8,7 @@ #include "f_pc/f_pc_layer.h" #include "f_pc/f_pc_load.h" -s32 fpcFCtRq_Do(fast_create_request* i_createReq) { +int fpcFCtRq_Do(fast_create_request* i_createReq) { if (i_createReq->create_func != NULL && i_createReq->create_func(i_createReq->base.process, i_createReq->data) == 0) { @@ -18,7 +18,7 @@ s32 fpcFCtRq_Do(fast_create_request* i_createReq) { } } -s32 fpcFCtRq_Delete(fast_create_request* i_createReq) { +int fpcFCtRq_Delete(fast_create_request* i_createReq) { return 1; } diff --git a/src/f_pc/f_pc_layer.cpp b/src/f_pc/f_pc_layer.cpp index 2c290c285d..2f5da47251 100644 --- a/src/f_pc/f_pc_layer.cpp +++ b/src/f_pc/f_pc_layer.cpp @@ -11,7 +11,7 @@ void fpcLy_CancelQTo(process_method_tag_class* i_methods) { fpcMtdTg_MethodQTo(i_methods); } -s32 fpcLy_ToCancelQ(layer_class* i_layer, process_method_tag_class* i_methods) { +int fpcLy_ToCancelQ(layer_class* i_layer, process_method_tag_class* i_methods) { return fpcMtdTg_ToMethodQ(&i_layer->cancel_list, i_methods); } @@ -23,17 +23,17 @@ BOOL fpcLy_CancelMethod(process_method_tag_class* i_layer) { } } -s32 fpcLy_IntoQueue(layer_class* i_layer, int i_treeListNo, create_tag_class* i_createTag, int i_no) { +int fpcLy_IntoQueue(layer_class* i_layer, int i_treeListNo, create_tag_class* i_createTag, int i_no) { int ret = cTg_InsertToTree(&i_layer->node_tree, i_treeListNo, i_createTag, i_no); return ret; } -s32 fpcLy_ToQueue(layer_class* i_layer, int i_treeListNo, create_tag_class* i_createTag) { +int fpcLy_ToQueue(layer_class* i_layer, int i_treeListNo, create_tag_class* i_createTag) { int ret = cTg_AdditionToTree(&i_layer->node_tree, i_treeListNo, i_createTag); return ret; } -s32 fpcLy_QueueTo(layer_class* i_layer, create_tag_class* i_createTag) { +int fpcLy_QueueTo(layer_class* i_layer, create_tag_class* i_createTag) { UNUSED(i_layer); int ret = cTg_SingleCutFromTree(i_createTag); @@ -132,7 +132,7 @@ void fpcLy_Regist(layer_class* i_layer) { cLs_Addition(&l_fpcLy_LayerList, (node_class*)i_layer); } -s32 fpcLy_Delete(layer_class* i_layer) { +int fpcLy_Delete(layer_class* i_layer) { if (i_layer->node_tree.mpLists->mSize == 0 && i_layer->cancel_list.mSize == 0) { cLs_SingleCut((node_class*)i_layer); *i_layer = l_fpcLy_Crear; diff --git a/src/f_pc/f_pc_layer_iter.cpp b/src/f_pc/f_pc_layer_iter.cpp index 3ea631f1eb..66277e5d94 100644 --- a/src/f_pc/f_pc_layer_iter.cpp +++ b/src/f_pc/f_pc_layer_iter.cpp @@ -8,15 +8,15 @@ #include "SSystem/SComponent/c_tree_iter.h" #include "f_pc/f_pc_layer.h" -s32 fpcLyIt_OnlyHere(layer_class* i_layer, fpcLyIt_OnlyHereFunc i_func, void* i_data) { +int fpcLyIt_OnlyHere(layer_class* i_layer, fpcLyIt_OnlyHereFunc i_func, void* i_data) { layer_iter iter; iter.func = (void*)i_func; iter.data = i_data; return cTrIt_Method(&i_layer->node_tree, (cNdIt_MethodFunc)cTgIt_MethodCall, &iter); } -s32 fpcLyIt_OnlyHereLY(layer_class* i_layer, fpcLyIt_OnlyHereFunc i_func, void* i_data) { - s32 result; +int fpcLyIt_OnlyHereLY(layer_class* i_layer, fpcLyIt_OnlyHereFunc i_func, void* i_data) { + int result; layer_class* save_layer = fpcLy_CurrentLayer(); fpcLy_SetCurrentLayer(i_layer); @@ -26,7 +26,7 @@ s32 fpcLyIt_OnlyHereLY(layer_class* i_layer, fpcLyIt_OnlyHereFunc i_func, void* return result; } -s32 fpcLyIt_All(fpcLyIt_OnlyHereFunc i_func, void* i_data) { +int fpcLyIt_All(fpcLyIt_OnlyHereFunc i_func, void* i_data) { int ret = 1; layer_iter iter; diff --git a/src/f_pc/f_pc_layer_tag.cpp b/src/f_pc/f_pc_layer_tag.cpp index 76fd5249eb..6d948c1ee4 100644 --- a/src/f_pc/f_pc_layer_tag.cpp +++ b/src/f_pc/f_pc_layer_tag.cpp @@ -6,7 +6,7 @@ #include "f_pc/f_pc_layer_tag.h" #include "f_pc/f_pc_layer.h" -s32 fpcLyTg_ToQueue(layer_management_tag_class* i_layer_tag, fpc_ProcID i_layerID, u16 i_listID, +int fpcLyTg_ToQueue(layer_management_tag_class* i_layer_tag, fpc_ProcID i_layerID, u16 i_listID, u16 i_listPriority) { if (i_layer_tag->layer == NULL && i_layerID == fpcLy_NONE_e) { return 0; @@ -17,7 +17,7 @@ s32 fpcLyTg_ToQueue(layer_management_tag_class* i_layer_tag, fpc_ProcID i_layerI } if (i_layerID == fpcLy_NONE_e || i_layerID == fpcLy_CURRENT_e) { - s32 result = fpcLy_ToQueue(i_layer_tag->layer, i_listID, &i_layer_tag->create_tag); + int result = fpcLy_ToQueue(i_layer_tag->layer, i_listID, &i_layer_tag->create_tag); if (result != 0) { i_layer_tag->node_list_id = i_listID; i_layer_tag->node_list_priority = result - 1; @@ -34,7 +34,7 @@ s32 fpcLyTg_ToQueue(layer_management_tag_class* i_layer_tag, fpc_ProcID i_layerI return 0; } -s32 fpcLyTg_QueueTo(layer_management_tag_class* i_layer_tag) { +int fpcLyTg_QueueTo(layer_management_tag_class* i_layer_tag) { if (fpcLy_QueueTo(i_layer_tag->layer, &i_layer_tag->create_tag) == 1) { i_layer_tag->layer = NULL; i_layer_tag->node_list_id = 0xFFFF; @@ -45,7 +45,7 @@ s32 fpcLyTg_QueueTo(layer_management_tag_class* i_layer_tag) { return 0; } -s32 fpcLyTg_Move(layer_management_tag_class* i_layer_tag, fpc_ProcID i_layerID, u16 i_listID, +int fpcLyTg_Move(layer_management_tag_class* i_layer_tag, fpc_ProcID i_layerID, u16 i_listID, u16 i_listPriority) { layer_class* layer = fpcLy_Layer(i_layerID); if (layer == NULL) { @@ -58,7 +58,7 @@ s32 fpcLyTg_Move(layer_management_tag_class* i_layer_tag, fpc_ProcID i_layerID, } } -s32 fpcLyTg_Init(layer_management_tag_class* i_layer_tag, fpc_ProcID i_id, void* i_data) { +int fpcLyTg_Init(layer_management_tag_class* i_layer_tag, fpc_ProcID i_id, void* i_data) { static layer_management_tag_class crear = { NULL, NULL, NULL, NULL, 0, NULL, 0xFFFF, 0xFFFF, }; diff --git a/src/f_pc/f_pc_leaf.cpp b/src/f_pc/f_pc_leaf.cpp index 4a1664e43d..c3ab1e6c73 100644 --- a/src/f_pc/f_pc_leaf.cpp +++ b/src/f_pc/f_pc_leaf.cpp @@ -10,18 +10,19 @@ s16 fpcLf_GetPriority(const leafdraw_class* i_leaf) { return fpcDwPi_Get(&i_leaf->draw_priority); } -s32 fpcLf_DrawMethod(leafdraw_method_class* i_methods, void* i_process) { +int fpcLf_DrawMethod(leafdraw_method_class* i_methods, void* i_process) { return fpcMtd_Method(i_methods->draw_method, i_process); } -s32 fpcLf_Draw(leafdraw_class* i_leaf) { - s32 ret = 0; - if (i_leaf->unk_0xBC == 0) +int fpcLf_Draw(leafdraw_class* i_leaf) { + int ret = 0; + if (i_leaf->unk_0xBC == 0) { ret = fpcLf_DrawMethod(i_leaf->leaf_methods, i_leaf); + } return ret; } -s32 fpcLf_Execute(leafdraw_class* i_leaf) { +int fpcLf_Execute(leafdraw_class* i_leaf) { #if DEBUG if (fpcBs_Is_JustOfType(g_fpcLf_type, i_leaf->base.subtype) == 0) { if (g_fpcDbSv_service[12] != NULL) { @@ -33,12 +34,13 @@ s32 fpcLf_Execute(leafdraw_class* i_leaf) { return fpcMtd_Execute(&i_leaf->leaf_methods->base, i_leaf); } -s32 fpcLf_IsDelete(leafdraw_class* i_leaf) { +int fpcLf_IsDelete(leafdraw_class* i_leaf) { return fpcMtd_IsDelete(&i_leaf->leaf_methods->base, i_leaf); } -s32 fpcLf_Delete(leafdraw_class* i_leaf) { - s32 ret = fpcMtd_Delete(&i_leaf->leaf_methods->base, i_leaf); +int fpcLf_Delete(leafdraw_class* i_leaf) { + int ret = fpcMtd_Delete(&i_leaf->leaf_methods->base, i_leaf); + UNUSED(ret); // possible fakematch? this line fixes debug regalloc if (ret == 1) { i_leaf->base.subtype = 0; } @@ -47,7 +49,7 @@ s32 fpcLf_Delete(leafdraw_class* i_leaf) { int g_fpcLf_type; -s32 fpcLf_Create(leafdraw_class* i_leaf) { +int fpcLf_Create(leafdraw_class* i_leaf) { if (i_leaf->base.state.init_state == 0) { leaf_process_profile_definition* pprofile = (leaf_process_profile_definition*)i_leaf->base.profile; i_leaf->leaf_methods = pprofile->sub_method; diff --git a/src/f_pc/f_pc_line.cpp b/src/f_pc/f_pc_line.cpp index f61da64924..6473dfbee3 100644 --- a/src/f_pc/f_pc_line.cpp +++ b/src/f_pc/f_pc_line.cpp @@ -10,7 +10,7 @@ static node_list_class l_fpcLn_Line[16]; void fpcLn_Create() { - s32 i = ARRAY_SIZEU(l_fpcLn_Line); + int i = ARRAY_SIZEU(l_fpcLn_Line); node_list_class* line_node = l_fpcLn_Line; while (i-- > 0) cLs_Create(line_node++); diff --git a/src/f_pc/f_pc_line_iter.cpp b/src/f_pc/f_pc_line_iter.cpp index d81c1a9617..2ad206553f 100644 --- a/src/f_pc/f_pc_line_iter.cpp +++ b/src/f_pc/f_pc_line_iter.cpp @@ -11,10 +11,10 @@ #include "f_pc/f_pc_line.h" -static s32 fpcLnIt_MethodCall(create_tag_class* i_createTag, method_filter* i_filter) { +static int fpcLnIt_MethodCall(create_tag_class* i_createTag, method_filter* i_filter) { layer_class* layer = static_cast(i_createTag->mpTagData)->layer_tag.layer; layer_class* save_layer = fpcLy_CurrentLayer(); - s32 ret; + int ret; fpcLy_SetCurrentLayer(layer); ret = cTgIt_MethodCall(i_createTag, i_filter); diff --git a/src/f_pc/f_pc_line_tag.cpp b/src/f_pc/f_pc_line_tag.cpp index b17c4493bf..41a77c2e1f 100644 --- a/src/f_pc/f_pc_line_tag.cpp +++ b/src/f_pc/f_pc_line_tag.cpp @@ -7,7 +7,7 @@ #include "f_pc/f_pc_line.h" -s32 fpcLnTg_Move(line_tag* i_lineTag, int i_newListID) { +int fpcLnTg_Move(line_tag* i_lineTag, int i_newListID) { if (i_lineTag->list_id != i_newListID) { fpcLnTg_QueueTo(i_lineTag); return fpcLnTg_ToQueue(i_lineTag, i_newListID); @@ -21,7 +21,7 @@ void fpcLnTg_QueueTo(line_tag* i_lineTag) { i_lineTag->list_id = -1; } -s32 fpcLnTg_ToQueue(line_tag* i_lineTag, int lineListID) { +int fpcLnTg_ToQueue(line_tag* i_lineTag, int lineListID) { if (cTg_AdditionToTree(&g_fpcLn_Queue, lineListID, &i_lineTag->base)) { i_lineTag->list_id = lineListID; return 1; diff --git a/src/f_pc/f_pc_load.cpp b/src/f_pc/f_pc_load.cpp index e7f9b10cd7..3398e2b1f6 100644 --- a/src/f_pc/f_pc_load.cpp +++ b/src/f_pc/f_pc_load.cpp @@ -21,7 +21,7 @@ void fpcLd_Free(s16 i_procName) { cDyl_Unlink((s16)i_procName); } -s32 fpcLd_Load(s16 i_procName) { +int fpcLd_Load(s16 i_procName) { switch (cDyl_LinkASync((s16)i_procName)) { case cPhs_COMPLEATE_e: return cPhs_COMPLEATE_e; diff --git a/src/f_pc/f_pc_manager.cpp b/src/f_pc/f_pc_manager.cpp index a6acd65848..612c4d9a6e 100644 --- a/src/f_pc/f_pc_manager.cpp +++ b/src/f_pc/f_pc_manager.cpp @@ -5,9 +5,13 @@ #include "f_pc/f_pc_manager.h" #include "SSystem/SComponent/c_API_graphic.h" +#include "SSystem/SComponent/c_lib.h" +#include "Z2AudioLib/Z2SoundMgr.h" +#include "d/d_com_inf_game.h" #include "d/d_error_msg.h" #include "d/d_lib.h" -#include "f_op/f_op_scene.h" +#include "d/d_particle.h" +#include "f_ap/f_ap_game.h" #include "f_pc/f_pc_creator.h" #include "f_pc/f_pc_deletor.h" #include "f_pc/f_pc_draw.h" @@ -15,22 +19,21 @@ #include "f_pc/f_pc_line.h" #include "f_pc/f_pc_pause.h" #include "f_pc/f_pc_priority.h" -#include "f_pc/f_pc_profile.h" #include "m_Do/m_Do_controller_pad.h" void fpcM_Draw(void* i_proc) { fpcDw_Execute((base_process_class*)i_proc); } -s32 fpcM_DrawIterater(fpcM_DrawIteraterFunc i_drawIterFunc) { +int fpcM_DrawIterater(fpcM_DrawIteraterFunc i_drawIterFunc) { return fpcLyIt_OnlyHere(fpcLy_RootLayer(), (fpcLyIt_OnlyHereFunc)i_drawIterFunc, NULL); } -s32 fpcM_Execute(void* i_proc) { +int fpcM_Execute(void* i_proc) { return fpcEx_Execute((base_process_class*)i_proc); } -s32 fpcM_Delete(void* i_proc) { +int fpcM_Delete(void* i_proc) { return fpcDt_Delete((base_process_class*)i_proc); } @@ -40,7 +43,10 @@ BOOL fpcM_IsCreating(fpc_ProcID i_id) { void fpcM_Management(fpcM_ManagementFunc i_preExecuteFn, fpcM_ManagementFunc i_postExecuteFn) { MtxInit(); - dComIfGd_peekZdata(); + if (!fapGm_HIO_c::isCaptureScreen()) { + dComIfGd_peekZdata(); + } + fapGm_HIO_c::executeCaptureScreen(); if (!dShutdownErrorMsg_c::execute()) { static bool l_dvdError = false; @@ -72,8 +78,12 @@ void fpcM_Management(fpcM_ManagementFunc i_preExecuteFn, fpcM_ManagementFunc i_p i_preExecuteFn(); } - fpcEx_Handler((fpcLnIt_QueueFunc)fpcM_Execute); - fpcDw_Handler((fpcDw_HandlerFuncFunc)fpcM_DrawIterater, (fpcDw_HandlerFunc)fpcM_Draw); + if (!fapGm_HIO_c::isCaptureScreen()) { + fpcEx_Handler((fpcLnIt_QueueFunc)fpcM_Execute); + } + if (!fapGm_HIO_c::isCaptureScreen() || fapGm_HIO_c::getCaptureScreenDivH() != 1) { + fpcDw_Handler((fpcDw_HandlerFuncFunc)fpcM_DrawIterater, (fpcDw_HandlerFunc)fpcM_Draw); + } if (i_postExecuteFn != NULL) { i_postExecuteFn(); @@ -83,7 +93,16 @@ void fpcM_Management(fpcM_ManagementFunc i_preExecuteFn, fpcM_ManagementFunc i_p } else if (!l_dvdError) { dLib_time_c::stopTime(); Z2GetSoundMgr()->pauseAllGameSound(true); - mDoCPd_c::stopMotorWaveHard(0); +#if PLATFORM_GCN +#define FPCM_MANAGEMENT_GAMEPAD_COUNT 1 +#elif PLATFORM_SHIELD && !DEBUG +#define FPCM_MANAGEMENT_GAMEPAD_COUNT 0 +#else +#define FPCM_MANAGEMENT_GAMEPAD_COUNT 4 +#endif + for (u32 i = 0; i < FPCM_MANAGEMENT_GAMEPAD_COUNT; i++) { + mDoCPd_c::stopMotorWaveHard(i); + } l_dvdError = true; } } @@ -103,7 +122,7 @@ base_process_class* fpcM_FastCreate(s16 i_procname, FastCreateReqFunc i_createRe i_createData, i_append); } -s32 fpcM_IsPause(void* i_proc, u8 i_flag) { +int fpcM_IsPause(void* i_proc, u8 i_flag) { return fpcPause_IsEnable((base_process_class*)i_proc, i_flag & 0xFF); } @@ -127,3 +146,4 @@ void* fpcM_JudgeInLayer(fpc_ProcID i_layerID, fpcCtIt_JudgeFunc i_judgeFunc, voi return NULL; } + diff --git a/src/f_pc/f_pc_method.cpp b/src/f_pc/f_pc_method.cpp index e2fc39e220..36c347f297 100644 --- a/src/f_pc/f_pc_method.cpp +++ b/src/f_pc/f_pc_method.cpp @@ -5,25 +5,25 @@ #include "f_pc/f_pc_method.h" -s32 fpcMtd_Method(process_method_func i_method, void* i_process) { +int fpcMtd_Method(process_method_func i_method, void* i_process) { if (i_method != NULL) return i_method(i_process); else return 1; } -s32 fpcMtd_Execute(process_method_class* i_methods, void* i_process) { +int fpcMtd_Execute(process_method_class* i_methods, void* i_process) { return fpcMtd_Method(i_methods->execute_method, i_process); } -s32 fpcMtd_IsDelete(process_method_class* i_methods, void* i_process) { +int fpcMtd_IsDelete(process_method_class* i_methods, void* i_process) { return fpcMtd_Method(i_methods->is_delete_method, i_process); } -s32 fpcMtd_Delete(process_method_class* i_methods, void* i_process) { +int fpcMtd_Delete(process_method_class* i_methods, void* i_process) { return fpcMtd_Method(i_methods->delete_method, i_process); } -s32 fpcMtd_Create(process_method_class* i_methods, void* i_process) { +int fpcMtd_Create(process_method_class* i_methods, void* i_process) { return fpcMtd_Method(i_methods->create_method, i_process); } diff --git a/src/f_pc/f_pc_method_tag.cpp b/src/f_pc/f_pc_method_tag.cpp index c92bc1cb55..3ce2bf82ad 100644 --- a/src/f_pc/f_pc_method_tag.cpp +++ b/src/f_pc/f_pc_method_tag.cpp @@ -5,11 +5,11 @@ #include "f_pc/f_pc_method_tag.h" -s32 fpcMtdTg_Do(process_method_tag_class* i_methodTag) { +int fpcMtdTg_Do(process_method_tag_class* i_methodTag) { return i_methodTag->method(i_methodTag->data); } -s32 fpcMtdTg_ToMethodQ(node_list_class* i_nodelist, process_method_tag_class* i_methodTag) { +int fpcMtdTg_ToMethodQ(node_list_class* i_nodelist, process_method_tag_class* i_methodTag) { return cTg_Addition(i_nodelist, &i_methodTag->create_tag); } @@ -17,7 +17,7 @@ void fpcMtdTg_MethodQTo(process_method_tag_class* i_methodTag) { cTg_SingleCut(&i_methodTag->create_tag); } -s32 fpcMtdTg_Init(process_method_tag_class* i_methodTag, process_method_tag_func i_method, void* i_data) { +int fpcMtdTg_Init(process_method_tag_class* i_methodTag, process_method_tag_func i_method, void* i_data) { cTg_Create(&i_methodTag->create_tag, i_methodTag); i_methodTag->method = i_method; i_methodTag->data = i_data; diff --git a/src/f_pc/f_pc_node.cpp b/src/f_pc/f_pc_node.cpp index d3c387d484..205d392ff1 100644 --- a/src/f_pc/f_pc_node.cpp +++ b/src/f_pc/f_pc_node.cpp @@ -7,12 +7,12 @@ #include "f_pc/f_pc_layer_iter.h" #include "f_pc/f_pc_debug_sv.h" -s32 fpcNd_DrawMethod(nodedraw_method_class* i_method_class, void* i_data) { +int fpcNd_DrawMethod(nodedraw_method_class* i_method_class, void* i_data) { return fpcMtd_Method(i_method_class->draw_method, i_data); } -s32 fpcNd_Draw(process_node_class* i_procNode) { - s32 ret = 0; +int fpcNd_Draw(process_node_class* i_procNode) { + int ret = 0; process_node_class* var_r28 = i_procNode; if (i_procNode->unk_0x1A8 == 0) { @@ -25,8 +25,8 @@ s32 fpcNd_Draw(process_node_class* i_procNode) { return ret; } -s32 fpcNd_Execute(process_node_class* i_procNode) { - s32 ret = 0; +int fpcNd_Execute(process_node_class* i_procNode) { + int ret = 0; layer_class* save_layer = fpcLy_CurrentLayer(); #if DEBUG @@ -47,25 +47,24 @@ s32 fpcNd_Execute(process_node_class* i_procNode) { int g_fpcNd_type; void* fpcNd_IsCreatingFromUnder(void* i_procNode) { - layer_class* layer; - process_node_class* procnode = (process_node_class*)i_procNode; - if (procnode != NULL && fpcBs_Is_JustOfType(g_fpcNd_type, procnode->base.subtype) != FALSE) + if (i_procNode != NULL && fpcBs_Is_JustOfType(g_fpcNd_type, ((process_node_class*)i_procNode)->base.subtype) != FALSE) { - layer = &procnode->layer; + layer_class* layer; + layer = &((process_node_class*)i_procNode)->layer; if (fpcLy_IsCreatingMesg(layer) == FALSE) { return (process_node_class*)fpcLyIt_Judge( layer, (fpcLyIt_JudgeFunc)fpcNd_IsCreatingFromUnder, NULL); } else { - return procnode; + return i_procNode; } } - + return NULL; } BOOL g_fpcNd_IsCheckOfDeleteTiming = TRUE; -s32 fpcNd_IsDeleteTiming(process_node_class* i_procNode) { +int fpcNd_IsDeleteTiming(process_node_class* i_procNode) { if (g_fpcNd_IsCheckOfDeleteTiming == TRUE && fpcNd_IsCreatingFromUnder(i_procNode) != NULL) { return 0; } @@ -73,11 +72,11 @@ s32 fpcNd_IsDeleteTiming(process_node_class* i_procNode) { return 1; } -s32 fpcNd_IsDelete(process_node_class* i_procNode) { +int fpcNd_IsDelete(process_node_class* i_procNode) { return fpcMtd_IsDelete(&i_procNode->nodedraw_method->base, i_procNode); } -s32 fpcNd_Delete(process_node_class* i_procNode) { +int fpcNd_Delete(process_node_class* i_procNode) { if (!fpcLy_IsDeletingMesg(&i_procNode->layer) && fpcMtd_Delete(&i_procNode->nodedraw_method->base, i_procNode) == 1) { @@ -88,22 +87,22 @@ s32 fpcNd_Delete(process_node_class* i_procNode) { return 0; } -s32 fpcNd_Create(process_node_class* i_procNode) { - process_node_class* procnode = (process_node_class*)i_procNode; +int fpcNd_Create(process_node_class* i_procNode) { + int ret; layer_class* save_layer; - s32 ret; - - if (procnode->base.state.init_state == 0) { - node_process_profile_definition* pprofile = (node_process_profile_definition*)procnode->base.profile; - procnode->base.subtype = fpcBs_MakeOfType(&g_fpcNd_type); - procnode->nodedraw_method = (nodedraw_method_class*)pprofile->sub_methods; - fpcLy_Create(&procnode->layer, procnode, procnode->layer_nodelist, 16); - procnode->unk_0x1A8 = 0; + if (i_procNode->base.state.init_state == 0) { + node_process_profile_definition* pprofile = + (node_process_profile_definition*)i_procNode->base.profile; + i_procNode->base.subtype = fpcBs_MakeOfType(&g_fpcNd_type); + i_procNode->nodedraw_method = + (nodedraw_method_class*)pprofile->sub_methods; + fpcLy_Create(&i_procNode->layer, i_procNode, i_procNode->layer_nodelist, 16); + i_procNode->unk_0x1A8 = 0; } save_layer = fpcLy_CurrentLayer(); - fpcLy_SetCurrentLayer(&procnode->layer); - ret = fpcMtd_Create(&procnode->nodedraw_method->base, procnode); + fpcLy_SetCurrentLayer(&i_procNode->layer); + ret = fpcMtd_Create(&i_procNode->nodedraw_method->base, i_procNode); fpcLy_SetCurrentLayer(save_layer); return ret; } diff --git a/src/f_pc/f_pc_node_req.cpp b/src/f_pc/f_pc_node_req.cpp index dbb8640f0b..34be4b85ff 100644 --- a/src/f_pc/f_pc_node_req.cpp +++ b/src/f_pc/f_pc_node_req.cpp @@ -27,7 +27,7 @@ void fpcNdRq_ToRequestQ(node_create_request* i_request) { fpcLy_CreatingMesg(i_request->layer); } -s32 fpcNdRq_phase_IsCreated(node_create_request* i_request) { +int fpcNdRq_phase_IsCreated(node_create_request* i_request) { if (fpcCtRq_IsCreatingByID(i_request->creating_id) == TRUE) { #if DEBUG if (i_request->unk_0x64-- <= 0) { @@ -46,7 +46,7 @@ s32 fpcNdRq_phase_IsCreated(node_create_request* i_request) { } } -s32 fpcNdRq_phase_Create(node_create_request* i_request) { +int fpcNdRq_phase_Create(node_create_request* i_request) { i_request->creating_id = fpcSCtRq_Request(i_request->layer, i_request->name, (stdCreateFunc)i_request->create_req_methods->post_method, i_request, @@ -58,11 +58,11 @@ s32 fpcNdRq_phase_Create(node_create_request* i_request) { return cPhs_NEXT_e; } -s32 fpcNdRq_phase_IsDeleteTiming(node_create_request* i_request) { +int fpcNdRq_phase_IsDeleteTiming(node_create_request* i_request) { return cPhs_NEXT_e; } -s32 fpcNdRq_phase_IsDeleted(node_create_request* i_request) { +int fpcNdRq_phase_IsDeleted(node_create_request* i_request) { if (fpcDt_IsComplete() == FALSE) { #if DEBUG if (i_request->unk_0x68-- <= 0) { @@ -78,7 +78,7 @@ s32 fpcNdRq_phase_IsDeleted(node_create_request* i_request) { return cPhs_NEXT_e; } -s32 fpcNdRq_phase_Delete(node_create_request* i_request) { +int fpcNdRq_phase_Delete(node_create_request* i_request) { if (i_request->node_proc.node != NULL) { if (fpcDt_Delete(&i_request->node_proc.node->base) == 0) { return cPhs_INIT_e; @@ -89,16 +89,16 @@ s32 fpcNdRq_phase_Delete(node_create_request* i_request) { return cPhs_NEXT_e; } -s32 fpcNdRq_DoPhase(node_create_request* i_request) { - s32 result = cPhs_Handler(&i_request->phase_request, i_request->phase_handler, i_request); +int fpcNdRq_DoPhase(node_create_request* i_request) { + int result = cPhs_Handler(&i_request->phase_request, i_request->phase_handler, i_request); if (result == cPhs_NEXT_e) { return fpcNdRq_DoPhase(i_request); } return result; } -s32 fpcNdRq_Execute(node_create_request* i_request) { - s32 result = fpcNdRq_DoPhase(i_request); +int fpcNdRq_Execute(node_create_request* i_request) { + int result = fpcNdRq_DoPhase(i_request); switch (result) { case cPhs_INIT_e: case cPhs_LOADING_e: @@ -113,7 +113,7 @@ s32 fpcNdRq_Execute(node_create_request* i_request) { } } -s32 fpcNdRq_Delete(node_create_request* i_request) { +int fpcNdRq_Delete(node_create_request* i_request) { fpcNdRq_RequestQTo(i_request); if (i_request->create_req_methods != NULL && i_request->create_req_methods->delete_method != NULL && fpcMtd_Method(i_request->create_req_methods->delete_method, i_request) == 0) @@ -125,7 +125,7 @@ s32 fpcNdRq_Delete(node_create_request* i_request) { return 1; } -s32 fpcNdRq_Cancel(node_create_request* i_request) { +int fpcNdRq_Cancel(node_create_request* i_request) { if (i_request->create_req_methods != NULL && fpcMtd_Method(i_request->create_req_methods->cancel_method, i_request) == 0) { @@ -137,7 +137,7 @@ s32 fpcNdRq_Cancel(node_create_request* i_request) { #define NODE_GET_NEXT(pNode) (pNode ? pNode->mpNextNode : NULL) -s32 fpcNdRq_Handler() { +int fpcNdRq_Handler() { node_class* node = l_fpcNdRq_Queue.mpHead; #if DEBUG @@ -170,8 +170,8 @@ s32 fpcNdRq_Handler() { return 1; } -s32 fpcNdRq_IsPossibleTarget(process_node_class* i_procNode) { - fpc_ProcID id = i_procNode->base.id; +int fpcNdRq_IsPossibleTarget(process_node_class* i_procNode) { + fpc_ProcID id = ((process_node_class*)i_procNode)->base.id; request_node_class* req_node = (request_node_class*)l_fpcNdRq_Queue.mpHead; while (req_node != NULL) { @@ -187,14 +187,13 @@ s32 fpcNdRq_IsPossibleTarget(process_node_class* i_procNode) { return 1; } -s32 fpcNdRq_IsIng(process_node_class* i_procNode) { +int fpcNdRq_IsIng(process_node_class* i_procNode) { request_node_class* req_node; - node_create_request* create_req; - fpc_ProcID id = i_procNode->base.id; + fpc_ProcID id = ((process_node_class*)i_procNode)->base.id; req_node = (request_node_class*)l_fpcNdRq_Queue.mpHead; while (req_node != NULL) { - create_req = req_node->node_create_req; + node_create_request* create_req = req_node->node_create_req; if (create_req->creating_id == id) { return 1; } @@ -328,7 +327,7 @@ node_create_request* fpcNdRq_Request(u32 i_requestSize, int i_reqType, return req; } -s32 fpcNdRq_ReChangeNode(fpc_ProcID i_requestID, s16 i_procName, void* i_data) { +int fpcNdRq_ReChangeNode(fpc_ProcID i_requestID, s16 i_procName, void* i_data) { request_node_class* req_node; req_node = (request_node_class*)l_fpcNdRq_Queue.mpHead; @@ -348,6 +347,6 @@ s32 fpcNdRq_ReChangeNode(fpc_ProcID i_requestID, s16 i_procName, void* i_data) { return 0; } -s32 fpcNdRq_ReRequest(fpc_ProcID i_requestID, s16 i_procName, void* i_data) { +int fpcNdRq_ReRequest(fpc_ProcID i_requestID, s16 i_procName, void* i_data) { return fpcNdRq_ReChangeNode(i_requestID, i_procName, i_data); } diff --git a/src/f_pc/f_pc_pause.cpp b/src/f_pc/f_pc_pause.cpp index 5a807e3447..a3484d1c7c 100644 --- a/src/f_pc/f_pc_pause.cpp +++ b/src/f_pc/f_pc_pause.cpp @@ -7,7 +7,7 @@ #include "f_pc/f_pc_node.h" #include "f_pc/f_pc_layer_iter.h" -s32 fpcPause_IsEnable(void* i_proc, u8 i_flag) { +int fpcPause_IsEnable(void* i_proc, u8 i_flag) { if ((((base_process_class*)i_proc)->pause_flag & i_flag) == i_flag) { return 1; } else { @@ -15,7 +15,7 @@ s32 fpcPause_IsEnable(void* i_proc, u8 i_flag) { } } -s32 fpcPause_Enable(void* i_proc, u8 i_flag) { +int fpcPause_Enable(void* i_proc, u8 i_flag) { ((base_process_class*)i_proc)->pause_flag |= i_flag; if (fpcBs_Is_JustOfType(g_fpcNd_type, ((base_process_class*)i_proc)->subtype)) { @@ -25,7 +25,7 @@ s32 fpcPause_Enable(void* i_proc, u8 i_flag) { return 1; } -s32 fpcPause_Disable(void* i_proc, u8 i_flag) { +int fpcPause_Disable(void* i_proc, u8 i_flag) { u8 var_r31 = 0xFF - i_flag; ((base_process_class*)i_proc)->pause_flag &= var_r31; diff --git a/src/f_pc/f_pc_priority.cpp b/src/f_pc/f_pc_priority.cpp index 71b4800056..cbd62a4053 100644 --- a/src/f_pc/f_pc_priority.cpp +++ b/src/f_pc/f_pc_priority.cpp @@ -7,11 +7,11 @@ #include "f_pc/f_pc_base.h" #include "f_pc/f_pc_layer.h" -s32 fpcPi_IsInQueue(process_priority_class* i_procPriority) { +int fpcPi_IsInQueue(process_priority_class* i_procPriority) { return cTg_IsUse(&i_procPriority->base); } -s32 fpcPi_QueueTo(process_priority_class* i_procPriority) { +int fpcPi_QueueTo(process_priority_class* i_procPriority) { cTg_SingleCut(&i_procPriority->base); fpcLy_CancelQTo(&i_procPriority->method_tag); return 1; @@ -19,7 +19,7 @@ s32 fpcPi_QueueTo(process_priority_class* i_procPriority) { static node_list_class l_fpcPi_Queue; -s32 fpcPi_ToQueue(process_priority_class* i_procPriority) { +int fpcPi_ToQueue(process_priority_class* i_procPriority) { fpc_ProcID layer = i_procPriority->queue_info.layer_id; if (cTg_Addition(&l_fpcPi_Queue, &i_procPriority->base)) { @@ -49,7 +49,7 @@ process_priority_class* fpcPi_GetFromQueue() { return NULL; } -s32 fpcPi_Delete(process_priority_class* i_procPriority) { +int fpcPi_Delete(process_priority_class* i_procPriority) { static priority_id crear = { fpcLy_NONE_e, 0xFFFF, @@ -61,14 +61,14 @@ s32 fpcPi_Delete(process_priority_class* i_procPriority) { return 1; } -s32 fpcPi_IsNormal(fpc_ProcID i_layerID, u16 i_listID, u16 i_priority) { +int fpcPi_IsNormal(fpc_ProcID i_layerID, u16 i_listID, u16 i_priority) { if ((i_layerID < fpcLy_SPECIAL_e) && (i_listID < 0xFFFE) && (i_priority < fpcPi_SPECIAL_e)) return 1; return 0; } -s32 fpcPi_Change(process_priority_class* i_procPriority, fpc_ProcID i_layerID, u16 i_listID, u16 i_priority) { +int fpcPi_Change(process_priority_class* i_procPriority, fpc_ProcID i_layerID, u16 i_listID, u16 i_priority) { base_process_class* process = (base_process_class*)i_procPriority->base.mpTagData; BOOL changed = FALSE; @@ -108,7 +108,7 @@ s32 fpcPi_Change(process_priority_class* i_procPriority, fpc_ProcID i_layerID, u return 0; } -s32 fpcPi_Handler() { +int fpcPi_Handler() { process_priority_class* i_procPriority; while (i_procPriority = fpcPi_GetFromQueue()) { base_process_class* process = (base_process_class*)i_procPriority->base.mpTagData; @@ -128,7 +128,7 @@ s32 fpcPi_Handler() { return 1; } -s32 fpcPi_Init(process_priority_class* i_procPriority, void* i_data, fpc_ProcID i_layerID, u16 i_listID, +int fpcPi_Init(process_priority_class* i_procPriority, void* i_data, fpc_ProcID i_layerID, u16 i_listID, u16 i_priority) { if (!fpcPi_IsNormal(i_layerID, i_listID, i_priority)) return 0; diff --git a/src/f_pc/f_pc_stdcreate_req.cpp b/src/f_pc/f_pc_stdcreate_req.cpp index 0d5bc43e4d..9f56391dd2 100644 --- a/src/f_pc/f_pc_stdcreate_req.cpp +++ b/src/f_pc/f_pc_stdcreate_req.cpp @@ -10,7 +10,7 @@ #include "f_pc/f_pc_debug_sv.h" #include -s32 fpcSCtRq_phase_Load(standard_create_request_class* i_request) { +int fpcSCtRq_phase_Load(standard_create_request_class* i_request) { int ret = fpcLd_Load(i_request->process_name); switch (ret) { @@ -25,7 +25,7 @@ s32 fpcSCtRq_phase_Load(standard_create_request_class* i_request) { } } -s32 fpcSCtRq_phase_CreateProcess(standard_create_request_class* i_request) { +int fpcSCtRq_phase_CreateProcess(standard_create_request_class* i_request) { fpcLy_SetCurrentLayer(i_request->base.layer); i_request->base.process = fpcBs_Create(i_request->process_name, i_request->base.id, i_request->process_append); @@ -40,7 +40,7 @@ s32 fpcSCtRq_phase_CreateProcess(standard_create_request_class* i_request) { } } -s32 fpcSCtRq_phase_SubCreateProcess(standard_create_request_class* i_request) { +int fpcSCtRq_phase_SubCreateProcess(standard_create_request_class* i_request) { fpcLy_SetCurrentLayer(i_request->base.layer); int ret = fpcBs_SubCreate(i_request->base.process); @@ -56,8 +56,9 @@ s32 fpcSCtRq_phase_SubCreateProcess(standard_create_request_class* i_request) { return ret; } -s32 fpcSCtRq_phase_IsComplete(standard_create_request_class* i_request) { - process_node_class* procNode = (process_node_class*)i_request->base.process; +int fpcSCtRq_phase_IsComplete(standard_create_request_class* i_request) { + process_node_class* procNode = + (process_node_class*)((standard_create_request_class*)i_request)->base.process; if (fpcBs_Is_JustOfType(g_fpcNd_type, procNode->base.subtype) == TRUE) { if (fpcLy_IsCreatingMesg(&procNode->layer) == TRUE) { return cPhs_INIT_e; @@ -66,7 +67,7 @@ s32 fpcSCtRq_phase_IsComplete(standard_create_request_class* i_request) { return cPhs_NEXT_e; } -s32 fpcSCtRq_phase_PostMethod(standard_create_request_class* i_request) { +int fpcSCtRq_phase_PostMethod(standard_create_request_class* i_request) { stdCreateFunc create_func = i_request->create_post_method; if (create_func != NULL) { @@ -79,30 +80,31 @@ s32 fpcSCtRq_phase_PostMethod(standard_create_request_class* i_request) { return cPhs_NEXT_e; } -s32 fpcSCtRq_phase_Done(standard_create_request_class* i_request) { +int fpcSCtRq_phase_Done(standard_create_request_class* i_request) { return cPhs_NEXT_e; } -s32 fpcSCtRq_Handler(standard_create_request_class* i_request) { - s32 phase_state = cPhs_Do(&i_request->phase_request, i_request); +int fpcSCtRq_Handler(standard_create_request_class* i_request) { + int phase_state = cPhs_Do(&i_request->phase_request, i_request); switch (phase_state) { case cPhs_NEXT_e: return fpcSCtRq_Handler(i_request); case cPhs_COMPLEATE_e: return cPhs_COMPLEATE_e; - case cPhs_LOADING_e: + case cPhs_INIT_e: + case cPhs_UNK3_e: case cPhs_ERROR_e: default: return phase_state; } } -s32 fpcSCtRq_Delete(standard_create_request_class* i_request) { +int fpcSCtRq_Delete(standard_create_request_class* i_request) { return 1; } -s32 fpcSCtRq_Cancel(standard_create_request_class* i_request) { +int fpcSCtRq_Cancel(standard_create_request_class* i_request) { return 1; } diff --git a/src/m_Do/m_Do_MemCardRWmng.cpp b/src/m_Do/m_Do_MemCardRWmng.cpp index 25c4bc529f..dacaba3bee 100644 --- a/src/m_Do/m_Do_MemCardRWmng.cpp +++ b/src/m_Do/m_Do_MemCardRWmng.cpp @@ -8,7 +8,7 @@ #include "JSystem/JUtility/JUTTexture.h" #include "d/d_com_inf_game.h" #include "d/d_save.h" -#include +#include #if VERSION == VERSION_GCN_JPN #define HEADER_TITLE "ゼルダの伝説 トワイライトプリンセス" diff --git a/src/m_Do/m_Do_ext.cpp b/src/m_Do/m_Do_ext.cpp index c1adb5a8ec..07ad32028e 100644 --- a/src/m_Do/m_Do_ext.cpp +++ b/src/m_Do/m_Do_ext.cpp @@ -22,7 +22,7 @@ #include "m_Do/m_Do_ext.h" #include "m_Do/m_Do_main.h" #include "m_Do/m_Do_mtx.h" -#include +#include namespace m_Do_ext { u8 CurrentHeapAdjustVerbose; diff --git a/src/m_Do/m_Do_lib.cpp b/src/m_Do/m_Do_lib.cpp index fb592da49f..9b68a1a1c3 100644 --- a/src/m_Do/m_Do_lib.cpp +++ b/src/m_Do/m_Do_lib.cpp @@ -46,7 +46,7 @@ void mDoLib_clipper::setup(f32 fovy, f32 aspect, f32 near, f32 far) { mSystemFar = far; mClipper.calcViewFrustum(); - s16 tmp = fovy * 182.04444885253906f; + s16 tmp = DEG2S(fovy); mFovyRate = cM_scos(tmp) / cM_ssin(tmp); } diff --git a/src/m_Do/m_Do_printf.cpp b/src/m_Do/m_Do_printf.cpp index fe55ea10c9..1cca26b3a1 100644 --- a/src/m_Do/m_Do_printf.cpp +++ b/src/m_Do/m_Do_printf.cpp @@ -4,7 +4,7 @@ */ #include "m_Do/m_Do_printf.h" -#include +#include #include #include "m_Do/m_Do_ext.h" diff --git a/src/revolution/homebuttonLib/nw4hbm/db/assert.h b/src/revolution/homebuttonLib/nw4hbm/db/assert.h index 8a7097e4f5..fed9be6025 100644 --- a/src/revolution/homebuttonLib/nw4hbm/db/assert.h +++ b/src/revolution/homebuttonLib/nw4hbm/db/assert.h @@ -3,7 +3,7 @@ #include -#include +#include namespace nw4hbm { namespace db { diff --git a/src/revolution/homebuttonLib/nw4hbm/math/arithmetic.h b/src/revolution/homebuttonLib/nw4hbm/math/arithmetic.h index e0ccf2445c..80582db70c 100644 --- a/src/revolution/homebuttonLib/nw4hbm/math/arithmetic.h +++ b/src/revolution/homebuttonLib/nw4hbm/math/arithmetic.h @@ -1,8 +1,8 @@ #ifndef NW4HBM_MATH_ARITHMETIC_H #define NW4HBM_MATH_ARITHMETIC_H -#include -#include +#include +#include #include #include diff --git a/src/revolution/homebuttonLib/nw4hbm/math/triangular.h b/src/revolution/homebuttonLib/nw4hbm/math/triangular.h index 9f175a00cc..27be799ff6 100644 --- a/src/revolution/homebuttonLib/nw4hbm/math/triangular.h +++ b/src/revolution/homebuttonLib/nw4hbm/math/triangular.h @@ -1,8 +1,8 @@ #ifndef NW4HBM_MATH_TRIANGULAR_H #define NW4HBM_MATH_TRIANGULAR_H -#include -#include +#include +#include #include diff --git a/src/revolution/homebuttonLib/nw4hbm/ut/TextWriterBase.h b/src/revolution/homebuttonLib/nw4hbm/ut/TextWriterBase.h index e19778295c..4470fad3c6 100644 --- a/src/revolution/homebuttonLib/nw4hbm/ut/TextWriterBase.h +++ b/src/revolution/homebuttonLib/nw4hbm/ut/TextWriterBase.h @@ -7,7 +7,7 @@ #include "Rect.h" #include -#include +#include #include "TagProcessorBase.h" diff --git a/src/revolution/homebuttonLib/sound/synenv.cpp b/src/revolution/homebuttonLib/sound/synenv.cpp index c9057b158e..894a744004 100644 --- a/src/revolution/homebuttonLib/sound/synenv.cpp +++ b/src/revolution/homebuttonLib/sound/synenv.cpp @@ -2,7 +2,7 @@ #include -#include +#include #include diff --git a/src/revolution/os/__start.c b/src/revolution/os/__start.c new file mode 100644 index 0000000000..245e8e0027 --- /dev/null +++ b/src/revolution/os/__start.c @@ -0,0 +1,376 @@ +#include "revolution/revolution.h" +#include "revolution/os/OSHardware.h" +#include "__ppc_eabi_linker.h" + +extern void InitMetroTRK(); +extern void exit(int); +extern int main(int argc, char* argv[]); +extern void __init_user(void); +extern void InitMetroTRK_BBA(void); +extern void DBInit(); + +__declspec(section ".init") extern void __check_pad3(void); +__declspec(section ".init") extern void __set_debug_bba(void); +__declspec(section ".init") extern u8 __get_debug_bba(void); +__declspec(section ".init") extern void __start(void); +__declspec(section ".init") extern void __init_registers(void); +__declspec(section ".init") extern void __init_data(void); +__declspec(section ".init") extern void __init_hardware(void); +__declspec(section ".init") extern void __flush_cache(void* addr, u32 size); + +extern u8 Debug_BBA; + +__declspec(section ".init") void __check_pad3(void) { + if ((*(u16*)0x800030E4 & 0xEEF) == 0xEEF) { + OSResetSystem(0, 0, 0); + } +} + +__declspec(section ".init") void __set_debug_bba(void) { Debug_BBA = 1; } + +__declspec(section ".init") u8 __get_debug_bba(void) { return Debug_BBA; } + +__declspec(section ".init") __declspec(weak) asm void __start(void) { +#ifdef __MWERKS__ // clang-format off + nofralloc + + // Setup hardware + bl __init_registers + bl __init_hardware + + // Create first stack frame + li r0, -1 + // Parameter save + stwu r1, -8(r1) + // LR save (-1 to signify first frame) + stw r0, 4(r1) + // Back chain (-1 to signify first frame) + stw r0, 0(r1) + + // Setup ROM/BSS + bl __init_data + + // Clear debugger exception mask + li r0, 0 + lis r6, (OS_DEBUG_INTERFACE + OSDebugInterface.exceptionMask)@ha + addi r6, r6, (OS_DEBUG_INTERFACE + OSDebugInterface.exceptionMask)@l + stw r0, 0(r6) + + /** + * Check the BI2 debug flag to determine how to call InitMetroTRK. + * + * This can be done by either checking the value from the DVD + * (OSBI2.debugFlag), or by checking the global OS_BI2_DEBUG_FLAG. + * + * If the DVD BI2 is available, it is prioritized over the global value. + */ + lis r6, OS_DVD_BI2@ha + addi r6, r6, OS_DVD_BI2@l + lwz r6, 0(r6) + cmplwi r6, 0 + beq _no_dvd_bi2 // <- NULL BI2, try the OS global + + // Use the DVD's flag + lwz r7, OSBI2.debugFlag(r6) + b _handle_bi2_debug_flag + + /** + * At this point, we do one last check to decide whether we want to + * setup the TRK debugger. + * + * If the OS boot info specifies an arena hi, we grab the BI2 debug + * flag using the global OS_BI2_DEBUG_FLAG. + * + * (This must be some heuristic, but I don't understand it) + */ +_no_dvd_bi2: + lis r5, (OS_BOOT_INFO + OSBootInfo.arenaHi)@ha + addi r5, r5, (OS_BOOT_INFO + OSBootInfo.arenaHi)@l + lwz r5, 0(r5) + cmplwi r5, 0 + beq _check_for_exec_args // <- NULL arena hi, don't setup the debugger + + // Grab the global BI2 debug flag + lis r7, OS_BI2_DEBUG_FLAG@ha + addi r7, r7, OS_BI2_DEBUG_FLAG@l + lwz r7, 0(r7) + + /** + * The BI2 debug flag/level decides how to set up TRK. + * + * Most importantly, it decides how InitMetroTRKCommTable is called, by + * specifying a type of hardware. + * + * ID 1: NDEV hardware + * ID 2: BBA hardware + * Anything else: "Unknown" to TRK, defaults to GDEV hardware + * + * BI2 debug level maps to TRK comm hardware ID as follows: + * - BI2 Level 2 -> ID 0 (GDEV) + * - BI2 Level 3 -> ID 1 (NDEV) + * - BI2 Level 4 -> ID 2 (BBA) + */ +_handle_bi2_debug_flag: + // BI2 Debug Level 3: Init TRK as GDEV hardware + li r5, 0 + cmplwi r7, 2 + beq _call_init_metro_trk + + // BI2 Debug Level 2: Init TRK as NDEV hardware + cmplwi r7, 3 + li r5, 1 + beq _call_init_metro_trk + + // BI2 Debug Level 4: Init TRK as BBA hardware + // *Any other debug level is ignored* + cmplwi r7, 4 + bne _check_for_exec_args // <- Ignore debug level, goto next step + /** + * I think at one point this used to call InitMetroTRK as they set + * r5 here; however, in this version it goes unused. + * + * What currently happens is __set_debug_bba sets Debug_BBA, which + * will result in a call to InitMetroTRK_BBA after the OS is + * initialized. + * + * Maybe this is a leftover from how things worked before + * InitMetroTRK_BBA was written? + */ + li r5, 2 + bl __set_debug_bba + b _check_for_exec_args + + /** + * Call InitMetroTRK + * The MetroTRK hardware ID is specified in r5 + */ +_call_init_metro_trk: + lis r6, InitMetroTRK@ha + addi r6, r6, InitMetroTRK@l + mtlr r6 + blrl + + /** + * After setting up the hardware and the debugger, we next setup + * the program arguments. This label checks whether any arguments + * exist. + * + * BI2 contains an offset from itself to the argument data, which + * is formatted as follows: + * + * typedef struct BI2Args { + * int argc; + * union { + * char* argument; + * u32 offset; + * } argv[]; + * } BI2Args; + */ +_check_for_exec_args: + lis r6, OS_DVD_BI2@ha + addi r6, r6, OS_DVD_BI2@l + lwz r5, 0(r6) + cmplwi r5, 0 + beq+ _no_args // <- No BI2 to get args from + + lwz r6, OSBI2.argumentOfs(r5) + cmplwi r6, 0 + beq+ _no_args // <- Invalid argument offset in BI2 + + // Calculate pointer to argument data + add r6, r5, r6 + // First integer value is the argument count + lwz r14, 0(r6) + cmplwi r14, 0 + beq _no_args // <- Argument count is zero + + // BI2 args + 0x8, used to adjust MEM1 later + addi r15, r6, 4 + // Move argc to the counter to prepare the loop + mtctr r14 + + /** + * This loop unpacks the arguments by converting them from offsets + * to pointers, in-place. + * + * The offsets are relative to the start of the BI2, so we just + * add the offset to the BI2 pointer and write it back. + */ +_unpack_args_loop: + // Skip over argc + addi r6, r6, 4 + // Load argument offset + lwz r7, 0(r6) + // Convert offset to pointer + add r7, r7, r5 + // Store pointer + stw r7, 0(r6) + bdnz _unpack_args_loop + + /** + * Both the MEM1 arena hi and the MEM1 limit are adjusted to + * preserve the BI2 args. + * + * They are set to eight bytes into the BI2 arguments, + * rounded down to the nearest 32 bytes. + */ + lis r5, (OS_BOOT_INFO + OSBootInfo.arenaHi)@ha + addi r5, r5, (OS_BOOT_INFO + OSBootInfo.arenaHi)@l + clrrwi r7, r15, 5 + stw r7, 0(r5) + + lis r5, OS_USABLE_MEM1_END@ha + addi r5, r5, OS_USABLE_MEM1_END@l + clrrwi r7, r15, 5 + stw r7, 0(r5) + b _init_os + + /** + * Either there was no BI2 available, or it did not contain any arguments + */ +_no_args: + li r14, 0 // argc = 0 + li r15, 0 // argv = NULL + + /** + * Here, the OS and its debug monitor are initialized, and + * then we check if we should call __check_pad3. + * + * __check_pad3 is called before future initialization if the disk + * drive device code is 0x0001, or if the OS' inquiry fails (emulation + * or some debug hardware?) + * + * The apploader reads the button state of the fourth GCN controller + * and writes it to GC_PAD_3_BTN (zero-indexed), which is used in + * __check_pad3. WiiBrew states that this is for GameCube NR disc + * support, so that could explain the unusual DVD device code address. + */ +_init_os: + // Initialize the OS and its debug monitor + bl DBInit + bl OSInit + + // Load DVD device code address + lis r4, OS_DVD_DEVICE_CODE@ha + addi r4, r4, OS_DVD_DEVICE_CODE@l + lhz r3, 0(r4) + // Check whether OS inquiry failed + andi. r5, r3, DVD_DEVICE_CODE_READ + beq _call_check_pad3 // <- Bit 0 is NOT set (fail) + // 0x0001 may be a real ID or a failsafe (see OS.c:InquiryCallback) + andi. r3, r3, (~DVD_DEVICE_CODE_READ) & 0xFFFF + cmplwi r3, 0x0001 + bne _check_debug_bba // <- NOT 0x0001 device code address +_call_check_pad3: + bl __check_pad3 + + /** + * If the BI2 debug level from earlier was set to four, we need to + * initialize the debugger for BBA hardware. + */ +_check_debug_bba: + bl __get_debug_bba + cmplwi r3, 1 + bne _after_init_metro_trk_bba // <- Debug_BBA == false + bl InitMetroTRK_BBA + + /** + * 1. Initialize C++ runtime + * 2. Call main(argc, argv) + * 3. Teardown C++ runtime + */ +_after_init_metro_trk_bba: + bl __init_user + mr r3, r14 + mr r4, r15 + bl main + b exit // <- Will halt CPU +#endif // clang-format on +} + +static inline void __copy_rom_section(void* dst, const void* src, size_t size) { + if (size == 0 || dst == src) { + return; + } + + memcpy(dst, src, size); + __flush_cache(dst, size); +} + +static inline void __init_bss_section(void* dst, size_t size) { + if (size == 0) { + return; + } + + memset(dst, 0, size); +} + +__declspec(section ".init") static asm void __init_registers(void) { +#ifdef __MWERKS__ // clang-format off + nofralloc + + li r0, 0 + li r3, 0 + li r4, 0 + li r5, 0 + li r6, 0 + li r7, 0 + li r8, 0 + li r9, 0 + li r10, 0 + li r11, 0 + li r12, 0 + li r14, 0 + li r15, 0 + li r16, 0 + li r17, 0 + li r18, 0 + li r19, 0 + li r20, 0 + li r21, 0 + li r22, 0 + li r23, 0 + li r24, 0 + li r25, 0 + li r26, 0 + li r27, 0 + li r28, 0 + li r29, 0 + li r30, 0 + li r31, 0 + + lis r1, _stack_addr@h + ori r1, r1, _stack_addr@l + lis r2, _SDA2_BASE_@h + ori r2, r2, _SDA2_BASE_@l + lis r13, _SDA_BASE_@h + ori r13, r13, _SDA_BASE_@l + + blr +#endif // clang-format on +} + +__declspec(section ".init") static void __init_data(void) { + const __rom_copy_info* rs; + const __bss_init_info* bs; + + rs = _rom_copy_info; + while (1) { + if (rs->size == 0) { + break; + } + + __copy_rom_section(rs->addr, rs->rom, rs->size); + rs++; + } + + bs = _bss_init_info; + while (1) { + if (bs->size == 0) { + break; + } + + __init_bss_section(bs->addr, bs->size); + bs++; + } +}