From 4f1904dd5f48c15eb0d28b6f6ed3f3b2f3f45f54 Mon Sep 17 00:00:00 2001 From: karxi Date: Mon, 25 Nov 2024 08:41:24 -0500 Subject: [PATCH 1/2] Added Creature bindings for active_mutation/deactivate_mutation. --- src/catalua_bindings_creature.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/catalua_bindings_creature.cpp b/src/catalua_bindings_creature.cpp index 8440566c017b..e94433122b21 100644 --- a/src/catalua_bindings_creature.cpp +++ b/src/catalua_bindings_creature.cpp @@ -453,6 +453,9 @@ void cata::detail::reg_character( sol::state &lua ) SET_FX_T( set_mutation, void( const trait_id & ) ); SET_FX_T( unset_mutation, void( const trait_id & ) ); + SET_FX_T( activate_mutation, void( const trait_id & ) ); + SET_FX_T( deactivate_mutation, void( const trait_id & ) ); + SET_FX_T( can_mount, bool( const monster & critter ) const ); SET_FX_T( mount_creature, void( monster & z ) ); SET_FX_T( is_mounted, bool() const ); From fe4dc9fbbee7b724f82c372c9555733bb64cbeae Mon Sep 17 00:00:00 2001 From: karxi Date: Mon, 25 Nov 2024 14:44:02 -0500 Subject: [PATCH 2/2] Added sanity checks to prevent misuse of Character::activate_mutation/deactivate_mutation. --- src/mutation.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/mutation.cpp b/src/mutation.cpp index 42b4e23c0191..7c1b800346a5 100644 --- a/src/mutation.cpp +++ b/src/mutation.cpp @@ -466,6 +466,11 @@ bool Character::can_install_cbm_on_bp( const std::vector &bps ) con void Character::activate_mutation( const trait_id &mut ) { + // Make sure we actually have the mutation, and it's inactive. + if( !( has_trait( mut ) && !my_mutations[mut].powered ) ) { + return; + } + const mutation_branch &mdata = mut.obj(); char_trait_data &tdata = my_mutations[mut]; // You can take yourself halfway to Near Death levels of hunger/thirst. @@ -593,6 +598,11 @@ void Character::activate_mutation( const trait_id &mut ) void Character::deactivate_mutation( const trait_id &mut ) { + // No-op if we don't have the required mutation. + if( !has_active_mutation( mut ) ) { + return; + } + my_mutations[mut].powered = false; // Handle stat changes from deactivation