Merge pull request #10569 from keronshb/RemoteMoodResearch

Ports the Nanite Remote, Nanite Mood Programs + Rebalance, and the Research Generating Nanites
This commit is contained in:
kevinz000
2020-01-17 14:24:13 -07:00
committed by GitHub
16 changed files with 949 additions and 603 deletions

View File

@@ -1,348 +1,350 @@
#define SEND_SIGNAL(target, sigtype, arguments...) ( !target.comp_lookup || !target.comp_lookup[sigtype] ? NONE : target._SendSignal(sigtype, list(target, ##arguments)) ) #define SEND_SIGNAL(target, sigtype, arguments...) ( !target.comp_lookup || !target.comp_lookup[sigtype] ? NONE : target._SendSignal(sigtype, list(target, ##arguments)) )
#define SEND_GLOBAL_SIGNAL(sigtype, arguments...) ( SEND_SIGNAL(SSdcs, sigtype, ##arguments) ) #define SEND_GLOBAL_SIGNAL(sigtype, arguments...) ( SEND_SIGNAL(SSdcs, sigtype, ##arguments) )
#define COMPONENT_INCOMPATIBLE 1 #define COMPONENT_INCOMPATIBLE 1
#define COMPONENT_NOTRANSFER 2 #define COMPONENT_NOTRANSFER 2
#define ELEMENT_INCOMPATIBLE 1 // Return value to cancel attaching #define ELEMENT_INCOMPATIBLE 1 // Return value to cancel attaching
// /datum/element flags // /datum/element flags
/// Causes the detach proc to be called when the host object is being deleted /// Causes the detach proc to be called when the host object is being deleted
#define ELEMENT_DETACH (1 << 0) #define ELEMENT_DETACH (1 << 0)
/** /**
* Only elements created with the same arguments given after `id_arg_index` share an element instance * Only elements created with the same arguments given after `id_arg_index` share an element instance
* The arguments are the same when the text and number values are the same and all other values have the same ref * The arguments are the same when the text and number values are the same and all other values have the same ref
*/ */
#define ELEMENT_BESPOKE (1 << 1) #define ELEMENT_BESPOKE (1 << 1)
// How multiple components of the exact same type are handled in the same datum // How multiple components of the exact same type are handled in the same datum
#define COMPONENT_DUPE_HIGHLANDER 0 //old component is deleted (default) #define COMPONENT_DUPE_HIGHLANDER 0 //old component is deleted (default)
#define COMPONENT_DUPE_ALLOWED 1 //duplicates allowed #define COMPONENT_DUPE_ALLOWED 1 //duplicates allowed
#define COMPONENT_DUPE_UNIQUE 2 //new component is deleted #define COMPONENT_DUPE_UNIQUE 2 //new component is deleted
#define COMPONENT_DUPE_UNIQUE_PASSARGS 4 //old component is given the initialization args of the new #define COMPONENT_DUPE_UNIQUE_PASSARGS 4 //old component is given the initialization args of the new
// All signals. Format: // All signals. Format:
// When the signal is called: (signal arguments) // When the signal is called: (signal arguments)
// All signals send the source datum of the signal as the first argument // All signals send the source datum of the signal as the first argument
// global signals // global signals
// These are signals which can be listened to by any component on any parent // These are signals which can be listened to by any component on any parent
// start global signals with "!", this used to be necessary but now it's just a formatting choice // start global signals with "!", this used to be necessary but now it's just a formatting choice
#define COMSIG_GLOB_NEW_Z "!new_z" //from base of datum/controller/subsystem/mapping/proc/add_new_zlevel(): (list/args) #define COMSIG_GLOB_NEW_Z "!new_z" //from base of datum/controller/subsystem/mapping/proc/add_new_zlevel(): (list/args)
#define COMSIG_GLOB_VAR_EDIT "!var_edit" //called after a successful var edit somewhere in the world: (list/args) #define COMSIG_GLOB_VAR_EDIT "!var_edit" //called after a successful var edit somewhere in the world: (list/args)
#define COMSIG_GLOB_LIVING_SAY_SPECIAL "!say_special" //global living say plug - use sparingly: (mob/speaker , message) #define COMSIG_GLOB_LIVING_SAY_SPECIAL "!say_special" //global living say plug - use sparingly: (mob/speaker , message)
////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////
// /datum signals // /datum signals
#define COMSIG_COMPONENT_ADDED "component_added" //sent to the new datum parent when a component is added to them: (/datum/component) #define COMSIG_COMPONENT_ADDED "component_added" //sent to the new datum parent when a component is added to them: (/datum/component)
#define COMSIG_COMPONENT_REMOVING "component_removing" //sent to the datum parent before a component is removed from them because of RemoveComponent: (/datum/component) #define COMSIG_COMPONENT_REMOVING "component_removing" //sent to the datum parent before a component is removed from them because of RemoveComponent: (/datum/component)
#define COMSIG_COMPONENT_UNREGISTER_PARENT "component_unregister_parent" //sent to the component itself when unregistered from a parent #define COMSIG_COMPONENT_UNREGISTER_PARENT "component_unregister_parent" //sent to the component itself when unregistered from a parent
#define COMSIG_COMPONENT_REGISTER_PARENT "component_register_parent" //sent to the component itself when registered to a parent #define COMSIG_COMPONENT_REGISTER_PARENT "component_register_parent" //sent to the component itself when registered to a parent
#define COMSIG_PARENT_PREQDELETED "parent_preqdeleted" //before a datum's Destroy() is called: (force), returning a nonzero value will cancel the qdel operation #define COMSIG_PARENT_PREQDELETED "parent_preqdeleted" //before a datum's Destroy() is called: (force), returning a nonzero value will cancel the qdel operation
#define COMSIG_PARENT_QDELETING "parent_qdeleting" //just before a datum's Destroy() is called: (force), at this point none of the other components chose to interrupt qdel and Destroy will be called #define COMSIG_PARENT_QDELETING "parent_qdeleting" //just before a datum's Destroy() is called: (force), at this point none of the other components chose to interrupt qdel and Destroy will be called
// /atom signals // /atom signals
#define COMSIG_PARENT_ATTACKBY "atom_attackby" //from base of atom/attackby(): (/obj/item, /mob/living, params) #define COMSIG_PARENT_ATTACKBY "atom_attackby" //from base of atom/attackby(): (/obj/item, /mob/living, params)
#define COMPONENT_NO_AFTERATTACK 1 //Return this in response if you don't want afterattack to be called #define COMPONENT_NO_AFTERATTACK 1 //Return this in response if you don't want afterattack to be called
#define COMSIG_ATOM_HULK_ATTACK "hulk_attack" //from base of atom/attack_hulk(): (/mob/living/carbon/human) #define COMSIG_ATOM_HULK_ATTACK "hulk_attack" //from base of atom/attack_hulk(): (/mob/living/carbon/human)
#define COMSIG_PARENT_EXAMINE "atom_examine" //from base of atom/examine(): (/mob) #define COMSIG_PARENT_EXAMINE "atom_examine" //from base of atom/examine(): (/mob)
#define COMSIG_ATOM_GET_EXAMINE_NAME "atom_examine_name" //from base of atom/get_examine_name(): (/mob, list/overrides) #define COMSIG_ATOM_GET_EXAMINE_NAME "atom_examine_name" //from base of atom/get_examine_name(): (/mob, list/overrides)
//Positions for overrides list //Positions for overrides list
#define EXAMINE_POSITION_ARTICLE 1 #define EXAMINE_POSITION_ARTICLE 1
#define EXAMINE_POSITION_BEFORE 2 #define EXAMINE_POSITION_BEFORE 2
//End positions //End positions
#define COMPONENT_EXNAME_CHANGED 1 #define COMPONENT_EXNAME_CHANGED 1
#define COMSIG_ATOM_UPDATE_ICON "atom_update_icon" //from base of atom/update_icon(): () #define COMSIG_ATOM_UPDATE_ICON "atom_update_icon" //from base of atom/update_icon(): ()
#define COMSIG_ATOM_NO_UPDATE_ICON_STATE 1 #define COMSIG_ATOM_NO_UPDATE_ICON_STATE 1
#define COMSIG_ATOM_NO_UPDATE_OVERLAYS 2 #define COMSIG_ATOM_NO_UPDATE_OVERLAYS 2
#define COMSIG_ATOM_UPDATE_OVERLAYS "atom_update_overlays" //from base of atom/update_overlays(): (list/new_overlays) #define COMSIG_ATOM_UPDATE_OVERLAYS "atom_update_overlays" //from base of atom/update_overlays(): (list/new_overlays)
#define COMSIG_ATOM_ENTERED "atom_entered" //from base of atom/Entered(): (atom/movable/entering, /atom) #define COMSIG_ATOM_ENTERED "atom_entered" //from base of atom/Entered(): (atom/movable/entering, /atom)
#define COMSIG_ATOM_EXIT "atom_exit" //from base of atom/Exit(): (/atom/movable/exiting, /atom/newloc) #define COMSIG_ATOM_EXIT "atom_exit" //from base of atom/Exit(): (/atom/movable/exiting, /atom/newloc)
#define COMPONENT_ATOM_BLOCK_EXIT 1 #define COMPONENT_ATOM_BLOCK_EXIT 1
#define COMSIG_ATOM_EXITED "atom_exited" //from base of atom/Exited(): (atom/movable/exiting, atom/newloc) #define COMSIG_ATOM_EXITED "atom_exited" //from base of atom/Exited(): (atom/movable/exiting, atom/newloc)
#define COMSIG_ATOM_EX_ACT "atom_ex_act" //from base of atom/ex_act(): (severity, target) #define COMSIG_ATOM_EX_ACT "atom_ex_act" //from base of atom/ex_act(): (severity, target)
#define COMSIG_ATOM_EMP_ACT "atom_emp_act" //from base of atom/emp_act(): (severity) #define COMSIG_ATOM_EMP_ACT "atom_emp_act" //from base of atom/emp_act(): (severity)
#define COMSIG_ATOM_FIRE_ACT "atom_fire_act" //from base of atom/fire_act(): (exposed_temperature, exposed_volume) #define COMSIG_ATOM_FIRE_ACT "atom_fire_act" //from base of atom/fire_act(): (exposed_temperature, exposed_volume)
#define COMSIG_ATOM_BULLET_ACT "atom_bullet_act" //from base of atom/bullet_act(): (/obj/item/projectile, def_zone) #define COMSIG_ATOM_BULLET_ACT "atom_bullet_act" //from base of atom/bullet_act(): (/obj/item/projectile, def_zone)
#define COMSIG_ATOM_BLOB_ACT "atom_blob_act" //from base of atom/blob_act(): (/obj/structure/blob) #define COMSIG_ATOM_BLOB_ACT "atom_blob_act" //from base of atom/blob_act(): (/obj/structure/blob)
#define COMSIG_ATOM_ACID_ACT "atom_acid_act" //from base of atom/acid_act(): (acidpwr, acid_volume) #define COMSIG_ATOM_ACID_ACT "atom_acid_act" //from base of atom/acid_act(): (acidpwr, acid_volume)
#define COMSIG_ATOM_EMAG_ACT "atom_emag_act" //from base of atom/emag_act(): () #define COMSIG_ATOM_EMAG_ACT "atom_emag_act" //from base of atom/emag_act(): ()
#define COMSIG_ATOM_RAD_ACT "atom_rad_act" //from base of atom/rad_act(intensity) #define COMSIG_ATOM_RAD_ACT "atom_rad_act" //from base of atom/rad_act(intensity)
#define COMSIG_ATOM_NARSIE_ACT "atom_narsie_act" //from base of atom/narsie_act(): () #define COMSIG_ATOM_NARSIE_ACT "atom_narsie_act" //from base of atom/narsie_act(): ()
#define COMSIG_ATOM_RATVAR_ACT "atom_ratvar_act" //from base of atom/ratvar_act(): () #define COMSIG_ATOM_RATVAR_ACT "atom_ratvar_act" //from base of atom/ratvar_act(): ()
#define COMSIG_ATOM_RCD_ACT "atom_rcd_act" //from base of atom/rcd_act(): (/mob, /obj/item/construction/rcd, passed_mode) #define COMSIG_ATOM_RCD_ACT "atom_rcd_act" //from base of atom/rcd_act(): (/mob, /obj/item/construction/rcd, passed_mode)
#define COMSIG_ATOM_SING_PULL "atom_sing_pull" //from base of atom/singularity_pull(): (S, current_size) #define COMSIG_ATOM_SING_PULL "atom_sing_pull" //from base of atom/singularity_pull(): (S, current_size)
#define COMSIG_ATOM_SET_LIGHT "atom_set_light" //from base of atom/set_light(): (l_range, l_power, l_color) #define COMSIG_ATOM_SET_LIGHT "atom_set_light" //from base of atom/set_light(): (l_range, l_power, l_color)
#define COMSIG_ATOM_DIR_CHANGE "atom_dir_change" //from base of atom/setDir(): (old_dir, new_dir) #define COMSIG_ATOM_DIR_CHANGE "atom_dir_change" //from base of atom/setDir(): (old_dir, new_dir)
#define COMSIG_ATOM_CONTENTS_DEL "atom_contents_del" //from base of atom/handle_atom_del(): (atom/deleted) #define COMSIG_ATOM_CONTENTS_DEL "atom_contents_del" //from base of atom/handle_atom_del(): (atom/deleted)
#define COMSIG_ATOM_HAS_GRAVITY "atom_has_gravity" //from base of atom/has_gravity(): (turf/location, list/forced_gravities) #define COMSIG_ATOM_HAS_GRAVITY "atom_has_gravity" //from base of atom/has_gravity(): (turf/location, list/forced_gravities)
#define COMSIG_ATOM_RAD_PROBE "atom_rad_probe" //from proc/get_rad_contents(): () #define COMSIG_ATOM_RAD_PROBE "atom_rad_probe" //from proc/get_rad_contents(): ()
#define COMPONENT_BLOCK_RADIATION 1 #define COMPONENT_BLOCK_RADIATION 1
#define COMSIG_ATOM_RAD_CONTAMINATING "atom_rad_contam" //from base of datum/radiation_wave/radiate(): (strength) #define COMSIG_ATOM_RAD_CONTAMINATING "atom_rad_contam" //from base of datum/radiation_wave/radiate(): (strength)
#define COMPONENT_BLOCK_CONTAMINATION 1 #define COMPONENT_BLOCK_CONTAMINATION 1
#define COMSIG_ATOM_RAD_WAVE_PASSING "atom_rad_wave_pass" //from base of datum/radiation_wave/check_obstructions(): (datum/radiation_wave, width) #define COMSIG_ATOM_RAD_WAVE_PASSING "atom_rad_wave_pass" //from base of datum/radiation_wave/check_obstructions(): (datum/radiation_wave, width)
#define COMPONENT_RAD_WAVE_HANDLED 1 #define COMPONENT_RAD_WAVE_HANDLED 1
#define COMSIG_ATOM_CANREACH "atom_can_reach" //from internal loop in atom/movable/proc/CanReach(): (list/next) #define COMSIG_ATOM_CANREACH "atom_can_reach" //from internal loop in atom/movable/proc/CanReach(): (list/next)
#define COMPONENT_BLOCK_REACH 1 #define COMPONENT_BLOCK_REACH 1
#define COMSIG_ATOM_SCREWDRIVER_ACT "atom_screwdriver_act" //from base of atom/screwdriver_act(): (mob/living/user, obj/item/I) #define COMSIG_ATOM_SCREWDRIVER_ACT "atom_screwdriver_act" //from base of atom/screwdriver_act(): (mob/living/user, obj/item/I)
#define COMSIG_ATOM_INTERCEPT_TELEPORT "intercept_teleport" //called when teleporting into a protected turf: (channel, turf/origin, turf/destination) #define COMSIG_ATOM_INTERCEPT_TELEPORT "intercept_teleport" //called when teleporting into a protected turf: (channel, turf/origin, turf/destination)
#define COMPONENT_BLOCK_TELEPORT 1 #define COMPONENT_BLOCK_TELEPORT 1
#define COMSIG_ATOM_HEARER_IN_VIEW "atom_hearer_in_view" //called when an atom with HEAR_1 is added to the hearers on /proc/get_hearers_in_view(): (list/processing_list, list/hearers) #define COMSIG_ATOM_HEARER_IN_VIEW "atom_hearer_in_view" //called when an atom with HEAR_1 is added to the hearers on /proc/get_hearers_in_view(): (list/processing_list, list/hearers)
///////////////// /////////////////
#define COMSIG_ATOM_ATTACK_GHOST "atom_attack_ghost" //from base of atom/attack_ghost(): (mob/dead/observer/ghost) #define COMSIG_ATOM_ATTACK_GHOST "atom_attack_ghost" //from base of atom/attack_ghost(): (mob/dead/observer/ghost)
#define COMSIG_ATOM_ATTACK_HAND "atom_attack_hand" //from base of atom/attack_hand(): (mob/user) #define COMSIG_ATOM_ATTACK_HAND "atom_attack_hand" //from base of atom/attack_hand(): (mob/user)
#define COMSIG_ATOM_ATTACK_PAW "atom_attack_paw" //from base of atom/attack_paw(): (mob/user) #define COMSIG_ATOM_ATTACK_PAW "atom_attack_paw" //from base of atom/attack_paw(): (mob/user)
#define COMPONENT_NO_ATTACK_HAND 1 //works on all 3. #define COMPONENT_NO_ATTACK_HAND 1 //works on all 3.
//This signal return value bitflags can be found in __DEFINES/misc.dm //This signal return value bitflags can be found in __DEFINES/misc.dm
#define COMSIG_ATOM_INTERCEPT_Z_FALL "movable_intercept_z_impact" //called for each movable in a turf contents on /turf/zImpact(): (atom/movable/A, levels) #define COMSIG_ATOM_INTERCEPT_Z_FALL "movable_intercept_z_impact" //called for each movable in a turf contents on /turf/zImpact(): (atom/movable/A, levels)
///////////////// /////////////////
#define COMSIG_ENTER_AREA "enter_area" //from base of area/Entered(): (/area) #define COMSIG_ENTER_AREA "enter_area" //from base of area/Entered(): (/area)
#define COMSIG_EXIT_AREA "exit_area" //from base of area/Exited(): (/area) #define COMSIG_EXIT_AREA "exit_area" //from base of area/Exited(): (/area)
#define COMSIG_CLICK "atom_click" //from base of atom/Click(): (location, control, params, mob/user) #define COMSIG_CLICK "atom_click" //from base of atom/Click(): (location, control, params, mob/user)
#define COMSIG_CLICK_SHIFT "shift_click" //from base of atom/ShiftClick(): (/mob) #define COMSIG_CLICK_SHIFT "shift_click" //from base of atom/ShiftClick(): (/mob)
#define COMSIG_CLICK_CTRL "ctrl_click" //from base of atom/CtrlClickOn(): (/mob) #define COMSIG_CLICK_CTRL "ctrl_click" //from base of atom/CtrlClickOn(): (/mob)
#define COMSIG_CLICK_ALT "alt_click" //from base of atom/AltClick(): (/mob) #define COMSIG_CLICK_ALT "alt_click" //from base of atom/AltClick(): (/mob)
#define COMSIG_CLICK_CTRL_SHIFT "ctrl_shift_click" //from base of atom/CtrlShiftClick(/mob) #define COMSIG_CLICK_CTRL_SHIFT "ctrl_shift_click" //from base of atom/CtrlShiftClick(/mob)
#define COMSIG_MOUSEDROP_ONTO "mousedrop_onto" //from base of atom/MouseDrop(): (/atom/over, /mob/user) #define COMSIG_MOUSEDROP_ONTO "mousedrop_onto" //from base of atom/MouseDrop(): (/atom/over, /mob/user)
#define COMPONENT_NO_MOUSEDROP 1 #define COMPONENT_NO_MOUSEDROP 1
#define COMSIG_MOUSEDROPPED_ONTO "mousedropped_onto" //from base of atom/MouseDrop_T: (/atom/from, /mob/user) #define COMSIG_MOUSEDROPPED_ONTO "mousedropped_onto" //from base of atom/MouseDrop_T: (/atom/from, /mob/user)
// /area signals // /area signals
#define COMSIG_AREA_ENTERED "area_entered" //from base of area/Entered(): (atom/movable/M) #define COMSIG_AREA_ENTERED "area_entered" //from base of area/Entered(): (atom/movable/M)
#define COMSIG_AREA_EXITED "area_exited" //from base of area/Exited(): (atom/movable/M) #define COMSIG_AREA_EXITED "area_exited" //from base of area/Exited(): (atom/movable/M)
// /turf signals // /turf signals
#define COMSIG_TURF_CHANGE "turf_change" //from base of turf/ChangeTurf(): (path, list/new_baseturfs, flags, list/transferring_comps) #define COMSIG_TURF_CHANGE "turf_change" //from base of turf/ChangeTurf(): (path, list/new_baseturfs, flags, list/transferring_comps)
#define COMSIG_TURF_HAS_GRAVITY "turf_has_gravity" //from base of atom/has_gravity(): (atom/asker, list/forced_gravities) #define COMSIG_TURF_HAS_GRAVITY "turf_has_gravity" //from base of atom/has_gravity(): (atom/asker, list/forced_gravities)
#define COMSIG_TURF_MULTIZ_NEW "turf_multiz_new" //from base of turf/New(): (turf/source, direction) #define COMSIG_TURF_MULTIZ_NEW "turf_multiz_new" //from base of turf/New(): (turf/source, direction)
// /atom/movable signals // /atom/movable signals
#define COMSIG_MOVABLE_MOVED "movable_moved" //from base of atom/movable/Moved(): (/atom, dir) #define COMSIG_MOVABLE_MOVED "movable_moved" //from base of atom/movable/Moved(): (/atom, dir)
#define COMSIG_MOVABLE_CROSS "movable_cross" //from base of atom/movable/Cross(): (/atom/movable) #define COMSIG_MOVABLE_CROSS "movable_cross" //from base of atom/movable/Cross(): (/atom/movable)
#define COMSIG_MOVABLE_CROSSED "movable_crossed" //from base of atom/movable/Crossed(): (/atom/movable) #define COMSIG_MOVABLE_CROSSED "movable_crossed" //from base of atom/movable/Crossed(): (/atom/movable)
#define COMSIG_MOVABLE_UNCROSS "movable_uncross" //from base of atom/movable/Uncross(): (/atom/movable) #define COMSIG_MOVABLE_UNCROSS "movable_uncross" //from base of atom/movable/Uncross(): (/atom/movable)
#define COMPONENT_MOVABLE_BLOCK_UNCROSS 1 #define COMPONENT_MOVABLE_BLOCK_UNCROSS 1
#define COMSIG_MOVABLE_UNCROSSED "movable_uncrossed" //from base of atom/movable/Uncrossed(): (/atom/movable) #define COMSIG_MOVABLE_UNCROSSED "movable_uncrossed" //from base of atom/movable/Uncrossed(): (/atom/movable)
#define COMSIG_MOVABLE_BUMP "movable_bump" //from base of atom/movable/Bump(): (/atom) #define COMSIG_MOVABLE_BUMP "movable_bump" //from base of atom/movable/Bump(): (/atom)
#define COMSIG_MOVABLE_IMPACT "movable_impact" //from base of atom/movable/throw_impact(): (/atom/hit_atom, /datum/thrownthing/throwingdatum) #define COMSIG_MOVABLE_IMPACT "movable_impact" //from base of atom/movable/throw_impact(): (/atom/hit_atom, /datum/thrownthing/throwingdatum)
#define COMSIG_MOVABLE_IMPACT_ZONE "item_impact_zone" //from base of mob/living/hitby(): (mob/living/target, hit_zone) #define COMSIG_MOVABLE_IMPACT_ZONE "item_impact_zone" //from base of mob/living/hitby(): (mob/living/target, hit_zone)
#define COMSIG_MOVABLE_BUCKLE "buckle" //from base of atom/movable/buckle_mob(): (mob, force) #define COMSIG_MOVABLE_BUCKLE "buckle" //from base of atom/movable/buckle_mob(): (mob, force)
#define COMSIG_MOVABLE_UNBUCKLE "unbuckle" //from base of atom/movable/unbuckle_mob(): (mob, force) #define COMSIG_MOVABLE_UNBUCKLE "unbuckle" //from base of atom/movable/unbuckle_mob(): (mob, force)
#define COMSIG_MOVABLE_PRE_THROW "movable_pre_throw" //from base of atom/movable/throw_at(): (list/args) #define COMSIG_MOVABLE_PRE_THROW "movable_pre_throw" //from base of atom/movable/throw_at(): (list/args)
#define COMPONENT_CANCEL_THROW 1 #define COMPONENT_CANCEL_THROW 1
#define COMSIG_MOVABLE_POST_THROW "movable_post_throw" //from base of atom/movable/throw_at(): (datum/thrownthing, spin) #define COMSIG_MOVABLE_POST_THROW "movable_post_throw" //from base of atom/movable/throw_at(): (datum/thrownthing, spin)
#define COMSIG_MOVABLE_Z_CHANGED "movable_ztransit" //from base of atom/movable/onTransitZ(): (old_z, new_z) #define COMSIG_MOVABLE_Z_CHANGED "movable_ztransit" //from base of atom/movable/onTransitZ(): (old_z, new_z)
#define COMSIG_MOVABLE_SECLUDED_LOCATION "movable_secluded" //called when the movable is placed in an unaccessible area, used for stationloving: () #define COMSIG_MOVABLE_SECLUDED_LOCATION "movable_secluded" //called when the movable is placed in an unaccessible area, used for stationloving: ()
#define COMSIG_MOVABLE_HEAR "movable_hear" //from base of atom/movable/Hear(): (message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode, atom/movable/source) #define COMSIG_MOVABLE_HEAR "movable_hear" //from base of atom/movable/Hear(): (message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode, atom/movable/source)
#define HEARING_MESSAGE 1 #define HEARING_MESSAGE 1
#define HEARING_SPEAKER 2 #define HEARING_SPEAKER 2
// #define HEARING_LANGUAGE 3 // #define HEARING_LANGUAGE 3
#define HEARING_RAW_MESSAGE 4 #define HEARING_RAW_MESSAGE 4
/* #define HEARING_RADIO_FREQ 5 /* #define HEARING_RADIO_FREQ 5
#define HEARING_SPANS 6 #define HEARING_SPANS 6
#define HEARING_MESSAGE_MODE 7 #define HEARING_MESSAGE_MODE 7
#define HEARING_SOURCE 8*/ #define HEARING_SOURCE 8*/
#define COMSIG_MOVABLE_DISPOSING "movable_disposing" //called when the movable is added to a disposal holder object for disposal movement: (obj/structure/disposalholder/holder, obj/machinery/disposal/source) #define COMSIG_MOVABLE_DISPOSING "movable_disposing" //called when the movable is added to a disposal holder object for disposal movement: (obj/structure/disposalholder/holder, obj/machinery/disposal/source)
#define COMSIG_MOVABLE_TELEPORTED "movable_teleported" //from base of do_teleport(): (channel, turf/origin, turf/destination) #define COMSIG_MOVABLE_TELEPORTED "movable_teleported" //from base of do_teleport(): (channel, turf/origin, turf/destination)
// /mind signals // /mind signals
#define COMSIG_PRE_MIND_TRANSFER "pre_mind_transfer" //from base of mind/transfer_to() before it's done: (new_character, old_character) #define COMSIG_PRE_MIND_TRANSFER "pre_mind_transfer" //from base of mind/transfer_to() before it's done: (new_character, old_character)
#define COMPONENT_STOP_MIND_TRANSFER 1 //stops the mind transfer from happening. #define COMPONENT_STOP_MIND_TRANSFER 1 //stops the mind transfer from happening.
#define COMSIG_MIND_TRANSFER "mind_transfer" //from base of mind/transfer_to() when it's done: (new_character, old_character) #define COMSIG_MIND_TRANSFER "mind_transfer" //from base of mind/transfer_to() when it's done: (new_character, old_character)
// /mob signals // /mob signals
#define COMSIG_MOB_EXAMINATE "mob_examinate" //from base of /mob/verb/examinate(): (atom/A) #define COMSIG_MOB_EXAMINATE "mob_examinate" //from base of /mob/verb/examinate(): (atom/A)
#define COMPONENT_ALLOW_EXAMINE 1 #define COMPONENT_ALLOW_EXAMINE 1
#define COMSIG_MOB_DEATH "mob_death" //from base of mob/death(): (gibbed) #define COMSIG_MOB_DEATH "mob_death" //from base of mob/death(): (gibbed)
#define COMPONENT_BLOCK_DEATH_BROADCAST 1 //stops the death from being broadcasted in deadchat. #define COMPONENT_BLOCK_DEATH_BROADCAST 1 //stops the death from being broadcasted in deadchat.
#define COMSIG_MOB_GHOSTIZE "mob_ghostize" //from base of mob/Ghostize(): (can_reenter_corpse, special, penalize) #define COMSIG_MOB_GHOSTIZE "mob_ghostize" //from base of mob/Ghostize(): (can_reenter_corpse, special, penalize)
#define COMPONENT_BLOCK_GHOSTING 1 #define COMPONENT_BLOCK_GHOSTING 1
#define COMSIG_MOB_ALLOWED "mob_allowed" //from base of obj/allowed(mob/M): (/obj) returns bool, if TRUE the mob has id access to the obj #define COMSIG_MOB_ALLOWED "mob_allowed" //from base of obj/allowed(mob/M): (/obj) returns bool, if TRUE the mob has id access to the obj
#define COMSIG_MOB_RECEIVE_MAGIC "mob_receive_magic" //from base of mob/anti_magic_check(): (mob/user, magic, holy, tinfoil, chargecost, self, protection_sources) #define COMSIG_MOB_RECEIVE_MAGIC "mob_receive_magic" //from base of mob/anti_magic_check(): (mob/user, magic, holy, tinfoil, chargecost, self, protection_sources)
#define COMPONENT_BLOCK_MAGIC 1 #define COMPONENT_BLOCK_MAGIC 1
#define COMSIG_MOB_HUD_CREATED "mob_hud_created" //from base of mob/create_mob_hud(): () #define COMSIG_MOB_HUD_CREATED "mob_hud_created" //from base of mob/create_mob_hud(): ()
#define COMSIG_MOB_ATTACK_HAND "mob_attack_hand" //from base of #define COMSIG_MOB_ATTACK_HAND "mob_attack_hand" //from base of
#define COMSIG_MOB_ITEM_ATTACK "mob_item_attack" //from base of /obj/item/attack(): (mob/M, mob/user) #define COMSIG_MOB_ITEM_ATTACK "mob_item_attack" //from base of /obj/item/attack(): (mob/M, mob/user)
#define COMPONENT_ITEM_NO_ATTACK 1 #define COMPONENT_ITEM_NO_ATTACK 1
#define COMSIG_MOB_ITEM_AFTERATTACK "mob_item_afterattack" //from base of obj/item/afterattack(): (atom/target, mob/user, proximity_flag, click_parameters) #define COMSIG_MOB_ITEM_AFTERATTACK "mob_item_afterattack" //from base of obj/item/afterattack(): (atom/target, mob/user, proximity_flag, click_parameters)
#define COMSIG_MOB_ATTACK_RANGED "mob_attack_ranged" //from base of mob/RangedAttack(): (atom/A, params) #define COMSIG_MOB_ATTACK_RANGED "mob_attack_ranged" //from base of mob/RangedAttack(): (atom/A, params)
#define COMSIG_MOB_THROW "mob_throw" //from base of /mob/throw_item(): (atom/target) #define COMSIG_MOB_THROW "mob_throw" //from base of /mob/throw_item(): (atom/target)
#define COMSIG_MOB_KEY_CHANGE "mob_key_change" //from base of /mob/transfer_ckey(): (new_character, old_character) #define COMSIG_MOB_KEY_CHANGE "mob_key_change" //from base of /mob/transfer_ckey(): (new_character, old_character)
#define COMSIG_MOB_PRE_PLAYER_CHANGE "mob_pre_player_change" //sent to the target mob from base of /mob/transfer_ckey() and /mind/transfer_to(): (our_character, their_character) #define COMSIG_MOB_PRE_PLAYER_CHANGE "mob_pre_player_change" //sent to the target mob from base of /mob/transfer_ckey() and /mind/transfer_to(): (our_character, their_character)
// #define COMPONENT_STOP_MIND_TRANSFER 1 // #define COMPONENT_STOP_MIND_TRANSFER 1
#define COMSIG_MOB_UPDATE_SIGHT "mob_update_sight" //from base of /mob/update_sight(): () #define COMSIG_MOB_UPDATE_SIGHT "mob_update_sight" //from base of /mob/update_sight(): ()
#define COMSIG_MOB_ON_NEW_MIND "mob_on_new_mind" //called when a new mind is assigned to a mob: () #define COMSIG_MOB_ON_NEW_MIND "mob_on_new_mind" //called when a new mind is assigned to a mob: ()
#define COMSIG_MOB_SAY "mob_say" // from /mob/living/say(): (proc args list) #define COMSIG_MOB_SAY "mob_say" // from /mob/living/say(): (proc args list)
#define COMPONENT_UPPERCASE_SPEECH 1 #define COMPONENT_UPPERCASE_SPEECH 1
// used to access COMSIG_MOB_SAY argslist // used to access COMSIG_MOB_SAY argslist
#define SPEECH_MESSAGE 1 #define SPEECH_MESSAGE 1
// #define SPEECH_BUBBLE_TYPE 2 // #define SPEECH_BUBBLE_TYPE 2
#define SPEECH_SPANS 3 #define SPEECH_SPANS 3
/* #define SPEECH_SANITIZE 4 /* #define SPEECH_SANITIZE 4
#define SPEECH_LANGUAGE 5 #define SPEECH_LANGUAGE 5
#define SPEECH_IGNORE_SPAM 6 #define SPEECH_IGNORE_SPAM 6
#define SPEECH_FORCED 7 */ #define SPEECH_FORCED 7 */
// /mob/living signals // /mob/living signals
#define COMSIG_LIVING_FULLY_HEAL "living_fully_healed" //from base of /mob/living/fully_heal(): (admin_revive) #define COMSIG_LIVING_FULLY_HEAL "living_fully_healed" //from base of /mob/living/fully_heal(): (admin_revive)
#define COMSIG_LIVING_REGENERATE_LIMBS "living_regenerate_limbs" //from base of /mob/living/regenerate_limbs(): (noheal, excluded_limbs) #define COMSIG_LIVING_REGENERATE_LIMBS "living_regenerate_limbs" //from base of /mob/living/regenerate_limbs(): (noheal, excluded_limbs)
#define COMSIG_LIVING_RESIST "living_resist" //from base of mob/living/resist() (/mob/living) #define COMSIG_LIVING_RESIST "living_resist" //from base of mob/living/resist() (/mob/living)
#define COMSIG_LIVING_IGNITED "living_ignite" //from base of mob/living/IgniteMob() (/mob/living) #define COMSIG_LIVING_IGNITED "living_ignite" //from base of mob/living/IgniteMob() (/mob/living)
#define COMSIG_LIVING_EXTINGUISHED "living_extinguished" //from base of mob/living/ExtinguishMob() (/mob/living) #define COMSIG_LIVING_EXTINGUISHED "living_extinguished" //from base of mob/living/ExtinguishMob() (/mob/living)
#define COMSIG_LIVING_ELECTROCUTE_ACT "living_electrocute_act" //from base of mob/living/electrocute_act(): (shock_damage) #define COMSIG_LIVING_ELECTROCUTE_ACT "living_electrocute_act" //from base of mob/living/electrocute_act(): (shock_damage)
#define COMSIG_LIVING_MINOR_SHOCK "living_minor_shock" //sent by stuff like stunbatons and tasers: () #define COMSIG_LIVING_MINOR_SHOCK "living_minor_shock" //sent by stuff like stunbatons and tasers: ()
#define COMSIG_LIVING_GUN_PROCESS_FIRE "living_gun_process_fire" //from base of /obj/item/gun/proc/process_fire(): (atom/target, params, zone_override) #define COMSIG_LIVING_GUN_PROCESS_FIRE "living_gun_process_fire" //from base of /obj/item/gun/proc/process_fire(): (atom/target, params, zone_override)
// /mob/living/carbon signals // /mob/living/carbon signals
#define COMSIG_CARBON_SOUNDBANG "carbon_soundbang" //from base of mob/living/carbon/soundbang_act(): (list(intensity)) #define COMSIG_CARBON_SOUNDBANG "carbon_soundbang" //from base of mob/living/carbon/soundbang_act(): (list(intensity))
// /mob/living/simple_animal/hostile signals // /mob/living/simple_animal/hostile signals
#define COMSIG_HOSTILE_ATTACKINGTARGET "hostile_attackingtarget" #define COMSIG_HOSTILE_ATTACKINGTARGET "hostile_attackingtarget"
#define COMPONENT_HOSTILE_NO_ATTACK 1 #define COMPONENT_HOSTILE_NO_ATTACK 1
// /obj signals // /obj signals
#define COMSIG_OBJ_DECONSTRUCT "obj_deconstruct" //from base of obj/deconstruct(): (disassembled) #define COMSIG_OBJ_DECONSTRUCT "obj_deconstruct" //from base of obj/deconstruct(): (disassembled)
#define COMSIG_OBJ_BREAK "obj_break" //from base of /obj/obj_break(): (damage_flag) #define COMSIG_OBJ_BREAK "obj_break" //from base of /obj/obj_break(): (damage_flag)
#define COMSIG_OBJ_SETANCHORED "obj_setanchored" //called in /obj/structure/setAnchored(): (value) #define COMSIG_OBJ_SETANCHORED "obj_setanchored" //called in /obj/structure/setAnchored(): (value)
// /machinery signals // /machinery signals
#define COMSIG_MACHINE_EJECT_OCCUPANT "eject_occupant" //from base of obj/machinery/dropContents() (occupant) #define COMSIG_MACHINE_EJECT_OCCUPANT "eject_occupant" //from base of obj/machinery/dropContents() (occupant)
// /obj/item signals // /obj/item signals
#define COMSIG_ITEM_ATTACK "item_attack" //from base of obj/item/attack(): (/mob/living/target, /mob/living/user) #define COMSIG_ITEM_ATTACK "item_attack" //from base of obj/item/attack(): (/mob/living/target, /mob/living/user)
#define COMSIG_ITEM_ATTACK_SELF "item_attack_self" //from base of obj/item/attack_self(): (/mob) #define COMSIG_ITEM_ATTACK_SELF "item_attack_self" //from base of obj/item/attack_self(): (/mob)
#define COMPONENT_NO_INTERACT 1 #define COMPONENT_NO_INTERACT 1
#define COMSIG_ITEM_ATTACK_OBJ "item_attack_obj" //from base of obj/item/attack_obj(): (/obj, /mob) #define COMSIG_ITEM_ATTACK_OBJ "item_attack_obj" //from base of obj/item/attack_obj(): (/obj, /mob)
#define COMPONENT_NO_ATTACK_OBJ 1 #define COMPONENT_NO_ATTACK_OBJ 1
#define COMSIG_ITEM_PRE_ATTACK "item_pre_attack" //from base of obj/item/pre_attack(): (atom/target, mob/user, params) #define COMSIG_ITEM_PRE_ATTACK "item_pre_attack" //from base of obj/item/pre_attack(): (atom/target, mob/user, params)
#define COMPONENT_NO_ATTACK 1 #define COMPONENT_NO_ATTACK 1
#define COMSIG_ITEM_AFTERATTACK "item_afterattack" //from base of obj/item/afterattack(): (atom/target, mob/user, params) #define COMSIG_ITEM_AFTERATTACK "item_afterattack" //from base of obj/item/afterattack(): (atom/target, mob/user, params)
#define COMSIG_ITEM_EQUIPPED "item_equip" //from base of obj/item/equipped(): (/mob/equipper, slot) #define COMSIG_ITEM_EQUIPPED "item_equip" //from base of obj/item/equipped(): (/mob/equipper, slot)
#define COMSIG_ITEM_DROPPED "item_drop" //from base of obj/item/dropped(): (mob/user) #define COMSIG_ITEM_DROPPED "item_drop" //from base of obj/item/dropped(): (mob/user)
#define COMSIG_ITEM_PICKUP "item_pickup" //from base of obj/item/pickup(): (/mob/taker) #define COMSIG_ITEM_PICKUP "item_pickup" //from base of obj/item/pickup(): (/mob/taker)
#define COMSIG_ITEM_ATTACK_ZONE "item_attack_zone" //from base of mob/living/carbon/attacked_by(): (mob/living/carbon/target, mob/living/user, hit_zone) #define COMSIG_ITEM_ATTACK_ZONE "item_attack_zone" //from base of mob/living/carbon/attacked_by(): (mob/living/carbon/target, mob/living/user, hit_zone)
#define COMSIG_ITEM_IMBUE_SOUL "item_imbue_soul" //return a truthy value to prevent ensouling, checked in /obj/effect/proc_holder/spell/targeted/lichdom/cast(): (mob/user) #define COMSIG_ITEM_IMBUE_SOUL "item_imbue_soul" //return a truthy value to prevent ensouling, checked in /obj/effect/proc_holder/spell/targeted/lichdom/cast(): (mob/user)
#define COMSIG_ITEM_HIT_REACT "item_hit_react" //from base of obj/item/hit_reaction(): (list/args) #define COMSIG_ITEM_HIT_REACT "item_hit_react" //from base of obj/item/hit_reaction(): (list/args)
// /obj/item/clothing signals // /obj/item/clothing signals
#define COMSIG_SHOES_STEP_ACTION "shoes_step_action" //from base of obj/item/clothing/shoes/proc/step_action(): () #define COMSIG_SHOES_STEP_ACTION "shoes_step_action" //from base of obj/item/clothing/shoes/proc/step_action(): ()
// /obj/item/implant signals // /obj/item/implant signals
#define COMSIG_IMPLANT_ACTIVATED "implant_activated" //from base of /obj/item/implant/proc/activate(): () #define COMSIG_IMPLANT_ACTIVATED "implant_activated" //from base of /obj/item/implant/proc/activate(): ()
#define COMSIG_IMPLANT_IMPLANTING "implant_implanting" //from base of /obj/item/implant/proc/implant(): (list/args) #define COMSIG_IMPLANT_IMPLANTING "implant_implanting" //from base of /obj/item/implant/proc/implant(): (list/args)
#define COMPONENT_STOP_IMPLANTING 1 #define COMPONENT_STOP_IMPLANTING 1
#define COMSIG_IMPLANT_OTHER "implant_other" //called on already installed implants when a new one is being added in /obj/item/implant/proc/implant(): (list/args, obj/item/implant/new_implant) #define COMSIG_IMPLANT_OTHER "implant_other" //called on already installed implants when a new one is being added in /obj/item/implant/proc/implant(): (list/args, obj/item/implant/new_implant)
//#define COMPONENT_STOP_IMPLANTING 1 //The name makes sense for both //#define COMPONENT_STOP_IMPLANTING 1 //The name makes sense for both
#define COMPONENT_DELETE_NEW_IMPLANT 2 #define COMPONENT_DELETE_NEW_IMPLANT 2
#define COMPONENT_DELETE_OLD_IMPLANT 4 #define COMPONENT_DELETE_OLD_IMPLANT 4
#define COMSIG_IMPLANT_EXISTING_UPLINK "implant_uplink_exists" //called on implants being implanted into someone with an uplink implant: (datum/component/uplink) #define COMSIG_IMPLANT_EXISTING_UPLINK "implant_uplink_exists" //called on implants being implanted into someone with an uplink implant: (datum/component/uplink)
//This uses all return values of COMSIG_IMPLANT_OTHER //This uses all return values of COMSIG_IMPLANT_OTHER
#define COMSIG_IMPLANT_REMOVING "implant_removing" //from base of /obj/item/implant/proc/removed() (list/args) #define COMSIG_IMPLANT_REMOVING "implant_removing" //from base of /obj/item/implant/proc/removed() (list/args)
// /obj/item/pda signals // /obj/item/pda signals
#define COMSIG_PDA_CHANGE_RINGTONE "pda_change_ringtone" //called on pda when the user changes the ringtone: (mob/living/user, new_ringtone) #define COMSIG_PDA_CHANGE_RINGTONE "pda_change_ringtone" //called on pda when the user changes the ringtone: (mob/living/user, new_ringtone)
#define COMPONENT_STOP_RINGTONE_CHANGE 1 #define COMPONENT_STOP_RINGTONE_CHANGE 1
// /obj/item/radio signals // /obj/item/radio signals
#define COMSIG_RADIO_NEW_FREQUENCY "radio_new_frequency" //called from base of /obj/item/radio/proc/set_frequency(): (list/args) #define COMSIG_RADIO_NEW_FREQUENCY "radio_new_frequency" //called from base of /obj/item/radio/proc/set_frequency(): (list/args)
// /obj/item/pen signals // /obj/item/pen signals
#define COMSIG_PEN_ROTATED "pen_rotated" //called after rotation in /obj/item/pen/attack_self(): (rotation, mob/living/carbon/user) #define COMSIG_PEN_ROTATED "pen_rotated" //called after rotation in /obj/item/pen/attack_self(): (rotation, mob/living/carbon/user)
// /obj/item/projectile signals (sent to the firer) // /obj/item/projectile signals (sent to the firer)
#define COMSIG_PROJECTILE_ON_HIT "projectile_on_hit" // from base of /obj/item/projectile/proc/on_hit(): (atom/movable/firer, atom/target, Angle) #define COMSIG_PROJECTILE_ON_HIT "projectile_on_hit" // from base of /obj/item/projectile/proc/on_hit(): (atom/movable/firer, atom/target, Angle)
#define COMSIG_PROJECTILE_BEFORE_FIRE "projectile_before_fire" // from base of /obj/item/projectile/proc/fire(): (obj/item/projectile, atom/original_target) #define COMSIG_PROJECTILE_BEFORE_FIRE "projectile_before_fire" // from base of /obj/item/projectile/proc/fire(): (obj/item/projectile, atom/original_target)
// /mob/living/carbon/human signals // /mob/living/carbon/human signals
#define COMSIG_HUMAN_MELEE_UNARMED_ATTACK "human_melee_unarmed_attack" //from mob/living/carbon/human/UnarmedAttack(): (atom/target) #define COMSIG_HUMAN_MELEE_UNARMED_ATTACK "human_melee_unarmed_attack" //from mob/living/carbon/human/UnarmedAttack(): (atom/target)
#define COMSIG_HUMAN_MELEE_UNARMED_ATTACKBY "human_melee_unarmed_attackby" //from mob/living/carbon/human/UnarmedAttack(): (mob/living/carbon/human/attacker) #define COMSIG_HUMAN_MELEE_UNARMED_ATTACKBY "human_melee_unarmed_attackby" //from mob/living/carbon/human/UnarmedAttack(): (mob/living/carbon/human/attacker)
#define COMSIG_HUMAN_DISARM_HIT "human_disarm_hit" //Hit by successful disarm attack (mob/living/carbon/human/attacker,zone_targeted) #define COMSIG_HUMAN_DISARM_HIT "human_disarm_hit" //Hit by successful disarm attack (mob/living/carbon/human/attacker,zone_targeted)
// /datum/species signals // /datum/species signals
#define COMSIG_SPECIES_GAIN "species_gain" //from datum/species/on_species_gain(): (datum/species/new_species, datum/species/old_species) #define COMSIG_SPECIES_GAIN "species_gain" //from datum/species/on_species_gain(): (datum/species/new_species, datum/species/old_species)
#define COMSIG_SPECIES_LOSS "species_loss" //from datum/species/on_species_loss(): (datum/species/lost_species) #define COMSIG_SPECIES_LOSS "species_loss" //from datum/species/on_species_loss(): (datum/species/lost_species)
/*******Component Specific Signals*******/ /*******Component Specific Signals*******/
//Janitor //Janitor
#define COMSIG_TURF_IS_WET "check_turf_wet" //(): Returns bitflags of wet values. #define COMSIG_TURF_IS_WET "check_turf_wet" //(): Returns bitflags of wet values.
#define COMSIG_TURF_MAKE_DRY "make_turf_try" //(max_strength, immediate, duration_decrease = INFINITY): Returns bool. #define COMSIG_TURF_MAKE_DRY "make_turf_try" //(max_strength, immediate, duration_decrease = INFINITY): Returns bool.
#define COMSIG_COMPONENT_CLEAN_ACT "clean_act" //called on an object to clean it of cleanables. Usualy with soap: (num/strength) #define COMSIG_COMPONENT_CLEAN_ACT "clean_act" //called on an object to clean it of cleanables. Usualy with soap: (num/strength)
//Blood color //Blood color
#define COMSIG_BLOOD_COLOR "blood_DNA_to_color" //RGB blood stuff #define COMSIG_BLOOD_COLOR "blood_DNA_to_color" //RGB blood stuff
//Food //Food
#define COMSIG_FOOD_EATEN "food_eaten" //from base of obj/item/reagent_containers/food/snacks/attack(): (mob/living/eater, mob/feeder) #define COMSIG_FOOD_EATEN "food_eaten" //from base of obj/item/reagent_containers/food/snacks/attack(): (mob/living/eater, mob/feeder)
//Gibs //Gibs
#define COMSIG_GIBS_STREAK "gibs_streak" // from base of /obj/effect/decal/cleanable/blood/gibs/streak(): (list/directions, list/diseases) #define COMSIG_GIBS_STREAK "gibs_streak" // from base of /obj/effect/decal/cleanable/blood/gibs/streak(): (list/directions, list/diseases)
//Mood //Mood
#define COMSIG_ADD_MOOD_EVENT "add_mood" //Called when you send a mood event from anywhere in the code. #define COMSIG_ADD_MOOD_EVENT "add_mood" //Called when you send a mood event from anywhere in the code.
#define COMSIG_CLEAR_MOOD_EVENT "clear_mood" //Called when you clear a mood event from anywhere in the code. #define COMSIG_CLEAR_MOOD_EVENT "clear_mood" //Called when you clear a mood event from anywhere in the code.
#define COMSIG_MODIFY_SANITY "modify_sanity" //Called when you want to increase or decrease sanity from anywhere in the code. #define COMSIG_MODIFY_SANITY "modify_sanity" //Called when you want to increase or decrease sanity from anywhere in the code.
//NTnet //NTnet
#define COMSIG_COMPONENT_NTNET_RECEIVE "ntnet_receive" //called on an object by its NTNET connection component on receive. (sending_id(number), sending_netname(text), data(datum/netdata)) #define COMSIG_COMPONENT_NTNET_RECEIVE "ntnet_receive" //called on an object by its NTNET connection component on receive. (sending_id(number), sending_netname(text), data(datum/netdata))
//Nanites //Nanites
#define COMSIG_HAS_NANITES "has_nanites" //() returns TRUE if nanites are found #define COMSIG_HAS_NANITES "has_nanites" //() returns TRUE if nanites are found
#define COMSIG_NANITE_GET_PROGRAMS "nanite_get_programs" //(list/nanite_programs) - makes the input list a copy the nanites' program list #define COMSIG_NANITE_IS_STEALTHY "nanite_is_stealthy" //() returns TRUE if nanites have stealth
#define COMSIG_NANITE_SET_VOLUME "nanite_set_volume" //(amount) Sets current nanite volume to the given amount #define COMSIG_NANITE_GET_PROGRAMS "nanite_get_programs" //(list/nanite_programs) - makes the input list a copy the nanites' program list
#define COMSIG_NANITE_ADJUST_VOLUME "nanite_adjust" //(amount) Adjusts nanite volume by the given amount #define COMSIG_NANITE_SET_VOLUME "nanite_set_volume" //(amount) Sets current nanite volume to the given amount
#define COMSIG_NANITE_SET_MAX_VOLUME "nanite_set_max_volume" //(amount) Sets maximum nanite volume to the given amount #define COMSIG_NANITE_ADJUST_VOLUME "nanite_adjust" //(amount) Adjusts nanite volume by the given amount
#define COMSIG_NANITE_SET_CLOUD "nanite_set_cloud" //(amount(0-100)) Sets cloud ID to the given amount #define COMSIG_NANITE_SET_MAX_VOLUME "nanite_set_max_volume" //(amount) Sets maximum nanite volume to the given amount
#define COMSIG_NANITE_SET_SAFETY "nanite_set_safety" //(amount) Sets safety threshold to the given amount #define COMSIG_NANITE_SET_CLOUD "nanite_set_cloud" //(amount(0-100)) Sets cloud ID to the given amount
#define COMSIG_NANITE_SET_REGEN "nanite_set_regen" //(amount) Sets regeneration rate to the given amount #define COMSIG_NANITE_SET_SAFETY "nanite_set_safety" //(amount) Sets safety threshold to the given amount
#define COMSIG_NANITE_SIGNAL "nanite_signal" //(code(1-9999)) Called when sending a nanite signal to a mob. #define COMSIG_NANITE_SET_REGEN "nanite_set_regen" //(amount) Sets regeneration rate to the given amount
#define COMSIG_NANITE_SCAN "nanite_scan" //(mob/user, full_scan) - sends to chat a scan of the nanites to the user, returns TRUE if nanites are detected #define COMSIG_NANITE_SIGNAL "nanite_signal" //(code(1-9999)) Called when sending a nanite signal to a mob.
#define COMSIG_NANITE_UI_DATA "nanite_ui_data" //(list/data, scan_level) - adds nanite data to the given data list - made for ui_data procs #define COMSIG_NANITE_COMM_SIGNAL "nanite_comm_signal" //(comm_code(1-9999), comm_message) Called when sending a nanite comm signal to a mob.
#define COMSIG_NANITE_ADD_PROGRAM "nanite_add_program" //(datum/nanite_program/new_program, datum/nanite_program/source_program) Called when adding a program to a nanite component #define COMSIG_NANITE_SCAN "nanite_scan" //(mob/user, full_scan) - sends to chat a scan of the nanites to the user, returns TRUE if nanites are detected
#define COMPONENT_PROGRAM_INSTALLED 1 //Installation successful #define COMSIG_NANITE_UI_DATA "nanite_ui_data" //(list/data, scan_level) - adds nanite data to the given data list - made for ui_data procs
#define COMPONENT_PROGRAM_NOT_INSTALLED 2 //Installation failed, but there are still nanites #define COMSIG_NANITE_ADD_PROGRAM "nanite_add_program" //(datum/nanite_program/new_program, datum/nanite_program/source_program) Called when adding a program to a nanite component
#define COMSIG_NANITE_SYNC "nanite_sync" //(datum/component/nanites, full_overwrite, copy_activation) Called to sync the target's nanites to a given nanite component #define COMPONENT_PROGRAM_INSTALLED 1 //Installation successful
#define COMPONENT_PROGRAM_NOT_INSTALLED 2 //Installation failed, but there are still nanites
// /datum/component/storage signals #define COMSIG_NANITE_SYNC "nanite_sync" //(datum/component/nanites, full_overwrite, copy_activation) Called to sync the target's nanites to a given nanite component
#define COMSIG_CONTAINS_STORAGE "is_storage" //() - returns bool.
#define COMSIG_TRY_STORAGE_INSERT "storage_try_insert" //(obj/item/inserting, mob/user, silent, force) - returns bool // /datum/component/storage signals
#define COMSIG_TRY_STORAGE_SHOW "storage_show_to" //(mob/show_to, force) - returns bool. #define COMSIG_CONTAINS_STORAGE "is_storage" //() - returns bool.
#define COMSIG_TRY_STORAGE_HIDE_FROM "storage_hide_from" //(mob/hide_from) - returns bool #define COMSIG_TRY_STORAGE_INSERT "storage_try_insert" //(obj/item/inserting, mob/user, silent, force) - returns bool
#define COMSIG_TRY_STORAGE_HIDE_ALL "storage_hide_all" //returns bool #define COMSIG_TRY_STORAGE_SHOW "storage_show_to" //(mob/show_to, force) - returns bool.
#define COMSIG_TRY_STORAGE_SET_LOCKSTATE "storage_lock_set_state" //(newstate) #define COMSIG_TRY_STORAGE_HIDE_FROM "storage_hide_from" //(mob/hide_from) - returns bool
#define COMSIG_IS_STORAGE_LOCKED "storage_get_lockstate" //() - returns bool. MUST CHECK IF STORAGE IS THERE FIRST! #define COMSIG_TRY_STORAGE_HIDE_ALL "storage_hide_all" //returns bool
#define COMSIG_TRY_STORAGE_TAKE_TYPE "storage_take_type" //(type, atom/destination, amount = INFINITY, check_adjacent, force, mob/user, list/inserted) - returns bool - type can be a list of types. #define COMSIG_TRY_STORAGE_SET_LOCKSTATE "storage_lock_set_state" //(newstate)
#define COMSIG_TRY_STORAGE_FILL_TYPE "storage_fill_type" //(type, amount = INFINITY, force = FALSE) //don't fuck this up. Force will ignore max_items, and amount is normally clamped to max_items. #define COMSIG_IS_STORAGE_LOCKED "storage_get_lockstate" //() - returns bool. MUST CHECK IF STORAGE IS THERE FIRST!
#define COMSIG_TRY_STORAGE_TAKE "storage_take_obj" //(obj, new_loc, force = FALSE) - returns bool #define COMSIG_TRY_STORAGE_TAKE_TYPE "storage_take_type" //(type, atom/destination, amount = INFINITY, check_adjacent, force, mob/user, list/inserted) - returns bool - type can be a list of types.
#define COMSIG_TRY_STORAGE_QUICK_EMPTY "storage_quick_empty" //(loc) - returns bool - if loc is null it will dump at parent location. #define COMSIG_TRY_STORAGE_FILL_TYPE "storage_fill_type" //(type, amount = INFINITY, force = FALSE) //don't fuck this up. Force will ignore max_items, and amount is normally clamped to max_items.
#define COMSIG_TRY_STORAGE_RETURN_INVENTORY "storage_return_inventory" //(list/list_to_inject_results_into, recursively_search_inside_storages = TRUE) #define COMSIG_TRY_STORAGE_TAKE "storage_take_obj" //(obj, new_loc, force = FALSE) - returns bool
#define COMSIG_TRY_STORAGE_CAN_INSERT "storage_can_equip" //(obj/item/insertion_candidate, mob/user, silent) - returns bool #define COMSIG_TRY_STORAGE_QUICK_EMPTY "storage_quick_empty" //(loc) - returns bool - if loc is null it will dump at parent location.
#define COMSIG_TRY_STORAGE_RETURN_INVENTORY "storage_return_inventory" //(list/list_to_inject_results_into, recursively_search_inside_storages = TRUE)
// /datum/action signals #define COMSIG_TRY_STORAGE_CAN_INSERT "storage_can_equip" //(obj/item/insertion_candidate, mob/user, silent) - returns bool
#define COMSIG_ACTION_TRIGGER "action_trigger" //from base of datum/action/proc/Trigger(): (datum/action)
#define COMPONENT_ACTION_BLOCK_TRIGGER 1 // /datum/action signals
#define COMSIG_ACTION_TRIGGER "action_trigger" //from base of datum/action/proc/Trigger(): (datum/action)
/*******Non-Signal Component Related Defines*******/ #define COMPONENT_ACTION_BLOCK_TRIGGER 1
//Redirection component init flags /*******Non-Signal Component Related Defines*******/
#define REDIRECT_TRANSFER_WITH_TURF 1
//Redirection component init flags
//Arch #define REDIRECT_TRANSFER_WITH_TURF 1
#define ARCH_PROB "probability" //Probability for each item
#define ARCH_MAXDROP "max_drop_amount" //each item's max drop amount //Arch
#define ARCH_PROB "probability" //Probability for each item
//Ouch my toes! #define ARCH_MAXDROP "max_drop_amount" //each item's max drop amount
#define CALTROP_BYPASS_SHOES 1
#define CALTROP_IGNORE_WALKERS 2 //Ouch my toes!
#define CALTROP_BYPASS_SHOES 1
//Xenobio hotkeys #define CALTROP_IGNORE_WALKERS 2
#define COMSIG_XENO_SLIME_CLICK_CTRL "xeno_slime_click_ctrl" //from slime CtrlClickOn(): (/mob)
#define COMSIG_XENO_SLIME_CLICK_ALT "xeno_slime_click_alt" //from slime AltClickOn(): (/mob) //Xenobio hotkeys
#define COMSIG_XENO_SLIME_CLICK_SHIFT "xeno_slime_click_shift" //from slime ShiftClickOn(): (/mob) #define COMSIG_XENO_SLIME_CLICK_CTRL "xeno_slime_click_ctrl" //from slime CtrlClickOn(): (/mob)
#define COMSIG_XENO_TURF_CLICK_SHIFT "xeno_turf_click_shift" //from turf ShiftClickOn(): (/mob) #define COMSIG_XENO_SLIME_CLICK_ALT "xeno_slime_click_alt" //from slime AltClickOn(): (/mob)
#define COMSIG_XENO_TURF_CLICK_CTRL "xeno_turf_click_alt" //from turf AltClickOn(): (/mob) #define COMSIG_XENO_SLIME_CLICK_SHIFT "xeno_slime_click_shift" //from slime ShiftClickOn(): (/mob)
#define COMSIG_XENO_MONKEY_CLICK_CTRL "xeno_monkey_click_ctrl" //from monkey CtrlClickOn(): (/mob) #define COMSIG_XENO_TURF_CLICK_SHIFT "xeno_turf_click_shift" //from turf ShiftClickOn(): (/mob)
#define COMSIG_XENO_TURF_CLICK_CTRL "xeno_turf_click_alt" //from turf AltClickOn(): (/mob)
#define COMSIG_XENO_MONKEY_CLICK_CTRL "xeno_monkey_click_ctrl" //from monkey CtrlClickOn(): (/mob)

