Created
February 24, 2019 18:30
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
void action::ItemAmiiboCreateFromDropTable::doSpawn(const sead::SafeString& drop, BaseProcHandle* procHandle, const Vec3* additionalPosOffset) | |
{ | |
if (!drop) | |
return; | |
const bool isImportant = ActorInfoData::sInstance->hasTagByName(drop.c_str(), Tag_Important); | |
if (isImportant && GameDataMgr::sInstance && GameDataMgr::sInstance->getFlagBool("IsGet_" + drop)) | |
return; | |
if ( sead::SafeStringBase<char>::findIndex(drop, "GameRomHorse") != -1 ) | |
setFlag_IsAmiiboDrop_GameRomHorseItem(true, 0); | |
ActorInstParams params; | |
Vec3 posOffset; | |
this->calculateCreatePositionOffset(&posOffset); | |
posOffset.x += additionalPosOffset->x; | |
posOffset.y += additionalPosOffset->y; | |
posOffset.z += additionalPosOffset->z; | |
const Bdrop* bdrop = this->actor->actorParam->dropTable; | |
bool spawnInTBox = ActorInfoData::sInstance->hasTagByName(drop.c_str(), Tag_AmiiboTreasure); | |
if ( bdrop ) | |
{ | |
// Daruk amiibo | |
if ( bdrop->resourceName == "Actor/DropTable/Item_Amiibo_DropTable_012" ) | |
{ | |
if (drop.startsWith("Item_Ore_") && drop != "Item_Ore_A") // Ore and not a Diamond | |
spawnInTBox = false; | |
} | |
// Revali amiibo | |
if ( bdrop->resourceName == "Actor/DropTable/Item_Amiibo_DropTable_013" ) | |
{ | |
if ( drop.startsWith("Obj_BombArrow") ) | |
spawnInTBox = false; | |
} | |
// Urbosa amiibo | |
if ( bdrop->resourceName == "Actor/DropTable/Item_Amiibo_DropTable_015" ) | |
{ | |
if ( drop.startsWith("Obj_ElectricArrow") ) | |
spawnInTBox = false; | |
} | |
} | |
auto getCreatePos = [&]() { | |
// Randomize create position, accounting for container objects | |
if ( !spawnInTBox ) | |
{ | |
const int breakBoxIronIdx = drop.findIndex("Obj_BreakBoxIron"); | |
const int kibakoContainIdx = drop.findIndex("Kibako_Contain"); | |
float createArea = *this->createArea; | |
if ( kibakoContainIdx != -1 || breakBoxIronIdx != -1 ) | |
createArea *= 2; | |
int deltaIdx = this->randomPositionDeltaIdx++; | |
if ( deltaIdx >= 50 ) | |
deltaIdx = 0; | |
posOffset.x += createArea * this->randomPositionDelta[deltaIdx].x; | |
posOffset.z += createArea * this->randomPositionDelta[deltaIdx].z; | |
posOffset.y += createArea * (2*getRandomFloat() - 1.0); | |
if ( breakBoxIronIdx != -1 ) | |
posOffset.y *= 0.5; | |
if ( kibakoContainIdx != -1 ) | |
posOffset.y *= 0.7; | |
if ( drop.findIndex("BarrelBomb") != -1 ) | |
{ | |
posOffset.x = fmaxf(posOffset.x, 1.5); | |
posOffset.z = fmaxf(posOffset.z, 1.5); | |
} | |
} | |
// More position calculation | |
const float norm = posOffset.norm(); | |
if ( norm > 0.0 ) | |
{ | |
posOffset.x /= norm; | |
posOffset.y /= norm; | |
posOffset.z /= norm; | |
} | |
Vec3 createPos = this->actor->position.toVec3() + posOffset; | |
Vec3 createPos2 = this->actor->position.toVec3() + posOffset; | |
// stuff that calculates positions | |
sub_710072E280(&createPos, &createPos2, &posOffset, norm - 1.0); | |
if ( ActorInfoData::sInstance->hasTagByName(drop.c_str(), Tag_AmiiboFitGround) ) | |
{ | |
Vec3 offset{0.0, -1.0, 0.0}; | |
sub_710072E280(&createPos, &createPos, &offset, 30.0); | |
createPos.y += 0.1; | |
} | |
else | |
{ | |
createPos -= fminf(norm, 0.5) * posOffset; | |
} | |
return createPos; | |
}; | |
const Vec3 createPos = getCreatePos(); | |
params.add(createPos, "@P"); | |
params.addBoolAITree(true, "IsAmiibo"); | |
// if the Amiibo key exists in the "drops" dictionary | |
if ( ActorInfoData::sInstance->isAmiiboDrop(drop.c_str(), "Amiibo") ) | |
{ | |
if ( this->dropListType == AmiiboDropListType::Normal ) | |
params.add("Amiibo", "DropTable"); | |
else | |
params.add("Amiibo_After", "DropTable"); | |
} | |
const char* finalActorName = nullptr; | |
Vec3 rotate; | |
if ( spawnInTBox ) | |
{ | |
this->field_A78 = 1; | |
params.add(drop, "DropActor"); | |
if ( isWeaponActorProfile(drop) ) | |
params.add(2, "SharpWeaponJudgeType"); | |
v92 = sead::Random::getU32(sead::GlobalRandom::sInstance); | |
rotate.z = 0.05; | |
rotate.x = 0.0; | |
rotate.y = getRandomFloat() * 2 * PI; | |
params.add(rotate, "@R"); | |
finalActorName = "TBox_Field_Iron"; | |
} | |
else | |
{ | |
if ( ActorInfoData::sInstance->hasTagByName(drop.c_str(), Tag_AmiiboFitGround) | |
|| ActorInfoData::sInstance->hasTagByName(drop.c_str(), Tag_Rupee) ) | |
{ | |
rotate.x = 0.0; | |
rotate.y = getRandomFloat() * 2 * PI; | |
rotate.z = 0.0; | |
} | |
else | |
{ | |
rotate.x = getRandomFloat() * 2 * PI; | |
rotate.y = getRandomFloat() * 2 * PI; | |
rotate.z = getRandomFloat() * 2 * PI; | |
} | |
params.add(rotate, "@R"); | |
finalActorName = drop.c_str(); | |
} | |
ActorCreator::sInstance->requestActorCreate(finalActorName, | |
ActorHeapUtil::sInstance->forBaseProcDualHeap, procHandle, params, 0LL, 1); | |
} |
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
void __fastcall AI_Action_ItemAmiiboCreateFromDropTable::doSpawn(AI_Action_ItemAmiiboCreateFromDropTable *this, sead::SafeStringBase *drop, BaseProcHandle *procHandle, Vec3 *a4) | |
{ | |
// [COLLAPSED LOCAL DECLARATIONS. PRESS KEYPAD CTRL-"+" TO EXPAND] | |
if ( *(unsigned __int8 *)drop->cstr != (unsigned __int8)sead::SafeStringBase<char>::cNullChar ) | |
{ | |
v8 = ActorInfoData::sInstance; | |
drop->vptr->assureTermination(drop); | |
if ( !ActorInfoData::hasTagByName(v8, drop->cstr, Tag_Important) ) | |
goto LABEL_139; | |
flag.vptr = (sead::SafeStringBase::vtable *)v106.dataStart; | |
createPos2.str.vptr = &sead::SafeString::vt; | |
createPos2.str.cstr = "IsGet_"; | |
flag.vptr = (sead::SafeStringBase::vtable *)&`vtable for'sead::BufferedSafeStringBase<char>; | |
*(_DWORD *)&v106.items = 0x80; | |
sead::BufferedSafeStringBase<char>::assureTerminationImpl_((sead::BufferedSafeString *)&flag); | |
v9 = flag.cstr; | |
flag.vptr = (sead::SafeStringBase::vtable *)&off_71023619F8; | |
createPos2.str.vptr->assureTermination((const sead::SafeString *)&createPos2); | |
v10 = createPos2.str.cstr; | |
if ( v9 != createPos2.str.cstr ) | |
{ | |
createPos2.str.vptr->assureTermination((const sead::SafeString *)&createPos2); | |
v11 = 0LL; | |
v12 = createPos2.str.cstr + 1; | |
while ( createPos2.str.cstr[v11] != sead::SafeStringBase<char>::cNullChar ) | |
{ | |
if ( v12[v11] == sead::SafeStringBase<char>::cNullChar ) | |
{ | |
LODWORD(v11) = v11 + 1; | |
break; | |
} | |
if ( v12[v11 + 1] == sead::SafeStringBase<char>::cNullChar ) | |
{ | |
LODWORD(v11) = v11 + 2; | |
break; | |
} | |
v13 = v11 + 2; | |
v11 += 3LL; | |
if ( v13 >= 0x80000 ) | |
{ | |
LODWORD(v11) = 0; | |
break; | |
} | |
} | |
if ( (signed int)v11 >= *(_DWORD *)&v106.items ) | |
LODWORD(v11) = *(_DWORD *)&v106.items - 1; | |
v14 = (signed int)v11; | |
memcpy_0(v9, v10, (signed int)v11); | |
v9[v14] = sead::SafeStringBase<char>::cNullChar; | |
} | |
v15 = flag.cstr; | |
flag.vptr = &sead::FixedSafeString80::vt; | |
sead::BufferedSafeStringBase<char>::assureTerminationImpl_((sead::BufferedSafeString *)&flag); | |
v16 = 0LL; | |
v17 = flag.cstr + 1; | |
while... | |
v19 = v16 & ~((signed int)v16 >> 0x1F); | |
drop->vptr->assureTermination(drop); | |
v20 = 0LL; | |
v21 = drop->cstr + 1; | |
while... | |
if... | |
if... | |
LOBYTE(createPos2.str.vptr) = 0; | |
if ( !GameDataMgr::sInstance | |
|| (TriggerParam::getBoolByKey_0( | |
*GameDataMgr::sInstance->param.param, | |
(bool *)&createPos2, | |
&flag, | |
GameDataMgr::sInstance->param.x), | |
!LOBYTE(createPos2.str.vptr)) ) | |
{ | |
LABEL_139: | |
flag.vptr = &sead::SafeString::vt; | |
flag.cstr = "GameRomHorse"; | |
if ( sead::SafeStringBase<char>::findIndex(drop, &flag) != 0xFFFFFFFF ) | |
setFlag_IsAmiiboDrop_GameRomHorseItem(1LL, 0); | |
flag.vptr = (sead::SafeStringBase::vtable *)&ActorInstParams::vt; | |
flag.cstr = 0LL; | |
ActorInstParams::Buf::clear(&v106); | |
v25 = (float *)this->_._.actor.player; | |
v26 = v25[0xE9]; | |
v27 = v25[0xED]; | |
v28 = v25[0xF1]; | |
posOffset.vec3.x = 0.0; | |
posOffset.str.vptr = 0LL; | |
AI_Action_ItemAmiiboCreateFromDropTable::calculateCreatePosition(this, (Vec3 *)&posOffset); | |
v29 = posOffset.vec3.x + a4->x; | |
posOffset.vec3.x = posOffset.vec3.x + a4->x; | |
posOffset.vec3.y = posOffset.vec3.y + a4->y; | |
v30 = a4->z; | |
actorInfoData = ActorInfoData::sInstance; | |
v32 = posOffset.vec3.z + v30; | |
posOffset.vec3.z = posOffset.vec3.z + v30; | |
drop->vptr->assureTermination(drop); | |
isAmiiboTreasure = ActorInfoData::hasTagByName(actorInfoData, drop->cstr, Tag_AmiiboTreasure); | |
bdrop = this->_._.actor.player->_._._.g.a.actorParam->_.dropTable; | |
isAmiiboTreasure_ = isAmiiboTreasure; | |
if ( bdrop ) | |
{ | |
resourceNameC = bdrop->resourceName.s._.cstr; | |
if ( sead::SafeStringBase<char>::cNullChar == 0x41 ) | |
{ | |
LABEL_44: | |
v37 = "tem_Ore_"; | |
v38 = drop->cstr; | |
v39 = 'I'; | |
v40 = drop->cstr; | |
while ( (unsigned __int8)*v40 == v39 ) | |
{ | |
v41 = (unsigned __int8)*v37++; | |
v39 = v41; | |
++v40; | |
if ( v41 == (unsigned __int8)sead::SafeStringBase<char>::cNullChar ) | |
{ | |
v42 = "tem_Ore_A"; | |
v43 = 0x49; | |
while ( (unsigned __int8)*v38 == v43 ) | |
{ | |
v44 = (unsigned __int8)*v42++; | |
v43 = v44; | |
++v38; | |
if ( v44 == (unsigned __int8)sead::SafeStringBase<char>::cNullChar ) | |
goto isOreA; | |
} | |
isAmiiboTreasure_ = 0; | |
break; | |
} | |
} | |
} | |
else | |
{ | |
v45 = "ctor/DropTable/Item_Amiibo_DropTable_012"; | |
v46 = 0x41; | |
v47 = resourceNameC; | |
while ( (unsigned __int8)*v47 == v46 ) | |
{ | |
v48 = (unsigned __int8)*v45++; | |
v46 = v48; | |
++v47; | |
if ( v48 == (unsigned __int8)sead::SafeStringBase<char>::cNullChar ) | |
{ | |
if ( sead::SafeStringBase<char>::cNullChar != 0x49 ) | |
goto LABEL_44; | |
break; | |
} | |
} | |
} | |
isOreA: | |
if ( sead::SafeStringBase<char>::cNullChar == 0x41 ) | |
{ | |
LABEL_60: | |
v49 = drop->cstr; | |
v50 = "bj_BombArrow"; | |
v51 = 0x4F; | |
while ( (unsigned __int8)*v49 == v51 ) | |
{ | |
v52 = (unsigned __int8)*v50++; | |
v51 = v52; | |
++v49; | |
if ( v52 == (unsigned __int8)sead::SafeStringBase<char>::cNullChar ) | |
{ | |
isAmiiboTreasure_ = 0; | |
if ( sead::SafeStringBase<char>::cNullChar == 0x41 ) | |
goto LABEL_71; | |
goto LABEL_75; | |
} | |
} | |
} | |
else | |
{ | |
v53 = "ctor/DropTable/Item_Amiibo_DropTable_013"; | |
v54 = 'A'; | |
v55 = resourceNameC; | |
while ( (unsigned __int8)*v55 == v54 ) | |
{ | |
v56 = (unsigned __int8)*v53++; | |
v54 = v56; | |
++v55; | |
if ( v56 == (unsigned __int8)sead::SafeStringBase<char>::cNullChar ) | |
{ | |
if ( sead::SafeStringBase<char>::cNullChar != 'O' ) | |
goto LABEL_60; | |
isAmiiboTreasure_ = 0; | |
break; | |
} | |
} | |
} | |
if ( sead::SafeStringBase<char>::cNullChar == 0x41 ) | |
{ | |
LABEL_71: | |
v57 = drop->cstr; | |
v58 = "bj_ElectricArrow"; | |
v59 = 0x4F; | |
while ( (unsigned __int8)*v57 == v59 ) | |
{ | |
v60 = (unsigned __int8)*v58++; | |
v59 = v60; | |
++v57; | |
if ( v60 == (unsigned __int8)sead::SafeStringBase<char>::cNullChar ) | |
goto LABEL_81; | |
} | |
} | |
else | |
{ | |
LABEL_75: | |
v61 = "ctor/DropTable/Item_Amiibo_DropTable_015"; | |
v62 = 0x41; | |
while ( (unsigned __int8)*resourceNameC == v62 ) | |
{ | |
v63 = (unsigned __int8)*v61++; | |
v62 = v63; | |
++resourceNameC; | |
if ( v63 == (unsigned __int8)sead::SafeStringBase<char>::cNullChar ) | |
{ | |
if ( sead::SafeStringBase<char>::cNullChar != 0x4F ) | |
goto LABEL_71; | |
goto LABEL_81; | |
} | |
} | |
} | |
if ( !isAmiiboTreasure_ ) | |
goto LABEL_81; | |
} | |
else if ( !isAmiiboTreasure ) | |
{ | |
LABEL_81: | |
createPos2.str.vptr = &sead::SafeString::vt; | |
createPos2.str.cstr = "Obj_BreakBoxIron"; | |
v64 = sead::SafeStringBase<char>::findIndex(drop, &createPos2.str); | |
createPos2.str.vptr = &sead::SafeString::vt; | |
createPos2.str.cstr = "Kibako_Contain"; | |
v65 = sead::SafeStringBase<char>::findIndex(drop, &createPos2.str); | |
v66 = *this->createArea; | |
v67 = (unsigned __int8)this->amiiboRandomPosDeltaIdx[0]; | |
v68 = v65; | |
this->amiiboRandomPosDeltaIdx[0] = v67 + 1; | |
if ( (v65 & v64) == 0xFFFFFFFF ) | |
v69 = v66; | |
else | |
v69 = v66 + v66; | |
if ( (unsigned int)v67 >= 0x32 ) | |
v67 = 0LL; | |
v70 = (AI_Action_ItemAmiiboCreateFromDropTable *)((char *)this + 8 * v67); | |
posOffset.vec3.x = posOffset.vec3.x + (float)(v69 * v70->randomFloats[0].field_0); | |
posOffset.vec3.z = posOffset.vec3.z + (float)(v69 * v70->randomFloats[0].field_4); | |
LODWORD(v71) = (sead::Random::getU32(sead::GlobalRandom::sInstance) >> 9) | 0x3F800000; | |
v72 = posOffset.vec3.y + (float)(v69 * (float)((float)((float)(v71 + -1.0) + (float)(v71 + -1.0)) + -1.0)); | |
if ( v64 != 0xFFFFFFFF ) | |
v72 = v72 * 0.5; | |
if ( v68 != 0xFFFFFFFF ) | |
v72 = v72 * 0.7; | |
createPos2.str.vptr = &sead::SafeString::vt; | |
posOffset.vec3.y = v72; | |
createPos2.str.cstr = "BarrelBomb"; | |
v73 = sead::SafeStringBase<char>::findIndex(drop, &createPos2.str); | |
v29 = posOffset.vec3.x; | |
if ( v73 == 0xFFFFFFFF ) | |
{ | |
v32 = posOffset.vec3.z; | |
v74 = 0; | |
} | |
else | |
{ | |
v29 = fmaxf(posOffset.vec3.x, 1.5); | |
v32 = fmaxf(posOffset.vec3.z, 1.5); | |
v74 = 0; | |
posOffset.vec3.x = v29; | |
posOffset.vec3.z = v32; | |
} | |
LABEL_94: | |
v75 = posOffset.vec3.y; | |
v76 = sqrtf((float)(v32 * v32) + (float)((float)(v29 * v29) + (float)(v75 * v75))); | |
if ( v76 > 0.0 ) | |
{ | |
v29 = v29 * (float)(1.0 / v76); | |
v75 = posOffset.vec3.y * (float)(1.0 / v76); | |
v32 = v32 * (float)(1.0 / v76); | |
posOffset.vec3.x = v29; | |
posOffset.vec3.y = posOffset.vec3.y * (float)(1.0 / v76); | |
posOffset.vec3.z = v32; | |
} | |
createPos.x = v26 + (float)(v76 * v29); | |
createPos.y = v27 + (float)(v76 * v75); | |
createPos2.vec3.x = v26 + v29; | |
createPos2.vec3.y = v27 + v75; | |
createPos.z = v28 + (float)(v76 * v32); | |
createPos2.vec3.z = v28 + v32; | |
somePositionCalc(&createPos, (Vec3 *)&createPos2, (Vec3 *)&posOffset, v76 + -1.0); | |
v77 = ActorInfoData::sInstance; | |
drop->vptr->assureTermination(drop); | |
if ( ActorInfoData::hasTagByName(v77, drop->cstr, Tag_AmiiboFitGround) ) | |
{ | |
createPos2.vec3.x = -0.0; | |
createPos2.vec3.y = -1.0; | |
createPos2.vec3.z = -0.0; | |
somePositionCalc(&createPos, &createPos, (Vec3 *)&createPos2, 30.0); | |
createPos.y = createPos.y + 0.1; | |
} | |
else | |
{ | |
v78 = fminf(v76, 0.5); | |
createPos.x = createPos.x - (float)(v78 * posOffset.vec3.x); | |
createPos.y = createPos.y - (float)(v78 * posOffset.vec3.y); | |
createPos.z = createPos.z - (float)(v78 * posOffset.vec3.z); | |
} | |
createPos2.str.vptr = &sead::SafeString::vt; | |
createPos2.str.cstr = "@P"; | |
ActorInstParams::Buf::add(&v106, &createPos, &createPos2.str, 0xC, ActorInstParams::EntryType_Vec3); | |
createPos2.str.vptr = &sead::SafeString::vt; | |
createPos2.str.cstr = "IsAmiibo"; | |
ActorInstParams::addBoolAITree((ActorInstParams *)&flag, 1, &createPos2.str); | |
v79 = ActorInfoData::sInstance; | |
drop->vptr->assureTermination(drop); | |
if ( !ActorInfoData::isAmiiboDrop(v79, drop->cstr, "Amiibo") ) | |
goto LABEL_119; | |
v80 = this->dropListType; | |
if ( (unsigned int)(v80 - 1) >= 2 ) | |
{ | |
if ( v80 ) | |
{ | |
LABEL_119: | |
if ( v74 ) | |
{ | |
this->field_A78 = 1; | |
createPos2.str.vptr = &sead::SafeString::vt; | |
createPos2.str.cstr = "DropActor"; | |
drop->vptr->assureTermination(drop); | |
v85 = drop->cstr; | |
drop->vptr->assureTermination(drop); | |
v86 = 0LL; | |
v87 = drop->cstr + 1; | |
while ( drop->cstr[v86] != sead::SafeStringBase<char>::cNullChar ) | |
{ | |
if ( v87[v86] == sead::SafeStringBase<char>::cNullChar ) | |
{ | |
LODWORD(v86) = v86 + 1; | |
break; | |
} | |
if ( v87[v86 + 1] == sead::SafeStringBase<char>::cNullChar ) | |
{ | |
LODWORD(v86) = v86 + 2; | |
break; | |
} | |
v88 = v86 + 2; | |
v86 += 3LL; | |
if ( v88 >= 0x80000 ) | |
{ | |
LODWORD(v86) = 0; | |
break; | |
} | |
} | |
ActorInstParams::Buf::add(&v106, v85, &createPos2.str, v86 + 1, ActorInstParams::EntryType_String); | |
if ( isWeaponActorProfile(drop) ) | |
{ | |
createPos2.str.vptr = &sead::SafeString::vt; | |
createPos2.str.cstr = "SharpWeaponJudgeType"; | |
LODWORD(value.x) = 2; | |
ActorInstParams::Buf::add(&v106, &value, &createPos2.str, 4, 0); | |
} | |
v92 = sead::Random::getU32(sead::GlobalRandom::sInstance); | |
createPos2.str.vptr = &sead::SafeString::vt; | |
value.z = 0.05; | |
value.x = 0.0; | |
value.y = (float)(COERCE_FLOAT((v92 >> 9) | 0x3F800000) + -1.0) * 6.2832; | |
createPos2.str.cstr = "@R"; | |
ActorInstParams::Buf::add(&v106, &value, &createPos2.str, 0xC, ActorInstParams::EntryType_Vec3); | |
v94 = ActorCreator::sInstance; | |
v95 = ActorHeapUtil::sInstance->forBaseProcDualHeap; | |
v96 = "TBox_Field_Iron"; | |
} | |
else | |
{ | |
v89 = ActorInfoData::sInstance; | |
drop->vptr->assureTermination(drop); | |
if ( ActorInfoData::hasTagByName(v89, drop->cstr, Tag_AmiiboFitGround) | |
|| (v90 = ActorInfoData::sInstance, | |
drop->vptr->assureTermination(drop), | |
ActorInfoData::hasTagByName(v90, drop->cstr, Tag_Rupee)) ) | |
{ | |
v91 = sead::Random::getU32(sead::GlobalRandom::sInstance); | |
value.x = 0.0; | |
createPos2.str.vptr = &sead::SafeString::vt; | |
value.y = (float)(COERCE_FLOAT((v91 >> 9) | 0x3F800000) + -1.0) * 6.2832; | |
value.z = 0.0; | |
} | |
else | |
{ | |
v97 = (float)(COERCE_FLOAT((sead::Random::getU32(sead::GlobalRandom::sInstance) >> 9) | 0x3F800000) | |
+ -1.0) | |
* 6.2832; | |
v98 = (float)(COERCE_FLOAT((sead::Random::getU32(sead::GlobalRandom::sInstance) >> 9) | 0x3F800000) | |
+ -1.0) | |
* 6.2832; | |
v99 = sead::Random::getU32(sead::GlobalRandom::sInstance); | |
value.x = v97; | |
value.y = v98; | |
createPos2.str.vptr = &sead::SafeString::vt; | |
value.z = (float)(COERCE_FLOAT((v99 >> 9) | 0x3F800000) + -1.0) * 6.2832; | |
} | |
createPos2.str.cstr = "@R"; | |
ActorInstParams::Buf::add(&v106, &value, &createPos2.str, 0xC, ActorInstParams::EntryType_Vec3); | |
v100 = ActorCreator::sInstance; | |
drop->vptr->assureTermination(drop); | |
v96 = drop->cstr; | |
v95 = ActorHeapUtil::sInstance->forBaseProcDualHeap; | |
v94 = v100; | |
} | |
ActorCreator::requestActorCreate(v94, v96, v95, procHandle, (ActorInstParams *)&flag, 0LL, 1); | |
return; | |
} | |
createPos2.str.vptr = &sead::SafeString::vt; | |
v82 = 0LL; | |
createPos2.str.cstr = "DropTable"; | |
while ( aAmiibo[v82] != sead::SafeStringBase<char>::cNullChar ) | |
{ | |
if ( v82 >= 0x80000 ) | |
{ | |
LODWORD(v82) = 0; | |
break; | |
} | |
if ( aAmiibo[v82 + 1] == sead::SafeStringBase<char>::cNullChar ) | |
{ | |
LODWORD(v82) = v82 + 1; | |
break; | |
} | |
v82 += 2LL; | |
} | |
v83 = v82 + 1; | |
v84 = "Amiibo"; | |
} | |
else | |
{ | |
createPos2.str.vptr = &sead::SafeString::vt; | |
createPos2.str.cstr = "DropTable"; | |
for ( i = 0LL; aAmiiboAfter[i] != sead::SafeStringBase<char>::cNullChar; i += 2LL ) | |
{ | |
if ( i >= 0x80000 ) | |
{ | |
LODWORD(i) = 0; | |
break; | |
} | |
if ( aAmiiboAfter[i + 1] == sead::SafeStringBase<char>::cNullChar ) | |
{ | |
LODWORD(i) = i + 1; | |
break; | |
} | |
} | |
v83 = i + 1; | |
v84 = "Amiibo_After"; | |
} | |
ActorInstParams::Buf::add(&v106, v84, &createPos2.str, v83, ActorInstParams::EntryType_String); | |
goto LABEL_119; | |
} | |
v74 = 1; | |
goto LABEL_94; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment