Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Parrot rework squarshed #37

Closed
wants to merge 69 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
e57fcbd
i'm dying jessser
san7890 Sep 5, 2023
e8ad148
RURURUGHHGH
san7890 Sep 5, 2023
d7c2bb3
gwak gwak
san7890 Sep 5, 2023
6e33017
GLORGUISIFSA
san7890 Sep 5, 2023
82b0cc2
might be having a skill issue rn
san7890 Sep 5, 2023
cecc563
i barely feel my head
san7890 Sep 5, 2023
e86404b
JESUS CHRIST
san7890 Sep 5, 2023
937c711
alright that should be a good chunk of memory
san7890 Sep 5, 2023
f5f4bb8
alright that should be a good chunk of memory
san7890 Sep 5, 2023
54508a9
code kleenup
san7890 Sep 5, 2023
b0b1d71
glorgisisiss
san7890 Sep 5, 2023
295441a
fucking uuuhhhhhh
san7890 Sep 5, 2023
40594b2
almost time to make sure the speech works
san7890 Sep 5, 2023
28e89d4
makes it compile
san7890 Sep 5, 2023
9d4622c
more tinkering
san7890 Sep 5, 2023
cf1f530
MOAR
san7890 Sep 5, 2023
c7954b9
WOOOO SPEECH WORKS
san7890 Sep 5, 2023
7482070
roundend callback to save memory
san7890 Sep 5, 2023
0d30999
MORE BULLSHIT
san7890 Sep 5, 2023
e81d6c4
MUUUUUUURGGGG
san7890 Sep 5, 2023
07ae0f4
probably a good stopping point
san7890 Sep 5, 2023
50fff74
reworks strippable items mayb
san7890 Sep 5, 2023
3b086d5
it sitll won't compile but that's later issue
san7890 Sep 5, 2023
11e1dbe
probably more stuff
san7890 Sep 5, 2023
ef1817c
does the snaggy stuff
san7890 Sep 5, 2023
bee2d6f
some perching dogshit
san7890 Sep 5, 2023
7b155da
more cleanup
san7890 Sep 5, 2023
c2b7107
okay flarp this
san7890 Sep 5, 2023
971689c
makes it compile
san7890 Sep 5, 2023
5a40024
less linter crap
san7890 Sep 5, 2023
8411c2c
fixes a subtype issue
san7890 Oct 12, 2023
a949839
alphabetizes a list
san7890 Oct 12, 2023
9a524a8
deletes useless default speech prob
san7890 Oct 12, 2023
aab0f08
early continue to `steal_from_mob()`
san7890 Oct 12, 2023
faca9c0
that should be inverted
san7890 Oct 12, 2023
c6c7091
misc. code cleanup
san7890 Oct 12, 2023
9e73e75
adds the default poly phrases to the static list
san7890 Oct 12, 2023
c70fd6b
misc. code cleanup
san7890 Oct 12, 2023
290d3f6
whoops
san7890 Oct 12, 2023
e470e97
TYPE_PROC_REF for say
san7890 Oct 12, 2023
b28db74
Parrottai (#34)
Ben10Omintrix Nov 13, 2023
af3678c
fixes alphabetizations
san7890 Nov 13, 2023
43e0c71
multilines that addcomponent
san7890 Nov 13, 2023
75dcc58
removes the movemanager thing
san7890 Nov 13, 2023
ff12c7b
qdels on login
san7890 Nov 13, 2023
36c3186
Oojo (#35)
Ben10Omintrix Nov 15, 2023
55216cd
deletes the autochangelogs
san7890 Nov 15, 2023
09961e5
caches code + code opt
san7890 Nov 15, 2023
4c2dca3
more changelog cleaning
san7890 Nov 15, 2023
4485fff
oh i fucked up that merge conflict
san7890 Nov 15, 2023
c665f83
moves traits + splits up some fiels
san7890 Nov 15, 2023
b1c10b1
deletes needless documentation
san7890 Nov 15, 2023
d3fc9fa
undefs
san7890 Nov 15, 2023
53005d9
alphabetizes the unit test thing
san7890 Nov 15, 2023
970cf9e
alphabetizes the ridable typecache
san7890 Nov 15, 2023
d17b0e6
whoops trait broke
san7890 Nov 15, 2023
ec7596f
MORE UNDEFS
san7890 Nov 15, 2023
96a5541
epic DME fail
san7890 Nov 15, 2023
956ce9a
should fix TFE?
san7890 Nov 15, 2023
821b8cf
adds updatepaths
san7890 Nov 15, 2023
9925690
runs updatepaths
san7890 Nov 15, 2023
c64b7bc
Kobsa Code Review
san7890 Nov 15, 2023
6a6cdef
`desired_perches` is typecache
san7890 Nov 15, 2023
89ae9ac
fixes the DCS issue and centralizes edibles
san7890 Nov 15, 2023
9b218ad
`CARBON_GENERIC_BODY_ZONES` ended up being useless
san7890 Nov 15, 2023
6ea5dad
deletes `parrot_damage_upper`
san7890 Nov 15, 2023
804da3c
more parrot code cleaning
san7890 Nov 15, 2023
ecde906
oh we should rename parrot.dm too huh
san7890 Nov 15, 2023
81accc4
patches up `Write_Memory()` to be nicer
san7890 Nov 15, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions _maps/RandomRuins/SpaceRuins/russian_derelict.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -4876,10 +4876,6 @@
/obj/structure/cable,
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/engineering/singulo)
"IZ" = (
/obj/effect/mapping_helpers/burnt_floor,
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/engineering/singulo)
"Jc" = (
/obj/effect/mapping_helpers/broken_floor,
/obj/effect/mapping_helpers/broken_floor,
Expand Down Expand Up @@ -11718,7 +11714,7 @@ PI
Ex
pi
FI
IZ
FI
FI
FI
zv
Expand Down
2 changes: 1 addition & 1 deletion _maps/map_files/Birdshot/birdshot.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -16085,7 +16085,7 @@
/obj/structure/chair/office/light{
dir = 4
},
/mob/living/simple_animal/parrot/poly,
/mob/living/basic/poly,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 4
Expand Down
2 changes: 1 addition & 1 deletion _maps/map_files/Deltastation/DeltaStation2.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -34717,7 +34717,7 @@
/obj/structure/filingcabinet/chestdrawer,
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/machinery/newscaster/directional/north,
/mob/living/simple_animal/parrot/poly,
/mob/living/basic/poly,
/turf/open/floor/iron/dark,
/area/station/command/heads_quarters/ce)
"iDq" = (
Expand Down
2 changes: 1 addition & 1 deletion _maps/map_files/IceBoxStation/IceBoxStation.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -4587,7 +4587,7 @@
"bup" = (
/obj/structure/filingcabinet/chestdrawer,
/obj/effect/turf_decal/tile/neutral/fourcorners,
/mob/living/simple_animal/parrot/poly,
/mob/living/basic/poly,
/turf/open/floor/iron/dark,
/area/station/command/heads_quarters/ce)
"buv" = (
Expand Down
2 changes: 1 addition & 1 deletion _maps/map_files/MetaStation/MetaStation.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -3127,7 +3127,7 @@
"bdV" = (
/obj/structure/filingcabinet/chestdrawer,
/obj/effect/turf_decal/tile/neutral/fourcorners,
/mob/living/simple_animal/parrot/poly,
/mob/living/basic/poly,
/turf/open/floor/iron/dark,
/area/station/command/heads_quarters/ce)
"beo" = (
Expand Down
2 changes: 1 addition & 1 deletion _maps/map_files/NorthStar/north_star.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -6814,7 +6814,7 @@
/obj/machinery/computer/security/telescreen/engine{
name = "Engineering and atmospherics monitor"
},
/mob/living/simple_animal/parrot/poly,
/mob/living/basic/poly,
/turf/open/floor/catwalk_floor/iron_dark,
/area/station/command/heads_quarters/ce)
"bIQ" = (
Expand Down
2 changes: 1 addition & 1 deletion _maps/map_files/tramstation/tramstation.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -47552,7 +47552,7 @@
},
/obj/machinery/power/apc/auto_name/directional/north,
/obj/structure/cable,
/mob/living/simple_animal/parrot/poly,
/mob/living/basic/poly,
/turf/open/floor/iron,
/area/station/command/heads_quarters/ce)
"pWt" = (
Expand Down
2 changes: 1 addition & 1 deletion _maps/shuttles/emergency_hugcage.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/escape)
"dz" = (
/mob/living/simple_animal/parrot/natural{
/mob/living/basic/parrot{
melee_damage_upper = 5
},
/turf/open/floor/mineral/titanium/blue,
Expand Down
2 changes: 1 addition & 1 deletion _maps/shuttles/ruin_pirate_cutter.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -702,7 +702,7 @@
"Ry" = (
/obj/structure/rack,
/obj/item/storage/bag/money/vault,
/mob/living/simple_animal/parrot{
/mob/living/basic/parrot{
faction = list("pirate");
name = "Pegwing"
},
Expand Down
2 changes: 1 addition & 1 deletion _maps/virtual_domains/pirates.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -791,7 +791,7 @@
/area/virtual_domain/powered)
"Pz" = (
/obj/structure/table/wood,
/mob/living/simple_animal/parrot{
/mob/living/basic/parrot{
name = "pepper"
},
/turf/open/floor/carpet/blue,
Expand Down
24 changes: 24 additions & 0 deletions code/__DEFINES/ai/pets.dm
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,27 @@
#define BB_FIND_MOM_TYPES "BB_find_mom_types"
///list of types of mobs we must ignore
#define BB_IGNORE_MOM_TYPES "BB_ignore_mom_types"

/// The current string that this parrot will repeat back to someone
#define BB_PARROT_REPEAT_STRING "BB_parrot_repeat_string"
/// The odds that this parrot will repeat back a string
#define BB_PARROT_REPEAT_PROBABILITY "BB_parrot_repeat_probability"
/// The odds that this parrot will choose another string to repeat
#define BB_PARROT_PHRASE_CHANGE_PROBABILITY "BB_parrot_phrase_change_probability"
/// A copy of the string buffer that we end the shift with. DO NOT ACCESS THIS DIRECTLY - YOU SHOULD USE THE COMPONENT IN MOST CASES
#define BB_EXPORTABLE_STRING_BUFFER_LIST "BB_parrot_repeat_string_buffer"
/// The types of perches we desire to use
#define BB_PARROT_PERCH_TYPES "BB_parrot_perch_types"
/// key that holds our perch target
#define BB_PERCH_TARGET "perch_target"
/// key that holds our theft item target
#define BB_HOARD_ITEM_TARGET "hoard_item_target"
/// key that holds the mob we will steal from
#define BB_THEFT_VICTIM "theft_victim"
/// key that holds the turf we will be hauling stolen items to
#define BB_HOARD_LOCATION "hoard_location"
/// key that holds the minimum range we must be from the hoard spot
#define BB_HOARD_LOCATION_RANGE "hoard_location_range"
/// key that holds items we arent interested in hoarding
#define BB_IGNORE_ITEMS "ignore_items"

Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,17 @@
#define COMSIG_MOVABLE_THROW_LANDED "movable_throw_landed"
///from base of atom/movable/on_changed_z_level(): (turf/old_turf, turf/new_turf, same_z_layer)
#define COMSIG_MOVABLE_Z_CHANGED "movable_ztransit"
///called before hearing a message froma tom/movable/Hear():
#define COMSIG_MOVABLE_PRE_HEAR "movable_pre_hear"
///do not proceed to hear the message
#define COMSIG_MOVABLE_CANCEL_HEARING (1<<0)
///from base of atom/movable/Hear(): (proc args list(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, list/message_mods = list(), message_range))
#define COMSIG_MOVABLE_HEAR "movable_hear"
//#define HEARING_MESSAGE 1 - (I'm pretty sure this is never really used and can be gutted)
#define HEARING_MESSAGE 1
#define HEARING_SPEAKER 2
#define HEARING_LANGUAGE 3
#define HEARING_RAW_MESSAGE 4
//#define HEARING_RADIO_FREQ 5
#define HEARING_RADIO_FREQ 5
#define HEARING_SPANS 6
#define HEARING_MESSAGE_MODE 7
#define HEARING_RANGE 8
Expand Down
1 change: 1 addition & 0 deletions code/__DEFINES/dcs/signals/signals_mob/signals_mob_ai.dm
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@

/// Signal sent when a blackboard key is cleared
#define COMSIG_AI_BLACKBOARD_KEY_CLEARED(blackboard_key) "ai_blackboard_key_clear_[blackboard_key]"

4 changes: 4 additions & 0 deletions code/__DEFINES/dcs/signals/signals_mob/signals_mob_basic.dm
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,7 @@

///from the ranged_attacks component for basic mobs: (mob/living/basic/firer, atom/target, modifiers)
#define COMSIG_BASICMOB_POST_ATTACK_RANGED "basicmob_post_attack_ranged"

/// Sent from /datum/ai_planning_subtree/parrot_as_in_repeat() : ()
#define COMSIG_NEEDS_NEW_PHRASE "parrot_needs_new_phrase"
#define NO_NEW_PHRASE_AVAILABLE (1<<0) //! Cancel to try again later for when we actually get a new phrase
2 changes: 2 additions & 0 deletions code/__DEFINES/traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_NO_TRANSFORM "block_transformations"
/// Tracks whether we're gonna be a baby alien's mummy.
#define TRAIT_XENO_HOST "xeno_host"
/// This parrot is currently perched
#define TRAIT_PARROT_PERCHED "parrot_perched"
/// This mob is immune to stun causing status effects and stamcrit.
/// Prefer to use [/mob/living/proc/check_stun_immunity] over checking for this trait exactly.
#define TRAIT_STUNIMMUNE "stun_immunity"
Expand Down
2 changes: 1 addition & 1 deletion code/_globalvars/phobias.dm
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,8 @@ GLOBAL_LIST_INIT(phobia_mobs, list(
"birds" = typecacheof(list(
/mob/living/basic/chick,
/mob/living/basic/chicken,
/mob/living/basic/parrot,
/mob/living/basic/pet/penguin,
/mob/living/simple_animal/parrot,
)),
"conspiracies" = typecacheof(list(
/mob/living/basic/drone,
Expand Down
5 changes: 3 additions & 2 deletions code/controllers/subsystem/persistence/_persistence.dm
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,9 @@ SUBSYSTEM_DEF(persistence)

///Loads up Poly's speech buffer.
/datum/controller/subsystem/persistence/proc/load_poly()
for(var/mob/living/simple_animal/parrot/poly/P in GLOB.alive_mob_list)
twitterize(P.speech_buffer, "polytalk")
for(var/mob/living/basic/parrot/poly/bird in GLOB.alive_mob_list)
var/list/list_to_read = bird.get_static_list_of_phrases()
twitterize(list_to_read, "polytalk")
break //Who's been duping the bird?!

/// Loads up the amount of times maps appeared to alter their appearance in voting and rotation.
Expand Down
11 changes: 11 additions & 0 deletions code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
/datum/ai_behavior/basic_melee_attack
action_cooldown = 0.2 SECONDS // We gotta check unfortunately often because we're in a race condition with nextmove
behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION
///do we finish this action after hitting once?
var/terminate_after_action = FALSE

/datum/ai_behavior/basic_melee_attack/setup(datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key)
. = ..()
Expand Down Expand Up @@ -39,12 +41,21 @@
else
basic_mob.melee_attack(target)

if(terminate_after_action)
finish_action(controller, TRUE, target_key)

/datum/ai_behavior/basic_melee_attack/finish_action(datum/ai_controller/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key)
. = ..()
if(!succeeded)
controller.clear_blackboard_key(target_key)

/datum/ai_behavior/basic_melee_attack/interact_once
terminate_after_action = TRUE

/datum/ai_behavior/basic_melee_attack/interact_once/finish_action(datum/ai_controller/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key)
. = ..()
controller.clear_blackboard_key(target_key)

/datum/ai_behavior/basic_ranged_attack
action_cooldown = 0.6 SECONDS
behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_MOVE_AND_PERFORM
Expand Down
14 changes: 14 additions & 0 deletions code/datums/ai/basic_mobs/basic_ai_behaviors/unbuckle_mob.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/datum/ai_behavior/unbuckle_mob

/datum/ai_behavior/unbuckle_mob/perform(seconds_per_tick, datum/ai_controller/controller)
. = ..()

var/mob/living/living_pawn = controller.pawn
var/atom/movable/buckled_too = living_pawn.buckled

if(isnull(buckled_too))
finish_action(controller, FALSE)
return

buckled_too.unbuckle_mob(living_pawn)
finish_action(controller, TRUE)
23 changes: 23 additions & 0 deletions code/datums/ai/generic/find_and_set.dm
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,16 @@
if(length(found))
return pick(found)

/// Like find_and_set/in_list, but we return the turf location of the item instead of the item itself.
/datum/ai_behavior/find_and_set/in_list/turf_location

/datum/ai_behavior/find_and_set/in_list/turf_location/search_tactic(datum/ai_controller/controller, locate_paths, search_range)
. = ..()
if(isnull(.))
return null

return get_turf(.)

/**
* Variant of find and set which returns an object which can be animated with a staff of change
*/
Expand Down Expand Up @@ -148,3 +158,16 @@
return pick(customers)

return null

/datum/ai_behavior/find_and_set/nearby_friends
action_cooldown = 2 SECONDS

/datum/ai_behavior/find_and_set/nearby_friends/search_tactic(datum/ai_controller/controller, locate_path, search_range)
var/atom/friend = locate(/mob/living/carbon/human) in oview(search_range, controller.pawn)

if(isnull(friend))
return null

var/mob/living/living_pawn = controller.pawn
var/potential_friend = living_pawn.faction.Find(REF(friend)) ? friend : null
return potential_friend
2 changes: 2 additions & 0 deletions code/datums/ai/generic/generic_behaviors.dm
Original file line number Diff line number Diff line change
Expand Up @@ -299,6 +299,8 @@
/datum/ai_behavior/perform_speech

/datum/ai_behavior/perform_speech/perform(seconds_per_tick, datum/ai_controller/controller, speech, speech_sound)
. = ..()

var/mob/living/living_pawn = controller.pawn
if(!istype(living_pawn))
return
Expand Down
77 changes: 77 additions & 0 deletions code/datums/components/listen_and_repeat.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
/// The maximum number of phrases we can store in our speech buffer
#define MAX_SPEECH_BUFFER_SIZE 500
/// Tendency we have to ignore radio chatter
#define RADIO_IGNORE_CHANCE 10

/// Simple element that will deterministically set a value based on stuff that the source has heard and will then compel the source to repeat it.
/// Requires a valid AI Blackboard.
/datum/component/listen_and_repeat
/// List of things that we start out having in our speech buffer
var/list/desired_phrases = null
/// The AI Blackboard Key we assign the value to.
var/blackboard_key = null
/// Probability we speak
var/speech_probability = null
/// Probabiliy we switch our phrase
var/switch_phrase_probability = null
/// List of things that we've heard and will repeat.
var/list/speech_buffer = null

/datum/component/listen_and_repeat/Initialize(list/desired_phrases, blackboard_key)
. = ..()
if(!ismovable(parent))
return COMPONENT_INCOMPATIBLE

if(!isnull(desired_phrases))
LAZYADD(speech_buffer, desired_phrases)

src.blackboard_key = blackboard_key

RegisterSignal(parent, COMSIG_MOVABLE_PRE_HEAR, PROC_REF(on_hear))
RegisterSignal(parent, COMSIG_NEEDS_NEW_PHRASE, PROC_REF(set_new_blackboard_phrase))
RegisterSignal(parent, COMSIG_LIVING_WRITE_MEMORY, PROC_REF(on_write_memory))

/// Called when we hear something.
/datum/component/listen_and_repeat/proc/on_hear(datum/source, list/passed_arguments)
SIGNAL_HANDLER

var/message = passed_arguments[HEARING_RAW_MESSAGE]
var/speaker = passed_arguments[HEARING_SPEAKER]
var/over_radio = !!passed_arguments[HEARING_RADIO_FREQ]
if(speaker == source) // don't parrot ourselves
return

if(over_radio && prob(RADIO_IGNORE_CHANCE))
return

var/number_of_excess_strings = LAZYLEN(speech_buffer) - MAX_SPEECH_BUFFER_SIZE
if(number_of_excess_strings > 0) // only remove if we're overfull
for(var/i in 1 to number_of_excess_strings)
LAZYREMOVE(speech_buffer, pick(speech_buffer))

LAZYOR(speech_buffer, html_decode(message))

/// Called to set a new value for the blackboard key.
/datum/component/listen_and_repeat/proc/set_new_blackboard_phrase(datum/source)
SIGNAL_HANDLER
var/atom/movable/atom_source = source
var/datum/ai_controller/controller = atom_source.ai_controller
if(!LAZYLEN(speech_buffer))
controller.clear_blackboard_key(blackboard_key)
return NO_NEW_PHRASE_AVAILABLE

var/selected_phrase = pick(speech_buffer)
controller.set_blackboard_key(blackboard_key, selected_phrase)

/// Exports all the speech buffer data to a dedicated blackboard key on the source.
/datum/component/listen_and_repeat/proc/on_write_memory(datum/source, dead, gibbed)
SIGNAL_HANDLER
var/atom/movable/atom_source = source
var/datum/ai_controller/controller = atom_source.ai_controller
if(LAZYLEN(speech_buffer)) // what? well whatever let's just move on
return

controller.set_blackboard_key(BB_EXPORTABLE_STRING_BUFFER_LIST, speech_buffer.Copy())

#undef MAX_SPEECH_BUFFER_SIZE
#undef RADIO_IGNORE_CHANCE
2 changes: 1 addition & 1 deletion code/datums/components/supermatter_crystal.dm
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,7 @@
message_admins("[atom_source] has consumed [key_name_admin(consumed_mob)] [ADMIN_JMP(atom_source)].")
atom_source.investigate_log("has consumed [key_name(consumed_mob)].", INVESTIGATE_ENGINE)
consumed_mob.investigate_log("has been dusted by [atom_source].", INVESTIGATE_DEATHS)
if(istype(consumed_mob, /mob/living/simple_animal/parrot/poly)) // Dusting Poly creates a power surge
if(istype(consumed_mob, /mob/living/basic/parrot/poly)) // Dusting Poly creates a power surge
force_event(/datum/round_event_control/supermatter_surge/poly, "Poly's revenge")
notify_ghosts(
"[consumed_mob] has been dusted by [atom_source]!",
Expand Down
Loading
Loading