View File

@@ -37,6 +37,7 @@
/datum/component/nanites/RegisterWithParent() /datum/component/nanites/RegisterWithParent()
. = ..() . = ..()
RegisterSignal(parent, COMSIG_HAS_NANITES, .proc/confirm_nanites) RegisterSignal(parent, COMSIG_HAS_NANITES, .proc/confirm_nanites)
RegisterSignal(parent, COMSIG_NANITE_IS_STEALTHY, .proc/check_stealth)
RegisterSignal(parent, COMSIG_NANITE_UI_DATA, .proc/nanite_ui_data) RegisterSignal(parent, COMSIG_NANITE_UI_DATA, .proc/nanite_ui_data)
RegisterSignal(parent, COMSIG_NANITE_GET_PROGRAMS, .proc/get_programs) RegisterSignal(parent, COMSIG_NANITE_GET_PROGRAMS, .proc/get_programs)
RegisterSignal(parent, COMSIG_NANITE_SET_VOLUME, .proc/set_volume) RegisterSignal(parent, COMSIG_NANITE_SET_VOLUME, .proc/set_volume)
@@ -57,10 +58,12 @@
RegisterSignal(parent, COMSIG_LIVING_MINOR_SHOCK, .proc/on_minor_shock) RegisterSignal(parent, COMSIG_LIVING_MINOR_SHOCK, .proc/on_minor_shock)
RegisterSignal(parent, COMSIG_SPECIES_GAIN, .proc/check_viable_biotype) RegisterSignal(parent, COMSIG_SPECIES_GAIN, .proc/check_viable_biotype)
RegisterSignal(parent, COMSIG_NANITE_SIGNAL, .proc/receive_signal) RegisterSignal(parent, COMSIG_NANITE_SIGNAL, .proc/receive_signal)
RegisterSignal(parent, COMSIG_NANITE_COMM_SIGNAL, .proc/receive_comm_signal)
/datum/component/nanites/UnregisterFromParent() /datum/component/nanites/UnregisterFromParent()
. = ..() . = ..()
UnregisterSignal(parent, list(COMSIG_HAS_NANITES, UnregisterSignal(parent, list(COMSIG_HAS_NANITES,
COMSIG_NANITE_IS_STEALTHY,
COMSIG_NANITE_UI_DATA, COMSIG_NANITE_UI_DATA,
COMSIG_NANITE_GET_PROGRAMS, COMSIG_NANITE_GET_PROGRAMS,
COMSIG_NANITE_SET_VOLUME, COMSIG_NANITE_SET_VOLUME,
@@ -79,7 +82,8 @@
COMSIG_LIVING_MINOR_SHOCK, COMSIG_LIVING_MINOR_SHOCK,
COMSIG_MOVABLE_HEAR, COMSIG_MOVABLE_HEAR,
COMSIG_SPECIES_GAIN, COMSIG_SPECIES_GAIN,
COMSIG_NANITE_SIGNAL)) COMSIG_NANITE_SIGNAL,
COMSIG_NANITE_COMM_SIGNAL))
/datum/component/nanites/Destroy() /datum/component/nanites/Destroy()
STOP_PROCESSING(SSnanites, src) STOP_PROCESSING(SSnanites, src)
@@ -188,6 +192,9 @@
var/datum/nanite_program/NP = X var/datum/nanite_program/NP = X
NP.on_minor_shock() NP.on_minor_shock()
/datum/component/nanites/proc/check_stealth(datum/source)
return stealth
/datum/component/nanites/proc/on_death(datum/source, gibbed) /datum/component/nanites/proc/on_death(datum/source, gibbed)
for(var/X in programs) for(var/X in programs)
var/datum/nanite_program/NP = X var/datum/nanite_program/NP = X
@@ -198,6 +205,12 @@
var/datum/nanite_program/NP = X var/datum/nanite_program/NP = X
NP.receive_signal(code, source) NP.receive_signal(code, source)
/datum/component/nanites/proc/receive_comm_signal(datum/source, comm_code, comm_message, comm_source = "an unidentified source")
for(var/X in programs)
if(istype(X, /datum/nanite_program/triggered/comm))
var/datum/nanite_program/triggered/comm/NP = X
NP.receive_comm_signal(comm_code, comm_message, comm_source)
/datum/component/nanites/proc/check_viable_biotype() /datum/component/nanites/proc/check_viable_biotype()
if(!(MOB_ORGANIC in host_mob.mob_biotypes) && !(MOB_UNDEAD in host_mob.mob_biotypes)) if(!(MOB_ORGANIC in host_mob.mob_biotypes) && !(MOB_UNDEAD in host_mob.mob_biotypes))
qdel(src) //bodytype no longer sustains nanites qdel(src) //bodytype no longer sustains nanites

