Last active
December 31, 2018 21:05
-
-
Save leoetlino/5b0b0961d1f84baf8c7fdc5d0ee08023 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
// This is at 0x710073D7FC in Switch 1.5.0 | |
bool yigaWeaponStuff(sead::SafeString& enemyName, sead::SafeString& weaponName, bool wantFootsoldier, | |
const sead::SafeString& disguisedActorName) | |
{ | |
const bool isFootsoldier = wantFootsoldier || enemyName == "Enemy_Assassin_Junior"; | |
const bool isShooterJunior = enemyName == "Enemy_Assassin_Shooter_Junior"; | |
weaponName = ""; | |
if ( !wantFootsoldier && isFootsoldier ) // well, this is a bug! | |
{ | |
enemyName = ""; | |
return false; | |
} | |
if ( wantFootsoldier ) | |
{ | |
if ( disguisedActorName == "Npc_Assassin_001" ) | |
enemyName = "Enemy_Assassin_Junior_Npc_001"; | |
else if (disguisedActorName == "Npc_Assassin_002") | |
enemyName = "Enemy_Assassin_Junior_Npc_002"; | |
else | |
enemyName = "Enemy_Assassin_Junior"; | |
} | |
// If the player has opened the Thunder Helm chest | |
// (more precisely: basic signal was emitted by the chest) | |
if ( getFlag_ElectricRelic_GetBack() ) | |
{ | |
// Footsoldier | |
if (isFootsoldier) | |
{ | |
if ( random() < 0.75 ) | |
weaponName = "Weapon_Sword_073"; // Demon Carver | |
else | |
weaponName = "Weapon_Sword_053"; // Vicious Sickle | |
} | |
// Archer | |
else if (isShooterJunior) | |
{ | |
weaponName = "Weapon_Bow_040"; // Duplex Bow | |
} | |
// Blademaster | |
else | |
{ | |
weaponName = "Weapon_Lsword_074"; // Windcleaver | |
} | |
return !enemyName.empty(); | |
} | |
// Otherwise, if the player has NOT opened the chest: | |
// Only footsoldiers are allowed to spawn | |
// And *only if* [the player has talked to Impa or Electric_Relic_AssassinFirst is set] | |
// | |
// Note that non-archer footsoldiers are not dynamic spawns. | |
if (isFootsoldier && (getFlag_Npc_Kakariko001_TalkEnd() || getFlag_Electric_Relic_AssassinFirst())) | |
{ | |
weaponName = "Weapon_Sword_053"; // Vicious Sickle | |
return true; | |
} | |
// In any other case, blank out the enemy name and prevent it from spawning. | |
enemyName = ""; | |
return false; | |
} |
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
bool __fastcall yigaWeaponStuff(sead::SafeString *enemyName, sead::SafeString *weaponName, bool spawnRandomYiga, char *a4) | |
{ | |
char **enemyNameC; // x23 | |
char *v9; // x8 | |
signed __int64 v10; // x10 | |
int v11; // w12 | |
BOOL isJuniorAssassin; // w25 | |
signed __int64 v13; // x10 | |
int v14; // w12 | |
signed int isShooterJunior; // w26 | |
signed __int64 v17; // x10 | |
int v18; // w11 | |
signed __int64 v19; // x10 | |
int v20; // w11 | |
char *v21; // x8 | |
char *v22; // x8 | |
sead::SafeStringBase *(__cdecl *assign)(sead::SafeString *, sead::SafeString *); // x8 | |
sead::SafeStringBase *v24; // x1 | |
sead::SafeString *v25; // x0 | |
sead::SafeString v26; // [xsp+0h] [xbp-50h] | |
if ( spawnRandomYiga ) | |
{ | |
enemyNameC = &enemyName->cstr; | |
LABEL_9: | |
isJuniorAssassin = 1; | |
goto LABEL_10; | |
} | |
enemyName->vptr->assureTermination(enemyName); | |
enemyName->vptr->assureTermination(enemyName); | |
enemyNameC = &enemyName->cstr; | |
v9 = enemyName->cstr; | |
if ( v9 == "Enemy_Assassin_Junior" ) | |
goto LABEL_9; | |
v10 = 0LL; | |
do... | |
isJuniorAssassin = 0; | |
LABEL_10: | |
enemyName->vptr->assureTermination(enemyName); | |
enemyName->vptr->assureTermination(enemyName); | |
if ( *enemyNameC == "Enemy_Assassin_Shooter_Junior" ) | |
{ | |
LABEL_16: | |
isShooterJunior = 1; | |
} | |
else | |
{ | |
v13 = 0LL; | |
do... | |
isShooterJunior = 0; | |
} | |
weaponName->vptr->assign(weaponName, &sead::SafeStringBase<char>::cEmptyString); | |
if ( !spawnRandomYiga && isJuniorAssassin ) | |
{ | |
enemyName->vptr->assign(enemyName, &sead::SafeStringBase<char>::cEmptyString); | |
return 0; | |
} | |
if ( spawnRandomYiga ) | |
{ | |
v26.vptr = &sead::SafeString::vt; | |
v26.cstr = "Enemy_Assassin_Junior"; | |
enemyName->vptr->assign(enemyName, &v26); | |
if ( a4 ) | |
{ | |
if ( a4 == "Npc_Assassin_001" ) | |
{ | |
LABEL_33: | |
v26.vptr = &sead::SafeString::vt; | |
v21 = "Enemy_Assassin_Junior_Npc_001"; | |
} | |
else | |
{ | |
v17 = 0LL; | |
do | |
{ | |
v18 = (unsigned __int8)a4[v17]; | |
if ( v18 != (unsigned __int8)aNpcAssassin001[v17] ) | |
break; | |
if ( v18 == (unsigned __int8)sead::SafeStringBase<char>::cNullChar ) | |
goto LABEL_33; | |
++v17; | |
} | |
while ( v17 < 0x80001 ); | |
if ( a4 != "Npc_Assassin_002" ) | |
{ | |
v19 = 0LL; | |
do | |
{ | |
v20 = (unsigned __int8)a4[v19]; | |
if ( v20 != (unsigned __int8)aNpcAssassin002[v19] ) | |
break; | |
if ( v20 == (unsigned __int8)sead::SafeStringBase<char>::cNullChar ) | |
goto LABEL_34; | |
++v19; | |
} | |
while ( v19 < 0x80001 ); | |
goto LABEL_36; | |
} | |
LABEL_34: | |
v26.vptr = &sead::SafeString::vt; | |
v21 = "Enemy_Assassin_Junior_Npc_002"; | |
} | |
v26.cstr = v21; | |
enemyName->vptr->assign(enemyName, &v26); | |
goto LABEL_36; | |
} | |
} | |
LABEL_36: | |
if ( getFlag_ElectricRelic_GetBack(0) ) | |
{ | |
if ( !isJuniorAssassin ) | |
{ | |
if ( isShooterJunior ) | |
{ | |
v26.vptr = &sead::SafeString::vt; | |
v22 = "Weapon_Bow_040"; | |
} | |
else | |
{ | |
v26.vptr = &sead::SafeString::vt; | |
v22 = "Weapon_Lsword_074"; | |
} | |
goto gotoAssignStringAndReturn; | |
} | |
if ( (float)(COERCE_FLOAT((sead::Random::getU32(sead::GlobalRandom::sInstance) >> 9) | 0x3F800000) + -1.0) < 0.75 ) | |
{ | |
v26.vptr = &sead::SafeString::vt; | |
v22 = "Weapon_Sword_073"; | |
gotoAssignStringAndReturn: | |
v26.cstr = v22; | |
assign = weaponName->vptr->assign; | |
v24 = &v26; | |
v25 = weaponName; | |
goto assignStringAndReturn; | |
} | |
giveViciousSickle: | |
v26.vptr = &sead::SafeString::vt; | |
v22 = "Weapon_Sword_053"; | |
goto gotoAssignStringAndReturn; | |
} | |
if ( (hasFlag_Npc_Kakariko001_TalkEnd(0) || hasFlag_Electric_Relic_AssassinFirst(0LL)) && isJuniorAssassin ) | |
goto giveViciousSickle; | |
assign = enemyName->vptr->assign; | |
v24 = &sead::SafeStringBase<char>::cEmptyString; | |
v25 = enemyName; | |
assignStringAndReturn: | |
assign(v25, v24); | |
return **enemyNameC != sead::SafeStringBase<char>::cNullChar; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment