1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
|
//
// Generated By: dol2asm
// Translation Unit: d/d_scope
//
#include "d/d_scope.h"
#include "JSystem/J2DGraph/J2DOrthoGraph.h"
#include "d/com/d_com_inf_game.h"
#include "dol2asm.h"
//
// Types:
//
class dScope_c : public dMeterSub_c {
public:
enum {
/* 0 */ PROC_OPEN,
/* 1 */ PROC_MOVE,
/* 2 */ PROC_CLOSE,
};
/* 80193690 */ dScope_c(u8);
/* 80193FB4 */ void open_init();
/* 80193FD0 */ void open_proc();
/* 80194048 */ void move_init();
/* 8019404C */ void move_proc();
/* 80194050 */ void close_init();
/* 80194054 */ void close_proc();
/* 80193C68 */ virtual void draw();
/* 8019396C */ virtual ~dScope_c();
/* 80193B90 */ virtual int _execute(u32);
/* 80193FA0 */ virtual int isDead();
/* 0x04 */ J2DScreen* mHawkEyeScrn;
/* 0x08 */ J2DScreen* mZoomInOutScrn;
/* 0x0C */ CPaneMgr* mHawkEyeRootPane;
/* 0x10 */ CPaneMgr* mZoomInOutRootPane;
/* 0x14 */ CPaneMgr* mHawkEyePanes[3];
/* 0x20 */ CPaneMgr* mZoomInOutPanes[3][2];
/* 0x38 */ J2DPicture* mpWipeTex;
/* 0x3C */ J2DPicture* mpBlackTex;
/* 0x40 */ u8 field_0x40[0x48 - 0x40];
/* 0x48 */ JUtility::TColor field_0x48[2];
/* 0x50 */ JUtility::TColor field_0x50[2];
/* 0x58 */ u32 field_0x58;
/* 0x5C */ u32 field_0x5c;
/* 0x60 */ u8 field_0x60[0x78 - 0x60];
/* 0x78 */ f32 mWidth;
/* 0x7C */ f32 mHeight;
/* 0x80 */ f32 mScale;
/* 0x84 */ f32 mAlpha;
/* 0x88 */ s16 mOpenTimer;
/* 0x8A */ s16 field_0x8a;
/* 0x8C */ u8 mProcess;
/* 0x8D */ u8 field_0x8d;
/* 0x8E */ u8 mIsDead;
/* 0x8F */ u8 field_0x8f;
};
//
// Forward References:
//
extern "C" void __ct__8dScope_cFUc();
extern "C" void __ct__Q28JUtility6TColorFv();
extern "C" void __dt__8dScope_cFv();
extern "C" void _execute__8dScope_cFUl();
extern "C" void draw__8dScope_cFv();
extern "C" void isDead__8dScope_cFv();
extern "C" void open_init__8dScope_cFv();
extern "C" void open_proc__8dScope_cFv();
extern "C" void move_init__8dScope_cFv();
extern "C" void move_proc__8dScope_cFv();
extern "C" void close_init__8dScope_cFv();
extern "C" void close_proc__8dScope_cFv();
extern "C" void __dt__11dMeterSub_cFv();
extern "C" int _create__11dMeterSub_cFv();
extern "C" int _delete__11dMeterSub_cFv();
extern "C" void draw__11dMeterSub_cFv();
extern "C" int _execute__11dMeterSub_cFUl();
extern "C" int isDead__11dMeterSub_cFv();
extern "C" void __sinit_d_scope_cpp();
extern "C" extern char const* const d_d_scope__stringBase0;
//
// External References:
//
extern "C" void* __nw__FUl();
extern "C" void __dl__FPv();
extern "C" void J2DDrawLine__FffffQ28JUtility6TColori();
extern "C" void __ct__10J2DPictureFPC7ResTIMG();
extern "C" void __construct_array();
extern "C" void __ptmf_scall();
extern "C" void _savegpr_23();
extern "C" void _savegpr_29();
extern "C" void _restgpr_23();
extern "C" void _restgpr_29();
extern "C" extern void* __vt__12dDlst_base_c[3];
//
// Declarations:
//
/* 803BB618-803BB624 018738 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */
SECTION_DATA static u8 cNullVec__6Z2Calc[12] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* 803BB648-803BB66C 018768 0024+00 2/3 0/0 0/0 .data init_process */
typedef void (dScope_c::*initFunc)();
SECTION_DATA initFunc init_process[] = {
&dScope_c::open_init,
&dScope_c::move_init,
&dScope_c::close_init,
};
/* 803BB690-803BB6B4 0187B0 0024+00 1/2 0/0 0/0 .data move_process */
typedef void (dScope_c::*moveFunc)();
SECTION_DATA moveFunc move_process[] = {
&dScope_c::open_proc,
&dScope_c::move_proc,
&dScope_c::close_proc,
};
/* 80453A10-80453A14 002010 0004+00 4/4 0/0 0/0 .sdata2 @3756 */
SECTION_SDATA2 static f32 lit_3756 = 3.0f;
/* 80453A14-80453A18 002014 0004+00 4/4 0/0 0/0 .sdata2 @3757 */
SECTION_SDATA2 static u8 lit_3757[4] = {
0x00,
0x00,
0x00,
0x00,
};
extern void* __vt__11dMeterSub_c[8 + 3 /* padding */];
/* 80193690-80193960 18DFD0 02D0+00 0/0 1/1 0/0 .text __ct__8dScope_cFUc */
dScope_c::dScope_c(u8 param_0) : field_0x58(-1), field_0x5c(-1) {
field_0x8d = param_0;
ResTIMG* mp_image = (ResTIMG*)dComIfGp_getMain2DArchive()->getResource('TIMG', "wipe_00.bti");
mHawkEyeScrn = NULL;
mHawkEyeRootPane = NULL;
mZoomInOutScrn = NULL;
mZoomInOutRootPane = NULL;
for (int i = 0; i < 3; i++) {
mHawkEyePanes[i] = NULL;
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
mZoomInOutPanes[i][j] = NULL;
}
}
mpWipeTex = new J2DPicture(mp_image);
mpWipeTex->setBlackWhite(JUtility::TColor(0, 0, 0, 0), JUtility::TColor(0, 0, 0, 255));
mWidth = mp_image->width;
mHeight = mp_image->height;
mp_image = (ResTIMG*)dComIfGp_getMain2DArchive()->getResource('TIMG', "tt_block8x8.bti");
mpBlackTex = new J2DPicture(mp_image);
mpBlackTex->setBlackWhite(JUtility::TColor(0, 0, 0, 0), JUtility::TColor(0, 0, 0, 255));
mScale = lit_3756;
mAlpha = FLOAT_LABEL(lit_3757);
mOpenTimer = 0;
field_0x8a = 0;
mProcess = PROC_OPEN;
mIsDead = false;
(this->*init_process[mProcess])();
}
/* 803BB6B4-803BB6D4 0187D4 0020+00 2/2 0/0 0/0 .data __vt__8dScope_c */
SECTION_DATA extern void* __vt__8dScope_c[8] = {
(void*)NULL /* RTTI */, (void*)NULL,
(void*)draw__8dScope_cFv, (void*)__dt__8dScope_cFv,
(void*)_create__11dMeterSub_cFv, (void*)_execute__8dScope_cFUl,
(void*)_delete__11dMeterSub_cFv, (void*)isDead__8dScope_cFv,
};
/* 803BB6D4-803BB700 0187F4 0020+0C 3/3 6/6 0/0 .data __vt__11dMeterSub_c */
SECTION_DATA extern void* __vt__11dMeterSub_c[8 + 3 /* padding */] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)draw__11dMeterSub_cFv,
(void*)__dt__11dMeterSub_cFv,
(void*)_create__11dMeterSub_cFv,
(void*)_execute__11dMeterSub_cFUl,
(void*)_delete__11dMeterSub_cFv,
(void*)isDead__11dMeterSub_cFv,
/* padding */
NULL,
NULL,
NULL,
};
/* 8019396C-80193B90 18E2AC 0224+00 1/0 0/0 0/0 .text __dt__8dScope_cFv */
dScope_c::~dScope_c() {
if (mHawkEyeScrn != NULL) {
delete mHawkEyeScrn;
mHawkEyeScrn = NULL;
}
if (mHawkEyeRootPane != NULL) {
delete mHawkEyeRootPane;
mHawkEyeRootPane = NULL;
}
for (int i = 0; i < 3; i++) {
if (mHawkEyePanes[i] != NULL) {
delete mHawkEyePanes[i];
mHawkEyePanes[i] = NULL;
}
}
if (mZoomInOutScrn != NULL) {
delete mZoomInOutScrn;
mZoomInOutScrn = NULL;
}
if (mZoomInOutRootPane != NULL) {
delete mZoomInOutRootPane;
mZoomInOutRootPane = NULL;
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
if (mZoomInOutPanes[i][j] != NULL) {
delete mZoomInOutPanes[i][j];
mZoomInOutPanes[i][j] = NULL;
}
}
}
delete mpWipeTex;
mpWipeTex = NULL;
delete mpBlackTex;
mpBlackTex = NULL;
dMeter2Info_setScopeZoomPointer(0);
}
/* 80193B90-80193C68 18E4D0 00D8+00 1/0 0/0 0/0 .text _execute__8dScope_cFUl */
int dScope_c::_execute(u32) {
u8 old_proc = mProcess;
(this->*move_process[mProcess])();
if (!dComIfGp_checkCameraAttentionStatus(0, 8)) {
mProcess = PROC_CLOSE;
}
if (mProcess != old_proc) {
(this->*init_process[mProcess])();
}
if (mProcess != PROC_CLOSE) {
dComIfGp_setCStickStatusForce(61, 10, 3);
if (i_dComIfGp_checkPlayerStatus0(0, 0x1000)) {
dComIfGp_setRStatusForce(0x11, 3);
}
}
return 1;
}
/* ############################################################################################## */
/* 80453A20-80453A24 002020 0004+00 1/1 0/0 0/0 .sdata2 @3879 */
SECTION_SDATA2 static f32 lit_3879 = 255.0f;
/* 80453A24-80453A28 002024 0004+00 1/1 0/0 0/0 .sdata2 @3880 */
SECTION_SDATA2 static f32 lit_3880 = 304.0f;
/* 80453A28-80453A2C 002028 0004+00 1/1 0/0 0/0 .sdata2 @3881 */
SECTION_SDATA2 static f32 lit_3881 = 448.0f;
/* 80453A2C-80453A30 00202C 0004+00 1/1 0/0 0/0 .sdata2 @3882 */
SECTION_SDATA2 static f32 lit_3882 = 224.0f;
/* 80453A30-80453A34 002030 0004+00 1/1 0/0 0/0 .sdata2 @3883 */
SECTION_SDATA2 static f32 lit_3883 = 608.0f;
/* 80193C68-80193FA0 18E5A8 0338+00 1/0 0/0 0/0 .text draw__8dScope_cFv */
// matches with literals and when vtables in this TU are fixed
#ifdef NONMATCHING
void dScope_c::draw() {
dComIfGp_getCurrentGrafPort()->setup2D();
f32 temp_f1 = mScale;
f32 temp_f31 = mWidth * temp_f1;
f32 temp_f30 = mHeight * temp_f1;
u8 alpha = mAlpha * 255.0f;
if (i_dComIfGp_checkPlayerStatus0(0, 0x1000)) {
J2DDrawLine(304.0f, mDoGph_gInf_c::getMinYF(), 304.0f, mDoGph_gInf_c::getMaxYF(),
JUtility::TColor(255, 0, 0, alpha), 6);
J2DDrawLine(mDoGph_gInf_c::getMinXF(), 224.0f, mDoGph_gInf_c::getMaxXF(), 224.0f,
JUtility::TColor(255, 0, 0, alpha), 6);
}
mpWipeTex->setAlpha(alpha);
mpBlackTex->setAlpha(alpha);
f32 temp_f29 = 304.0f - temp_f31;
f32 temp_f28 = 304.0f + temp_f31;
f32 temp_f27 = 224.0f - temp_f30;
f32 temp_f26 = 224.0f + temp_f30;
mpWipeTex->draw(temp_f29, temp_f27, temp_f31, temp_f30, false, false, false);
mpWipeTex->draw(304.0f, temp_f27, temp_f31, temp_f30, true, false, false);
mpWipeTex->draw(temp_f29, 224.0f, temp_f31, temp_f30, false, true, false);
mpWipeTex->draw(304.0f, 224.0f, temp_f31, temp_f30, true, true, false);
mpBlackTex->draw(mDoGph_gInf_c::getMinXF(), mDoGph_gInf_c::getMinYF(),
mDoGph_gInf_c::getWidthF(), temp_f27 - mDoGph_gInf_c::getMinYF(), false, false,
false);
mpBlackTex->draw(mDoGph_gInf_c::getMinXF(), temp_f26, mDoGph_gInf_c::getWidthF(),
mDoGph_gInf_c::getMaxYF() - temp_f26, false, false, false);
mpBlackTex->draw(mDoGph_gInf_c::getMinXF(), temp_f27, temp_f29 - mDoGph_gInf_c::getMinXF(),
temp_f26 - temp_f27, false, false, false);
mpBlackTex->draw(temp_f28, temp_f27, mDoGph_gInf_c::getMaxXF() - temp_f28, temp_f26 - temp_f27,
false, false, false);
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
// asm void dScope_c::draw() {
extern "C" asm void draw__8dScope_cFv() {
nofralloc
#include "asm/d/d_scope/draw__8dScope_cFv.s"
}
#pragma pop
#endif
/* 80193FA0-80193FB4 18E8E0 0014+00 1/0 0/0 0/0 .text isDead__8dScope_cFv */
int dScope_c::isDead() {
return mIsDead != false;
}
/* 80193FB4-80193FD0 18E8F4 001C+00 1/0 0/0 0/0 .text open_init__8dScope_cFv */
void dScope_c::open_init() {
mScale = lit_3756;
mAlpha = FLOAT_LABEL(lit_3757);
mOpenTimer = 0;
}
/* ############################################################################################## */
/* 80453A34-80453A38 002034 0004+00 2/2 0/0 0/0 .sdata2 @3902 */
SECTION_SDATA2 static f32 lit_3902 = 1.5f;
/* 80453A38-80453A3C 002038 0004+00 2/2 0/0 0/0 .sdata2 @3903 */
SECTION_SDATA2 static f32 lit_3903 = 5.0f;
/* 80453A3C-80453A40 00203C 0004+00 2/2 0/0 0/0 .sdata2 @3904 */
SECTION_SDATA2 static f32 lit_3904 = 1.0f;
/* 80453A40-80453A48 002040 0008+00 2/2 0/0 0/0 .sdata2 @3906 */
SECTION_SDATA2 static f64 lit_3906 = 4503601774854144.0 /* cast s32 to float */;
/* 80193FD0-80194048 18E910 0078+00 1/0 0/0 0/0 .text open_proc__8dScope_cFv */
// matches with literals
#ifdef NONMATCHING
void dScope_c::open_proc() {
mOpenTimer++;
mScale = 3.0f - (mOpenTimer / 5.0f) * 1.5f;
mAlpha = 1.0f;
if (mOpenTimer >= 5) {
mScale = 1.5f;
mAlpha = 1.0f;
mProcess = PROC_MOVE;
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void dScope_c::open_proc() {
nofralloc
#include "asm/d/d_scope/open_proc__8dScope_cFv.s"
}
#pragma pop
#endif
/* 80194048-8019404C 18E988 0004+00 1/0 0/0 0/0 .text move_init__8dScope_cFv */
void dScope_c::move_init() {}
/* 8019404C-80194050 18E98C 0004+00 1/0 0/0 0/0 .text move_proc__8dScope_cFv */
void dScope_c::move_proc() {}
/* 80194050-80194054 18E990 0004+00 1/0 0/0 0/0 .text close_init__8dScope_cFv */
void dScope_c::close_init() {}
/* 80194054-801940D4 18E994 0080+00 1/0 0/0 0/0 .text close_proc__8dScope_cFv */
// matches with literals
#ifdef NONMATCHING
void dScope_c::close_proc() {
if (mOpenTimer > 0) {
mOpenTimer--;
mScale = 3.0f - (mOpenTimer / 5.0f) * 1.5f;
mAlpha = 1.0f;
} else {
mScale = 3.0f;
mAlpha = 0.0f;
mIsDead = true;
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void dScope_c::close_proc() {
nofralloc
#include "asm/d/d_scope/close_proc__8dScope_cFv.s"
}
#pragma pop
#endif
/* 801940D4-8019411C 18EA14 0048+00 1/0 0/0 0/0 .text __dt__11dMeterSub_cFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
// asm dMeterSub_c::~dMeterSub_c() {
extern "C" asm void __dt__11dMeterSub_cFv() {
nofralloc
#include "asm/d/d_scope/__dt__11dMeterSub_cFv.s"
}
#pragma pop
/* 8019411C-80194124 18EA5C 0008+00 2/0 0/0 0/0 .text _create__11dMeterSub_cFv */
// int dMeterSub_c::_create() {
extern "C" int _create__11dMeterSub_cFv() {
return false;
}
/* 80194124-8019412C 18EA64 0008+00 2/0 0/0 0/0 .text _delete__11dMeterSub_cFv */
// int dMeterSub_c::_delete() {
extern "C" int _delete__11dMeterSub_cFv() {
return false;
}
/* 8019412C-80194130 18EA6C 0004+00 1/0 0/0 0/0 .text draw__11dMeterSub_cFv */
// void dMeterSub_c::draw() {
extern "C" void draw__11dMeterSub_cFv() {
/* empty function */
}
/* 80194130-80194138 18EA70 0008+00 1/0 0/0 0/0 .text _execute__11dMeterSub_cFUl */
// int dMeterSub_c::_execute(u32 param_0) {
extern "C" int _execute__11dMeterSub_cFUl() {
return false;
}
/* 80194138-80194140 18EA78 0008+00 1/0 3/0 0/0 .text isDead__11dMeterSub_cFv */
// int dMeterSub_c::isDead() {
extern "C" int isDead__11dMeterSub_cFv() {
return false;
}
|