Nuclear Fission Explosive
\nAuth. Disk: []
", src, (src.auth ? "++++++++++" : "----------"))
if (src.auth)
@@ -216,6 +221,12 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob)
set name = "Make Deployable"
set src in oview(1)
+ if (!usr.canmove || usr.stat || usr.restrained())
+ return
+ if (!ishuman(usr))
+ usr << "\red You don't have the dexterity to do this!"
+ return 1
+
if (src.deployable)
usr << "\red You close several panels to make [src] undeployable."
src.deployable = 0
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 406e5aab98..e66c7feb44 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -116,7 +116,7 @@
//Clonepod
//Start growing a human clone in the pod!
-/obj/machinery/clonepod/proc/growclone(var/ckey, var/clonename, var/ui, var/se, var/mindref, var/datum/species/mrace)
+/obj/machinery/clonepod/proc/growclone(var/ckey, var/clonename, var/ui, var/se, var/mindref, var/datum/species/mrace, var/languages)
if(mess || attempting)
return 0
var/datum/mind/clonemind = locate(mindref)
@@ -195,7 +195,8 @@
H.h_style = pick("Bedhead", "Bedhead 2", "Bedhead 3")
H.species = mrace
- H.add_language(mrace.language)
+ for(var/datum/language/L in languages)
+ H.add_language(L.name)
H.update_mutantrace()
H.suiciding = 0
src.attempting = 0
@@ -437,4 +438,4 @@
/* EMP grenade/spell effect
if(istype(A, /obj/machinery/clonepod))
A:malfunction()
-*/
\ No newline at end of file
+*/
diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm
index 3adeccdf91..184cc8e867 100644
--- a/code/game/machinery/computer/cloning.dm
+++ b/code/game/machinery/computer/cloning.dm
@@ -313,7 +313,7 @@
else if(!config.revival_cloning)
temp = "Error: Unable to initiate cloning cycle."
- else if(pod1.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"]))
+ else if(pod1.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["languages"]))
temp = "Initiating cloning cycle..."
records.Remove(C)
del(C)
@@ -323,7 +323,7 @@
var/mob/selected = find_dead_player("[C.fields["ckey"]]")
selected << 'sound/machines/chime.ogg' //probably not the best sound but I think it's reasonable
var/answer = alert(selected,"Do you want to return to life?","Cloning","Yes","No")
- if(answer != "No" && pod1.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["interface"]))
+ if(answer != "No" && pod1.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["languages"], C.fields["interface"]))
temp = "Initiating cloning cycle..."
records.Remove(C)
del(C)
@@ -370,6 +370,7 @@
R.fields["id"] = copytext(md5(subject.real_name), 2, 6)
R.fields["UI"] = subject.dna.uni_identity
R.fields["SE"] = subject.dna.struc_enzymes
+ R.fields["languages"] = subject.languages
//Add an implant if needed
var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject)
diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm
index fd34b65baa..73c7f5bd84 100644
--- a/code/game/mecha/equipment/tools/tools.dm
+++ b/code/game/mecha/equipment/tools/tools.dm
@@ -439,8 +439,18 @@
var/atom/movable/locked
var/mode = 1 //1 - gravsling 2 - gravpush
+ var/last_fired = 0 //Concept stolen from guns.
+ var/fire_delay = 10 //Used to prevent spam-brute against humans.
action(atom/movable/target)
+
+ if(world.time >= last_fired + fire_delay)
+ last_fired = world.time
+ else
+ if (world.time % 3)
+ occupant_message("[src] is not ready to fire again!")
+ return 0
+
switch(mode)
if(1)
if(!action_checks(target) && !locked) return
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 6c38442fec..16e5ef3a9a 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -38,6 +38,7 @@
var/armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
var/list/allowed = null //suit storage stuff.
var/obj/item/device/uplink/hidden/hidden_uplink = null // All items can have an uplink hidden inside, just remember to add the triggers.
+ var/icon_override = null //Used to override hardcoded clothing dmis in human clothing proc.
/obj/item/device
icon = 'icons/obj/device.dmi'
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index 1cdd99d133..9123617f2a 100755
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -715,8 +715,12 @@ var/global/list/obj/item/device/pda/PDAs = list()
U.show_message("\red Energy feeds back into your [src]!", 1)
U << browse(null, "window=pda")
explode()
+ log_admin("[key_name(U)] just attempted to blow up [P] with the Detomatix cartridge but failed, blowing themselves up")
+ message_admins("[key_name_admin(U)] just attempted to blow up [P] with the Detomatix cartridge but failed, blowing themselves up", 1)
else
U.show_message("\blue Success!", 1)
+ log_admin("[key_name(U)] just attempted to blow up [P] with the Detomatix cartridge and succeded")
+ message_admins("[key_name_admin(U)] just attempted to blow up [P] with the Detomatix cartridge and succeded", 1)
P.explode()
else
U << "PDA not found."
@@ -1193,4 +1197,4 @@ var/global/list/obj/item/device/pda/PDAs = list()
// Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP
/obj/item/device/pda/emp_act(severity)
for(var/atom/A in src)
- A.emp_act(severity)
\ No newline at end of file
+ A.emp_act(severity)
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index fa7438e749..b5aa11c6e9 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -510,6 +510,12 @@
if(counter >= 5) //So things dont get squiiiiished!
jobs += ""
counter = 0
+
+ if(jobban_isbanned(M, "Internal Affairs Agent"))
+ jobs += "| Internal Affairs Agent | "
+ else
+ jobs += "Internal Affairs Agent | "
+
jobs += "
"
//Non-Human (Green)
@@ -587,6 +593,13 @@
else
jobs += "[replacetext("Wizard", " ", " ")] | "
+ //ERT
+ if(jobban_isbanned(M, "Emergency Response Team") || isbanned_dept)
+ jobs += "Emergency Response Team | "
+ else
+ jobs += "Emergency Response Team | "
+
+
/* //Malfunctioning AI //Removed Malf-bans because they're a pain to impliment
if(jobban_isbanned(M, "malf AI") || isbanned_dept)
jobs += "[replacetext("Malf AI", " ", " ")] | "
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 3c76e6753d..3e40aeb5d5 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -22,7 +22,7 @@
if(H.species.name in species_restricted)
wearable = 1
- if(!wearable)
+ if(!wearable && (slot != 15 && slot != 16)) //Pockets.
M << "\red Your species cannot wear [src]."
return 0
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index be7a028f2a..607dd9d808 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -128,7 +128,7 @@
desc = "Covers the eyes, preventing sight."
icon_state = "blindfold"
item_state = "blindfold"
- vision_flags = BLIND
+ //vision_flags = BLIND // This flag is only supposed to be used if it causes permanent blindness, not temporary because of glasses
/obj/item/clothing/glasses/sunglasses/prescription
name = "prescription sunglasses"
@@ -193,4 +193,4 @@
name = "Optical Thermal Implants"
desc = "A set of implantable lenses designed to augment your vision"
icon_state = "thermalimplants"
- item_state = "syringe_kit"
\ No newline at end of file
+ item_state = "syringe_kit"
diff --git a/code/modules/clothing/gloves/ninja.dm b/code/modules/clothing/gloves/ninja.dm
index 15e7c40c3b..a3cb36e8b6 100644
--- a/code/modules/clothing/gloves/ninja.dm
+++ b/code/modules/clothing/gloves/ninja.dm
@@ -19,6 +19,7 @@
var/candrain = 0
var/mindrain = 200
var/maxdrain = 400
+ species_restricted = null
/*
This runs the gamut of what ninja gloves can do
diff --git a/code/modules/clothing/gloves/stungloves.dm b/code/modules/clothing/gloves/stungloves.dm
index fde681a4ea..7b52f3e4c9 100644
--- a/code/modules/clothing/gloves/stungloves.dm
+++ b/code/modules/clothing/gloves/stungloves.dm
@@ -32,7 +32,7 @@
else
user << "[src] already have a cell."
- else if(istype(W, /obj/item/weapon/wirecutters))
+ else if(istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/weapon/scalpel))
wired = null
@@ -43,7 +43,7 @@
cell = null
if(clipped == 0)
playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
- user.visible_message("\red [user] snips the fingertips off [src].","\red You snip the fingertips off [src].")
+ user.visible_message("\red [user] cut the fingertips off [src].","\red You cut the fingertips off [src].")
clipped = 1
if("exclude" in species_restricted)
name = "mangled [name]"
@@ -78,4 +78,4 @@
if(wired)
overlays += "gloves_wire"
if(cell)
- overlays += "gloves_cell"
\ No newline at end of file
+ overlays += "gloves_cell"
diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm
index a6cdefafc4..f09f3b14e6 100644
--- a/code/modules/clothing/spacesuits/alien.dm
+++ b/code/modules/clothing/spacesuits/alien.dm
@@ -213,4 +213,50 @@
examine()
set src in view()
- ..()
\ No newline at end of file
+ ..()
+
+//Species-specific Syndicate rigs.
+
+/obj/item/clothing/head/helmet/space/rig/syndi/tajara
+ icon_state = "rig0-syndie-taj"
+ item_state = "syndie_helm"
+ item_color = "syndie-taj"
+ species_restricted = list("Tajaran")
+
+/obj/item/clothing/suit/space/rig/syndi/tajara
+ item_state = "syndie_hardsuit"
+ icon_state = "rig-syndie-taj"
+ species_restricted = list("Tajaran")
+
+/obj/item/clothing/head/helmet/space/rig/syndi/unathi
+ icon_state = "rig0-syndie-unathi"
+ item_state = "syndie_helm"
+ item_color = "syndie-unathi"
+ species_restricted = list("Unathi")
+
+/obj/item/clothing/suit/space/rig/syndi/unathi
+ item_state = "syndie_hardsuit"
+ icon_state = "rig-syndie-unathi"
+ species_restricted = list("Unathi")
+
+/obj/item/clothing/head/helmet/space/rig/syndi/skrell
+ icon_state = "rig0-syndie-skrell"
+ item_state = "syndie_helm"
+ item_color = "syndie-skrell"
+ species_restricted = list("Skrell")
+
+/obj/item/clothing/suit/space/rig/syndi/skrell
+ item_state = "syndie_hardsuit"
+ icon_state = "rig-syndie-skrell"
+ species_restricted = list("Skrell")
+
+/obj/item/clothing/head/helmet/space/rig/syndi/human
+ icon_state = "rig0-syndie-human"
+ item_state = "syndie_helm"
+ item_color = "syndie-human"
+ species_restricted = list("Human")
+
+/obj/item/clothing/suit/space/rig/syndi/human
+ item_state = "syndie_hardsuit"
+ icon_state = "rig-syndie-human"
+ species_restricted = list("Human")
diff --git a/code/modules/clothing/spacesuits/ninja.dm b/code/modules/clothing/spacesuits/ninja.dm
index 8f49738fbf..9e071cae01 100644
--- a/code/modules/clothing/spacesuits/ninja.dm
+++ b/code/modules/clothing/spacesuits/ninja.dm
@@ -6,7 +6,7 @@
allowed = list(/obj/item/weapon/cell)
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 25)
siemens_coefficient = 0.2
-
+ species_restricted = null
/obj/item/clothing/suit/space/space_ninja
name = "ninja suit"
@@ -17,6 +17,7 @@
slowdown = 0
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
siemens_coefficient = 0.2
+ species_restricted = null //Workaround for spawning alien ninja without internals.
//Important parts of the suit.
var/mob/living/carbon/affecting = null//The wearer.
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index ebca69ecca..15b96ec4a8 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -467,7 +467,7 @@ proc/get_damage_icon_part(damage_state, body_part)
if(!t_color) t_color = icon_state
var/image/standing = image("icon_state" = "[t_color]_s")
- standing.icon = 'icons/mob/uniform.dmi'
+ standing.icon = ((w_uniform.icon_override) ? w_uniform.icon_override : 'icons/mob/uniform.dmi')
if(w_uniform.blood_DNA)
standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "uniformblood")
@@ -508,7 +508,7 @@ proc/get_damage_icon_part(damage_state, body_part)
if(gloves)
var/t_state = gloves.item_state
if(!t_state) t_state = gloves.icon_state
- var/image/standing = image("icon" = 'icons/mob/hands.dmi', "icon_state" = "[t_state]")
+ var/image/standing = image("icon" = ((gloves.icon_override) ? gloves.icon_override : 'icons/mob/hands.dmi'), "icon_state" = "[t_state]")
if(gloves.blood_DNA)
standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "bloodyhands")
gloves.screen_loc = ui_gloves
@@ -523,7 +523,7 @@ proc/get_damage_icon_part(damage_state, body_part)
/mob/living/carbon/human/update_inv_glasses(var/update_icons=1)
if(glasses)
- overlays_standing[GLASSES_LAYER] = image("icon" = 'icons/mob/eyes.dmi', "icon_state" = "[glasses.icon_state]")
+ overlays_standing[GLASSES_LAYER] = image("icon" = ((glasses.icon_override) ? glasses.icon_override : 'icons/mob/eyes.dmi'), "icon_state" = "[glasses.icon_state]")
else
overlays_standing[GLASSES_LAYER] = null
if(update_icons) update_icons()
@@ -531,16 +531,16 @@ proc/get_damage_icon_part(damage_state, body_part)
/mob/living/carbon/human/update_inv_ears(var/update_icons=1)
if(l_ear || r_ear)
if(l_ear)
- overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[l_ear.icon_state]")
+ overlays_standing[EARS_LAYER] = image("icon" = ((l_ear.icon_override) ? l_ear.icon_override : 'icons/mob/ears.dmi'), "icon_state" = "[l_ear.icon_state]")
if(r_ear)
- overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[r_ear.icon_state]")
+ overlays_standing[EARS_LAYER] = image("icon" = ((r_ear.icon_override) ? r_ear.icon_override : 'icons/mob/ears.dmi'), "icon_state" = "[r_ear.icon_state]")
else
overlays_standing[EARS_LAYER] = null
if(update_icons) update_icons()
/mob/living/carbon/human/update_inv_shoes(var/update_icons=1)
if(shoes)
- var/image/standing = image("icon" = 'icons/mob/feet.dmi', "icon_state" = "[shoes.icon_state]")
+ var/image/standing = image("icon" = ((shoes.icon_override) ? shoes.icon_override : 'icons/mob/feet.dmi'), "icon_state" = "[shoes.icon_state]")
if(shoes.blood_DNA)
standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "shoeblood")
overlays_standing[SHOES_LAYER] = standing
@@ -566,7 +566,7 @@ proc/get_damage_icon_part(damage_state, body_part)
if(istype(head,/obj/item/clothing/head/kitty))
standing = image("icon" = head:mob)
else
- standing = image("icon" = 'icons/mob/head.dmi', "icon_state" = "[head.icon_state]")
+ standing = image("icon" = ((head.icon_override) ? head.icon_override : 'icons/mob/head.dmi'), "icon_state" = "[head.icon_state]")
if(head.blood_DNA)
standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "helmetblood")
overlays_standing[HEAD_LAYER] = standing
@@ -579,7 +579,7 @@ proc/get_damage_icon_part(damage_state, body_part)
belt.screen_loc = ui_belt //TODO
var/t_state = belt.item_state
if(!t_state) t_state = belt.icon_state
- overlays_standing[BELT_LAYER] = image("icon" = 'icons/mob/belt.dmi', "icon_state" = "[t_state]")
+ overlays_standing[BELT_LAYER] = image("icon" = ((belt.icon_override) ? belt.icon_override : 'icons/mob/belt.dmi'), "icon_state" = "[t_state]")
else
overlays_standing[BELT_LAYER] = null
if(update_icons) update_icons()
@@ -588,7 +588,7 @@ proc/get_damage_icon_part(damage_state, body_part)
/mob/living/carbon/human/update_inv_wear_suit(var/update_icons=1)
if( wear_suit && istype(wear_suit, /obj/item/clothing/suit) ) //TODO check this
wear_suit.screen_loc = ui_oclothing //TODO
- var/image/standing = image("icon" = 'icons/mob/suit.dmi', "icon_state" = "[wear_suit.icon_state]")
+ var/image/standing = image("icon" = ((wear_suit.icon_override) ? wear_suit.icon_override : 'icons/mob/suit.dmi'), "icon_state" = "[wear_suit.icon_state]")
if( istype(wear_suit, /obj/item/clothing/suit/straight_jacket) )
drop_from_inventory(handcuffed)
@@ -619,7 +619,7 @@ proc/get_damage_icon_part(damage_state, body_part)
/mob/living/carbon/human/update_inv_wear_mask(var/update_icons=1)
if( wear_mask && ( istype(wear_mask, /obj/item/clothing/mask) || istype(wear_mask, /obj/item/clothing/tie) ) )
wear_mask.screen_loc = ui_mask //TODO
- var/image/standing = image("icon" = 'icons/mob/mask.dmi', "icon_state" = "[wear_mask.icon_state]")
+ var/image/standing = image("icon" = ((wear_mask.icon_override) ? wear_mask.icon_override : 'icons/mob/mask.dmi'), "icon_state" = "[wear_mask.icon_state]")
if( !istype(wear_mask, /obj/item/clothing/mask/cigarette) && wear_mask.blood_DNA )
standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "maskblood")
overlays_standing[FACEMASK_LAYER] = standing
@@ -631,7 +631,7 @@ proc/get_damage_icon_part(damage_state, body_part)
/mob/living/carbon/human/update_inv_back(var/update_icons=1)
if(back)
back.screen_loc = ui_back //TODO
- overlays_standing[BACK_LAYER] = image("icon" = 'icons/mob/back.dmi', "icon_state" = "[back.icon_state]")
+ overlays_standing[BACK_LAYER] = image("icon" = ((back.icon_override) ? back.icon_override : 'icons/mob/back.dmi'), "icon_state" = "[back.icon_state]")
else
overlays_standing[BACK_LAYER] = null
if(update_icons) update_icons()
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 4985362077..0396dd6ce0 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index 2b1a47ac9d..cafdb88f33 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index fdcee55193..7ec3f3ee2a 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index cb68bd46f3..6a72147f32 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