Merge branch 'master' into upstream-merge-26129

This commit is contained in:
LetterJay
2017-04-29 11:45:37 -05:00
committed by GitHub
131 changed files with 1020 additions and 743 deletions
+1
View File
@@ -42,6 +42,7 @@
var/has_gravity = 0
var/noteleport = 0 //Are you forbidden from teleporting to the area? (centcomm, mobs, wizard, hand teleporter)
var/hidden = FALSE //Hides area from player Teleport function.
var/safe = 0 //Is the area teleport-safe: no space / radiation / aggresive mobs / other dangers
var/no_air = null
+1
View File
@@ -3,6 +3,7 @@
icon_state = "Holodeck"
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
flags = 0
hidden = TRUE
var/obj/machinery/computer/holodeck/linked
var/restricted = 0 // if true, program goes on emag list
+1
View File
@@ -4,6 +4,7 @@
name = "\improper Unexplored Location"
icon_state = "away"
has_gravity = 1
hidden = TRUE
/area/ruin/unpowered
+20 -10
View File
@@ -39,20 +39,21 @@
var/do_initialize = SSatoms.initialized
if(do_initialize > INITIALIZATION_INSSATOMS)
if(QDELETED(src))
CRASH("Found new qdeletion in type [type]!")
var/mapload = do_initialize == INITIALIZATION_INNEW_MAPLOAD
args[1] = mapload
if(Initialize(arglist(args)) && mapload)
LAZYADD(SSatoms.late_loaders, src)
args[1] = do_initialize == INITIALIZATION_INNEW_MAPLOAD
if(SSatoms.InitAtom(src, args))
//we were deleted
return
var/list/created = SSatoms.created_atoms
if(created)
created += src
//Called after New if the map is being loaded. mapload = TRUE
//Called from base of New if the map is being loaded. mapload = FALSE
//This base must be called or derivatives must set initialized to TRUE to prevent repeat calls
//Derivatives must not sleep
//Returning TRUE while mapload is TRUE will cause the object to be initialized again with mapload = FALSE when everything else is done
//(Useful for things that requires turfs to have air). This base may only be called once, however
//This base must be called or derivatives must set initialized to TRUE
//must not sleep
//Other parameters are passed from New (excluding loc), this does not happen if mapload is TRUE
//Must return an Initialize hint. Defined in __DEFINES/subsystems.dm
//Note: the following functions don't call the base for optimization and must copypasta:
// /turf/Initialize
@@ -75,7 +76,16 @@
if (opacity && isturf(loc))
var/turf/T = loc
T.has_opaque_atom = TRUE // No need to recalculate it in this case, it's guaranteed to be on afterwards anyways.
return INITIALIZE_HINT_NORMAL
//called if Initialize returns INITIALIZE_HINT_LATELOAD
//This version shouldn't be called
/atom/proc/LateInitialize()
var/static/list/warned_types = list()
if(!warned_types[type])
WARNING("Old style LateInitialize behaviour detected in [type]!")
warned_types[type] = TRUE
Initialize(FALSE)
/atom/Destroy()
if(alternate_appearances)
+3 -3
View File
@@ -45,7 +45,7 @@
return ..()
/atom/movable/Initialize(mapload)
..()
. = ..()
for(var/L in initial_languages)
grant_language(L)
@@ -562,7 +562,7 @@
return
else
var/turf/currentturf = get_turf(src)
get(src, /mob) << "<span class='danger'>You can't help but feel that you just lost something back there...</span>"
to_chat(get(src, /mob), "<span class='danger'>You can't help but feel that you just lost something back there...</span>")
var/turf/targetturf = relocate()
log_game("[src] has been moved out of bounds in [COORD(currentturf)]. Moving it to [COORD(targetturf)].")
if(HAS_SECONDARY_FLAG(src, INFORM_ADMINS_ON_RELOCATE))
@@ -627,4 +627,4 @@
/atom/movable/proc/ConveyorMove(movedir)
set waitfor = FALSE
if(!anchored && has_gravity())
step(src, movedir)
step(src, movedir)
+2 -2
View File
@@ -287,7 +287,7 @@ GLOBAL_LIST_INIT(lawlorify, list (
notify_ghosts("An arch devil has ascended in \the [A.name]. Reach out to the devil to be given a new shell for your soul.", source = owner.current, action=NOTIFY_ATTACK)
sleep(50)
if(!SSticker.mode.devil_ascended)
SSshuttle.emergency.request(null, 0.3)
SSshuttle.emergency.request(null, set_coefficient = 0.3)
SSticker.mode.devil_ascended++
form = ARCH_DEVIL
@@ -449,7 +449,7 @@ GLOBAL_LIST_INIT(lawlorify, list (
A.convert_to_archdevil()
else
throw EXCEPTION("Unable to find a blobstart landmark for hellish resurrection")
/datum/devilinfo/proc/update_hud()
if(istype(owner.current, /mob/living/carbon))
@@ -556,7 +556,7 @@
var/mob/living/silicon/ai/A = usr
if(A.stat == DEAD)
A <<"You are already dead!" //Omae Wa Mou Shindeiru
to_chat(A, "You are already dead!") //Omae Wa Mou Shindeiru
return
for(var/datum/AI_Module/AM in possible_modules)
@@ -166,7 +166,7 @@
var/obj/machinery/abductor/console/con = get_team_console(team_number)
var/datum/objective/objective = team_objectives[team_number]
if (con.experiment.points >= objective.target_amount)
SSshuttle.emergency.request(null, 0.5)
SSshuttle.emergency.request(null, set_coefficient = 0.5)
finished = 1
return ..()
return ..()
@@ -14,6 +14,13 @@
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, fire = 70, acid = 70)
actions_types = list(/datum/action/item_action/hands_free/activate)
allowed = list(
/obj/item/device/abductor,
/obj/item/weapon/abductor_baton,
/obj/item/weapon/melee/baton,
/obj/item/weapon/gun/energy,
/obj/item/weapon/restraints/handcuffs
)
var/mode = VEST_STEALTH
var/stealth_active = 0
var/combat_cooldown = 10
@@ -21,6 +28,11 @@
var/stealth_armor = list(melee = 15, bullet = 15, laser = 15, energy = 15, bomb = 15, bio = 15, rad = 15, fire = 70, acid = 70)
var/combat_armor = list(melee = 50, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 50, rad = 50, fire = 90, acid = 90)
/obj/item/clothing/suit/armor/abductor/vest/proc/toggle_nodrop()
flags ^= NODROP
if(ismob(loc))
to_chat(loc, "<span class='notice'>Your vest is now [flags & NODROP ? "locked" : "unlocked"].</span>")
/obj/item/clothing/suit/armor/abductor/vest/proc/flip_mode()
switch(mode)
if(VEST_STEALTH)
@@ -107,6 +119,18 @@
if(combat_cooldown==initial(combat_cooldown))
STOP_PROCESSING(SSobj, src)
/obj/item/clothing/suit/armor/abductor/Destroy()
STOP_PROCESSING(SSobj, src)
for(var/obj/machinery/abductor/console/C in GLOB.machines)
if(C.vest == src)
C.vest = null
break
. = ..()
/obj/item/device/abductor
icon = 'icons/obj/abductor.dmi'
/obj/item/device/abductor/proc/AbductorCheck(user)
if(isabductor(user))
return TRUE
@@ -114,14 +138,19 @@
return FALSE
/obj/item/device/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, "<span class='warning'>You're not trained to use this!</span>")
return FALSE
/obj/item/device/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 = "silencer"
origin_tech = "engineering=7;magnets=4;bluespace=4;abductor=3"
@@ -130,11 +159,12 @@
var/obj/machinery/abductor/console/console
/obj/item/device/abductor/gizmo/attack_self(mob/user)
if(!AbductorCheck(user))
return
if(!ScientistCheck(user))
to_chat(user, "<span class='warning'>You're not trained to use this!</span>")
return
if(!console)
to_chat(user, "<span class='warning'>The device is not linked to console!</span>")
return
if(mode == GIZMO_SCAN)
mode = GIZMO_MARK
icon_state = "gizmo_mark"
@@ -144,11 +174,12 @@
to_chat(user, "<span class='notice'>You switch the device to [mode==GIZMO_SCAN? "SCAN": "MARK"] MODE</span>")
/obj/item/device/abductor/gizmo/attack(mob/living/M, mob/user)
if(!AbductorCheck(user))
return
if(!ScientistCheck(user))
to_chat(user, "<span class='notice'>You're not trained to use this</span>")
return
if(!console)
to_chat(user, "<span class='warning'>The device is not linked to console!</span>")
return
switch(mode)
if(GIZMO_SCAN)
scan(M, user)
@@ -159,11 +190,12 @@
/obj/item/device/abductor/gizmo/afterattack(atom/target, mob/living/user, flag, params)
if(flag)
return
if(!AbductorCheck(user))
return
if(!ScientistCheck(user))
to_chat(user, "<span class='notice'>You're not trained to use this</span>")
return
if(!console)
to_chat(user, "<span class='warning'>The device is not linked to console!</span>")
return
switch(mode)
if(GIZMO_SCAN)
scan(target, user)
@@ -172,9 +204,8 @@
/obj/item/device/abductor/gizmo/proc/scan(atom/target, mob/living/user)
if(ishuman(target))
if(console!=null)
console.AddSnapshot(target)
to_chat(user, "<span class='notice'>You scan [target] and add them to the database.</span>")
console.AddSnapshot(target)
to_chat(user, "<span class='notice'>You scan [target] and add them to the database.</span>")
/obj/item/device/abductor/gizmo/proc/mark(atom/target, mob/living/user)
if(marked == target)
@@ -198,11 +229,15 @@
marked = target
to_chat(user, "<span class='notice'>You finish preparing [target] for transport.</span>")
/obj/item/device/abductor/gizmo/Destroy()
if(console)
console.gizmo = null
. = ..()
/obj/item/device/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 = "gizmo"
origin_tech = "materials=4;programming=7;abductor=3"
@@ -419,10 +454,10 @@ Congratulations! You are now trained for invasive xenobiology research!"}
if(!C.handcuffed)
C.handcuffed = new /obj/item/weapon/restraints/handcuffs/energy/used(C)
C.update_handcuffed()
to_chat(user, "<span class='notice'>You handcuff [C].</span>")
to_chat(user, "<span class='notice'>You restrain [C].</span>")
add_logs(user, C, "handcuffed")
else
to_chat(user, "<span class='warning'>You fail to handcuff [C].</span>")
to_chat(user, "<span class='warning'>You fail to restrain [C].</span>")
else
to_chat(user, "<span class='warning'>[C] doesn't have two hands...</span>")
@@ -471,11 +506,11 @@ Congratulations! You are now trained for invasive xenobiology research!"}
..()
switch(mode)
if(BATON_STUN)
user <<"<span class='warning'>The baton is in stun mode.</span>"
to_chat(user, "<span class='warning'>The baton is in stun mode.</span>")
if(BATON_SLEEP)
user <<"<span class='warning'>The baton is in sleep inducement mode.</span>"
to_chat(user, "<span class='warning'>The baton is in sleep inducement mode.</span>")
if(BATON_CUFF)
user <<"<span class='warning'>The baton is in restraining mode.</span>"
to_chat(user, "<span class='warning'>The baton is in restraining mode.</span>")
if(BATON_PROBE)
to_chat(user, "<span class='warning'>The baton is in probing mode.</span>")
@@ -22,13 +22,13 @@
if(console)
var/obj/item/clothing/suit/armor/abductor/vest/V = locate() in H
if(V)
console.vest = V
console.AddVest(V)
V.flags |= NODROP
var/obj/item/device/abductor/gizmo/G = locate() in H.getBackSlot()
if(G)
console.gizmo = G
G.console = console
var/obj/item/weapon/storage/backpack/B = locate() in H
if(B)
for(var/obj/item/device/abductor/gizmo/G in B.contents)
console.AddGizmo(G)
/datum/outfit/abductor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
@@ -40,10 +40,10 @@
name = "Abductor Agent"
head = /obj/item/clothing/head/helmet/abductor
suit = /obj/item/clothing/suit/armor/abductor/vest
suit_store = /obj/item/weapon/abductor_baton
belt = /obj/item/weapon/storage/belt/military/abductor/full
backpack_contents = list(
/obj/item/weapon/abductor_baton = 1,
/obj/item/weapon/gun/energy/alien = 1,
/obj/item/device/abductor/silencer = 1
)
@@ -7,7 +7,7 @@
//Console
/obj/machinery/abductor/console
name = "Abductor console"
name = "abductor console"
desc = "Ship command center."
icon = 'icons/obj/abductor.dmi'
icon_state = "console"
@@ -32,7 +32,7 @@
var/dat = ""
dat += "<H3> Abductsoft 3000 </H3>"
if(experiment != null)
if(experiment)
var/points = experiment.points
var/credits = experiment.credits
dat += "Collected Samples : [points] <br>"
@@ -46,18 +46,18 @@
else
dat += "<span class='bad'>NO EXPERIMENT MACHINE DETECTED</span> <br>"
if(pad!=null)
if(pad)
dat += "<span class='bad'>Emergency Teleporter System.</span>"
dat += "<span class='bad'>Consider using primary observation console first.</span>"
dat += "<a href='?src=\ref[src];teleporter_send=1'>Activate Teleporter</A><br>"
if(gizmo!=null && gizmo.marked!=null)
if(gizmo && gizmo.marked)
dat += "<a href='?src=\ref[src];teleporter_retrieve=1'>Retrieve Mark</A><br>"
else
dat += "<span class='linkOff'>Retrieve Mark</span><br>"
else
dat += "<span class='bad'>NO TELEPAD DETECTED</span></br>"
if(vest!=null)
if(vest)
dat += "<h4> Agent Vest Mode </h4><br>"
var/mode = vest.mode
if(mode == VEST_STEALTH)
@@ -88,7 +88,8 @@
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"])
@@ -105,23 +106,22 @@
Dispense(/obj/item/clothing/suit/armor/abductor/vest)
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)
var/entry_name = input( "Choose Disguise", "Disguise") as null|anything in disguises
var/datum/icon_snapshot/chosen = disguises[entry_name]
if(chosen && (remote || in_range(usr,src)))
if(chosen && vest && (remote || in_range(usr,src)))
vest.SetDisguise(chosen)
/obj/machinery/abductor/console/proc/SetDroppoint(turf/open/location,user)
@@ -135,10 +135,10 @@
/obj/machinery/abductor/console/Initialize(mapload)
if(mapload)
return TRUE //wait for machines list
..()
return INITIALIZE_HINT_LATELOAD
/obj/machinery/abductor/console/LateInitialize()
if(!team)
return
@@ -169,36 +169,48 @@
return
disguises[entry.name] = entry
/obj/machinery/abductor/console/proc/AddGizmo(obj/item/device/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 GLOB.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/device/abductor/gizmo))
var/obj/item/device/abductor/gizmo/G = O
if(istype(O, /obj/item/device/abductor/gizmo) && AddGizmo(O))
to_chat(user, "<span class='notice'>You link the tool to the console.</span>")
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, "<span class='notice'>You link the vest to the console.</span>")
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)
experiment.credits -=cost
say("Incoming supply!")
var/drop_location = loc
if(pad)
flick("alien-pad", pad)
new item(pad.loc)
else
new item(loc)
drop_location = pad.loc
new item(drop_location)
else
say("Insufficent data!")
/obj/machinery/abductor/console/proc/toggle_vest()
vest.flags ^= NODROP
var/mob/M = vest.loc
if(istype(M))
to_chat(M, "<span class='notice'>[src] is now [vest.flags & NODROP ? "locked" : "unlocked"].</span>")
@@ -1,5 +1,5 @@
/obj/machinery/abductor/gland_dispenser
name = "Replacement Organ Storage"
name = "replacement organ storage"
desc = "A tank filled with replacement organs."
icon = 'icons/obj/abductor.dmi'
icon_state = "dispenser"
@@ -49,7 +49,7 @@
var/g_color = gland_colors[i]
var/amount = amounts[i]
dat += "<a class='box gland' style='background-color:[g_color]' href='?src=\ref[src];dispense=[i]'>[amount]</a>"
if(item_count == 3) // Three boxes per line
if(item_count == 4) // Four boxes per line
dat +="</br></br>"
item_count = 0
var/datum/browser/popup = new(user, "glands", "Gland Dispenser", 200, 200)
@@ -628,7 +628,7 @@ GLOBAL_VAR_INIT(total_borer_hosts_needed, 10)
chemicals -= 250
to_chat(src, "<span class='notice'>You send a jolt of energy to your host, reviving them!</span>")
victim.grab_ghost(force = TRUE) //brings the host back, no eggscape
victim <<"<span class='notice'>You bolt upright, gasping for breath!</span>"
to_chat(victim, "<span class='notice'>You bolt upright, gasping for breath!</span>")
/mob/living/simple_animal/borer/verb/bond_brain()
set category = "Borer"
@@ -672,7 +672,7 @@ GLOBAL_VAR_INIT(total_borer_hosts_needed, 10)
if(!bonding)
return
if(docile)
src <<"<span class='warning'>You are feeling far too docile to do that.</span>"
to_chat(src, "<span class='warning'>You are feeling far too docile to do that.</span>")
return
if(is_servant_of_ratvar(victim) || iscultist(victim) || victim.isloyal())
to_chat(src, "<span class='warning'>[victim]'s mind seems to be blocked by some unknown force!</span>")
@@ -92,7 +92,7 @@
playsound(user, 'sound/magic/Demon_consume.ogg', 50, 1)
for(var/obj/effect/proc_holder/spell/knownspell in user.mind.spell_list)
if(knownspell.type == /obj/effect/proc_holder/spell/bloodcrawl)
user <<"<span class='warning'>...and you don't feel any different.</span>"
to_chat(user, "<span class='warning'>...and you don't feel any different.</span>")
qdel(src)
return
user.visible_message("<span class='warning'>[user]'s eyes flare a deep crimson!</span>", \
+5 -8
View File
@@ -204,11 +204,13 @@
clonemind.transfer_to(H)
H.grab_ghost()
to_chat(H, "<span class='notice'><b>Consciousness slowly creeps over you as your body regenerates.</b><br><i>So this is what cloning feels like?</i></span>")
if(grab_ghost_when == CLONER_FRESH_CLONE)
H.grab_ghost()
to_chat(H, "<span class='notice'><b>Consciousness slowly creeps over you as your body regenerates.</b><br><i>So this is what cloning feels like?</i></span>")
if(grab_ghost_when == CLONER_MATURE_CLONE)
addtimer(CALLBACK(src, .proc/occupant_dreams), 100)
H.ghostize(TRUE) //Only does anything if they were still in their old body and not already a ghost
to_chat(H.get_ghost(TRUE), "<span class='notice'>Your body is beginning to regenerate in a cloning pod. You will become conscious when it is complete.</span>")
if(H)
H.faction |= factions
@@ -219,11 +221,6 @@
attempting = FALSE
return TRUE
/obj/machinery/clonepod/proc/occupant_dreams()
if(occupant)
to_chat(occupant, "<span class='revennotice'>While your body grows, you have the strangest dream, like you can see yourself from the outside.</span>")
occupant.ghostize(TRUE)
//Grow clones to maturity then kick them out. FREELOADERS
/obj/machinery/clonepod/process()
+1 -1
View File
@@ -108,7 +108,7 @@
if(!authenticated) //Check for emags
var/obj/item/weapon/card/emag/E = usr.get_active_held_item()
if(E && istype(E) && usr.Adjacent(src))
usr << "<span class='warning'>You bypass [src]'s access requirements using your emag.</span>"
to_chat(usr, "<span class='warning'>You bypass [src]'s access requirements using your emag.</span>")
authenticated = TRUE
log_activity("logged in") //Auth ID doesn't change, hinting that it was illicit
if(href_list["log_out"])
@@ -304,17 +304,17 @@
build_path = /obj/machinery/computer/gulag_teleporter_computer
/obj/item/weapon/circuitboard/computer/rdconsole
name = "RD Console (Computer Board)"
name = "R&D Console (Computer Board)"
build_path = /obj/machinery/computer/rdconsole/core
/obj/item/weapon/circuitboard/computer/rdconsole/attackby(obj/item/I, mob/user, params)
if(istype(I,/obj/item/weapon/screwdriver))
if(build_path == /obj/machinery/computer/rdconsole/core)
name = "RD Console - Robotics (Computer Board)"
name = "R&D Console - Robotics (Computer Board)"
build_path = /obj/machinery/computer/rdconsole/robotics
to_chat(user, "<span class='notice'>Access protocols successfully updated.</span>")
else
name = "RD Console (Computer Board)"
name = "R&D Console (Computer Board)"
build_path = /obj/machinery/computer/rdconsole/core
to_chat(user, "<span class='notice'>Defaulting access protocols.</span>")
else
+1 -1
View File
@@ -532,7 +532,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
else
SSjob.prioritized_jobs += j
prioritycount++
usr << "<span class='notice'>[j.title] has been successfully [priority ? "prioritized" : "unprioritized"]. Potential employees will notice your request.</span>"
to_chat(usr, "<span class='notice'>[j.title] has been successfully [priority ? "prioritized" : "unprioritized"]. Potential employees will notice your request.</span>")
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
if ("print")
@@ -19,12 +19,12 @@
/obj/machinery/doorButtons/proc/findObjsByTag()
return
/obj/machinery/doorButtons/Initialize(mapload)
if(mapload)
..()
return TRUE
else
findObjsByTag()
/obj/machinery/doorButtons/Initialize()
..()
return INITIALIZE_HINT_LATELOAD
/obj/machinery/doorButtons/LateInitialize()
findObjsByTag()
/obj/machinery/doorButtons/emag_act(mob/user)
if(!emagged)
+1 -1
View File
@@ -200,7 +200,7 @@
if(beaker.reagents && beaker.reagents.reagent_list.len)
to_chat(usr, "<span class='notice'>Attached is \a [beaker] with [beaker.reagents.total_volume] units of liquid.</span>")
else
to_chat(usr, "<span class='notice'>Attached is an empty [beaker].</span>")
to_chat(usr, "<span class='notice'>Attached is an empty [beaker.name].</span>")
else
to_chat(usr, "<span class='notice'>No chemicals are attached.</span>")
+10
View File
@@ -0,0 +1,10 @@
diff a/code/game/objects/items.dm b/code/game/objects/items.dm (rejected hunks)
@@ -102,7 +102,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s
/obj/item/Initialize()
if (!materials)
materials = list()
- ..()
+ . = ..()
for(var/path in actions_types)
new path(src)
actions_types = null
+2
View File
@@ -465,11 +465,13 @@
icon_state = "crayonblack"
paint_color = "#1C1C1C" //Not completely black because total black looks bad. So Mostly Black.
item_color = "black"
reagent_contents = list("nutriment" = 1, "blackcrayonpowder" = 1)
/obj/item/toy/crayon/white
icon_state = "crayonwhite"
paint_color = "#FFFFFF"
item_color = "white"
reagent_contents = list("nutriment" = 1, "whitecrayonpowder" = 1)
/obj/item/toy/crayon/mime
icon_state = "crayonmime"
@@ -87,7 +87,7 @@
var/mob/living/silicon/robot/R = user
if(shock)
user <<"<span class='notice'>You clear all active holograms, and reset your projector to normal.</span>"
to_chat(user, "<span class='notice'>You clear all active holograms, and reset your projector to normal.</span>")
holosign_type = /obj/structure/holosign/barrier/cyborg
creation_time = 5
if(signs.len)
@@ -96,7 +96,7 @@
shock = 0
return
else if(R.emagged&&!shock)
user <<"<span class='warning'>You clear all active holograms, and overload your energy projector!</span>"
to_chat(user, "<span class='warning'>You clear all active holograms, and overload your energy projector!</span>")
holosign_type = /obj/structure/holosign/barrier/cyborg/hacked
creation_time = 30
if(signs.len)
+2 -2
View File
@@ -60,9 +60,9 @@
/obj/item/weapon/melee/baton/examine(mob/user)
..()
if(bcell)
user <<"<span class='notice'>The baton is [round(bcell.percent())]% charged.</span>"
to_chat(user, "<span class='notice'>The baton is [round(bcell.percent())]% charged.</span>")
else
user <<"<span class='warning'>The baton does not have a power source installed.</span>"
to_chat(user, "<span class='warning'>The baton does not have a power source installed.</span>")
/obj/item/weapon/melee/baton/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/stock_parts/cell))
+1 -1
View File
@@ -37,7 +37,7 @@
..()
/obj/Initialize()
..()
. = ..()
if (!armor)
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
if(on_blueprints && isturf(loc))
+3 -3
View File
@@ -115,7 +115,7 @@
update_icon()
return
if(locked)
user <<"<span class='warning'> The [name] won't budge!</span>"
to_chat(user, "<span class='warning'>The [name] won't budge!</span>")
return
else
open = !open
@@ -131,7 +131,7 @@
/obj/structure/fireaxecabinet/attack_tk(mob/user)
if(locked)
user <<"<span class='warning'> The [name] won't budge!</span>"
to_chat(user, "<span class='warning'>The [name] won't budge!</span>")
return
else
open = !open
@@ -177,7 +177,7 @@
set src in oview(1)
if(locked)
usr <<"<span class='warning'> The [name] won't budge!</span>"
to_chat(usr, "<span class='warning'>The [name] won't budge!</span>")
return
else
open = !open
+4 -7
View File
@@ -14,18 +14,15 @@
/obj/structure/ladder/Initialize(mapload)
if(!initialized)
GLOB.ladders += src
..()
if(mapload)
return TRUE
update_link()
GLOB.ladders += src
..()
return INITIALIZE_HINT_LATELOAD
/obj/structure/ladder/Destroy()
GLOB.ladders -= src
. = ..()
/obj/structure/ladder/proc/update_link()
/obj/structure/ladder/LateInitialize()
for(var/obj/structure/ladder/L in GLOB.ladders)
if(L.id == id)
if(L.height == (height - 1))
+2
View File
@@ -42,6 +42,8 @@
if (opacity)
has_opaque_atom = TRUE
return INITIALIZE_HINT_NORMAL
/turf/open/space/attack_ghost(mob/dead/observer/user)
if(destination_z)
+1
View File
@@ -56,6 +56,7 @@
if (opacity)
has_opaque_atom = TRUE
return INITIALIZE_HINT_NORMAL
/turf/proc/Initalize_Atmos(times_fired)
CalculateAdjacentTurfs()