0047A537
|
6A
01
| push
1
|
0047A539
|
8DBE
04020000
| lea edi,dword ptr ds:[esi
+
204
] | edi:
"MajiroArcV3.000"
, esi
+
204
:
"MajiroArcV3.000"
0047A53F
|
6A
1C
| push
1C
|
0047A541
|
57
| push edi | edi:
"MajiroArcV3.000"
0047A542
| E8 C2100100 | call <polaris_chs.sub_48B609> | fread
/
/
read scenerio mjo
char
*
__usercall sub_440AB0@<eax>(
int
a1@<ebx>,
int
a2@<edi>,
int
a3@<esi>, char
*
FullPath)
{
char
*
v4;
/
/
ecx
char
*
context;
/
/
esi
int
v7;
/
/
ebx
int
v8;
/
/
edx
int
v9;
/
/
edx
FILE
*
fp;
/
/
eax MAPDST
char
*
v12;
/
/
ecx
char
*
v13;
/
/
edx
bool
v14;
/
/
cf
char
*
v15;
/
/
ecx
char
*
v16;
/
/
edx
void
*
buf_mjoblock;
/
/
eax
void
*
buf_mjo;
/
/
eax
char
*
v19;
/
/
ecx
char v20;
/
/
al
size_t mjo_block_size;
/
/
[esp
-
1Ch
] [ebp
-
32Ch
]
size_t mjo_size;
/
/
[esp
-
1Ch
] [ebp
-
32Ch
]
int
v28;
/
/
[esp
+
4h
] [ebp
-
30Ch
]
int
v29;
/
/
[esp
+
4h
] [ebp
-
30Ch
]
int
v30;
/
/
[esp
+
8h
] [ebp
-
308h
]
char
Buffer
[
255
];
/
/
[esp
+
Ch] [ebp
-
304h
] BYREF
char v32;
/
/
[esp
+
10Bh
] [ebp
-
205h
] BYREF
char mjo_Filename[
512
];
/
/
[esp
+
10Ch
] [ebp
-
204h
] BYREF
_splitpath(FullPath,
0
,
0
, mjo_Filename,
0
);
v4
=
&v32;
while
(
*
+
+
v4 )
;
strcpy(v4,
".mjo"
);
tolower((unsigned __int8
*
)mjo_Filename);
if
( strlen(mjo_Filename) >
0x7F
)
sub_441150(
"ファイル名[%s]が長すぎます%d文字以内にしてください。"
,
(
int
)mjo_Filename,
127
,
(
int
)FullPath,
v28);
context
=
dword_4DC350;
v7
=
0
;
v30
=
0
;
if
( !dword_4DC350 )
goto LABEL_12;
while
( sub_47C550(context, mjo_Filename) )
/
/
strcmp?
{
context
=
(char
*
)
*
((_DWORD
*
)context
+
0x2A
);
if
( !context )
{
LABEL_13:
context
=
(char
*
)try_malloc(
0xB0
);
memset(context,
0
,
0xB0u
);
while
(
1
)
{
if
( sub_47BE30(mjo_Filename) )
/
/
if
not
find target mjo, to load scenario
goto LABEL_16;
sub_47A310(
"scenario"
,
0
);
/
/
test scenario files
sub_47A310(
"scenario9"
,
0
);
sub_47A310(
"scenario8"
,
0
);
sub_47A310(
"scenario7"
,
0
);
sub_47A310(
"scenario6"
,
0
);
sub_47A310(
"scenario5"
,
0
);
sub_47A310(
"scenario4"
,
0
);
sub_47A310(
"scenario3"
,
0
);
sub_47A310(
"scenario2"
,
0
);
sub_47A310(
"scenario1"
,
0
);
if
( sub_47BE30(mjo_Filename) )
{
LABEL_16:
*
((_DWORD
*
)context
+
0x20
)
=
((
int
(__cdecl
*
)(LPCSTR))sub_479FE0)(mjo_Filename);
*
((_DWORD
*
)context
+
0x21
)
=
v9;
fp
=
(
FILE
*
)try_fopen(a2, (
int
)context, mjo_Filename,
"rb"
);
/
/
fopen
if
( fp && fread(
Buffer
,
0x10u
,
1u
, fp)
=
=
1
)
/
/
MajiroObjV1.
000
{
v12
=
off_4C7ABC[
0
];
v13
=
Buffer
;
a2
=
12
;
do
{
if
(
*
(_DWORD
*
)v12 !
=
*
(_DWORD
*
)v13 )
{
v15
=
off_4C7AC0;
v16
=
Buffer
;
a2
=
12
;
while
(
*
(_DWORD
*
)v15
=
=
*
(_DWORD
*
)v16 )
{
v15
+
=
4
;
v16
+
=
4
;
v14
=
(unsigned
int
)a2 <
4
;
a2
-
=
4
;
if
( v14 )
{
v29
=
1
;
goto LABEL_26;
}
}
goto LABEL_32;
}
v12
+
=
4
;
v13
+
=
4
;
v14
=
(unsigned
int
)a2 <
4
;
a2
-
=
4
;
}
while
( !v14 );
v29
=
0
;
LABEL_26:
if
( fread(context
+
0x94
,
4u
,
1u
, fp)
=
=
1
&& fread(context
+
0x98
,
4u
,
1u
, fp)
=
=
1
)
/
/
read n1, n2
{
a2
=
(
int
)(context
+
0x8C
);
if
( fread(context
+
0x8C
,
4u
,
1u
, fp)
=
=
1
)
/
/
read mjo_block_num
{
buf_mjoblock
=
try_malloc(
8
*
*
(_DWORD
*
)a2
+
0x20
);
/
/
malloc
mjo_block_size
=
8
*
*
(_DWORD
*
)a2;
*
((_DWORD
*
)context
+
0x28
)
=
buf_mjoblock;
if
( fread(buf_mjoblock, mjo_block_size,
1u
, fp)
=
=
1
)
/
/
read mjo_block
{
a2
=
(
int
)(context
+
0x90
);
if
( fread(context
+
0x90
,
4u
,
1u
, fp)
=
=
1
)
{
buf_mjo
=
try_malloc(
*
(_DWORD
*
)a2
+
0x20
);
/
/
malloc
mjo_size
=
*
(_DWORD
*
)a2;
*
((_DWORD
*
)context
+
0x29
)
=
buf_mjo;
if
( fread(buf_mjo, mjo_size,
1u
, fp)
=
=
1
)
{
fclose(fp);
if
( v29 )
sub_478E70(
*
((__m128i
*
*
)context
+
0x29
),
*
((_DWORD
*
)context
+
0x24
));
/
/
decrypt mjo, dword
0x24
is
context
+
0x90
v19
=
mjo_Filename;
do
{
v20
=
*
v19
+
+
;
v19[context
-
mjo_Filename
-
1
]
=
v20;
}
while
( v20 );
*
((_DWORD
*
)context
+
0x22
)
=
sub_478E10(context);
if
( !v30 )
{
*
((_DWORD
*
)context
+
0x2A
)
=
dword_4DC350;
dword_4DC350
=
context;
}
*
((_DWORD
*
)context
+
0x27
)
=
sub_43A370(context,
*
((_DWORD
*
)context
+
0x26
));
return
context;
}
}
}
}
}
}
LABEL_32:
v7
=
v30;
}
sub_4793F0(
"MajiroObj : ファイル [%s] の読み込みで失敗しました"
, (
int
)FullPath, a2, a3, a1);
if
(
*
((_DWORD
*
)context
+
0x28
) )
free(
*
((void
*
*
)context
+
0x28
));
if
(
*
((_DWORD
*
)context
+
0x29
) )
free(
*
((void
*
*
)context
+
0x29
));
free(context);
LABEL_12:
if
( !v7 )
goto LABEL_13;
}
}
}
if
(
*
((_DWORD
*
)context
+
0x20
) !
=
((
int
(__cdecl
*
)(LPCSTR))sub_479FE0)(mjo_Filename)
||
*
((_DWORD
*
)context
+
0x21
) !
=
v8 )
{
v7
=
1
;
v30
=
1
;
free(
*
((void
*
*
)context
+
0x28
));
free(
*
((void
*
*
)context
+
0x29
));
goto LABEL_12;
}
return
context;
}