diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm
index cfb61b50424..db320be2935 100644
--- a/code/game/machinery/computer/HolodeckControl.dm
+++ b/code/game/machinery/computer/HolodeckControl.dm
@@ -96,6 +96,36 @@
if(target)
loadProgram(target)
+ else if(href_list["desert"])
+ target = locate(/area/holodeck/source_desert)
+ if(target)
+ loadProgram(target)
+
+ else if(href_list["space"])
+ target = locate(/area/holodeck/source_space)
+ if(target)
+ loadProgram(target)
+
+ else if(href_list["picnicarea"])
+ target = locate(/area/holodeck/source_picnicarea)
+ if(target)
+ loadProgram(target)
+
+ else if(href_list["snowfield"])
+ target = locate(/area/holodeck/source_snowfield)
+ if(target)
+ loadProgram(target)
+
+ else if(href_list["theatre"])
+ target = locate(/area/holodeck/source_theatre)
+ if(target)
+ loadProgram(target)
+
+ else if(href_list["meetinghall"])
+ target = locate(/area/holodeck/source_meetinghall)
+ if(target)
+ loadProgram(target)
+
else if(href_list["turnoff"])
target = locate(/area/holodeck/source_plating)
if(target)
diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm
index 0cb83e5ac55..81243486139 100644
--- a/code/game/mecha/equipment/tools/tools.dm
+++ b/code/game/mecha/equipment/tools/tools.dm
@@ -1053,4 +1053,16 @@
set_ready_state(0)
chassis.use_power(energy_drain)
do_after_cooldown()
- return 1
\ No newline at end of file
+ return 1
+
+/obj/item/weapon/paintkit //Please don't use this for anything, it's a base type for custom mech paintjobs.
+ name = "mecha customisation kit"
+ desc = "A generic kit containing all the needed tools and parts to turn a mech into another mech."
+ icon = 'custom_items.dmi'
+ icon_state = "royce_kit"
+
+ var/new_name = "mech" //What is the variant called?
+ var/new_desc = "A mech." //How is the new mech described?
+ var/new_icon = "ripley" //What base icon will the new mech use?
+ var/removable = null //Can the kit be removed?
+ var/list/allowed_types = list() //Types of mech that the kit will work on.
\ No newline at end of file
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 9d8291733cb..c94c38c6c32 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -759,6 +759,34 @@
user.visible_message("[user] attaches [W] to [src].", "You attach [W] to [src]")
return
+ else if(istype(W, /obj/item/weapon/paintkit))
+
+ if(occupant)
+ user << "You can't customize a mech while someone is piloting it - that would be unsafe!"
+ return
+
+ var/obj/item/weapon/paintkit/P = W
+ var/found = null
+
+ for(var/type in P.allowed_types)
+ if(type==src.initial_icon)
+ found = 1
+ break
+
+ if(!found)
+ user << "That kit isn't meant for use on this class of exosuit."
+ return
+
+ user.visible_message("[user] opens [P] and spends some quality time customising [src].")
+
+ src.name = P.new_name
+ src.desc = P.new_desc
+ src.initial_icon = P.new_icon
+ src.reset_icon()
+
+ user.drop_item()
+ del(P)
+
else
call((proc_res["dynattackby"]||src), "dynattackby")(W,user)
/*
diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm
index 84bff5cffc4..d7e6a00fdbf 100644
--- a/code/game/mecha/working/ripley.dm
+++ b/code/game/mecha/working/ripley.dm
@@ -2,6 +2,7 @@
desc = "Autonomous Power Loader Unit. The workhorse of the exosuit world."
name = "APLU \"Ripley\""
icon_state = "ripley"
+ initial_icon = "ripley"
step_in = 6
max_temperature = 20000
health = 200
@@ -19,6 +20,7 @@
desc = "Standart APLU chassis was refitted with additional thermal protection and cistern."
name = "APLU \"Firefighter\""
icon_state = "firefighter"
+ initial_icon = "firefighter"
max_temperature = 65000
health = 250
lights_power = 8
@@ -107,18 +109,4 @@
T.Entered(A)
step_rand(A)
..()
- return
-
-
-/obj/mecha/working/ripley/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W, /obj/item/weapon/fluff/sven_fjeltson_1))//this shit broke ripleys
- src.icon_state = "earth"
- src.initial_icon = "earth"
- src.name = "APLU \"Strike the Earth!\""
- src.desc = "Looks like an over worked, under maintained Ripley with some horrific damage."
- user << "You pick up your old \"Strike the Earth!\" APLU."
- user.drop_item()
- del(W)
- return
- else
- ..()
+ return
\ No newline at end of file
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index 07f7443fc85..8e533cf37b2 100755
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -850,7 +850,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
P.overlays.Cut()
P.overlays += image('icons/obj/pda.dmi', "pda-r")
else
- U << "ERROR: Server isn't responding."
+ U << "ERROR: Messaging server is not responding."
/obj/item/device/pda/verb/verb_remove_id()
@@ -1162,7 +1162,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
plist[text("[name]")] = P
return plist
-
+
//Some spare PDAs in a box
/obj/item/weapon/storage/box/PDAs
diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm
index 893c8f47e54..14f250ebafa 100644
--- a/code/modules/clothing/head/jobs.dm
+++ b/code/modules/clothing/head/jobs.dm
@@ -63,18 +63,18 @@
//Medical
/obj/item/clothing/head/surgery
name = "surgical cap"
- desc = "A cap surgeons wear during operations. Keeps thier hair from tickling your internal organs."
+ desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs."
icon_state = "surgcap_blue"
- flags = FPRINT | TABLEPASS | BLOCKHAIR
+ flags = FPRINT | TABLEPASS | BLOCKHEADHAIR
/obj/item/clothing/head/surgery/purple
- desc = "A cap surgeons wear during operations. Keeps thier hair from tickling your internal organs. This one is deep purple."
+ desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is deep purple."
icon_state = "surgcap_purple"
/obj/item/clothing/head/surgery/blue
- desc = "A cap surgeons wear during operations. Keeps thier hair from tickling your internal organs. This one is baby blue"
+ desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is baby blue."
icon_state = "surgcap_blue"
/obj/item/clothing/head/surgery/green
- desc = "A cap surgeons wear during operations. Keeps thier hair from tickling your internal organs. This one is dark green"
+ desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is dark green."
icon_state = "surgcap_green"
diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm
index 086f04efa0f..33c1aafbb4c 100644
--- a/code/modules/customitems/item_defines.dm
+++ b/code/modules/customitems/item_defines.dm
@@ -1,4 +1,3 @@
-hi
// Add custom items you give to people here, and put their icons in custom_items.dmi
// Remember to change 'icon = 'custom_items.dmi'' for items not using /obj/item/fluff as a base
// Clothing item_state doesn't use custom_items.dmi. Just add them to the normal clothing files.
@@ -359,19 +358,29 @@ hi
////// Ripley customisation kit - Butchery Royce - MayeDay
-/obj/item/weapon/fluff/butcher_royce_1
+/obj/item/weapon/paintkit/fluff/butcher_royce_1
name = "Ripley customisation kit"
desc = "A kit containing all the needed tools and parts to turn an APLU Ripley into a Titan's Fist worker mech."
icon = 'custom_items.dmi'
icon_state = "royce_kit"
+ new_name = "APLU \"Titan's Fist\""
+ new_desc = "This ordinary mining Ripley has been customized to look like a unit of the Titans Fist."
+ new_icon = "titan"
+ allowed_types = list("ripley","firefighter")
+
////// Ripley customisation kit - Sven Fjeltson - Mordeth221
-/obj/item/weapon/fluff/sven_fjeltson_1
- name = "Mercenary APLU kit"
- desc = "A kit containing all the needed tools and parts to turn an APLU Ripley into an old Mercenaries APLU."
- icon = 'custom_items.dmi'
- icon_state = "sven_kit"
+/obj/item/weapon/paintkit/fluff/sven_fjeltson_1
+ name = "Mercenary APLU kit"
+ desc = "A kit containing all the needed tools and parts to turn an APLU Ripley into an old Mercenaries APLU."
+ icon = 'custom_items.dmi'
+ icon_state = "sven_kit"
+
+ new_name = "APLU \"Strike the Earth!\""
+ new_desc = "Looks like an over worked, under maintained Ripley with some horrific damage."
+ new_icon = "earth"
+ allowed_types = list("ripley","firefighter")
//////////////////////////////////
//////////// Clothing ////////////
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index 1fa82e5778d..3bdf798a6bd 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -88,7 +88,7 @@
update_inv_glasses()
else if (W == head)
head = null
- if(W.flags & BLOCKHAIR)
+ if((W.flags & BLOCKHAIR) || (W.flags & BLOCKHEADHAIR))
update_hair(0) //rebuild hair
success = 1
update_inv_head()
@@ -107,7 +107,7 @@
else if (W == wear_mask)
wear_mask = null
success = 1
- if(W.flags & BLOCKHAIR)
+ if((W.flags & BLOCKHAIR) || (W.flags & BLOCKHEADHAIR))
update_hair(0) //rebuild hair
if(internal)
if(internals)
@@ -188,7 +188,7 @@
update_inv_back(redraw_mob)
if(slot_wear_mask)
src.wear_mask = W
- if(wear_mask.flags & BLOCKHAIR)
+ if((wear_mask.flags & BLOCKHAIR) || (wear_mask.flags & BLOCKHEADHAIR))
update_hair(redraw_mob) //rebuild hair
W.equipped(src, slot)
update_inv_wear_mask(redraw_mob)
@@ -229,7 +229,7 @@
update_inv_gloves(redraw_mob)
if(slot_head)
src.head = W
- if(head.flags & BLOCKHAIR)
+ if((head.flags & BLOCKHAIR) || (head.flags & BLOCKHEADHAIR))
update_hair(redraw_mob) //rebuild hair
if(istype(W,/obj/item/clothing/head/kitty))
W.update_icon(src)
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 9d29d317c80..fea13b8bc10 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -350,7 +350,6 @@ proc/get_damage_icon_part(damage_state, body_part)
//masks and helmets can obscure our hair.
if( (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR)))
if(update_icons) update_icons()
-
return
//base icons
@@ -367,7 +366,7 @@ proc/get_damage_icon_part(damage_state, body_part)
face_standing.Blend(facial_s, ICON_OVERLAY)
face_lying.Blend(facial_l, ICON_OVERLAY)
- if(h_style)
+ if(h_style && !(head && (head.flags & BLOCKHEADHAIR)))
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]
if(hair_style)
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
diff --git a/code/modules/mob/living/silicon/robot/emote.dm b/code/modules/mob/living/silicon/robot/emote.dm
index 4fa8a543b98..6b94c52c6da 100644
--- a/code/modules/mob/living/silicon/robot/emote.dm
+++ b/code/modules/mob/living/silicon/robot/emote.dm
@@ -10,7 +10,18 @@
switch(act)
if ("me")
- return custom_emote(m_type, message)
+ if (src.client)
+ if(client.prefs.muted & MUTE_IC)
+ src << "You cannot send IC messages (muted)."
+ return
+ if (src.client.handle_spam_prevention(message,MUTE_IC))
+ return
+ if (stat)
+ return
+ if(!(message))
+ return
+ else
+ return custom_emote(m_type, message)
if ("custom")
return custom_emote(m_type, message)
@@ -62,20 +73,6 @@
message = "[src] flaps his wings ANGRILY!"
m_type = 2
- if ("me")
- if (src.client)
- if(client.prefs.muted & MUTE_IC)
- src << "You cannot send IC messages (muted)."
- return
- if (src.client.handle_spam_prevention(message,MUTE_IC))
- return
- if (stat)
- return
- if(!(message))
- return
- else
- message = "[src] [message]"
-
if ("twitch")
message = "[src] twitches violently."
m_type = 1
@@ -207,8 +204,12 @@
m_type = 2
else
src << "You are not security."
+
+ if ("help")
+ src << "salute, bow-(none)/mob, clap, flap, aflap, twitch, twitch_s, nod, deathgasp, glare-(none)/mob, stare-(none)/mob, look, beep, ping, \nbuzz, law, halt"
else
- src << text("Invalid Emote: []", act)
+ src << "\blue Unusable emote '[act]'. Say *help for a list."
+
if ((message && src.stat == 0))
if (m_type & 1)
for(var/mob/O in viewers(src, null))
diff --git a/code/setup.dm b/code/setup.dm
index c72f57f8805..f4b8d35e2ff 100644
--- a/code/setup.dm
+++ b/code/setup.dm
@@ -175,8 +175,7 @@ var/MAX_EXPLOSION_RANGE = 14
//FLAGS BITMASK
#define STOPSPRESSUREDMAGE 1 //This flag is used on the flags variable for SUIT and HEAD items which stop pressure damage. Note that the flag 1 was previous used as ONBACK, so it is possible for some code to use (flags & 1) when checking if something can be put on your back. Replace this code with (inv_flags & SLOT_BACK) if you see it anywhere
-//To successfully stop you taking all pressure damage you must have both a suit and head item with this flag.
-
+ //To successfully stop you taking all pressure damage you must have both a suit and head item with this flag.
#define TABLEPASS 2 // can pass by a table or rack
#define MASKINTERNALS 8 // mask allows internals
@@ -205,7 +204,8 @@ var/MAX_EXPLOSION_RANGE = 14
#define NOREACT 16384 //Reagents dont' react inside this container.
-#define BLOCKHAIR 32768 // temporarily removes the user's hair icon
+#define BLOCKHEADHAIR 4 // temporarily removes the user's hair overlay. Leaves facial hair.
+#define BLOCKHAIR 32768 // temporarily removes the user's hair, facial and otherwise.
//flags for pass_flags
#define PASSTABLE 1