Merge remote-tracking branch 'citadel/master' into shield_refactor

This commit is contained in:
kevinz000
2020-03-22 15:07:41 -07:00
44 changed files with 988 additions and 697 deletions

View File

@@ -718,8 +718,7 @@
},
/obj/machinery/firealarm{
dir = 4;
pixel_x = -26;
pixel_y = 0
pixel_x = -26
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/main)
@@ -1167,8 +1166,7 @@
},
/obj/machinery/firealarm{
dir = 8;
pixel_x = 28;
pixel_y = 0
pixel_x = 28
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/heads/hos)
@@ -4085,8 +4083,7 @@
/obj/effect/turf_decal/bot,
/obj/machinery/camera{
c_tag = "Brig Infirmary";
dir = 4;
network = list("ss13")
dir = 4
},
/turf/open/floor/plasteel/dark,
/area/security/brig)
@@ -4658,8 +4655,7 @@
},
/obj/machinery/camera{
c_tag = "Brig Central";
dir = 8;
network = list("ss13")
dir = 8
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 8
@@ -4683,8 +4679,7 @@
/area/security/brig)
"aiK" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1;
pixel_x = 0
dir = 1
},
/turf/open/floor/plasteel,
/area/security/processing)
@@ -5087,8 +5082,7 @@
dir = 4
},
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1;
pixel_x = 0
dir = 1
},
/obj/structure/disposalpipe/segment{
dir = 4
@@ -6516,8 +6510,7 @@
/area/security/brig)
"amU" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1;
pixel_x = 0
dir = 1
},
/obj/structure/chair/office/dark{
dir = 8
@@ -6673,7 +6666,6 @@
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/security{
name = "Evidence Storage";
req_access = null;
req_access_txt = "3"
},
/turf/open/floor/plasteel/showroomfloor,
@@ -6743,8 +6735,7 @@
dir = 8
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1;
pixel_x = 0
dir = 1
},
/turf/open/floor/plasteel,
/area/security/brig)
@@ -6830,8 +6821,7 @@
pixel_y = -36
},
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1;
pixel_x = 0
dir = 1
},
/obj/structure/bed,
/obj/item/bedsheet/blue,
@@ -7552,7 +7542,6 @@
normaldoorcontrol = 1;
pixel_x = -24;
pixel_y = -40;
req_access = null;
req_access_txt = "2"
},
/obj/machinery/button/door{
@@ -7561,7 +7550,6 @@
normaldoorcontrol = 1;
pixel_x = -24;
pixel_y = -24;
req_access = null;
req_access_txt = "2"
},
/turf/open/floor/plasteel/showroomfloor,
@@ -8324,9 +8312,7 @@
"ary" = (
/obj/machinery/power/apc{
areastring = "/area/security/warden";
dir = 2;
name = "Brig Control APC";
pixel_x = 0;
pixel_y = -24
},
/obj/machinery/button/door{
@@ -8334,7 +8320,6 @@
name = "Cell Shutters";
pixel_x = 6;
pixel_y = -40;
req_access = null;
req_access_txt = "2"
},
/obj/machinery/button/door{
@@ -8392,8 +8377,7 @@
dir = 8
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1;
pixel_x = 0
dir = 1
},
/turf/open/floor/plasteel,
/area/security/brig)
@@ -8512,8 +8496,7 @@
dir = 8
},
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1;
pixel_x = 0
dir = 1
},
/turf/open/floor/plasteel/dark,
/area/security/brig)
@@ -8580,8 +8563,7 @@
/area/hallway/primary/fore)
"asb" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1;
pixel_x = 0
dir = 1
},
/obj/machinery/camera{
c_tag = "Brig Evidence Storage";
@@ -8735,8 +8717,7 @@
},
/obj/machinery/firealarm{
dir = 8;
pixel_x = 28;
pixel_y = 0
pixel_x = 28
},
/turf/open/floor/plasteel/dark,
/area/security/brig)
@@ -8754,7 +8735,6 @@
name = "Brig Control Shutters";
pixel_x = 6;
pixel_y = -40;
req_access = null;
req_access_txt = "2"
},
/obj/machinery/button/door{
@@ -8805,8 +8785,7 @@
},
/obj/machinery/firealarm{
dir = 8;
pixel_x = 28;
pixel_y = 0
pixel_x = 28
},
/turf/open/floor/plasteel,
/area/security/processing)
@@ -33788,9 +33767,9 @@
"bCG" = (
/obj/structure/table,
/obj/item/folder/white,
/obj/item/gun/syringe,
/obj/item/reagent_containers/dropper,
/obj/item/soap/nanotrasen,
/obj/item/gun/syringe/dart,
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
"bCH" = (
@@ -35592,6 +35571,7 @@
pixel_y = 2
},
/obj/item/clothing/neck/stethoscope,
/obj/item/gun/syringe/dart,
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
"bGT" = (
@@ -54412,8 +54392,7 @@
/area/security/prison)
"eXz" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1;
pixel_x = 0
dir = 1
},
/turf/open/floor/plasteel,
/area/security/processing)
@@ -54973,8 +54952,7 @@
"gDP" = (
/obj/machinery/firealarm{
dir = 8;
pixel_x = 28;
pixel_y = 0
pixel_x = 28
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 6
@@ -55524,6 +55502,11 @@
},
/turf/closed/wall/r_wall,
/area/engine/gravity_generator)
"iLJ" = (
/obj/item/reagent_containers/glass/bucket,
/mob/living/simple_animal/pet/bumbles,
/turf/open/floor/plasteel,
/area/hydroponics)
"iMv" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
@@ -56598,8 +56581,7 @@
/obj/machinery/door/airlock/security/glass{
id_tag = "innerbrig";
name = "Brig Infirmary";
req_access_txt = "2";
req_one_access_txt = "0"
req_access_txt = "2"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 1
@@ -56720,8 +56702,7 @@
pixel_y = -36
},
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1;
pixel_x = 0
dir = 1
},
/obj/structure/bed,
/obj/item/bedsheet/yellow,
@@ -57070,7 +57051,6 @@
"nEj" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/sign/warning/vacuum/external{
pixel_x = 0;
pixel_y = 32
},
/turf/open/floor/plating,
@@ -57287,8 +57267,7 @@
pixel_y = -36
},
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1;
pixel_x = 0
dir = 1
},
/obj/structure/bed,
/obj/item/bedsheet/green,
@@ -58087,8 +58066,7 @@
dir = 8
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1;
pixel_x = 0
dir = 1
},
/turf/open/floor/plasteel,
/area/security/brig)
@@ -60615,7 +60593,6 @@
"xWq" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/sign/warning/vacuum/external{
pixel_x = 0;
pixel_y = -32
},
/turf/open/floor/plating,
@@ -102207,7 +102184,7 @@ aSU
aXo
aXo
aXo
aYO
iLJ
bap
ikm
aYV