View File

@@ -239,7 +239,14 @@
mood_change = -3 mood_change = -3
timeout = 1000 timeout = 1000
/datum/mood_event/nanite_sadness
description = "<span class='warning robot'>+++++++HAPPINESS SUPPRESSION+++++++</span>\n"
mood_change = -7
/datum/mood_event/daylight_2 /datum/mood_event/daylight_2
description = "<span class='boldwarning'>I have been scorched by the unforgiving rays of the sun.</span>\n" description = "<span class='boldwarning'>I have been scorched by the unforgiving rays of the sun.</span>\n"
mood_change = -6 mood_change = -6
timeout = 1200 timeout = 1200
/datum/mood_event/nanite_sadness/add_effects(message)
description = "<span class='warning robot'>+++++++[message]+++++++</span>\n"

View File

@@ -142,6 +142,16 @@
mood_change = 2 mood_change = 2
timeout = 15 MINUTES timeout = 15 MINUTES
/datum/mood_event/nanite_happiness
description = "<span class='nicegreen robot'>+++++++HAPPINESS ENHANCEMENT+++++++</span>\n"
mood_change = 7
/datum/mood_event/nanite_happiness/add_effects(message)
description = "<span class='nicegreen robot'>+++++++[message]+++++++</span>\n"
/datum/mood_event/area
description = "" //Fill this out in the area
mood_change = 0
//Power gamer stuff below //Power gamer stuff below
/datum/mood_event/drankblood /datum/mood_event/drankblood
description = "<span class='nicegreen'>I have fed greedly from that which nourishes me.</span>\n" description = "<span class='nicegreen'>I have fed greedly from that which nourishes me.</span>\n"

