From 5381f7c198b781ba74d6bc40ae8b28b977a91503 Mon Sep 17 00:00:00 2001 From: Nerevar <12636964+Nerev4r@users.noreply.github.com> Date: Sun, 22 Sep 2024 13:27:10 -0600 Subject: [PATCH 1/4] now without evil --- code/__DEFINES/~doppler_defines/is_helpers.dm | 1 + code/__DEFINES/~doppler_defines/mobs.dm | 1 + code/datums/elements/lube_walking.dm | 13 +- .../surgery/organs/internal/eyes/_eyes.dm | 24 +-- .../surgery/organs/internal/tongue/_tongue.dm | 6 +- config/game_options.txt | 2 +- .../organs/internal/eyes.dm | 2 + .../icons/bodyparts/snail_bodyparts.dmi | Bin 0 -> 1175 bytes .../snails/icons/organs/snail_eyes.dmi | Bin 0 -> 2035 bytes .../snails/icons/organs/snail_heart.dmi | Bin 0 -> 415 bytes .../snails/icons/organs/snail_liver.dmi | Bin 0 -> 338 bytes .../snails/icons/shell/shell_mob.dmi | Bin 0 -> 9177 bytes .../snails/icons/shell/shell_obj.dmi | Bin 0 -> 1571 bytes .../species_types/snails/modular_snail.dm | 190 ++++++++++++++++++ .../snails/organs/snail_heart.dm | 76 +++++++ .../snails/organs/snail_liver.dm | 7 + .../species_types/snails/snail_bodyparts.dm | 35 ++++ tgstation.dme | 6 + 18 files changed, 343 insertions(+), 20 deletions(-) create mode 100644 code/__DEFINES/~doppler_defines/mobs.dm create mode 100644 modular_doppler/modular_customization/organs/internal/eyes.dm create mode 100644 modular_doppler/modular_species/species_types/snails/icons/bodyparts/snail_bodyparts.dmi create mode 100644 modular_doppler/modular_species/species_types/snails/icons/organs/snail_eyes.dmi create mode 100644 modular_doppler/modular_species/species_types/snails/icons/organs/snail_heart.dmi create mode 100644 modular_doppler/modular_species/species_types/snails/icons/organs/snail_liver.dmi create mode 100644 modular_doppler/modular_species/species_types/snails/icons/shell/shell_mob.dmi create mode 100644 modular_doppler/modular_species/species_types/snails/icons/shell/shell_obj.dmi create mode 100644 modular_doppler/modular_species/species_types/snails/modular_snail.dm create mode 100644 modular_doppler/modular_species/species_types/snails/organs/snail_heart.dm create mode 100644 modular_doppler/modular_species/species_types/snails/organs/snail_liver.dm create mode 100644 modular_doppler/modular_species/species_types/snails/snail_bodyparts.dm diff --git a/code/__DEFINES/~doppler_defines/is_helpers.dm b/code/__DEFINES/~doppler_defines/is_helpers.dm index f9c1c52531c29..02e0c61088246 100644 --- a/code/__DEFINES/~doppler_defines/is_helpers.dm +++ b/code/__DEFINES/~doppler_defines/is_helpers.dm @@ -3,5 +3,6 @@ //Customization bases #define isfeline(A) (isfelinid(A) || HAS_TRAIT(A, TRAIT_FELINE)) #define isinsectoid(A) (is_species(A, /datum/species/insectoid)) +#define issnail(A) (is_species(A, /datum/species/snail)) //Species with green blood #define hasgreenblood(A) (isinsectoid(A) || HAS_TRAIT(A, TRAIT_GREEN_BLOOD)) diff --git a/code/__DEFINES/~doppler_defines/mobs.dm b/code/__DEFINES/~doppler_defines/mobs.dm new file mode 100644 index 0000000000000..9e06c02bb5eaa --- /dev/null +++ b/code/__DEFINES/~doppler_defines/mobs.dm @@ -0,0 +1 @@ +#define BODYPART_ICON_SNAIL 'modular_doppler/modular_species/species_types/snails/icons/bodyparts/snail_bodyparts.dmi' diff --git a/code/datums/elements/lube_walking.dm b/code/datums/elements/lube_walking.dm index 8ab6b2b760285..816f0702a20a3 100644 --- a/code/datums/elements/lube_walking.dm +++ b/code/datums/elements/lube_walking.dm @@ -47,9 +47,19 @@ if(new_resting && lubricate(snail)) snail.add_movespeed_modifier(/datum/movespeed_modifier/snail_crawl) RegisterSignal(snail, COMSIG_MOVABLE_MOVED, PROC_REF(lubricate)) + //DOPPLER EDIT ADDITION BEGIN - This is to prevent snails from achieving FTL speeds without gravity, think of it like snails affixing to walls irl. + ADD_TRAIT(snail, TRAIT_NEGATES_GRAVITY, TRAIT_GENERIC) + snail.AddElement(/datum/element/forced_gravity, 0) + if(HAS_TRAIT(snail, TRAIT_SETTLER)) //This is to keep settlers from reaching FTL speeds too. + snail.remove_movespeed_modifier(/datum/movespeed_modifier/snail_crawl) + //DOPPLER EDIT ADDITION END else snail.remove_movespeed_modifier(/datum/movespeed_modifier/snail_crawl) UnregisterSignal(snail, COMSIG_MOVABLE_MOVED) + //DOPPLER EDIT ADDITION BEGIN - This clears the forced gravity so they're affected by it while standing. + REMOVE_TRAIT(snail, TRAIT_NEGATES_GRAVITY, TRAIT_GENERIC) + snail.RemoveElement(/datum/element/forced_gravity, 0) + //DOPPLER EDIT ADDITION END /datum/element/lube_walking/proc/lubricate(atom/movable/snail) SIGNAL_HANDLER @@ -57,5 +67,6 @@ var/turf/open/turf_standing_on = get_turf(snail) if(!istype(turf_standing_on)) return FALSE - turf_standing_on.MakeSlippery(wet_flags, min_wet_time = min_time_wet_for) + turf_standing_on.MakeSlippery(TURF_WET_WATER, min_wet_time = 1 SECONDS) //DOPPLER EDIT CHANGE: Roundstart Snails - No more lube - ORIGINAL: turf_standing_on.MakeSlippery(wet_flags, min_wet_time = min_time_wet_for) + turf_standing_on.wash(CLEAN_WASH) //DOPPLER EDIT ADDITION: Roundstart Snails - Snails Keep Clean return TRUE diff --git a/code/modules/surgery/organs/internal/eyes/_eyes.dm b/code/modules/surgery/organs/internal/eyes/_eyes.dm index 8ccfc8b72f61d..e15f3cdf161b5 100644 --- a/code/modules/surgery/organs/internal/eyes/_eyes.dm +++ b/code/modules/surgery/organs/internal/eyes/_eyes.dm @@ -134,30 +134,19 @@ var/eye_icon = my_head?.eyes_icon || 'icons/mob/human/human_face.dmi' /// DOPPLER SHIFT ADDITION END - var/mutable_appearance/eye_left = mutable_appearance(eye_icon, "[eye_icon_state]_l", -BODY_LAYER) /// DOPPLER SHIFT EDIT: using eye_icon instead of human_face.dmi - var/mutable_appearance/eye_right = mutable_appearance(eye_icon, "[eye_icon_state]_r", -BODY_LAYER) /// DOPPLER SHIFT EDIT: using eye_icon instead of human_face.dmi + var/mutable_appearance/eye_left = mutable_appearance(eye_icon, "[eye_icon_state]_l", -eyes_layer) /// DOPPLER SHIFT EDIT: using eye_icon instead of human_face.dmi, eyes_layer instead of BODY_LAYER + var/mutable_appearance/eye_right = mutable_appearance(eye_icon, "[eye_icon_state]_r", -eyes_layer) /// DOPPLER SHIFT EDIT: using eye_icon instead of human_face.dmi, eyes_layer instead of BODY_LAYER var/list/overlays = list(eye_left, eye_right) var/obscured = parent.check_obscured_slots(TRUE) if(overlay_ignore_lighting && !(obscured & ITEM_SLOT_EYES)) - overlays += emissive_appearance(eye_left.icon, eye_left.icon_state, parent, -BODY_LAYER, alpha = eye_left.alpha) - overlays += emissive_appearance(eye_right.icon, eye_right.icon_state, parent, -BODY_LAYER, alpha = eye_right.alpha) + overlays += emissive_appearance(eye_left.icon, eye_left.icon_state, parent, -eyes_layer, alpha = eye_left.alpha) //DOPPLER SHIFT EDIT : using eyes_layer instead of BODY_LAYER + overlays += emissive_appearance(eye_right.icon, eye_right.icon_state, parent, -eyes_layer, alpha = eye_right.alpha) //DOPPLER SHIFT EDIT : using eyes_layer instead of BODY_LAYER //var/obj/item/bodypart/head/my_head = parent.get_bodypart(BODY_ZONE_HEAD) /// DOPPLER SHIFT REMOVAL if(my_head) if(my_head.head_flags & HEAD_EYECOLOR) - if(IS_ROBOTIC_ORGAN(src) || !my_head.draw_color || (parent.appears_alive() && !HAS_TRAIT(parent, TRAIT_KNOCKEDOUT))) - // show the eyes as open - eye_right.color = eye_color_right - eye_left.color = eye_color_left - else - // show the eyes as closed, and as such color them like eyelids wound be colored - var/list/base_color = rgb2num(my_head.draw_color, COLORSPACE_HSL) - base_color[2] *= 0.85 - base_color[3] *= 0.85 - var/eyelid_color = rgb(base_color[1], base_color[2], base_color[3], (length(base_color) >= 4 ? base_color[4] : null), COLORSPACE_HSL) - eye_right.color = eyelid_color - eye_left.color = eyelid_color - + eye_right.color = eye_color_right + eye_left.color = eye_color_left if(my_head.worn_face_offset) my_head.worn_face_offset.apply_offset(eye_left) my_head.worn_face_offset.apply_offset(eye_right) @@ -719,6 +708,7 @@ desc = "These eyes seem to have a large range, but might be cumbersome with glasses." eye_icon_state = "snail_eyes" icon_state = "snail_eyeballs" + eyes_layer = ABOVE_BODY_FRONT_HEAD_LAYER //NOVA EDIT - Roundstart Snails /obj/item/organ/internal/eyes/jelly name = "jelly eyes" diff --git a/code/modules/surgery/organs/internal/tongue/_tongue.dm b/code/modules/surgery/organs/internal/tongue/_tongue.dm index 54ea59eea6169..b7a8a33588d87 100644 --- a/code/modules/surgery/organs/internal/tongue/_tongue.dm +++ b/code/modules/surgery/organs/internal/tongue/_tongue.dm @@ -562,7 +562,10 @@ GLOBAL_LIST_INIT(english_to_zombie, list()) color = "#96DB00" // TODO proper sprite, rather than recoloured pink tongue modifies_speech = TRUE voice_filter = "atempo=0.5" // makes them talk really slow + liked_foodtypes = VEGETABLES | FRUIT | GROSS | RAW //DOPPLER EDIT - Roundstart Snails - Food Prefs + disliked_foodtypes = DAIRY | ORANGES | SUGAR //DOPPLER EDIT: Roundstart Snails - As it turns out, you can't give a snail processed sugar or citrus. +/* DOPPLER EDIT START - Roundstart Snails: Less annoying speech. /obj/item/organ/internal/tongue/snail/modify_speech(datum/source, list/speech_args) var/new_message var/message = speech_args[SPEECH_MESSAGE] @@ -572,6 +575,7 @@ GLOBAL_LIST_INIT(english_to_zombie, list()) else new_message += message[i] speech_args[SPEECH_MESSAGE] = new_message +*/ // DOPPLER EDIT END /obj/item/organ/internal/tongue/ethereal name = "electric discharger" @@ -596,7 +600,7 @@ GLOBAL_LIST_INIT(english_to_zombie, list()) say_mod = "meows" liked_foodtypes = SEAFOOD | ORANGES | BUGS | GORE disliked_foodtypes = GROSS | CLOTH | RAW - organ_traits = list(TRAIT_WOUND_LICKER, TRAIT_FISH_EATER) + organ_traits = list(TRAIT_WOUND_LICKER) /obj/item/organ/internal/tongue/jelly name = "jelly tongue" diff --git a/config/game_options.txt b/config/game_options.txt index e00897226aa05..3f7581c325413 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -374,7 +374,7 @@ ROUNDSTART_RACES primitive_felinid ROUNDSTART_RACES ethereal #ROUNDSTART_RACES jelly #ROUNDSTART_RACES abductor -#ROUNDSTART_RACES snail +ROUNDSTART_RACES snail ## Races that are straight upgrades. If these are on expect powergamers to always pick them #ROUNDSTART_RACES skeleton diff --git a/modular_doppler/modular_customization/organs/internal/eyes.dm b/modular_doppler/modular_customization/organs/internal/eyes.dm new file mode 100644 index 0000000000000..a60cfa0f8a238 --- /dev/null +++ b/modular_doppler/modular_customization/organs/internal/eyes.dm @@ -0,0 +1,2 @@ +/obj/item/organ/internal/eyes + var/eyes_layer = BODY_LAYER diff --git a/modular_doppler/modular_species/species_types/snails/icons/bodyparts/snail_bodyparts.dmi b/modular_doppler/modular_species/species_types/snails/icons/bodyparts/snail_bodyparts.dmi new file mode 100644 index 0000000000000000000000000000000000000000..0b57859dca4ec44d8fe7a96dcea2907773e59546 GIT binary patch literal 1175 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 literal 0 HcmV?d00001 diff --git a/modular_doppler/modular_species/species_types/snails/icons/organs/snail_heart.dmi b/modular_doppler/modular_species/species_types/snails/icons/organs/snail_heart.dmi new file mode 100644 index 0000000000000000000000000000000000000000..02f45e9f486760083aad06a31379734d7bbdfb44 GIT binary patch literal 415 zcmV;Q0bu@#P)U2`GeJNR7i>K)UgS}Fc5{| zX9c-7H-QdI3uppka4$@pD+zpwiswh#7!YN%ba?St4p zJWU_g%2U$^-}WI@_H7@w>Z0j`w|&T_59s&7eD}5w)}s%1+#4st8h`*WHhKU6002ov JPDHLkV1mcAs^b6v literal 0 HcmV?d00001 diff --git a/modular_doppler/modular_species/species_types/snails/icons/organs/snail_liver.dmi b/modular_doppler/modular_species/species_types/snails/icons/organs/snail_liver.dmi new file mode 100644 index 0000000000000000000000000000000000000000..ac2034b5ba5a357bb941849bd51d89f1bdb4779d GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv=>VS)S5E2w+9nPb4ngjb*(z3v z%4PjBO4>F%mRA0FRx{0RJ5U*8NswPKgTu2MX+Tb1RY*jMOKNd)QD#9&W_}(6L&con zu!5q}?_YuoK7M_o<*loA?#%h%4WR}XjUPPHIq#!+lA)-lcZY>>knv?>FNHaeCLNg+ zq7ba9F1*5dyM?}?v3qB?vFhd(5*k@2j?N65GGjJZqPF&qUppIk*%^Mf%M|LT%sd6O zIos34F+^ixa)QJa2Z7%6D^wb^6jF4AP6>1=DNGZZwPZ$vKtPa)wy>FyGlv9cr>T~< zA}0rz);0~r%*2o|Aun+sXNgnGmZ(g5)t16Nd%~m{5e!`oi)PGVUd6D9(_w;!#FVdQ&MBb@0AZbU1^@s6 literal 0 HcmV?d00001 diff --git a/modular_doppler/modular_species/species_types/snails/icons/shell/shell_mob.dmi b/modular_doppler/modular_species/species_types/snails/icons/shell/shell_mob.dmi new file mode 100644 index 0000000000000000000000000000000000000000..27efa628b541ccf2dde3d77739c37dfeb37552c6 GIT binary patch literal 9177 zcmZ{~byOT(@GUw>kl^kP8C-$~4Z#zf;7&qtcLtZ>1Hs+h-5ml6I!GY61$TFD^WC-H zd+Yx0`-AD3!;$JbyLRn5-C@d#G8nH(UxPp(3^`dzRp7b`{B@%s0iP89cC)~x+*4i4 zS@NrssiTFxvxS{42;`ogFy8gLmlJ#NRL~0* z3uEy2mo6*IE#if$%f{9@*<^3g#BaM@wlU^ispWNkVQiyv|XI5ZSFrc zNPHTqS|e@E32tn8hj(%dsodMMq?zXeWpC7s@zzqPbAU>p zYsa@u?TUf_?0qz=4>Tob7e$VYN(p$2n>9|Psju&?eb(fl7jzYZW{*w-mWb|Hb9$MP zoD7b?yq$xV4YF0R#NOg`s53hx%&usWT1?+tW0TMrDK$XcOUN0qKtEpLyu@y|6Q}w+Ct!&GYzb6yi}ael6vp1!A1fCh@fT&SE!SJ zgx2TJU$yj0)s$PzK_K77R*6v85m~s$^?3oOVN-s8M(hSoY)vKRDbv03@r6npWM6-_H-MP8ATsFz?Eox~q zF}9quh$x|vv9JUmIP*_(*MdOHoAjqzi5F2~CmSku;-#hMb`? zi#LeQ&dBHy0fqV5W}z_(LZgJ)JOi(&{|MQ@A`*)-YPKA~*CK4yC2ud^r@p<1bneH8 zk7FLp*J{fuIBYDYX!J)Zi9;l4LDakh7}WHMh;GavqhEMRmY&dX#V6GrN_b3utPQP4 zh8p40J{13tT>sv;r^M0-*}#k1?V#e(V3V2)E=$&xz5*>oC}Ak#Qh^q^z2KKcam4}4 zK6S0(hM$9tR3RLbcpMipT0Dah8@?ppp^AeW z${%Tb+*+}LZ8JKHlFCLY`5N5_bPXlT@)My-9~f==gfozok^~)Thiv})k^XUWy?TbJ zW3koK8(4PR+oSNWynO}iPx?cxisqN7U{l1oWp4af6W0p^>|lYs{s?_4J`xSXu_1VL z481mVBZgh@!q!1OYGKiq8Tai^S`hZOH;A(;n?wX5aEF9g(n1k*tsq3?s>hacbjmo2 z3IZLakfx?wqN9fo-rpgl4o3&C!N;=)lZE{#{?`8xx0Pc0%2h?0C9A#RBkaEPLYVgg z9lbX#J!owe`?upA7dd(FQCy09`2#s6i`e&8SAN&5k$%AJ<;{G~HAV(oNC0E|<*|~u zr!-+}+q+X2E9Al@y-2e2x~LS00X>X?*nKm_!+~Af`B-!Y-ss z`WdDBp-QrnOX8&Kc({Ol5{AB@U6L0d_5o%?p$~s|Y~eWH`-y2?{VuM+ug#MGdufcv zXS?)Gb_v$M6(kjDZZqwL;9-Aw9$r~7c|JV>qYwum1l*XUnLWSrN zu+ncv*r-S9&dy~@L`lM@`TK`-L@}xBgi>?BemZ^AIX#UPqZ3++0$7Lm=}Cwd-gdEd z{89}3j`qo?JO>$IsTivh@@-#5XQPlW3>R7-u+mRTl2aHA$m83+40Y19EF2MK?;9Rjx1!nkg4{%)WVPpeC5SJF?tU(zyqN` zhywdN&;=mF#Na*m+w(Jr!VbJ74kX^BuFWv8{^0XlOcw+Tz<_KXu%Fy%$IcGs>L)L7 z?NpQ@s>?JjI!NWe6|XXLsuPs!_DtwjO20-}r-jtoq-n1Y=r{e7k^E5Pcn?i#K69+a zM!#6gn>xMOjW>(`cR?psLeZvVmRlv}ci`M~gx|cr+feEK-HQ`In~2)R>G(ZTOi~;` zUrkI@H+&Cy=4FX&xFfAol{$^GHw(H|<Lqw=4(sWRwm>$!c-A(UP~4pp<%vq+rp=Zery@BRzybr zE>7;5zs)XL5#EV2f4J$T8M*iOb~>opf6h_pKyuRJGStkX72$M9NEkcb-hY_C@NR9h z9d?s^Co`LG^Tj{h)Xo`oBK+G&vZf=a!@FwKivd0EZQqw)8J4?5c05Ho2O`f1mGus0 zVQ!z;IwL#a9QxA_jx?`Gmj~%swqJv= z+jjz162e_+a5Ce=ny-U3Z9GJ-%MI9X?#Jl{c@d!#--AwbhI#G_u5JDr2pJ`Vv`+`X z^tk}21cOfngwjKrph2C4dDjag-;6`~}wv;1cu^N!8 zj74{N1>emhSwnmpTBt^-ECTT>T*#Qa0c`Eiz7A@7vXKC5cQiJQsl)lc$S?;55#*8~WrCSJ~?IWRtV{YbG?wGVhSJ6+N1HCL!Qt>mxYuRZJzrRZRS%%5|SK6gD$ zxc0`?x_AUD-_ETBH+YTfy4?J_4ydJd#ud6cA|Pbf^22Lrz!|hm{F#EPD! zUR7G^nDJ1HvprT%ON>%rnc{IPpy7-9?fX=;Fdt8}V)9`my8k-uL*I*4o1fSQuSOTDz0dg$Jj%wd))D-^RvkGXdXy^9 zur=Ree5BNgys5W7fLxOuXm{wjJYNAob#LD|Szi`q?eOJ$y|oy1nAT+c>qEq8-|f`t zju;zHquQG@;M$M1tu*-KJE7_QmJMUF6My2e7#YXWVc?*U;?!jg+GPWVfQoK}?(pya z*|2$?=~+H==5c(u!op^UvteoXxH$WBHZ_3XB-RT;IIWDqr~R#2eJj3{!1iFjSS3ad z#T$@uy9mO^nmm_ZJr;vDq-hja_GQF}8cDDVGvUQ@H<0UQ-ea+Pm~*|e#M+)vJNPSY0BVapSkMZ+9EgaMk$L&_;);QXSLgO8 z-82Vc_TmryTb@Y5+sM4_XvypJXqmSu3?$?O- zk2_S6G7ud;z+yTE3oT*7tVD{dHoTL2uf8qsxM6u^!v*Tjxz8{FfIu5Tl1(_sZe;vt zeOknelmLP$_-6}eypau$Rb zxW~{~=v`^ZlaccO)F8ql9LeN?M5n%QG;Km7MN z*XfbA_YP^i(Fm~N`l%WJm_j((sEg{w-WLD@Ux5}|b+=F7=M6cxZG~?(`%LbSA03!N zyo5O28>L)Q99f{iO2dV0WdH5u^648!ih@~gE0!9s!88H)Rct<+zuBdFeN-Q;4ZEZP z1&e*=90y^3!#fbw`Q*3JNc22aiIwWLM)%{)~$D<6B?Qk1_1B#n!u7LZc@D?$~8;A~r@;yS}2Y}{e-Yc3V z->e^zh+xUlx!=GNdcCn85StPcjQj4GWwTyQa*N|`0j@Mzu;O6a%UfH<-i9ZN-By%x zeOGNBP4va{M(b9v{ZR_!{kWC9l=jPw>RFRWv;tSw+B*J_^0wvTDMo6#H6+Ezk3N`XC+3_gA^Co-GL=rD1Dp@ z{E(^Hd#iyE4UOQm>_<+f2C@PFSp9d_0PsMYaw>OZt82C`HOAocWMFtv2En72M4*-2 zT=*Bo-wC(Nr85lfcO?~Cg(~z!wq?#Lh;rjBaMD4Y`zzPEzSWo?kFzi?m#gxI0f%lh zBwYijCkEo1^{Io*UJ?-+G8h+9Soj8?fWY`Ez{7YPUI{;Vav5m(d@k0Ve~fSh)MnUO zF`?Xt88@SkzqIb}C)(%GeH&n3fMl{3#-KJ3N?(w7RZW9%pwx923<5m{p32IR{shR$ zZF;pJZ3rNO2yc+|TU6u^P@>#|Y*6_#<9q`MgOd=98kCpuol2hx0Jkxea?grv_4>M0 zUIZ1W{AC!h#9H63t9&Osg?mvC1t)d_PXCX5_`hn3|4ZZ0=U3)LcJEr=SMMsY_6WVzo~T(>;3vE@B5>_=70u$PY;C=(4LG-6K=$(` zPD98p+)|$dv2k<_T*ZDsb3G_pTM6Bc#FWM;Oifjju-L^1iR&*}#3w4&{1cxEsHZ9@ zQ0o_+bSS$w`%8-+R|MsLr%AOh>dI3s|FI~PW7lX30Yka*fZxD(aDr!Skb_HkW zXYbWOw4}oOUq`6ob4|W8sY;Q2FWC_J^@0!G{NvC4W0a3nEen%RbvO|Pl}9|FOIY}C zQ#ynM@MFi7IUT5b&k7r(RW5#%xzp0Hc-*p5^Tz@mI?_YPl|G;9!CadrBQtaFW-acB zAtx3Z5i7Rg0jP;=)8IqZE!tMtz1xn>HCa^`9WXqa)M6wQ*KwNC27f?9(@h7Gkf@0B zDmTe|oh6OHv7@y7A>r^RsG-DK!(omWzA``4Q`XT7v1%|XAOQYvClNkAikvNUZy%Qn znf??G)Y4Nua{+$4h3Q_cn@;pdSd0fJTVa4E3YqNXbo#LF@S+XUSOIw03cL!zq zeFO=1sZEZL=m|w=bEXprn(A%A;#5ke3nOM&pikPelk!2JUyc@2i5RJDNe3V+aD&A# zQjMWbNwHQAV+FTUSSAuqnzY=2>dIndCA&>PPVL-nTs@?Snt=y3b*3LaTGl(K%p!xmctzz(Yjp3&8;6DbghUS z>nb(%Y_$+C?!92s)AXqd6F_0Oc-^h^rD?N~Z1W$IxL#06l@0cN!KHMr^H{Z0k>IkM zzCI03wMtn3%YKI+d;N3bT|q3y1mUQ-z;aunWu*YPm;m35E#6#8DY<4}a7o^l?|<%i zHpa1kq41#?N;C;yI=IPmUa&Zys`!q_8xiEi>Q4D{$|sGuSQS3UkB-uKHyLV+}HqHpf<32(VReR!Zp(hgDa?i zH(ajze<-cUJ3vG|c%EtJ@M5LQn~Qn>hJZ#&R0L+qV?1>!6|rTq(s@15wV(hIk5}q_ zDKR1ljpqJ&LBXScEEu(A;4~?VCL|&aPMP$B{!=Wg)BOA!zzq-Z#2N62@#;|H-)bG) z2r5g=H_qoprBV(LS=2nA|HFCrLUxeCv$(t$E%Apn6QwM{RWSg6m{SWgn5{ z&#Q6TW?|QGCLtMEN8{W+MV=|SgoS*LK^Y~?ns-*iWEZE1yvqLas;6_r8d=CMqaFnz zSR!@ z4AB$gy+xQ5mse2u`pjxhqWtRBEBJ(|*;$#d(P93~1bUX1%nLH&8@zR-e<-6K(+Jn} z_Md`ExBcje!*2Rbb;yP#zN(4nWPB^9{dI_wKPz|SDTq^YoOzLq;}RJnMuY85SyVS7 zzzd9_GlGhNR(~(0%PJ@g%#K#*%%g)Qhp>^zxIpKTZ!aYHQL6?i>NsldNYR9D@M_sV zsG?P`9NyS{w*A1W`jLn5PAF`m*vjZ)@$4nfB(gq91$kgb@VqV!_uGv9vw;;F7;50{ z?S108$Vsazhiq~HQLRcx(&kX_&ejD*b06_#YeR?B|!Evl!ZfsAMA02(gOn&xkq9kKM4 zpl%dN{c{G|e?avXU2%~X;D(!jKqZh75BDj*xx2eNadBb+W?9rq#;O{u(4|&SREMa$ z+G^yo@Uy^NnHU@Pfr+_P)fVpW?(9vCJGavCjXK0~w6Dxnr5Ca$7*AE&rtk2W38@P- z;tgOF=|O|bu$lbOK)9|5isAz$4T#7S=zvj}sYN@Colie{hQDp>>p#w6%2D>GAZZnV z`6CpPsI?trg2Dl_D0zsoo{T)(KVK$Nunq ze0BT@^`nsKjFsEmes6e8%COE~VTGZvZbmPjRG}IRux?QtA95mTpX~hrr6#@j{Nrxn z`eJAchETKQsl{TY0<&4myYv8c=gIxT#PD!}fFDswlpbF)PVV-{Nl5i&`Y5A*N4^m* zI{f`cYK$2}83#@q2Ofn?x&G|$pZQ>+qh@It zukXU6ilpv#40gq#XH`@}wVNxoFm0XhR2vifp&O~qus2vz{L0NjEdNmR!G*qrQ#KUT zKO}?m>6kjN6%-mf&V-QMp=bal%YqQ<3^++FR3WiMYvKGti5c}UtoGSH{LNeg$f zdAuDrSH2Vc(~oRlLlU-*eEP4h(ybtsAOCo`4F=@>gP(nH90 zHcyc0>KNbK#PD)lW;ZhYa;o+}DD8hVYW95cm3X4g>I<*XTEvW< zN3Ov2Xjyii>?VqQ8zn9wU0}z{>3Sa1zhy!g=U{bK@t+iOe82JW@slYTw0tE%ID{5- zx+Hs@a{XuEgHz;*KZ5jgHioHyJXm|vgzPvw$OyC1H=v0p!vBqVHO?;rCKeRPJH0L3 z4mz`l<+J8Z%fySsr9oBFQ5yZF#>m0g|K}e;fXbsf0i0=pTOM!H>QfMmYbxu+GSK#? z+P)q)etHpdE1bDa9nFtP%d zhTs;(a#l0S2Hxi15a}X7LeQ!-U0#{@1qcfxC|U-}p{a=z(%t36mWr7Y3Lm*m!qiYz zPk%{ulPFaipFx-c!VUMA?leDL+B@DvXG z=2OrfvDH(MZjxqbZZ4zDF3sbYJSwkFRoPYJbt?-@uM~e%$`926d4k#M5YGoxI26-g zSuq_Nj$J}bcQqwoG$9#NsXQ=2f#;l~rA{jB>hSC6*Pp#OI5F8ngUbVXw|J$&gqm|Z zzn^Tk2Z)#qc^ktHk$R`x-W}1)qSxeNvxu_6N(&1FO<=)K%fR4GgKyF5_(`SCns2#X zIZXL?7^*}x7|UfNPr&hsC7-7?-p@u5&@OPWF=ptJa3RM{0%N39WOqH}scGVFSfPIM z$PLuqs`*OiEAgiD3^#ropYB49C9NNqw*^@cixaq-dw+*|VWevA9- zU(`O~qIqR%^lIp!y&iZgggmyt_kkz=9)TG$HKN0$zOGcP`CxrJX>*f72$$EOT_%>3 z0Hx7VQHeK|8j@zNfLQ`K)4xcMjq(9a2-;I}zl}RRn9M@$f^0N}T#e&IaMp9#mA@Z& z(%mm?cGO*KYH$^lhafg+?=7wMV+8u%{_pW6yQU-gm1h z2d11(ztfEBr}As?c4X$MHji*~jgixHby@jm(JfCGwlshoYJ=|eJQ%>yp`CnYY%S>P z$9c?)@YpVcz;{V6_PRuNZUC9Bgb_8JZB{PPoYnC#F*K$qmoAxBe7+<3QZp}0F){$A z7d(eD5dL%D!74Ma#^<73YCg0iyzs3I*;#2)>xDcwaM)#T4jtN90{Jj4`ZL^fkgHP8bhHa{w1||1~JY%c~p9`@eli=!(c_~FonX7 zj`sx&6-KJSEa~bWE*8R>9FsR9`Gr9V-zHzW?_l|p^rF)%TzG5}i@)!SKGT;s1B^6S zpK2BTrksPOVWlKOF3*1r9{t)JO-lTa-6(oQ5zJ5TTV6r(3k!7y>qtpRBso358mW8c z!xcQ1?nvp;`Wer$8C}>lZ!W>!0h`zuBhygajuHO{rx~;z-&0ojIP3ZP_u(&f+HaWh z_HoLWdi(I33%I305s{|!4`_}5$FrsX-z@lyHk%Of6)zIi7fR}!VEw!UvI&w?<`nq%R%i08$bSS%noC>3;Zf{Kck zx3|7HJVjq>YFt)wfsBl?y1F$rQ70=iARsNkz`%}5LBw`zJtQ6`77|=cjKKf^00DGT zPE!Ct=GbNc005|ZR9JLGWpiV4X>fFDZ*Bkpc$}4y%L>9U6hzm_SA=#izP4_pMY^#6 za7nJ_Vjd+47XRMZE?kMpZe}s=uYpU{-S(<_Ih7I@Z_@NXkd6u?vz zf|rj9+@jP_KfY#n`Q%?@EBdipUVj5&mYEk#LQCNQ00f6gL_t(&f$f-akD5Rb#Zf#D z1zqJ_K<>a5MNTDFzyFu(%r3qDGs7mmY)w;Mt1+1~@3(J;y-q!E(4hZIBhYjG$K!D? zfsbh2R*z*K2xGxur*Ei<-n^4LmN#uqDF#b`*06_k|0BN?|Znw+VIHkWYWDp7= zWgzGbA{;@mACGbl012k-5Tt4R{{FFD#3@a%65)C^pUpxc$vSvL`q+V-B!B_v1$fJf z_~YY!8<$0v5%o-)?35}Yg7b%XS4(Pozl1T*~!aFaVM60k)u`0VclysIs>MfGkZB zprjIzNeC^N%^-n<8iEQVi1hg@GJ(B*2zY?_ttyhHpg-LLZ;t@J|H1%xc=oac zhKzm;VfqtPAjsRef`bDBV$lBHehT(et^;@xl{>9c(EuBo>CLrtBf~vyvvjF}S z9|R7-Q)yA6n48cOft;<@k`4eP&VSoilXA=aQip=!3?9Kii>Y*+xx{vLGz z9AACBj!1=@h82_eW0Brj^Zr1>Sgyi?@vnGIdI)VmA z5bTeK3t6}A?>M1fFB+i!JfF{>H3Ij?YLJ5ShSL&tI)4@k#-p`BD4R0Ji--kMa&6CljiHpoSJe0#`Bt7(VO) zwxA^ee(&#e0=kR@@QDIA*H=A+S9%CqjG)oyZ!PS3~{T7S}QIFl`C zfj}Ss(l%rQNMQCyW_QV}$cX+Q794_Z2q}L^puGSB`qM4YO{k0*Ks~1sw_M@*@iAns z!WIq=2#CS>d)@ZPS92roC+e;R%vFpnXj?o#4`5MWKB%j10oecqXmtYM|HlAUT~S=I zHRf$k2OLYE-)R6=0u#XV089o?^fwti(|^#QL4)kFtj~YJzkhvp?r&M2oy)d9dpDFz z|NiyayZu19Be1Q{ssm82{4MLVchdy$?g+rPKHq*Q1px5ohQPKy!|`ulFDC$&^%(+S*_(if3}Pfh^7)@S;k?sqgsfBfJA z013?c#;gwahcbG&@z+ggjmYxje%Jo@`@<1Hx4f}cAkcE>Z_~r*Y5s!-4I1P`KLN~? Vt6aQ81Q`GT002ovPDHLkV1mSc&SL-o literal 0 HcmV?d00001 diff --git a/modular_doppler/modular_species/species_types/snails/modular_snail.dm b/modular_doppler/modular_species/species_types/snails/modular_snail.dm new file mode 100644 index 0000000000000..1e86caea374dc --- /dev/null +++ b/modular_doppler/modular_species/species_types/snails/modular_snail.dm @@ -0,0 +1,190 @@ +#define SHELL_TRANSPARENCY_ALPHA 90 + +/datum/species/snail + mutantliver = /obj/item/organ/internal/liver/snail //This is just a better liver to deal with toxins, it's a thematic thing. + mutantheart = /obj/item/organ/internal/heart/snail //This gives them the shell buff where they take less damage from behind, and their heart's more durable. + exotic_blood = null + +/datum/species/snail/on_species_gain(mob/living/carbon/new_snailperson, datum/species/old_species, pref_load) + . = ..() + new_snailperson.update_icons() + +/obj/item/storage/backpack/snail + /// Whether or not a bluespace anomaly core has been inserted + var/storage_core = FALSE + slowdown = 6 // The snail's shell is what's making them slow. + obj_flags = IMMUTABLE_SLOW //This should hopefully solve other issues involing it as well. + alternate_worn_layer = ABOVE_BODY_FRONT_LAYER //This makes them layer over tails like the cult backpack; some tails really shouldn't appear over them! + uses_advanced_reskins = TRUE + unique_reskin = list( + "Conical Shell" = list( + RESKIN_ICON = 'modular_doppler/modular_species/species_types/snails/icons/shell/shell_obj.dmi', + RESKIN_ICON_STATE = "coneshell", + RESKIN_WORN_ICON = 'modular_doppler/modular_species/species_types/snails/icons/shell/shell_mob.dmi', + RESKIN_WORN_ICON_STATE = "coneshell" + ), + "Round Shell" = list( + RESKIN_ICON = 'icons/obj/storage/backpack.dmi', + RESKIN_ICON_STATE = "snailshell", + RESKIN_WORN_ICON = 'icons/mob/clothing/back/backpack.dmi', + RESKIN_WORN_ICON_STATE = "snailshell" + ), + "Cinnamon Shell" = list( + RESKIN_ICON = 'modular_doppler/modular_species/species_types/snails/icons/shell/shell_obj.dmi', + RESKIN_ICON_STATE = "cinnamonshell", + RESKIN_WORN_ICON = 'modular_doppler/modular_species/species_types/snails/icons/shell/shell_mob.dmi', + RESKIN_WORN_ICON_STATE = "cinnamonshell" + ), + "Caramel Shell" = list( + RESKIN_ICON = 'modular_doppler/modular_species/species_types/snails/icons/shell/shell_obj.dmi', + RESKIN_ICON_STATE = "caramelshell", + RESKIN_WORN_ICON = 'modular_doppler/modular_species/species_types/snails/icons/shell/shell_mob.dmi', + RESKIN_WORN_ICON_STATE = "caramelshell" + ), + "Metal Shell" = list( + RESKIN_ICON = 'modular_doppler/modular_species/species_types/snails/icons/shell/shell_obj.dmi', + RESKIN_ICON_STATE = "mechashell", + RESKIN_WORN_ICON = 'modular_doppler/modular_species/species_types/snails/icons/shell/shell_mob.dmi', + RESKIN_WORN_ICON_STATE = "mechashell" + ), + "Pyramid Shell" = list( + RESKIN_ICON = 'modular_doppler/modular_species/species_types/snails/icons/shell/shell_obj.dmi', + RESKIN_ICON_STATE = "pyramidshell", + RESKIN_WORN_ICON = 'modular_doppler/modular_species/species_types/snails/icons/shell/shell_mob.dmi', + RESKIN_WORN_ICON_STATE = "pyramidshell" + ), + "Ivory Pyramid Shell" = list( + RESKIN_ICON = 'modular_doppler/modular_species/species_types/snails/icons/shell/shell_obj.dmi', + RESKIN_ICON_STATE = "pyramidshellwhite", + RESKIN_WORN_ICON = 'modular_doppler/modular_species/species_types/snails/icons/shell/shell_mob.dmi', + RESKIN_WORN_ICON_STATE = "pyramidshellwhite" + ), + "Spiral Shell" = list( + RESKIN_ICON = 'modular_doppler/modular_species/species_types/snails/icons/shell/shell_obj.dmi', + RESKIN_ICON_STATE = "spiralshell", + RESKIN_WORN_ICON = 'modular_doppler/modular_species/species_types/snails/icons/shell/shell_mob.dmi', + RESKIN_WORN_ICON_STATE = "spiralshell" + ), + "Ivory Spiral Shell" = list( + RESKIN_ICON = 'modular_doppler/modular_species/species_types/snails/icons/shell/shell_obj.dmi', + RESKIN_ICON_STATE = "spiralshellwhite", + RESKIN_WORN_ICON = 'modular_doppler/modular_species/species_types/snails/icons/shell/shell_mob.dmi', + RESKIN_WORN_ICON_STATE = "spiralshellwhite" + ), + "Rocky Shell" = list( + RESKIN_ICON = 'modular_doppler/modular_species/species_types/snails/icons/shell/shell_obj.dmi', + RESKIN_ICON_STATE = "rockshell", + RESKIN_WORN_ICON = 'modular_doppler/modular_species/species_types/snails/icons/shell/shell_mob.dmi', + RESKIN_WORN_ICON_STATE = "rockshell" + ), + "Ivory Rocky Shell" = list( + RESKIN_ICON = 'modular_doppler/modular_species/species_types/snails/icons/shell/shell_obj.dmi', + RESKIN_ICON_STATE = "rockshellwhite", + RESKIN_WORN_ICON = 'modular_doppler/modular_species/species_types/snails/icons/shell/shell_mob.dmi', + RESKIN_WORN_ICON_STATE = "rockshellwhite" + ), + ) + +/obj/item/storage/backpack/snail/Initialize(mapload) + . = ..() + atom_storage.max_total_storage = 30 + +/obj/item/storage/backpack/snail/build_worn_icon( + default_layer = 0, + default_icon_file = null, + isinhands = FALSE, + female_uniform = NO_FEMALE_UNIFORM, + override_state = null, + override_file = null, + mutant_styles = NONE, + humie = null, +) + + var/mutable_appearance/standing = ..() + if(storage_core == TRUE) + standing.add_filter("bluespace_shell", 2, list("type" = "outline", "color" = COLOR_BLUE_LIGHT, "alpha" = SHELL_TRANSPARENCY_ALPHA, "size" = 1)) + return standing + +/obj/item/storage/backpack/snail/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(storage_core || !istype(tool, /obj/item/assembly/signaler/anomaly/bluespace)) + return NONE + + qdel(tool) + upgrade_to_bluespace(user) + to_chat(user, span_notice("You insert [tool] into your shell, and it starts to glow blue with expanded storage potential!")) + return ITEM_INTERACT_SUCCESS + +/// Upgrades the storage capacity of the snail shell and gives it a glowy blue outline +/obj/item/storage/backpack/snail/proc/upgrade_to_bluespace(mob/living/wearer) + add_filter("bluespace_shell", 2, list("type" = "outline", "color" = COLOR_BLUE_LIGHT, "size" = 1)) + playsound(src, 'sound/machines/click.ogg', 50, TRUE) + storage_core = TRUE + var/old_inventory = atom_storage.return_inv(FALSE) + emptyStorage() + create_storage(max_specific_storage = WEIGHT_CLASS_GIGANTIC, max_total_storage = 35, max_slots = 30, storage_type = /datum/storage/bag_of_holding) + for(var/obj/item/stored_item in old_inventory) + atom_storage.attempt_insert(stored_item, override = TRUE, messages = FALSE, force = TRUE) + name = "snail shell of holding" + update_appearance() + + // Update the worn sprite with the blue outline too if applicable + if(isnull(wearer)) + wearer = loc + if(istype(wearer)) + wearer.update_worn_back() + +/datum/species/snail/prepare_human_for_preview(mob/living/carbon/human/snail) + snail.dna.features["mcolor"] = "#adaba7" + snail.update_body(TRUE) + +/datum/species/snail/create_pref_unique_perks() + var/list/to_add = list() + + to_add += list( + list( + SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, + SPECIES_PERK_ICON = "home", + SPECIES_PERK_NAME = "Shellback", + SPECIES_PERK_DESC = "Snails have a shell fused to their back. It offers great storage and most importantly gives them 50% brute damage reduction from behind, or while resting. Alt click to change the sprite!", + ), + list( + SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, + SPECIES_PERK_ICON = "wine-glass", + SPECIES_PERK_NAME = "Poison Resistance", + SPECIES_PERK_DESC = "Snails have a higher tolerance for poison owing to their robust livers.", + ), + list( + SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, + SPECIES_PERK_ICON = "heart", + SPECIES_PERK_NAME = "Double Hearts", + SPECIES_PERK_DESC = "Snails have two hearts, meaning it'll take more to break theirs.", + ), + list( + SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, + SPECIES_PERK_ICON = "bone", + SPECIES_PERK_NAME = "Boneless", + SPECIES_PERK_DESC = "Snails are invertebrates, meaning they don't take bone wounds, but are easier to delimb.", + ), + list( + SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, + SPECIES_PERK_ICON = "crutch", + SPECIES_PERK_NAME = "Sheer Mollusk Speed", + SPECIES_PERK_DESC = "Snails move incredibly slow while standing. They move much faster while crawling, and can stick to the floors when the gravity is out.", + ), + list( + SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, + SPECIES_PERK_ICON = "frown", + SPECIES_PERK_NAME = "Weak Fighter", + SPECIES_PERK_DESC = "Snails punch half as hard as a human.", + ), + list( + SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, + SPECIES_PERK_ICON = "skull", + SPECIES_PERK_NAME = "Salt Weakness", + SPECIES_PERK_DESC = "Salt burns snails, and salt piles will block their path.", + ), + ) + + return to_add + +#undef SHELL_TRANSPARENCY_ALPHA diff --git a/modular_doppler/modular_species/species_types/snails/organs/snail_heart.dm b/modular_doppler/modular_species/species_types/snails/organs/snail_heart.dm new file mode 100644 index 0000000000000..7c8362a56cd81 --- /dev/null +++ b/modular_doppler/modular_species/species_types/snails/organs/snail_heart.dm @@ -0,0 +1,76 @@ +/obj/item/organ/internal/heart/snail + name = "twin gastropod hearts" + desc = "A primary heart normally nestled inside a gastropod's shell, and another in the owner's actual chest; necessary to maintain ample bloodflow through essentially two torsos." + icon = 'modular_doppler/modular_species/species_types/snails/icons/organs/snail_heart.dmi' + icon_state = "heart-snail-on" + base_icon_state = "heart-snail" + maxHealth = 2 * STANDARD_ORGAN_THRESHOLD // There's two of them. Also, due to the special interaction below, it's best we make sure these aren't easily lost. + now_fixed = span_info("Your hearts begin to beat again.") //For the sake of verisimilitude. + + COOLDOWN_DECLARE(shell_effect_cd) + +/obj/item/organ/internal/heart/snail/on_mob_insert(mob/living/carbon/organ_owner, special) + . = ..() + if(!ishuman(organ_owner)) + return + + if(!issnail(organ_owner)) //This is cleaner than checking for the shell, because there's not really going to be any non-horribly-bugged situation in which a snail will be lacking a shell. + return + + var/mob/living/carbon/human/human_owner = organ_owner + + RegisterSignal(human_owner, COMSIG_MOB_APPLY_DAMAGE_MODIFIERS, PROC_REF(modify_damage)) + RegisterSignal(human_owner, COMSIG_MOB_AFTER_APPLY_DAMAGE, PROC_REF(do_block_effect)) + +/obj/item/organ/internal/heart/snail/on_mob_remove(mob/living/carbon/organ_owner, special) + . = ..() + if(!ishuman(organ_owner) || QDELETED(organ_owner)) + return + + var/mob/living/carbon/human/human_owner = organ_owner + + UnregisterSignal(human_owner, list(COMSIG_MOB_APPLY_DAMAGE_MODIFIERS, COMSIG_MOB_AFTER_APPLY_DAMAGE)) + +/** + * Signal proc for [COMSIG_MOB_APPLY_DAMAGE_MODIFIERS] + * + * Adds a 0.5 modifier to attacks from the back, code borrowed (wholesale) from the roach heart. + */ +/obj/item/organ/internal/heart/snail/proc/modify_damage(mob/living/carbon/human/source, list/damage_mods, damage_amount, damagetype, def_zone, sharpness, attack_direction, obj/item/attacking_item) + SIGNAL_HANDLER + + if(!is_blocking(source, damage_amount, damagetype, attack_direction)) + return + + damage_mods += 0.5 + +/** + * Signal proc for [COMSIG_MOB_AFTER_APPLY_DAMAGE] + * + * Does a special effect if we blocked damage with our shell. + */ +/obj/item/organ/internal/heart/snail/proc/do_block_effect(mob/living/carbon/human/source, damage_dealt, damagetype, def_zone, blocked, wound_bonus, bare_wound_bonus, sharpness, attack_direction, obj/item/attacking_item) + SIGNAL_HANDLER + + if(!is_blocking(source, damage_dealt, damagetype, attack_direction)) + return + + if(COOLDOWN_FINISHED(src, shell_effect_cd)) + source.visible_message(span_warning("[source]'s shell weathers the blow, absorbing most of the shock!")) + playsound(source, 'sound/weapons/parry.ogg', 50, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + + COOLDOWN_START(src, shell_effect_cd, 3 SECONDS) // Cooldown resets EVERY time we get hit + +/// Checks if the passed mob is in a valid state to be blocking damage with the snail shell +/obj/item/organ/internal/heart/snail/proc/is_blocking(mob/living/carbon/human/blocker, damage_amount, damagetype, attack_direction) + if(damage_amount < 5 || damagetype != BRUTE || !attack_direction) + return + if(!ishuman(blocker) || blocker.stat >= UNCONSCIOUS) + return FALSE + // No tactical spinning + if(HAS_TRAIT(blocker, TRAIT_SPINNING)) + return FALSE + if(blocker.body_position == LYING_DOWN || (blocker.dir & attack_direction)) + return TRUE + return FALSE + diff --git a/modular_doppler/modular_species/species_types/snails/organs/snail_liver.dm b/modular_doppler/modular_species/species_types/snails/organs/snail_liver.dm new file mode 100644 index 0000000000000..392b2a999c6e8 --- /dev/null +++ b/modular_doppler/modular_species/species_types/snails/organs/snail_liver.dm @@ -0,0 +1,7 @@ +/obj/item/organ/internal/liver/snail + name = "gastropod liver" + icon = 'modular_doppler/modular_species/species_types/snails/icons/organs/snail_liver.dmi' + icon_state = "liver-snail" + desc = "Due to snailfolk evolving in typically poisonous environments such as bogs, their liver has a higher tolerance for poisons compared to most." + maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD + toxTolerance = 5 //can shrug off up to 5u of toxins diff --git a/modular_doppler/modular_species/species_types/snails/snail_bodyparts.dm b/modular_doppler/modular_species/species_types/snails/snail_bodyparts.dm new file mode 100644 index 0000000000000..9a9c413e0dce8 --- /dev/null +++ b/modular_doppler/modular_species/species_types/snails/snail_bodyparts.dm @@ -0,0 +1,35 @@ +// MODULAR SNAIL OVERRIDES + +/obj/item/bodypart/head/snail + icon_greyscale = BODYPART_ICON_SNAIL + bodyshape = BODYSHAPE_HUMANOID + head_flags = HEAD_HAIR|HEAD_FACIAL_HAIR|HEAD_EYESPRITES|HEAD_EYECOLOR|HEAD_DEBRAIN + eyes_icon = 'modular_doppler/modular_species/species_types/snails/icons/organs/snail_eyes.dmi' + +/obj/item/bodypart/chest/snail + icon_greyscale = BODYPART_ICON_SNAIL + bodyshape = BODYSHAPE_HUMANOID + +/obj/item/bodypart/arm/left/snail + icon_greyscale = BODYPART_ICON_SNAIL + bodyshape = BODYSHAPE_HUMANOID + unarmed_damage_low = 1 // Roundstart Snails - Lowest possible punch damage. if this is set to 0, punches will always miss. + unarmed_damage_high = 5 // Roundstart Snails - A Bit More damage. + +/obj/item/bodypart/arm/right/snail + icon_greyscale = BODYPART_ICON_SNAIL + bodyshape = BODYSHAPE_HUMANOID + unarmed_damage_low = 1 + unarmed_damage_high = 5 + +/obj/item/bodypart/leg/left/snail + icon_greyscale = BODYPART_ICON_SNAIL + bodyshape = BODYSHAPE_HUMANOID + unarmed_damage_low = 1. + unarmed_damage_high = 5 + +/obj/item/bodypart/leg/right/snail + icon_greyscale = BODYPART_ICON_SNAIL + bodyshape = BODYSHAPE_HUMANOID + unarmed_damage_low = 1 + unarmed_damage_high = 5 diff --git a/tgstation.dme b/tgstation.dme index 68e6c9fb15a42..1d03564abb18f 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -416,6 +416,7 @@ #include "code\__DEFINES\~doppler_defines\logging.dm" #include "code\__DEFINES\~doppler_defines\manufacturer_strings.dm" #include "code\__DEFINES\~doppler_defines\mobfactions.dm" +#include "code\__DEFINES\~doppler_defines\mobs.dm" #include "code\__DEFINES\~doppler_defines\mutant_variations.dm" #include "code\__DEFINES\~doppler_defines\obj_flags_doppler.dm" #include "code\__DEFINES\~doppler_defines\organ_slots.dm" @@ -6713,6 +6714,7 @@ #include "modular_doppler\modular_customization\organs\external\tail.dm" #include "modular_doppler\modular_customization\organs\external\wings.dm" #include "modular_doppler\modular_customization\organs\internal\ears.dm" +#include "modular_doppler\modular_customization\organs\internal\eyes.dm" #include "modular_doppler\modular_customization\preferences\antennae.dm" #include "modular_doppler\modular_customization\preferences\body_marking_lizard.dm" #include "modular_doppler\modular_customization\preferences\body_marking_moth.dm" @@ -6781,6 +6783,10 @@ #include "modular_doppler\modular_species\species_types\primitive_demihuman\primitive_demihuman.dm" #include "modular_doppler\modular_species\species_types\slugcats\slugcat.dm" #include "modular_doppler\modular_species\species_types\slugcats\slugcat_bodyparts.dm" +#include "modular_doppler\modular_species\species_types\snails\modular_snail.dm" +#include "modular_doppler\modular_species\species_types\snails\snail_bodyparts.dm" +#include "modular_doppler\modular_species\species_types\snails\organs\snail_heart.dm" +#include "modular_doppler\modular_species\species_types\snails\organs\snail_liver.dm" #include "modular_doppler\modular_traits\code\neutral.dm" #include "modular_doppler\modular_traits\code\organs.dm" #include "modular_doppler\modular_weapons\code\gunsets.dm" From fea053b62d91b3aea3baf57e9ba5d58397cb0cc8 Mon Sep 17 00:00:00 2001 From: Nerevar <12636964+Nerev4r@users.noreply.github.com> Date: Sun, 22 Sep 2024 13:33:11 -0600 Subject: [PATCH 2/4] whoops --- code/modules/surgery/organs/internal/eyes/_eyes.dm | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/code/modules/surgery/organs/internal/eyes/_eyes.dm b/code/modules/surgery/organs/internal/eyes/_eyes.dm index e15f3cdf161b5..c24a6747b64ab 100644 --- a/code/modules/surgery/organs/internal/eyes/_eyes.dm +++ b/code/modules/surgery/organs/internal/eyes/_eyes.dm @@ -145,8 +145,18 @@ //var/obj/item/bodypart/head/my_head = parent.get_bodypart(BODY_ZONE_HEAD) /// DOPPLER SHIFT REMOVAL if(my_head) if(my_head.head_flags & HEAD_EYECOLOR) - eye_right.color = eye_color_right - eye_left.color = eye_color_left + if(IS_ROBOTIC_ORGAN(src) || !my_head.draw_color || (parent.appears_alive() && !HAS_TRAIT(parent, TRAIT_KNOCKEDOUT))) + // show the eyes as open + eye_right.color = eye_color_right + eye_left.color = eye_color_left + else + // show the eyes as closed, and as such color them like eyelids wound be colored + var/list/base_color = rgb2num(my_head.draw_color, COLORSPACE_HSL) + base_color[2] *= 0.85 + base_color[3] *= 0.85 + var/eyelid_color = rgb(base_color[1], base_color[2], base_color[3], (length(base_color) >= 4 ? base_color[4] : null), COLORSPACE_HSL) + eye_right.color = eyelid_color + eye_left.color = eyelid_color if(my_head.worn_face_offset) my_head.worn_face_offset.apply_offset(eye_left) my_head.worn_face_offset.apply_offset(eye_right) From 99eee2a6ebe216f00484e48d678763a1406b296d Mon Sep 17 00:00:00 2001 From: "Lila S." Date: Mon, 23 Sep 2024 12:37:20 +0200 Subject: [PATCH 3/4] screenshot test --- ...eenshot_humanoids__datum_species_snail.png | Bin 2583 -> 2466 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_snail.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_snail.png index 11a4cdbf2ddacaeb096c3eb93c3045178d8c9cd3..2a080e4e19776b70ac4f9a8f9a8f02c5c54b7699 100644 GIT binary patch delta 2337 zcmV++3EuXX6rvN5nturLNkld zWR+Qlf-X&jMB1{v2FQIO1(EDM-U2DEONUg-gTyqMz}$XK4}CMYtrZlo)P!L0OQ#MR411 z--wv%n|B#&VnzVAiC~<0y#vDlQAH5_vcexz0Hg8E zEp2+aFn`u4N^?tF%0&?TXAf*+x+9Bje^3_zF#Ud|s)Vx#wprqjYX&&WN^!Y8xI0`l zx3uAMdjL4!)Cz#h?V-7)4R?nNm)m0!B^40ub^C)< zxjme3YNc$h(=_U3bDcV2agl?vxlYbEwc>Jncz=0uWzw_2$bWZe1PG6~apb}L8d%|v zIRjj75568h>(;N0Yjs_>ey!x|@$0iBSqOeW7aR`xOh?cR7Tc3vZgi8qKtU3{^M?Pn*4(D5UYiBRMX)e$BA_`$ z2mf`8)|%U<=VI}XEdXdA8llFN&(HGZjf(_>L3Zuj#~-#=^Y_N{?ApDBtgI{o0|T0m zUNTmL37|ydzuB)chY==E8mEuGSPcJtwSSkJ{c5;=oQUZP%a^oITxEeG?cVi~Ds}=0 zZ;znO0C$Irb?etk#%JR1O8opSr~VpIZ}Ey>C&V9f1{fO|y$wEU&rjutQ8fPd|MYPL zzj4*K!XNt;7zHuvV#Iwteq9vf`d}xb@h6IekHy^`E>0{tM68{`4hZ7~e=@=+6@M2< z=NW)q{7-yf#PS+obWH`)_3qmNO9Hq%Tv6Y7Q~7c^75z#Zf7}Ap)V!+#Oq{5BUcT^@^9I##5iE z&sQw~z*uK`K~~BHu#-Qb*x>&Yp7?Drr2^QUA7BTEWj{dgNS3UU0XzUapcJOpE0lX> zl~S}J%mC$Hn!@7{GQJ#`4deq0(-$6x5ZA&Gcc>q7RvNb0+%0pKjT9QPM zeXoM-3nfU@8F-EP0gPD>>;sX-<*p#DD$_5kef|pw`G=V%>NE3By*XD9VHVTWcbw@R}|4riR7g zB&ZY?1UzF92{lC|_LDCOIjrAU7i!95!&61)h$g-UIt6!9l04%F0 zjvzdD*{46ed)G(mlBHGpVdTSy4{^CY^!5d8O^z_4@l2CiSdfRatbde@3~dsN_~p9w zYb9a$Shjrp&(3j*qCAikMPdKe8dX#t7`$(KATMWv{`=UC5{$+hPi1eqZly&8Vf-BD z?1(-H5mr4Heit8Q&$-J!)@-SlOrGGt;C(K;%%?jQPKQYZ0YN6njiX^FiV7W+&z`CO zFGBRuj_2dCCsT~RsDE7HG#@dGve6=laCvjfC5nrtQZ{QwvbI@*b~M+ohvY{K5X+ur z6~*k|TBBxm`-60L|A43Oo?cm~R^fC|;dDf8Xmo@qU63S+jEsyiIY%2G&7RVNY`Xoy z@D9-J4^mo?9U(+%K{llY*_>|mlJ$(X0jDbVpGp|}bh_2cqJMe$4E%6Esy)J12yKDi z^@pRa!q`Rg^7V?w`{JDgl8VTr644Gzzv~b3%+xI1hR?tHo<;NWP4@vZMb^d4e67;V z{A_0ChmAHG4{+j*Lz)Yk3nwlfVrS1D(|vh{tSaBy;}6I)WOe6NGv9`y_h1)#%IvF$ z-_-9JZ4fqn^MCz4X69?7e|KnvjO}}mN!Pjp3=WTwmotHDT><^d%bCF7@Cets0&L!K zSTkyrw| z;MLb&Qv;j&!|``7%-;7b03ZJG&&;3y96z}>%eL@_ zP5sH;K9v)nd?Lkblj&n<(>tpoTt`t6!Y**#v|0dmX6`XLA$F(ALS)jW%k5#q11)WL z)ZEgBug6crk%Ou1Q(R~`au8pSU(Zrc6bVI!L`=T(RtLkw!%P@I zp10Q2s0a4fr)4L2YfX(hVf=VbetI+_U%)C765tUz0W=&urB<(a$zDh3)Mx7P6Q7!R zjrj^zk&pnZf4PR|s}|_7dcgGCZj9#r;KMquv>IMYsIC72;R#%PZJ47P00000NkvXX Hu0mjfMJ0Vd delta 2455 zcmV;I3264B6PFZ_ntusrNkld zo-a0a{0R8W8RNTPlWhOEo4vhr{I~r}lT%(s}&$_kT>Ocs=AS*+DKgG5|j?gi{$&DiSHn^cWx@m2^n#NfEh(NZ8n?a^?FV90)JD3px5hFXUv!($yu_4>AFYZ zi`0wPWBV_D93^tg&J&WTpP8~u8PM3IsD%X<05+AZ*V1=&?FFE>&%=_J<&@0^jZKPr z{lY;2%B_KV6k0L?XmE71Xz@=?^BaBygm`Od3D(jQHh)kDi(vByby`|sfrZ8*DoA2&2Pv6y?BAb0t=fD)**TXkTMhWJ+FVz4-nG? zQ7<$6aShOmZ?T7lej!$GN{hWM=_UyN=A+vwvSiZZ@o6RiVZWDF%%%D0c2oR@dVsaG z1ed!Dce{%gdmAoy7XX(o2G$-fcNZ=8Hr(wlTz~GaFjJBNQC^S7N4eEPkFLcZmEQ;+ zX+UF>qP|d7j?3M}rHc+q7g)nuy>x+9BP=YiP`bd%rHc++?k--aDxYvK(DM(Ci~*q* z*S9=`KL%#_42`a}8*8NAK9AN*CJMn1XePvi8U9Ba;BI%(+vmaE z?td~=*hKG(S59u$RBrrth@#-s7YjopW2X2YxfHJ7dfZ7qHin?yf86n-_Me1}`mri3 zuc&kI7LW_{d-|SezUm7p5d(WF>W@d7Ca1i`BH52@C$~J;gULueVZ|Iv!-gTF9ySZeALg)0TqG`Wt2beQdqoaDC$D8w$`C=4{|5v|zCyHM`>KhR* zU}`@ALai=ZytmJznW7&bQi)jni6Y@`ad*3m`mM*E6P@Z3f&Ot5CM1dp#RVpF4M9KaMkf4OO`z^HGiIeUwyXX zIRNx|isob{&45($Clnj}f5H<#4JOS15w@NTB$LbZIzT|4E<5-tR6-T=l2j#w{Fy<1 zfUiIqO>9+~kOA^^*+DioL_5q#q?8Gw02|)mZwci4vP1d8yb0#d2V?}r=MoS;BXB^% z-q1NIX9VOd*@v4sA@h4p9ckvVq`Y zNARpbIZzJvhTwUD?!-@O7=fHAJLtwnTaYuz&-_50;@%%ao9T6c?2*-TUpvS0qUC`d zTRrZ8a?ki~Od^oKF00IrNbC>pL*4|%VvgVRBcNCmX?f9d=eeG9;eX;sfiH2IEzdN* z#K~wxS_U@!IL(R&kkHKpilRI`vaLF5j$Qrc;jn_m<|G87vAumB-d<5RX@?}_Oxdyd zOr1?|1KJLeKHqp+WLefUONyc(%W~T5FU}tWSX@>ZMR?&#uXgjE-G|ig|DYmlGgRym zr1Eft9*s>G)xv^VQGa!~bkRZW#u`Zof0UMY{?;*7QIv;i0I$C|e@tW^9DWdX!_1s? zt)NKpVpmrD-Pok4sWu@}d}JN=>^`Kf)CrH&qcdd;kir&1gToKF;tJp0DYIIbnUfw> z5#hKXPIgFqJQU=IpGgoQ`dIu%^rRixR;?~BE7UTVS;M!OMSohP2_jtHVsDE&C@~oj zkDUm~NAkzhv$(8~BipLgv>uO-j-GpTeSTldELaUAu4wz6xCYgw}S^C+4k7s6OY8qN^+@^A2Uf6YjG;!*p zI4_W?I4_&xypU+Ucz`Rlt=!7%f?TNYKhCb!yQp^-7B>^N{*y4HD@VSoP^Gjr0p)_GU^%*;t=*gwX# z&bw^cc|rmh9eWsJ&j=ky(c%TtIESf|0SQ|aUq-Z`gul zGFF3;hc;dAE;d!Jr+B!8mCb9Tmc;QinSLA8ACj1C@dB|-&_|5Tlx6yDFft@P+2R3~ zyex+u#Yf|wc`#jny^+b_S zU_`{^J3ej4@As2FZ5pqwu2zp8IXo#d!E39l)%0o8ICtjVsPh75k&pr7oC)C6vGeMZ zWzVN}A$0zI^=$o_Fkbz61+z%VfLC8x&9fEHX|Z}B?02dW$@}ZK-sY;~!-UHEAECa7 V4G^jE+6({y002ovPDHLkV1iF0x*Grh From f1b2eba2e6641f82430616fe242aaabe27f59ddf Mon Sep 17 00:00:00 2001 From: "Lila S." Date: Mon, 23 Sep 2024 12:41:10 +0200 Subject: [PATCH 4/4] le coder oversight --- code/modules/surgery/organs/internal/eyes/_eyes.dm | 3 ++- code/modules/surgery/organs/internal/tongue/_tongue.dm | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/surgery/organs/internal/eyes/_eyes.dm b/code/modules/surgery/organs/internal/eyes/_eyes.dm index c24a6747b64ab..3cfb06031cfc3 100644 --- a/code/modules/surgery/organs/internal/eyes/_eyes.dm +++ b/code/modules/surgery/organs/internal/eyes/_eyes.dm @@ -157,6 +157,7 @@ var/eyelid_color = rgb(base_color[1], base_color[2], base_color[3], (length(base_color) >= 4 ? base_color[4] : null), COLORSPACE_HSL) eye_right.color = eyelid_color eye_left.color = eyelid_color + if(my_head.worn_face_offset) my_head.worn_face_offset.apply_offset(eye_left) my_head.worn_face_offset.apply_offset(eye_right) @@ -718,7 +719,7 @@ desc = "These eyes seem to have a large range, but might be cumbersome with glasses." eye_icon_state = "snail_eyes" icon_state = "snail_eyeballs" - eyes_layer = ABOVE_BODY_FRONT_HEAD_LAYER //NOVA EDIT - Roundstart Snails + eyes_layer = ABOVE_BODY_FRONT_HEAD_LAYER // DOPPLER EDIT - Roundstart Snails /obj/item/organ/internal/eyes/jelly name = "jelly eyes" diff --git a/code/modules/surgery/organs/internal/tongue/_tongue.dm b/code/modules/surgery/organs/internal/tongue/_tongue.dm index b7a8a33588d87..786f93263268b 100644 --- a/code/modules/surgery/organs/internal/tongue/_tongue.dm +++ b/code/modules/surgery/organs/internal/tongue/_tongue.dm @@ -600,7 +600,7 @@ GLOBAL_LIST_INIT(english_to_zombie, list()) say_mod = "meows" liked_foodtypes = SEAFOOD | ORANGES | BUGS | GORE disliked_foodtypes = GROSS | CLOTH | RAW - organ_traits = list(TRAIT_WOUND_LICKER) + organ_traits = list(TRAIT_WOUND_LICKER, TRAIT_FISH_EATER) /obj/item/organ/internal/tongue/jelly name = "jelly tongue"