")
visible_message("[user] gently taps [src] with [O].")
if(health>0 && prob(15))
custom_emote(1, "looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression.")
@@ -180,7 +180,7 @@
)
if( ! ( item_to_add.type in allowed_types ) )
- to_chat(usr, "You set [item_to_add] on [src]'s back, but \he shakes it off!")
+ to_chat(usr, "You set [item_to_add] on [src]'s back, but [p_they()] shake[p_s()] it off!")
if(!usr.drop_item())
to_chat(usr, "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s back!")
return
@@ -379,10 +379,10 @@
to_chat(user, "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!")
return 0
if(health <= 0)
- to_chat(user, "There is merely a dull, lifeless look in [real_name]'s eyes as you put the [item_to_add] on \him.")
+ to_chat(user, "There is merely a dull, lifeless look in [real_name]'s eyes as you put the [item_to_add] on [p_them()].")
else if(user)
user.visible_message("[user] puts [item_to_add] on [real_name]'s head. [src] looks at [user] and barks once.",
- "You put [item_to_add] on [real_name]'s head. [src] gives you a peculiar look, then wags \his tail once and barks.",
+ "You put [item_to_add] on [real_name]'s head. [src] gives you a peculiar look, then wags [p_their()] tail once and barks.",
"You hear a friendly-sounding bark.")
item_to_add.loc = src
src.inventory_head = item_to_add
@@ -392,7 +392,7 @@
if(user && !user.drop_item())
to_chat(user, "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!")
return 0
- to_chat(user, "You set [item_to_add] on [src]'s head, but \he shakes it off!")
+ to_chat(user, "You set [item_to_add] on [src]'s head, but [p_they()] shake[p_s()] it off!")
item_to_add.loc = loc
if(prob(25))
step_rand(item_to_add)
diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
index 70a64d2dbcb..b98d4181475 100644
--- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
+++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
@@ -35,7 +35,7 @@
var/emagged = 0 //is it getting ready to explode?
var/obj/item/mmi/mmi = null
- var/emagged_master = null //for administrative purposes, to see who emagged the spiderbot; also for a holder for if someone emags an empty frame first then inserts an MMI.
+ var/mob/emagged_master = null //for administrative purposes, to see who emagged the spiderbot; also for a holder for if someone emags an empty frame first then inserts an MMI.
/mob/living/simple_animal/spiderbot/Destroy()
if(emagged)
@@ -135,8 +135,8 @@
else
emagged = 1
to_chat(user, "You short out the security protocols and rewrite [src]'s internal memory.")
- to_chat(src, "You have been emagged; you are now completely loyal to [user] and their every order!")
- emagged_master = user.name
+ to_chat(src, "You have been emagged; you are now completely loyal to [user] and [user.p_their()] every order!")
+ emagged_master = user
add_attack_logs(user, src, "Emagged")
maxHealth = 60
health = 60
@@ -150,7 +150,7 @@
ckey = M.brainmob.ckey
name = "Spider-bot ([M.brainmob.name])"
if(emagged)
- to_chat(src, "You have been emagged; you are now completely loyal to [emagged_master] and their every order!")
+ to_chat(src, "You have been emagged; you are now completely loyal to [emagged_master] and [emagged_master.p_their()] every order!")
/mob/living/simple_animal/spiderbot/proc/update_icon()
if(mmi)
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm
index 5c25e9820e1..6027070dfc9 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm
@@ -229,7 +229,7 @@ Difficulty: Medium
playsound(src.loc, 'sound/effects/meteorimpact.ogg', 200, 1)
for(var/mob/living/L in orange(1, src))
if(L.stat)
- visible_message("[src] slams down on [L], crushing them!")
+ visible_message("[src] slams down on [L], crushing [L.p_them()]!")
L.gib()
else
L.adjustBruteLoss(75)
diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/black.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/black.dm
index 982a0eaae90..377b8ff335a 100644
--- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/black.dm
+++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/black.dm
@@ -36,7 +36,7 @@
L.reagents.add_reagent("terror_black_toxin", 30) // inject our special poison
visible_message("[src] buries its long fangs deep into the [inject_target] of [target]!")
else
- visible_message("[src] bites [target], but cannot inject venom into their [inject_target]!")
+ visible_message("[src] bites [target], but cannot inject venom into [target.p_their()] [inject_target]!")
L.attack_animal(src)
if(!ckey && (!(target in enemies) || L.reagents.has_reagent("terror_black_toxin", 60)))
step_away(src, L)
diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/gray.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/gray.dm
index 06b28c6400e..43c0e7b0be5 100644
--- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/gray.dm
+++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/gray.dm
@@ -33,7 +33,7 @@
if(W)
melee_damage_lower = initial(melee_damage_lower) * 2
melee_damage_upper = initial(melee_damage_upper) * 2
- visible_message("[src] savagely mauls [target] while they are stuck in the web!")
+ visible_message("[src] savagely mauls [target] while [L.p_theyre()] stuck in the web!")
else
melee_damage_lower = initial(melee_damage_lower)
melee_damage_upper = initial(melee_damage_upper)
diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm
index 9d6f977a1ae..64ef285ded8 100644
--- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm
+++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm
@@ -93,5 +93,5 @@
// instead of having a venom that only lasts seconds, we just add the eyeblur directly.
visible_message("[src] buries its fangs deep into the [inject_target] of [target]!")
else
- visible_message("[src] bites [target], but cannot inject venom into their [inject_target]!")
+ visible_message("[src] bites [target], but cannot inject venom into [target.p_their()] [inject_target]!")
L.attack_animal(src)
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm
index 21b1276425c..66e88af1e1b 100644
--- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm
+++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm
@@ -43,7 +43,7 @@
/mob/living/simple_animal/hostile/poison/terror_spider/prince/spider_specialattack(mob/living/carbon/human/L)
if(prob(15))
- visible_message("[src] rams into [L], knocking them to the floor!")
+ visible_message("[src] rams into [L], knocking [L.p_them()] to the floor!")
L.Weaken(5)
L.Stun(5)
else
diff --git a/code/modules/mob/living/simple_animal/pony.dm b/code/modules/mob/living/simple_animal/pony.dm
index 437c9b0ac4d..960f8fc0998 100644
--- a/code/modules/mob/living/simple_animal/pony.dm
+++ b/code/modules/mob/living/simple_animal/pony.dm
@@ -27,7 +27,7 @@
..()
if(stat == 2)
new /obj/item/reagent_containers/food/snacks/ectoplasm(src.loc)
- src.visible_message("\The [src] lets out a contented sigh as their form unwinds.")
+ src.visible_message("[src] lets out a contented sigh as [p_their()] form unwinds.")
src.ghostize()
qdel(src)
return
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index db84df47f52..beba84eaa3f 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -543,11 +543,11 @@ var/list/slot_equipment_priority = list( \
client.screen = list()
hud_used.show_hud(hud_used.hud_version)
-/mob/setDir(new_dir)
+/mob/setDir(new_dir)
if(forced_look)
if(isnum(forced_look))
dir = forced_look
- else
+ else
var/atom/A = locateUID(forced_look)
if(istype(A))
dir = get_cardinal_dir(src, A)
@@ -592,7 +592,7 @@ var/list/slot_equipment_priority = list( \
return
if(!src || !isturf(src.loc))
return 0
- if(istype(A, /obj/effect/decal/point))
+ if(istype(A, /obj/effect/temp_visual/point))
return 0
var/tile = get_turf(A)
@@ -600,12 +600,8 @@ var/list/slot_equipment_priority = list( \
return 0
changeNext_move(CLICK_CD_POINT)
- var/obj/P = new /obj/effect/decal/point(tile)
+ var/obj/P = new /obj/effect/temp_visual/point(tile)
P.invisibility = invisibility
- spawn (20)
- if(P)
- qdel(P)
-
return 1
/mob/proc/ret_grab(obj/effect/list_container/mobl/L as obj, flag)
@@ -1179,7 +1175,7 @@ var/list/slot_equipment_priority = list( \
new /obj/effect/decal/cleanable/vomit/green(location)
else
if(!no_text)
- visible_message("[src] pukes all over \himself!","You puke all over yourself!")
+ visible_message("[src] pukes all over [p_them()]self!","You puke all over yourself!")
location.add_vomit_floor(src, 1)
playsound(location, 'sound/effects/splat.ogg', 50, 1)
diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm
index 1c4b0f38fbe..593d077a562 100644
--- a/code/modules/mob/mob_grab.dm
+++ b/code/modules/mob/mob_grab.dm
@@ -269,7 +269,7 @@
to_chat(assailant, "You squeeze [affecting], but nothing interesting happens.")
return
- assailant.visible_message("[assailant] has reinforced \his grip on [affecting] (now neck)!")
+ assailant.visible_message("[assailant] has reinforced [assailant.p_their()] grip on [affecting] (now neck)!")
state = GRAB_NECK
icon_state = "grabbed+1"
assailant.setDir(get_dir(assailant, affecting))
@@ -282,11 +282,11 @@
hud.name = "kill"
affecting.Stun(10) //10 ticks of ensured grab
else if(state < GRAB_UPGRADING)
- assailant.visible_message("[assailant] starts to tighten \his grip on [affecting]'s neck!")
+ assailant.visible_message("[assailant] starts to tighten [assailant.p_their()] grip on [affecting]'s neck!")
hud.icon_state = "kill1"
state = GRAB_KILL
- assailant.visible_message("[assailant] has tightened \his grip on [affecting]'s neck!")
+ assailant.visible_message("[assailant] has tightened [assailant.p_their()] grip on [affecting]'s neck!")
add_attack_logs(assailant, affecting, "Strangled")
assailant.next_move = world.time + 10
@@ -332,7 +332,7 @@
if(last_hit_zone == "head") //This checks the hitzone the user has selected. In this specific case, they have the head selected.
if(affecting.lying)
return
- assailant.visible_message("[assailant] thrusts \his head into [affecting]'s skull!") //A visible message for what is going on.
+ assailant.visible_message("[assailant] thrusts [assailant.p_their()] head into [affecting]'s skull!") //A visible message for what is going on.
var/damage = 5
var/obj/item/clothing/hat = attacker.head
if(istype(hat))
@@ -354,7 +354,7 @@
if(!affected.internal_bodyparts_by_name["eyes"])
to_chat(assailant, "You cannot locate any eyes on [affecting]!")
return
- assailant.visible_message("[assailant] presses \his fingers into [affecting]'s eyes!")
+ assailant.visible_message("[assailant] presses [assailant.p_their()] fingers into [affecting]'s eyes!")
to_chat(affecting, "You feel immense pain as digits are being pressed into your eyes!")
add_attack_logs(assailant, affecting, "Eye-fucked with their fingers")
var/obj/item/organ/internal/eyes/eyes = affected.get_int_organ(/obj/item/organ/internal/eyes)
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index fdd9266c128..274c1602e04 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -4,6 +4,7 @@
var/spawning = 0 //Referenced when you want to delete the new_player later on in the code.
var/totalPlayers = 0 //Player counts for the Lobby tab
var/totalPlayersReady = 0
+ var/tos_consent = FALSE
universal_speak = 1
invisibility = 101
@@ -19,7 +20,40 @@
/mob/new_player/verb/new_player_panel()
set src = usr
- new_player_panel_proc()
+
+ if(handle_tos_consent())
+ new_player_panel_proc()
+
+/mob/new_player/proc/handle_tos_consent()
+ if(!GLOB.join_tos)
+ tos_consent = TRUE
+ return TRUE
+
+ establish_db_connection()
+ if(!dbcon.IsConnected())
+ tos_consent = TRUE
+ return TRUE
+
+ var/DBQuery/query = dbcon.NewQuery("SELECT * FROM [format_table_name("privacy")] WHERE ckey='[src.ckey]' AND consent=1")
+ query.Execute()
+ while(query.NextRow())
+ tos_consent = TRUE
+ return TRUE
+
+ privacy_consent()
+ return FALSE
+
+/mob/new_player/proc/privacy_consent()
+ src << browse(null, "window=playersetup")
+ var/output = GLOB.join_tos
+ output += "I consent"
+ output += "
I DO NOT consent"
+ src << browse(output,"window=privacy_consent;size=500x300")
+ var/datum/browser/popup = new(src, "privacy_consent", "
Privacy Consent
", 500, 400)
+ popup.set_window_options("can_close=0")
+ popup.set_content(output)
+ popup.open(0)
+ return
/mob/new_player/proc/new_player_panel_proc()
@@ -43,6 +77,9 @@
output += "Observe
"
+ if(GLOB.join_tos)
+ output += "Terms of Service
"
+
if(!IsGuestKey(src.key))
establish_db_connection()
@@ -109,11 +146,28 @@
/mob/new_player/Topic(href, href_list[])
if(!client) return 0
+ if(href_list["consent_signed"])
+ var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss")
+ var/DBQuery/query = dbcon.NewQuery("REPLACE INTO [format_table_name("privacy")] (ckey, datetime, consent) VALUES ('[ckey]', '[sqltime]', 1)")
+ query.Execute()
+ src << browse(null, "window=privacy_consent")
+ tos_consent = 1
+ new_player_panel_proc()
+ if(href_list["consent_rejected"])
+ tos_consent = 0
+ to_chat(usr, "You must consent to the terms of service before you can join!")
+ var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss")
+ var/DBQuery/query = dbcon.NewQuery("REPLACE INTO [format_table_name("privacy")] (ckey, datetime, consent) VALUES ('[ckey]', '[sqltime]', 0)")
+ query.Execute()
+
if(href_list["show_preferences"])
client.prefs.ShowChoices(src)
return 1
if(href_list["ready"])
+ if(!tos_consent)
+ to_chat(usr, "You must consent to the terms of service before you can join!")
+ return 0
ready = !ready
new_player_panel_proc()
@@ -126,6 +180,9 @@
new_player_panel_proc()
if(href_list["observe"])
+ if(!tos_consent)
+ to_chat(usr, "You must consent to the terms of service before you can join!")
+ return 0
if(alert(src,"Are you sure you wish to observe? You cannot normally join the round after doing this!","Player Setup","Yes","No") == "Yes")
if(!client) return 1
@@ -155,8 +212,14 @@
respawnable_list += observer
qdel(src)
return 1
+ if(href_list["tos"])
+ privacy_consent()
+ return 0
if(href_list["late_join"])
+ if(!tos_consent)
+ to_chat(usr, "You must consent to the terms of service before you can join!")
+ return 0
if(!ticker || ticker.current_state != GAME_STATE_PLAYING)
to_chat(usr, "The round is either not ready, or has already finished...")
return
diff --git a/code/modules/modular_computers/file_system/programs/command/card.dm b/code/modules/modular_computers/file_system/programs/command/card.dm
index 6ebf9228848..b570687569a 100644
--- a/code/modules/modular_computers/file_system/programs/command/card.dm
+++ b/code/modules/modular_computers/file_system/programs/command/card.dm
@@ -238,7 +238,7 @@
jobdatum = J
break
if(!jobdatum)
- to_chat(usr, "\red No log exists for this job: [t1]")
+ to_chat(usr, "No log exists for this job: [t1]")
return
access = jobdatum.get_access()
diff --git a/code/modules/ninja/martial_art.dm b/code/modules/ninja/martial_art.dm
index b6562d8377d..c97a3e505c3 100644
--- a/code/modules/ninja/martial_art.dm
+++ b/code/modules/ninja/martial_art.dm
@@ -20,7 +20,7 @@
/obj/item/creeping_widow_injector/attack_self(mob/living/carbon/human/user as mob)
if(!used)
user.visible_message("You stick the [src]'s needle into your arm and press the button.", \
- "[user] sticks the [src]'s needle \his arm and presses the button.")
+ "[user] sticks the [src]'s needle [user.p_their()] arm and presses the button.")
to_chat(user, "The nanomachines in the [src] flow through your bloodstream.")
var/datum/martial_art/ninja_martial_art/N = new/datum/martial_art/ninja_martial_art(null)
@@ -98,8 +98,8 @@
D.silent += 1
D.adjustOxyLoss(1)
else
- D.visible_message("[A] loses \his grip on [D]'s neck!", \
- "[A] loses \his grip on your neck!")
+ D.visible_message("[A] loses [A.p_their()] grip on [D]'s neck!", \
+ "[A] loses [A.p_their()] grip on your neck!")
has_choke_hold = 0
return 0
I++
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index db3f7cddce7..d37506b3d82 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -379,7 +379,7 @@
if(is_hot(P))
if((CLUMSY in user.mutations) && prob(10))
- user.visible_message("[user] accidentally ignites themselves!", \
+ user.visible_message("[user] accidentally ignites [user.p_them()]self!", \
"You miss the paper and accidentally light yourself on fire!")
user.unEquip(P)
user.adjust_fire_stacks(1)
diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm
index 6656eefcdf1..08cb7b6555e 100644
--- a/code/modules/paperwork/paper_bundle.dm
+++ b/code/modules/paperwork/paper_bundle.dm
@@ -79,8 +79,8 @@
if(istype(P, /obj/item/lighter/zippo))
class = ""
- user.visible_message("[class][user] holds \the [P] up to \the [src], it looks like \he's trying to burn it!", \
- "[class]You hold \the [P] up to \the [src], burning it slowly.")
+ user.visible_message("[class][user] holds [P] up to [src], it looks like [user.p_theyre()] trying to burn it!", \
+ "[class]You hold [P] up to [src], burning it slowly.")
spawn(20)
if(get_dist(src, user) < 2 && user.get_active_hand() == P && P.lit)
diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm
index 1c4c0b357cc..fbbfacb0b8f 100644
--- a/code/modules/paperwork/paperplane.dm
+++ b/code/modules/paperwork/paperplane.dm
@@ -33,7 +33,7 @@
/obj/item/paperplane/suicide_act(mob/living/user)
user.Stun(10)
- user.visible_message("[user] jams [name] in \his nose. It looks like \he's trying to commit suicide!")
+ user.visible_message("[user] jams [name] in [user.p_their()] nose. It looks like [user.p_theyre()] trying to commit suicide!")
user.EyeBlurry(6)
var/obj/item/organ/internal/eyes/E = user.get_int_organ(/obj/item/organ/internal/eyes)
if(E)
@@ -73,7 +73,7 @@
else if(is_hot(P))
if(user.disabilities & CLUMSY && prob(10))
- user.visible_message("[user] accidentally ignites themselves!", \
+ user.visible_message("[user] accidentally ignites [user.p_them()]self!", \
"You miss [src] and accidentally light yourself on fire!")
user.unEquip(P)
user.adjust_fire_stacks(1)
diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm
index b4446f67e0e..4e3aaefd1eb 100644
--- a/code/modules/paperwork/pen.dm
+++ b/code/modules/paperwork/pen.dm
@@ -25,7 +25,7 @@
pressure_resistance = 2
/obj/item/pen/suicide_act(mob/user)
- to_chat(viewers(user), "[user] starts scribbling numbers over \himself with the [src.name]! It looks like \he's trying to commit sudoku.")
+ to_chat(viewers(user), "[user] starts scribbling numbers over [user.p_them()]self with the [name]! It looks like [user.p_theyre()] trying to commit sudoku.")
return (BRUTELOSS)
/obj/item/pen/blue
diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm
index 0ab4db844e9..40759ab792c 100644
--- a/code/modules/paperwork/photography.dm
+++ b/code/modules/paperwork/photography.dm
@@ -56,8 +56,8 @@
if(istype(P, /obj/item/lighter/zippo))
class = ""
- user.visible_message("[class][user] holds \the [P] up to \the [src], it looks like \he's trying to burn it!", \
- "[class]You hold \the [P] up to \the [src], burning it slowly.")
+ user.visible_message("[class][user] holds \the [P] up to \the [src], it looks like [user.p_theyre()] trying to burn it!", \
+ "[class]You hold [P] up to [src], burning it slowly.")
spawn(20)
if(get_dist(src, user) < 2 && user.get_active_hand() == P && P.lit)
diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm
index ad67a53cd5b..5a101629c94 100644
--- a/code/modules/paperwork/stamps.dm
+++ b/code/modules/paperwork/stamps.dm
@@ -14,7 +14,7 @@
attack_verb = list("stamped")
/obj/item/stamp/suicide_act(mob/user)
- user.visible_message("[user] stamps 'VOID' on \his forehead, then promptly falls over, dead.")
+ user.visible_message("[user] stamps 'VOID' on [user.p_their()] forehead, then promptly falls over, dead.")
return (OXYLOSS)
/obj/item/stamp/qm
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index 7580621834f..25a47f19e04 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -501,9 +501,9 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list(
/obj/item/stack/cable_coil/suicide_act(mob/user)
if(locate(/obj/structure/stool) in user.loc)
- user.visible_message("[user] is making a noose with the [name]! It looks like \he's trying to commit suicide.")
+ user.visible_message("[user] is making a noose with the [name]! It looks like [user.p_theyre()] trying to commit suicide.")
else
- user.visible_message("[user] is strangling \himself with the [name]! It looks like \he's trying to commit suicide.")
+ user.visible_message("[user] is strangling [user.p_them()]self with the [name]! It looks like [user.p_theyre()] trying to commit suicide.")
return(OXYLOSS)
/obj/item/stack/cable_coil/New(loc, length = MAXCOIL, var/paramcolor = null)
diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm
index ff7ee7b6784..3bc2b5bc39b 100644
--- a/code/modules/power/cell.dm
+++ b/code/modules/power/cell.dm
@@ -89,7 +89,7 @@
to_chat(user, "The charge meter reads [round(percent() )]%.")
/obj/item/stock_parts/cell/suicide_act(mob/user)
- to_chat(viewers(user), "[user] is licking the electrodes of the [src]! It looks like \he's trying to commit suicide.")
+ to_chat(viewers(user), "[user] is licking the electrodes of the [src]! It looks like [user.p_theyre()] trying to commit suicide.")
return (FIRELOSS)
/obj/item/stock_parts/cell/attackby(obj/item/W, mob/user, params)
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 3eac3486791..df12267015f 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -726,7 +726,7 @@
update()
/obj/item/light/suicide_act(mob/living/carbon/human/user)
- user.visible_message("[user] touches \the [src], burning their hands off!", "You touch \the [src], burning your hands off!")
+ user.visible_message("[user] touches [src], burning [user.p_their()] hands off!", "You touch [src], burning your hands off!")
for(var/oname in list("l_hand", "r_hand"))
var/obj/item/organ/external/limb = user.get_organ(oname)
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index be17b3f65db..43d418aadf7 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -244,7 +244,7 @@
ui_interact(user)
/obj/machinery/power/supermatter_shard/attack_hand(mob/user as mob)
- user.visible_message("\The [user] reaches out and touches \the [src], inducing a resonance... \his body starts to glow and bursts into flames before flashing into ash.",\
+ user.visible_message("\The [user] reaches out and touches \the [src], inducing a resonance... [user.p_their(TRUE)] body starts to glow and bursts into flames before flashing into ash.",\
"You reach out and touch \the [src]. Everything starts burning and all you can hear is ringing. Your last thought is \"That was not a wise decision.\"",\
"You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.")
@@ -309,7 +309,7 @@
/obj/machinery/power/supermatter_shard/Bumped(atom/AM as mob|obj)
if(istype(AM, /mob/living))
- AM.visible_message("\The [AM] slams into \the [src] inducing a resonance... \his body starts to glow and catch flame before flashing into ash.",\
+ AM.visible_message("\The [AM] slams into \the [src] inducing a resonance... [AM.p_their(TRUE)] body starts to glow and catch flame before flashing into ash.",\
"You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"",\
"You hear an unearthly noise as a wave of heat washes over you.")
else if(isobj(AM) && !istype(AM, /obj/effect))
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index b54d5bff21f..51bf515ca1e 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -347,7 +347,7 @@ obj/item/gun/proc/newshot()
return
if(user == target)
- target.visible_message("[user] sticks [src] in their mouth, ready to pull the trigger...", \
+ target.visible_message("[user] sticks [src] in [user.p_their()] mouth, ready to pull the trigger...", \
"You stick [src] in your mouth, ready to pull the trigger...")
else
target.visible_message("[user] points [src] at [target]'s head, ready to pull the trigger...", \
diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm
index fd6c14c4e6b..795b5942845 100644
--- a/code/modules/projectiles/guns/energy.dm
+++ b/code/modules/projectiles/guns/energy.dm
@@ -146,10 +146,10 @@
/obj/item/gun/energy/suicide_act(mob/user)
if(can_shoot())
- user.visible_message("[user] is putting the barrel of the [name] in \his mouth. It looks like \he's trying to commit suicide.")
+ user.visible_message("[user] is putting the barrel of the [name] in [user.p_their()] mouth. It looks like [user.p_theyre()] trying to commit suicide.")
sleep(25)
if(user.l_hand == src || user.r_hand == src)
- user.visible_message("[user] melts \his face off with the [name]!")
+ user.visible_message("[user] melts [user.p_their()] face off with the [name]!")
playsound(loc, fire_sound, 50, 1, -1)
var/obj/item/ammo_casing/energy/shot = ammo_type[select]
power_supply.use(shot.e_cost)
@@ -159,7 +159,7 @@
user.visible_message("[user] panics and starts choking to death!")
return(OXYLOSS)
else
- user.visible_message("[user] is pretending to blow \his brains out with the [name]! It looks like \he's trying to commit suicide!")
+ user.visible_message("[user] is pretending to blow [user.p_their()] brains out with the [name]! It looks like [user.p_theyre()] trying to commit suicide!")
playsound(loc, 'sound/weapons/empty.ogg', 50, 1, -1)
return (OXYLOSS)
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 7d2568a7199..7559fc1a591 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -128,7 +128,7 @@
/obj/item/gun/energy/kinetic_accelerator/suicide_act(mob/user)
if(!suppressed)
playsound(loc, 'sound/weapons/kenetic_reload.ogg', 60, 1)
- user.visible_message("[user] cocks the [name] and pretends to blow \his brains out! It looks like \he's trying to commit suicide!")
+ user.visible_message("[user] cocks the [name] and pretends to blow [user.p_their()] brains out! It looks like [user.p_theyre()] trying to commit suicide!")
shoot_live_shot()
return (OXYLOSS)
diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm
index a1840663350..94f397b45bf 100644
--- a/code/modules/projectiles/guns/magic.dm
+++ b/code/modules/projectiles/guns/magic.dm
@@ -76,6 +76,6 @@
return
/obj/item/gun/magic/suicide_act(mob/user)
- user.visible_message("[user] is twisting the [name] above \his head, releasing a magical blast! It looks like \he's trying to commit suicide.")
+ user.visible_message("[user] is twisting the [name] above [user.p_their()] head, releasing a magical blast! It looks like [user.p_theyre()] trying to commit suicide.")
playsound(loc, fire_sound, 50, 1, -1)
return FIRELOSS
diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm
index 1a8e5e45946..cae9d11cbb6 100644
--- a/code/modules/projectiles/guns/magic/wand.dm
+++ b/code/modules/projectiles/guns/magic/wand.dm
@@ -48,9 +48,9 @@
update_icon()
/obj/item/gun/magic/wand/proc/zap_self(mob/living/user)
- user.visible_message("[user] zaps \himself with [src].")
+ user.visible_message("[user] zaps [user.p_them()]self with [src].")
playsound(user, fire_sound, 50, 1)
- user.create_attack_log("[key_name(user)] zapped \himself with a [src]")
+ user.create_attack_log("[key_name(user)] zapped [user.p_them()]self with a [src]")
/////////////////////////////////////
//WAND OF DEATH
diff --git a/code/modules/projectiles/guns/misc/blastcannon.dm b/code/modules/projectiles/guns/misc/blastcannon.dm
index f6881208a32..89cceab6cd3 100644
--- a/code/modules/projectiles/guns/misc/blastcannon.dm
+++ b/code/modules/projectiles/guns/misc/blastcannon.dm
@@ -76,7 +76,7 @@
var/heavy = power * 0.2
var/medium = power * 0.5
var/light = power
- user.visible_message("[user] opens [bomb] on \his [name] and fires a blast wave at [target]!","You open [bomb] on your [name] and fire a blast wave at [target]!")
+ user.visible_message("[user] opens [bomb] on [user.p_their()] [name] and fires a blast wave at [target]!","You open [bomb] on your [name] and fire a blast wave at [target]!")
playsound(user, "explosion", 100, 1)
var/turf/starting = get_turf(user)
var/turf/targturf = get_turf(target)
diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm
index 2b8ff6a59f8..0ff5e57e7c5 100644
--- a/code/modules/projectiles/guns/projectile.dm
+++ b/code/modules/projectiles/guns/projectile.dm
@@ -137,17 +137,17 @@
/obj/item/gun/projectile/suicide_act(mob/user)
if(chambered && chambered.BB && !chambered.BB.nodamage)
- user.visible_message("[user] is putting the barrel of the [name] in \his mouth. It looks like \he's trying to commit suicide.")
+ user.visible_message("[user] is putting the barrel of the [name] in [user.p_their()] mouth. It looks like [user.p_theyre()] trying to commit suicide.")
sleep(25)
if(user.l_hand == src || user.r_hand == src)
process_fire(user, user, 0, zone_override = "head")
- user.visible_message("[user] blows \his brains out with the [name]!")
+ user.visible_message("[user] blows [user.p_their()] brains out with the [name]!")
return(BRUTELOSS)
else
user.visible_message("[user] panics and starts choking to death!")
return(OXYLOSS)
else
- user.visible_message("[user] is pretending to blow \his brains out with the [name]! It looks like \he's trying to commit suicide!")
+ user.visible_message("[user] is pretending to blow [user.p_their()] brains out with the [name]! It looks like [user.p_theyre()] trying to commit suicide!")
playsound(loc, 'sound/weapons/empty.ogg', 50, 1, -1)
return (OXYLOSS)
diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm
index 502c69bed9c..c4c6f76a963 100644
--- a/code/modules/projectiles/guns/projectile/revolver.dm
+++ b/code/modules/projectiles/guns/projectile/revolver.dm
@@ -244,7 +244,7 @@
if(zone == "head" || zone == "eyes" || zone == "mouth")
shoot_self(user, zone)
else
- user.visible_message("[user.name] cowardly fires [src] at \his [zone]!", "You cowardly fire [src] at your [zone]!", "You hear a gunshot!")
+ user.visible_message("[user.name] cowardly fires [src] at [user.p_their()] [zone]!", "You cowardly fire [src] at your [zone]!", "You hear a gunshot!")
return
user.visible_message("*click*")
@@ -252,7 +252,7 @@
/obj/item/gun/projectile/revolver/russian/proc/shoot_self(mob/living/carbon/human/user, affecting = "head")
user.apply_damage(300, BRUTE, affecting)
- user.visible_message("[user.name] fires [src] at \his head!", "You fire [src] at your head!", "You hear a gunshot!")
+ user.visible_message("[user.name] fires [src] at [user.p_their()] head!", "You fire [src] at your head!", "You hear a gunshot!")
/obj/item/gun/projectile/revolver/capgun
name = "cap gun"
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index becada9f19e..761fb50179c 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -77,7 +77,7 @@
/obj/item/projectile/beam/lasertag
name = "laser tag beam"
icon_state = "omnilaser"
- hitsound = null
+ hitsound = 'sound/weapons/tap.ogg'
damage = 0
damage_type = STAMINA
flag = "laser"
diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm
index 4521dc8d7ba..3fe2277ed3b 100644
--- a/code/modules/projectiles/projectile/magic.dm
+++ b/code/modules/projectiles/projectile/magic.dm
@@ -32,7 +32,7 @@
else
G.death()
- visible_message("[G] topples backwards as the death bolt impacts them!")
+ visible_message("[G] topples backwards as the death bolt impacts [G.p_them()]!")
/obj/item/projectile/magic/fireball/Range()
var/turf/T1 = get_step(src,turn(dir, -45))
diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm
index 6ac21128e56..2c774b7f3dd 100644
--- a/code/modules/projectiles/projectile/special.dm
+++ b/code/modules/projectiles/projectile/special.dm
@@ -8,14 +8,14 @@
/obj/item/projectile/ion/on_hit(var/atom/target, var/blocked = 0)
..()
- empulse(target, 1, 1)
+ empulse(target, 1, 1, 1)
return 1
/obj/item/projectile/ion/weak
/obj/item/projectile/ion/weak/on_hit(atom/target, blocked = 0)
..()
- empulse(target, 0, 0)
+ empulse(target, 0, 0, 1)
return 1
/obj/item/projectile/bullet/gyro
@@ -137,7 +137,7 @@
if(prob(15))
M.apply_effect((rand(30,80)),IRRADIATE)
M.Weaken(5)
- M.visible_message("[M] writhes in pain as \his vacuoles boil.", "You writhe in pain as your vacuoles boil!", "You hear the crunching of leaves.")
+ M.visible_message("[M] writhes in pain as [M.p_their()] vacuoles boil.", "You writhe in pain as your vacuoles boil!", "You hear the crunching of leaves.")
if(prob(35))
if(prob(80))
randmutb(M)
diff --git a/code/modules/reagents/chemistry/reagents/drugs.dm b/code/modules/reagents/chemistry/reagents/drugs.dm
index 6a4ede5fe50..a2bd35ae75a 100644
--- a/code/modules/reagents/chemistry/reagents/drugs.dm
+++ b/code/modules/reagents/chemistry/reagents/drugs.dm
@@ -208,7 +208,7 @@
M.reagents.add_reagent("jagged_crystals", 5)
else if(effect <= 7)
M.emote("scream")
- M.visible_message("[M] nervously scratches at their skin!")
+ M.visible_message("[M] nervously scratches at [M.p_their()] skin!")
M.Jitter(10)
M.adjustBruteLoss(5)
M.emote("twitch_s")
@@ -315,7 +315,7 @@
var/effect = ..()
if(severity == 1)
if(effect <= 2)
- M.visible_message("[M] can't seem to control their legs!")
+ M.visible_message("[M] can't seem to control [M.p_their()] legs!")
M.AdjustConfused(20)
M.Weaken(4)
else if(effect <= 4)
@@ -356,7 +356,7 @@
head_organ.f_style = "Very Long Beard"
H.update_hair()
H.update_fhair()
- H.visible_message("[H] has a wild look in their eyes!")
+ H.visible_message("[H] has a wild look in [H.p_their()] eyes!")
if(check < 60)
M.SetParalysis(0)
M.SetStunned(0)
@@ -368,7 +368,7 @@
M.AdjustConfused(10)
if(check < 8)
M.reagents.add_reagent(pick("methamphetamine", "crank", "neurotoxin"), rand(1,5))
- M.visible_message("[M] scratches at something under their skin!")
+ M.visible_message("[M] scratches at something under [M.p_their()] skin!")
M.adjustBruteLoss(5)
else if(check < 16)
M.AdjustHallucinate(30)
@@ -427,7 +427,7 @@
M.reagents.add_reagent("jagged_crystals", 5)
else if(effect <= 7)
M.emote("scream")
- M.visible_message("[M] tears at their own skin!")
+ M.visible_message("[M] tears at [M.p_their()] own skin!")
M.adjustBruteLoss(5)
M.reagents.add_reagent("jagged_crystals", 5)
M.emote("twitch")
@@ -541,7 +541,7 @@
var/effect = ..()
if(severity == 1)
if(effect <= 2)
- M.visible_message("[M] can't seem to control their legs!")
+ M.visible_message("[M] can't seem to control [M.p_their()] legs!")
M.AdjustConfused(33)
M.Weaken(2)
else if(effect <= 4)
diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm
index ada22d5b139..a979d350c2a 100644
--- a/code/modules/reagents/chemistry/reagents/medicine.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine.dm
@@ -73,7 +73,7 @@
M.visible_message("[M] suddenly and violently vomits!")
M.fakevomit(no_text = 1)
else if(effect <= 5)
- M.visible_message("[M] staggers and drools, their eyes bloodshot!")
+ M.visible_message("[M] staggers and drools, [M.p_their()] eyes bloodshot!")
M.Dizzy(8)
M.Weaken(4)
if(effect <= 15)
@@ -277,7 +277,7 @@
if(severity == 1) //lesser
M.stuttering += 1
if(effect <= 1)
- M.visible_message("[M] suddenly cluches their gut!")
+ M.visible_message("[M] suddenly cluches [M.p_their()] gut!")
M.emote("scream")
M.Stun(4)
M.Weaken(4)
@@ -293,7 +293,7 @@
M.Jitter(30)
else if(severity == 2) // greater
if(effect <= 2)
- M.visible_message("[M] suddenly cluches their gut!")
+ M.visible_message("[M] suddenly cluches [M.p_their()] gut!")
M.emote("scream")
M.Stun(7)
M.Weaken(7)
@@ -446,7 +446,7 @@
M.visible_message("[M] suddenly and violently vomits!")
M.fakevomit(no_text = 1)
else if(effect <= 5)
- M.visible_message("[M.name] staggers and drools, their eyes bloodshot!")
+ M.visible_message("[M.name] staggers and drools, [M.p_their()] eyes bloodshot!")
M.Dizzy(2)
M.Weaken(3)
if(effect <= 15)
@@ -597,7 +597,7 @@
M.visible_message("[M] suddenly and violently vomits!")
M.fakevomit(no_text = 1)
else if(effect <= 5)
- M.visible_message("[M] staggers and drools, their eyes bloodshot!")
+ M.visible_message("[M] staggers and drools, [M.p_their()] eyes bloodshot!")
M.Dizzy(2)
M.Weaken(3)
if(effect <= 15)
diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm
index e0777e9ccef..cab45b6a587 100644
--- a/code/modules/reagents/chemistry/reagents/toxins.dm
+++ b/code/modules/reagents/chemistry/reagents/toxins.dm
@@ -557,7 +557,7 @@
M.adjustBruteLoss(5)
M.Weaken(5)
M.AdjustJitter(6)
- M.visible_message("[M] falls to the floor, scratching themselves violently!")
+ M.visible_message("[M] falls to the floor, scratching [M.p_them()]self violently!")
M.emote("scream")
..()
@@ -1015,7 +1015,7 @@
M.Drowsy(10)
if(11)
M.Paralyse(10)
- M.visible_message("[M] seizes up and falls limp, their eyes dead and lifeless...") //so you can't trigger deathgasp emote on people. Edge case, but necessary.
+ M.visible_message("[M] seizes up and falls limp, [M.p_their()] eyes dead and lifeless...") //so you can't trigger deathgasp emote on people. Edge case, but necessary.
if(12 to 60)
M.Paralyse(10)
if(61 to INFINITY)
diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
index aa5e16adc04..4df7a525b88 100644
--- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm
+++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
@@ -334,7 +334,7 @@
/datum/chemical_reaction/slimeoverload/on_reaction(datum/reagents/holder, created_volume)
feedback_add_details("slime_cores_used","[type]")
- empulse(get_turf(holder.my_atom), 3, 7)
+ empulse(get_turf(holder.my_atom), 3, 7, 1)
/datum/chemical_reaction/slimecell
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index e405dbe169c..02d71db8719 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -49,14 +49,14 @@
user.newtonian_move(get_dir(A, user))
if(reagents.has_reagent("sacid"))
- msg_admin_attack("[key_name_admin(user)] fired sulphuric acid from \a [src].")
- log_game("[key_name(user)] fired sulphuric acid from \a [src].")
+ msg_admin_attack("[key_name_admin(user)] fired sulphuric acid from \a [src] at [COORD(src)].")
+ log_game("[key_name(user)] fired sulphuric acid from \a [src] at [COORD(src)].")
if(reagents.has_reagent("facid"))
- msg_admin_attack("[key_name_admin(user)] fired fluorosulfuric acid from \a [src].")
- log_game("[key_name(user)] fired fluorosulfuric Acid from \a [src].")
+ msg_admin_attack("[key_name_admin(user)] fired fluorosulfuric acid from \a [src] at [COORD(src)].")
+ log_game("[key_name(user)] fired fluorosulfuric Acid from \a [src] at [COORD(src)].")
if(reagents.has_reagent("lube"))
- msg_admin_attack("[key_name_admin(user)] fired space lube from \a [src].")
- log_game("[key_name(user)] fired space lube from \a [src].")
+ msg_admin_attack("[key_name_admin(user)] fired space lube from \a [src] at [COORD(src)].")
+ log_game("[key_name(user)] fired space lube from \a [src] at [COORD(src)].")
return
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index a80c4142d87..322f392950d 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -9,6 +9,7 @@
var/tank_volume = 1000 //In units, how much the dispenser can hold
var/reagent_id = "water" //The ID of the reagent that the dispenser uses
+ var/lastrigger = "" // The last person to rig this fuel tank - Stored with the object. Only the last person matter for investigation
/obj/structure/reagent_dispensers/attackby(obj/item/W, mob/user, params)
return
@@ -77,11 +78,16 @@
..()
if(!QDELETED(src)) //wasn't deleted by the projectile's effects.
if(!P.nodamage && ((P.damage_type == BURN) || (P.damage_type == BRUTE)))
- message_admins("[key_name_admin(P.firer)] triggered a fueltank explosion.")
- log_game("[key_name(P.firer)] triggered a fueltank explosion.")
+ message_admins("[key_name_admin(P.firer)] triggered a fueltank explosion with [P.name] at [COORD(loc)] ")
+ log_game("[key_name(P.firer)] triggered a fueltank explosion with [P.name] at [COORD(loc)]")
+ investigate_log("[key_name(P.firer)] triggered a fueltank explosion with [P.name] at [COORD(loc)]", INVESTIGATE_BOMB)
boom()
-/obj/structure/reagent_dispensers/fueltank/boom()
+/obj/structure/reagent_dispensers/fueltank/boom(var/rigtrigger = FALSE) // Prevent case where someone who rigged the tank is blamed for the explosion when the rig isn't what triggered the explosion
+ if(rigtrigger == TRUE) // If the explosion is triggered by an assembly holder
+ message_admins("A fueltank, last rigged by [lastrigger], exploded at [COORD(loc)]") // Then admin is informed of the last person who rigged the fuel tank
+ log_game("A fueltank, last rigged by [lastrigger], exploded at [COORD(loc)]")
+ investigate_log("A fueltank, last rigged by [lastrigger], exploded at [COORD(loc)]", INVESTIGATE_BOMB)
explosion(loc, 0, 1, 5, 7, 10, flame_range = 5)
qdel(src)
@@ -111,6 +117,7 @@
usr.visible_message("[usr] detaches [rig] from [src].", "You detach [rig] from [src].")
rig.forceMove(get_turf(usr))
rig = null
+ lastrigger = null
overlays.Cut()
/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/I, mob/user, params)
@@ -124,9 +131,11 @@
var/obj/item/assembly_holder/H = I
if(istype(H.a_left, /obj/item/assembly/igniter) || istype(H.a_right, /obj/item/assembly/igniter))
- msg_admin_attack("[key_name_admin(user)] rigged a fueltank for explosion (JMP)")
- log_game("[key_name(user)] rigged fueltank a fueltank for explosion at [loc.x], [loc.y], [loc.z]")
+ msg_admin_attack("[key_name_admin(user)] rigged [src.name] with [I.name] for explosion (JMP)")
+ log_game("[key_name(user)] rigged [src.name] with [I.name] for explosion at [COORD(loc)]")
+ investigate_log("[key_name(user)] rigged [src.name] with [I.name] for explosion at [COORD(loc)]", INVESTIGATE_BOMB)
+ lastrigger = "[key_name(user)]"
rig = H
user.drop_item()
H.forceMove(src)
@@ -146,13 +155,14 @@
to_chat(user, "Your [W] is already full!")
return
reagents.trans_to(W, W.max_fuel)
- user.visible_message("[user] refills \his [W].", "You refill [W].")
+ user.visible_message("[user] refills [user.p_their()] [W].", "You refill [W].")
playsound(src, 'sound/effects/refill.ogg', 50, 1)
W.update_icon()
else
- user.visible_message("[user] catastrophically fails at refilling \his [W]!", "That was stupid of you.")
- message_admins("[key_name_admin(user)] triggered a fueltank explosion.")
- log_game("[key_name(user)] triggered a fueltank explosion.")
+ user.visible_message("[user] catastrophically fails at refilling [user.p_their()] [W]!", "That was stupid of you.")
+ message_admins("[key_name_admin(user)] triggered a fueltank explosion at [COORD(loc)]")
+ log_game("[key_name(user)] triggered a fueltank explosion at [COORD(loc)]")
+ investigate_log("[key_name(user)] triggered a fueltank explosion at [COORD(loc)]", INVESTIGATE_BOMB)
boom()
else
..()
diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm
index ba193744467..3658846a696 100644
--- a/code/modules/recycling/disposal-construction.dm
+++ b/code/modules/recycling/disposal-construction.dm
@@ -250,8 +250,6 @@
var/obj/structure/disposaloutlet/P = new /obj/structure/disposaloutlet(src.loc)
src.transfer_fingerprints_to(P)
P.dir = dir
- var/obj/structure/disposalpipe/trunk/Trunk = CP
- Trunk.linked = P
else if(ptype==8) // Disposal outlet
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index 3907ed052a6..aaf35238d80 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -36,19 +36,19 @@
update()
/obj/machinery/disposal/proc/trunk_check()
- trunk = locate() in src.loc
- if(!trunk)
+ var/obj/structure/disposalpipe/trunk/T = locate() in loc
+ if(!T)
mode = 0
flush = 0
else
mode = initial(mode)
flush = initial(flush)
- trunk.linked = src // link the pipe trunk to self
+ T.nicely_link_to_other_stuff(src)
/obj/machinery/disposal/Destroy()
eject()
if(trunk)
- trunk.linked = null
+ trunk.remove_trunk_links()
return ..()
/obj/machinery/disposal/Initialize()
@@ -1149,24 +1149,39 @@
if(D.trunk == src)
D.go_out()
D.trunk = null
-
- linked = null
+ remove_trunk_links()
return ..()
/obj/structure/disposalpipe/trunk/proc/getlinked()
- linked = null
var/obj/machinery/disposal/D = locate() in src.loc
if(D)
- linked = D
- if(!D.trunk)
- D.trunk = src
-
+ nicely_link_to_other_stuff(D)
+ return
var/obj/structure/disposaloutlet/O = locate() in src.loc
if(O)
- linked = O
+ nicely_link_to_other_stuff(O)
- update()
- return
+/obj/structure/disposalpipe/trunk/proc/remove_trunk_links() //disposals is well-coded
+ if(!linked)
+ return
+ else if(istype(linked, /obj/machinery/disposal)) //jk lol
+ var/obj/machinery/disposal/D = linked
+ D.trunk = null
+ else if(istype(linked, /obj/structure/disposaloutlet)) //God fucking damn it
+ var/obj/structure/disposaloutlet/D = linked
+ D.linkedtrunk = null
+ linked = null
+
+/obj/structure/disposalpipe/trunk/proc/nicely_link_to_other_stuff(obj/O)
+ remove_trunk_links() //Breaks the connections between this trunk and the linked machinery so we don't get sent to nullspace or some shit like that
+ if(istype(O, /obj/machinery/disposal))
+ var/obj/machinery/disposal/D = O
+ linked = D
+ D.trunk = src
+ else if(istype(O, /obj/structure/disposaloutlet))
+ var/obj/structure/disposaloutlet/D = O
+ linked = D
+ D.linkedtrunk = src
// Override attackby so we disallow trunkremoval when somethings ontop
/obj/structure/disposalpipe/trunk/attackby(var/obj/item/I, var/mob/user, params)
@@ -1271,77 +1286,72 @@
var/obj/structure/disposalpipe/trunk/linkedtrunk
var/mode = 0
- New()
- ..()
-
- spawn(1)
- target = get_ranged_target_turf(src, dir, 10)
-
-
- linkedtrunk = locate() in src.loc
- if(linkedtrunk)
- linkedtrunk.linked = src
+/obj/structure/disposaloutlet/New()
+ ..()
+ spawn(1)
+ target = get_ranged_target_turf(src, dir, 10)
+ var/obj/structure/disposalpipe/trunk/T = locate() in loc
+ if(T)
+ T.nicely_link_to_other_stuff(src)
// expel the contents of the holder object, then delete it
// called when the holder exits the outlet
- proc/expel(var/obj/structure/disposalholder/H, animation = 1)
-
- if(animation)
- flick("outlet-open", src)
- playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0)
- sleep(20) //wait until correct animation frame
- playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
-
- if(H)
- for(var/atom/movable/AM in H)
- AM.forceMove(loc)
- AM.pipe_eject(dir)
- if(!istype(AM,/mob/living/silicon/robot/drone)) //Drones keep smashing windows from being fired out of chutes. Bad for the station. ~Z
- spawn(5)
- if(AM)
- AM.throw_at(target, 3, 1)
- H.vent_gas(src.loc)
- qdel(H)
+/obj/structure/disposaloutlet/proc/expel(var/obj/structure/disposalholder/H, animation = 1)
+ if(animation)
+ flick("outlet-open", src)
+ playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0)
+ sleep(20) //wait until correct animation frame
+ playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
+ if(H)
+ for(var/atom/movable/AM in H)
+ AM.forceMove(loc)
+ AM.pipe_eject(dir)
+ if(!istype(AM,/mob/living/silicon/robot/drone)) //Drones keep smashing windows from being fired out of chutes. Bad for the station. ~Z
+ spawn(5)
+ if(AM)
+ AM.throw_at(target, 3, 1)
+ H.vent_gas(src.loc)
+ qdel(H)
- attackby(var/obj/item/I, var/mob/user, params)
- if(!I || !user)
+/obj/structure/disposaloutlet/attackby(var/obj/item/I, var/mob/user, params)
+ if(!I || !user)
+ return
+ src.add_fingerprint(user)
+ if(istype(I, /obj/item/screwdriver))
+ if(mode==0)
+ mode=1
+ playsound(src.loc, I.usesound, 50, 1)
+ to_chat(user, "You remove the screws around the power connection.")
+ return
+ else if(mode==1)
+ mode=0
+ playsound(src.loc, I.usesound, 50, 1)
+ to_chat(user, "You attach the screws around the power connection.")
+ return
+ else if(istype(I,/obj/item/weldingtool) && mode==1)
+ var/obj/item/weldingtool/W = I
+ if(W.remove_fuel(0,user))
+ playsound(src.loc, W.usesound, 100, 1)
+ to_chat(user, "You start slicing the floorweld off the disposal outlet.")
+ if(do_after(user, 20 * W.toolspeed, target = src))
+ if(!src || !W.isOn()) return
+ to_chat(user, "You sliced the floorweld off the disposal outlet.")
+ var/obj/structure/disposalconstruct/C = new (src.loc)
+ src.transfer_fingerprints_to(C)
+ C.ptype = 7 // 7 = outlet
+ C.update()
+ C.anchored = 1
+ C.density = 1
+ qdel(src)
+ return
+ else
+ to_chat(user, "You need more welding fuel to complete this task.")
return
- src.add_fingerprint(user)
- if(istype(I, /obj/item/screwdriver))
- if(mode==0)
- mode=1
- playsound(src.loc, I.usesound, 50, 1)
- to_chat(user, "You remove the screws around the power connection.")
- return
- else if(mode==1)
- mode=0
- playsound(src.loc, I.usesound, 50, 1)
- to_chat(user, "You attach the screws around the power connection.")
- return
- else if(istype(I,/obj/item/weldingtool) && mode==1)
- var/obj/item/weldingtool/W = I
- if(W.remove_fuel(0,user))
- playsound(src.loc, W.usesound, 100, 1)
- to_chat(user, "You start slicing the floorweld off the disposal outlet.")
- if(do_after(user, 20 * W.toolspeed, target = src))
- if(!src || !W.isOn()) return
- to_chat(user, "You sliced the floorweld off the disposal outlet.")
- var/obj/structure/disposalconstruct/C = new (src.loc)
- src.transfer_fingerprints_to(C)
- C.ptype = 7 // 7 = outlet
- C.update()
- C.anchored = 1
- C.density = 1
- qdel(src)
- return
- else
- to_chat(user, "You need more welding fuel to complete this task.")
- return
/obj/structure/disposaloutlet/Destroy()
if(linkedtrunk)
- linkedtrunk.linked = null
+ linkedtrunk.remove_trunk_links()
return ..()
// called when movable is expelled from a disposal pipe or outlet
diff --git a/code/modules/research/designs/smelting_designs.dm b/code/modules/research/designs/smelting_designs.dm
index fe45e8dacad..a043d90fb19 100644
--- a/code/modules/research/designs/smelting_designs.dm
+++ b/code/modules/research/designs/smelting_designs.dm
@@ -25,6 +25,22 @@
build_path = /obj/item/stack/sheet/plasmaglass
category = list("initial")
+/datum/design/titaniumglass_alloy
+ name = "Titanium + Glass alloy"
+ id = "titaniumglass"
+ build_type = SMELTER
+ materials = list(MAT_TITANIUM = MINERAL_MATERIAL_AMOUNT, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
+ build_path = /obj/item/stack/sheet/titaniumglass
+ category = list("initial")
+
+/datum/design/plastitaniumglass_alloy
+ name = "Plasma + Titanium + Glass alloy"
+ id = "plastitaniumglass"
+ build_type = SMELTER
+ materials = list(MAT_PLASMA = MINERAL_MATERIAL_AMOUNT, MAT_TITANIUM = MINERAL_MATERIAL_AMOUNT, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
+ build_path = /obj/item/stack/sheet/plastitaniumglass
+ category = list("initial")
+
/datum/design/alienalloy
name = "Alien Alloy"
desc = "A sheet of reverse-engineered alien alloy."
diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm
index ee884bc20a4..f7976645bc4 100644
--- a/code/modules/research/xenobiology/xenobio_camera.dm
+++ b/code/modules/research/xenobiology/xenobio_camera.dm
@@ -190,7 +190,7 @@
if(cameranet.checkTurfVis(remote_eye.loc))
for(var/mob/living/carbon/human/M in remote_eye.loc)
if(issmall(M) && M.stat)
- M.visible_message("[M] vanishes as they are reclaimed for recycling!")
+ M.visible_message("[M] vanishes as [M.p_theyre()] reclaimed for recycling!")
X.monkeys = round(X.monkeys + 0.2,0.1)
qdel(M)
else
diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm
index d8058efbb53..35bdb18caae 100644
--- a/code/modules/research/xenobiology/xenobiology.dm
+++ b/code/modules/research/xenobiology/xenobiology.dm
@@ -205,7 +205,7 @@
SM.master_commander = user
SM.sentience_act()
to_chat(SM, "All at once it makes sense: you know what you are and who you are! Self awareness is yours!")
- to_chat(SM, "You are grateful to be self aware and owe [user] a great debt. Serve [user], and assist them in completing their goals at any cost.")
+ to_chat(SM, "You are grateful to be self aware and owe [user] a great debt. Serve [user], and assist [user.p_them()] in completing [user.p_their()] goals at any cost.")
if(SM.flags_2 & HOLOGRAM_2) //Check to see if it's a holodeck creature
to_chat(SM, "You also become depressingly aware that you are not a real creature, but instead a holoform. Your existence is limited to the parameters of the holodeck.")
to_chat(user, "[M] accepts the potion and suddenly becomes attentive and aware. It worked!")
@@ -426,7 +426,7 @@
G.loc = src.loc
G.key = ghost.key
add_attack_logs(user, G, "Summoned as a golem")
- to_chat(G, "You are an adamantine golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. Serve [user], and assist them in completing their goals at any cost.")
+ to_chat(G, "You are an adamantine golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. Serve [user], and assist [user.p_them()] in completing [user.p_their()] goals at any cost.")
qdel(src)
/obj/effect/golemrune/Topic(href,href_list)
diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm
index d98e40700df..9f2d24fd50a 100644
--- a/code/modules/surgery/organs/augments_arms.dm
+++ b/code/modules/surgery/organs/augments_arms.dm
@@ -66,7 +66,7 @@
if(!holder || (holder in src))
return
- owner.visible_message("[owner] retracts [holder] back into \his [parent_organ == "r_arm" ? "right" : "left"] arm.",
+ owner.visible_message("[owner] retracts [holder] back into [owner.p_their()] [parent_organ == "r_arm" ? "right" : "left"] arm.",
"[holder] snaps back into your [parent_organ == "r_arm" ? "right" : "left"] arm.",
"You hear a short mechanical noise.")
@@ -114,7 +114,7 @@
if(parent_organ == "r_arm" ? owner.hand : !owner.hand)
owner.swap_hand()
- owner.visible_message("[owner] extends [holder] from \his [parent_organ == "r_arm" ? "right" : "left"] arm.",
+ owner.visible_message("[owner] extends [holder] from [owner.p_their()] [parent_organ == "r_arm" ? "right" : "left"] arm.",
"You extend [holder] from your [parent_organ == "r_arm" ? "right" : "left"] arm.",
"You hear a short mechanical noise.")
playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, 1)
diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm
index 0af7781eee4..8a29c148253 100644
--- a/code/modules/surgery/organs/organ.dm
+++ b/code/modules/surgery/organs/organ.dm
@@ -289,7 +289,7 @@
return
if(owner && robotic == 2)
Stop() // In the name of looooove~!
- owner.visible_message("[owner] clutches their chest and gasps!","You clutch your chest in pain!")
+ owner.visible_message("[owner] clutches [owner.p_their()] chest and gasps!","You clutch your chest in pain!")
else if(owner && robotic == 1)
receive_damage(11,1)
diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm
index 0ebf08c225c..794c19e2655 100644
--- a/code/modules/surgery/organs/organ_external.dm
+++ b/code/modules/surgery/organs/organ_external.dm
@@ -172,7 +172,7 @@
owner.emote("scream") //getting hit on broken hand hurts
if(status & ORGAN_SPLINTED && prob((brute + burn)*4)) //taking damage to splinted limbs removes the splints
status &= ~ORGAN_SPLINTED
- owner.visible_message("The splint on [owner]'s left arm unravels from their [name]!","The splint on your [name] unravels!")
+ owner.visible_message("The splint on [owner]'s left arm unravels from [owner.p_their()] [name]!","The splint on your [name] unravels!")
owner.handle_splints()
if(used_weapon)
add_autopsy_data("[used_weapon]", brute + burn)
@@ -442,7 +442,7 @@ Note that amputating the affected organ does in fact remove the infection from t
return
if(owner.step_count >= splinted_count + SPLINT_LIFE)
status &= ~ORGAN_SPLINTED //oh no, we actually need surgery now!
- owner.visible_message("[owner] screams in pain as their splint pops off their [name]!","You scream in pain as your splint pops off your [name]!")
+ owner.visible_message("[owner] screams in pain as [owner.p_their()] splint pops off their [name]!","You scream in pain as your splint pops off your [name]!")
owner.emote("scream")
owner.Stun(2)
owner.handle_splints()
diff --git a/code/modules/surgery/organs/parasites.dm b/code/modules/surgery/organs/parasites.dm
index 0adca48bfd0..900e60d9806 100644
--- a/code/modules/surgery/organs/parasites.dm
+++ b/code/modules/surgery/organs/parasites.dm
@@ -82,7 +82,7 @@
// Actually, let's make it slightly worse... just to discourage people from bringing back infections.
alternate_ending = 1
to_chat(owner,"The shapes extend tendrils out of your wound... no... those are legs! SPIDER LEGS! You have spiderlings growing inside you! You scratch at the wound, but it just aggrivates them - they swarm out of the wound, biting you all over!")
- owner.visible_message("[owner] flails around on the floor as spiderlings erupt from their skin and swarm all over them! ")
+ owner.visible_message("[owner] flails around on the floor as spiderlings erupt from [owner.p_their()] skin and swarm all over them! ")
owner.Stun(20)
owner.Weaken(20)
// yes, this is a long stun - that's intentional. Gotta give the spiderlings time to escape.
diff --git a/code/modules/surgery/slime.dm b/code/modules/surgery/slime.dm
index ced21be08b4..77614d41430 100644
--- a/code/modules/surgery/slime.dm
+++ b/code/modules/surgery/slime.dm
@@ -98,6 +98,6 @@
return 1
/datum/surgery_step/slime/saw_core/fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool)
- user.visible_message(" [user]'s hand slips, causing \him to miss the core!", \
+ user.visible_message(" [user]'s hand slips, causing [user.p_them()] to miss the core!", \
" Your hand slips, causing you to miss the core!")
- return 0
\ No newline at end of file
+ return 0
diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm
index 85880048f9b..a0d5cf335a9 100644
--- a/code/modules/surgery/tools.dm
+++ b/code/modules/surgery/tools.dm
@@ -48,8 +48,8 @@
attack_verb = list("drilled")
suicide_act(mob/user)
- to_chat(viewers(user), pick("[user] is pressing [src] to \his temple and activating it! It looks like \he's trying to commit suicide.",
- "[user] is pressing [src] to \his chest and activating it! It looks like \he's trying to commit suicide."))
+ to_chat(viewers(user), pick("[user] is pressing [src] to [user.p_their()] temple and activating it! It looks like [user.p_theyre()] trying to commit suicide.",
+ "[user] is pressing [src] to [user.p_their()] chest and activating it! It looks like [user.p_theyre()] trying to commit suicide."))
return (BRUTELOSS)
@@ -72,9 +72,9 @@
hitsound = 'sound/weapons/bladeslice.ogg'
suicide_act(mob/user)
- to_chat(viewers(user), pick("[user] is slitting \his wrists with [src]! It looks like \he's trying to commit suicide.",
- "[user] is slitting \his throat with [src]! It looks like \he's trying to commit suicide.",
- "[user] is slitting \his stomach open with [src]! It looks like \he's trying to commit seppuku."))
+ to_chat(viewers(user), pick("[user] is slitting [user.p_their()] wrists with [src]! It looks like [user.p_theyre()] trying to commit suicide.",
+ "[user] is slitting [user.p_their()] throat with [src]! It looks like [user.p_theyre()] trying to commit suicide.",
+ "[user] is slitting [user.p_their()] stomach open with [src]! It looks like [user.p_theyre()] trying to commit seppuku."))
return (BRUTELOSS)
diff --git a/config/example/tos.txt b/config/example/tos.txt
new file mode 100644
index 00000000000..eb43c50a083
--- /dev/null
+++ b/config/example/tos.txt
@@ -0,0 +1,3 @@
+Welcome to Space Station 13!
+
+Terms of service goes here.
\ No newline at end of file
diff --git a/html/changelog.html b/html/changelog.html
index 627bcc3df55..e72473c7730 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -56,6 +56,51 @@
-->
+
31 May 2018
+
FalseIncarnate updated:
+
+ - The singulo no longer feeds on attention.
+
+
+
26 May 2018
+
Birdtalon updated:
+
+ - Holoparasite guide updated to include newer models. Small tooltip added for charger models.
+ - laser tag gun projectiles now play appropriate sound when striking.
+
+
Citinited updated:
+
+ - Hopefully fixes all issues with disposals sending you to nullspace.
+
+
Fox McCloud updated:
+
+ - Fixes not being able to propel yourself through space by farting if you possessed both superfart and toxic farts
+
+
Kyep and Bxil updated:
+
+ - Prevents everyone and their mother from seeing through closed poddoors.
+
+
Tayyyyyyy updated:
+
+ - Most things will now use the correct pronouns.
+ - Newscasters properly check for feed channel creation and wanted issue creation
+ - ERT should deploy properly without admins now.
+
+
+
19 May 2018
+
Aurorablade updated:
+
+ - Vet Coat Fluff item.
+ - Spacepod mod kit now uses kit blueprints and not KITE blueprints (spelling error).
+
+
Fox McCloud updated:
+
+ - Adds gloves of the North Star; get them on the uplink for 8 TC
+ - Unarmed attacks now have their own icons, as does disarming.
+ - Various mobs have their own custom icon attacks
+ - Monkies now bite!
+
+
18 May 2018
Fox McCloud updated:
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index 38e3a0f7a49..05aa2edba12 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -6410,3 +6410,33 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
- rscadd: You can now lock a facing direction with shift+middle mouse button, or
lock your direction towards an object by clicking on it with shift + ctrl +
middle mouse button.
+2018-05-19:
+ Aurorablade:
+ - rscadd: Vet Coat Fluff item.
+ - tweak: Spacepod mod kit now uses kit blueprints and not KITE blueprints (spelling
+ error).
+ Fox McCloud:
+ - rscadd: Adds gloves of the North Star; get them on the uplink for 8 TC
+ - rscadd: Unarmed attacks now have their own icons, as does disarming.
+ - rscadd: Various mobs have their own custom icon attacks
+ - tweak: Monkies now bite!
+2018-05-26:
+ Birdtalon:
+ - tweak: Holoparasite guide updated to include newer models. Small tooltip added
+ for charger models.
+ - bugfix: laser tag gun projectiles now play appropriate sound when striking.
+ Citinited:
+ - bugfix: Hopefully fixes all issues with disposals sending you to nullspace.
+ Fox McCloud:
+ - bugfix: Fixes not being able to propel yourself through space by farting if you
+ possessed both superfart and toxic farts
+ Kyep and Bxil:
+ - bugfix: Prevents everyone and their mother from seeing through closed poddoors.
+ Tayyyyyyy:
+ - rscadd: Most things will now use the correct pronouns.
+ - bugfix: Newscasters properly check for feed channel creation and wanted issue
+ creation
+ - bugfix: ERT should deploy properly without admins now.
+2018-05-31:
+ FalseIncarnate:
+ - bugfix: The singulo no longer feeds on attention.
diff --git a/html/changelogs/AutoChangeLog-pr-8885.yml b/html/changelogs/AutoChangeLog-pr-8885.yml
new file mode 100644
index 00000000000..9d387cacae9
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8885.yml
@@ -0,0 +1,11 @@
+author: "uraniummeltdown"
+delete-after: True
+changes:
+ - rscadd: "You can smelt titanium and glass together to form titanium glass for building shuttle windows"
+ - rscadd: "You can smelt titanium, plasma and glass together to form plastitanium glass for building plastitanium windows"
+ - rscadd: "Fulltile windows now smooth, windows crack as they get damaged and can be repaired with help intent welder"
+ - rscadd: "Windows have deconstruction hints and show whether they can be rotated or not"
+ - bugfix: "Plasma glass no longer gets auto-colored"
+ - bugfix: "RCDs can deconstruct airlocks again, they have no force now though"
+ - tweak: "Wielded fireaxe does a lot of damage to windows and grilles instead of just deleting them"
+ - tweak: "Glass stacks now use stack recipes instead of a custom menu"
diff --git a/html/changelogs/AutoChangeLog-pr-9016.yml b/html/changelogs/AutoChangeLog-pr-9016.yml
deleted file mode 100644
index b59f4193515..00000000000
--- a/html/changelogs/AutoChangeLog-pr-9016.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "Aurorablade"
-delete-after: True
-changes:
- - rscadd: "Vet Coat Fluff item."
- - tweak: "Spacepod mod kit now uses kit blueprints and not KITE blueprints (spelling error)."
diff --git a/html/changelogs/AutoChangeLog-pr-9028.yml b/html/changelogs/AutoChangeLog-pr-9028.yml
deleted file mode 100644
index e0e0cbfba7a..00000000000
--- a/html/changelogs/AutoChangeLog-pr-9028.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Fox McCloud"
-delete-after: True
-changes:
- - rscadd: "Adds gloves of the North Star; get them on the uplink for 8 TC"
diff --git a/html/changelogs/AutoChangeLog-pr-9029.yml b/html/changelogs/AutoChangeLog-pr-9029.yml
deleted file mode 100644
index d3770cee051..00000000000
--- a/html/changelogs/AutoChangeLog-pr-9029.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-author: "Fox McCloud"
-delete-after: True
-changes:
- - rscadd: "Unarmed attacks now have their own icons, as does disarming."
- - rscadd: "Various mobs have their own custom icon attacks"
- - tweak: "Monkies now bite!"
diff --git a/icons/obj/doors/windoor.dmi b/icons/obj/doors/windoor.dmi
index 8104686b483..9bf105faaf6 100644
Binary files a/icons/obj/doors/windoor.dmi and b/icons/obj/doors/windoor.dmi differ
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index d828f2ee9de..5714fcf4c9f 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ
diff --git a/icons/obj/smooth_structures/clockwork_window.dmi b/icons/obj/smooth_structures/clockwork_window.dmi
new file mode 100644
index 00000000000..90309ac3d52
Binary files /dev/null and b/icons/obj/smooth_structures/clockwork_window.dmi differ
diff --git a/icons/obj/smooth_structures/plasma_window.dmi b/icons/obj/smooth_structures/plasma_window.dmi
new file mode 100644
index 00000000000..3d57d156f01
Binary files /dev/null and b/icons/obj/smooth_structures/plasma_window.dmi differ
diff --git a/icons/obj/smooth_structures/plastitanium_window.dmi b/icons/obj/smooth_structures/plastitanium_window.dmi
new file mode 100644
index 00000000000..82ac0306159
Binary files /dev/null and b/icons/obj/smooth_structures/plastitanium_window.dmi differ
diff --git a/icons/obj/smooth_structures/pod_window.dmi b/icons/obj/smooth_structures/pod_window.dmi
new file mode 100644
index 00000000000..0fe7501225c
Binary files /dev/null and b/icons/obj/smooth_structures/pod_window.dmi differ
diff --git a/icons/obj/smooth_structures/reinforced_window.dmi b/icons/obj/smooth_structures/reinforced_window.dmi
index b5f24ebbd30..ed9a2a143e6 100644
Binary files a/icons/obj/smooth_structures/reinforced_window.dmi and b/icons/obj/smooth_structures/reinforced_window.dmi differ
diff --git a/icons/obj/smooth_structures/rice_window.dmi b/icons/obj/smooth_structures/rice_window.dmi
index e3a82935cf2..f5e7a6dd57a 100644
Binary files a/icons/obj/smooth_structures/rice_window.dmi and b/icons/obj/smooth_structures/rice_window.dmi differ
diff --git a/icons/obj/smooth_structures/rplasma_window.dmi b/icons/obj/smooth_structures/rplasma_window.dmi
new file mode 100644
index 00000000000..c64f42c7f5a
Binary files /dev/null and b/icons/obj/smooth_structures/rplasma_window.dmi differ
diff --git a/icons/obj/smooth_structures/shuttle_window.dmi b/icons/obj/smooth_structures/shuttle_window.dmi
index 3db34cf1ba1..85924dc449b 100644
Binary files a/icons/obj/smooth_structures/shuttle_window.dmi and b/icons/obj/smooth_structures/shuttle_window.dmi differ
diff --git a/icons/obj/smooth_structures/tinted_window.dmi b/icons/obj/smooth_structures/tinted_window.dmi
index ab992353275..be9affafeea 100644
Binary files a/icons/obj/smooth_structures/tinted_window.dmi and b/icons/obj/smooth_structures/tinted_window.dmi differ
diff --git a/icons/obj/smooth_structures/window.dmi b/icons/obj/smooth_structures/window.dmi
index 0197f5b20a7..670713bcfe0 100644
Binary files a/icons/obj/smooth_structures/window.dmi and b/icons/obj/smooth_structures/window.dmi differ
diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi
index 0b17038ade5..838503bbda1 100644
Binary files a/icons/obj/structures.dmi and b/icons/obj/structures.dmi differ
diff --git a/paradise.dme b/paradise.dme
index 6cf47e457f5..aa34fb03b85 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -77,6 +77,7 @@
#include "code\__HELPERS\matrices.dm"
#include "code\__HELPERS\mobs.dm"
#include "code\__HELPERS\names.dm"
+#include "code\__HELPERS\pronouns.dm"
#include "code\__HELPERS\qdel.dm"
#include "code\__HELPERS\sanitize_values.dm"
#include "code\__HELPERS\text.dm"
@@ -959,7 +960,6 @@
#include "code\game\objects\structures\false_walls.dm"
#include "code\game\objects\structures\flora.dm"
#include "code\game\objects\structures\foodcart.dm"
-#include "code\game\objects\structures\fullwindow.dm"
#include "code\game\objects\structures\girders.dm"
#include "code\game\objects\structures\grille.dm"
#include "code\game\objects\structures\guillotine.dm"