diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 216b2a3db7..8221deeadb 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -16060,10 +16060,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=14-Starboard-Central"; - location = "13.3-Engineering-Central" - }, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, @@ -21712,7 +21708,7 @@ icon_state = "1-2" }, /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=13.3-Engineering-Central"; + codes_txt = "patrol;next_patrol=14-Starboard-Central"; location = "13.2-Tcommstore" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -74464,9 +74460,6 @@ }, /turf/open/floor/plasteel/dark, /area/command/bridge) -"sKV" = ( -/turf/open/space/basic, -/area/command/heads_quarters/captain) "sLs" = ( /obj/effect/decal/cleanable/cobweb, /obj/machinery/field/generator, @@ -122070,7 +122063,7 @@ oRp oRp aaa aai -sKV +aaa aaa aaa aaa @@ -130641,7 +130634,7 @@ aaf aaf aaa aaa -sKV +aaa aaa aaa aaa diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index eacbc74508..cdc6d424dd 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -24647,6 +24647,12 @@ }, /turf/open/space, /area/solars/starboard) +"beW" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/engineering/atmos) "beY" = ( /obj/machinery/camera{ c_tag = "Arrivals Central"; @@ -40355,15 +40361,9 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/components/binary/pump{ +/obj/machinery/atmospherics/components/binary/pump/on{ dir = 8; - name = "Mix to Ports" - }, -/turf/open/floor/plasteel, -/area/engineering/atmos) -"bNk" = ( -/obj/machinery/atmospherics/pipe/manifold/green/visible{ - dir = 1 + name = "Unfiltered to Mix" }, /turf/open/floor/plasteel, /area/engineering/atmos) @@ -40372,8 +40372,9 @@ /obj/effect/turf_decal/tile/yellow{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/green/visible{ - dir = 1 +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 4; + name = "Unfiltered & Air to Mix" }, /turf/open/floor/plasteel, /area/engineering/atmos) @@ -40809,23 +40810,19 @@ }, /turf/open/floor/plasteel, /area/engineering/atmos) -"bOo" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible, -/turf/open/floor/plasteel, -/area/engineering/atmos) "bOp" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 10 +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Pure to Mix" }, /turf/open/floor/plasteel, /area/engineering/atmos) "bOq" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1; - name = "Pure to Mix" +/obj/machinery/atmospherics/pipe/manifold/green/visible{ + dir = 1 }, /turf/open/floor/plasteel, /area/engineering/atmos) @@ -41089,13 +41086,6 @@ }, /turf/open/floor/plasteel, /area/engineering/atmos) -"bPa" = ( -/obj/machinery/portable_atmospherics/canister, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/engineering/atmos) "bPd" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/visible{ dir = 8 @@ -41407,7 +41397,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/general/visible, /turf/open/floor/plasteel, /area/engineering/atmos) "bPW" = ( @@ -41785,14 +41774,16 @@ /turf/open/floor/plasteel, /area/engineering/atmos) "bQK" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible, /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/plasteel, /area/engineering/atmos) "bQL" = ( -/obj/machinery/atmospherics/pipe/manifold4w/general/visible, +/obj/machinery/atmospherics/pipe/manifold/green/visible{ + dir = 8 + }, /turf/open/floor/plasteel, /area/engineering/atmos) "bQM" = ( @@ -41800,9 +41791,8 @@ /obj/effect/turf_decal/tile/yellow{ dir = 4 }, -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 1; - name = "Unfiltered to Mix" +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 10 }, /turf/open/floor/plasteel, /area/engineering/atmos) @@ -42109,8 +42099,7 @@ /turf/open/floor/plasteel, /area/engineering/atmos) "bRw" = ( -/obj/machinery/atmospherics/pipe/manifold4w/general/visible, -/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/general/visible, /turf/open/floor/plasteel, /area/engineering/atmos) "bRx" = ( @@ -53829,6 +53818,12 @@ }, /turf/open/floor/plasteel, /area/construction/mining/aux_base) +"eEd" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/engineering/atmos) "eEp" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -55198,6 +55193,15 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/construction/mining/aux_base) +"hEi" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/engineering/atmos) "hEX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 @@ -56739,6 +56743,12 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/dark, /area/engineering/main) +"kWG" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engineering/atmos) "kWQ" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible, /obj/structure/cable/yellow{ @@ -57443,6 +57453,15 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall, /area/maintenance/department/engine) +"mAR" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/engineering/atmos) "mCe" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -58849,6 +58868,10 @@ }, /turf/open/floor/wood, /area/service/lawoffice) +"pEM" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible, +/turf/open/floor/plasteel, +/area/engineering/atmos) "pFe" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/tile/red{ @@ -59370,6 +59393,13 @@ }, /turf/open/floor/plasteel/dark, /area/maintenance/department/crew_quarters/dorms) +"qQu" = ( +/obj/machinery/portable_atmospherics/canister, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engineering/atmos) "qRl" = ( /obj/item/radio/intercom{ name = "Station Intercom (General)"; @@ -60110,6 +60140,13 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) +"sGJ" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/plasteel, +/area/engineering/atmos) "sIK" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -61031,6 +61068,12 @@ }, /turf/open/floor/engine, /area/engineering/main) +"uST" = ( +/obj/machinery/atmospherics/components/binary/pump{ + name = "Mix to Ports" + }, +/turf/open/floor/plasteel, +/area/engineering/atmos) "uUQ" = ( /obj/machinery/door/airlock/maintenance{ name = "Engineering Maintenance"; @@ -99648,7 +99691,7 @@ bJN bKS bMe bNh -bOo +pEM bOX bMf bMf @@ -100162,9 +100205,9 @@ bHw bKU bOr bPU +kWG bRw -bPa -bMf +beW bMf bMf bMf @@ -100418,13 +100461,13 @@ bIF bHw bKV bOX -bUv +eEd bQL -bPa -bMf -bMf -bMf +uST +pEM bMf +qQu +qQu bSU bTT bUv @@ -100678,10 +100721,10 @@ bMg bNj bOp bPV -bPV -bPV -bPV -bPV +hEi +sGJ +bUw +bUw bUw bUw bUw @@ -100932,8 +100975,8 @@ bIH bHw cqG bOX -bNk bOq +mAR bPd bPW bPW diff --git a/_maps/templates/shelter_4.dmm b/_maps/templates/shelter_4.dmm new file mode 100644 index 0000000000..abb85a09f8 --- /dev/null +++ b/_maps/templates/shelter_4.dmm @@ -0,0 +1,191 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/closed/wall/mineral/titanium/survival/pod, +/area/survivalpod/nonpowered) +"j" = ( +/turf/open/floor/pod/dark, +/area/survivalpod/nonpowered) +"k" = ( +/obj/item/gps/computer, +/turf/open/floor/pod/dark, +/area/survivalpod/nonpowered) +"p" = ( +/obj/machinery/light, +/turf/open/floor/pod/dark, +/area/survivalpod/nonpowered) +"x" = ( +/obj/machinery/smartfridge/survival_pod, +/turf/open/floor/pod/dark, +/area/survivalpod/nonpowered) +"H" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table/survival_pod, +/turf/open/floor/pod/dark, +/area/survivalpod/nonpowered) +"J" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/pod/dark, +/area/survivalpod/nonpowered) +"P" = ( +/obj/machinery/door/airlock/survival_pod, +/obj/machinery/poweredfans, +/turf/open/floor/pod/dark, +/area/survivalpod/nonpowered) +"U" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/pod/dark, +/area/survivalpod/nonpowered) +"Y" = ( +/obj/machinery/power/apc/auto_name/north, +/turf/open/floor/pod/dark, +/area/survivalpod/nonpowered) + +(1,1,1) = {" +a +a +a +a +a +P +a +a +a +a +a +"} +(2,1,1) = {" +a +j +j +J +j +j +j +j +j +j +a +"} +(3,1,1) = {" +a +j +j +j +j +j +j +j +j +j +a +"} +(4,1,1) = {" +a +U +j +j +j +j +j +j +j +p +a +"} +(5,1,1) = {" +a +j +j +j +j +j +j +j +j +j +a +"} +(6,1,1) = {" +P +j +j +j +j +j +j +j +j +j +P +"} +(7,1,1) = {" +a +Y +j +j +j +j +j +j +j +j +a +"} +(8,1,1) = {" +a +H +j +j +j +j +j +j +j +p +a +"} +(9,1,1) = {" +a +x +j +j +j +j +j +j +j +j +a +"} +(10,1,1) = {" +a +k +j +j +j +j +j +j +j +j +a +"} +(11,1,1) = {" +a +a +a +a +a +P +a +a +a +a +a +"} diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index ded183ba0b..3807b66b06 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -165,6 +165,7 @@ #define TRAIT_EXEMPT_HEALTH_EVENTS "exempt-health-events" #define TRAIT_NO_MIDROUND_ANTAG "no-midround-antag" //can't be turned into an antag by random events #define TRAIT_PUGILIST "pugilist" //This guy punches people for a living +#define TRAIT_NOPUGILIST "nopugilist" // for preventing ((((((((((extreme)))))))))) punch stacking #define TRAIT_KI_VAMPIRE "ki-vampire" //when someone with this trait rolls maximum damage on a punch and stuns the target, they regain some stamina and do clone damage #define TRAIT_MAULER "mauler" // this guy punches the shit out of people to hurt them, not to drain their stamina #define TRAIT_PASSTABLE "passtable" diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 9719157d4d..0a17f0d1df 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -14,7 +14,6 @@ //socks init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear/socks, GLOB.socks_list) //bodypart accessories (blizzard intensifies) - init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, GLOB.body_markings_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard, GLOB.tails_list_lizard) init_sprite_accessory_subtypes(/datum/sprite_accessory/tails_animated/lizard, GLOB.animated_tails_list_lizard) init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, GLOB.tails_list_human) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 92cf7050e0..02af6fab79 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -64,8 +64,6 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/spines, GLOB.spines_list) if(!GLOB.legs_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/legs, GLOB.legs_list) - if(!GLOB.body_markings_list.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, GLOB.body_markings_list) if(!GLOB.wings_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, GLOB.wings_list) if(!GLOB.deco_wings_list.len) @@ -115,15 +113,6 @@ continue if(!S.ckeys_allowed) snowflake_mam_tails_list[S.name] = mtpath - var/list/snowflake_markings_list = list() - for(var/mmpath in GLOB.mam_body_markings_list) - var/datum/sprite_accessory/mam_body_markings/instance = GLOB.mam_body_markings_list[mmpath] - if(istype(instance, /datum/sprite_accessory)) - var/datum/sprite_accessory/S = instance - if(intendedspecies && S.recommended_species && !S.recommended_species.Find(intendedspecies)) - continue - if(!S.ckeys_allowed) - snowflake_markings_list[S.name] = mmpath var/list/snowflake_ears_list = list() for(var/mepath in GLOB.mam_ears_list) var/datum/sprite_accessory/ears/mam_ears/instance = GLOB.mam_ears_list[mepath] @@ -177,7 +166,6 @@ "ears" = "None", "frills" = pick(GLOB.frills_list), "spines" = pick(GLOB.spines_list), - "body_markings" = pick(GLOB.body_markings_list), "legs" = pick("Plantigrade","Digitigrade"), "caps" = pick(GLOB.caps_list), "insect_wings" = pick(GLOB.insect_wings_list), @@ -187,7 +175,7 @@ "arachnid_spinneret" = pick(GLOB.arachnid_spinneret_list), "arachnid_mandibles" = pick(GLOB.arachnid_mandibles_list), "taur" = "None", - "mam_body_markings" = snowflake_markings_list.len ? pick(snowflake_markings_list) : "None", + "mam_body_markings" = list(), "mam_ears" = snowflake_ears_list ? pick(snowflake_ears_list) : "None", "mam_snouts" = snowflake_mam_snouts_list ? pick(snowflake_mam_snouts_list) : "None", "mam_tail" = snowflake_mam_tails_list ? pick(snowflake_mam_tails_list) : "None", diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index f0a8a4e2c6..d94c677a42 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -17,7 +17,6 @@ GLOBAL_LIST_EMPTY(undershirt_f) //stores only undershirt name //Socks GLOBAL_LIST_EMPTY_TYPED(socks_list, /datum/sprite_accessory/underwear/socks) //stores socks indexed by name //Lizard Bits (all datum lists indexed by name) -GLOBAL_LIST_EMPTY(body_markings_list) GLOBAL_LIST_EMPTY(tails_list_lizard) GLOBAL_LIST_EMPTY(animated_tails_list_lizard) GLOBAL_LIST_EMPTY(snouts_list) @@ -55,7 +54,6 @@ GLOBAL_LIST_INIT(mutant_reference_list, list( "frills" = GLOB.frills_list, "horns" = GLOB.horns_list, "ears" = GLOB.ears_list, - "body_markings" = GLOB.body_markings_list, "wings" = GLOB.wings_list, "wingsopen" = GLOB.wings_open_list, "deco_wings" = GLOB.deco_wings_list, @@ -299,7 +297,7 @@ GLOBAL_LIST_INIT(roundstart_languages, get_roundstart_languages()) //locked parts are those that your picked species requires to have //unlocked parts are those that anyone can choose on customisation regardless //parts not in unlocked, but in all, are thus locked -GLOBAL_LIST_INIT(all_mutant_parts, list("tail_lizard" = "Tail", "mam_tail" = "Tail", "tail_human" = "Tail", "snout" = "Snout", "frills" = "Frills", "spines" = "Spines", "body_markings" = "Body Markings", "mam_body_markings" = "Species Markings" , "mam_ears" = "Ears", "ears" = "Ears", "mam_snouts" = "Snout", "legs" = "Legs", "deco_wings" = "Decorative Wings", "insect_wings" = "Insect Wings", "insect_fluff" = "Insect Fluff", "taur" = "Tauric Body", "insect_markings" = "Insect Markings", "wings" = "Wings", "arachnid_legs" = "Arachnid Legs", "arachnid_spinneret" = "Spinneret", "arachnid_mandibles" = "Mandibles", "xenohead" = "Caste Head", "xenotail" = "Tail", "xenodorsal" = "Dorsal Spines", "ipc_screen" = "Screen", "ipc_antenna" = "Antenna", "meat_type" = "Meat Type", "horns" = "Horns")) +GLOBAL_LIST_INIT(all_mutant_parts, list("tail_lizard" = "Tail", "mam_tail" = "Tail", "tail_human" = "Tail", "snout" = "Snout", "frills" = "Frills", "spines" = "Spines", "mam_body_markings" = "Species Markings" , "mam_ears" = "Ears", "ears" = "Ears", "mam_snouts" = "Snout", "legs" = "Legs", "deco_wings" = "Decorative Wings", "insect_wings" = "Insect Wings", "insect_fluff" = "Insect Fluff", "taur" = "Tauric Body", "insect_markings" = "Insect Markings", "wings" = "Wings", "arachnid_legs" = "Arachnid Legs", "arachnid_spinneret" = "Spinneret", "arachnid_mandibles" = "Mandibles", "xenohead" = "Caste Head", "xenotail" = "Tail", "xenodorsal" = "Dorsal Spines", "ipc_screen" = "Screen", "ipc_antenna" = "Antenna", "meat_type" = "Meat Type", "horns" = "Horns")) GLOBAL_LIST_INIT(unlocked_mutant_parts, list("horns", "insect_fluff")) //parts in either of the above two lists that require a second option that allows them to be coloured @@ -350,3 +348,8 @@ GLOBAL_LIST_INIT(nongendered_limb_types, list("fly", "zombie" ,"synth", "shadow" //list of eye types, corresponding to a respective left and right icon state for the set of eyes GLOBAL_LIST_INIT(eye_types, list("normal", "insect", "moth", "double", "double2", "double3", "cyclops")) + +//list linking bodypart bitflags to their actual names +GLOBAL_LIST_INIT(bodypart_names, list(num2text(HEAD) = "Head", num2text(CHEST) = "Chest", num2text(LEG_LEFT) = "Left Leg", num2text(LEG_RIGHT) = "Right Leg", num2text(ARM_LEFT) = "Left Arm", num2text(ARM_RIGHT) = "Right Arm")) +// list linking bodypart names back to the bitflags +GLOBAL_LIST_INIT(bodypart_values, list("Head" = num2text(HEAD), "Chest" = num2text(CHEST), "Left Leg" = num2text(LEG_LEFT), "Right Leg" = num2text(LEG_RIGHT), "Left Arm" = num2text(ARM_LEFT), "Right Arm" = num2text(ARM_RIGHT))) diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index a1b7a74384..d1fff25dae 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -89,6 +89,7 @@ //Generic living #define ui_living_pull "EAST-1:28,CENTER-2:15" #define ui_living_health "EAST-1:28,CENTER:15" +#define ui_living_healthdoll "EAST-1:28,CENTER-1:15" //Monkeys #define ui_monkey_head "CENTER-5:13,SOUTH:5" diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 34fd90f4f0..b27abad841 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -637,6 +637,11 @@ name = "health doll" screen_loc = ui_healthdoll +/obj/screen/healthdoll/living + icon_state = "fullhealth0" + screen_loc = ui_living_healthdoll + var/filtered = FALSE //so we don't repeatedly create the mask of the mob every update + /obj/screen/mood name = "mood" icon_state = "mood5" diff --git a/code/_onclick/hud/simple_animal.dm b/code/_onclick/hud/simple_animal.dm new file mode 100644 index 0000000000..ef46c0d66e --- /dev/null +++ b/code/_onclick/hud/simple_animal.dm @@ -0,0 +1,15 @@ +/datum/hud/living/simple_animal + ui_style = 'icons/mob/screen_gen.dmi' +/datum/hud/living/simple_animal/New(mob/living/owner) + ..() + pull_icon = new /obj/screen/pull() + pull_icon.icon = ui_style + pull_icon.update_icon() + pull_icon.screen_loc = ui_living_pull + pull_icon.hud = src + static_inventory += pull_icon + + //mob health doll! assumes whatever sprite the mob is + healthdoll = new /obj/screen/healthdoll/living() + healthdoll.hud = src + infodisplay += healthdoll diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 58238247ff..a7a3e87672 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -713,7 +713,8 @@ SUBSYSTEM_DEF(ticker) 'sound/roundend/disappointed.ogg', 'sound/roundend/gondolabridge.ogg', 'sound/roundend/haveabeautifultime.ogg', - 'sound/roundend/CitadelStationHasSeenBetterDays.ogg'\ + 'sound/roundend/CitadelStationHasSeenBetterDays.ogg', + 'sound/roundend/approachingbaystation.ogg'\ ) SEND_SOUND(world, sound(round_end_sound)) diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index 5881c76827..9b9ea3c86e 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -165,6 +165,7 @@ ADD_TRAIT(H, TRAIT_PIERCEIMMUNE, SLEEPING_CARP_TRAIT) ADD_TRAIT(H, TRAIT_NODISMEMBER, SLEEPING_CARP_TRAIT) ADD_TRAIT(H, TRAIT_TASED_RESISTANCE, SLEEPING_CARP_TRAIT) + ADD_TRAIT(H, TRAIT_NOPUGILIST, SLEEPING_CARP_TRAIT) // cqc doesn't get this as it's intended to be able to stack with northstar gloves H.physiology.brute_mod *= 0.4 //brute is really not gonna cut it H.physiology.burn_mod *= 0.7 //burn is distinctly more useful against them than brute but they're still resistant H.physiology.stamina_mod *= 0.4 //You take less stamina damage overall, but you do not reduce the damage from stun batons as much @@ -181,6 +182,7 @@ REMOVE_TRAIT(H, TRAIT_PIERCEIMMUNE, SLEEPING_CARP_TRAIT) REMOVE_TRAIT(H, TRAIT_NODISMEMBER, SLEEPING_CARP_TRAIT) REMOVE_TRAIT(H, TRAIT_TASED_RESISTANCE, SLEEPING_CARP_TRAIT) + REMOVE_TRAIT(H, TRAIT_NOPUGILIST, SLEEPING_CARP_TRAIT) H.physiology.brute_mod = initial(H.physiology.brute_mod) H.physiology.burn_mod = initial(H.physiology.burn_mod) H.physiology.stamina_mod = initial(H.physiology.stamina_mod) diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 5621b47885..822302789f 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -84,6 +84,7 @@ authorize_access = get_all_accesses() to_chat(user, "You scramble the communication routing circuits!") playsound(src, 'sound/machines/terminal_alert.ogg', 50, FALSE) + SSshuttle.shuttle_purchase_requirements_met["emagged"] = TRUE return /obj/machinery/computer/communications/ui_act(action, list/params) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 4eed168ad6..477f72ee3b 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -688,7 +688,7 @@ else . += "It looks very robust." - if(hasSiliconAccessInArea(user) && (!stat & BROKEN)) + if(hasSiliconAccessInArea(user) && !(stat & BROKEN)) . += "Shift-click [src] to [ density ? "open" : "close"] it." . += "Ctrl-click [src] to [ locked ? "raise" : "drop"] its bolts." . += "Alt-click [src] to [ secondsElectrified ? "un-electrify" : "permanently electrify"] it." diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index 417fd96c85..2e7cef2c9f 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -100,6 +100,42 @@ "[user] is slitting [user.p_their()] stomach open with the [src.name]! It looks like [user.p_theyre()] trying to commit seppuku.")) return (BRUTELOSS) +/obj/item/kitchen/efink + name = "E-Fink" + icon_state = "efink" + desc = "The E-Fink is a product by Mending Solutions Inc. Unfortunately it can only mend sliced meat, fruits and dough back to their original state. Unbutchering is not possible." + flags_1 = CONDUCT_1 + force = 10 + w_class = WEIGHT_CLASS_SMALL + throwforce = 10 + hitsound = 'sound/weapons/bladesliceb.ogg' + throw_speed = 3 + throw_range = 6 + custom_materials = list(/datum/material/iron=12000) + attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + sharpness = SHARP_POINTY + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + var/bayonet = FALSE //Can this be attached to a gun? + wound_bonus = -5 + bare_wound_bonus = 10 + custom_price = PRICE_NORMAL + +/obj/item/kitchen/efink/Initialize() + . = ..() + AddComponent(/datum/component/butchering, 80 - force, 100, force - 10) //bonus chance increases depending on force + +/obj/item/kitchen/efink/attack(mob/living/carbon/M, mob/living/carbon/user) + if(user.zone_selected == BODY_ZONE_PRECISE_EYES) + return eyestab(M,user) + else + return ..() + +/obj/item/kitchen/efink/suicide_act(mob/user) + user.visible_message(pick("[user] is slitting [user.p_their()] wrists with the [src.name]! It looks like [user.p_theyre()] trying to commit suicide.", \ + "[user] is slitting [user.p_their()] throat with the [src.name]! It looks like [user.p_theyre()] trying to commit suicide.", \ + "[user] is slitting [user.p_their()] stomach open with the [src.name]! It looks like [user.p_theyre()] trying to commit seppuku.")) + return (BRUTELOSS) + /obj/item/kitchen/knife/ritual name = "ritual knife" desc = "The unearthly energies that once powered this blade are now dormant." diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 6e66f833c2..f888927411 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -383,7 +383,7 @@ . = ..() /obj/item/stack/medical/mesh/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - if(!is_open & user.get_inactive_held_item() == src) + if(!is_open && (user.get_inactive_held_item() == src)) to_chat(user, "You need to open [src] first.") return . = ..() diff --git a/code/game/objects/structures/spawner.dm b/code/game/objects/structures/spawner.dm index 9032a80d91..7d13af1e3e 100644 --- a/code/game/objects/structures/spawner.dm +++ b/code/game/objects/structures/spawner.dm @@ -73,3 +73,15 @@ name = "wumborian fugu den" desc = "A den housing a nest of wumborian fugus, how do they all even fit in there?" mob_types = list(/mob/living/simple_animal/hostile/asteroid/fugu) + +/obj/structure/spawner/clown + name = "Laughing Larry" + desc = "A laughing, jovial figure. Something seems stuck in his throat." + icon_state = "clownbeacon" + icon = 'icons/obj/device.dmi' + max_integrity = 200 + max_mobs = 15 + spawn_time = 150 + mob_types = list(/mob/living/simple_animal/hostile/retaliate/clown, /mob/living/simple_animal/hostile/retaliate/clown/fleshclown, /mob/living/simple_animal/hostile/retaliate/clown/clownhulk, /mob/living/simple_animal/hostile/retaliate/clown/longface, /mob/living/simple_animal/hostile/retaliate/clown/clownhulk/chlown, /mob/living/simple_animal/hostile/retaliate/clown/clownhulk/honcmunculus, /mob/living/simple_animal/hostile/retaliate/clown/mutant/blob) + spawn_text = "climbs out of" + faction = list("clown") diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index fba79ac2b0..6356424aaf 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -127,7 +127,7 @@ to_chat(user, "Throwing [pushed_mob] onto the table might hurt them!") return var/added_passtable = FALSE - if(!pushed_mob.pass_flags & PASSTABLE) + if(!(pushed_mob.pass_flags & PASSTABLE)) added_passtable = TRUE pushed_mob.pass_flags |= PASSTABLE pushed_mob.Move(src.loc) diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index 0679d9ffac..9a74b63040 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -41,7 +41,6 @@ H.dna.features["horns"] = pick(GLOB.horns_list) H.dna.features["frills"] = pick(GLOB.frills_list) H.dna.features["spines"] = pick(GLOB.spines_list) - H.dna.features["body_markings"] = pick(GLOB.body_markings_list) H.dna.features["insect_wings"] = pick(GLOB.insect_wings_list) H.dna.features["deco_wings"] = pick(GLOB.deco_wings_list) H.dna.features["insect_fluff"] = pick(GLOB.insect_fluffs_list) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm index 4f518b7f8e..ca07f9a50b 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm @@ -238,3 +238,9 @@ /proc/__nan() var/list/L = json_decode("{\"value\":NaN}") return L["value"] + +/** + * Wrapper to return a copy of contents, as SDQL2 can't tell an internal list from a normal list. + */ +/atom/proc/_contents() + return contents.Copy() diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index 93b2e20271..b92b659183 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -111,7 +111,7 @@ GLOBAL_LIST_EMPTY(antagonists) var/datum/skill_modifier/job/M = GLOB.skill_modifiers[GET_SKILL_MOD_ID(A, type)] if(istype(M)) M.name = "[name] Training" - owner.AddComponent(/datum/component/activity) + owner.current.AddComponent(/datum/component/activity) SEND_SIGNAL(owner.current, COMSIG_MOB_ANTAG_ON_GAIN, src) /datum/antagonist/proc/is_banned(mob/M) @@ -164,14 +164,12 @@ GLOBAL_LIST_EMPTY(antagonists) /datum/antagonist/proc/remove_blacklisted_quirks() var/mob/living/L = owner.current if(istype(L)) - var/list/my_quirks = L.client?.prefs.all_quirks.Copy() - SSquirks.filter_quirks(my_quirks,blacklisted_quirks) for(var/q in L.roundstart_quirks) var/datum/quirk/Q = q - if(!(SSquirks.quirk_name_by_path(Q.type) in my_quirks)) + if(Q.type in blacklisted_quirks) if(initial(Q.antag_removal_text)) to_chat(L, "[initial(Q.antag_removal_text)]") - L.remove_quirk(Q.type) + qdel(Q) //Returns the team antagonist belongs to if any. /datum/antagonist/proc/get_team() diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index 5b6a7648c8..b7aeb23e6f 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -680,6 +680,11 @@ glove_type = /obj/item/clothing/gloves/fingerless/pugilist/cling // just punch his head off dude glove_name_simple = "bone gauntlets" +/obj/effect/proc_holder/changeling/gloves/gauntlets/sting_action(mob/living/user) + if(HAS_TRAIT(user, TRAIT_NOPUGILIST)) + to_chat(user, "We would gain nothing by forming our fists into brute-force weapons when we are trained in precision martial arts!") + return + /obj/item/clothing/gloves/fingerless/pugilist/cling // switches between lesser GotNS and Big Punchy Rib Breaky Hands name = "hewn bone gauntlets" icon_state = "ling_gauntlets" diff --git a/code/modules/antagonists/eldritch_cult/eldritch_items.dm b/code/modules/antagonists/eldritch_cult/eldritch_items.dm index a6380a81b2..86ef2afacb 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_items.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_items.dm @@ -229,8 +229,8 @@ flags_inv = NONE flags_cover = NONE desc = "Black like tar, doesn't reflect any light. Runic symbols line the outside, with each flash you lose comprehension of what you are seeing." - item_flags = EXAMINE_SKIP armor = list("melee" = 30, "bullet" = 30, "laser" = 30,"energy" = 30, "bomb" = 15, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + obj_flags = NONE | EXAMINE_SKIP /obj/item/clothing/suit/hooded/cultrobes/void name = "void cloak" @@ -253,9 +253,10 @@ //We need to account for the hood shenanigans, and that way we can make sure items always fit, even if one of the slots is used by the fucking hood. if(suittoggled) to_chat(carbon_user,"The light shifts around you making the cloak invisible!") - else + obj_flags |= EXAMINE_SKIP + else if(obj_flags & EXAMINE_SKIP) // ensures that it won't toggle visibility if raising the hood failed to_chat(carbon_user,"The kaleidoscope of colours collapses around you, as the cloak shifts to visibility!") - item_flags = suittoggled ? EXAMINE_SKIP : ~EXAMINE_SKIP + obj_flags ^= EXAMINE_SKIP else to_chat(carbon_user,"You can't force the hood onto your head!") diff --git a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm index 4aeb2e1b73..4d6576ee92 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm @@ -50,7 +50,7 @@ /obj/item/melee/touch_attack/mansus_fist/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - if(!proximity_flag | target == user) + if(!proximity_flag || (target == user)) return playsound(user, 'sound/items/welder.ogg', 75, TRUE) if(ishuman(target)) diff --git a/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm b/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm index 8184beb3aa..aa927ffcfc 100644 --- a/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm +++ b/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm @@ -24,7 +24,7 @@ var/check = FALSE if(ismob(target)) var/mob/living/mobster = target - if(!mobster.mob_biotypes & MOB_ROBOTIC) + if(!(mobster.mob_biotypes & MOB_ROBOTIC)) return FALSE else check = TRUE diff --git a/code/modules/antagonists/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm index a26d081f08..f616f2c848 100644 --- a/code/modules/antagonists/slaughter/slaughter.dm +++ b/code/modules/antagonists/slaughter/slaughter.dm @@ -84,6 +84,9 @@ if(slam_cooldown + slam_cooldown_time > world.time) to_chat(src, "Your slam ability is still on cooldown!") return + if(!isopenturf(loc)) + to_chat(src, "You need to be on open flooring to do that!") + return face_atom(A) var/mob/living/victim = A diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 81d267fcf1..251bcc72ad 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -124,7 +124,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/eye_type = DEFAULT_EYES_TYPE //Eye type var/split_eye_colors = FALSE var/datum/species/pref_species = new /datum/species/human() //Mutant race - var/list/features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "body_markings" = "None", "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = "Plain", "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING) + var/list/features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = list(), "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING) var/custom_speech_verb = "default" //if your say_mod is to be something other than your races var/custom_tongue = "default" //if your tongue is to be something other than your races @@ -514,7 +514,76 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "" mutant_category = 0 + // rp marking selection + // assume you can only have mam markings or regular markings or none, never both + var/marking_type + if(parent.can_have_part("mam_body_markings")) + marking_type = "mam_body_markings" + if(marking_type) + dat += APPEARANCE_CATEGORY_COLUMN + dat += "

