diff --git a/code/datums/agents/tools/tracker.dm b/code/datums/agents/tools/tracker.dm
index 1d6d6d4801b4..508db286b970 100644
--- a/code/datums/agents/tools/tracker.dm
+++ b/code/datums/agents/tools/tracker.dm
@@ -12,7 +12,7 @@
overlays.Cut()
if(active && tracked_object)
- overlays += icon(icon, "+tracker_arrow", get_dir(src, tracked_object))
+ overlays += icon(icon, "+tracker_arrow", Get_Compass_Dir(src, tracked_object))
/obj/item/device/tracker/attack_self(mob/user)
if(!skillcheckexplicit(user, SKILL_ANTAG, SKILL_ANTAG_AGENT))
diff --git a/code/datums/supply_packs/black_market.dm b/code/datums/supply_packs/black_market.dm
index 1af965898548..36d890e2b3d5 100644
--- a/code/datums/supply_packs/black_market.dm
+++ b/code/datums/supply_packs/black_market.dm
@@ -749,8 +749,8 @@ This is where the RO can reclaim their lost honor and purchase the M44 custom, t
dollar_cost = 10
containertype = /obj/structure/largecrate/black_market
-/datum/supply_packs/contraband/deep_storage/xm42b_pipe
- name = "10x99mm XM42B casing"
+/datum/supply_packs/contraband/deep_storage/xm43e1_pipe
+ name = "10x99mm XM43E1 casing"
contains = list(/obj/item/prop/helmetgarb/bullet_pipe)
dollar_cost = 10
containertype = /obj/structure/largecrate/black_market
diff --git a/code/datums/supply_packs/spec_ammo.dm b/code/datums/supply_packs/spec_ammo.dm
index 7931a4d40204..e20a5de865a3 100644
--- a/code/datums/supply_packs/spec_ammo.dm
+++ b/code/datums/supply_packs/spec_ammo.dm
@@ -109,10 +109,10 @@
containername = "M42A Incendiary Magazine Crate"
group = "Weapons Specialist Ammo"
-//XM42B - Disabled during testing per request.
+//XM43E1 - Disabled during testing per request.
/*
/datum/supply_packs/ammo_amr_marksman
- name = "XM42B anti-materiel rifle marksman magazines crate (x5)"
+ name = "XM43E1 anti-materiel rifle marksman magazines crate (x5)"
contains = list(
/obj/item/ammo_magazine/sniper/anti_materiel,
/obj/item/ammo_magazine/sniper/anti_materiel,
@@ -122,7 +122,7 @@
)
cost = 30
containertype = /obj/structure/closet/crate/ammo
- containername = "XM42B Anti-Materiel Magazine Crate"
+ containername = "XM43E1 Anti-Materiel Magazine Crate"
group = "Specialist Ammo"
*/
//M4RA
diff --git a/code/game/cas_manager/datums/cas_fire_mission.dm b/code/game/cas_manager/datums/cas_fire_mission.dm
index 0a04876414e7..cb43caec30bb 100644
--- a/code/game/cas_manager/datums/cas_fire_mission.dm
+++ b/code/game/cas_manager/datums/cas_fire_mission.dm
@@ -114,7 +114,7 @@
if(get_turf(M) == initial_turf)
relative_dir = 0
else
- relative_dir = get_dir(M, initial_turf)
+ relative_dir = Get_Compass_Dir(M, initial_turf)
var/ds_identifier = "LARGE BIRD"
if (M.mob_flags & KNOWS_TECHNOLOGY)
@@ -132,7 +132,7 @@
if(get_turf(M) == initial_turf)
relative_dir = 0
else
- relative_dir = get_dir(M, initial_turf)
+ relative_dir = Get_Compass_Dir(M, initial_turf)
var/ds_identifier = "LARGE BIRD"
if (M.mob_flags & KNOWS_TECHNOLOGY)
diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm
index 8b73588f1d0b..5d6c66309d48 100644
--- a/code/game/machinery/door_control.dm
+++ b/code/game/machinery/door_control.dm
@@ -64,7 +64,7 @@
if(is_mainship_level(z)) // on the almayer
return
- shuttle.control_doors("lock", "all", force=FALSE)
+ shuttle.control_doors("force-lock", "all", force=FALSE)
/obj/structure/machinery/door_control/proc/handle_door()
for(var/obj/structure/machinery/door/airlock/D in range(range))
diff --git a/code/game/machinery/doors/multi_tile.dm b/code/game/machinery/doors/multi_tile.dm
index ca218128160d..0a179af27803 100644
--- a/code/game/machinery/doors/multi_tile.dm
+++ b/code/game/machinery/doors/multi_tile.dm
@@ -275,6 +275,17 @@
name = "\improper Normandy cargo door"
icon = 'icons/obj/structures/doors/dropship2_cargo.dmi'
+/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside
+ width = 2
+
+/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds1
+ name = "\improper Alamo crew hatch"
+ icon = 'icons/obj/structures/doors/dropship1_side2.dmi'
+
+/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds2
+ name = "\improper Normandy crew hatch"
+ icon = 'icons/obj/structures/doors/dropship2_side2.dmi'
+
/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/blastdoor
name = "bulkhead blast door"
icon = 'icons/obj/structures/doors/almayerblastdoor.dmi'
diff --git a/code/game/objects/effects/landmarks/corpsespawner.dm b/code/game/objects/effects/landmarks/corpsespawner.dm
index fe338bceabfe..27a717f58ba8 100644
--- a/code/game/objects/effects/landmarks/corpsespawner.dm
+++ b/code/game/objects/effects/landmarks/corpsespawner.dm
@@ -135,7 +135,7 @@
/obj/effect/landmark/corpsespawner/wy/manager/burst
name = "Burst Corporate Supervisor"
- equip_path = /datum/equipment_preset/corpse/ua_riot/burst
+ equip_path = /datum/equipment_preset/corpse/wy/manager/burst
///////////Faction Specific Corpses//////////////////////
diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm
index 273ced980b44..a92135b9d7ed 100644
--- a/code/game/objects/items/devices/multitool.dm
+++ b/code/game/objects/items/devices/multitool.dm
@@ -53,8 +53,8 @@
var/area/A = get_area(src)
var/APC = A? A.get_apc() : null
if(APC)
- to_chat(user, SPAN_NOTICE("The local APC is located at [SPAN_BOLD("[get_dist(src, APC)] units [dir2text(get_dir(src, APC))]")]."))
- user.balloon_alert(user, "[get_dist(src, APC)] units [dir2text(get_dir(src, APC))]")
+ to_chat(user, SPAN_NOTICE("The local APC is located at [SPAN_BOLD("[get_dist(src, APC)] units [dir2text(Get_Compass_Dir(src, APC))]")]."))
+ user.balloon_alert(user, "[get_dist(src, APC)] units [dir2text(Get_Compass_Dir(src, APC))]")
else
to_chat(user, SPAN_WARNING("ERROR: Could not locate local APC."))
user.balloon_alert(user, "could not locate!")
diff --git a/code/game/objects/items/devices/personal_data_transmitter.dm b/code/game/objects/items/devices/personal_data_transmitter.dm
index 6e8aa001cad3..98f8c60452ea 100644
--- a/code/game/objects/items/devices/personal_data_transmitter.dm
+++ b/code/game/objects/items/devices/personal_data_transmitter.dm
@@ -122,7 +122,7 @@
return
var/dist = get_dist(self_turf, bracelet_turf)
- var/direction = dir2text_short(get_dir(self_turf, bracelet_turf))
+ var/direction = dir2text_short(Get_Compass_Dir(self_turf, bracelet_turf))
if(dist > 1)
to_chat(user, SPAN_BOLDNOTICE("The display on \the [src] lights up: [dist]-[direction]"))
else
diff --git a/code/game/objects/items/devices/pinpointer.dm b/code/game/objects/items/devices/pinpointer.dm
index 7ec3118ef96b..8a624d616d5b 100644
--- a/code/game/objects/items/devices/pinpointer.dm
+++ b/code/game/objects/items/devices/pinpointer.dm
@@ -31,7 +31,7 @@
if(!the_disk)
icon_state = "pinonnull"
return
- setDir(get_dir(src,the_disk))
+ setDir(Get_Compass_Dir(src,the_disk))
switch(get_dist(src,the_disk))
if(0)
icon_state = "pinondirect"
@@ -80,7 +80,7 @@
if(!location)
icon_state = "pinonnull"
return
- setDir(get_dir(src,location))
+ setDir(Get_Compass_Dir(src,location))
switch(get_dist(src,location))
if(0)
icon_state = "pinondirect"
@@ -99,7 +99,7 @@
if(!target)
icon_state = "pinonnull"
return
- setDir(get_dir(src,target))
+ setDir(Get_Compass_Dir(src,target))
switch(get_dist(src,target))
if(0)
icon_state = "pinondirect"
diff --git a/code/game/objects/items/props/helmetgarb.dm b/code/game/objects/items/props/helmetgarb.dm
index 35558bf01925..7860236d5d51 100644
--- a/code/game/objects/items/props/helmetgarb.dm
+++ b/code/game/objects/items/props/helmetgarb.dm
@@ -502,8 +502,8 @@
icon_state = "trimmed_wire"
/obj/item/prop/helmetgarb/bullet_pipe
- name = "10x99mm XM42B casing pipe"
- desc = "The XM42B was an experimental weapons platform briefly fielded by the USCM and Wey-Yu PMC teams. It was manufactured by ARMAT systems at the Atlas weapons facility. Unfortunately the project had its funding pulled alongside the M5 integrated gasmask program. This spent casing has been converted into a pipe, but there is too much tar in the mouthpiece for it to be useable."
+ name = "10x99mm XM43E1 casing pipe"
+ desc = "The XM43E1 was an experimental weapons platform briefly fielded by the USCM and Wey-Yu PMC teams. It was manufactured by ARMAT systems at the Atlas weapons facility. Unfortunately the project had its funding pulled alongside the M5 integrated gasmask program. This spent casing has been converted into a pipe, but there is too much tar in the mouthpiece for it to be useable."
icon_state = "bullet_pipe"
/obj/item/prop/helmetgarb/chaplain_patch
diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm
index 7b54f0447fae..e4ee4a1b662b 100644
--- a/code/game/objects/structures/extinguisher.dm
+++ b/code/game/objects/structures/extinguisher.dm
@@ -5,13 +5,15 @@
icon_state = "extinguisher"
anchored = TRUE
density = FALSE
- var/obj/item/tool/extinguisher/has_extinguisher = new/obj/item/tool/extinguisher
+ var/obj/item/tool/extinguisher/has_extinguisher
var/opened = 0
var/base_icon
/obj/structure/extinguisher_cabinet/Initialize()
. = ..()
base_icon = initial(icon_state)
+ has_extinguisher = new /obj/item/tool/extinguisher()
+ has_extinguisher.forceMove(src)
/obj/structure/extinguisher_cabinet/lifeboat
name = "extinguisher cabinet"
@@ -21,15 +23,15 @@
/obj/structure/extinguisher_cabinet/alt
icon_state = "extinguisher_alt"
-/obj/structure/extinguisher_cabinet/attackby(obj/item/O, mob/user)
+/obj/structure/extinguisher_cabinet/attackby(obj/item/item, mob/user)
if(isrobot(user))
return
- if(istype(O, /obj/item/tool/extinguisher))
+ if(istype(item, /obj/item/tool/extinguisher))
if(!has_extinguisher && opened)
user.drop_held_item()
- contents += O
- has_extinguisher = O
- to_chat(user, SPAN_NOTICE("You place [O] in [src]."))
+ item.forceMove(src)
+ has_extinguisher = item
+ to_chat(user, SPAN_NOTICE("You place [item] in [src]."))
else
opened = !opened
else
@@ -45,7 +47,7 @@
user.put_in_hands(has_extinguisher)
to_chat(user, SPAN_NOTICE("You take [has_extinguisher] from [src]."))
has_extinguisher = null
- opened = 1
+ opened = TRUE
else
opened = !opened
update_icon()
diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm
index 8a249d297cbe..faa857f8518f 100644
--- a/code/game/verbs/who.dm
+++ b/code/game/verbs/who.dm
@@ -160,7 +160,7 @@
if(CONFIG_GET(flag/show_manager))
LAZYSET(mappings, "Management", R_PERMISSIONS)
if(CONFIG_GET(flag/show_devs))
- LAZYSET(mappings, "Maintainers", R_PROFILER)
+ LAZYSET(mappings, "Maintainers", R_PROFILER)
LAZYSET(mappings, "Admins", R_ADMIN)
if(CONFIG_GET(flag/show_mods))
LAZYSET(mappings, "Moderators", R_MOD)
diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm
index 4b937b0135b3..629f507f01ed 100644
--- a/code/modules/client/preferences_gear.dm
+++ b/code/modules/client/preferences_gear.dm
@@ -350,7 +350,7 @@ var/global/list/gear_datums_by_name = list()
path = /obj/item/prop/helmetgarb/trimmed_wire
/datum/gear/helmet_garb/bullet_pipe
- display_name = "10x99mm XM42B casing pipe"
+ display_name = "10x99mm XM43E1 casing pipe"
path = /obj/item/prop/helmetgarb/bullet_pipe
allowed_origins = USCM_ORIGINS
diff --git a/code/modules/cm_marines/equipment/mortar/mortars.dm b/code/modules/cm_marines/equipment/mortar/mortars.dm
index 86bc3f5917c0..a4d4cfdc1bf5 100644
--- a/code/modules/cm_marines/equipment/mortar/mortars.dm
+++ b/code/modules/cm_marines/equipment/mortar/mortars.dm
@@ -314,7 +314,7 @@
if(get_turf(M) == target)
relative_dir = 0
else
- relative_dir = get_dir(M, target)
+ relative_dir = Get_Compass_Dir(M, target)
M.show_message( \
SPAN_DANGER("A SHELL IS COMING DOWN [SPAN_UNDERLINE(relative_dir ? uppertext(("TO YOUR " + dir2text(relative_dir))) : uppertext("right above you"))]!"), SHOW_MESSAGE_VISIBLE, \
SPAN_DANGER("YOU HEAR SOMETHING COMING DOWN [SPAN_UNDERLINE(relative_dir ? uppertext(("TO YOUR " + dir2text(relative_dir))) : uppertext("right above you"))]!"), SHOW_MESSAGE_AUDIBLE \
@@ -324,7 +324,7 @@
if(get_turf(M) == target)
relative_dir = 0
else
- relative_dir = get_dir(M, target)
+ relative_dir = Get_Compass_Dir(M, target)
M.show_message( \
SPAN_HIGHDANGER("A SHELL IS ABOUT TO IMPACT [SPAN_UNDERLINE(relative_dir ? uppertext(("TO YOUR " + dir2text(relative_dir))) : uppertext("right above you"))]!"), SHOW_MESSAGE_VISIBLE, \
SPAN_HIGHDANGER("YOU HEAR SOMETHING VERY CLOSE COMING DOWN [SPAN_UNDERLINE(relative_dir ? uppertext(("TO YOUR " + dir2text(relative_dir))) : uppertext("right above you"))]!"), SHOW_MESSAGE_AUDIBLE \
diff --git a/code/modules/cm_marines/orbital_cannon.dm b/code/modules/cm_marines/orbital_cannon.dm
index edcb5a836b5d..45701c3b593c 100644
--- a/code/modules/cm_marines/orbital_cannon.dm
+++ b/code/modules/cm_marines/orbital_cannon.dm
@@ -397,7 +397,7 @@ var/list/ob_type_fuel_requirements
if(get_turf(M) == target)
relative_dir = 0
else
- relative_dir = get_dir(M, target)
+ relative_dir = Get_Compass_Dir(M, target)
M.show_message( \
SPAN_HIGHDANGER("The sky erupts into flames [SPAN_UNDERLINE(relative_dir ? ("to the " + dir2text(relative_dir)) : "right above you")]!"), SHOW_MESSAGE_VISIBLE, \
SPAN_HIGHDANGER("You hear a very loud sound coming from above to the [SPAN_UNDERLINE(relative_dir ? ("to the " + dir2text(relative_dir)) : "right above you")]!"), SHOW_MESSAGE_AUDIBLE \
@@ -408,7 +408,7 @@ var/list/ob_type_fuel_requirements
if(get_turf(M) == target)
relative_dir = 0
else
- relative_dir = get_dir(M, target)
+ relative_dir = Get_Compass_Dir(M, target)
M.show_message( \
SPAN_HIGHDANGER("The sky roars louder [SPAN_UNDERLINE(relative_dir ? ("to the " + dir2text(relative_dir)) : "right above you")]!"), SHOW_MESSAGE_VISIBLE, \
SPAN_HIGHDANGER("The sound becomes louder [SPAN_UNDERLINE(relative_dir ? ("to the " + dir2text(relative_dir)) : "right above you")]!"), SHOW_MESSAGE_AUDIBLE \
diff --git a/code/modules/cm_marines/overwatch.dm b/code/modules/cm_marines/overwatch.dm
index 3cf33ebd391e..ab084cb52b79 100644
--- a/code/modules/cm_marines/overwatch.dm
+++ b/code/modules/cm_marines/overwatch.dm
@@ -205,7 +205,7 @@
acting_sl = " (acting SL)"
is_squad_leader = TRUE
else if(current_turf && (current_turf.z == SL_z))
- distance = "[get_dist(marine_human, current_squad.squad_leader)] ([dir2text_short(get_dir(current_squad.squad_leader, marine_human))])"
+ distance = "[get_dist(marine_human, current_squad.squad_leader)] ([dir2text_short(Get_Compass_Dir(current_squad.squad_leader, marine_human))])"
switch(marine_human.stat)
diff --git a/code/modules/cm_phone/phone.dm b/code/modules/cm_phone/phone.dm
index fd9c8aa02d44..b4f13044bc20 100644
--- a/code/modules/cm_phone/phone.dm
+++ b/code/modules/cm_phone/phone.dm
@@ -26,6 +26,8 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter)
var/enabled = TRUE
/// Whether or not the phone is receiving calls or not. Varies between on/off or forcibly on/off.
var/do_not_disturb = PHONE_DND_OFF
+ /// The Phone_ID of the last person to call this telephone.
+ var/last_caller
var/base_icon_state
@@ -138,6 +140,7 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter)
var/list/data = list()
data["availability"] = do_not_disturb
+ data["last_caller"] = last_caller
return data
@@ -175,6 +178,7 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter)
calling = T
T.caller = src
+ T.last_caller = src.phone_id
T.update_icon()
to_chat(user, SPAN_PURPLE("[icon2html(src, user)] Dialing [calling_phone_id].."))
diff --git a/code/modules/cm_preds/yaut_bracers.dm b/code/modules/cm_preds/yaut_bracers.dm
index 7173575710b1..437f9245a17e 100644
--- a/code/modules/cm_preds/yaut_bracers.dm
+++ b/code/modules/cm_preds/yaut_bracers.dm
@@ -496,7 +496,7 @@
if(dist < closest)
closest = dist
closest_item = tracked_item
- direction = get_dir(M,loc)
+ direction = Get_Compass_Dir(M,loc)
areaLoc = loc
for(var/mob/living/carbon/human/Y as anything in GLOB.yautja_mob_list)
if(Y.stat != DEAD)
@@ -513,7 +513,7 @@
var/dist = get_dist(M,Y)
if(dist < closest)
closest = dist
- direction = get_dir(M,Y)
+ direction = Get_Compass_Dir(M,Y)
areaLoc = loc
var/output = FALSE
diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm
index ab3ce823c68e..dea179e6ad48 100644
--- a/code/modules/mob/living/blood.dm
+++ b/code/modules/mob/living/blood.dm
@@ -2,80 +2,6 @@
BLOOD SYSTEM
*/
-/mob/living/proc/handle_blood()
- return
-
-// Takes care blood loss and regeneration
-/mob/living/carbon/human/handle_blood()
- if(NO_BLOOD in species.flags)
- return
-
- if(stat != DEAD && bodytemperature >= 170) //Dead or cryosleep people do not pump the blood.
- //Blood regeneration if there is some space
- if(blood_volume < max_blood && nutrition >= 1)
- blood_volume += 0.1 // regenerate blood VERY slowly
- nutrition -= 0.25
- else if(blood_volume > max_blood)
- blood_volume -= 0.1 // The reverse in case we've gotten too much blood in our body
- if(blood_volume > limit_blood)
- blood_volume = limit_blood // This should never happen, but lets make sure
-
- var/b_volume = blood_volume
-
- // Damaged heart virtually reduces the blood volume, as the blood isn't
- // being pumped properly anymore.
- if(species && species.has_organ["heart"])
- var/datum/internal_organ/heart/heart = internal_organs_by_name["heart"]
- if(!heart)
- b_volume = 0
- else if(chem_effect_flags & CHEM_EFFECT_ORGAN_STASIS)
- b_volume *= 1
- else if(heart.damage >= heart.organ_status >= ORGAN_BRUISED)
- b_volume *= Clamp(100 - (2 * heart.damage), 30, 100) / 100
-
- //Effects of bloodloss
- if(b_volume <= BLOOD_VOLUME_SAFE)
- /// The blood volume turned into a %, with BLOOD_VOLUME_NORMAL being 100%
- var/blood_percentage = b_volume / (BLOOD_VOLUME_NORMAL / 100)
- /// How much oxyloss will there be from the next time blood processes
- var/additional_oxyloss = (100 - blood_percentage) / 5
- /// The limit of the oxyloss gained, ignoring oxyloss from the switch statement
- var/maximum_oxyloss = Clamp((100 - blood_percentage) / 2, oxyloss, 100)
- if(oxyloss < maximum_oxyloss)
- oxyloss += round(max(additional_oxyloss, 0))
-
- switch(b_volume)
- if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE)
- if(prob(1))
- var/word = pick("dizzy","woozy","faint")
- to_chat(src, SPAN_DANGER("You feel [word]."))
- if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY)
- if(eye_blurry < 50)
- AdjustEyeBlur(6)
- oxyloss += 3
- if(prob(15))
- apply_effect(rand(1,3), PARALYZE)
- var/word = pick("dizzy","woozy","faint")
- to_chat(src, SPAN_DANGER("You feel very [word]."))
- if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD)
- if(eye_blurry < 50)
- AdjustEyeBlur(6)
- oxyloss += 8
- toxloss += 3
- if(prob(15))
- apply_effect(rand(1,3), PARALYZE)
- var/word = pick("dizzy","woozy","faint")
- to_chat(src, SPAN_DANGER("You feel extremely [word]."))
- if(0 to BLOOD_VOLUME_SURVIVE)
- death(create_cause_data("blood loss"))
-
-// Xeno blood regeneration
-/mob/living/carbon/xenomorph/handle_blood()
- if(stat != DEAD) //Only living xenos regenerate blood
- //Blood regeneration if there is some space
- if(blood_volume < max_blood)
- blood_volume = min(blood_volume + 1, max_blood)
-
//Makes a blood drop, leaking amt units of blood from the mob
/mob/living/carbon/proc/drip(amt)
if(!blood_volume)
@@ -91,7 +17,7 @@
/mob/living/carbon/human/drip(amt)
if(in_stasis) // stasis now stops bloodloss
return
- if(NO_BLOOD in species.flags)
+ if((species.flags & NO_BLOOD) && !(species.flags & IS_SYNTHETIC))
return
..()
@@ -272,7 +198,7 @@
return "xenoblood"
/mob/living/carbon/human/get_blood_id()
- if((NO_BLOOD in species.flags))
+ if(species.flags & NO_BLOOD)
return
if(special_blood)
return special_blood
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 95fd393d12b5..45726fad902f 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1330,7 +1330,7 @@
else if(C.z != src.z || get_dist(src,C) < 1)
hud_used.locate_leader.icon_state = "trackondirect_lz"
else
- hud_used.locate_leader.setDir(get_dir(src,C))
+ hud_used.locate_leader.setDir(Get_Compass_Dir(src,C))
hud_used.locate_leader.icon_state = "trackon_lz"
return
if(TRACKER_FTL)
@@ -1360,7 +1360,7 @@
if(H.z != src.z || get_dist(src,H) < 1 || src == H)
hud_used.locate_leader.icon_state = "trackondirect[tracking_suffix]"
else
- hud_used.locate_leader.setDir(get_dir(src,H))
+ hud_used.locate_leader.setDir(Get_Compass_Dir(src,H))
hud_used.locate_leader.icon_state = "trackon[tracking_suffix]"
/mob/living/carbon/proc/locate_nearest_nuke()
@@ -1378,7 +1378,7 @@
if(get_dist(src,N) < 1)
hud_used.locate_nuke.icon_state = "nuke_trackondirect"
else
- hud_used.locate_nuke.setDir(get_dir(src,N))
+ hud_used.locate_nuke.setDir(Get_Compass_Dir(src,N))
hud_used.locate_nuke.icon_state = "nuke_trackon"
diff --git a/code/modules/mob/living/carbon/human/species/human.dm b/code/modules/mob/living/carbon/human/species/human.dm
index 6a59e97af867..add78365a350 100644
--- a/code/modules/mob/living/carbon/human/species/human.dm
+++ b/code/modules/mob/living/carbon/human/species/human.dm
@@ -1,3 +1,85 @@
+// handles all blood related problems for humans and synthetics, moved from blood.dm
+/mob/living/proc/handle_blood()
+ return
+
+// Takes care blood loss and regeneration
+/mob/living/carbon/human/handle_blood()
+ if((species.flags & NO_BLOOD) && !(species.flags & IS_SYNTHETIC))
+ return
+
+ if(stat != DEAD && bodytemperature >= 170) //Dead or cryosleep people do not pump the blood.
+ //Blood regeneration if there is some space
+ if(blood_volume < max_blood && nutrition >= 1)
+ blood_volume += 0.1 // regenerate blood VERY slowly
+ nutrition -= 0.25
+ else if(blood_volume > max_blood)
+ blood_volume -= 0.1 // The reverse in case we've gotten too much blood in our body
+ if(blood_volume > limit_blood)
+ blood_volume = limit_blood // This should never happen, but lets make sure
+
+ var/b_volume = blood_volume
+
+ // Damaged heart virtually reduces the blood volume, as the blood isn't
+ // being pumped properly anymore.
+ if(species && species.has_organ["heart"])
+ var/datum/internal_organ/heart/heart = internal_organs_by_name["heart"]
+ if(!heart)
+ b_volume = 0
+ else if(chem_effect_flags & CHEM_EFFECT_ORGAN_STASIS)
+ b_volume *= 1
+ else if(heart.damage >= heart.organ_status >= ORGAN_BRUISED)
+ b_volume *= Clamp(100 - (2 * heart.damage), 30, 100) / 100
+
+ //Effects of bloodloss
+ if(b_volume <= BLOOD_VOLUME_SAFE)
+ /// The blood volume turned into a %, with BLOOD_VOLUME_NORMAL being 100%
+ var/blood_percentage = b_volume / (BLOOD_VOLUME_NORMAL / 100)
+ /// How much oxyloss will there be from the next time blood processes
+ var/additional_oxyloss = (100 - blood_percentage) / 5
+ /// The limit of the oxyloss gained, ignoring oxyloss from the switch statement
+ var/maximum_oxyloss = Clamp((100 - blood_percentage) / 2, oxyloss, 100)
+ if(oxyloss < maximum_oxyloss)
+ oxyloss += round(max(additional_oxyloss, 0))
+
+ switch(b_volume)
+ if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE)
+ if(species.flags & IS_SYNTHETIC)
+ if(prob(1))
+ to_chat(src, SPAN_DANGER("Subdermal damage detected in critical region. Operational impact minimal. Diagnosis queued for maintenance cycle."))
+ else
+ if(prob(1))
+ var/word = pick("dizzy","woozy","faint")
+ to_chat(src, SPAN_DANGER("You feel [word]."))
+ if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY)
+ if(species.flags & IS_SYNTHETIC)
+ if(prob(3))
+ apply_effect(rand(1, 2), WEAKEN)
+ to_chat(src, SPAN_DANGER("Internal power cell fault detected.\nSeek nearest recharging station."))
+ else
+ if(eye_blurry < 50)
+ AdjustEyeBlur(6)
+ oxyloss += 3
+ if(prob(15))
+ apply_effect(rand(1,3), PARALYZE)
+ var/word = pick("dizzy","woozy","faint")
+ to_chat(src, SPAN_DANGER("You feel very [word]."))
+ if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD)
+ if(species.flags & IS_SYNTHETIC)
+ if(prob(5))
+ apply_effect(rand(1, 2), PARALYZE)
+ to_chat(src, SPAN_DANGER("Critical power cell failure detected.\nSeek recharging station immediately."))
+ else
+ if(eye_blurry < 50)
+ AdjustEyeBlur(6)
+ oxyloss += 8
+ toxloss += 3
+ if(prob(15))
+ apply_effect(rand(1, 3), PARALYZE)
+ var/word = pick("dizzy", "woozy", "faint")
+ to_chat(src, SPAN_DANGER("You feel extremely [word]."))
+ if(0 to BLOOD_VOLUME_SURVIVE)
+ death(create_cause_data(species.flags & IS_SYNTHETIC ? "power failure" : "blood loss"))
+
/datum/species/human
group = SPECIES_HUMAN
name = "Human"
diff --git a/code/modules/mob/living/carbon/human/species/yautja/yautja_sound.dm b/code/modules/mob/living/carbon/human/species/yautja/yautja_sound.dm
index a6a9a659f215..afd138fec2bb 100644
--- a/code/modules/mob/living/carbon/human/species/yautja/yautja_sound.dm
+++ b/code/modules/mob/living/carbon/human/species/yautja/yautja_sound.dm
@@ -65,6 +65,6 @@
return
for(var/mob/current_mob as anything in get_mobs_in_z_level_range(get_turf(user), 18) - user)
- var/relative_dir = get_dir(current_mob, user)
+ var/relative_dir = Get_Compass_Dir(current_mob, user)
var/final_dir = dir2text(relative_dir)
to_chat(current_mob, SPAN_HIGHDANGER("You hear a loud roar coming from [final_dir ? "the [final_dir]" : "nearby"]!"))
diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/defender/defender_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/defender/defender_powers.dm
index bbb202fef3c2..249271c5f050 100644
--- a/code/modules/mob/living/carbon/xenomorph/abilities/defender/defender_powers.dm
+++ b/code/modules/mob/living/carbon/xenomorph/abilities/defender/defender_powers.dm
@@ -51,7 +51,7 @@
if(!check_and_use_plasma_owner())
return
- if(fendy.fortify && !fendy.mutation_type == DEFENDER_STEELCREST)
+ if(fendy.fortify && !(fendy.mutation_type == DEFENDER_STEELCREST))
to_chat(fendy, SPAN_XENOWARNING("You cannot use headbutt while fortified."))
return
diff --git a/code/modules/mob/living/carbon/xenomorph/life.dm b/code/modules/mob/living/carbon/xenomorph/life.dm
index 65839e9c8caf..09a4f5014bc4 100644
--- a/code/modules/mob/living/carbon/xenomorph/life.dm
+++ b/code/modules/mob/living/carbon/xenomorph/life.dm
@@ -455,7 +455,7 @@ Make sure their actual health updates immediately.*/
var/area/A = get_area(loc)
var/area/QA = get_area(tracking_atom.loc)
if(A.fake_zlevel == QA.fake_zlevel)
- QL.setDir(get_dir(src, tracking_atom))
+ QL.setDir(Get_Compass_Dir(src, tracking_atom))
QL.icon_state = "trackon"
else
QL.icon_state = "trackondirect"
@@ -484,7 +484,7 @@ Make sure their actual health updates immediately.*/
ML.overlays |= image('icons/mob/hud/xeno_markers.dmi', "all_direction")
return
else if(A.fake_zlevel == MA.fake_zlevel) //normal tracking
- ML.setDir(get_dir(src, tracked_marker_turf))
+ ML.setDir(Get_Compass_Dir(src, tracked_marker_turf))
ML.overlays |= image(tracked_marker.seenMeaning, "pixel_y" = 0)
ML.overlays |= image('icons/mob/hud/xeno_markers.dmi', "center_glow")
ML.overlays |= image('icons/mob/hud/xeno_markers.dmi', "direction")
diff --git a/code/modules/projectiles/gun_attachables.dm b/code/modules/projectiles/gun_attachables.dm
index 20781639a579..518e0deef5ab 100644
--- a/code/modules/projectiles/gun_attachables.dm
+++ b/code/modules/projectiles/gun_attachables.dm
@@ -495,6 +495,20 @@ Defined in conflicts.dm of the #defines folder.
accuracy_mod = HIT_ACCURACY_MULT_TIER_3
scatter_mod = -SCATTER_AMOUNT_TIER_8
+/obj/item/attachable/pmc_sniperbarrel
+ name = "sniper barrel"
+ icon = 'icons/obj/items/weapons/guns/attachments/barrel.dmi'
+ icon_state = "pmc_sniperbarrel"
+ desc = "A heavy barrel. CANNOT BE REMOVED."
+ slot = "muzzle"
+ flags_attach_features = NO_FLAGS
+ hud_offset_mod = -3
+
+/obj/item/attachable/pmc_sniperbarrel/New()
+ ..()
+ accuracy_mod = HIT_ACCURACY_MULT_TIER_3
+ scatter_mod = -SCATTER_AMOUNT_TIER_8
+
/obj/item/attachable/sniperbarrel/vulture
name = "\improper M707 barrel"
icon_state = "vulture_barrel"
diff --git a/code/modules/projectiles/guns/boltaction.dm b/code/modules/projectiles/guns/boltaction.dm
index c18e45e38d3e..d21cb5b87254 100644
--- a/code/modules/projectiles/guns/boltaction.dm
+++ b/code/modules/projectiles/guns/boltaction.dm
@@ -214,7 +214,7 @@
return .
for(var/mob/current_mob as anything in get_mobs_in_z_level_range(get_turf(user), fire_message_range) - user)
- var/relative_dir = get_dir(current_mob, user)
+ var/relative_dir = Get_Compass_Dir(current_mob, user)
var/final_dir = dir2text(relative_dir)
to_chat(current_mob, SPAN_HIGHDANGER("You hear a massive boom coming from [final_dir ? "the [final_dir]" : "nearby"]!"))
if(current_mob.client)
diff --git a/code/modules/projectiles/guns/specialist/sniper.dm b/code/modules/projectiles/guns/specialist/sniper.dm
index 1e72a425387b..3fe2934259bf 100644
--- a/code/modules/projectiles/guns/specialist/sniper.dm
+++ b/code/modules/projectiles/guns/specialist/sniper.dm
@@ -337,12 +337,12 @@
damage_mult = BASE_BULLET_DAMAGE_MULT
recoil = RECOIL_AMOUNT_TIER_5
-/obj/item/weapon/gun/rifle/sniper/xm43e1
+/obj/item/weapon/gun/rifle/sniper/XM43E1
name = "\improper XM43E1 experimental anti-materiel rifle"
desc = "An experimental anti-materiel rifle produced by Armat Systems, recently reacquired from the deep storage of an abandoned prototyping facility. This one in particular is currently undergoing field testing. Chambered in 10x99mm Caseless."
icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi'
- icon_state = "xm42b"
- item_state = "xm42b"
+ icon_state = "xm43e1"
+ item_state = "xm43e1"
unacidable = TRUE
indestructible = 1
@@ -353,12 +353,12 @@
zoomdevicename = "scope"
attachable_allowed = list(/obj/item/attachable/bipod)
flags_gun_features = GUN_AUTO_EJECTOR|GUN_SPECIALIST|GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER
- starting_attachment_types = list(/obj/item/attachable/sniperbarrel)
+ starting_attachment_types = list(/obj/item/attachable/pmc_sniperbarrel)
sniper_beam_type = /obj/effect/ebeam/laser/intense
sniper_beam_icon = "laser_beam_intense"
sniper_lockon_icon = "sniper_lockon_intense"
-/obj/item/weapon/gun/rifle/sniper/XM42B/handle_starting_attachment()
+/obj/item/weapon/gun/rifle/sniper/XM43E1/handle_starting_attachment()
..()
var/obj/item/attachable/scope/variable_zoom/S = new(src)
S.icon_state = "pmcscope"
@@ -368,11 +368,11 @@
update_attachable(S.slot)
-/obj/item/weapon/gun/rifle/sniper/XM42B/set_gun_attachment_offsets()
+/obj/item/weapon/gun/rifle/sniper/XM43E1/set_gun_attachment_offsets()
attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 18,"rail_x" = 15, "rail_y" = 19, "under_x" = 20, "under_y" = 15, "stock_x" = 20, "stock_y" = 15)
-/obj/item/weapon/gun/rifle/sniper/XM42B/set_gun_config_values()
+/obj/item/weapon/gun/rifle/sniper/XM43E1/set_gun_config_values()
..()
set_fire_delay(FIRE_DELAY_TIER_6 * 6 )//Big boy damage, but it takes a lot of time to fire a shot.
//Kaga: Adjusted from 56 (Tier 4, 7*8) -> 30 (Tier 6, 5*6) ticks. 95 really wasn't big-boy damage anymore, although I updated it to 125 to remain consistent with the other 10x99mm caliber weapon (M42C). Now takes only twice as long as the M42A.
@@ -382,7 +382,7 @@
damage_mult = BASE_BULLET_DAMAGE_MULT
recoil = RECOIL_AMOUNT_TIER_1
-/obj/item/weapon/gun/rifle/sniper/XM42B/set_bullet_traits()
+/obj/item/weapon/gun/rifle/sniper/XM43E1/set_bullet_traits()
LAZYADD(traits_to_give, list(
BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_iff),
BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_penetrating),
@@ -415,7 +415,7 @@
force = 17
zoomdevicename = "scope"
flags_gun_features = GUN_AUTO_EJECTOR|GUN_WY_RESTRICTED|GUN_SPECIALIST|GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER
- starting_attachment_types = list(/obj/item/attachable/sniperbarrel)
+ starting_attachment_types = list(/obj/item/attachable/pmc_sniperbarrel)
sniper_beam_type = /obj/effect/ebeam/laser/intense
sniper_beam_icon = "laser_beam_intense"
sniper_lockon_icon = "sniper_lockon_intense"
diff --git a/code/modules/projectiles/magazines/specialist.dm b/code/modules/projectiles/magazines/specialist.dm
index 821273247f66..761e77305254 100644
--- a/code/modules/projectiles/magazines/specialist.dm
+++ b/code/modules/projectiles/magazines/specialist.dm
@@ -27,14 +27,14 @@
default_ammo = /datum/ammo/bullet/sniper/flak
ammo_band_color = AMMO_BAND_COLOR_IMPACT
-//M42B Magazine
+//XM43E1 Magazine
/obj/item/ammo_magazine/sniper/anti_materiel
- name = "\improper XM42B marksman magazine (10x99mm)"
+ name = "\improper XM43E1 marksman magazine (10x99mm)"
desc = "A magazine of caseless 10x99mm anti-materiel rounds."
max_rounds = 8
caliber = "10x99mm"
default_ammo = /datum/ammo/bullet/sniper/anti_materiel
- gun_type = /obj/item/weapon/gun/rifle/sniper/XM42B
+ gun_type = /obj/item/weapon/gun/rifle/sniper/XM43E1
//M42C magazine
diff --git a/code/modules/shuttle/shuttles/crashable/crashable.dm b/code/modules/shuttle/shuttles/crashable/crashable.dm
index de1c5cc8e4fb..f07be5f0c93a 100644
--- a/code/modules/shuttle/shuttles/crashable/crashable.dm
+++ b/code/modules/shuttle/shuttles/crashable/crashable.dm
@@ -26,7 +26,7 @@
found_turf.ChangeTurf(/turf/open/floor)
for(var/mob/current_mob as anything in get_mobs_in_z_level_range(destination.return_center_turf(), 18))
- var/relative_dir = get_dir(current_mob, destination.return_center_turf())
+ var/relative_dir = Get_Compass_Dir(current_mob, destination.return_center_turf())
var/final_dir = dir2text(relative_dir)
to_chat(current_mob, SPAN_HIGHDANGER("You hear something crashing down from above [final_dir ? "to the [final_dir]" : "nearby"]!"))
diff --git a/html/changelogs/AutoChangeLog-pr-4827.yml b/html/changelogs/AutoChangeLog-pr-4827.yml
deleted file mode 100644
index b95ce40e4607..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4827.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "LC4492"
-delete-after: True
-changes:
- - maptweak: "Changes to the CO office: The bathroom now faces into the CO's bedroom, and not to his main office. Victory cabinet have been moved to the Officer's mess because of logical issues. Extra-detail to the office, including an exclusive stamp, table flags and others. The safe is now inside the CO's bedroom, and not in his office. The energy APC is now inside the CO's bedroom, and not in his office. Jones finally have a BED again, or something like that. Other minor changes to objects, such the addition of a cane, a box of glasses for serving guests, etc."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4934.yml b/html/changelogs/AutoChangeLog-pr-4934.yml
deleted file mode 100644
index f3b1e179d8cb..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4934.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-author: "fira"
-delete-after: True
-changes:
- - balance: "Default Web Music Player volume is now 20% down from 50%. It was found too effective against new players."
- - admin: "\"Play Internet Sound\" is now \"Play Admin Sound\" and optionally allow to hide the track name."
- - admin: "\"Play Admin Sound\" can now be used with uploaded tracks, which use CDN delivery and the in-chat music player, granting players more control over them."
- - admin: "Removed \"Play Midi Sound\"."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4944.yml b/html/changelogs/AutoChangeLog-pr-4944.yml
deleted file mode 100644
index 0c8af20f86c8..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4944.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Steelpoint"
-delete-after: True
-changes:
- - maptweak: "Secure Storage on LV-624 has been broken open, making it far less defendable but easier to access."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4953.yml b/html/changelogs/AutoChangeLog-pr-4953.yml
deleted file mode 100644
index 4dd8c48e8206..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4953.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Drathek"
-delete-after: True
-changes:
- - bugfix: "Tweaked larva queue spawning: Now spawns as many larva as possible each cycle rather than one."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4961.yml b/html/changelogs/AutoChangeLog-pr-4961.yml
new file mode 100644
index 000000000000..cb24b6f1d59a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-4961.yml
@@ -0,0 +1,4 @@
+author: "Doubleumc"
+delete-after: True
+changes:
+ - qol: "directions in trackers and messages are more accurate"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4974.yml b/html/changelogs/AutoChangeLog-pr-4974.yml
new file mode 100644
index 000000000000..882c4e10bf89
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-4974.yml
@@ -0,0 +1,4 @@
+author: "Releasethesea"
+delete-after: True
+changes:
+ - bugfix: "fixes the XM43E1s name (previously named XM42B) and sprite, fixes the M42C and XM43E1s barrel, correctly names several items relating to the XM43E1"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4978.yml b/html/changelogs/AutoChangeLog-pr-4978.yml
deleted file mode 100644
index fc04901a02a0..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4978.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Birdtalon"
-delete-after: True
-changes:
- - rscdel: "Lesser drones die upon ghosting and are not offered to observers."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4980.yml b/html/changelogs/AutoChangeLog-pr-4980.yml
deleted file mode 100644
index 67fc216fe995..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4980.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "zzzmike"
-delete-after: True
-changes:
- - qol: "Location name standardization. So, North is now Starboard. This is already how it is for everything except pumps."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4981.yml b/html/changelogs/AutoChangeLog-pr-4981.yml
deleted file mode 100644
index 6edc5e60a381..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4981.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "ihatethisengine"
-delete-after: True
-changes:
- - balance: "Oppressor no longer can abduct big xenos."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4984.yml b/html/changelogs/AutoChangeLog-pr-4984.yml
deleted file mode 100644
index a2ddcbb933ca..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4984.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "Birdtalon"
-delete-after: True
-changes:
- - rscadd: "Explosion handling logic to experimental sensor tower."
- - bugfix: "Explosions no longer delete experimental sensor tower."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4985.yml b/html/changelogs/AutoChangeLog-pr-4985.yml
deleted file mode 100644
index 9d8216e9eb7b..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4985.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Birdtalon"
-delete-after: True
-changes:
- - bugfix: "Pylons now differentiated in the input list with a (1) if in the same area."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4987.yml b/html/changelogs/AutoChangeLog-pr-4987.yml
deleted file mode 100644
index ef48b7dd6e62..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4987.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "SortieEnMer"
-delete-after: True
-changes:
- - qol: "Match Unlock Time in Nuke Timelock Message with Nuke Techtree Description"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4988.yml b/html/changelogs/AutoChangeLog-pr-4988.yml
deleted file mode 100644
index ba67e425bd74..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4988.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Drathek"
-delete-after: True
-changes:
- - bugfix: "Fixed buried larva spawn grace period at start of round if there is a queue: Now join as xeno when there's a queue will only prevent buried larva spawns if there is no core."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4989.yml b/html/changelogs/AutoChangeLog-pr-4989.yml
deleted file mode 100644
index 062eaf000f63..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4989.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "zzzmike"
-delete-after: True
-changes:
- - qol: "ARES hijack announcement specifies that pods will not crash at 100% fuel"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4990.yml b/html/changelogs/AutoChangeLog-pr-4990.yml
deleted file mode 100644
index 8f54dcade5d8..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4990.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-author: "Drathek"
-delete-after: True
-changes:
- - bugfix: "Resin doors will now close on dead mobs that are merged with weeds (currently only human)."
- - bugfix: "Resin doors will now restart their closing timer each open making the delay to close consistent."
- - code_imp: "Added a TRAIT_MERGED_WITH_WEEDS that is set whenever the mob is currently merged with weeds."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4994.yml b/html/changelogs/AutoChangeLog-pr-4994.yml
deleted file mode 100644
index 2ace9428aaef..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4994.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "fira"
-delete-after: True
-changes:
- - bugfix: "The Thunderdome floor is now explosion-proof."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4995.yml b/html/changelogs/AutoChangeLog-pr-4995.yml
new file mode 100644
index 000000000000..ac34444539f3
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-4995.yml
@@ -0,0 +1,5 @@
+author: "Doubleumc"
+delete-after: True
+changes:
+ - imageadd: "2-wide dropship side doors"
+ - maptweak: "changed dropship side doors to a lone doublewide door"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4998.yml b/html/changelogs/AutoChangeLog-pr-4998.yml
new file mode 100644
index 000000000000..9078320c2e06
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-4998.yml
@@ -0,0 +1,5 @@
+author: "HeresKozmos"
+delete-after: True
+changes:
+ - rscadd: "Added pizza and pizza cutter to Req"
+ - rscdel: "Deleted a random kepler crisps bag"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-5001.yml b/html/changelogs/AutoChangeLog-pr-5001.yml
new file mode 100644
index 000000000000..125916322ec5
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-5001.yml
@@ -0,0 +1,4 @@
+author: "HeresKozmos"
+delete-after: True
+changes:
+ - bugfix: "deleted random raised edges from inside rock wall"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-5004.yml b/html/changelogs/AutoChangeLog-pr-5004.yml
new file mode 100644
index 000000000000..626e21ea2378
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-5004.yml
@@ -0,0 +1,4 @@
+author: "Birdtalon"
+delete-after: True
+changes:
+ - bugfix: "Fixes defender headbutt bug while fortified."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-5005.yml b/html/changelogs/AutoChangeLog-pr-5005.yml
new file mode 100644
index 000000000000..698f28459a3e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-5005.yml
@@ -0,0 +1,4 @@
+author: "HeresKozmos"
+delete-after: True
+changes:
+ - bugfix: "fixed a nonsensical window facing a solid rock wall"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-5008.yml b/html/changelogs/AutoChangeLog-pr-5008.yml
new file mode 100644
index 000000000000..5bd37664f455
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-5008.yml
@@ -0,0 +1,4 @@
+author: "realforest2001"
+delete-after: True
+changes:
+ - rscadd: "Telephones now list the last attempted caller, above the DND button."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-5009.yml b/html/changelogs/AutoChangeLog-pr-5009.yml
new file mode 100644
index 000000000000..094bc7ccfee3
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-5009.yml
@@ -0,0 +1,4 @@
+author: "Birdtalon"
+delete-after: True
+changes:
+ - bugfix: "Lifeboats fire extinguisher runtime."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-5010.yml b/html/changelogs/AutoChangeLog-pr-5010.yml
new file mode 100644
index 000000000000..7533b06d42a5
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-5010.yml
@@ -0,0 +1,4 @@
+author: "SabreML"
+delete-after: True
+changes:
+ - ui: "Tweaked the colour of the 'Maintainer' category in staffwho."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-5012.yml b/html/changelogs/AutoChangeLog-pr-5012.yml
new file mode 100644
index 000000000000..4726c32e9cba
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-5012.yml
@@ -0,0 +1,4 @@
+author: "BadAtThisGame302"
+delete-after: True
+changes:
+ - bugfix: "fixed corporate supervisor burst corpse landmark"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-5015.yml b/html/changelogs/AutoChangeLog-pr-5015.yml
new file mode 100644
index 000000000000..5bf9c8af5888
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-5015.yml
@@ -0,0 +1,4 @@
+author: "ihatethisengine"
+delete-after: True
+changes:
+ - rscadd: "Locking down dropship's doors closes them before locking."
\ No newline at end of file
diff --git a/html/changelogs/archive/2023-11.yml b/html/changelogs/archive/2023-11.yml
index 66eaccb86d87..89f61d356258 100644
--- a/html/changelogs/archive/2023-11.yml
+++ b/html/changelogs/archive/2023-11.yml
@@ -279,3 +279,55 @@
game
hislittlecuzingames:
- rscadd: Launch Announcement Alarm for dropships to notify ground forces of departure.
+2023-11-23:
+ Birdtalon:
+ - rscdel: Lesser drones die upon ghosting and are not offered to observers.
+ - rscadd: Explosion handling logic to experimental sensor tower.
+ - bugfix: Explosions no longer delete experimental sensor tower.
+ - bugfix: Pylons now differentiated in the input list with a (1) if in the same
+ area.
+ Drathek:
+ - bugfix: Resin doors will now close on dead mobs that are merged with weeds (currently
+ only human).
+ - bugfix: Resin doors will now restart their closing timer each open making the
+ delay to close consistent.
+ - code_imp: Added a TRAIT_MERGED_WITH_WEEDS that is set whenever the mob is currently
+ merged with weeds.
+ - bugfix: 'Fixed buried larva spawn grace period at start of round if there is a
+ queue: Now join as xeno when there''s a queue will only prevent buried larva
+ spawns if there is no core.'
+ - bugfix: 'Tweaked larva queue spawning: Now spawns as many larva as possible each
+ cycle rather than one.'
+ LC4492:
+ - maptweak: 'Changes to the CO office: The bathroom now faces into the CO''s bedroom,
+ and not to his main office. Victory cabinet have been moved to the Officer''s
+ mess because of logical issues. Extra-detail to the office, including an exclusive
+ stamp, table flags and others. The safe is now inside the CO''s bedroom, and
+ not in his office. The energy APC is now inside the CO''s bedroom, and not in
+ his office. Jones finally have a BED again, or something like that. Other minor
+ changes to objects, such the addition of a cane, a box of glasses for serving
+ guests, etc.'
+ QuickLode:
+ - rscadd: Damage to Synthetic's internal causes debuffs, eventual powercell failure.(death)
+ - bugfix: Synthetic's should no longer lose blood.
+ - code_imp: moves blood proc to human.dm from blood.dm with above changes.
+ SortieEnMer:
+ - qol: Match Unlock Time in Nuke Timelock Message with Nuke Techtree Description
+ Steelpoint:
+ - maptweak: Secure Storage on LV-624 has been broken open, making it far less defendable
+ but easier to access.
+ fira:
+ - bugfix: The Thunderdome floor is now explosion-proof.
+ - balance: Default Web Music Player volume is now 20% down from 50%. It was found
+ too effective against new players.
+ - admin: '"Play Internet Sound" is now "Play Admin Sound" and optionally allow to
+ hide the track name.'
+ - admin: '"Play Admin Sound" can now be used with uploaded tracks, which use CDN
+ delivery and the in-chat music player, granting players more control over them.'
+ - admin: Removed "Play Midi Sound".
+ ihatethisengine:
+ - balance: Oppressor no longer can abduct big xenos.
+ zzzmike:
+ - qol: ARES hijack announcement specifies that pods will not crash at 100% fuel
+ - qol: Location name standardization. So, North is now Starboard. This is already
+ how it is for everything except pumps.
diff --git a/icons/mob/humans/onmob/back.dmi b/icons/mob/humans/onmob/back.dmi
index a6e9ef72c010..8fc07bc410fb 100644
Binary files a/icons/mob/humans/onmob/back.dmi and b/icons/mob/humans/onmob/back.dmi differ
diff --git a/icons/mob/humans/onmob/items_lefthand_1.dmi b/icons/mob/humans/onmob/items_lefthand_1.dmi
index 37b5f9bcc609..b67106a1f831 100644
Binary files a/icons/mob/humans/onmob/items_lefthand_1.dmi and b/icons/mob/humans/onmob/items_lefthand_1.dmi differ
diff --git a/icons/mob/humans/onmob/items_righthand_1.dmi b/icons/mob/humans/onmob/items_righthand_1.dmi
index 3ad8b52d0403..7bcc772c7375 100644
Binary files a/icons/mob/humans/onmob/items_righthand_1.dmi and b/icons/mob/humans/onmob/items_righthand_1.dmi differ
diff --git a/icons/mob/humans/onmob/suit_slot.dmi b/icons/mob/humans/onmob/suit_slot.dmi
index 9f0e15209fe6..e83ce1301fa7 100644
Binary files a/icons/mob/humans/onmob/suit_slot.dmi and b/icons/mob/humans/onmob/suit_slot.dmi differ
diff --git a/icons/obj/items/weapons/guns/attachments.dmi b/icons/obj/items/weapons/guns/attachments.dmi
index 332217fe1cf0..e627f7559a78 100644
Binary files a/icons/obj/items/weapons/guns/attachments.dmi and b/icons/obj/items/weapons/guns/attachments.dmi differ
diff --git a/icons/obj/items/weapons/guns/attachments/barrel.dmi b/icons/obj/items/weapons/guns/attachments/barrel.dmi
index 03c2257c69c5..138b9b658fb6 100644
Binary files a/icons/obj/items/weapons/guns/attachments/barrel.dmi and b/icons/obj/items/weapons/guns/attachments/barrel.dmi differ
diff --git a/icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi b/icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi
index 38fe8079a2e8..a7586a656965 100644
Binary files a/icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi and b/icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi differ
diff --git a/icons/obj/structures/doors/dropship1_side2.dmi b/icons/obj/structures/doors/dropship1_side2.dmi
new file mode 100644
index 000000000000..f2d96e59af5a
Binary files /dev/null and b/icons/obj/structures/doors/dropship1_side2.dmi differ
diff --git a/icons/obj/structures/doors/dropship2_side2.dmi b/icons/obj/structures/doors/dropship2_side2.dmi
new file mode 100644
index 000000000000..bff39827c359
Binary files /dev/null and b/icons/obj/structures/doors/dropship2_side2.dmi differ
diff --git a/maps/map_files/DesertDam/Desert_Dam.dmm b/maps/map_files/DesertDam/Desert_Dam.dmm
index 4b760f41e5c0..4bf4d0e7a88c 100644
--- a/maps/map_files/DesertDam/Desert_Dam.dmm
+++ b/maps/map_files/DesertDam/Desert_Dam.dmm
@@ -9576,17 +9576,6 @@
/obj/structure/window/framed/colony/reinforced,
/turf/open/floor/plating,
/area/desert_dam/interior/dam_interior/east_tunnel_entrance)
-"aCT" = (
-/obj/structure/barricade/wooden{
- desc = "This barricade is heavily reinforced. Nothing short of blasting it open seems like it'll do the trick, that or melting the breams supporting it...";
- dir = 8;
- health = 25000
- },
-/turf/open/floor/prison{
- dir = 10;
- icon_state = "bright_clean"
- },
-/area/desert_dam/interior/dam_interior/east_tunnel_entrance)
"aCU" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/prison{
@@ -9651,18 +9640,6 @@
},
/turf/open/asphalt,
/area/desert_dam/exterior/valley/valley_northwest)
-"aDd" = (
-/obj/structure/bed/chair,
-/obj/structure/barricade/wooden{
- desc = "This barricade is heavily reinforced. Nothing short of blasting it open seems like it'll do the trick, that or melting the breams supporting it...";
- dir = 8;
- health = 25000
- },
-/turf/open/floor/prison{
- dir = 10;
- icon_state = "bright_clean"
- },
-/area/desert_dam/interior/dam_interior/east_tunnel_entrance)
"aDe" = (
/obj/effect/decal/sand_overlay/sand1,
/turf/open/asphalt{
@@ -85490,8 +85467,8 @@ dTs
dTs
aEa
aEa
-aCS
-aCS
+aEa
+aEa
aEa
aEa
dTs
@@ -85724,8 +85701,8 @@ dTs
dTs
aEa
aCD
-aCT
-aDd
+aCF
+aDg
aDn
aEa
aDt
diff --git a/maps/map_files/Kutjevo/Kutjevo.dmm b/maps/map_files/Kutjevo/Kutjevo.dmm
index eb5f1afabaed..676bd49576f0 100644
--- a/maps/map_files/Kutjevo/Kutjevo.dmm
+++ b/maps/map_files/Kutjevo/Kutjevo.dmm
@@ -14435,18 +14435,6 @@
},
/turf/open/floor/plating/kutjevo,
/area/kutjevo/interior/complex/botany)
-"tRD" = (
-/obj/structure/platform_decoration/kutjevo{
- dir = 8
- },
-/obj/structure/platform_decoration/kutjevo{
- dir = 8
- },
-/obj/structure/platform_decoration/kutjevo{
- dir = 8
- },
-/turf/closed/wall/kutjevo/rock,
-/area/kutjevo/interior/oob)
"tRG" = (
/obj/structure/platform/kutjevo/smooth{
dir = 1;
@@ -35827,7 +35815,7 @@ dxF
dxF
dxF
dxF
-tRD
+dxF
dxF
dxF
dxF
diff --git a/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm b/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm
index 69e040e98ea2..50240fcd8d55 100644
--- a/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm
+++ b/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm
@@ -42329,8 +42329,10 @@
/turf/open/floor/wood,
/area/lv522/indoors/a_block/fitness/glass)
"qzp" = (
-/obj/structure/machinery/door/airlock/dropship_hatch/two{
- dir = 8
+/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds2{
+ id = "sh_dropship2";
+ dir = 2;
+ name = "\improper Typhoon crew hatch"
},
/turf/open/shuttle/dropship{
icon_state = "rasputin3"
@@ -47136,6 +47138,16 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/lv522/indoors/lone_buildings/storage_blocks)
+"shh" = (
+/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds2{
+ dir = 1;
+ id = "sh_dropship2";
+ name = "\improper Typhoon crew hatch"
+ },
+/turf/open/shuttle/dropship{
+ icon_state = "rasputin3"
+ },
+/area/lv522/landing_zone_forecon/UD6_Typhoon)
"shm" = (
/obj/structure/machinery/vending/cola,
/obj/effect/decal/cleanable/dirt,
@@ -66448,7 +66460,7 @@ pRK
qmM
qGQ
qTh
-qzp
+rjP
qzp
nfq
fDg
@@ -67810,8 +67822,8 @@ pUc
qst
qLz
qVl
-qzp
-qzp
+rjP
+shh
rFp
sdE
sIx
diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm
index 32f92463e1ec..b9bd8d54c860 100644
--- a/maps/map_files/USS_Almayer/USS_Almayer.dmm
+++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm
@@ -64505,17 +64505,24 @@
/area/almayer/engineering/upper_engineering/port)
"rDe" = (
/obj/structure/surface/table/almayer,
-/obj/item/reagent_container/food/snacks/kepler_crisps{
+/obj/structure/sign/safety/cryo{
pixel_x = 8;
- pixel_y = 4
+ pixel_y = 33
},
/obj/item/toy/deck{
pixel_x = -4;
- pixel_y = 1
+ pixel_y = 10
},
-/obj/structure/sign/safety/cryo{
- pixel_x = 8;
- pixel_y = 33
+/obj/item/reagent_container/food/drinks/cans/souto/diet/cherry{
+ pixel_x = 9;
+ pixel_y = 12
+ },
+/obj/item/ashtray/plastic{
+ pixel_y = -4
+ },
+/obj/item/trash/cigbutt{
+ pixel_x = 1;
+ pixel_y = 5
},
/turf/open/floor/almayer{
dir = 6;
@@ -72674,14 +72681,15 @@
/area/almayer/hallways/stern_hallway)
"uWI" = (
/obj/structure/surface/table/almayer,
-/obj/item/ashtray/plastic,
-/obj/item/trash/cigbutt{
- pixel_x = 1;
+/obj/item/pizzabox/margherita{
pixel_y = 8
},
-/obj/item/reagent_container/food/drinks/cans/souto/diet/cherry{
- pixel_x = -9;
- pixel_y = 12
+/obj/item/weapon/pizza_cutter{
+ force = 20;
+ name = "\improper Replica PIZZA TIME";
+ desc = "A cheap replica of the fabled PIZZA TIME novelty pizza cutter, this one is not as sharp as the original which legends said could slice any pizza....";
+ pixel_x = -6;
+ pixel_y = 8
},
/turf/open/floor/almayer{
dir = 1;
diff --git a/maps/shuttles/dropship_alamo.dmm b/maps/shuttles/dropship_alamo.dmm
index 7c49edfdd0d2..6cd6922c22b0 100644
--- a/maps/shuttles/dropship_alamo.dmm
+++ b/maps/shuttles/dropship_alamo.dmm
@@ -217,8 +217,9 @@
},
/area/shuttle/drop1/sulaco)
"rS" = (
-/obj/structure/machinery/door/airlock/dropship_hatch{
- id = "port_door"
+/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds1{
+ id = "port_door";
+ dir = 2
},
/turf/open/shuttle/dropship{
icon_state = "rasputin15"
@@ -481,8 +482,8 @@
},
/area/shuttle/drop1/sulaco)
"Pf" = (
-/obj/structure/machinery/door/airlock/dropship_hatch{
- dir = 8;
+/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds1{
+ dir = 1;
id = "starboard_door"
},
/turf/open/shuttle/dropship{
@@ -675,7 +676,7 @@ hG
Et
iI
JP
-rS
+il
rS
mW
qn
@@ -859,7 +860,7 @@ zS
iv
zV
MP
-Pf
+il
Pf
nC
nE
diff --git a/maps/shuttles/dropship_normandy.dmm b/maps/shuttles/dropship_normandy.dmm
index f1595cd97db9..a2847ae62611 100644
--- a/maps/shuttles/dropship_normandy.dmm
+++ b/maps/shuttles/dropship_normandy.dmm
@@ -350,8 +350,8 @@
/turf/template_noop,
/area/shuttle/drop2/sulaco)
"En" = (
-/obj/structure/machinery/door/airlock/dropship_hatch/two{
- dir = 8;
+/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds2{
+ dir = 1;
id = "starboard_door"
},
/turf/open/shuttle/dropship{
@@ -583,8 +583,9 @@
/turf/template_noop,
/area/shuttle/drop2/sulaco)
"SC" = (
-/obj/structure/machinery/door/airlock/dropship_hatch/two{
- id = "port_door"
+/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds2{
+ id = "port_door";
+ dir = 2
},
/turf/open/shuttle/dropship{
icon_state = "rasputin15"
@@ -708,7 +709,7 @@ eu
OI
GE
lJ
-SC
+PJ
SC
jc
pU
@@ -892,7 +893,7 @@ wX
fI
fx
Tp
-En
+PJ
En
gG
RG
diff --git a/tgui/packages/tgui/interfaces/DropshipFlightControl.tsx b/tgui/packages/tgui/interfaces/DropshipFlightControl.tsx
index bbb7fea96d2c..4c1c463e65dd 100644
--- a/tgui/packages/tgui/interfaces/DropshipFlightControl.tsx
+++ b/tgui/packages/tgui/interfaces/DropshipFlightControl.tsx
@@ -45,7 +45,7 @@ const DropshipDoorControl = (_, context) => {
disabled={disable_door_controls}
onClick={() =>
act('door-control', {
- interaction: 'lock',
+ interaction: 'force-lock',
location: 'all',
})
}
@@ -81,7 +81,7 @@ const DropshipDoorControl = (_, context) => {