diff --git a/baystation12.dme b/baystation12.dme
index ce69add117c..bdbb2ffbcb1 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -1150,6 +1150,7 @@
#include "code\modules\mob\living\silicon\robot\life.dm"
#include "code\modules\mob\living\silicon\robot\login.dm"
#include "code\modules\mob\living\silicon\robot\robot.dm"
+#include "code\modules\mob\living\silicon\robot\robot_items.dm"
#include "code\modules\mob\living\silicon\robot\robot_modules.dm"
#include "code\modules\mob\living\silicon\robot\robot_movement.dm"
#include "code\modules\mob\living\silicon\robot\say.dm"
diff --git a/code/controllers/_DynamicAreaLighting_TG.dm b/code/controllers/_DynamicAreaLighting_TG.dm
index 2bc317aabbc..c8f52ef9365 100644
--- a/code/controllers/_DynamicAreaLighting_TG.dm
+++ b/code/controllers/_DynamicAreaLighting_TG.dm
@@ -294,6 +294,73 @@ area
//show the dark overlay so areas, not yet in a lighting subarea, won't be bright as day and look silly.
SetLightLevel(4)
+atom
+ var/light_on = 0 //Am I emitting light?
+ var/brightness_on = 0 //Luminosity when the above: light_on = 1
+
+ //Called when turning off or dropping a flashlight for ex.
+ //It checks the users slots for another source of light, and return the appropriate brightness. 0 if no other source is found
+ proc/search_light(mob/M, obj/item/W as obj)
+ var/list/slots
+ var/obj/item/I
+ var brightness = 0 //the new brightness to be returned
+
+ if (istype(M, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = M
+ slots = list (
+ "l_hand",
+ "r_hand",
+ "belt",
+ "head",
+ "l_pocket",
+ "r_pocket",
+ "s_store")
+
+ for (var/slot in slots)
+ switch(slot)
+ if("belt")
+ I = H.belt
+ if("head")
+ I = H.head
+ if("l_hand")
+ I = H.l_hand
+ if("r_hand")
+ I = H.r_hand
+ if("l_pocket")
+ I = H.l_store
+ if("r_pocket")
+ I = H.r_store
+ if("s_store")
+ I = H.s_store
+ if (I)
+ if ((I.light_on) && (I != W)) //an item emitting light other than itself
+ if (I.brightness_on > brightness)
+ brightness = I.brightness_on
+
+ else if (istype(M, /mob/living/carbon/monkey))
+ slots = list (
+ "l_hand",
+ "r_hand")
+
+ for (var/slot in slots)
+ switch(slot)
+ if("l_hand")
+ I = M.l_hand
+ if("r_hand")
+ I = M.r_hand
+ if (I)
+ if ((I.light_on) && (I != W)) //an item emitting light other than itself
+ if (I.brightness_on > brightness)
+ brightness = I.brightness_on
+
+ else
+ for (I in M.contents) //Justin Case
+ if (I)
+ if ((I.light_on) && (I != W)) //an item emitting light other than itself
+ if (I.brightness_on > brightness)
+ brightness = I.brightness_on
+
+ return brightness
#undef LIGHTING_MAX_LUMINOSITY
#undef LIGHTING_MAX_LUMINOSITY_MOB
diff --git a/code/datums/organs/organ_external.dm b/code/datums/organs/organ_external.dm
index d59c2a79315..c10c6c77ecd 100644
--- a/code/datums/organs/organ_external.dm
+++ b/code/datums/organs/organ_external.dm
@@ -356,7 +356,7 @@
H = new /obj/item/weapon/organ/head(owner.loc, owner)
if(ishuman(owner))
if(owner.gender == FEMALE)
- H.icon_state = "head_f_l"
+ H.icon_state = "head_f"
H.overlays += owner.generate_head_icon()
H:transfer_identity(owner)
H.pixel_x = -10
@@ -682,7 +682,7 @@ obj/item/weapon/organ/New(loc, mob/living/carbon/human/H)
obj/item/weapon/organ/head
name = "head"
- icon_state = "head_m_l"
+ icon_state = "head_m"
var/mob/living/carbon/brain/brainmob
var/brain_op_stage = 0
diff --git a/code/game/gamemodes/events/miniblob.dm b/code/game/gamemodes/events/miniblob.dm
index cbb32198363..93f3c2a7172 100644
--- a/code/game/gamemodes/events/miniblob.dm
+++ b/code/game/gamemodes/events/miniblob.dm
@@ -9,7 +9,7 @@
blobevent = 1
spawn(0)
dotheblobbaby()
- spawn(3000)
+ spawn(12000) // blob event can last up to 20 minutes
blobevent = 0
spawn(rand(1000, 2000)) //Delayed announcements to keep the crew on their toes.
command_alert("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert")
@@ -25,5 +25,5 @@
if(B.z != 1)
continue
B.Life()
- spawn(70)
- dotheblobbaby()
\ No newline at end of file
+ spawn(280) // advance 1 tile every 30 seconds
+ dotheblobbaby()
diff --git a/code/game/jobs/job/assistant.dm b/code/game/jobs/job/assistant.dm
index 5a68cf9e182..b5b6f039707 100644
--- a/code/game/jobs/job/assistant.dm
+++ b/code/game/jobs/job/assistant.dm
@@ -12,4 +12,8 @@
if(!H) return 0
H.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
+ if(H.backbag == 1)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
+ else
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1
diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm
index 274f5146b7b..1347cc2fd24 100644
--- a/code/game/jobs/job/civilian.dm
+++ b/code/game/jobs/job/civilian.dm
@@ -57,6 +57,10 @@
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/clothing/head/chefhat(H), slot_head)
H.equip_to_slot_or_del(new /obj/item/device/pda/chef(H), slot_belt)
+ if(H.backbag == 1)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
+ else
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1
@@ -80,6 +84,10 @@
H.equip_to_slot_or_del(new /obj/item/clothing/suit/apron(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/device/analyzer/plant_analyzer(H), slot_s_store)
H.equip_to_slot_or_del(new /obj/item/device/pda/botanist(H), slot_belt)
+ if(H.backbag == 1)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
+ else
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1
@@ -105,6 +113,10 @@
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses)
H.equip_to_slot_or_del(new /obj/item/weapon/clipboard(H), slot_l_hand)
+ if(H.backbag == 1)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
+ else
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1
@@ -127,6 +139,10 @@
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/cargo(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
+ if(H.backbag == 1)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
+ else
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1
@@ -251,6 +267,10 @@
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/janitor(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/janitor(H), slot_belt)
+ if(H.backbag == 1)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
+ else
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1
@@ -273,6 +293,10 @@
H.equip_to_slot_or_del(new /obj/item/device/pda/librarian(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/weapon/barcodescanner(H), slot_l_hand)
+ if(H.backbag == 1)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
+ else
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1
diff --git a/code/game/jobs/job/civilian_chaplain.dm b/code/game/jobs/job/civilian_chaplain.dm
index eca1cb35828..6ad83d2b238 100644
--- a/code/game/jobs/job/civilian_chaplain.dm
+++ b/code/game/jobs/job/civilian_chaplain.dm
@@ -18,6 +18,10 @@
H.equip_to_slot_or_del(new /obj/item/device/pda/chaplain(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chaplain(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
+ if(H.backbag == 1)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
+ else
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
spawn(0)
var/religion_name = "Christianity"
var/new_religion = copytext(sanitize(input(H, "You are the Chaplain. Would you like to change your religion? Default is Christianity, in SPACE.", "Name change", religion_name)),1,MAX_NAME_LEN)
diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm
index 900061d9639..8d57e15fcc1 100644
--- a/code/game/jobs/job/medical.dm
+++ b/code/game/jobs/job/medical.dm
@@ -99,6 +99,10 @@
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/chemist(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/labcoat/chemist(H), slot_wear_suit)
+ if(H.backbag == 1)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
+ else
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1
@@ -122,6 +126,10 @@
H.equip_to_slot_or_del(new /obj/item/device/pda/geneticist(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/labcoat/genetics(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store)
+ if(H.backbag == 1)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
+ else
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1
/*
diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm
index f1a202f1341..0a8a881f34b 100644
--- a/code/game/jobs/job/science.dm
+++ b/code/game/jobs/job/science.dm
@@ -18,6 +18,10 @@
H.equip_to_slot_or_del(new /obj/item/device/pda/heads/rd(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/labcoat(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/weapon/clipboard(H), slot_l_hand)
+ if(H.backbag == 1)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
+ else
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1
@@ -41,6 +45,8 @@
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/toxins(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/labcoat/science(H), slot_wear_suit)
-// H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(H), slot_wear_mask)
-// H.equip_to_slot_or_del(new /obj/item/weapon/tank/oxygen(H), slot_l_hand)
+ if(H.backbag == 1)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
+ else
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1
\ No newline at end of file
diff --git a/code/game/objects/items/candle.dm b/code/game/objects/items/candle.dm
index b47a2a30684..0ea57a12561 100644
--- a/code/game/objects/items/candle.dm
+++ b/code/game/objects/items/candle.dm
@@ -5,9 +5,11 @@
icon_state = "candle1"
item_state = "candle1"
w_class = 1
+ light_on = 0
+ brightness_on = 3 //luminosity when on
var/wax = 200
- var/lit = 0
+
proc
light(var/flavor_text = "\red [usr] lights the [name].")
@@ -19,7 +21,7 @@
else if(wax>80)
i = 2
else i = 3
- icon_state = "candle[i][lit ? "_lit" : ""]"
+ icon_state = "candle[i][light_on ? "_lit" : ""]"
attackby(obj/item/weapon/W as obj, mob/user as mob)
@@ -30,30 +32,30 @@
light("\red [user] casually lights the [name] with [W], what a badass.")
else if(istype(W, /obj/item/weapon/lighter))
var/obj/item/weapon/lighter/L = W
- if(L.lit)
+ if(L.light_on)
light()
else if(istype(W, /obj/item/weapon/match))
var/obj/item/weapon/match/M = W
- if(M.lit)
+ if(M.light_on)
light()
else if(istype(W, /obj/item/candle))
var/obj/item/candle/C = W
- if(C.lit)
+ if(C.light_on)
light()
light(var/flavor_text = "\red [usr] lights the [name].")
- if(!src.lit)
- src.lit = 1
+ if(!src.light_on)
+ src.light_on = 1
//src.damtype = "fire"
for(var/mob/O in viewers(usr, null))
O.show_message(flavor_text, 1)
- SetLuminosity(CANDLE_LUM)
+ SetLuminosity(brightness_on)
processing_objects.Add(src)
process()
- if(!lit)
+ if(!light_on)
return
wax--
if(!wax)
@@ -68,20 +70,29 @@
attack_self(mob/user as mob)
- if(lit)
- lit = 0
+ if(light_on)
+ light_on = 0
update_icon()
SetLuminosity(0)
- user.SetLuminosity(user.luminosity - CANDLE_LUM)
+ user.SetLuminosity(search_light(user, src))
pickup(mob/user)
- if(lit)
+ if(light_on)
+ if (user.luminosity < brightness_on)
+ user.SetLuminosity(brightness_on)
SetLuminosity(0)
- user.SetLuminosity(user.luminosity + CANDLE_LUM)
dropped(mob/user)
- if(lit)
- user.SetLuminosity(user.luminosity - CANDLE_LUM)
- SetLuminosity(CANDLE_LUM)
+ if(light_on)
+ if ((layer <= 3) || (loc != user.loc))
+ user.SetLuminosity(search_light(user, src))
+ SetLuminosity(brightness_on)
+
+
+ equipped(mob/user, slot)
+ if(light_on)
+ if (user.luminosity < brightness_on)
+ user.SetLuminosity(brightness_on)
+ SetLuminosity(0)
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index 1207d01fad4..f0edf678650 100755
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -13,6 +13,8 @@ var/global/list/obj/item/device/pda/PDAs = list()
w_class = 1.0
flags = FPRINT | TABLEPASS
slot_flags = SLOT_ID | SLOT_BELT
+ light_on = 0 //Is the flashlight function on?
+ brightness_on = 4 //Luminosity for the flashlight function
//Main variables
var/owner = null
@@ -22,8 +24,6 @@ var/global/list/obj/item/device/pda/PDAs = list()
//Secondary variables
var/scanmode = 0 //1 is medical scanner, 2 is forensics, 3 is reagent scanner.
- var/fon = 0 //Is the flashlight function on?
- var/f_lum = 4 //Luminosity for the flashlight function
var/silent = 0 //To beep or not to beep, that is the question
var/toff = 0 //If 1, messenger disabled
var/tnote = null //Current Texts
@@ -192,14 +192,22 @@ var/global/list/obj/item/device/pda/PDAs = list()
* The Actual PDA
*/
/obj/item/device/pda/pickup(mob/user)
- if(fon)
+ if(light_on)
+ if(user.luminosity < brightness_on)
+ user.SetLuminosity(brightness_on)
SetLuminosity(0)
- user.SetLuminosity(user.luminosity + f_lum)
/obj/item/device/pda/dropped(mob/user)
- if(fon)
- user.SetLuminosity(user.luminosity - f_lum)
- SetLuminosity(f_lum)
+ if(light_on)
+ if ((layer <= 3) || (loc != user.loc))
+ user.SetLuminosity(search_light(user, src))
+ SetLuminosity(brightness_on)
+
+/obj/item/device/pda/equipped(mob/user, slot)
+ if(light_on)
+ if(user.luminosity < brightness_on)
+ user.SetLuminosity(brightness_on)
+ SetLuminosity(0)
/obj/item/device/pda/New()
..()
@@ -320,7 +328,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
if (cartridge.access_remote_door)
dat += "
Toggle Remote Door"
dat += "
Atmospheric Scan"
- dat += "
[fon ? "Disable" : "Enable"] Flashlight"
+ dat += "
[light_on ? "Disable" : "Enable"] Flashlight"
if (pai)
if(pai.loc != src)
pai = null
@@ -495,14 +503,18 @@ var/global/list/obj/item/device/pda/PDAs = list()
//MAIN FUNCTIONS===================================
if("Light")
- if(fon)
- fon = 0
- if(src in U.contents) U.SetLuminosity(U.luminosity - f_lum)
- else SetLuminosity(0)
+ if(light_on)
+ light_on = 0
+ if(src in U.contents)
+ U.SetLuminosity(search_light(U, src))
+ else
+ SetLuminosity(0)
else
- fon = 1
- if(src in U.contents) U.SetLuminosity(U.luminosity + f_lum)
- else SetLuminosity(f_lum)
+ light_on = 1
+ if((src in U.contents) && (U.luminosity < brightness_on))
+ U.SetLuminosity(brightness_on)
+ else
+ SetLuminosity(brightness_on)
if("Medical Scan")
if(scanmode == 1)
scanmode = 0
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index 40c8fcdc89f..166b534bb72 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -10,12 +10,13 @@
m_amt = 50
g_amt = 20
icon_action_button = "action_flashlight"
- var/on = 0
- var/brightness_on = 4 //luminosity when on
+ light_on = 0
+ brightness_on = 4 //luminosity when on
+ var brightness = 0
/obj/item/device/flashlight/initialize()
..()
- if(on)
+ if(light_on)
icon_state = "[initial(icon_state)]-on"
SetLuminosity(brightness_on)
else
@@ -23,16 +24,16 @@
SetLuminosity(0)
/obj/item/device/flashlight/proc/update_brightness(var/mob/user = null)
- if(on)
+ if(light_on)
icon_state = "[initial(icon_state)]-on"
- if(loc == user)
- user.SetLuminosity(user.luminosity + brightness_on)
+ if((loc == user) && (user.luminosity < brightness_on))
+ user.SetLuminosity(brightness_on)
else if(isturf(loc))
SetLuminosity(brightness_on)
else
icon_state = initial(icon_state)
if(loc == user)
- user.SetLuminosity(user.luminosity - brightness_on)
+ user.SetLuminosity(search_light(user, src))
else if(isturf(loc))
SetLuminosity(0)
@@ -40,14 +41,14 @@
if(!isturf(user.loc))
user << "You cannot turn the light on while in this [user.loc]." //To prevent some lighting anomalities.
return
- on = !on
+ light_on = !light_on
update_brightness(user)
return
/obj/item/device/flashlight/attack(mob/living/M as mob, mob/living/user as mob)
add_fingerprint(user)
- if(on && user.zone_sel.selecting == "eyes")
+ if(light_on && user.zone_sel.selecting == "eyes")
if(((CLUMSY in user.mutations) || user.getBrainLoss() >= 60) && prob(50)) //too dumb to use flashlight properly
return ..() //just hit them in the head
@@ -88,15 +89,24 @@
/obj/item/device/flashlight/pickup(mob/user)
- if(on)
- user.SetLuminosity(user.luminosity + brightness_on)
+ if(light_on)
+ if (user.luminosity < brightness_on)
+ user.SetLuminosity(brightness_on)
SetLuminosity(0)
/obj/item/device/flashlight/dropped(mob/user)
- if(on)
- user.SetLuminosity(user.luminosity - brightness_on)
- SetLuminosity(brightness_on)
+ if(light_on)
+ if ((layer <= 3) || (loc != user.loc))
+ user.SetLuminosity(search_light(user, src))
+ SetLuminosity(brightness_on)
+
+
+/obj/item/device/flashlight/equipped(mob/user, slot)
+ if(light_on)
+ if (user.luminosity < brightness_on)
+ user.SetLuminosity(brightness_on)
+ SetLuminosity(0)
/obj/item/device/flashlight/pen
@@ -119,7 +129,7 @@
flags = FPRINT | TABLEPASS | CONDUCT
m_amt = 0
g_amt = 0
- on = 1
+ light_on = 1
// green-shaded desk lamp
@@ -159,14 +169,14 @@
var/turf/pos = get_turf(src)
pos.hotspot_expose(produce_heat, 5)
fuel = max(fuel - 1, 0)
- if(!fuel || !on)
+ if(!fuel || !light_on)
turn_off()
if(!fuel)
src.icon_state = "[initial(icon_state)]-empty"
processing_objects -= src
/obj/item/device/flashlight/flare/proc/turn_off()
- on = 0
+ light_on = 0
src.force = initial(src.force)
src.damtype = initial(src.damtype)
if(ismob(loc))
@@ -182,12 +192,12 @@
if(!fuel)
user << "It's out of fuel."
return
- if(!on)
+ if(!light_on)
user.visible_message("[user] activates the flare.", "You pull the cord on the flare, activating it!")
else
return
// All good, turn it on.
- on = 1
+ light_on = 1
update_brightness(user)
src.force = on_damage
src.damtype = "fire"
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index 5df2b005bc6..63992bde103 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -23,70 +23,34 @@
if (istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
- var/datum/organ/external/affecting = H.get_organ("chest")
-
+ var/datum/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
if(affecting.status & ORGAN_ROBOT)
user << "\red This isn't useful at all on a robotic limb.."
return 1
- if(istype(user, /mob/living/carbon/human))
- var/mob/living/carbon/human/user2 = user
- affecting = H.get_organ(check_zone(user2.zone_sel.selecting))
- else
- if(!istype(affecting, /datum/organ/external) || affecting:burn_dam <= 0)
- affecting = H.get_organ("head")
+ if(src.heal_brute)
+ if(!affecting.bandage())
+ user << "\red The wounds on [M]'s [affecting.display_name] have already been bandaged."
+ return 1
+ else
+ user.visible_message( "\blue [user] bandages wounds on [M]'s [affecting.display_name].", \
+ "\blue You bandage wounds on [M]'s [affecting.display_name]." )
- // If we're targetting arms or legs, also heal the respective hand/foot
- if(affecting.name in list("l_arm","r_arm","l_leg","r_leg"))
- var/datum/organ/external/child
- if(affecting.name == "l_arm")
- child = H.get_organ("l_hand")
- else if(affecting.name == "r_arm")
- child = H.get_organ("r_hand")
- else if(affecting.name == "r_leg")
- child = H.get_organ("r_foot")
- else if(affecting.name == "l_leg")
- child = H.get_organ("l_foot")
-
- if(src.heal_brute)
- if(!affecting.bandage() && !child.bandage())
- user << "\red The wounds on this limb have already been bandaged."
- return 1
- else if(src.heal_burn)
- if(!affecting.salve() && !child.salve())
- user << "\red The wounds on this limb have already been salved."
- return 1
- else
- if(src.heal_brute)
- if(!affecting.bandage())
- user << "\red The wounds on this limb have already been bandaged."
- return 1
- else if(src.heal_burn)
- if(!affecting.salve())
- user << "\red The wounds on this limb have already been salved."
- return 1
+ else if(src.heal_burn)
+ if(!affecting.salve())
+ user << "\red The wounds on [M]'s [affecting.display_name] have already been salved."
+ return 1
+ else
+ user.visible_message( "\blue [user] salves wounds on [M]'s [affecting.display_name].", \
+ "\blue You salve wounds on [M]'s [affecting.display_name]." )
H.UpdateDamageIcon()
- M.updatehealth()
else
M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2))
+ user.visible_message( \
+ "\blue [M] has been applied with [src] by [user].", \
+ "\blue You apply \the [src] to [M]." \
+ )
use(1)
-
- if (user)
- if (M != user)
- user.visible_message( \
- "\blue [M] has been applied with [src] by [user].", \
- "\blue You apply \the [src] to [M]." \
- )
- else
- var/t_himself = "itself"
- if (user.gender == MALE)
- t_himself = "himself"
- else if (user.gender == FEMALE)
- t_himself = "herself"
-
- user.visible_message( \
- "\blue [M] applied [src] on [t_himself].", \
- "\blue You apply \the [src] on yourself." \
- )
+ M.updatehealth()
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index 9499b40f617..5d5b6d6ea48 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -85,12 +85,12 @@ ZIPPO
else if(istype(W, /obj/item/weapon/lighter/zippo))
var/obj/item/weapon/lighter/zippo/Z = W
- if(Z.lit)
+ if(Z.light_on)
light("With a single flick of their wrist, [user] smoothly lights their [name] with their [W]. Damn they're cool.")
else if(istype(W, /obj/item/weapon/lighter))
var/obj/item/weapon/lighter/L = W
- if(L.lit)
+ if(L.light_on)
light("After some fiddling, [user] manages to light their [name] with [W].")
else if(istype(W, /obj/item/weapon/match))
@@ -375,7 +375,8 @@ ZIPPO
flags = TABLEPASS | CONDUCT
slot_flags = SLOT_BELT
attack_verb = list("burnt", "singed")
- var/lit = 0
+ light_on = 0
+ brightness_on = 2 //luminosity when on
/obj/item/weapon/lighter/zippo
name = "Zippo lighter"
@@ -394,8 +395,8 @@ ZIPPO
/obj/item/weapon/lighter/attack_self(mob/living/user)
if(user.r_hand == src || user.l_hand == src)
- if(!lit)
- lit = 1
+ if(!light_on)
+ light_on = 1
icon_state = icon_on
item_state = icon_on
if(istype(src, /obj/item/weapon/lighter/zippo) )
@@ -411,10 +412,11 @@ ZIPPO
user.apply_damage(2,BURN,"r_hand")
user.visible_message("After a few attempts, [user] manages to light the [src], they however burn their finger in the process.")
- user.SetLuminosity(user.luminosity + 2)
+ if (user.luminosity < brightness_on)
+ user.SetLuminosity(brightness_on)
processing_objects.Add(src)
else
- lit = 0
+ light_on = 0
icon_state = icon_off
item_state = icon_off
if(istype(src, /obj/item/weapon/lighter/zippo) )
@@ -422,7 +424,7 @@ ZIPPO
else
user.visible_message("[user] quietly shuts off the [src].")
- user.SetLuminosity(user.luminosity - 2)
+ user.SetLuminosity(search_light(user, src))
processing_objects.Remove(src)
else
return ..()
@@ -433,7 +435,7 @@ ZIPPO
if(!istype(M, /mob))
return
- if(istype(M.wear_mask, /obj/item/clothing/mask/cigarette) && user.zone_sel.selecting == "mouth" && lit)
+ if(istype(M.wear_mask, /obj/item/clothing/mask/cigarette) && user.zone_sel.selecting == "mouth" && light_on)
var/obj/item/clothing/mask/cigarette/cig = M.wear_mask
if(M == user)
cig.attackby(src, user)
@@ -453,14 +455,24 @@ ZIPPO
/obj/item/weapon/lighter/pickup(mob/user)
- if(lit)
+ if(light_on)
+ if (user.luminosity < brightness_on)
+ user.SetLuminosity(brightness_on)
SetLuminosity(0)
- user.SetLuminosity(user.luminosity+2)
return
/obj/item/weapon/lighter/dropped(mob/user)
- if(lit)
- user.SetLuminosity(user.luminosity-2)
- SetLuminosity(2)
+ if(light_on)
+ if ((layer <= 3) || (loc != user.loc))
+ user.SetLuminosity(search_light(user, src))
+ SetLuminosity(brightness_on)
+ return
+
+
+/obj/item/weapon/lighter/equipped(mob/user, slot)
+ if(light_on)
+ if (user.luminosity < brightness_on)
+ user.SetLuminosity(brightness_on)
+ SetLuminosity(0)
return
diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm
index 1cbca540bd1..3d785619255 100644
--- a/code/game/objects/items/weapons/tanks/tank_types.dm
+++ b/code/game/objects/items/weapons/tanks/tank_types.dm
@@ -134,7 +134,7 @@
w_class = 2.0
force = 4.0
distribute_pressure = ONE_ATMOSPHERE*O2STANDARD
- volume = 3 //Tiny. Real life equivalents only have 21 breaths of oxygen in them. They're EMERGENCY tanks anyway -errorage (dangercon 2011)
+ volume = 2 //Tiny. Real life equivalents only have 21 breaths of oxygen in them. They're EMERGENCY tanks anyway -errorage (dangercon 2011)
New()
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 35c600dcd53..7a14927c057 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -173,26 +173,54 @@ var/global/floorIsLava = 0
/datum/player_info/var/content // text content of the information
/datum/player_info/var/timestamp // Because this is bloody annoying
+#define PLAYER_NOTES_ENTRIES_PER_PAGE 50
/datum/admins/proc/PlayerNotes()
set category = "Admin"
set name = "Player Notes"
- var/dat = "Player notes
"
if (!istype(src,/datum/admins))
src = usr.client.holder
if (!istype(src,/datum/admins))
usr << "Error: you are not an admin!"
return
+ PlayerNotesPage(1)
+/datum/admins/proc/PlayerNotesPage(page)
+ var/dat = "Player notes
"
var/savefile/S=new("data/player_notes.sav")
var/list/note_keys
S >> note_keys
if(!note_keys)
dat += "No notes found."
else
+ dat += ""
sortList(note_keys)
- for(var/t in note_keys)
+
+ // Display the notes on the current page
+ var/number_pages = note_keys.len / PLAYER_NOTES_ENTRIES_PER_PAGE
+ // Emulate ceil(why does BYOND not have ceil)
+ if(number_pages != round(number_pages))
+ number_pages = round(number_pages) + 1
+ var/page_index = page - 1
+ if(page_index < 0 || page_index >= number_pages)
+ return
+
+ var/lower_bound = page_index * PLAYER_NOTES_ENTRIES_PER_PAGE + 1
+ var/upper_bound = (page_index + 1) * PLAYER_NOTES_ENTRIES_PER_PAGE
+ upper_bound = min(upper_bound, note_keys.len)
+ for(var/index = lower_bound, index <= upper_bound, index++)
+ var/t = note_keys[index]
dat += "| [t] |
"
- dat += "
"
+
+ dat += "
"
+
+ // Display a footer to select different pages
+ for(var/index = 1, index <= number_pages, index++)
+ if(index == page)
+ dat += ""
+ dat += "[index] "
+ if(index == page)
+ dat += ""
+
usr << browse(dat, "window=player_notes;size=400x400")
@@ -1123,4 +1151,4 @@ proc/move_alien_ship()
alien_ship_location = 0
else
alien_ship_location = 1
- return
\ No newline at end of file
+ return
diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm
index 96bc9b6e20c..9f9e9abd3fa 100644
--- a/code/modules/admin/holder2.dm
+++ b/code/modules/admin/holder2.dm
@@ -2706,4 +2706,6 @@ var/list/admin_datums = list()
switch(href_list["notes"])
if("show")
show_player_info(ckey)
+ if("list")
+ PlayerNotesPage(href_list["index"])
return
diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm
index dfca62aa013..f35ddfb30c9 100644
--- a/code/modules/clothing/head/hardhat.dm
+++ b/code/modules/clothing/head/hardhat.dm
@@ -4,8 +4,8 @@
icon_state = "hardhat0_yellow"
flags = FPRINT | TABLEPASS
item_state = "hardhat0_yellow"
- var/brightness_on = 4 //luminosity when on
- var/on = 0
+ brightness_on = 4 //luminosity when on
+ light_on = 0
color = "yellow" //Determines used sprites: hardhat[on]_[color] and hardhat[on]_[color]2 (lying down sprite)
armor = list(melee = 30, bullet = 5, laser = 20,energy = 10, bomb = 20, bio = 10, rad = 20)
flags_inv = 0
@@ -15,24 +15,35 @@
if(!isturf(user.loc))
user << "You cannot turn the light on while in this [user.loc]" //To prevent some lighting anomalities.
return
- on = !on
- icon_state = "hardhat[on]_[color]"
- item_state = "hardhat[on]_[color]"
+ light_on = !light_on
+ icon_state = "hardhat[light_on]_[color]"
+ item_state = "hardhat[light_on]_[color]"
- if(on) user.SetLuminosity(user.luminosity + brightness_on)
- else user.SetLuminosity(user.luminosity - brightness_on)
+ if((light_on) && (user.luminosity < brightness_on))
+ user.SetLuminosity(brightness_on)
+ else
+ user.SetLuminosity(search_light(user, src))
pickup(mob/user)
- if(on)
- user.SetLuminosity(user.luminosity + brightness_on)
+ if(light_on)
+ if (user.luminosity < brightness_on)
+ user.SetLuminosity(brightness_on)
// user.UpdateLuminosity() //TODO: Carn
SetLuminosity(0)
dropped(mob/user)
- if(on)
- user.SetLuminosity(user.luminosity - brightness_on)
-// user.UpdateLuminosity()
- SetLuminosity(brightness_on)
+ if(light_on)
+ if ((layer <= 3) || (loc != user.loc))
+ user.SetLuminosity(search_light(user, src))
+ SetLuminosity(brightness_on)
+ // user.UpdateLuminosity()
+
+ equipped(mob/user, slot)
+ if(light_on)
+ if (user.luminosity < brightness_on)
+ user.SetLuminosity(brightness_on)
+// user.UpdateLuminosity() //TODO: Carn
+ SetLuminosity(0)
/obj/item/clothing/head/hardhat/orange
diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm
index 96d6ad87059..5a3a1a18338 100644
--- a/code/modules/clothing/head/misc_special.dm
+++ b/code/modules/clothing/head/misc_special.dm
@@ -122,32 +122,42 @@
color = "pumpkin"
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
- var/brightness_on = 2 //luminosity when on
- var/on = 0
+ brightness_on = 2 //luminosity when on
+ light_on = 0
attack_self(mob/user)
if(!isturf(user.loc))
user << "You cannot turn the light on while in this [user.loc]" //To prevent some lighting anomalities.
return
- on = !on
- icon_state = "hardhat[on]_[color]"
- item_state = "hardhat[on]_[color]"
+ light_on = !light_on
+ icon_state = "hardhat[light_on]_[color]"
+ item_state = "hardhat[light_on]_[color]"
- if(on) user.SetLuminosity(user.luminosity + brightness_on)
- else user.SetLuminosity(user.luminosity - brightness_on)
+ if((light_on) && (user.luminosity < brightness_on))
+ user.SetLuminosity(brightness_on)
+ else
+ user.SetLuminosity(search_light(user, src))
pickup(mob/user)
- if(on)
- user.SetLuminosity(user.luminosity + brightness_on)
-// user.UpdateLuminosity()
+ if(light_on)
+ if (user.luminosity < brightness_on)
+ user.SetLuminosity(brightness_on)
+// user.UpdateLuminosity() //TODO: Carn
SetLuminosity(0)
dropped(mob/user)
- if(on)
- user.SetLuminosity(user.luminosity - brightness_on)
-// user.UpdateLuminosity()
- SetLuminosity(brightness_on)
+ if(light_on)
+ if ((layer <= 3) || (loc != user.loc))
+ user.SetLuminosity(search_light(user, src))
+ SetLuminosity(brightness_on)
+ // user.UpdateLuminosity()
+ equipped(mob/user, slot)
+ if(light_on)
+ if (user.luminosity < brightness_on)
+ user.SetLuminosity(brightness_on)
+// user.UpdateLuminosity() //TODO: Carn
+ SetLuminosity(0)
/*
* Kitty ears
*/
diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm
index 9429e41cb31..ff07fc01983 100644
--- a/code/modules/clothing/spacesuits/rig.dm
+++ b/code/modules/clothing/spacesuits/rig.dm
@@ -6,8 +6,8 @@
item_state = "eng_helm"
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 100)
allowed = list(/obj/item/device/flashlight)
- var/brightness_on = 4 //luminosity when on
- var/on = 0
+ brightness_on = 4 //luminosity when on
+ light_on = 0
color = "engineering" //Determines used sprites: rig[on]-[color] and rig[on]-[color]2 (lying down sprite)
icon_action_button = "action_hardhat"
heat_protection = HEAD
@@ -17,24 +17,35 @@
if(!isturf(user.loc))
user << "You cannot turn the light on while in this [user.loc]" //To prevent some lighting anomalities.
return
- on = !on
- icon_state = "rig[on]-[color]"
+ light_on = !light_on
+ icon_state = "rig[light_on]-[color]"
// item_state = "rig[on]-[color]"
- if(on) user.SetLuminosity(user.luminosity + brightness_on)
- else user.SetLuminosity(user.luminosity - brightness_on)
+ if((light_on) && (user.luminosity < brightness_on))
+ user.SetLuminosity(brightness_on)
+ else
+ user.SetLuminosity(search_light(user, src))
pickup(mob/user)
- if(on)
- user.SetLuminosity(user.luminosity + brightness_on)
-// user.UpdateLuminosity()
+ if(light_on)
+ if (user.luminosity < brightness_on)
+ user.SetLuminosity(brightness_on)
+// user.UpdateLuminosity() //TODO: Carn
SetLuminosity(0)
dropped(mob/user)
- if(on)
- user.SetLuminosity(user.luminosity - brightness_on)
-// user.UpdateLuminosity()
- SetLuminosity(brightness_on)
+ if(light_on)
+ if ((layer <= 3) || (loc != user.loc))
+ user.SetLuminosity(search_light(user, src))
+ SetLuminosity(brightness_on)
+ // user.UpdateLuminosity()
+
+ equipped(mob/user, slot)
+ if(light_on)
+ if (user.luminosity < brightness_on)
+ user.SetLuminosity(brightness_on)
+// user.UpdateLuminosity() //TODO: Carn
+ SetLuminosity(0)
/obj/item/clothing/suit/space/rig
name = "engineering hardsuit"
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 1b5c560a3f0..6a189778d42 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -421,19 +421,19 @@
if(!item) return //Grab processing has a chance of returning null
+ item.layer = initial(item.layer)
u_equip(item)
update_icons()
- if(src.client)
- src.client.screen -= item
+ //if(src.client)
+ //src.client.screen -= item
- item.loc = src.loc
+ //item.loc = src.loc
- if(istype(item, /obj/item))
- item:dropped(src) // let it know it's been dropped
+ //if(istype(item, /obj/item))
+ //item:dropped(src) // let it know it's been dropped
//actually throw it!
if (item)
- item.layer = initial(item.layer)
src.visible_message("\red [src] has thrown [item].")
if(!src.lastarea)
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index 90500d0d924..fe14579d1e6 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -159,9 +159,8 @@
client.screen -= W
W.loc = loc
W.dropped(src)
- if(W)
- W.layer = initial(W.layer)
-
+ //if(W)
+ //W.layer = initial(W.layer)
update_action_buttons()
return 1
@@ -592,7 +591,15 @@ It can still be worn/put on as normal.
target.internals.icon_state = "internal1"
if(slot_to_process)
if(strip_item) //Stripping an item from the mob
- target.u_equip(strip_item)
+ var/obj/item/W = strip_item
+ target.u_equip(W)
+ if (target.client)
+ target.client.screen -= W
+ if (W)
+ W.loc = target.loc
+ W.layer = initial(W.layer)
+ W.dropped(target)
+ W.add_fingerprint(source)
if(slot_to_process == slot_l_store) //pockets! Needs to process the other one too. Snowflake code, wooo! It's not like anyone will rewrite this anytime soon. If I'm wrong then... CONGRATULATIONS! ;)
if(target.r_store)
target.u_equip(target.r_store) //At this stage l_store is already processed by the code above, we only need to process r_store.
@@ -601,6 +608,7 @@ It can still be worn/put on as normal.
if(item.mob_can_equip(target, slot_to_process, 0))
source.u_equip(item)
target.equip_to_slot_if_possible(item, slot_to_process, 0, 1, 1)
+ item.dropped(source)
source.update_icons()
target.update_icons()
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 0760863943f..0dbd1dd272c 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -140,7 +140,7 @@
if(D.data["donor"] == src)
B = D
break
- var/datum/reagent/nutriment/F = locate() in vessel.reagent_list
+ var/datum/reagent/nutriment/F = locate() in reagents.reagent_list
if(F != null)
if(F.volume >= 1)
// nutriment speeds it up quite a bit
diff --git a/code/modules/mob/living/carbon/monkey/inventory.dm b/code/modules/mob/living/carbon/monkey/inventory.dm
index b1060ad9a96..e9f57611620 100644
--- a/code/modules/mob/living/carbon/monkey/inventory.dm
+++ b/code/modules/mob/living/carbon/monkey/inventory.dm
@@ -102,8 +102,8 @@
target.client.screen -= W
if (W)
W.loc = target.loc
- W.dropped(target)
W.layer = initial(W.layer)
+ W.dropped(target)
W.add_fingerprint(source)
else
if (istype(item, /obj/item))
@@ -112,6 +112,8 @@
item.layer = 20
target.l_hand = item
item.loc = target
+ item.dropped(source)
+ item.equipped(target,target.l_hand)
if("r_hand")
if (target.r_hand)
var/obj/item/W = target.r_hand
@@ -120,8 +122,8 @@
target.client.screen -= W
if (W)
W.loc = target.loc
- W.dropped(target)
W.layer = initial(W.layer)
+ W.dropped(target)
W.add_fingerprint(source)
else
if (istype(item, /obj/item))
@@ -130,6 +132,8 @@
item.layer = 20
target.r_hand = item
item.loc = target
+ item.dropped(source)
+ item.equipped(target,target.r_hand)
if("back")
if (target.back)
var/obj/item/W = target.back
diff --git a/code/modules/mob/living/silicon/robot/robot_items.dm b/code/modules/mob/living/silicon/robot/robot_items.dm
new file mode 100644
index 00000000000..4b66af1f7d5
--- /dev/null
+++ b/code/modules/mob/living/silicon/robot/robot_items.dm
@@ -0,0 +1,122 @@
+// A special tray for the service droid. Allow droid to pick up and drop items as if they were using the tray normally
+// Click on table to unload, click on item to load. Otherwise works identically to a tray.
+// Unlike the base item "tray", robotrays ONLY pick up food, drinks and condiments.
+
+/obj/item/weapon/tray/robotray
+ name = "RoboTray"
+ desc = "An autoloading tray specialized for carrying refreshments."
+
+/obj/item/weapon/tray/robotray/afterattack(atom/target, mob/user as mob)
+ if ( !target )
+ return
+ // pick up items, mostly copied from base tray pickup proc
+ // see code\game\objects\items\weapons\kitchen.dm line 241
+ if ( istype(target,/obj/item))
+ if ( !isturf(target.loc) ) // Don't load up stuff if it's inside a container or mob!
+ return
+ var turf/pickup = target.loc
+
+ var addedSomething = 0
+
+ for(var/obj/item/weapon/reagent_containers/food/I in pickup)
+
+
+ if( I != src && !I.anchored && !istype(I, /obj/item/clothing/under) && !istype(I, /obj/item/clothing/suit) && !istype(I, /obj/item/projectile) )
+ var/add = 0
+ if(I.w_class == 1.0)
+ add = 1
+ else if(I.w_class == 2.0)
+ add = 3
+ else
+ add = 5
+ if(calc_carry() + add >= max_carry)
+ break
+
+ I.loc = src
+ carrying.Add(I)
+ overlays += image("icon" = I.icon, "icon_state" = I.icon_state, "layer" = 30 + I.layer)
+ addedSomething = 1
+ if ( addedSomething )
+ user.visible_message("\blue [user] load some items onto their service tray.")
+
+ return
+
+ // Unloads the tray, copied from base item's proc dropped() and altered
+ // see code\game\objects\items\weapons\kitchen.dm line 263
+
+ if ( isturf(target) || istype(target,/obj/structure/table) )
+ var foundtable = istype(target,/obj/structure/table/)
+ if ( !foundtable ) //it must be a turf!
+ for(var/obj/structure/table/T in target)
+ foundtable = 1
+ break
+
+ var turf/dropspot
+ if ( !foundtable ) // don't unload things onto walls or other silly places.
+ dropspot = user.loc
+ else if ( isturf(target) ) // they clicked on a turf with a table in it
+ dropspot = target
+ else // they clicked on a table
+ dropspot = target.loc
+
+
+ overlays = null
+
+ var droppedSomething = 0
+
+ for(var/obj/item/I in carrying)
+ I.loc = dropspot
+ carrying.Remove(I)
+ droppedSomething = 1
+ if(!foundtable && isturf(dropspot))
+ // if no table, presume that the person just shittily dropped the tray on the ground and made a mess everywhere!
+ spawn()
+ for(var/i = 1, i <= rand(1,2), i++)
+ if(I)
+ step(I, pick(NORTH,SOUTH,EAST,WEST))
+ sleep(rand(2,4))
+ if ( droppedSomething )
+ if ( foundtable )
+ user.visible_message("\blue [user] unloads their service tray.")
+ else
+ user.visible_message("\blue [user] drops all the items on their tray.")
+
+ return ..()
+
+
+
+
+// A special pen for service droids. Can be toggled to switch between normal writting mode, and paper rename mode
+// Allows service droids to rename paper items.
+
+/obj/item/weapon/pen/robopen
+ desc = "A black ink printing attachment with a paper naming mode."
+ name = "Printing Pen"
+ var/mode = 1
+
+/obj/item/weapon/pen/robopen/attack_self(mob/user as mob)
+ playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
+ if (mode == 1)
+ mode = 2
+ user << "Changed printing mode to 'Rename Paper'"
+ return
+ if (mode == 2)
+ mode = 1
+ user << "Changed printing mode to 'Write Paper'"
+
+// Copied over from paper's rename verb
+// see code\modules\paperwork\paper.dm line 62
+
+/obj/item/weapon/pen/robopen/proc/RenamePaper(mob/user as mob,obj/paper as obj)
+ if ( !user || !paper )
+ return
+ var/n_name = input(user, "What would you like to label the paper?", "Paper Labelling", null) as text
+ if ( !user || !paper )
+ return
+
+ n_name = copytext(n_name, 1, 32)
+ if(( get_dist(user,paper) <= 1 && user.stat == 0))
+ paper.name = "paper[(n_name ? text("- '[n_name]'") : null)]"
+ add_fingerprint(user)
+ return
+
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 2817ab49579..36904df4999 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -170,7 +170,7 @@
..()
src.modules += new /obj/item/weapon/reagent_containers/food/drinks/beer(src)
src.modules += new /obj/item/weapon/reagent_containers/food/condiment/enzyme(src)
- src.modules += new /obj/item/weapon/pen(src)
+ src.modules += new /obj/item/weapon/pen/robopen(src)
var/obj/item/weapon/rsf/M = new /obj/item/weapon/rsf(src)
M.matter = 30
@@ -179,10 +179,10 @@
src.modules += new /obj/item/weapon/reagent_containers/robodropper(src)
var/obj/item/weapon/lighter/zippo/L = new /obj/item/weapon/lighter/zippo(src)
- L.lit = 1
+ L.light_on = 1
src.modules += L
- src.modules += new /obj/item/weapon/tray(src)
+ src.modules += new /obj/item/weapon/tray/robotray(src)
src.modules += new /obj/item/weapon/reagent_containers/food/drinks/shaker(src)
src.emag = new /obj/item/weapon/reagent_containers/food/drinks/beer(src)
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index c007425c9b8..ccaf59f8d29 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -264,7 +264,10 @@
clown = 1
if(istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon))
- user << browse("[name][info_links][stamps]", "window=[name]")
+ if ( istype(P, /obj/item/weapon/pen/robopen) && P:mode == 2 )
+ P:RenamePaper(user,src)
+ else
+ user << browse("[name][info_links][stamps]", "window=[name]")
//openhelp(user)
return
else if(istype(P, /obj/item/weapon/stamp))
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 067ef207acd..ab930dcfe56 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -87,19 +87,19 @@
visible_message("\red [A.name] is hit by the [src.name] in the [def_zone]!")//X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter
if(istype(firer, /mob))
- M.attack_log += "\[[time_stamp()]\] [firer]/[firer.ckey] shot [M]/[M.ckey] with a [src]"
- firer.attack_log += "\[[time_stamp()]\] [firer]/[firer.ckey] shot [M]/[M.ckey] with a [src]"
- log_attack("[firer] ([firer.ckey]) shot [M] ([M.ckey]) with a [src]")
+ M.attack_log += "\[[time_stamp()]\] [firer]/[firer.ckey] shot [M]/[M.ckey] with a [src.type]"
+ firer.attack_log += "\[[time_stamp()]\] [firer]/[firer.ckey] shot [M]/[M.ckey] with a [src.type]"
+ log_attack("[firer] ([firer.ckey]) shot [M] ([M.ckey]) with a [src.type]")
- log_admin("ATTACK: [firer] ([firer.ckey]) shot [M] ([M.ckey]) with a [src]")
- msg_admin_attack("ATTACK: [firer] ([firer.ckey]) shot [M] ([M.ckey]) with a [src]") //BS12 EDIT ALG
+ log_admin("ATTACK: [firer] ([firer.ckey]) shot [M] ([M.ckey]) with a [src.type]")
+ msg_admin_attack("ATTACK: [firer] ([firer.ckey]) shot [M] ([M.ckey]) with a [src.type]") //BS12 EDIT ALG
else
M.attack_log += "\[[time_stamp()]\] UNKNOWN SUBJECT (No longer exists) shot [M]/[M.ckey] with a [src]"
- log_attack("UNKNOWN shot [M] ([M.ckey]) with a [src]")
+ log_attack("UNKNOWN shot [M] ([M.ckey]) with a [src.type]")
log_admin("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a [src]")
- msg_admin_attack("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a [src]") //BS12 EDIT ALG
+ msg_admin_attack("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a [src.type]") //BS12 EDIT ALG
spawn(0)
if(A)
diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm
index 8471568c3ec..020efe4a313 100644
--- a/code/modules/reagents/reagent_containers/food/drinks.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks.dm
@@ -93,15 +93,27 @@
user << "\red [target] is full."
return
+
+
+ var/datum/reagent/refill
+ var/datum/reagent/refillName
+ if(isrobot(user))
+ refill = reagents.get_master_reagent_id()
+ refillName = reagents.get_master_reagent_name()
+
var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
user << "\blue You transfer [trans] units of the solution to [target]."
if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell
var/mob/living/silicon/robot/bro = user
- bro.cell.use(30)
- var/refill = reagents.get_master_reagent_id()
- spawn(600)
+ var/chargeAmount = max(30,4*trans)
+ bro.cell.use(chargeAmount)
+ user << "Now synthesizing [trans] units of [refillName]..."
+
+
+ spawn(300)
reagents.add_reagent(refill, trans)
+ user << "Cyborg [src] refilled."
return
diff --git a/code/modules/reagents/reagent_containers/food/snacks/grown.dm b/code/modules/reagents/reagent_containers/food/snacks/grown.dm
index 3d0cb1ee66a..31d1536eb4b 100644
--- a/code/modules/reagents/reagent_containers/food/snacks/grown.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks/grown.dm
@@ -216,8 +216,8 @@
seed = "/obj/item/seeds/glowberryseed"
name = "bunch of glow-berries"
desc = "Nutritious!"
- var/on = 1
- var/brightness_on = 2 //luminosity when on
+ light_on = 1
+ brightness_on = 2 //luminosity when on
icon_state = "glowberrypile"
New()
..()
diff --git a/code/setup.dm b/code/setup.dm
index 0fe085d5a6b..1abc93a19bb 100644
--- a/code/setup.dm
+++ b/code/setup.dm
@@ -534,7 +534,7 @@ var/list/liftable_structures = list(\
#define INVISIBILITY_MAXIMUM 100
//Object specific defines
-#define CANDLE_LUM 3 //For how bright candles are
+//#define CANDLE_LUM 3 //For how bright candles are //Why is this here? Moved to candle.dm (brightness_on) -SweeperM
//Some mob defines below
diff --git a/maps/tgstation.2.0.9.1.dmm b/maps/tgstation.2.0.9.1.dmm
index c6f444dd29b..c1758f271e8 100644
--- a/maps/tgstation.2.0.9.1.dmm
+++ b/maps/tgstation.2.0.9.1.dmm
@@ -784,7 +784,7 @@
"apd" = (/turf/simulated/floor/carpet,/area/security/detectives_office)
"ape" = (/obj/structure/table/woodentable,/obj/item/weapon/cigpacket,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/clothing/glasses/sunglasses,/turf/simulated/floor/carpet,/area/security/detectives_office)
"apf" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor/carpet,/area/security/detectives_office)
-"apg" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{on = 0; pixel_x = -3; pixel_y = 8},/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office)
+"apg" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{light_on = 0; pixel_x = -3; pixel_y = 8},/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office)
"aph" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/requests_console{department = "Law office"; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/wood,/area/lawoffice)
"api" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/wood,/area/lawoffice)
"apj" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/pen/red,/turf/simulated/floor/wood,/area/lawoffice)