diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index 4c9573b8e7e..e7bd86f366e 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -919,6 +919,7 @@ "rI" = (/obj/machinery/computer/security/telescreen{name = "Special Ops. Monitor"; desc = "Used for watching the Special Ops."; network = list("ERT")},/obj/structure/table/wood,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/specops) "rJ" = (/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "SPECOPS"; name = "Ready Room"; pixel_x = -6; pixel_y = 6; req_access_txt = "114"},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "specopsoffice"; name = "Privacy Shutters"; pixel_x = 6; pixel_y = -6; req_access_txt = "114"},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "CCGAMMA"; name = "Gamma Lockdown"; pixel_x = -6; pixel_y = -6; req_access_txt = "114"},/obj/structure/table/wood,/turf/unsimulated/floor{dir = 8; icon_state = "carpetside"},/area/centcom/specops) "rK" = (/turf/unsimulated/wall/splashscreen,/area/start) +"rL" = (/obj/structure/table/abductor,/obj/item/bonegel/alien,/obj/item/bonesetter/alien,/obj/item/FixOVein/alien,/obj/item/surgicaldrill/alien,/obj/item/circular_saw/alien,/turf/unsimulated/floor/abductor,/area/abductor_ship) "sq" = (/turf/unsimulated/wall,/area/centcom/control) "sr" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/control) "ss" = (/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/control) @@ -1731,7 +1732,7 @@ aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkwkykxkxkxkAkzaNkwkDkxkxkxkAkzaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDtDAHlHmHnDAHoFvFvHpDAHqHrHsHpDwGaDKDKDAaNaNaNHtHuHvHwHtaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkEkGkFkIkHkNkMaNkEkGkOkIkPkNkMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNHAFvFvFvHBFvFvFvFvHCFvFvFvFvHCDKDKDKDAaNaNEMDwDwHDDwDwEnaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkQkRkxkxkxkAkSaNkQkRkxkxkxkAkSaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEMDAHLdacZDAGVFvFvGWDAHOHPHQGWDwEIDKDKDAaNaNaNEMaNaNaNEnaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkUlikVlkljlmllaNkUlikVlkljlmllaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEMDwDwDwDwGZHVHWDADwDwDwDwEnaNDIDKDKDAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkUlikVrLljlmllaNkUlikVlkljlmllaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEMDwDwDwDwGZHVHWDADwDwDwDwEnaNDIDKDKDAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNlylnlAlzlFaNaNaNlylnlAlzlFaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEMaNaNEMDAGXIbDAEnaNaNaNaNaNEfDKDKDAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEMDwDwEnaNDtDxDyDyDzGaDKDKDAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjQjPjSjRjTaNaNaNjQjPjSjRjTaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDIDKDKDKDKDKDKDKDAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN @@ -1739,7 +1740,7 @@ aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkwlRkxkxkxkAkzaNkwlSkxkxkxkAkzaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEMDwDwDMIqDMDwDwEnaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkEkGlTkIlUkNkMaNkEkGlVkIlYkNkMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDAItDKDKDKIuDAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkQkRkxkxkxkAkSaNkQkRkxkxkxkAkSaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDIDKDKDKDKlKDIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkUlikVlkljlmllaNkUlikVlkljlmllaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDNIADKDKDKIBDNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkUlikVrLljlmllaNkUlikVrLljlmllaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDNIADKDKDKIBDNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNlylnlAlzlFaNaNaNlylnlAlzlFaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEfICDKDKDKIDEfaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEMDwIFIGIHmsIJDwEnaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEMDwDxDyDzDwEnaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index 29392997893..60252fc11ba 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -27,6 +27,7 @@ #define PLANT_WEED_HUD "22"// Weed level #define DIAG_TRACK_HUD "23"// Mech tracking beacon #define DIAG_PATH_HUD "24"//Bot path indicators +#define GLAND_HUD "25"//Gland indicators for abductors //by default everything in the hud_list of an atom is an image //a value in hud_list with one of these will change that behavior @@ -54,6 +55,7 @@ #define ANTAG_HUD_CHANGELING 16 #define ANTAG_HUD_VAMPIRE 17 #define ANTAG_HUD_ABDUCTOR 18 +#define DATA_HUD_ABDUCTOR 19 // Notification action types #define NOTIFY_JUMP "jump" diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 21bcd079d8b..67a187c45db 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -370,4 +370,4 @@ // used for alternate_option #define GET_RANDOM_JOB 0 #define BE_ASSISTANT 1 -#define RETURN_TO_LOBBY 2 +#define RETURN_TO_LOBBY 2 \ No newline at end of file diff --git a/code/_globalvars/lists/misc.dm b/code/_globalvars/lists/misc.dm index 148488a6ddf..65bffa7515a 100644 --- a/code/_globalvars/lists/misc.dm +++ b/code/_globalvars/lists/misc.dm @@ -31,4 +31,6 @@ var/list/round_end_sounds = list( // Maps available round end sounds to their du 'sound/goonstation/misc/newround2.ogg' = 14.8 SECONDS ) -GLOBAL_LIST(station_level_space_turfs) \ No newline at end of file +GLOBAL_LIST(station_level_space_turfs) + +#define EGG_LAYING_MESSAGES list("lays an egg.", "squats down and croons.", "begins making a huge racket.", "begins clucking raucously.") \ No newline at end of file diff --git a/code/datums/diseases/_disease.dm b/code/datums/diseases/_disease.dm index 571a0d7aa7b..9414a079e80 100644 --- a/code/datums/diseases/_disease.dm +++ b/code/datums/diseases/_disease.dm @@ -1,4 +1,6 @@ +#define VIRUS_SYMPTOM_LIMIT 6 + //Visibility Flags #define HIDDEN_SCANNER 1 #define HIDDEN_PANDEMIC 2 diff --git a/code/datums/hud.dm b/code/datums/hud.dm index 04ebcc68ed5..84c45299ece 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -20,7 +20,8 @@ var/datum/atom_hud/huds = list( \ ANTAG_HUD_NINJA = new/datum/atom_hud/antag/hidden(),\ ANTAG_HUD_CHANGELING = new/datum/atom_hud/antag/hidden(),\ ANTAG_HUD_VAMPIRE = new/datum/atom_hud/antag/hidden(),\ - ANTAG_HUD_ABDUCTOR = new/datum/atom_hud/antag/hidden()\ + ANTAG_HUD_ABDUCTOR = new/datum/atom_hud/antag/hidden(),\ + DATA_HUD_ABDUCTOR = new/datum/atom_hud/abductor()\ ) /datum/atom_hud diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index a4faafcf91f..db2fb3c64df 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -52,6 +52,9 @@ /datum/atom_hud/data/bot_path hud_icons = list(DIAG_PATH_HUD) +/datum/atom_hud/abductor + hud_icons = list(GLAND_HUD) + /datum/atom_hud/data/hydroponic hud_icons = list (PLANT_NUTRIENT_HUD, PLANT_WATER_HUD, PLANT_STATUS_HUD, PLANT_HEALTH_HUD, PLANT_TOXIN_HUD, PLANT_PEST_HUD, PLANT_WEED_HUD) diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index 40d48f7fd59..c8539b568db 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -2,6 +2,8 @@ #define VEST_COMBAT 2 #define GIZMO_SCAN 1 #define GIZMO_MARK 2 +#define MIND_DEVICE_MESSAGE 1 +#define MIND_DEVICE_CONTROL 2 //AGENT VEST /obj/item/clothing/suit/armor/abductor/vest @@ -14,6 +16,7 @@ origin_tech = "magnets=7;biotech=4;powerstorage=4;abductor=4" armor = list(melee = 15, bullet = 15, laser = 15, energy = 15, bomb = 15, bio = 15, rad = 15) actions_types = list(/datum/action/item_action/hands_free/activate) + allowed = list(/obj/item/abductor, /obj/item/abductor_baton, /obj/item/melee/baton, /obj/item/gun/energy, /obj/item/restraints/handcuffs) var/mode = VEST_STEALTH var/stealth_active = 0 var/combat_cooldown = 10 @@ -23,6 +26,11 @@ species_fit = null sprite_sheets = null +/obj/item/clothing/suit/armor/abductor/vest/proc/toggle_nodrop() + flags ^= NODROP + if(ismob(loc)) + to_chat(loc, "Your vest is now [flags & NODROP ? "locked" : "unlocked"].") + /obj/item/clothing/suit/armor/abductor/vest/proc/flip_mode() switch(mode) if(VEST_STEALTH) @@ -53,7 +61,7 @@ return stealth_active = 1 if(ishuman(loc)) - var/mob/living/carbon/human/M = src.loc + var/mob/living/carbon/human/M = loc new /obj/effect/temp_visual/dir_setting/ninja/cloak(get_turf(M), M.dir) M.name_override = disguise.name M.icon = disguise.icon @@ -67,7 +75,7 @@ return stealth_active = 0 if(ishuman(loc)) - var/mob/living/carbon/human/M = src.loc + var/mob/living/carbon/human/M = loc new /obj/effect/temp_visual/dir_setting/ninja(get_turf(M), M.dir) M.name_override = null M.overlays.Cut() @@ -94,9 +102,9 @@ /obj/item/clothing/suit/armor/abductor/vest/proc/Adrenaline() if(ishuman(loc)) if(combat_cooldown != initial(combat_cooldown)) - to_chat(src.loc, "Combat injection is still recharging.") + to_chat(loc, "Combat injection is still recharging.") return - var/mob/living/carbon/human/M = src.loc + var/mob/living/carbon/human/M = loc M.adjustStaminaLoss(-75) M.SetParalysis(0) M.SetStunned(0) @@ -109,6 +117,17 @@ if(combat_cooldown==initial(combat_cooldown)) processing_objects.Remove(src) +/obj/item/clothing/suit/armor/abductor/Destroy() + processing_objects.Remove(src) + for(var/obj/machinery/abductor/console/C in machines) + if(C.vest == src) + C.vest = null + break + return ..() + +/obj/item/abductor + icon = 'icons/obj/abductor.dmi' + /obj/item/abductor/proc/AbductorCheck(user) if(isabductor(user)) return TRUE @@ -116,14 +135,19 @@ return FALSE /obj/item/abductor/proc/ScientistCheck(user) + if(!AbductorCheck(user)) + return FALSE + var/mob/living/carbon/human/H = user var/datum/species/abductor/S = H.dna.species - return S.scientist + if(S.scientist) + return TRUE + to_chat(user, "You're not trained to use this!") + return FALSE /obj/item/abductor/gizmo name = "science tool" desc = "A dual-mode tool for retrieving specimens and scanning appearances. Scanning can be done through cameras." - icon = 'icons/obj/abductor.dmi' icon_state = "gizmo_scan" item_state = "gizmo" origin_tech = "engineering=7;magnets=4;bluespace=4;abductor=3" @@ -132,11 +156,12 @@ var/obj/machinery/abductor/console/console /obj/item/abductor/gizmo/attack_self(mob/user) - if(!AbductorCheck(user)) - return if(!ScientistCheck(user)) - to_chat(user, "You're not trained to use this!") return + if(!console) + to_chat(user, "The device is not linked to a console!") + return + if(mode == GIZMO_SCAN) mode = GIZMO_MARK icon_state = "gizmo_mark" @@ -146,11 +171,12 @@ to_chat(user, "You switch the device to [mode==GIZMO_SCAN? "SCAN": "MARK"] MODE") /obj/item/abductor/gizmo/attack(mob/living/M, mob/user) - if(!AbductorCheck(user)) - return if(!ScientistCheck(user)) - to_chat(user, "You're not trained to use this") return + if(!console) + to_chat(user, "The device is not linked to console!") + return + switch(mode) if(GIZMO_SCAN) scan(M, user) @@ -161,11 +187,12 @@ /obj/item/abductor/gizmo/afterattack(atom/target, mob/living/user, flag, params) if(flag) return - if(!AbductorCheck(user)) - return if(!ScientistCheck(user)) - to_chat(user, "You're not trained to use this") return + if(!console) + to_chat(user, "The device is not linked to console!") + return + switch(mode) if(GIZMO_SCAN) scan(target, user) @@ -174,9 +201,8 @@ /obj/item/abductor/gizmo/proc/scan(atom/target, mob/living/user) if(ishuman(target)) - if(console!=null) - console.AddSnapshot(target) - to_chat(user, "You scan [target] and add [target.p_them()] to the database.") + console.AddSnapshot(target) + to_chat(user, "You scan [target] and add [target.p_them()] to the database.") /obj/item/abductor/gizmo/proc/mark(atom/target, mob/living/user) if(marked == target) @@ -200,11 +226,15 @@ marked = target to_chat(user, "You finish preparing [target] for transport.") +/obj/item/abductor/gizmo/Destroy() + if(console) + console.gizmo = null + return ..() + /obj/item/abductor/silencer name = "abductor silencer" desc = "A compact device used to shut down communications equipment." - icon = 'icons/obj/abductor.dmi' icon_state = "silencer" item_state = "silencer" origin_tech = "materials=4;programming=7;abductor=3" @@ -222,7 +252,7 @@ radio_off(target, user) /obj/item/abductor/silencer/proc/radio_off(atom/target, mob/living/user) - if(!(user in (viewers(7,target)))) + if(!(user in (viewers(7, target)))) return var/turf/targloc = get_turf(target) @@ -238,12 +268,85 @@ var/list/all_items = M.GetAllContents() for(var/obj/I in all_items) - if(istype(I,/obj/item/radio/)) + if(istype(I, /obj/item/radio)) var/obj/item/radio/r = I r.listening = 0 - if(!istype(I,/obj/item/radio/headset)) + if(!istype(I, /obj/item/radio/headset)) r.broadcasting = 0 //goddamned headset hacks +/obj/item/abductor/mind_device + name = "mental interface device" + desc = "A dual-mode tool for directly communicating with sentient brains. It can be used to send a direct message to a target, or to send a command to a test subject with a charged gland." + icon_state = "mind_device_message" + item_state = "silencer" + var/mode = MIND_DEVICE_MESSAGE + +/obj/item/abductor/mind_device/attack_self(mob/user) + if(!ScientistCheck(user)) + return + + if(mode == MIND_DEVICE_MESSAGE) + mode = MIND_DEVICE_CONTROL + icon_state = "mind_device_control" + else + mode = MIND_DEVICE_MESSAGE + icon_state = "mind_device_message" + to_chat(user, "You switch the device to [mode == MIND_DEVICE_MESSAGE ? "TRANSMISSION" : "COMMAND"] MODE") + +/obj/item/abductor/mind_device/afterattack(atom/target, mob/living/user, flag, params) + if(!ScientistCheck(user)) + return + + switch(mode) + if(MIND_DEVICE_CONTROL) + mind_control(target, user) + if(MIND_DEVICE_MESSAGE) + mind_message(target, user) + +/obj/item/abductor/mind_device/proc/mind_control(atom/target, mob/living/user) + if(iscarbon(target)) + var/mob/living/carbon/C = target + var/obj/item/organ/internal/heart/gland/G = C.get_organ_slot("heart") + if(!istype(G)) + to_chat(user, "Your target does not have an experimental gland!") + return + if(!G.mind_control_uses) + to_chat(user, "Your target's gland is spent!") + return + if(G.active_mind_control) + to_chat(user, "Your target is already under a mind-controlling influence!") + return + + var/command = stripped_input(user, "Enter the command for your target to follow. Uses Left: [G.mind_control_uses], Duration: [DisplayTimeText(G.mind_control_duration)]", "Enter command") + + if(!command) + return + + if(QDELETED(user) || user.get_active_hand() != src || loc != user) + return + + if(QDELETED(G)) + return + + G.mind_control(command, user) + to_chat(user, "You send the command to your target.") + +/obj/item/abductor/mind_device/proc/mind_message(atom/target, mob/living/user) + if(isliving(target)) + var/mob/living/L = target + if(L.stat == DEAD) + to_chat(user, "Your target is dead!") + return + var/message = stripped_input(user, "Write a message to send to your target's brain.", "Enter message") + if(!message) + return + if(QDELETED(L) || L.stat == DEAD) + return + + to_chat(L, "You hear a voice in your head saying: [message]") + to_chat(user, "You send the message to your target.") + log_say("[key_name(user)] sent an abductor mind message to [key_name(L)]: '[message]'", user) + /obj/item/gun/energy/alien name = "alien pistol" desc = "A complicated gun that fires bursts of high-intensity radiation." @@ -302,7 +405,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} w_class = WEIGHT_CLASS_NORMAL actions_types = list(/datum/action/item_action/toggle_mode) -/obj/item/abductor_baton/proc/toggle(mob/living/user=usr) +/obj/item/abductor_baton/proc/toggle(mob/living/user = usr) mode = (mode+1)%BATON_MODES var/txt switch(mode) @@ -475,7 +578,6 @@ Congratulations! You are now trained for invasive xenobiology research!"} if(BATON_PROBE) to_chat(user, "The baton is in probing mode.") - /obj/item/radio/headset/abductor name = "alien headset" desc = "An advanced alien headset designed to monitor communications of human space stations. Why does it have a microphone? No one knows." @@ -537,6 +639,27 @@ Congratulations! You are now trained for invasive xenobiology research!"} origin_tech = "materials=2;biotech=2;abductor=2" toolspeed = 0.25 +/obj/item/bonegel/alien + name = "alien bone gel" + desc = "It smells like duct tape." + icon = 'icons/obj/abductor.dmi' + origin_tech = "materials=2;biotech=2;abductor=2" + toolspeed = 0.25 + +/obj/item/FixOVein/alien + name = "alien FixOVein" + desc = "Bloodless aliens would totally know how to stop internal bleeding...right?" + icon = 'icons/obj/abductor.dmi' + origin_tech = "materials=2;biotech=2;abductor=2" + toolspeed = 0.25 + +/obj/item/bonesetter/alien + name = "alien bone setter" + desc = "You're not sure you want to know whether or not aliens have bones." + icon = 'icons/obj/abductor.dmi' + origin_tech = "materials=2;biotech=2;abductor=2" + toolspeed = 0.25 + /obj/item/clothing/head/helmet/abductor name = "agent headgear" desc = "Abduct with style - spiky style. Prevents digital tracking." @@ -553,6 +676,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} name = "resting contraption" desc = "This looks similar to contraptions from earth. Could aliens be stealing our technology?" icon = 'icons/obj/abductor.dmi' + buildstacktype = /obj/item/stack/sheet/mineral/abductor icon_state = "bed" /obj/structure/table_frame/abductor diff --git a/code/game/gamemodes/miniantags/abduction/gland.dm b/code/game/gamemodes/miniantags/abduction/gland.dm index ebc14225cd7..8f058a872e6 100644 --- a/code/game/gamemodes/miniantags/abduction/gland.dm +++ b/code/game/gamemodes/miniantags/abduction/gland.dm @@ -14,28 +14,69 @@ var/active = 0 tough = TRUE //not easily broken by combat damage + var/mind_control_uses = 1 + var/mind_control_duration = 1800 + var/active_mind_control = FALSE + /obj/item/organ/internal/heart/gland/proc/ownerCheck() if(ishuman(owner)) - return 1 + return TRUE if(!human_only && iscarbon(owner)) - return 1 - return 0 + return TRUE + return FALSE /obj/item/organ/internal/heart/gland/proc/Start() active = 1 next_activation = world.time + rand(cooldown_low,cooldown_high) +/obj/item/organ/internal/heart/gland/proc/update_gland_hud() + if(!owner) + return + var/image/holder = owner.hud_list[GLAND_HUD] + var/icon/I = icon(owner.icon, owner.icon_state, owner.dir) + holder.pixel_y = I.Height() - world.icon_size + if(active_mind_control) + holder.icon_state = "hudgland_active" + else if(mind_control_uses) + holder.icon_state = "hudgland_ready" + else + holder.icon_state = "hudgland_spent" + +/obj/item/organ/internal/heart/gland/proc/mind_control(command, mob/living/user) + if(!ownerCheck() || !mind_control_uses || active_mind_control) + return + mind_control_uses-- + to_chat(owner, "You suddenly feel an irresistible compulsion to follow an order...") + to_chat(owner, "[command]") + active_mind_control = TRUE + log_admin("[key_name(user)] sent an abductor mind control message to [key_name(owner)]: [command]") + update_gland_hud() + + addtimer(CALLBACK(src, .proc/clear_mind_control), mind_control_duration) + +/obj/item/organ/internal/heart/gland/proc/clear_mind_control() + if(!ownerCheck() || !active_mind_control) + return + to_chat(owner, "You feel the compulsion fade, and you completely forget about your previous orders.") + active_mind_control = FALSE + update_gland_hud() /obj/item/organ/internal/heart/gland/remove(var/mob/living/carbon/M, special = 0) active = 0 if(initial(uses) == 1) uses = initial(uses) + var/datum/atom_hud/abductor/hud = huds[DATA_HUD_ABDUCTOR] + hud.remove_from_hud(owner) + clear_mind_control() . = ..() /obj/item/organ/internal/heart/gland/insert(var/mob/living/carbon/M, special = 0) ..() if(special != 2 && uses) // Special 2 means abductor surgery Start() + var/datum/atom_hud/abductor/hud = huds[DATA_HUD_ABDUCTOR] + hud.add_to_hud(owner) + update_gland_hud() /obj/item/organ/internal/heart/gland/on_life() if(!beating) @@ -61,9 +102,12 @@ cooldown_high = 400 uses = -1 icon_state = "health" + mind_control_uses = 3 + mind_control_duration = 3000 /obj/item/organ/internal/heart/gland/heals/activate() to_chat(owner, "You feel curiously revitalized.") + owner.adjustToxLoss(-20) owner.adjustBruteLoss(-20) owner.adjustOxyLoss(-20) owner.adjustFireLoss(-20) @@ -73,6 +117,13 @@ cooldown_high = 1200 uses = -1 icon_state = "slime" + mind_control_uses = 1 + mind_control_duration = 2400 + +/obj/item/organ/internal/heart/gland/slime/insert(mob/living/carbon/M, special = 0) + ..() + owner.faction |= "slime" + owner.add_language("Bubblish") /obj/item/organ/internal/heart/gland/slime/activate() to_chat(owner, "You feel nauseous!") @@ -84,10 +135,12 @@ /obj/item/organ/internal/heart/gland/mindshock origin_tech = "materials=4;biotech=4;magnets=6;abductor=3" - cooldown_low = 300 - cooldown_high = 300 + cooldown_low = 400 + cooldown_high = 700 uses = -1 icon_state = "mindshock" + mind_control_uses = 1 + mind_control_duration = 6000 /obj/item/organ/internal/heart/gland/mindshock/activate() to_chat(owner, "You get a headache.") @@ -96,15 +149,25 @@ for(var/mob/living/carbon/H in orange(4,T)) if(H == owner) continue - to_chat(H, "You hear a buzz in your head.") - H.AdjustConfused(20) + switch(pick(1,3)) + if(1) + to_chat(H, "You hear a loud buzz in your head, silencing your thoughts!") + H.Stun(3) + if(2) + to_chat(H, "You hear an annoying buzz in your head.") + H.AdjustConfused(15) + H.adjustBrainLoss(5, 15) + if(3) + H.hallucination += 60 /obj/item/organ/internal/heart/gland/pop cooldown_low = 900 cooldown_high = 1800 uses = -1 - human_only = 1 + human_only = TRUE icon_state = "species" + mind_control_uses = 5 + mind_control_duration = 3000 /obj/item/organ/internal/heart/gland/pop/activate() to_chat(owner, "You feel unlike yourself.") @@ -117,6 +180,8 @@ cooldown_high = 2400 uses = 1 icon_state = "vent" + mind_control_uses = 4 + mind_control_duration = 1800 /obj/item/organ/internal/heart/gland/ventcrawling/activate() to_chat(owner, "You feel very stretchy.") @@ -128,23 +193,44 @@ cooldown_high = 2400 uses = 1 icon_state = "viral" + mind_control_uses = 1 + mind_control_duration = 1800 /obj/item/organ/internal/heart/gland/viral/activate() to_chat(owner, "You feel sick.") - var/virus_type = pick(/datum/disease/beesease, /datum/disease/brainrot, /datum/disease/magnitis) - var/datum/disease/D = new virus_type() - D.carrier = TRUE - owner.viruses += D - D.affected_mob = owner - owner.med_hud_set_status() + var/datum/disease/advance/A = random_virus(pick(2, 6), 6) + A.carrier = TRUE + owner.ForceContractDisease(A) + +/obj/item/organ/internal/heart/gland/viral/proc/random_virus(max_symptoms, max_level) + if(max_symptoms > VIRUS_SYMPTOM_LIMIT) + max_symptoms = VIRUS_SYMPTOM_LIMIT + var/datum/disease/advance/A = new /datum/disease/advance() + var/list/datum/symptom/possible_symptoms = list() + for(var/symptom in subtypesof(/datum/symptom)) + var/datum/symptom/S = symptom + if(initial(S.level) > max_level) + continue + if(initial(S.level) <= 0) //unobtainable symptoms + continue + possible_symptoms += S + for(var/i in 1 to max_symptoms) + var/datum/symptom/chosen_symptom = pick_n_take(possible_symptoms) + if(chosen_symptom) + var/datum/symptom/S = new chosen_symptom + A.symptoms += S + A.Refresh() //just in case someone already made and named the same disease + return A /obj/item/organ/internal/heart/gland/emp //TODO : Replace with something more interesting origin_tech = "materials=4;biotech=4;magnets=6;abductor=3" - cooldown_low = 900 - cooldown_high = 1600 + cooldown_low = 800 + cooldown_high = 1200 uses = 10 icon_state = "emp" + mind_control_uses = 3 + mind_control_duration = 1800 /obj/item/organ/internal/heart/gland/emp/activate() to_chat(owner, "You feel a spike of pain in your head.") @@ -153,25 +239,71 @@ /obj/item/organ/internal/heart/gland/spiderman cooldown_low = 450 cooldown_high = 900 - uses = 10 + uses = -1 icon_state = "spider" + mind_control_uses = 2 + mind_control_duration = 2400 /obj/item/organ/internal/heart/gland/spiderman/activate() to_chat(owner, "You feel something crawling in your skin.") owner.faction |= "spiders" - new /obj/structure/spider/spiderling(owner.loc) + var/obj/structure/spider/spiderling/S = new(owner.loc) + S.master_commander = owner /obj/item/organ/internal/heart/gland/egg cooldown_low = 300 cooldown_high = 400 uses = -1 icon_state = "egg" + mind_control_uses = 2 + mind_control_duration = 1800 /obj/item/organ/internal/heart/gland/egg/activate() - to_chat(owner, "You lay an egg!") - var/obj/item/reagent_containers/food/snacks/egg/egg = new(owner.loc) - egg.reagents.add_reagent("sacid",20) - egg.desc += " It smells bad." + owner.visible_message("[owner] [pick(EGG_LAYING_MESSAGES)]") + new /obj/item/reagent_containers/food/snacks/egg/gland(get_turf(owner)) + +/obj/item/organ/internal/heart/gland/electric + cooldown_low = 800 + cooldown_high = 1200 + uses = -1 + mind_control_uses = 2 + mind_control_duration = 900 + +/obj/item/organ/internal/heart/gland/electric/insert(mob/living/carbon/M, special = 0) + ..() + if(ishuman(owner)) + owner.gene_stability += GENE_INSTABILITY_MODERATE // give them this gene for free + owner.dna.SetSEState(SHOCKIMMUNITYBLOCK, TRUE) + genemutcheck(owner, SHOCKIMMUNITYBLOCK, null, MUTCHK_FORCED) + +/obj/item/organ/internal/heart/gland/electric/remove(mob/living/carbon/M, special = 0) + if(ishuman(owner)) + owner.gene_stability -= GENE_INSTABILITY_MODERATE // but return it to normal once it's removed + owner.dna.SetSEState(SHOCKIMMUNITYBLOCK, FALSE) + genemutcheck(owner, SHOCKIMMUNITYBLOCK, null, MUTCHK_FORCED) + return ..() + +/obj/item/organ/internal/heart/gland/electric/activate() + owner.visible_message("[owner]'s skin starts emitting electric arcs!",\ + "You feel electric energy building up inside you!") + playsound(get_turf(owner), "sparks", 100, 1, -1) + addtimer(CALLBACK(src, .proc/zap), rand(30, 100)) + +/obj/item/organ/internal/heart/gland/electric/proc/zap() + tesla_zap(owner, 4, 8000) + playsound(get_turf(owner), 'sound/magic/lightningshock.ogg', 50, 1) + +/obj/item/organ/internal/heart/gland/chem + cooldown_low = 50 + cooldown_high = 50 + uses = -1 + mind_control_uses = 3 + mind_control_duration = 1200 + +/obj/item/organ/internal/heart/gland/chem/activate() + owner.reagents.add_reagent(get_random_reagent_id(), 2) + owner.adjustToxLoss(-2) + ..() /obj/item/organ/internal/heart/gland/bloody cooldown_low = 200 @@ -257,6 +389,8 @@ cooldown_high = 1800 origin_tech = "materials=4;biotech=4;plasmatech=6;abductor=3" uses = -1 + mind_control_uses = 1 + mind_control_duration = 800 /obj/item/organ/internal/heart/gland/plasma/activate() spawn(0) diff --git a/code/game/gamemodes/miniantags/abduction/machinery/console.dm b/code/game/gamemodes/miniantags/abduction/machinery/console.dm index 10cd5473279..0e8c4d3c409 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/console.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/console.dm @@ -54,21 +54,22 @@ dat += "Agent Vest
" dat += "Radio Silencer
" dat += "Science Tool
" + dat += "Mental Interface Device
" else dat += "NO EXPERIMENT MACHINE DETECTED
" - if(pad!=null) + if(pad) dat += "Emergency Teleporter System." dat += "Consider using primary observation console first." dat += "Activate Teleporter
" - if(gizmo!=null && gizmo.marked!=null) + if(gizmo && gizmo.marked) dat += "Retrieve Mark
" else dat += "Retrieve Mark
" else dat += "NO TELEPAD DETECTED
" - if(vest!=null) + if(vest) dat += "

