From 3c076a30f7525c1999f28527ea4efa88b5d8556a Mon Sep 17 00:00:00 2001 From: KittyNoodle Date: Tue, 7 May 2024 23:35:46 -0500 Subject: [PATCH 01/26] body iteration 1 --- code/game/objects/items/food/meatslab.dm | 2 +- .../carbon/human/species_types/ethereal.dm | 2 + icons/mob/species/human/human_face.dmi | Bin 106886 -> 106922 bytes .../carbon/human/species_type/ethereal.dm | 230 +++++++++++++++++- .../surgery/bodyparts/ethereal_bodyparts.dm | 2 +- .../modules/surgery/organs/internal/eyes.dm | 3 + .../icons/mob/species/ethereal/bodyparts.dmi | Bin 8343 -> 1319 bytes 7 files changed, 232 insertions(+), 7 deletions(-) diff --git a/code/game/objects/items/food/meatslab.dm b/code/game/objects/items/food/meatslab.dm index 4ab8b92fc676e1..1392be35591613 100644 --- a/code/game/objects/items/food/meatslab.dm +++ b/code/game/objects/items/food/meatslab.dm @@ -135,7 +135,7 @@ icon_state = "etherealmeat" desc = "So shiny you feel like ingesting it might make you shine too" food_reagents = list(/datum/reagent/consumable/liquidelectricity = 10) - tastes = list("pure electricity" = 2, "meat" = 1) + tastes = list("pure electricity" = 2, "glass" = 1) //MONKE EDIT: "meat" to "glass" foodtypes = RAW | MEAT | TOXIC | GORE venue_value = FOOD_MEAT_MUTANT diff --git a/code/modules/mob/living/carbon/human/species_types/ethereal.dm b/code/modules/mob/living/carbon/human/species_types/ethereal.dm index aa77ad335b746c..789f70c07440ad 100644 --- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm +++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm @@ -1,3 +1,4 @@ +/* // MONKESTATION removal /datum/species/ethereal name = "\improper Ethereal" id = SPECIES_ETHEREAL @@ -232,3 +233,4 @@ ) return to_add +*/ diff --git a/icons/mob/species/human/human_face.dmi b/icons/mob/species/human/human_face.dmi index 04d3f66cf6ace657fbcfcf34564fe0a45c71ac79..a65ab1a0e4ee122f0cdf1caea4a3a97625082906 100644 GIT binary patch delta 1573 zcmV+=2HN?C!v?Cu29P8H!jUC63Z~Al-@}a4bkV?(W+PllLQT8--R;fwRbq*$?(TPY zpRP-#%DemBt5?@oLA>nlckiyR2B(qFzn=hsJ15B;ej@LFk5rk;US%p(`okuApk7G# zC#uCVitgMFoJWEM`b3io3?F9Ij>)%?yeQF&KEaZKEd=-*21ytOAF`1b#X=Q`pYlMB@9ST86gOc}KBfg+7yn$zG0rxhnTf+5ja*Ut`CkIp(cOFBC#4xS$$VQ_C_XGeAr z?RR1lNk7IfFy# z?5@tGw26#d3fNgoGOvG$#9Jbu zeR>3qu9l-6*?9r2d0@)hEBsm06Hjn+DU!JqbYSBUIT<*tuZK7K2ee>k;BME=IWeIl z&FaTH+>baC4Lym2QiXe6C$X{Dlt~U~-b`{>(2HL@j=Jyy2W{P1hdS|6FVO-0#1lHq zPx3>+lwIpEs@{1vg;zfE$asIVOy;$r&^sU53y+rQ1deNEUcarXDvAV6M) zl)NJ2`pTx87t$dE#bA9MahoO%&96IslB`@xlhA0EOOlKh6So4cHlN;twSQ1ESI)7f zHio;mIaddVm$f8+Y=eJ)fJu%PigC^*(UJ4MrK_st*k+)SGCUR>*_Y>ym9(;Fs_2B1 z%xjVngx4fFOO6eDb-`P3FJO$04GU(LY7X*{55}bu+MknoZD3mx=};0K(WW`)z~0YQ zc>qmqKafUvPF|NB8_1V#&frRLk^(M0tAZ{up}{oCVQHJ|dh>tmc7hY?f^Yu-KANAS zprwXXn-1APBe`YZo&GtG4K6He_B*3FvPyvIM*)3!RTA(DLjyYG#DR& za#$MqqRDIkN3MV1qUy85styBlvKjcR$}@N3JN;;ZfpzfGQw}h7y7r$&b`#}JtpjPJ z-bMy5ab#aQ3cA48zKn(SguXLhUg^QRlWI*o%#V+tu1PY&`>ucZq8yYvpxyjm08FJv z;iy1+;Drl7lJLT1zkS+hHGwBSK>-u!0v@^|x6gcFRq%h%C+PO6C6nmB9Sk~Plv0qP z<0t*KeT(2`FMR&?C%yLJ&E1=upF-r+rz`=y{4a3C-{zEImp_5QXunX3FP#mLit)v7 zy)0Z4I};jnzrbJA>-Fx-_s_e}-@ab|2OcMi(1pA))Bpe=07*naRCt{1-Cb{6TYl&H z|B_@`rc8tW1-JeM0eOG|8xyyAh5@4(3jhEW!$e&G03ZsCmoc9Ky_bNW0ScGyp8;TC z3VZ*v?gJ{lKPr9sqd=bn03L@CA0z9Ul|5o)K8(7KsD;@N^f{u&Yj7#v|EMHZ)*2ZT zbsgoRQv0J)mpe)&?Q_-~08}IbH~;_u00;{K8~{|L4RH!800000002;~mr#`f+!p>n Xor6CVg7}~x00000NkvXXu0mjfuGaM< delta 1512 zcmVXVJ?&@3WlC6ua!jG&^K-H_icKDr=OjE1mS8q4lX%@q1Vr@V3Z^oxu1V8 z*W;I9@YYF2o-dd0pA2%_5Zf&lQOl7FsOA|As#zvE@CvFakp?%g2ExeBNx+2coFssn zMOFo-u9FqWBU1(~e4t1pnC3LN!D+=wj$lZ1*7dW4)uXcx&XUd+#liFABMk0s?Ci)6 zqMaA`=)gyTdibdYj$mXCOf{hwPEvmjtQQt2NAM0db`HkGL|)N|pKP2c*bFN7?<@m2 z63kP$tlD|{I#Len0j+`^$q(baOaBRj94H4jYr@(O>_bm0kZE=4kzf(~pPA}0ff_3iLR|9}?k4BYLyIVUD` zq}lvm)Yznli}&&6`OMD|+#>$59ua;h?QM>rf}2>m@p%FFc{c z{3JgFOxdjtqw1YzQ+VYgkBome%Vb^~3cd4@z3^y>7I5SnITEkjxh-JItK|p}iY1xX zrjn_aW0Ao4prV#zsZJ78Z6gno!~{#IOl4mtr*%J24{swONPj>(W03%@?Ywf?N3~`D zySeY?`YN!}y1U=Kd;8{pML{D47u7`K{G)P)CqlIxFISX}x0S%%>@a^hInK4>>2+41aH>;W7}sw{^4g9QlH@mi<7^{1_AOa zq~sMD*EcrZypRqVCh}$%AXnx)4lVs&mnuJEPT#{t8n79>iwfXcGto?(UxpIy* zwK3ei&AB=_ylf@;V;g_`159$XP>gdfiH@B2EnQVD$2J3vl;N@9$iBX8tfZAaQ$;77 zWL}euAiO5YS#oUHs|((OdjVr~Y*;X}RCADrd@wGR(EgmvYXjSoNQaW>h&IhR2ljrh z$^&R>`++pVQ}Vjx*g(E?a|Ty}MGCm|Yzn%>ga*?jhqZ04>&<_&+X5%l8Q=Z^d^A5r zK}!v(HXX8oMsmx*JN-)@8(dhn>~}_UWRn2Xj{^GeswChQh6Z*z*xV_;lGQ~r9w$7a zZyajN0GndufP<67grhsshO@Kb*y=J4N@&(MRL$x#jxbnas(7o#M)a3O0c;H$8jO!X zIjoI*(PTD&BUgWLQT5qjRfmB&*$n(u<%K)(oqn{yz&d#DDF>K3-TF@>yNPnA)`7H9 zZzF@3II^!D1zq85pU1+wpzqA*S9)FdjA6e0AT$x;;ZDkW@V2UnGd6`BWhvx1AUID@fuu;_dnJp6LkRq000OR z0UQ7TK-dW20000g%7!=v6#xJL0000eSC`P90Z^CFo&ivo(4GN27XKg6Iwv5BZX8?y O0000O0yw&4;O=V+<7@e(qPmUSWF(!N;K~&yG6qoY+m$03&Jx|J@o7D_I&9l0ju${2o_>kG8 zQ1TpNcxDC-+@4*j|d|!S#2?jU`LfX|T*q=NySh9}ZPoL$7N_{Y(7W%q(?6FV1K+u2H2$lK* z?oxL~@HA1}l06CkHOpLOz~?c%^G**JOkvn`z@2g!HzhUeg>_-3wcS zIdFzy7=~f|L_*qll>@83VO)T(`)v244I6i9J8s>jOT6kkamM`ww3ERPr&P-?exc`c zb>HR{^*Ni;Rl&IUJ-6qldH#YAE5rpY49h14RIj?e{`nkB${2=W7=~dOhG8tnq4&)Q zdNJnp1bzL*8Wn^!1?&DF6RT-mK^j)e1$jmTS9*v-$kB^(BPFww8E4+@3m{&9xi`fRyOg6W z7Q{7_{$J_uX$9SMYD3{p9{oM$!>i-@TX;PQLgD{GN7k9n{JnpVt;a;2Z$^qX-;5Y- zz8NX{d^1u(b-o$7;I=V3|6jft8oww;o^OW6FN%@po1yWGa>V&&Nc`e0Nb}8*_{Ce0 z=9?k$i#H(7HxrayD$X~fjb9Y!o6*KEiu28A;}^yGX0-8(;(Rme_(gHP8EyQcJl~AP dFB-vunY%wGF`KRbLs*ZaEO*ZcZ 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 b&OteGfqSxxJ%0!PX#lgava>8Tcf0o=t@e@f From 34ec6a270acaf37b449ac1fda96ca2338bb3da44 Mon Sep 17 00:00:00 2001 From: KittyNoodle Date: Wed, 8 May 2024 00:33:25 -0500 Subject: [PATCH 02/26] this somehow worked first try --- code/__HELPERS/global_lists.dm | 1 + code/__HELPERS/mobs.dm | 2 + code/_globalvars/lists/flavor_misc.dm | 1 + code/modules/mob/living/carbon/human/dummy.dm | 1 + .../preferences/species_features/ethereal.dm | 16 ++++++++ .../sprite_accessories/ethereal_horns.dm | 35 ++++++++++++++++++ .../carbon/human/species_type/ethereal.dm | 2 + .../organs/external/ethereal_accessories.dm | 25 +++++++++++++ .../mob/species/ethereal/ethereal_horns.dmi | Bin 0 -> 1817 bytes .../icons/obj/medical/organs/organs.dmi | Bin 36715 -> 38479 bytes tgstation.dme | 3 ++ 11 files changed, 86 insertions(+) create mode 100644 monkestation/code/modules/client/preferences/species_features/ethereal.dm create mode 100644 monkestation/code/modules/mob/dead/new_player/sprite_accessories/ethereal_horns.dm create mode 100644 monkestation/code/modules/surgery/organs/external/ethereal_accessories.dm create mode 100644 monkestation/icons/mob/species/ethereal/ethereal_horns.dmi diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 86e0f81367c743..a901ef133605c4 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -47,6 +47,7 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/goblin_ears, GLOB.goblin_ears_list) //Monkestation Addition init_sprite_accessory_subtypes(/datum/sprite_accessory/floran_leaves, GLOB.floran_leaves_list) //Monkestation Addition init_sprite_accessory_subtypes(/datum/sprite_accessory/apid_wings, GLOB.apid_wings_list) //Monkestation Addition + init_sprite_accessory_subtypes(/datum/sprite_accessory/ethereal_horns, GLOB.ethereal_horns_list) //Monkestation Addition /// Inits GLOB.species_list. Not using GLOBAL_LIST_INIT b/c it depends on GLOB.string_lists /proc/init_species_list() diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index c6ecf3f4881d2b..e78060ab08442f 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -116,6 +116,8 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/goblin_ears, GLOB.goblin_ears_list) if(!GLOB.floran_leaves_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/floran_leaves, GLOB.floran_leaves_list) + if(!GLOB.ethereal_horns_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/ethereal_horns, GLOB.ethereal_horns_list) //Monkestation Addition End //For now we will always return none for tail_human and ears. | "For now" he says. diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 0448c8aa73caa8..975ec8d8a42a63 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -53,6 +53,7 @@ GLOBAL_LIST_EMPTY(arachnid_appendages_list) //Monkestation Addition GLOBAL_LIST_EMPTY(arachnid_chelicerae_list) //Monkestation Addition GLOBAL_LIST_EMPTY(goblin_ears_list) //Monkestation Addition GLOBAL_LIST_EMPTY(floran_leaves_list) //Monkestation Addition +GLOBAL_LIST_EMPTY(ethereal_horns_list) //Monkestation Addition GLOBAL_LIST_INIT(color_list_ethereal, list( "Blue" = "#3399ff", diff --git a/code/modules/mob/living/carbon/human/dummy.dm b/code/modules/mob/living/carbon/human/dummy.dm index 1949da4353c088..bd82c7168424ff 100644 --- a/code/modules/mob/living/carbon/human/dummy.dm +++ b/code/modules/mob/living/carbon/human/dummy.dm @@ -110,6 +110,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) target.dna.features["arachnid_chelicerae"] = "Basic" //Monkestation Addition target.dna.features["goblin_ears"] = "Normal" //Monkestation Addition target.dna.features["floran_leaves"] = "Furnivour" //Monkestation Addition + target.dna.features["ethereal_horns"] = "None" //Monkestation Addition /// Provides a dummy that is consistently bald, white, naked, etc. /mob/living/carbon/human/dummy/consistent diff --git a/monkestation/code/modules/client/preferences/species_features/ethereal.dm b/monkestation/code/modules/client/preferences/species_features/ethereal.dm new file mode 100644 index 00000000000000..77d9d60134e373 --- /dev/null +++ b/monkestation/code/modules/client/preferences/species_features/ethereal.dm @@ -0,0 +1,16 @@ +/datum/preference/choiced/ethereal_horns + savefile_key = "feature_ethereal_horns" + savefile_identifier = PREFERENCE_CHARACTER + category = PREFERENCE_CATEGORY_FEATURES + main_feature_name = "Ethereal Horns" + should_generate_icons = TRUE + +/datum/preference/choiced/ethereal_horns/init_possible_values() + return possible_values_for_sprite_accessory_list_for_body_part( + GLOB.ethereal_horns_list, + "ethereal_horns", + list("BEHIND", "FRONT"), + ) + +/datum/preference/choiced/ethereal_horns/apply_to_human(mob/living/carbon/human/target, value) + target.dna.features["ethereal_horns"] = value diff --git a/monkestation/code/modules/mob/dead/new_player/sprite_accessories/ethereal_horns.dm b/monkestation/code/modules/mob/dead/new_player/sprite_accessories/ethereal_horns.dm new file mode 100644 index 00000000000000..c5ed93a8a100bb --- /dev/null +++ b/monkestation/code/modules/mob/dead/new_player/sprite_accessories/ethereal_horns.dm @@ -0,0 +1,35 @@ +/datum/sprite_accessory/ethereal_horns + icon = 'monkestation/icons/mob/species/ethereal/ethereal_horns.dmi' + color_src = MUTCOLORS + +/datum/sprite_accessory/ethereal_horns/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/ethereal_horns/short + name = "Short" + icon_state = "short" + +/datum/sprite_accessory/ethereal_horns/helm + name = "Helm" + icon_state = "helm" + +/datum/sprite_accessory/ethereal_horns/lunar + name = "Lunar" + icon_state = "lunar" + +/datum/sprite_accessory/ethereal_horns/inward + name = "Inward" + icon_state = "inward" + +/datum/sprite_accessory/ethereal_horns/majesty + name = "Majesty" + icon_state = "majesty" + +/datum/sprite_accessory/ethereal_horns/clipped + name = "Clipped" + icon_state = "clipped" + +/datum/sprite_accessory/ethereal_horns/sharp + name = "Sharp" + icon_state = "sharp" diff --git a/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm b/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm index ce54f3a105e843..a07b12039d4628 100644 --- a/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm +++ b/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm @@ -7,6 +7,8 @@ mutanteyes = /obj/item/organ/internal/eyes/ethereal mutanttongue = /obj/item/organ/internal/tongue/ethereal mutantheart = /obj/item/organ/internal/heart/ethereal + external_organs = list( + /obj/item/organ/external/ethereal_horns = "None") exotic_blood = /datum/reagent/consumable/liquidelectricity //Liquid Electricity. fuck you think of something better gamer exotic_bloodtype = "LE" siemens_coeff = 0.5 //They thrive on energy diff --git a/monkestation/code/modules/surgery/organs/external/ethereal_accessories.dm b/monkestation/code/modules/surgery/organs/external/ethereal_accessories.dm new file mode 100644 index 00000000000000..8bbb1a781e2645 --- /dev/null +++ b/monkestation/code/modules/surgery/organs/external/ethereal_accessories.dm @@ -0,0 +1,25 @@ +/obj/item/organ/external/ethereal_horns + name = "ethereal horns" + desc = "They don't actually let you hear better." + icon_state = "ethereal_horns" + icon = 'monkestation/icons/obj/medical/organs/organs.dmi' + + preference = "feature_ethereal_horns" + zone = BODY_ZONE_HEAD + slot = ORGAN_SLOT_EXTERNAL_HORNS + + use_mob_sprite_as_obj_sprite = TRUE + bodypart_overlay = /datum/bodypart_overlay/mutant/ethereal_horns + +/datum/bodypart_overlay/mutant/ethereal_horns + layers = EXTERNAL_FRONT|EXTERNAL_ADJACENT + feature_key = "ethereal_horns" + +/datum/bodypart_overlay/mutant/ethereal_horns/get_global_feature_list() + return GLOB.ethereal_horns_list + +/datum/bodypart_overlay/mutant/ethereal_horns/get_base_icon_state() + return sprite_datum.icon_state + +/datum/bodypart_overlay/mutant/ethereal_horns/can_draw_on_bodypart(mob/living/carbon/human/human) + return TRUE diff --git a/monkestation/icons/mob/species/ethereal/ethereal_horns.dmi b/monkestation/icons/mob/species/ethereal/ethereal_horns.dmi new file mode 100644 index 0000000000000000000000000000000000000000..1016275aa9b51307d2310d6e1ae41a2ac60c057e GIT binary patch literal 1817 zcmY*ZX*3&%7LM1J>QG~Qcxq{NOczTR&(^9aMJ!2bSGBa3(pYK>u|!5&TS_%3t)#&# zsbx@=2B|GN(;^MVn(bLD2tjO3kUae}@ARH?&%NJwf82Awd(X{=g6(9F{p%P20FVXQ z+qeJ#62Jr3K78naF>xUE90UcZliQ81uC9*$vGkmBu~_T^jyQlBl%DE?szjU%*cAYr zp9nbsy-99faW=uRfiYnZ;=-aL0f0m-ZrJ%JineOk`a9$?I&X+s?wEP^{6Cwu+tAGf zqY+u6?PNzQgScQ;y@1zBuL{RSp)tX`>DRgt?mq8>Hik+t9`06fG`&zkdg+`s%Nwd? zgNl5qdfY1gP7w3!rYeMZ8u`4*)m?m?jjDo3u9F3NcZUclFqi7`Yzu72v8U)CMStfHj2D}IY zM1l2Dc$J}4uEc>LT?50khR3FzNO^*Q_;Xq^D(1!{ElO^%D6}n?&wTrfcIQpw@^%r+ zeq9)A=y{yrvE!S1CRJ`Fi7x1#xFg?EZ&LqjFn%-9mQq>B$!CEz>Rw};O0N(PA=X84P5!Q$71U+qy@Mri=!Jv#; zVf(SQcA*HM7bdorYlP;cjafSABRZFASzEMX zfg)QW82LU*hbtDSjpV?4`T>`E=Y)pq&Ds0TSkqgAumf33If$yR4MbLJcP_@a3t9vi>VocqA2vSLL zF9;RZ=x4<2h9~4&G&ixyI;CBUfLYs=zJYjiV1*_2iAGx==owvu68$^_aOVU`wt_{{!ozZOaR%{!A?ix{%08unw2 zbn$We9qy4DF|iHY93-Hg-zw+KUT@Gw}O(B*52!M#GW zHN;wwYin=A{QXEVSmTivcB>*^`cx;U>qx4y>wa*Pr=7>VBYbRQmHyybt@PYu$O~GY zj>H>CcG764cC{l#RI}?r6==g)9b>BzEwAs-s8jxy`FpZvk~qcbz}X=U2v6JcG+Z$n zaH@LUqSo5yfnd|gT64IQ!RL|Qk*7?d-Bo@p;==EW^(d3v>DCvg9_2BJx5PFmxxL$( zQ@tNwZ8r{!%KZGo6D!JLi!aaZE1t3R+zQR|_R`Iw-Zl9J_`H;kEx8yp47~Jfkw}dK zw3VUg;kcpKF32VNU48X43?W(-bnV4dr%5_C)V=;-I}8;Y9iHUNL`_!NlL=JgJA4*P zNo~g8mLR2`BwM)HnwktkEZCW&8a>gdIDAyo+vb^3C*B7ffV9qhc2Q8;k{JCZDT>@tk4gt_|TyQ(aXeaf*FbXUk&s{XJ6 z003p~;g!HclPdR2b6Xs5NQPH6Y*ck&sLBCX+kAE8SDWiCMsh$d19ieXt5u^Jpno~yRY^+q##r# z!gymxC8}sz>W8Ot&|j?gEIFD|@4o#egX=GkQN;_M<(60pTa{Zx$|s}0kv@e?OFCMT zuKVeK$oR~5iq5IT`~1fBS5WL}vJ2-nU?u-QkReA)LMlH4GdDQ)odn$g+tgnVNdF&e Cm5m<& literal 0 HcmV?d00001 diff --git a/monkestation/icons/obj/medical/organs/organs.dmi b/monkestation/icons/obj/medical/organs/organs.dmi index 05102aa69188ae603f7366fe9a97510a2fa4dee5..d09f289e2bfe20ae36b50eb726e7303d72838c13 100644 GIT binary patch literal 38479 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