View File

@@ -1,170 +1,180 @@
/////////////////////////////////// ///////////////////////////////////
/////Non-Board Computer Stuff////// /////Non-Board Computer Stuff//////
/////////////////////////////////// ///////////////////////////////////
/datum/design/intellicard /datum/design/intellicard
name = "Intellicard AI Transportation System" name = "Intellicard AI Transportation System"
desc = "Allows for the construction of an intellicard." desc = "Allows for the construction of an intellicard."
id = "intellicard" id = "intellicard"
build_type = PROTOLATHE build_type = PROTOLATHE
materials = list(MAT_GLASS = 1000, MAT_GOLD = 200) materials = list(MAT_GLASS = 1000, MAT_GOLD = 200)
build_path = /obj/item/aicard build_path = /obj/item/aicard
category = list("Electronics") category = list("Electronics")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/paicard /datum/design/paicard
name = "Personal Artificial Intelligence Card" name = "Personal Artificial Intelligence Card"
desc = "Allows for the construction of a pAI Card." desc = "Allows for the construction of a pAI Card."
id = "paicard" id = "paicard"
build_type = PROTOLATHE build_type = PROTOLATHE
materials = list(MAT_GLASS = 500, MAT_METAL = 500) materials = list(MAT_GLASS = 500, MAT_METAL = 500)
build_path = /obj/item/paicard build_path = /obj/item/paicard
category = list("Electronics") category = list("Electronics")
departmental_flags = DEPARTMENTAL_FLAG_ALL departmental_flags = DEPARTMENTAL_FLAG_ALL
/datum/design/ai_cam_upgrade /datum/design/ai_cam_upgrade
name = "AI Surveillance Software Update" name = "AI Surveillance Software Update"
desc = "A software package that will allow an artificial intelligence to 'hear' from its cameras via lip reading." desc = "A software package that will allow an artificial intelligence to 'hear' from its cameras via lip reading."
id = "ai_cam_upgrade" id = "ai_cam_upgrade"
build_type = PROTOLATHE build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_GLASS = 5000, MAT_GOLD = 15000, MAT_SILVER = 15000, MAT_DIAMOND = 20000, MAT_PLASMA = 10000) materials = list(MAT_METAL = 5000, MAT_GLASS = 5000, MAT_GOLD = 15000, MAT_SILVER = 15000, MAT_DIAMOND = 20000, MAT_PLASMA = 10000)
build_path = /obj/item/surveillance_upgrade build_path = /obj/item/surveillance_upgrade
category = list("Electronics") category = list("Electronics")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/////////////////////////////////// ///////////////////////////////////
//////////Nanite Devices/////////// //////////Nanite Devices///////////
/////////////////////////////////// ///////////////////////////////////
/datum/design/nanite_remote /datum/design/nanite_remote
name = "Nanite Remote" name = "Nanite Remote"
desc = "Allows for the construction of a nanite remote." desc = "Allows for the construction of a nanite remote."
id = "nanite_remote" id = "nanite_remote"
build_type = PROTOLATHE build_type = PROTOLATHE
materials = list(MAT_GLASS = 500, MAT_METAL = 500) materials = list(MAT_GLASS = 500, MAT_METAL = 500)
build_path = /obj/item/nanite_remote build_path = /obj/item/nanite_remote
category = list("Electronics") category = list("Electronics")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/nanite_scanner /datum/design/nanite_comm_remote
name = "Nanite Scanner" name = "Nanite Communication Remote"
desc = "Allows for the construction of a nanite scanner." desc = "Allows for the construction of a nanite communication remote."
id = "nanite_scanner" id = "nanite_comm_remote"
build_type = PROTOLATHE build_type = PROTOLATHE
materials = list(MAT_GLASS = 500, MAT_METAL = 500) materials = list(MAT_GLASS = 500, MAT_METAL = 500)
build_path = /obj/item/nanite_scanner build_path = /obj/item/nanite_remote/comm
category = list("Electronics") category = list("Electronics")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
//////////////////////////////////////// /datum/design/nanite_scanner
//////////Disk Construction Disks/////// name = "Nanite Scanner"
//////////////////////////////////////// desc = "Allows for the construction of a nanite scanner."
/datum/design/design_disk id = "nanite_scanner"
name = "Design Storage Disk" build_type = PROTOLATHE
desc = "Produce additional disks for storing device designs." materials = list(MAT_GLASS = 500, MAT_METAL = 500)
id = "design_disk" build_path = /obj/item/nanite_scanner
build_type = PROTOLATHE | AUTOLATHE category = list("Electronics")
materials = list(MAT_METAL = 300, MAT_GLASS = 100) departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
build_path = /obj/item/disk/design_disk
category = list("Electronics") ////////////////////////////////////////
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE //////////Disk Construction Disks///////
////////////////////////////////////////
/datum/design/design_disk_adv /datum/design/design_disk
name = "Advanced Design Storage Disk" name = "Design Storage Disk"
desc = "Produce additional disks for storing device designs." desc = "Produce additional disks for storing device designs."
id = "design_disk_adv" id = "design_disk"
build_type = PROTOLATHE build_type = PROTOLATHE | AUTOLATHE
materials = list(MAT_METAL = 300, MAT_GLASS = 100, MAT_SILVER=50) materials = list(MAT_METAL = 300, MAT_GLASS = 100)
build_path = /obj/item/disk/design_disk/adv build_path = /obj/item/disk/design_disk
category = list("Electronics") category = list("Electronics")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/tech_disk /datum/design/design_disk_adv
name = "Technology Data Storage Disk" name = "Advanced Design Storage Disk"
desc = "Produce additional disks for storing technology data." desc = "Produce additional disks for storing device designs."
id = "tech_disk" id = "design_disk_adv"
build_type = PROTOLATHE | AUTOLATHE build_type = PROTOLATHE
materials = list(MAT_METAL = 300, MAT_GLASS = 100) materials = list(MAT_METAL = 300, MAT_GLASS = 100, MAT_SILVER=50)
build_path = /obj/item/disk/tech_disk build_path = /obj/item/disk/design_disk/adv
category = list("Electronics") category = list("Electronics")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/nanite_disk /datum/design/tech_disk
name = "Nanite Program Disk" name = "Technology Data Storage Disk"
desc = "Stores nanite programs." desc = "Produce additional disks for storing technology data."
id = "nanite_disk" id = "tech_disk"
build_type = PROTOLATHE build_type = PROTOLATHE | AUTOLATHE
materials = list(MAT_METAL = 300, MAT_GLASS = 100) materials = list(MAT_METAL = 300, MAT_GLASS = 100)
build_path = /obj/item/disk/nanite_program build_path = /obj/item/disk/tech_disk
category = list("Electronics") category = list("Electronics")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/integrated_printer /datum/design/nanite_disk
name = "Integrated circuit printer" name = "Nanite Program Disk"
desc = "This machine provides all necessary things for circuitry." desc = "Stores nanite programs."
id = "icprinter" id = "nanite_disk"
build_type = PROTOLATHE build_type = PROTOLATHE
materials = list(MAT_GLASS = 5000, MAT_METAL = 10000) materials = list(MAT_METAL = 300, MAT_GLASS = 100)
build_path = /obj/item/integrated_circuit_printer build_path = /obj/item/disk/nanite_program
category = list("Electronics") category = list("Electronics")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/IC_printer_upgrade_advanced /datum/design/integrated_printer
name = "Integrated circuit printer upgrade: Advanced Designs" name = "Integrated circuit printer"
desc = "This disk allows for integrated circuit printers to print advanced circuitry designs." desc = "This machine provides all necessary things for circuitry."
id = "icupgadv" id = "icprinter"
build_type = PROTOLATHE build_type = PROTOLATHE
materials = list(MAT_GLASS = 10000, MAT_METAL = 10000) materials = list(MAT_GLASS = 5000, MAT_METAL = 10000)
build_path = /obj/item/disk/integrated_circuit/upgrade/advanced build_path = /obj/item/integrated_circuit_printer
category = list("Electronics") category = list("Electronics")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/IC_printer_upgrade_clone /datum/design/IC_printer_upgrade_advanced
name = "Integrated circuit printer upgrade: Instant Cloning" name = "Integrated circuit printer upgrade: Advanced Designs"
desc = "This disk allows for integrated circuit printers to clone designs instantaneously." desc = "This disk allows for integrated circuit printers to print advanced circuitry designs."
id = "icupgclo" id = "icupgadv"
build_type = PROTOLATHE build_type = PROTOLATHE
materials = list(MAT_GLASS = 10000, MAT_METAL = 10000) materials = list(MAT_GLASS = 10000, MAT_METAL = 10000)
build_path = /obj/item/disk/integrated_circuit/upgrade/clone build_path = /obj/item/disk/integrated_circuit/upgrade/advanced
category = list("Electronics") category = list("Electronics")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
//CIT ADDITIONS /datum/design/IC_printer_upgrade_clone
/datum/design/drone_shell name = "Integrated circuit printer upgrade: Instant Cloning"
name = "Drone Shell" desc = "This disk allows for integrated circuit printers to clone designs instantaneously."
desc = "A shell of a maintenance drone, an expendable robot built to perform station repairs." id = "icupgclo"
id = "drone_shell" build_type = PROTOLATHE
build_type = MECHFAB | PROTOLATHE materials = list(MAT_GLASS = 10000, MAT_METAL = 10000)
materials = list(MAT_METAL = 800, MAT_GLASS = 350) build_path = /obj/item/disk/integrated_circuit/upgrade/clone
construction_time = 150 category = list("Electronics")
build_path = /obj/item/drone_shell departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
category = list("Misc")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE //CIT ADDITIONS
/datum/design/drone_shell
/datum/design/xenobio_upgrade name = "Drone Shell"
name = "owo" desc = "A shell of a maintenance drone, an expendable robot built to perform station repairs."
desc = "someone's bussin" id = "drone_shell"
build_type = PROTOLATHE build_type = MECHFAB | PROTOLATHE
materials = list(MAT_METAL = 300, MAT_GLASS = 100) materials = list(MAT_METAL = 800, MAT_GLASS = 350)
category = list("Electronics") construction_time = 150
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE build_path = /obj/item/drone_shell
category = list("Misc")
/datum/design/xenobio_upgrade/xenobiomonkeys departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
name = "Xenobiology console monkey upgrade disk"
desc = "This disk will add the ability to remotely recycle monkeys via the Xenobiology console." /datum/design/xenobio_upgrade
id = "xenobio_monkeys" name = "owo"
build_path = /obj/item/disk/xenobio_console_upgrade/monkey desc = "someone's bussin"
build_type = PROTOLATHE
/datum/design/xenobio_upgrade/xenobioslimebasic materials = list(MAT_METAL = 300, MAT_GLASS = 100)
name = "Xenobiology console basic slime upgrade disk" category = list("Electronics")
desc = "This disk will add the ability to remotely manipulate slimes via the Xenobiology console." departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
id = "xenobio_slimebasic"
build_path = /obj/item/disk/xenobio_console_upgrade/slimebasic /datum/design/xenobio_upgrade/xenobiomonkeys
name = "Xenobiology console monkey upgrade disk"
/datum/design/xenobio_upgrade/xenobioslimeadv desc = "This disk will add the ability to remotely recycle monkeys via the Xenobiology console."
name = "Xenobiology console advanced slime upgrade disk" id = "xenobio_monkeys"
desc = "This disk will add the ability to remotely feed slimes potions via the Xenobiology console, and lift the restrictions on the number of slimes that can be stored inside the Xenobiology console. This includes the contents of the basic slime upgrade disk." build_path = /obj/item/disk/xenobio_console_upgrade/monkey
id = "xenobio_slimeadv"
build_path = /obj/item/disk/xenobio_console_upgrade/slimeadv /datum/design/xenobio_upgrade/xenobioslimebasic
name = "Xenobiology console basic slime upgrade disk"
desc = "This disk will add the ability to remotely manipulate slimes via the Xenobiology console."
id = "xenobio_slimebasic"
build_path = /obj/item/disk/xenobio_console_upgrade/slimebasic
/datum/design/xenobio_upgrade/xenobioslimeadv
name = "Xenobiology console advanced slime upgrade disk"
desc = "This disk will add the ability to remotely feed slimes potions via the Xenobiology console, and lift the restrictions on the number of slimes that can be stored inside the Xenobiology console. This includes the contents of the basic slime upgrade disk."
id = "xenobio_slimeadv"
build_path = /obj/item/disk/xenobio_console_upgrade/slimeadv

