Skip to content
2 changes: 2 additions & 0 deletions code/datums/type_cloning.dm
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,5 @@
/matrix/GetCloneArgs()
return list(src) //Matrices handle copies themselves

/image/GetCloneArgs()
return list(src) //Same for images
21 changes: 13 additions & 8 deletions code/game/objects/items/devices/paint_sprayer.dm
Original file line number Diff line number Diff line change
Expand Up @@ -106,19 +106,20 @@
else if (istype(A, /turf/simulated/wall))
new_color = pick_color_from_wall(A, user)
else if (istype(A, /obj/structure/wall_frame))
var/obj/structure/wall_frame/WF = A
new_color = pick_color_from_wall_frame(WF, user)
new_color = pick_color_from_wall_frame(A, user)
else
new_color = A.get_color()
change_color(new_color, user)

else if (A.atom_flags & ATOM_FLAG_CAN_BE_PAINTED)
A.set_color(paint_color)
. = TRUE
if(!new_color)
to_chat(user, SPAN_NOTICE("You fail to scan a color from \the [A]."))
else
change_color(new_color, user)

else if (istype(A, /turf/simulated/wall))
. = paint_wall(A, user)

else if (istype(A, /obj/structure/wall_frame))
. = paint_wall_frame(A, user)

else if (istype(A, /turf/simulated/floor))
. = paint_floor(A, user, params)

Expand All @@ -129,8 +130,12 @@
to_chat(user, SPAN_WARNING("You can't paint an active exosuit. Dismantle it first."))
. = FALSE

else if (A.atom_flags & ATOM_FLAG_CAN_BE_PAINTED)
A.set_color(paint_color)
. = TRUE

else
to_chat(user, SPAN_WARNING("\The [src] can only be used on floors, windows, walls, exosuits or certain airlocks."))
to_chat(user, SPAN_WARNING("\The [src] can only be used on floors, windows, walls, exosuits, airlocks, and certain other objects."))
. = FALSE

