Skip to content

Commit

Permalink
Merge pull request #74612 from Maleclypse/Mal's-Branch-Radiation-Muta…
Browse files Browse the repository at this point in the history
…tion-Event

Mal's branch radiation mutation event
  • Loading branch information
dseguin authored Jul 3, 2024
2 parents fce8d46 + 190d8e3 commit 5c6a4c5
Show file tree
Hide file tree
Showing 6 changed files with 57 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -366,6 +366,53 @@
}
]
},
{
"type": "effect_on_condition",
"id": "EOC_RADIATION_MUTATION",
"eoc_type": "EVENT",
"required_event": "character_radioactively_mutates",
"condition": "u_is_character",
"effect": [
{
"set_string_var": "<radiation_category>",
"target_var": { "context_val": "radiation_mutation_category" },
"parse_tags": true
},
{ "u_mutate_category": { "context_val": "radiation_mutation_category" }, "use_vitamins": false }
]
},
{
"type": "snippet",
"category": "<radiation_category>",
"text": [
{ "text": "CHIMERA" },
{ "text": "INSECT" },
{ "text": "ALPHA" },
{ "text": "URSINE" },
{ "text": "CHIROPTERAN" },
{ "text": "BIRD" },
{ "text": "MEDICAL" },
{ "text": "LUPINE" },
{ "text": "RAT" },
{ "text": "SLIME" },
{ "text": "PLANT" },
{ "text": "BATRACHIAN" },
{ "text": "RAPTOR" },
{ "text": "MOUSE" },
{ "text": "CEPHALOPOD" },
{ "text": "ELFA" },
{ "text": "FISH" },
{ "text": "HUMAN" },
{ "text": "RABBIT" },
{ "text": "GASTROPOD" },
{ "text": "BEAST" },
{ "text": "FELINE" },
{ "text": "CATTLE" },
{ "text": "LIZARD" },
{ "text": "TROGLOBITE" },
{ "text": "CRUSTACEAN" }
]
},
{
"type": "effect_on_condition",
"id": "EOC_ink_grand_spray",
Expand Down
1 change: 1 addition & 0 deletions doc/EFFECT_ON_CONDITION.md
Original file line number Diff line number Diff line change
Expand Up @@ -1190,6 +1190,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
3 changes: 2 additions & 1 deletion src/event.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,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 @@ -142,7 +143,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 ) == 103,
static_assert( static_cast<int>( event_type::num_event_types ) == 104,
"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
6 changes: 5 additions & 1 deletion src/event.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,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 @@ -187,7 +188,7 @@ struct event_spec_character_item {
};
};

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

Expand Down Expand Up @@ -418,6 +419,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
1 change: 1 addition & 0 deletions src/memorial_logger.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1130,6 +1130,7 @@ void memorial_logger::notify( const cata::event &e )
case event_type::character_wakes_up:
case event_type::character_attempt_to_fall_asleep:
case event_type::character_falls_asleep:
case event_type::character_radioactively_mutates:
case event_type::character_wears_item:
case event_type::character_wields_item:
case event_type::character_casts_spell:
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 5c6a4c5

Please sign in to comment.