View File

@@ -380,7 +380,7 @@
name = "Mind Control" name = "Mind Control"
desc = "The nanites imprint an absolute directive onto the host's brain while they're active." desc = "The nanites imprint an absolute directive onto the host's brain while they're active."
id = "mindcontrol_nanites" id = "mindcontrol_nanites"
program_type = /datum/nanite_program/mind_control program_type = /datum/nanite_program/triggered/comm/mind_control
category = list("Weaponized Nanites") category = list("Weaponized Nanites")
////////////////////SUPPRESSION NANITES////////////////////////////////////// ////////////////////SUPPRESSION NANITES//////////////////////////////////////
@@ -445,21 +445,35 @@
name = "Skull Echo" name = "Skull Echo"
desc = "The nanites echo a synthesized message inside the host's skull." desc = "The nanites echo a synthesized message inside the host's skull."
id = "voice_nanites" id = "voice_nanites"
program_type = /datum/nanite_program/triggered/voice program_type = /datum/nanite_program/triggered/comm/voice
category = list("Suppression Nanites") category = list("Suppression Nanites")
/datum/design/nanites/speech /datum/design/nanites/speech
name = "Forced Speech" name = "Forced Speech"
desc = "The nanites force the host to say a pre-programmed sentence when triggered." desc = "The nanites force the host to say a pre-programmed sentence when triggered."
id = "speech_nanites" id = "speech_nanites"
program_type = /datum/nanite_program/triggered/speech program_type = /datum/nanite_program/triggered/comm/speech
category = list("Suppression Nanites") category = list("Suppression Nanites")
/datum/design/nanites/hallucination /datum/design/nanites/hallucination
name = "Hallucination" name = "Hallucination"
desc = "The nanites make the host see and hear things that aren't real." desc = "The nanites make the host see and hear things that aren't real."
id = "hallucination_nanites" id = "hallucination_nanites"
program_type = /datum/nanite_program/triggered/hallucination program_type = /datum/nanite_program/triggered/comm/hallucination
category = list("Suppression Nanites")
/datum/design/nanites/good_mood
name = "Happiness Enhancer"
desc = "The nanites synthesize serotonin inside the host's brain, creating an artificial sense of happiness."
id = "good_mood_nanites"
program_type = /datum/nanite_program/good_mood
category = list("Suppression Nanites")
/datum/design/nanites/bad_mood
name = "Happiness Suppressor"
desc = "The nanites suppress the production of serotonin inside the host's brain, creating an artificial state of depression."
id = "bad_mood_nanites"
program_type = /datum/nanite_program/bad_mood
category = list("Suppression Nanites") category = list("Suppression Nanites")
////////////////////SENSOR NANITES////////////////////////////////////// ////////////////////SENSOR NANITES//////////////////////////////////////

