Last active
November 12, 2020 20:29
-
-
Save leoetlino/0afb4212846d27085a8bde0fb57fe7f1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Bxml *__fastcall ActorParamMgr::loadActorLink(ksys::act::ActorParamMgr *this, ActorParam *param, int idx, const char *dirName, char *extension, char *name, ksys::res::Handle *handle, __int64 a8, int load_req_c) | |
{ | |
// [COLLAPSED LOCAL DECLARATIONS. PRESS KEYPAD CTRL-"+" TO EXPAND] | |
path.s._.cstr = path.data; | |
_name.vptr = &sead::SafeString::vt; | |
_name.cstr = name; | |
_ext.vptr = &sead::SafeString::vt; | |
_ext.cstr = extension; | |
path.s._.vptr = &`vtable for sead::BufferedSafeStringBase<char>; | |
path.s.length = 0x80; | |
sead::BufferedSafeStringBase<char>::assureTerminationImpl_(&path.s); | |
*path.s._.cstr = sead::SafeStringBase<char>::cNullChar; | |
path.s._.vptr = &sead::FixedSafeString80::vt; | |
_name.vptr->assureTermination(&_name); | |
_name.vptr->assureTermination(&_name); | |
if ( _name.cstr != "Dummy" ) | |
{ | |
v15 = 0LL; | |
do | |
{ | |
v16 = (unsigned __int8)_name.cstr[v15]; | |
if ( v16 != (unsigned __int8)aDummy[v15] ) | |
break; | |
if ( v16 == (unsigned __int8)sead::SafeStringBase<char>::cNullChar ) | |
goto Dummy; | |
++v15; | |
} | |
while ( v15 < 0x80001 ); | |
if ( *_name.cstr != sead::SafeStringBase<char>::cNullChar ) | |
{ | |
temp_handle = ksys::act::ActorParam::allocHandle(param); | |
sead::BufferedSafeStringBase<char>::format(&path.s, "%s/%s.b%s", dirName, name, extension); | |
ksys::res::SimpleLoadRequest::SimpleLoadRequest((ResourceLoadArg2 *)&arg); | |
arg._.field_8 = 1; | |
actor_name = ¶m->_.actorName.s._; | |
sead::SafeStringBase<char>::operator=(&arg._.requester, ¶m->_.actorName.s._); | |
sead::SafeStringBase<char>::operator=((sead::SafeStringBase *)&arg.path, &path.s._); | |
arg._.field_C = 2; | |
raw_res = ksys::res::Handle::load(temp_handle, &path.s._, &arg, 0LL); | |
v27 = __ldar((unsigned __int8 *)&unk_7102621020); | |
bxml = (Bxml *)raw_res; // DynamicCast | |
if ( !((unsigned __int64)&unk_7102621020 & 1) && _cxa_guard_acquire_0(&unk_7102621020) ) | |
{ | |
Bxml::rttiInfo = (__int64)&off_71023D0DE8; | |
_cxa_guard_release_0(&unk_7102621020); | |
} | |
if ( bxml ) | |
{ | |
if ( ((__int64 (__fastcall *)(Bxml *, __int64 *))bxml->io._IParameterIO.vtable->b.dtor)(bxml, &Bxml::rttiInfo) & 1 ) | |
bxml = (Bxml *)((char *)bxml - 0x278); | |
else | |
bxml = 0LL; | |
} | |
ksys::res::ILoadRequest::~ILoadRequest(&arg); | |
if ( bxml ) | |
goto LABEL_43; | |
if ( !ksys::res::Handle::isSuccess(handle) ) | |
ksys::act::ActorParamMgr::loadActorPack(this, handle, actor_name, load_req_c); | |
ksys::res::LoadRequest::LoadRequest(&arg); | |
a5.vptr = &sead::SafeString::vt; | |
a5.cstr = (char *)dirName; | |
a6.vptr = &sead::SafeString::vt; | |
a6.cstr = extension; | |
a7.vptr = &sead::SafeString::vt; | |
a7.cstr = name; | |
ksys::act::ActorParamMgr::makeFileLoadPathAndReq( | |
v28, | |
&path.s, | |
&arg, | |
v29, | |
&a5, | |
&a6, | |
&a7, | |
handle, | |
load_req_c, | |
actor_name); | |
v30 = ksys::res::Handle::load(temp_handle, &path.s._, &arg, 0LL); | |
v32 = __ldar(v31); | |
v33 = v30; | |
if ( !((unsigned __int8)v31 & 1) && _cxa_guard_acquire_0(&unk_7102621020) ) | |
{ | |
Bxml::rttiInfo = (__int64)&off_71023D0DE8; | |
_cxa_guard_release_0(&unk_7102621020); | |
} | |
if ( !v33 | |
|| !v33->vtable->checkDerivedRuntimeTypeInfo(v33, &Bxml::rttiInfo) | |
|| (bxml = (Bxml *)&v33[0xFFFFFFEC]._) == 0LL ) | |
{ | |
ksys::res::Handle::isSuccess(temp_handle); | |
if ( !arg.mPackHandle ) | |
{ | |
LABEL_41: | |
bxml = 0LL; | |
goto LABEL_42; | |
} | |
arg.mPackHandle = 0LL; | |
arg.field_24 = 0; | |
v34 = ksys::res::Handle::load(temp_handle, &path.s._, &arg, 0LL); | |
v36 = __ldar(v35); | |
v37 = v34; | |
if ( !((unsigned __int8)v35 & 1) && _cxa_guard_acquire_0(&unk_7102621020) ) | |
{ | |
Bxml::rttiInfo = (__int64)&off_71023D0DE8; | |
_cxa_guard_release_0(&unk_7102621020); | |
} | |
if ( !v37 | |
|| !v37->vtable->checkDerivedRuntimeTypeInfo(v37, &Bxml::rttiInfo) | |
|| (bxml = (Bxml *)&v37[0xFFFFFFEC]._) == 0LL ) | |
{ | |
ksys::res::Handle::isSuccess(temp_handle); | |
goto LABEL_41; | |
} | |
} | |
LABEL_42: | |
ksys::res::ILoadRequest::~ILoadRequest(&arg); | |
if ( !bxml ) | |
{ | |
ksys::act::ActorParam::freeLastHandle(param); | |
goto LABEL_53; | |
} | |
LABEL_43: | |
if ( idx == 9 ) | |
{ | |
ksys::res::Handle::requestUnload2(temp_handle); | |
return bxml; | |
} | |
goto LABEL_45; | |
} | |
} | |
Dummy: | |
sead::BufferedSafeStringBase<char>::format(&path.s, "%s/%s.b%s", dirName, name, extension); | |
v17 = idx; | |
if ( (unsigned int)idx >= 0x1C ) | |
v17 = 0LL; | |
v18 = ksys::res::Handle::getResource(&this->res2Array[v17]); | |
v19 = __ldar((unsigned __int8 *)&unk_7102621020); | |
v20 = v18; | |
if ( !((unsigned __int64)&unk_7102621020 & 1) && _cxa_guard_acquire_0(&unk_7102621020) ) | |
{ | |
Bxml::rttiInfo = (__int64)&off_71023D0DE8; | |
_cxa_guard_release_0(&unk_7102621020); | |
} | |
if ( v20 ) | |
{ | |
if ( v20->vtable->checkDerivedRuntimeTypeInfo(v20, &Bxml::rttiInfo) ) | |
{ | |
bxml = (Bxml *)&v20[0xFFFFFFEC]._; | |
if ( bxml ) | |
{ | |
if ( idx == 9 ) | |
return bxml; | |
LABEL_45: | |
v38 = bxml->io.field_1E0.s._.cstr; | |
path.s._.vptr->assureTermination((const sead::SafeString *)&path); | |
v39 = path.s._.cstr; | |
if ( v38 != path.s._.cstr ) | |
{ | |
path.s._.vptr->assureTermination((const sead::SafeString *)&path); | |
v40 = 0LL; | |
v41 = path.s._.cstr + 1; | |
while ( path.s._.cstr[v40] != sead::SafeStringBase<char>::cNullChar ) | |
{ | |
if ( v41[v40] == sead::SafeStringBase<char>::cNullChar ) | |
goto LABEL_76; | |
if ( v41[v40 + 1] == sead::SafeStringBase<char>::cNullChar ) | |
goto LABEL_77; | |
v42 = v40 + 2; | |
v40 += 3LL; | |
if ( v42 >= 0x80000 ) | |
{ | |
LODWORD(v40) = 0; | |
break; | |
} | |
} | |
LABEL_78: | |
v51 = bxml->io.field_1E0.s.length; | |
if ( (signed int)v40 >= v51 ) | |
LODWORD(v40) = v51 - 1; | |
v52 = (signed int)v40; | |
memcpy_0(v38, v39, (signed int)v40); | |
v38[v52] = sead::SafeStringBase<char>::cNullChar; | |
goto LABEL_81; | |
} | |
goto LABEL_81; | |
} | |
} | |
} | |
LABEL_53: | |
_ext.vptr->assureTermination(&_ext); | |
_ext.vptr->assureTermination(&_ext); | |
if ( _ext.cstr != "fevfl" ) | |
{ | |
v43 = 0LL; | |
do | |
{ | |
v44 = (unsigned __int8)_ext.cstr[v43]; | |
if ( v44 != (unsigned __int8)aFevfl[v43] ) | |
break; | |
if ( v44 == (unsigned __int8)sead::SafeStringBase<char>::cNullChar ) | |
goto LABEL_59; | |
++v43; | |
} | |
while ( v43 < 0x80001 ); | |
param->field_A = 1; | |
} | |
LABEL_59: | |
v45 = idx; | |
if ( (unsigned int)idx >= 0x1C ) | |
v45 = 0LL; | |
v46 = ksys::res::Handle::getResource(&this->res2Array[v45]); | |
v47 = __ldar((unsigned __int8 *)&unk_7102621020); | |
v48 = v46; | |
if ( !((unsigned __int64)&unk_7102621020 & 1) && _cxa_guard_acquire_0(&unk_7102621020) ) | |
{ | |
Bxml::rttiInfo = (__int64)&off_71023D0DE8; | |
_cxa_guard_release_0(&unk_7102621020); | |
} | |
if ( v48 && v48->vtable->checkDerivedRuntimeTypeInfo(v48, &Bxml::rttiInfo) ) | |
bxml = (Bxml *)&v48[0xFFFFFFEC]._; | |
else | |
bxml = 0LL; | |
arg._.vtable = (ksys::res::ILoadRequest::vtable *)&`vtable for sead::BufferedSafeStringBase<char>; | |
*(_QWORD *)&arg._.field_8 = (char *)&arg + 0x14; | |
LODWORD(arg._.requester.vptr) = 0x80; | |
sead::BufferedSafeStringBase<char>::assureTerminationImpl_((sead::BufferedSafeString *)&arg); | |
**(_BYTE **)&arg._.field_8 = sead::SafeStringBase<char>::cNullChar; | |
arg._.vtable = (ksys::res::ILoadRequest::vtable *)&sead::FixedSafeString80::vt; | |
sead::BufferedSafeStringBase<char>::format((sead::BufferedSafeString *)&arg, "%s/Dummy.b%s", dirName, extension); | |
if ( !bxml ) | |
return bxml; | |
v38 = bxml->io.field_1E0.s._.cstr; | |
arg._.vtable->dtorDelete(&arg); | |
v39 = *(char **)&arg._.field_8; | |
if ( v38 != *(char **)&arg._.field_8 ) | |
{ | |
arg._.vtable->dtorDelete(&arg); | |
v40 = 0LL; | |
v49 = *(_QWORD *)&arg._.field_8 + 1LL; | |
while ( *(unsigned __int8 *)(*(_QWORD *)&arg._.field_8 + v40) != (unsigned __int8)sead::SafeStringBase<char>::cNullChar ) | |
{ | |
if ( *(unsigned __int8 *)(v49 + v40) == (unsigned __int8)sead::SafeStringBase<char>::cNullChar ) | |
{ | |
LABEL_76: | |
LODWORD(v40) = v40 + 1; | |
goto LABEL_78; | |
} | |
if ( *(unsigned __int8 *)(v49 + v40 + 1) == (unsigned __int8)sead::SafeStringBase<char>::cNullChar ) | |
{ | |
LABEL_77: | |
LODWORD(v40) = v40 + 2; | |
goto LABEL_78; | |
} | |
v50 = v40 + 2; | |
v40 += 3LL; | |
if ( v50 >= 0x80000 ) | |
{ | |
LODWORD(v40) = 0; | |
goto LABEL_78; | |
} | |
} | |
goto LABEL_78; | |
} | |
LABEL_81: | |
if ( idx <= 0x18 ) | |
ksys::act::ActorParam::setResource(param, idx, &bxml->io); | |
return bxml; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment