diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 8382f800369..d046e4fb402 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -35447,7 +35447,6 @@ /area/library) "bmF" = ( /obj/structure/cult/archives, -/obj/item/videocam, /obj/machinery/light_switch{ pixel_y = -25 }, diff --git a/code/LINDA/LINDA_turf_tile.dm b/code/LINDA/LINDA_turf_tile.dm index a0a0b6b8784..b86ad2299ff 100644 --- a/code/LINDA/LINDA_turf_tile.dm +++ b/code/LINDA/LINDA_turf_tile.dm @@ -486,7 +486,7 @@ turf/simulated/proc/consider_superconductivity(starting) turf/simulated/proc/radiate_to_spess() //Radiate excess tile heat to space if(temperature > T0C) //Considering 0 degC as te break even point for radiation in and out - var/delta_temperature = (temperature_archived - 2.7) //hardcoded space temperature + var/delta_temperature = (temperature_archived - TCMB) //hardcoded space temperature if((heat_capacity > 0) && (abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)) var/heat = thermal_conductivity*delta_temperature* \ diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index df957eaa11e..c94dff5ca6c 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -107,6 +107,7 @@ #define COMSIG_MOVABLE_MOVED "movable_moved" //from base of atom/movable/Moved(): (/atom, dir) #define COMSIG_MOVABLE_CROSS "movable_cross" //from base of atom/movable/Cross(): (/atom/movable) #define COMSIG_MOVABLE_CROSSED "movable_crossed" //from base of atom/movable/Crossed(): (/atom/movable) +#define COMSIG_CROSSED_MOVABLE "crossed_movable" //when we cross over something (calling Crossed() on that atom) #define COMSIG_MOVABLE_UNCROSSED "movable_uncrossed" //from base of atom/movable/Uncrossed(): (/atom/movable) #define COMSIG_MOVABLE_UNCROSS "movable_uncross" //from base of atom/movable/Uncross(): (/atom/movable) #define COMPONENT_MOVABLE_BLOCK_UNCROSS 1 diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index c3c9b6f7e65..c0f5cfd5f3b 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -362,7 +362,7 @@ object_overlays += item_overlay add_overlay(object_overlays) -/obj/screen/inventory/Click() +/obj/screen/inventory/Click(location, control, params) // At this point in client Click() code we have passed the 1/10 sec check and little else // We don't even know if it's a middle click if(world.time <= usr.next_move) @@ -371,6 +371,12 @@ return 1 if(istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech return 1 + + if(hud?.mymob && slot_id) + var/obj/item/inv_item = hud.mymob.get_item_by_slot(slot_id) + if(inv_item) + return inv_item.Click(location, control, params) + if(usr.attack_ui(slot_id)) usr.update_inv_l_hand(0) usr.update_inv_r_hand(0) diff --git a/code/controllers/subsystem/chat.dm b/code/controllers/subsystem/chat.dm index a90e14d0ab4..d2f87c93e06 100644 --- a/code/controllers/subsystem/chat.dm +++ b/code/controllers/subsystem/chat.dm @@ -11,7 +11,8 @@ SUBSYSTEM_DEF(chat) /datum/controller/subsystem/chat/fire() for(var/i in payload) var/client/C = i - C << output(payload[C], "browseroutput:output") + if(C) + C << output(payload[C], "browseroutput:output") payload -= C if(MC_TICK_CHECK) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index feb2e59f6cd..e7d64207841 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -220,6 +220,7 @@ // This is automatically called when something enters your square /atom/movable/Crossed(atom/movable/AM, oldloc) SEND_SIGNAL(src, COMSIG_MOVABLE_CROSSED, AM) + SEND_SIGNAL(AM, COMSIG_CROSSED_MOVABLE, src) /atom/movable/Bump(atom/A, yes) //the "yes" arg is to differentiate our Bump proc from byond's, without it every Bump() call would become a double Bump(). if(A && yes) diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index 3489a087ec0..de8846d292e 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -226,7 +226,7 @@ var/list/blacklisted_pylon_turfs = typecacheof(list( if(istype(T, /turf/simulated/floor)) T.ChangeTurf(/turf/simulated/floor/engine/cult) if(istype(T, /turf/simulated/wall)) - T.ChangeTurf(/turf/simulated/wall/cult) + T.ChangeTurf(/turf/simulated/wall/cult/artificer) else var/turf/simulated/floor/engine/cult/F = safepick(cultturfs) if(F) diff --git a/code/game/gamemodes/miniantags/abduction/abduction.dm b/code/game/gamemodes/miniantags/abduction/abduction.dm index 9fce3cc6e24..bcbc86d991b 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction.dm @@ -208,12 +208,14 @@ text += "
The abductors were:
" for(var/datum/mind/abductor_mind in abductors) text += printplayer(abductor_mind) + text += "
" text += printobjectives(abductor_mind) text += "
" if(abductees.len) text += "
The abductees were:
" for(var/datum/mind/abductee_mind in abductees) text += printplayer(abductee_mind) + text += "
" text += printobjectives(abductee_mind) text += "
" to_chat(world, text) diff --git a/code/game/jobs/job/central.dm b/code/game/jobs/job/central.dm index 938ccb6d12c..d9c30292d82 100644 --- a/code/game/jobs/job/central.dm +++ b/code/game/jobs/job/central.dm @@ -68,7 +68,7 @@ jobtype = /datum/job/ntspecops uniform = /obj/item/clothing/under/rank/centcom/captain suit = /obj/item/clothing/suit/space/deathsquad/officer - back = /obj/item/storage/backpack/security + back = /obj/item/storage/backpack/ert/security belt = /obj/item/storage/belt/military/assault gloves = /obj/item/clothing/gloves/combat shoes = /obj/item/clothing/shoes/combat diff --git a/code/game/jobs/job/supervisor.dm b/code/game/jobs/job/supervisor.dm index a94dfea7c73..4e773d42ad9 100644 --- a/code/game/jobs/job/supervisor.dm +++ b/code/game/jobs/job/supervisor.dm @@ -182,9 +182,9 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0) /obj/item/gun/energy/gun/blueshield = 1 ) implants = list(/obj/item/implant/mindshield) - backpack = /obj/item/storage/backpack/security - satchel = /obj/item/storage/backpack/satchel_sec - dufflebag = /obj/item/storage/backpack/duffel/security + backpack = /obj/item/storage/backpack/blueshield + satchel = /obj/item/storage/backpack/satchel_blueshield + dufflebag = /obj/item/storage/backpack/duffel/blueshield /datum/job/judge diff --git a/code/game/jobs/job/support.dm b/code/game/jobs/job/support.dm index 8371dcfa1c3..7d4f5ccc622 100644 --- a/code/game/jobs/job/support.dm +++ b/code/game/jobs/job/support.dm @@ -294,6 +294,7 @@ genemutcheck(H, COMICBLOCK, null, MUTCHK_FORCED) H.dna.default_blocks.Add(COMICBLOCK) H.check_mutations = TRUE + H.add_language("Clownish") //action given to antag clowns /datum/action/innate/toggle_clumsy @@ -420,6 +421,8 @@ r_pocket = /obj/item/barcodescanner l_hand = /obj/item/storage/bag/books pda = /obj/item/pda/librarian + backpack_contents = list( + /obj/item/videocam = 1) /datum/job/barber title = "Barber" diff --git a/code/game/objects/items/flag.dm b/code/game/objects/items/flag.dm index 1b2eae4db8d..aed33fc2819 100644 --- a/code/game/objects/items/flag.dm +++ b/code/game/objects/items/flag.dm @@ -197,7 +197,7 @@ name = "Chameleon flag" desc = "A poor recreation of the official NT flag. It seems to shimmer a little." icon_state = "ntflag" - origin_tech = "syndicate=4;magnets=4" + origin_tech = "syndicate=1;magnets=4" var/updated_icon_state = null var/used = FALSE var/obj/item/grenade/boobytrap = null diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 96806bb827a..af5e9540b02 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -193,6 +193,12 @@ icon_state = "viropack" item_state = "viropack" +/obj/item/storage/backpack/blueshield + name = "blueshield backpack" + desc = "A robust backpack issued to Nanotrasen's finest." + icon_state = "blueshieldpack" + item_state = "blueshieldpack" + /* * Satchel Types */ @@ -287,6 +293,11 @@ icon_state = "satchel-cap" resistance_flags = FIRE_PROOF +/obj/item/storage/backpack/satchel_blueshield + name = "blueshield satchel" + desc = "A robust satchel issued to Nanotrasen's finest." + icon_state = "satchel-blueshield" + /obj/item/storage/backpack/satchel_flat name = "smuggler's satchel" desc = "A very slim satchel that can easily fit into tight spaces." @@ -531,12 +542,19 @@ icon_state = "duffel-clown" item_state = "duffel-clown" +obj/item/storage/backpack/duffel/blueshield + name = "blueshield duffelbag" + desc = "A robust duffelbag issued to Nanotrasen's finest." + icon_state = "duffel-blueshield" + item_state = "duffel-blueshield" + //ERT backpacks. /obj/item/storage/backpack/ert name = "emergency response team backpack" desc = "A spacious backpack with lots of pockets, used by members of the Nanotrasen Emergency Response Team." icon_state = "ert_commander" item_state = "backpack" + max_combined_w_class = 30 resistance_flags = FIRE_PROOF //Commander diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index 94c13991083..52ea512610b 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -270,7 +270,7 @@ desc = "A prescription packet containing six marijuana cigarettes." icon_state = "medpacket" item_state = "cigpacket" - default_reagents = list("thc" = 15) + default_reagents = list("thc" = 15, "cbd" = 15) /obj/item/storage/fancy/cigarettes/cigpack_uplift name = "\improper Uplift Smooth packet" diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index aa6528ee118..5938a52c1d5 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -78,10 +78,5 @@ if(href_list["read"]) var/obj/item/paper/P = locate(href_list["read"]) if((P && P.loc == src)) - if(!( istype(usr, /mob/living/carbon/human) )) - usr << browse("[P.name][stars(P.info)]", "window=[P.name]") - onclose(usr, "[P.name]") - else - usr << browse("[P.name][P.info]", "window=[P.name]") - onclose(usr, "[P.name]") + P.show_content(usr) return diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm index c4f0e93dbd6..118132765a1 100644 --- a/code/game/turfs/simulated/minerals.dm +++ b/code/game/turfs/simulated/minerals.dm @@ -8,7 +8,6 @@ smooth = SMOOTH_MORE | SMOOTH_BORDER canSmoothWith = null baseturf = /turf/simulated/floor/plating/asteroid/airless - temperature = 2.7 opacity = 1 density = TRUE blocks_air = TRUE diff --git a/code/game/world.dm b/code/game/world.dm index 4488cb2d218..cccf5eb497a 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -4,6 +4,7 @@ var/global/list/map_transition_config = MAP_TRANSITION_CONFIG /world/New() SetupLogs() + enable_debugger() // Enable the extools debugger log_world("World loaded at [time_stamp()]") log_world("[GLOB.vars.len - GLOB.gvars_datum_in_built_vars.len] global variables") @@ -468,3 +469,10 @@ proc/establish_db_connection() return 1 #undef FAILED_DB_CONNECTION_CUTOFF + +// Proc to enable the extools debugger, which allows breakpoints, live var checking, and many other useful tools +// The DLL is injected into the env by visual studio code. If not running VSCode, the proc will not call the initialization +/world/proc/enable_debugger() + var/dll = world.GetConfig("env", "EXTOOLS_DLL") + if (dll) + call(dll, "debug_initialize")() \ No newline at end of file diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 495e4771e19..8d46385bcd9 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2164,7 +2164,7 @@ var/obj/pageobj = B.contents[page] data += "Page [page] - [pageobj.name]
" - usr << browse(data, "window=[B.name]") + usr << browse(data, "window=PaperBundle[B.UID()]") else to_chat(usr, "The faxed item is not viewable. This is probably a bug, and should be reported on the tracker: [fax.type]") diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 2384c24b6ff..a347f65590b 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -116,7 +116,7 @@ if(!msg) return - msg = pencode_to_html(msg) + msg = admin_pencode_to_html(msg) to_chat(world, "[msg]") log_admin("GlobalNarrate: [key_name(usr)] : [msg]") message_admins("GlobalNarrate: [key_name_admin(usr)]: [msg]
", 1) diff --git a/code/modules/busy_space/organizations.dm b/code/modules/busy_space/organizations.dm index 41b3a80cbab..f80e82938ec 100644 --- a/code/modules/busy_space/organizations.dm +++ b/code/modules/busy_space/organizations.dm @@ -439,7 +439,7 @@ /datum/lore/organization/gov/synth name = "Synthetic Union" - short_name = "Synthtica" + short_name = "Synthetica" acronym = "SYN" desc = "A defensive coalition of synthetics based out of New Canaan,\ the Synthetic Union is an organization which aims to establish and consolidate synthetic rights across the galaxy.\ diff --git a/code/modules/events/spider_terror.dm b/code/modules/events/spider_terror.dm index 1ecf5aa22ca..925051cff11 100644 --- a/code/modules/events/spider_terror.dm +++ b/code/modules/events/spider_terror.dm @@ -15,6 +15,10 @@ var/list/vents = list() for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in GLOB.all_vent_pumps) if(is_station_level(temp_vent.loc.z) && !temp_vent.welded) + if(!temp_vent.parent) + // Issue happening more often with vents. Log and continue. Delete once solved + log_debug("spider_terror/start(), vent has no parent: [temp_vent], qdeled: [QDELETED(temp_vent)], loc: [temp_vent.loc]") + continue if(temp_vent.parent.other_atmosmch.len > 50) vents += temp_vent var/spider_type diff --git a/code/modules/events/traders.dm b/code/modules/events/traders.dm index 04663f93152..b481bca88eb 100644 --- a/code/modules/events/traders.dm +++ b/code/modules/events/traders.dm @@ -18,6 +18,9 @@ var/global/list/unused_trade_stations = list("sol") return if(seclevel2num(get_security_level()) >= SEC_LEVEL_RED) event_announcement.Announce("A trading shuttle from Jupiter Station has been denied docking permission due to the heightened security alert aboard [station_name()].", "Trader Shuttle Docking Request Refused") + // if the docking request was refused, fire another major event in 60 seconds + var/list/datum/event_container/EC = SSevents.event_containers[EVENT_LEVEL_MAJOR] + EC.next_event_time = world.time + (60 * 10) return var/list/spawnlocs = list() diff --git a/code/modules/hydroponics/grown/cannabis.dm b/code/modules/hydroponics/grown/cannabis.dm index 274a1f1e084..06ba1fc7a66 100644 --- a/code/modules/hydroponics/grown/cannabis.dm +++ b/code/modules/hydroponics/grown/cannabis.dm @@ -17,7 +17,7 @@ /obj/item/seeds/cannabis/death, /obj/item/seeds/cannabis/white, /obj/item/seeds/cannabis/ultimate) - reagents_add = list("thc" = 0.15) + reagents_add = list("thc" = 0.15, "cbd" = 0.15) /obj/item/seeds/cannabis/rainbow @@ -28,7 +28,7 @@ plantname = "Rainbow Weed" product = /obj/item/reagent_containers/food/snacks/grown/cannabis/rainbow mutatelist = list() - reagents_add = list("lsd" = 0.15, "thc" = 0.15) + reagents_add = list("lsd" = 0.15, "thc" = 0.15, "cbd" = 0.15) rarity = 40 /obj/item/seeds/cannabis/death @@ -39,7 +39,7 @@ plantname = "Deathweed" product = /obj/item/reagent_containers/food/snacks/grown/cannabis/death mutatelist = list() - reagents_add = list("cyanide" = 0.35, "thc" = 0.15) + reagents_add = list("cyanide" = 0.35, "thc" = 0.15, "cbd" = 0.15) rarity = 40 /obj/item/seeds/cannabis/white @@ -50,7 +50,7 @@ plantname = "Lifeweed" product = /obj/item/reagent_containers/food/snacks/grown/cannabis/white mutatelist = list() - reagents_add = list("omnizine" = 0.35, "thc" = 0.15) + reagents_add = list("omnizine" = 0.35, "thc" = 0.15, "cbd" = 0.15) rarity = 40 @@ -72,6 +72,7 @@ "haloperidol" = 0.15, "methamphetamine" = 0.15, "thc" = 0.15, + "cbd" = 0.15, "psilocybin" = 0.15, "hairgrownium" = 0.15, "ectoplasm" = 0.15, diff --git a/code/modules/hydroponics/grown/tomato.dm b/code/modules/hydroponics/grown/tomato.dm index 873b08f151e..6cf56d619d6 100644 --- a/code/modules/hydroponics/grown/tomato.dm +++ b/code/modules/hydroponics/grown/tomato.dm @@ -141,7 +141,8 @@ spawn(30) if(!QDELETED(src)) - var/mob/living/simple_animal/hostile/killertomato/K = new /mob/living/simple_animal/hostile/killertomato(get_turf(loc)) + var/turf/T = get_turf(user) + var/mob/living/simple_animal/hostile/killertomato/K = new /mob/living/simple_animal/hostile/killertomato(T) K.maxHealth += round(seed.endurance / 3) K.melee_damage_lower += round(seed.potency / 10) K.melee_damage_upper += round(seed.potency / 10) @@ -150,4 +151,6 @@ K.visible_message("The Killer Tomato growls as it suddenly awakens.") if(user) user.unEquip(src) + message_admins("[key_name_admin(user)] released a killer tomato at [ADMIN_COORDJMP(T)]") + log_game("[key_name(user)] released a killer tomato at [COORD(T)]") qdel(src) diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm index f4832e20384..04924d4b310 100644 --- a/code/modules/mob/living/carbon/alien/alien_defense.dm +++ b/code/modules/mob/living/carbon/alien/alien_defense.dm @@ -79,5 +79,5 @@ In all, this is a lot like the monkey code. /N if(M.is_adult) damage = rand(10, 40) adjustBruteLoss(damage) - add_attack_logs(src, M, "Slime'd for [damage] damage") + add_attack_logs(M, src, "Slime'd for [damage] damage") updatehealth("slime attack") \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 01c2d773d51..51088f66457 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -585,6 +585,14 @@ message = "[src] makes a weak noise" m_type = 2 + if("hsigh", "hsighs") + if(!muzzled) + message = "[src] sighs contentedly." + m_type = 2 + else + message = "[src] makes a [pick("chill", "relaxed")] noise" + m_type = 2 + if("laugh", "laughs") var/M = handle_emote_param(param) if(miming) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index bf3e5d36af5..6540b74de58 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -454,12 +454,6 @@ popup.set_content(dat) popup.open() - -/mob/living/carbon/human/Crossed(atom/movable/AM, oldloc) - var/mob/living/simple_animal/bot/mulebot/MB = AM - if(istype(MB)) - MB.RunOver(src) - // Get rank from ID, ID inside PDA, PDA, ID in wallet, etc. /mob/living/carbon/human/proc/get_authentification_rank(var/if_no_id = "No id", var/if_no_job = "No job") var/obj/item/pda/pda = wear_id diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 2643d1f3102..93e7ff54ec6 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -542,7 +542,7 @@ if(COLDRES in mutations) return 1 //Fully protected from the cold. - temperature = max(temperature, 2.7) //There is an occasional bug where the temperature is miscalculated in ares with a small amount of gas on them, so this is necessary to ensure that that bug does not affect this calculation. Space's temperature is 2.7K and most suits that are intended to protect against any cold, protect down to 2.0K. + temperature = max(temperature, TCMB) //There is an occasional bug where the temperature is miscalculated in areas with a small amount of gas on them, so this is necessary to ensure that that bug does not affect this calculation. Space's temperature is 2.7K and most suits that are intended to protect against any cold, protect down to 2.0K. var/thermal_protection_flags = get_cold_protection_flags(temperature) var/thermal_protection = 0.0 diff --git a/code/modules/mob/living/carbon/human/species/plasmaman.dm b/code/modules/mob/living/carbon/human/species/plasmaman.dm index d925e2ef1d9..c30c8176fdc 100644 --- a/code/modules/mob/living/carbon/human/species/plasmaman.dm +++ b/code/modules/mob/living/carbon/human/species/plasmaman.dm @@ -165,7 +165,7 @@ ..() /datum/species/plasmaman/handle_reagents(mob/living/carbon/human/H, datum/reagent/R) - if(R.id == "plasma") + if(R.id == "plasma" || R.id == "plasma_dust") H.adjustBruteLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER) H.adjustFireLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER) H.adjustPlasma(20) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 7aa8790db0e..aaa11710642 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -296,7 +296,7 @@ return FALSE if(stat != DEAD) - add_attack_logs(src, M, "Slime'd") + add_attack_logs(M, src, "Slime'd") M.do_attack_animation(src) visible_message("\The [M.name] glomps [src]!", "\The [M.name] glomps you!") return TRUE diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index a1b361d87db..c89b160bf0e 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -63,6 +63,7 @@ mulebot_count++ set_suffix(suffix ? suffix : "#[mulebot_count]") + RegisterSignal(src, COMSIG_CROSSED_MOVABLE, .proc/human_squish_check) /mob/living/simple_animal/bot/mulebot/Destroy() unload(0) @@ -866,6 +867,11 @@ else ..() +/mob/living/simple_animal/bot/mulebot/proc/human_squish_check(src, atom/movable/AM) + if(!ishuman(AM)) + return + RunOver(AM) + #undef SIGH #undef ANNOYED #undef DELIGHT diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 3f8924232e7..75d6d9084ca 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -80,7 +80,7 @@ else data = "
[infolinks ? info_links : info]
[stamps]" if(view) - var/datum/browser/popup = new(user, name, , paper_width, paper_height) + var/datum/browser/popup = new(user, "Paper[UID()]", , paper_width, paper_height) popup.stylesheets = list() popup.set_content(data) if(!stars) diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm index ecc26ba0cff..06bd0ec25c6 100644 --- a/code/modules/paperwork/paper_bundle.dm +++ b/code/modules/paperwork/paper_bundle.dm @@ -63,13 +63,13 @@ qdel(W) else if(istype(W, /obj/item/pen) || istype(W, /obj/item/toy/crayon)) - usr << browse("", "window=[name]") //Closes the dialog + usr << browse("", "window=PaperBundle[UID()]") //Closes the dialog P = src[page] P.attackby(W, user, params) update_icon() - if(winget(usr, "[name]", "is-visible") == "true") // NOT MY FAULT IT IS A BUILT IN PROC PLEASE DO NOT HIT ME + if(winget(usr, "PaperBundle[UID()]", "is-visible") == "true") // NOT MY FAULT IT IS A BUILT IN PROC PLEASE DO NOT HIT ME attack_self(usr) //Update the browsed page. add_fingerprint(usr) return @@ -125,7 +125,7 @@ if(istype(src[page], /obj/item/paper)) var/obj/item/paper/P = W dat += P.show_content(usr, view = 0) - usr << browse(dat, "window=[name]") + usr << browse(dat, "window=PaperBundle[UID()]") else if(istype(src[page], /obj/item/photo)) var/obj/item/photo/P = W usr << browse_rsc(P.img, "tmp_photo.png") @@ -133,7 +133,7 @@ + "" \ + "