View File

@@ -90569,7 +90569,6 @@
pixel_y = 3
},
/obj/item/storage/box/syringes,
/obj/item/gun/syringe,
/obj/machinery/status_display/evac{
pixel_x = -32
},
@@ -90581,6 +90580,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/item/gun/syringe/dart,
/turf/open/floor/plasteel,
/area/medical/storage)
"cWv" = (
@@ -99195,7 +99195,7 @@
/obj/structure/table/reinforced,
/obj/machinery/light/small,
/obj/structure/bedsheetbin,
/obj/item/gun/syringe,
/obj/item/gun/syringe/dart,
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -106576,11 +106576,11 @@
/obj/item/clothing/mask/muzzle,
/obj/item/clothing/glasses/sunglasses/blindfold,
/obj/item/clothing/ears/earmuffs,
/obj/item/gun/syringe,
/obj/item/clothing/glasses/eyepatch,
/obj/effect/turf_decal/tile/blue{
dir = 8
},
/obj/item/gun/syringe/dart,
/turf/open/floor/plasteel/white,
/area/medical/surgery)
"dyE" = (
@@ -126360,6 +126360,20 @@
},
/turf/open/floor/plasteel/dark,
/area/science/mixing)
"jwo" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/mob/living/simple_animal/pet/bumbles,
/turf/open/floor/plasteel,
/area/hydroponics)
"jBE" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/neutral{
@@ -160698,7 +160712,7 @@ bjt
bli
bnk
boB
bnj
jwo
bnj
bnh
bvB

View File

@@ -22793,9 +22793,6 @@
pixel_y = 4
},
/obj/item/storage/box/beakers,
/obj/item/gun/syringe{
pixel_y = 5
},
/obj/item/reagent_containers/spray/cleaner,
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
@@ -22804,6 +22801,7 @@
/obj/machinery/light_switch{
pixel_y = 24
},
/obj/item/gun/syringe/dart,
/turf/open/floor/plasteel/dark,
/area/medical/storage)
"aKZ" = (
@@ -43879,18 +43877,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/maintenance/central)
"bqG" = (
/obj/effect/turf_decal/tile/green{
dir = 8
},
/obj/effect/turf_decal/tile/green{
dir = 1
},
/obj/effect/turf_decal/tile/blue{
dir = 1
},
/turf/open/floor/plasteel,
/area/hydroponics)
"bqH" = (
/obj/effect/turf_decal/tile/green{
dir = 4
@@ -88232,6 +88218,19 @@
"whw" = (
/turf/closed/wall/rust,
/area/medical/surgery)
"whZ" = (
/obj/effect/turf_decal/tile/green{
dir = 8
},
/obj/effect/turf_decal/tile/green{
dir = 1
},
/obj/effect/turf_decal/tile/blue{
dir = 1
},
/mob/living/simple_animal/pet/bumbles,
/turf/open/floor/plasteel,
/area/hydroponics)
"wmX" = (
/turf/closed/wall/rust,
/area/quartermaster/qm)
@@ -122394,7 +122393,7 @@ aZd
bqh
bnJ
bpl
bqG
whZ
bsL
buw
bwH

File diff suppressed because it is too large Load Diff

View File

@@ -54133,7 +54133,6 @@
/obj/item/clothing/glasses/hud/health,
/obj/item/clothing/glasses/hud/health,
/obj/item/clothing/glasses/hud/health,
/obj/item/gun/syringe,
/obj/structure/window/reinforced{
dir = 1
},
@@ -54146,6 +54145,7 @@
/obj/effect/turf_decal/tile/blue{
dir = 8
},
/obj/item/gun/syringe/dart,
/turf/open/floor/plasteel/white,
/area/medical/storage)
"cds" = (
@@ -59207,13 +59207,13 @@
},
/obj/item/clothing/suit/straight_jacket,
/obj/item/clothing/mask/muzzle,
/obj/item/gun/syringe,
/obj/item/clothing/glasses/eyepatch,
/obj/item/clothing/glasses/sunglasses/blindfold,
/obj/item/clothing/ears/earmuffs,
/obj/item/storage/belt/medical{
pixel_y = 2
},
/obj/item/gun/syringe/dart,
/turf/open/floor/plasteel/white/side,
/area/medical/surgery)
"cnu" = (
@@ -61843,7 +61843,7 @@
"csa" = (
/obj/structure/table,
/obj/item/restraints/handcuffs/cable/white,
/obj/item/gun/syringe,
/obj/item/gun/syringe/dart,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
"csb" = (
@@ -82724,6 +82724,14 @@
/obj/structure/grille,
/turf/open/floor/plating/airless,
/area/space/nearstation)
"soe" = (
/obj/effect/turf_decal/tile/green,
/obj/effect/turf_decal/tile/green{
dir = 4
},
/mob/living/simple_animal/pet/bumbles,
/turf/open/floor/plasteel,
/area/hydroponics)
"soh" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -117831,7 +117839,7 @@ bSV
bUk
bVv
bWQ
bWQ
soe
bWQ
caL
ccv

View File

@@ -27696,12 +27696,12 @@
pixel_y = 3
},
/obj/item/storage/box/syringes,
/obj/item/gun/syringe,
/obj/item/reagent_containers/hypospray/CMO,
/obj/item/storage/belt/medical,
/obj/item/storage/belt/medical,
/obj/item/clothing/neck/stethoscope,
/obj/item/clothing/neck/stethoscope,
/obj/item/gun/syringe/dart,
/turf/open/floor/plasteel,
/area/medical/medbay/zone3)
"aXR" = (

View File

@@ -22504,14 +22504,6 @@
/obj/effect/turf_decal/tile/green,
/turf/open/floor/plasteel,
/area/hydroponics)
"bbe" = (
/obj/structure/chair/stool,
/obj/effect/turf_decal/tile/green,
/obj/effect/turf_decal/tile/green{
dir = 8
},
/turf/open/floor/plasteel,
/area/hydroponics)
"bbg" = (
/obj/effect/landmark/start/cook,
/obj/machinery/atmospherics/components/unary/vent_pump/on,
@@ -39520,7 +39512,6 @@
"bMK" = (
/obj/item/soap/nanotrasen,
/obj/item/clothing/neck/stethoscope,
/obj/item/gun/syringe,
/obj/structure/table/glass,
/obj/effect/turf_decal/tile/blue{
dir = 1
@@ -39529,6 +39520,7 @@
/obj/effect/turf_decal/tile/blue{
dir = 8
},
/obj/item/gun/syringe/dart,
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"bMM" = (
@@ -59851,6 +59843,15 @@
},
/turf/open/floor/plating,
/area/science/xenobiology)
"ttS" = (
/obj/structure/chair/stool,
/obj/effect/turf_decal/tile/green,
/obj/effect/turf_decal/tile/green{
dir = 8
},
/mob/living/simple_animal/pet/bumbles,
/turf/open/floor/plasteel,
/area/hydroponics)
"tue" = (
/obj/structure/cable{
icon_state = "2-4"
@@ -90071,7 +90072,7 @@ aRN
aXZ
aYQ
aXS
bbe
ttS
bcd
bdo
ben

View File

@@ -47,9 +47,9 @@
/datum/brain_trauma/special/imaginary_friend/proc/get_ghost()
set waitfor = FALSE
var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as [owner]'s imaginary friend?", ROLE_PAI, null, null, 75, friend, POLL_IGNORE_IMAGINARYFRIEND)
var/list/candidates = pollCandidatesForMob("Do you want to play as [owner]'s imaginary friend?", ROLE_PAI, null, null, 75, friend, POLL_IGNORE_IMAGINARYFRIEND)
if(LAZYLEN(candidates))
var/mob/dead/observer/C = pick(candidates)
var/mob/C = pick(candidates)
C.transfer_ckey(friend, FALSE)
friend_initialized = TRUE
else

View File

@@ -27,9 +27,9 @@
/datum/brain_trauma/severe/split_personality/proc/get_ghost()
set waitfor = FALSE
var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as [owner]'s split personality?", ROLE_PAI, null, null, 75, stranger_backseat, POLL_IGNORE_SPLITPERSONALITY)
var/list/mob/candidates = pollCandidatesForMob("Do you want to play as [owner]'s split personality?", ROLE_PAI, null, null, 75, stranger_backseat, POLL_IGNORE_SPLITPERSONALITY)
if(LAZYLEN(candidates))
var/mob/dead/observer/C = pick(candidates)
var/mob/C = pick(candidates)
C.transfer_ckey(stranger_backseat, FALSE)
log_game("[key_name(stranger_backseat)] became [key_name(owner)]'s split personality.")
message_admins("[ADMIN_LOOKUPFLW(stranger_backseat)] became [ADMIN_LOOKUPFLW(owner)]'s split personality.")

View File

@@ -76,9 +76,9 @@
/datum/disease/transformation/proc/replace_banned_player(var/mob/living/new_mob) // This can run well after the mob has been transferred, so need a handle on the new mob to kill it if needed.
set waitfor = FALSE
var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as [affected_mob.name]?", bantype, null, bantype, 50, affected_mob)
var/list/mob/candidates = pollCandidatesForMob("Do you want to play as [affected_mob.name]?", bantype, null, bantype, 50, affected_mob)
if(LAZYLEN(candidates))
var/mob/dead/observer/C = pick(candidates)
var/mob/C = pick(candidates)
to_chat(affected_mob, "Your mob has been taken over by a ghost! Appeal your job ban if you want to avoid this in the future!")
message_admins("[key_name_admin(C)] has taken control of ([key_name_admin(affected_mob)]) to replace a jobbaned player.")
affected_mob.ghostize(0)

View File

@@ -41,16 +41,9 @@
var/count = 0
/datum/sabotage_objective/processing/power_sink/check_condition_processing()
count += 1
if(count==10 || sink_found) // doesn't need to fire that often unless a sink exists
var/sink_found_this_time = FALSE
for(var/datum/powernet/PN in GLOB.powernets)
for(var/obj/item/powersink/sink in PN.nodes)
sink_found_this_time = TRUE
won = max(won,sink.power_drained/1e8)
sink_found = sink_found_this_time
count = 0
return FALSE
for(var/s in GLOB.power_sinks)
var/obj/item/powersink/sink = s
won = max(won,sink.power_drained/1e8)
/obj/item/paper/guides/antag/supermatter_sabotage
info = "Ways to sabotage a supermatter:<br>\

View File

@@ -51,7 +51,7 @@
var/list/candidates = pollCandidatesForMob("Do you want to play as [clonename]'s defective clone?", null, null, null, 100, H)
if(LAZYLEN(candidates))
var/mob/dead/observer/C = pick(candidates)
var/mob/C = pick(candidates)
H.key = C.key
if(grab_ghost_when == CLONER_FRESH_CLONE)

View File

@@ -1,5 +1,7 @@
// Powersink - used to drain station power
GLOBAL_LIST_EMPTY(power_sinks)
/obj/item/powersink
desc = "A nulling power sink which drains energy from electrical systems."
name = "power sink"
@@ -26,6 +28,14 @@
var/obj/structure/cable/attached // the attached cable
/obj/item/powersink/Initialize()
. = ..()
GLOB.power_sinks += src
/obj/item/powersink/Destroy()
GLOB.power_sinks -= src
. = ..()
/obj/item/powersink/update_icon_state()
icon_state = "powersink[mode == OPERATING]"

View File

@@ -463,6 +463,16 @@
hitsound = 'sound/weapons/rapierhit.ogg'
var/possessed = FALSE
/obj/item/nullrod/scythe/talking/process()
for(var/mob/living/simple_animal/shade/S in contents)
if(S.mind)
return
else
qdel(S)
possessed = FALSE
visible_message("<span class='warning'>The blade makes a short sigh. The spirit within seems to have passed on...</span>")
return PROCESS_KILL
/obj/item/nullrod/scythe/talking/relaymove(mob/user)
return //stops buckled message spam for the ghost.
@@ -484,6 +494,8 @@
S.ckey = C.ckey
S.status_flags |= GODMODE
S.language_holder = user.language_holder.copy(S)
S.AddElement(/datum/element/ghost_role_eligibility)
START_PROCESSING(SSprocessing,src)
var/input = stripped_input(S,"What are you named?", ,"", MAX_NAME_LEN)
if(src && input)

View File

@@ -282,7 +282,6 @@
throwforce = 5
stamforce = 25
hitcost = 1000
knockdown = FALSE
throw_hit_chance = 10
slot_flags = ITEM_SLOT_BACK
var/obj/item/assembly/igniter/sparkler

View File

@@ -55,7 +55,7 @@
var/question = "Would you like to be [group_name]?"
var/list/candidates = pollCandidatesForMobs(question, ROLE_PAI, null, FALSE, 100, bodies)
while(LAZYLEN(candidates) && LAZYLEN(bodies))
var/mob/dead/observer/C = pick_n_take(candidates)
var/mob/C = pick_n_take(candidates)
var/mob/living/body = pick_n_take(bodies)
to_chat(body, "Your mob has been taken over by a ghost!")

View File

@@ -220,4 +220,17 @@
/proc/_instantiate_at(thing, location)
new thing(location)
/// Locating turfs
/proc/_turf_in_offset(s = usr, x = 0, y = 0, z = 0)
var/turf/T = get_turf(s)
return locate(clamp(T.x + x, 1, world.maxx), clamp(T.y + y, 1, world.maxy), clamp(T.z + z, 1, world.maxz))
/proc/_random_turf_in_range(s = usr, r = 7)
return _turf_in_offset(s, rand(-r, r), rand(-r, r))
/proc/_random_turf_in_view(s = usr, r = 7)
var/list/v = view(s, r)
. = list()
for(var/turf/T in v)
. += T
return pick(.)

View File

@@ -84,9 +84,9 @@ GLOBAL_LIST_EMPTY(antagonists)
/datum/antagonist/proc/replace_banned_player()
set waitfor = FALSE
var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as a [name]?", "[name]", null, job_rank, 50, owner.current)
var/list/mob/candidates = pollCandidatesForMob("Do you want to play as a [name]?", "[name]", null, job_rank, 50, owner.current)
if(LAZYLEN(candidates))
var/mob/dead/observer/C = pick(candidates)
var/mob/C = pick(candidates)
to_chat(owner, "Your mob has been taken over by a ghost! Appeal your job ban if you want to avoid this in the future!")
message_admins("[key_name_admin(C)] has taken control of ([key_name_admin(owner.current)]) to replace a jobbaned player.")
owner.current.ghostize(0)

View File

@@ -248,7 +248,7 @@
if(used || QDELETED(src))
return
used = TRUE
var/mob/dead/observer/C = pick(candidates)
var/mob/C = pick(candidates)
spawn_antag(C.client, get_turf(src), initial(demon_type.name),user.mind)
to_chat(user, shatter_msg)
to_chat(user, veil_msg)

View File

@@ -169,7 +169,7 @@
B.naut = TRUE //temporary placeholder to prevent creation of more than one per factory.
to_chat(src, "<span class='notice'>You attempt to produce a blobbernaut.</span>")
var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as a [blobstrain.name] blobbernaut?", ROLE_BLOB, null, ROLE_BLOB, 50) //players must answer rapidly
var/list/mob/candidates = pollGhostCandidates("Do you want to play as a [blobstrain.name] blobbernaut?", ROLE_BLOB, null, ROLE_BLOB, 50) //players must answer rapidly
if(LAZYLEN(candidates)) //if we got at least one candidate, they're a blobbernaut now.
B.max_integrity = initial(B.max_integrity) * 0.25 //factories that produced a blobbernaut have much lower health
B.obj_integrity = min(B.obj_integrity, B.max_integrity)

View File

@@ -352,9 +352,9 @@
break
if(!L.client || L.client.is_afk())
set waitfor = FALSE
var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as a [L.name], an inactive clock cultist?", ROLE_SERVANT_OF_RATVAR, null, ROLE_SERVANT_OF_RATVAR, 50, L)
var/list/mob/candidates = pollCandidatesForMob("Do you want to play as a [L.name], an inactive clock cultist?", ROLE_SERVANT_OF_RATVAR, null, ROLE_SERVANT_OF_RATVAR, 50, L)
if(LAZYLEN(candidates))
var/mob/dead/observer/C = pick(candidates)
var/mob/C = pick(candidates)
to_chat(L, "<span class='userdanger'>Your physical form has been taken over by another soul due to your inactivity! Ahelp if you wish to regain your form!</span>")
message_admins("[key_name_admin(C)] has taken control of ([key_name_admin(L)]) to replace an inactive clock cultist.")
L.ghostize(0)

View File

@@ -569,9 +569,9 @@ structure_check() searches for nearby cultist structures required for the invoca
mob_to_revive.grab_ghost()
if(!mob_to_revive.client || mob_to_revive.client.is_afk())
set waitfor = FALSE
var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as a [mob_to_revive.name], an inactive blood cultist?", ROLE_CULTIST, null, ROLE_CULTIST, 50, mob_to_revive)
var/list/mob/candidates = pollCandidatesForMob("Do you want to play as a [mob_to_revive.name], an inactive blood cultist?", ROLE_CULTIST, null, ROLE_CULTIST, 50, mob_to_revive)
if(LAZYLEN(candidates))
var/mob/dead/observer/C = pick(candidates)
var/mob/C = pick(candidates)
to_chat(mob_to_revive.mind, "Your physical form has been taken over by another soul due to your inactivity! Ahelp if you wish to regain your form.")
message_admins("[key_name_admin(C)] has taken control of ([key_name_admin(mob_to_revive)]) to replace an AFK player.")
mob_to_revive.ghostize(0)

View File

@@ -397,7 +397,7 @@
inert = TRUE
visible_message("<span class='revenwarning'>[src] settles down and seems lifeless.</span>")
return
var/mob/dead/observer/C = pick(candidates)
var/mob/C = pick(candidates)
C.transfer_ckey(revenant.key, FALSE)
if(!revenant.key)
qdel(revenant)

View File

@@ -127,7 +127,7 @@
. = ..()
if (.)
to_chat(user, "<span class='notice'>The uplink vibrates quietly, connecting to nearby agents...</span>")
var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as the Contractor Support Unit for [user.real_name]?", ROLE_PAI, null, FALSE, 100, POLL_IGNORE_CONTRACTOR_SUPPORT)
var/list/mob/candidates = pollGhostCandidates("Do you want to play as the Contractor Support Unit for [user.real_name]?", ROLE_PAI, null, FALSE, 100, POLL_IGNORE_CONTRACTOR_SUPPORT)
if(LAZYLEN(candidates))
var/mob/dead/observer/C = pick(candidates)
spawn_contractor_partner(user, C.key)
@@ -224,4 +224,4 @@
/obj/item/storage/box/contractor/fulton_extraction/PopulateContents()
new /obj/item/extraction_pack(src)
new /obj/item/fulton_core(src)
new /obj/item/fulton_core(src)

View File

@@ -266,6 +266,7 @@
M.equipOutfit(ctf_gear)
M.dna.species.punchdamagehigh = 25
M.dna.species.punchdamagelow = 25
M.AddElement(/datum/element/ghost_role_eligibility)
spawned_mobs += M
/obj/machinery/capture_the_flag/Topic(href, href_list)

View File

@@ -127,10 +127,10 @@
if(!current_wizard)
return
var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as Wizard Academy Defender?", ROLE_WIZARD, null, ROLE_WIZARD, 50, current_wizard)
var/list/mob/candidates = pollCandidatesForMob("Do you want to play as Wizard Academy Defender?", ROLE_WIZARD, null, ROLE_WIZARD, 50, current_wizard)
if(LAZYLEN(candidates))
var/mob/dead/observer/C = pick(candidates)
var/mob/C = pick(candidates)
message_admins("[ADMIN_LOOKUPFLW(C)] was spawned as Wizard Academy Defender")
current_wizard.ghostize() // on the off chance braindead defender gets back in
C.transfer_ckey(current_wizard, FALSE)
@@ -269,9 +269,9 @@
A.setup_master(user)
servant_mind.transfer_to(H)
var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as [user.real_name] Servant?", ROLE_WIZARD, null, ROLE_WIZARD, 50, H)
var/list/mob/candidates = pollCandidatesForMob("Do you want to play as [user.real_name] Servant?", ROLE_WIZARD, null, ROLE_WIZARD, 50, H)
if(LAZYLEN(candidates))
var/mob/dead/observer/C = pick(candidates)
var/mob/C = pick(candidates)
message_admins("[ADMIN_LOOKUPFLW(C)] was spawned as Dice Servant")
C.transfer_ckey(H, FALSE)

View File

@@ -44,7 +44,7 @@
var/spawned_animals = 0
while(spawned_animals < animals && candidates.len && potential.len)
var/mob/living/simple_animal/SA = pick_n_take(potential)
var/mob/dead/observer/SG = pick_n_take(candidates)
var/mob/SG = pick_n_take(candidates)
spawned_animals++
@@ -59,7 +59,7 @@
SA.del_on_death = FALSE
spawned_mobs += SA
SA.AddElement(/datum/element/ghost_role_eligibility)
to_chat(SA, "<span class='userdanger'>Hello world!</span>")
to_chat(SA, "<span class='warning'>Due to freak radiation and/or chemicals \
and/or lucky chance, you have gained human level intelligence \

View File

@@ -653,6 +653,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
return 0
transfer_ckey(target, FALSE)
target.AddElement(/datum/element/ghost_role_eligibility)
target.faction = list("neutral")
return 1

View File

@@ -707,7 +707,7 @@
/mob/living/carbon/human/wash_cream()
if(creamed) //clean both to prevent a rare bug
cut_overlay(mutable_appearance('icons/effects/creampie.dmi', "creampie_lizard"))
cut_overlay(mutable_appearance('icons/effects/creampie.dmi', "creampie_snout"))
cut_overlay(mutable_appearance('icons/effects/creampie.dmi', "creampie_human"))
creamed = FALSE

View File

@@ -5,10 +5,10 @@
icon_living = "bumbles"
icon_dead = "bumbles_dead"
turns_per_move = 1
response_help = "shoos"
response_help = "pets"
response_disarm = "brushes aside"
response_harm = "squashes"
speak_emote = list("bzzzs")
speak_emote = list("buzzes")
maxHealth = 100
health = 100
harm_intent_damage = 1
@@ -20,10 +20,12 @@
mob_size = MOB_SIZE_TINY
mob_biotypes = MOB_ORGANIC|MOB_BEAST
gold_core_spawnable = FRIENDLY_SPAWN
verb_say = "bzzs"
verb_ask = "bzzs inquisitively"
verb_exclaim = "bzzs intensely"
verb_yell = "bzzs intensely"
verb_say = "buzzs"
verb_ask = "buzzes inquisitively"
verb_exclaim = "buzzes intensely"
verb_yell = "buzzes intensely"
emote_see = list("buzzes.", "makes a loud buzz.", "rolls several times.", "buzzes happily.")
speak_chance = 1
/mob/living/simple_animal/pet/bumbles/Initialize()
. = ..()
@@ -44,3 +46,22 @@
/mob/living/simple_animal/pet/bumbles/bee_friendly()
return TRUE //treaty signed at the Beeneeva convention
/mob/living/simple_animal/pet/bumbles/handle_automated_movement()
. = ..()
if(!isturf(loc) || !CHECK_MOBILITY(src, MOBILITY_MOVE) || buckled)
return
if(!resting && prob(1))
emote("me", EMOTE_VISIBLE, pick("curls up on the surface below ", "is looking very sleepy.", "buzzes softly ", "looks around for a flower nap "))
set_resting(TRUE)
else if (resting && prob(1))
emote("me", EMOTE_VISIBLE, pick("wakes up with a smiling buzz.", "rolls upside down before waking up.", "stops resting."))
set_resting(FALSE)
/mob/living/simple_animal/pet/bumbles/update_mobility()
. = ..()
if(stat != DEAD)
if(!CHECK_MOBILITY(src, MOBILITY_STAND))
icon_state = "[icon_living]_rest"
else
icon_state = "[icon_living]"
regenerate_icons()

View File

@@ -161,7 +161,7 @@ While using this makes the system rely on OnFire, it still gives options for tim
INVOKE_ASYNC(src, .proc/arena_checks)
if(TUMOR_INACTIVE)
activity = TUMOR_ACTIVE
var/mob/dead/observer/elitemind = null
var/mob/elitemind = null
visible_message("<span class='boldwarning'>[src] begins to convulse. Your instincts tell you to step back.</span>")
activator = user
if(!boosted)

View File

@@ -443,10 +443,10 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
var/datum/antagonist/A = M.mind.has_antag_datum(/datum/antagonist/)
if(A)
poll_message = "[poll_message] Status:[A.name]."
var/list/mob/dead/observer/candidates = pollCandidatesForMob(poll_message, ROLE_PAI, null, FALSE, 100, M)
var/list/mob/candidates = pollCandidatesForMob(poll_message, ROLE_PAI, null, FALSE, 100, M)
if(LAZYLEN(candidates))
var/mob/dead/observer/C = pick(candidates)
var/mob/C = pick(candidates)
to_chat(M, "Your mob has been taken over by a ghost!")
message_admins("[key_name_admin(C)] has taken control of ([key_name_admin(M)])")
M.ghostize(FALSE, TRUE)

View File

@@ -339,7 +339,6 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
else
// Pass all the gas related code an empty gas container
removed = new()
damage = min(damage_archived + (DAMAGE_HARDCAP * explosion_point),damage)
damage_archived = damage
if(!removed || !removed.total_moles() || isspaceturf(T)) //we're in space or there is no gas to process
if(takes_damage)

View File

@@ -680,7 +680,7 @@
var/list/candidates = pollCandidatesForMob("Do you want to play as [SM.name]?", ROLE_SENTIENCE, null, ROLE_SENTIENCE, 50, SM, POLL_IGNORE_SENTIENCE_POTION) // see poll_ignore.dm
if(LAZYLEN(candidates))
var/mob/dead/observer/C = pick(candidates)
var/mob/C = pick(candidates)
C.transfer_ckey(SM, FALSE)
SM.mind.enslave_mind_to_creator(user)
SM.sentience_act()

View File

@@ -0,0 +1,4 @@
author: "Xantholne"
delete-after: True
changes:
- rscadd: "Bumbles is now actually in every station's hydroponics."

View File

@@ -0,0 +1,5 @@
author: "Putnam3145"
delete-after: True
changes:
- rscadd: "CTF spawns, random animals and possessed blades can now be pinged for ghost roles."
- bugfix: "A bunch of polls now work with ghost role eligible non-observers."

View File

@@ -0,0 +1,4 @@
author: "kevinz000"
delete-after: True
changes:
- balance: "stunprods knockdown again."

View File

@@ -0,0 +1,4 @@
author: "Detective-Google"
delete-after: True
changes:
- balance: "Medical no longer spawns with syringe guns, Medical now spawns with medidart guns."

View File

@@ -0,0 +1,4 @@
author: "Putnam3145"
delete-after: True
changes:
- bugfix: "Removes superfluous line in supermatter processing."

View File

@@ -0,0 +1,4 @@
author: "Putnam3145"
delete-after: True
changes:
- code_imp: "Power sink objective processing now makes sense."

View File

@@ -0,0 +1,4 @@
author: "Xantholne"
delete-after: True
changes:
- bugfix: "Bumbles will now actually rest, sit up, and buzz"

View File

@@ -0,0 +1,4 @@
author: "Ghommie"
delete-after: True
changes:
- bugfix: "Fixed permanent slapstick comedy pie'd overlay for snouted humanoids."

View File

@@ -0,0 +1,7 @@
author: "dapnee"
delete-after: True
changes:
- rscadd: "Robotic's APC, a few missing buttons (bridge shutters and crematorium), paramedic has spawn locations now, two rapid cable deployers to engineering"
- tweak: "Renamed some doors and edited engineering to be a bit more open in one spot"
- bugfix: "a few APCs with bad area tags, access on maintenance doors fixed, engine APC is now connected to the grid instead of power created by the engine"
- rscdel: "the two syringe guns in medical were removed"

View File

@@ -0,0 +1,5 @@
author: "dapnee"
delete-after: True
changes:
- rscadd: "couple gas masks around atmos"
- bugfix: "direction on turbine plasma pressure tank, cloning actually has a cloning console now"