diff --git a/code/game/gamemodes/changeling/powers/absorb.dm b/code/game/gamemodes/changeling/powers/absorb.dm index bb9785286dc..115a5ae59d2 100644 --- a/code/game/gamemodes/changeling/powers/absorb.dm +++ b/code/game/gamemodes/changeling/powers/absorb.dm @@ -94,7 +94,7 @@ for(var/language in T.languages) if(!(language in absorbed_languages)) absorbed_languages += language - T.changeling_update_languages(absorbed_languages) + user.changeling_update_languages(absorbed_languages) absorbedcount++ store_dna(new_dna, user) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 40dd8959564..5dd8178c3b5 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -82,6 +82,23 @@ if (!species.name == "Machine") return + if("wag") + if(species.bodyflags & TAIL_WAGGING) + if(!wear_suit || !(wear_suit.flags_inv & HIDETAIL) && !istype(wear_suit, /obj/item/clothing/suit/space)) + message = "[src] starts wagging \his tail." + src.start_tail_wagging(1) + else + return + else + return + + if("swag") + if(species.bodyflags & TAIL_WAGGING) + message = "[src] stops wagging \his tail." + src.stop_tail_wagging(1) + else + return + if ("airguitar") if (!src.restrained()) message = "[src] is strumming the air and headbanging like a safari chimp." diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 937c85bce8e..c565c3d7be5 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -1000,6 +1000,30 @@ proc/get_damage_icon_part(damage_state, body_part) update_icons() +/mob/living/carbon/human/proc/start_tail_wagging(var/update_icons=1) + overlays_standing[TAIL_LAYER] = null + + if(species.tail && species.bodyflags & HAS_TAIL) + var/icon/tailw_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]w_s") + tailw_s.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD) + + overlays_standing[TAIL_LAYER] = image(tailw_s) + + if(update_icons) + update_icons() + +/mob/living/carbon/human/proc/stop_tail_wagging(var/update_icons=1) + overlays_standing[TAIL_LAYER] = null + + if(species.tail && species.bodyflags & HAS_TAIL) + var/icon/tail_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]_s") + tail_s.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD) + + overlays_standing[TAIL_LAYER] = image(tail_s) + + if(update_icons) + update_icons() + //Adds a collar overlay above the helmet layer if the suit has one // Suit needs an identically named sprite in icons/mob/collar.dmi /mob/living/carbon/human/proc/update_collar(var/update_icons=1) diff --git a/code/modules/mob/living/carbon/species.dm b/code/modules/mob/living/carbon/species.dm index 02587d04994..d19baa5caad 100644 --- a/code/modules/mob/living/carbon/species.dm +++ b/code/modules/mob/living/carbon/species.dm @@ -354,11 +354,15 @@ primitive = /mob/living/carbon/monkey/tajara flags = HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT - bodyflags = FEET_PADDED | HAS_TAIL | HAS_SKIN_COLOR + bodyflags = FEET_PADDED | HAS_TAIL | HAS_SKIN_COLOR | TAIL_WAGGING flesh_color = "#AFA59E" base_color = "#333333" +/datum/species/tajaran/handle_death(var/mob/living/carbon/human/H) + + H.stop_tail_wagging(1) + /datum/species/skrell name = "Skrell" icobase = 'icons/mob/human_races/r_skrell.dmi' diff --git a/code/setup.dm b/code/setup.dm index ad983fa5a43..bcf254f95a3 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -844,6 +844,7 @@ var/list/restricted_camera_networks = list( //Those networks can only be accesse #define HAS_TAIL 8 #define HAS_SKIN_TONE 16 #define HAS_SKIN_COLOR 32 +#define TAIL_WAGGING 64 //Language flags. #define WHITELISTED 1 // Language is available if the speaker is whitelisted. diff --git a/icons/effects/species.dmi b/icons/effects/species.dmi index d5405066ab9..a4562fd8d75 100644 Binary files a/icons/effects/species.dmi and b/icons/effects/species.dmi differ diff --git a/maps/cyberiad.dmm b/maps/cyberiad.dmm index 77c8ce078cd..6012a798fc9 100644 --- a/maps/cyberiad.dmm +++ b/maps/cyberiad.dmm @@ -6783,7 +6783,7 @@ "cAw" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) "cAx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) "cAy" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) -"cAz" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{name = "Engineering Maintenance"; req_access_txt = "10"; req_one_access_txt = null},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/engine/engineering) +"cAz" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{name = "Engineering Maintenance"; req_access_txt = "10"; req_one_access_txt = null},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/maintenance/engi_shuttle) "cAA" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/engine/engineering) "cAB" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area) "cAC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/engine/chiefs_office)