From: <gi...@cr...> - 2025-07-16 14:05:16
|
via 61dfde65f731c8c12635c7b49e8999e3d85ca5b1 (commit) via a900f1dcfa0515d57e48d6499e32536c7b03c0db (commit) via 4e65442990e40cbac551b31edb84df436f6b37b7 (commit) via ed85b0c8cf6f7a5db171839918e0abcf5449bb27 (commit) via 47bdf687761b8247aa043ddf56e8d43612880234 (commit) via f7319d04a1ba7c934976f71bbcb594f62a231fe1 (commit) from 4be4d403487162b4a280d0b1d164a492f374d54b (commit) ----------------------------------------------------------------------- commit 61dfde65f731c8c12635c7b49e8999e3d85ca5b1 Author: DracoOmega <dra...@gm...> Date: Wed Jul 16 11:25:53 2025 -0230 Rename RevParry again (to RevGuard) and change the enums to match I'm not 100% happy with it, but I feel it may convey the parrying property a little better than RevArmour did. commit a900f1dcfa0515d57e48d6499e32536c7b03c0db Author: DracoOmega <dra...@gm...> Date: Wed Jul 16 10:55:18 2025 -0230 Add a linebreak between amulet descriptions and where they were obtained Makes it a bit easier to read (and is present for most other items). commit 4e65442990e40cbac551b31edb84df436f6b37b7 Author: DracoOmega <dra...@gm...> Date: Wed Jul 16 10:54:42 2025 -0230 Fix missing Amulet of Dissipation description (And fix it not getting an inscription on randarts). commit ed85b0c8cf6f7a5db171839918e0abcf5449bb27 Author: DracoOmega <dra...@gm...> Date: Wed Jul 16 10:49:42 2025 -0230 Don't show rings of fire/ice on the Known Items screen commit 47bdf687761b8247aa043ddf56e8d43612880234 Author: DracoOmega <dra...@gm...> Date: Wed Jul 16 10:44:09 2025 -0230 Change Amulet of Alchemy's secondary effect Instead of reducing the cost of Alchemy spells by 1, it now restores a small amount of MP (currently 3-6) whenever the wearer drinks an otherwise-useful potion. This is a less narrow secondary effect than before (it seems a good idea to me for amulets to be a little broader in their appeal) and leans into another thematic association of alchemy. Additionally, MPRegen amulets were often by-far the most desireable amulet for many mages and this might give it a little competition in that regard (ideally being a little less strong passively, but better in burst situations). To discourage fiddly amulet swapping, it requires attuning to the amulet at full MP, just like MPRegen does. (It's possible I've set the numbers too high, but I'm curious how players will feel to use it.) commit f7319d04a1ba7c934976f71bbcb594f62a231fe1 Author: DracoOmega <dra...@gm...> Date: Wed Jul 16 10:37:39 2025 -0230 Fix outdated Wildshape description / messages (And give it an inscription on randarts). ----------------------------------------------------------------------- Summary of changes: crawl-ref/source/artefact.cc | 6 +++--- crawl-ref/source/dat/descript/items.txt | 13 ++++++++++--- crawl-ref/source/describe.cc | 12 +++++++----- crawl-ref/source/item-name.cc | 4 ++-- crawl-ref/source/item-prop-enum.h | 2 +- crawl-ref/source/item-prop.cc | 5 ++++- crawl-ref/source/melee-attack.cc | 2 +- crawl-ref/source/player-equip.cc | 12 +++++------- crawl-ref/source/player-reacts.cc | 24 ++++++++++++++++++------ crawl-ref/source/player.cc | 6 +++--- crawl-ref/source/potion.cc | 14 +++++++++++++- crawl-ref/source/spl-summoning.cc | 7 +++++++ crawl-ref/source/spl-util.cc | 3 --- 13 files changed, 74 insertions(+), 36 deletions(-) diff --git a/crawl-ref/source/artefact.cc b/crawl-ref/source/artefact.cc index 6b717e5bf5..4fce0607e2 100644 --- a/crawl-ref/source/artefact.cc +++ b/crawl-ref/source/artefact.cc @@ -1987,7 +1987,7 @@ enum gizmo_prop_type GIZMO_REPEL, GIZMO_RAMPAGE, GIZMO_GADGETEER, - GIZMO_PARRYREV, + GIZMO_REVGUARD, GIZMO_SPELLMOTOR, GIZMO_AUTODAZZLE, LAST_RARE_GIZMO = GIZMO_AUTODAZZLE, @@ -2053,8 +2053,8 @@ static void _apply_gizmo_prop(item_def& gizmo, gizmo_prop_type prop) gizmo.brand = SPGIZMO_GADGETEER; break; - case GIZMO_PARRYREV: - gizmo.brand = SPGIZMO_PARRYREV; + case GIZMO_REVGUARD: + gizmo.brand = SPGIZMO_REVGUARD; break; case GIZMO_SPELLMOTOR: diff --git a/crawl-ref/source/dat/descript/items.txt b/crawl-ref/source/dat/descript/items.txt index c638835cbc..822794bac9 100644 --- a/crawl-ref/source/dat/descript/items.txt +++ b/crawl-ref/source/dat/descript/items.txt @@ -8,7 +8,15 @@ corrosive slime flow off it like water. %%%% Amulet of alchemy -An amulet that enhances and reduces the mp cost of alchemy spells. +An amulet that enhances the power of the wearer's alchemy spells and also allows +them to extract small amounts of magical energy from any potion they drink. The +latter effect only functions once the amulet has attuned itself to the wearer's +body with full reserves of magic. +%%%% +amulet of dissipation + +An amulet which causes negative status effects upon the wearer to expire twice +as quickly with time. %%%% amulet of faith @@ -52,8 +60,7 @@ enemies, but only while moving and waiting. While taking other actions %%%% amulet of wildshape -An amulet which improves its wearer's skill with shapeshifting. The benefit -provided depends somewhat on the wearer's base shapeshifting skill. +An amulet which improves its wearer's skill with Shapeshifting. %%%% animal skin diff --git a/crawl-ref/source/describe.cc b/crawl-ref/source/describe.cc index f17c2a0ae8..442f94acdd 100644 --- a/crawl-ref/source/describe.cc +++ b/crawl-ref/source/describe.cc @@ -262,6 +262,9 @@ const char* jewellery_base_ability_string(int subtype) case AMU_GUARDIAN_SPIRIT: return "Spirit"; case AMU_FAITH: return "Faith"; case AMU_REFLECTION: return "Reflect"; + case AMU_WILDSHAPE: return "Wildshape"; + case AMU_ALCHEMY: return "Alch+"; + case AMU_DISSIPATION: return "Dissipate"; #if TAG_MAJOR_VERSION == 34 case AMU_INACCURACY: return "Inacc"; #endif @@ -685,7 +688,8 @@ static const char* _jewellery_base_ability_description(int subtype) case AMU_WILDSHAPE: return "It improves your skill with shapeshifting (+5)"; case AMU_ALCHEMY: - return "It enhances your alchemy spells and reduces their mp cost."; + return "It enhances your alchemy spells and restores some MP when you " + "drink potions."; case AMU_DISSIPATION: return "It reduces the duration of hostile enchantments and decays " "magical contamination more quickly."; @@ -2697,7 +2701,7 @@ static string _describe_gizmo(const item_def &item) "a 30% chance to not spend a charge.\n"; break; - case SPGIZMO_PARRYREV: + case SPGIZMO_REVGUARD: ret += "Your AC increases as you Rev (up to +5) and while " "fully Revved, your attacks may disarm enemies.\n"; break; @@ -2933,9 +2937,7 @@ string get_item_description(const item_def &item, case OBJ_JEWELLERY: desc = _describe_jewellery(item, verbose); - if (desc.empty()) - need_extra_line = false; - else + if (!desc.empty()) description << desc; break; diff --git a/crawl-ref/source/item-name.cc b/crawl-ref/source/item-name.cc index faa5b6a4d2..e9e41c21e9 100644 --- a/crawl-ref/source/item-name.cc +++ b/crawl-ref/source/item-name.cc @@ -862,7 +862,7 @@ const char* jewellery_effect_name(int jeweltype, bool terse) #endif case AMU_ACROBAT: return "Acrobat"; case AMU_WILDSHAPE: return "Wildshape"; - case AMU_ALCHEMY: return "Alch"; + case AMU_ALCHEMY: return "Alch+"; case AMU_DISSIPATION: return "Dissipate"; case AMU_NOTHING: return ""; default: return "buggy"; @@ -1041,7 +1041,7 @@ const char* gizmo_effect_name(int type) { case SPGIZMO_SPELLMOTOR: return "SpellMotor"; case SPGIZMO_GADGETEER: return "Gadgeteer"; - case SPGIZMO_PARRYREV: return "RevArmour"; + case SPGIZMO_REVGUARD: return "RevGuard"; case SPGIZMO_AUTODAZZLE: return "AutoDazzle"; default: diff --git a/crawl-ref/source/item-prop-enum.h b/crawl-ref/source/item-prop-enum.h index 3e0727a4d9..f3f6a4a940 100644 --- a/crawl-ref/source/item-prop-enum.h +++ b/crawl-ref/source/item-prop-enum.h @@ -902,6 +902,6 @@ enum special_gizmo_type SPGIZMO_NORMAL, SPGIZMO_SPELLMOTOR, SPGIZMO_GADGETEER, - SPGIZMO_PARRYREV, + SPGIZMO_REVGUARD, SPGIZMO_AUTODAZZLE, }; diff --git a/crawl-ref/source/item-prop.cc b/crawl-ref/source/item-prop.cc index 683ee472b9..3f4868527f 100644 --- a/crawl-ref/source/item-prop.cc +++ b/crawl-ref/source/item-prop.cc @@ -1033,6 +1033,8 @@ const set<pair<object_class_type, int> > removed_items = { OBJ_JEWELLERY, RING_TELEPORTATION }, { OBJ_JEWELLERY, RING_ATTENTION }, { OBJ_JEWELLERY, RING_STEALTH }, + { OBJ_JEWELLERY, RING_FIRE }, + { OBJ_JEWELLERY, RING_ICE }, { OBJ_STAVES, STAFF_ENCHANTMENT }, { OBJ_STAVES, STAFF_CHANNELLING }, { OBJ_STAVES, STAFF_POWER }, @@ -3137,7 +3139,8 @@ bool is_regen_item(const item_def& item) bool is_mana_regen_item(const item_def& item) { return is_artefact(item) && artefact_property(item, ARTP_MANA_REGENERATION) - || item.is_type(OBJ_JEWELLERY, AMU_MANA_REGENERATION); + || item.is_type(OBJ_JEWELLERY, AMU_MANA_REGENERATION) + || item.is_type(OBJ_JEWELLERY, AMU_ALCHEMY); } string talisman_type_name(int type) diff --git a/crawl-ref/source/melee-attack.cc b/crawl-ref/source/melee-attack.cc index 684b9f4af9..39e34bc47c 100644 --- a/crawl-ref/source/melee-attack.cc +++ b/crawl-ref/source/melee-attack.cc @@ -595,7 +595,7 @@ void melee_attack::try_parry_disarm() && defender->is_monster() && defender->alive() && you.rev_percent() > FULL_REV_PERCENT - && you.wearing_ego(OBJ_GIZMOS, SPGIZMO_PARRYREV) + && you.wearing_ego(OBJ_GIZMOS, SPGIZMO_REVGUARD) && one_chance_in(50 + defender->get_experience_level() * 2 - you.get_experience_level())) { diff --git a/crawl-ref/source/player-equip.cc b/crawl-ref/source/player-equip.cc index f422628708..57e7e9ec3f 100644 --- a/crawl-ref/source/player-equip.cc +++ b/crawl-ref/source/player-equip.cc @@ -2436,7 +2436,8 @@ static void _handle_regen_item_equip(const item_def& item) return; } #endif - if (regen_mp && !regen_hp && !player_regenerates_mp()) + if (regen_mp && !regen_hp && !player_regenerates_mp() + && !item.is_type(OBJ_JEWELLERY, AMU_ALCHEMY)) { mprf("The %s feel%s cold and inert.", item_name.c_str(), plural ? "" : "s"); @@ -2560,15 +2561,12 @@ static void _equip_jewellery_effect(item_def &item, bool unmeld) break; case AMU_WILDSHAPE: - if (!you.skill(SK_SHAPESHIFTING)) - mpr("You feel meek and tame."); - else - mpr("You feel a wild power."); + mpr("You feel a wild power."); _change_wildshape_status(); break; case AMU_ALCHEMY: - mpr("You feel more attuned to alchemy."); + mpr("You feel a deeper understanding of alchemy."); break; case AMU_DISSIPATION: @@ -2649,7 +2647,7 @@ static void _unequip_jewellery_effect(item_def &item, bool meld) break; case AMU_WILDSHAPE: - _change_wildshape_status(); + _change_wildshape_status(); break; #if TAG_MAJOR_VERSION == 34 diff --git a/crawl-ref/source/player-reacts.cc b/crawl-ref/source/player-reacts.cc index 29f3556e7f..b426c0be17 100644 --- a/crawl-ref/source/player-reacts.cc +++ b/crawl-ref/source/player-reacts.cc @@ -1050,6 +1050,7 @@ void maybe_attune_regen_items(bool attune_regen, bool attune_mana_regen) bool gained_regen = false; bool gained_mana_regen = false; + bool gained_alchemy = false; for (player_equip_entry& entry : you.equipment.items) { @@ -1065,7 +1066,9 @@ void maybe_attune_regen_items(bool attune_regen, bool attune_mana_regen) // Track which properties we should notify the player they have gained. if (!gained_regen && is_regen_item(arm)) gained_regen = true; - if (!gained_mana_regen && is_mana_regen_item(arm)) + if (arm.is_type(OBJ_JEWELLERY, AMU_ALCHEMY)) + gained_alchemy = true; + else if (!gained_mana_regen && is_mana_regen_item(arm)) gained_mana_regen = true; eq_list.push_back(is_artefact(arm) ? get_artefact_name(arm) : @@ -1081,14 +1084,23 @@ void maybe_attune_regen_items(bool attune_regen, bool attune_mana_regen) if (eq_list.empty()) return; - const char* msg = (gained_regen && gained_mana_regen) ? " health and magic" - : (gained_regen ? "" : " magic"); + vector<string> msgs; + + if (gained_regen || gained_mana_regen) + { + msgs.emplace_back(make_stringf("regenerate %s more quickly", + gained_regen && gained_mana_regen ? " health and magic" + : (gained_regen ? "" : " magic"))); + } + if (gained_alchemy) + msgs.emplace_back("extract magic from the potions you drink"); plural = plural || eq_list.size() > 1; string eq_str = comma_separated_line(eq_list.begin(), eq_list.end()); - mprf("Your %s attune%s to your body, and you begin to regenerate%s " - "more quickly.", eq_str.c_str(), plural ? " themselves" : "s itself", - msg); + string msg_str = comma_separated_line(msgs.begin(), msgs.end()); + mprf("Your %s attune%s to your body, and you begin to %s.", + eq_str.c_str(), plural ? " themselves" : "s itself", + msg_str.c_str()); } // cjo: Handles player hp and mp regeneration. If the counter diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index 0a46075565..7c6571d7c2 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -6410,7 +6410,7 @@ int player::armour_class_scaled(int scale) const AC += _meek_bonus() * 100; } - if (you.wearing_ego(OBJ_GIZMOS, SPGIZMO_PARRYREV)) + if (you.wearing_ego(OBJ_GIZMOS, SPGIZMO_REVGUARD)) { const static int rev_bonus[] = {0, 200, 400, 500}; AC += rev_bonus[you.rev_tier()]; @@ -8577,7 +8577,7 @@ void player::rev_down(int dur) const int perc_lost = div_rand_round(dur * 5, 6); you.props[REV_PERCENT_KEY] = max(0, you.rev_percent() - perc_lost); - if (you.wearing_ego(OBJ_GIZMOS, SPGIZMO_PARRYREV)) + if (you.wearing_ego(OBJ_GIZMOS, SPGIZMO_REVGUARD)) you.redraw_armour_class = true; } @@ -8590,7 +8590,7 @@ void player::rev_up(int dur) const int perc_gained = random_range(dur * 2, dur * 3); you.props[REV_PERCENT_KEY] = min(100, you.rev_percent() + perc_gained); - if (you.wearing_ego(OBJ_GIZMOS, SPGIZMO_PARRYREV)) + if (you.wearing_ego(OBJ_GIZMOS, SPGIZMO_REVGUARD)) you.redraw_armour_class = true; } diff --git a/crawl-ref/source/potion.cc b/crawl-ref/source/potion.cc index 979982641e..54ea90ae43 100644 --- a/crawl-ref/source/potion.cc +++ b/crawl-ref/source/potion.cc @@ -934,7 +934,19 @@ bool quaff_potion(item_def &potion) } const potion_type ptyp = static_cast<potion_type>(potion.sub_type); - return get_potion_effect(ptyp)->quaff(was_known); + if (get_potion_effect(ptyp)->quaff(was_known)) + { + if (you.wearing(OBJ_JEWELLERY, AMU_ALCHEMY, false, true) + && you.magic_points < you.max_magic_points) + { + mpr("You extract magical energy from the potion."); + inc_mp(random_range(3, 6)); + } + + return true; + } + + return false; } /** diff --git a/crawl-ref/source/spl-summoning.cc b/crawl-ref/source/spl-summoning.cc index ba9c7292b3..93ede33fbe 100644 --- a/crawl-ref/source/spl-summoning.cc +++ b/crawl-ref/source/spl-summoning.cc @@ -4307,6 +4307,13 @@ static void _do_player_potion() if (you.has_mutation(MUT_DRUNKEN_BRAWLING) && oni_likes_potion(potion)) oni_drunken_swing(); + if (you.wearing(OBJ_JEWELLERY, AMU_ALCHEMY, false, true) + && you.magic_points < you.max_magic_points) + { + mpr("You extract magical energy from the potion."); + inc_mp(random_range(3, 6)); + } + // Mildly shorter duration than drinking the potion normally. get_potion_effect(potion)->effect(true, 15); } diff --git a/crawl-ref/source/spl-util.cc b/crawl-ref/source/spl-util.cc index 17d547adb2..4fa847bda5 100644 --- a/crawl-ref/source/spl-util.cc +++ b/crawl-ref/source/spl-util.cc @@ -555,9 +555,6 @@ int spell_mana(spell_type which_spell, bool real_spell) if (you.has_mutation(MUT_EFFICIENT_MAGIC)) cost = max(1, cost - you.get_mutation_level(MUT_EFFICIENT_MAGIC)); - if (spell_typematch(which_spell, spschool::alchemy) && real_spell) - cost = max(1, cost - you.wearing_jewellery(AMU_ALCHEMY)); - if (you.duration[DUR_BRILLIANCE] || you.unrand_equipped(UNRAND_FOLLY)) cost = cost/2 + cost%2; // round up -- Dungeon Crawl Stone Soup |