diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index da253551e0..36e06663f6 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -402,7 +402,6 @@
/obj/machinery/clonepod/container_resist(mob/living/user)
if(user.stat == CONSCIOUS)
go_out()
- mob_occupant.apply_vore_prefs()
/obj/machinery/clonepod/emp_act(severity)
var/mob/living/mob_occupant = occupant
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index ead3e6636c..145fc7e0d5 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -850,7 +850,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!"
req_access_txt = "5"
products = list(/obj/item/reagent_containers/syringe = 12, /obj/item/reagent_containers/dropper = 3, /obj/item/stack/medical/gauze = 8, /obj/item/reagent_containers/pill/patch/styptic = 5, /obj/item/reagent_containers/pill/insulin = 10,
- /obj/item/reagent_containers/pill/patch/silver_sulf = 5, /obj/item/reagent_containers/glass/bottle/charcoal = 4, /obj/item/reagent_containers/spray/medical/sterilizer = 1,
+ /obj/item/reagent_containers/pill/patch/silver_sulf = 5, /obj/item/reagent_containers/medspray/styptic = 2, /obj/item/reagent_containers/medspray/silver_sulf = 2, /obj/item/reagent_containers/glass/bottle/charcoal = 4, /obj/item/reagent_containers/medspray/sterilizine = 1,
/obj/item/reagent_containers/glass/bottle/epinephrine = 4, /obj/item/reagent_containers/glass/bottle/morphine = 4, /obj/item/reagent_containers/glass/bottle/salglu_solution = 3,
/obj/item/reagent_containers/glass/bottle/toxin = 3, /obj/item/reagent_containers/syringe/antiviral = 6, /obj/item/reagent_containers/pill/salbutamol = 2, /obj/item/device/healthanalyzer = 4, /obj/item/device/sensor_device = 2, /obj/item/pinpointer/crew = 2)
contraband = list(/obj/item/reagent_containers/pill/tox = 3, /obj/item/reagent_containers/pill/morphine = 4, /obj/item/reagent_containers/pill/charcoal = 6)
@@ -876,7 +876,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
density = FALSE
products = list(/obj/item/reagent_containers/syringe = 3, /obj/item/reagent_containers/pill/patch/styptic = 5,
/obj/item/reagent_containers/pill/patch/silver_sulf = 5, /obj/item/reagent_containers/pill/charcoal = 2,
- /obj/item/reagent_containers/spray/medical/sterilizer = 1)
+ /obj/item/reagent_containers/medspray/sterilizine = 1)
contraband = list(/obj/item/reagent_containers/pill/tox = 2, /obj/item/reagent_containers/pill/morphine = 2)
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
resistance_flags = FIRE_PROOF
diff --git a/code/modules/admin/permissionverbs/permissionedit.dm b/code/modules/admin/permissionverbs/permissionedit.dm
deleted file mode 100644
index a0035afa9d..0000000000
--- a/code/modules/admin/permissionverbs/permissionedit.dm
+++ /dev/null
@@ -1,145 +0,0 @@
-/client/proc/edit_admin_permissions()
- set category = "Admin"
- set name = "Permissions Panel"
- set desc = "Edit admin permissions"
- if(!check_rights(R_PERMISSIONS))
- return
- usr.client.holder.edit_admin_permissions()
-
-/datum/admins/proc/edit_admin_permissions()
- if(!check_rights(R_PERMISSIONS))
- return
-
- var/list/output = list({"
-
-
-Permissions Panel
-
-
-
-
-
-
-| CKEY \[+\] |
-RANK |
-PERMISSIONS |
-VERB-OVERRIDES |
-
-"})
-
- for(var/adm_ckey in GLOB.admin_datums+GLOB.deadmins)
- var/datum/admins/D = GLOB.admin_datums[adm_ckey]
- if(!D)
- D = GLOB.deadmins[adm_ckey]
- if (!D)
- continue
-
- var/rights = rights2text(D.rank.rights," ")
- if(!rights)
- rights = "*none*"
- var/deadminlink = ""
- if (D.deadmined)
- deadminlink = " \[RA\]"
- else
- deadminlink = " \[DA\]"
-
- output += ""
- output += "| [adm_ckey] [deadminlink]\[-\] | "
- output += "[D.rank.name] | "
- output += "[rights] | "
- output += "[rights2text(0," ",D.rank.adds,D.rank.subs)] | "
- output += "
"
-
- output += {"
-
-Search:
-
-"}
-
- usr << browse(jointext(output, ""),"window=editrights;size=900x650")
-
-/datum/admins/proc/log_admin_rank_modification(adm_ckey, new_rank)
- if(CONFIG_GET(flag/admin_legacy_system))
- return
-
- if(!usr.client)
- return
-
- if (!check_rights(R_PERMISSIONS))
- return
-
- if(!SSdbcore.Connect())
- to_chat(usr, "Failed to establish database connection.")
- return
-
- if(!adm_ckey || !new_rank)
- return
-
- adm_ckey = ckey(adm_ckey)
-
- if(!adm_ckey)
- return
-
- if(!istext(adm_ckey) || !istext(new_rank))
- return
-
- var/datum/DBQuery/query_get_admin = SSdbcore.NewQuery("SELECT id FROM [format_table_name("admin")] WHERE ckey = '[adm_ckey]'")
- if(!query_get_admin.warn_execute())
- return
-
- var/new_admin = 1
- var/admin_id
- while(query_get_admin.NextRow())
- new_admin = 0
- admin_id = text2num(query_get_admin.item[1])
-
- if(new_admin)
- var/datum/DBQuery/query_add_admin = SSdbcore.NewQuery("INSERT INTO `[format_table_name("admin")]` (`id`, `ckey`, `rank`, `level`, `flags`) VALUES (null, '[adm_ckey]', '[new_rank]', -1, 0)")
- if(!query_add_admin.warn_execute())
- return
- var/datum/DBQuery/query_add_admin_log = SSdbcore.NewQuery("INSERT INTO `[format_table_name("admin_log")]` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Added new admin [adm_ckey] to rank [new_rank]');")
- if(!query_add_admin_log.warn_execute())
- return
- to_chat(usr, "New admin added.")
- else
- if(!isnull(admin_id) && isnum(admin_id))
- var/datum/DBQuery/query_change_admin = SSdbcore.NewQuery("UPDATE `[format_table_name("admin")]` SET rank = '[new_rank]' WHERE id = [admin_id]")
- if(!query_change_admin.warn_execute())
- return
- var/datum/DBQuery/query_change_admin_log = SSdbcore.NewQuery("INSERT INTO `[format_table_name("admin_log")]` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Edited the rank of [adm_ckey] to [new_rank]');")
- if(!query_change_admin_log.warn_execute())
- return
- to_chat(usr, "Admin rank changed.")
-
-
-/datum/admins/proc/log_admin_permission_modification(adm_ckey, new_permission)
- if(CONFIG_GET(flag/admin_legacy_system))
- return
- if(!usr.client)
- return
- if(check_rights(R_PERMISSIONS))
- return
-
- if(!SSdbcore.Connect())
- to_chat(usr, "Failed to establish database connection.")
- return
-
- if(!adm_ckey || !istext(adm_ckey) || !isnum(new_permission))
- return
-
- var/datum/DBQuery/query_get_perms = SSdbcore.NewQuery("SELECT id, flags FROM [format_table_name("admin")] WHERE ckey = '[adm_ckey]'")
- if(!query_get_perms.warn_execute())
- return
-
- var/admin_id
- while(query_get_perms.NextRow())
- admin_id = text2num(query_get_perms.item[1])
-
- if(!admin_id)
- return
-
- var/datum/DBQuery/query_change_perms = SSdbcore.NewQuery("UPDATE `[format_table_name("admin")]` SET flags = [new_permission] WHERE id = [admin_id]")
- if(!query_change_perms.warn_execute())
- return
- var/datum/DBQuery/query_change_perms_log = SSdbcore.NewQuery("INSERT INTO `[format_table_name("admin_log")]` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Edit permission [rights2text(new_permission)] (flag = [new_permission]) to admin [adm_ckey]');")
- query_change_perms_log.warn_execute()
diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
index 41af8cc865..809c657f23 100644
--- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
@@ -4,12 +4,15 @@
id = "jelly"
default_color = "00FF90"
say_mod = "chirps"
- species_traits = list(SPECIES_ORGANIC,MUTCOLORS,EYECOLOR,NOBLOOD)
+ species_traits = list(SPECIES_ORGANIC,MUTCOLORS,EYECOLOR,,HAIR,FACEHAIR,NOBLOOD)
inherent_traits = list(TRAIT_TOXINLOVER)
+ mutant_bodyparts = list("mam_tail", "mam_ears", "taur") //CIT CHANGE
+ default_features = list("mcolor" = "FFF", "mam_tail" = "None", "mam_ears" = "None") //CIT CHANGE
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/slime
exotic_blood = "slimejelly"
damage_overlay_type = ""
var/datum/action/innate/regenerate_limbs/regenerate_limbs
+ var/datum/action/innate/slime_change/slime_change //CIT CHANGE
liked_food = MEAT
coldmod = 6 // = 3x cold damage
heatmod = 0.5 // = 1/4x heat damage
@@ -18,6 +21,8 @@
/datum/species/jelly/on_species_loss(mob/living/carbon/C)
if(regenerate_limbs)
regenerate_limbs.Remove(C)
+ if(slime_change) //CIT CHANGE
+ slime_change.Remove(C) //CIT CHANGE
C.remove_language(/datum/language/slime)
C.faction -= "slime"
..()
@@ -29,6 +34,8 @@
if(ishuman(C))
regenerate_limbs = new
regenerate_limbs.Grant(C)
+ slime_change = new //CIT CHANGE
+ slime_change.Grant(C) //CIT CHANGE
C.faction |= "slime"
/datum/species/jelly/spec_life(mob/living/carbon/human/H)
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 2b1ff82af7..4f58bc0610 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -210,6 +210,8 @@
if(!CONFIG_GET(flag/disable_secborg))
modulelist["Security"] = /obj/item/robot_module/security
+ modulelist += get_cit_modules() //Citadel change - adds Citadel's borg modules.
+
var/input_module = input("Please, select a module!", "Robot", null, null) as null|anything in modulelist
if(!input_module || module.type != /obj/item/robot_module)
return
@@ -363,8 +365,12 @@
to_chat(user, "You start fixing yourself...")
if(!W.use_tool(src, user, 50))
return
-
- adjustBruteLoss(-30)
+ adjustBruteLoss(-10)
+ else
+ to_chat(user, "You start fixing [src]...")
+ if(!do_after(user, 30, target = src))
+ return
+ adjustBruteLoss(-30)
updatehealth()
add_fingerprint(user)
visible_message("[user] has fixed some of the dents on [src].")
@@ -374,11 +380,16 @@
user.changeNext_move(CLICK_CD_MELEE)
var/obj/item/stack/cable_coil/coil = W
if (getFireLoss() > 0 || getToxLoss() > 0)
- if(src == user)
+ if(src == user && coil.use(1))
to_chat(user, "You start fixing yourself...")
if(!do_after(user, 50, target = src))
return
+ adjustFireLoss(-10)
+ adjustToxLoss(-10)
if (coil.use(1))
+ to_chat(user, "You start fixing [src]...")
+ if(!do_after(user, 30, target = src))
+ return
adjustFireLoss(-30)
adjustToxLoss(-30)
updatehealth()
@@ -587,6 +598,36 @@
/mob/living/silicon/robot/update_icons()
cut_overlays()
icon_state = module.cyborg_base_icon
+
+ //Citadel changes start here - Allows modules to use different icon files, and allows modules to specify a pixel offset
+ //Citadel changes start here - Allows modules to use different icon files, and allows modules to specify a pixel offset
+ icon = (module.cyborg_icon_override ? module.cyborg_icon_override : initial(icon))
+ if(laser)
+ add_overlay("laser")//Is this even used??? - Yes borg/inventory.dm
+ if(disabler)
+ add_overlay("disabler")//ditto
+
+ if(sleeper_g && module.sleeper_overlay)
+ add_overlay("[module.sleeper_overlay]_g")
+ if(sleeper_r && module.sleeper_overlay)
+ add_overlay("[module.sleeper_overlay]_r")
+ if(module.dogborg == TRUE)
+ if(resting)
+ cut_overlays()
+ icon_state = "[module.cyborg_base_icon]-rest"
+ else
+ icon_state = "[module.cyborg_base_icon]"
+
+ if(stat == DEAD && module.has_snowflake_deadsprite)
+ icon_state = "[module.cyborg_base_icon]-wreck"
+
+ if(module.cyborg_pixel_offset)
+ pixel_x = module.cyborg_pixel_offset
+ //End of citadel changes
+
+ if(module.cyborg_base_icon == "robot")
+ icon = 'icons/mob/robots.dmi'
+ pixel_x = initial(pixel_x)
if(stat != DEAD && !(IsUnconscious() || IsStun() || IsKnockdown() || low_power_mode)) //Not dead, not stunned.
if(!eye_lights)
eye_lights = new()
@@ -980,6 +1021,7 @@
designation = module.name
if(hands)
hands.icon_state = module.moduleselect_icon
+ hands.icon = (module.moduleselect_alternate_icon ? module.moduleselect_alternate_icon : initial(hands.icon)) //CITADEL CHANGE - allows module select icons to use a different icon file
if(module.can_be_pushed)
status_flags |= CANPUSH
else
diff --git a/code/modules/security_levels/security_levels.dm b/code/modules/security_levels/security_levels.dm
index 282cfada7f..7e45854628 100644
--- a/code/modules/security_levels/security_levels.dm
+++ b/code/modules/security_levels/security_levels.dm
@@ -41,6 +41,7 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
SSshuttle.emergency.modTimer(2)
GLOB.security_level = SEC_LEVEL_BLUE
+ sound_to_playing_players('sound/misc/voybluealert.ogg') // Citadel change - Makes alerts play a sound
for(var/obj/machinery/firealarm/FA in GLOB.machines)
if(is_station_level(FA.z))
FA.update_icon()
@@ -55,6 +56,7 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
else
minor_announce(CONFIG_GET(string/alert_red_downto), "Attention! Code red!")
GLOB.security_level = SEC_LEVEL_RED
+ sound_to_playing_players('sound/misc/voyalert.ogg') // Citadel change - Makes alerts play a sound
for(var/obj/machinery/firealarm/FA in GLOB.machines)
if(is_station_level(FA.z))
@@ -69,6 +71,7 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
else if(GLOB.security_level == SEC_LEVEL_BLUE)
SSshuttle.emergency.modTimer(0.5)
GLOB.security_level = SEC_LEVEL_DELTA
+ sound_to_playing_players('sound/misc/deltakalaxon.ogg') // Citadel change - Makes alerts play a sound
for(var/obj/machinery/firealarm/FA in GLOB.machines)
if(is_station_level(FA.z))
FA.update_icon()
diff --git a/html/browser/common.css b/html/browser/common.css
index 2f43c8c6d7..25db5313d4 100644
--- a/html/browser/common.css
+++ b/html/browser/common.css
@@ -337,14 +337,39 @@ div.notice
transition: .4s;
}
+.slider.red:before {
+ background-color: #d6858b;
+}
+
+.slider.locked:before {
+ content: url("padlock.png");
+ background-color: #b4b4b4;
+}
+
input:checked + .slider {
background-color: #40628a;
}
+input:checked + .slider.red {
+ background-color: #a92621;
+}
+
+input:checked + .slider.locked {
+ background-color: #707070;
+}
+
input:focus + .slider {
box-shadow: 0 0 1px #2196F3;
}
+input:focus + .slider.red {
+ box-shadow: 0 0 1px #f3212d;
+}
+
+input:focus + .slider.locked {
+ box-shadow: 0 0 1px #979797;
+}
+
input:checked + .slider:before {
transform: translateX(24px);
}
diff --git a/html/padlock.png b/html/padlock.png
new file mode 100644
index 0000000000..c09b95bf51
Binary files /dev/null and b/html/padlock.png differ
diff --git a/tgstation.dme b/tgstation.dme
index b1787c6712..da81029fbb 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -1019,6 +1019,7 @@
#include "code\modules\admin\ipintel.dm"
#include "code\modules\admin\IsBanned.dm"
#include "code\modules\admin\NewBan.dm"
+#include "code\modules\admin\permissionedit.dm"
#include "code\modules\admin\player_panel.dm"
#include "code\modules\admin\secrets.dm"
#include "code\modules\admin\sound_emitter.dm"
@@ -1027,7 +1028,6 @@
#include "code\modules\admin\topic.dm"
#include "code\modules\admin\whitelist.dm"
#include "code\modules\admin\DB_ban\functions.dm"
-#include "code\modules\admin\permissionverbs\permissionedit.dm"
#include "code\modules\admin\verbs\adminhelp.dm"
#include "code\modules\admin\verbs\adminjump.dm"
#include "code\modules\admin\verbs\adminpm.dm"
@@ -2319,6 +2319,7 @@
#include "code\modules\reagents\reagent_containers\dropper.dm"
#include "code\modules\reagents\reagent_containers\glass.dm"
#include "code\modules\reagents\reagent_containers\hypospray.dm"
+#include "code\modules\reagents\reagent_containers\medspray.dm"
#include "code\modules\reagents\reagent_containers\patch.dm"
#include "code\modules\reagents\reagent_containers\pill.dm"
#include "code\modules\reagents\reagent_containers\spray.dm"