[GLOB.all_mutant_parts[marking_type]]

" // give it the appropriate title for the type of marking + dat += "Add marking" + // list out the current markings you have + if(length(features[marking_type])) + dat += "" + var/list/markings = features[marking_type] + if(!islist(markings)) + // something went terribly wrong + markings = list() + var/list/reverse_markings = reverseList(markings) + for(var/list/marking_list in reverse_markings) + var/marking_index = markings.Find(marking_list) // consider changing loop to go through indexes over lists instead of using Find here + var/limb_value = marking_list[1] + var/actual_name = GLOB.bodypart_names[num2text(limb_value)] // get the actual name from the bitflag representing the part the marking is applied to + var/color_marking_dat = "" + var/number_colors = 1 + var/datum/sprite_accessory/mam_body_markings/S = GLOB.mam_body_markings_list[marking_list[2]] + var/matrixed_sections = S.covered_limbs[actual_name] + if(S && matrixed_sections) + // if it has nothing initialize it to white + if(length(marking_list) == 2) + var/first = "#FFFFFF" + var/second = "#FFFFFF" + var/third = "#FFFFFF" + if(features["mcolor"]) + first = "#[features["mcolor"]]" + if(features["mcolor2"]) + second = "#[features["mcolor2"]]" + if(features["mcolor3"]) + third = "#[features["mcolor3"]]" + marking_list += list(list(first, second, third)) // just assume its 3 colours if it isnt it doesnt matter we just wont use the other values + // index magic + var/primary_index = 1 + var/secondary_index = 2 + var/tertiary_index = 3 + switch(matrixed_sections) + if(MATRIX_GREEN) + primary_index = 2 + if(MATRIX_BLUE) + primary_index = 3 + if(MATRIX_RED_BLUE) + secondary_index = 2 + if(MATRIX_GREEN_BLUE) + primary_index = 2 + secondary_index = 3 + + // we know it has one matrixed section at minimum + color_marking_dat += "   " + // if it has a second section, add it + if(matrixed_sections == MATRIX_RED_BLUE || matrixed_sections == MATRIX_GREEN_BLUE || matrixed_sections == MATRIX_RED_GREEN || matrixed_sections == MATRIX_ALL) + color_marking_dat += "   " + number_colors = 2 + // if it has a third section, add it + if(matrixed_sections == MATRIX_ALL) + color_marking_dat += "   " + number_colors = 3 + color_marking_dat += " Change
" + dat += "" + dat += "
[marking_list[2]] - [actual_name] ˄ ˅ X [color_marking_dat]
" + for(var/mutant_part in GLOB.all_mutant_parts) + if(mutant_part == "mam_body_markings") + continue if(parent.can_have_part(mutant_part)) if(!mutant_category) dat += APPEARANCE_CATEGORY_COLUMN @@ -533,8 +602,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(accessory) if(accessory.color_src == MATRIXED || accessory.color_src == MUTCOLORS || accessory.color_src == MUTCOLORS2 || accessory.color_src == MUTCOLORS3) //mutcolors1-3 are deprecated now, please don't rely on these in the future var/mutant_string = accessory.mutant_part_string - if(istype(accessory, /datum/sprite_accessory/mam_body_markings) || istype(accessory, /datum/sprite_accessory/body_markings)) - continue var/primary_feature = "[mutant_string]_primary" var/secondary_feature = "[mutant_string]_secondary" var/tertiary_feature = "[mutant_string]_tertiary" @@ -1726,13 +1793,11 @@ GLOBAL_LIST_EMPTY(preferences_datums) pref_species = new newtype() //let's ensure that no weird shit happens on species swapping. custom_species = null - if(!parent.can_have_part("body_markings")) - features["body_markings"] = "None" if(!parent.can_have_part("mam_body_markings")) - features["mam_body_markings"] = "None" + features["mam_body_markings"] = list() if(parent.can_have_part("mam_body_markings")) if(features["mam_body_markings"] == "None") - features["mam_body_markings"] = "Plain" + features["mam_body_markings"] = list() if(parent.can_have_part("tail_lizard")) features["tail_lizard"] = "Smooth" if(pref_species.id == "felinid") @@ -1961,14 +2026,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(new_spines) features["spines"] = new_spines - if("body_markings") - var/new_body_markings - new_body_markings = input(user, "Choose your character's body markings:", "Character Preference") as null|anything in GLOB.body_markings_list - if(new_body_markings) - features["body_markings"] = new_body_markings - if(new_body_markings != "None") - features["mam_body_markings"] = "None" - if("legs") var/new_legs new_legs = input(user, "Choose your character's legs:", "Character Preference") as null|anything in GLOB.legs_list @@ -2088,26 +2145,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(new_ears) features["mam_ears"] = new_ears - if("mam_body_markings") - var/list/snowflake_markings_list = list() - for(var/path in GLOB.mam_body_markings_list) - var/datum/sprite_accessory/mam_body_markings/instance = GLOB.mam_body_markings_list[path] - if(istype(instance, /datum/sprite_accessory)) - var/datum/sprite_accessory/S = instance - if(!show_mismatched_markings && S.recommended_species && !S.recommended_species.Find(pref_species.id)) - continue - if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) - snowflake_markings_list[S.name] = path - var/new_mam_body_markings - new_mam_body_markings = input(user, "Choose your character's body markings:", "Character Preference") as null|anything in snowflake_markings_list - if(new_mam_body_markings) - features["mam_body_markings"] = new_mam_body_markings - if(new_mam_body_markings != "None") - features["body_markings"] = "None" - else if(new_mam_body_markings == "None") - features["mam_body_markings"] = "Plain" - features["body_markings"] = "None" - //Xeno Bodyparts if("xenohead")//Head or caste type var/new_head @@ -2133,7 +2170,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) features["xenodorsal"] = new_dors //every single primary/secondary/tertiary colouring done at once - if("xenodorsal_primary","xenodorsal_secondary","xenodorsal_tertiary","xhead_primary","xhead_secondary","xhead_tertiary","tail_primary","tail_secondary","tail_tertiary","insect_markings_primary","insect_markings_secondary","insect_markings_tertiary","body_markings_primary","body_markings_secondary","body_markings_tertiary","insect_fluff_primary","insect_fluff_secondary","insect_fluff_tertiary","ears_primary","ears_secondary","ears_tertiary","frills_primary","frills_secondary","frills_tertiary","ipc_antenna_primary","ipc_antenna_secondary","ipc_antenna_tertiary","taur_primary","taur_secondary","taur_tertiary","snout_primary","snout_secondary","snout_tertiary","spines_primary","spines_secondary","spines_tertiary", "mam_body_markings_primary", "mam_body_markings_secondary", "mam_body_markings_tertiary") + if("xenodorsal_primary","xenodorsal_secondary","xenodorsal_tertiary","xhead_primary","xhead_secondary","xhead_tertiary","tail_primary","tail_secondary","tail_tertiary","insect_markings_primary","insect_markings_secondary","insect_markings_tertiary","insect_fluff_primary","insect_fluff_secondary","insect_fluff_tertiary","ears_primary","ears_secondary","ears_tertiary","frills_primary","frills_secondary","frills_tertiary","ipc_antenna_primary","ipc_antenna_secondary","ipc_antenna_tertiary","taur_primary","taur_secondary","taur_tertiary","snout_primary","snout_secondary","snout_tertiary","spines_primary","spines_secondary","spines_tertiary", "mam_body_markings_primary", "mam_body_markings_secondary", "mam_body_markings_tertiary") var/the_feature = features[href_list["preference"]] if(!the_feature) features[href_list["preference"]] = "FFFFFF" @@ -2390,6 +2427,111 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/selected_body_sprite = input(user, "Choose your desired body sprite", "Character Preference") as null|anything in pref_species.allowed_limb_ids if(selected_body_sprite) chosen_limb_id = selected_body_sprite //this gets sanitized before loading + + if("marking_down") + // move the specified marking down + var/index = text2num(href_list["marking_index"]) + var/marking_type = href_list["marking_type"] + if(index && marking_type && features[marking_type] && index != length(features[marking_type])) + var/index_down = index + 1 + var/markings = features[marking_type] + var/first_marking = markings[index] + var/second_marking = markings[index_down] + markings[index] = second_marking + markings[index_down] = first_marking + + if("marking_up") + // move the specified marking up + var/index = text2num(href_list["marking_index"]) + var/marking_type = href_list["marking_type"] + if(index && marking_type && features[marking_type] && index != 1) + var/index_up = index - 1 + var/markings = features[marking_type] + var/first_marking = markings[index] + var/second_marking = markings[index_up] + markings[index] = second_marking + markings[index_up] = first_marking + + if("marking_remove") + // move the specified marking up + var/index = text2num(href_list["marking_index"]) + var/marking_type = href_list["marking_type"] + if(index && marking_type && features[marking_type]) + // because linters are just absolutely awful: + var/list/L = features[marking_type] + L.Cut(index, index + 1) + + if("marking_add") + // add a marking + var/marking_type = href_list["marking_type"] + if(marking_type && features[marking_type]) + var/selected_limb = input(user, "Choose the limb to apply to.", "Character Preference") as null|anything in list("Head", "Chest", "Left Arm", "Right Arm", "Left Leg", "Right Leg", "All") + if(selected_limb) + var/list/marking_list = GLOB.mam_body_markings_list + var/list/snowflake_markings_list = list() + for(var/path in marking_list) + var/datum/sprite_accessory/S = marking_list[path] + if(istype(S)) + if(istype(S, /datum/sprite_accessory/mam_body_markings)) + var/datum/sprite_accessory/mam_body_markings/marking = S + if(!(selected_limb in marking.covered_limbs) && selected_limb != "All") + continue + + if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) + snowflake_markings_list[S.name] = path + + var/selected_marking = input(user, "Select the marking to apply to the limb.") as null|anything in snowflake_markings_list + if(selected_marking) + if(selected_limb != "All") + var/limb_value = text2num(GLOB.bodypart_values[selected_limb]) + features[marking_type] += list(list(limb_value, selected_marking)) + else + var/datum/sprite_accessory/mam_body_markings/S = marking_list[selected_marking] + for(var/limb in S.covered_limbs) + var/limb_value = text2num(GLOB.bodypart_values[limb]) + features[marking_type] += list(list(limb_value, selected_marking)) + + if("marking_color") + var/index = text2num(href_list["marking_index"]) + var/marking_type = href_list["marking_type"] + if(index && marking_type && features[marking_type]) + // work out the input options to show the user + var/list/options = list("Primary") + var/number_colors = text2num(href_list["number_colors"]) + var/color_number = 1 // 1-3 which color are we editing + if(number_colors >= 2) + options += "Secondary" + if(number_colors == 3) + options += "Tertiary" + var/color_option = input(user, "Select the colour you wish to edit") as null|anything in options + if(color_option) + if(color_option == "Secondary") color_number = 2 + if(color_option == "Tertiary") color_number = 3 + // perform some magic on the color number + var/list/marking_list = features[marking_type][index] + var/datum/sprite_accessory/mam_body_markings/S = GLOB.mam_body_markings_list[marking_list[2]] + var/matrixed_sections = S.covered_limbs[GLOB.bodypart_names[num2text(marking_list[1])]] + if(color_number == 1) + switch(matrixed_sections) + if(MATRIX_GREEN) + color_number = 2 + if(MATRIX_BLUE) + color_number = 3 + else if(color_number == 2) + switch(matrixed_sections) + if(MATRIX_RED_BLUE) + color_number = 3 + if(MATRIX_GREEN_BLUE) + color_number = 3 + + var/color_list = features[marking_type][index][3] + var/new_marking_color = input(user, "Choose your character's marking color:", "Character Preference","#"+color_list[color_number]) as color|null + if(new_marking_color) + var/temp_hsv = RGBtoHSV(new_marking_color) + if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV(MINIMUM_MUTANT_COLOR)[3]) // mutantcolors must be bright, but only if they affect the skin + color_list[color_number] = "#[sanitize_hexcolor(new_marking_color, 6)]" + else + to_chat(user, "Invalid color. Your color is not bright enough.") else switch(href_list["preference"]) //CITADEL PREFERENCES EDIT - I can't figure out how to modularize these, so they have to go here. :c -Pooj diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 9cd16592ce..45c5357c4d 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -5,7 +5,7 @@ // You do not need to raise this if you are adding new values that have sane defaults. // Only raise this value when changing the meaning/format/name/layout of an existing value // where you would want the updater procs below to run -#define SAVEFILE_VERSION_MAX 51 +#define SAVEFILE_VERSION_MAX 52 /* SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Carn @@ -283,7 +283,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car qdel(temporary_gear_item) //it's double packed into a list because += will union the two lists contents - S["loadout"] = safe_json_encode(loadout_data) + S["loadout"] = loadout_data if(current_version < 48) //unlockable loadout items but we need to clear bad data from a mistake S["unlockable_loadout"] = list() @@ -299,6 +299,47 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car if(S["species"] == SPECIES_HUMAN) features["legs"] = "Plantigrade" + if(current_version < 52) // rp markings means markings are now stored as a list, lizard markings now mam like the rest + var/marking_type + var/species_id = S["species"] + var/datum/species/actual_species = GLOB.species_datums[species_id] + + // convert lizard markings to lizard markings + if(species_id == SPECIES_LIZARD && S["feature_lizard_body_markings"]) + features["mam_body_markings"] = features["body_markings"] + + // convert mam body marking data to the new rp marking data + if(actual_species.mutant_bodyparts["mam_body_markings"] && S["feature_mam_body_markings"]) marking_type = "feature_mam_body_markings" + + if(marking_type) + var/old_marking_value = S[marking_type] + var/list/color_list = list("#FFFFFF","#FFFFFF","#FFFFFF") + + if(S["feature_mcolor"]) color_list[1] = "#" + S["feature_mcolor"] + if(S["feature_mcolor2"]) color_list[2] = "#" + S["feature_mcolor2"] + if(S["feature_mcolor3"]) color_list[3] = "#" + S["feature_mcolor3"] + + var/list/marking_list = list() + for(var/part in list(ARM_LEFT, ARM_RIGHT, LEG_LEFT, LEG_RIGHT, CHEST, HEAD)) + var/list/copied_color_list = color_list.Copy() + var/datum/sprite_accessory/mam_body_markings/mam_marking = GLOB.mam_body_markings_list[old_marking_value] + var/part_name = GLOB.bodypart_names[num2text(part)] + if(length(mam_marking.covered_limbs) && mam_marking.covered_limbs[part_name]) + var/matrixed_sections = mam_marking.covered_limbs[part_name] + // just trust me this is fine + switch(matrixed_sections) + if(MATRIX_GREEN) + copied_color_list[1] = copied_color_list[2] + if(MATRIX_BLUE) + copied_color_list[1] = copied_color_list[3] + if(MATRIX_RED_BLUE) + copied_color_list[2] = copied_color_list[3] + if(MATRIX_GREEN_BLUE) + copied_color_list[1] = copied_color_list[2] + copied_color_list[2] = copied_color_list[3] + marking_list += list(list(part, old_marking_value, copied_color_list)) + features["mam_body_markings"] = marking_list + /datum/preferences/proc/load_path(ckey,filename="preferences.sav") if(!ckey) return @@ -583,7 +624,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car var/savefile/S = new /savefile(path) if(!S) return FALSE - features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "body_markings" = "None", "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = "Plain", "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING) + features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = "Plain", "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING) S.cd = "/" if(!slot) @@ -653,7 +694,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["feature_lizard_horns"] >> features["horns"] S["feature_lizard_frills"] >> features["frills"] S["feature_lizard_spines"] >> features["spines"] - S["feature_lizard_body_markings"] >> features["body_markings"] S["feature_lizard_legs"] >> features["legs"] S["feature_human_tail"] >> features["tail_human"] S["feature_human_ears"] >> features["ears"] @@ -722,7 +762,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["feature_genitals_use_skintone"] >> features["genitals_use_skintone"] S["feature_mcolor2"] >> features["mcolor2"] S["feature_mcolor3"] >> features["mcolor3"] - S["feature_mam_body_markings"] >> features["mam_body_markings"] + // note safe json decode will runtime the first time it migrates but this is fine and it solves itself don't worry about it if you see it error + features["mam_body_markings"] = safe_json_decode(S["feature_mam_body_markings"]) S["feature_mam_tail"] >> features["mam_tail"] S["feature_mam_ears"] >> features["mam_ears"] S["feature_mam_tail_animated"] >> features["mam_tail_animated"] @@ -852,7 +893,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car features["ears"] = sanitize_inlist(features["ears"], GLOB.ears_list) features["frills"] = sanitize_inlist(features["frills"], GLOB.frills_list) features["spines"] = sanitize_inlist(features["spines"], GLOB.spines_list) - features["body_markings"] = sanitize_inlist(features["body_markings"], GLOB.body_markings_list) features["legs"] = sanitize_inlist(features["legs"], GLOB.legs_list, "Plantigrade") features["deco_wings"] = sanitize_inlist(features["deco_wings"], GLOB.deco_wings_list, "None") features["insect_fluff"] = sanitize_inlist(features["insect_fluff"], GLOB.insect_fluffs_list) @@ -1021,7 +1061,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["feature_human_ears"] , features["ears"]) WRITE_FILE(S["feature_lizard_frills"] , features["frills"]) WRITE_FILE(S["feature_lizard_spines"] , features["spines"]) - WRITE_FILE(S["feature_lizard_body_markings"] , features["body_markings"]) WRITE_FILE(S["feature_lizard_legs"] , features["legs"]) WRITE_FILE(S["feature_deco_wings"] , features["deco_wings"]) WRITE_FILE(S["feature_horns_color"] , features["horns_color"]) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index a558abbfe8..a337439931 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -37,14 +37,19 @@ /obj/item/clothing/gloves/fingerless/pugilist/equipped(mob/user, slot) . = ..() if(slot == SLOT_GLOVES) - use_buffs(user, TRUE) wornonce = TRUE + if((HAS_TRAIT(user, TRAIT_NOPUGILIST))) + to_chat(user, "What purpose is there to don the weapons of pugilism if you're already well-practiced in martial arts? Mixing arts is blasphemous!") + return + use_buffs(user, TRUE) /obj/item/clothing/gloves/fingerless/pugilist/dropped(mob/user) . = ..() if(wornonce) - use_buffs(user, FALSE) wornonce = FALSE + if((HAS_TRAIT(user, TRAIT_NOPUGILIST))) + return + use_buffs(user, FALSE) /obj/item/clothing/gloves/fingerless/pugilist/proc/use_buffs(mob/user, buff) if(buff) // tarukaja @@ -67,6 +72,7 @@ H.dna.species.punchdamagehigh -= enhancement H.dna.species.punchdamagelow -= enhancement H.dna.species.punchwoundbonus -= wound_enhancement + H.dna?.species?.attack_sound_override = null if(!silent) to_chat(user, "With [src] off of your arms, you feel less ready to punch things.") @@ -223,6 +229,50 @@ parry_cooldown = 0 parry_failed_clickcd_duration = 0 +/obj/item/clothing/gloves/fingerless/pugilist/mauler + name = "mauler gauntlets" + desc = "Plastitanium gauntlets coated in a thick nano-weave carbon material and implanted with nanite injectors that boost the wielder's strength six-fold." + icon_state = "mauler_gauntlets" + item_state = "mauler_gauntlets" + transfer_prints = FALSE + body_parts_covered = ARMS|HANDS + cold_protection = ARMS|HANDS + min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT + armor = list("melee" = 30, "bullet" = 30, "laser" = 10, "energy" = 10, "bomb" = 55, "bio" = 15, "rad" = 15, "fire" = 80, "acid" = 50) + siemens_coefficient = 0 + permeability_coefficient = 0.05 + strip_delay = 80 + enhancement = 12 // same as the changeling gauntlets but without changeling utility + wound_enhancement = 12 + silent = TRUE + inherited_trait = TRAIT_CHUNKYFINGERS // your fingers are fat because the gloves are + secondary_trait = TRAIT_MAULER // commit table slam + +/obj/item/clothing/gloves/fingerless/pugilist/mauler/equipped(mob/user, slot) + . = ..() + if(slot == SLOT_GLOVES) + wornonce = TRUE + if((HAS_TRAIT(user, TRAIT_NOPUGILIST))) + return + use_mauls(user, TRUE) + +/obj/item/clothing/gloves/fingerless/pugilist/mauler/dropped(mob/user) + . = ..() + if(wornonce) + wornonce = FALSE + if((HAS_TRAIT(user, TRAIT_NOPUGILIST))) + return + use_mauls(user, FALSE) + +/obj/item/clothing/gloves/fingerless/pugilist/mauler/proc/use_mauls(mob/user, maul) + if(maul) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.dna?.species?.attack_sound_override = 'sound/weapons/mauler_punch.ogg' + if(silent) + to_chat(H, "You feel prickles around your wrists as [src] cling to them - strength courses through your veins!") + /obj/item/clothing/gloves/botanic_leather name = "botanist's leather gloves" desc = "These leather gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin. They're also quite warm." @@ -253,7 +303,6 @@ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50) strip_mod = 1.5 - /obj/item/clothing/gloves/bracer name = "bone bracers" desc = "For when you're expecting to get slapped on the wrist. Offers modest protection to your arms." diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index cc14424980..6858de59df 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -535,3 +535,9 @@ to_chat(user, "You insert [I] into [src].") B.use(10) icon_state = initial(icon_state) + +/obj/item/clothing/shoes/swagshoes + name = "swag shoes" + desc = "They got me for my foams!" + icon_state = "SwagShoes" + item_state = "SwagShoes" diff --git a/code/modules/clothing/under/costume.dm b/code/modules/clothing/under/costume.dm index f8292738ee..60d82292ef 100644 --- a/code/modules/clothing/under/costume.dm +++ b/code/modules/clothing/under/costume.dm @@ -355,3 +355,10 @@ name = "Sakura Kimono'" icon_state = "sakura_kimono" item_state = "sakura_kimono" + +/obj/item/clothing/under/costume/swagoutfit + name = "Swag outfit" + desc = "Why don't you go secure some bitches?" + icon_state = "SwagOutfit" + item_state = "SwagOutfit" + can_adjust = FALSE diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm index 7d4ea66d30..b9480a646c 100644 --- a/code/modules/events/brand_intelligence.dm +++ b/code/modules/events/brand_intelligence.dm @@ -61,7 +61,7 @@ originMachine.visible_message("[originMachine] beeps and seems lifeless.") kill() return - vendingMachines = listclearnulls(vendingMachines) + listclearnulls(vendingMachines) if(!vendingMachines.len) //if every machine is infected for(var/obj/machinery/vending/upriser in infectedMachines) if(prob(70) && !QDELETED(upriser)) diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index e31a9704df..7377913c15 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -305,6 +305,15 @@ /obj/item/reagent_containers/food/drinks/bottle/hcider/empty list_reagents = null +/obj/item/reagent_containers/food/drinks/bottle/amaretto + name = "Luini Amaretto" + desc = "A gentle and syrup-like drink that tastes of almonds and apricots." + icon_state = "disaronno" + list_reagents = list(/datum/reagent/consumable/ethanol/amaretto = 100) + +/obj/item/reagent_containers/food/drinks/bottle/amaretto/empty + list_reagents = null + /obj/item/reagent_containers/food/drinks/bottle/grappa name = "Phillipes well-aged Grappa" desc = "Bottle of Grappa." @@ -615,6 +624,10 @@ icon_state = "hcider" name = "Sealed Cider" +/obj/item/export/bottle/amaretto + icon_state = "disaronno" + name = "Sealed Amaretto" + /obj/item/export/bottle/cognac icon_state = "cognacbottle" name = "Sealed Cognac" diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm index 943f421a64..363e263ad4 100644 --- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm +++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm @@ -29,6 +29,7 @@ id = /datum/reagent/consumable/nuka_cola results = list(/datum/reagent/consumable/nuka_cola = 6) required_reagents = list(/datum/reagent/uranium = 1, /datum/reagent/consumable/space_cola = 6) + mix_message = "The bitter-sweet smell of radiation almost makes you wish for a space winter." /datum/chemical_reaction/moonshine name = "Moonshine" @@ -36,6 +37,7 @@ results = list(/datum/reagent/consumable/ethanol/moonshine = 10) required_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/sugar = 5) required_catalysts = list(/datum/reagent/consumable/enzyme = 5) + mix_message = "As the moisture in the glass settles, your entire face burns from the reaction's alcoholic virility." /datum/chemical_reaction/wine name = "Wine" @@ -112,6 +114,7 @@ id = /datum/reagent/consumable/ethanol/screwdrivercocktail results = list(/datum/reagent/consumable/ethanol/screwdrivercocktail = 3) required_reagents = list(/datum/reagent/consumable/ethanol/vodka = 2, /datum/reagent/consumable/orangejuice = 1) + mix_message = "The mixture billows a sweet scent of orange, promptly drowned out by a thick nose-scrunching cloud of potato liquor." /datum/chemical_reaction/bloody_mary name = "Bloody Mary" @@ -142,18 +145,21 @@ id = /datum/reagent/consumable/ethanol/toxins_special results = list(/datum/reagent/consumable/ethanol/toxins_special = 5) required_reagents = list(/datum/reagent/consumable/ethanol/rum = 2, /datum/reagent/consumable/ethanol/vermouth = 1, /datum/reagent/toxin/plasma = 2) + mix_message = "The surface of the mixture sets ablaze as toxic gas erupts into a mystical cloud of fire, shortly settling to but a humble - albeit eternal blaze." /datum/chemical_reaction/beepsky_smash name = "Beepksy Smash" id = /datum/reagent/consumable/ethanol/beepsky_smash results = list(/datum/reagent/consumable/ethanol/beepsky_smash = 5) required_reagents = list(/datum/reagent/consumable/limejuice = 2, /datum/reagent/consumable/ethanol/quadruple_sec = 2, /datum/reagent/iron = 1) + mix_message = "You can hear the law nearby." /datum/chemical_reaction/doctor_delight name = "The Doctor's Delight" id = /datum/reagent/consumable/doctor_delight results = list(/datum/reagent/consumable/doctor_delight = 5) required_reagents = list(/datum/reagent/consumable/limejuice = 1, /datum/reagent/consumable/tomatojuice = 1, /datum/reagent/consumable/orangejuice = 1, /datum/reagent/consumable/cream = 1, /datum/reagent/medicine/cryoxadone = 1) + mix_message = "The scent of medicine hits you like a truck!" /datum/chemical_reaction/irish_cream name = "Irish Cream" @@ -166,6 +172,7 @@ id = /datum/reagent/consumable/ethanol/manly_dorf results = list(/datum/reagent/consumable/ethanol/manly_dorf = 3) required_reagents = list (/datum/reagent/consumable/ethanol/beer = 1, /datum/reagent/consumable/ethanol/ale = 2) + mix_message = "You can feel the hair growing on your chest!" /datum/chemical_reaction/greenbeer name = "Green Beer" @@ -233,6 +240,7 @@ id = /datum/reagent/consumable/ethanol/hiveminderaser results = list(/datum/reagent/consumable/ethanol/hiveminderaser = 4) required_reagents = list(/datum/reagent/consumable/ethanol/black_russian = 2, /datum/reagent/consumable/ethanol/thirteenloko = 1, /datum/reagent/consumable/grenadine = 1) + mix_message = "Your head throbs as the purple-colored mixture swirls with alien-like vigor!" /datum/chemical_reaction/manhattan name = "Manhattan" @@ -269,6 +277,8 @@ id = /datum/reagent/consumable/ethanol/singulo results = list(/datum/reagent/consumable/ethanol/singulo = 10) required_reagents = list(/datum/reagent/consumable/ethanol/vodka = 5, /datum/reagent/radium = 1, /datum/reagent/consumable/ethanol/wine = 5) + mix_message = "A horrible screeching fills your ears, and a wave of dread washes over you..." + mix_sound = 'sound/effects/supermatter.ogg' /datum/chemical_reaction/alliescocktail name = "Allies Cocktail" @@ -447,6 +457,8 @@ id = /datum/reagent/consumable/ethanol/syndicatebomb results = list(/datum/reagent/consumable/ethanol/syndicatebomb = 2) required_reagents = list(/datum/reagent/consumable/ethanol/beer = 1, /datum/reagent/consumable/ethanol/whiskey_cola = 1) + mix_message = "You can hear beeping coming from behind you." + mix_sound = 'sound/items/timer.ogg' /datum/chemical_reaction/erikasurprise name = "Erika Surprise" @@ -459,30 +471,38 @@ id = /datum/reagent/consumable/ethanol/devilskiss results = list(/datum/reagent/consumable/ethanol/devilskiss = 3) required_reagents = list(/datum/reagent/blood = 1, /datum/reagent/consumable/ethanol/kahlua = 1, /datum/reagent/consumable/ethanol/rum = 1) + mix_message = "You can hear faint whispering in your ear and a burning on your cheeks as the mixture blends together into with a fiery swirl." /datum/chemical_reaction/hippiesdelight name = "Hippies Delight" id = /datum/reagent/consumable/ethanol/hippies_delight results = list(/datum/reagent/consumable/ethanol/hippies_delight = 2) required_reagents = list(/datum/reagent/drug/mushroomhallucinogen = 1, /datum/reagent/consumable/ethanol/gargle_blaster = 1) + mix_message = "You can like... Smell the flowers, man - as the drink mixes." /datum/chemical_reaction/bananahonk name = "Banana Honk" id = /datum/reagent/consumable/ethanol/bananahonk results = list(/datum/reagent/consumable/ethanol/bananahonk = 2) required_reagents = list(/datum/reagent/consumable/laughter = 1, /datum/reagent/consumable/cream = 1) + mix_message = "The mixture honks. Honk!" + mix_sound = 'sound/items/bikehorn.ogg' /datum/chemical_reaction/silencer name = "Silencer" id = /datum/reagent/consumable/ethanol/silencer results = list(/datum/reagent/consumable/ethanol/silencer = 3) required_reagents = list(/datum/reagent/consumable/nothing = 1, /datum/reagent/consumable/cream = 1, /datum/reagent/consumable/sugar = 1) + mix_message = "As the drink mixes, you can hear nothing..." + mix_sound = null /datum/chemical_reaction/driestmartini name = "Driest Martini" id = /datum/reagent/consumable/ethanol/driestmartini results = list(/datum/reagent/consumable/ethanol/driestmartini = 2) required_reagents = list(/datum/reagent/consumable/nothing = 1, /datum/reagent/consumable/ethanol/gin = 1) + mix_message = "You feel like a prune beneath a sun as the mixture yanks the moisture from your tongue - yet, it's all so silent." + mix_sound = null /datum/chemical_reaction/thirteenloko name = "Thirteen Loko" @@ -519,12 +539,14 @@ id = /datum/reagent/consumable/gibbfloats results = list(/datum/reagent/consumable/gibbfloats = 15) required_reagents = list(/datum/reagent/consumable/dr_gibb = 5, /datum/reagent/consumable/ice = 5, /datum/reagent/consumable/cream = 5) + mix_message = "As the cream floats to the top of the glass, you can feel your cholesterol levels rising just looking at it." /datum/chemical_reaction/triple_citrus name = "triple_citrus" id = /datum/reagent/consumable/triple_citrus results = list(/datum/reagent/consumable/triple_citrus = 5) required_reagents = list(/datum/reagent/consumable/lemonjuice = 1, /datum/reagent/consumable/limejuice = 1, /datum/reagent/consumable/orangejuice = 1) + mix_message = "The glass's contents shift colors from a rainbow of fruity twinges before settling with a distinct flowery smell." /datum/chemical_reaction/grape_soda name = "grape soda" @@ -567,6 +589,7 @@ results = list(/datum/reagent/consumable/ethanol/bacchus_blessing = 4) required_reagents = list(/datum/reagent/consumable/ethanol/hooch = 1, /datum/reagent/consumable/ethanol/absinthe = 1, /datum/reagent/consumable/ethanol/manly_dorf = 1, /datum/reagent/consumable/ethanol/syndicatebomb = 1) mix_message = "The mixture turns to a sickening froth." + mix_sound = 'sound/FermiChem/bufferadd.ogg' /datum/chemical_reaction/lemonade name = "Lemonade" @@ -601,7 +624,7 @@ id = /datum/reagent/consumable/ethanol/cogchamp results = list(/datum/reagent/consumable/ethanol/cogchamp = 3) required_reagents = list(/datum/reagent/consumable/ethanol/cognac = 1, /datum/reagent/fuel = 1, /datum/reagent/consumable/ethanol/screwdrivercocktail = 1) - mix_message = "You hear faint sounds of gears turning as it mixes." + mix_message = "You hear faint sounds of gears turning as the mixture gives off virulent plumes of steam." mix_sound = 'sound/machines/clockcult/steam_whoosh.ogg' /datum/chemical_reaction/pinotmort @@ -744,18 +767,22 @@ id = /datum/reagent/consumable/pwr_game results = list(/datum/reagent/consumable/pwr_game = 5) required_reagents = list(/datum/reagent/consumable/sodawater = 1, /datum/reagent/colorful_reagent/crayonpowder/black = 1, /datum/reagent/consumable/sodiumchloride = 1) + mix_message = "The mixture froths as it turns black, rousing a nauseating aroma of sweat and salt before settling to an eerie purple color." /datum/chemical_reaction/pinkmilk name = "Strawberry Milk" id = /datum/reagent/consumable/pinkmilk results = list(/datum/reagent/consumable/pinkmilk = 2) required_reagents = list(/datum/reagent/consumable/strawberryjuice = 1, /datum/reagent/consumable/milk = 1) + mix_message = "You feel a sweet aroma drift up your nose as the lactic mixture swirls. It reminds you of... a cafeteria." /datum/chemical_reaction/blank_paper name = "Blank Paper" id = /datum/reagent/consumable/ethanol/blank_paper results = list(/datum/reagent/consumable/ethanol/blank_paper = 3) required_reagents = list(/datum/reagent/consumable/ethanol/silencer = 1, /datum/reagent/consumable/nothing = 1, /datum/reagent/consumable/nuka_cola = 1) + mix_message = "As the drink mixes, you can hear nothing..." + mix_sound = null /datum/chemical_reaction/wizz_fizz name = "Wizz Fizz" @@ -785,18 +812,22 @@ id = /datum/reagent/consumable/ethanol/turbo results = list(/datum/reagent/consumable/ethanol/turbo = 5) required_reagents = list(/datum/reagent/consumable/ethanol/moonshine = 2, /datum/reagent/nitrous_oxide = 1, /datum/reagent/consumable/ethanol/sugar_rush = 1, /datum/reagent/consumable/pwr_game = 1) + mix_message = "The mixture pops and fizzles, it's going to bl- oh, nevermind." /datum/chemical_reaction/old_timer name = "Old Timer" id = /datum/reagent/consumable/ethanol/old_timer results = list(/datum/reagent/consumable/ethanol/old_timer = 6) required_reagents = list(/datum/reagent/consumable/ethanol/whiskeysoda = 3, /datum/reagent/consumable/parsnipjuice = 2, /datum/reagent/consumable/ethanol/alexander = 1) + mix_message = "You hear a faded record playing in the distance. Then, you hear nothing." + mix_sound = null /datum/chemical_reaction/rubberneck name = "Rubberneck" id = /datum/reagent/consumable/ethanol/rubberneck results = list(/datum/reagent/consumable/ethanol/rubberneck = 10) required_reagents = list(/datum/reagent/consumable/ethanol = 4, /datum/reagent/consumable/grey_bull = 5, /datum/reagent/consumable/astrotame = 1) + mix_message = "The mixture boils and bubbles as the faint scent of rubber and heart disease hits your nose." /datum/chemical_reaction/duplex name = "Duplex" @@ -809,6 +840,7 @@ id = /datum/reagent/consumable/ethanol/trappist results = list(/datum/reagent/consumable/ethanol/trappist = 5) required_reagents = list(/datum/reagent/consumable/ethanol/ale = 2, /datum/reagent/water/holywater = 2, /datum/reagent/consumable/sugar = 1) + mix_message = "As the mixture froths, you swear you can hear a distant holy choir." /datum/chemical_reaction/cream_soda name = "Cream Soda" @@ -821,6 +853,8 @@ id = /datum/reagent/consumable/ethanol/blazaam results = list(/datum/reagent/consumable/ethanol/blazaam = 3) required_reagents = list(/datum/reagent/consumable/ethanol/gin = 2, /datum/reagent/consumable/peachjuice = 1, /datum/reagent/bluespace = 1) + mix_message = "The mixture- hey, where'd all the liquid go? Oh, there it is." + mix_sound = 'sound/magic/Teleport_app.ogg' /datum/chemical_reaction/planet_cracker name = "Planet Cracker" @@ -841,6 +875,7 @@ results = list(/datum/reagent/consumable/ethanol/gunfire = 4) required_reagents = list(/datum/reagent/consumable/ethanol/rum = 1, /datum/reagent/consumable/tea = 3) mix_message = "A loud popping begins to fill the air as the drink is mixed." + mix_sound = 'sound/effects/wounds/sizzle1.ogg' /datum/chemical_reaction/hellfire name = "Hellfire" @@ -848,6 +883,7 @@ results = list(/datum/reagent/consumable/ethanol/hellfire = 4) required_reagents = list(/datum/reagent/consumable/ethanol/rum = 2, /datum/reagent/consumable/ice = 1, /datum/reagent/consumable/ethanol/crevice_spike = 1) mix_message = "The liquid begins to churn as it changes to an amber orange and catches on fire." + mix_sound = 'sound/FermiChem/bufferadd.ogg' /datum/chemical_reaction/sins_delight name = "Sins Delight" @@ -861,6 +897,7 @@ id = /datum/reagent/consumable/ethanol/strawberry_daiquiri results = list(/datum/reagent/consumable/ethanol/strawberry_daiquiri = 7) required_reagents = list(/datum/reagent/consumable/ethanol/rum = 2, /datum/reagent/consumable/limejuice = 1, /datum/reagent/consumable/sugar = 1, /datum/reagent/consumable/strawberryjuice = 2, /datum/reagent/consumable/ice = 1) + mix_message = "The mixture settles as a nostril-flaring waft of strawberry hits your nose." /datum/chemical_reaction/miami_vice name = "Miami Vice" @@ -879,18 +916,22 @@ id = /datum/reagent/consumable/ethanol/liz_fizz results = list(/datum/reagent/consumable/ethanol/liz_fizz = 5) required_reagents = list(/datum/reagent/consumable/triple_citrus = 3, /datum/reagent/consumable/ice = 1, /datum/reagent/consumable/cream = 1) + mix_message = "The smell of cream and lime hits your nose as everything feels very real for a split moment. You want to lick your eye." /datum/chemical_reaction/hotlime_miami name = "Hotlime Miami" id = /datum/reagent/consumable/ethanol/hotlime_miami results = list(/datum/reagent/consumable/ethanol/hotlime_miami = 2) required_reagents = list(/datum/reagent/medicine/ephedrine = 1, /datum/reagent/consumable/ethanol/pina_colada = 1) + mix_message = "You can hear synthwave in the distance as you can feel your blood boiling with rage." /datum/chemical_reaction/mauna_loa name = "Mauna Loa" id = /datum/reagent/consumable/ethanol/mauna_loa results = list(/datum/reagent/consumable/ethanol/mauna_loa = 5) required_reagents = list(/datum/reagent/consumable/capsaicin = 2, /datum/reagent/consumable/ethanol/kahlua = 1, /datum/reagent/consumable/ethanol/bahama_mama = 2) + mix_message = "The drink erupts as a plume of lava sprays all over the place! Oh, wait, it's just luke-warm liquor." + mix_sound = 'sound/effects/wounds/sizzle2.ogg' /datum/chemical_reaction/commander_and_chief name = "Commander and Chief" @@ -899,6 +940,22 @@ required_reagents = list(/datum/reagent/consumable/ethanol/alliescocktail = 50, /datum/reagent/consumable/ethanol/champagne = 20, /datum/reagent/consumable/doctor_delight = 10, /datum/reagent/consumable/ethanol/quintuple_sec = 10, /datum/reagent/consumable/ethanol/screwdrivercocktail = 10) mix_message = "When your powers combine, I am Captain Pl-..." +/datum/chemical_reaction/godfather + results = list(/datum/reagent/consumable/ethanol/godfather = 2) + required_reagents = list(/datum/reagent/consumable/ethanol/amaretto = 1, /datum/reagent/consumable/ethanol/whiskey = 1) + +/datum/chemical_reaction/godmother + results = list(/datum/reagent/consumable/ethanol/godmother = 2) + required_reagents = list(/datum/reagent/consumable/ethanol/amaretto = 1, /datum/reagent/consumable/ethanol/vodka = 1) + +/datum/chemical_reaction/amaretto_alexander + results = list(/datum/reagent/consumable/ethanol/amaretto_alexander = 3) + required_reagents = list(/datum/reagent/consumable/ethanol/amaretto = 1, /datum/reagent/consumable/ethanol/creme_de_cacao = 1, /datum/reagent/consumable/cream = 1) + +/datum/chemical_reaction/ginger_amaretto + results = list(/datum/reagent/consumable/ethanol/ginger_amaretto = 4) + required_reagents = list(/datum/reagent/consumable/ethanol/amaretto = 1, /datum/reagent/consumable/sol_dry = 1, /datum/reagent/consumable/ice = 1, /datum/reagent/consumable/lemonjuice = 1) + ////////////////////////////////////////// Tea Base Drinks ////////////////////////////////////// /datum/chemical_reaction/mush @@ -906,6 +963,7 @@ id = /datum/reagent/consumable/tea/mush results = list(/datum/reagent/consumable/tea/mush = 3) required_reagents = list(/datum/reagent/drug/mushroomhallucinogen = 3, /datum/reagent/consumable/tea = 3) + mix_message = "The liquid stirs with a mixture of psychedelic colors that makes stars peek from the corner of your vision." /datum/chemical_reaction/foresttea1 name = "Forest Tea" @@ -967,7 +1025,7 @@ id = /datum/reagent/consumable/catnip_tea results = list(/datum/reagent/consumable/catnip_tea = 3) required_reagents = list(/datum/reagent/consumable/tea = 5, /datum/reagent/pax/catnip = 2) - + mix_message = "The mixture seems to purr aloud as it stirs together." ////////////////////////////////////////// Race Base Drinks ////////////////////////////////////// @@ -976,54 +1034,65 @@ id = /datum/reagent/consumable/ethanol/species_drink/coldscales results = list(/datum/reagent/consumable/ethanol/species_drink/coldscales = 3) required_reagents = list(/datum/reagent/consumable/tea = 1, /datum/reagent/toxin/slimejelly = 1, /datum/reagent/consumable/menthol = 1) + mix_message = "Bubbles erupt from the glass and spill all over the place as it mixes, before settling with the faint smell of a reptile enclosure." /datum/chemical_reaction/oil_drum name = "Oil Drum" id = /datum/reagent/consumable/ethanol/species_drink/oil_drum results = list(/datum/reagent/consumable/ethanol/species_drink/oil_drum = 3) required_reagents = list(/datum/reagent/consumable/ethanol = 1, /datum/reagent/oil = 1, /datum/reagent/consumable/ethanol/champagne = 12) + mix_message = "You can taste oil in your mouth as the newly-formed mixture floats to the top of the glass." /datum/chemical_reaction/nord_king name = "Nord King" id = /datum/reagent/consumable/ethanol/species_drink/nord_king results = list(/datum/reagent/consumable/ethanol/species_drink/nord_king = 10) required_reagents = list(/datum/reagent/consumable/ethanol = 5, /datum/reagent/consumable/honey = 1, /datum/reagent/consumable/ethanol/red_mead = 10) + mix_message = "You can feel hair growing on places it shouldn't be as the smell of salt water and flame burns into your senses." /datum/chemical_reaction/velvet_kiss name = "Velvet Kiss" id = /datum/reagent/consumable/ethanol/species_drink/velvet_kiss results = list(/datum/reagent/consumable/ethanol/species_drink/velvet_kiss = 15) //Limited races use this required_reagents = list(/datum/reagent/blood = 5, /datum/reagent/consumable/tea = 1, /datum/reagent/consumable/ethanol/wine = 10) + mix_message = "The taste of blood rolls off your tongue as the mixture oozes a crimson secretion." /datum/chemical_reaction/abduction_fruit name = "Abduction Fruit" id = /datum/reagent/consumable/ethanol/species_drink/abduction_fruit results = list(/datum/reagent/consumable/ethanol/species_drink/abduction_fruit = 3) required_reagents = list(/datum/reagent/consumable/limejuice = 10, /datum/reagent/consumable/strawberryjuice = 5, /datum/reagent/consumable/watermelonjuice = 10) + mix_message = "The mixture forms with a green cloud of smoke, carrying with a smell of bovines and medicine." /datum/chemical_reaction/bug_zapper name = "Bug Zapper" id = /datum/reagent/consumable/ethanol/species_drink/bug_zapper results = list(/datum/reagent/consumable/ethanol/species_drink/bug_zapper = 20) //Harder to make required_reagents = list(/datum/reagent/consumable/lemonjuice = 10, /datum/reagent/teslium = 1, /datum/reagent/copper = 10) + mix_message = "The mixture comes to life with a spark and a zap - shortly after, you can hear the faint buzzing of moths circling your head." + mix_sound = 'sound/weapons/taser.ogg' /datum/chemical_reaction/mush_crush name = "Mush Crush" id = /datum/reagent/consumable/ethanol/species_drink/mush_crush results = list(/datum/reagent/consumable/ethanol/species_drink/mush_crush = 10) required_reagents = list(/datum/reagent/iron = 5, /datum/reagent/ash = 5, /datum/reagent/toxin/coffeepowder = 10) + mix_message = "The mixture sputters and coughs as a mushroom suddenly emerges from the glass!" /datum/chemical_reaction/darkbrew name = "Darkbrew" id = /datum/reagent/consumable/ethanol/species_drink/darkbrew results = list(/datum/reagent/consumable/ethanol/species_drink/darkbrew = 20)//Limited races use this required_reagents = list(/datum/reagent/liquid_dark_matter = 5, /datum/reagent/toxin/bungotoxin = 5, /datum/reagent/toxin/coffeepowder = 10) + mix_message = "As the glass turns into a shadowy pit, you can smell... nothing." /datum/chemical_reaction/hollow_bone name = "Hollow Bone" id = /datum/reagent/consumable/ethanol/species_drink/hollow_bone results = list(/datum/reagent/consumable/ethanol/species_drink/hollow_bone = 10) required_reagents = list(/datum/reagent/toxin/bonehurtingjuice = 5, /datum/reagent/consumable/milk = 10, /datum/reagent/consumable/coconutmilk = 10) + mix_message = "Your bones feel weak." + mix_sound = 'sound/effects/wounds/crack1.ogg' /datum/chemical_reaction/frisky_kitty name = "Frisky Kitty" @@ -1031,6 +1100,7 @@ results = list(/datum/reagent/consumable/ethanol/species_drink/frisky_kitty = 2) required_reagents = list(/datum/reagent/consumable/catnip_tea = 1, /datum/reagent/consumable/milk = 1) required_temp = 296 //Just above room temp (22.85'C) + mix_message = "The drink bubbles over the rim as it settles, and the smell of wet fur and felines makes it feel like you're in heat." /datum/chemical_reaction/jell_wyrm name = "Jell Wyrm" @@ -1038,6 +1108,7 @@ results = list(/datum/reagent/consumable/ethanol/species_drink/jell_wyrm = 2) required_reagents = list(/datum/reagent/toxin/slimejelly = 1, /datum/reagent/toxin/carpotoxin = 1, /datum/reagent/carbondioxide = 5) required_temp = 333 // (59.85'C) + mix_message = "The smell of toxins scrunches your nose as your limbs grow limp and feel like jelly." /datum/chemical_reaction/laval_spit name = "Laval Spit" @@ -1045,3 +1116,5 @@ results = list(/datum/reagent/consumable/ethanol/species_drink/laval_spit = 20) //Limited use required_reagents = list(/datum/reagent/iron = 5, /datum/reagent/consumable/ethanol/mauna_loa = 10, /datum/reagent/sulfur = 5) required_temp = 900 // (626.85'C) + mix_message = "The room grows warm as burning rock rockets over the edge of the drink before settling." + mix_sound = 'sound/effects/wounds/sizzle2.ogg' diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm index 5161ff349e..e0eaf35353 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm @@ -3,6 +3,15 @@ ////////////////////////////////////////////////BREAD//////////////////////////////////////////////// +/datum/crafting_recipe/food/bread + name = "Bread" + reqs = list( + /obj/item/reagent_containers/food/snacks/breadslice/plain = 5, + ) + tools = list(/obj/item/kitchen/efink) + result = /obj/item/reagent_containers/food/snacks/store/bread/plain + subcategory = CAT_BREAD + /datum/crafting_recipe/food/banananutbread name = "Banana nut bread" reqs = list( diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm index 17ea36a160..2409032760 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm @@ -66,6 +66,16 @@ ////////////////////////////////////////////////MISC RECIPE's//////////////////////////////////////////////// +/datum/crafting_recipe/food/meatslab + name = "Meat Slab" + reqs = list( + /obj/item/reagent_containers/food/snacks/meat/rawcutlet = 3, + ) + tools = list(/obj/item/kitchen/efink) + result = /obj/item/reagent_containers/food/snacks/meat/slab + subcategory = CAT_MEAT + + /datum/crafting_recipe/food/ribs name = "BBQ Ribs" reqs = list( diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm index 93102e1ad0..eaebfbb44e 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm @@ -47,6 +47,24 @@ /////////////////////////////////MISC///////////////////////////////////// +/datum/crafting_recipe/food/dough + name = "Dough" + reqs = list( + /obj/item/reagent_containers/food/snacks/doughslice = 3, + ) + tools = list(/obj/item/kitchen/efink) + result = /obj/item/reagent_containers/food/snacks/flatdough + subcategory = CAT_MISCFOOD + +/datum/crafting_recipe/food/Pineapple + name = "Pineapple" + reqs = list( + /obj/item/reagent_containers/food/snacks/pineappleslice = 3, + ) + tools = list(/obj/item/kitchen/efink) + result = /obj/item/reagent_containers/food/snacks/grown/pineapple + subcategory = CAT_MISCFOOD + /datum/crafting_recipe/food/beans name = "Beans" time = 40 diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm index 5343595f89..80f168fe2f 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm @@ -194,6 +194,15 @@ ////////////////////////////////////////////OTHER//////////////////////////////////////////// +/datum/crafting_recipe/food/piedough + name = "Pie Dough" + reqs = list( + /obj/item/reagent_containers/food/snacks/rawpastrybase = 3, + ) + tools = list(/obj/item/kitchen/efink) + result = /obj/item/reagent_containers/food/snacks/piedough + subcategory = CAT_PASTRY + /datum/crafting_recipe/food/chococornet name = "Choco cornet" reqs = list( diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index fff971c953..f780d889ea 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -8,6 +8,10 @@ area_flags = BLOBS_ALLOWED | UNIQUE_AREA flags_1 = CAN_BE_DIRTY_1 +/area/survivalpod/nonpowered + name = "\proper Emergency Shelter" + requires_power = TRUE + //Survival Capsule /obj/item/survivalcapsule name = "bluespace shelter capsule" @@ -81,6 +85,10 @@ desc = "A luxury bar in a capsule. Bartender required and not included." template_id = "shelter_charlie" +/obj/item/survivalcapsule/luxury/empty + name = "large empty capsule" + desc = "An extremly large capsule which requires power. Useful for projects all over." + template_id = "shelter_delta" //Pod objects //Window diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 48e8a4c338..acceb331ab 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -994,7 +994,6 @@ H.dna.features["wings"] = "None" H.dna.features["frills"] = "None" H.dna.features["spines"] = "Long" - H.dna.features["body_markings"] = "Dark Tiger Body" H.dna.features["legs"] = "Digitigrade" H.dna.features["taur_body"] = "None" H.left_eye_color = "fee5a3" diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index ec6a430c0c..8a7c3a81bd 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -56,6 +56,7 @@ new /datum/data/mining_equipment("Ice hiking boots", /obj/item/clothing/shoes/winterboots/ice_boots, 2500), new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/survivalcapsule/luxury, 3000), new /datum/data/mining_equipment("Luxury Bar Capsule", /obj/item/survivalcapsule/luxury/elitebar, 10000), + new /datum/data/mining_equipment("Empty Capsule", /obj/item/survivalcapsule/luxury/empty, 5000), new /datum/data/mining_equipment("Nanotrasen Minebot", /mob/living/simple_animal/hostile/mining_drone, 800), new /datum/data/mining_equipment("Minebot Melee Upgrade", /obj/item/mine_bot_upgrade, 400), new /datum/data/mining_equipment("Minebot Armor Upgrade", /obj/item/mine_bot_upgrade/health, 400), diff --git a/code/modules/mining/shelters.dm b/code/modules/mining/shelters.dm index 2481634e5f..6bd04ffd6d 100644 --- a/code/modules/mining/shelters.dm +++ b/code/modules/mining/shelters.dm @@ -73,3 +73,15 @@ . = ..() whitelisted_turfs = typecacheof(/turf/closed/mineral) banned_objects = typecacheof(/obj/structure/stone_tile) + +/datum/map_template/shelter/delta + name = "Shelter Delta" + shelter_id = "shelter_delta" + description = "A massive but barebones survival capsule useful\ + for projects that require great deals of space." + mappath = "_maps/templates/shelter_4.dmm" + +/datum/map_template/shelter/delta/New() + . = ..() + whitelisted_turfs = typecacheof(/turf/closed/mineral) + banned_objects = typecacheof(/obj/structure/stone_tile) diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index d198140c5f..a9233938ab 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -54,6 +54,8 @@ mannequin.job = previewJob.title previewJob.equip(mannequin, TRUE, preference_source = parent) + mannequin.regenerate_icons() + COMPILE_OVERLAYS(mannequin) parent.show_character_previews(new /mutable_appearance(mannequin)) unset_busy_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES) diff --git a/code/modules/mob/dead/new_player/sprite_accessories/Citadel_Snowflake.dm b/code/modules/mob/dead/new_player/sprite_accessories/Citadel_Snowflake.dm index f58788d9af..016b12d8ec 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/Citadel_Snowflake.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/Citadel_Snowflake.dm @@ -12,6 +12,7 @@ name = "DataShark" icon_state = "datashark" ckeys_allowed = list("rubyflamewing") + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_GREEN, "Left Leg" = MATRIX_GREEN, "Right Leg" = MATRIX_GREEN, "Left Arm" = MATRIX_GREEN, "Right Arm" = MATRIX_GREEN) //Sabresune /datum/sprite_accessory/ears/mam_ears/sabresune @@ -39,6 +40,7 @@ name = "Sabresune" icon_state = "sabresune" ckeys_allowed = list("poojawa") + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) //Lunasune /datum/sprite_accessory/ears/mam_ears/lunasune diff --git a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm index bc6c4899dd..148af35247 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm @@ -1,39 +1,3 @@ -/****************************************** -************* Lizard Markings ************* -*******************************************/ - -/datum/sprite_accessory/body_markings - icon = 'icons/mob/mutant_bodyparts.dmi' - relevant_layers = list(BODY_ADJ_LAYER) - mutant_part_string = "body_markings" - -/datum/sprite_accessory/body_markings/none - name = "None" - icon_state = "none" - relevant_layers = null - -/datum/sprite_accessory/body_markings/dtiger - name = "Dark Tiger Body" - icon_state = "dtiger" - gender_specific = 1 - -/datum/sprite_accessory/body_markings/guilmon - name = "Guilmon" - icon_state = "guilmon" - color_src = MATRIXED - icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' - matrixed_sections = MATRIX_ALL - -/datum/sprite_accessory/body_markings/ltiger - name = "Light Tiger Body" - icon_state = "ltiger" - gender_specific = 1 - -/datum/sprite_accessory/body_markings/lbelly - name = "Light Belly" - icon_state = "lbelly" - gender_specific = 1 - /****************************************** ************ Furry Markings *************** *******************************************/ @@ -49,7 +13,8 @@ gender_specific = 0 icon = 'modular_citadel/icons/mob/mam_markings.dmi' recommended_species = list("mammal", "xeno", "slimeperson", "podweak") - matrixed_sections = MATRIX_ALL + matrixed_sections = MATRIX_ALL // this value is used if there is no value in covered_limbs, don't rely on it, it's a backup value + var/list/covered_limbs = list("Head", "Chest", "Left Leg", "Right Leg", "Left Arm", "Right Arm") /datum/sprite_accessory/mam_body_markings/none name = "None" @@ -62,87 +27,107 @@ /datum/sprite_accessory/mam_body_markings/redpanda name = "Redpanda" icon_state = "redpanda" + covered_limbs = list("Head" = MATRIX_RED_BLUE, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/bat name = "Bat" icon_state = "bat" + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_ALL, "Left Leg" = MATRIX_RED_BLUE, "Right Leg" = MATRIX_RED_BLUE, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/bee name = "Bee" icon_state = "bee" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_GREEN, "Left Leg" = MATRIX_GREEN, "Right Leg" = MATRIX_GREEN, "Left Arm" = MATRIX_GREEN, "Right Arm" = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/belly name = "Belly" icon_state = "belly" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_GREEN, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/bellyslim name = "Bellyslim" icon_state = "bellyslim" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/cow name = "Bovine" icon_state = "bovine" + covered_limbs = list("Head" = MATRIX_ALL, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_ALL, "Right Leg" = MATRIX_ALL, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/corgi name = "Corgi" icon_state = "corgi" + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/corvid name = "Corvid" icon_state = "corvid" + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_ALL, "Right Leg" = MATRIX_ALL, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/dalmation name = "Dalmation" icon_state = "dalmation" + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/deer name = "Deer" icon_state = "deer" + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_GREEN_BLUE, "Right Leg" = MATRIX_GREEN_BLUE, "Left Arm" = MATRIX_GREEN, "Right Arm" = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/dog name = "Dog" icon_state = "dog" + covered_limbs = list("Head" = MATRIX_RED_BLUE, "Chest" = MATRIX_ALL, "Left Leg" = MATRIX_GREEN_BLUE, "Right Leg" = MATRIX_GREEN_BLUE, "Left Arm" = MATRIX_ALL, "Right Arm" = MATRIX_ALL) /datum/sprite_accessory/mam_body_markings/eevee name = "Eevee" icon_state = "eevee" + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/fennec name = "Fennec" icon_state = "Fennec" + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/fox name = "Fox" icon_state = "fox" + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_ALL, "Right Leg" = MATRIX_ALL, "Left Arm" = MATRIX_RED_BLUE, "Right Arm" = MATRIX_RED_BLUE) /datum/sprite_accessory/mam_body_markings/frog name = "Frog" icon_state = "frog" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_GREEN, "Left Leg" = MATRIX_GREEN, "Right Leg" = MATRIX_GREEN, "Left Arm" = MATRIX_GREEN, "Right Arm" = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/goat name = "Goat" icon_state = "goat" + covered_limbs = list("Head" = MATRIX_RED, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED_BLUE, "Right Leg" = MATRIX_RED_BLUE, "Left Arm" = MATRIX_RED_BLUE, "Right Arm" = MATRIX_RED_BLUE) /datum/sprite_accessory/mam_body_markings/handsfeet name = "Handsfeet" icon_state = "handsfeet" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + covered_limbs = list("Head" = MATRIX_RED, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/hawk name = "Hawk" icon_state = "hawk" + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_ALL, "Right Leg" = MATRIX_ALL, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/husky name = "Husky" icon_state = "husky" + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_ALL, "Right Leg" = MATRIX_ALL, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/hyena name = "Hyena" icon_state = "hyena" + covered_limbs = list("Head" = MATRIX_ALL, "Chest" = MATRIX_ALL, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/insect name = "Insect" @@ -152,78 +137,118 @@ /datum/sprite_accessory/mam_body_markings/lab name = "Lab" icon_state = "lab" + covered_limbs = list("Head" = MATRIX_RED, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/orca name = "Orca" icon_state = "orca" + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/otie name = "Otie" icon_state = "otie" + covered_limbs = list("Head" = MATRIX_ALL, "Chest" = MATRIX_ALL, "Left Leg" = MATRIX_ALL, "Right Leg" = MATRIX_ALL, "Left Arm" = MATRIX_ALL, "Right Arm" = MATRIX_ALL) /datum/sprite_accessory/mam_body_markings/otter name = "Otter" icon_state = "otter" + covered_limbs = list("Head" = MATRIX_ALL, "Chest" = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/panther name = "Panther" icon_state = "panther" + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/plain name = "Plain" icon_state = "plain" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + covered_limbs = list("Head" = MATRIX_RED, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/possum name = "Possum" icon_state = "possum" + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_BLUE, "Right Leg" = MATRIX_RED_BLUE, "Left Arm" = MATRIX_RED_BLUE, "Right Arm" = MATRIX_RED_BLUE) /datum/sprite_accessory/mam_body_markings/raccoon name = "Raccoon" icon_state = "raccoon" + covered_limbs = list("Head" = MATRIX_ALL, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_ALL, "Right Leg" = MATRIX_ALL, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/sergal name = "Sergal" icon_state = "sergal" + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/pede name = "Scolipede" icon_state = "scolipede" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + covered_limbs = list("Head" = MATRIX_GREEN, "Chest" = MATRIX_GREEN_BLUE, "Left Leg" = MATRIX_GREEN, "Right Leg" = MATRIX_GREEN, "Left Arm" = MATRIX_GREEN, "Right Arm" = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/shark name = "Shark" icon_state = "shark" + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/shepherd name = "Shepherd" icon_state = "shepherd" + covered_limbs = list("Head" = MATRIX_ALL, "Chest" = MATRIX_ALL, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/skunk name = "Skunk" icon_state = "skunk" + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/tajaran name = "Tajaran" icon_state = "tajaran" + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/tiger name = "Tiger" icon_state = "tiger" + covered_limbs = list("Head" = MATRIX_ALL, "Chest" = MATRIX_ALL, "Left Leg" = MATRIX_ALL, "Right Leg" = MATRIX_ALL, "Left Arm" = MATRIX_RED_BLUE, "Right Arm" = MATRIX_RED_BLUE) /datum/sprite_accessory/mam_body_markings/turian name = "Turian" icon_state = "turian" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/wolf name = "Wolf" icon_state = "wolf" + covered_limbs = list("Head" = MATRIX_ALL, "Chest" = MATRIX_ALL, "Left Leg" = MATRIX_RED_BLUE, "Right Leg" = MATRIX_RED_BLUE, "Left Arm" = MATRIX_RED_BLUE, "Right Arm" = MATRIX_RED_BLUE) /datum/sprite_accessory/mam_body_markings/xeno name = "Xeno" icon_state = "xeno" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + covered_limbs = list("Head" = MATRIX_BLUE, "Chest" = MATRIX_GREEN, "Left Leg" = MATRIX_GREEN, "Right Leg" = MATRIX_GREEN, "Left Arm" = MATRIX_GREEN, "Right Arm" = MATRIX_GREEN) + +// sticking old lizard markings here for now +/datum/sprite_accessory/mam_body_markings/dtiger + name = "Dark Tiger Body" + icon_state = "dtiger" + covered_limbs = list("Head" = MATRIX_RED, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) + +/datum/sprite_accessory/mam_body_markings/guilmon + name = "Guilmon" + icon_state = "guilmon" + icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + covered_limbs = list("Head" = MATRIX_RED_BLUE, "Chest" = MATRIX_GREEN_BLUE, "Left Leg" = MATRIX_BLUE, "Right Leg" = MATRIX_BLUE, "Left Arm" = MATRIX_GREEN_BLUE, "Right Arm" = MATRIX_GREEN_BLUE) + +/datum/sprite_accessory/mam_body_markings/ltiger + name = "Light Tiger Body" + icon_state = "ltiger" + covered_limbs = list("Head" = MATRIX_RED, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) + +/datum/sprite_accessory/mam_body_markings/lbelly + name = "Light Belly" + icon_state = "lbelly" + covered_limbs = list("Head" = MATRIX_RED, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) /****************************************** ************* Insect Markings ************* diff --git a/code/modules/mob/dead/new_player/sprite_accessories/ears.dm b/code/modules/mob/dead/new_player/sprite_accessories/ears.dm index 8fb735e10a..b8fab56159 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/ears.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/ears.dm @@ -162,12 +162,19 @@ icon = 'modular_citadel/icons/mob/mam_ears.dmi' /datum/sprite_accessory/ears/human/rabbit - name = "Rabbit" + name = "Rabbit (Lop-eared)" icon_state = "rabbit" color_src = MATRIXED matrixed_sections = MATRIX_RED_GREEN icon = 'modular_citadel/icons/mob/mam_ears.dmi' +/datum/sprite_accessory/ears/human/rabbitalt + name = "Rabbit (Straight-eared)" + icon_state = "rabbitalt" + color_src = MATRIXED + matrixed_sections = MATRIX_ALL + icon = 'modular_citadel/icons/mob/mam_ears.dmi' + /datum/sprite_accessory/ears/human/pede name = "Scolipede" icon_state = "pede" @@ -296,7 +303,7 @@ /datum/sprite_accessory/ears/mam_ears/deer name = "Deer" icon_state = "deer" - color_src = MUTCOLORS3 + matrixed_sections = MATRIX_RED_GREEN /datum/sprite_accessory/ears/mam_ears/eevee name = "Eevee" @@ -359,10 +366,15 @@ matrixed_sections = MATRIX_RED_GREEN /datum/sprite_accessory/ears/mam_ears/rabbit - name = "Rabbit" + name = "Rabbit (Lop-eared)" icon_state = "rabbit" matrixed_sections = MATRIX_RED_GREEN +/datum/sprite_accessory/ears/mam_ears/rabbitalt + name = "Rabbit (Straight-eared)" + icon_state = "rabbitalt" + matrixed_sections = MATRIX_ALL + /datum/sprite_accessory/ears/mam_ears/pede name = "Scolipede" icon_state = "pede" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm b/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm index a4bd0afdcb..88dda923a0 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm @@ -17,6 +17,10 @@ name = "Adhara" icon_state = "hair_adhara" +/datum/sprite_accessory/hair/africanpigtails + name = "African Pig Tails" + icon_state = "hair_africanpigtails" + /datum/sprite_accessory/hair/afro name = "Afro" icon_state = "hair_afro" @@ -25,10 +29,26 @@ name = "Afro 2" icon_state = "hair_afro2" +/datum/sprite_accessory/hair/afro2alt + name = "Afro 2 (Alt)" + icon_state = "hair_afro2alt" + /datum/sprite_accessory/hair/afro_large name = "Afro (Large)" icon_state = "hair_bigafro" +/datum/sprite_accessory/hair/afropuffdouble + name = "Afropuff (Double)" + icon_state = "hair_afropuffdouble" + +/datum/sprite_accessory/hair/afropuffleft + name = "Afropuff (Left)" + icon_state = "hair_afropuffleft" + +/datum/sprite_accessory/hair/afropuffright + name = "Afropuff (Right)" + icon_state = "hair_afropuffright" + /datum/sprite_accessory/hair/antenna name = "Ahoge" icon_state = "hair_antenna" @@ -41,10 +61,18 @@ name = "Anita" icon_state = "hair_anita" +/datum/sprite_accessory/hair/astolfo + name = "Astolfo" + icon_state = "hair_astolfo" + /datum/sprite_accessory/hair/balding name = "Balding Hair" icon_state = "hair_e" +/datum/sprite_accessory/hair/baum + name = "Baum" + icon_state = "hair_baum" + /datum/sprite_accessory/hair/bedhead name = "Bedhead" icon_state = "hair_bedhead" @@ -85,6 +113,14 @@ name = "Belle" icon_state = "hair_belle" +/datum/sprite_accessory/hair/bluntbangs + name = "Bluntbangs" + icon_state = "hair_bluntbangs" + +/datum/sprite_accessory/hair/bluntbangsalt + name = "Bluntbangs (Alt)" + icon_state = "hair_bluntbangsalt" + /datum/sprite_accessory/hair/bob name = "Bob Hair" icon_state = "hair_bob" @@ -109,6 +145,10 @@ name = "Bobcut (Alt)" icon_state = "hair_bobcutalt" +/datum/sprite_accessory/hair/bobcutalt2 + name = "Bobcut (Alt) 2" + icon_state = "hair_bobcutalt2" + /datum/sprite_accessory/hair/boddicker name = "Boddicker" icon_state = "hair_boddicker" @@ -205,6 +245,14 @@ name = "CIA" icon_state = "hair_cia" +/datum/sprite_accessory/hair/combedback + name = "Combed Back" + icon_state = "hair_combedback" + +/datum/sprite_accessory/hair/combedbob + name = "Combed Bob" + icon_state = "hair_combedbob" + /datum/sprite_accessory/hair/combover name = "Combover" icon_state = "hair_combover" @@ -233,6 +281,14 @@ name = "Cornrow Tail" icon_state = "hair_cornrowtail" +/datum/sprite_accessory/hair/cotton + name = "Cotton" + icon_state = "hair_cotton" + +/datum/sprite_accessory/hair/cottonalt + name = "Cotton (Alt)" + icon_state = "hair_cottonalt" + /datum/sprite_accessory/hair/country name = "Country" icon_state = "hair_country" @@ -261,6 +317,10 @@ name = "Devil Lock" icon_state = "hair_devillock" +/datum/sprite_accessory/hair/diagonalbangs + name = "Diagonal Bangs" + icon_state = "hair_diagonalbangs" + /datum/sprite_accessory/hair/dreadlocks name = "Dreadlocks" icon_state = "hair_dreads" @@ -337,10 +397,22 @@ name = "Fluffy" icon_state = "hair_fluffy" +/datum/sprite_accessory/hair/fortuneteller + name = "Fortune Teller" + icon_state = "hair_fortuneteller" + /datum/sprite_accessory/hair/fringetail name = "Fringe Tail" icon_state = "hair_fringetail" +/datum/sprite_accessory/hair/froofy + name = "Froofy" + icon_state = "hair_froofy" + +/datum/sprite_accessory/hair/geisha + name = "Geisha" + icon_state = "hair_geisha" + /datum/sprite_accessory/hair/gelled name = "Gelled Back" icon_state = "hair_gelled" @@ -349,6 +421,26 @@ name = "Gentle" icon_state = "hair_gentle" +/datum/sprite_accessory/hair/glammetal + name = "Glam Metal" + icon_state = "hair_glammetal" + +/datum/sprite_accessory/hair/gloomy + name = "Gloomy" + icon_state = "hair_gloomy" + +/datum/sprite_accessory/hair/gloomylong + name = "Gloomy (Long)" + icon_state = "hair_gloomylong" + +/datum/sprite_accessory/hair/hajime + name = "Hajime" + icon_state = "hair_hajime" + +/datum/sprite_accessory/hair/hajimealt + name = "Hajime (Alt)" + icon_state = "hair_hajimealt" + /datum/sprite_accessory/hair/halfbang name = "Half-banged Hair" icon_state = "hair_halfbang" @@ -365,6 +457,10 @@ name = "Half-shaved Hair" icon_state = "hair_halfshaved" +/datum/sprite_accessory/hair/harold + name = "Harold" + icon_state = "hair_harold" + /datum/sprite_accessory/hair/hedgehog name = "Hedgehog Hair" icon_state = "hair_hedgehog" @@ -393,6 +489,10 @@ name = "Hitop" icon_state = "hair_hitop" +/datum/sprite_accessory/hair/inari + name = "Inari" + icon_state = "hair_inari" + /datum/sprite_accessory/hair/inkling name = "Inkling" icon_state = "hair_inkling" @@ -421,14 +521,18 @@ name = "Keanu" icon_state = "hair_keanu" -/datum/sprite_accessory/hair/kusangi - name = "Kusanagi" - icon_state = "hair_kusanagi" +/datum/sprite_accessory/hair/kisaragi + name = "Kisaragi" + icon_state = "hair_kisaragi" /datum/sprite_accessory/hair/kleeia name = "Kleeia" icon_state = "hair_kleeia" +/datum/sprite_accessory/hair/kusangi + name = "Kusanagi" + icon_state = "hair_kusanagi" + /datum/sprite_accessory/hair/long name = "Long Hair 1" icon_state = "hair_long" @@ -449,6 +553,10 @@ name = "Long Over Eye" icon_state = "hair_longovereye" +/datum/sprite_accessory/hair/long_over_eyealt + name = "Long Over Eye (Alt)" + icon_state = "hair_longovereyealt" + /datum/sprite_accessory/hair/longbangs name = "Long Bangs" icon_state = "hair_lbangs" @@ -489,10 +597,6 @@ name = "Mohawk" icon_state = "hair_d" -/datum/sprite_accessory/hair/newyou - name = "New You" - icon_state = "hair_newyou" - /datum/sprite_accessory/hair/reversemohawk name = "Mohawk (Reverse)" icon_state = "hair_reversemohawk" @@ -509,6 +613,10 @@ name = "Mulder" icon_state = "hair_mulder" +/datum/sprite_accessory/hair/newyou + name = "New You" + icon_state = "hair_newyou" + /datum/sprite_accessory/hair/nia name = "Nia" icon_state = "hair_nia" @@ -579,10 +687,18 @@ name = "Pompadour (Big)" icon_state = "hair_bigpompadour" +/datum/sprite_accessory/hair/bigpompadouralt + name = "Pompadour (Big) (Alt)" + icon_state = "hair_bigpompadouralt" + /datum/sprite_accessory/hair/ponytail1 name = "Ponytail" icon_state = "hair_ponytail" +/datum/sprite_accessory/hair/ponytail1alt + name = "Ponytail (Alt)" + icon_state = "hair_ponytailalt" + /datum/sprite_accessory/hair/ponytail2 name = "Ponytail 2" icon_state = "hair_ponytail2" @@ -591,14 +707,26 @@ name = "Ponytail 3" icon_state = "hair_ponytail3" +/datum/sprite_accessory/hair/ponytail3alt + name = "Ponytail 3 (Alt)" + icon_state = "hair_ponytail3alt" + /datum/sprite_accessory/hair/ponytail4 name = "Ponytail 4" icon_state = "hair_ponytail4" +/datum/sprite_accessory/hair/ponytail4alt + name = "Ponytail 4 (Alt)" + icon_state = "hair_ponytail4alt" + /datum/sprite_accessory/hair/ponytail5 name = "Ponytail 5" icon_state = "hair_ponytail5" +/datum/sprite_accessory/hair/ponytail6 + name = "Ponytail 6" + icon_state = "hair_ponytail6" + /datum/sprite_accessory/hair/highponytail name = "Ponytail (High)" icon_state = "hair_highponytail" @@ -623,6 +751,10 @@ name = "Ponytail (Side) 4" icon_state = "hair_sidetail4" +/datum/sprite_accessory/hair/sidetail5 + name = "Ponytail (Side) 5" + icon_state = "hair_sidetail5" + /datum/sprite_accessory/hair/sharptail name = "Ponytail (Sharp)" icon_state = "hair_sharptail" @@ -639,10 +771,18 @@ name = "Poofy 2" icon_state = "hair_poofy2" +/datum/sprite_accessory/hair/quadcurls + name = "Quad Curls" + icon_state = "hair_quadcurls" + /datum/sprite_accessory/hair/quiff name = "Quiff" icon_state = "hair_quiff" +/datum/sprite_accessory/hair/rockstar + name = "Rockstar" + icon_state = "hair_rockstar" + /datum/sprite_accessory/hair/ronin name = "Ronin" icon_state = "hair_ronin" @@ -759,6 +899,10 @@ name = "Slightly Long Hair" icon_state = "hair_protagonist" +/datum/sprite_accessory/hair/slightlymessy + name = "Slightly Messy Hair" + icon_state = "hair_slightlymessy" + /datum/sprite_accessory/hair/spiky name = "Spiky" icon_state = "hair_spikey" @@ -771,6 +915,26 @@ name = "Spiky 3" icon_state = "hair_spiky2" +/datum/sprite_accessory/hair/slimedroplet + name = "Slime Droplet" + icon_state = "hair_slimedroplet" + +/datum/sprite_accessory/hair/slimedropletalt + name = "Slime Droplet (Alt)" + icon_state = "hair_slimedropletalt" + +/datum/sprite_accessory/hair/slimespikes + name = "Slime Spikes" + icon_state = "hair_slimespikes" + +/datum/sprite_accessory/hair/slimetendrils + name = "Slime Tendrils" + icon_state = "hair_slimetendrils" + +/datum/sprite_accessory/hair/slimetendrilsalt + name = "Slime Tendrils (Alt)" + icon_state = "hair_slimetendrilsalt" + /datum/sprite_accessory/hair/supernova name = "Supernova" icon_state = "hair_supernova" @@ -851,6 +1015,10 @@ name = "Very Long Hair 2" icon_state = "hair_longest" +/datum/sprite_accessory/hair/longestalt + name = "Very Long Hair 2 (Alt)" + icon_state = "hair_longestalt" + /datum/sprite_accessory/hair/longest2 name = "Very Long Over Eye" icon_state = "hair_longest2" @@ -886,3 +1054,7 @@ /datum/sprite_accessory/hair/ziegler name = "Ziegler" icon_state = "hair_ziegler" + +/datum/sprite_accessory/hair/zone + name = "Zone" + icon_state = "hair_zone" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/synthliz.dm b/code/modules/mob/dead/new_player/sprite_accessories/synthliz.dm index bc4d4dd00d..c7cd699ec9 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/synthliz.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/synthliz.dm @@ -32,20 +32,20 @@ icon = 'modular_citadel/icons/mob/synthliz_body_markings.dmi' name = "Synthetic Lizard - Pecs" icon_state = "synthlizpecs" - matrixed_sections = MATRIX_GREEN + covered_limbs = list("Chest" = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/synthliz/synthliz_pecslight icon = 'modular_citadel/icons/mob/synthliz_body_markings.dmi' name = "Synthetic Lizard - Pecs Light" icon_state = "synthlizpecslight" - matrixed_sections = MATRIX_GREEN_BLUE + covered_limbs = list("Chest" = MATRIX_GREEN_BLUE) /datum/sprite_accessory/mam_body_markings/synthliz recommended_species = list("synthliz") icon = 'modular_citadel/icons/mob/synthliz_body_markings.dmi' name = "Synthetic Lizard - Plates" icon_state = "synthlizscutes" - matrixed_sections = MATRIX_GREEN + covered_limbs = list("Chest" = MATRIX_GREEN) //Synth tails /datum/sprite_accessory/tails/mam_tails/synthliz diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 31ab636ceb..aa14fe6013 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -41,10 +41,10 @@ . += "[t_He] [t_is] wearing [w_uniform.get_examine_string(user)][accessory_msg]." //head - if(head && !(head.item_flags & EXAMINE_SKIP)) + if(head && !(head.obj_flags & EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [head.get_examine_string(user)] on [t_his] head." //suit/armor - if(wear_suit && !(wear_suit.item_flags & EXAMINE_SKIP)) + if(wear_suit && !(wear_suit.obj_flags & EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [wear_suit.get_examine_string(user)]." //suit/armor storage if(s_store && !(SLOT_S_STORE in obscured)) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 1aa3749589..3f456a9b43 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -149,6 +149,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) /// var/sound/attack_sound = 'sound/weapons/punch1.ogg' var/sound/miss_sound = 'sound/weapons/punchmiss.ogg' + var/attack_sound_override = null var/list/mob/living/ignored_by = list() // list of mobs that will ignore this species //Breathing! @@ -569,12 +570,10 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) /datum/species/proc/remove_blacklisted_quirks(mob/living/carbon/C) var/mob/living/L = C.mind?.current if(istype(L)) - var/list/my_quirks = L.client?.prefs.all_quirks.Copy() - SSquirks.filter_quirks(my_quirks, blacklisted_quirks) for(var/q in L.roundstart_quirks) var/datum/quirk/Q = q - if(!(SSquirks.quirk_name_by_path(Q.type) in my_quirks)) - L.remove_quirk(Q.type) + if(Q.type in blacklisted_quirks) + qdel(Q) removed_quirks += Q.type // restore any quirks that we removed @@ -1615,7 +1614,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) var/armor_block = target.run_armor_check(affecting, "melee") - playsound(target.loc, user.dna.species.attack_sound, 25, 1, -1) + playsound(target.loc, user.dna.species.attack_sound_override || attack_sound, 25, 1, -1) target.visible_message("[user] [atk_verb]ed [target]!", \ "[user] [atk_verb]ed you!", null, COMBAT_MESSAGE_RANGE, null, \ user, "You [atk_verb]ed [target]!") diff --git a/code/modules/mob/living/carbon/human/species_types/anthropomorph.dm b/code/modules/mob/living/carbon/human/species_types/anthropomorph.dm index 328a557931..95cb9cca59 100644 --- a/code/modules/mob/living/carbon/human/species_types/anthropomorph.dm +++ b/code/modules/mob/living/carbon/human/species_types/anthropomorph.dm @@ -5,7 +5,7 @@ species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR,HORNCOLOR,WINGCOLOR,HAS_FLESH,HAS_BONE) inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BEAST mutant_bodyparts = list("mcolor" = "FFFFFF","mcolor2" = "FFFFFF","mcolor3" = "FFFFFF", "mam_snouts" = "Husky", "mam_tail" = "Husky", "mam_ears" = "Husky", "deco_wings" = "None", - "mam_body_markings" = "Husky", "taur" = "None", "horns" = "None", "legs" = "Plantigrade", "meat_type" = "Mammalian") + "mam_body_markings" = list(), "taur" = "None", "horns" = "None", "legs" = "Plantigrade", "meat_type" = "Mammalian") attack_verb = "claw" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index cfbb8c31c0..07fa78a88a 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -11,7 +11,7 @@ coldmod = 1.5 heatmod = 0.67 mutant_bodyparts = list("mcolor" = "0F0", "mcolor2" = "0F0", "mcolor3" = "0F0", "tail_lizard" = "Smooth", "mam_snouts" = "Round", - "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None", + "horns" = "None", "frills" = "None", "spines" = "None", "mam_body_markings" = list(), "legs" = "Digitigrade", "taur" = "None", "deco_wings" = "None") attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm index 0fcafaa208..ed0fa9ae87 100644 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm @@ -74,7 +74,7 @@ name = "Anthropomorphic Plant" id = SPECIES_POD_WEAK species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,MUTCOLORS,CAN_SCAR,HAS_FLESH,HAS_BONE) - mutant_bodyparts = list("mcolor" = "FFFFFF","mcolor2" = "FFFFFF","mcolor3" = "FFFFFF", "mam_snouts" = "Husky", "mam_tail" = "Husky", "mam_ears" = "Husky", "mam_body_markings" = "Husky", "taur" = "None", "legs" = "Normal Legs") + mutant_bodyparts = list("mcolor" = "FFFFFF","mcolor2" = "FFFFFF","mcolor3" = "FFFFFF", "mam_snouts" = "Husky", "mam_tail" = "Husky", "mam_ears" = "Husky", "mam_body_markings" = list(), "taur" = "None", "legs" = "Normal Legs") limbs_id = SPECIES_POD light_nutrition_gain_factor = 3 light_bruteheal = -0.2 diff --git a/code/modules/mob/living/carbon/human/species_types/xeno.dm b/code/modules/mob/living/carbon/human/species_types/xeno.dm index 9d5a700417..e9d9aa2d5b 100644 --- a/code/modules/mob/living/carbon/human/species_types/xeno.dm +++ b/code/modules/mob/living/carbon/human/species_types/xeno.dm @@ -5,7 +5,7 @@ say_mod = "hisses" default_color = "00FF00" species_traits = list(MUTCOLORS,EYECOLOR,LIPS,CAN_SCAR,HAS_FLESH,HAS_BONE) - mutant_bodyparts = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard", "mam_body_markings" = "Xeno","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None", "legs" = "Digitigrade","deco_wings"= "None") + mutant_bodyparts = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard", "mam_body_markings" = list(),"mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None", "legs" = "Digitigrade","deco_wings"= "None") attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 5f77d25eae..f18d768df3 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -729,11 +729,8 @@ use_mob_overlay_icon: if FALSE, it will always use the default_icon_file even if . += "-[BP.digitigrade_type]" if(BP.dmg_overlay_type) . += "-[BP.dmg_overlay_type]" - if(BP.body_markings) - . += "-[BP.body_markings]" - if(length(BP.markings_color) && length(BP.markings_color[1])) - for(var/color in BP.markings_color[1]) - . += "-[color]" + if(BP.body_markings_list) + . += "-[safe_json_encode(BP.body_markings_list)]" if(BP.icon) . += "-[BP.icon]" else diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 6aaa2cca87..ae716efc71 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -542,8 +542,48 @@ update_stat() med_hud_set_health() med_hud_set_status() + update_health_hud() -//proc used to ressuscitate a mob +/mob/living/update_health_hud() + var/severity = 0 + var/healthpercent = (health/maxHealth) * 100 + if(hud_used?.healthdoll) //to really put you in the boots of a simplemob + var/obj/screen/healthdoll/living/livingdoll = hud_used.healthdoll + switch(healthpercent) + if(100 to INFINITY) + livingdoll.icon_state = "living0" + if(80 to 100) + livingdoll.icon_state = "living1" + severity = 1 + if(60 to 80) + livingdoll.icon_state = "living2" + severity = 2 + if(40 to 60) + livingdoll.icon_state = "living3" + severity = 3 + if(20 to 40) + livingdoll.icon_state = "living4" + severity = 4 + if(1 to 20) + livingdoll.icon_state = "living5" + severity = 5 + else + livingdoll.icon_state = "living6" + severity = 6 + if(!livingdoll.filtered) + livingdoll.filtered = TRUE + var/icon/mob_mask = icon(icon, icon_state) + if(mob_mask.Height() > world.icon_size || mob_mask.Width() > world.icon_size) + var/health_doll_icon_state = health_doll_icon ? health_doll_icon : "megasprite" + mob_mask = icon('icons/mob/screen_gen.dmi', health_doll_icon_state) //swap to something generic if they have no special doll + UNLINT(livingdoll.filters += filter(type="alpha", icon = mob_mask)) + livingdoll.filters += filter(type="drop_shadow", size = -1) + if(severity > 0) + overlay_fullscreen("brute", /obj/screen/fullscreen/brute, severity) + else + clear_fullscreen("brute") + +//Proc used to resuscitate a mob, for full_heal see fully_heal() /mob/living/proc/revive(full_heal = FALSE, admin_revive = FALSE) SEND_SIGNAL(src, COMSIG_LIVING_REVIVE, full_heal, admin_revive) if(full_heal) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 386f1174e1..f5919f389c 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -94,6 +94,7 @@ var/smoke_delay = 0 //used to prevent spam with smoke reagent reaction on mob. var/bubble_icon = "default" //what icon the mob uses for speechbubbles + var/health_doll_icon //if this exists AND the normal sprite is bigger than 32x32, this is the replacement icon state (because health doll size limitations). the icon will always be screen_gen.dmi var/last_bumped = 0 var/unique_name = 0 //if a mob's name should be appended with an id when created e.g. Mob (666) diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index c0a4822b6d..57ddbe6290 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -149,6 +149,7 @@ icon_state = "alienq" icon_living = "alienq" icon_dead = "alienq_dead" + health_doll_icon = "alienq" bubble_icon = "alienroyal" move_to_delay = 4 maxHealth = 400 diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index 51a646f668..8388d6501a 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -73,6 +73,7 @@ icon_living = "megacarp" icon_dead = "megacarp_dead" icon_gib = "megacarp_gib" + health_doll_icon = "megacarp" regen_amount = 6 maxHealth = 30 diff --git a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm index ec0b7acd07..67cecd3832 100644 --- a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm +++ b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm @@ -9,6 +9,7 @@ icon_state = "crawling" icon_living = "crawling" icon_dead = "dead" + health_doll_icon = "crawling" mob_biotypes = MOB_ORGANIC|MOB_HUMANOID speak_chance = 80 maxHealth = 220 diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm index 61f1fe0c9d..a60c5504e6 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm @@ -28,6 +28,7 @@ Difficulty: Medium icon_state = "miner" icon_living = "miner" icon = 'icons/mob/broadMobs.dmi' + health_doll_icon = "miner" mob_biotypes = MOB_ORGANIC|MOB_HUMANOID light_color = "#E4C7C5" movement_type = GROUND diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index b1441ce55f..b80e6cc72f 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -33,6 +33,7 @@ Difficulty: Hard icon_state = "bubblegum" icon_living = "bubblegum" icon_dead = "" + health_doll_icon = "bubblegum" friendly_verb_continuous = "stares down" friendly_verb_simple = "stare down" icon = 'icons/mob/lavaland/96x96megafauna.dmi' @@ -134,7 +135,7 @@ Difficulty: Hard /mob/living/simple_animal/hostile/megafauna/bubblegum/grant_achievement(medaltype,scoretype) . = ..() if(.) - SSshuttle.shuttle_purchase_requirements_met |= "bubblegum" + SSshuttle.shuttle_purchase_requirements_met["bubblegum"] = TRUE /mob/living/simple_animal/hostile/megafauna/bubblegum/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect) if(!charging) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 787c15a5b4..5751512b19 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -32,6 +32,7 @@ Difficulty: Very Hard icon_state = "eva" icon_living = "eva" icon_dead = "dragon_dead" + health_doll_icon = "eva" friendly_verb_continuous = "stares down" friendly_verb_simple = "stare down" icon = 'icons/mob/lavaland/96x96megafauna.dmi' diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index 6c1e9eef6e..a3d51744b9 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -48,6 +48,7 @@ Difficulty: Medium icon_state = "dragon" icon_living = "dragon" icon_dead = "dragon_dead" + health_doll_icon = "dragon" friendly_verb_continuous = "stares down" friendly_verb_simple = "stare down" speak_emote = list("roars") diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index 32300dea18..14b71b3bac 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -44,6 +44,7 @@ Difficulty: Normal attack_sound = 'sound/weapons/sonic_jackhammer.ogg' icon_state = "hierophant" icon_living = "hierophant" + health_doll_icon = "hierophant" friendly_verb_continuous = "stares down" friendly_verb_simple = "stare down" icon = 'icons/mob/lavaland/hierophant_new.dmi' diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm index 07c1957da2..15bfe2b7f7 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm @@ -26,6 +26,7 @@ SHITCODE AHEAD. BE ADVISED. Also comment extravaganza spacewalk = TRUE icon_state = "mega_legion" icon_living = "mega_legion" + health_doll_icon = "mega_legion" desc = "One of many." icon = 'icons/mob/lavaland/96x96megafauna.dmi' attack_verb_continuous = "chomps" diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm index bda898ef17..f2ece50af2 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm @@ -75,6 +75,7 @@ icon_living = "watcher" icon_aggro = "watcher" icon_dead = "watcher_dead" + health_doll_icon = "watcher" pixel_x = -10 throw_message = "bounces harmlessly off of" melee_damage_lower = 15 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm index ef51dc572f..5ee249c767 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm @@ -25,6 +25,7 @@ icon_aggro = "broodmother" icon_dead = "egg_sac" icon_gib = "syndicate_gib" + health_doll_icon = "broodmother" maxHealth = 800 health = 800 melee_damage_lower = 30 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm index 032bc2d60d..4425bce532 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm @@ -24,6 +24,7 @@ icon_aggro = "herald" icon_dead = "herald_dying" icon_gib = "syndicate_gib" + health_doll_icon = "herald" maxHealth = 800 health = 800 melee_damage_lower = 20 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm index 6c13bb903e..dca508cfeb 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm @@ -24,6 +24,7 @@ icon_aggro = "legionnaire" icon_dead = "legionnaire_dead" icon_gib = "syndicate_gib" + health_doll_icon = "legionnaire" maxHealth = 800 health = 800 melee_damage_lower = 30 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm index e3a5d5f762..50b15933a9 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm @@ -24,6 +24,7 @@ icon_aggro = "pandora" icon_dead = "pandora_dead" icon_gib = "syndicate_gib" + health_doll_icon = "pandora" maxHealth = 800 health = 800 melee_damage_lower = 15 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm index 446fe80c7d..7db91b50ad 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm @@ -253,6 +253,7 @@ icon_state = "legion" icon_living = "legion" icon_dead = "legion" + health_doll_icon = "legion" health = 450 maxHealth = 450 melee_damage_lower = 20 diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm index 96418686d3..5750d1ecb9 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm @@ -6,6 +6,7 @@ icon_living = "clown" icon_dead = "clown_dead" icon_gib = "clown_gib" + health_doll_icon = "clown" //if >32x32, it will use this generic. for all the huge clown mobs that subtype from this mob_biotypes = MOB_ORGANIC|MOB_HUMANOID turns_per_move = 5 response_disarm_continuous = "gently pushes aside" diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index 46a5a8ec68..0e106caf46 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -6,6 +6,7 @@ icon_living = "pine_1" icon_dead = "pine_1" icon_gib = "pine_1" + health_doll_icon = "pine_1" gender = NEUTER speak_chance = 0 turns_per_move = 5 @@ -72,5 +73,6 @@ icon_living = "festivus_pole" icon_dead = "festivus_pole" icon_gib = "festivus_pole" + health_doll_icon = "festivus_pole" loot = list(/obj/item/stack/rods) speak_emote = list("polls") diff --git a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm index bce1a01c8a..f10b184a45 100644 --- a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm +++ b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm @@ -8,6 +8,7 @@ icon_aggro = "Fugu0" icon_dead = "Fugu_dead" icon_gib = "syndicate_gib" + health_doll_icon = "Fugu0" mob_biotypes = MOB_ORGANIC|MOB_BEAST mouse_opacity = MOUSE_OPACITY_ICON move_to_delay = 5 diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 5fa6a0c22d..e46c57f245 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -7,6 +7,7 @@ ///How much blud it has for bloodsucking blood_volume = 550 rad_flags = RAD_NO_CONTAMINATE + hud_type = /datum/hud/living/simple_animal status_flags = CANPUSH diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm index b925c67940..49821e55e0 100644 --- a/code/modules/photography/camera/camera.dm +++ b/code/modules/photography/camera/camera.dm @@ -158,12 +158,12 @@ return FALSE size_x = clamp(size_x, 0, CAMERA_PICTURE_SIZE_HARD_LIMIT) size_y = clamp(size_y, 0, CAMERA_PICTURE_SIZE_HARD_LIMIT) - var/list/desc = list("This is a photo of an area of [size_x+1] meters by [size_y+1] meters.") + var/list/desc = list("This is a photo of an area of [size_x*2 + 1] meters by [size_y*2 + 1] meters.") var/ai_user = isAI(user) var/list/seen - var/list/viewlist = (user && user.client)? getviewsize(user.client.view) : getviewsize(world.view) + var/list/viewlist = user?.client? getviewsize(user.client.view) : getviewsize(world.view) var/viewr = max(viewlist[1], viewlist[2]) + max(size_x, size_y) - var/viewc = user.client? user.client.eye : target + var/viewc = user?.client? user.client.eye : target seen = get_hear(viewr, viewc) var/list/turfs = list() var/list/mobs = list() @@ -184,7 +184,7 @@ var/psize_y = (size_y * 2 + 1) * world.icon_size var/get_icon = camera_get_icon(turfs, target_turf, psize_x, psize_y, clone_area, size_x, size_y, (size_x * 2 + 1), (size_y * 2 + 1)) qdel(clone_area) - var/icon/temp = icon('icons/effects/96x96.dmi',"") + var/icon/temp = icon('icons/effects/camera_image_base.dmi',"") temp.Blend("#000", ICON_OVERLAY) temp.Scale(psize_x, psize_y) temp.Blend(get_icon, ICON_OVERLAY) diff --git a/code/modules/photography/camera/camera_image_capturing.dm b/code/modules/photography/camera/camera_image_capturing.dm index 5bd9c108d1..a5a1cbeedc 100644 --- a/code/modules/photography/camera/camera_image_capturing.dm +++ b/code/modules/photography/camera/camera_image_capturing.dm @@ -47,7 +47,7 @@ atoms += A CHECK_TICK - var/icon/res = icon('icons/effects/96x96.dmi', "") + var/icon/res = icon('icons/effects/camera_image_base.dmi', "") res.Scale(psize_x, psize_y) var/list/sorted = list() @@ -64,7 +64,6 @@ var/xcomp = FLOOR(psize_x / 2, 1) - 15 var/ycomp = FLOOR(psize_y / 2, 1) - 15 - for(var/atom/A in sorted) var/xo = (A.x - center.x) * world.icon_size + A.pixel_x + xcomp var/yo = (A.y - center.y) * world.icon_size + A.pixel_y + ycomp diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index f53ac7ac40..2882a85b5e 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -360,6 +360,18 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "A fine drink originally made to prevent waste by using the leftovers from winemaking." pH = 3.5 +/datum/reagent/consumable/ethanol/amaretto + name = "Amaretto" + description = "A gentle drink that carries a sweet aroma." + color = "#E17600" + boozepwr = 25 + taste_description = "fruity and nutty sweetness" + glass_icon_state = "amarettoglass" + shot_glass_icon_state = "shotglassgold" + glass_name = "glass of amaretto" + glass_desc = "A sweet and syrupy-looking drink." + pH = 3.5 + /datum/reagent/consumable/ethanol/cognac name = "Cognac" description = "A sweet and strongly alcoholic drink, made after numerous distillations and years of maturing. Classy as fornication." @@ -1790,6 +1802,50 @@ All effects don't start immediately, but rather get worse over time; the rate is to_chat(L,"You notice [mighty_shield] looks worn again. Weird.") ..() +/datum/reagent/consumable/ethanol/amaretto_alexander + name = "Amaretto Alexander" + description = "A weaker version of the Alexander, what it lacks in strength it makes up for in flavor." + color = "#DBD5AE" + boozepwr = 35 + quality = DRINK_VERYGOOD + taste_description = "sweet, creamy cacao" + glass_icon_state = "alexanderam" + glass_name = "Amaretto Alexander" + glass_desc = "A creamy, indulgent delight that is in fact as gentle as it seems." + +/datum/reagent/consumable/ethanol/ginger_amaretto + name = "Ginger Amaretto" + description = "A delightfully simple cocktail that pleases the senses." + boozepwr = 30 + color = "#EFB42A" + quality = DRINK_GOOD + taste_description = "sweetness followed by a soft sourness and warmth" + glass_icon_state = "gingeramaretto" + glass_name = "Ginger Amaretto" + glass_desc = "The sprig of rosemary adds a nice aroma to the drink, and isn't just to be pretentious afterall!" + +/datum/reagent/consumable/ethanol/godfather + name = "Godfather" + description = "A rough cocktail with illegal connections." + boozepwr = 50 + color = "#E68F00" + quality = DRINK_GOOD + taste_description = "a delightful softened punch" + glass_icon_state = "godfather" + glass_name = "Godfather" + glass_desc = "A classic from old Italy and enjoyed by gangsters, pray the orange peel doesnt end up in your mouth." + +/datum/reagent/consumable/ethanol/godmother + name = "Godmother" + description = "A twist on a classic, liked more by mature women." + boozepwr = 50 + color = "#E68F00" + quality = DRINK_GOOD + taste_description = "sweetness and a zesty twist" + glass_icon_state = "godmother" + glass_name = "Godmother" + glass_desc = "A lovely fresh-smelling cocktail, a true Sicilian delight." + /datum/reagent/consumable/ethanol/sidecar name = "Sidecar" description = "The one ride you'll gladly give up the wheel for." diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_medical_and_dinnerware.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_medical_and_dinnerware.dm index 574c7c9282..76b016e3de 100644 --- a/code/modules/research/designs/autolathe_desings/autolathe_designs_medical_and_dinnerware.dm +++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_medical_and_dinnerware.dm @@ -13,6 +13,14 @@ build_path = /obj/item/kitchen/knife category = list("initial","Dinnerware") +/datum/design/efink + name = "E-Fink" + id = "efink" + build_type = AUTOLATHE | NO_PUBLIC_LATHE + materials = list(/datum/material/iron = 12000) + build_path = /obj/item/kitchen/efink + category = list("initial","Dinnerware") + /datum/design/fork name = "Fork" id = "fork" diff --git a/code/modules/research/nanites/nanite_programs.dm b/code/modules/research/nanites/nanite_programs.dm index d3cf755de2..946dec3f49 100644 --- a/code/modules/research/nanites/nanite_programs.dm +++ b/code/modules/research/nanites/nanite_programs.dm @@ -254,14 +254,14 @@ software_error() /datum/nanite_program/proc/on_shock(shock_damage) - if(!program_flags & NANITE_SHOCK_IMMUNE) + if(!(program_flags & NANITE_SHOCK_IMMUNE)) if(prob(10)) software_error() else if(prob(33)) self_destruct() /datum/nanite_program/proc/on_minor_shock() - if(!program_flags & NANITE_SHOCK_IMMUNE) + if(!(program_flags & NANITE_SHOCK_IMMUNE)) if(prob(10)) software_error() diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 38f53c93a5..168a12a2ef 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -47,10 +47,11 @@ var/species_color = "" var/mutation_color = "" var/no_update = 0 - var/body_markings = "" //for bodypart markings - var/body_markings_icon = 'modular_citadel/icons/mob/mam_markings.dmi' + var/body_markings = "" //for bodypart markings, deprecated + var/list/body_markings_list // stores body markings as lists, with the first value being the name of the bodypart, the second value being the name of the marking, and the third being the colour + var/marking_value // combination of old aux_marking and body_marking variables as they were always set together to the same value + var/static/default_body_markings_icon = 'modular_citadel/icons/mob/mam_markings.dmi' var/list/markings_color = list() - var/aux_marking var/digitigrade_type var/animal_origin = null //for nonhuman bodypart (e.g. monkey) @@ -614,6 +615,7 @@ //we inform the bodypart of the changes that happened to the owner, or give it the informations from a source mob. /obj/item/bodypart/proc/update_limb(dropping_limb, mob/living/carbon/source) + body_markings_list = list() var/mob/living/carbon/C if(source) C = source @@ -632,8 +634,7 @@ color_src = FALSE base_bp_icon = DEFAULT_BODYPART_ICON no_update = TRUE - body_markings = "husk" // reeee - aux_marking = "husk" + marking_value = "husk" if(no_update) return @@ -649,11 +650,7 @@ //body marking memes var/list/colorlist = list() - //var/advanced_color_system = (H.dna.features["color_scheme"] == ADVANCED_CHARACTER_COLORING) colorlist.Cut() - //colorlist += advanced_color_system ? ReadRGB("[H.dna.features["mam_body_markings_primary"]]00") : ReadRGB("[H.dna.features["mcolor"]]00") - //colorlist += advanced_color_system ? ReadRGB("[H.dna.features["mam_body_markings_secondary"]]00") : ReadRGB("[H.dna.features["mcolor2"]]00") - //colorlist += advanced_color_system ? ReadRGB("[H.dna.features["mam_body_markings_tertiary"]]00") : ReadRGB("[H.dna.features["mcolor3"]]00") colorlist += ReadRGB("[H.dna.features["mcolor"]]00") colorlist += ReadRGB("[H.dna.features["mcolor2"]]00") colorlist += ReadRGB("[H.dna.features["mcolor3"]]00") @@ -688,21 +685,31 @@ else digitigrade_type = null - if(S.mutant_bodyparts["mam_body_markings"]) - var/datum/sprite_accessory/Smark - Smark = GLOB.mam_body_markings_list[H.dna.features["mam_body_markings"]] - if(Smark) - body_markings_icon = Smark.icon - if(H.dna.features["mam_body_markings"] != "None") - body_markings = Smark?.icon_state || lowertext(H.dna.features["mam_body_markings"]) - aux_marking = Smark?.icon_state || lowertext(H.dna.features["mam_body_markings"]) - else - body_markings = "plain" - aux_marking = "plain" + if(S.mutant_bodyparts["mam_body_markings"]) // checks if the species can actually have body markings + // get all markings for this bodypart type + for(var/list/marking in H.dna.features["mam_body_markings"]) + // marking is a list containing bodypart type, bodymarking name, and then the colour (colour won't be used in v1) + if(marking[1] == body_part) + var/datum/sprite_accessory/Smark + Smark = GLOB.mam_body_markings_list[marking[2]] + var/body_markings_icon = default_body_markings_icon + if(Smark) + body_markings_icon = Smark.icon + var/marking_value = "" // combination of body and aux markings from old system + if(H.dna.features["mam_body_markings"] != "None") + marking_value = Smark?.icon_state || lowertext(H.dna.features["mam_body_markings"]) + else + marking_value = "plain" + var/list/color_values + if(length(marking) == 3) + color_values = marking[3] + else + color_values = list("#FFFFFF", "#FFFFFF", "#FFFFFF") + body_markings_list += list(list(body_markings_icon, marking_value, color_values)) + markings_color = list(colorlist) else - body_markings = null - aux_marking = null + marking_value = null if(S.override_bp_icon) base_bp_icon = S.override_bp_icon @@ -728,8 +735,7 @@ if(is_robotic_limb()) dmg_overlay_type = "robotic" if(is_robotic_limb(FALSE)) - body_markings = null - aux_marking = null + marking_value = null if(dropping_limb) no_update = TRUE //when attached, the limb won't be affected by the appearance changes of its mob owner. @@ -765,17 +771,18 @@ . += image('icons/mob/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_0[burnstate]", -DAMAGE_LAYER, image_dir) if(!isnull(body_markings) && is_organic_limb(FALSE)) - if(!use_digitigrade) - if(body_zone == BODY_ZONE_CHEST) - . += image(body_markings_icon, "[body_markings]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir) + for(var/list/marking_list in body_markings_list) + // marking stores icon and value for the specific bodypart + if(!use_digitigrade) + if(body_zone == BODY_ZONE_CHEST) + . += image(marking_list[1], "[marking_list[2]]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir) + else + . += image(marking_list[1], "[marking_list[2]]_[body_zone]", -MARKING_LAYER, image_dir) else - . += image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) - else - . += image(body_markings_icon, "[body_markings]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) + . += image(marking_list[1], "[marking_list[2]]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) var/image/limb = image(layer = -BODYPARTS_LAYER, dir = image_dir) var/list/aux = list() - var/image/marking var/list/auxmarking = list() . += limb @@ -795,6 +802,7 @@ if((body_zone != BODY_ZONE_HEAD && body_zone != BODY_ZONE_CHEST)) should_draw_gender = FALSE + var/list/markings_list = list() if(is_organic_limb()) limb.icon = base_bp_icon || 'icons/mob/human_parts.dmi' if(should_draw_gender) @@ -808,21 +816,26 @@ limb.icon_state = "[species_id]_[body_zone]" // Body markings - if(!isnull(body_markings)) + if(length(body_markings_list)) if(species_id == "husk") - marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir) + . += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir) else if(species_id == "husk" && use_digitigrade) - marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) - - else if(!use_digitigrade) - if(body_zone == BODY_ZONE_CHEST) - marking = image(body_markings_icon, "[body_markings]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir) - else - marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) + . += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) else - marking = image(body_markings_icon, "[body_markings]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) + for(var/list/marking_list in body_markings_list) + // marking stores icon and value for the specific bodypart + if(!use_digitigrade) + if(body_zone == BODY_ZONE_CHEST) + markings_list.Add(image(marking_list[1], "[marking_list[2]]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir)) + else + markings_list.Add(image(marking_list[1], "[marking_list[2]]_[body_zone]", -MARKING_LAYER, image_dir)) + else + markings_list.Add(image(marking_list[1], "[marking_list[2]]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)) - . += marking + if(color_src && length(marking_list) == 3) + var/image/I = markings_list[length(markings_list)] + I.color = marking_list[3] + . += markings_list // Citadel End @@ -830,11 +843,14 @@ for(var/I in aux_icons) var/aux_layer = aux_icons[I] aux += image(limb.icon, "[species_id]_[I]", -aux_layer, image_dir) - if(!isnull(aux_marking)) - if(species_id == "husk") - auxmarking += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[I]", -aux_layer, image_dir) - else - auxmarking += image(body_markings_icon, "[body_markings]_[I]", -aux_layer, image_dir) + if(species_id == "husk") + auxmarking += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[I]", -aux_layer, image_dir) + else + for(var/marking_list in body_markings_list) + var/image/aux_marking_image = image(marking_list[1], "[marking_list[2]]_[I]", -aux_layer, image_dir) + if(length(marking_list) == 3) + aux_marking_image.color = marking_list[3] + auxmarking += aux_marking_image . += aux . += auxmarking @@ -849,31 +865,35 @@ for(var/I in aux_icons) var/aux_layer = aux_icons[I] aux += image(limb.icon, "[I]", -aux_layer, image_dir) - if(!isnull(aux_marking)) - if(species_id == "husk") - auxmarking += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[I]", -aux_layer, image_dir) - else - auxmarking += image(body_markings_icon, "[body_markings]_[I]", -aux_layer, image_dir) + if(species_id == "husk") + auxmarking += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[I]", -aux_layer, image_dir) + else + for(var/marking_list in body_markings_list) + var/image/aux_marking_image = image(marking_list[1], "[marking_list[2]]_[I]", -aux_layer, image_dir) + if(length(marking_list) == 3) + aux_marking_image.color = marking_list[3] + auxmarking += aux_marking_image . += auxmarking . += aux - if(!isnull(body_markings)) + if(length(body_markings)) if(species_id == "husk") - marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir) + . += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir) else if(species_id == "husk" && use_digitigrade) - marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) - - else if(!use_digitigrade) - if(body_zone == BODY_ZONE_CHEST) - marking = image(body_markings_icon, "[body_markings]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir) - else - marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) + . += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) else - marking = image(body_markings_icon, "[body_markings]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) - . += marking + for(var/list/marking_list in body_markings_list) + // marking stores icon and value for the specific bodypart + if(!use_digitigrade) + if(body_zone == BODY_ZONE_CHEST) + . += image(marking_list[1], "[marking_list[2]]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir) + else + . += image(marking_list[1], "[marking_list[2]]_[body_zone]", -MARKING_LAYER, image_dir) + else + . += image(marking_list[1], "[marking_list[2]]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) return - if(color_src) //TODO - add color matrix support for base species limbs + if(color_src) //TODO - add color matrix support for base species limbs (or dont because color matrixes suck) var/draw_color = mutation_color || species_color var/grayscale = FALSE if(!draw_color) @@ -891,20 +911,15 @@ if(grayscale) I.icon_state += "_g" I.color = draw_color - if(!isnull(aux_marking)) - for(var/a in auxmarking) - var/image/I = a - if(species_id == "husk") - I.color = "#141414" - else - I.color = list(markings_color) + for(var/a in auxmarking) + var/image/I = a + if(species_id == "husk") + I.color = "#141414" if(!isnull(body_markings)) if(species_id == "husk") - marking.color = "#141414" - else - marking.color = list(markings_color) - + for(var/image/marking in markings_list) + marking.color = "#141414" /obj/item/bodypart/deconstruct(disassembled = TRUE) drop_organs() diff --git a/code/modules/uplink/uplink_items/uplink_bundles.dm b/code/modules/uplink/uplink_items/uplink_bundles.dm index 9b17162532..cf33c893ad 100644 --- a/code/modules/uplink/uplink_items/uplink_bundles.dm +++ b/code/modules/uplink/uplink_items/uplink_bundles.dm @@ -38,7 +38,7 @@ specialised contractor baton, and three randomly selected low cost items. Can include otherwise unobtainable items." item = /obj/item/storage/box/syndie_kit/contract_kit cost = 20 - player_minimum = 30 + player_minimum = 25 exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) restricted = TRUE diff --git a/code/modules/uplink/uplink_items/uplink_dangerous.dm b/code/modules/uplink/uplink_items/uplink_dangerous.dm index a8ca068ad2..948d17d168 100644 --- a/code/modules/uplink/uplink_items/uplink_dangerous.dm +++ b/code/modules/uplink/uplink_items/uplink_dangerous.dm @@ -228,6 +228,15 @@ surplus = 50 include_modes = list(/datum/game_mode/nuclear) +/datum/uplink_item/dangerous/maulergauntlets + name = "Mauler Gauntlets" + desc = "Mauler gauntlets are a pair of high-tech plastitanium gauntlets fused with illegal nanite auto-injectors designed \ + to grant the wearer sextuple the strength of an average human being. Wearing these, you will punch harder, inflict more injuries \ + with your fists, and be able to slam people through tables with immense force. \ + Unfortunately, due to the size of the gloves you will be unable to wield firearms with them equipped." + item = /obj/item/clothing/gloves/fingerless/pugilist/mauler + cost = 8 + /datum/uplink_item/dangerous/powerfist name = "Power Fist" desc = "The power-fist is a metal gauntlet with a built-in piston-ram powered by an external gas supply.\ diff --git a/code/modules/vending/boozeomat.dm b/code/modules/vending/boozeomat.dm index 97efbecb77..5ec0987111 100644 --- a/code/modules/vending/boozeomat.dm +++ b/code/modules/vending/boozeomat.dm @@ -18,6 +18,7 @@ /obj/item/reagent_containers/food/drinks/bottle/absinthe = 5, /obj/item/reagent_containers/food/drinks/bottle/grappa = 5, /obj/item/reagent_containers/food/drinks/bottle/sake = 5, + /obj/item/reagent_containers/food/drinks/bottle/amaretto = 5, /obj/item/reagent_containers/food/drinks/ale = 6, /obj/item/reagent_containers/food/drinks/bottle/orangejuice = 4, /obj/item/reagent_containers/food/drinks/bottle/tomatojuice = 4, diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm index fedaeff98c..da3c740a1b 100644 --- a/code/modules/vending/clothesmate.dm +++ b/code/modules/vending/clothesmate.dm @@ -212,6 +212,8 @@ /obj/item/clothing/suit/jacket/leather/overcoat = 4, /obj/item/clothing/under/pants/mustangjeans = 3, /obj/item/clothing/neck/necklace/dope = 5, + /obj/item/clothing/under/costume/swagoutfit = 5, + /obj/item/clothing/shoes/swagshoes = 5, /obj/item/clothing/suit/jacket/letterman_nanotrasen = 5, /obj/item/clothing/under/misc/corporateuniform = 5, /obj/item/clothing/suit/hooded/wintercoat/polychromic = 5, diff --git a/code/modules/vending/dinnerware.dm b/code/modules/vending/dinnerware.dm index c5b85ed61c..95fd8e04d8 100644 --- a/code/modules/vending/dinnerware.dm +++ b/code/modules/vending/dinnerware.dm @@ -7,6 +7,7 @@ /obj/item/storage/bag/tray = 8, /obj/item/kitchen/fork = 6, /obj/item/kitchen/knife = 6, + /obj/item/kitchen/efink = 2, /obj/item/kitchen/rollingpin = 4, /obj/item/kitchen/unrollingpin = 4, /obj/item/reagent_containers/food/drinks/drinkingglass = 8, diff --git a/html/changelog.html b/html/changelog.html index 7e3f24bf3b..4eb95b34d7 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,102 @@ -->
+

