Merge branch 'master' into dynamicport

This commit is contained in:
keronshb
2021-09-19 17:59:09 -04:00
91 changed files with 6778 additions and 2292 deletions
+25 -7
View File
@@ -37,7 +37,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/ai_monitored/turret_protected/AIsatextAP
name = "AI Sat Ext"
icon_state = "storage"
/area/arrival
requires_power = FALSE
@@ -296,6 +296,28 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
icon_state = "xenomaint"
area_flags = VALID_TERRITORY | BLOBS_ALLOWED | UNIQUE_AREA | XENOBIOLOGY_COMPATIBLE | CULT_PERMITTED
//Maintenance - Prison
/area/maintenance/prison
name = "Prison Maintenance"
icon_state = "prison_maintenance"
/area/maintenance/prison/fore
name = "Prison Fore Maintenance"
icon_state = "prison_maintenance"
/area/maintenance/prison/starboard
name = "Prison Starboard Maintenance"
icon_state = "prison_maintenance"
/area/maintenance/prison/aft
name = "Prison Aft Maintenance"
icon_state = "prison_maintenance"
/area/maintenance/prison/port
name = "Prison Port Maintenance"
icon_state = "prison_maintenance"
//Maintenance - Generic
/area/maintenance/arrivals/north
@@ -1393,13 +1415,9 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
name = "Prison Wing"
icon_state = "sec_prison"
/area/security/prison/toilet //radproof
name = "Prison Toilet"
icon_state = "sec_prison_safe"
/area/security/prison/safe //radproof
/area/security/prison/cells
name = "Prison Wing Cells"
icon_state = "sec_prison_safe"
icon_state = "prison_cells"
/area/security/prison/upper
name = "Upper Prison Wing"
@@ -25,7 +25,7 @@
antag_flag = ROLE_BLOODSUCKER
false_report_weight = 1
chaos = 4
restricted_jobs = list("AI","Cyborg")
restricted_jobs = list("Prisoner", "AI","Cyborg")
protected_jobs = list("Chaplain", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
required_players = 20
required_enemies = 2
+1 -1
View File
@@ -7,7 +7,7 @@
config_tag = "traitorbro"
required_players = 25
chaos = 5
restricted_jobs = list("AI", "Cyborg")
restricted_jobs = list("Prisoner", "AI", "Cyborg")
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
announce_span = "danger"
+1 -1
View File
@@ -11,7 +11,7 @@ GLOBAL_VAR(changeling_team_objective_type) //If this is not null, we hand our th
antag_flag = ROLE_CHANGELING
false_report_weight = 10
chaos = 5
restricted_jobs = list("AI", "Cyborg")
restricted_jobs = list("Prisoner", "AI", "Cyborg")
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //citadel change - adds HoP, CE, CMO, and RD to ling role blacklist
required_players = 15
required_enemies = 1
@@ -4,7 +4,7 @@
false_report_weight = 10
chaos = 6
traitors_possible = 3 //hard limit on traitors if scaling is turned off
restricted_jobs = list("AI", "Cyborg")
restricted_jobs = list("Prisoner", "AI", "Cyborg")
required_players = 25
required_enemies = 1 // how many of each type are required
recommended_enemies = 3
+1 -1
View File
@@ -139,7 +139,7 @@ Credit where due:
required_enemies = 3
recommended_enemies = 5
enemy_minimum_age = 7
protected_jobs = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //Silicons can eventually be converted
protected_jobs = list("Prisoner", "AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //Silicons can eventually be converted
restricted_jobs = list("Chaplain", "Captain")
announce_span = "brass"
announce_text = "Servants of Ratvar are trying to summon the Justiciar!\n\
+1 -1
View File
@@ -39,7 +39,7 @@
antag_flag = ROLE_CULTIST
false_report_weight = 10
chaos = 8
restricted_jobs = list("AI", "Cyborg")
restricted_jobs = list("Prisoner", "AI", "Cyborg")
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
required_players = 30
required_enemies = 3
+1 -1
View File
@@ -4,7 +4,7 @@
antag_flag = ROLE_DEVIL
false_report_weight = 1
chaos = 3
protected_jobs = list("Lawyer", "Curator", "Chaplain", "Head of Security", "Captain", "AI")
protected_jobs = list("Prisoner", "Lawyer", "Curator", "Chaplain", "Head of Security", "Captain", "AI")
required_players = 0
required_enemies = 1
recommended_enemies = 4
@@ -4,7 +4,7 @@
antag_flag = ROLE_HERETIC
false_report_weight = 5
chaos = 5
restricted_jobs = list("AI", "Cyborg")
restricted_jobs = list("Prisoner", "AI", "Cyborg")
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //citadel change - adds HoP, CE, CMO, and RD to heretic role blacklist
required_players = 15
required_enemies = 1
+1 -1
View File
@@ -7,7 +7,7 @@ GLOBAL_LIST_EMPTY(gangs)
config_tag = "gang"
antag_flag = ROLE_GANG
chaos = 9
restricted_jobs = list("AI", "Cyborg")
restricted_jobs = list("Prisoner", "AI", "Cyborg")
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
required_players = 15
required_enemies = 0
+1 -1
View File
@@ -13,7 +13,7 @@
antag_flag = ROLE_REV
false_report_weight = 10
chaos = 8
restricted_jobs = list("AI", "Cyborg")
restricted_jobs = list("Prisoner", "AI", "Cyborg")
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
required_players = 20
required_enemies = 1
+1 -1
View File
@@ -10,7 +10,7 @@
config_tag = "traitor"
antag_flag = ROLE_TRAITOR
false_report_weight = 20 //Reports of traitors are pretty common.
restricted_jobs = list("Cyborg")//They are part of the AI if he is traitor so are they, they use to get double chances
restricted_jobs = list("Prisoner", "Cyborg")//They are part of the AI if he is traitor so are they, they use to get double chances
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //citadel change - adds HoP, CE, CMO, and RD to ling role blacklist
required_players = 0
required_enemies = 1
+12 -17
View File
@@ -102,6 +102,9 @@
rad_insulation = RAD_MEDIUM_INSULATION
var/static/list/airlock_overlays = list()
/// sigh
var/unelectrify_timerid
/obj/machinery/door/airlock/Initialize()
. = ..()
@@ -791,21 +794,6 @@
return WIRE_INTERACTION_FAIL
return ..()
/obj/machinery/door/airlock/proc/electrified_loop()
while (secondsElectrified > NOT_ELECTRIFIED)
sleep(10)
if(QDELETED(src))
return
secondsElectrified--
updateDialog()
// This is to protect against changing to permanent, mid loop.
if(secondsElectrified == NOT_ELECTRIFIED)
set_electrified(NOT_ELECTRIFIED)
else
set_electrified(ELECTRIFIED_PERMANENT)
updateDialog()
/obj/machinery/door/airlock/Topic(href, href_list, var/nowindow = 0)
// If you add an if(..()) check you must first remove the var/nowindow parameter.
// Otherwise it will runtime with this kind of error: null.Topic()
@@ -1365,11 +1353,18 @@
wires.cut_all()
update_icon()
/obj/machinery/door/airlock/proc/remove_electrify()
secondsElectrified = NOT_ELECTRIFIED
unelectrify_timerid = null
/obj/machinery/door/airlock/proc/set_electrified(seconds, mob/user)
secondsElectrified = seconds
if(unelectrify_timerid)
deltimer(unelectrify_timerid)
unelectrify_timerid = null
if(secondsElectrified != ELECTRIFIED_PERMANENT)
unelectrify_timerid = addtimer(CALLBACK(src, .proc/remove_electrify), secondsElectrified SECONDS, TIMER_STOPPABLE)
diag_hud_set_electrified()
if(secondsElectrified > NOT_ELECTRIFIED)
INVOKE_ASYNC(src, .proc/electrified_loop)
if(user)
var/message
+1 -3
View File
@@ -197,10 +197,8 @@ GLOBAL_LIST_EMPTY(doppler_arrays)
if(orig_light < 10)
say("Explosion not large enough for research calculations.")
return
else if(orig_light < 4500)
point_gain = (83300 * orig_light) / (orig_light + 3000)
else
point_gain = TECHWEB_BOMB_POINTCAP
point_gain = (100000 * orig_light) / (orig_light + 5000)
/*****The Point Capper*****/
if(point_gain > linked_techweb.largest_bomb_value)
+66
View File
@@ -0,0 +1,66 @@
/obj/machinery/plate_press
name = "license plate press"
desc = "You know, we're making a lot of license plates for a station with literaly no cars in it."
icon = 'icons/obj/machines/prison.dmi'
icon_state = "offline"
use_power = IDLE_POWER_USE
idle_power_usage = 2
active_power_usage = 50
var/obj/item/stack/license_plates/empty/current_plate
var/pressing = FALSE
/obj/machinery/plate_press/update_icon()
. = ..()
if(!is_operational())
icon_state = "offline"
else if(pressing)
icon_state = "loop"
else if(current_plate)
icon_state = "online_loaded"
else
icon_state = "online"
/obj/machinery/plate_press/Destroy()
QDEL_NULL(current_plate)
. = ..()
/obj/machinery/plate_press/attackby(obj/item/I, mob/living/user, params)
if(!is_operational())
to_chat(user, "<span class='warning'>[src] has to be on to do this!</span>")
return FALSE
if(pressing)
to_chat(user, "<span class='warning'>[src] already has a plate in it!</span>")
return FALSE
if(istype(I, /obj/item/stack/license_plates/empty))
var/obj/item/stack/license_plates/empty/plate = I
plate.use(1)
current_plate = new plate.type(src, 1) //Spawn a new single sheet in the machine
update_icon()
else
return ..()
/obj/machinery/plate_press/attack_hand(mob/living/user)
. = ..()
if(!pressing && current_plate)
work_press(user)
///This proc attempts to create a plate. User cannot move during this process.
/obj/machinery/plate_press/proc/work_press(mob/living/user)
pressing = TRUE
update_icon()
to_chat(user, "<span class='notice'>You start pressing a new license plate!</span>")
if(!do_after(user, 40, target = src))
pressing = FALSE
update_icon()
return FALSE
use_power(100)
to_chat(user, "<span class='notice'>You finish pressing a new license plate!</span>")
pressing = FALSE
QDEL_NULL(current_plate)
update_icon()
new /obj/item/stack/license_plates/filled(drop_location(), 1)
+4 -4
View File
@@ -110,7 +110,7 @@
var/list/to_eat = AM0.GetAllContents()
var/living_detected = FALSE //technically includes silicons as well but eh
var/mob/living/living_detected //technically includes silicons as well but eh
var/list/nom = list()
var/list/crunchy_nom = list() //Mobs have to be handled differently so they get a different list instead of checking them multiple times.
@@ -120,10 +120,10 @@
var/obj/item/bodypart/head/as_head = AM
var/obj/item/mmi/as_mmi = AM
if(istype(AM, /obj/item/organ/brain) || (istype(as_head) && as_head.brain) || (istype(as_mmi) && as_mmi.brain) || istype(AM, /obj/item/dullahan_relay))
living_detected = TRUE
living_detected = living_detected || AM
nom += AM
else if(isliving(AM))
living_detected = TRUE
living_detected = living_detected || TRUE
crunchy_nom += AM
var/not_eaten = to_eat.len - nom.len - crunchy_nom.len
if(living_detected) // First, check if we have any living beings detected.
@@ -132,7 +132,7 @@
if(isliving(CRUNCH)) // MMIs and brains will get eaten like normal items
crush_living(CRUNCH)
else // Stop processing right now without eating anything.
emergency_stop()
emergency_stop(living_detected)
return
for(var/nommed in nom)
recycle_item(nommed)
+4
View File
@@ -64,6 +64,10 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark)
name = "Assistant"
icon_state = "Assistant"
/obj/effect/landmark/start/prisoner
name = "Prisoner"
icon_state = "Prisoner"
/obj/effect/landmark/start/assistant/override
jobspawn_override = TRUE
delete_after_roundstart = FALSE
@@ -60,6 +60,48 @@
/obj/item/gun/ballistic/automatic/pistol/deagle,
/obj/item/storage/box/syndie_kit/throwing_weapons = 3)
/obj/effect/spawner/lootdrop/prison_contraband
name = "prison contraband loot spawner"
loot = list(/obj/item/clothing/mask/cigarette/space_cigarette = 4,
/obj/item/clothing/mask/cigarette/robust = 2,
/obj/item/clothing/mask/cigarette/carp = 3,
/obj/item/clothing/mask/cigarette/uplift = 2,
/obj/item/clothing/mask/cigarette/dromedary = 3,
/obj/item/clothing/mask/cigarette/robustgold = 1,
/obj/item/storage/fancy/cigarettes/cigpack_uplift = 3,
/obj/item/storage/fancy/cigarettes = 3,
/obj/item/clothing/mask/cigarette/rollie/cannabis = 4,
/obj/item/toy/crayon/spraycan = 2,
/obj/item/crowbar = 1,
/obj/item/assembly/flash/handheld = 1,
/obj/item/restraints/handcuffs/cable/zipties = 1,
/obj/item/restraints/handcuffs = 1,
/obj/item/radio/off = 1,
/obj/item/lighter = 3,
/obj/item/storage/box/matches = 3,
/obj/item/reagent_containers/syringe/contraband/space_drugs = 1,
/obj/item/reagent_containers/syringe/contraband/krokodil = 1,
/obj/item/reagent_containers/syringe/contraband/crank = 1,
/obj/item/reagent_containers/syringe/contraband/methamphetamine = 1,
/obj/item/reagent_containers/syringe/contraband/bath_salts = 1,
/obj/item/reagent_containers/syringe/contraband/fentanyl = 1,
/obj/item/reagent_containers/syringe/contraband/morphine = 1,
/obj/item/storage/pill_bottle/happy = 1,
/obj/item/storage/pill_bottle/lsd = 1,
/obj/item/storage/pill_bottle/psicodine = 1,
/obj/item/reagent_containers/food/drinks/beer = 4,
/obj/item/reagent_containers/food/drinks/bottle/whiskey = 1,
/obj/item/paper/fluff/jobs/prisoner/letter = 1,
/obj/item/grenade/smokebomb = 1,
/obj/item/flashlight/seclite = 1,
/obj/item/tailclub = 1, //want to buy makeshift wooden club sprite
/obj/item/kitchen/knife/shiv = 4,
/obj/item/kitchen/knife/shiv/carrot = 1,
/obj/item/kitchen/knife = 1,
/obj/item/storage/wallet/random = 1,
/obj/item/pda = 1
)
/obj/effect/spawner/lootdrop/gambling
name = "gambling valuables spawner"
loot = list(
@@ -105,6 +105,12 @@ GLOBAL_LIST_INIT(channel_tokens, list(
keyslot = new /obj/item/encryptionkey/binary
recalculateChannels()
/obj/item/radio/headset/headset_prisoner
name = "prison radio headset"
desc = "An updated, modular intercom that fits over the head. Takes encryption keys. It looks like it has been modified to not broadcast."
icon_state = "prisoner_headset"
prison_radio = TRUE
/obj/item/radio/headset/headset_sec
name = "security radio headset"
desc = "This is used by your elite security force."
+20 -7
View File
@@ -255,18 +255,31 @@
icon_state = "knife"
desc = "A cyborg-mounted plasteel knife. Extremely sharp and durable."
/obj/item/kitchen/knife/carrotshiv
/obj/item/kitchen/knife/shiv
name = "glass shiv"
icon = 'icons/obj/shards.dmi'
icon_state = "shiv"
item_state = "shiv"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
desc = "A makeshift glass shiv."
force = 8
throwforce = 12//fuck git
attack_verb = list("shanked", "shivved")
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
custom_materials = list(/datum/material/glass=400)
/obj/item/kitchen/knife/shiv/carrot
name = "carrot shiv"
icon_state = "carrotshiv"
item_state = "carrotshiv"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
icon = 'icons/obj/kitchen.dmi'
desc = "Unlike other carrots, you should probably keep this far away from your eyes."
force = 8
throwforce = 12//fuck git
custom_materials = null
attack_verb = list("shanked", "shivved")
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
/obj/item/kitchen/knife/shiv/carrot/suicide_act(mob/living/carbon/user)
user.visible_message("<span class='suicide'>[user] forcefully drives \the [src] into [user.p_their()] eye! It looks like [user.p_theyre()] trying to commit suicide!</span>")
return BRUTELOSS
/obj/item/kitchen/rollingpin
name = "rolling pin"
@@ -0,0 +1,30 @@
/obj/item/stack/license_plates
name = "invalid plate"
desc = "someone fucked up"
icon = 'icons/obj/machines/prison.dmi'
icon_state = "empty_plate"
novariants = FALSE
max_amount = 50
/obj/item/stack/license_plates/empty
name = "empty license plate"
desc = "Instead of a license plate number, this could contain a quote like \"Live laugh love\"."
/obj/item/stack/license_plates/empty/fifty
amount = 50
/obj/item/stack/license_plates/filled
name = "license plate"
desc = "Prison labor paying off."
icon_state = "filled_plate_1_1"
///Override to allow for variations
/obj/item/stack/license_plates/filled/update_icon_state()
if(novariants)
return
if(amount <= (max_amount * (1/3)))
icon_state = "filled_plate_[rand(1,6)]_1"
else if (amount <= (max_amount * (2/3)))
icon_state = "filled_plate_[rand(1,6)]_2"
else
icon_state = "filled_plate_[rand(1,6)]_3"
+13 -1
View File
@@ -355,7 +355,19 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
/obj/item/shard/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/lightreplacer))
I.attackby(src, user)
var/obj/item/lightreplacer/L = I
L.attackby(src, user)
else if(istype(I, /obj/item/stack/sheet/cloth))
var/obj/item/stack/sheet/cloth/C = I
to_chat(user, "<span class='notice'>You begin to wrap the [C] around the [src]...</span>")
if(do_after(user, 35, target = src))
var/obj/item/kitchen/knife/shiv/S = new /obj/item/kitchen/knife/shiv
C.use(1)
to_chat(user, "<span class='notice'>You wrap the [C] around the [src] forming a makeshift weapon.</span>")
remove_item_from_storage(src)
qdel(src)
user.put_in_hands(S)
else
return ..()
+7 -1
View File
@@ -317,7 +317,7 @@
* Trays - Agouri
*/
/obj/item/storage/bag/tray
name = "tray"
name = "serving tray"
icon = 'icons/obj/food/containers.dmi'
icon_state = "tray"
desc = "A metal tray to lay food on."
@@ -377,6 +377,12 @@
. = ..()
update_icon()
/obj/item/storage/bag/tray/cafeteria
name = "cafeteria tray"
icon = 'icons/obj/food/containers.dmi'
icon_state = "foodtray"
desc = "A cheap metal tray to pile today's meal onto."
//bluespace tray, holds more items
/obj/item/storage/bag/tray/bluespace
name = "bluespace tray"
@@ -192,6 +192,7 @@
new /obj/item/clothing/under/rank/prisoner( src )
new /obj/item/clothing/under/rank/prisoner/skirt( src )
new /obj/item/clothing/shoes/sneakers/orange( src )
new /obj/item/radio/headset/headset_prisoner( src )
/obj/structure/closet/secure_closet/courtroom
name = "courtroom locker"
@@ -106,6 +106,16 @@
name = "trash cart"
icon_state = "trashcart"
/obj/structure/closet/crate/trashcart/Moved()
. = ..()
if(has_gravity())
playsound(src, 'sound/effects/roll.ogg', 100, TRUE)
/obj/structure/closet/crate/trashcart/laundry
name = "laundry cart"
desc = "A large cart for hauling around large amounts of laundry."
icon_state = "laundry"
/obj/structure/closet/crate/medical
desc = "A medical crate."
name = "medical crate"
@@ -263,7 +263,7 @@
/turf/open/floor/padded
name = "padded floor"
desc = "Keeps crazy people from hurting themselves. It's soft, plush, and very nice to get shoved agaisnt."
desc = "Keeps crazy people from hurting themselves. It's soft, plush, and very nice to get shoved against."
icon = 'icons/turf/floors.dmi'
icon_state = "floor_padded"
floor_tile = /obj/item/stack/tile/padded