Agent Vest Mode


" var/mode = vest.mode if(mode == VEST_STEALTH) @@ -100,13 +101,14 @@ else if(href_list["flip_vest"]) FlipVest() else if(href_list["toggle_vest"]) - toggle_vest() + if(vest) + vest.toggle_nodrop() else if(href_list["select_disguise"]) SelectDisguise() else if(href_list["dispense"]) switch(href_list["dispense"]) if("baton") - Dispense(/obj/item/abductor_baton,cost=2) + Dispense(/obj/item/abductor_baton, cost = 2) if("helmet") Dispense(/obj/item/clothing/head/helmet/abductor) if("silencer") @@ -115,19 +117,21 @@ Dispense(/obj/item/abductor/gizmo) if("vest") Dispense(/obj/item/clothing/suit/armor/abductor/vest) + if("mind_device") + Dispense(/obj/item/abductor/mind_device, cost = 2) updateUsrDialog() /obj/machinery/abductor/console/proc/TeleporterRetrieve() - if(gizmo!=null && pad!=null && gizmo.marked) + if(pad && gizmo && gizmo.marked) pad.Retrieve(gizmo.marked) /obj/machinery/abductor/console/proc/TeleporterSend() - if(pad!=null) + if(pad) pad.Send() /obj/machinery/abductor/console/proc/FlipVest() - if(vest!=null) + if(vest) vest.flip_mode() /obj/machinery/abductor/console/proc/SelectDisguise(remote = 0) @@ -175,21 +179,36 @@ return disguises[entry.name] = entry +/obj/machinery/abductor/console/proc/AddGizmo(obj/item/abductor/gizmo/G) + if(G == gizmo && G.console == src) + return FALSE + + if(G.console) + G.console.gizmo = null + + gizmo = G + G.console = src + return TRUE + +/obj/machinery/abductor/console/proc/AddVest(obj/item/clothing/suit/armor/abductor/vest/V) + if(vest == V) + return FALSE + + for(var/obj/machinery/abductor/console/C in machines) + if(C.vest == V) + C.vest = null + break + + vest = V + return TRUE + /obj/machinery/abductor/console/attackby(obj/O, mob/user, params) - if(istype(O, /obj/item/abductor/gizmo)) - var/obj/item/abductor/gizmo/G = O + if(istype(O, /obj/item/abductor/gizmo) && AddGizmo(O)) to_chat(user, "You link the tool to the console.") - gizmo = G - G.console = src - else if(istype(O, /obj/item/clothing/suit/armor/abductor/vest)) - var/obj/item/clothing/suit/armor/abductor/vest/V = O + else if(istype(O, /obj/item/clothing/suit/armor/abductor/vest) && AddVest(O)) to_chat(user, "You link the vest to the console.") - if(istype(vest)) - if(vest.flags & NODROP) - toggle_vest() - vest = V else - ..() + return ..() /obj/machinery/abductor/console/proc/Dispense(item,cost=1) if(experiment && experiment.credits >= cost) @@ -201,10 +220,4 @@ else new item(src.loc) else - atom_say("Insufficent data!") - -/obj/machinery/abductor/console/proc/toggle_vest() - vest.flags ^= NODROP - var/mob/M = vest.loc - if(istype(M)) - to_chat(M, "[src] is now [vest.flags & NODROP ? "locked" : "unlocked"].") \ No newline at end of file + atom_say("Insufficent data!") \ No newline at end of file diff --git a/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm b/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm index 9e07c9c04a9..1a377667650 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm @@ -3,8 +3,8 @@ desc = "A tank filled with replacement organs" icon = 'icons/obj/abductor.dmi' icon_state = "dispenser" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE var/list/gland_types var/list/gland_colors var/list/amounts @@ -49,7 +49,7 @@ var/g_color = gland_colors[i] var/amount = amounts[i] dat += "[amount]" - if(item_count == 3) // Three boxes per line + if(item_count == 4) // Three boxes per line dat +="

