diff --git a/code/__DEFINES/lighting.dm b/code/__DEFINES/lighting.dm index 5db5c979e8..13dccc74fe 100644 --- a/code/__DEFINES/lighting.dm +++ b/code/__DEFINES/lighting.dm @@ -34,6 +34,7 @@ #define LIGHT_COLOR_BLUE "#6496FA" //Cold, diluted blue. rgb(100, 150, 250) #define LIGHT_COLOR_BLUEGREEN "#7DE1AF" //Light blueish green. rgb(125, 225, 175) +#define LIGHT_COLOR_PALEBLUE "#7DAFE1" //A pale blue-ish color. rgb(125, 175, 225) #define LIGHT_COLOR_CYAN "#7DE1E1" //Diluted cyan. rgb(125, 225, 225) #define LIGHT_COLOR_LIGHT_CYAN "#40CEFF" //More-saturated cyan. rgb(64, 206, 255) #define LIGHT_COLOR_DARK_BLUE "#6496FA" //Saturated blue. rgb(51, 117, 248) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 620c592d93..2f69b63ae9 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1239,6 +1239,20 @@ GLOBAL_REAL_VAR(list/stack_trace_storage) pixel_x = initialpixelx pixel_y = initialpixely +/atom/proc/do_jiggle(targetangle = 45) + var/matrix/OM = matrix(transform) + var/matrix/M = matrix(transform) + M.Turn(pick(-targetangle, targetangle)) + animate(src, transform = M, time = 10, easing = ELASTIC_EASING) + animate(src, transform = OM, time = 10, easing = ELASTIC_EASING) + +/atom/proc/do_squish(squishx = 1.2, squishy = 0.6) + var/matrix/OM = matrix(transform) + var/matrix/M = matrix(transform) + M.Scale(squishx, squishy) + animate(src, transform = M, time = 10, easing = BOUNCE_EASING) + animate(src, transform = OM, time = 10, easing = BOUNCE_EASING) + /proc/weightclass2text(var/w_class) switch(w_class) if(WEIGHT_CLASS_TINY) @@ -1530,4 +1544,4 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) . = list() for(var/i in L) if(condition.Invoke(i)) - . |= i \ No newline at end of file + . |= i diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index 53f03ebfff..595e1d9ca0 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -7,6 +7,9 @@ /datum/config_entry/string/servername // server name (the name of the game window) +/datum/config_entry/string/servertagline + config_entry_value = "We forgot to set the server's tagline in config.txt" + /datum/config_entry/string/serversqlname // short form server name used for the DB /datum/config_entry/string/stationname // station name (the name of the station in-game) diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm index 55af26b6b2..bb3c584cb9 100644 --- a/code/datums/components/storage/storage.dm +++ b/code/datums/components/storage/storage.dm @@ -169,10 +169,12 @@ if(locked) to_chat(M, "[parent] seems to be locked!") return FALSE + var/atom/A = parent var/obj/item/I = O if(collection_mode == COLLECT_ONE) if(can_be_inserted(I, null, M)) handle_item_insertion(I, null, M) + A.do_squish() return if(!isturf(I.loc)) return @@ -189,6 +191,7 @@ stoplag(1) qdel(progress) to_chat(M, "You put everything you could [insert_preposition] [parent].") + A.do_squish(1.4, 0.4) /datum/component/storage/proc/handle_mass_item_insertion(list/things, datum/component/storage/src_object, mob/user, datum/progressbar/progress) var/atom/source_real_location = src_object.real_location() @@ -246,6 +249,7 @@ while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress))) stoplag(1) qdel(progress) + A.do_squish(0.8, 1.2) /datum/component/storage/proc/mass_remove_from_storage(atom/target, list/things, datum/progressbar/progress, trigger_on_found = TRUE) var/atom/real_location = real_location() @@ -455,6 +459,7 @@ return FALSE if(dump_destination.storage_contents_dump_act(src, M)) playsound(A, "rustle", 50, 1, -5) + A.do_squish(0.8, 1.2) return TRUE return FALSE @@ -473,6 +478,8 @@ return TRUE return FALSE handle_item_insertion(I, FALSE, M) + var/atom/A = parent + A.do_squish() /datum/component/storage/proc/return_inv(recursive) var/list/ret = list() @@ -514,6 +521,7 @@ if(A.loc != M) return playsound(A, "rustle", 50, 1, -5) + A.do_jiggle() if(istype(over_object, /obj/screen/inventory/hand)) var/obj/screen/inventory/hand/H = over_object M.putItemFromInventoryInHandIfPossible(A, H.held_index) @@ -539,6 +547,8 @@ if(!L.incapacitated() && I == L.get_active_held_item()) if(!SEND_SIGNAL(I, COMSIG_CONTAINS_STORAGE) && can_be_inserted(I, FALSE)) //If it has storage it should be trying to dump, not insert. handle_item_insertion(I, FALSE, L) + var/atom/A = parent + A.do_squish() //This proc return 1 if the item can be picked up and 0 if it can't. //Set the stop_messages to stop it from printing messages @@ -712,6 +722,7 @@ to_chat(user, "[parent] seems to be locked!") else show_to(user) + A.do_jiggle() /datum/component/storage/proc/signal_on_pickup(datum/source, mob/user) var/atom/A = parent @@ -732,16 +743,30 @@ return hide_from(target) /datum/component/storage/proc/on_alt_click(datum/source, mob/user) - if(!isliving(user) || user.incapacitated() || !quickdraw || locked || !user.CanReach(parent)) + if(!isliving(user) || !user.CanReach(parent)) return - var/obj/item/I = locate() in real_location() - if(!I) + if(locked) + to_chat(user, "[parent] seems to be locked!") return - remove_from_storage(I, get_turf(user)) - if(!user.put_in_hands(I)) - to_chat(user, "You fumble for [I] and it falls on the floor.") + + var/atom/A = parent + if(!quickdraw) + A.add_fingerprint(user) + user_show_to_mob(user) + playsound(A, "rustle", 50, 1, -5) + return + + if(!user.incapacitated()) + var/obj/item/I = locate() in real_location() + if(!I) + return + A.add_fingerprint(user) + remove_from_storage(I, get_turf(user)) + if(!user.put_in_hands(I)) + to_chat(user, "You fumble for [I] and it falls on the floor.") + return + user.visible_message("[user] draws [I] from [parent]!", "You draw [I] from [parent].") return - user.visible_message("[user] draws [I] from [parent]!", "You draw [I] from [parent].") /datum/component/storage/proc/action_trigger(datum/signal_source, datum/action/source) gather_mode_switch(source.owner) diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index 2187d61215..fad1c8e615 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -267,13 +267,13 @@ /datum/quirk/phobia name = "Phobia" - desc = "You've had a traumatic past, that has scared you for life while dealing with your greatest fear." + desc = "You've had a traumatic past, one that has scarred you for life, and cripples you when dealing with your greatest fears." value = -2 // It can hardstun you. You can be a job that your phobia targets... - gain_text = "You feel your fears manifest themselfs." - lose_text = "You feel your fears fade away." - medical_record_text = "Patient has an extreme or irrational fear of or aversion to something." + gain_text = "You begin to tremble as an immeasurable fear grips your mind." + lose_text = "Your confidence wipes away the fear that had been plaguing you." + medical_record_text = "Patient has an extreme or irrational fear and aversion to an undefined stimuli." var/datum/brain_trauma/mild/phobia/phobia - + /datum/quirk/phobia/add() var/mob/living/carbon/human/H = quirk_holder phobia = new @@ -281,11 +281,11 @@ /datum/quirk/mute name = "Mute" - desc = "Do to some accident caused you or by choice you have no voice to be heard!" + desc = "Due to some accident, medical condition, or simply by choice, you are completely unable to speak." value = -2 //HALP MAINTS - gain_text = "I rather not say..." - lose_text = "I can speak once more." - medical_record_text = "Patient has an been unable to talk or use there voice." + gain_text = "You find yourself unable to speak!" + lose_text = "You feel a growing strength in your vocal chords." + medical_record_text = "Functionally mute, patient is unable to use their voice in any capacity." var/datum/brain_trauma/severe/mute /datum/quirk/mute/add() @@ -294,5 +294,5 @@ /datum/quirk/mute/on_process() if(quirk_holder.mind && LAZYLEN(quirk_holder.mind.antag_datums)) - to_chat(quirk_holder, "Your antagonistic nature has caused your voice to be heard.") + to_chat(quirk_holder, "Your antagonistic nature has caused your voice to return.") qdel(src) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index ba840d0771..e56f6d366c 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -622,8 +622,12 @@ else if(direction & WEST) pixel_x_diff = -8 - animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, time = 2) - animate(src, pixel_x = pixel_x - pixel_x_diff, pixel_y = pixel_y - pixel_y_diff, time = 2) + var/matrix/OM = matrix(transform) + var/matrix/M = matrix(transform) + M.Turn(pixel_x_diff ? pixel_x_diff*2 : pick(-16, 16)) + + animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, transform = M, time = 2) + animate(src, pixel_x = pixel_x - pixel_x_diff, pixel_y = pixel_y - pixel_y_diff, transform = OM, time = 2) /atom/movable/proc/do_item_attack_animation(atom/A, visual_effect_icon, obj/item/used_item) var/image/I diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm index 82315b8f35..795871d3b5 100644 --- a/code/game/objects/items/RCD.dm +++ b/code/game/objects/items/RCD.dm @@ -36,6 +36,7 @@ RLD var/no_ammo_message = "The \'Low Ammo\' light on the device blinks yellow." var/has_ammobar = FALSE //controls whether or not does update_icon apply ammo indicator overlays var/ammo_sections = 10 //amount of divisions in the ammo indicator overlay/number of ammo indicator states + var/custom_range = 7 /obj/item/construction/Initialize() . = ..() @@ -119,7 +120,7 @@ RLD return . /obj/item/construction/proc/range_check(atom/A, mob/user) - if(!(A in view(7, get_turf(user)))) + if(!(A in range(custom_range, get_turf(user)))) to_chat(user, "The \'Out of Range\' light on [src] blinks red.") return FALSE else @@ -519,8 +520,9 @@ RLD icon_state = "rld-5" lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - matter = 200 - max_matter = 200 + matter = 500 + max_matter = 500 + sheetmultiplier = 16 var/mode = LIGHT_MODE actions_types = list(/datum/action/item_action/pick_color) @@ -531,7 +533,7 @@ RLD var/walldelay = 10 var/floordelay = 10 - var/decondelay = 15 + var/decondelay = 10 var/color_choice = null diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index d22ef23291..cbbd7a387a 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -35,6 +35,7 @@ /obj/item/flashlight/attack_self(mob/user) on = !on update_brightness(user) + playsound(user, on ? 'sound/weapons/magin.ogg' : 'sound/weapons/magout.ogg', 40, 1) for(var/X in actions) var/datum/action/A = X A.UpdateButtonIcon() diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index bf50e7546e..11d6f264b8 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -179,7 +179,7 @@ /obj/item/kitchen/knife/scimitar name = "Scimitar knife" - desc = "A knife used to cleanly butcher, its been modifed to be able to cut more meat then a normale knife. Do to the years of use its blade isnt as strong as it once was!" + desc = "A knife used to cleanly butcher. Its razor-sharp edge has been honed for butchering, but has been poorly maintained over the years." attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") /obj/item/kitchen/knife/scimiar/Initialize() diff --git a/code/game/sound.dm b/code/game/sound.dm index 84351cdb95..b7e4e4131e 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -200,5 +200,9 @@ 'sound/vore/prey/death_04.ogg','sound/vore/prey/death_05.ogg','sound/vore/prey/death_06.ogg', 'sound/vore/prey/death_07.ogg','sound/vore/prey/death_08.ogg','sound/vore/prey/death_09.ogg', 'sound/vore/prey/death_10.ogg') + if("clang") + soundin = pick('sound/effects/clang1.ogg', 'sound/effects/clang2.ogg') + if("clangsmall") + soundin = pick('sound/effects/clangsmall1.ogg', 'sound/effects/clangsmall2.ogg') //END OF CIT CHANGES return soundin diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm index bcffd728c6..6297cadc63 100644 --- a/code/game/turfs/closed.dm +++ b/code/game/turfs/closed.dm @@ -84,6 +84,7 @@ icon = 'icons/turf/walls/riveted.dmi' icon_state = "riveted" smooth = SMOOTH_TRUE + explosion_block = INFINITY /turf/closed/indestructible/riveted/uranium icon = 'icons/turf/walls/uranium_wall.dmi' diff --git a/code/game/world.dm b/code/game/world.dm index e83a01e7f2..d8576206dd 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -263,7 +263,7 @@ GLOBAL_VAR(restart_counter) s += "Citadel" //Replace this with something else. Or ever better, delete it and uncomment the game version. CIT CHANGE - modifies the hub entry link s += "" s += ")\]" //CIT CHANGE - encloses the server title in brackets to make the hub entry fancier - s += "
That furry /TG/code server your mother warned you about.
" //CIT CHANGE - adds a tagline! + s += "
[CONFIG_GET(string/servertagline)]
" //CIT CHANGE - adds a tagline! var/n = 0 for (var/mob/M in GLOB.player_list) diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index bcb3752cbf..0a7b76cc79 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -650,7 +650,7 @@ if(0) add_overlay(AALARM_OVERLAY_GREEN) overlay_state = AALARM_OVERLAY_GREEN - light_color = LIGHT_COLOR_BLUEGREEN + light_color = LIGHT_COLOR_PALEBLUE set_light(brightness_on) if(1) add_overlay(AALARM_OVERLAY_WARN) diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index 587ba0c110..a23c57eab7 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -1537,6 +1537,18 @@ crate_name = "janitor backpack crate" crate_type = /obj/structure/closet/crate/secure +/datum/supply_pack/service/advlighting + name = "Advanced Lighting crate" + desc = "Thanks to advanced lighting tech we here at the Lamp Factory have be able to produce more lamps and lamp items! This crate has three lamps, a box of lights and a state of the art rapid-light-device!" + cost = 2500 //Fair + contains = list(/obj/item/construction/rld, + /obj/item/flashlight/lamp, + /obj/item/flashlight/lamp, + /obj/item/flashlight/lamp/green, + /obj/item/storage/box/lights/mixed) + crate_name = "advanced lighting crate" + crate_type = /obj/structure/closet/crate/secure + /datum/supply_pack/service/mule name = "MULEbot Crate" desc = "Pink-haired Quartermaster not doing her job? Replace her with this tireless worker, today!" @@ -1788,18 +1800,6 @@ crate_name = "hydroponics backpack crate" crate_type = /obj/structure/closet/crate/secure -/datum/supply_pack/organic/advlighting - name = "Advanced Lighting crate" - desc = "Thanks to advanced lighting tech we here at the Lamp Factor have be able to produce more lamps and lamp items! This crate has three lamps, a box of lights and a state of the art rapid-light-device!" - cost = 2500 //Fair - contains = list(/obj/item/construction/rld, - /obj/item/flashlight/lamp, - /obj/item/flashlight/lamp, - /obj/item/flashlight/lamp/green, - /obj/item/storage/box/lights/mixed) - crate_name = "advanced lighting crate" - crate_type = /obj/structure/closet/crate/secure - /datum/supply_pack/organic/pizza name = "Pizza Crate" desc = "Best prices on this side of the galaxy. All deliveries are guaranteed to be 99% anomaly-free!" diff --git a/code/modules/clothing/under/vg_under.dm b/code/modules/clothing/under/vg_under.dm index 64bf75d5ac..f416f2ecc5 100644 --- a/code/modules/clothing/under/vg_under.dm +++ b/code/modules/clothing/under/vg_under.dm @@ -1,3 +1,6 @@ +// Fixed to work with Citadel code. Apparently none of them had NO_MUTANTRACE flags. +// I was pissy when I realised how to fix this because it's so fucking easy and nobody apparently had done it. + /obj/item/clothing/under/stripper_pink name = "pink stripper outfit" icon_state = "stripper_p" @@ -6,7 +9,7 @@ can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/stripper_green name = "green stripper outfit" @@ -16,8 +19,7 @@ can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/wedding/bride_orange name = "orange wedding dress" @@ -28,7 +30,7 @@ can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/wedding/bride_purple name = "purple wedding dress" @@ -39,7 +41,7 @@ can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/wedding/bride_blue name = "blue wedding dress" @@ -50,7 +52,7 @@ can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/wedding/bride_red name = "red wedding dress" @@ -61,7 +63,7 @@ can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/wedding/bride_white name = "white wedding dress" @@ -72,7 +74,7 @@ can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/mankini name = "pink mankini" @@ -82,6 +84,7 @@ can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION /* /obj/item/clothing/under/psysuit @@ -126,7 +129,7 @@ can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/russobluecamooutfit name = "russian blue camo" @@ -137,7 +140,7 @@ can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/stilsuit name = "stillsuit" @@ -148,7 +151,7 @@ can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/aviatoruniform name = "aviator uniform" @@ -159,7 +162,7 @@ can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/bikersuit name = "biker's outfit" @@ -169,7 +172,7 @@ can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/jacketsuit name = "richard's outfit" @@ -180,7 +183,7 @@ can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION obj/item/clothing/under/mega name = "\improper DRN-001 suit" @@ -191,7 +194,7 @@ obj/item/clothing/under/mega can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/proto name = "The Prototype Suit" @@ -202,7 +205,7 @@ obj/item/clothing/under/mega can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/megax name = "\improper Maverick Hunter regalia" @@ -213,7 +216,7 @@ obj/item/clothing/under/mega can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/joe name = "The Sniper Suit" @@ -224,7 +227,7 @@ obj/item/clothing/under/mega can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/roll name = "\improper DRN-002 Dress" @@ -235,7 +238,7 @@ obj/item/clothing/under/mega can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/gokugidown name = "turtle hermit undershirt" @@ -246,7 +249,7 @@ obj/item/clothing/under/mega can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/gokugi name = "turtle hermit outfit" @@ -257,7 +260,7 @@ obj/item/clothing/under/mega can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/doomguy name = "\improper Doomguy's pants" @@ -268,7 +271,7 @@ obj/item/clothing/under/mega can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/vault13 name = "vault 13 Jumpsuit" @@ -279,7 +282,7 @@ obj/item/clothing/under/mega can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/vault name = "vault jumpsuit" @@ -290,7 +293,7 @@ obj/item/clothing/under/mega can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/clownpiece name = "Clownpiece's Pierrot suit" @@ -301,7 +304,7 @@ obj/item/clothing/under/mega can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/cia name = "casual IAA outfit" @@ -312,7 +315,7 @@ obj/item/clothing/under/mega can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/greaser name = "greaser outfit" @@ -322,7 +325,7 @@ obj/item/clothing/under/mega can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/greaser/New() var/greaser_colour = "default" @@ -341,6 +344,8 @@ obj/item/clothing/under/mega item_color = "greaser_[greaser_colour]" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION + /obj/item/clothing/under/wintercasualwear name = "winter casualwear" @@ -351,8 +356,7 @@ obj/item/clothing/under/mega can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/casualwear name = "spring casualwear" @@ -363,7 +367,7 @@ obj/item/clothing/under/mega can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/keyholesweater name = "keyhole sweater" @@ -374,7 +378,7 @@ obj/item/clothing/under/mega can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/casualhoodie name = "casual hoodie" @@ -385,8 +389,7 @@ obj/item/clothing/under/mega can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - - + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/casualhoodie/skirt icon_state = "hoodieskirt" @@ -394,6 +397,8 @@ obj/item/clothing/under/mega item_color = "hoodieskirt" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION + /* /obj/item/clothing/under/mummy_rags name = "mummy rags" @@ -427,3 +432,5 @@ obj/item/clothing/under/mega can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION + diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm index e33cfbd25d..a838b62e0d 100644 --- a/code/modules/events/brand_intelligence.dm +++ b/code/modules/events/brand_intelligence.dm @@ -18,7 +18,14 @@ "Your money can buy happiness!", \ "Engage direct marketing!", \ "Advertising is legalized lying! But don't let that put you off our great deals!", \ - "You don't want to buy anything? Yeah, well, I didn't want to buy your mom either.") + "You don't want to buy anything? Yeah, well, I didn't want to buy your mom either.", + "Gamers, rise up!", + "Ok, now, this is epic.", + "HUMAN FUNNY.", + "But I'm already tracer!", + "How do I vore people?", + "ERP?", + "Not epic bros...") /datum/round_event/brand_intelligence/announce(fake) diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm index e3ca576944..1ea0068a1a 100644 --- a/code/modules/hydroponics/hydroitemdefines.dm +++ b/code/modules/hydroponics/hydroitemdefines.dm @@ -24,10 +24,7 @@ lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi' volume = 100 - -/obj/item/reagent_containers/spray/weedspray/Initialize() - . = ..() - reagents.add_reagent("weedkiller", 100) + list_reagents = list("weedkiller" = 100) /obj/item/reagent_containers/spray/weedspray/suicide_act(mob/user) user.visible_message("[user] is huffing [src]! It looks like [user.p_theyre()] trying to commit suicide!") @@ -42,10 +39,7 @@ lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi' volume = 100 - -/obj/item/reagent_containers/spray/pestspray/Initialize() - . = ..() - reagents.add_reagent("pestkiller", 100) + list_reagents = list("pestkiller" = 100) /obj/item/reagent_containers/spray/pestspray/suicide_act(mob/user) user.visible_message("[user] is huffing [src]! It looks like [user.p_theyre()] trying to commit suicide!") @@ -157,71 +151,45 @@ /obj/item/reagent_containers/glass/bottle/nutrient name = "bottle of nutrient" - icon = 'icons/obj/chemical.dmi' volume = 50 - w_class = WEIGHT_CLASS_TINY amount_per_transfer_from_this = 10 possible_transfer_amounts = list(1,2,5,10,15,25,50) /obj/item/reagent_containers/glass/bottle/nutrient/Initialize() . = ..() - src.pixel_x = rand(-5, 5) - src.pixel_y = rand(-5, 5) + pixel_x = rand(-5, 5) + pixel_y = rand(-5, 5) /obj/item/reagent_containers/glass/bottle/nutrient/ez name = "bottle of E-Z-Nutrient" desc = "Contains a fertilizer that causes mild mutations with each harvest." - icon = 'icons/obj/chemical.dmi' - -/obj/item/reagent_containers/glass/bottle/nutrient/ez/Initialize() - . = ..() - reagents.add_reagent("eznutriment", 50) + list_reagents = list("eznutriment" = 50) /obj/item/reagent_containers/glass/bottle/nutrient/l4z name = "bottle of Left 4 Zed" desc = "Contains a fertilizer that limits plant yields to no more than one and causes significant mutations in plants." - icon = 'icons/obj/chemical.dmi' - -/obj/item/reagent_containers/glass/bottle/nutrient/l4z/Initialize() - . = ..() - reagents.add_reagent("left4zednutriment", 50) + list_reagents = list("left4zednutriment" = 50) /obj/item/reagent_containers/glass/bottle/nutrient/rh name = "bottle of Robust Harvest" desc = "Contains a fertilizer that increases the yield of a plant by 30% while causing no mutations." - icon = 'icons/obj/chemical.dmi' - -/obj/item/reagent_containers/glass/bottle/nutrient/rh/Initialize() - . = ..() - reagents.add_reagent("robustharvestnutriment", 50) + list_reagents = list("robustharvestnutriment" = 50) /obj/item/reagent_containers/glass/bottle/nutrient/empty name = "bottle" - icon = 'icons/obj/chemical.dmi' /obj/item/reagent_containers/glass/bottle/killer - name = "bottle" - icon = 'icons/obj/chemical.dmi' volume = 50 - w_class = WEIGHT_CLASS_TINY amount_per_transfer_from_this = 10 possible_transfer_amounts = list(1,2,5,10,15,25,50) /obj/item/reagent_containers/glass/bottle/killer/weedkiller name = "bottle of weed killer" desc = "Contains a herbicide." - icon = 'icons/obj/chemical.dmi' - -/obj/item/reagent_containers/glass/bottle/killer/weedkiller/Initialize() - . = ..() - reagents.add_reagent("weedkiller", 50) + list_reagents = list("weedkiller" = 50) /obj/item/reagent_containers/glass/bottle/killer/pestkiller name = "bottle of pest spray" desc = "Contains a pesticide." - icon = 'icons/obj/chemical.dmi' - -/obj/item/reagent_containers/glass/bottle/killer/pestkiller/Initialize() - . = ..() - reagents.add_reagent("pestkiller", 50) + list_reagents = list("pestkiller" = 50) \ No newline at end of file diff --git a/code/modules/mob/living/brain/brain.dm b/code/modules/mob/living/brain/brain.dm index e8a15d70ae..76b416772e 100644 --- a/code/modules/mob/living/brain/brain.dm +++ b/code/modules/mob/living/brain/brain.dm @@ -15,7 +15,6 @@ OB.brainmob = src forceMove(OB) - /mob/living/brain/proc/create_dna() stored_dna = new /datum/dna/stored(src) if(!stored_dna.species) @@ -28,6 +27,7 @@ death(1) //Brains can die again. AND THEY SHOULD AHA HA HA HA HA HA if(mind) //You aren't allowed to return to brains that don't exist mind.current = null + mind.active = FALSE //No one's using it anymore. ghostize() //Ghostize checks for key so nothing else is necessary. container = null return ..() diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 7bc0e281c5..ea13255dfe 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -188,6 +188,8 @@ if(thrown_thing) visible_message("[src] has thrown [thrown_thing].") src.log_message("has thrown [thrown_thing]", LOG_ATTACK) + do_attack_animation(target, no_effect = 1) + playsound(loc, 'sound/weapons/punchmiss.ogg', 50, 1, -1) newtonian_move(get_dir(target, src)) thrown_thing.throw_at(target, thrown_thing.throw_range, thrown_thing.throw_speed, src) diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index f3f960c0ee..8e121dc809 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -65,7 +65,7 @@ if(delta_temperature > 0 && cold_air_heat_capacity > 0 && hot_air_heat_capacity > 0) - var/efficiency = 0.65 + var/efficiency = 0.45 var/energy_transfer = delta_temperature*hot_air_heat_capacity*cold_air_heat_capacity/(hot_air_heat_capacity+cold_air_heat_capacity) diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm index 39cf924169..d57edf154d 100644 --- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm +++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm @@ -115,7 +115,7 @@ /obj/item/ammo_casing/shotgun/dart/noreact name = "cryostasis shotgun dart" - desc = "A dart for use in shotguns, using similar technology as cryostatis beakers to keep internal reagents from reacting. Can be injected with up to 10 units of any chemical." + desc = "A dart for use in shotguns. Uses technology similar to cryostasis beakers to keep internal reagents from reacting. Can be injected with up to 10 units of any chemical." icon_state = "cnrshell" reagent_amount = 10 reagent_react = FALSE diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 671e62a9e6..4e278d2ede 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -546,19 +546,14 @@ overdose_threshold = 45 addiction_threshold = 30 -/datum/reagent/medicine/ephedrine/on_mob_add(mob/living/L) - ..() - L.add_trait(TRAIT_GOTTAGOFAST, id) - -/datum/reagent/medicine/ephedrine/on_mob_delete(mob/living/L) - L.remove_trait(TRAIT_GOTTAGOFAST, id) - ..() - /datum/reagent/medicine/ephedrine/on_mob_life(mob/living/carbon/M) M.AdjustStun(-20, 0) M.AdjustKnockdown(-20, 0) M.AdjustUnconscious(-20, 0) - M.adjustStaminaLoss(-1*REM, 0) + M.adjustStaminaLoss(-4.5*REM, 0) + M.Jitter(10) + if(prob(50)) + M.confused = max(M.confused, 1) ..() return TRUE diff --git a/code/modules/recycling/disposal/pipe.dm b/code/modules/recycling/disposal/pipe.dm index 6c269e44be..aed2310a7f 100644 --- a/code/modules/recycling/disposal/pipe.dm +++ b/code/modules/recycling/disposal/pipe.dm @@ -1,5 +1,7 @@ // Disposal pipes +#define IFFY 2 + /obj/structure/disposalpipe name = "disposal pipe" desc = "An underfloor disposal pipe." @@ -16,6 +18,7 @@ var/dpdir = NONE // bitmask of pipe directions var/initialize_dirs = NONE // bitflags of pipe directions added on init, see \code\_DEFINES\pipe_construction.dm var/flip_type // If set, the pipe is flippable and becomes this type when flipped + var/canclank = FALSE // Determines if the pipe will cause a clank sound when holders pass by it. use the IFFY define for weird-ass edge cases like the segment subtype var/obj/structure/disposalconstruct/stored @@ -75,6 +78,8 @@ H.merge(H2) H.forceMove(P) + if(P.canclank == TRUE || (P.canclank == IFFY && P.dpdir != 3 && P.dpdir != 12)) + playsound(P, H.hasmob ? "clang" : "clangsmall", H.hasmob ? 50 : 25, 1) return P else // if wasn't a pipe, then they're now in our turf H.forceMove(get_turf(src)) @@ -184,6 +189,7 @@ /obj/structure/disposalpipe/segment icon_state = "pipe" initialize_dirs = DISP_DIR_FLIP + canclank = IFFY // A three-way junction with dir being the dominant direction @@ -191,6 +197,7 @@ icon_state = "pipe-j1" initialize_dirs = DISP_DIR_RIGHT | DISP_DIR_FLIP flip_type = /obj/structure/disposalpipe/junction/flip + canclank = TRUE // next direction to move // if coming in from secondary dirs, then next is primary dir @@ -229,6 +236,7 @@ //a trunk joining to a disposal bin or outlet on the same turf /obj/structure/disposalpipe/trunk icon_state = "pipe-t" + canclank = TRUE var/obj/linked // the linked obj/machinery/disposal or obj/disposaloutlet /obj/structure/disposalpipe/trunk/Initialize() @@ -299,3 +307,5 @@ /obj/structure/disposalpipe/broken/deconstruct() qdel(src) + +#undef IFFY diff --git a/code/modules/recycling/disposal/pipe_sorting.dm b/code/modules/recycling/disposal/pipe_sorting.dm index 5e26e9b767..d85c4bca78 100644 --- a/code/modules/recycling/disposal/pipe_sorting.dm +++ b/code/modules/recycling/disposal/pipe_sorting.dm @@ -5,6 +5,7 @@ desc = "An underfloor disposal pipe with a sorting mechanism." icon_state = "pipe-j1s" initialize_dirs = DISP_DIR_RIGHT | DISP_DIR_FLIP + canclank = TRUE /obj/structure/disposalpipe/sorting/nextdir(obj/structure/disposalholder/H) var/sortdir = dpdir & ~(dir | turn(dir, 180)) diff --git a/code/modules/research/designs/electronics_designs.dm b/code/modules/research/designs/electronics_designs.dm index e9db641811..552976824d 100644 --- a/code/modules/research/designs/electronics_designs.dm +++ b/code/modules/research/designs/electronics_designs.dm @@ -118,3 +118,16 @@ build_path = /obj/item/disk/integrated_circuit/upgrade/clone category = list("Electronics") departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + +//CIT ADDITIONS +/datum/design/drone_shell + name = "Drone Shell" + desc = "A shell of a maintenance drone, an expendable robot built to perform station repairs." + id = "drone_shell" + build_type = MECHFAB | PROTOLATHE + materials = list(MAT_METAL = 800, MAT_GLASS = 350) + construction_time = 150 + build_path = /obj/item/drone_shell + category = list("Misc") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index fec2752a22..43b21771c5 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -265,7 +265,7 @@ display_name = "Basic Robotics Research" description = "Programmable machines that make our lives lazier." prereq_ids = list("base") - design_ids = list("paicard") + design_ids = list("paicard", "drone_shell") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000) export_price = 5000 diff --git a/code/modules/vending/engivend.dm b/code/modules/vending/engivend.dm index 0e64e0a367..9358d1652f 100644 --- a/code/modules/vending/engivend.dm +++ b/code/modules/vending/engivend.dm @@ -4,21 +4,28 @@ icon_state = "engivend" icon_deny = "engivend-deny" req_access = list(ACCESS_ENGINE_EQUIP) - products = list(/obj/item/clothing/glasses/meson/engine = 2, - /obj/item/clothing/glasses/welding = 3, - /obj/item/multitool = 4, + products = list(/obj/item/clothing/glasses/meson/engine = 5, + /obj/item/clothing/glasses/welding = 5, + /obj/item/multitool = 5, /obj/item/construction/rcd/loaded = 3, /obj/item/grenade/chem_grenade/smart_metal_foam = 10, - /obj/item/geiger_counter = 5, + /obj/item/geiger_counter = 6, /obj/item/stock_parts/cell/high = 10, - /obj/item/electronics/airlock = 10, + /obj/item/electronics/airlock = 10, /obj/item/electronics/apc = 10, /obj/item/electronics/airalarm = 10, /obj/item/electronics/firealarm = 10, - /obj/item/electronics/firelock = 10 + /obj/item/electronics/firelock = 10, + /obj/item/rcd_ammo = 3 ) - contraband = list(/obj/item/stock_parts/cell/potato = 3) + contraband = list(/obj/item/stock_parts/cell/potato = 3, + /obj/item/rcd_ammo = 2, + /obj/item/circuitboard/computer/slot_machine = 1, + /obj/item/tank/internals/emergency_oxygen/double = 3 + ) premium = list(/obj/item/storage/belt/utility = 3, - /obj/item/storage/box/smart_metal_foam = 1) + /obj/item/storage/box/smart_metal_foam = 3, + /obj/item/rcd_ammo/large = 5 + ) 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/config/config.txt b/config/config.txt index 33bff862d9..3bc9f873a9 100644 --- a/config/config.txt +++ b/config/config.txt @@ -16,6 +16,9 @@ $include antag_rep.txt ## Server name: This appears at the top of the screen in-game and in the BYOND hub. Uncomment and replace 'tgstation' with the name of your choice. # SERVERNAME tgstation +## Server tagline: This will appear right below the server's title. +# SERVERTAGLINE A generic TG-based server + ## Server SQL name: This is the name used to identify the server to the SQL DB, distinct from SERVERNAME as it must be at most 32 characters. # SERVERSQLNAME tgstation diff --git a/html/changelogs/AutoChangeLog-pr-7912.yml b/html/changelogs/AutoChangeLog-pr-7912.yml new file mode 100644 index 0000000000..834ad80091 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7912.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - server: "The server's tagline is now a config option. People can now stop confusing us with BR cit" diff --git a/html/changelogs/AutoChangeLog-pr-7914.yml b/html/changelogs/AutoChangeLog-pr-7914.yml new file mode 100644 index 0000000000..aac983d7ea --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7914.yml @@ -0,0 +1,4 @@ +author: "Ghom" +delete-after: True +changes: + - code_imp: "minor clean up on hydroponics reagent containers." diff --git a/html/changelogs/AutoChangeLog-pr-7916.yml b/html/changelogs/AutoChangeLog-pr-7916.yml new file mode 100644 index 0000000000..888f327f72 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7916.yml @@ -0,0 +1,4 @@ +author: "Skoglol" +delete-after: True +changes: + - rscadd: "You can now alt click storage (bags, boxes, etc) to open it." diff --git a/html/changelogs/AutoChangeLog-pr-7918.yml b/html/changelogs/AutoChangeLog-pr-7918.yml new file mode 100644 index 0000000000..b2340c2f67 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7918.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - rscadd: "Attack animations will now rotate your character slightly, similar to Goon." diff --git a/html/changelogs/AutoChangeLog-pr-7919.yml b/html/changelogs/AutoChangeLog-pr-7919.yml new file mode 100644 index 0000000000..a62cc838c3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7919.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - rscadd: "Throwing items will now perform the attack animation and play a sound" diff --git a/html/changelogs/AutoChangeLog-pr-7920.yml b/html/changelogs/AutoChangeLog-pr-7920.yml new file mode 100644 index 0000000000..08b0ec1f13 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7920.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - rscadd: "flashlights will now make sounds when toggled on/off" diff --git a/html/changelogs/AutoChangeLog-pr-7921.yml b/html/changelogs/AutoChangeLog-pr-7921.yml new file mode 100644 index 0000000000..66a245257f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7921.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - rscadd: "Things in disposals will now emit sounds every single time they hit corners. This increases immersion." diff --git a/html/changelogs/AutoChangeLog-pr-7922.yml b/html/changelogs/AutoChangeLog-pr-7922.yml new file mode 100644 index 0000000000..08f06d7053 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7922.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - bugfix: "Air alarms now actually emit the proper light color when their status is okay." diff --git a/html/changelogs/AutoChangeLog-pr-7923.yml b/html/changelogs/AutoChangeLog-pr-7923.yml new file mode 100644 index 0000000000..5cf6527dad --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7923.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - rscadd: "Backpacks and other storage items will now jiggle and squish when you interact with them, similar to the animations seen on Goon." diff --git a/html/changelogs/AutoChangeLog-pr-7930.yml b/html/changelogs/AutoChangeLog-pr-7930.yml new file mode 100644 index 0000000000..221a2af942 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7930.yml @@ -0,0 +1,4 @@ +author: "nicc" +delete-after: True +changes: + - balance: "teg less gay maybe" diff --git a/modular_citadel/code/datums/components/souldeath.dm b/modular_citadel/code/datums/components/souldeath.dm new file mode 100644 index 0000000000..5beddf3529 --- /dev/null +++ b/modular_citadel/code/datums/components/souldeath.dm @@ -0,0 +1,35 @@ +/datum/component/souldeath + var/mob/living/wearer + var/equip_slot + var/signal = FALSE + +/datum/component/souldeath/Initialize() + if(!isitem(parent)) + return COMPONENT_INCOMPATIBLE + RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/equip) + RegisterSignal(parent, COMSIG_ITEM_DROPPED, .proc/unequip) + +/datum/component/souldeath/proc/equip(datum/source, mob/living/equipper, slot) + if(!slot || equip_slot == slot) + wearer = equipper + RegisterSignal(wearer, COMSIG_MOB_DEATH, .proc/die, TRUE) + signal = TRUE + else + if(signal) + UnregisterSignal(wearer, COMSIG_MOB_DEATH) + signal = FALSE + return + +/datum/component/souldeath/proc/unequip() + UnregisterSignal(wearer, COMSIG_MOB_DEATH) + wearer = null + signal = FALSE + +/datum/component/souldeath/proc/die() + if(!wearer) + return //idfk + new/obj/effect/temp_visual/souldeath(wearer.loc, wearer) + playsound(wearer, 'modular_citadel/sound/misc/souldeath.ogg', 100, FALSE) + +/datum/component/souldeath/neck + equip_slot = SLOT_NECK diff --git a/modular_citadel/code/game/objects/effects/temporary_visuals/souldeath.dm b/modular_citadel/code/game/objects/effects/temporary_visuals/souldeath.dm new file mode 100644 index 0000000000..1ebf6fb2a6 --- /dev/null +++ b/modular_citadel/code/game/objects/effects/temporary_visuals/souldeath.dm @@ -0,0 +1,5 @@ +/obj/effect/temp_visual/souldeath + name = "soul death" + icon = 'modular_citadel/icons/effects/souldeath.dmi' + icon_state = "souldeath" + duration = 30 \ No newline at end of file diff --git a/modular_citadel/code/modules/arousal/toys/dildos.dm b/modular_citadel/code/modules/arousal/toys/dildos.dm index 587702762c..4b0a7ad919 100644 --- a/modular_citadel/code/modules/arousal/toys/dildos.dm +++ b/modular_citadel/code/modules/arousal/toys/dildos.dm @@ -1,7 +1,7 @@ ////////// //DILDOS// ////////// -obj/item/dildo +/obj/item/dildo name = "dildo" desc = "Floppy!" icon = 'modular_citadel/icons/obj/genitals/dildo.dmi' @@ -18,9 +18,10 @@ obj/item/dildo var/random_color = TRUE var/random_size = FALSE var/random_shape = FALSE + var/is_knotted = FALSE //Lists moved to _cit_helpers.dm as globals so they're not instanced individually -obj/item/dildo/proc/update_appearance() +/obj/item/dildo/proc/update_appearance() icon_state = "[dildo_type]_[dildo_shape]_[dildo_size]" var/sizeword = "" switch(dildo_size) @@ -35,7 +36,7 @@ obj/item/dildo/proc/update_appearance() name = "[sizeword][dildo_shape] [can_customize ? "custom " : ""][dildo_type]" -obj/item/dildo/AltClick(mob/living/user) +/obj/item/dildo/AltClick(mob/living/user) if(QDELETED(src)) return if(!isliving(user)) @@ -46,7 +47,7 @@ obj/item/dildo/AltClick(mob/living/user) return customize(user) -obj/item/dildo/proc/customize(mob/living/user) +/obj/item/dildo/proc/customize(mob/living/user) if(!can_customize) return FALSE if(src && !user.incapacitated() && in_range(user,src)) @@ -75,7 +76,7 @@ obj/item/dildo/proc/customize(mob/living/user) update_appearance() return TRUE -obj/item/dildo/Initialize() +/obj/item/dildo/Initialize() . = ..() if(random_color == TRUE) var/randcolor = pick(GLOB.dildo_colors) @@ -91,38 +92,41 @@ obj/item/dildo/Initialize() pixel_y = rand(-7,7) pixel_x = rand(-7,7) -obj/item/dildo/examine(mob/user) +/obj/item/dildo/examine(mob/user) ..() if(can_customize) user << "Alt-Click \the [src.name] to customize it." -obj/item/dildo/random//totally random +/obj/item/dildo/random//totally random name = "random dildo"//this name will show up in vendors and shit so you know what you're vending(or don't, i guess :^)) random_color = TRUE random_shape = TRUE random_size = TRUE - -obj/item/dildo/knotted +/obj/item/dildo/knotted dildo_shape = "knotted" name = "knotted dildo" + attack_verb = list("penetrated", "knotted", "slapped", "inseminated") obj/item/dildo/human dildo_shape = "human" name = "human dildo" + attack_verb = list("penetrated", "slapped", "inseminated") obj/item/dildo/plain dildo_shape = "plain" name = "plain dildo" + attack_verb = list("penetrated", "slapped", "inseminated") obj/item/dildo/flared dildo_shape = "flared" name = "flared dildo" + attack_verb = list("penetrated", "slapped", "neighed", "gaped", "prolapsed", "inseminated") obj/item/dildo/flared/huge - name = "literal horse cock" - desc = "THIS THING IS HUGE!" - dildo_size = 4 + name = "literal horse cock" + desc = "THIS THING IS HUGE!" + dildo_size = 4 obj/item/dildo/custom name = "customizable dildo" @@ -131,3 +135,30 @@ obj/item/dildo/custom random_color = TRUE random_shape = TRUE random_size = TRUE + +// Suicide acts, by request + +/obj/item/dildo/proc/manual_suicide(mob/living/user) + user.visible_message("[user] finally finishes deepthroating the [src], and their life.") + user.adjustOxyLoss(200) + user.death(0) + +/obj/item/dildo/suicide_act(mob/living/user) +// is_knotted = ((src.dildo_shape == "knotted")?"They swallowed the knot":"Their face is turning blue") + if(do_after(user,17,target=src)) + user.visible_message("[user] tears-up and gags as they shove [src] down their throat! It looks like [user.p_theyre()] trying to commit suicide!") + playsound(loc, 'sound/weapons/gagging.ogg', 50, 1, -1) + user.Stun(150) + user.adjust_blurriness(8) + user.adjust_eye_damage(10) + return MANUAL_SUICIDE + +/obj/item/dildo/flared/huge/suicide_act(mob/living/user) + if(do_after(user,35,target=src)) + user.visible_message("[user] tears-up and gags as they try to deepthroat the [src]! WHY WOULD THEY DO THAT? It looks like [user.p_theyre()] trying to commit suicide!!") + playsound(loc, 'sound/weapons/gagging.ogg', 50, 2, -1) + user.Stun(300) + user.adjust_blurriness(8) + user.adjust_eye_damage(15) + return MANUAL_SUICIDE + diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm index fac53fee5b..a3df7d9f8e 100644 --- a/modular_citadel/code/modules/client/loadout/__donator.dm +++ b/modular_citadel/code/modules/client/loadout/__donator.dm @@ -361,4 +361,10 @@ datum/gear/darksabresheath name = "Mime's Overalls" category = SLOT_WEAR_SUIT path = /obj/item/clothing/under/mimeoveralls - ckeywhitelist = list("pireamaineach") \ No newline at end of file + ckeywhitelist = list("pireamaineach") + +/datum/gear/soulneck + name = "Soul Necklace" + category = SLOT_IN_BACKPACK + path = /obj/item/clothing/neck/undertale + ckeywhitelist = list("twilightic") \ No newline at end of file diff --git a/modular_citadel/code/modules/clothing/glasses/phantomthief.dm b/modular_citadel/code/modules/clothing/glasses/phantomthief.dm index e5f58d4082..49eb089afa 100644 --- a/modular_citadel/code/modules/clothing/glasses/phantomthief.dm +++ b/modular_citadel/code/modules/clothing/glasses/phantomthief.dm @@ -1,8 +1,6 @@ /obj/item/clothing/glasses/phantomthief name = "suspicious paper mask" - desc = "A cheap, Syndicate-branded paper face mask with vision correction lens and flash proof! They'll never see it coming. This mask goes over your eyes." - flash_protect = 1 - vision_correction = 1 + desc = "A cheap, Syndicate-branded paper face mask. They'll never see it coming." alternate_worn_icon = 'icons/mob/mask.dmi' icon = 'icons/obj/clothing/masks.dmi' icon_state = "s-ninja" @@ -14,7 +12,7 @@ /obj/item/clothing/glasses/phantomthief/syndicate name = "suspicious plastic mask" - desc = "A cheap, bulky, Syndicate-branded plastic face mask with vision correction lens and flash proof. You have to break in to break out. This mask goes over your eyes." + desc = "A cheap, bulky, Syndicate-branded plastic face mask. You have to break in to break out." var/nextadrenalinepop var/datum/component/redirect/combattoggle_redir diff --git a/modular_citadel/code/modules/clothing/neck.dm b/modular_citadel/code/modules/clothing/neck.dm new file mode 100644 index 0000000000..8d7d4747b7 --- /dev/null +++ b/modular_citadel/code/modules/clothing/neck.dm @@ -0,0 +1,23 @@ +/datum/action/item_action/zanderlocket + name = "Activate the locket" + +/obj/item/clothing/neck/undertale + name = "Sylphaen Heart Locket" + desc = "A heart shaped locket...The name: 'Zander Sylphaen is inscribed on the front. Something about this necklace fills you with determination." + icon = 'modular_citadel/icons/obj/clothing/cit_neck.dmi' + item_state = "undertale" + icon_state = "undertale" + alternate_worn_icon = 'modular_citadel/icons/mob/clothing/necks.dmi' + resistance_flags = FIRE_PROOF + actions_types = list(/datum/action/item_action/zanderlocket) + var/toggled = FALSE + var/obj/effect/heart/heart + +/datum/action/item_action/zanderlocket/Trigger() + new/obj/effect/temp_visual/souldeath(owner.loc, owner) + playsound(owner, 'modular_citadel/sound/misc/souldeath.ogg', 100, FALSE) + + +/obj/item/clothing/neck/undertale/Initialize() + ..() + AddComponent(/datum/component/souldeath/neck) diff --git a/modular_citadel/icons/effects/souldeath.dmi b/modular_citadel/icons/effects/souldeath.dmi new file mode 100644 index 0000000000..f225bd5321 Binary files /dev/null and b/modular_citadel/icons/effects/souldeath.dmi differ diff --git a/modular_citadel/icons/mob/clothing/necks.dmi b/modular_citadel/icons/mob/clothing/necks.dmi new file mode 100644 index 0000000000..65198bc64c Binary files /dev/null and b/modular_citadel/icons/mob/clothing/necks.dmi differ diff --git a/modular_citadel/icons/obj/clothing/cit_neck.dmi b/modular_citadel/icons/obj/clothing/cit_neck.dmi index ce115c2aa7..abccd4a115 100644 Binary files a/modular_citadel/icons/obj/clothing/cit_neck.dmi and b/modular_citadel/icons/obj/clothing/cit_neck.dmi differ diff --git a/modular_citadel/sound/misc/souldeath.ogg b/modular_citadel/sound/misc/souldeath.ogg new file mode 100644 index 0000000000..98a19c0765 Binary files /dev/null and b/modular_citadel/sound/misc/souldeath.ogg differ diff --git a/sound/effects/clang1.ogg b/sound/effects/clang1.ogg new file mode 100644 index 0000000000..eef118e4d4 Binary files /dev/null and b/sound/effects/clang1.ogg differ diff --git a/sound/effects/clang2.ogg b/sound/effects/clang2.ogg new file mode 100644 index 0000000000..175fe98fd1 Binary files /dev/null and b/sound/effects/clang2.ogg differ diff --git a/sound/effects/clangsmall1.ogg b/sound/effects/clangsmall1.ogg new file mode 100644 index 0000000000..7824db66cf Binary files /dev/null and b/sound/effects/clangsmall1.ogg differ diff --git a/sound/effects/clangsmall2.ogg b/sound/effects/clangsmall2.ogg new file mode 100644 index 0000000000..3211e66b75 Binary files /dev/null and b/sound/effects/clangsmall2.ogg differ diff --git a/sound/weapons/gagging.ogg b/sound/weapons/gagging.ogg new file mode 100644 index 0000000000..0b0a3783f4 Binary files /dev/null and b/sound/weapons/gagging.ogg differ diff --git a/tgstation.dme b/tgstation.dme index b17ba9363f..268d4f1ff9 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -2772,6 +2772,7 @@ #include "modular_citadel\code\datums\uplink_items_cit.dm" #include "modular_citadel\code\datums\components\material_container.dm" #include "modular_citadel\code\datums\components\phantomthief.dm" +#include "modular_citadel\code\datums\components\souldeath.dm" #include "modular_citadel\code\datums\mood_events\generic_negative_events.dm" #include "modular_citadel\code\datums\mood_events\generic_positive_events.dm" #include "modular_citadel\code\datums\mood_events\moodular.dm" @@ -2798,6 +2799,7 @@ #include "modular_citadel\code\game\objects\items.dm" #include "modular_citadel\code\game\objects\tools.dm" #include "modular_citadel\code\game\objects\effects\spawner\spawners.dm" +#include "modular_citadel\code\game\objects\effects\temporary_visuals\souldeath.dm" #include "modular_citadel\code\game\objects\effects\temporary_visuals\projectiles\impact.dm" #include "modular_citadel\code\game\objects\effects\temporary_visuals\projectiles\muzzle.dm" #include "modular_citadel\code\game\objects\effects\temporary_visuals\projectiles\tracer.dm" @@ -2870,6 +2872,7 @@ #include "modular_citadel\code\modules\client\loadout\uniform.dm" #include "modular_citadel\code\modules\client\verbs\who.dm" #include "modular_citadel\code\modules\clothing\clothing.dm" +#include "modular_citadel\code\modules\clothing\neck.dm" #include "modular_citadel\code\modules\clothing\glasses\phantomthief.dm" #include "modular_citadel\code\modules\clothing\head\head.dm" #include "modular_citadel\code\modules\clothing\spacesuits\cydonian_armor.dm"