"
var/quotedmsg = M.say_quote(message)
//This following recording is intended for research and feedback in the use of department radio channels.
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index fccc32f140d..4c43622ad25 100644
--- a/code/game/objects/items/weapons/storage/bags.dm
+++ b/code/game/objects/items/weapons/storage/bags.dm
@@ -36,7 +36,7 @@
max_w_class = 2
storage_slots = 21
can_hold = list() // any
- cant_hold = list("/obj/item/weapon/disk/nuclear")
+ cant_hold = list(/obj/item/weapon/disk/nuclear)
/obj/item/weapon/storage/bag/trash/update_icon()
@@ -72,7 +72,7 @@
storage_slots = 50
max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * ore.w_class
max_w_class = 3
- can_hold = list("/obj/item/weapon/ore")
+ can_hold = list(/obj/item/weapon/ore)
// -----------------------------
@@ -87,7 +87,7 @@
max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * plants.w_class
max_w_class = 3
w_class = 1
- can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/grown","/obj/item/seeds","/obj/item/weapon/grown")
+ can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/weapon/grown)
////////
@@ -261,4 +261,4 @@
max_combined_w_class = 21
max_w_class = 3
w_class = 4 //Bigger than a book because physics
- can_hold = list("/obj/item/weapon/book", "/obj/item/weapon/spellbook") //No bibles, consistent with bookcase
+ can_hold = list(/obj/item/weapon/book, /obj/item/weapon/spellbook) //No bibles, consistent with bookcase
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index a36e5770eee..812b69d0c24 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -41,16 +41,16 @@
icon_state = "utilitybelt"
item_state = "utility"
can_hold = list(
- "/obj/item/weapon/crowbar",
- "/obj/item/weapon/screwdriver",
- "/obj/item/weapon/weldingtool",
- "/obj/item/weapon/wirecutters",
- "/obj/item/weapon/wrench",
- "/obj/item/device/multitool",
- "/obj/item/device/flashlight",
- "/obj/item/stack/cable_coil",
- "/obj/item/device/t_scanner",
- "/obj/item/device/analyzer")
+ /obj/item/weapon/crowbar,
+ /obj/item/weapon/screwdriver,
+ /obj/item/weapon/weldingtool,
+ /obj/item/weapon/wirecutters,
+ /obj/item/weapon/wrench,
+ /obj/item/device/multitool,
+ /obj/item/device/flashlight,
+ /obj/item/stack/cable_coil,
+ /obj/item/device/t_scanner,
+ /obj/item/device/analyzer)
/obj/item/weapon/storage/belt/utility/full/New()
@@ -80,19 +80,18 @@
icon_state = "medicalbelt"
item_state = "medical"
can_hold = list(
- "/obj/item/device/healthanalyzer",
- "/obj/item/weapon/dnainjector",
- "/obj/item/weapon/reagent_containers/dropper",
- "/obj/item/weapon/reagent_containers/glass/beaker",
- "/obj/item/weapon/reagent_containers/glass/bottle",
- "/obj/item/weapon/reagent_containers/pill",
- "/obj/item/weapon/reagent_containers/syringe",
- "/obj/item/weapon/reagent_containers/glass/dispenser",
- "/obj/item/weapon/lighter/zippo",
- "/obj/item/weapon/storage/fancy/cigarettes",
- "/obj/item/weapon/storage/pill_bottle",
- "/obj/item/stack/medical",
- "/obj/item/device/flashlight/pen"
+ /obj/item/device/healthanalyzer,
+ /obj/item/weapon/dnainjector,
+ /obj/item/weapon/reagent_containers/dropper,
+ /obj/item/weapon/reagent_containers/glass/beaker,
+ /obj/item/weapon/reagent_containers/glass/bottle,
+ /obj/item/weapon/reagent_containers/pill,
+ /obj/item/weapon/reagent_containers/syringe,
+ /obj/item/weapon/lighter/zippo,
+ /obj/item/weapon/storage/fancy/cigarettes,
+ /obj/item/weapon/storage/pill_bottle,
+ /obj/item/stack/medical,
+ /obj/item/device/flashlight/pen
)
@@ -104,19 +103,24 @@
storage_slots = 5
max_w_class = 3 //Because the baton wouldn't fit otherwise. - Neerti
can_hold = list(
- "/obj/item/weapon/melee/baton",
- "/obj/item/weapon/melee/classic_baton",
- "/obj/item/weapon/grenade/flashbang",
- "/obj/item/weapon/reagent_containers/spray/pepper",
- "/obj/item/weapon/handcuffs",
- "/obj/item/device/flash",
- "/obj/item/clothing/glasses",
- "/obj/item/ammo_casing/shotgun",
- "/obj/item/ammo_box",
- "/obj/item/weapon/reagent_containers/food/snacks/donut/normal",
- "/obj/item/weapon/reagent_containers/food/snacks/donut/jelly"
+ /obj/item/weapon/melee/baton,
+ /obj/item/weapon/melee/classic_baton,
+ /obj/item/weapon/grenade/flashbang,
+ /obj/item/weapon/reagent_containers/spray/pepper,
+ /obj/item/weapon/handcuffs,
+ /obj/item/device/flash,
+ /obj/item/clothing/glasses,
+ /obj/item/ammo_casing/shotgun,
+ /obj/item/ammo_box,
+ /obj/item/weapon/reagent_containers/food/snacks/donut/normal,
+ /obj/item/weapon/reagent_containers/food/snacks/donut/jelly,
+ /obj/item/device/flashlight/seclite
)
+/obj/item/weapon/storage/belt/security/New()
+ ..()
+ new /obj/item/device/flashlight/seclite(src)
+
/obj/item/weapon/storage/belt/soulstone
name = "soul stone belt"
desc = "Designed for ease of access to the shards during a fight, as to not let a single enemy spirit slip away"
@@ -124,7 +128,7 @@
item_state = "soulstonebelt"
storage_slots = 6
can_hold = list(
- "/obj/item/device/soulstone"
+ /obj/item/device/soulstone
)
/obj/item/weapon/storage/belt/soulstone/full/New()
@@ -144,7 +148,7 @@
item_state = "champion"
storage_slots = 1
can_hold = list(
- "/obj/item/clothing/mask/luchador"
+ /obj/item/clothing/mask/luchador
)
/obj/item/weapon/storage/belt/military
@@ -160,7 +164,7 @@
item_state = "soulstonebelt"
storage_slots = 6
can_hold = list(
- "/obj/item/weapon/gun/magic/wand"
+ /obj/item/weapon/gun/magic/wand
)
/obj/item/weapon/storage/belt/wands/full/New()
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index bf7cdbe88d4..2622c1c6ddc 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -329,7 +329,7 @@
icon = 'icons/obj/food.dmi'
icon_state = "monkeycubebox"
storage_slots = 7
- can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/monkeycube")
+ can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube)
New()
..()
for(var/i = 1; i <= 5; i++)
@@ -483,7 +483,7 @@
item_state = "syringe_kit"
foldable = /obj/item/stack/sheet/cardboard //BubbleWrap
storage_slots=21
- can_hold = list("/obj/item/weapon/light/tube", "/obj/item/weapon/light/bulb")
+ can_hold = list(/obj/item/weapon/light/tube, /obj/item/weapon/light/bulb)
max_combined_w_class = 21
use_to_pickup = 1 // for picking up broken bulbs, not that most people will try
diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm
index 96375165496..88a32e0db71 100644
--- a/code/game/objects/items/weapons/storage/fancy.dm
+++ b/code/game/objects/items/weapons/storage/fancy.dm
@@ -48,7 +48,7 @@
icon_type = "donut"
name = "donut box"
storage_slots = 6
- can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/donut")
+ can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/donut)
/obj/item/weapon/storage/fancy/donut_box/New()
@@ -67,7 +67,7 @@
icon_type = "egg"
name = "egg box"
storage_slots = 12
- can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/egg")
+ can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/egg)
/obj/item/weapon/storage/fancy/egg_box/New()
..()
@@ -153,7 +153,7 @@
throwforce = 0
slot_flags = SLOT_BELT
storage_slots = 6
- can_hold = list("/obj/item/clothing/mask/cigarette")
+ can_hold = list(/obj/item/clothing/mask/cigarette)
icon_type = "cigarette"
/obj/item/weapon/storage/fancy/cigarettes/New()
diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm
index 297b3b7cbb4..c592ed88c8f 100644
--- a/code/game/objects/items/weapons/storage/firstaid.dm
+++ b/code/game/objects/items/weapons/storage/firstaid.dm
@@ -122,7 +122,7 @@
icon = 'icons/obj/chemical.dmi'
item_state = "contsolid"
w_class = 2.0
- can_hold = list("/obj/item/weapon/reagent_containers/pill","/obj/item/weapon/dice")
+ can_hold = list(/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/dice)
allow_quick_gather = 1
use_to_pickup = 1
diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm
index cf6abd60802..7eec058615b 100644
--- a/code/game/objects/items/weapons/storage/secure.dm
+++ b/code/game/objects/items/weapons/storage/secure.dm
@@ -227,7 +227,7 @@
max_w_class = 8
anchored = 1.0
density = 0
- cant_hold = list("/obj/item/weapon/storage/secure/briefcase")
+ cant_hold = list(/obj/item/weapon/storage/secure/briefcase)
New()
..()
diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm
index 5bf30a81e5e..85da667cd4c 100644
--- a/code/game/objects/items/weapons/storage/storage.dm
+++ b/code/game/objects/items/weapons/storage/storage.dm
@@ -202,7 +202,7 @@
if(can_hold.len)
var/ok = 0
for(var/A in can_hold)
- if(istype(W, text2path(A) ))
+ if(istype(W, A))
ok = 1
break
if(!ok)
@@ -211,7 +211,7 @@
return 0
for(var/A in cant_hold) //Check for specific items which this container can't hold.
- if(istype(W, text2path(A) ))
+ if(istype(W, A))
if(!stop_messages)
usr << "[src] cannot hold [W]."
return 0
diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm
index 28f202b226e..932567f0435 100644
--- a/code/game/objects/items/weapons/storage/wallets.dm
+++ b/code/game/objects/items/weapons/storage/wallets.dm
@@ -5,25 +5,25 @@
icon_state = "wallet"
w_class = 2
can_hold = list(
- "/obj/item/weapon/spacecash",
- "/obj/item/weapon/card",
- "/obj/item/clothing/mask/cigarette",
- "/obj/item/device/flashlight/pen",
- "/obj/item/seeds",
- "/obj/item/stack/medical",
- "/obj/item/toy/crayon",
- "/obj/item/weapon/coin",
- "/obj/item/weapon/dice",
- "/obj/item/weapon/disk",
- "/obj/item/weapon/implanter",
- "/obj/item/weapon/lighter",
- "/obj/item/weapon/match",
- "/obj/item/weapon/paper",
- "/obj/item/weapon/pen",
- "/obj/item/weapon/photo",
- "/obj/item/weapon/reagent_containers/dropper",
- "/obj/item/weapon/screwdriver",
- "/obj/item/weapon/stamp")
+ /obj/item/weapon/spacecash,
+ /obj/item/weapon/card,
+ /obj/item/clothing/mask/cigarette,
+ /obj/item/device/flashlight/pen,
+ /obj/item/seeds,
+ /obj/item/stack/medical,
+ /obj/item/toy/crayon,
+ /obj/item/weapon/coin,
+ /obj/item/weapon/dice,
+ /obj/item/weapon/disk,
+ /obj/item/weapon/implanter,
+ /obj/item/weapon/lighter,
+ /obj/item/weapon/match,
+ /obj/item/weapon/paper,
+ /obj/item/weapon/pen,
+ /obj/item/weapon/photo,
+ /obj/item/weapon/reagent_containers/dropper,
+ /obj/item/weapon/screwdriver,
+ /obj/item/weapon/stamp)
slot_flags = SLOT_ID
var/obj/item/weapon/card/id/front_id = null
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
index 6720ae5f398..d1a5ed693c2 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
@@ -26,6 +26,7 @@
new /obj/item/device/radio/headset/heads/ce(src)
new /obj/item/weapon/storage/toolbox/mechanical(src)
new /obj/item/clothing/suit/hazardvest(src)
+ new /obj/item/weapon/airlock_painter(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/device/multitool(src)
new /obj/item/device/flash(src)
diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm
index 29da87da396..c184c6f3bb5 100644
--- a/code/game/objects/structures/door_assembly.dm
+++ b/code/game/objects/structures/door_assembly.dm
@@ -296,6 +296,16 @@ obj/structure/door_assembly
density = 1
state = 1
+ door_assembly_shuttle
+ name = "Shuttle Airlock Assembly"
+ icon_state = "door_as_shuttle1"
+ typetext = "shuttle"
+ icontext = "shuttle"
+ airlock_type = /obj/machinery/door/airlock/shuttle
+ anchored = 1
+ density = 1
+ state = 1
+
/obj/structure/door_assembly/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/pen))
var/t = copytext(stripped_input(user, "Enter the name for the door.", src.name, src.created_name),1,MAX_NAME_LEN)
diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm
index 770456a6e35..8ae9f134f87 100644
--- a/code/modules/admin/admin_ranks.dm
+++ b/code/modules/admin/admin_ranks.dm
@@ -3,7 +3,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums
/datum/admin_rank
var/name = "NoRank"
var/rights = 0
- var/list/adds
+ var/list/adds
var/list/subs
/datum/admin_rank/New(init_name, init_rights, list/init_adds, list/init_subs)
@@ -74,7 +74,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums
next = findchar(line, "+-", prev+1, 0)
R.process_keyword(copytext(line, prev, next), previous_rights)
prev = next
-
+
previous_rights = R.rights
else
establish_db_connection()
@@ -117,7 +117,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums
var/list/rank_names = list()
for(var/datum/admin_rank/R in admin_ranks)
rank_names[R.name] = R
-
+
if(config.admin_legacy_system)
//load text from file
var/list/Lines = file2list("config/admins.txt")
@@ -158,7 +158,10 @@ var/list/admin_ranks = list() //list of all admin_rank datums
while(query.NextRow())
var/ckey = ckey(query.item[1])
var/rank = ckeyEx(query.item[2])
- var/datum/admins/D = new(rank, ckey) //create the admin datum and store it for later use
+ if(rank_names[rank] == null)
+ error("Admin rank ([rank]) does not exist.")
+ continue
+ var/datum/admins/D = new(rank_names[rank], ckey) //create the admin datum and store it for later use
if(!D) continue //will occur if an invalid rank is provided
D.associate(directory[ckey]) //find the client for a ckey if they are connected and associate them with the new admin datum
@@ -214,7 +217,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums
return
var/datum/admins/D = admin_datums[adm_ckey]
-
+
switch(task)
if("remove")
if(alert("Are you sure you want to remove [adm_ckey]?","Message","Yes","Cancel") == "Yes")
@@ -228,57 +231,57 @@ var/list/admin_ranks = list() //list of all admin_rank datums
if("rank")
var/datum/admin_rank/R
-
+
var/list/rank_names = list("*New Rank*")
for(R in admin_ranks)
rank_names[R.name] = R
-
+
var/new_rank = input("Please select a rank", "New rank", null, null) as null|anything in rank_names
-
+
switch(new_rank)
if(null) return
if("*New Rank*")
new_rank = ckeyEx(input("Please input a new rank", "New custom rank", null, null) as null|text)
if(!new_rank) return
-
+
R = rank_names[new_rank]
if(!R) //rank with that name doesn't exist yet - make it
if(D) R = new(new_rank, D.rank.rights, D.rank.adds, D.rank.subs) //duplicate our previous admin_rank but with a new name
else R = new(new_rank) //blank new admin_rank
admin_ranks += R
-
+
if(D) //they were previously an admin
D.disassociate() //existing admin needs to be disassociated
D.rank = R //set the admin_rank as our rank
else
D = new(R,adm_ckey) //new admin
-
+
var/client/C = directory[adm_ckey] //find the client with the specified ckey (if they are logged in)
D.associate(C) //link up with the client and add verbs
-
+
message_admins("[key_name_admin(usr)] edited the admin rank of [adm_ckey] to [new_rank]")
log_admin("[key_name(usr)] edited the admin rank of [adm_ckey] to [new_rank]")
log_admin_rank_modification(adm_ckey, new_rank)
if("permissions")
if(!D) return //they're not an admin!
-
+
var/keyword = input("Input permission keyword (one at a time):\ne.g. +BAN or -FUN or +/client/proc/someverb", "Permission toggle", null, null) as null|text
if(!keyword) return
-
+
D.disassociate()
-
+
if(!findtext(D.rank.name, "([adm_ckey])")) //not a modified subrank, need to duplicate the admin_rank datum to prevent modifying others too
D.rank = new("[D.rank.name]([adm_ckey])", D.rank.rights, D.rank.adds, D.rank.subs) //duplicate our previous admin_rank but with a new name
//we don't add this clone to the admin_ranks list, as it is unique to that ckey
-
+
D.rank.process_keyword(keyword)
-
+
var/client/C = directory[adm_ckey] //find the client with the specified ckey (if they are logged in)
D.associate(C) //link up with the client and add verbs
-
+
message_admins("[key_name(usr)] added keyword [keyword] to permission of [adm_ckey]")
log_admin("[key_name(usr)] added keyword [keyword] to permission of [adm_ckey]")
log_admin_permission_modification(adm_ckey, D.rank.rights)
-
+
edit_admin_permissions()
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 14ab6be99f7..985835f7511 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -1,6 +1,6 @@
/obj/item/clothing/suit/armor
- allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
+ allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/flashlight/seclite)
body_parts_covered = CHEST
cold_protection = CHEST|GROIN
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 50a03307add..67fa2e18475 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -30,6 +30,9 @@
for(var/i=0;i<7;i++) // 2 for medHUDs and 5 for secHUDs
hud_list += image('icons/mob/hud.dmi', src, "hudunknown")
+ if(real_name == "John McClane")
+ ventcrawler = 2
+
..()
/mob/living/carbon/human/Destroy()
diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm
index 3efbcf57757..e1a62f88c67 100644
--- a/code/modules/mob/living/simple_animal/friendly/corgi.dm
+++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm
@@ -331,13 +331,15 @@
name = "Ian"
real_name = "Ian" //Intended to hold the name without altering it.
gender = MALE
- desc = "It's a corgi."
+ desc = "wow"
var/turns_since_scan = 0
var/obj/movement_target
response_help = "pets"
response_disarm = "bops"
response_harm = "kicks"
+ speak = list("wow", "such corgi", "much cute", "very pet")
+
/mob/living/simple_animal/corgi/Ian/Life()
..()
@@ -382,6 +384,9 @@
if(prob(20))
emote("stares at [movement_target.loc]'s [movement_target] with a sad puppy-face")
+ if(prob(2))
+ say(pick("wow", "such dog", "much corgi", "very cute"))
+
if(prob(1))
emote(pick("dances around","chases its tail"))
spawn(0)
@@ -389,6 +394,7 @@
dir = i
sleep(1)
+
/mob/living/simple_animal/corgi/Ian/Bump(atom/movable/AM as mob|obj, yes)
if ((!( yes ) || now_pushing))
return
@@ -417,10 +423,22 @@
now_pushing = null
//PC stuff-Sieve
+/mob/living/simple_animal/corgi/Ian/Die()
+ say(pick("wow", "much die", "very dead", "such afterlife"))
+ ..()
+
+/mob/living/simple_animal/corgi/Ian/gib(animation)
+ say(pick("wow", "such gore", "much graphic", "very gib"))
+ ..()
+
+/mob/living/simple_animal/corgi/Ian/adjustBruteLoss(damage)
+ say(pick("wow", "much hurt", "very pain", "such damage"))
+
/mob/living/simple_animal/corgi/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri
if(istype(O, /obj/item/weapon/newspaper))
if(!stat)
user.visible_message("\blue [user] baps [name] on the nose with the rolled up [O]")
+ say(pick("much pain", "very hurt", "such sad"))
spawn(0)
for(var/i in list(1,2,4,8,4,2,1,2))
dir = i
diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm
index fb4741480ab..7a052ab2aa4 100644
--- a/code/modules/paperwork/photography.dm
+++ b/code/modules/paperwork/photography.dm
@@ -86,7 +86,7 @@
icon = 'icons/obj/items.dmi'
icon_state = "album"
item_state = "briefcase"
- can_hold = list("/obj/item/weapon/photo",)
+ can_hold = list(/obj/item/weapon/photo)
/*
diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm
index b32a18371b6..dfcf80dab74 100644
--- a/code/modules/reagents/reagent_containers/food/snacks.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks.dm
@@ -194,6 +194,7 @@
if(iscorgi(M))
if(bitecount == 0 || prob(50))
M.emote("nibbles away at the [src]")
+ M.say(pick("wow", "such taste", "much food", "very eat"))
bitecount++
if(bitecount >= 5)
var/sattisfaction_text = pick("burps from enjoyment", "yaps for more", "woofs twice", "looks at the area where the [src] was")
diff --git a/html/changelog.html b/html/changelog.html
index 43681163cd3..8994092ab7f 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -53,6 +53,60 @@ should be listed in the changelog upon commit tho. Thanks. -->
+
+
+
2 April 2014
+
Ikarrus updated:
+
+ - Nanotrasen Construction division is pleased to announce the unveiling of our brand now state-of-the-art Space Station 13 v2.1.3!
+ - -Scaffolding used during construction has been repurposed as an expanded maintenance around the station.
+ - -Our new Emergency Transport Shuttle Mk III will be making its debut in times of crisis. Includes a new cargo area and extra security features.
+ - -A redesigned brig will give security staff more peace of mind with added security features
+ - -The armory is now protected by a motion alarm.
+ - -The armory is now equipped with security hardsuits.
+ - -A new command EVA wing has been added to EVA Storage. Station heads of staff will be able to make use of suits stored here.
+ - -A new garden area will be made publicly available for everyone to enjoy some R&R during their company-endorsed break periods
+ - -A new Testing Lab has been added to the Science department for any field experiments that need to be run.
+ - -The mining ore redemption machine has been relocated to the Cargo Delivery Office.
+
+
+
Giacom updated:
+
+ - The syndicate suit is now black and red, because black and red is the new red.
+ - The Ruskie DJ Station now has a classy orange syndicate suit.
+ - Security officers have been equipped with the latest in flashlight technology. You can find a SecLiteâ„¢ inside your security belt or you can dispense one from the security vending machine.
+
+
+
+
+
1 April 2014
+
Malkevin updated:
+
+ - Sacrifice Cult - Cult has received a massive overhaul to how it works, focusing more on cult magics and sacrificing unbelievers. The most important changes are:
+ - Cult starts off with alot more cultists, 6 cultists below 30 players and 9 above. The HoP can no longer be a round start cultist but is still convertible.
+ - Cultists start off with join, blood, self, and hell. These give the runes for the sacrifice and convert.
+ - Conversions now require three cultists and converts no longer reward words, words must be obtained via sacrifice
+ - Sacrificing players traps their soul in a soul stone, which can then be used on construct shells to implant the souls in them
+ - Constructs shells can be summoned via a new rune (travel, hell, technology)
+ - You can no longer convert the sacrifice target, you dozzy sods
+ - Summoning Narsie when she is not an objective leads to !!FUN!!
+ - Wrote a system to allow all mob types to be sacrificable - currently only corgis are in the new system
+ - Holy Water will DECONVERT cultists, takes around 35 units and two minutes to succeed
+ - Hitting a mob that contains holy water with a tome will convert that water to unholy water, conversely hitting any container that contains unholy water with a bible as chaplain will 'cleanse' the taint.
+ - Unholy water works like a combination synaptazine and hyperzine, with a twist of branes dimarge and highly toxic to non-cultists
+ - Cargo can order a religious supplies crate - it contains flasks of holy water, candles, bibles, and robes
+ - Cultists have an innate ability to communicate to the cult hive mind (BE AWARE - THIS DOES A LOT OF DAMAGE), cultists can also communicate via the new Commune option on their tomes (the Read Tome option has been shifted under the Notes option)
+
+
MrStonedOne updated:
+
+ - Cyborgs can now use AI click shortcuts. (shift click on doors opens them, etc) (including ones added below)
+ - New silicon click shortcut: Control+Shift click on doors toggles access override
+ - New silicon click shortcut: Control click turret controls toggles them on or off
+ - New silicon click shortcut: Alt click turret controls toggles lethal on or off
+ - Cyborg hotkey mode was massively improved. 1-3 selects module slot, q unloads the active module. use hotkeys-help as cyborg for more details
+
+
+
1 Aphril 2014
Aranclanos updated:
diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi
index 982e96469bd..de5a8113a54 100644
Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ
diff --git a/icons/mob/items_lefthand.dmi b/icons/mob/items_lefthand.dmi
index cf126007747..a16b9eabc28 100644
Binary files a/icons/mob/items_lefthand.dmi and b/icons/mob/items_lefthand.dmi differ
diff --git a/icons/mob/items_righthand.dmi b/icons/mob/items_righthand.dmi
index 0bc19db3c47..edf4041edfd 100644
Binary files a/icons/mob/items_righthand.dmi and b/icons/mob/items_righthand.dmi differ
diff --git a/icons/obj/doors/door_assembly.dmi b/icons/obj/doors/door_assembly.dmi
index 16781191702..7a2b36d53ea 100644
Binary files a/icons/obj/doors/door_assembly.dmi and b/icons/obj/doors/door_assembly.dmi differ
diff --git a/icons/obj/doors/doorshuttle.dmi b/icons/obj/doors/doorshuttle.dmi
new file mode 100644
index 00000000000..a32899e4221
Binary files /dev/null and b/icons/obj/doors/doorshuttle.dmi differ
diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi
index 5379d6e70e0..fabf5a73be9 100644
Binary files a/icons/obj/lighting.dmi and b/icons/obj/lighting.dmi differ
diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm
index 2de7e0296e0..a425073e7f1 100644
--- a/interface/stylesheet.dm
+++ b/interface/stylesheet.dm
@@ -34,6 +34,7 @@ em {font-style: normal; font-weight: bold;}
.servradio {color: #6eaa2c;}
.syndradio {color: #6D3F40;}
.dsquadradio {color: #686868;}
+.aiprivradio {color: #ff00ff;}
.alert {color: #ff0000;}
h1.alert, h2.alert {color: #000000;}
@@ -63,4 +64,4 @@ h1.alert, h2.alert {color: #000000;}
BIG IMG.icon {width: 32px; height: 32px;}
-"}
\ No newline at end of file
+"}