if (.)
Expand Down
2 changes: 1 addition & 1 deletion code/game/objects/structures/wall_frame.dm
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
desc = "A low wall section which serves as the base of windows, amongst other things."
icon = 'icons/obj/structures/wall_frame.dmi'
icon_state = "frame"
atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE | ATOM_FLAG_CAN_BE_PAINTED | ATOM_FLAG_ADJACENT_EXCEPTION
atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE | ATOM_FLAG_ADJACENT_EXCEPTION
obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED
anchored = TRUE
density = TRUE
Expand Down
1 change: 0 additions & 1 deletion code/game/turfs/simulated/walls.dm
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ var/global/list/wall_fullblend_objects = list(
heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall
explosion_resistance = 10
color = COLOR_STEEL
atom_flags = ATOM_FLAG_CAN_BE_PAINTED
turf_flags = TURF_IS_HOLOMAP_OBSTACLE

var/damage = 0
Expand Down
2 changes: 0 additions & 2 deletions code/modules/hydroponics/grown.dm
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,6 @@
update_icon()

/obj/item/chems/food/grown/initialize_reagents(populate)
if(reagents)
reagents.clear_reagents()
if(!seed?.chems)
return
potency = seed.get_trait(TRAIT_POTENCY)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@
if(!check_file_download(filename))
return 0
var/datum/computer_file/program/PRG = net.find_file_by_name(filename, OS_PROGRAMS_DIR, MF_ROLE_SOFTWARE)
if(!istype(PRG))
return 0
var/datum/file_storage/disk/destination = computer.mounted_storage["local"]
if(!destination)
return 0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ var/global/list/telecomms_hubs = list()

var/formatted_msg = "<span style='color:[channel?.color || default_color]'><small><b>\[[channel?.name || format_frequency(frequency)]\]</b></small> <span class='name'>"
var/send_name = istype(speaker) ? speaker.real_name : ("[speaker]" || "unknown")
var/overmap_send_name = "[send_name] ([send_overmap_object.name])"
var/overmap_send_name = istype(send_overmap_object) ? "[send_name] ([send_overmap_object.name])" : send_name

var/list/listeners = list() // Dictionary of listener -> boolean (include overmap origin)

Expand Down
4 changes: 3 additions & 1 deletion code/modules/modular_computers/networking/network_files.dm
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
/datum/computer_network/proc/find_file_by_name(filename, directory, mainframe_role = MF_ROLE_FILESERVER, list/accesses)
for(var/datum/extension/network_device/mainframe/M in get_mainframes_by_role(mainframe_role, accesses))
var/datum/computer_file/F = M.get_file(filename, directory)
if(F)
if(istype(F))
return F

return OS_FILE_NOT_FOUND

/datum/computer_network/proc/get_all_files_of_type(file_type, mainframe_role = MF_ROLE_FILESERVER, uniques_only = FALSE, list/accesses)
. = list()
var/list/found_filenames = list()
Expand Down
2 changes: 1 addition & 1 deletion code/modules/paperwork/paper_bundle.dm
Original file line number Diff line number Diff line change
Expand Up @@ -301,8 +301,8 @@
var/obj/item/paper/P = pages[1]
icon = P.icon
icon_state = P.icon_state
copy_overlays(P.overlays)

copy_overlays(P)

var/paper_count = 0
var/photo_count = 0
Expand Down
25 changes: 24 additions & 1 deletion code/modules/paperwork/printer.dm
Original file line number Diff line number Diff line change
Expand Up @@ -281,14 +281,28 @@
stop_printing_queue()
return FALSE
print_picture(queued_element)
else
else if(istype(queued_element, /obj/item/paper_bundle))
var/obj/item/paper_bundle/bundle = queued_element
var/photo_count = 0
for(var/obj/item/photo/picture in bundle.pages)
photo_count++
if(!has_enough_to_print((TONER_USAGE_PAPER * (length(bundle.pages) - photo_count)) + (TONER_USAGE_PHOTO * photo_count)))
var/obj/machinery/M = loc
if(istype(M))
M.state("Warning: Not enough paper or toner!")
stop_printing_queue()
return FALSE
print_paper_bundle(bundle)
else if(istype(queued_element, /obj/item/paper))
if(!has_enough_to_print(TONER_USAGE_PAPER))
var/obj/machinery/M = loc
if(istype(M))
M.state("Warning: Not enough paper or toner!")
stop_printing_queue()
return FALSE
print_paper(queued_element)
else
PRINT_STACK_TRACE("A printer printed something that wasn't a paper, paper bundle, or photo: [queued_element] ([queued_element.type])")

//#TODO: machinery should allow a component to trigger and wait for an animation sequence. So that we can drop out the paper in sync.
queued_element.dropInto(get_turf(loc))
Expand All @@ -305,6 +319,14 @@

use_toner(TONER_USAGE_PHOTO, FALSE) //photos use a lot of ink!
use_paper(1)
P.update_icon()

/obj/item/stock_parts/printer/proc/print_paper_bundle(var/obj/item/paper_bundle/bundle)
for(var/obj/item/paper/page in bundle.pages)
print_paper(page)
for(var/obj/item/photo/picture in bundle.pages)
print_picture(picture)
bundle.update_icon()

/obj/item/stock_parts/printer/proc/print_paper(var/obj/item/paper/P)
//Apply a greyscale filter on all stamps overlays
Expand All @@ -321,6 +343,7 @@

use_toner(TONER_USAGE_PAPER, FALSE)
use_paper(1)
P.update_icon() // reapply stamp overlays

/obj/item/stock_parts/printer/proc/use_toner(var/amount, var/update_parent = TRUE)
if(!toner?.use_toner(amount))
Expand Down
3 changes: 3 additions & 0 deletions maps/outreach/outreach_zlevels.dm
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
base_turf = OUTREACH_SURFACE_TURF
loop_turf_type = /turf/exterior/mimic_edge/transition/loop
border_filler = /turf/unsimulated/dark_border
strata = /decl/strata/outreach/mountain
ambient_light_level = 0.7
ambient_light_color = COLOR_GREEN_GRAY
exterior_atmos_temp = OUTREACH_TEMP
Expand All @@ -34,6 +35,7 @@
level_id = OUTREACH_LEVEL_ID_UNDERGROUND
base_turf = /turf/exterior/barren/subterrane/outreach
base_area = /area/exoplanet/outreach/underground/d1
strata = /decl/strata/outreach/subterrane
ambient_light_level = 0.2
ambient_light_color = COLOR_YELLOW_GRAY
border_filler = /turf/unsimulated/mineral
Expand All @@ -48,6 +50,7 @@
level_id = OUTREACH_LEVEL_ID_ABYSS
base_turf = /turf/exterior/volcanic/outreach/abyss
base_area = /area/exoplanet/outreach/underground/d2
strata = /decl/strata/outreach/abyssal
connected_levels = list(
OUTREACH_LEVEL_ID_UNDERGROUND = UP,
OUTREACH_LEVEL_ID_SOUTH_ABYSS = SOUTH,
Expand Down
2 changes: 2 additions & 0 deletions mods/persistence/modules/world_save/saved_vars/saved_misc.dm
Original file line number Diff line number Diff line change
Expand Up @@ -657,6 +657,8 @@ SAVED_VAR(/obj/item/clothing/accessory/badge/tags, owner_name)
SAVED_VAR(/obj/item/clothing/accessory/badge/tags, owner_branch)
SAVED_VAR(/obj/item/clothing/accessory/badge/tags, desc)

SAVED_VAR(/obj/item/flame/lighter, reagents)

///////////////////////////////////////////////////////////////////////////////
// item/clothing
///////////////////////////////////////////////////////////////////////////////
Expand Down