Created
February 24, 2019 18:30
-
-
Save leoetlino/ff246cb5c16b12c5af14a899d1cd8ffd to your computer and use it in GitHub Desktop.
This file contains hidden or 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 hidden or 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