1111#include " JSystem/JKernel/JKRHeap.h"
1212#include " Z2AudioLib/Z2Instances.h"
1313
14+ struct daYkgr_HIO_c : public mDoHIO_entry_c {
15+ daYkgr_HIO_c ();
16+ /* 805A8D98 */ virtual ~daYkgr_HIO_c () {}
17+
18+ void genMessage (JORMContext*);
19+
20+ /* 0x04 */ u8 field_0x4;
21+ /* 0x08 */ s32 field_0x8;
22+ /* 0x0C */ s32 field_0xc;
23+ /* 0x10 */ f32 field_0x10;
24+ /* 0x14 */ f32 field_0x14;
25+ /* 0x18 */ f32 field_0x18;
26+ /* 0x1C */ f32 field_0x1c;
27+ /* 0x20 */ f32 field_0x20;
28+ /* 0x24 */ f32 field_0x24;
29+ };
30+
31+ #ifdef DEBUG
32+ void daYkgr_HIO_c::genMessage (JORMContext* ctx) {
33+ ctx->genLabel (" 竜の山陽炎HIO" , 0 , 0 , NULL , 0xFFFF , 0xFFFF , 0x200 , 0x18 );
34+ ctx->genSlider (" アルファ速度" , &field_0xc, 0 , 255 , 0 , NULL , 0xFFFF , 0xFFFF , 0x200 , 0x18 );
35+ ctx->genCheckBox (" アルファチェック" , &field_0x4, 0x01 , 0 , NULL , 0xFFFF , 0xFFFF , 512 , 24 );
36+ ctx->genSlider (" アルファ" , &field_0x8, 0 , 255 , 0 , NULL , 0xFFFF , 0xFFFF , 0x200 , 0x18 );
37+ ctx->genSlider (" INDMTX PARAM" , &field_0x10, -17 .0f , 47 .0f , 0 , NULL , 0xFFFF , 0xFFFF , 0x200 , 0x18 );
38+ ctx->genSlider (" min_param" , &field_0x14, -17 .0f , 47 .0f , 0 , NULL , 0xFFFF , 0xFFFF , 0x200 , 0x18 );
39+ ctx->genSlider (" max_param" , &field_0x18, -17 .0f , 47 .0f , 0 , NULL , 0xFFFF , 0xFFFF , 0x200 , 0x18 );
40+ ctx->genSlider (" default_rate" , &field_0x1c, 0 .0f , 1 .0f , 0 , NULL , 0xFFFF , 0xFFFF , 0x200 , 0x18 );
41+ ctx->genSlider (" outside_range" , &field_0x20, 0 .0f , 10000 .0f , 0 , NULL , 0xFFFF , 0xFFFF , 0x200 , 0x18 );
42+ ctx->genSlider (" inside_range" , &field_0x24, 0 .0f , 10000 .0f , 0 , NULL , 0xFFFF , 0xFFFF , 0x200 , 0x18 );
43+ }
44+ #endif
45+
1446inline daYkgr_HIO_c::daYkgr_HIO_c () {
1547 field_0x4 = 0 ;
1648 field_0x8 = 0xff ;
@@ -45,15 +77,11 @@ void dPa_YkgrPcallBack::setParam(f32 param_1) {
4577 if (param_1 <= -17 .0f || param_1 >= 47 .0f ) return ; {
4678 if (param_1 >= 0 .0f ) {
4779 field_0x1c = param_1;
48- f32 fVar1 = (param_1 - field_0x1c) * 0 .5f + 0 .5f ;
49- field_0x4[1 ][1 ] = fVar1 ;
50- field_0x4[0 ][0 ] = fVar1 ;
80+ field_0x4[0 ][0 ] = field_0x4[1 ][1 ] = (param_1 - field_0x1c) * 0 .5f + 0 .5f ;
5181 } else {
52- f32 x = param_1 - 1 .0f ;
53- field_0x1c = x;
54- f32 fVar1 = (x - field_0x1c) * 0 .5f + 1 .0f ;
55- field_0x4[1 ][1 ] = fVar1 ;
56- field_0x4[0 ][0 ] = fVar1 ;
82+ param_1 = (param_1 - 1 .0f );
83+ field_0x1c = param_1;
84+ field_0x4[0 ][0 ] = field_0x4[1 ][1 ] = (param_1 - field_0x1c) * 0 .5f + 1 .0f ;
5785 }
5886 field_0x4[0 ][1 ] = 0 .0f ;
5987 field_0x4[0 ][2 ] = 0 .0f ;
@@ -69,7 +97,8 @@ static daYkgr_HIO_c l_HIO;
6997f32 daYkgr_c::getPosRate () {
7098 if (m_path == NULL ) {
7199 return 0 .0f ;
72- }
100+ }
101+ f32 rate = 0 .0f ;
73102 f32 dVar11 = FLT_MAX;
74103 cXyz cStack_5c (dComIfGp_getPlayer (0 )->current .pos );
75104 dPnt* iVar9 = m_path->m_points ;
@@ -86,37 +115,36 @@ f32 daYkgr_c::getPosRate() {
86115 } else if (dVar11 < l_HIO.field_0x24 ) {
87116 dVar11 = l_HIO.field_0x24 ;
88117 }
89- f32 y = (l_HIO.field_0x20 );
90- y = (dVar11 - l_HIO. field_0x24 ) / (y -l_HIO. field_0x24 ) ;
91- return 1 . 0f - y ;
118+ rate = (dVar11 - l_HIO.field_0x24 ) / (l_HIO. field_0x20 -l_HIO. field_0x24 );
119+ rate = 1 . 0f - rate ;
120+ return rate ;
92121}
93122
94123/* 805A9138-805A9158 000088 0020+00 2/3 0/0 0/0 .bss YkgrCB */
95124static dPa_YkgrPcallBack YkgrCB;
96125
97126/* 805A882C-805A8A48 00048C 021C+00 1/0 0/0 0/0 .text daYkgrCreate__FPv */
98- // NONMATCHING regalloc
99127inline int daYkgr_c::_create () {
100- dPath* path;
101- s32 uVar1 = fopAcM_GetParam (this ) ;
102- uVar1 = (uVar1 >> 0x14 ) & 0xf ;
128+ int uVar1 = u8 ((fopAcM_GetParam (this ) & 0x00F00000 ) >> 0x14 );
103129 fopAcM_SetupActor (this , daYkgr_c);
104- u32 uVar4 = (fopAcM_GetParam (this ) >> 8 ) & 0xff ;
130+ u8 uVar4 = (fopAcM_GetParam (this ) & 0x0000FF00 ) >> 8 ;
131+ OS_REPORT (" pathNo = %d\n " , uVar4);
105132 if (uVar4 != 0xff ) {
106- path = dPath_GetRoomPath (uVar4, fopAcM_GetRoomNo (this ));
133+ m_path = dPath_GetRoomPath (uVar4, fopAcM_GetRoomNo (this ));
107134 } else {
108- path = NULL ;
135+ m_path = NULL ;
109136 }
110- m_path = path;
111137
112138 if (m_emitter == NULL ) {
113139 fopAc_ac_c* player = dComIfGp_getPlayer (0 );
140+ OS_REPORT (" ##\n ##\n ## particle set Ykgr\n ##\n ##\n " );
114141 this ->current .pos = player->current .pos ;
115142 m_emitter = dComIfGp_particle_set (0x80e2 , &this ->current .pos , NULL , NULL );
116143 if (m_emitter != NULL ) {
117144 m_emitter->setParticleCallBackPtr (&YkgrCB);
118145 YkgrCB.setParam (-3 .0f );
119146 } else {
147+ OS_REPORT (" エミッターの生成に失敗しました!!\n " );
120148 return cPhs_ERROR_e;
121149 }
122150 fopAcM_setStageLayer (this );
@@ -133,6 +161,9 @@ inline int daYkgr_c::_create() {
133161 field_0x5a8 = 0 .0f ;
134162 stop ();
135163 }
164+ #ifdef DEBUG
165+ l_HIO.entryHIO (" 竜の山陽炎" );
166+ #endif
136167 } else {
137168 if (uVar1 == 1 ) {
138169 start ();
@@ -141,39 +172,51 @@ inline int daYkgr_c::_create() {
141172 }
142173 return cPhs_UNK3_e;
143174 }
175+ OS_REPORT (" alpha = %d\n " , m_emitter->getGlobalAlpha ());
176+ OS_REPORT (" rate = %3.3f\n " , m_emitter->getRate ());
177+ OS_REPORT (" \n\n fopAcM_GetParam = %x\n\n\n " , fopAcM_GetParam (this ));
144178 return cPhs_COMPLEATE_e;
145179}
146180
147181static int daYkgrCreate (void * i_this) {
148182 return static_cast <daYkgr_c*>(i_this)->_create ();
149183}
150184
151- /* 805A8A48-805A8A50 0006A8 0008+00 1/0 0/0 0/0 .text daYkgrDelete__FPv */
152- static int daYkgrDelete (void * param_0) {
185+ inline int daYkgr_c::_delete () {
186+ #ifdef DEBUG
187+ l_HIO.removeHIO ();
188+ #endif
153189 return 1 ;
154190}
155191
192+ /* 805A8A48-805A8A50 0006A8 0008+00 1/0 0/0 0/0 .text daYkgrDelete__FPv */
193+ static int daYkgrDelete (void * i_this) {
194+ return static_cast <daYkgr_c*>(i_this)->_delete ();
195+ }
196+
156197/* 805A8A50-805A8BBC 0006B0 016C+00 1/0 0/0 0/0 .text daYkgrExecute__FPv */
157- // NONMATCHING regalloc
158198inline int daYkgr_c::_execute () {
159199 cLib_addCalc2 (&field_0x5a4, m_aim_rate, 0 .25f , 0 .05f );
160200 cLib_addCalc2 (&m_aim_rate, l_HIO.field_0x1c , 0 .25f , 0 .05f );
161201 cLib_addCalc2 (&field_0x5a8, getPosRate (), 0 .25f , 0 .05f );
162- f32 fVar4 = field_0x5a8 * 0 .5f + field_0x5a4 * 0 .5f ;
163- YkgrCB.setParam (fVar4 * l_HIO.field_0x18 + (1 .0f - fVar4 ) * l_HIO.field_0x14 );
202+ f32 fVar4 = field_0x5a4 * 0 .5f + field_0x5a8 * 0 .5f ;
203+ f32 tmp = fVar4 * l_HIO.field_0x18 + (1 .0f - fVar4 ) * l_HIO.field_0x14 ;
204+ YkgrCB.setParam (tmp);
164205 if (m_alpha_flag == 0 ) {
165- if (m_alpha != 0 ) {
206+ if (m_alpha > 0 ) {
166207 if (m_alpha > l_HIO.field_0xc ) {
167208 m_alpha = m_alpha - l_HIO.field_0xc ;
168209 } else {
169210 m_alpha = 0 ;
170211 }
171212 }
172- } else if (m_alpha < 0xff ) {
173- if (m_alpha < 0xff - l_HIO.field_0xc ) {
174- m_alpha = m_alpha + l_HIO.field_0xc ;
175- } else {
176- m_alpha = 0xff ;
213+ } else {
214+ if (m_alpha < 0xff ) {
215+ if (m_alpha < 0xff - l_HIO.field_0xc ) {
216+ m_alpha = m_alpha + l_HIO.field_0xc ;
217+ } else {
218+ m_alpha = 0xff ;
219+ }
177220 }
178221 }
179222 return 1 ;
@@ -183,11 +226,28 @@ static int daYkgrExecute(void* i_this) {
183226 return static_cast <daYkgr_c*>(i_this)->_execute ();
184227}
185228
229+ void daYkgr_c::set_mtx () {
230+ camera_class* iVar1 = dComIfGp_getCamera (0 );
231+ cXyz local_28;
232+ cXyz* r29 = fopCamM_GetEye_p (iVar1);
233+ current.pos = *r29;
234+ dKyr_get_vectle_calc (&iVar1->lookat .eye , &iVar1->lookat .center , &local_28);
235+ current.angle .y = (s16)cM_atan2s (local_28.x , local_28.z );
236+ current.angle .x = -cM_atan2s (
237+ local_28.y , JMAFastSqrt ((local_28.x * local_28.x + local_28.z * local_28.z )));
238+ mDoMtx_stack_c::transS (current.pos .x , current.pos .y ,
239+ current.pos .z );
240+ mDoMtx_stack_c::YrotM (current.angle .y );
241+ mDoMtx_stack_c::XrotM (current.angle .x );
242+ MTXCopy (mDoMtx_stack_c::get (), field_0x570);
243+ }
244+
186245/* 805A8BBC-805A8D90 00081C 01D4+00 1/0 0/0 0/0 .text daYkgrDraw__FPv */
187246inline int daYkgr_c::_draw () {
188247 bool rv;
248+ f32 alpha = 255 .0f ;
189249 if (strcmp (dComIfGp_getStartStageName (), " D_MN04A" ) == 0 ) {
190- f32 alpha = dComIfGs_BossLife_public_Get () / 100 .0f ;
250+ alpha = dComIfGs_BossLife_public_Get () / 100 .0f ;
191251 m_alpha = alpha * 255 .0f ;
192252 if (m_alpha == 0 ) {
193253 m_alpha++;
@@ -199,7 +259,15 @@ inline int daYkgr_c::_draw() {
199259 set_mtx ();
200260 if (m_emitter != NULL ) {
201261 m_emitter->setGlobalRTMatrix (field_0x570);
202- m_emitter->setGlobalAlpha (m_alpha);
262+ #ifdef DEBUG
263+ if (l_HIO.field_0x4 != 0 ) {
264+ m_emitter->setGlobalAlpha (l_HIO.field_0x8 );
265+ YkgrCB.setParam (l_HIO.field_0x10 );
266+ } else
267+ #endif
268+ {
269+ m_emitter->setGlobalAlpha (m_alpha);
270+ }
203271 }
204272 rv = true ;
205273 }
@@ -215,11 +283,6 @@ static int daYkgrIsDelete(void* param_0) {
215283 return 1 ;
216284}
217285
218- /* 805A8D98-805A8DF4 0009F8 005C+00 2/1 0/0 0/0 .text __dt__12daYkgr_HIO_cFv */
219- daYkgr_HIO_c::~daYkgr_HIO_c () {
220- /* empty function */
221- }
222-
223286/* 805A9020-805A9040 -00001 0020+00 1/0 0/0 0/0 .data daYkgrMethodTable */
224287static actor_method_class daYkgrMethodTable = {
225288 daYkgrCreate,
0 commit comments