View File

@@ -3,7 +3,7 @@
/datum/nanite_program/regenerative /datum/nanite_program/regenerative
name = "Accelerated Regeneration" name = "Accelerated Regeneration"
desc = "The nanites boost the host's natural regeneration, increasing their healing speed. Does not consume nanites if the host is unharmed." desc = "The nanites boost the host's natural regeneration, increasing their healing speed. Does not consume nanites if the host is unharmed."
use_rate = 2.5 use_rate = 0.5
rogue_types = list(/datum/nanite_program/necrotic) rogue_types = list(/datum/nanite_program/necrotic)
/datum/nanite_program/regenerative/check_conditions() /datum/nanite_program/regenerative/check_conditions()
@@ -23,11 +23,11 @@
if(!parts.len) if(!parts.len)
return return
for(var/obj/item/bodypart/L in parts) for(var/obj/item/bodypart/L in parts)
if(L.heal_damage(1/parts.len, 1/parts.len)) if(L.heal_damage(0.5/parts.len, 0.5/parts.len, null, BODYPART_ORGANIC))
host_mob.update_damage_overlays() host_mob.update_damage_overlays()
else else
host_mob.adjustBruteLoss(-1, TRUE) host_mob.adjustBruteLoss(-0.5, TRUE)
host_mob.adjustFireLoss(-1, TRUE) host_mob.adjustFireLoss(-0.5, TRUE)
/datum/nanite_program/temperature /datum/nanite_program/temperature
name = "Temperature Adjustment" name = "Temperature Adjustment"
@@ -112,7 +112,7 @@
/datum/nanite_program/repairing /datum/nanite_program/repairing
name = "Mechanical Repair" name = "Mechanical Repair"
desc = "The nanites fix damage in the host's mechanical limbs." desc = "The nanites fix damage in the host's mechanical limbs."
use_rate = 0.5 //much more efficient than organic healing use_rate = 0.5
rogue_types = list(/datum/nanite_program/necrotic) rogue_types = list(/datum/nanite_program/necrotic)
/datum/nanite_program/repairing/check_conditions() /datum/nanite_program/repairing/check_conditions()
@@ -137,13 +137,13 @@
return return
var/update = FALSE var/update = FALSE
for(var/obj/item/bodypart/L in parts) for(var/obj/item/bodypart/L in parts)
if(L.heal_damage(1/parts.len, 1/parts.len, only_robotic = TRUE, only_organic = FALSE)) if(L.heal_damage(1.5/parts.len, 1.5/parts.len, null, BODYPART_ROBOTIC)) //much faster than organic healing
update = TRUE update = TRUE
if(update) if(update)
host_mob.update_damage_overlays() host_mob.update_damage_overlays()
else else
host_mob.adjustBruteLoss(-1, TRUE) host_mob.adjustBruteLoss(-1.5, TRUE)
host_mob.adjustFireLoss(-1, TRUE) host_mob.adjustFireLoss(-1.5, TRUE)
/datum/nanite_program/purging_advanced /datum/nanite_program/purging_advanced
name = "Selective Blood Purification" name = "Selective Blood Purification"

View File

