Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
d603829
Automatic changelog compile [ci skip]
cmss13-ci[bot] Mar 5, 2025
6045a55
Light Replacer Improvements (#8509)
TheKillfish Mar 5, 2025
a8401b6
Automatic changelog for PR #8509 [ci skip]
cmss13-ci[bot] Mar 5, 2025
7e9e09c
Automatic changelog compile [ci skip]
cmss13-ci[bot] Mar 6, 2025
79c35e7
Reverts shrapnel damage changes from #7581 (#8613)
Mister-moon1 Mar 6, 2025
fceff52
Automatic changelog for PR #8613 [ci skip]
cmss13-ci[bot] Mar 6, 2025
4c11ce1
Moves crusher powers into its own files and removes one letter vars (…
Red-byte3D Mar 6, 2025
c20d216
Automatic changelog for PR #8496 [ci skip]
cmss13-ci[bot] Mar 6, 2025
1a1c3de
Automatic changelog compile [ci skip]
cmss13-ci[bot] Mar 7, 2025
e8fdb84
[s] Adds a wrapper for icon_states for debugging (#8681)
Drulikar Mar 7, 2025
a0a76e2
some Tgui fixes (#8652)
Kashargul Mar 8, 2025
b696951
Automatic changelog for PR #8652 [ci skip]
cmss13-ci[bot] Mar 8, 2025
7ab2425
Nerfs playable huggers (#8181)
Git-Nivrak Mar 8, 2025
35dcfc9
Automatic changelog for PR #8181 [ci skip]
cmss13-ci[bot] Mar 8, 2025
84e679c
fixes the sticky keys (#8674)
hry-gh Mar 8, 2025
8de62ff
Automatic changelog for PR #8674 [ci skip]
cmss13-ci[bot] Mar 8, 2025
9c5d841
refactors audio player (by adding a 516 version with nicer code) (#8606)
hry-gh Mar 8, 2025
ec6f484
Automatic changelog for PR #8606 [ci skip]
cmss13-ci[bot] Mar 8, 2025
b030795
Automatic changelog compile [ci skip]
cmss13-ci[bot] Mar 9, 2025
ee093c0
Folding Barricades now display the correct message for closed/opened …
Willzadl Mar 10, 2025
5b36e1b
Squad Gear Racks now autoequip armors, belts etc. (#8625)
Willzadl Mar 10, 2025
b87391b
Automatic changelog for PR #8669 [ci skip]
cmss13-ci[bot] Mar 10, 2025
b2c4d52
Halves the untrained pointing cooldown (#8626)
Willzadl Mar 10, 2025
26d6003
Automatic changelog for PR #8626 [ci skip]
cmss13-ci[bot] Mar 10, 2025
736081f
Removes devour, replaces it with haul. #2737 Revival (#8442)
Mar 10, 2025
a3f724d
Automatic changelog for PR #8442 [ci skip]
cmss13-ci[bot] Mar 10, 2025
51e9d26
Make Resin Doors Ignore DEAD mobs. (#8334)
Venuska1117 Mar 10, 2025
b7caf26
Automatic changelog for PR #8334 [ci skip]
cmss13-ci[bot] Mar 10, 2025
22c01cb
Handfulls of ammos inserted into storages will now try to fill other …
jupyterkat Mar 10, 2025
74ba60f
Automatic changelog for PR #8697 [ci skip]
cmss13-ci[bot] Mar 10, 2025
1d45c8b
Remaps and Adds a Fax Machine to Whiskey Outpost CIC. (#8476)
efzapa Mar 10, 2025
fad5235
Automatic changelog for PR #8476 [ci skip]
cmss13-ci[bot] Mar 10, 2025
9512250
Fixes the non-existence of the fax responder listening bugs again (#8…
realforest2001 Mar 10, 2025
00495bb
Automatic changelog for PR #8515 [ci skip]
cmss13-ci[bot] Mar 10, 2025
19b1ed6
Smartgun-slap-mags (#8705)
BasilHerb Mar 10, 2025
88c5141
Paperwork touch-ups (#8670)
realforest2001 Mar 10, 2025
772d33d
Automatic changelog for PR #8705 [ci skip]
cmss13-ci[bot] Mar 10, 2025
b57c0c0
fixes back sprite for the glass spear and synth hammer (#8704)
Detective-Google Mar 10, 2025
54777fc
IO combat toolbelt (#8641)
Sporticusmge Mar 10, 2025
57ae28d
Automatic changelog for PR #8704 [ci skip]
cmss13-ci[bot] Mar 10, 2025
bc593c3
Resets revive grace period to initial on revive (#8685)
ihatethisengine Mar 10, 2025
fd5f6b0
Automatic changelog for PR #8685 [ci skip]
cmss13-ci[bot] Mar 10, 2025
911c842
Automatic changelog for PR #8670 [ci skip]
cmss13-ci[bot] Mar 10, 2025
4cb6d80
fix corner building plasteel folding cades (#8662)
BOBAMAx Mar 10, 2025
109da31
Automatic changelog for PR #8641 [ci skip]
cmss13-ci[bot] Mar 10, 2025
2f2b3b0
Automatic changelog for PR #8662 [ci skip]
cmss13-ci[bot] Mar 10, 2025
896d19a
Bigger xenos open doors faster (#8638)
Red-byte3D Mar 10, 2025
e36cac2
Automatic changelog for PR #8638 [ci skip]
cmss13-ci[bot] Mar 10, 2025
0f60022
Refactor urange (#8677)
Drulikar Mar 10, 2025
36ad51a
Automatic changelog for PR #8677 [ci skip]
cmss13-ci[bot] Mar 10, 2025
d7b08ff
chunk tgui topic payloads on 516 (#8492)
hry-gh Mar 11, 2025
f2cdb44
Automatic changelog compile [ci skip]
cmss13-ci[bot] Mar 11, 2025
dd81000
covers a few more stickykey cases (#8712)
hry-gh Mar 11, 2025
f486151
Automatic changelog for PR #8712 [ci skip]
cmss13-ci[bot] Mar 11, 2025
0479f22
Adjusts minimum ages for many roles. (#7983)
CapCamIII Mar 11, 2025
9c516cd
Automatic changelog for PR #7983 [ci skip]
cmss13-ci[bot] Mar 11, 2025
f739b85
Pounce/Lunge/etc impact fix (#7819)
JackieEstegado Mar 11, 2025
8a89bb8
Automatic changelog for PR #7819 [ci skip]
cmss13-ci[bot] Mar 11, 2025
4dacdb0
Changes Field Doctor Timelock (#8687)
MeH0y Mar 11, 2025
e127af4
Automatic changelog for PR #8687 [ci skip]
cmss13-ci[bot] Mar 11, 2025
287bdb3
dpi touchups (#8723)
hry-gh Mar 11, 2025
1ed306e
Automatic changelog for PR #8723 [ci skip]
cmss13-ci[bot] Mar 11, 2025
5813e4f
More OOC icon fixes (#8691)
Drulikar Mar 11, 2025
3d1efd1
Automatic changelog for PR #8691 [ci skip]
cmss13-ci[bot] Mar 11, 2025
a5d0d60
Fixes some TGUIs with CRT themes scrolling and leaving their CRT behi…
MistChristmas Mar 11, 2025
aa2fe03
Automatic changelog for PR #8722 [ci skip]
cmss13-ci[bot] Mar 11, 2025
7ce1d42
Some early returns for admin stuff (#8608)
Red-byte3D Mar 11, 2025
97d2dd5
Automatic changelog for PR #8608 [ci skip]
cmss13-ci[bot] Mar 11, 2025
8523377
K9 Tracker Bug Fix (#8690)
blackdragonTOW Mar 11, 2025
b3244c5
Automatic changelog for PR #8690 [ci skip]
cmss13-ci[bot] Mar 11, 2025
3db9300
optimization to chat saving via indexeddb improvements (#8607)
hry-gh Mar 11, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions code/__DEFINES/dcs/signals/atom/mob/signals_mob.dm
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@
#define COMSIG_MOB_ATTEMPTING_EQUIP "mob_attempting_equip"
#define COMPONENT_MOB_CANCEL_ATTEMPT_EQUIP (1<<0)

/// For when a mob is devoured by a Xeno
#define COMSIG_MOB_DEVOURED "mob_devoured"
#define COMPONENT_CANCEL_DEVOUR (1<<0)
/// For when a mob is hauled by a Xeno
#define COMSIG_MOB_HAULED "mob_hauled"
#define COMPONENT_CANCEL_HAUL (1<<0)
// Reserved for tech trees
#define COMSIG_MOB_ENTER_TREE "mob_enter_tree"
#define COMPONENT_CANCEL_TREE_ENTRY (1<<0)
Expand Down
1 change: 1 addition & 0 deletions code/__DEFINES/job.dm
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ GLOBAL_LIST_INIT(job_squad_roles, JOB_SQUAD_ROLES_LIST)
#define JOB_RESEARCHER "Researcher"
#define JOB_MEDIC_ROLES /datum/timelock/medic
#define JOB_MEDIC_ROLES_LIST list(JOB_SQUAD_MEDIC, JOB_CMO, JOB_DOCTOR, JOB_FIELD_DOCTOR, JOB_NURSE, JOB_RESEARCHER, JOB_SURGEON)
#define JOB_DOCTOR_ROLES_LIST list(JOB_CMO, JOB_DOCTOR, JOB_SURGEON)

#define JOB_CORPORATE_LIAISON "Corporate Liaison"

Expand Down
2 changes: 2 additions & 0 deletions code/__DEFINES/text.dm
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,5 @@
#define MAX_PAPER_MESSAGE_LEN 3072
#define MAX_BOOK_MESSAGE_LEN 9216
#define MAX_NAME_LEN 28

#define MAX_MESSAGE_CHUNKS 20
4 changes: 4 additions & 0 deletions code/__DEFINES/traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,8 @@
#define TRAIT_TEMPORARILY_MUTED "temporarily_muted"
/// Mob wont get hit by stray projectiles
#define TRAIT_NO_STRAY "trait_no_stray"
/// When a Xeno hauls us. We can take out our knife or gun if hauled though we are immobilized, also shielded from most damage.
#define TRAIT_HAULED "hauled"
// only used by valkyrie
#define TRAIT_VALKYRIE_ARMORED "trait_valkyrie_armored"

Expand Down Expand Up @@ -439,6 +441,8 @@ GLOBAL_LIST(trait_name_map)
#define TRAIT_SOURCE_STRAIN "t_s_strain"
///Status trait coming from being buckled.
#define TRAIT_SOURCE_BUCKLE "t_s_buckle"
//Status trait coming from being hauled by a xeno.
#define TRAIT_SOURCE_XENO_HAUL "t_s_xeno_haul"
///Status trait coming from being assigned as [acting] squad leader.
#define TRAIT_SOURCE_SQUAD_LEADER "t_s_squad_leader"
///Status trait coming from their job
Expand Down
3 changes: 3 additions & 0 deletions code/__DEFINES/typecheck/xenos.dm
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@
var/datum/hive_status/corrupted/renegade/renegade_hive = hive
return renegade_hive.iff_protection_check(src, attempt_harm_mob)

if(HAS_TRAIT(attempt_harm_mob, TRAIT_HAULED))
return TRUE

return hive.is_ally(attempt_harm_mob)

// need this to set the data for walls/eggs/huggers when they are initialized
Expand Down
6 changes: 4 additions & 2 deletions code/__DEFINES/xeno.dm
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@
#define TUNNEL_ENTER_BIG_XENO_DELAY 120
#define TUNNEL_ENTER_LARVA_DELAY 10

/// The duration it takes a player controlled facehugger to leap or hug adjacently
#define FACEHUGGER_WINDUP_DURATION 1 SECONDS
/// The duration it takes a player controlled facehugger to leap
#define FACEHUGGER_LEAP_DURATION 2 SECONDS
/// The duration it takes a player controlled facehugger to hug a target lying down by clicking on it
#define FACEHUGGER_CLIMB_DURATION 1 SECONDS

// Defines for action types and click delays used by xenomorph/unarmedattack() and attack_alien().

Expand Down
39 changes: 27 additions & 12 deletions code/__HELPERS/unsorted.dm
Original file line number Diff line number Diff line change
Expand Up @@ -438,22 +438,37 @@

return target

/proc/urange(dist=0, atom/center=usr, orange=0, areas=0)
/**
* An alternative to orange() that should perform better for distances >= 5 because
* of ORANGE_TURFS utilizing RECT_TURFS.
*
* Returns a list of turfs and those turf's contents, excluding center (and
* its contents). Ignores visibility (like orange).
*/
/proc/long_orange(dist=0, atom/center)
if(!dist)
if(!orange)
return list(center)
else
return list()
return list()

var/list/turfs = ORANGE_TURFS(dist, center)
. = list()
for(var/turf/cur_turf as anything in turfs)
. += cur_turf
. += cur_turf.contents
. -= center // If center isn't a turf

/**
* An alternative to range() that should perform better for distances >= 5 because
* of RANGE_TURFS utilizing RECT_TURFS.
*
* Returns a list of turfs and those turf's contents, including center (and its
* contents if a turf). Ignores visibility (like range).
*/
/proc/long_range(dist=0, atom/center)
var/list/turfs = RANGE_TURFS(dist, center)
if(orange)
turfs -= get_turf(center)
. = list()
for(var/turf/T as anything in turfs)
. += T
. += T.contents
if(areas)
. |= T.loc
for(var/turf/cur_turf as anything in turfs)
. += cur_turf
. += cur_turf.contents

// returns turf relative to A in given direction at set range
// result is bounded to map size
Expand Down
3 changes: 3 additions & 0 deletions code/_onclick/click.dm
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,9 @@
return

/mob/proc/click_adjacent(atom/targeted_atom, obj/item/used_item, mods)
if(HAS_TRAIT(src, TRAIT_HAULED))
if(!isstorage(targeted_atom) && !isclothing(targeted_atom) && !isweapon(targeted_atom) && !isgun(targeted_atom))
return
if(used_item)
var/attackby_result = targeted_atom.attackby(used_item, src, mods)
var/afterattack_result
Expand Down
2 changes: 1 addition & 1 deletion code/_onclick/human.dm
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@

/mob/living/carbon/human/UnarmedAttack(atom/A, proximity, click_parameters)

if(body_position == LYING_DOWN) //No attacks while laying down
if(body_position == LYING_DOWN && !HAS_TRAIT(src, TRAIT_HAULED)) //No attacks while laying down
return 0

var/obj/item/clothing/gloves/G = gloves // not typecast specifically enough in defines
Expand Down
4 changes: 4 additions & 0 deletions code/_onclick/item_attack.dm
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@

// Called when the item is in the active hand, and clicked; alternately, there is an 'activate held object' verb or you can hit pagedown.
/obj/item/proc/attack_self(mob/user)
if(HAS_TRAIT(user, TRAIT_HAULED))
return
SHOULD_CALL_PARENT(TRUE)
SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_SELF, user)
SEND_SIGNAL(user, COMSIG_MOB_ITEM_ATTACK_SELF, src)
Expand Down Expand Up @@ -35,6 +37,8 @@
else if(initiate_surgery_moment(I, src, null, user))
return TRUE
*/
if(HAS_TRAIT(user, TRAIT_HAULED))
return
if(istype(I) && ismob(user))
return I.attack(src, user)

Expand Down
27 changes: 13 additions & 14 deletions code/datums/ammo/shrapnel.dm
Original file line number Diff line number Diff line change
Expand Up @@ -6,26 +6,24 @@
/datum/ammo/bullet/shrapnel
name = "shrapnel"
icon_state = "buckshot"
accurate_range_min = 5
flags_ammo_behavior = AMMO_BALLISTIC|AMMO_STOPPED_BY_COVER
accuracy = HIT_ACCURACY_TIER_4
accurate_range = 7
max_range = 10
damage = 30
penetration = ARMOR_PENETRATION_TIER_2
accuracy = HIT_ACCURACY_TIER_3
accurate_range = 32
max_range = 8
damage = 25
damage_var_low = -PROJECTILE_VARIANCE_TIER_6
damage_var_high = PROJECTILE_VARIANCE_TIER_6
penetration = ARMOR_PENETRATION_TIER_4
shell_speed = AMMO_SPEED_TIER_2
shrapnel_chance = 5

/datum/ammo/bullet/shrapnel/on_hit_obj(obj/O, obj/projectile/P)
if(istype(O, /obj/structure/barricade))
var/obj/structure/barricade/B = O
B.health -= rand(5, 10)
B.health -= rand(2, 5)
B.update_health(1)

/datum/ammo/bullet/shrapnel/on_hit_mob(mob/living/carbon/xeno, obj/projectile/projectile, mob/user)
if(!shrapnel_chance) // no shrapnell , no special effects
return
if(isxeno(xeno))
xeno.apply_effect(4, SLOW) // multiple hits dont stack they just renew the duration
xeno.apply_armoured_damage(damage * 0.6, ARMOR_BULLET, BRUTE, , penetration) // xenos have a lot of HP

/datum/ammo/bullet/shrapnel/breaching/set_bullet_traits()
. = ..()
Expand All @@ -49,7 +47,7 @@
name = ".22 hornet round"
icon_state = "hornet_round"
flags_ammo_behavior = AMMO_BALLISTIC
damage = 10
damage = 8
shrapnel_chance = 0
shell_speed = AMMO_SPEED_TIER_3//she fast af boi
penetration = ARMOR_PENETRATION_TIER_5
Expand All @@ -70,7 +68,7 @@
icon_state = "beanbag" // looks suprisingly a lot like flaming shrapnel chunks
flags_ammo_behavior = AMMO_STOPPED_BY_COVER
shell_speed = AMMO_SPEED_TIER_1
damage = 30
damage = 20
penetration = ARMOR_PENETRATION_TIER_4

/datum/ammo/bullet/shrapnel/incendiary/set_bullet_traits()
Expand All @@ -95,6 +93,7 @@
/datum/ammo/bullet/shrapnel/metal
name = "metal shrapnel"
icon_state = "shrapnelshot_bit"
flags_ammo_behavior = AMMO_STOPPED_BY_COVER|AMMO_BALLISTIC
shell_speed = AMMO_SPEED_TIER_1
damage = 30
shrapnel_chance = 15
Expand Down
10 changes: 5 additions & 5 deletions code/datums/ammo/xeno.dm
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@
/datum/ammo/xeno/acid/on_hit_mob(mob/M, obj/projectile/P)
if(iscarbon(M))
var/mob/living/carbon/C = M
if(C.status_flags & XENO_HOST && HAS_TRAIT(C, TRAIT_NESTED) || C.stat == DEAD)
if(C.status_flags & XENO_HOST && HAS_TRAIT(C, TRAIT_NESTED) || C.stat == DEAD || HAS_TRAIT(C, TRAIT_HAULED))
return FALSE
..()

Expand Down Expand Up @@ -252,7 +252,7 @@
/datum/ammo/xeno/boiler_gas/on_hit_mob(mob/moob, obj/projectile/proj)
if(iscarbon(moob))
var/mob/living/carbon/carbon = moob
if(carbon.status_flags & XENO_HOST && HAS_TRAIT(carbon, TRAIT_NESTED) || carbon.stat == DEAD)
if(carbon.status_flags & XENO_HOST && HAS_TRAIT(carbon, TRAIT_NESTED) || carbon.stat == DEAD || HAS_TRAIT(carbon, TRAIT_HAULED))
return
var/datum/effects/neurotoxin/neuro_effect = locate() in moob.effects_list
if(!neuro_effect)
Expand Down Expand Up @@ -302,7 +302,7 @@
/datum/ammo/xeno/boiler_gas/acid/on_hit_mob(mob/moob, obj/projectile/proj)
if(iscarbon(moob))
var/mob/living/carbon/carbon = moob
if(carbon.status_flags & XENO_HOST && HAS_TRAIT(carbon, TRAIT_NESTED) || carbon.stat == DEAD)
if(carbon.status_flags & XENO_HOST && HAS_TRAIT(carbon, TRAIT_NESTED) || carbon.stat == DEAD || HAS_TRAIT(carbon, TRAIT_HAULED))
return
to_chat(moob,SPAN_HIGHDANGER("Acid covers your body! Oh fuck!"))
playsound(moob,"acid_strike",75,1)
Expand Down Expand Up @@ -330,7 +330,7 @@
/datum/ammo/xeno/bone_chips/on_hit_mob(mob/living/M, obj/projectile/P)
if(iscarbon(M))
var/mob/living/carbon/C = M
if((HAS_FLAG(C.status_flags, XENO_HOST) && HAS_TRAIT(C, TRAIT_NESTED)) || C.stat == DEAD)
if((HAS_FLAG(C.status_flags, XENO_HOST) && HAS_TRAIT(C, TRAIT_NESTED)) || C.stat == DEAD || HAS_TRAIT(C, TRAIT_HAULED))
return
if(ishuman_strict(M) || isxeno(M))
playsound(M, 'sound/effects/spike_hit.ogg', 25, 1, 1)
Expand Down Expand Up @@ -360,7 +360,7 @@
/datum/ammo/xeno/bone_chips/spread/runner/on_hit_mob(mob/living/M, obj/projectile/P)
if(iscarbon(M))
var/mob/living/carbon/C = M
if((HAS_FLAG(C.status_flags, XENO_HOST) && HAS_TRAIT(C, TRAIT_NESTED)) || C.stat == DEAD)
if((HAS_FLAG(C.status_flags, XENO_HOST) && HAS_TRAIT(C, TRAIT_NESTED)) || C.stat == DEAD || HAS_TRAIT(C, TRAIT_HAULED))
return
if(ishuman_strict(M) || isxeno(M))
playsound(M, 'sound/effects/spike_hit.ogg', 25, 1, 1)
Expand Down
4 changes: 2 additions & 2 deletions code/datums/diseases/xeno_transformation.dm
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,13 @@
if (prob(4))
to_chat(affected_mob, SPAN_DANGER("You can feel something move...inside."))
if (prob(5))
to_chat(affected_mob, "\italic " + pick("Soon we will be one...", "Must... devour...", "Capture...", "We are perfect."))
to_chat(affected_mob, "\italic " + pick("Soon we will be one...", "Must... evolve...", "Capture...", "We are perfect."))
if(4)
if (prob(10))
to_chat(affected_mob, pick(SPAN_DANGER("Your skin feels very tight."), SPAN_DANGER("Your blood boils!")))
affected_mob.take_limb_damage(3)
if (prob(5))
affected_mob.whisper(pick("Soon we will be one...", "Must... devour...", "Capture...", "We are perfect.", "Hsssshhhhh!"))
affected_mob.whisper(pick("Soon we will be one...", "Must... evolve...", "Capture...", "We are perfect.", "Hsssshhhhh!"))
if (prob(8))
to_chat(affected_mob, SPAN_DANGER("You can feel... something...inside you."))
if(5)
Expand Down
2 changes: 1 addition & 1 deletion code/datums/effects/acid.dm
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@

if(ishuman(A))
var/mob/living/carbon/human/H = A
if(H.status_flags & XENO_HOST && HAS_TRAIT(H, TRAIT_NESTED) || H.stat == DEAD)
if(H.status_flags & XENO_HOST && HAS_TRAIT(H, TRAIT_NESTED) || H.stat == DEAD || HAS_TRAIT(H, TRAIT_HAULED))
return FALSE

. = ..()
Expand Down
10 changes: 5 additions & 5 deletions code/datums/pain/_pain.dm
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@

if(new_level >= PAIN_LEVEL_SEVERE && feels_pain)
RegisterSignal(source_mob, COMSIG_MOB_DRAGGED, PROC_REF(oxyloss_drag), override = TRUE)
RegisterSignal(source_mob, COMSIG_MOB_DEVOURED, PROC_REF(handle_devour), override = TRUE)
RegisterSignal(source_mob, COMSIG_MOB_HAULED, PROC_REF(handle_haul), override = TRUE)
RegisterSignal(source_mob, COMSIG_MOVABLE_PRE_THROW, PROC_REF(oxy_kill), override = TRUE)

last_level = new_level
Expand Down Expand Up @@ -232,7 +232,7 @@
if(new_level < PAIN_LEVEL_SEVERE)
UnregisterSignal(source_mob, list(
COMSIG_MOB_DRAGGED,
COMSIG_MOB_DEVOURED,
COMSIG_MOB_HAULED,
COMSIG_MOVABLE_PRE_THROW
))

Expand Down Expand Up @@ -294,14 +294,14 @@
if(H.species.flags & HAS_HARDCRIT)
source.apply_damage(20, OXY)

/datum/pain/proc/handle_devour(mob/living/source, mob/living/carbon/xenomorph/devourer)
/datum/pain/proc/handle_haul(mob/living/source, mob/living/carbon/xenomorph/hauler)
SIGNAL_HANDLER
if(source.chestburst)
return
if(source.ally_of_hivenumber(devourer.hivenumber))
if(source.ally_of_hivenumber(hauler.hivenumber))
return
oxy_kill(source)
return COMPONENT_CANCEL_DEVOUR
return COMPONENT_CANCEL_HAUL

/datum/pain/proc/oxy_kill(mob/living/source)
SIGNAL_HANDLER
Expand Down
2 changes: 1 addition & 1 deletion code/datums/pain/pain_yautja.dm
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
/datum/pain/yautja/oxyloss_drag(mob/living/source, mob/puller)
return

/datum/pain/yautja/handle_devour(mob/living/source)
/datum/pain/yautja/handle_haul(mob/living/source)
return

/datum/pain/yautja/oxy_kill(mob/living/source)
Expand Down
14 changes: 7 additions & 7 deletions code/datums/tutorial/xenomorph/xenomorph_basic.dm
Original file line number Diff line number Diff line change
Expand Up @@ -209,15 +209,15 @@
SIGNAL_HANDLER
TUTORIAL_ATOM_FROM_TRACKING(/mob/living/carbon/human, human_dummy)
UnregisterSignal(human_dummy, COMSIG_MOVABLE_XENO_START_PULLING)
message_to_player("Well done. Now devour the human by clicking on your character with the grab selected in your hand. You must not move during this process.")
update_objective("Devour the grabbed human by clicking on them with the grab in-hand.")
RegisterSignal(human_dummy, COMSIG_MOB_DEVOURED, PROC_REF(nest_cap_phase_five))
message_to_player("Well done. Now haul the human by clicking on your character with the grab selected in your hand. You must not move during this process.")
update_objective("Haul the grabbed human by clicking on them with the grab in-hand.")
RegisterSignal(human_dummy, COMSIG_MOB_HAULED, PROC_REF(nest_cap_phase_five))

/datum/tutorial/xenomorph/basic/proc/nest_cap_phase_five()
SIGNAL_HANDLER
message_to_player("Well done, you can reguritate the human using the new ability you have gained.")
message_to_player("Be careful. Real humans may put up a fight and can try to cut out of you from inside!")
give_action(xeno, /datum/action/xeno_action/onclick/regurgitate)
message_to_player("Well done, you can release the human using the new ability you have gained.")
message_to_player("Be careful. Real humans may put up a fight and can try to cut out of your grip, killing you!")
give_action(xeno, /datum/action/xeno_action/onclick/release_haul)
addtimer(CALLBACK(src, PROC_REF(nest_cap_phase_six)), 15 SECONDS)

/datum/tutorial/xenomorph/basic/proc/nest_cap_phase_six()
Expand All @@ -227,7 +227,7 @@

/datum/tutorial/xenomorph/basic/proc/nest_cap_phase_seven()
TUTORIAL_ATOM_FROM_TRACKING(/mob/living/carbon/human, human_dummy)
UnregisterSignal(human_dummy, COMSIG_MOB_DEVOURED)
UnregisterSignal(human_dummy, COMSIG_MOB_HAULED)
RegisterSignal(human_dummy, COMSIG_MOB_NESTED, PROC_REF(on_mob_nested))
message_to_player("Nest the captive human!")
update_objective("Nest the captive human!")
Expand Down
2 changes: 1 addition & 1 deletion code/game/jobs/job/civilians/other/liaison.dm
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
selection_class = "job_cl"
flags_startup_parameters = ROLE_ADD_TO_DEFAULT
gear_preset = /datum/equipment_preset/uscm_ship/liaison
entry_message_body = "As a <a href='"+WIKI_PLACEHOLDER+"'>representative of Weyland-Yutani Corporation</a>, your job requires you to stay in character at all times. While in the AO (Area of Operation), you are subject to orders given by military personnel. On ship, you are subject to orders only by the Command and Security departments. You are not required to follow any orders but you can be arrested if you do not. Your primary job is to observe and report back your findings to Weyland-Yutani. Follow regular game rules unless told otherwise by your superiors. Use your office fax machine to communicate with corporate headquarters or to acquire new directives. You may not receive anything back, and this is normal."
entry_message_body = "As a <a href='"+WIKI_PLACEHOLDER+"'>representative of Weyland-Yutani Corporation</a> from the Corporate Relations Department, your job requires you to stay in character at all times. While in the AO (Area of Operation), you are subject to orders given by military personnel. On ship, you are subject to orders only by the Command and Security departments. You are not required to follow any orders but you can be arrested if you do not. Your primary job is to observe and report back your findings to Weyland-Yutani. Follow regular game rules unless told otherwise by your superiors. Use your office fax machine to communicate with corporate headquarters or to acquire new directives. You may not receive anything back, and this is normal."
var/mob/living/carbon/human/active_liaison

/datum/job/civilian/liaison/generate_entry_conditions(mob/living/liaison, whitelist_status)
Expand Down
2 changes: 1 addition & 1 deletion code/game/jobs/job/civilians/support/field_doctor.dm
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
entry_message_body = "You are a <a href='"+WIKI_PLACEHOLDER+"'>Field Doctor</a> tasked with keeping the marines healthy and strong in the field, usually in the form of surgery. You must stay onboard the Almayer medical bay if there are no other doctors present and until the FOB is secured. Your superiors may also delay your deployment to the field."

AddTimelock(/datum/job/civilian/field_doctor, list(
JOB_MEDIC_ROLES = 5 HOURS
JOB_DOCTOR_ROLES = 5 HOURS
))

/obj/effect/landmark/start/field_doctor
Expand Down
5 changes: 5 additions & 0 deletions code/game/machinery/autolathe_datums.dm
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,11 @@
path = /obj/item/tool/wrench
category = AUTOLATHE_CATEGORY_TOOLS

/datum/autolathe/recipe/lightreplacer
name = "light replacer"
path = /obj/item/device/lightreplacer/empty
category = AUTOLATHE_CATEGORY_TOOLS

/datum/autolathe/recipe/mop
name = "mop"
path = /obj/item/tool/mop
Expand Down
Loading