Written on the back:
[P.scribble]" : ""]"\ - + "", "window=[name]") + + "", "window=PaperBundle[UID()]") /obj/item/paper_bundle/attack_self(mob/user as mob) src.show_content(user) diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 11beb1a7cb6..4129ddf30ad 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -81,13 +81,22 @@ . += "It is too far away." /obj/item/photo/proc/show(mob/user as mob) - usr << browse_rsc(img, "tmp_photo.png") + var/icon/img_shown = new/icon(img) + var/colormatrix = user.get_screen_colour() + // Apply colorblindness effects, if any. + if(islist(colormatrix)) + img_shown.MapColors( + colormatrix[1], colormatrix[2], colormatrix[3], + colormatrix[4], colormatrix[5], colormatrix[6], + colormatrix[7], colormatrix[8], colormatrix[9], + ) + usr << browse_rsc(img_shown, "tmp_photo.png") usr << browse("[name]" \ + "" \ + "" \ + "[scribble ? "
Written on the back:
[scribble]" : ""]"\ - + "", "window=book;size=[64*photo_size]x[scribble ? 400 : 64*photo_size]") - onclose(usr, "[name]") + + "", "window=Photo[UID()];size=[64*photo_size]x[scribble ? 400 : 64*photo_size]") + onclose(usr, "Photo[UID()]") return /obj/item/photo/verb/rename() diff --git a/code/modules/power/singularity/particle_accelerator/particle.dm b/code/modules/power/singularity/particle_accelerator/particle.dm index 327c29cebda..c7fcfcda5e7 100644 --- a/code/modules/power/singularity/particle_accelerator/particle.dm +++ b/code/modules/power/singularity/particle_accelerator/particle.dm @@ -22,30 +22,29 @@ energy = 50 -/obj/effect/accelerated_particle/New(loc) - ..() +/obj/effect/accelerated_particle/Initialize(loc) + . = ..() + addtimer(CALLBACK(src, .proc/propagate), 1) + RegisterSignal(src, COMSIG_CROSSED_MOVABLE, .proc/try_irradiate) + RegisterSignal(src, COMSIG_MOVABLE_CROSSED, .proc/try_irradiate) + QDEL_IN(src, movement_range) - addtimer(CALLBACK(src, .proc/move), 1) - - -/obj/effect/accelerated_particle/Bump(atom/A) - if(A) - if(isliving(A)) - toxmob(A) - else if(istype(A, /obj/machinery/the_singularitygen)) - var/obj/machinery/the_singularitygen/S = A - S.energy += energy - else if(istype(A, /obj/singularity)) - var/obj/singularity/S = A - S.energy += energy - else if(istype(A, /obj/structure/blob)) - var/obj/structure/blob/B = A - B.take_damage(energy * 0.6) - movement_range = 0 - -/obj/effect/accelerated_particle/Crossed(atom/A, oldloc) +/obj/effect/accelerated_particle/proc/try_irradiate(src, atom/A) if(isliving(A)) - toxmob(A) + var/mob/living/L = A + L.apply_effect((energy * 6), IRRADIATE, 0) + else if(istype(A, /obj/machinery/the_singularitygen)) + var/obj/machinery/the_singularitygen/S = A + S.energy += energy + else if(istype(A, /obj/structure/blob)) + var/obj/structure/blob/B = A + B.take_damage(energy * 0.6) + movement_range = 0 + +/obj/effect/accelerated_particle/Bump(obj/singularity/S) + if(!istype(S)) + return ..() + S.energy += energy /obj/effect/accelerated_particle/ex_act(severity) @@ -54,17 +53,7 @@ /obj/effect/accelerated_particle/singularity_pull() return - - -/obj/effect/accelerated_particle/proc/toxmob(mob/living/M) - M.apply_effect((energy * 6), IRRADIATE, 0) - -/obj/effect/accelerated_particle/proc/move() +/obj/effect/accelerated_particle/proc/propagate() + addtimer(CALLBACK(src, .proc/propagate), 1) if(!step(src,dir)) forceMove(get_step(src, dir)) - movement_range-- - if(movement_range == 0) - qdel(src) - else - sleep(speed) - move() \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index c745d6be846..a686eda11f0 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -98,7 +98,7 @@ return if(!chambered) var/obj/item/ammo_casing/energy/shot = ammo_type[select] - if(cell.charge >= shot.e_cost) //if there's enough power in the cell cell... + if(cell.charge >= shot.e_cost) //if there's enough power in the WEAPON'S cell... chambered = shot //...prepare a new shot based on the current ammo type selected if(!chambered.BB) chambered.newshot() @@ -111,6 +111,11 @@ chambered = null //either way, released the prepared shot newshot() +/obj/item/gun/energy/process_fire(atom/target, mob/living/user, message = 1, params, zone_override, bonus_spread = 0) + if(!chambered && can_shoot()) + process_chamber() + return ..() + /obj/item/gun/energy/proc/select_fire(mob/living/user) select++ if(select > ammo_type.len) @@ -193,6 +198,9 @@ . = ..() /obj/item/gun/energy/proc/robocharge() + if(cell.charge == cell.maxcharge) + // No point in recharging a weapon's cell that is already at 100%. That would just waste borg cell power for no reason. + return if(isrobot(loc)) var/mob/living/silicon/robot/R = loc if(R && R.cell) diff --git a/code/modules/reagents/chemistry/reagents/admin.dm b/code/modules/reagents/chemistry/reagents/admin.dm index 6f22078b278..90e6cff3bf6 100644 --- a/code/modules/reagents/chemistry/reagents/admin.dm +++ b/code/modules/reagents/chemistry/reagents/admin.dm @@ -23,6 +23,7 @@ I.receive_damage(-5, FALSE) for(var/obj/item/organ/external/E in H.bodyparts) E.mend_fracture() + E.internal_bleeding = FALSE M.SetEyeBlind(0, FALSE) M.CureNearsighted(FALSE) M.CureBlind(FALSE) diff --git a/code/modules/reagents/chemistry/reagents/alcohol.dm b/code/modules/reagents/chemistry/reagents/alcohol.dm index 3c3021ffba4..2831d0e3f89 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol.dm @@ -1192,15 +1192,16 @@ taste_description = "motor oil" /datum/reagent/consumable/ethanol/synthanol/on_mob_life(mob/living/M) - if(!M.isSynthetic()) + if(!(M.dna.species.reagent_tag & PROCESS_SYN)) holder.remove_reagent(id, 3.6) //gets removed from organics very fast if(prob(25)) holder.remove_reagent(id, 15) M.fakevomit() + return ..() /datum/reagent/consumable/ethanol/synthanol/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume) - if(M.isSynthetic()) + if(M.dna.species.reagent_tag & PROCESS_SYN) return if(method == REAGENT_INGEST) to_chat(M, pick("That was awful!", "Yuck!")) diff --git a/code/modules/reagents/chemistry/reagents/drugs.dm b/code/modules/reagents/chemistry/reagents/drugs.dm index 592fe1c6fc4..a9f5d8a9cb5 100644 --- a/code/modules/reagents/chemistry/reagents/drugs.dm +++ b/code/modules/reagents/chemistry/reagents/drugs.dm @@ -525,6 +525,32 @@ M.Drowsy(10) return ..() +/datum/reagent/cbd + name = "Cannabidiol" + id = "cbd" + description = "A non-psychoactive phytocannabinoid extracted from the cannabis plant." + reagent_state = LIQUID + color = "#00e100" + taste_description = "relaxation" + +/datum/reagent/cbd/on_mob_life(mob/living/M) + var/update_flags = STATUS_UPDATE_NONE + if(prob(5)) + M.emote(pick("hsigh", "yawn")) + if(prob(5)) + to_chat(M, "[pick("You feel peaceful.", "You breathe softly.", "You feel chill.", "You vibe.")]") + if(prob(10)) + M.AdjustConfused(-5) + update_flags |= M.SetWeakened(0, FALSE) + if(volume >= 70 && prob(25)) + if(M.reagents.has_reagent("thc") <= 20) + M.Drowsy(10) + if(prob(25)) + update_flags |= M.adjustBruteLoss(-2, FALSE) + update_flags |= M.adjustFireLoss(-2, FALSE) + return ..() | update_flags + + /datum/reagent/fliptonium name = "Fliptonium" id = "fliptonium" diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 0bcdd3ba40d..2e7c668a83f 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -872,14 +872,6 @@ build_path = /obj/item/assembly/mousetrap category = list("initial", "Miscellaneous") -/datum/design/videocam - name = "Video Camera" - id = "videocam" - build_type = AUTOLATHE - materials = list(MAT_METAL = 120, MAT_GLASS = 60) - build_path = /obj/item/videocam - category = list("initial", "Miscellaneous") - /datum/design/logic_board name = "Logic Circuit" id = "logic_board" diff --git a/code/modules/shuttle/ert.dm b/code/modules/shuttle/ert.dm index 7f41179e2f0..3bc6f627354 100644 --- a/code/modules/shuttle/ert.dm +++ b/code/modules/shuttle/ert.dm @@ -4,6 +4,7 @@ shuttleId = "specops" possible_destinations = "specops_home;specops_away;specops_custom" resistance_flags = INDESTRUCTIBLE + flags = NODECONSTRUCT /obj/machinery/computer/camera_advanced/shuttle_docker/ert name = "specops navigation computer" @@ -16,6 +17,7 @@ x_offset = 0 y_offset = 0 resistance_flags = INDESTRUCTIBLE + flags = NODECONSTRUCT access_tcomms = FALSE access_construction = FALSE access_mining = FALSE \ No newline at end of file diff --git a/code/modules/shuttle/syndicate.dm b/code/modules/shuttle/syndicate.dm index 9c0b29c5e08..dc588eda887 100644 --- a/code/modules/shuttle/syndicate.dm +++ b/code/modules/shuttle/syndicate.dm @@ -9,6 +9,7 @@ shuttleId = "syndicate" possible_destinations = "syndicate_away;syndicate_z5;syndicate_z3;syndicate_ne;syndicate_nw;syndicate_n;syndicate_se;syndicate_sw;syndicate_s;syndicate_custom" resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF + flags = NODECONSTRUCT var/challenge = FALSE var/moved = FALSE diff --git a/code/modules/shuttle/vox.dm b/code/modules/shuttle/vox.dm index 263f52dbb92..6d67e87e415 100644 --- a/code/modules/shuttle/vox.dm +++ b/code/modules/shuttle/vox.dm @@ -4,6 +4,7 @@ shuttleId = "skipjack" possible_destinations = "skipjack_away;skipjack_ne;skipjack_nw;skipjack_se;skipjack_sw;skipjack_z5;skipjack_custom" resistance_flags = INDESTRUCTIBLE + flags = NODECONSTRUCT /obj/machinery/computer/camera_advanced/shuttle_docker/vox name = "skipjack navigation computer" @@ -16,4 +17,5 @@ x_offset = -10 y_offset = -10 resistance_flags = INDESTRUCTIBLE + flags = NODECONSTRUCT access_derelict = TRUE diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index e9626a6b76d..fab2d0fd8a4 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -39,9 +39,9 @@ /obj/item/organ/internal/cyberimp/brain/anti_drop name = "Anti-drop implant" desc = "This cybernetic brain implant will allow you to force your hand muscles to contract, preventing item dropping. Twitch ear to toggle." - var/active = 0 - var/l_hand_ignore = 0 - var/r_hand_ignore = 0 + var/active = FALSE + var/l_hand_ignore = FALSE + var/r_hand_ignore = FALSE var/obj/item/l_hand_obj = null var/obj/item/r_hand_obj = null implant_color = "#DE7E00" @@ -56,17 +56,17 @@ r_hand_obj = owner.r_hand if(l_hand_obj) if(owner.l_hand.flags & NODROP) - l_hand_ignore = 1 + l_hand_ignore = TRUE else owner.l_hand.flags |= NODROP - l_hand_ignore = 0 + l_hand_ignore = FALSE if(r_hand_obj) if(owner.r_hand.flags & NODROP) - r_hand_ignore = 1 + r_hand_ignore = TRUE else owner.r_hand.flags |= NODROP - r_hand_ignore = 0 + r_hand_ignore = FALSE if(!l_hand_obj && !r_hand_obj) to_chat(owner, "You are not holding any items, your hands relax...") @@ -102,12 +102,15 @@ A = pick(oview(range)) L_item.throw_at(A, range, 2) to_chat(owner, "Your left arm spasms and throws the [L_item.name]!") + l_hand_obj = null if(R_item) A = pick(oview(range)) R_item.throw_at(A, range, 2) to_chat(owner, "Your right arm spasms and throws the [R_item.name]!") + r_hand_obj = null /obj/item/organ/internal/cyberimp/brain/anti_drop/proc/release_items() + active = FALSE if(!l_hand_ignore && l_hand_obj in owner.contents) l_hand_obj.flags ^= NODROP if(!r_hand_ignore && r_hand_obj in owner.contents) diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index 2e3c9f7cae0..8ac73bf20d6 100644 Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ diff --git a/icons/mob/inhands/clothing_lefthand.dmi b/icons/mob/inhands/clothing_lefthand.dmi index 69e602fc652..589135b8701 100644 Binary files a/icons/mob/inhands/clothing_lefthand.dmi and b/icons/mob/inhands/clothing_lefthand.dmi differ diff --git a/icons/mob/inhands/clothing_righthand.dmi b/icons/mob/inhands/clothing_righthand.dmi index 3b62b05b314..8fd5f7d71b8 100644 Binary files a/icons/mob/inhands/clothing_righthand.dmi and b/icons/mob/inhands/clothing_righthand.dmi differ diff --git a/icons/mob/species/vox/back.dmi b/icons/mob/species/vox/back.dmi index a2f488122df..a0a8445964a 100644 Binary files a/icons/mob/species/vox/back.dmi and b/icons/mob/species/vox/back.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index c9293cbb7a7..33274c3fdb2 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/rust_g.dll b/rust_g.dll index 80d09ac19ca..9707322d7d1 100644 Binary files a/rust_g.dll and b/rust_g.dll differ