@@ -114,7 +114,19 @@
. = ..() . = ..()
host_mob.cure_fakedeath("nanites") host_mob.cure_fakedeath("nanites")
/datum/nanite_program/triggered/speech //Can receive transmissions from a nanite communication remote for customized messages
/datum/nanite_program/triggered/comm
var/comm_code = 0
var/comm_message = ""
/datum/nanite_program/triggered/comm/proc/receive_comm_signal(signal_comm_code, comm_message, comm_source)
if(!activated || !comm_code)
return
if(signal_comm_code == comm_code)
host_mob.investigate_log("'s [name] nanite program was messaged by [comm_source] with comm code [signal_comm_code] and message '[comm_message]'.", INVESTIGATE_NANITES)
trigger(comm_message)
/datum/nanite_program/triggered/comm/speech
name = "Forced Speech" name = "Forced Speech"
desc = "The nanites force the host to say a pre-programmed sentence when triggered." desc = "The nanites force the host to say a pre-programmed sentence when triggered."
unique = FALSE unique = FALSE
@@ -122,10 +134,10 @@
trigger_cooldown = 20 trigger_cooldown = 20
rogue_types = list(/datum/nanite_program/brain_misfire, /datum/nanite_program/brain_decay) rogue_types = list(/datum/nanite_program/brain_misfire, /datum/nanite_program/brain_decay)
extra_settings = list("Sentence") extra_settings = list("Sentence","Comm Code")
var/sentence = "" var/sentence = ""
/datum/nanite_program/triggered/speech/set_extra_setting(user, setting) /datum/nanite_program/triggered/comm/speech/set_extra_setting(user, setting)
if(setting == "Sentence") if(setting == "Sentence")
var/new_sentence = stripped_input(user, "Choose the sentence that the host will be forced to say.", "Sentence", sentence, MAX_MESSAGE_LEN) var/new_sentence = stripped_input(user, "Choose the sentence that the host will be forced to say.", "Sentence", sentence, MAX_MESSAGE_LEN)
if(!new_sentence) if(!new_sentence)
@@ -133,23 +145,34 @@
if(copytext(new_sentence, 1, 2) == "*") //emotes are abusable, like surrender if(copytext(new_sentence, 1, 2) == "*") //emotes are abusable, like surrender
return return
sentence = new_sentence sentence = new_sentence
if(setting == "Comm Code")
var/new_code = input(user, "Set the communication code (1-9999) or set to 0 to disable external signals.", name, null) as null|num
if(isnull(new_code))
return
comm_code = CLAMP(round(new_code, 1), 0, 9999)
/datum/nanite_program/triggered/speech/get_extra_setting(setting) /datum/nanite_program/triggered/comm/speech/get_extra_setting(setting)
if(setting == "Sentence") if(setting == "Sentence")
return sentence return sentence
if(setting == "Comm Code")
return comm_code
/datum/nanite_program/triggered/speech/copy_extra_settings_to(datum/nanite_program/triggered/speech/target) /datum/nanite_program/triggered/comm/speech/copy_extra_settings_to(datum/nanite_program/triggered/comm/speech/target)
target.sentence = sentence target.sentence = sentence
target.comm_code = comm_code
/datum/nanite_program/triggered/speech/trigger() /datum/nanite_program/triggered/comm/speech/trigger(comm_message)
if(!..()) if(!..())
return return
var/sent_message = comm_message
if(!comm_message)
sent_message = sentence
if(host_mob.stat == DEAD) if(host_mob.stat == DEAD)
return return
to_chat(host_mob, "<span class='warning'>You feel compelled to speak...</span>") to_chat(host_mob, "<span class='warning'>You feel compelled to speak...</span>")
host_mob.say(sentence, forced = "nanite speech") host_mob.say(sent_message, forced = "nanite speech")
/datum/nanite_program/triggered/voice /datum/nanite_program/triggered/comm/voice
name = "Skull Echo" name = "Skull Echo"
desc = "The nanites echo a synthesized message inside the host's skull." desc = "The nanites echo a synthesized message inside the host's skull."
unique = FALSE unique = FALSE
@@ -157,44 +180,62 @@
trigger_cooldown = 20 trigger_cooldown = 20
rogue_types = list(/datum/nanite_program/brain_misfire, /datum/nanite_program/brain_decay) rogue_types = list(/datum/nanite_program/brain_misfire, /datum/nanite_program/brain_decay)
extra_settings = list("Message") extra_settings = list("Message","Comm Code")
var/message = "" var/message = ""
/datum/nanite_program/triggered/voice/set_extra_setting(user, setting) /datum/nanite_program/triggered/comm/voice/set_extra_setting(user, setting)
if(setting == "Message") if(setting == "Message")
var/new_message = stripped_input(user, "Choose the message sent to the host.", "Message", message, MAX_MESSAGE_LEN) var/new_message = stripped_input(user, "Choose the message sent to the host.", "Message", message, MAX_MESSAGE_LEN)
if(!new_message) if(!new_message)
return return
message = new_message message = new_message
if(setting == "Comm Code")
var/new_code = input(user, "Set the communication code (1-9999) or set to 0 to disable external signals.", name, null) as null|num
if(isnull(new_code))
return
comm_code = CLAMP(round(new_code, 1), 0, 9999)
/datum/nanite_program/triggered/voice/get_extra_setting(setting) /datum/nanite_program/triggered/comm/voice/get_extra_setting(setting)
if(setting == "Message") if(setting == "Message")
return message return message
if(setting == "Comm Code")
return comm_code
/datum/nanite_program/triggered/voice/copy_extra_settings_to(datum/nanite_program/triggered/voice/target) /datum/nanite_program/triggered/comm/voice/copy_extra_settings_to(datum/nanite_program/triggered/comm/voice/target)
target.message = message target.message = message
target.comm_code = comm_code
/datum/nanite_program/triggered/voice/trigger() /datum/nanite_program/triggered/comm/voice/trigger(comm_message)
if(!..()) if(!..())
return return
var/sent_message = comm_message
if(!comm_message)
sent_message = message
if(host_mob.stat == DEAD) if(host_mob.stat == DEAD)
return return
to_chat(host_mob, "<i>You hear a strange, robotic voice in your head...</i> \"<span class='robot'>[message]</span>\"") to_chat(host_mob, "<i>You hear a strange, robotic voice in your head...</i> \"<span class='robot'>[sent_message]</span>\"")
/datum/nanite_program/triggered/hallucination /datum/nanite_program/triggered/comm/hallucination
name = "Hallucination" name = "Hallucination"
desc = "The nanites make the host hallucinate something when triggered." desc = "The nanites make the host hallucinate something when triggered."
trigger_cost = 4 trigger_cost = 4
trigger_cooldown = 80 trigger_cooldown = 80
unique = FALSE unique = FALSE
rogue_types = list(/datum/nanite_program/brain_misfire) rogue_types = list(/datum/nanite_program/brain_misfire)
extra_settings = list("Hallucination Type") extra_settings = list("Hallucination Type", "Comm Code")
var/hal_type var/hal_type
var/hal_details var/hal_details
/datum/nanite_program/triggered/hallucination/trigger() /datum/nanite_program/triggered/comm/hallucination/trigger(comm_message)
if(!..()) if(!..())
return return
if(comm_message && (hal_type != "Message")) //Triggered via comm remote, but not set to a message hallucination
return
var/sent_message = comm_message //Comm remotes can send custom hallucination messages for the chat hallucination
if(!sent_message)
sent_message = hal_details
if(!iscarbon(host_mob)) if(!iscarbon(host_mob))
return return
var/mob/living/carbon/C = host_mob var/mob/living/carbon/C = host_mob
@@ -203,7 +244,7 @@
else else
switch(hal_type) switch(hal_type)
if("Message") if("Message")
new /datum/hallucination/chat(C, TRUE, null, hal_details) new /datum/hallucination/chat(C, TRUE, null, sent_message)
if("Battle") if("Battle")
new /datum/hallucination/battle(C, TRUE, hal_details) new /datum/hallucination/battle(C, TRUE, hal_details)
if("Sound") if("Sound")
@@ -223,7 +264,13 @@
if("Plasma Flood") if("Plasma Flood")
new /datum/hallucination/fake_flood(C, TRUE) new /datum/hallucination/fake_flood(C, TRUE)
/datum/nanite_program/triggered/hallucination/set_extra_setting(user, setting) /datum/nanite_program/triggered/comm/hallucination/set_extra_setting(user, setting)
if(setting == "Comm Code")
var/new_code = input(user, "(Only for Message) Set the communication code (1-9999) or set to 0 to disable external signals.", name, null) as null|num
if(isnull(new_code))
return
comm_code = CLAMP(round(new_code, 1), 0, 9999)
if(setting == "Hallucination Type") if(setting == "Hallucination Type")
var/list/possible_hallucinations = list("Random","Message","Battle","Sound","Weird Sound","Station Message","Health","Alert","Fire","Shock","Plasma Flood") var/list/possible_hallucinations = list("Random","Message","Battle","Sound","Weird Sound","Station Message","Health","Alert","Fire","Shock","Plasma Flood")
var/hal_type_choice = input("Choose the hallucination type", name) as null|anything in possible_hallucinations var/hal_type_choice = input("Choose the hallucination type", name) as null|anything in possible_hallucinations
@@ -299,13 +346,76 @@
if("Plasma Flood") if("Plasma Flood")
hal_type = "Plasma Flood" hal_type = "Plasma Flood"
/datum/nanite_program/triggered/hallucination/get_extra_setting(setting) /datum/nanite_program/triggered/comm/hallucination/get_extra_setting(setting)
if(setting == "Hallucination Type") if(setting == "Hallucination Type")
if(!hal_type) if(!hal_type)
return "Random" return "Random"
else else
return hal_type return hal_type
if(setting == "Comm Code")
return comm_code
/datum/nanite_program/triggered/hallucination/copy_extra_settings_to(datum/nanite_program/triggered/hallucination/target) /datum/nanite_program/triggered/comm/hallucination/copy_extra_settings_to(datum/nanite_program/triggered/comm/hallucination/target)
target.hal_type = hal_type target.hal_type = hal_type
target.hal_details = hal_details target.hal_details = hal_details
target.comm_code = comm_code
/datum/nanite_program/good_mood
name = "Happiness Enhancer"
desc = "The nanites synthesize serotonin inside the host's brain, creating an artificial sense of happiness."
use_rate = 0.1
rogue_types = list(/datum/nanite_program/brain_decay)
extra_settings = list("Mood Message")
var/message = "HAPPINESS ENHANCEMENT"
/datum/nanite_program/good_mood/set_extra_setting(user, setting)
if(setting == "Mood Message")
var/new_message = stripped_input(user, "Choose the message visible on the mood effect.", "Message", message, MAX_NAME_LEN)
if(!new_message)
return
message = new_message
/datum/nanite_program/good_mood/get_extra_setting(setting)
if(setting == "Mood Message")
return message
/datum/nanite_program/good_mood/copy_extra_settings_to(datum/nanite_program/good_mood/target)
target.message = message
/datum/nanite_program/good_mood/enable_passive_effect()
. = ..()
SEND_SIGNAL(host_mob, COMSIG_ADD_MOOD_EVENT, "nanite_happy", /datum/mood_event/nanite_happiness, message)
/datum/nanite_program/good_mood/disable_passive_effect()
. = ..()
SEND_SIGNAL(host_mob, COMSIG_CLEAR_MOOD_EVENT, "nanite_happy")
/datum/nanite_program/bad_mood
name = "Happiness Suppressor"
desc = "The nanites suppress the production of serotonin inside the host's brain, creating an artificial state of depression."
use_rate = 0.1
rogue_types = list(/datum/nanite_program/brain_decay)
extra_settings = list("Mood Message")
var/message = "HAPPINESS SUPPRESSION"
/datum/nanite_program/bad_mood/set_extra_setting(user, setting)
if(setting == "Mood Message")
var/new_message = stripped_input(user, "Choose the message visible on the mood effect.", "Message", message, MAX_NAME_LEN)
if(!new_message)
return
message = new_message
/datum/nanite_program/bad_mood/get_extra_setting(setting)
if(setting == "Mood Message")
return message
/datum/nanite_program/bad_mood/copy_extra_settings_to(datum/nanite_program/bad_mood/target)
target.message = message
/datum/nanite_program/bad_mood/enable_passive_effect()
. = ..()
SEND_SIGNAL(host_mob, COMSIG_ADD_MOOD_EVENT, "nanite_sadness", /datum/mood_event/nanite_sadness, message)
/datum/nanite_program/bad_mood/disable_passive_effect()
. = ..()
SEND_SIGNAL(host_mob, COMSIG_CLEAR_MOOD_EVENT, "nanite_sadness")

View File