29 May 2021

+

Kraseo updated:

+ +

Linzolle updated:

+ +

keronshb updated:

+ +

zeroisthebiggay updated:

+ + +

26 May 2021

+

bunny232 updated:

+ + +

24 May 2021

+

zeroisthebiggay updated:

+ + +

23 May 2021

+

Putnam3145 updated:

+ +

WanderingFox95 updated:

+ +

keronshb updated:

+ + +

21 May 2021

+

Putnam3145 updated:

+ + +

20 May 2021

+

qweq12yt updated:

+ +

timothyteakettle updated:

+ + +

19 May 2021

+

WanderingFox95 updated:

+ +

shellspeed1 updated:

+ +

zeroisthebiggay updated:

+ + +

15 May 2021

+

bunny232 updated:

+ +

timothyteakettle updated:

+ +

14 May 2021

keronshb updated:

GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index ca2426d1f0..475730286e 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -29301,3 +29301,66 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - balance: Removes VOG sleep command since it was an undocumented readd. zeroisthebiggay: - spellcheck: consealed +2021-05-15: + bunny232: + - bugfix: Corrects the bot pathing by engineering on meta station + timothyteakettle: + - balance: borg spraycans have a five second delay before being able to knock someone + down again +2021-05-19: + WanderingFox95: + - rscadd: The E-Fink, a mending tool for food. + - soundadd: A backwards bladeslice. (Yes, for the E-fink) + - imageadd: And Icons for the E-fink, of course. + shellspeed1: + - rscadd: Survival pods can now be designated as requiring power. Survival pods + with this feature should include an APC when created and will run out of power + rather quickly if no source is added. Perfect for true emergencies. + - rscadd: An empty survival pod has been added to the mining vendor. This is an + extremely barebones pod featuring only a gps, table, apc, and the standard fridge + for some donk pockets. + zeroisthebiggay: + - rscadd: New Alcohol Amaretto and various cocktails + - rscadd: more drink mixture flavortext + - soundadd: you're going to Baystation +2021-05-20: + qweq12yt: + - bugfix: Fixed void cloak voiding itself into oblivion. + - bugfix: You can now order emag shuttles again. + timothyteakettle: + - rscadd: ports rp's marking system +2021-05-21: + Putnam3145: + - bugfix: Fixed activity being attached to minds instead of mobs on antag attach. +2021-05-23: + Putnam3145: + - bugfix: Antag and species no longer remove all traits if one has a blacklisted + trait + WanderingFox95: + - imageadd: Replaced the antlers showing up when you select deer ears with actual + deer ears. Literally why was that even a thing before? + - imageadd: Straight rabbit ears are now a thing. + keronshb: + - balance: 30 > 25 pop req for contractor kit + - code_imp: adds a special hud for simple mobs. + - imageadd: a lot of >32x32 mobs now have icons for their health dolls +2021-05-24: + zeroisthebiggay: + - rscadd: 'New traitor item: the Mauler Gauntlets! Punch hard, punch good! Eight + telecrystals, buy today!' + - rscadd: hairs from Airborne Snitch +2021-05-26: + bunny232: + - bugfix: Removed two random 'captain's office' tiles from space on meta station +2021-05-29: + Kraseo: + - bugfix: No more slamming into people while bloodcrawled. + Linzolle: + - bugfix: brand intelligence event works again + keronshb: + - rscadd: swag outfit available in clothesmate + - rscadd: 'swag shoes availble in clothesmate resprite: changed swag shoes icon + to the one twaticus made.' + - rscadd: Adds the clown mob spawner for admins + zeroisthebiggay: + - balance: puglism damage can no longer stack with scarp diff --git a/html/changelogs/AutoChangeLog-pr-14627.yml b/html/changelogs/AutoChangeLog-pr-14627.yml deleted file mode 100644 index cde6b62174..0000000000 --- a/html/changelogs/AutoChangeLog-pr-14627.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "timothyteakettle" -delete-after: True -changes: - - balance: "borg spraycans have a five second delay before being able to knock someone down again" diff --git a/icons/effects/camera_image_base.dmi b/icons/effects/camera_image_base.dmi new file mode 100644 index 0000000000..4f5867e07e Binary files /dev/null and b/icons/effects/camera_image_base.dmi differ diff --git a/icons/mob/clothing/feet.dmi b/icons/mob/clothing/feet.dmi index d93543805b..de50a0d9dc 100644 Binary files a/icons/mob/clothing/feet.dmi and b/icons/mob/clothing/feet.dmi differ diff --git a/icons/mob/clothing/feet_digi.dmi b/icons/mob/clothing/feet_digi.dmi index 43244e99b9..1cc1e801c7 100644 Binary files a/icons/mob/clothing/feet_digi.dmi and b/icons/mob/clothing/feet_digi.dmi differ diff --git a/icons/mob/clothing/hands.dmi b/icons/mob/clothing/hands.dmi index 406b0fe62a..5155f06134 100644 Binary files a/icons/mob/clothing/hands.dmi and b/icons/mob/clothing/hands.dmi differ diff --git a/icons/mob/clothing/uniform.dmi b/icons/mob/clothing/uniform.dmi index f2611b3ab7..6c29fdfa75 100644 Binary files a/icons/mob/clothing/uniform.dmi and b/icons/mob/clothing/uniform.dmi differ diff --git a/icons/mob/clothing/uniform_digi.dmi b/icons/mob/clothing/uniform_digi.dmi index 98ec436b86..a957b60a9b 100644 Binary files a/icons/mob/clothing/uniform_digi.dmi and b/icons/mob/clothing/uniform_digi.dmi differ diff --git a/icons/mob/hair.dmi b/icons/mob/hair.dmi index 7322b2cfaf..55c79b9740 100644 Binary files a/icons/mob/hair.dmi and b/icons/mob/hair.dmi differ diff --git a/icons/mob/inhands/equipment/kitchen_lefthand.dmi b/icons/mob/inhands/equipment/kitchen_lefthand.dmi index bd3e1f779f..af16e06a39 100644 Binary files a/icons/mob/inhands/equipment/kitchen_lefthand.dmi and b/icons/mob/inhands/equipment/kitchen_lefthand.dmi differ diff --git a/icons/mob/inhands/equipment/kitchen_righthand.dmi b/icons/mob/inhands/equipment/kitchen_righthand.dmi index 9e9f21b0f5..539ef42a19 100644 Binary files a/icons/mob/inhands/equipment/kitchen_righthand.dmi and b/icons/mob/inhands/equipment/kitchen_righthand.dmi differ diff --git a/icons/mob/mutant_bodyparts.dmi b/icons/mob/mutant_bodyparts.dmi index ca047a93bd..7b93a3ff73 100644 Binary files a/icons/mob/mutant_bodyparts.dmi and b/icons/mob/mutant_bodyparts.dmi differ diff --git a/icons/mob/screen_gen.dmi b/icons/mob/screen_gen.dmi index 95aaf330ce..4377a0d7c6 100644 Binary files a/icons/mob/screen_gen.dmi and b/icons/mob/screen_gen.dmi differ diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi index 629b989520..25cde38df9 100644 Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi index aee67da199..cb2391b5ba 100644 Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index 6171e032dd..22464b3def 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi index 1c3b10b9de..b7f21a1fe4 100644 Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi index 9a4af82449..7ada41dbcf 100644 Binary files a/icons/obj/kitchen.dmi and b/icons/obj/kitchen.dmi differ diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm index 0c59c3e711..39ed9d6ec8 100644 --- a/modular_citadel/code/modules/client/loadout/__donator.dm +++ b/modular_citadel/code/modules/client/loadout/__donator.dm @@ -550,7 +550,7 @@ ckeywhitelist = list("sneka") /datum/gear/donator/smaiden - name = "Shrine Maiden" - slot = SLOT_WEAR_SUIT - path = /obj/item/clothing/suit/smaiden + name = "shrine maiden outfit" + slot = SLOT_W_UNIFORM + path = /obj/item/clothing/under/smaiden ckeywhitelist = list("ultimarifox") diff --git a/modular_citadel/code/modules/client/preferences_savefile.dm b/modular_citadel/code/modules/client/preferences_savefile.dm index bbd71d22e3..102ae41921 100644 --- a/modular_citadel/code/modules/client/preferences_savefile.dm +++ b/modular_citadel/code/modules/client/preferences_savefile.dm @@ -23,7 +23,7 @@ WRITE_FILE(S["feature_genitals_use_skintone"], features["genitals_use_skintone"]) WRITE_FILE(S["feature_mcolor2"], features["mcolor2"]) WRITE_FILE(S["feature_mcolor3"], features["mcolor3"]) - WRITE_FILE(S["feature_mam_body_markings"], features["mam_body_markings"]) + WRITE_FILE(S["feature_mam_body_markings"], safe_json_encode(features["mam_body_markings"])) WRITE_FILE(S["feature_mam_tail"], features["mam_tail"]) WRITE_FILE(S["feature_mam_ears"], features["mam_ears"]) WRITE_FILE(S["feature_mam_tail_animated"], features["mam_tail_animated"]) diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm index 89734106cf..b7d04e0780 100644 --- a/modular_citadel/code/modules/custom_loadout/custom_items.dm +++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm @@ -602,8 +602,8 @@ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi' icon_state = "mmask" -/obj/item/clothing/suit/smaiden - name = "shrine maiden" +/obj/item/clothing/under/smaiden + name = "shrine maiden outfit" desc = "Seems questionably tight for religious purposes." icon_state = "smaiden" item_state = "smaiden" diff --git a/modular_citadel/icons/mob/mam_ears.dmi b/modular_citadel/icons/mob/mam_ears.dmi index 1ed3d8fbbe..e615b7f7ee 100644 Binary files a/modular_citadel/icons/mob/mam_ears.dmi and b/modular_citadel/icons/mob/mam_ears.dmi differ diff --git a/modular_citadel/icons/mob/mam_markings.dmi b/modular_citadel/icons/mob/mam_markings.dmi index 3fe7f0060e..05cc1731fd 100644 Binary files a/modular_citadel/icons/mob/mam_markings.dmi and b/modular_citadel/icons/mob/mam_markings.dmi differ diff --git a/sound/roundend/approachingbaystation.ogg b/sound/roundend/approachingbaystation.ogg new file mode 100644 index 0000000000..83f5f6aae7 Binary files /dev/null and b/sound/roundend/approachingbaystation.ogg differ diff --git a/sound/weapons/bladesliceb.ogg b/sound/weapons/bladesliceb.ogg new file mode 100644 index 0000000000..b916363acd Binary files /dev/null and b/sound/weapons/bladesliceb.ogg differ diff --git a/sound/weapons/mauler_punch.ogg b/sound/weapons/mauler_punch.ogg new file mode 100644 index 0000000000..3e610ea238 Binary files /dev/null and b/sound/weapons/mauler_punch.ogg differ diff --git a/tgstation.dme b/tgstation.dme index 2e5bd87e51..e516733757 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -272,6 +272,7 @@ #include "code\_onclick\hud\revenanthud.dm" #include "code\_onclick\hud\robot.dm" #include "code\_onclick\hud\screen_objects.dm" +#include "code\_onclick\hud\simple_animal.dm" #include "code\_onclick\hud\swarmer.dm" #include "code\_onclick\hud\screen_objects\clickdelay.dm" #include "code\_onclick\hud\screen_objects\sprint.dm"