diff --git a/code/__HELPERS/areas.dm b/code/__HELPERS/areas.dm index 8e4c363227..e2249dbb63 100644 --- a/code/__HELPERS/areas.dm +++ b/code/__HELPERS/areas.dm @@ -170,6 +170,7 @@ GLOBAL_LIST_INIT(typecache_powerfailure_safe_areas, typecacheof(/area/engine/eng newA.setup(str) newA.set_dynamic_lighting() newA.has_gravity = oldA.has_gravity + newA.noteleport = oldA.noteleport else newA = area_choice diff --git a/code/datums/components/material_container.dm b/code/datums/components/material_container.dm index 5860bd029b..51dc4ee8f7 100644 --- a/code/datums/components/material_container.dm +++ b/code/datums/components/material_container.dm @@ -73,7 +73,7 @@ if(!material_amount) to_chat(user, "[I] does not contain sufficient materials to be accepted by [parent].") return - if((!precise_insertion || !GLOB.typecache_stack[I]) && !has_space(material_amount)) + if((!precise_insertion || !GLOB.typecache_stack[I.type]) && !has_space(material_amount)) to_chat(user, "[parent] has not enough space. Please remove materials from [parent] in order to insert more.") return user_insert(I, user) diff --git a/code/game/objects/items/tanks/tank_types.dm b/code/game/objects/items/tanks/tank_types.dm index 8f5303da8e..b4c8d8adf0 100644 --- a/code/game/objects/items/tanks/tank_types.dm +++ b/code/game/objects/items/tanks/tank_types.dm @@ -93,11 +93,13 @@ F.update_icon() else return ..() +//Makes empty oxygen tanks spawn without gas +/obj/item/tank/internals/plasma/empty/populate_gas() + return /obj/item/tank/internals/plasma/full/populate_gas() air_contents.gases[/datum/gas/plasma] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) - /* * Plasmaman Plasma Tank */ @@ -130,6 +132,7 @@ air_contents.gases[/datum/gas/plasma] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) return +//makes empty plasma tanks spawn without gas. /obj/item/tank/internals/plasmaman/belt/empty/populate_gas() return diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 1bb4579176..f2b3d1ec9b 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -675,7 +675,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 to_chat(user, "You easily land a critical blow on the [target].") if(istype(target, /mob/living/)) var/mob/living/bug = target - bug.adjustBruteLoss(-35) //What kinda mad man would go into melee with a spider?! + bug.adjustBruteLoss(35) //What kinda mad man would go into melee with a spider?! else qdel(target) diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index 106ae16031..35639bfd97 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -91,6 +91,7 @@ B.organ_flags |= ORGAN_VITAL B.decoy_override = FALSE remove_changeling_powers() + owner.special_role = null . = ..() /datum/antagonist/changeling/proc/remove_clownmut() diff --git a/code/modules/cargo/exports/large_objects.dm b/code/modules/cargo/exports/large_objects.dm index c7a5e59046..2b93a25a61 100644 --- a/code/modules/cargo/exports/large_objects.dm +++ b/code/modules/cargo/exports/large_objects.dm @@ -171,10 +171,10 @@ var/worth = 10 var/gases = C.air_contents.gases - worth += gases[/datum/gas/bz]*4 + worth += gases[/datum/gas/bz]*3 worth += gases[/datum/gas/stimulum]*25 worth += gases[/datum/gas/hypernoblium]*1000 - worth += gases[/datum/gas/miasma]*4 + worth += gases[/datum/gas/miasma]*2 worth += gases[/datum/gas/tritium]*7 worth += gases[/datum/gas/pluoxium]*6 worth += gases[/datum/gas/nitryl]*30 diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index 69bfa6e569..89b70f8951 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -383,6 +383,7 @@ /datum/spacevine_controller/New(turf/location, list/muts, potency, production, datum/round_event/event = null) vines = list() growth_queue = list() + spawn_spacevine_piece(location, null, muts) START_PROCESSING(SSobj, src) vine_mutations_list = list() init_subtypes(/datum/spacevine_mutation/, vine_mutations_list) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 4e3093dda2..aab741edd6 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -285,8 +285,6 @@ . = ..() var/turf/ai = get_turf(src) var/turf/target = get_turf(A) - if (.) - return if(!target) return diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index e45483569e..4aeefde6d4 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -25,7 +25,7 @@ else icon_state = "[initial(icon_state)][suppressed ? "-suppressed" : ""][sawn_off ? "-sawn" : ""]" -/obj/item/gun/ballistic/process_chamber(empty_chamber = 1) +/obj/item/gun/ballistic/process_chamber(mob/living/user, empty_chamber = 1) var/obj/item/ammo_casing/AC = chambered //Find chambered round if(istype(AC)) //there's a chambered round if(casing_ejector) diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 17f5cc4262..a182ce2e35 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -23,7 +23,7 @@ A.update_icon() update_icon() -/obj/item/gun/ballistic/shotgun/process_chamber(empty_chamber = 0) +/obj/item/gun/ballistic/shotgun/process_chamber(mob/living/user, empty_chamber = 0) return ..() //changed argument value /obj/item/gun/ballistic/shotgun/chamber_round() diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm index 4060a02c0f..5cdd773894 100644 --- a/code/modules/projectiles/guns/ballistic/toy.dm +++ b/code/modules/projectiles/guns/ballistic/toy.dm @@ -57,7 +57,7 @@ casing_ejector = FALSE can_suppress = FALSE -/obj/item/gun/ballistic/shotgun/toy/process_chamber(empty_chamber = 0) +/obj/item/gun/ballistic/shotgun/toy/process_chamber(mob/living/user, empty_chamber = 0) ..() if(chambered && !chambered.BB) qdel(chambered) diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm index e9af465c8a..9b44264b07 100644 --- a/code/modules/research/designs/misc_designs.dm +++ b/code/modules/research/designs/misc_designs.dm @@ -707,3 +707,57 @@ build_path = /obj/item/clothing/gloves/tackler/rocket category = list("Equipment") departmental_flags = DEPARTMENTAL_FLAG_SECURITY + +///////////////////////////////////////// +/////////////Internal Tanks////////////// +///////////////////////////////////////// + +/datum/design/oxygen_tank + name = "Oxygen Tank" + desc = "An empty oxygen tank." + id = "oxygen_tank" + build_type = PROTOLATHE + materials = list(/datum/material/iron = 2000) + build_path = /obj/item/tank/internals/oxygen/empty + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/plasma_tank + name = "Plasma Tank" + desc = "An empty plasma tank." + id = "plasma_tank" + build_type = PROTOLATHE + materials = list(/datum/material/iron = 2000) + build_path = /obj/item/tank/internals/plasma/empty + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/emergency_oxygen + name = "Emergency Oxygen Tank" + desc = "A small emergency oxygen tank." + id = "emergency_oxygen" + build_type = PROTOLATHE + materials = list(/datum/material/iron = 1000) + build_path = /obj/item/tank/internals/emergency_oxygen/empty + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/plasma_belt_tank + name = "Plasmaman Belt Tank" + desc = "A small tank of plasma for plasmamen." + id = "plasmaman_tank_belt" + build_type = PROTOLATHE + materials = list(/datum/material/iron = 1000) + build_path = /obj/item/tank/internals/plasmaman/belt/empty + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/emergency_oxygen_engi + name = "Engineering Emergency Oxygen Tank" + desc = "An emergency oxygen tank for engineers." + id = "emergency_oxygen_engi" + build_type = PROTOLATHE + materials = list(/datum/material/iron = 1000) + build_path = /obj/item/tank/internals/emergency_oxygen/engi/empty + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING \ No newline at end of file diff --git a/code/modules/research/techweb/nodes/engineering_nodes.dm b/code/modules/research/techweb/nodes/engineering_nodes.dm index 2ab5458028..eac8c2faf2 100644 --- a/code/modules/research/techweb/nodes/engineering_nodes.dm +++ b/code/modules/research/techweb/nodes/engineering_nodes.dm @@ -7,7 +7,8 @@ prereq_ids = list("base") design_ids = list("solarcontrol", "recharger", "powermonitor", "rped", "pacman", "adv_capacitor", "adv_scanning", "emitter", "high_cell", "adv_matter_bin", "atmosalerts", "atmos_control", "recycler", "autolathe", "autolathe_secure", "high_micro_laser", "nano_mani", "mesons", "thermomachine", "rad_collector", "tesla_coil", "grounding_rod", - "apc_control", "power control", "airlock_board", "firelock_board", "airalarm_electronics", "firealarm_electronics", "cell_charger", "stack_console", "stack_machine", "rcd_ammo") + "apc_control", "power control", "airlock_board", "firelock_board", "airalarm_electronics", "firealarm_electronics", "cell_charger", "stack_console", "stack_machine", "rcd_ammo","oxygen_tank", + "plasma_tank", "emergency_oxygen", "emergency_oxygen_engi", "plasmaman_tank_belt") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 6000) /datum/techweb_node/adv_engi diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm index 04f2de9bec..adf53ff0da 100644 --- a/code/modules/security_levels/keycard_authentication.dm +++ b/code/modules/security_levels/keycard_authentication.dm @@ -20,6 +20,7 @@ GLOBAL_DATUM_INIT(keycard_events, /datum/events, new) var/event = "" var/obj/machinery/keycard_auth/event_source var/mob/triggerer = null + var/obj/item/card/id/first_id = null var/waiting = 0 /obj/machinery/keycard_auth/Initialize() @@ -56,32 +57,37 @@ GLOBAL_DATUM_INIT(keycard_events, /datum/events, new) return ..() /obj/machinery/keycard_auth/ui_act(action, params) - if(..() || waiting || !allowed(usr)) + if(..() || waiting) + return + var/obj/item/card/id/ID = usr.get_idcard(TRUE) + if(!ID || !istype(ID)) + return + if(!check_access(ID)) return switch(action) if("red_alert") if(!event_source) - sendEvent(KEYCARD_RED_ALERT) + sendEvent(KEYCARD_RED_ALERT, ID) . = TRUE if("emergency_maint") if(!event_source) - sendEvent(KEYCARD_EMERGENCY_MAINTENANCE_ACCESS) + sendEvent(KEYCARD_EMERGENCY_MAINTENANCE_ACCESS, ID) . = TRUE if("auth_swipe") - if(event_source) + if(event_source && ID != first_id && first_id) event_source.trigger_event(usr) event_source = null . = TRUE if("bsa_unlock") if(!event_source) - sendEvent(KEYCARD_BSA_UNLOCK) + sendEvent(KEYCARD_BSA_UNLOCK, ID) . = TRUE -/obj/machinery/keycard_auth/proc/sendEvent(event_type) +/obj/machinery/keycard_auth/proc/sendEvent(event_type, trigger_id) triggerer = usr event = event_type waiting = 1 - GLOB.keycard_events.fireEvent("triggerEvent", src) + GLOB.keycard_events.fireEvent("triggerEvent", src, trigger_id) addtimer(CALLBACK(src, .proc/eventSent), 20) /obj/machinery/keycard_auth/proc/eventSent() @@ -89,14 +95,16 @@ GLOBAL_DATUM_INIT(keycard_events, /datum/events, new) event = "" waiting = 0 -/obj/machinery/keycard_auth/proc/triggerEvent(source) +/obj/machinery/keycard_auth/proc/triggerEvent(source, trigger_id) icon_state = "auth_on" + first_id = trigger_id event_source = source addtimer(CALLBACK(src, .proc/eventTriggered), 20) /obj/machinery/keycard_auth/proc/eventTriggered() icon_state = "auth_off" event_source = null + first_id = null /obj/machinery/keycard_auth/proc/trigger_event(confirmer) log_game("[key_name(triggerer)] triggered and [key_name(confirmer)] confirmed event [event]") diff --git a/html/changelog.html b/html/changelog.html index cc419e13fb..c04920ec85 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,30 @@ -->