diff --git a/auxmos.dll b/auxmos.dll index 52e01b515a..d16063c4e4 100644 Binary files a/auxmos.dll and b/auxmos.dll differ diff --git a/auxmos.pdb b/auxmos.pdb index 0f5a534a12..86b751346e 100644 Binary files a/auxmos.pdb and b/auxmos.pdb differ diff --git a/code/datums/atmosphere/planetary.dm b/code/datums/atmosphere/planetary.dm index f1d2e85755..081777a247 100644 --- a/code/datums/atmosphere/planetary.dm +++ b/code/datums/atmosphere/planetary.dm @@ -7,9 +7,9 @@ GAS_N2=10, ) normal_gases = list( - GAS_O2=10, - GAS_N2=10, - GAS_CO2=10, + GAS_O2=5, + GAS_N2=5, + GAS_CO2=5, ) restricted_gases = list( GAS_BZ=0.1, diff --git a/code/datums/components/crafting/recipes/recipes_primal.dm b/code/datums/components/crafting/recipes/recipes_primal.dm index 73401a4198..ad71db7c59 100644 --- a/code/datums/components/crafting/recipes/recipes_primal.dm +++ b/code/datums/components/crafting/recipes/recipes_primal.dm @@ -295,6 +295,16 @@ /obj/item/stack/sheet/sinew = 1) category = CAT_PRIMAL +/datum/crafting_recipe/bone_anvil + name = "Bone Anvil" + result = /obj/structure/anvil/obtainable/bone + time = 200 + reqs = list(/obj/item/stack/sheet/bone = 6, + /obj/item/stack/sheet/sinew = 2, + /obj/item/stack/sheet/animalhide/goliath_hide = 2) + tools = list(/obj/item/weldingtool/experimental/ashwalker, /obj/item/wirecutters/ashwalker, /obj/item/crowbar/ashwalker) + category = CAT_PRIMAL + /datum/crafting_recipe/bone_glaive name = "Necropolis Glaive" result = /obj/item/kinetic_crusher/glaive/bone diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm index a6496622ff..5bf6b8642c 100644 --- a/code/datums/materials/basemats.dm +++ b/code/datums/materials/basemats.dm @@ -362,6 +362,7 @@ Unless you know what you're doing, only use the first three numbers. They're in color = "#e3dac9" categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) sheet_type = /obj/item/stack/sheet/bone + strength_modifier = 1.05 value_per_unit = 0.05 armor_modifiers = list("melee" = 1.2, "bullet" = 0.75, "laser" = 0.75, "energy" = 1.2, "bomb" = 1, "bio" = 1, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5) beauty_modifier = -0.2 diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 504bff9e29..968f6fb354 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -761,7 +761,8 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \ GLOBAL_LIST_INIT(bone_recipes, list( new /datum/stack_recipe("Bone Dagger", /obj/item/kitchen/knife/combat/bone, 2, time = 20), \ new /datum/stack_recipe("Skull Helmet", /obj/item/clothing/head/helmet/skull, 4, time = 30), \ - new /datum/stack_recipe("Bone Armor", /obj/item/clothing/suit/armor/bone, 6, time = 30))) + new /datum/stack_recipe("Bone Armor", /obj/item/clothing/suit/armor/bone, 6, time = 30),\ + new /datum/stack_recipe("Processable Bone", /obj/item/ingot/bone, 2, time = 20))) /obj/item/stack/sheet/bone name = "bones" diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 78be1c9ea5..f721bcc5fc 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -161,13 +161,14 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) var/client/initiator //semi-misnomer, it's the person who ahelped/was bwoinked var/initiator_ckey var/initiator_key_name - var/heard_by_no_admins = FALSE var/list/_interactions //use AddInteraction() or, preferably, admin_ticket_log() var/obj/effect/statclick/ahelp/statclick var/static/ticket_counter = 0 + /// did we send "answered" to irc yet + var/answered = FALSE //call this on its own to create a ticket, don't manually assign current_ticket //msg is the title of the ticket: usually the ahelp text @@ -209,7 +210,6 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) log_admin_private("Ticket #[id]: [key_name(initiator)]: [name] - heard by [admin_number_present] non-AFK admins who have +BAN.") if(admin_number_present <= 0) to_chat(C, "No active admins are online, your adminhelp was sent to the admin irc.") - heard_by_no_admins = TRUE else // citadel edit: send anyways send2adminchat(initiator_ckey, "Ticket #[id]: [name] - Heard by [admin_number_present] admins present with +BAN.") @@ -223,9 +223,8 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) return ..() /datum/admin_help/proc/AddInteraction(formatted_message) - // if(heard_by_no_admins usr && usr.ckey != initiator_ckey) - // heard_by_no_admins = FALSE - if(usr && (usr.ckey != initiator_ckey)) + if(usr && (usr.ckey != initiator_ckey) && !answered) + answered = TRUE send2adminchat(initiator_ckey, "Ticket #[id]: Answered by [key_name(usr)]") _interactions += "[TIME_STAMP("hh:mm:ss", FALSE)]: [formatted_message]" diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index 806126e684..2313d9c71d 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -403,6 +403,9 @@ if("incheck") send_signal(device_id, list("checks" = text2num(params["val"])^2), usr) . = TRUE + if("direction") + send_signal(device_id, list("direction" = text2num(params["val"])), usr) + . = TRUE if("set_external_pressure", "set_internal_pressure") var/target = params["value"] diff --git a/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm b/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm index c0dfc5633e..4ad3bbf575 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm @@ -12,6 +12,8 @@ var/obj/machinery/atmospherics/components/unary/heat_exchanger/partner = null var/update_cycle + var/old_temperature = 0 + var/other_old_temperature = 0 pipe_state = "heunary" @@ -59,9 +61,6 @@ var/other_air_heat_capacity = partner_air_contents.heat_capacity() var/combined_heat_capacity = other_air_heat_capacity + air_heat_capacity - var/old_temperature = air_contents.return_temperature() - var/other_old_temperature = partner_air_contents.return_temperature() - if(combined_heat_capacity > 0) var/combined_energy = partner_air_contents.return_temperature()*other_air_heat_capacity + air_heat_capacity*air_contents.return_temperature() @@ -71,6 +70,8 @@ if(abs(old_temperature-air_contents.return_temperature()) > 1) update_parents() + old_temperature = air_contents.return_temperature() if(abs(other_old_temperature-partner_air_contents.return_temperature()) > 1) partner.update_parents() + other_old_temperature = partner_air_contents.return_temperature() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index 1a53a5299f..a3644ed084 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -144,7 +144,7 @@ "device" = "VP", "timestamp" = world.time, "power" = on, - "direction" = pump_direction ? "release" : "siphon", + "direction" = pump_direction, "checks" = pressure_checks, "internal" = internal_pressure_bound, "external" = external_pressure_bound, diff --git a/code/modules/events/operative.dm b/code/modules/events/operative.dm index 4ad307731e..6ef693a886 100644 --- a/code/modules/events/operative.dm +++ b/code/modules/events/operative.dm @@ -3,7 +3,6 @@ typepath = /datum/round_event/ghost_role/operative weight = 0 //Admin only max_occurrences = 1 - dynamic_should_hijack = TRUE /datum/round_event/ghost_role/operative minimum_required = 1 diff --git a/code/modules/events/pirates.dm b/code/modules/events/pirates.dm index f9ad5d6322..31859b4fc0 100644 --- a/code/modules/events/pirates.dm +++ b/code/modules/events/pirates.dm @@ -24,7 +24,7 @@ var/pirate_type = PIRATES_ROGUES //pick(PIRATES_ROGUES, PIRATES_SILVERSCALES, PIRATES_DUTCHMAN) var/datum/comm_message/threat_msg = new var/payoff = 0 - var/payoff_min = 1000 + var/payoff_min = 10000 //documented this time var/ship_template var/ship_name = "Space Privateers Association" var/initial_send_time = world.time diff --git a/code/modules/jobs/job_types/prisoner.dm b/code/modules/jobs/job_types/prisoner.dm index ec65d75835..ef2ad0fc27 100644 --- a/code/modules/jobs/job_types/prisoner.dm +++ b/code/modules/jobs/job_types/prisoner.dm @@ -5,7 +5,7 @@ department_flag = CIVILIAN faction = "Station" total_positions = 0 - spawn_positions = 4 + spawn_positions = 0 supervisors = "the security team" outfit = /datum/outfit/job/prisoner diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index 45f1b1d94e..2149967049 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -235,6 +235,9 @@ icon_state = "crusher-bone" item_state = "crusher0-bone" +/obj/item/kinetic_crusher/glaive/bone/update_icon_state() + item_state = "crusher[wielded]-bone" + //destablizing force /obj/item/projectile/destabilizer name = "destabilizing force" diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index fc51915b73..5d7bb9a8b6 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -358,8 +358,16 @@ var/obj/singularity/energy_ball/tesla = source if(istype(tesla)) if(istype(closest_atom,/obj/machinery/power/grounding_rod) && tesla.energy>13 && !tesla.contained) - qdel(closest_atom) // each rod deletes two miniballs, - tesla.energy = round(tesla.energy/1.5625) // if there are no miniballs the rod stays and continues to pull the ball in + + // getting the grounding rod's capacitor rating for quick maths + var/obj/machinery/power/grounding_rod/rod = closest_atom + // assuming the rod is fully constructed the second part will always be a capacitor + var/obj/item/stock_parts/capacitor/capacitor = rod.component_parts[2] + + tesla.energy = round(tesla.energy/(1 + 0.28125 * capacitor.rating)) + qdel(closest_atom) // each rod removes tesla energy depending on the power of the capacitor, + // if there are no miniballs the rod stays and continues to pull the ball in + if(prob(20))//I know I know tesla_zap(closest_atom, next_range, power * 0.5, zap_flags, shocked_targets) tesla_zap(closest_atom, next_range, power * 0.5, zap_flags, shocked_targets) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index b796edabbf..9dffc883d4 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -286,6 +286,13 @@ anvilquality = 0 itemqualitymax = 6 +/obj/structure/anvil/obtainable/bone + name = "bone anvil" + desc = "An anvil. It's made of goliath bones and hide and held together by watcher sinews." + icon_state = "bonevil" + anvilquality = 0 + itemqualitymax = 6 + /obj/structure/anvil/obtainable/ratvar name = "brass anvil" desc = "A big block of what appears to be brass. Useable as an anvil, if whatever's holding the brass together lets you." diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index 71e35ba989..3453cafda3 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -49,6 +49,9 @@ /obj/item/ingot/iron custom_materials = list(/datum/material/iron=12000) +/obj/item/ingot/bone + custom_materials = list(/datum/material/bone=4000) + /obj/item/ingot/diamond custom_materials = list(/datum/material/diamond=12000) diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index 5c914e3d4d..897c7610a1 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -530,8 +530,8 @@ gas_max[GAS_N2] = PP(breath, GAS_N2) + 5 var/datum/breathing_class/class = GLOB.gas_data.breathing_classes[breathing_class] var/o2_pp = class.get_effective_pp(breath) - safe_breath_min = 0.3 * o2_pp - safe_breath_max = 1.3 * o2_pp + safe_breath_min = min(3, 0.3 * o2_pp) + safe_breath_max = max(18, 1.3 * o2_pp + 1) ..() #undef SAFE_THRESHOLD_RATIO diff --git a/code/modules/vehicles/cars/clowncar.dm b/code/modules/vehicles/cars/clowncar.dm index c4da65a902..f65df26488 100644 --- a/code/modules/vehicles/cars/clowncar.dm +++ b/code/modules/vehicles/cars/clowncar.dm @@ -90,7 +90,7 @@ playsound(src, pick('sound/vehicles/clowncar_ram1.ogg', 'sound/vehicles/clowncar_ram2.ogg', 'sound/vehicles/clowncar_ram3.ogg'), 75) log_combat(src, hittarget_living, "sucked up") return - if(!istype(bumped, /turf/closed)) + if(!istype(bumped, /turf/closed) && !istype(bumped, /obj/machinery/door/airlock/external)) return visible_message(span_warning("[src] rams into [bumped] and crashes!")) playsound(src, pick('sound/vehicles/clowncar_crash1.ogg', 'sound/vehicles/clowncar_crash2.ogg'), 75) @@ -237,6 +237,11 @@ for(var/mob/busdriver as anything in return_drivers()) busdriver.client.give_award(/datum/award/achievement/misc/the_best_driver, busdriver) +/obj/vehicle/sealed/car/clowncar/driver_move(mob/user, direction) //Prevent it from moving onto space + if(isspaceturf(get_step(src, direction))) + return FALSE + return ..() + /obj/vehicle/sealed/car/clowncar/twitch_plays key_type = null explode_on_death = FALSE diff --git a/html/changelog.html b/html/changelog.html index 51b4091b78..2b6407735e 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,69 @@ -->