diff options
Diffstat (limited to '')
-rw-r--r-- | src/Items/ItemFood.h | 116 |
1 files changed, 73 insertions, 43 deletions
diff --git a/src/Items/ItemFood.h b/src/Items/ItemFood.h index 15782dba1..caeca2175 100644 --- a/src/Items/ItemFood.h +++ b/src/Items/ItemFood.h @@ -25,8 +25,23 @@ public: } - virtual FoodInfo GetFoodInfo(void) override + virtual FoodInfo GetFoodInfo(const cItem * a_Item) override { + static const FoodInfo RawFishInfos[] = + { + FoodInfo(2, 0.4), // Raw fish + FoodInfo(2, 0.2), // Raw salmon + FoodInfo(1, 0.2), // Clownfish + FoodInfo(1, 0.2), // Pufferfish + }; + static const FoodInfo CookedFishInfos[] = + { + FoodInfo(5, 6.0), // Cooked fish + FoodInfo(6, 9.6), // Cooked salmon + }; + static const short NumRawFishInfos = sizeof(RawFishInfos) / sizeof(FoodInfo); + static const short NumCookedFishInfos = sizeof(CookedFishInfos) / sizeof(FoodInfo); + switch (m_ItemType) { // Please keep alpha-sorted. @@ -37,7 +52,15 @@ public: // Carrots handled in ItemSeeds case E_ITEM_CHORUS_FRUIT: return FoodInfo(4, 2.4); case E_ITEM_COOKED_CHICKEN: return FoodInfo(6, 7.2); - case E_ITEM_COOKED_FISH: return FoodInfo(5, 6); // TODO: Add other fish types + case E_ITEM_COOKED_FISH: + { + if (a_Item->m_ItemDamage >= NumCookedFishInfos) + { + LOGWARNING("Unknown cooked fish type '%d'", a_Item->m_ItemDamage); + return FoodInfo(0, 0); + } + return CookedFishInfos[a_Item->m_ItemDamage]; + } case E_ITEM_COOKED_MUTTON: return FoodInfo(6, 9.6); case E_ITEM_COOKED_PORKCHOP: return FoodInfo(8, 12.8); case E_ITEM_COOKED_RABBIT: return FoodInfo(5, 6); @@ -53,7 +76,15 @@ public: case E_ITEM_RED_APPLE: return FoodInfo(4, 2.4); case E_ITEM_RAW_BEEF: return FoodInfo(3, 1.8); case E_ITEM_RAW_CHICKEN: return FoodInfo(2, 1.2); - case E_ITEM_RAW_FISH: return FoodInfo(2, 1.2); + case E_ITEM_RAW_FISH: + { + if (a_Item->m_ItemDamage >= NumRawFishInfos) + { + LOGWARNING("Unknown raw fish type '%d'", a_Item->m_ItemDamage); + return FoodInfo(0, 0); + } + return RawFishInfos[a_Item->m_ItemDamage]; + } case E_ITEM_RAW_MUTTON: return FoodInfo(2, 1.2); case E_ITEM_RAW_PORKCHOP: return FoodInfo(3, 1.8); case E_ITEM_RAW_RABBIT: return FoodInfo(3, 1.8); @@ -65,46 +96,6 @@ public: return FoodInfo(0, 0.f); } - virtual bool GetEatEffect(cEntityEffect::eType & a_EffectType, int & a_EffectDurationTicks, short & a_EffectIntensity, float & a_Chance) override - { - switch (m_ItemType) - { - case E_ITEM_RAW_CHICKEN: - { - a_EffectType = cEntityEffect::effHunger; - a_EffectDurationTicks = 600; - a_EffectIntensity = 0; - a_Chance = 0.3f; - return true; - } - case E_ITEM_ROTTEN_FLESH: - { - a_EffectType = cEntityEffect::effHunger; - a_EffectDurationTicks = 600; - a_EffectIntensity = 0; - a_Chance = 0.8f; - return true; - } - case E_ITEM_SPIDER_EYE: - { - a_EffectType = cEntityEffect::effPoison; - a_EffectDurationTicks = 100; - a_EffectIntensity = 0; - a_Chance = 1.0f; - return true; - } - case E_ITEM_POISONOUS_POTATO: - { - a_EffectType = cEntityEffect::effPoison; - a_EffectDurationTicks = 100; - a_EffectIntensity = 0; - a_Chance = 0.6f; - return true; - } - } - return false; - } - virtual bool EatItem(cPlayer * a_Player, cItem * a_Item) override { if (!super::EatItem(a_Player, a_Item)) @@ -125,6 +116,45 @@ public: } break; } + case E_ITEM_RAW_FISH: + { + if (a_Item->m_ItemDamage == E_META_RAW_FISH_PUFFERFISH) + { + a_Player->AddEntityEffect(cEntityEffect::effHunger, 20 * 15, 2); + a_Player->AddEntityEffect(cEntityEffect::effNausea, 20 * 15, 1); + a_Player->AddEntityEffect(cEntityEffect::effPoison, 20 * 60, 3); + } + break; + } + case E_ITEM_RAW_CHICKEN: + { + if (GetRandomProvider().RandBool(0.3)) + { + a_Player->AddEntityEffect(cEntityEffect::effHunger, 600, 0); + } + break; + } + case E_ITEM_ROTTEN_FLESH: + { + if (GetRandomProvider().RandBool(0.8)) + { + a_Player->AddEntityEffect(cEntityEffect::effHunger, 600, 0); + } + break; + } + case E_ITEM_SPIDER_EYE: + { + a_Player->AddEntityEffect(cEntityEffect::effPoison, 100, 0); + break; + } + case E_ITEM_POISONOUS_POTATO: + { + if (GetRandomProvider().RandBool(0.6)) + { + a_Player->AddEntityEffect(cEntityEffect::effPoison, 100, 0); + } + break; + } } return true; } |