diff --git a/code/__DEFINES/~skyrat_defines/traits.dm b/code/__DEFINES/~skyrat_defines/traits.dm index 8b625ebe8da..91c3dc3a57f 100644 --- a/code/__DEFINES/~skyrat_defines/traits.dm +++ b/code/__DEFINES/~skyrat_defines/traits.dm @@ -15,6 +15,12 @@ /// This makes trait makes it so that the person cannot be infected by the zombie virus. #define TRAIT_MUTANT_IMMUNE "mutant_immune" +//AdditionalEmotes *turf traits +#define TRAIT_WATER_ASPECT "water_aspect" +#define TRAIT_WEBBING_ASPECT "webbing_aspect" +#define TRAIT_FLORAL_ASPECT "floral_aspect" +#define TRAIT_ASH_ASPECT "ash_aspect" + // Trait sources #define GHOSTROLE_TRAIT "ghostrole" // SKYRAT EDIT ADDITION -- Ghost Cafe Traits diff --git a/code/__HELPERS/~skyrat_helpers/is_helpers.dm b/code/__HELPERS/~skyrat_helpers/is_helpers.dm index 86764b533a2..68a5072b559 100644 --- a/code/__HELPERS/~skyrat_helpers/is_helpers.dm +++ b/code/__HELPERS/~skyrat_helpers/is_helpers.dm @@ -13,3 +13,7 @@ #define isroundstartslime(A) (is_species(A,/datum/species/jelly/roundstartslime)) #define ishorrorling(A) (istype(A, /mob/living/simple_animal/hostile/true_changeling)) + +#define isaquatic(A) (is_species(A,/datum/species/aquatic)) +#define isakula(A) (is_species(A,/datum/species/akula)) +#define ishumanoid(A) (is_species(A,/datum/species/humanoid)) diff --git a/modular_skyrat/master_files/code/datums/traits/good.dm b/modular_skyrat/master_files/code/datums/traits/good.dm index 7b8deeec460..d5d34524fae 100644 --- a/modular_skyrat/master_files/code/datums/traits/good.dm +++ b/modular_skyrat/master_files/code/datums/traits/good.dm @@ -8,3 +8,40 @@ gain_text = "The ground doesn't feel so rough on your feet anymore." lose_text = "You start feeling the ridges and imperfections on the ground." medical_record_text = "Patient's feet are more resilient against traction." + +//AdditionalEmotes *turf quirks +/datum/quirk/water_aspect + name = "Water aspect (Emotes)" + desc = "(Aquatic innate) Underwater societies are home to you, space ain't much different. (Say *turf to cast)" + value = 2 + mob_trait = TRAIT_WATER_ASPECT + gain_text = "You feel like you can control water." + lose_text = "Somehow, you've lost your ability to control water!" + medical_record_text = "Patient holds a collection of nanobots designed to synthesize H2O." + +/datum/quirk/webbing_aspect + name = "Webbing aspect (Emotes)" + desc = "(Insect innate) Insect folk capable of weaving aren't unfamiliar with receiving envy from those lacking a natural 3D printer. (Say *turf to cast)" + value = 2 + mob_trait = TRAIT_WEBBING_ASPECT + gain_text = "You could easily spin a web." + lose_text = "Somehow, you've lost your ability to weave." + medical_record_text = "Patient has the ability to weave webs with naturally synthesized silk." + +/datum/quirk/floral_aspect + name = "Floral aspect (Emotes)" + desc = "(Podperson innate) Kudzu research isn't pointless, rapid photosynthesis technology is here! (Say *turf to cast)" + value = 2 + mob_trait = TRAIT_FLORAL_ASPECT + gain_text = "You feel like you can grow vines." + lose_text = "Somehow, you've lost your ability to rapidly photosynthesize." + medical_record_text = "Patient can rapidly photosynthesize to grow vines." + +/datum/quirk/ash_aspect + name = "Ash aspect (Emotes)" + desc = "(Lizard innate) The ability to forge ash and flame, a mighty power - yet mostly used for theatrics. (Say *turf to cast)" + value = 2 + mob_trait = TRAIT_ASH_ASPECT + gain_text = "There is a forge smouldering inside of you." + lose_text = "Somehow, you've lost your ability to breathe fire." + medical_record_text = "Patients possess a fire breathing gland commonly found in lizard folk." diff --git a/modular_skyrat/master_files/icons/effects/overlay_effects.dmi b/modular_skyrat/master_files/icons/effects/overlay_effects.dmi new file mode 100644 index 00000000000..58bacc0104a Binary files /dev/null and b/modular_skyrat/master_files/icons/effects/overlay_effects.dmi differ diff --git a/modular_skyrat/master_files/icons/effects/turf_effects.dmi b/modular_skyrat/master_files/icons/effects/turf_effects.dmi new file mode 100644 index 00000000000..2256c840a71 Binary files /dev/null and b/modular_skyrat/master_files/icons/effects/turf_effects.dmi differ diff --git a/modular_skyrat/master_files/icons/effects/turf_effects_64.dmi b/modular_skyrat/master_files/icons/effects/turf_effects_64.dmi new file mode 100644 index 00000000000..5cc9fb66b74 Binary files /dev/null and b/modular_skyrat/master_files/icons/effects/turf_effects_64.dmi differ diff --git a/modular_skyrat/master_files/icons/effects/turf_effects_icons.dmi b/modular_skyrat/master_files/icons/effects/turf_effects_icons.dmi new file mode 100644 index 00000000000..1a1a917c184 Binary files /dev/null and b/modular_skyrat/master_files/icons/effects/turf_effects_icons.dmi differ diff --git a/modular_skyrat/master_files/sound/effects/weave.ogg b/modular_skyrat/master_files/sound/effects/weave.ogg new file mode 100644 index 00000000000..5a9d3e7d2ac Binary files /dev/null and b/modular_skyrat/master_files/sound/effects/weave.ogg differ diff --git a/modular_skyrat/master_files/sound/effects/wing_flap.ogg b/modular_skyrat/master_files/sound/effects/wing_flap.ogg new file mode 100644 index 00000000000..2eda6d4ccb0 Binary files /dev/null and b/modular_skyrat/master_files/sound/effects/wing_flap.ogg differ diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm index 7309c192ada..d365b5608db 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm @@ -73,6 +73,10 @@ if(HS.hardsuit_tail_colors) return FALSE return TRUE + if(H.owned_turf) //we do a lil' emoting + var/list/used_in_turf = list("tail") + if(H.owned_turf.name in used_in_turf) + return TRUE return FALSE /datum/sprite_accessory/tails/none diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/taur_types.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/taur_types.dm index b0cda2ce0b9..0de965e9bd7 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/taur_types.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/taur_types.dm @@ -14,6 +14,10 @@ /datum/sprite_accessory/taur/is_hidden(mob/living/carbon/human/H, obj/item/bodypart/HD) if(H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT)) return TRUE + if(H.owned_turf) + var/list/used_in_turf = list("tail") + if(H.owned_turf.name in used_in_turf) + return TRUE return FALSE /datum/sprite_accessory/taur/none diff --git a/modular_skyrat/modules/emotes/code/additionalemotes/overlay_emote.dm b/modular_skyrat/modules/emotes/code/additionalemotes/overlay_emote.dm new file mode 100644 index 00000000000..4393cd76747 --- /dev/null +++ b/modular_skyrat/modules/emotes/code/additionalemotes/overlay_emote.dm @@ -0,0 +1,79 @@ +/datum/emote + var/overlay_emote = 'modular_skyrat/master_files/icons/effects/overlay_effects.dmi' + +/datum/emote/living/sweatdrop + key = "sweatdrop" + key_third_person = "sweatdrops" + +/datum/emote/living/sweatdrop/run_emote(mob/living/user, params, type_override, intentional) + . = ..() + if(iscarbon(user) || issilicon(user)) + var/mutable_appearance/overlay = mutable_appearance(overlay_emote, "sweatdrop", ABOVE_MOB_LAYER) + overlay.pixel_x = 10 + overlay.pixel_y = 10 + flick_overlay_static(overlay, user, 50) + playsound(get_turf(user), 'modular_skyrat/modules/emotes/sound/emotes/sweatdrop.ogg', 25, TRUE) + +/datum/emote/living/exclaim + key = "exclaim" + key_third_person = "exclaims" + +/datum/emote/living/exclaim/run_emote(mob/living/user, params, type_override, intentional) + . = ..() + if(iscarbon(user) || issilicon(user)) + var/mutable_appearance/overlay = mutable_appearance(overlay_emote, "exclamation", ABOVE_MOB_LAYER) + overlay.pixel_x = 10 + overlay.pixel_y = 28 + flick_overlay_static(overlay, user, 50) + playsound(get_turf(user), 'sound/machines/chime.ogg', 25, TRUE) + + +/datum/emote/living/realize + key = "realize" + key_third_person = "realizes" + +/datum/emote/living/realize/run_emote(mob/living/user, params, type_override, intentional) + . = ..() + if(iscarbon(user) || issilicon(user)) + var/mutable_appearance/overlay = mutable_appearance(overlay_emote, "realize", ABOVE_MOB_LAYER) + overlay.pixel_y = 15 + flick_overlay_static(overlay, user, 50) + playsound(get_turf(user), 'modular_skyrat/modules/emotes/sound/emotes/realize.ogg', 25, TRUE) + +/datum/emote/living/annoyed + key = "annoyed" + key_third_person = "is annoyed" + +/datum/emote/living/annoyed/run_emote(mob/living/user, params, type_override, intentional) + . = ..() + if(iscarbon(user) || issilicon(user)) + var/mutable_appearance/overlay = mutable_appearance(overlay_emote, "annoyed", ABOVE_MOB_LAYER) + overlay.pixel_x = 10 + overlay.pixel_y = 10 + flick_overlay_static(overlay, user, 50) + playsound(get_turf(user), 'modular_skyrat/modules/emotes/sound/emotes/annoyed.ogg', 25, TRUE) + +/datum/emote/living/blush + key = "blush" + key_third_person = "blushes" + +/datum/emote/living/blush/run_emote(mob/living/carbon/human/user, params, type_override, intentional) + . = ..() + if(iscarbon(user)) + var/mutable_appearance/overlay = mutable_appearance(overlay_emote, "blush", ABOVE_MOB_LAYER) + flick_overlay_static(overlay, user, 50) + playsound(get_turf(user), 'modular_skyrat/modules/emotes/sound/emotes/blush.ogg', 25, TRUE) + +/datum/emote/living/glasses + key = "glasses" + key_third_person = "glasses" + message = "pushes up their glasses." + +/datum/emote/living/glasses/run_emote(mob/living/carbon/human/user, params, type_override, intentional) + . = ..() + var/obj/O = user.get_item_by_slot(ITEM_SLOT_EYES) + if(istype(O, /obj/item/clothing/glasses)) + var/mutable_appearance/overlay = mutable_appearance(overlay_emote, "glasses", ABOVE_MOB_LAYER) + flick_overlay_static(overlay, user, 10) + else + return FALSE diff --git a/modular_skyrat/modules/emotes/code/additionalemotes/turf_emote.dm b/modular_skyrat/modules/emotes/code/additionalemotes/turf_emote.dm new file mode 100644 index 00000000000..4c4cf68859e --- /dev/null +++ b/modular_skyrat/modules/emotes/code/additionalemotes/turf_emote.dm @@ -0,0 +1,215 @@ +var/current_turf + +/mob/living + var/obj/owned_turf + var/list/allowed_turfs = list() + +/datum/emote/living/mark_turf + key = "turf" + key_third_person = "turf" + cooldown = 4 SECONDS + +/datum/emote/living/mark_turf/run_emote(mob/living/user, params, type_override, intentional) + . = ..() + var/mob/living/carbon/human/human_user = user + + if(ishuman(user)) + //feet + if(!(DIGITIGRADE in human_user.dna.species.species_traits) && !(human_user.dna.species.mutant_bodyparts["taur"])) + user.allowed_turfs += "footprint" + + if((DIGITIGRADE in human_user.dna.species.species_traits) || human_user.dna.species.mutant_bodyparts["taur"]) + user.allowed_turfs += list("pawprint", "hoofprint", "clawprint") + + //species & taurs + if(islizard(user) || issynthliz(user) || HAS_TRAIT(user, TRAIT_ASH_ASPECT)) + user.allowed_turfs += "smoke" + user.allowed_turfs -= list("pawprint", "hoofprint") + + if(isplasmaman(user)) + if(human_user.w_uniform && istype(human_user.w_uniform, /obj/item/clothing/under/plasmaman)) + user.allowed_turfs += "holoseat" + + if(isroundstartslime(user) || isslimeperson(user) || isjellyperson(user)) + user.allowed_turfs += "slime" + + if(isxenohybrid(user)) + user.allowed_turfs += "xenoresin" + + if(isinsect(user) || HAS_TRAIT(user, TRAIT_WEBBING_ASPECT)) + user.allowed_turfs += "web" + + if(isaquatic(user) || isakula(user) || HAS_TRAIT(user, TRAIT_WATER_ASPECT)) + user.allowed_turfs += "water" + + if(ispodperson(user) || ispodweak(user) || HAS_TRAIT(user, TRAIT_FLORAL_ASPECT)) + user.allowed_turfs += "vines" + + if(isipc(user) || issynthanthro(user) || issynthhuman(user) || issynthliz(user)) + if(human_user.dna.species.mutant_bodyparts["taur"]) + user.allowed_turfs += "holobed" //taurs get the holobed instead + else + user.allowed_turfs += "holoseat" + + //wings + if(istype(user.getorganslot(ORGAN_SLOT_WINGS), /obj/item/organ/wings/moth)) + user.allowed_turfs += "dust" //moth's dust ✨ + + //body parts + if(istype(user.getorganslot(ORGAN_SLOT_TAIL), /obj/item/organ/tail)) + var/list/fluffy_tails = list("Tamamo Kitsune Tails", "Sergal", "Fox", "Fox (Alt 2)", "Fox (Alt 3)", "Fennec", "Red Panda", "Husky", "Skunk", "Lunasune", "Squirrel", "Wolf", "Stripe", "Kitsune", "Leopard", "Bat (Long)") + if(human_user.dna.species.mutant_bodyparts["tail"][MUTANT_INDEX_NAME] in fluffy_tails) + user.allowed_turfs += "tails" + + if(human_user.dna.species.mutant_bodyparts["taur"]) + var/list/snake_taurs = list("Naga", "Cybernetic Naga") + if(human_user.dna.species.mutant_bodyparts["taur"][MUTANT_INDEX_NAME] in snake_taurs) + user.allowed_turfs -= list("pawprint", "hoofprint", "clawprint") + if(!(human_user.wear_suit && istype(human_user.wear_suit, /obj/item/clothing/suit/space/hardsuit))) + user.allowed_turfs += "constrict" + + //clothing + var/obj/item/shoes = user.get_item_by_slot(ITEM_SLOT_FEET) + if(istype(shoes, /obj/item/clothing/shoes)) + if(!human_user.dna.species.mutant_bodyparts["taur"]) + user.allowed_turfs += "shoeprint" + + if(issilicon(user)) + user.allowed_turfs += list("holoseat", "holobed", "borgmat") + + + var/list/display_turf = list() + for(var/choice in user.allowed_turfs) + + var/datum/radial_menu_choice/option = new + option.image = image(icon = 'modular_skyrat/master_files/icons/effects/turf_effects_icons.dmi', icon_state = initial(choice)) + + display_turf[initial(choice)] = option + + sortList(display_turf) + var/chosen_turf = show_radial_menu(user, user, display_turf, custom_check = CALLBACK(src, .proc/check_menu, user)) + + if(QDELETED(src) || QDELETED(user) || !chosen_turf) + return FALSE + + if(do_after(user,10)) + current_turf = chosen_turf + + var/obj/turf_icon = /obj/structure/mark_turf + user.owned_turf = new turf_icon(get_turf(user)) + user.owned_turf.dir = user.dir + + if(ishuman(user)) + human_user.update_mutant_bodyparts() + + var/list/DNA_trail = list("shoeprint", "footprint", "pawprint", "hoofprint", "clawprint") + if(current_turf in DNA_trail) //These turfs leave clues of their owner + user.owned_turf.add_fingerprint(user) + + + var/list/colorable = list("dust", "slime", "vines", "footprint", "pawprint", "hoofprint", "clawprint") + if(current_turf in colorable) //These turfs are simply colored after their owner's primary + if(ishumanbasic(user) || ishumanoid(user)) + user.owned_turf.color = "#" + human_user.dna.features["skin_color"] + else + user.owned_turf.color = "#" + human_user.dna.features["mcolor"] + + + var/list/body_part = list("tails", "constrict") + if(current_turf in body_part) //These turfs can be a body part and need color/size applied + var/key = null + + var/list/tail_emotes = list("tails") + if(current_turf in tail_emotes) + key = "tail" + var/list/taur_emotes = list("constrict") + if(current_turf in taur_emotes) + key = "taur" + + //coloring + var/list/finished_list = list() + var/list/color_list = human_user.dna.species.mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] //identify color + var/datum/sprite_accessory/sprite_type = GLOB.sprite_accessories[key][human_user.dna.species.mutant_bodyparts[key][MUTANT_INDEX_NAME]] //identify type + + switch(sprite_type.color_src) + if(USE_MATRIXED_COLORS) + finished_list += ReadRGB("[color_list[1]]0") + finished_list += ReadRGB("[color_list[2]]0") + finished_list += ReadRGB("[color_list[3]]0") + if(USE_ONE_COLOR) + finished_list += ReadRGB("[color_list[1]]0") + finished_list += ReadRGB("[color_list[1]]0") + finished_list += ReadRGB("[color_list[1]]0") + + finished_list += list(0,0,0,255) + for(var/index in 1 to finished_list.len) + finished_list[index] /= 255 + + user.owned_turf.color = finished_list + if(isroundstartslime(user) || isslimeperson(user) || isjellyperson(user)) + user.owned_turf.alpha = 130 + + //scaling + var/atom/movable/owned_turf = user.owned_turf + var/change_multiplier = human_user.dna.features["body_size"] / BODY_SIZE_NORMAL + var/translate = ((change_multiplier-1) * 32)/2 + owned_turf.transform = owned_turf.transform.Scale(change_multiplier) + owned_turf.transform = owned_turf.transform.Translate(0, translate) + owned_turf.appearance_flags = PIXEL_SCALE + + RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/turf_owner, override = TRUE) + + return ..() + +/datum/emote/living/mark_turf/select_message_type(mob/living/user, intentional) + . = ..() + + if(current_turf == "web") + user.spin(8, 1) //Ssspin a web + + /* Commented out to preserve text. + Voter decision to exclude pre-determined messages, can still use this area to apply animation onto the user! + + . = "neatly spins a web beneath them." + if("water") + . = "submerges their surroundings in a pool of water." + if("vines") + . = "sprouts vines reaching down beneath them." + if("dust") + . = "flutters their wings, scattering their dust around." + if("smoke") + . = "expirates a mist of ashes around them." + if("slime") + . = "splits their gel, forming an oozing shape." + if("xenoresin") + . = "secretes thick resin, covering the ground beneath them." + if("holoseat") + . = "artificially summons a seat beneath them." + if("holobed") + . = "artificially summons a bed beneath them." + if("borgmat") + . = "dispenses a soft mat, rolling it out beneath them." + */ + + + + + current_turf = null + LAZYCLEARLIST(user.allowed_turfs) + + +/datum/emote/living/mark_turf/proc/check_menu(mob/living/user) + if(user.owned_turf != null) + return FALSE + if(isspaceturf(get_turf(user))) + return FALSE + if(user.buckled) + return FALSE + else + return TRUE + +/datum/emote/living/mark_turf/proc/turf_owner(mob/living/user) + UnregisterSignal(user, COMSIG_MOVABLE_MOVED) + + var/obj/owned_turf = user.owned_turf + INVOKE_ASYNC(owned_turf, /obj/structure/mark_turf/proc/turf_check, user) diff --git a/modular_skyrat/modules/emotes/code/additionalemotes/turf_list.dm b/modular_skyrat/modules/emotes/code/additionalemotes/turf_list.dm new file mode 100644 index 00000000000..d26e223e56c --- /dev/null +++ b/modular_skyrat/modules/emotes/code/additionalemotes/turf_list.dm @@ -0,0 +1,192 @@ +/obj/structure/mark_turf + name = "turf" + icon = 'modular_skyrat/master_files/icons/effects/turf_effects.dmi' + desc = "It's turf." //Debug stuff, won't be seen + anchored = TRUE + density = FALSE + max_integrity = 15 + +/obj/structure/mark_turf/Initialize() + . = ..() + + switch(current_turf) + if("web") + name = "hand-sewn web" + desc = "It's a sticky web." + icon_state = pick("stickyweb1", "stickyweb2") + playsound(get_turf(src), 'modular_skyrat/master_files/sound/effects/weave.ogg', 25, TRUE) + + if("vines") + name = "sprouted vines" + desc = "It's an entanglement of vines." + icon_state = pick("kudzu1", "kudzu1", "kudzu3") + playsound(get_turf(src), 'sound/creatures/venus_trap_hurt.ogg', 25, TRUE) + + + if("water") + name = "puddle of water" + desc = "It's a patch of water." + icon_state = "water" + src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects.dmi', "water_top", ABOVE_MOB_LAYER)) + flick_overlay_static(image('modular_skyrat/modules/liquids/icons/obj/effects/splash.dmi', "splash", ABOVE_MOB_LAYER), src, 20) + playsound(get_turf(src), 'modular_skyrat/sound/effects/watersplash.ogg', 25, TRUE) + + if("smoke") + name = "blazing mist" + desc = "It's a storm of smoke." + icon_state = "smoke" + src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects.dmi', "smoke_top", ABOVE_MOB_LAYER)) + playsound(get_turf(src), 'sound/effects/wounds/sizzle2.ogg', 25, TRUE) + + if("xenoresin") + name = "resin" + desc = "Looks like some kind of thick resin." + icon_state = "xenoresin" + playsound(get_turf(src), 'sound/effects/splat.ogg', 25, TRUE) + + if("holobed") + name = "physical hologram" + desc = "It's a hologram of a pet bed." + icon_state = "holobed" + playsound(get_turf(src), 'sound/misc/compiler-stage2.ogg', 25, TRUE) + + if("holoseat") + name = "physical hologram" + desc = "It's a hologram of a barstool." + icon_state = "holoseat" + src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects.dmi', "holoseat_top", ABOVE_MOB_LAYER)) + playsound(get_turf(src), 'sound/misc/compiler-stage2.ogg', 25, TRUE) + + if("slime") + name = "pile of oozing slime" + desc = "It's just a bunch of slime." + alpha = 155 + playsound(get_turf(src), 'sound/misc/soggy.ogg', 25, TRUE) + switch(rand(1,1000)) + if(-INFINITY to 400) + icon_state = "slimeobj1" + src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects.dmi', "slimeobj1_top", ABOVE_MOB_LAYER)) + if(400 to 800) + icon_state = "slimeobj2" + src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects.dmi', "slimeobj2_top", ABOVE_MOB_LAYER)) + if(800 to 980) + icon_state = "slimeobj3" + src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects.dmi', "slimeobj3_top", ABOVE_MOB_LAYER)) + if(980 to INFINITY) + name = "slime bust" //rare obj/item/statuebust + desc = "A priceless slime bust, the kind that belongs in a museum." + icon_state = "slimeobj4" + AddElement(/datum/element/art, GREAT_ART) + else + return + + if("dust") + name = "cloud of dust" + desc = "It's a cloud of glittering moth's dust." + icon = 'modular_skyrat/master_files/icons/effects/turf_effects_64.dmi' + icon_state = "dust" + pixel_x = -16 + src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects_64.dmi', "dust_top", ABOVE_MOB_LAYER)) + playsound(get_turf(src), 'modular_skyrat/master_files/sound/effects/wing_flap.ogg', 25, TRUE) + + if("borgmat") + name = "soft-foam mat" + desc = "It's a rolled out mat, doesn't include wireless charging." + icon = 'modular_skyrat/master_files/icons/effects/turf_effects_64.dmi' + icon_state = "borgmat" + pixel_x = -16 + pixel_y = -4 + playsound(get_turf(src), 'sound/items/handling/taperecorder_pickup.ogg', 25, TRUE) + + //bodyparts + if("tails") + name = "tail" + desc = "It's a fluffy tail." + icon = 'modular_skyrat/master_files/icons/effects/turf_effects_64.dmi' + icon_state = "tails" + pixel_x = -16 //correcting the offset for 64 + var/mutable_appearance/overlay = mutable_appearance('modular_skyrat/master_files/icons/effects/turf_effects_64.dmi', "tails_top", ABOVE_MOB_LAYER) + overlay.appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER + src.add_overlay(overlay) + playsound(get_turf(src), 'sound/weapons/thudswoosh.ogg', 25, TRUE) + + if("constrict") + name = "tail" + desc = "It's a scaly tail." + icon = 'modular_skyrat/master_files/icons/effects/turf_effects_64.dmi' + icon_state = "naga" + pixel_x = -16 + var/mutable_appearance/overlay = mutable_appearance('modular_skyrat/master_files/icons/effects/turf_effects_64.dmi', "naga_top", ABOVE_MOB_LAYER) + overlay.appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER + src.add_overlay(overlay) + playsound(get_turf(src), 'modular_skyrat/modules/emotes/sound/emotes/hiss.ogg', 25, TRUE) + + //prints + if("pawprint") + name = "pawprint" + desc = "It's a pawprint left on the ground." + icon_state = pick("pawprint", "pawprint1") + playsound(get_turf(src), pick('sound/effects/footstep/hardbarefoot1.ogg', + 'sound/effects/footstep/hardbarefoot2.ogg', + 'sound/effects/footstep/hardbarefoot3.ogg', + 'sound/effects/footstep/hardbarefoot4.ogg', + 'sound/effects/footstep/hardbarefoot5.ogg'), 50, TRUE) + + if("hoofprint") + name = "hoofprint" + desc = "It's a hoofprint left on the ground." + icon_state = pick("hoofprint", "hoofprint1") + playsound(get_turf(src), pick('sound/effects/footstep/hardbarefoot1.ogg', + 'sound/effects/footstep/hardbarefoot2.ogg', + 'sound/effects/footstep/hardbarefoot3.ogg', + 'sound/effects/footstep/hardbarefoot4.ogg', + 'sound/effects/footstep/hardbarefoot5.ogg'), 50, TRUE) + if("footprint") + name = "footprint" + desc = "It's a footprint left on the ground." + icon_state = pick("footprint", "footprint1") + playsound(get_turf(src), pick('sound/effects/footstep/hardbarefoot1.ogg', + 'sound/effects/footstep/hardbarefoot2.ogg', + 'sound/effects/footstep/hardbarefoot3.ogg', + 'sound/effects/footstep/hardbarefoot4.ogg', + 'sound/effects/footstep/hardbarefoot5.ogg'), 50, TRUE) + + if("clawprint") + name = "clawprint" + desc = "It's a clawprint left on the ground." + icon_state = pick("clawprint", "clawprint1") + playsound(get_turf(src), pick('sound/effects/footstep/hardbarefoot1.ogg', + 'sound/effects/footstep/hardbarefoot2.ogg', + 'sound/effects/footstep/hardbarefoot3.ogg', + 'sound/effects/footstep/hardbarefoot4.ogg', + 'sound/effects/footstep/hardbarefoot5.ogg'), 50, TRUE) + + if("shoeprint") + name = "shoeprint" + desc = "It's a shoeprint left on the ground." + icon_state = pick("shoeprint", "shoeprint1") + playsound(get_turf(src), pick('sound/effects/footstep/floor1.ogg', + 'sound/effects/footstep/floor2.ogg', + 'sound/effects/footstep/floor3.ogg', + 'sound/effects/footstep/floor4.ogg', + 'sound/effects/footstep/floor5.ogg'), 50, TRUE) + + else + return + +/obj/structure/mark_turf/proc/turf_check(mob/living/user) //This gets called when a player leaves their turf + var/list/no_trail = list("tail", "constrict") + var/list/long_trail = list("pawprint", "hoofprint", "clawprint", "footprint", "shoeprint") + + if(user.owned_turf.name in no_trail) + QDEL_NULL(src) + if(user.owned_turf.name in long_trail) + QDEL_IN(src, 150 SECONDS) + user.owned_turf = null + else + QDEL_IN(src, 15 SECONDS) + user.owned_turf = null + + if(ishuman(user)) + var/mob/living/carbon/human/human_user = user + human_user.update_mutant_bodyparts() diff --git a/modular_skyrat/modules/emotes/readme.md b/modular_skyrat/modules/emotes/readme.md index c9edafcce4e..c4110c97c7a 100644 --- a/modular_skyrat/modules/emotes/readme.md +++ b/modular_skyrat/modules/emotes/readme.md @@ -1,6 +1,7 @@ https://github.com/Skyrat-SS13/Skyrat-tg/pull/892 https://github.com/Skyrat-SS13/Skyrat-tg/pull/1925 https://github.com/Skyrat-SS13/Skyrat-tg/pull/2320 +https://github.com/Skyrat-SS13/Skyrat-tg/pull/6259 ## Title: All the emotes. @@ -49,4 +50,7 @@ modular_skyrat/modules/emotes/code/emotes.dm | `#define EMOTE_DELAY` - refactoring code - adjusting existing sound files - adding more emotes +- TheOOZ Additional emotes + - overlay emotes + - turf emotes - VOREstation - a couple of the soundfiles and emote texts diff --git a/modular_skyrat/modules/emotes/sound/emotes/annoyed.ogg b/modular_skyrat/modules/emotes/sound/emotes/annoyed.ogg new file mode 100644 index 00000000000..d303a8815a1 Binary files /dev/null and b/modular_skyrat/modules/emotes/sound/emotes/annoyed.ogg differ diff --git a/modular_skyrat/modules/emotes/sound/emotes/blush.ogg b/modular_skyrat/modules/emotes/sound/emotes/blush.ogg new file mode 100644 index 00000000000..482a2a8ecda Binary files /dev/null and b/modular_skyrat/modules/emotes/sound/emotes/blush.ogg differ diff --git a/modular_skyrat/modules/emotes/sound/emotes/realize.ogg b/modular_skyrat/modules/emotes/sound/emotes/realize.ogg new file mode 100644 index 00000000000..c88593b329f Binary files /dev/null and b/modular_skyrat/modules/emotes/sound/emotes/realize.ogg differ diff --git a/modular_skyrat/modules/emotes/sound/emotes/sweatdrop.ogg b/modular_skyrat/modules/emotes/sound/emotes/sweatdrop.ogg new file mode 100644 index 00000000000..3c5a8ae80d1 Binary files /dev/null and b/modular_skyrat/modules/emotes/sound/emotes/sweatdrop.ogg differ diff --git a/tgstation.dme b/tgstation.dme index daa466ffb9d..30dc4421534 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4110,6 +4110,9 @@ #include "modular_skyrat\modules\emotes\code\scream_emote.dm" #include "modular_skyrat\modules\emotes\code\silicon_emotes.dm" #include "modular_skyrat\modules\emotes\code\synth_emotes.dm" +#include "modular_skyrat\modules\emotes\code\additionalemotes\overlay_emote.dm" +#include "modular_skyrat\modules\emotes\code\additionalemotes\turf_emote.dm" +#include "modular_skyrat\modules\emotes\code\additionalemotes\turf_list.dm" #include "modular_skyrat\modules\encounters\enclave_pirates.dm" #include "modular_skyrat\modules\ERT_Factions\FTU\code\items.dm" #include "modular_skyrat\modules\ERT_Factions\FTU\code\projectiles.dm"