diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index bbe2db385a0..4aa30657778 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -42,11 +42,6 @@ SUBSYSTEM_DEF(ticker) 'sound/music/title1.ogg',\ 'sound/music/title2.ogg',\ 'sound/music/title3.ogg',) - // Setup codephrase - if(!GLOB.syndicate_code_phrase) - GLOB.syndicate_code_phrase = generate_code_phrase() - if(!GLOB.syndicate_code_response) - GLOB.syndicate_code_response = generate_code_phrase() // Map name if(using_map && using_map.name) @@ -197,6 +192,10 @@ SUBSYSTEM_DEF(ticker) //shuttle_controller.setup_shuttle_docks() spawn(0)//Forking here so we dont have to wait for this to finish + if(!GLOB.syndicate_code_phrase) + GLOB.syndicate_code_phrase = generate_code_phrase() + if(!GLOB.syndicate_code_response) + GLOB.syndicate_code_response = generate_code_phrase() mode.post_setup() //Cleanup some stuff for(var/obj/effect/landmark/start/S in GLOB.landmarks_list) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index fe0e2e357ad..7a63fa1571f 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -1366,7 +1366,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine name = "Shaft Miner Starter Kit" cost = 30 access = access_qm - contains = list(/obj/item/storage/backpack/duffel/mining_conscript) + contains = list(/obj/item/storage/backpack/duffel/mining_conscript/noid) containertype = /obj/structure/closet/crate/secure containername = "shaft miner starter kit" diff --git a/code/game/gamemodes/blob/blobs/shield.dm b/code/game/gamemodes/blob/blobs/shield.dm index 2dd6a3d7c5b..0e74e601957 100644 --- a/code/game/gamemodes/blob/blobs/shield.dm +++ b/code/game/gamemodes/blob/blobs/shield.dm @@ -36,7 +36,7 @@ var/reflect_chance = 80 //80% chance to reflect /obj/structure/blob/shield/reflective/handle_ricochet(obj/item/projectile/P) - if(P.is_reflectable && prob(reflect_chance)) + if(P.is_reflectable && prob(reflect_chance) && !P.legacy) var/P_turf = get_turf(P) var/face_direction = get_dir(src, P_turf) var/face_angle = dir2angle(face_direction) @@ -48,6 +48,9 @@ P.firer = src //so people who fired the lasers are not immune to them when it reflects visible_message("[P] reflects off [src]!") return -1// complete projectile permutation + else if(P.is_reflectable && P.legacy) //to stop legacy projectile exploits + visible_message("[P] disperses into energy from [src]!") + qdel(P) else playsound(src, P.hitsound, 50, 1) visible_message("[src] is hit by \a [P]!") diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm index d221c94d39f..bfc30780b81 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -165,7 +165,10 @@ var/targetitem = input("Select item to search for.", "Item Mode Select","") as null|anything in item_names if(!targetitem) return - target = locate(item_paths[targetitem]) + var/list/obj/item/target_candidates = get_all_of_type(item_paths[targetitem], subtypes = TRUE) + for(var/obj/item/candidate in target_candidates) + if(!is_admin_level(candidate.loc.z)) + target = candidate if(!target) to_chat(usr, "Failed to locate [targetitem]!") return diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index ef68117e1c4..2d1b55c5b99 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -344,11 +344,14 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu var/theft_area /datum/objective/steal/proc/get_location() - if(steal_target.location_override) - return steal_target.location_override - var/obj/item/T = locate(steal_target.typepath) - theft_area = get_area(T.loc) - return "[theft_area]" + if(steal_target.location_override) + return steal_target.location_override + var/list/obj/item/steal_candidates = get_all_of_type(steal_target.typepath, subtypes = TRUE) + for(var/obj/item/candidate in steal_candidates) + if(!is_admin_level(candidate.loc.z)) + theft_area = get_area(candidate.loc) + return "[theft_area]" + return "an unknown area" /datum/objective/steal/find_target() var/loop=50 diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm index 48b64e8c589..71202f8c536 100644 --- a/code/game/machinery/ai_slipper.dm +++ b/code/game/machinery/ai_slipper.dm @@ -1,7 +1,7 @@ /obj/machinery/ai_slipper name = "\improper AI liquid dispenser" icon = 'icons/obj/device.dmi' - icon_state = "motion3" + icon_state = "liquid_dispenser" layer = 3 plane = FLOOR_PLANE anchored = 1.0 @@ -17,14 +17,14 @@ /obj/machinery/ai_slipper/power_change() if(stat & BROKEN) - return + update_icon() else if( powered() ) stat &= ~NOPOWER else - icon_state = "motion0" stat |= NOPOWER disabled = TRUE + update_icon() /obj/machinery/ai_slipper/proc/setState(var/enabled, var/uses) disabled = disabled @@ -56,7 +56,7 @@ if(stat & (NOPOWER|BROKEN)) return disabled = !disabled - icon_state = disabled? "motion0":"motion3" + update_icon() /obj/machinery/ai_slipper/proc/Activate() if(stat & (NOPOWER|BROKEN)) @@ -70,6 +70,12 @@ cooldown_time = world.timeofday + 100 slip_process() +/obj/machinery/ai_slipper/update_icon() + if(stat & (NOPOWER|BROKEN) || disabled) + icon_state = "liquid_dispenser" + else + icon_state = "liquid_dispenser_on" + /obj/machinery/ai_slipper/attack_ai(mob/user) return attack_hand(user) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index adf22a06850..0dd301d5542 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -134,8 +134,6 @@ if(operating) return add_fingerprint(user) - if(!requiresID()) - user = null if(density && !emagged) if(allowed(user)) @@ -157,7 +155,7 @@ return try_to_activate_door(user) /obj/machinery/door/attack_tk(mob/user) - if(requiresID() && !allowed(null)) + if(!allowed(null)) return ..() @@ -165,9 +163,7 @@ add_fingerprint(user) if(operating || emagged) return - if(!requiresID()) - user = null //so allowed(user) always succeeds - if(allowed(user) || user.can_advanced_admin_interact()) + if(requiresID() && (allowed(user) || user.can_advanced_admin_interact())) if(density) open() else @@ -179,6 +175,8 @@ /obj/machinery/door/allowed(mob/M) if(emergency) return TRUE + if(!requiresID()) + return FALSE // Intentional. machinery/door/requiresID() always == 1. airlocks, however, == 0 if ID scan is disabled. Yes, this var is poorly named. return ..() /obj/machinery/door/proc/try_to_weld(obj/item/weldingtool/W, mob/user) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index a96a1c0d518..6dbafe2534f 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -1292,7 +1292,8 @@ /obj/item/clothing/head/cueball = 1,/obj/item/clothing/under/scratch = 1, /obj/item/clothing/under/victdress = 1, /obj/item/clothing/under/victdress/red = 1, /obj/item/clothing/suit/victcoat = 1, /obj/item/clothing/suit/victcoat/red = 1, /obj/item/clothing/under/victsuit = 1, /obj/item/clothing/under/victsuit/redblk = 1, /obj/item/clothing/under/victsuit/red = 1, /obj/item/clothing/suit/tailcoat = 1, - /obj/item/clothing/suit/draculacoat = 1, /obj/item/clothing/head/zepelli = 1) + /obj/item/clothing/suit/draculacoat = 1, /obj/item/clothing/head/zepelli = 1, + /obj/item/clothing/under/redhawaiianshirt = 1, /obj/item/clothing/under/pinkhawaiianshirt = 1, /obj/item/clothing/under/bluehawaiianshirt = 1, /obj/item/clothing/under/orangehawaiianshirt = 1) contraband = list(/obj/item/clothing/suit/judgerobe = 1,/obj/item/clothing/head/powdered_wig = 1,/obj/item/gun/magic/wand = 1, /obj/item/clothing/mask/balaclava=1, /obj/item/clothing/mask/horsehead = 2) premium = list(/obj/item/clothing/suit/hgpirate = 1, /obj/item/clothing/head/hgpiratecap = 1, /obj/item/clothing/head/helmet/roman = 1, /obj/item/clothing/head/helmet/roman/legionaire = 1, /obj/item/clothing/under/roman = 1, /obj/item/clothing/shoes/roman = 1, /obj/item/shield/riot/roman = 1) refill_canister = /obj/item/vending_refill/autodrobe diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 3db9272cce8..fc8d8b1e83d 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -33,6 +33,7 @@ "Phazon", "Exosuit Equipment", "Cyborg Upgrade Modules", + "Medical", "Misc" ) diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 83e6f8e95f8..713259e081c 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -357,6 +357,21 @@ new /obj/item/ammo_box/magazine/m12g/buckshot(src) new /obj/item/ammo_box/magazine/m12g/dragon(src) +/obj/item/storage/backpack/duffel/mining_conscript/noid + name = "mining conscription kit" + desc = "A kit containing everything a crewmember needs to support a shaft miner in the field." + +/obj/item/storage/backpack/duffel/mining_conscript/noid/New() + ..() + new /obj/item/pickaxe(src) + new /obj/item/clothing/glasses/meson(src) + new /obj/item/t_scanner/adv_mining_scanner/lesser(src) + new /obj/item/storage/bag/ore(src) + new /obj/item/clothing/under/rank/miner/lavaland(src) + new /obj/item/encryptionkey/headset_cargo(src) + new /obj/item/clothing/mask/gas(src) + + /obj/item/storage/backpack/duffel/syndie/ammo/smg desc = "A large duffel bag, packed to the brim with C-20r magazines." diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 224f07d4277..ffa33df033f 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -169,6 +169,14 @@ message_admins("Ban process: A mob matching [playermob.ckey] was found at location [playermob.x], [playermob.y], [playermob.z]. Custom IP and computer id fields replaced with the IP and computer id from the located mob") DB_ban_record(bantype, playermob, banduration, banreason, banjob, null, banckey, banip, bancid ) + if(BANTYPE_PERMA) + add_note(banckey, "Permanently Banned - [banreason]", null, usr.ckey, 0) + else if(BANTYPE_TEMP) + add_note(banckey, "Banned for [banduration] minutes - [banreason]", null, usr.ckey, 0) + else if(BANTYPE_JOB_PERMA) + add_note(banckey, "Banned from [banjob] - [banreason]", null, usr.ckey, 0) + else + add_note(banckey, "[banreason]", null, usr.ckey, 0) else if(href_list["editrights"]) diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index adcb1639c12..91527f2dd19 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -857,3 +857,36 @@ icon_state = "burial" item_state = "burial" item_color = "burial" + +/obj/item/clothing/under/redhawaiianshirt + name = "red hawaiian shirt" + desc = "a floral shirt worn to most vacation destinations." + icon_state = "hawaiianred" + item_state = "hawaiianred" + item_color = "hawaiianred" + flags_size = ONESIZEFITSALL + +/obj/item/clothing/under/pinkhawaiianshirt + name = "pink hawaiian shirt" + desc = "a pink floral shirt the material feels cool and comfy." + icon_state = "hawaiianpink" + item_state = "hawaiianpink" + item_color = "hawaiianpink" + flags_size = ONESIZEFITSALL + +/obj/item/clothing/under/orangehawaiianshirt + name = "orange hawaiian shirt" + desc = "a orange floral shirt for a relaxing day in space." + icon_state = "hawaiianorange" + item_state = "hawaiianorange" + item_color = "hawaiianorange" + flags_size = ONESIZEFITSALL + +/obj/item/clothing/under/bluehawaiianshirt + name = "blue hawaiian shirt" + desc = "a blue floral shirt it has a oddly colored pink flower on it." + icon_state = "hawaiianblue" + item_state = "hawaiianblue" + item_color = "hawaiianblue" + flags_size = ONESIZEFITSALL + diff --git a/code/modules/mob/dead/observer/spells.dm b/code/modules/mob/dead/observer/spells.dm index 916ff9aa9b8..e890098b29b 100644 --- a/code/modules/mob/dead/observer/spells.dm +++ b/code/modules/mob/dead/observer/spells.dm @@ -15,6 +15,7 @@ GLOBAL_LIST_INIT(boo_phrases, list( ghost = TRUE + action_icon_state = "boo" school = "transmutation" charge_max = 600 starts_charged = FALSE diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 52636efb896..c0e8badf35d 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -106,6 +106,12 @@ else //Everyone else fails, skip the emote attempt return + if("warble", "warbles") + if(isskrell(src)) //Only Skrell can warble. + on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm' + else //Everyone else fails, skip the emote attempt + return + if("scream", "screams") on_CD = handle_emote_CD(50) //longer cooldown if("fart", "farts", "flip", "flips", "snap", "snaps") @@ -221,6 +227,13 @@ playsound(loc, 'sound/effects/voxrustle.ogg', 50, 0) //Credit to sound-ideas (freesfx.co.uk) for the sound. m_type = 2 + if("warble", "warbles") + var/M = handle_emote_param(param) + + message = "[src] warbles[M ? " at [M]" : ""]." + playsound(loc, 'sound/effects/warble.ogg', 50, 0) // Copyright CC BY 3.0 alienistcog (freesound.org) for the sound. + m_type = 2 + if("yes") var/M = handle_emote_param(param) @@ -904,6 +917,8 @@ emotelist += "\nVox specific emotes :- quill(s)" if("Diona") emotelist += "\nDiona specific emotes :- creak(s)" + if("Skrell") + emotelist += "\nSkrell specific emotes :- warble(s)" if(ismachine(src)) emotelist += "\nMachine specific emotes :- beep(s)-(none)/mob, buzz(es)-none/mob, no-(none)/mob, ping(s)-(none)/mob, yes-(none)/mob, buzz2-(none)/mob" diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm index f73ee07441a..5b82f8d35dd 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm @@ -202,7 +202,7 @@ var/global/list/ts_spiderling_list = list() var/obj/machinery/door/airlock/A = target if(A.density) try_open_airlock(A) - else if(isliving(target)) + else if(isliving(target) && (!client || a_intent == INTENT_HARM)) var/mob/living/G = target if(issilicon(G)) G.attack_animal(src) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 4c9ca937409..f7719c4fd54 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -692,11 +692,9 @@ // pipe is deleted // ensure if holder is present, it is expelled /obj/structure/disposalpipe/Destroy() - var/obj/structure/disposalholder/H = locate() in src - if(H) - // holder was present + for(var/obj/structure/disposalholder/H in contents) H.active = 0 - var/turf/T = src.loc + var/turf/T = loc if(T.density) // deleting pipe is inside a dense turf (wall) // this is unlikely, but just dump out everything into the turf in case @@ -709,8 +707,7 @@ return // otherwise, do normal expel from turf - if(H) - expel(H, T, 0) + expel(H, T, 0) return ..() /obj/structure/disposalpipe/singularity_pull(S, current_size) diff --git a/code/modules/research/designs/equipment_designs.dm b/code/modules/research/designs/equipment_designs.dm index 6e485040715..eb0901b71e2 100644 --- a/code/modules/research/designs/equipment_designs.dm +++ b/code/modules/research/designs/equipment_designs.dm @@ -125,6 +125,7 @@ name = "Portable Seed Extractor" desc = "For the enterprising botanist on the go. Less efficient than the stationary model, it creates one seed per plant." build_type = PROTOLATHE + id = "portaseeder" req_tech = list("biotech" = 3, "engineering" = 2) materials = list(MAT_METAL = 1000, MAT_GLASS = 400) build_path = /obj/item/storage/bag/plants/portaseeder diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index d945722770e..98a181bcdf8 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -101,7 +101,7 @@ materials = list(MAT_METAL = 1000, MAT_GLASS = 500) construction_time = 75 build_path = /obj/item/mmi - category = list("Misc","Medical") + category = list("Medical") /datum/design/robotic_brain name = "Robotic Brain" @@ -112,7 +112,7 @@ materials = list(MAT_METAL = 1700, MAT_GLASS = 1350, MAT_GOLD = 500) //Gold, because SWAG. construction_time = 75 build_path = /obj/item/mmi/robotic_brain - category = list("Misc","Medical") + category = list("Medical") /datum/design/mmi_radio_upgrade name = "Man-Machine Interface Radio Upgrade" @@ -123,7 +123,7 @@ materials = list(MAT_METAL = 200) construction_time = 50 build_path = /obj/item/mmi_radio_upgrade - category = list("Misc","Medical") + category = list("Medical") /datum/design/nanopaste name = "Nanopaste" @@ -288,7 +288,7 @@ construction_time = 40 materials = list(MAT_METAL = 600, MAT_GLASS = 400) build_path = /obj/item/organ/internal/cyberimp/eyes/shield - category = list("Misc", "Medical") + category = list("Medical") /datum/design/cyberimp_breather name = "Breathing Tube Implant" @@ -299,7 +299,7 @@ construction_time = 35 materials = list(MAT_METAL = 600, MAT_GLASS = 250) build_path = /obj/item/organ/internal/cyberimp/mouth/breathing_tube - category = list("Misc", "Medical") + category = list("Medical") /datum/design/cyberimp_surgical name = "Surgical Arm Implant" @@ -310,7 +310,7 @@ materials = list(MAT_METAL = 2500, MAT_GLASS = 1500, MAT_SILVER = 1500) construction_time = 200 build_path = /obj/item/organ/internal/cyberimp/arm/surgery - category = list("Misc", "Medical") + category = list("Medical") /datum/design/cyberimp_toolset name = "Toolset Arm Implant" @@ -321,7 +321,7 @@ materials = list(MAT_METAL = 2500, MAT_GLASS = 1500, MAT_SILVER = 1500) construction_time = 200 build_path = /obj/item/organ/internal/cyberimp/arm/toolset - category = list("Misc", "Medical") + category = list("Medical") /datum/design/cyberimp_diagnostic_hud name = "Diagnostic HUD implant" @@ -332,7 +332,7 @@ construction_time = 50 materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 500, MAT_GOLD = 500) build_path = /obj/item/organ/internal/cyberimp/eyes/hud/diagnostic - category = list("Misc", "Medical") + category = list("Medical") /datum/design/cyberimp_medical_hud name = "Medical HUD implant" @@ -343,7 +343,7 @@ construction_time = 50 materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 500, MAT_GOLD = 500) build_path = /obj/item/organ/internal/cyberimp/eyes/hud/medical - category = list("Misc", "Medical") + category = list("Medical") /datum/design/cyberimp_security_hud name = "Security HUD implant" @@ -354,7 +354,7 @@ construction_time = 50 materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 750, MAT_GOLD = 750) build_path = /obj/item/organ/internal/cyberimp/eyes/hud/security - category = list("Misc", "Medical") + category = list("Medical") /datum/design/cyberimp_meson name = "Meson scanner implant" @@ -365,7 +365,7 @@ construction_time = 50 materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_SILVER = 500, MAT_GOLD = 300) build_path = /obj/item/organ/internal/cyberimp/eyes/meson - category = list("Misc", "Medical") + category = list("Medical") /datum/design/cyberimp_xray name = "X-Ray implant" @@ -376,7 +376,7 @@ construction_time = 60 materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 600, MAT_GOLD = 600, MAT_PLASMA = 1000, MAT_URANIUM = 1000, MAT_DIAMOND = 1000, MAT_BLUESPACE = 1000) build_path = /obj/item/organ/internal/cyberimp/eyes/xray - category = list("Misc", "Medical") + category = list("Medical") /datum/design/cyberimp_thermals name = "Thermals implant" @@ -387,7 +387,7 @@ construction_time = 60 materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 600, MAT_GOLD = 600, MAT_PLASMA = 1000, MAT_DIAMOND = 2000) build_path = /obj/item/organ/internal/cyberimp/eyes/thermals - category = list("Misc", "Medical") + category = list("Medical") /datum/design/cyberimp_antidrop name = "Anti-Drop implant" @@ -398,7 +398,7 @@ construction_time = 60 materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 400, MAT_GOLD = 400) build_path = /obj/item/organ/internal/cyberimp/brain/anti_drop - category = list("Misc", "Medical") + category = list("Medical") /datum/design/cyberimp_antistun name = "CNS Rebooter implant" @@ -409,7 +409,7 @@ construction_time = 60 materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 500, MAT_GOLD = 1000) build_path = /obj/item/organ/internal/cyberimp/brain/anti_stun - category = list("Misc", "Medical") + category = list("Medical") /datum/design/cyberimp_clownvoice name = "Comical implant" @@ -420,7 +420,7 @@ construction_time = 60 materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_BANANIUM = 200) build_path = /obj/item/organ/internal/cyberimp/brain/clown_voice - category = list("Misc", "Medical") + category = list("Medical") /datum/design/cyberimp_nutriment name = "Nutriment pump implant" @@ -431,7 +431,7 @@ construction_time = 40 materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_GOLD = 500) build_path = /obj/item/organ/internal/cyberimp/chest/nutriment - category = list("Misc", "Medical") + category = list("Medical") /datum/design/cyberimp_nutriment_plus name = "Nutriment pump implant PLUS" @@ -442,7 +442,7 @@ construction_time = 50 materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_GOLD = 500, MAT_URANIUM = 750) build_path = /obj/item/organ/internal/cyberimp/chest/nutriment/plus - category = list("Misc", "Medical") + category = list("Medical") /datum/design/cyberimp_reviver name = "Reviver implant" @@ -453,7 +453,7 @@ construction_time = 60 materials = list(MAT_METAL = 800, MAT_GLASS = 800, MAT_GOLD = 300, MAT_URANIUM = 500) build_path = /obj/item/organ/internal/cyberimp/chest/reviver - category = list("Misc", "Medical") + category = list("Medical") ///////////////////////////////////////// ////////////Regular Implants///////////// @@ -508,6 +508,7 @@ req_tech = list("biotech" = 4, "materials" = 4) build_type = PROTOLATHE | MECHFAB materials = list(MAT_METAL = 500, MAT_GLASS = 500) + construction_time = 60 build_path = /obj/item/organ/internal/eyes/cybernetic category = list("Medical") @@ -518,6 +519,7 @@ req_tech = list("biotech" = 4, "materials" = 4) build_type = PROTOLATHE | MECHFAB materials = list(MAT_METAL = 500, MAT_GLASS = 500) + construction_time = 60 build_path = /obj/item/organ/internal/liver/cybernetic category = list("Medical") @@ -528,6 +530,7 @@ req_tech = list("biotech" = 4, "materials" = 4) build_type = PROTOLATHE | MECHFAB materials = list(MAT_METAL = 500, MAT_GLASS = 500) + construction_time = 60 build_path = /obj/item/organ/internal/kidneys/cybernetic category = list("Medical") @@ -538,6 +541,7 @@ req_tech = list("biotech" = 4, "materials" = 4) build_type = PROTOLATHE | MECHFAB materials = list(MAT_METAL = 500, MAT_GLASS = 500) + construction_time = 60 build_path = /obj/item/organ/internal/heart/cybernetic category = list("Medical") @@ -548,6 +552,7 @@ req_tech = list("biotech" = 5, "materials" = 5, "engineering" = 5) build_type = PROTOLATHE | MECHFAB materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_SILVER = 500) + construction_time = 60 build_path = /obj/item/organ/internal/heart/cybernetic/upgraded category = list("Medical") @@ -558,6 +563,7 @@ req_tech = list("biotech" = 4, "materials" = 4) build_type = PROTOLATHE | MECHFAB materials = list(MAT_METAL = 500, MAT_GLASS = 500) + construction_time = 60 build_path = /obj/item/organ/internal/lungs/cybernetic category = list("Medical") @@ -568,5 +574,6 @@ req_tech = list("biotech" = 5, "materials" = 5, "engineering" = 5) build_type = PROTOLATHE | MECHFAB materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_SILVER = 500) + construction_time = 60 build_path = /obj/item/organ/internal/lungs/cybernetic/upgraded category = list("Medical") diff --git a/html/changelogs/AutoChangeLog-pr-11166.yml b/html/changelogs/AutoChangeLog-pr-11166.yml new file mode 100644 index 00000000000..c22380edf97 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11166.yml @@ -0,0 +1,5 @@ +author: "craftxbox" +delete-after: True +changes: + - tweak: "Highlight string uses regex" + - rscdel: "Removed jquery mark" diff --git a/html/changelogs/AutoChangeLog-pr-11447.yml b/html/changelogs/AutoChangeLog-pr-11447.yml new file mode 100644 index 00000000000..c1376becfc4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11447.yml @@ -0,0 +1,4 @@ +author: "Kyep" +delete-after: True +changes: + - bugfix: "Disarming/grabbing a door with IDSCAN disabled no longer results in a can_admin_interact runtime error." diff --git a/html/changelogs/AutoChangeLog-pr-11522.yml b/html/changelogs/AutoChangeLog-pr-11522.yml new file mode 100644 index 00000000000..736de7a16ec --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11522.yml @@ -0,0 +1,4 @@ +author: "Couls" +delete-after: True +changes: + - rscadd: "Medical category to exosuit fabricator with implants and cybernetics" diff --git a/html/changelogs/AutoChangeLog-pr-11581.yml b/html/changelogs/AutoChangeLog-pr-11581.yml new file mode 100644 index 00000000000..0610a90a465 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11581.yml @@ -0,0 +1,5 @@ +author: "uc_guy" +delete-after: True +changes: + - bugfix: "Theft objective locations hints now ignore the Centcomm Z level." + - bugfix: "Adv. Pinpointer no longer targets items in Centcom Z level." diff --git a/html/changelogs/AutoChangeLog-pr-11586.yml b/html/changelogs/AutoChangeLog-pr-11586.yml new file mode 100644 index 00000000000..871d5cf3d31 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11586.yml @@ -0,0 +1,4 @@ +author: "iantine" +delete-after: True +changes: + - rscadd: "Skrell *warble emote" diff --git a/html/changelogs/AutoChangeLog-pr-11591.yml b/html/changelogs/AutoChangeLog-pr-11591.yml new file mode 100644 index 00000000000..6b87eda36f7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11591.yml @@ -0,0 +1,4 @@ +author: "Citinited" +delete-after: True +changes: + - bugfix: "Destroying a disposals trunk should no longer occasionally delete things held inside it." diff --git a/html/changelogs/AutoChangeLog-pr-11610.yml b/html/changelogs/AutoChangeLog-pr-11610.yml new file mode 100644 index 00000000000..a8b120b5cb3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11610.yml @@ -0,0 +1,4 @@ +author: "Arkatos" +delete-after: True +changes: + - imageadd: "Added new Boo! spell icon" diff --git a/html/changelogs/AutoChangeLog-pr-11681.yml b/html/changelogs/AutoChangeLog-pr-11681.yml new file mode 100644 index 00000000000..1f3cd52eecf --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11681.yml @@ -0,0 +1,4 @@ +author: "Couls" +delete-after: True +changes: + - bugfix: "codephrase names no longer appear blank" diff --git a/html/changelogs/AutoChangeLog-pr-11715.yml b/html/changelogs/AutoChangeLog-pr-11715.yml new file mode 100644 index 00000000000..bba6cb85647 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11715.yml @@ -0,0 +1,4 @@ +author: "Improvedname" +delete-after: True +changes: + - tweak: "Cargo miner starter kit crate will no longer include a ID" diff --git a/html/changelogs/AutoChangeLog-pr-11724.yml b/html/changelogs/AutoChangeLog-pr-11724.yml new file mode 100644 index 00000000000..4e16f5bf117 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11724.yml @@ -0,0 +1,4 @@ +author: "Kyep" +delete-after: True +changes: + - bugfix: "Terror Spiders no longer trigger their special attack when nuzzling someone on help intent." diff --git a/html/changelogs/AutoChangeLog-pr-11728.yml b/html/changelogs/AutoChangeLog-pr-11728.yml new file mode 100644 index 00000000000..39e13e545c3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11728.yml @@ -0,0 +1,4 @@ +author: "Citinited" +delete-after: True +changes: + - imageadd: "Ports liquid dispenser sprites from tgstation." diff --git a/html/changelogs/AutoChangeLog-pr-11733.yml b/html/changelogs/AutoChangeLog-pr-11733.yml new file mode 100644 index 00000000000..da551ed3006 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11733.yml @@ -0,0 +1,4 @@ +author: "Ty-Omaha" +delete-after: True +changes: + - bugfix: "Manual bans now auto-note" diff --git a/html/changelogs/AutoChangeLog-pr-11738.yml b/html/changelogs/AutoChangeLog-pr-11738.yml new file mode 100644 index 00000000000..7fdeaa831d7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11738.yml @@ -0,0 +1,4 @@ +author: "Evankhell561" +delete-after: True +changes: + - bugfix: "Portable Seed Extractor designon the protolathe." diff --git a/html/changelogs/AutoChangeLog-pr-11748.yml b/html/changelogs/AutoChangeLog-pr-11748.yml new file mode 100644 index 00000000000..8cbe2ed5e82 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11748.yml @@ -0,0 +1,4 @@ +author: "Ty-Omaha" +delete-after: True +changes: + - bugfix: "Stops projectiles using the legacy system such as emitters from hurting shield blobs due to an exploit where it would always hit or go through." diff --git a/html/changelogs/AutoChangeLog-pr-11756.yml b/html/changelogs/AutoChangeLog-pr-11756.yml new file mode 100644 index 00000000000..4b65117170e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11756.yml @@ -0,0 +1,4 @@ +author: "farie82" +delete-after: True +changes: + - rscdel: "Reverts the string highlighting done by regex" diff --git a/icons/mob/actions/actions.dmi b/icons/mob/actions/actions.dmi index ea66e024a19..d3976bfff61 100644 Binary files a/icons/mob/actions/actions.dmi and b/icons/mob/actions/actions.dmi differ diff --git a/icons/mob/species/drask/uniform.dmi b/icons/mob/species/drask/uniform.dmi index d29b598dec3..ab315263ed9 100644 Binary files a/icons/mob/species/drask/uniform.dmi and b/icons/mob/species/drask/uniform.dmi differ diff --git a/icons/mob/species/grey/uniform.dmi b/icons/mob/species/grey/uniform.dmi index e71e020ff4a..ddf0250fdc5 100644 Binary files a/icons/mob/species/grey/uniform.dmi and b/icons/mob/species/grey/uniform.dmi differ diff --git a/icons/mob/species/vox/uniform.dmi b/icons/mob/species/vox/uniform.dmi index b8169f9bd51..18a3e07ce76 100644 Binary files a/icons/mob/species/vox/uniform.dmi and b/icons/mob/species/vox/uniform.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index e5102b7eee9..69f9e04895e 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index c39331ce8d4..78586b72dfc 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 469934ca932..f48f0e9f07a 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/sound/effects/warble.ogg b/sound/effects/warble.ogg new file mode 100644 index 00000000000..420ae974c83 Binary files /dev/null and b/sound/effects/warble.ogg differ