mirror of
https://github.com/zeldaret/ph
synced 2026-08-06 09:52:50 -04:00
Decomp ItemManager::GiveItem
This commit is contained in:
@@ -458,3 +458,282 @@ THUMB bool ItemManager::GetFanfareItemScale(Vec3p *scale) const {
|
||||
return false;
|
||||
}
|
||||
|
||||
extern "C" void GiveShipPart(ShipPart part, ShipType type);
|
||||
extern "C" void EquipLinebeckCannon();
|
||||
THUMB void ItemManager::GiveItem(ItemId id) {
|
||||
switch (id) {
|
||||
case ItemId_SmallKey: {
|
||||
this->GiveKeys(1);
|
||||
} break;
|
||||
|
||||
case ItemId_GreenRupee: {
|
||||
this->GiveRupees(1, true);
|
||||
} break;
|
||||
|
||||
case ItemId_BlueRupee: {
|
||||
this->GiveRupees(5, true);
|
||||
} break;
|
||||
|
||||
case ItemId_RedRupee: {
|
||||
this->GiveRupees(20, true);
|
||||
} break;
|
||||
|
||||
case ItemId_BigGreenRupee: {
|
||||
this->GiveRupees(100, true);
|
||||
} break;
|
||||
|
||||
case ItemId_BigRedRupee: {
|
||||
this->GiveRupees(200, true);
|
||||
} break;
|
||||
|
||||
case ItemId_GoldRupee: {
|
||||
this->GiveRupees(300, true);
|
||||
} break;
|
||||
|
||||
case ItemId_OshusSword: {
|
||||
SET_FLAG(this->mItemFlags.flags, ItemFlag_OshusSword);
|
||||
this->GetEquipItem(ItemFlag_OshusSword)->GiveAmmo(1);
|
||||
} break;
|
||||
|
||||
case ItemId_WoodenShield: {
|
||||
SET_FLAG(this->mItemFlags.flags, ItemFlag_WoodenShield);
|
||||
this->GetEquipItem(ItemFlag_WoodenShield)->GiveAmmo(1);
|
||||
} break;
|
||||
|
||||
case ItemId_BombBag: {
|
||||
this->GiveEquipItem(ItemFlag_BombBag, 10);
|
||||
} break;
|
||||
|
||||
case ItemId_BombchuBag: {
|
||||
this->GiveEquipItem(ItemFlag_BombchuBag, 10);
|
||||
} break;
|
||||
|
||||
case ItemId_Bow: {
|
||||
this->GiveEquipItem(ItemFlag_Bow, 20);
|
||||
} break;
|
||||
|
||||
case ItemId_Boomerang: {
|
||||
this->GiveEquipItem(ItemFlag_Boomerang, 1);
|
||||
} break;
|
||||
|
||||
case ItemId_Scoop: {
|
||||
this->GiveEquipItem(ItemFlag_Shovel, 1);
|
||||
} break;
|
||||
|
||||
case ItemId_Hammer: {
|
||||
this->GiveEquipItem(ItemFlag_Hammer, 1);
|
||||
} break;
|
||||
|
||||
case ItemId_Rope: {
|
||||
this->GiveEquipItem(ItemFlag_GrapplingHook, 1);
|
||||
} break;
|
||||
|
||||
case ItemId_PhantomHourglass: {
|
||||
SET_FLAG(this->mItemFlags.flags, ItemFlag_Hourglass);
|
||||
gAdventureFlags->Set(AdventureFlag_Hourglass, true);
|
||||
} break;
|
||||
|
||||
case ItemId_SWSeaChart: {
|
||||
SET_FLAG(this->mItemFlags.flags, ItemFlag_SeaChartSW);
|
||||
gAdventureFlags->Set(AdventureFlag_SWSeaChart, true);
|
||||
} break;
|
||||
|
||||
case ItemId_NWSeaChart: {
|
||||
SET_FLAG(this->mItemFlags.flags, ItemFlag_SeaChartNW);
|
||||
gAdventureFlags->Set(AdventureFlag_NWSeaChart, true);
|
||||
} break;
|
||||
|
||||
case ItemId_SESeaChart: {
|
||||
SET_FLAG(this->mItemFlags.flags, ItemFlag_SeaChartSE);
|
||||
gAdventureFlags->Set(AdventureFlag_SESeaChart, true);
|
||||
} break;
|
||||
|
||||
case ItemId_NESeaChart: {
|
||||
SET_FLAG(this->mItemFlags.flags, ItemFlag_SeaChartNE);
|
||||
gAdventureFlags->Set(AdventureFlag_NESeaChart, true);
|
||||
} break;
|
||||
|
||||
case ItemId_FishingRod: {
|
||||
SET_FLAG(this->mItemFlags.flags, ItemFlag_FishingRod);
|
||||
gAdventureFlags->Set(AdventureFlag_FishingRod, true);
|
||||
} break;
|
||||
|
||||
case ItemId_Cannon: {
|
||||
SET_FLAG(this->mItemFlags.flags, ItemFlag_Cannon);
|
||||
gAdventureFlags->Set(AdventureFlag_Cannon, true);
|
||||
GiveShipPart(ShipPart_Cannon, ShipType_Linebeck);
|
||||
EquipLinebeckCannon();
|
||||
} break;
|
||||
|
||||
case ItemId_SunKey: {
|
||||
SET_FLAG(this->mItemFlags.flags, ItemFlag_SunKey);
|
||||
gAdventureFlags->Set(AdventureFlag_SunKey, true);
|
||||
} break;
|
||||
|
||||
case ItemId_Unk_39: {
|
||||
SET_FLAG(this->mItemFlags.flags, ItemFlag_Unk_39);
|
||||
gAdventureFlags->Set(AdventureFlag_Unk_23, true);
|
||||
} break;
|
||||
|
||||
case ItemId_Quiver: {
|
||||
this->UpgradeQuiver();
|
||||
} break;
|
||||
|
||||
case ItemId_BigBombBag: {
|
||||
this->UpgradeBombBag();
|
||||
} break;
|
||||
|
||||
case ItemId_BigBombchuBag: {
|
||||
this->UpgradeBombchuBag();
|
||||
} break;
|
||||
|
||||
case ItemId_KingsKey: {
|
||||
SET_FLAG(this->mItemFlags.flags, ItemFlag_KingsKey);
|
||||
} break;
|
||||
|
||||
case ItemId_GhostKey: {
|
||||
SET_FLAG(this->mItemFlags.flags, ItemFlag_GhostKey);
|
||||
} break;
|
||||
|
||||
case ItemId_PowerGem: {
|
||||
this->mNumGems[Gem_Power] += 1;
|
||||
} break;
|
||||
|
||||
case ItemId_WisdomGem: {
|
||||
this->mNumGems[Gem_Wisdom] += 1;
|
||||
} break;
|
||||
|
||||
case ItemId_CourageGem: {
|
||||
this->mNumGems[Gem_Courage] += 1;
|
||||
} break;
|
||||
|
||||
case ItemId_SalvageArm: {
|
||||
SET_FLAG(this->mItemFlags.flags, ItemFlag_SalvageArm);
|
||||
gAdventureFlags->Set(AdventureFlag_SalvageArm, true);
|
||||
gHealthManager->mSalvageArmHealth = 5;
|
||||
} break;
|
||||
|
||||
case ItemId_SwordsmanScroll: {
|
||||
SET_FLAG(this->mItemFlags.flags, ItemFlag_SwordsmansScroll);
|
||||
} break;
|
||||
|
||||
case ItemId_Crimsonine: {
|
||||
gAdventureFlags->Set(AdventureFlag_Crimsonine, true);
|
||||
} break;
|
||||
|
||||
case ItemId_Azurine: {
|
||||
gAdventureFlags->Set(AdventureFlag_Azurine, true);
|
||||
} break;
|
||||
|
||||
case ItemId_Aquanine: {
|
||||
gAdventureFlags->Set(AdventureFlag_Aquanine, true);
|
||||
} break;
|
||||
|
||||
case ItemId_SpiritOfPowerUpgradeLvl1: {
|
||||
SET_FLAG(this->mItemFlags.flags, ItemFlag_PowerLv1);
|
||||
} break;
|
||||
|
||||
case ItemId_SpiritOfWisdomUpgradeLvl1: {
|
||||
SET_FLAG(this->mItemFlags.flags, ItemFlag_WisdomLv1);
|
||||
} break;
|
||||
|
||||
case ItemId_SpiritOfCourageUpgradeLvl1: {
|
||||
SET_FLAG(this->mItemFlags.flags, ItemFlag_CourageLv1);
|
||||
} break;
|
||||
|
||||
case ItemId_SpiritOfPowerUpgradeLvl2: {
|
||||
SET_FLAG(this->mItemFlags.flags, ItemFlag_PowerLv2);
|
||||
} break;
|
||||
|
||||
case ItemId_SpiritOfWisdomUpgradeLvl2: {
|
||||
SET_FLAG(this->mItemFlags.flags, ItemFlag_WisdomLv2);
|
||||
} break;
|
||||
|
||||
case ItemId_SpiritOfCourageUpgradeLvl2: {
|
||||
SET_FLAG(this->mItemFlags.flags, ItemFlag_CourageLv2);
|
||||
} break;
|
||||
|
||||
case ItemId_RedPotion: {
|
||||
for (s32 i = 0; i < 2; ++i) {
|
||||
if (this->mPotions[i] != Potion_None) continue;
|
||||
this->SetPotion(i, Potion_Red);
|
||||
break;
|
||||
}
|
||||
} break;
|
||||
|
||||
case ItemId_PurplePotion: {
|
||||
for (s32 i = 0; i < 2; ++i) {
|
||||
if (this->mPotions[i] != Potion_None) continue;
|
||||
this->SetPotion(i, Potion_Purple);
|
||||
break;
|
||||
}
|
||||
} break;
|
||||
|
||||
case ItemId_YellowPotion: {
|
||||
for (s32 i = 0; i < 2; ++i) {
|
||||
if (this->mPotions[i] != Potion_None) continue;
|
||||
this->SetPotion(i, Potion_Yellow);
|
||||
break;
|
||||
}
|
||||
} break;
|
||||
|
||||
case ItemId_SandOfHours: {
|
||||
this->mHourglassSandFrames += 3600;
|
||||
} break;
|
||||
|
||||
case ItemId_GoldenChimney: {
|
||||
gAdventureFlags->Set(AdventureFlag_ReceivedGoldenChimney, true);
|
||||
GiveShipPart(ShipPart_Chimney, ShipType_Golden);
|
||||
} break;
|
||||
|
||||
case ItemId_GoldenHandrail: {
|
||||
gAdventureFlags->Set(AdventureFlag_ReceivedGoldenHandrail, true);
|
||||
GiveShipPart(ShipPart_Handrail, ShipType_Golden);
|
||||
} break;
|
||||
|
||||
case ItemId_GoldenCannon: {
|
||||
gAdventureFlags->Set(AdventureFlag_ReceivedGoldenCannon, true);
|
||||
GiveShipPart(ShipPart_Cannon, ShipType_Golden);
|
||||
} break;
|
||||
|
||||
case ItemId_GoldenHull: {
|
||||
gAdventureFlags->Set(AdventureFlag_ReceivedGoldenHull, true);
|
||||
GiveShipPart(ShipPart_Hull, ShipType_Golden);
|
||||
} break;
|
||||
|
||||
case ItemId_CycloneSlate: {
|
||||
SET_FLAG(this->mItemFlags.flags, ItemFlag_CycloneSlate);
|
||||
} break;
|
||||
|
||||
case ItemId_Unk_128: {
|
||||
SET_FLAG(this->mItemFlags.flags, ItemFlag_Unk_47);
|
||||
} break;
|
||||
|
||||
case ItemId_Rupoor10: {
|
||||
this->GiveRupees(-10, true);
|
||||
} break;
|
||||
|
||||
case ItemId_Rupoor50: {
|
||||
this->GiveRupees(-50, true);
|
||||
} break;
|
||||
|
||||
case ItemId_Unk_0: break;
|
||||
case ItemId_Unk_5: break;
|
||||
case ItemId_Unk_16: break;
|
||||
case ItemId_Unk_131: break;
|
||||
case ItemId_Unk_132: break;
|
||||
|
||||
default: {
|
||||
if (ItemId_TREASURE_CHART_START <= id && id <= ItemId_TREASURE_CHART_END) {
|
||||
SET_FLAG(this->mItemFlags.flags, id + ItemFlag_TREASURE_CHART_START - ItemId_TreasureChart1);
|
||||
}
|
||||
} break;
|
||||
}
|
||||
if (
|
||||
gAdventureFlags->Get(AdventureFlag_Azurine) &&
|
||||
gAdventureFlags->Get(AdventureFlag_Crimsonine) &&
|
||||
gAdventureFlags->Get(AdventureFlag_Aquanine)
|
||||
) {
|
||||
gAdventureFlags->Set(AdventureFlag_Unk_128, true);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user