Skip to content

Commit

Permalink
Event bus for radiation mutation
Browse files Browse the repository at this point in the history
  • Loading branch information
RenechCDDA committed Jun 16, 2024
1 parent ae7671a commit bdba046
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 3 deletions.
1 change: 1 addition & 0 deletions doc/EFFECT_ON_CONDITION.md
Original file line number Diff line number Diff line change
Expand Up @@ -1189,6 +1189,7 @@ Every event EOC passes context vars with each of their key value pairs that the
| character_loses_effect | | { "character", `character_id` },<br/> { "effect", `efftype_id` },<br/> { "bodypart", `bodypart_id` } | character / NONE |
| character_melee_attacks_character | | { "attacker", `character_id` },<br/> { "weapon", `itype_id` },<br/> { "hits", `bool` },<br/> { "victim", `character_id` },<br/> { "victim_name", `string` }, | character (attacker) / character (victim) |
| character_melee_attacks_monster | | { "attacker", `character_id` },<br/> { "weapon", `itype_id` },<br/> { "hits", `bool` },<br/> { "victim_type", `mtype_id` },| character / monster |
| character_radioactively_mutates | triggered when a character mutates due to being irradiated | { "character", `character_id` }, | character / NONE |
| character_ranged_attacks_character | | { "attacker", `character_id` },<br/> { "weapon", `itype_id` },<br/> { "victim", `character_id` },<br/> { "victim_name", `string` }, | character (attacker) / character (victim) |
| character_ranged_attacks_monster | | { "attacker", `character_id` },<br/> { "weapon", `itype_id` },<br/> { "victim_type", `mtype_id` }, | character / monster |
| character_smashes_tile | | { "character", `character_id` },<br/> { "terrain", `ter_str_id` }, { "furniture", `furn_str_id` }, | character / NONE |
Expand Down
4 changes: 3 additions & 1 deletion src/event.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ std::string enum_to_string<event_type>( event_type data )
return "character_melee_attacks_character";
case event_type::character_melee_attacks_monster:
return "character_melee_attacks_monster";
case event_type::character_radioactively_mutates: return "character_radioactively_mutates";
case event_type::character_ranged_attacks_character:
return "character_ranged_attacks_character";
case event_type::character_ranged_attacks_monster:
Expand Down Expand Up @@ -141,7 +142,7 @@ DEFINE_EVENT_HELPER_FIELDS( event_spec_empty )
DEFINE_EVENT_HELPER_FIELDS( event_spec_character )
DEFINE_EVENT_HELPER_FIELDS( event_spec_character_item )

static_assert( static_cast<int>( event_type::num_event_types ) == 102,
static_assert( static_cast<int>( event_type::num_event_types ) == 103,
"This static_assert is a reminder to add a definition below when you add a new "
"event_type. If your event_spec specialization inherits from another struct for "
"its fields definition then you probably don't need a definition here." );
Expand Down Expand Up @@ -170,6 +171,7 @@ DEFINE_EVENT_FIELDS( character_learns_spell )
DEFINE_EVENT_FIELDS( character_loses_effect )
DEFINE_EVENT_FIELDS( character_melee_attacks_character )
DEFINE_EVENT_FIELDS( character_melee_attacks_monster )
DEFINE_EVENT_FIELDS( character_radioactively_mutates )

Check failure on line 174 in src/event.cpp

View workflow job for this annotation

GitHub Actions / build (src)

Namespace-level declaration of 'fields' in a cpp file should be static or have a previous declaration in a header. [cata-static-declarations,-warnings-as-errors]

Check failure on line 174 in src/event.cpp

View workflow job for this annotation

GitHub Actions / build (src)

no member named 'fields' in 'cata::event_detail::event_spec<event_type::character_radioactively_mutates>' [clang-diagnostic-error]

Check failure on line 174 in src/event.cpp

View workflow job for this annotation

GitHub Actions / Basic Build and Test (Clang 10, Ubuntu, Curses)

no member named 'fields' in 'cata::event_detail::event_spec<event_type::character_radioactively_mutates>'
DEFINE_EVENT_FIELDS( character_ranged_attacks_character )
DEFINE_EVENT_FIELDS( character_ranged_attacks_monster )
DEFINE_EVENT_FIELDS( character_smashes_tile )
Expand Down
6 changes: 5 additions & 1 deletion src/event.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ enum class event_type : int {
character_loses_effect,
character_melee_attacks_character,
character_melee_attacks_monster,
character_radioactively_mutates,
character_ranged_attacks_character,
character_ranged_attacks_monster,
character_smashes_tile,
Expand Down Expand Up @@ -186,7 +187,7 @@ struct event_spec_character_item {
};
};

static_assert( static_cast<int>( event_type::num_event_types ) == 102,
static_assert( static_cast<int>( event_type::num_event_types ) == 103,
"This static_assert is to remind you to add a specialization for your new "
"event_type below" );

Expand Down Expand Up @@ -406,6 +407,9 @@ struct event_spec<event_type::character_melee_attacks_monster> {
};
};

template<>
struct event_spec<event_type::character_radioactively_mutates> : event_spec_character {};

template<>
struct event_spec<event_type::character_ranged_attacks_character> {
static constexpr std::array<std::pair<const char *, cata_variant_type>, 4> fields = {{
Expand Down
2 changes: 1 addition & 1 deletion src/suffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1170,7 +1170,7 @@ void suffer::from_radiation( Character &you )
// 1000 rads = 900 / 10000 = 9 / 100 = 10% !!!
// 2000 rads = 2000 / 10000 = 1 / 5 = 20% !!!
if( get_option<bool>( "RAD_MUTATION" ) && rng( 100, 10000 ) < you.get_rad() ) {
you.mutate();
get_event_bus().send<event_type::character_radioactively_mutates>( you.getID() );
}
if( you.get_rad() > 50 && rng( 1, 3000 ) < you.get_rad() &&
( you.stomach.contains() > 0_ml || radiation_increasing || !you.in_sleep_state() ) ) {
Expand Down

0 comments on commit bdba046

Please sign in to comment.