" item_count = 0 var/datum/browser/popup = new(user, "glands", "Gland Dispenser", 200, 200) @@ -68,7 +68,7 @@ if(gland_types[i] == W.type) amounts[i]++ else - ..() + return ..() /obj/machinery/abductor/gland_dispenser/Topic(href, href_list) if(..()) diff --git a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm index 3b339ad7c40..53969aaf7d1 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm @@ -3,8 +3,8 @@ desc = "A large man-sized tube sporting a complex array of surgical apparatus." icon = 'icons/obj/abductor.dmi' icon_state = "experiment-open" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE var/points = 0 var/credits = 0 var/list/history = list() @@ -137,6 +137,7 @@ to_chat(H, "You feel intensely watched.") sleep(5) to_chat(H, "Your mind snaps!") + to_chat(H, "You can't remember how you got here...") var/objtype = pick(subtypesof(/datum/objective/abductee/)) var/datum/objective/abductee/O = new objtype() ticker.mode.abductees += H.mind diff --git a/code/modules/food_and_drinks/food/foods/meat.dm b/code/modules/food_and_drinks/food/foods/meat.dm index c59b6b9b1ee..a7f4acb4405 100644 --- a/code/modules/food_and_drinks/food/foods/meat.dm +++ b/code/modules/food_and_drinks/food/foods/meat.dm @@ -324,6 +324,16 @@ icon_state = "egg-yellow" item_color = "yellow" +/obj/item/reagent_containers/food/snacks/egg/gland + desc = "An egg! It looks weird..." + +/obj/item/reagent_containers/food/snacks/egg/gland/New() + ..() + reagents.add_reagent(get_random_reagent_id(), 15) + + var/reagent_color = mix_color_from_reagents(reagents.reagent_list) + color = reagent_color + /obj/item/reagent_containers/food/snacks/friedegg name = "Fried egg" desc = "A fried egg, with a touch of salt and pepper." diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index a7fcc6874a2..96693a0d086 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -1,7 +1,7 @@ var/global/default_martial_art = new/datum/martial_art /mob/living/carbon/human - hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPMINDSHIELD_HUD,IMPCHEM_HUD,IMPTRACK_HUD,SPECIALROLE_HUD,NATIONS_HUD) + hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPMINDSHIELD_HUD,IMPCHEM_HUD,IMPTRACK_HUD,SPECIALROLE_HUD,NATIONS_HUD,GLAND_HUD) //Marking colour and style var/list/m_colours = DEFAULT_MARKING_COLOURS //All colours set to #000000. diff --git a/code/modules/mob/living/carbon/human/species/abductor.dm b/code/modules/mob/living/carbon/human/species/abductor.dm index d50be2e73e8..c205cb6d033 100644 --- a/code/modules/mob/living/carbon/human/species/abductor.dm +++ b/code/modules/mob/living/carbon/human/species/abductor.dm @@ -36,4 +36,11 @@ H.gender = NEUTER H.languages.Cut() //Under no condition should you be able to speak any language H.add_language("Abductor Mindlink") //other than over the abductor's own mindlink - return ..() \ No newline at end of file + var/datum/atom_hud/abductor_hud = huds[DATA_HUD_ABDUCTOR] + abductor_hud.add_hud_to(H) + return ..() + +/datum/species/abductor/remove_abilities(mob/living/carbon/human/H) + ..() + var/datum/atom_hud/abductor_hud = huds[DATA_HUD_ABDUCTOR] + abductor_hud.remove_hud_from(H) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index a8784a6d150..370418134c3 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -234,7 +234,7 @@ var/global/chicken_count = 0 can_hide = 1 can_collar = 1 var/list/feedMessages = list("It clucks happily.","It clucks happily.") - var/list/layMessage = list("lays an egg.","squats down and croons.","begins making a huge racket.","begins clucking raucously.") + var/list/layMessage = EGG_LAYING_MESSAGES var/list/validColors = list("brown","black","white") gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 638a614fc85..a7fe42063ff 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -245,6 +245,36 @@ materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) category = list("Medical") +/datum/design/alienbonegel + name = "Alien Bone Gel" + desc = "Advanced bone gel obtained through Abductor technology." + id = "alien_bonegel" + req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) + build_path = /obj/item/bonegel/alien + build_type = PROTOLATHE + materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) + category = list("Medical") + +/datum/design/alienbonesetter + name = "Alien Bone Setter" + desc = "An advanced bone setter obtained through Abductor technology." + id = "alien_bonesetter" + req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) + build_path = /obj/item/bonesetter/alien + build_type = PROTOLATHE + materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) + category = list("Medical") + +/datum/design/alienfixovein + name = "Alien FixOVein" + desc = "An advanced FixOVein obtained through Abductor technology." + id = "alien_fixovein" + req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) + build_path = /obj/item/FixOVein/alien + build_type = PROTOLATHE + materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) + category = list("Medical") + ///////////////////////////////////////// //////////Cybernetic Implants//////////// ///////////////////////////////////////// diff --git a/goon/browserassets/css/browserOutput.css b/goon/browserassets/css/browserOutput.css index f3fe28315f6..234c5ac2274 100644 --- a/goon/browserassets/css/browserOutput.css +++ b/goon/browserassets/css/browserOutput.css @@ -342,7 +342,8 @@ h1.alert, h2.alert {color: #000000;} .clown {color: #ff0000;} .shadowling {color: #3b2769;} .vulpkanin {color: #B97A57;} -.abductor {color: #800080;} +.abductor {color: #800080; font-style: italic;} +.mind_control {color: #A00D6F; font-size: 3; font-weight: bold; font-style: italic;} .rough {font-family: 'Trebuchet MS', cursive, sans-serif;} .say_quote {font-family: Georgia, Verdana, sans-serif;} .cult {color: #800080; font-weight: bold; font-style: italic;} diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index 760e82458d8..b4dea0cfa36 100644 Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ diff --git a/icons/obj/abductor.dmi b/icons/obj/abductor.dmi index 2adfdba5670..f556369cf69 100644 Binary files a/icons/obj/abductor.dmi and b/icons/obj/abductor.dmi differ