>+0M42&R!>No(u(vngr0ku)6Eo8?Um%3y==VHpr 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 diff --git a/tgstation.dme b/tgstation.dme index 5af7a8d6ef1140..0d4d8078893c32 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -6255,6 +6255,7 @@ #include "monkestation\code\modules\client\preferences\alt_jobs\_job.dm" #include "monkestation\code\modules\client\preferences\alt_jobs\titles.dm" #include "monkestation\code\modules\client\preferences\species_features\arachnid.dm" +#include "monkestation\code\modules\client\preferences\species_features\ethereal.dm" #include "monkestation\code\modules\client\preferences\species_features\floran.dm" #include "monkestation\code\modules\client\preferences\species_features\goblin.dm" #include "monkestation\code\modules\client\preferences\species_features\ipc.dm" @@ -6523,6 +6524,7 @@ #include "monkestation\code\modules\mob\dead\new_player\sprite_accessories\arachnid_appendages.dm" #include "monkestation\code\modules\mob\dead\new_player\sprite_accessories\arachnid_chelicerae.dm" #include "monkestation\code\modules\mob\dead\new_player\sprite_accessories\clockwork_sprites.dm" +#include "monkestation\code\modules\mob\dead\new_player\sprite_accessories\ethereal_horns.dm" #include "monkestation\code\modules\mob\dead\new_player\sprite_accessories\floran_leaves.dm" #include "monkestation\code\modules\mob\dead\new_player\sprite_accessories\goblin_accessories.dm" #include "monkestation\code\modules\mob\dead\new_player\sprite_accessories\hair.dm" @@ -7063,6 +7065,7 @@ #include "monkestation\code\modules\surgery\organs\augments.dm" #include "monkestation\code\modules\surgery\organs\autosurgeon.dm" #include "monkestation\code\modules\surgery\organs\external\anime.dm" +#include "monkestation\code\modules\surgery\organs\external\ethereal_accessories.dm" #include "monkestation\code\modules\surgery\organs\external\floran_accessories.dm" #include "monkestation\code\modules\surgery\organs\external\goblin_accessories.dm" #include "monkestation\code\modules\surgery\organs\external\ipc.dm" From 608ffd5f1ca303c96ae82050cabafd6754974a76 Mon Sep 17 00:00:00 2001 From: KittyNoodle Date: Wed, 22 May 2024 16:30:12 -0500 Subject: [PATCH 03/26] horn updating --- .../carbon/human/species_type/ethereal.dm | 3 +++ .../icons/mob/species/ethereal/bodyparts.dmi | Bin 1319 -> 8969 bytes 2 files changed, 3 insertions(+) diff --git a/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm b/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm index a07b12039d4628..8c6973c3ffa3b6 100644 --- a/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm +++ b/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm @@ -130,6 +130,9 @@ fixed_mut_color = rgb(128,128,128) ethereal.hair_color = current_color ethereal.facial_hair_color = current_color + if(ethereal.organs_slot["horns"]) + var/obj/item/organ/external/horms = ethereal.organs_slot["horns"] + horms.bodypart_overlay.draw_color = current_color ethereal.update_body() /datum/species/ethereal/proc/on_emp_act(mob/living/carbon/human/H, severity) diff --git a/monkestation/icons/mob/species/ethereal/bodyparts.dmi b/monkestation/icons/mob/species/ethereal/bodyparts.dmi index d128e7c76fe15d02f6e48e0f34d18259fffcaf31..d562fb10d030f2611b2ba9839739e0b93d1568df 100644 GIT binary patch literal 8969 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 dFB- Date: Wed, 22 May 2024 17:08:15 -0500 Subject: [PATCH 04/26] fix screenshits --- .../screenshot_antag_icons_bloodbrother.png | Bin 2450 -> 2438 bytes ...shot_humanoids__datum_species_ethereal.png | Bin 2647 -> 2770 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_bloodbrother.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_bloodbrother.png index a8a72e429e725bc9a4b5b4f9a43573e65f345750..399627ac15def675b04e29b961672dc2d40dee36 100644 GIT binary patch delta 2308 zcmY+Fc|6mPAIFoq$BaT{L`n?NgZXN%w5XOVx15z4zDUTzd>lEtNJWxkk!yt598Jei z$%$$o46h!6x zGAVTja{smQnC(OSGgNoalNayC#>2eiJRo%kN@vv_6~b$JstMb+|Af0D79=N#e5XCYmpHZr!xv>0ULnBk z0~q;o^@xk~qZGxFH!vb3yhvnzfEf0QFnnuQuQV-O0BSq$PsdYn%FMFqU5)7?oF0-1 zh@l^~skz-}xD)(Slw)s~UFSx@6%=7l*7mU>tij(Z1ItoUpal#ND5$Bc>%7?UphmJS z<#|!1%^Whlh;tlbKxLCboQ?&OSYQo=|3%pezjYjnJ|X@`qqnVH=iQ3}l6gr8gop>j z8KNIJ*tmz?Q?5Y?Lg>ZHJkHiw-M6sCPyED9iiaUp&pj`VPtSklrj-_91(x9JyiT>L zA_Em%(P#|!SeJtPO0^Rg3N?DIVzcN_`Vn=e?Z7W9C=%LWxEkE$bbGTYTm9i3w;M-_ zVlucKh8MNGOggH6g@wzG1w2r~~_9b6z#h>CuK*MehjWHFQNkoeXm^AJ9{U?`n}(LyOg{$XdukrCb* z3derjpODBk15%iWph@^j@qeKE=`{LMX!)t`xD!{yN|-adqI@uL40ob0ZkS{$WB(&j zV4RfK7LIlt#&j8y);4++qYkS1HN8H4KT%6OZSzSrYx-(HB-6qR@^l+N5shecR9jz> zU%oZ#PY|Fw!>`=D@n68b>5n}Re;v;S&X!M|$-*(`?)emM^C7?Sz9YxXtdudfI&xeG zwnnZn=R4Mg=IU}of=CaCxP19IF4e#Ne(uDr!?!b%NBo(Y!gc*d8Tn2`B}2>e#5qlw zjb)BM-o=;&;+d*hIdNluPkOJEZnUX>%HAtNc}V458bwyVu?>bxlb+ic(>yRIHw_*wnet*0x%kv?iV1)AfvF z0VwMFwEOZu#sTyE`vnDK4U7+&FW%1k8p>~5;+3+hc!N!C{n9J|yq6Ih+!(J;X0@fj z@a}{c{ET9!Esu|NM)1EA*Ut*lHkF-j{ijl{CZaZWHTI^J(YqlLI|rx+o^1YDCm$+8d`Q4b>}QQdaYA&+Ab z3`a^aB0L81Jl}M&b`t(l{6%L|b9JYIP6+5Xcs~o1OmFev%|CW^Tg8jN?ksnuE9Q-% zO_y!Y(cnBLMW{1R>@xa##b`q1Xmo;a$fWVqn4-Mk+!SY;vUMpZyGL#+speU&EU=}q z`Zmv5a8O%Q^LlxX8t>u$5ux8#>lfkaLP^V8!VZ4xKbpPpg?mz^?RX&^8oDblx2)Ra zbE(+qo2rM!?*iEkYS>FryD`(abajNPpX0$PX{domwB=$*nXMSsVP1^PP^6||0{#X) zRh~fZKlRfV6#1KMB~Cdee{4F8i^4*n3wO$EenGfAC+eFCskb-d#%3q zc7=6yXglh=8*voolc^=R_BGhQz&%fF-sI&jVun=da57H^W9fO9pWJS(@JaiC3n%F} z>ko+7oRVil4snq!=6}h@g@=vFvOWUuXn|+z4Ri4gqAZo-fDDFx0K(1SJRn(w(^0P< zNeL@x?`!QPBqj=WMIg01{yz24Liu?>W-Kme-cM>&1n3K-!DMN;xuN96a zfJbCgH)pT(T%{m%{c6U}Ru2|MWJ3N_9Q_fhHzn;ov=DS4sW{)&`mnk=xzN3~bZQfY zQk?u$Dz!;g(U#{iN03dh3iWAMNhrx+lD34SVWK>kiihkn& delta 2321 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 B?9%`M delta 2519 zcmV;|2`Ki`71tDyntutWNklTQ zlKNx8j#qDPVi+-Tv}S)K_w7B$vEOrSM=JcJ==t4u@BN)~-hcgi=bU7?mQ1`Gy+BXuHWmOm*25JF5&r;`;FnGFWRlKm%Ky`IBIF9QjgqY+CAeZ0aaKz+yI2=jwOEv%@ zq-0^Sp4I7e0Dpj*ni|nnr_+JsICgq&rW}Nj5{~28oSdAP&vSBeu&`J!n_tcd&_C<$ z<8NA8T0~c2Jvjo%;Rk?FC4w zFpU8@0?2@I(qCBs+jFiYxTV4?RGoVT0N?m?YMaP zI-9PAkPu=ze*6?$#capJfye0TxzGPS9C(Z>W;^!nI|RA>SyGO|gb>rk%hy@8MgzCY zh2Ol}fPb5vy$JYSSedVZv7!{eJK6;Le2-~oO3wvU`HD@O;dZ&OdCTS*b=p2}gIc3O zXL}nO8xKn6UtqCV5|RJZ>mU7S!}?NqegDLPeR}}_6B7}9jU_0^S3f`5*VTTp8>7#$r&Zmxo_<92(Ho0|)_ z%Z0kSpUC2mdk~sd{=UQe~<+T<}wnf@|52<>V@ z>bhMn_=Y^P`6ZnMby^h$ol}H2J9|L|>acb3&xZX$0KlMgN(g$N3Q&&1qW>F#UIFms zg?~jV+5EFk0s8ih6{Q$-deC9(!jN|e8`hWdR(>)z4pmVBlq(dNn24aG;}%B$6~eNd zWhgOx4}E`kCp{JD+ZXabdG-{=YfJFp-d$8|+KeKV8bvBKe?K}hBAY+qEKjg@6)Is9=A;Orm7us;ZA{~-35 zcADeWrPyQIX%@Dd3xxd$ccEBtyIfFfG`M*AIxB}io&o+79uH!CEQlKO4saaDChE}H zKM0QF*c$T=jE@Bo9-rGfAmsNAdH97c+6cmO-;f7#_!BOI^yq7`Sa5~?i)e9i_J0qe zAYTape7VJ9i9Q<736y{9){Xe=vkm~_1yFeJ8}eZ5){Qg172-kCE)WWZaQ^&x+`e-M z_a63OY-|iCn?AtrkG+W-f9=4@Q@_H}rAsmL)mI3Q2eESHO34C9eGN8&+{<)kwU--Dd3x96_*=}*+ zhYv+6KYTI`Sq5jLm!(Fs4Dm}c03pP5`t%1Z0Ay!p0|3I|FaV(M!Cg^V z--EmC{{25o=}wSN{)B4)A;eU^v6AiX?nHNYCz{VUBODH6eA+8K9*H0v4x{;eGiaUi zjg=|$4GQ@wS1f*7CYN8*2!9y(!YBHDCdtyYnYQjydM*tKgHyk4*90nHbXD}YQ4L~+GJ z`bL1kV7SaMOzD|3XMeC|%ND+TE<;cz_`Zdl)M?5vOsU*OQ1VIe?RSn$0#n}DH_A3Z zyJjj^s32d7VSf+yxZ+TXL}oN_uK*ioIU&gbggy3)Ei3ofk;o4*J)Kaaeuste^9Y$Gt_DoFS8UQ zBpd-k<=Z}QgKx;gD?RA+;KcDJoIU$K?dbb>0aU8Cdk6etRd zRJ`1Ykk9}$^c)?K6h>$=t-O$PwoymrPGpF7oGl+< zHXSG=?E*CRKJo0iXx`7K@Qx2& zGkOve#so4EABe>loev<)7r1okT-s^D4<-SK(2BnvcILo)6p=Dm49VsIca&aTw+wYo3gGz!h21p* Date: Wed, 22 May 2024 17:39:07 -0500 Subject: [PATCH 05/26] again --- .../icons/obj/medical/organs/organs.dmi | Bin 38479 -> 38492 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/monkestation/icons/obj/medical/organs/organs.dmi b/monkestation/icons/obj/medical/organs/organs.dmi index d09f289e2bfe20ae36b50eb726e7303d72838c13..92ae523927f4fc7510f9daf1a8f089bff321892b 100644 GIT binary patch delta 918 zcmV;H18MxvtODGu0+1wsih5L7bVOxyV{&P5bZKvH004NLotVvz+c*q>&&g95?bTUK zJekE_a#>8Vm_z#t0xdH(H!^8Za#GLJ@4=Iuq^(CxkxK%6{FO+N`CR<{<)4>t#q-yf z^$9hSaIr6Te>|*LXKGSc?2E^0z3PzKF3mq;f`rAs_*5$pe_F498q!$oi|u-KQ0Q^~ zeoJk>Te(eRBz+Kn%(5MVri~m9R&pVr$Mveg08_Cq{w%lUm0W|puro_G@RwgZ9eiaa%+iu<_u>ubB42dBTZ4m zFd#RSck==g9|H84@0}_tg%?FTSyWk;m_eI-_UFzm!O-Ia_+uJ-$rn5ILjX>jBodC4 zvOG@c-em4!ot#huOtv7+7H(*>4c}o*IUB1^QXC`|`(pclSXNcJq`++UFt(#>191KT zhYnQ+F@OPL4=xes?Z2_HhY*agRc8Qg^F_fpsw6QKrl)-99i5P+$(zNtjbM2wxOF&T z>_45lq$l0EZ4Fglc{K;MT1BG;ldPU-cs7JM%xRS{~xqj4$jeT*r;qP8@l5jgB z%SWx^2RP6xXub)}@FC=z|4hD0UsJwg&M-_<=s}EM^mk+{S_@l!uuXh3t5Qq;!Ut?g z*hLu^&f@8I-K@%Ox%;KK^9ueLmO}Ya&qKK_x8+m$(~s@LuhkQy=HodDd317ctzlfi z32O+!(4D6ml`)ZbW|_!9!H&-lfauYa{sI<%B1Weeg&`Sc@hc%Orj1}!zDzCVKP&Rf z*8k*Uue*Nn$*Xu=8Y!#mSL^BOvW#_1z#iS8;xWd>{5)LM(Ofn+pX;5gmPFo}Zb>&a z3S%Je>Hvlz^0%IuR_Z`(a|jfC$JE%X;SfZD?YvcCKsXuh(_9Zu delta 905 zcmV;419tq}tOC!h0+1wseR@<_bVOxyV{&P5bZKvH004NLotVvT+ei$6&-POY?Nwex zinG{@FN+k59NJe9s1Yr3Jt76p$gcAAdr-WQ+bTmBzSzLW-x+d9f6o5?^3Th+?D^}< z_KX@xI6GwfKOVN53pKIJ4%uV5-E>H87v~=#Ld5KleX13RKW#UE4Qa>@S+U(56?&Y% z-%`8pR&LiAN$16#l5B^daVN*4m0Stval2{I!;~GeKl37A$TiptS7zzr18K9D>1@uN zvvRAR@83P&=ViXn%b#TLI0xs&omOrA^=_-oZ$9sOJe^UK);yh24OyDG!N}Pn4N-b< zon5Py+l@)`L=EGA6s(*fLsv5GWT(iAle z19C%YH?JV^(L;~v-l?LJIZ?EeS(#*s8MH}ff9~Ak4L#n2JH@e=bg@%Ec;L8;BK|}% z$>W68o6J3IC1+F*lPyTIg&W#z!*v*9%EqRX7zT;iAuAq#^Rmp>6qwB($9Ak*51c;0 zp+l8H44{Y5LlueB_TSjhgZD<*s?&qE>7rm9RiYRQ(@{F~j?T!^q|IX62CzI7+*UYY z=m-rp=84-XcBnn9W^-|e$|5iK%R3bCjEYSJN*{*v;!Y;AM!b-vl>@ivZD^y=3ftIT zVrL_r7k9FMp%>zI088iBzVZ+ZGY)89MH6|g@*YCk0qTe9UyL6)yHUIlH>+}%G59Gj z@^wvj_46w~$i<$F9RpLu^vPZMBl&oTdPU-+s6(}zSjeQGTsLaK#=bb*@OLjcQMetE z<)c>d1MKM)G~I+|_~_HkeV*e1T2RjDO?;XSq_ zTm>0d&f@8I-7NDW-~Up)atiL`*FyPG&qH41MgElk^rLwAwR&RIbUbGvhm{ Date: Wed, 22 May 2024 20:32:35 -0500 Subject: [PATCH 06/26] theory --- .../modules/client/preferences/species_features/ethereal.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/monkestation/code/modules/client/preferences/species_features/ethereal.dm b/monkestation/code/modules/client/preferences/species_features/ethereal.dm index 77d9d60134e373..dd16758a360d28 100644 --- a/monkestation/code/modules/client/preferences/species_features/ethereal.dm +++ b/monkestation/code/modules/client/preferences/species_features/ethereal.dm @@ -9,7 +9,7 @@ return possible_values_for_sprite_accessory_list_for_body_part( GLOB.ethereal_horns_list, "ethereal_horns", - list("BEHIND", "FRONT"), + list("ADJACENT", "FRONT"), ) /datum/preference/choiced/ethereal_horns/apply_to_human(mob/living/carbon/human/target, value) From e84686c81cfefabadcad7e963714260f3d5b382b Mon Sep 17 00:00:00 2001 From: KittyNoodle Date: Wed, 22 May 2024 22:38:45 -0500 Subject: [PATCH 07/26] when in doubt just start deleting --- .../modules/surgery/organs/external/ethereal_accessories.dm | 3 --- 1 file changed, 3 deletions(-) diff --git a/monkestation/code/modules/surgery/organs/external/ethereal_accessories.dm b/monkestation/code/modules/surgery/organs/external/ethereal_accessories.dm index 8bbb1a781e2645..9b8e3e38368bc3 100644 --- a/monkestation/code/modules/surgery/organs/external/ethereal_accessories.dm +++ b/monkestation/code/modules/surgery/organs/external/ethereal_accessories.dm @@ -18,8 +18,5 @@ /datum/bodypart_overlay/mutant/ethereal_horns/get_global_feature_list() return GLOB.ethereal_horns_list -/datum/bodypart_overlay/mutant/ethereal_horns/get_base_icon_state() - return sprite_datum.icon_state - /datum/bodypart_overlay/mutant/ethereal_horns/can_draw_on_bodypart(mob/living/carbon/human/human) return TRUE From 19afeab56251d90398d70b65d87b0b4ad1736138 Mon Sep 17 00:00:00 2001 From: KittyNoodle Date: Thu, 23 May 2024 20:01:49 -0500 Subject: [PATCH 08/26] WOOOO --- code/__HELPERS/mobs.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index e78060ab08442f..b84ac150c4ecc1 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -154,6 +154,7 @@ "animecolor" = "#[pick("7F","FF")][pick("7F","FF")][pick("7F","FF")]", //Monkestation Addition "goblin_ears" = pick(GLOB.goblin_ears_list), //Monkestation Addition "floran_leaves" = pick(GLOB.floran_leaves_list), //Monkestation Addition + "ethereal_horns" = pick(GLOB.ethereal_horns_list), //Monkestation Addition )) /proc/random_hairstyle(gender) From fe4061fa7a5f1221ace1c9d299d5d88edaeb0737 Mon Sep 17 00:00:00 2001 From: KittyNoodle Date: Fri, 24 May 2024 23:30:03 -0500 Subject: [PATCH 09/26] tails, i have discovered a fundimental evil at the very core of mutant organ code and its actually poisoning my mind. i have discovered something that could be the possible trigger for the admin spawn glitch and also a fix, that using a ressurection wand on the victim can fix it, but only if the victim is an ethereal. may archous save us all --- code/__HELPERS/global_lists.dm | 1 + code/__HELPERS/mobs.dm | 3 +++ code/_globalvars/lists/flavor_misc.dm | 1 + code/modules/mob/living/carbon/human/dummy.dm | 1 + .../preferences/species_features/ethereal.dm | 19 ++++++++++++++++- .../sprite_accessories/ethereal_tail.dm | 19 +++++++++++++++++ .../carbon/human/species_type/ethereal.dm | 6 +++++- .../organs/external/ethereal_accessories.dm | 20 +++++++++++++++++- .../mob/species/ethereal/ethereal_tail.dmi | Bin 0 -> 1424 bytes tgstation.dme | 1 + 10 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 monkestation/code/modules/mob/dead/new_player/sprite_accessories/ethereal_tail.dm create mode 100644 monkestation/icons/mob/species/ethereal/ethereal_tail.dmi diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index a901ef133605c4..fc0ad044732319 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -48,6 +48,7 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/floran_leaves, GLOB.floran_leaves_list) //Monkestation Addition init_sprite_accessory_subtypes(/datum/sprite_accessory/apid_wings, GLOB.apid_wings_list) //Monkestation Addition init_sprite_accessory_subtypes(/datum/sprite_accessory/ethereal_horns, GLOB.ethereal_horns_list) //Monkestation Addition + init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/ethereal, GLOB.ethereal_tail_list) //Monkestation Addition /// Inits GLOB.species_list. Not using GLOBAL_LIST_INIT b/c it depends on GLOB.string_lists /proc/init_species_list() diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index b84ac150c4ecc1..e9eb1ea664350f 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -118,6 +118,8 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/floran_leaves, GLOB.floran_leaves_list) if(!GLOB.ethereal_horns_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/ethereal_horns, GLOB.ethereal_horns_list) + if(!GLOB.ethereal_tail_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/ethereal, GLOB.ethereal_tail_list) //Monkestation Addition End //For now we will always return none for tail_human and ears. | "For now" he says. @@ -155,6 +157,7 @@ "goblin_ears" = pick(GLOB.goblin_ears_list), //Monkestation Addition "floran_leaves" = pick(GLOB.floran_leaves_list), //Monkestation Addition "ethereal_horns" = pick(GLOB.ethereal_horns_list), //Monkestation Addition + "ethereal_tail" = pick(GLOB.ethereal_tail_list), //Monkestation Addition )) /proc/random_hairstyle(gender) diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 975ec8d8a42a63..e7c90d98ca4e12 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -54,6 +54,7 @@ GLOBAL_LIST_EMPTY(arachnid_chelicerae_list) //Monkestation Addition GLOBAL_LIST_EMPTY(goblin_ears_list) //Monkestation Addition GLOBAL_LIST_EMPTY(floran_leaves_list) //Monkestation Addition GLOBAL_LIST_EMPTY(ethereal_horns_list) //Monkestation Addition +GLOBAL_LIST_EMPTY(ethereal_tail_list) //Monkestation Addition GLOBAL_LIST_INIT(color_list_ethereal, list( "Blue" = "#3399ff", diff --git a/code/modules/mob/living/carbon/human/dummy.dm b/code/modules/mob/living/carbon/human/dummy.dm index bd82c7168424ff..b732eb4fc8302d 100644 --- a/code/modules/mob/living/carbon/human/dummy.dm +++ b/code/modules/mob/living/carbon/human/dummy.dm @@ -111,6 +111,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) target.dna.features["goblin_ears"] = "Normal" //Monkestation Addition target.dna.features["floran_leaves"] = "Furnivour" //Monkestation Addition target.dna.features["ethereal_horns"] = "None" //Monkestation Addition + target.dna.features["ethereal_tail"] = "None" //Monkestation Addition /// Provides a dummy that is consistently bald, white, naked, etc. /mob/living/carbon/human/dummy/consistent diff --git a/monkestation/code/modules/client/preferences/species_features/ethereal.dm b/monkestation/code/modules/client/preferences/species_features/ethereal.dm index dd16758a360d28..d0b79ffe1e9ab8 100644 --- a/monkestation/code/modules/client/preferences/species_features/ethereal.dm +++ b/monkestation/code/modules/client/preferences/species_features/ethereal.dm @@ -9,8 +9,25 @@ return possible_values_for_sprite_accessory_list_for_body_part( GLOB.ethereal_horns_list, "ethereal_horns", - list("ADJACENT", "FRONT"), + list("ADJ", "FRONT"), ) /datum/preference/choiced/ethereal_horns/apply_to_human(mob/living/carbon/human/target, value) target.dna.features["ethereal_horns"] = value + +/datum/preference/choiced/ethereal_tail + savefile_key = "feature_ethereal_tail" + savefile_identifier = PREFERENCE_CHARACTER + category = PREFERENCE_CATEGORY_FEATURES + main_feature_name = "Ethereal Tail" + should_generate_icons = TRUE + +/datum/preference/choiced/ethereal_tail/init_possible_values() + return possible_values_for_sprite_accessory_list_for_body_part( + GLOB.ethereal_tail_list, + "ethereal_tail", + list("BEHIND", "FRONT"), + ) + +/datum/preference/choiced/ethereal_tail/apply_to_human(mob/living/carbon/human/target, value) + target.dna.features["ethereal_tail"] = value diff --git a/monkestation/code/modules/mob/dead/new_player/sprite_accessories/ethereal_tail.dm b/monkestation/code/modules/mob/dead/new_player/sprite_accessories/ethereal_tail.dm new file mode 100644 index 00000000000000..5ccec9b8e836cf --- /dev/null +++ b/monkestation/code/modules/mob/dead/new_player/sprite_accessories/ethereal_tail.dm @@ -0,0 +1,19 @@ +/datum/sprite_accessory/tails/ethereal + icon = 'monkestation/icons/mob/species/ethereal/ethereal_tail.dmi' + color_src = MUTCOLORS + +/datum/sprite_accessory/tails/ethereal/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/tails/ethereal/long + name = "Long" + icon_state = "long" + +/datum/sprite_accessory/tails/ethereal/bifurcated + name = "Bifurcated" + icon_state = "bifurcated" + +/datum/sprite_accessory/tails/ethereal/stubby + name = "Stubby" + icon_state = "stubby" diff --git a/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm b/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm index 8c6973c3ffa3b6..f854fdd912c8bf 100644 --- a/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm +++ b/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm @@ -8,7 +8,8 @@ mutanttongue = /obj/item/organ/internal/tongue/ethereal mutantheart = /obj/item/organ/internal/heart/ethereal external_organs = list( - /obj/item/organ/external/ethereal_horns = "None") + /obj/item/organ/external/ethereal_horns = "None", + /obj/item/organ/external/tail/ethereal = "None") exotic_blood = /datum/reagent/consumable/liquidelectricity //Liquid Electricity. fuck you think of something better gamer exotic_bloodtype = "LE" siemens_coeff = 0.5 //They thrive on energy @@ -133,6 +134,9 @@ if(ethereal.organs_slot["horns"]) var/obj/item/organ/external/horms = ethereal.organs_slot["horns"] horms.bodypart_overlay.draw_color = current_color + if(ethereal.organs_slot["tail"]) + var/obj/item/organ/external/tail = ethereal.organs_slot["tail"] + tail.bodypart_overlay.draw_color = current_color ethereal.update_body() /datum/species/ethereal/proc/on_emp_act(mob/living/carbon/human/H, severity) diff --git a/monkestation/code/modules/surgery/organs/external/ethereal_accessories.dm b/monkestation/code/modules/surgery/organs/external/ethereal_accessories.dm index 9b8e3e38368bc3..b4043815de2a40 100644 --- a/monkestation/code/modules/surgery/organs/external/ethereal_accessories.dm +++ b/monkestation/code/modules/surgery/organs/external/ethereal_accessories.dm @@ -1,6 +1,6 @@ /obj/item/organ/external/ethereal_horns name = "ethereal horns" - desc = "They don't actually let you hear better." + desc = "These seemingly decorative horns are actually sensory organs, albiet somewhat vegistal ones in their current enviroment, for detecting nearby electromagnetic fields.." icon_state = "ethereal_horns" icon = 'monkestation/icons/obj/medical/organs/organs.dmi' @@ -20,3 +20,21 @@ /datum/bodypart_overlay/mutant/ethereal_horns/can_draw_on_bodypart(mob/living/carbon/human/human) return TRUE + +/obj/item/organ/external/tail/ethereal + name = "ethereal tail" + desc = "A severed ethereal tail, it reminds you of a bundle of fiber optic cable." + icon_state = "ethereal_horns" + icon = 'monkestation/icons/obj/medical/organs/organs.dmi' + + preference = "feature_ethereal_tail" + + use_mob_sprite_as_obj_sprite = TRUE + bodypart_overlay = /datum/bodypart_overlay/mutant/tail/ethereal + +/datum/bodypart_overlay/mutant/tail/ethereal + layers = EXTERNAL_FRONT|EXTERNAL_BEHIND + feature_key = "ethereal_tail" + +/datum/bodypart_overlay/mutant/tail/ethereal/get_global_feature_list() + return GLOB.ethereal_tail_list diff --git a/monkestation/icons/mob/species/ethereal/ethereal_tail.dmi b/monkestation/icons/mob/species/ethereal/ethereal_tail.dmi new file mode 100644 index 0000000000000000000000000000000000000000..f93b016900bea0d6d5aa75c4c7eed377a0a751e6 GIT binary patch literal 1424 zcmV;B1#kL^P)fFDZ*Bkp zc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainGjE%TBGg33tGfF@*7F@+8 zi6yB(rc!QvYDq?FQEFmNd`V(vPJDS{dU|GFdVEekkZ^MK@bq(0;^IunEGh_HFXen7n+I63a)-G;EV|X$=f8$fjrgf z000C>Nklp(H}e{U$K z69M}rN7(HE00000000009@=j$-*?XqxOBcA-qX#CwNF?sKd)|orJJp_Ph2igv`fTt!6#B}tp zIW_5tR{6R~BL#Uyj&G^dW}BXqsx?kfEoPzeyFR@p3i5h7?c6mn88Er%Lu`$|T@C3) zsPpL@OY&Op{L<})_IMw0I2Z%g<2947;`PIm*Tnc1J>a>yf5gxnt;jeeUnQNd(*!t(&}X{5qxaYG&*4BiUWQTU8%_ zQziN7gpRp)0RR91000000E#@@e^^}KZ7c8YFDO-1{%cTzRJg#S^77}zvb564Z1(^7L$CmsuKIR+v9wHo~tA1@tY?n zd^jgxg3($U4Ttn3>Iomcmt^m}CUoKBS|@X?`)-=34(X>*`E%!8$Td3}b+%@3Tbz;Tz-(by>mKMKS|fY5!px?)`_2Ncs-|0000000000SV-TkoA+A0|DY_; zUwCbPzP~VeGk3Fvf&sn#2f21z&|gqw|H04Se-K**{RKt#AN<_?2RY$_{({bn{)3;p z|DY>5-u{B>Ke)O34{E~h{zCrEdG7v$zc8_~%}vWxs0Wzu{fX#ynuM zg(B{E(VJiSK6enk_fXN~gsr+uE&o%Cuhgxv{-*t^m4BL9S5Yq}$1k+z$sev=W{m9d z_bQoi^>vBVqx~q1I`{mHB>w_M4VnA%FFwo%l>GT(Ws5~TKLY>&000000D%9HyT7n9 zcYk4R?*4*OWtUC=L0$sku5&i9TE>u?%?X zj6`;I`s7@ul>LR0Kz7^z+kfv*+hu=Y3*KM2a=eJmO&9 Date: Fri, 24 May 2024 23:43:29 -0500 Subject: [PATCH 10/26] sprite fix --- .../mob/species/ethereal/ethereal_tail.dmi | Bin 1424 -> 1423 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/monkestation/icons/mob/species/ethereal/ethereal_tail.dmi b/monkestation/icons/mob/species/ethereal/ethereal_tail.dmi index f93b016900bea0d6d5aa75c4c7eed377a0a751e6..5ed09268558e84c78ea1dfbc794947b93610813e 100644 GIT binary patch delta 1131 zcmV-x1eE)b3y%x1Gy#7`Nkln(W zYhpHFcG1Vw8GpMO^NUdD^EuY!wZZwN+l}4vKH_*V1`N}+kZ;oU!;{y<_!d3jxxIhH z*dDFOG-h8VoezKMeu!)GT0XvM(gR*UFQV9WZ+iD%ky~~Ubbfapeut{^S~k9|pS^JW zJf-PsX2bN6?XKT#nvdV9n*4l1$I`n10000000000RUYj>tZwMHm3Q|SlqM~$Y(6=^ z++Qe*tyuOnyB(MMe1&AL4Sr3nJ;zRz4U(}28pYzi%BO!+So$}|zm?YB4Z1(^ma=@Z zsuKIR+t>Nwyi`ZfFUi4qP3XeMHDq%PLqAV6hx}8h z{JHlo`Z(vj5=c?>~sGivEHk z`wxEZ{)3!wMSnr(MgPIi-G9)P9B+R?^&i~a{RcH+cYmS$<}!Ex!C#novCU0b-_isC z000000002sZ_xM7fc3P274yNny5Bf|$^Pv8*jj)0wl9eCVF&SI>{2QW#Kngtlnq_+ zK?A?!JM6+J>HyX)<@cq+fXchYPUO$l_~N38;*2y_9U+z)647}^XAgV0=I5`m`Wt&O zglvdJv+!ZPXy+@;?v9Wjzb_70pKpqW$Y|XWCER`%Cg5$D=s(`)k2?tV6H>&arqpMn zn}>hPe$~ol4FLvh1AFq93jNp(H}e{U$K69M}rN7(HE00000000009@=j$-*?XqxOBcA-qX#CwNF?sKd)|o zrJJp_Ph2iwym0(F zrSWQJ>+vJmUB6pZAAeIN`RRm?xpx5o000000001rJllU*T;FXg@9r-sRh(Pdd~trh zzmOLivFvGfJ1*t<0?}L>d`zu9hgOsgqOk@V#Nxin$C!Uv`ZveF<<{N}x8DWn zbLU;iH9H#R>P~D1tMGBjM{fCW6`VRmA00000 z00013NZ)_0oA+A0|DY_;UwCbPzP~VeGk3Fvf&sn#2f21z&|gqw|H04Se-K**{RKt# zAN<_?2RY$_{({bn{)3;p|DY>5-u{B>Ke)O34{E~h{zCrEdG7v$zc8_~%}vBc#Xg!2#>iP0=c&BJBCYURJ-UChQjV6ufG?sw6fU->?F5WV+M(d2}!x=StpQ;V5{i>CJ znpsy-FDAz?wC2elu3ct~?D6+1nQ--WiPWS0D2zJy{EQ_30!0m(`|~e8%mM8FmregcUiBB;)CV^ImRX9h^Yc`H!A)LL zRkZfWP03%WxjIjYK3pfU40!5{M0R!h Date: Sun, 26 May 2024 04:31:39 -0500 Subject: [PATCH 11/26] gah --- code/_globalvars/lists/flavor_misc.dm | 4 +++- .../mob/species/ethereal/ethereal_tail.dmi | Bin 1423 -> 1417 bytes 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index e7c90d98ca4e12..b52eeb28726573 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -62,7 +62,7 @@ GLOBAL_LIST_INIT(color_list_ethereal, list( "Burnt Orange" = "#cc4400", "Cyan Blue" = "#00ffff", "Dark Blue" = "#6666ff", - "Dark Fuschia" = "#cc0066", + "Dark Fuschia" = "#C70064", //Monkestation Edit: #CC0066 TO #C70064 "Dark Green" = "#37835b", "Dark Red" = "#9c3030", @@ -77,6 +77,8 @@ GLOBAL_LIST_INIT(color_list_ethereal, list( "Red" = "#ff4d4d", "Seafoam Green" = "#00fa9a", "White" = "#f2f2f2", + "Fuschia" = "#FF0066", //Monkestation Addition + "Dark Purple" = "#502A77", //Monkestation Addition )) GLOBAL_LIST_INIT(ghost_forms_with_directions_list, list( diff --git a/monkestation/icons/mob/species/ethereal/ethereal_tail.dmi b/monkestation/icons/mob/species/ethereal/ethereal_tail.dmi index 5ed09268558e84c78ea1dfbc794947b93610813e..3774c4c41b031be96ef88533cbe2ba355bf33a6e 100644 GIT binary patch delta 1125 zcmV-r1e*Jg3yBM`Gy#7=NklANt1zTst4e*ZlBeofFr~FALp| z{IIjmN$cgUGvr}x^LH52WuAy#{-Db5(u*&zpKO;tVKv~G4kCa4ZJyY-`G6|l+}hri zSLFB>HQ=eu11TTgt$b=c+KNz)l$P!O|F`Q4CT6BT(qoo?xx zm<^a+^f7hDYd2$l5$b$C$C|u0IDd4zu{+*J91q5TVY(LbO}f5$@|qamq6a*;_qQ0^ zqZOIP?5CvjA>DsJ;+njck8hgvfY# zrRi#B!}OM&uAgn1w?CG@Zs@m_clQ^RCM~UOesO-e zzfcxivFvGfJ1+J43dvj>{FqvMj-4nQBx4OUip71EPpN;f^ly%TE3Lg7bbsO{W%*=P zCH613kMqNMsg9t>Zy%iS;hg;lCTnRl9`Y|yPx$D)BnRg;p$i|^kj*g+{XEee@^_)~ z=ia-JYj!m1gM{fCXn`VRmA00000 z00013$4>g|KR5CKd1@2`wQhKm$~~7{=&qQZEnK)mL>oI z0000000030g1&bKtlb7y%m=x;Z!W>~;tc0M*|mR1^J6RSZGX1*J`isy%FPbqWgdv7 z!a!WyETL@Z@^{==?Sj2{OJNjs0PB|W`%+;*<=tYJ=NqeC5XF}m#q>W27!TU{3VO4L ztJr72-oHa^5h5BQ(JXve58C+(v%4dRE7ZEdNst{0(GVHU!0mfs0^Wv+e(_#xcVLw< zf^2_SOsUUCH$N`>Q7iumuVRX3nL<7&?sqYmKl!2bA$sqjqPZt5ep0vA3fPZY`G?i? zH?q$!cIKBqUi-or#n1n5Xx@K>VY0Wv2&Mfqviw@^`(M178xO&9g`Ul@i1JBg!o-U zzutS`D4t!;E0fi@kR#}05itLAEgBZHzJu6qVL3mWPhWZ#0000000000006KBkM%o9sVqfa*VN!L)n|0ASfqLV;s*k#Jvk00000NkvXXu0mjf$qzFx delta 1110 zcmV-c1gZOp3y%x1Gy#7`Nkln(W zYhpHFcG1Vw8GpMO^NUdD^EuY!wZZwN+l}4vKH_*V1`N}+kZ;oU!;{y<_!d3jxxIhH z*dDFOG-h8Voex0ieu!)GT0XvM(gR*UFQV9WZ+iD%ky~~Ubbfapeut{^S~k9|pS^JW zJf-PsX2bN6?XKT#nvdV9n*4l1$I`o#aRM5DJ~_YKUnq;MSoSo#9hdrig=DS`eod`C z$4-gs8_b%j`9gTXS7n{*4d|V3o+1mSm zBGG^N2024rRxoyv%s^4zf7ph5|6wDt{sRC20000000011GW4&_d#&DoP*&(KJU74G zUzojFy4ga-fZqOtT)VC4FDSDA;OFl@h^>nLf+G75e(wH*oNz^dLFYyP!Oz`)(3Ko- ze?j#h+}!;KHDPyuq5S4DcmKg(n0T>&%}rR}(gXki00000007``(D%-O^|XN%^TE5i z-#CBC{_OnNTKBdui1J|v@nY;!Dh$NMhb5E^UGYH!zvMgY!YJwh)-C1trNV&9yTwlA z&(`?jqKV>+G*%rUmKqY#c}8asd${K3ud(_YdohG;h(xpSVZCVQE6nbWkRQK)FAi9r zZ;FP@U;=irfC*{(FDgF8d2x@czV=<5g^K!T Date: Sun, 26 May 2024 15:15:30 -0500 Subject: [PATCH 12/26] holy shit the ultrakill minotaur boss is so annoying --- code/__HELPERS/mobs.dm | 60 +++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index e9eb1ea664350f..4947d38dd40476 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -59,66 +59,66 @@ return pick(GLOB.backpacklist) /proc/random_features() - if(!GLOB.tails_list.len) + if(!length(GLOB.tails_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/, GLOB.tails_list, add_blank = TRUE) - if(!GLOB.tails_list_human.len) + if(!length(GLOB.tails_list_human)) init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, GLOB.tails_list_human, add_blank = TRUE) - if(!GLOB.tails_list_lizard.len) + if(!length(GLOB.tails_list_lizard)) init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard, GLOB.tails_list_lizard, add_blank = TRUE) - if(!GLOB.snouts_list.len) + if(!length(GLOB.snouts_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/snouts, GLOB.snouts_list) - if(!GLOB.horns_list.len) + if(!length(GLOB.horns_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/horns, GLOB.horns_list) - if(!GLOB.ears_list.len) + if(!length(GLOB.ears_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/ears, GLOB.horns_list) - if(!GLOB.frills_list.len) + if(!length(GLOB.frills_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/frills, GLOB.frills_list) - if(!GLOB.spines_list.len) + if(!length(GLOB.spines_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/spines, GLOB.spines_list) - if(!GLOB.legs_list.len) + if(!length(GLOB.legs_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/legs, GLOB.legs_list) - if(!GLOB.body_markings_list.len) + if(!length(GLOB.body_markings_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, GLOB.body_markings_list) - if(!GLOB.wings_list.len) + if(!length(GLOB.wings_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, GLOB.wings_list) - if(!GLOB.moth_wings_list.len) + if(!length(GLOB.moth_wings_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_wings, GLOB.moth_wings_list) - if(!GLOB.moth_antennae_list.len) + if(!length(GLOB.moth_antennae_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_antennae, GLOB.moth_antennae_list) - if(!GLOB.moth_markings_list.len) + if(!length(GLOB.moth_markings_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_markings, GLOB.moth_markings_list) - if(!GLOB.pod_hair_list.len) + if(!length(GLOB.pod_hair_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/pod_hair, GLOB.pod_hair_list) //Monkestation Addition Start - if(!GLOB.apid_antenna_list.len) + if(!length(GLOB.apid_antenna_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/apid_antenna, GLOB.apid_antenna_list) - if(!GLOB.apid_wings_list.len) + if(!length(GLOB.apid_wings_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/apid_wings, GLOB.apid_wings_list) - if(!GLOB.ipc_screens_list.len) + if(!length(GLOB.ipc_screens_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/ipc_screens, GLOB.ipc_screens_list) - if(!GLOB.ipc_antennas_list.len) + if(!length(GLOB.ipc_antennas_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/ipc_antennas, GLOB.ipc_antennas_list) - if(!GLOB.ipc_chassis_list.len) + if(!length(GLOB.ipc_chassis_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/ipc_chassis, GLOB.ipc_chassis_list) - if(!GLOB.tails_list_monkey.len) + if(!length(GLOB.tails_list_monkey)) init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/monkey, GLOB.tails_list_monkey) - if(!GLOB.anime_top_list.len) + if(!length(GLOB.anime_top_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/anime_head, GLOB.anime_top_list) - if(!GLOB.anime_middle_list.len) + if(!length(GLOB.anime_middle_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/anime_middle, GLOB.anime_middle_list) - if(!GLOB.anime_top_list.len) + if(!length(GLOB.anime_top_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/anime_bottom, GLOB.anime_bottom_list) - if(!GLOB.arachnid_appendages_list.len) + if(!length(GLOB.arachnid_appendages_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/arachnid_appendages, GLOB.arachnid_appendages_list) - if(!GLOB.arachnid_chelicerae_list.len) + if(!length(GLOB.arachnid_chelicerae_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/arachnid_chelicerae, GLOB.arachnid_chelicerae_list) - if(!GLOB.goblin_ears_list.len) + if(!length(GLOB.goblin_ears_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/goblin_ears, GLOB.goblin_ears_list) - if(!GLOB.floran_leaves_list.len) + if(!length(GLOB.floran_leaves_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/floran_leaves, GLOB.floran_leaves_list) - if(!GLOB.ethereal_horns_list.len) + if(!length(GLOB.ethereal_horns_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/ethereal_horns, GLOB.ethereal_horns_list) - if(!GLOB.ethereal_tail_list.len) + if(!length(GLOB.ethereal_tail_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/ethereal, GLOB.ethereal_tail_list) //Monkestation Addition End From f06da5178951bfad984b8b5aa998b8837313ac70 Mon Sep 17 00:00:00 2001 From: KittyNoodle Date: Mon, 27 May 2024 20:27:53 -0500 Subject: [PATCH 13/26] ethereal blood-based charge --- code/__DEFINES/traits.dm | 4 + code/_globalvars/traits.dm | 1 + code/modules/mob/living/blood.dm | 55 ++++---- code/modules/power/apc/apc_attack.dm | 8 +- .../organs/stomach/stomach_ethereal.dm | 12 +- .../carbon/human/species_type/ethereal.dm | 117 ++++++++++++++++++ .../organs/external/ethereal_accessories.dm | 2 +- 7 files changed, 165 insertions(+), 34 deletions(-) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 02eb071670abe9..15fda82dcf17b0 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -1293,6 +1293,10 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Do IPC's dream of doomsday? The answer is yes #define TRAIT_ROBOT_CAN_BLEED "robots_can_bleed" + +/// Does not take damage from bloodloss(or any blood shenanigans) +#define TRAIT_NO_BLOODLOSS_DAMAGE "no_bloodloss_damage" + //monkestation edit end /// This atom can have spells cast from it if a mob is within it /// This means the "caster" of the spell is changed to the mob's loc diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index bc6edbad51dc2b..4122774113ef1e 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -203,6 +203,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_ANALGESIA" = TRAIT_ANALGESIA, "TRAIT_ON_ELEVATED_SURFACE" = TRAIT_ON_ELEVATED_SURFACE, "TRAIT_CANT_SIGN_SPELLS" = TRAIT_CANT_SIGN_SPELLS, // monke edit + "TRAIT_NO_BLOODLOSS_DAMAGE" = TRAIT_NO_BLOODLOSS_DAMAGE, // Monkestation Addition ), /obj/item/bodypart = list( "TRAIT_PARALYSIS" = TRAIT_PARALYSIS, diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 373398934a8b88..bef38015708615 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -40,33 +40,34 @@ //Effects of bloodloss var/word = pick("dizzy","woozy","faint") - switch(blood_volume) - if(BLOOD_VOLUME_EXCESS to BLOOD_VOLUME_MAX_LETHAL) - if(SPT_PROB(7.5, seconds_per_tick)) - to_chat(src, span_userdanger("Blood starts to tear your skin apart. You're going to burst!")) - investigate_log("has been gibbed by having too much blood.", INVESTIGATE_DEATHS) - inflate_gib() - if(BLOOD_VOLUME_MAXIMUM to BLOOD_VOLUME_EXCESS) - if(SPT_PROB(5, seconds_per_tick)) - to_chat(src, span_warning("You feel terribly bloated.")) - if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE) - if(SPT_PROB(2.5, seconds_per_tick)) - to_chat(src, span_warning("You feel [word].")) - adjustOxyLoss(round(0.005 * (BLOOD_VOLUME_NORMAL - blood_volume) * seconds_per_tick, 1)) - if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) - adjustOxyLoss(round(0.01 * (BLOOD_VOLUME_NORMAL - blood_volume) * seconds_per_tick, 1)) - if(SPT_PROB(2.5, seconds_per_tick)) - set_eye_blur_if_lower(12 SECONDS) - to_chat(src, span_warning("You feel very [word].")) - if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD) - adjustOxyLoss(2.5 * seconds_per_tick) - if(SPT_PROB(7.5, seconds_per_tick)) - Unconscious(rand(20,60)) - to_chat(src, span_warning("You feel extremely [word].")) - if(-INFINITY to BLOOD_VOLUME_SURVIVE) - if(!HAS_TRAIT(src, TRAIT_NODEATH)) - investigate_log("has died of bloodloss.", INVESTIGATE_DEATHS) - death() + if(!HAS_TRAIT(src, TRAIT_NO_BLOODLOSS_DAMAGE)) //monkestation addition + switch(blood_volume) + if(BLOOD_VOLUME_EXCESS to BLOOD_VOLUME_MAX_LETHAL) + if(SPT_PROB(7.5, seconds_per_tick)) + to_chat(src, span_userdanger("Blood starts to tear your skin apart. You're going to burst!")) + investigate_log("has been gibbed by having too much blood.", INVESTIGATE_DEATHS) + inflate_gib() + if(BLOOD_VOLUME_MAXIMUM to BLOOD_VOLUME_EXCESS) + if(SPT_PROB(5, seconds_per_tick)) + to_chat(src, span_warning("You feel terribly bloated.")) + if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE) + if(SPT_PROB(2.5, seconds_per_tick)) + to_chat(src, span_warning("You feel [word].")) + adjustOxyLoss(round(0.005 * (BLOOD_VOLUME_NORMAL - blood_volume) * seconds_per_tick, 1)) + if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) + adjustOxyLoss(round(0.01 * (BLOOD_VOLUME_NORMAL - blood_volume) * seconds_per_tick, 1)) + if(SPT_PROB(2.5, seconds_per_tick)) + set_eye_blur_if_lower(12 SECONDS) + to_chat(src, span_warning("You feel very [word].")) + if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD) + adjustOxyLoss(2.5 * seconds_per_tick) + if(SPT_PROB(7.5, seconds_per_tick)) + Unconscious(rand(20,60)) + to_chat(src, span_warning("You feel extremely [word].")) + if(-INFINITY to BLOOD_VOLUME_SURVIVE) + if(!HAS_TRAIT(src, TRAIT_NODEATH)) + investigate_log("has died of bloodloss.", INVESTIGATE_DEATHS) + death() var/temp_bleed = 0 //Bleeding out diff --git a/code/modules/power/apc/apc_attack.dm b/code/modules/power/apc/apc_attack.dm index 42d5a3470842ff..4743c0bafefdf6 100644 --- a/code/modules/power/apc/apc_attack.dm +++ b/code/modules/power/apc/apc_attack.dm @@ -208,13 +208,13 @@ if(cell.charge <= (cell.maxcharge / 2)) // ethereals can't drain APCs under half charge, this is so that they are forced to look to alternative power sources if the station is running low addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, balloon_alert), ethereal, "safeties prevent draining!"), alert_timer_duration) return - if(stomach.crystal_charge > charge_limit) + if(ethereal.blood_volume > charge_limit) //Monkestation Edit addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, balloon_alert), ethereal, "charge is full!"), alert_timer_duration) return stomach.drain_time = world.time + APC_DRAIN_TIME addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, balloon_alert), ethereal, "draining power"), alert_timer_duration) if(do_after(user, APC_DRAIN_TIME, target = src)) - if(cell.charge <= (cell.maxcharge / 2) || (stomach.crystal_charge > charge_limit)) + if(cell.charge <= (cell.maxcharge / 2) || (ethereal.blood_volume > charge_limit)) //Monkestation Edit return balloon_alert(ethereal, "received charge") stomach.adjust_charge(APC_POWER_GAIN) @@ -224,14 +224,14 @@ if(cell.charge >= cell.maxcharge - APC_POWER_GAIN) addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, balloon_alert), ethereal, "APC can't receive more power!"), alert_timer_duration) return - if(stomach.crystal_charge < APC_POWER_GAIN) + if(ethereal.blood_volume < APC_POWER_GAIN) //Monkestation Edit addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, balloon_alert), ethereal, "charge is too low!"), alert_timer_duration) return stomach.drain_time = world.time + APC_DRAIN_TIME addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, balloon_alert), ethereal, "transfering power"), alert_timer_duration) if(!do_after(user, APC_DRAIN_TIME, target = src)) return - if((cell.charge >= (cell.maxcharge - APC_POWER_GAIN)) || (stomach.crystal_charge < APC_POWER_GAIN)) + if((cell.charge >= (cell.maxcharge - APC_POWER_GAIN)) || (ethereal.blood_volume < APC_POWER_GAIN)) //Monkestation Edit balloon_alert(ethereal, "can't transfer power!") return if(istype(stomach)) diff --git a/code/modules/surgery/organs/stomach/stomach_ethereal.dm b/code/modules/surgery/organs/stomach/stomach_ethereal.dm index 98ee48074f3c05..f1b9154bbed379 100644 --- a/code/modules/surgery/organs/stomach/stomach_ethereal.dm +++ b/code/modules/surgery/organs/stomach/stomach_ethereal.dm @@ -2,16 +2,18 @@ name = "biological battery" icon_state = "stomach-p" //Welp. At least it's more unique in functionaliy. desc = "A crystal-like organ that stores the electric charge of ethereals." - organ_traits = list(TRAIT_NOHUNGER) // We have our own hunger mechanic. + //organ_traits = list(TRAIT_NOHUNGER) // We have our own hunger mechanic. //Monkestation Removal, we have our OWN hunger mechanic. ///basically satiety but electrical var/crystal_charge = ETHEREAL_CHARGE_FULL ///used to keep ethereals from spam draining power sources var/drain_time = 0 +/* //Monkestation Removal /obj/item/organ/internal/stomach/ethereal/on_life(seconds_per_tick, times_fired) . = ..() adjust_charge(-ETHEREAL_CHARGE_FACTOR * seconds_per_tick) handle_charge(owner, seconds_per_tick, times_fired) +*/ /obj/item/organ/internal/stomach/ethereal/on_insert(mob/living/carbon/stomach_owner) . = ..() @@ -49,7 +51,13 @@ to_chat(owner, span_notice("You absorb some of the shock into your body!")) /obj/item/organ/internal/stomach/ethereal/proc/adjust_charge(amount) - crystal_charge = clamp(crystal_charge + amount, ETHEREAL_CHARGE_NONE, ETHEREAL_CHARGE_DANGEROUS) + //crystal_charge = clamp(crystal_charge + amount, ETHEREAL_CHARGE_NONE, ETHEREAL_CHARGE_DANGEROUS) Monkestation Removal + if(ishuman(owner)) + var/mob/living/carbon/human/human = owner + if(istype(human.dna.species, /datum/species/ethereal)) + var/datum/species/ethereal/species = human.dna.species + var/amount_adjusted = (BLOOD_VOLUME_NORMAL * amount)/ETHEREAL_CHARGE_FULL + species.adjust_charge(human, amount_adjusted, FALSE) /obj/item/organ/internal/stomach/ethereal/proc/handle_charge(mob/living/carbon/carbon, seconds_per_tick, times_fired) switch(crystal_charge) diff --git a/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm b/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm index f854fdd912c8bf..47d67fcb3a1c85 100644 --- a/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm +++ b/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm @@ -1,3 +1,27 @@ + +#define ETHEREAL_BLOOD_CHARGE_NONE 0 +#define ETHEREAL_BLOOD_CHARGE_LOWEST_PASSIVE 56 +#define ETHEREAL_BLOOD_CHARGE_LOW 140 +#define ETHEREAL_BLOOD_CHARGE_NORMAL 280 +#define ETHEREAL_BLOOD_CHARGE_ALMOSTFULL 420 +#define ETHEREAL_BLOOD_CHARGE_FULL 560 +#define ETHEREAL_BLOOD_CHARGE_OVERLOAD 700 +#define ETHEREAL_BLOOD_CHARGE_DANGEROUS 840 + +#define ETHEREAL_BLOOD_CHARGE_FACTOR 0.224 + +/* +100% = Full(Duh) = 560 +75% = Where you take no extra damage from shit : 420 +50% = Above this your good : 280 + +25% = Below this you start taking toxin : 140 + +10% = You cannot passively fall below this. : 56 + +*/ + + /datum/species/ethereal name = "\improper Ethereal" id = SPECIES_ETHEREAL @@ -15,6 +39,10 @@ siemens_coeff = 0.5 //They thrive on energy brutemod = 1.25 //They're weak to punches payday_modifier = 1 + inherent_traits = list( + TRAIT_NOHUNGER, + TRAIT_NO_BLOODLOSS_DAMAGE, //we handle that species-side. + ) species_traits = list( DYNCOLORS, NO_UNDERWEAR, @@ -110,6 +138,89 @@ /datum/species/ethereal/randomize_features(mob/living/carbon/human/human_mob) human_mob.dna.features["ethcolor"] = GLOB.color_list_ethereal[pick(GLOB.color_list_ethereal)] + +/datum/species/ethereal/spec_life(mob/living/carbon/human/ethereal, seconds_per_tick, times_fired) + if(ethereal.stat == DEAD) + return + adjust_charge(ethereal, -ETHEREAL_BLOOD_CHARGE_FACTOR * seconds_per_tick, TRUE) + handle_charge(ethereal, seconds_per_tick, times_fired) + +/datum/species/ethereal/proc/adjust_charge(mob/living/carbon/human/ethereal, amount, passive) + if(passive) + if(ethereal.blood_volume < ETHEREAL_BLOOD_CHARGE_LOWEST_PASSIVE) //Do not apply the clamp if its below the passive reduction level(no infinite blood sorry) + return + if(ethereal.blood_volume + amount < ETHEREAL_BLOOD_CHARGE_LOWEST_PASSIVE+1) + ethereal.blood_volume = ETHEREAL_BLOOD_CHARGE_LOWEST_PASSIVE+1 //bottom them off here if the end result would be less than the stopping point. + ethereal.blood_volume = clamp(ethereal.blood_volume + amount, ETHEREAL_BLOOD_CHARGE_LOWEST_PASSIVE+1, ETHEREAL_BLOOD_CHARGE_DANGEROUS) + return + ethereal.blood_volume = clamp(ethereal.blood_volume + amount, ETHEREAL_BLOOD_CHARGE_NONE, ETHEREAL_BLOOD_CHARGE_DANGEROUS) + +/datum/species/ethereal/proc/handle_charge(mob/living/carbon/human/ethereal, seconds_per_tick, times_fired) + brutemod = 1.15 + var/word = pick("like you can't breathe","your lungs locking up","extremely lethargic") + switch(ethereal.blood_volume) + if(-INFINITY to ETHEREAL_BLOOD_CHARGE_LOWEST_PASSIVE) + ethereal.add_mood_event("charge", /datum/mood_event/decharged) + ethereal.clear_alert("ethereal_overcharge") + ethereal.throw_alert(ALERT_ETHEREAL_CHARGE, /atom/movable/screen/alert/emptycell/ethereal) + brutemod = 2 + if(SPT_PROB(7.5, seconds_per_tick)) + to_chat(src, span_warning("You feel [word].")) + ethereal.adjustOxyLoss(round(0.01 * (ETHEREAL_BLOOD_CHARGE_LOW - ethereal.blood_volume) * seconds_per_tick, 1)) + if(ETHEREAL_BLOOD_CHARGE_LOWEST_PASSIVE to ETHEREAL_BLOOD_CHARGE_LOW) + ethereal.clear_alert("ethereal_overcharge") + ethereal.add_mood_event("charge", /datum/mood_event/decharged) + ethereal.throw_alert(ALERT_ETHEREAL_CHARGE, /atom/movable/screen/alert/lowcell/ethereal, 3) + brutemod = 1.5 + if(ethereal.health > 10.5) + ethereal.apply_damage(0.155 * seconds_per_tick, TOX, null, null, ethereal) + if(ETHEREAL_BLOOD_CHARGE_LOW to ETHEREAL_BLOOD_CHARGE_NORMAL) + ethereal.clear_alert("ethereal_overcharge") + ethereal.add_mood_event("charge", /datum/mood_event/lowpower) + ethereal.throw_alert(ALERT_ETHEREAL_CHARGE, /atom/movable/screen/alert/lowcell/ethereal, 2) + brutemod = 1.25 + if(ETHEREAL_BLOOD_CHARGE_ALMOSTFULL to ETHEREAL_BLOOD_CHARGE_FULL) + ethereal.clear_alert("ethereal_overcharge") + ethereal.clear_alert("ethereal_charge") + ethereal.add_mood_event("charge", /datum/mood_event/charged) + brutemod = 1 + if(ETHEREAL_BLOOD_CHARGE_FULL to ETHEREAL_BLOOD_CHARGE_OVERLOAD) + ethereal.clear_alert("ethereal_charge") + ethereal.add_mood_event("charge", /datum/mood_event/overcharged) + ethereal.throw_alert(ALERT_ETHEREAL_OVERCHARGE, /atom/movable/screen/alert/ethereal_overcharge, 1) + brutemod = 1.25 + if(ETHEREAL_BLOOD_CHARGE_OVERLOAD to ETHEREAL_BLOOD_CHARGE_DANGEROUS) + ethereal.clear_alert("ethereal_charge") + ethereal.add_mood_event("charge", /datum/mood_event/supercharged) + ethereal.throw_alert(ALERT_ETHEREAL_OVERCHARGE, /atom/movable/screen/alert/ethereal_overcharge, 2) + ethereal.apply_damage(0.2 * seconds_per_tick, TOX, null, null, ethereal) + brutemod = 1.5 + if(SPT_PROB(5, seconds_per_tick)) // 5% each seacond for ethereals to explosively release excess energy if it reaches dangerous levels + discharge_process(ethereal) + else + ethereal.clear_mood_event("charge") + ethereal.clear_alert(ALERT_ETHEREAL_CHARGE) + ethereal.clear_alert(ALERT_ETHEREAL_OVERCHARGE) + +/datum/species/ethereal/proc/discharge_process(mob/living/carbon/human/ethereal) + to_chat(ethereal, span_warning("You begin to lose control over your charge!")) + ethereal.visible_message(span_danger("[ethereal] begins to spark violently!")) + + var/static/mutable_appearance/overcharge //shameless copycode from lightning spell + overcharge = overcharge || mutable_appearance('icons/effects/effects.dmi', "electricity", EFFECTS_LAYER) + ethereal.add_overlay(overcharge) + + if(do_after(ethereal, 5 SECONDS, timed_action_flags = (IGNORE_USER_LOC_CHANGE|IGNORE_HELD_ITEM|IGNORE_INCAPACITATED))) + ethereal.flash_lighting_fx(5, 7, ethereal.dna.species.fixed_mut_color ? ethereal.dna.species.fixed_mut_color : ethereal.dna.features["mcolor"]) + + playsound(ethereal, 'sound/magic/lightningshock.ogg', 100, TRUE, extrarange = 5) + ethereal.cut_overlay(overcharge) + tesla_zap(ethereal, 2, ethereal.blood_volume*9, ZAP_OBJ_DAMAGE | ZAP_GENERATES_POWER | ZAP_ALLOW_DUPLICATES) + adjust_charge(ethereal, ETHEREAL_BLOOD_CHARGE_FULL - ethereal.blood_volume) + ethereal.visible_message(span_danger("[ethereal] violently discharges energy!"), span_warning("You violently discharge energy!")) + + ethereal.Paralyze(100) + /datum/species/ethereal/spec_updatehealth(mob/living/carbon/human/ethereal) . = ..() if(!ethereal_light) @@ -253,6 +364,12 @@ SPECIES_PERK_NAME = "Starving Artist", SPECIES_PERK_DESC = "Ethereals take toxin damage while starving.", ), + list( + SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, + SPECIES_PERK_ICON = "shield-halved", + SPECIES_PERK_NAME = "Power(Only) Armor", + SPECIES_PERK_DESC = "You take increased brute damage the less power you have. ", + ), ) return to_add diff --git a/monkestation/code/modules/surgery/organs/external/ethereal_accessories.dm b/monkestation/code/modules/surgery/organs/external/ethereal_accessories.dm index b4043815de2a40..5f818c8e5d319d 100644 --- a/monkestation/code/modules/surgery/organs/external/ethereal_accessories.dm +++ b/monkestation/code/modules/surgery/organs/external/ethereal_accessories.dm @@ -1,6 +1,6 @@ /obj/item/organ/external/ethereal_horns name = "ethereal horns" - desc = "These seemingly decorative horns are actually sensory organs, albiet somewhat vegistal ones in their current enviroment, for detecting nearby electromagnetic fields.." + desc = "These seemingly decorative horns are actually sensory organs, albiet somewhat vegistal ones in their current enviroment, for detecting nearby electromagnetic fields. They are also extremely sensitive, a fact that which whatever poor ethereal you took these from is probably heavily aware of." icon_state = "ethereal_horns" icon = 'monkestation/icons/obj/medical/organs/organs.dmi' From 350f1a9b1c8d545b00d7820e8104a93e008c02ff Mon Sep 17 00:00:00 2001 From: KittyNoodle Date: Tue, 28 May 2024 15:33:47 -0500 Subject: [PATCH 14/26] bugefix --- .../carbon/human/species_type/ethereal.dm | 20 ++++--------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm b/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm index 47d67fcb3a1c85..fba052353947e8 100644 --- a/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm +++ b/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm @@ -10,18 +10,6 @@ #define ETHEREAL_BLOOD_CHARGE_FACTOR 0.224 -/* -100% = Full(Duh) = 560 -75% = Where you take no extra damage from shit : 420 -50% = Above this your good : 280 - -25% = Below this you start taking toxin : 140 - -10% = You cannot passively fall below this. : 56 - -*/ - - /datum/species/ethereal name = "\improper Ethereal" id = SPECIES_ETHEREAL @@ -238,8 +226,9 @@ ethereal_light.set_light_on(TRUE) fixed_mut_color = current_color else - ethereal_light.set_light_on(FALSE) //FIX BROKEN!!!!! - fixed_mut_color = rgb(128,128,128) + ethereal_light.set_light_on(FALSE) + current_color = rgb(230, 230, 230) + fixed_mut_color = current_color ethereal.hair_color = current_color ethereal.facial_hair_color = current_color if(ethereal.organs_slot["horns"]) @@ -274,7 +263,7 @@ return TRUE /// Special handling for getting hit with a light eater -/datum/species/ethereal/proc/on_light_eater(mob/living/carbon/human/source, datum/light_eater) //MAKE IT SO IT DOESN'T DELETE THE LIGHT FOREVER!!!! +/datum/species/ethereal/proc/on_light_eater(mob/living/carbon/human/source, datum/light_eater) SIGNAL_HANDLER source.emp_act(EMP_LIGHT) return COMPONENT_BLOCK_LIGHT_EATER @@ -306,7 +295,6 @@ /datum/species/ethereal/proc/on_after_attackedby(mob/living/lightbulb, obj/item/item, mob/living/user, proximity_flag, click_parameters) SIGNAL_HANDLER - //todo: multitool color change var/obj/item/clothing/mask/cigarette/cig = item if(!proximity_flag || !istype(cig) || !istype(user) || cig.lit) return From db898eb1d19bd3f294353257bb9d4de28be6a020 Mon Sep 17 00:00:00 2001 From: KittyNoodle Date: Tue, 28 May 2024 18:11:19 -0500 Subject: [PATCH 15/26] from the top everyone --- code/__HELPERS/global_lists.dm | 4 ++-- code/__HELPERS/mobs.dm | 10 +++++----- code/_globalvars/lists/flavor_misc.dm | 4 ++-- code/modules/mob/living/carbon/human/dummy.dm | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index fc0ad044732319..5863abc7f764e4 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -33,6 +33,8 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_wings, GLOB.moth_wings_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_antennae, GLOB.moth_antennae_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_markings, GLOB.moth_markings_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/ethereal_horns, GLOB.ethereal_horns_list) //Monkestation Addition + init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/ethereal, GLOB.ethereal_tail_list) //Monkestation Addition init_sprite_accessory_subtypes(/datum/sprite_accessory/apid_antenna, GLOB.apid_antenna_list) //Monkestation Addition init_sprite_accessory_subtypes(/datum/sprite_accessory/ipc_screens, GLOB.ipc_screens_list) //Monkestation Addition init_sprite_accessory_subtypes(/datum/sprite_accessory/ipc_antennas, GLOB.ipc_antennas_list) //Monkestation Addition @@ -47,8 +49,6 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/goblin_ears, GLOB.goblin_ears_list) //Monkestation Addition init_sprite_accessory_subtypes(/datum/sprite_accessory/floran_leaves, GLOB.floran_leaves_list) //Monkestation Addition init_sprite_accessory_subtypes(/datum/sprite_accessory/apid_wings, GLOB.apid_wings_list) //Monkestation Addition - init_sprite_accessory_subtypes(/datum/sprite_accessory/ethereal_horns, GLOB.ethereal_horns_list) //Monkestation Addition - init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/ethereal, GLOB.ethereal_tail_list) //Monkestation Addition /// Inits GLOB.species_list. Not using GLOBAL_LIST_INIT b/c it depends on GLOB.string_lists /proc/init_species_list() diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 4947d38dd40476..fad6a191c54628 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -90,6 +90,10 @@ if(!length(GLOB.pod_hair_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/pod_hair, GLOB.pod_hair_list) //Monkestation Addition Start + if(!length(GLOB.ethereal_horns_list)) + init_sprite_accessory_subtypes(/datum/sprite_accessory/ethereal_horns, GLOB.ethereal_horns_list) + if(!length(GLOB.ethereal_tail_list)) + init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/ethereal, GLOB.ethereal_tail_list) if(!length(GLOB.apid_antenna_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/apid_antenna, GLOB.apid_antenna_list) if(!length(GLOB.apid_wings_list)) @@ -116,10 +120,6 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/goblin_ears, GLOB.goblin_ears_list) if(!length(GLOB.floran_leaves_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/floran_leaves, GLOB.floran_leaves_list) - if(!length(GLOB.ethereal_horns_list)) - init_sprite_accessory_subtypes(/datum/sprite_accessory/ethereal_horns, GLOB.ethereal_horns_list) - if(!length(GLOB.ethereal_tail_list)) - init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/ethereal, GLOB.ethereal_tail_list) //Monkestation Addition End //For now we will always return none for tail_human and ears. | "For now" he says. @@ -141,6 +141,7 @@ "moth_wings" = pick(GLOB.moth_wings_list), "moth_antennae" = pick(GLOB.moth_antennae_list), "moth_markings" = pick(GLOB.moth_markings_list), + "ethereal_tail" = pick(GLOB.ethereal_tail_list), //Monkestation Addition "apid_antenna" = pick(GLOB.apid_antenna_list), //Monkestation Addition "apid_wings" = pick(GLOB.apid_wings_list), //Monkestation Addition "ipc_screen" = pick(GLOB.ipc_screens_list), //Monkestation Addition @@ -157,7 +158,6 @@ "goblin_ears" = pick(GLOB.goblin_ears_list), //Monkestation Addition "floran_leaves" = pick(GLOB.floran_leaves_list), //Monkestation Addition "ethereal_horns" = pick(GLOB.ethereal_horns_list), //Monkestation Addition - "ethereal_tail" = pick(GLOB.ethereal_tail_list), //Monkestation Addition )) /proc/random_hairstyle(gender) diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index b52eeb28726573..c65542313102c2 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -45,6 +45,8 @@ GLOBAL_LIST_EMPTY(ipc_chassis_list) //Monkestation Addition GLOBAL_LIST_EMPTY(apid_wings_list) //Monkestation Addition GLOBAL_LIST_EMPTY(caps_list) GLOBAL_LIST_EMPTY(pod_hair_list) +GLOBAL_LIST_EMPTY(ethereal_horns_list) //Monkestation Addition +GLOBAL_LIST_EMPTY(ethereal_tail_list) //Monkestation Addition GLOBAL_LIST_EMPTY(tails_list_monkey) //Monkestation Addition GLOBAL_LIST_EMPTY(anime_top_list) //Monkestation Addition GLOBAL_LIST_EMPTY(anime_middle_list) //Monkestation Addition @@ -53,8 +55,6 @@ GLOBAL_LIST_EMPTY(arachnid_appendages_list) //Monkestation Addition GLOBAL_LIST_EMPTY(arachnid_chelicerae_list) //Monkestation Addition GLOBAL_LIST_EMPTY(goblin_ears_list) //Monkestation Addition GLOBAL_LIST_EMPTY(floran_leaves_list) //Monkestation Addition -GLOBAL_LIST_EMPTY(ethereal_horns_list) //Monkestation Addition -GLOBAL_LIST_EMPTY(ethereal_tail_list) //Monkestation Addition GLOBAL_LIST_INIT(color_list_ethereal, list( "Blue" = "#3399ff", diff --git a/code/modules/mob/living/carbon/human/dummy.dm b/code/modules/mob/living/carbon/human/dummy.dm index b732eb4fc8302d..cb60d334f00aa2 100644 --- a/code/modules/mob/living/carbon/human/dummy.dm +++ b/code/modules/mob/living/carbon/human/dummy.dm @@ -100,6 +100,8 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) target.dna.features["tail_lizard"] = "Smooth" target.dna.features["tail_monkey"] = "Chimp" //Monkestation Addition target.dna.features["pod_hair"] = "Ivy" + target.dna.features["ethereal_horns"] = "None" //Monkestation Addition + target.dna.features["ethereal_tail"] = "None" //Monkestation Addition target.dna.features["ipc_screen"] = "BSOD" //Monkestation Addition target.dna.features["ipc_chassis"] = "Bishop Cyberkinetics" //Monkestation Addition target.dna.features["ipc_antenna"] = "None" //Monkestation Addition @@ -110,8 +112,6 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) target.dna.features["arachnid_chelicerae"] = "Basic" //Monkestation Addition target.dna.features["goblin_ears"] = "Normal" //Monkestation Addition target.dna.features["floran_leaves"] = "Furnivour" //Monkestation Addition - target.dna.features["ethereal_horns"] = "None" //Monkestation Addition - target.dna.features["ethereal_tail"] = "None" //Monkestation Addition /// Provides a dummy that is consistently bald, white, naked, etc. /mob/living/carbon/human/dummy/consistent From 33deeb1bcb7421986bf77679455212657d5f68a5 Mon Sep 17 00:00:00 2001 From: KittyNoodle Date: Tue, 28 May 2024 18:14:16 -0500 Subject: [PATCH 16/26] again! --- code/__DEFINES/traits.dm | 6 +++--- code/__HELPERS/mobs.dm | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 15fda82dcf17b0..fd6f66c971fd8b 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -1291,12 +1291,12 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// One can breath under water, you get me? #define TRAIT_WATER_BREATHING "water_breathing" -/// Do IPC's dream of doomsday? The answer is yes -#define TRAIT_ROBOT_CAN_BLEED "robots_can_bleed" - /// Does not take damage from bloodloss(or any blood shenanigans) #define TRAIT_NO_BLOODLOSS_DAMAGE "no_bloodloss_damage" +/// Do IPC's dream of doomsday? The answer is yes +#define TRAIT_ROBOT_CAN_BLEED "robots_can_bleed" + //monkestation edit end /// This atom can have spells cast from it if a mob is within it /// This means the "caster" of the spell is changed to the mob's loc diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index fad6a191c54628..7880e81f1e6986 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -141,6 +141,7 @@ "moth_wings" = pick(GLOB.moth_wings_list), "moth_antennae" = pick(GLOB.moth_antennae_list), "moth_markings" = pick(GLOB.moth_markings_list), + "ethereal_horns" = pick(GLOB.ethereal_horns_list), //Monkestation Addition "ethereal_tail" = pick(GLOB.ethereal_tail_list), //Monkestation Addition "apid_antenna" = pick(GLOB.apid_antenna_list), //Monkestation Addition "apid_wings" = pick(GLOB.apid_wings_list), //Monkestation Addition @@ -157,7 +158,6 @@ "animecolor" = "#[pick("7F","FF")][pick("7F","FF")][pick("7F","FF")]", //Monkestation Addition "goblin_ears" = pick(GLOB.goblin_ears_list), //Monkestation Addition "floran_leaves" = pick(GLOB.floran_leaves_list), //Monkestation Addition - "ethereal_horns" = pick(GLOB.ethereal_horns_list), //Monkestation Addition )) /proc/random_hairstyle(gender) From 92bb9c034069c7135277167c8364fc88487abf10 Mon Sep 17 00:00:00 2001 From: KittyNoodle Date: Tue, 28 May 2024 18:43:27 -0500 Subject: [PATCH 17/26] gah --- code/__DEFINES/traits.dm | 3 --- monkestation/code/__DEFINES/traits.dm | 2 ++ 2 files changed, 2 insertions(+), 3 deletions(-) create mode 100644 monkestation/code/__DEFINES/traits.dm diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index fd6f66c971fd8b..eec4b0debf4ccd 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -1291,9 +1291,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// One can breath under water, you get me? #define TRAIT_WATER_BREATHING "water_breathing" -/// Does not take damage from bloodloss(or any blood shenanigans) -#define TRAIT_NO_BLOODLOSS_DAMAGE "no_bloodloss_damage" - /// Do IPC's dream of doomsday? The answer is yes #define TRAIT_ROBOT_CAN_BLEED "robots_can_bleed" diff --git a/monkestation/code/__DEFINES/traits.dm b/monkestation/code/__DEFINES/traits.dm new file mode 100644 index 00000000000000..33dad40d2b2f21 --- /dev/null +++ b/monkestation/code/__DEFINES/traits.dm @@ -0,0 +1,2 @@ +/// Does not take damage from bloodloss(or any blood shenanigans) +#define TRAIT_NO_BLOODLOSS_DAMAGE "no_bloodloss_damage" From 272671a70be0befa1579c9dc72888c41bdf46b1c Mon Sep 17 00:00:00 2001 From: KittyNoodle Date: Tue, 28 May 2024 18:51:31 -0500 Subject: [PATCH 18/26] gah --- code/__DEFINES/traits.dm | 1 - tgstation.dme | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index eec4b0debf4ccd..02eb071670abe9 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -1293,7 +1293,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Do IPC's dream of doomsday? The answer is yes #define TRAIT_ROBOT_CAN_BLEED "robots_can_bleed" - //monkestation edit end /// This atom can have spells cast from it if a mob is within it /// This means the "caster" of the spell is changed to the mob's loc diff --git a/tgstation.dme b/tgstation.dme index cdbbae1b784b40..98594aae448ef9 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -5691,6 +5691,7 @@ #include "interface\fonts\tiny_unicode.dm" #include "interface\fonts\vcr_osd_mono.dm" #include "monkestation\code\__DEFINES\projectile.dm" +#include "monkestation\code\__DEFINES\traits.dm" #include "monkestation\code\__HELPERS\_lists.dm" #include "monkestation\code\__HELPERS\anime.dm" #include "monkestation\code\__HELPERS\reagents.dm" From 246f4ea3310bf4ed7f0427b72f2b61d33e9b6c21 Mon Sep 17 00:00:00 2001 From: KittyNoodle Date: Tue, 28 May 2024 19:02:25 -0500 Subject: [PATCH 19/26] again --- code/__DEFINES/traits.dm | 3 +++ monkestation/code/__DEFINES/traits.dm | 2 -- tgstation.dme | 1 - 3 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 monkestation/code/__DEFINES/traits.dm diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 02eb071670abe9..16cba91dba583e 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -1291,6 +1291,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// One can breath under water, you get me? #define TRAIT_WATER_BREATHING "water_breathing" +/// Does not take damage from bloodloss(or any blood shenanigans) +#define TRAIT_NO_BLOODLOSS_DAMAGE "no_bloodloss_damage" + /// Do IPC's dream of doomsday? The answer is yes #define TRAIT_ROBOT_CAN_BLEED "robots_can_bleed" //monkestation edit end diff --git a/monkestation/code/__DEFINES/traits.dm b/monkestation/code/__DEFINES/traits.dm deleted file mode 100644 index 33dad40d2b2f21..00000000000000 --- a/monkestation/code/__DEFINES/traits.dm +++ /dev/null @@ -1,2 +0,0 @@ -/// Does not take damage from bloodloss(or any blood shenanigans) -#define TRAIT_NO_BLOODLOSS_DAMAGE "no_bloodloss_damage" diff --git a/tgstation.dme b/tgstation.dme index 98594aae448ef9..cdbbae1b784b40 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -5691,7 +5691,6 @@ #include "interface\fonts\tiny_unicode.dm" #include "interface\fonts\vcr_osd_mono.dm" #include "monkestation\code\__DEFINES\projectile.dm" -#include "monkestation\code\__DEFINES\traits.dm" #include "monkestation\code\__HELPERS\_lists.dm" #include "monkestation\code\__HELPERS\anime.dm" #include "monkestation\code\__HELPERS\reagents.dm" From f7358c582e5e247c4fe55436cfd5755a0b4ae2aa Mon Sep 17 00:00:00 2001 From: KittyNoodle Date: Tue, 28 May 2024 19:05:13 -0500 Subject: [PATCH 20/26] oh right here too --- code/_globalvars/traits.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index 4122774113ef1e..2a365c95c6bf1d 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -202,8 +202,8 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_EXPANDED_FOV" = TRAIT_EXPANDED_FOV, "TRAIT_ANALGESIA" = TRAIT_ANALGESIA, "TRAIT_ON_ELEVATED_SURFACE" = TRAIT_ON_ELEVATED_SURFACE, - "TRAIT_CANT_SIGN_SPELLS" = TRAIT_CANT_SIGN_SPELLS, // monke edit "TRAIT_NO_BLOODLOSS_DAMAGE" = TRAIT_NO_BLOODLOSS_DAMAGE, // Monkestation Addition + "TRAIT_CANT_SIGN_SPELLS" = TRAIT_CANT_SIGN_SPELLS, // monke edit ), /obj/item/bodypart = list( "TRAIT_PARALYSIS" = TRAIT_PARALYSIS, From 6020497feab978d600e386222a7f91a489b11945 Mon Sep 17 00:00:00 2001 From: KittyNoodle Date: Tue, 28 May 2024 20:32:28 -0500 Subject: [PATCH 21/26] fixes upgraded cyborg chargers --- code/modules/surgery/organs/stomach/stomach_ethereal.dm | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/code/modules/surgery/organs/stomach/stomach_ethereal.dm b/code/modules/surgery/organs/stomach/stomach_ethereal.dm index f1b9154bbed379..c89782a40e399f 100644 --- a/code/modules/surgery/organs/stomach/stomach_ethereal.dm +++ b/code/modules/surgery/organs/stomach/stomach_ethereal.dm @@ -33,15 +33,18 @@ /obj/item/organ/internal/stomach/ethereal/proc/charge(datum/source, amount, repairs) SIGNAL_HANDLER + if(!ishuman(owner)) + return + var/mob/living/carbon/human/human = owner if(!repairs) adjust_charge(amount / 3.5) return - if(crystal_charge < ETHEREAL_CHARGE_FULL - amount / 3.5) + if(owner.blood_volume < ETHEREAL_BLOOD_CHARGE_FULL - amount / 3.5) adjust_charge(amount / 3.5) return - if(crystal_charge > ETHEREAL_CHARGE_OVERLOAD) //prevents reduction of charge of overcharged ethereals + if(owner.blood_volume > ETHEREAL_BLOOD_CHARGE_OVERLOAD) //prevents reduction of charge of overcharged ethereals return - adjust_charge(ETHEREAL_CHARGE_FULL - crystal_charge) //perfectly tops off an ethereal if the amount of power that would be applied would go into overcharge + adjust_charge(ETHEREAL_BLOOD_CHARGE_FULL - human.blood_volume) //perfectly tops off an ethereal if the amount of power that would be applied would go into overcharge /obj/item/organ/internal/stomach/ethereal/proc/on_electrocute(datum/source, shock_damage, siemens_coeff = 1, flags = NONE) SIGNAL_HANDLER From 0162142961048d9bba6308af0b2d15705bb60aa4 Mon Sep 17 00:00:00 2001 From: KittyNoodle Date: Tue, 28 May 2024 20:40:51 -0500 Subject: [PATCH 22/26] i literally never undefined it but whatever --- code/modules/surgery/organs/stomach/stomach_ethereal.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/surgery/organs/stomach/stomach_ethereal.dm b/code/modules/surgery/organs/stomach/stomach_ethereal.dm index c89782a40e399f..3c82f629cb51bc 100644 --- a/code/modules/surgery/organs/stomach/stomach_ethereal.dm +++ b/code/modules/surgery/organs/stomach/stomach_ethereal.dm @@ -39,12 +39,12 @@ if(!repairs) adjust_charge(amount / 3.5) return - if(owner.blood_volume < ETHEREAL_BLOOD_CHARGE_FULL - amount / 3.5) + if(owner.blood_volume < BLOOD_VOLUME_NORMAL - amount / 3.5) adjust_charge(amount / 3.5) return - if(owner.blood_volume > ETHEREAL_BLOOD_CHARGE_OVERLOAD) //prevents reduction of charge of overcharged ethereals + if(owner.blood_volume > 700) //prevents reduction of charge of overcharged ethereals return - adjust_charge(ETHEREAL_BLOOD_CHARGE_FULL - human.blood_volume) //perfectly tops off an ethereal if the amount of power that would be applied would go into overcharge + adjust_charge(BLOOD_VOLUME_NORMAL - human.blood_volume) //perfectly tops off an ethereal if the amount of power that would be applied would go into overcharge /obj/item/organ/internal/stomach/ethereal/proc/on_electrocute(datum/source, shock_damage, siemens_coeff = 1, flags = NONE) SIGNAL_HANDLER From c1be5863f48238a8af4d4349ca4c95a6e56017e8 Mon Sep 17 00:00:00 2001 From: KittyNoodle Date: Thu, 30 May 2024 19:11:18 -0500 Subject: [PATCH 23/26] examine text fix --- code/__DEFINES/mobs.dm | 13 ++++++++ .../mob/living/carbon/human/examine.dm | 32 +++++++++++++++---- .../carbon/human/species_type/ethereal.dm | 12 ------- 3 files changed, 38 insertions(+), 19 deletions(-) diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 2f9d7f60588f8d..057f14c70620f4 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -304,6 +304,19 @@ #define ETHEREAL_CHARGE_DANGEROUS 3000 +//Monkestation Addition: Ethereal Blood Charge +#define ETHEREAL_BLOOD_CHARGE_NONE 0 +#define ETHEREAL_BLOOD_CHARGE_LOWEST_PASSIVE 56 +#define ETHEREAL_BLOOD_CHARGE_LOW 140 +#define ETHEREAL_BLOOD_CHARGE_NORMAL 280 +#define ETHEREAL_BLOOD_CHARGE_ALMOSTFULL 420 +#define ETHEREAL_BLOOD_CHARGE_FULL 560 +#define ETHEREAL_BLOOD_CHARGE_OVERLOAD 700 +#define ETHEREAL_BLOOD_CHARGE_DANGEROUS 840 + +#define ETHEREAL_BLOOD_CHARGE_FACTOR 0.224 +//End of Monkestation addition + #define CRYSTALIZE_COOLDOWN_LENGTH (120 SECONDS) #define CRYSTALIZE_PRE_WAIT_TIME (40 SECONDS) #define CRYSTALIZE_DISARM_WAIT_TIME (120 SECONDS) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index abdc8f1dc40019..0b3fa5cc9ab4c8 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -244,13 +244,31 @@ var/apparent_blood_volume = blood_volume if((dna.species.use_skintones)&& skin_tone == "albino") apparent_blood_volume -= 150 // enough to knock you down one tier - switch(apparent_blood_volume) - if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE) - msg += "[t_He] [t_has] pale skin.\n" - if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) - msg += "[t_He] look[p_s()] like pale death.\n" - if(-INFINITY to BLOOD_VOLUME_BAD) - msg += "[span_deadsay("[t_He] resemble[p_s()] a crushed, empty juice pouch.")]\n" + if(isethereal(src))//Monkestation Changes Start: + if(appears_dead) + if(blood_volume < ETHEREAL_BLOOD_CHARGE_LOWEST_PASSIVE) + msg += "[span_deadsay("[t_He] resemble[p_s()] a crushed, empty juice pouch.")]\n" + else + switch(blood_volume) + if(ETHEREAL_BLOOD_CHARGE_OVERLOAD to ETHEREAL_BLOOD_CHARGE_DANGEROUS) + msg += "Electricity is arcing off of [t_him]!\n" + if(ETHEREAL_BLOOD_CHARGE_FULL to ETHEREAL_BLOOD_CHARGE_OVERLOAD) + msg += "[t_His] seems unusually bright, and [t_is] sparking occasionally.\n" + if(ETHEREAL_BLOOD_CHARGE_LOW to ETHEREAL_BLOOD_CHARGE_NORMAL) + msg += "[t_His] light is dimming.\n" + if(ETHEREAL_BLOOD_CHARGE_LOWEST_PASSIVE to ETHEREAL_BLOOD_CHARGE_LOW) + msg += "[t_His] light is very dim, and is flickering slightly.\n" + if(-INFINITY to ETHEREAL_BLOOD_CHARGE_LOWEST_PASSIVE) + msg += "[t_His] light is very dim, and is flickering on and off.\n" + msg += "[span_deadsay("[t_His] movements seem painful and [t_his] breathing is erratic!")]\n" + else + switch(apparent_blood_volume) + if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE) + msg += "[t_He] [t_has] pale skin.\n" + if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) + msg += "[t_He] look[p_s()] like pale death.\n" + if(-INFINITY to BLOOD_VOLUME_BAD) + msg += "[span_deadsay("[t_He] resemble[p_s()] a crushed, empty juice pouch.")]\n" if(is_bleeding()) var/list/obj/item/bodypart/bleeding_limbs = list() diff --git a/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm b/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm index fba052353947e8..d90d953b961ccd 100644 --- a/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm +++ b/monkestation/code/modules/mob/living/carbon/human/species_type/ethereal.dm @@ -1,15 +1,3 @@ - -#define ETHEREAL_BLOOD_CHARGE_NONE 0 -#define ETHEREAL_BLOOD_CHARGE_LOWEST_PASSIVE 56 -#define ETHEREAL_BLOOD_CHARGE_LOW 140 -#define ETHEREAL_BLOOD_CHARGE_NORMAL 280 -#define ETHEREAL_BLOOD_CHARGE_ALMOSTFULL 420 -#define ETHEREAL_BLOOD_CHARGE_FULL 560 -#define ETHEREAL_BLOOD_CHARGE_OVERLOAD 700 -#define ETHEREAL_BLOOD_CHARGE_DANGEROUS 840 - -#define ETHEREAL_BLOOD_CHARGE_FACTOR 0.224 - /datum/species/ethereal name = "\improper Ethereal" id = SPECIES_ETHEREAL From a08002d61a5deedf0910de1a6f291639731a35c7 Mon Sep 17 00:00:00 2001 From: KittyNoodle Date: Fri, 31 May 2024 20:12:19 -0500 Subject: [PATCH 24/26] horms v2 --- .../modules/surgery/organs/external/ethereal_accessories.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/monkestation/code/modules/surgery/organs/external/ethereal_accessories.dm b/monkestation/code/modules/surgery/organs/external/ethereal_accessories.dm index 5f818c8e5d319d..3fd637f3e771b0 100644 --- a/monkestation/code/modules/surgery/organs/external/ethereal_accessories.dm +++ b/monkestation/code/modules/surgery/organs/external/ethereal_accessories.dm @@ -19,6 +19,9 @@ return GLOB.ethereal_horns_list /datum/bodypart_overlay/mutant/ethereal_horns/can_draw_on_bodypart(mob/living/carbon/human/human) + if((human.head?.flags_inv & HIDEHAIR) || (human.wear_mask?.flags_inv & HIDEHAIR)) + return FALSE + return TRUE /obj/item/organ/external/tail/ethereal From a8dad5df52f861d90d82d0bcf3ac1782ebdc2563 Mon Sep 17 00:00:00 2001 From: KittyNoodle Date: Sat, 1 Jun 2024 00:12:31 -0500 Subject: [PATCH 25/26] gah --- code/modules/mob/living/carbon/human/examine.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 0b3fa5cc9ab4c8..172e8b2c467f20 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -253,7 +253,7 @@ if(ETHEREAL_BLOOD_CHARGE_OVERLOAD to ETHEREAL_BLOOD_CHARGE_DANGEROUS) msg += "Electricity is arcing off of [t_him]!\n" if(ETHEREAL_BLOOD_CHARGE_FULL to ETHEREAL_BLOOD_CHARGE_OVERLOAD) - msg += "[t_His] seems unusually bright, and [t_is] sparking occasionally.\n" + msg += "[t_He] seems unusually bright, and [t_is] sparking occasionally.\n" if(ETHEREAL_BLOOD_CHARGE_LOW to ETHEREAL_BLOOD_CHARGE_NORMAL) msg += "[t_His] light is dimming.\n" if(ETHEREAL_BLOOD_CHARGE_LOWEST_PASSIVE to ETHEREAL_BLOOD_CHARGE_LOW) From 2bc94a43b3c845adb91578faa0d59002893917a1 Mon Sep 17 00:00:00 2001 From: KittyNoodle Date: Tue, 4 Jun 2024 15:40:27 -0500 Subject: [PATCH 26/26] cell --- code/modules/power/cell.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index fa85c19f05a862..a01ca496e41da2 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -236,7 +236,7 @@ if(istype(maybe_stomach, /obj/item/organ/internal/stomach/ethereal)) - var/charge_limit = ETHEREAL_CHARGE_DANGEROUS - CELL_POWER_GAIN + var/charge_limit = ETHEREAL_BLOOD_CHARGE_DANGEROUS - CELL_POWER_GAIN //Monkestation edit var/obj/item/organ/internal/stomach/ethereal/stomach = maybe_stomach if((stomach.drain_time > world.time) || !stomach) return @@ -249,7 +249,7 @@ to_chat(H, span_notice("You begin clumsily channeling power from [src] into your body.")) stomach.drain_time = world.time + CELL_DRAIN_TIME if(do_after(user, CELL_DRAIN_TIME, target = src)) - if((charge < CELL_POWER_DRAIN) || (stomach.crystal_charge > charge_limit)) + if((charge < CELL_POWER_DRAIN) || (H.blood_volume > charge_limit)) //Monkestation edit return if(istype(stomach)) to_chat(H, span_notice("You receive some charge from [src], wasting some in the process."))