@@ -6,6 +6,7 @@
rogue_types = list(/datum/nanite_program/toxic) rogue_types = list(/datum/nanite_program/toxic)
extra_settings = list("Program Overwrite","Cloud Overwrite") extra_settings = list("Program Overwrite","Cloud Overwrite")
var/pulse_cooldown = 0
var/sync_programs = TRUE var/sync_programs = TRUE
var/sync_overwrite = FALSE var/sync_overwrite = FALSE
var/overwrite_cloud = FALSE var/overwrite_cloud = FALSE
@@ -67,12 +68,16 @@
target.sync_overwrite = sync_overwrite target.sync_overwrite = sync_overwrite
/datum/nanite_program/viral/active_effect() /datum/nanite_program/viral/active_effect()
if(world.time < pulse_cooldown)
return
for(var/mob/M in orange(host_mob, 5)) for(var/mob/M in orange(host_mob, 5))
if(prob(5)) if(SEND_SIGNAL(M, COMSIG_NANITE_IS_STEALTHY))
if(sync_programs) continue
SEND_SIGNAL(M, COMSIG_NANITE_SYNC, nanites, sync_overwrite) if(sync_programs)
if(overwrite_cloud) SEND_SIGNAL(M, COMSIG_NANITE_SYNC, nanites, sync_overwrite)
SEND_SIGNAL(M, COMSIG_NANITE_SET_CLOUD, set_cloud) if(overwrite_cloud)
SEND_SIGNAL(M, COMSIG_NANITE_SET_CLOUD, set_cloud)
pulse_cooldown = world.time + 75
/datum/nanite_program/monitoring /datum/nanite_program/monitoring
name = "Monitoring" name = "Monitoring"
@@ -197,6 +202,15 @@
return return
SEND_SIGNAL(host_mob, COMSIG_NANITE_SIGNAL, code, source) SEND_SIGNAL(host_mob, COMSIG_NANITE_SIGNAL, code, source)
/datum/nanite_program/relay/proc/relay_comm_signal(comm_code, relay_code, comm_message)
if(!activated)
return
if(!host_mob)
return
if(relay_code != relay_channel)
return
SEND_SIGNAL(host_mob, COMSIG_NANITE_COMM_SIGNAL, comm_code, comm_message)
/datum/nanite_program/metabolic_synthesis /datum/nanite_program/metabolic_synthesis
name = "Metabolic Synthesis" name = "Metabolic Synthesis"
desc = "The nanites use the metabolic cycle of the host to speed up their replication rate, using their extra nutrition as fuel." desc = "The nanites use the metabolic cycle of the host to speed up their replication rate, using their extra nutrition as fuel."
@@ -248,26 +262,27 @@
resulting in an extremely infective strain of nanites." resulting in an extremely infective strain of nanites."
use_rate = 1.50 use_rate = 1.50
rogue_types = list(/datum/nanite_program/aggressive_replication, /datum/nanite_program/necrotic) rogue_types = list(/datum/nanite_program/aggressive_replication, /datum/nanite_program/necrotic)
var/spread_cooldown = 0
/datum/nanite_program/spreading/active_effect() /datum/nanite_program/spreading/active_effect()
if(prob(10)) if(spread_cooldown < world.time)
var/list/mob/living/target_hosts = list() return
var/turf/T = get_turf(host_mob) spread_cooldown = world.time + 50
for(var/mob/living/L in range(5, host_mob)) var/list/mob/living/target_hosts = list()
if(!(MOB_ORGANIC in L.mob_biotypes) && !(MOB_UNDEAD in L.mob_biotypes)) for(var/mob/living/L in oview(5, host_mob))
continue if(!prob(25))
if(!disease_air_spread_walk(T, get_turf(L))) continue
continue if(!(L.mob_biotypes & (MOB_ORGANIC|MOB_UNDEAD)))
target_hosts += L continue
target_hosts -= host_mob target_hosts += L
if(!target_hosts.len) if(!target_hosts.len)
return return
var/mob/living/infectee = pick(target_hosts) var/mob/living/infectee = pick(target_hosts)
if(prob(100 - (infectee.get_permeability_protection() * 100))) if(prob(100 - (infectee.get_permeability_protection() * 100)))
//this will potentially take over existing nanites! //this will potentially take over existing nanites!
infectee.AddComponent(/datum/component/nanites, 10) infectee.AddComponent(/datum/component/nanites, 10)
SEND_SIGNAL(infectee, COMSIG_NANITE_SYNC, nanites) SEND_SIGNAL(infectee, COMSIG_NANITE_SYNC, nanites)
infectee.investigate_log("[key_name(infectee)] was infected by spreading nanites by [key_name(host_mob)]", INVESTIGATE_NANITES) infectee.investigate_log("was infected by spreading nanites by [key_name(host_mob)] at [AREACOORD(infectee)].", INVESTIGATE_NANITES)
/datum/nanite_program/mitosis /datum/nanite_program/mitosis
name = "Mitosis" name = "Mitosis"

View File

@@ -160,40 +160,55 @@
/datum/nanite_program/cryo/active_effect() /datum/nanite_program/cryo/active_effect()
host_mob.adjust_bodytemperature(-rand(15,25), 50) host_mob.adjust_bodytemperature(-rand(15,25), 50)
/datum/nanite_program/mind_control /datum/nanite_program/triggered/comm/mind_control
name = "Mind Control" name = "Mind Control"
desc = "The nanites imprint an absolute directive onto the host's brain while they're active." desc = "The nanites imprint an absolute directive onto the host's brain for one minute when triggered."
use_rate = 3 trigger_cost = 30
trigger_cooldown = 1800
rogue_types = list(/datum/nanite_program/brain_decay, /datum/nanite_program/brain_misfire) rogue_types = list(/datum/nanite_program/brain_decay, /datum/nanite_program/brain_misfire)
extra_settings = list("Directive") extra_settings = list("Directive","Comm Code")
var/cooldown = 0 //avoids spam when nanites are running low
var/directive = "..." var/directive = "..."
/datum/nanite_program/mind_control/set_extra_setting(user, setting) /datum/nanite_program/triggered/comm/mind_control/set_extra_setting(user, setting)
if(setting == "Directive") if(setting == "Directive")
var/new_directive = stripped_input(user, "Choose the directive to imprint with mind control.", "Directive", directive, MAX_MESSAGE_LEN) var/new_directive = stripped_input(user, "Choose the directive to imprint with mind control.", "Directive", directive, MAX_MESSAGE_LEN)
if(!new_directive) if(!new_directive)
return return
directive = new_directive directive = new_directive
if(setting == "Comm Code")
var/new_code = input(user, "Set the communication code (1-9999) or set to 0 to disable external signals.", name, null) as null|num
if(isnull(new_code))
return
comm_code = CLAMP(round(new_code, 1), 0, 9999)
/datum/nanite_program/mind_control/get_extra_setting(setting) /datum/nanite_program/triggered/comm/mind_control/get_extra_setting(setting)
if(setting == "Directive") if(setting == "Directive")
return directive return directive
if(setting == "Comm Code")
return comm_code
/datum/nanite_program/mind_control/copy_extra_settings_to(datum/nanite_program/mind_control/target) /datum/nanite_program/triggered/comm/mind_control/copy_extra_settings_to(datum/nanite_program/triggered/comm/mind_control/target)
target.directive = directive target.directive = directive
target.comm_code = comm_code
/datum/nanite_program/mind_control/enable_passive_effect() /datum/nanite_program/triggered/comm/mind_control/trigger(comm_message)
if(world.time < cooldown) if(!..())
return return
. = ..() if(host_mob.stat == DEAD)
brainwash(host_mob, directive) return
var/sent_directive = comm_message
if(!comm_message)
sent_directive = directive
brainwash(host_mob, sent_directive)
log_game("A mind control nanite program brainwashed [key_name(host_mob)] with the objective '[directive]'.") log_game("A mind control nanite program brainwashed [key_name(host_mob)] with the objective '[directive]'.")
addtimer(CALLBACK(src, .proc/end_brainwashing), 600)
/datum/nanite_program/mind_control/disable_passive_effect() /datum/nanite_program/triggered/comm/mind_control/proc/end_brainwashing()
. = ..()
if(host_mob.mind && host_mob.mind.has_antag_datum(/datum/antagonist/brainwashed)) if(host_mob.mind && host_mob.mind.has_antag_datum(/datum/antagonist/brainwashed))
host_mob.mind.remove_antag_datum(/datum/antagonist/brainwashed) host_mob.mind.remove_antag_datum(/datum/antagonist/brainwashed)
log_game("[key_name(host_mob)] is no longer brainwashed by nanites.") log_game("[key_name(host_mob)] is no longer brainwashed by nanites.")
cooldown = world.time + 450
/datum/nanite_program/triggered/comm/mind_control/disable_passive_effect()
. = ..()
end_brainwashing()

View File

@@ -168,6 +168,109 @@
. = TRUE . = TRUE
/obj/item/nanite_remote/comm
name = "nanite communication remote"
desc = "A device that can send text messages to specific programs."
icon_state = "nanite_comm_remote"
var/comm_code = 0
var/comm_message = ""
/obj/item/nanite_remote/comm/afterattack(atom/target, mob/user, etc)
switch(mode)
if(REMOTE_MODE_OFF)
return
if(REMOTE_MODE_SELF)
to_chat(user, "<span class='notice'>You activate [src], signaling the nanites in your bloodstream.<span>")
signal_mob(user, comm_code, comm_message)
if(REMOTE_MODE_TARGET)
if(isliving(target) && (get_dist(target, get_turf(src)) <= 7))
to_chat(user, "<span class='notice'>You activate [src], signaling the nanites inside [target].<span>")
signal_mob(target, code, comm_message, key_name(user))
if(REMOTE_MODE_AOE)
to_chat(user, "<span class='notice'>You activate [src], signaling the nanites inside every host around you.<span>")
for(var/mob/living/L in view(user, 7))
signal_mob(L, code, comm_message, key_name(user))
if(REMOTE_MODE_RELAY)
to_chat(user, "<span class='notice'>You activate [src], signaling all connected relay nanites.<span>")
signal_relay(code, relay_code, comm_message, key_name(user))
/obj/item/nanite_remote/comm/signal_mob(mob/living/M, code, source)
SEND_SIGNAL(M, COMSIG_NANITE_COMM_SIGNAL, comm_code, comm_message)
/obj/item/nanite_remote/comm/signal_relay(code, relay_code, source)
for(var/X in SSnanites.nanite_relays)
var/datum/nanite_program/relay/N = X
N.relay_comm_signal(comm_code, relay_code, comm_message)
/obj/item/nanite_remote/comm/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state)
SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "nanite_comm_remote", name, 420, 800, master_ui, state)
ui.open()
/obj/item/nanite_remote/comm/ui_data()
var/list/data = list()
data["comm_code"] = comm_code
data["relay_code"] = relay_code
data["comm_message"] = comm_message
data["mode"] = mode
data["locked"] = locked
data["saved_settings"] = saved_settings
return data
/obj/item/nanite_remote/comm/ui_act(action, params)
if(..())
return
switch(action)
if("set_comm_code")
if(locked)
return
var/new_code = input("Set comm code (0000-9999):", name, code) as null|num
if(!isnull(new_code))
new_code = CLAMP(round(new_code, 1),0,9999)
comm_code = new_code
. = TRUE
if("set_message")
if(locked)
return
var/new_message = stripped_input(usr, "Set the message (Max 300 characters):", "Set Message", null , 300)
if(!new_message)
return
comm_message = new_message
. = TRUE
if("comm_save")
if(locked)
return
var/code_name = stripped_input(usr, "Set the setting name", "Set Name", null , 15)
if(!code_name)
return
var/new_save = list()
new_save["id"] = last_id + 1
last_id++
new_save["name"] = code_name
new_save["code"] = comm_code
new_save["mode"] = mode
new_save["relay_code"] = relay_code
new_save["message"] = comm_message
saved_settings += list(new_save)
. = TRUE
if("comm_load")
var/code_id = params["save_id"]
var/list/setting
for(var/list/X in saved_settings)
if(X["id"] == text2num(code_id))
setting = X
break
if(setting)
comm_code = setting["code"]
mode = setting["mode"]
relay_code = setting["relay_code"]
comm_message = setting["message"]
. = TRUE
#undef REMOTE_MODE_OFF #undef REMOTE_MODE_OFF
#undef REMOTE_MODE_SELF #undef REMOTE_MODE_SELF
#undef REMOTE_MODE_TARGET #undef REMOTE_MODE_TARGET

View File

@@ -142,4 +142,10 @@
program_type = /datum/nanite_program/researchplus program_type = /datum/nanite_program/researchplus
/obj/item/disk/nanite_program/reduced_diagnostics /obj/item/disk/nanite_program/reduced_diagnostics
program_type = /datum/nanite_program/reduced_diagnostics program_type = /datum/nanite_program/reduced_diagnostics
/obj/item/disk/nanite_program/good_mood
program_type = /datum/nanite_program/good_mood
/obj/item/disk/nanite_program/bad_mood
program_type = /datum/nanite_program/bad_mood

View File

@@ -976,7 +976,7 @@
display_name = "Basic Nanite Programming" display_name = "Basic Nanite Programming"
description = "The basics of nanite construction and programming." description = "The basics of nanite construction and programming."
prereq_ids = list("datatheory","robotics") prereq_ids = list("datatheory","robotics")
design_ids = list("nanite_disk","nanite_remote","nanite_scanner",\ design_ids = list("nanite_disk","nanite_remote","nanite_comm_remote","nanite_scanner",\
"nanite_chamber","public_nanite_chamber","nanite_chamber_control","nanite_programmer","nanite_program_hub","nanite_cloud_control",\ "nanite_chamber","public_nanite_chamber","nanite_chamber_control","nanite_programmer","nanite_program_hub","nanite_cloud_control",\
"relay_nanites", "monitoring_nanites", "access_nanites", "repairing_nanites","sensor_nanite_volume", "repeater_nanites", "relay_repeater_nanites","red_diag_nanites") "relay_nanites", "monitoring_nanites", "access_nanites", "repairing_nanites","sensor_nanite_volume", "repeater_nanites", "relay_repeater_nanites","red_diag_nanites")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
@@ -1015,7 +1015,7 @@
display_name = "Neural Nanite Programming" display_name = "Neural Nanite Programming"
description = "Nanite programs affecting nerves and brain matter." description = "Nanite programs affecting nerves and brain matter."
prereq_ids = list("nanite_bio") prereq_ids = list("nanite_bio")
design_ids = list("nervous_nanites", "brainheal_nanites", "paralyzing_nanites", "stun_nanites", "selfscan_nanites") design_ids = list("nervous_nanites", "brainheal_nanites", "paralyzing_nanites", "stun_nanites", "selfscan_nanites","good_mood_nanites","bad_mood_nanites")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000 export_price = 5000

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 50 KiB

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,41 @@
<ui-display title='Nanite Control'>
{{#if data.locked}}
<ui-notice>The interface is locked.</ui-notice>
{{else}}
<ui-button icon='lock' action='lock'>Lock Interface</ui-button>
<ui-button icon='save' action='comm_save'>Save Current Setting</ui-button>
<ui-section label='Comm Code'>
<span>{{data.comm_code}}</span>
<ui-button icon='pencil' action='set_comm_code'>Set</ui-button>
</ui-section>
<ui-section label='Message'>
{{data.comm_message}}
<br>
<ui-button icon='pencil' action='set_message'>Set</ui-button>
</ui-section>
{{#if data.mode == "Relay"}}
<ui-section label='Relay Code'>
<span>{{data.relay_code}}</span>
<ui-button icon='pencil' action='set_relay_code'>Set</ui-button>
</ui-section>
{{/if}}
<ui-section label='Signal Mode'>
<span>{{data.mode}}</span>
<br>
<ui-button action='select_mode' params='{"mode": "Off"}'>Off</ui-button>
<ui-button action='select_mode' params='{"mode": "Local"}'>Local</ui-button>
<ui-button action='select_mode' params='{"mode": "Targeted"}'>Targeted</ui-button>
<ui-button action='select_mode' params='{"mode": "Area"}'>Area</ui-button>
<ui-button action='select_mode' params='{"mode": "Relay"}'>Relay</ui-button>
</ui-section>
{{/if}}
</ui-display>
<ui-display title='Saved Settings'>
{{#each data.saved_settings}}
<ui-button icon='load' action='comm_load' params='{"save_id": "{{id}}"}'>{{name}}</ui-button>
{{#if !data.locked}}
<ui-button icon='remove' action='remove_save' params='{"save_id": "{{id}}"}'>Remove</ui-button>
{{/if}}
<br>
{{/each}}
</ui-display>