From 62337ecb13794c22fc943e3e9fd5af3115f999bf Mon Sep 17 00:00:00 2001 From: Wollywoger Date: Sat, 19 Oct 2024 01:04:26 -0400 Subject: [PATCH 01/27] first cracks at restoration --- maplestation.dme | 4 + maplestation_modules/code/__DEFINES/DNA.dm | 1 + .../magic/story_spells/werewolf_form.dm | 12 ++ .../modules/mob/living/carbon/human/human.dm | 4 + .../carbon/human/species_types/werewolf.dm | 76 +++++++++++ .../code/modules/surgery/organs/ears.dm | 12 ++ .../code/modules/surgery/organs/eyes.dm | 6 + .../code/modules/surgery/organs/heart.dm | 10 ++ .../code/modules/surgery/organs/liver.dm | 20 +++ .../code/modules/surgery/organs/tongue.dm | 35 +++++ .../modules/surgery/organs/werewolf_parts.dm | 127 ++++++++++++++++++ .../icons/mob/mutant_bodyparts.dmi | Bin 1711 -> 5374 bytes .../icons/mob/werewolf_parts_greyscale.dmi | Bin 0 -> 1384 bytes 13 files changed, 307 insertions(+) create mode 100644 maplestation_modules/code/modules/magic/story_spells/werewolf_form.dm create mode 100644 maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm create mode 100644 maplestation_modules/code/modules/surgery/organs/heart.dm create mode 100644 maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm create mode 100644 maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi diff --git a/maplestation.dme b/maplestation.dme index 9e715b83f977..5d2841436dd5 100644 --- a/maplestation.dme +++ b/maplestation.dme @@ -6386,6 +6386,7 @@ #include "maplestation_modules\code\modules\magic\story_spells\soothe.dm" #include "maplestation_modules\code\modules\magic\story_spells\thaumatergic_sense.dm" #include "maplestation_modules\code\modules\magic\story_spells\water_control.dm" +#include "maplestation_modules\code\modules\magic\story_spells\werewolf_form.dm" #include "maplestation_modules\code\modules\magic\story_spells\components\pointed_component.dm" #include "maplestation_modules\code\modules\magic\story_spells\components\story_spell_component.dm" #include "maplestation_modules\code\modules\magic\story_spells\components\touch_component.dm" @@ -6433,6 +6434,7 @@ #include "maplestation_modules\code\modules\mob\living\carbon\human\species_types\skrell.dm" #include "maplestation_modules\code\modules\mob\living\carbon\human\species_types\species.dm" #include "maplestation_modules\code\modules\mob\living\carbon\human\species_types\vampire.dm" +#include "maplestation_modules\code\modules\mob\living\carbon\human\species_types\werewolf.dm" #include "maplestation_modules\code\modules\mob\living\carbon\human\species_types\synth\synth.dm" #include "maplestation_modules\code\modules\mob\living\carbon\human\species_types\synth\synth_ion.dm" #include "maplestation_modules\code\modules\mob\living\silicon\robot\robot_defines.dm" @@ -6473,9 +6475,11 @@ #include "maplestation_modules\code\modules\surgery\organs\autosurgeon.dm" #include "maplestation_modules\code\modules\surgery\organs\ears.dm" #include "maplestation_modules\code\modules\surgery\organs\eyes.dm" +#include "maplestation_modules\code\modules\surgery\organs\heart.dm" #include "maplestation_modules\code\modules\surgery\organs\liver.dm" #include "maplestation_modules\code\modules\surgery\organs\tails.dm" #include "maplestation_modules\code\modules\surgery\organs\tongue.dm" +#include "maplestation_modules\code\modules\surgery\organs\werewolf_parts.dm" #include "maplestation_modules\code\modules\uplink\uplink_devices.dm" #include "maplestation_modules\code\modules\uplink\uplink_infiltrator.dm" #include "maplestation_modules\code\modules\uplink\uplink_items.dm" diff --git a/maplestation_modules/code/__DEFINES/DNA.dm b/maplestation_modules/code/__DEFINES/DNA.dm index c4249c288de3..8e4959f01702 100644 --- a/maplestation_modules/code/__DEFINES/DNA.dm +++ b/maplestation_modules/code/__DEFINES/DNA.dm @@ -5,3 +5,4 @@ #define SPECIES_REPLOID "reploid" #define SPECIES_SYNTH "synth" #define SPECIES_ORNITHID "ornithid" +#define SPECIES_WEREWOLF "werewolf" diff --git a/maplestation_modules/code/modules/magic/story_spells/werewolf_form.dm b/maplestation_modules/code/modules/magic/story_spells/werewolf_form.dm new file mode 100644 index 000000000000..2a05f2dbda62 --- /dev/null +++ b/maplestation_modules/code/modules/magic/story_spells/werewolf_form.dm @@ -0,0 +1,12 @@ +// the many spells that are used to turn into versions of a werewolf + +/datum/action/cooldown/spell/shapeshift/werewolf // use this for the simplemob forms, like standard wolves + name = "Lycanthropic Shift" + desc = "Channel the wolf within yourself and turn into one of your possible forms. \ + Be careful, for you can still die within this form." + invocation = "RAAAAAAAAWR!" + invocation_type = INVOCATION_SHOUT + spell_requirements = NONE + possible_shapes = list( + /mob/living/simple_animal/hostile/asteroid/wolf, // room to add other forms + ) diff --git a/maplestation_modules/code/modules/mob/living/carbon/human/human.dm b/maplestation_modules/code/modules/mob/living/carbon/human/human.dm index 321976fdfeab..4aab41691333 100644 --- a/maplestation_modules/code/modules/mob/living/carbon/human/human.dm +++ b/maplestation_modules/code/modules/mob/living/carbon/human/human.dm @@ -53,3 +53,7 @@ outfit_copy.implants = list() for(var/obj/item/implant/I in implants) outfit_copy.implants |= I.type + +// species mobs +/mob/living/carbon/human/species/werewolf + race = /datum/species/werewolf diff --git a/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm b/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm new file mode 100644 index 000000000000..cda65412224b --- /dev/null +++ b/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm @@ -0,0 +1,76 @@ +/datum/species/werewolf + name = "werewolf" + id = SPECIES_WEREWOLF + inherent_traits = list( + TRAIT_USES_SKINTONES, + TRAIT_NO_UNDERWEAR, + TRAIT_NO_AUGMENTS, + TRAIT_IGNOREDAMAGESLOWDOWN, + TRAIT_PUSHIMMUNE, + TRAIT_STUNIMMUNE, + TRAIT_PRIMITIVE, + TRAIT_CAN_STRIP, + TRAIT_CHUNKYFINGERS + ) + mutanttongue = /obj/item/organ/internal/tongue/werewolf + mutantears = /obj/item/organ/internal/ears/werewolf + mutanteyes = /obj/item/organ/internal/eyes/werewolf + mutantbrain = /obj/item/organ/internal/brain/werewolf + mutantliver = /obj/item/organ/internal/liver/werewolf + mutantheart = /obj/item/organ/internal/heart/werewolf + external_organs = list( + /obj/item/organ/external/tail/cat = "Cat", + ) + skinned_type = /obj/item/stack/sheet/animalhide/human + changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT + no_equip_flags = ITEM_SLOT_MASK | ITEM_SLOT_OCLOTHING | ITEM_SLOT_GLOVES | ITEM_SLOT_FEET | ITEM_SLOT_ICLOTHING | ITEM_SLOT_SUITSTORE + + bodypart_overrides = list( + BODY_ZONE_HEAD = /obj/item/bodypart/head/werewolf, + BODY_ZONE_CHEST = /obj/item/bodypart/chest/werewolf, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/werewolf, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/werewolf, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/werewolf, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/werewolf, + ) + +/obj/item/organ/internal/brain/werewolf/get_attacking_limb(mob/living/carbon/human/target) + name = "werewolf brain" + desc = "a strange mixture of a human and wolf brain" + organ_traits = list(TRAIT_PRIMITIVE, TRAIT_CAN_STRIP) + + if(target.body_position == LYING_DOWN) + return owner.get_bodypart(BODY_ZONE_HEAD) + return ..() + +/datum/species/werewolf/prepare_human_for_preview(mob/living/carbon/human/human) + human.set_haircolor("#bb9966", update = FALSE) // brown + human.set_hairstyle("Business Hair", update = TRUE) + +/datum/species/werewolf/get_species_description() + return "N/A" + +/datum/species/human/get_species_lore() + return list( + "N/A", + ) + +/datum/species/werewolf/create_pref_unique_perks() + var/list/to_add = list() + + to_add += list( + list( + SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, + SPECIES_PERK_ICON = "paw", + SPECIES_PERK_NAME = "Primal Primate", + SPECIES_PERK_DESC = "Werewolves are monstrous humans, and can't do most things a human can do. Computers are impossible, \ + complex machines are right out, and most clothes don't fit your larger form.", + ), + list( + SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, + SPECIES_PERK_ICON = "assistive-listening-systems", + SPECIES_PERK_NAME = "Sensitive Hearing", + SPECIES_PERK_DESC = "Werewolves are more sensitive to loud sounds, such as flashbangs.", + )) + + return to_add diff --git a/maplestation_modules/code/modules/surgery/organs/ears.dm b/maplestation_modules/code/modules/surgery/organs/ears.dm index c3a7380ce876..8f9414303d08 100644 --- a/maplestation_modules/code/modules/surgery/organs/ears.dm +++ b/maplestation_modules/code/modules/surgery/organs/ears.dm @@ -31,3 +31,15 @@ icon_state = "catcyber" icon = 'maplestation_modules/icons/mob/mutant_bodyparts.dmi' locked = TRUE + +/obj/item/organ/internal/ears/werewolf + name = "wolf ears" + icon = 'icons/obj/clothing/head/costume.dmi' + icon_state = "kitty" + desc = "Allows the user to more easily hear whispers. The user becomes extra vulnerable to loud noises, however" + // Same sensitivity as felinid ears + damage_multiplier = 2 + +/obj/item/organ/internal/ears/werewolf/on_mob_insert(mob/living/carbon/ear_owner) + . = ..() + organ_traits = list(TRAIT_GOOD_HEARING) diff --git a/maplestation_modules/code/modules/surgery/organs/eyes.dm b/maplestation_modules/code/modules/surgery/organs/eyes.dm index 1515021eb4b6..a7e9a9e94279 100644 --- a/maplestation_modules/code/modules/surgery/organs/eyes.dm +++ b/maplestation_modules/code/modules/surgery/organs/eyes.dm @@ -5,3 +5,9 @@ /mob/living/carbon /// Overlay file to take (missing) eye icons from var/missing_eye_file = 'icons/mob/human/human_face.dmi' + +/obj/item/organ/internal/eyes/werewolf + name = "wolf eyes" + desc = "Large and powerful eyes." + sight_flags = SEE_MOBS + color_cutoffs = list(25, 5, 42) diff --git a/maplestation_modules/code/modules/surgery/organs/heart.dm b/maplestation_modules/code/modules/surgery/organs/heart.dm new file mode 100644 index 000000000000..e31743256a04 --- /dev/null +++ b/maplestation_modules/code/modules/surgery/organs/heart.dm @@ -0,0 +1,10 @@ +/obj/item/organ/internal/heart/werewolf + name = "massive heart" + desc = "An absolutely monstrous heart." + icon_state = "heart-on" + base_icon_state = "heart" + maxHealth = 2 * STANDARD_ORGAN_THRESHOLD + +/obj/item/organ/internal/heart/wolf/Initialize(mapload) + . = ..() + transform = transform.Scale(1.5) diff --git a/maplestation_modules/code/modules/surgery/organs/liver.dm b/maplestation_modules/code/modules/surgery/organs/liver.dm index c31b633e2529..2f258f1cc9ab 100644 --- a/maplestation_modules/code/modules/surgery/organs/liver.dm +++ b/maplestation_modules/code/modules/surgery/organs/liver.dm @@ -12,3 +12,23 @@ /obj/item/organ/internal/liver/lizard/Initialize(mapload) . = ..() disease_free_foods = typecacheof(/obj/item/food/deadmouse) + +/obj/item/organ/internal/liver/werewolf + + name = "Beastly liver" + desc = "A large monstrous liver." + icon_state = "liver" + organ_traits = list(TRAIT_STABLELIVER, ORGAN_UNREMOVABLE) + ///Var for brute healing via blood + var/blood_brute_healing = 2.5 + ///Var for burn healing via blood + var/blood_burn_healing = 2.5 + +/obj/item/organ/internal/liver/werewolf/handle_chemical(mob/living/carbon/organ_owner, datum/reagent/chem, seconds_per_tick, times_fired) + . = ..() + // parent returned COMSIG_MOB_STOP_REAGENT_CHECK or we are failing + if((. & COMSIG_MOB_STOP_REAGENT_CHECK) || (organ_flags & ORGAN_FAILING)) + return + if(istype(chem, /datum/reagent/silver)) + organ_owner.adjustStaminaLoss(7.5 * REM * seconds_per_tick, updating_stamina = TRUE) + organ_owner.adjustFireLoss(5.0 * REM * seconds_per_tick, updating_health = TRUE) diff --git a/maplestation_modules/code/modules/surgery/organs/tongue.dm b/maplestation_modules/code/modules/surgery/organs/tongue.dm index e7c13530e991..4c1e3e8fb789 100644 --- a/maplestation_modules/code/modules/surgery/organs/tongue.dm +++ b/maplestation_modules/code/modules/surgery/organs/tongue.dm @@ -36,3 +36,38 @@ /obj/item/organ/internal/tongue/lizard/get_possible_languages() return ..() + /datum/language/impdraconic + +/obj/item/organ/internal/tongue/werewolf + name = "wolf tongue" + desc = "A large tongue that looks like a mix of a human's and a wolf's." + icon_state = "werewolf_tongue" + icon = 'maplestation_modules/icons/mob/mutant_bodyparts.dmi' + say_mod = "growls" + modifies_speech = TRUE + taste_sensitivity = 5 + liked_foodtypes = GROSS | MEAT | RAW | GORE + disliked_foodtypes = SUGAR + +/obj/item/organ/internal/tongue/werewolf/modify_speech(datum/source, list/speech_args) + var/message = speech_args[SPEECH_MESSAGE] + if(message[1] != "*") + + // all occurrences of characters "eiou" (case-insensitive) are replaced with "r" + message = replacetext(message, regex(@"[eiou]", "ig"), "r") + // all characters other than "zhrgbmna .!?-" (case-insensitive) are stripped + message = replacetext(message, regex(@"[^zhrgbmna.!?-\s]", "ig"), "") + // multiple spaces are replaced with a single (whitespace is trimmed) + message = replacetext(message, regex(@"(\s+)", "g"), " ") + + var/list/old_words = splittext(message, " ") + var/list/new_words = list() + for(var/word in old_words) + // lower-case "r" at the end of words replaced with "rh" + word = replacetext(word, regex(@"\lr\b"), "rh") + // an "a" or "A" by itself will be replaced with "hra" + word = replacetext(word, regex(@"\b[Aa]\b"), "hra") + new_words += word + + message = new_words.Join(" ") + message = capitalize(message) + speech_args[SPEECH_MESSAGE] = message diff --git a/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm b/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm new file mode 100644 index 000000000000..0765ae15e3f0 --- /dev/null +++ b/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm @@ -0,0 +1,127 @@ +///WEREWOLF +/obj/item/bodypart/head/werewolf + limb_id = SPECIES_WEREWOLF + icon_greyscale = 'maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi' + is_dimorphic = FALSE + should_draw_greyscale = TRUE + +/obj/item/bodypart/head/werewolf/update_limb(dropping_limb, is_creating) + . = ..() + var/mob/living/carbon/human/wolf = owner + species_color = wolf.hair_color + draw_color = species_color + burn_modifier = 0.75 + brute_modifier = 0.25 + unarmed_attack_verb = "bite" + grappled_attack_verb = "maul" + unarmed_attack_effect = ATTACK_EFFECT_BITE + unarmed_attack_sound = 'sound/weapons/bite.ogg' + unarmed_miss_sound = 'sound/weapons/bite.ogg' + unarmed_damage_low = 60 + unarmed_damage_high = 75 + unarmed_effectiveness = 50 + dmg_overlay_type = null + biological_state = (BIO_FLESH|BIO_BLOODED) + head_flags = HEAD_EYESPRITES|HEAD_EYECOLOR|HEAD_EYEHOLES|HEAD_DEBRAIN|HEAD_HAIR + +/obj/item/bodypart/chest/werewolf + limb_id = SPECIES_WEREWOLF + icon_greyscale = 'maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi' + is_dimorphic = TRUE + should_draw_greyscale = TRUE + +/obj/item/bodypart/chest/werewolf/update_limb(dropping_limb, is_creating) + . = ..() + var/mob/living/carbon/human/wolf = owner + species_color = wolf.hair_color + draw_color = species_color + burn_modifier = 0.75 + brute_modifier = 0.25 + dmg_overlay_type = null + biological_state = (BIO_FLESH|BIO_BLOODED) + bodypart_traits = list(TRAIT_NO_JUMPSUIT, TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_PUSHIMMUNE, TRAIT_STUNIMMUNE) + wing_types = NONE + +/obj/item/bodypart/arm/left/werewolf + limb_id = SPECIES_WEREWOLF + icon_greyscale = 'maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi' + should_draw_greyscale = TRUE + +/obj/item/bodypart/arm/left/werewolf/update_limb(dropping_limb, is_creating) + . = ..() + var/mob/living/carbon/human/wolf = owner + species_color = wolf.hair_color + draw_color = species_color + unarmed_attack_verb = "slash" + grappled_attack_verb = "lacerate" + unarmed_attack_effect = ATTACK_EFFECT_CLAW + unarmed_attack_sound = 'sound/weapons/slice.ogg' + unarmed_miss_sound = 'sound/weapons/slashmiss.ogg' + unarmed_damage_low = 20 + unarmed_damage_high = 25 + unarmed_effectiveness = 20 + burn_modifier = 0.75 + brute_modifier = 0.25 + dmg_overlay_type = null + bodypart_traits = list(TRAIT_CHUNKYFINGERS) + biological_state = (BIO_FLESH|BIO_BLOODED) + +/obj/item/bodypart/arm/right/werewolf + limb_id = SPECIES_WEREWOLF + icon_greyscale = 'maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi' + should_draw_greyscale = TRUE + +/obj/item/bodypart/arm/right/werewolf/update_limb(dropping_limb, is_creating) + . = ..() + var/mob/living/carbon/human/wolf = owner + species_color = wolf.hair_color + draw_color = species_color + unarmed_attack_verb = "slash" + grappled_attack_verb = "lacerate" + unarmed_attack_effect = ATTACK_EFFECT_CLAW + unarmed_attack_sound = 'sound/weapons/slice.ogg' + unarmed_miss_sound = 'sound/weapons/slashmiss.ogg' + unarmed_damage_low = 20 + unarmed_damage_high = 25 + unarmed_effectiveness = 20 + burn_modifier = 0.75 + brute_modifier = 0.25 + dmg_overlay_type = null + bodypart_traits = list(TRAIT_CHUNKYFINGERS) + biological_state = (BIO_FLESH|BIO_BLOODED) + +/obj/item/bodypart/leg/left/werewolf + limb_id = SPECIES_WEREWOLF + icon_greyscale = 'maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi' + should_draw_greyscale = TRUE + +/obj/item/bodypart/leg/left/werewolf/update_limb(dropping_limb, is_creating) + . = ..() + var/mob/living/carbon/human/wolf = owner + species_color = wolf.hair_color + draw_color = species_color + burn_modifier = 0.75 + brute_modifier = 0.25 + speed_modifier = 3 + dmg_overlay_type = null + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_DIGITIGRADE + footstep_type = FOOTSTEP_MOB_CLAW + biological_state = (BIO_FLESH|BIO_BLOODED) + +/obj/item/bodypart/leg/right/werewolf + limb_id = SPECIES_WEREWOLF + icon_greyscale = 'maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi' + should_draw_greyscale = TRUE + +/obj/item/bodypart/leg/right/werewolf/update_limb(dropping_limb, is_creating) + . = ..() + var/mob/living/carbon/human/wolf = owner + species_color = wolf.hair_color + draw_color = species_color + burn_modifier = 0.75 + brute_modifier = 0.25 + speed_modifier = 3 + dmg_overlay_type = null + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_DIGITIGRADE + footstep_type = FOOTSTEP_MOB_CLAW + biological_state = (BIO_FLESH|BIO_BLOODED) diff --git a/maplestation_modules/icons/mob/mutant_bodyparts.dmi b/maplestation_modules/icons/mob/mutant_bodyparts.dmi index eb3e768f68d75e282d419dd3a4a83db31e2522a7..8b9d547aa12163b5e95ad46c5eab232e06b27fc7 100644 GIT binary patch literal 5374 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 literal 1711 zcmV;g22lBlP)Sdh-2eao>gwv`4}vfdh3EEHG`JE2ild7GmBE@A z_om2E8lfho5&id`lBkP-OY`p1@4d_ACTx{#QqJOCO0QrWeKBmwqG>=$t8-UkF`rRV zf>x#LipEI?D80;rJcIQp$+c~;6H-!GSwpAa|7ro!HsU1R>7IcV>%*QOKU6f1S|!_* z$0IRq3?hFgI;pECC0ePJHcAwiTW|0JyHLqH%9$Vf!E}Ky?#n`}O+L!LXSOf*@a5e3 zqaI8c8vHlayQ>LHc>Fq+2MThhs3YHSwg3PHO-V#SRCt{2oV#w@NEC(%XLostUF;hK zMjjwY@&G}0A7Ft1Tc=1;ryH$<0PLtHK)QwK#+{K-vt1DL0knk+cX8u)$qZ%5Gt~S? zqZyG*kn_PdM9%H!#RC7snUnn9AsL$QQ^2wMJ$OL2J0>?Bl~I3A0gqMX<407N2M_J- z=b-z$(&J}42zc>0Ie79H)#bxK?Cqz|soJm9;D5f{LBOxKznEWM+uMIXqiVlVzrXDw zVBfr4{~1XD1q)ySEPw^D02aUkSO5!P0W5$8FyAMS)_+Fgg&LfW4msDzkQ?xIw@?SK4CXq-j496~^a1=LawAfO%JJ8&)V4Q!tEb4W3AC z)1F~xg-TMx4MX+17H}o0kRPpjNPrY4&SS{Wg^n~@&*fNRs{=q{?d0B5?q6N?j=Ckd-ov}@~#6cK>IT3E~y(&0Syw+ z_z7sh8SDsv?h?7{dhR7adE<+-ZS6?`s)xpL2-faHEI^-vFRuNC)h)gPZ4du#?!9mJ zdq{*L^Hb*mB-RN?hzN`B!Ep#`r_t?#h=sb_cT9U);tt&Y-rmXa0fu21hGCc=mF0VV z@_DXT^5xTfCUAJ6U+R^BCbe@(fgjHB}GwxQF(6 zUkDuDp{eEkbL;3T93D~qBYUqq&^Pgdcymu9SMDq$4j~mFKG8-fwC)8lcY!3AYkPTE zL35d&%+dUZLSCG|ZH;NzO;pV9TfRHG{A?M54DGNM(B+>U!4N6Skj_q|SPH==| zc@rOAUS47WwUqALIB!gU4efO*{sBQAbqoEwzVxuYj-|P8B42+mbdbnp&vl4s-3qo> z=c#eeqUrd1;x5je*PxJQ+yljv+dHk1jtI*xoHnk#?#NGCP;>HJGhJIlWC15s- z6%d8~jv~Iz`)81;bhLtz$7dLZVVIwh@!}0D0g>^BaKFD65T_vA@81#`Z;0^wx6tv1 z?S%XN6=b}@S3u08EER9?AlUC4UEp|w#V5D9q5ZxWINo3~lkV^j?f1Q)UgxjD&OM=D z$NS*XzL46vpN%Krz8W9Q?nnr~?+F!eSfR%MJgRYQX0vex%lM7f)Ac6EXzCp5nnN7OEg`kIgBHtigf3gvq z2zoO^lf8*tQSbjnx-{6+|8}Giu@)Pd*4!^DcUVr-9l^&Fzkjgi>rT#|Kp!|eX zzCl?3{gwWB^tIDAC_f>UZxGbKxw%??KDxQFng``4q|*Jl>whpeuWbPV*I;)6R{hKr z5R{*g%s1$)e`RhSS?xpe6Yd%xxc)$F50Zc2%HBNce?*317=~e(AD_|Z5{^Ba5}Wqu z^#$Gnz^vxz^##5Hz{KwO^#z{T`3Vi;*B5wV5bYlmOba$F4767=~dW-vAR}i8`?|l^g&7002ovPDHLk FV1ku0Mn?bu diff --git a/maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi b/maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi new file mode 100644 index 0000000000000000000000000000000000000000..6401ab8245b3f8d14c1b825b9b108c27053e464d GIT binary patch literal 1384 zcmV-u1(*7XP)fFDZ*Bkpc$}4y!3x4K42I9`Q(Qo;W(umu*(k20Js!7R8pius76WSt*)ZMva-KX(N@qLX{! z5QMV;00dA;L_t(|ob8;!a@#f#hCvjHo0}mda*qP(2PnL5e3fWjdXp!k_!^BT$~Bsd z?Q7D$K*o~?F4dWey8t8*5!H5*{Z3wRcYgw;XBGkoA^tC%QnUDm=+oVHLq#Jl@&v5V zr^R@;EktRFDTig2KxM&ISfH^pqIq4sPG<~&QlS&Ib<0JtOx zjkDMu8Y-Bg83A~)#}?KB%vy5>V6p^+t?ZcC;D}w*F|zF8XFvo;y5Awv z;D~@3_1uFyfOp3fI9c8;-(wpbT=gk1c({Kc582(Xf9q2~Ear>(KAT|}hGBjT4zK?o zAM{&nKhy6Yk(sRj6Y*lOyjqQL!*ca;^Z_T_U;n4##ffo`xULZok0e2={!hg>4gjyn z9W>KOQt$7t|5Ndy!yR=<)&HA#QptVv1U9uL?P4Q{9h&-|6jDw7@5jHz*PnUugFC$< z#p=yUzuMOWum0b}<7X;PX#A#2jtUskw#T!imlJ$Qgz8Q1v zJ81k&lJ$Qge$y}_LpE5FfMorjh!5YA!J3S5vi?uRHw`N)DBi60*89Glif0&xVHl

JZt8OH*u)~)EW?$`SJ`F4a) zQJ*h62yFd>d_{a|RU&~dJ=ppO`HD;5_it1yAfbc6)?df-F$}{n48t(rDc&Zp{+ZI9 zd;Oz=Sw!Cg*T)t(dJm5M3=qX-RI5VMP)p|=GE=}sM{9@#rgYYnxt~_*aje;50lM=s zvj-x+J6557sYzx^hG7_nVHk$_FFD_?V8rJhwDEd4$raG;5=n=3wW`Cql!yK2TcjdB zMW&6lFYpt(J`*wI)}zbK1v3IbJ)Cw(kPQ-0^$}*M7TOt=D$7al0=3b|ID&veE0e;; zpYlP}_zO6j|4)(@z&9-~@;>P6fGWvnmlwT{k*cY{q;COHfBw`OfA&5?O&6ZNw8qmB z-Xex!7=~f~1*%9}_AmN=wFhWfBDN8)K>kwGjeg3CfZAVma_I1dn7|O1Ce~2#$XO6m z?}Q8K+I5d2vhG-yI7dnM?%BxB!ph4bkzirMYMD*}taqe{3AXO3-~oc Date: Sat, 19 Oct 2024 13:51:57 -0400 Subject: [PATCH 02/27] temporarily removes a trait from werewolf liver --- maplestation_modules/code/modules/surgery/organs/liver.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maplestation_modules/code/modules/surgery/organs/liver.dm b/maplestation_modules/code/modules/surgery/organs/liver.dm index 736b357e580e..617e62eb2424 100644 --- a/maplestation_modules/code/modules/surgery/organs/liver.dm +++ b/maplestation_modules/code/modules/surgery/organs/liver.dm @@ -6,7 +6,7 @@ name = "Beastly liver" desc = "A large monstrous liver." icon_state = "liver" - organ_traits = list(TRAIT_STABLELIVER, ORGAN_UNREMOVABLE) + organ_traits = list(TRAIT_STABLELIVER) // TODO, since i've removed organ_unremovable: add trait checks to add some malus/autoconvert livers when inside a werewolf, and a malus/remove the buffs when this liver is in a non-werewolf ///Var for brute healing via blood var/blood_brute_healing = 2.5 ///Var for burn healing via blood From e1f667d0c87d7a5ad29f349a720d60fde8f7ac7c Mon Sep 17 00:00:00 2001 From: Wollywoger Date: Sat, 19 Oct 2024 13:54:02 -0400 Subject: [PATCH 03/27] moves the organ flags on werewolf liver --- maplestation_modules/code/modules/surgery/organs/liver.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/maplestation_modules/code/modules/surgery/organs/liver.dm b/maplestation_modules/code/modules/surgery/organs/liver.dm index 617e62eb2424..5ae67a0d4b74 100644 --- a/maplestation_modules/code/modules/surgery/organs/liver.dm +++ b/maplestation_modules/code/modules/surgery/organs/liver.dm @@ -6,8 +6,8 @@ name = "Beastly liver" desc = "A large monstrous liver." icon_state = "liver" - organ_traits = list(TRAIT_STABLELIVER) // TODO, since i've removed organ_unremovable: add trait checks to add some malus/autoconvert livers when inside a werewolf, and a malus/remove the buffs when this liver is in a non-werewolf - ///Var for brute healing via blood + organ_flags = ORGAN_UNREMOVABLE + organ_traits = list(TRAIT_STABLELIVER) var/blood_brute_healing = 2.5 ///Var for burn healing via blood var/blood_burn_healing = 2.5 From 68dec59fece4e73303ea9d790891da96d3fd1ba2 Mon Sep 17 00:00:00 2001 From: Wollywoger Date: Sat, 19 Oct 2024 21:19:13 -0400 Subject: [PATCH 04/27] fixes the werewolf legs again, adds the spell, screenshots still need updating when sprites are done --- .../magic/story_spells/werewolf_form.dm | 30 +++++++++++++++++- .../icons/mob/werewolf_parts_greyscale.dmi | Bin 1384 -> 1376 bytes 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/maplestation_modules/code/modules/magic/story_spells/werewolf_form.dm b/maplestation_modules/code/modules/magic/story_spells/werewolf_form.dm index 2a05f2dbda62..a2cd9ddef626 100644 --- a/maplestation_modules/code/modules/magic/story_spells/werewolf_form.dm +++ b/maplestation_modules/code/modules/magic/story_spells/werewolf_form.dm @@ -1,6 +1,6 @@ // the many spells that are used to turn into versions of a werewolf -/datum/action/cooldown/spell/shapeshift/werewolf // use this for the simplemob forms, like standard wolves +/datum/action/cooldown/spell/shapeshift/lycanthrope // use this for the simplemob forms, like standard wolves name = "Lycanthropic Shift" desc = "Channel the wolf within yourself and turn into one of your possible forms. \ Be careful, for you can still die within this form." @@ -10,3 +10,31 @@ possible_shapes = list( /mob/living/simple_animal/hostile/asteroid/wolf, // room to add other forms ) + +/datum/action/cooldown/spell/werewolf_form + name = "Werewolf Change" + desc = "Change to and from your full werewolf form. \ + You will gain the full effects of this, both negative and positive." + invocation = "ARRRROOOOO!" // i don't know man + invocation_type = INVOCATION_SHOUT + spell_requirements = SPELL_REQUIRES_HUMAN + var/mob/living/carbon/human/lycanthrope + var/datum/species/owner_base_species // what species we are other than a werewolf + // yes this might cause other implications, such as mass species change, or with synths (synthcode moment) but i'll look into it later down the line + +/datum/action/cooldown/spell/werewolf_form/Grant(mob/grant_to) + . = ..() + if (!ishuman(grant_to)) + return stack_trace("A non human was given werewolf form!") // only human mobs should be given this + else + lycanthrope = grant_to + owner_base_species = lycanthrope.dna.species + +/datum/action/cooldown/spell/werewolf_form/cast(atom/cast_on) + . = ..() + if(istype(lycanthrope.dna.species, /datum/species/werewolf)) + lycanthrope.balloon_alert(lycanthrope, "changing back") + lycanthrope.set_species(owner_base_species) + else + lycanthrope.balloon_alert(lycanthrope, "turning") + lycanthrope.set_species(/datum/species/werewolf) diff --git a/maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi b/maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi index 6401ab8245b3f8d14c1b825b9b108c27053e464d..542cb6a706810859fea1f1bb5a52152548a53a25 100644 GIT binary patch delta 1133 zcmV-z1d{vc3g8N`0|9?XNklLq zimwrjDAx#q?Q7EhKw#v9vno*S3`vR0Xw??Uypta_GjE5x1|CIfh4{bVl+xlGvQKyO z1{KY?$P=(apBCfYT!_*VDu-p3KxM&ISfJsgqB1}Qz)f-lq%nWyf^dK#4yZkD!JKCa zIBT&$0RWezpm7%Sp`n5)G&2Ct_i$kyz^tV+0FxykY-PuUgCo4Ab7lct))Wafn-MO7 zK8MN}jRiF5NtQqol`F?cza-CuC~j8En?3wsyc+3|nIrDBhWYOJd;zyw;(|Azjq6k3 zwkddp3f>wAXMKMPESiVx#T;`-_`w*g!QB(?2tQolR-Y{}f8}7YGx}Qu{0@vZFM1W& z+yf#w()~`621f+UsOJvu0Nx%`;ADBXe1|zWxaw12@NoY?ZnC>y|K6v7Sj-pmeVoBy zFc^#<1Bd(n#|Qle^Jn_qBce(FpU4-3<<)A02bQZ3qxXNf;C}y~$`>cbJz`%Y9v(@7 zl>blVHvs@I$rUuqNaFYR`~Osa7;r}eQvQFFPn_HbPhjIMX^V{@4ru&8F;b2H_w(Q2 z&!2hugFC$OJ7HH#xdL}Ah+Ut;XPbv=B#v8u_Gma%xZCKG| z->;4L>+MLNqMk212yEkndPRI|RU&~d9c<%+dc}XGANw~{DoFJ%27|$1 zFuqfGhrIg7l%Cw{A1YWy^eu3GY=NV9aO``4P+Uf}Dzpr>bj=|%1zdEthDcyaS52Ac zX{8>=hAkGLCm%CA5b@Ko3iYKXnI#zv27|$1Fc^&g66f0;jQHAv4qgu@xdOV~BI&TN zR&{^am-1l$`7KfrUn0}N+86i#pz0&6P%X48Dpi(~ z-UVu-5jlc@LOYYf#_#e$sPQl0Z2mtBE6`1rbAnH#a zTk==$Gt{*3^tmNZM|g@D3>yr&;-#hs{gf2}YH!!c z;nzjP1cum}SVP4l?}C`pH(W@Ewmpi-zGGeD8YMluXCo&ID_TQhy~2cUnJxjW_ev2H z9Nkm?8#F8yjJzO3P0{Bv%=WLS^zAAsFpYG89|HN@&#wH9CF`FBRJa3G`vRU_H-2Sy z@XnGTL|mi$6fP*JU7z}g4^{Y7SU-je1a^79z;*ae6lp#Z{`0SsmVEkiB0Q)H#Vfox z*d#~3E0E`(3IF8}RP*Ue5U*+!ufBN6^;Y03Q+&aTA8TND00000NkvXXu0mjfU`8Vh delta 1141 zcmV-*1d99M3g`;30|9?fNkl7$*V;dY?^(ioTxPKrI+1;;y>r+51=8O40 zn_(D+VSWq_um2w(^jmB{)9)XVnXLa4@nW#NT8(hSa`k_4^Z_T_U;n4##ffo`xULZo zk0e2={!hg>4gjyn9W>KOQt$7t|5Ndy!yR=<)&HA#QptVv1U9uL?P4Q{9h&-|6jDw7 z@5jHz*PnUugFC$<#p=yUzuMOWum0b}<7X;PX#A#2jtUskw z#T!imlJ$RoBEA`O?K^1vOp^6~B7V~_B11MgF zs@AROvhLUV`}uZ+Pf?#QI|yw3gM3ANX;mVDEsP-vZai7C3qjj{OV}#bs2hLeo%7=NvLqz(q%EhyzW9=N`22dN|1y(CrdQ zhjo9os>8aJhyCYUq#`~=rj4~P@DsW|6EWo0qsz?&GXg+8oOVc%4H8iG5oV|s+8LE9 z%SrD7wb95pf`CFRlfuTI@S;7rl>>s;R)FZvjz% z{?rkwGjeg3CfZAVm za_I1dn7|O1Ce~2#$XO6m?}Q8K+I5d2vhG-yI7dnM?%BxB!ph4bkzirMYMD*}taqe{ z3AXO3-~;?-#fZ&qR^t6K(kUm&x|;&wosW zhpLdj!jpqdY~;5BdH#hqJpa8-`t&vMS2gliUup33dMof3Pi?`AhdSeK00000NkvXX Hu0mjfg0VS< From 601afc342a797e1aa2c8a7f4bc243292b93618c4 Mon Sep 17 00:00:00 2001 From: Wollywoger Date: Sun, 20 Oct 2024 17:21:02 -0400 Subject: [PATCH 05/27] rebalances, updates screenshots For Now --- ...shot_humanoids__datum_species_werewolf.png | Bin 0 -> 628 bytes .../code/modules/surgery/organs/liver.dm | 5 +++-- .../modules/surgery/organs/werewolf_parts.dm | 18 +++++++++--------- 3 files changed, 12 insertions(+), 11 deletions(-) create mode 100644 code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_werewolf.png diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_werewolf.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_werewolf.png new file mode 100644 index 0000000000000000000000000000000000000000..d8155394b46a3a4ee38f78f61136612fe35b8f7c GIT binary patch literal 628 zcmV-)0*n2LP)V=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+ z(=$pSoZ^zil2jm5Nr{UyC9|j)q@Ig2ttc@!6~s2=QdV&Fa{-$O0Gj_84mqJ=L;wH* zmPtfGR7i=fl(BMyFbsyRHet5f8s`Z(@> z@gd2wET#Tu>G;ZPg$gz3WvwtQy{r`k!-`f98Q_Tmj~U>Z0tXf{B%u#P?;s5sTy0;qVGex_Z1izD;)-3Gmfoo9?2- z@*FLN|0)6hG!d{lz|26H1roqGrS^UB$13TgR!0J4&SD0N6Thps%h~;gP_D@Vg_{j| zKrsUc_;eS5;=oEjY Date: Sun, 20 Oct 2024 20:01:03 -0400 Subject: [PATCH 06/27] renames werewolfform to test something --- maplestation.dme | 2 +- .../magic/story_spells/{werewolf_form.dm => lycanthropy.dm} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename maplestation_modules/code/modules/magic/story_spells/{werewolf_form.dm => lycanthropy.dm} (100%) diff --git a/maplestation.dme b/maplestation.dme index d1fe899e9895..e869f6420ab9 100644 --- a/maplestation.dme +++ b/maplestation.dme @@ -6390,12 +6390,12 @@ #include "maplestation_modules\code\modules\magic\story_spells\ice_blast.dm" #include "maplestation_modules\code\modules\magic\story_spells\ice_knife.dm" #include "maplestation_modules\code\modules\magic\story_spells\illusion.dm" +#include "maplestation_modules\code\modules\magic\story_spells\lycanthropy.dm" #include "maplestation_modules\code\modules\magic\story_spells\mage_hand.dm" #include "maplestation_modules\code\modules\magic\story_spells\shock_touch.dm" #include "maplestation_modules\code\modules\magic\story_spells\soothe.dm" #include "maplestation_modules\code\modules\magic\story_spells\thaumatergic_sense.dm" #include "maplestation_modules\code\modules\magic\story_spells\water_control.dm" -#include "maplestation_modules\code\modules\magic\story_spells\werewolf_form.dm" #include "maplestation_modules\code\modules\magic\story_spells\components\pointed_component.dm" #include "maplestation_modules\code\modules\magic\story_spells\components\story_spell_component.dm" #include "maplestation_modules\code\modules\magic\story_spells\components\touch_component.dm" diff --git a/maplestation_modules/code/modules/magic/story_spells/werewolf_form.dm b/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm similarity index 100% rename from maplestation_modules/code/modules/magic/story_spells/werewolf_form.dm rename to maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm From 94353cd673a906b7d9c5e513271556efe5a859f9 Mon Sep 17 00:00:00 2001 From: Wollywoger Date: Mon, 28 Oct 2024 18:20:40 -0400 Subject: [PATCH 07/27] fixes the ears and brain, breaks screenshot tests --- .../carbon/human/species_types/werewolf.dm | 14 +++++---- .../code/modules/surgery/organs/ears.dm | 27 ++++++++++++++++-- .../icons/mob/mutant_bodyparts.dmi | Bin 5374 -> 2627 bytes .../icons/mob/werewolf_parts_greyscale.dmi | Bin 1376 -> 1352 bytes 4 files changed, 33 insertions(+), 8 deletions(-) diff --git a/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm b/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm index cda65412224b..608acd216670 100644 --- a/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm +++ b/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm @@ -13,13 +13,13 @@ TRAIT_CHUNKYFINGERS ) mutanttongue = /obj/item/organ/internal/tongue/werewolf - mutantears = /obj/item/organ/internal/ears/werewolf + mutantears = /obj/item/organ/internal/ears/cat/werewolf mutanteyes = /obj/item/organ/internal/eyes/werewolf mutantbrain = /obj/item/organ/internal/brain/werewolf mutantliver = /obj/item/organ/internal/liver/werewolf mutantheart = /obj/item/organ/internal/heart/werewolf external_organs = list( - /obj/item/organ/external/tail/cat = "Cat", + /obj/item/organ/external/tail/cat = "Cat", // todo: add custom wolf tail ) skinned_type = /obj/item/stack/sheet/animalhide/human changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT @@ -34,19 +34,23 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/werewolf, ) -/obj/item/organ/internal/brain/werewolf/get_attacking_limb(mob/living/carbon/human/target) +/obj/item/organ/internal/brain/werewolf name = "werewolf brain" desc = "a strange mixture of a human and wolf brain" - organ_traits = list(TRAIT_PRIMITIVE, TRAIT_CAN_STRIP) + organ_traits = list(TRAIT_ADVANCEDTOOLUSER, TRAIT_LITERATE, TRAIT_PRIMITIVE, TRAIT_CAN_STRIP) // you may be a raging monster, but you still retain traits of your normal self + // also you can just inject clever mutation and get the first two traits anyways *shrug +/obj/item/organ/internal/brain/werewolf/get_attacking_limb(mob/living/carbon/human/target) if(target.body_position == LYING_DOWN) - return owner.get_bodypart(BODY_ZONE_HEAD) + return owner.get_bodypart(BODY_ZONE_HEAD) // performs a "maul" attack which does increased melee damage return ..() /datum/species/werewolf/prepare_human_for_preview(mob/living/carbon/human/human) human.set_haircolor("#bb9966", update = FALSE) // brown human.set_hairstyle("Business Hair", update = TRUE) +/* this shouldn't be a roundstart/base species players can choose, and is instead obtainable mid round +feel free to update this section if any of the three below can be accessed out of character set up. */ /datum/species/werewolf/get_species_description() return "N/A" diff --git a/maplestation_modules/code/modules/surgery/organs/ears.dm b/maplestation_modules/code/modules/surgery/organs/ears.dm index 8f9414303d08..ebae52331bd9 100644 --- a/maplestation_modules/code/modules/surgery/organs/ears.dm +++ b/maplestation_modules/code/modules/surgery/organs/ears.dm @@ -32,7 +32,7 @@ icon = 'maplestation_modules/icons/mob/mutant_bodyparts.dmi' locked = TRUE -/obj/item/organ/internal/ears/werewolf +/obj/item/organ/internal/ears/cat/werewolf name = "wolf ears" icon = 'icons/obj/clothing/head/costume.dmi' icon_state = "kitty" @@ -40,6 +40,27 @@ // Same sensitivity as felinid ears damage_multiplier = 2 -/obj/item/organ/internal/ears/werewolf/on_mob_insert(mob/living/carbon/ear_owner) +/obj/item/organ/internal/ears/cat/werewolf/on_mob_insert(mob/living/carbon/human/ear_owner) . = ..() - organ_traits = list(TRAIT_GOOD_HEARING) + if(istype(ear_owner)) + color = ear_owner.hair_color + ear_owner.dna.features["ears"] = ear_owner.dna.species.mutant_bodyparts["ears"] = "Werewolf" + ear_owner.update_body() + ADD_TRAIT(ear_owner, TRAIT_GOOD_HEARING, ORGAN_TRAIT) + +/obj/item/organ/internal/ears/cat/werewolf/on_mob_remove(mob/living/carbon/human/ear_owner) + . = ..() + if(istype(ear_owner)) + color = ear_owner.hair_color + ear_owner.dna.features["ears"] = "None" + ear_owner.dna.species.mutant_bodyparts -= "ears" + ear_owner.update_body() + REMOVE_TRAIT(ear_owner, TRAIT_GOOD_HEARING, ORGAN_TRAIT) + +/datum/sprite_accessory/ears/werewolf + name = "Werewolf" + icon_state = "werewolf" + icon = 'maplestation_modules/icons/mob/mutant_bodyparts.dmi' + locked = TRUE + hasinner = TRUE + color_src = HAIR_COLOR diff --git a/maplestation_modules/icons/mob/mutant_bodyparts.dmi b/maplestation_modules/icons/mob/mutant_bodyparts.dmi index 8b9d547aa12163b5e95ad46c5eab232e06b27fc7..92e28967302d297f84d126681eebd6c360f25423 100644 GIT binary patch literal 2627 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 diff --git a/maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi b/maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi index 542cb6a706810859fea1f1bb5a52152548a53a25..6c388d7b1374cd63d3e63fb97447f416ef49f371 100644 GIT binary patch delta 1109 zcmV-b1giVs3djnu0|9?9Nkl z!pSv8Q17+IBFS~rzCaM{1FyWmS~DagO10bq?R=*UH8a0RDZtRACuT)aMLdNr7>ngY=9wlC_USPIqxLkti=Ku09=rS##w)C4-FMeQH=ncG}yvA zfO&1s0Zbe3sFr%J(a1ZeNAq9?C z_p6WC1_zgY3Je|}9?3&?51U{66cEeBa?xZn48t(Y|AYPO|EEWNhwUT%@d=s9`acmb z2CK{U2sf$QI0)B~^n-^Sx- zDvoLVwo8r*7}Dir{a?kOVS8h|;&)>-F2BW%CIQL%KM`Mzx%M42ekRHKKM}ue7?B|x ztVlqz{!f3zhi}PXL&i8+|0m+BhBXxwH|xfF-?vlo48t%C!?faE>&A9T{Lt)|Sb(el zlm^lQwSSP$L%i65_)&73IH^OJA&lfEOcK$)WY~uTV zLn47TJ=pmN`LYY&_ZzAfkkCS4=da`W7=~dOhGBo0|0v!jul||QoqPSGf>}i00#}C? zICu{Z{R|Mjrq*s%v9zB^W-eyM54 zlnlc#48t%C^KWv#TfvCWJ!s?AaN1Qs*GnWV*42s@>rx)}`?pA0e2PpPOJCpzbbT&j z$en*jo0|(}1b})tYmuNcNI;bbn4wyzXH+WBr@af5MkC_@0t&563LAgQdr{&q;B5DQ zlC%K6X*uckL0=10PCmPw^gc$aqyp2v1w{G$xijB;(hG7_nVg3P% zNL%M$^u1~i@Tx>?BVLC5rKTJGlobJ`x9Wf7@Np3_fgvtUtfAtOvmj>lgbV4=vPTwK zcPw+9Bd2@!Y-DF)L32o~mzl6yrc(gx9Vudht$WHpLBnFf$N?d0hOWyn+P|aRFIP!| zS)>Q}C6Fh6bm1>7S${8}!aY!>FW{By#*YrpED2o16?#tLgo2jqGk^1;3f~Ir`%q1R zpj>VixC+lik>)e8fBbn`8_$1Eg@-DTzrvG)ZE)nb0(t&I?4N!^IbXj7{;EX&>Wdd# b?gYL9J50aG%m=c=00000NkvXXu0mjf!%!r! delta 1133 zcmV-z1d{v63g8N`0|9?XNklLq zimwrjDAx#q?Q7EhKw#v9vno*S3`vR0Xw??Uypta_GjE5x1|CIfh4{bVl+xlGvQKyO z1{KY?$P=(apBCfYT!_*VDu-p3KxM&ISfJsgqB1}Qz)f-lq%nWyf^dK#4yZkD!JKCa zIBT&$0RWezpm7%Sp`n5)G&2Ct_i$kyz^tV+0FxykY-PuUgCo4Ab7lct))Wafn-MO7 zK8MN}jRiF5NtQqol`F?cza-CuC~j8En?3wsyc+3|nIrDBhWYOJd;zyw;(|Azjq6k3 zwkddp3f>wAXMKMPESiVx#T;`-_`w*g!QB(?2tQolR-Y{}f8}7YGx}Qu{0@vZFM1W& z+yf#w()~`621f+UsOJvu0Nx%`;ADBXe1|zWxaw12@NoY?ZnC>y|K6v7Sj-pmeVoBy zFc^#<1Bd(n#|Qle^Jn_qBce(FpU4-3<<)A02bQZ3qxXNf;C}y~$`>cbJz`%Y9v(@7 zl>blVHvs@I$rUuqNaFYR`~Osa7;r}eQvQFFPn_HbPhjIMX^V{@4ru&8F;b2H_w(Q2 z&!2hugFC$OJ7HH#xdL}Ah+Ut;XPbv=B#v8u_Gma%xZCKG| z->;4L>+MLNqMk212yEkndPRI|RU&~d9c<%+dc}XGANw~{DoFJ%27|$1 zFuqfGhrIg7l%Cw{A1YWy^eu3GY=NV9aO``4P+Uf}Dzpr>bj=|%1zdEthDcyaS52Ac zX{8>=hAkGLCm%CA5b@Ko3iYKXnI#zv27|$1Fc^&g66f0;jQHAv4qgu@xdOV~BI&TN zR&{^am-1l$`7KfrUn0}N+86i#pz0&6P%X48Dpi(~ z-UVu-5jlc@LOYYf#_#e$sPQl0Z2mtBE6`1rbAnH#a zTk==$Gt{*3^tmNZM|g@D3>yr&;-#hs{gf2}YH!!c z;nzjP1cum}SVP4l?}C`pH(W@Ewmpi-zGGeD8YMluXCo&ID_TQhy~2cUnJxjW_ev2H z9Nkm?8#F8yjJzO3P0{Bv%=WLS^zAAsFpYG89|HN@&#wH9CF`FBRJa3G`vRU_H-2Sy z@XnGTL|mi$6fP*JU7z}g4^{Y7SU-je1a^79z;*ae6lp#Z{`0SsmVEkiB0Q)H#Vfox z*d#~3E0E`(3IF8}RP*Ue5U*+!ufBN6^;Y03Q+&aTA8TND00000NkvXXu0mjf(w8Fa From 80708e6be850e90761af1fd61f639a9ea5b2ddeb Mon Sep 17 00:00:00 2001 From: Wollywoger Date: Thu, 31 Oct 2024 01:17:07 -0400 Subject: [PATCH 08/27] fixes a runtime, fixes screenshots, fixes how limbs work --- ...shot_humanoids__datum_species_werewolf.png | Bin 628 -> 663 bytes .../code/modules/surgery/organs/ears.dm | 1 - .../modules/surgery/organs/werewolf_parts.dm | 103 +++++++++--------- 3 files changed, 53 insertions(+), 51 deletions(-) diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_werewolf.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_werewolf.png index d8155394b46a3a4ee38f78f61136612fe35b8f7c..db83762b9bf086b2333286e57b03c4fe047707d4 100644 GIT binary patch delta 495 zcmVQ6C>p9+!X{lpAmaZcuJeZ!}$!E$)`F+1Pkw;%3-wpCies zgI_!Rm7gV9mZj9c7P>#=*R@)qf)xdvMg}}1zA(To2CNZZQvi5FLaUnz;GP1v6Tkxn zHX@`?BHs|b03Oo2SWvxmJ2cUme>PZ9pfZTncGQRc@Kx5tVd*@SV-V2&@I!;*83<`& zQT07dI|6iTTLJ)TpJedq^s(`N z_H$=30U+9jUf<<=eoaRm1kB;tkW+)yvEig?gUB|I+FtI6Jb*VaExLNPf9+#{dz{E2 zN^<5D|5=!nJ}m*r0J!G*PHX`DWn17$xR8aBTH)Iq@Gh=fR5pLa7$9>Ha`=dVoB*h6 z-lP8VGDEt0I9h%zKzkSn@ZDg;Pf=j850=b*jRE(o17M~AJpz6f!~ljVwd}k&t$Or?@%o64fz4F+#Nor)tK!^G` z?tbwh$+9e^{%7g<%4>xRHRxrnFf6^S6$HbIRu38Ai2{!q;F$sk7BVEE4@B=E4H;bQ zsNVZO4AF(LSW=+2i1l&Sm-F~pHN;`%J%3bl5HQ2|O@rbMh-qS34+BkG0H$*t0RT-% zGWzuTI`pJ6fHoA$&cNPBFhGE*_R-*XRQFh00^C>BUDungT>(n>adNlNIhn95J_(A;xCKwAOKvIQ-7L? z19sD<(^%7r7lvzvuUo(yJ8o84{elu8Qw%h`3xJL}G)>y0;qVGex_Z1izD;)-3Gmfo zo9?2-@*FLN|0)6hG!d{lz|26H1roqGrS^UB$13TgR!0J4&SD0N6Thps%h~;gP_D@V zg_{j|KrsUc_;eS5;=oEjYVL>HYVD=b-q&fOHqBUITsrR)$0h T#X?)000000NkvXXu0mjf8*$nn diff --git a/maplestation_modules/code/modules/surgery/organs/ears.dm b/maplestation_modules/code/modules/surgery/organs/ears.dm index ebae52331bd9..7b043dc52d00 100644 --- a/maplestation_modules/code/modules/surgery/organs/ears.dm +++ b/maplestation_modules/code/modules/surgery/organs/ears.dm @@ -51,7 +51,6 @@ /obj/item/organ/internal/ears/cat/werewolf/on_mob_remove(mob/living/carbon/human/ear_owner) . = ..() if(istype(ear_owner)) - color = ear_owner.hair_color ear_owner.dna.features["ears"] = "None" ear_owner.dna.species.mutant_bodyparts -= "ears" ear_owner.update_body() diff --git a/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm b/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm index f86db60e2999..56a927eced45 100644 --- a/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm +++ b/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm @@ -4,14 +4,8 @@ icon_greyscale = 'maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi' is_dimorphic = FALSE should_draw_greyscale = TRUE - -/obj/item/bodypart/head/werewolf/update_limb(dropping_limb, is_creating) - . = ..() - var/mob/living/carbon/human/wolf = owner - species_color = wolf.hair_color - draw_color = species_color - burn_modifier = 0.75 - brute_modifier = 0.25 + burn_modifier = 1.1 + brute_modifier = 0.80 unarmed_attack_verb = "bite" grappled_attack_verb = "maul" unarmed_attack_effect = ATTACK_EFFECT_BITE @@ -24,34 +18,35 @@ biological_state = (BIO_FLESH|BIO_BLOODED) head_flags = HEAD_EYESPRITES|HEAD_EYECOLOR|HEAD_EYEHOLES|HEAD_DEBRAIN|HEAD_HAIR +/obj/item/bodypart/head/werewolf/update_limb(dropping_limb, is_creating) + . = ..() + if(ishuman(owner)) + var/mob/living/carbon/human/wolf = owner + species_color = wolf.hair_color + /obj/item/bodypart/chest/werewolf limb_id = SPECIES_WEREWOLF icon_greyscale = 'maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi' is_dimorphic = TRUE should_draw_greyscale = TRUE - -/obj/item/bodypart/chest/werewolf/update_limb(dropping_limb, is_creating) - . = ..() - var/mob/living/carbon/human/wolf = owner - species_color = wolf.hair_color - draw_color = species_color - burn_modifier = 0.75 - brute_modifier = 0.25 + burn_modifier = 1.1 + brute_modifier = 0.80 dmg_overlay_type = null biological_state = (BIO_FLESH|BIO_BLOODED) bodypart_traits = list(TRAIT_NO_JUMPSUIT, TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_PUSHIMMUNE, TRAIT_STUNIMMUNE) wing_types = NONE +/obj/item/bodypart/chest/werewolf/update_limb(dropping_limb, is_creating) + . = ..() + if(ishuman(owner)) + var/mob/living/carbon/human/wolf = owner + species_color = wolf.hair_color + + /obj/item/bodypart/arm/left/werewolf limb_id = SPECIES_WEREWOLF icon_greyscale = 'maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi' should_draw_greyscale = TRUE - -/obj/item/bodypart/arm/left/werewolf/update_limb(dropping_limb, is_creating) - . = ..() - var/mob/living/carbon/human/wolf = owner - species_color = wolf.hair_color - draw_color = species_color unarmed_attack_verb = "slash" grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW @@ -60,22 +55,23 @@ unarmed_damage_low = 17 unarmed_damage_high = 23 unarmed_effectiveness = 15 - burn_modifier = 0.75 - brute_modifier = 0.25 + burn_modifier = 1.1 + brute_modifier = 0.80 dmg_overlay_type = null bodypart_traits = list(TRAIT_CHUNKYFINGERS) biological_state = (BIO_FLESH|BIO_BLOODED) +/obj/item/bodypart/arm/left/werewolf/update_limb(dropping_limb, is_creating) + . = ..() + if(ishuman(owner)) + var/mob/living/carbon/human/wolf = owner + species_color = wolf.hair_color + + /obj/item/bodypart/arm/right/werewolf limb_id = SPECIES_WEREWOLF icon_greyscale = 'maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi' should_draw_greyscale = TRUE - -/obj/item/bodypart/arm/right/werewolf/update_limb(dropping_limb, is_creating) - . = ..() - var/mob/living/carbon/human/wolf = owner - species_color = wolf.hair_color - draw_color = species_color unarmed_attack_verb = "slash" grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW @@ -84,44 +80,51 @@ unarmed_damage_low = 17 unarmed_damage_high = 23 unarmed_effectiveness = 15 - burn_modifier = 0.75 - brute_modifier = 0.25 + burn_modifier = 1.1 + brute_modifier = 0.80 dmg_overlay_type = null bodypart_traits = list(TRAIT_CHUNKYFINGERS) biological_state = (BIO_FLESH|BIO_BLOODED) +/obj/item/bodypart/arm/right/werewolf/update_limb(dropping_limb, is_creating) + . = ..() + if(ishuman(owner)) + var/mob/living/carbon/human/wolf = owner + species_color = wolf.hair_color + + /obj/item/bodypart/leg/left/werewolf limb_id = SPECIES_WEREWOLF icon_greyscale = 'maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi' should_draw_greyscale = TRUE - -/obj/item/bodypart/leg/left/werewolf/update_limb(dropping_limb, is_creating) - . = ..() - var/mob/living/carbon/human/wolf = owner - species_color = wolf.hair_color - draw_color = species_color - burn_modifier = 0.75 - brute_modifier = 0.25 - speed_modifier = 3 + burn_modifier = 1.1 + brute_modifier = 0.80 + speed_modifier = -0.1 dmg_overlay_type = null bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_DIGITIGRADE footstep_type = FOOTSTEP_MOB_CLAW biological_state = (BIO_FLESH|BIO_BLOODED) +/obj/item/bodypart/leg/left/werewolf/update_limb(dropping_limb, is_creating) + . = ..() + if(ishuman(owner)) + var/mob/living/carbon/human/wolf = owner + species_color = wolf.hair_color + /obj/item/bodypart/leg/right/werewolf limb_id = SPECIES_WEREWOLF icon_greyscale = 'maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi' should_draw_greyscale = TRUE - -/obj/item/bodypart/leg/right/werewolf/update_limb(dropping_limb, is_creating) - . = ..() - var/mob/living/carbon/human/wolf = owner - species_color = wolf.hair_color - draw_color = species_color - burn_modifier = 0.75 - brute_modifier = 0.25 - speed_modifier = 3 + burn_modifier = 1.1 + brute_modifier = 0.80 + speed_modifier = -0.1 dmg_overlay_type = null bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_DIGITIGRADE footstep_type = FOOTSTEP_MOB_CLAW biological_state = (BIO_FLESH|BIO_BLOODED) + +/obj/item/bodypart/leg/right/werewolf/update_limb(dropping_limb, is_creating) + . = ..() + if(ishuman(owner)) + var/mob/living/carbon/human/wolf = owner + species_color = wolf.hair_color From 35cb0f6344d744cdac6bed29c6353390541e17b1 Mon Sep 17 00:00:00 2001 From: Wollywoger Date: Thu, 31 Oct 2024 20:57:56 -0400 Subject: [PATCH 09/27] removes bio state changes from werewolf parts because they're likely unnecessary --- .../modules/surgery/organs/werewolf_parts.dm | 31 ++++++++----------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm b/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm index 56a927eced45..131303e1133a 100644 --- a/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm +++ b/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm @@ -4,8 +4,8 @@ icon_greyscale = 'maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi' is_dimorphic = FALSE should_draw_greyscale = TRUE - burn_modifier = 1.1 - brute_modifier = 0.80 + burn_modifier = 0.9 + brute_modifier = 0.7 unarmed_attack_verb = "bite" grappled_attack_verb = "maul" unarmed_attack_effect = ATTACK_EFFECT_BITE @@ -15,7 +15,6 @@ unarmed_damage_high = 35 unarmed_effectiveness = 30 dmg_overlay_type = null - biological_state = (BIO_FLESH|BIO_BLOODED) head_flags = HEAD_EYESPRITES|HEAD_EYECOLOR|HEAD_EYEHOLES|HEAD_DEBRAIN|HEAD_HAIR /obj/item/bodypart/head/werewolf/update_limb(dropping_limb, is_creating) @@ -29,10 +28,9 @@ icon_greyscale = 'maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi' is_dimorphic = TRUE should_draw_greyscale = TRUE - burn_modifier = 1.1 - brute_modifier = 0.80 + burn_modifier = 0.9 + brute_modifier = 0.7 dmg_overlay_type = null - biological_state = (BIO_FLESH|BIO_BLOODED) bodypart_traits = list(TRAIT_NO_JUMPSUIT, TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_PUSHIMMUNE, TRAIT_STUNIMMUNE) wing_types = NONE @@ -55,11 +53,11 @@ unarmed_damage_low = 17 unarmed_damage_high = 23 unarmed_effectiveness = 15 - burn_modifier = 1.1 - brute_modifier = 0.80 + burn_modifier = 0.9 + brute_modifier = 0.7 dmg_overlay_type = null bodypart_traits = list(TRAIT_CHUNKYFINGERS) - biological_state = (BIO_FLESH|BIO_BLOODED) + /obj/item/bodypart/arm/left/werewolf/update_limb(dropping_limb, is_creating) . = ..() @@ -80,11 +78,10 @@ unarmed_damage_low = 17 unarmed_damage_high = 23 unarmed_effectiveness = 15 - burn_modifier = 1.1 - brute_modifier = 0.80 + burn_modifier = 0.9 + brute_modifier = 0.7 dmg_overlay_type = null bodypart_traits = list(TRAIT_CHUNKYFINGERS) - biological_state = (BIO_FLESH|BIO_BLOODED) /obj/item/bodypart/arm/right/werewolf/update_limb(dropping_limb, is_creating) . = ..() @@ -97,13 +94,12 @@ limb_id = SPECIES_WEREWOLF icon_greyscale = 'maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi' should_draw_greyscale = TRUE - burn_modifier = 1.1 - brute_modifier = 0.80 + burn_modifier = 0.9 + brute_modifier = 0.7 speed_modifier = -0.1 dmg_overlay_type = null bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_DIGITIGRADE footstep_type = FOOTSTEP_MOB_CLAW - biological_state = (BIO_FLESH|BIO_BLOODED) /obj/item/bodypart/leg/left/werewolf/update_limb(dropping_limb, is_creating) . = ..() @@ -115,13 +111,12 @@ limb_id = SPECIES_WEREWOLF icon_greyscale = 'maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi' should_draw_greyscale = TRUE - burn_modifier = 1.1 - brute_modifier = 0.80 + burn_modifier = 0.9 + brute_modifier = 0.7 speed_modifier = -0.1 dmg_overlay_type = null bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_DIGITIGRADE footstep_type = FOOTSTEP_MOB_CLAW - biological_state = (BIO_FLESH|BIO_BLOODED) /obj/item/bodypart/leg/right/werewolf/update_limb(dropping_limb, is_creating) . = ..() From 269ce46da5fb4f3b2f271b25da4dcd0043cf9df0 Mon Sep 17 00:00:00 2001 From: Wollywoger Date: Sat, 30 Nov 2024 19:33:04 -0500 Subject: [PATCH 10/27] werewolves can wear jumpsuits, adds an icon for the werewolf change, renames one of the spells --- .../modules/magic/story_spells/lycanthropy.dm | 8 +++++--- .../living/carbon/human/species_types/werewolf.dm | 2 +- .../icons/mob/actions/actions_advspells.dmi | Bin 0 -> 431 bytes 3 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 maplestation_modules/icons/mob/actions/actions_advspells.dmi diff --git a/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm b/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm index a2cd9ddef626..852258dc673c 100644 --- a/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm +++ b/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm @@ -1,7 +1,7 @@ // the many spells that are used to turn into versions of a werewolf /datum/action/cooldown/spell/shapeshift/lycanthrope // use this for the simplemob forms, like standard wolves - name = "Lycanthropic Shift" + name = "Wolf Form" desc = "Channel the wolf within yourself and turn into one of your possible forms. \ Be careful, for you can still die within this form." invocation = "RAAAAAAAAWR!" @@ -18,11 +18,13 @@ invocation = "ARRRROOOOO!" // i don't know man invocation_type = INVOCATION_SHOUT spell_requirements = SPELL_REQUIRES_HUMAN + button_icon = 'maplestation_modules/icons/mob/actions/actions_advspells.dmi' + button_icon_state = "moon" var/mob/living/carbon/human/lycanthrope var/datum/species/owner_base_species // what species we are other than a werewolf // yes this might cause other implications, such as mass species change, or with synths (synthcode moment) but i'll look into it later down the line -/datum/action/cooldown/spell/werewolf_form/Grant(mob/grant_to) +/datum/action/cooldown/spell/werewolf_form/Grant(mob/living/grant_to) . = ..() if (!ishuman(grant_to)) return stack_trace("A non human was given werewolf form!") // only human mobs should be given this @@ -30,7 +32,7 @@ lycanthrope = grant_to owner_base_species = lycanthrope.dna.species -/datum/action/cooldown/spell/werewolf_form/cast(atom/cast_on) +/datum/action/cooldown/spell/werewolf_form/cast(mob/living/carbon/human/cast_on) . = ..() if(istype(lycanthrope.dna.species, /datum/species/werewolf)) lycanthrope.balloon_alert(lycanthrope, "changing back") diff --git a/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm b/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm index 608acd216670..8eb3e688f807 100644 --- a/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm +++ b/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm @@ -23,7 +23,7 @@ ) skinned_type = /obj/item/stack/sheet/animalhide/human changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT - no_equip_flags = ITEM_SLOT_MASK | ITEM_SLOT_OCLOTHING | ITEM_SLOT_GLOVES | ITEM_SLOT_FEET | ITEM_SLOT_ICLOTHING | ITEM_SLOT_SUITSTORE + no_equip_flags = ITEM_SLOT_MASK | ITEM_SLOT_OCLOTHING | ITEM_SLOT_GLOVES | ITEM_SLOT_FEET | ITEM_SLOT_SUITSTORE bodypart_overrides = list( BODY_ZONE_HEAD = /obj/item/bodypart/head/werewolf, diff --git a/maplestation_modules/icons/mob/actions/actions_advspells.dmi b/maplestation_modules/icons/mob/actions/actions_advspells.dmi new file mode 100644 index 0000000000000000000000000000000000000000..63b27d78771d38af85a69f75f501fefef0f426a4 GIT binary patch literal 431 zcmV;g0Z{&lP)MF*zfD@s9ui00DGTPE!Ct=GbNc003xuR9JLGWpiV4X>fFDZ*Bkp zc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LY zR3K9+H$Oj5iHkEOv#1!zHRR$V_YrUC#N;TgmvQ=Az9007rXL_t(2 zk)4r2nu9P1M$<+21E~iH@dAPusA2ZCU%mfT=Fd>A>$1z^@uNvf-`0ib=X@p>DRk0%(*8_)>J3}x?VL~l`y;y+$HO7cpqqlC6SR{`0#AlA+a_+7c4L& z2nSee74#Jo0j{hD27%(|(ki$?)LVc;1*dWdP`C&)?Lt?G3w?x?wv}ku&JT0lwnzH5 Z{s0tQFEcjHDrf)z002ovPDHLkV1l(rwch{$ literal 0 HcmV?d00001 From ca8f1942444bc968062478159390b230aa9cb366 Mon Sep 17 00:00:00 2001 From: Wollywoger Date: Sat, 30 Nov 2024 21:34:48 -0500 Subject: [PATCH 11/27] refactors the werewolf change spell, changes the sprite for werewolves' ears --- ...shot_humanoids__datum_species_werewolf.png | Bin 663 -> 958 bytes .../modules/magic/story_spells/lycanthropy.dm | 13 ++++++------- .../icons/mob/mutant_bodyparts.dmi | Bin 2627 -> 2642 bytes 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_werewolf.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_werewolf.png index db83762b9bf086b2333286e57b03c4fe047707d4..f9860dab6a3febf1997d47bb6c29f5ead65e7e7e 100644 GIT binary patch delta 795 zcmV+$1LXXd1-=K67!3#m0001;w}I>c002mlB_A=4kdqo3Ay!&rv$L~wcYt?$gHcag z5fl_6CMFmh9H*+b)YspMi=tv?bm^0m2$DIfkyLzRd zpz7hXfb>;89X|*-dVtpt0$v^cly)k7=%<+A=C1@dKNTYAM8(l7l_G@d<+svD9vxRZ zzm=bV7&$kaFsSuTgL-c?Oue)QKtqwX-T~;y$JK~{UO~Xf+0xVK)DXlF8+8NFsnk+y z#WFZL7fe4;MB#0O>aA)4+0aqpC}Rc4w+#Sy%JKlYq^+KKaC!jr*FPiU4&Kg^-^xZ` zwg|5PHnx+zeyjlivJ%F2Q@|i%qTv9ttYDFUb+q=Y+&f>cxBIW_ym@ z5VXeGk07b@{bB;}bcww+P@NLFy09kz)0;pEImk!uf0?J<{kqMyA%A5B2*6b*j@K@1RTE#cnv}x4T`&uQa(i? ze*w$@x%nW30DC)#V^kjSoM^8@9xV1~ow{&toZ6=Iz74VHTAMTp7NAs|7!g78aiG*< z0N^$irx~$8Jb)xGLEAnDx5U+XV2S{LKy|Pfy#Z*8?bBWbG}L`JeNs^XNdX}MC6EH1 z8!-i7&>ny!$^a~;FKwb{OpABX5{2+*74KL30#rCWfNIi6AlT5W`u^o|yL*89?Q+pZ z!Rb|*q|qhUS>QP&-7vY%BECq|-3X*&_wxmS`N>(u{HDeLZ9%*W(4j;C?QQ^02=)Q9 zHbP+m)6G}^k4nHci~&gjrZ0Kn}ZP{I_0_ujMY@f7+0(jX-H&v^QBV8;F*7{jLk Ze*i9uC_e;vK{x;a002ovPDHLkV1f_ldC33( delta 498 zcmV64RJ>^{Gdb%1{X ztw}^dR7i=9ls#6%Fbv170orU)A0JL0mw+3T8*l_}P;O9fG+mM{?v}CH*mz{(X4q|? zBgv_QUpxGjpCwtArPRL`xRo28|={%HU5YYYbLxbWO z2x($b^*v2H0(5Iz0sv~CWboQPp8(2yj_Jw{54} zCIJ-ob7wIDAlimr-{pILO-CIB%;DLPQ-jp8;iPGU$TpAKUharIfHyELx_W=M?PGv@ zoX8(%|1QPu)?;$eC96;tI4YPos o!vf&%-wBz6k^=+yDY#AnfAp+YkjuFLng9R*07*qoM6N<$f}2*`3jhEB diff --git a/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm b/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm index 852258dc673c..425493e6dc06 100644 --- a/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm +++ b/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm @@ -20,7 +20,6 @@ spell_requirements = SPELL_REQUIRES_HUMAN button_icon = 'maplestation_modules/icons/mob/actions/actions_advspells.dmi' button_icon_state = "moon" - var/mob/living/carbon/human/lycanthrope var/datum/species/owner_base_species // what species we are other than a werewolf // yes this might cause other implications, such as mass species change, or with synths (synthcode moment) but i'll look into it later down the line @@ -29,14 +28,14 @@ if (!ishuman(grant_to)) return stack_trace("A non human was given werewolf form!") // only human mobs should be given this else - lycanthrope = grant_to + var/mob/living/carbon/human/lycanthrope = grant_to owner_base_species = lycanthrope.dna.species /datum/action/cooldown/spell/werewolf_form/cast(mob/living/carbon/human/cast_on) . = ..() - if(istype(lycanthrope.dna.species, /datum/species/werewolf)) - lycanthrope.balloon_alert(lycanthrope, "changing back") - lycanthrope.set_species(owner_base_species) + if(istype(cast_on.dna.species, /datum/species/werewolf)) + cast_on.balloon_alert(cast_on, "changing back") + cast_on.set_species(owner_base_species) else - lycanthrope.balloon_alert(lycanthrope, "turning") - lycanthrope.set_species(/datum/species/werewolf) + cast_on.balloon_alert(cast_on, "turning") + cast_on.set_species(/datum/species/werewolf) diff --git a/maplestation_modules/icons/mob/mutant_bodyparts.dmi b/maplestation_modules/icons/mob/mutant_bodyparts.dmi index 92e28967302d297f84d126681eebd6c360f25423..b98667f1d55fd77eb7b0f9a5cb1e215510703569 100644 GIT binary patch delta 2014 zcmYk6dpOe#8^=?6wif0vmKK(r%c*2eVGa`s#Y30~p^!4CY1{81rcjP$n26e_)Eq)0 zPfa$$rB`F{Spzt{Kr-Zv9A2+P%wkjv97k{1Ys0|O&{ z{ryd~wcIbWH2Rag?kGw8b+&winS`nY@X^@;?Uh8GE0a!?cY=|dZG(z(Y#XmPnqI5X ziWt2s{lYt2F(k4!I@qSsX-+KOTUK_q2hw1PTQHi{z?b7-g=NLhpxY$Z;@SX| zAf=~L^=|Sl_hceQpN@)%K6aR$@IjaCFNaooeUp6Jc?s~t1&xz3IFI9(43?pM>Tc9eVH`Y_cljCc)c zZ=Z+B?IPVpx)JM;L-1lkN&pJ&nJ=jb`2W^?7FOH=`m8qdOl`|A(<0+xIQ<|8ipU0V zVNN^hrB$>^-9;9--Q8Y0!=pZB(clhhY}r_{DVbnwMwj?jPmKyC`I>8|dRN# zMPn}5gVmun`;nUl{VvxjGDU?EA8h9`v~{Gla%mno;|f`e>~PF`NWsP}-K+UICELxW z^dd4I(PTBT>N%_(l<$)LQpL?48_v=vGEjSUjSc0`km5?$V1r~sv*&Xz9u{{wFZgt( zzES2E_uPXo27m<32)|0-)cws?SzG&5Cql>WO~&-T70Z6w{3VMY*y5*Aq$dbysae^` z=T!=X?))a6a^S_@NUe+nWsmyKdh25MV23eo+R50C@s>ZG>=Ss$w_#VVj=riq#o0<| zi#_KPIGa)8?jmnH911yXMm}jXvpmoQ;4`_AGo8~;UO}W_3m1MqD=3C| zQS5(!NVxX#wKT8Gjt)S;~cSfEm)( zE>gWPaim{Jv30x8nCpl`-XkwZ0tv7G)i*L`z4g%Wb;S^{pR>p8Myfv>-sMIcx zHdQH{)wY(Pf6BO}aCDa*-=Fd+CZ+7%Ad3wm{b~!%_z=L+KA>iRj19K@1_!W# zfvh8Oc}Bh^N0%2q(uxlCNduEc^eV*ugE8YqzKKi$(AGott`iS$6wXfULYcM%shvgL zA4qf>l@C?iEZ`-#pE`_TiNy zJO%;2CWPoCO7BAjb8}^uLeacW;=%`i0%K?Zrn4s63s#>W=Mo^%ye3*Im)}rBu^J_Q z437cCtMjY#NA9VkMVq1O-ElaLdgL=gHQZ~BtMa?t3 zCN8J(`x^AOEA8zg?@*gpVxUWs@k`67De?iqLyU*JrjFSju;a^ji6Btos?7YPiD7pa zWkL7oU&MD*(I73MieSIykYs;#bpd!C@d`lrRf7ONXKrWP2< z%1TEp8oz9;CyCx>nnTEoJ=Z1=k8OQLzFB{}o*r1c(%{Go6Y2&QTw7duT3 zfq#~!LXt$#(0K+10Q^dXAc=60T(#%6AZ}@WrYC7>ma~iOWo2GWz3uv%^}1kj63=3z?@ iJtFmMwf|wPxd;@OdDFG>uIc}NqqC!%!y~(()c*oBHNW5h delta 1985 zcmYjPdpy$%6j$ak@*bPiwmh0!LekcI%`=ZoadY!5Vv?v7BipZ5q=jL5m1iVb$Pe=20oaVl|e$&CGV|K0cq$=X1{Yd(J=SobTt`3t>Z&^w%jS8>DaGeC4-ycGi@Z za=F~(u3%8zSjC@Jht|Q@0q^asaIVCxZ`n!_AI%}LM^m;w=PLd77rT#Ui zr2IPJe7!fGv^_(yq)V>MwL~GWvsJ z!Wn;V{OHU|i+emUIb`gr>V2aot>IGffTBm}zzU7bYKZpRp$dw0^166V$rFJ~q#u@s z(6Q2*KT=0m#w_@Ejh*O~+{1p$K@1;Tv2EXnvU5^WGZ{7o6|roKwkUeEwDxwHA~Kbh zrQ)O$RaI!vTM~coC^au&*I%seFq}5_=C&Bb^~cD_@?K}Q1Vw)#tql+oIDundN)&uM z5x*5%tM%8HP%HvSw~>~X$u>zXj|^itsH z>vo*w$_4f7U(8+vo6%|tTc0_H%f=`xwFQH{dL}2@(R#I8K*_g!AW5XufQL4Yw;b%v zL-Ur{8h2$ij<^)pZFH93+`LOKD8`O71+fC!YE;rrZk*im1>{JiXvKDT z7_Jq@7PIds-OYgBHpSL=UX?$~hHe@OH!$4X%O4f>jcLKG7vzp)js`N-%}w4Iy-fAU zvA*t43pJZ|pTqcn0pey!zi9D;dYYs-Xo`)8T%$;BQOCsM;|=FYKr=LJ?p|BIm+W1m ziYIt39i~>hC;#qH2*!B!O_CRBUJ81U6JBR{qDBhw)bqmtbTyw#PXYBPWm+gD=J(@; z#Om|#2Lktfv$JZN89odZ{^XsH=6k`FDi$f000l)XIO*1o#SdfF4)>$nzFgef-9S*V|_p9W7jme8!vTxWq>6 zHR64JP3`c&IKCY=#fDbqALUC1vgvDx&&{$>egWTRw{SYpgA(iuRFWGJiadYsxIL7) zZH_e-J2kC_&8?OBXy_Z-pcW=d5!g|peR*oBCD+hBqB{S6Ttk=wE@`#%p%AnA>8LAWNCM;1PRSUm0Nd;kcC&-{eA4N_JwsQC7glR3)15+udO?|?h}2-X_0U?2uf$|m zB{>CCtwJ=1!KWX_HXPU&RXlBgh0|eXjF>Uh>$N%bnmFXZ{S#uzn+rrDOh-5wC|JCh zljlShHxDJnYxN& zyS7McX?=&BIEX@_YL_sc3AFK*e_ed7C9pdB2AkN?_^zCA-zgYo5YXhKMQNtLYAygv z#+&ud1{gI|u9jP54MtoSv7zQU5DZ)<+EVZ3AAuWzlbsh7ZKxiuo(k%_2xj1|^xl9T zPQMWxc~SZGQygdEeRd0(@?MoGXVTMw{OOfz>H={^9$!~9G5eWE=kXwkmxw|(kB-1U zsv>k3nHF+*JU;(2nuN|iO2DRi#nVKhcAleS9*@>HIPcSL+-&PDTAEu<2RfQWkt8zt zSoluwInDqBD-o{p`Fw=@@p<9m6g0FeH%Fp~Tk(8;J=fQ`tJ?%w9H%Jw_vKTp=UzgE zG~%igIg()Tl{GL-o<~0xvr_XUPo`ymarA$*Y_mlA)N}fRK$dFpb7W`jWL0Kyit;yF CkG(no From 5c105724ac2e24aa85fe4343d888c33795e37911 Mon Sep 17 00:00:00 2001 From: Wollywoger Date: Sun, 1 Dec 2024 22:31:09 -0500 Subject: [PATCH 12/27] mini refactor --- .../code/modules/magic/story_spells/lycanthropy.dm | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm b/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm index 425493e6dc06..443e4d1da27e 100644 --- a/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm +++ b/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm @@ -23,13 +23,9 @@ var/datum/species/owner_base_species // what species we are other than a werewolf // yes this might cause other implications, such as mass species change, or with synths (synthcode moment) but i'll look into it later down the line -/datum/action/cooldown/spell/werewolf_form/Grant(mob/living/grant_to) +/datum/action/cooldown/spell/werewolf_form/Grant(mob/living/carbon/human/grant_to) . = ..() - if (!ishuman(grant_to)) - return stack_trace("A non human was given werewolf form!") // only human mobs should be given this - else - var/mob/living/carbon/human/lycanthrope = grant_to - owner_base_species = lycanthrope.dna.species + owner_base_species = grant_to.dna.species /datum/action/cooldown/spell/werewolf_form/cast(mob/living/carbon/human/cast_on) . = ..() From a20c470170f544f44bff61cea34a4d58a344ea25 Mon Sep 17 00:00:00 2001 From: Wollywoger Date: Wed, 11 Dec 2024 15:39:23 -0500 Subject: [PATCH 13/27] more refactors --- .../modules/magic/story_spells/lycanthropy.dm | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm b/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm index 443e4d1da27e..a864c688ad4e 100644 --- a/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm +++ b/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm @@ -21,17 +21,18 @@ button_icon = 'maplestation_modules/icons/mob/actions/actions_advspells.dmi' button_icon_state = "moon" var/datum/species/owner_base_species // what species we are other than a werewolf + var/list/base_features = list("mcolor" = "#FFFFFF") // yes this might cause other implications, such as mass species change, or with synths (synthcode moment) but i'll look into it later down the line -/datum/action/cooldown/spell/werewolf_form/Grant(mob/living/carbon/human/grant_to) +/datum/action/cooldown/spell/werewolf_form/cast(atom/movable/cast_on) . = ..() - owner_base_species = grant_to.dna.species - -/datum/action/cooldown/spell/werewolf_form/cast(mob/living/carbon/human/cast_on) - . = ..() - if(istype(cast_on.dna.species, /datum/species/werewolf)) - cast_on.balloon_alert(cast_on, "changing back") - cast_on.set_species(owner_base_species) + var/mob/living/carbon/human/lycanthrope = owner + if(istype(lycanthrope.dna.species, /datum/species/werewolf)) + lycanthrope.balloon_alert(cast_on, "changing back") + lycanthrope.dna.features = base_features + lycanthrope.set_species(owner_base_species) else - cast_on.balloon_alert(cast_on, "turning") - cast_on.set_species(/datum/species/werewolf) + owner_base_species = lycanthrope.dna.species + base_features = lycanthrope.dna.features.Copy() + lycanthrope.balloon_alert(cast_on, "turning") + lycanthrope.set_species(/datum/species/werewolf) From 3af4a37d5b1a7c27f567913fd557837625a292ac Mon Sep 17 00:00:00 2001 From: Wollywoger Date: Sat, 15 Feb 2025 15:33:23 -0500 Subject: [PATCH 14/27] removes a dead trait --- .../modules/mob/living/carbon/human/species_types/werewolf.dm | 1 - .../code/modules/surgery/organs/werewolf_parts.dm | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm b/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm index 8eb3e688f807..4544667c8aab 100644 --- a/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm +++ b/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm @@ -5,7 +5,6 @@ TRAIT_USES_SKINTONES, TRAIT_NO_UNDERWEAR, TRAIT_NO_AUGMENTS, - TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_PUSHIMMUNE, TRAIT_STUNIMMUNE, TRAIT_PRIMITIVE, diff --git a/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm b/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm index 131303e1133a..6b8019c129f0 100644 --- a/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm +++ b/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm @@ -31,7 +31,7 @@ burn_modifier = 0.9 brute_modifier = 0.7 dmg_overlay_type = null - bodypart_traits = list(TRAIT_NO_JUMPSUIT, TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_PUSHIMMUNE, TRAIT_STUNIMMUNE) + bodypart_traits = list(TRAIT_NO_JUMPSUIT, TRAIT_PUSHIMMUNE, TRAIT_STUNIMMUNE) wing_types = NONE /obj/item/bodypart/chest/werewolf/update_limb(dropping_limb, is_creating) From 67fe98f4614d7fd3e9510f6f1ebc704c45a954ba Mon Sep 17 00:00:00 2001 From: Wollywoger Date: Sat, 15 Feb 2025 15:34:05 -0500 Subject: [PATCH 15/27] also switches tails --- .../modules/mob/living/carbon/human/species_types/werewolf.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm b/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm index 4544667c8aab..cf7b171ef198 100644 --- a/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm +++ b/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm @@ -18,7 +18,7 @@ mutantliver = /obj/item/organ/internal/liver/werewolf mutantheart = /obj/item/organ/internal/heart/werewolf external_organs = list( - /obj/item/organ/external/tail/cat = "Cat", // todo: add custom wolf tail + /obj/item/organ/external/tail/cat/fox = "Fox", // todo: add custom wolf tail ) skinned_type = /obj/item/stack/sheet/animalhide/human changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT From 92c17e76a2adc948e8626d5715d2af158d1d87fb Mon Sep 17 00:00:00 2001 From: Wollywoger Date: Sat, 15 Feb 2025 17:34:16 -0500 Subject: [PATCH 16/27] moves werewolf organ icons --- .../code/modules/surgery/organs/eyes.dm | 2 ++ .../code/modules/surgery/organs/tongue.dm | 2 +- .../icons/mob/mutant_bodyparts.dmi | Bin 3233 -> 2571 bytes maplestation_modules/icons/obj/surgery.dmi | Bin 498 -> 1058 bytes 4 files changed, 3 insertions(+), 1 deletion(-) diff --git a/maplestation_modules/code/modules/surgery/organs/eyes.dm b/maplestation_modules/code/modules/surgery/organs/eyes.dm index f23c7174758f..27f84ab0e131 100644 --- a/maplestation_modules/code/modules/surgery/organs/eyes.dm +++ b/maplestation_modules/code/modules/surgery/organs/eyes.dm @@ -3,3 +3,5 @@ desc = "Large and powerful eyes." sight_flags = SEE_MOBS color_cutoffs = list(25, 5, 42) + icon_state = "werewolf_eyes" + icon = 'maplestation_modules/icons/obj/surgery.dmi' diff --git a/maplestation_modules/code/modules/surgery/organs/tongue.dm b/maplestation_modules/code/modules/surgery/organs/tongue.dm index f48e3e9a324b..a355e8e16cf0 100644 --- a/maplestation_modules/code/modules/surgery/organs/tongue.dm +++ b/maplestation_modules/code/modules/surgery/organs/tongue.dm @@ -75,7 +75,7 @@ name = "wolf tongue" desc = "A large tongue that looks like a mix of a human's and a wolf's." icon_state = "werewolf_tongue" - icon = 'maplestation_modules/icons/mob/mutant_bodyparts.dmi' + icon = 'maplestation_modules/icons/obj/surgery.dmi' say_mod = "growls" modifies_speech = TRUE taste_sensitivity = 5 diff --git a/maplestation_modules/icons/mob/mutant_bodyparts.dmi b/maplestation_modules/icons/mob/mutant_bodyparts.dmi index ef8ed18f1352c12cc842b07e41b71f798e2a255a..a3ad18fff662bdba4b5e63631d42b2135f00c9f3 100644 GIT binary patch literal 2571 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 D-scvC diff --git a/maplestation_modules/icons/obj/surgery.dmi b/maplestation_modules/icons/obj/surgery.dmi index 429cf7214e45ab791a8904f06f41a9be0b9bb60b..9d3782e8fbe2014fcbb78ce1a1304b49623610ec 100644 GIT binary patch delta 964 zcmV;#13Uck1EL6jiBL{Q4GJ0x0000DNk~Le0001B0000$2m=5B0MhD$JOBUy?NCfq zMZmzo#l^+y>gxah|6(sTaWFc~&DEQnt#x;b{QUjy?(w3cq5%sJbul}4F*^YNGu_?Y znVPG>z`&bKPM}aqg)=~aE<1rSK8!p^`J0HkXlMGSlyEG6GOI&ZkugJ}N?N;JZHPES zltV?UU1a*RqTPaR`mUUNEjWlUL18B;(29+iPFJQ-UVbh+$7xlSL_d{1POeN}j5<2w zhjPksT9Q60w_9p=D>i^FE4X1t;DvDcrIXKgUz|uRdnhDoCNOU&F0@@lvt2`~R63nW zEw5QWt4m!iV>PNxi`6Q9eDO3Z`i?puRN- zK|l!I{{}(9?*kP~7K<55Y_$RTLxu$zzef*IU}muqvS|g~wk%7p@-c1}&66}`X%!GvkCI68y1jlr80b9Qe#suF3ZDuXzF59XL9K1ZItZhwqY0AU@)M5H7!Zmx6z%*CjKwhR+Rc z@|mGsJ~gz=S5Z+>QBf)KctF#5$If+*3Qs9SkKlDak=!LHVen9zA9G}j{vr8$(o40;Q3wY;Vc=b-We|i!G z)G(ojBpF}NhQq%XEZ*OIxcL~;^p=KbS5Z-s&2Q*iILVBY4iokO0000gxah|IN+So1Cq6cZ&S{{qFAZqN1YR-QAg*tGZhl6951J0d!JMQvg8b z*k%9#0CbkTDK|KoCWjWE)~5 zdV{5MJDDqhkl0ulY7Su{2cR&qAy{cAR?GoBpR-ZeU88HE{!sB>-h5!}M+qonS04hv z+(k@45e~pp3iw{(0@&1j!y8XNj0ik?1dsElk%0y9v`T;M6JlloX_;1q(fbWp0N+++ zwlewy+%wmL&DH>#&<03A3O&M?s*LD)d?qi|hN~8|076~>WDk(Q9C>O%Aob$hZ(Q$^ zY(D@#wh Date: Sun, 16 Feb 2025 15:58:23 -0500 Subject: [PATCH 17/27] temporary, still flawed, fix for losing ears --- .../code/modules/magic/story_spells/lycanthropy.dm | 8 +++++++- .../code/modules/surgery/organs/tongue.dm | 8 ++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm b/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm index a864c688ad4e..139189037ee1 100644 --- a/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm +++ b/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm @@ -24,6 +24,12 @@ var/list/base_features = list("mcolor" = "#FFFFFF") // yes this might cause other implications, such as mass species change, or with synths (synthcode moment) but i'll look into it later down the line +/datum/action/cooldown/spell/werewolf_form/Grant(mob/grant_to) + . = ..() + var/mob/living/carbon/human/lycanthrope = grant_to + owner_base_species = lycanthrope.dna.species + + /datum/action/cooldown/spell/werewolf_form/cast(atom/movable/cast_on) . = ..() var/mob/living/carbon/human/lycanthrope = owner @@ -32,7 +38,7 @@ lycanthrope.dna.features = base_features lycanthrope.set_species(owner_base_species) else - owner_base_species = lycanthrope.dna.species base_features = lycanthrope.dna.features.Copy() + owner_base_species = lycanthrope.dna.species lycanthrope.balloon_alert(cast_on, "turning") lycanthrope.set_species(/datum/species/werewolf) diff --git a/maplestation_modules/code/modules/surgery/organs/tongue.dm b/maplestation_modules/code/modules/surgery/organs/tongue.dm index a355e8e16cf0..67f22c662c76 100644 --- a/maplestation_modules/code/modules/surgery/organs/tongue.dm +++ b/maplestation_modules/code/modules/surgery/organs/tongue.dm @@ -86,10 +86,10 @@ var/message = speech_args[SPEECH_MESSAGE] if(message[1] != "*") - // all occurrences of characters "eiou" (case-insensitive) are replaced with "r" - message = replacetext(message, regex(@"[eiou]", "ig"), "r") - // all characters other than "zhrgbmna .!?-" (case-insensitive) are stripped - message = replacetext(message, regex(@"[^zhrgbmna.!?-\s]", "ig"), "") + // all occurrences of characters "ei" (case-insensitive) are replaced with "r" + message = replacetext(message, regex(@"[ei]", "ig"), "r") + // all characters other than "zhrgbmnaou .!?-" (case-insensitive) are stripped + message = replacetext(message, regex(@"[^zhrgbmnaou.!?-\s]", "ig"), "") // multiple spaces are replaced with a single (whitespace is trimmed) message = replacetext(message, regex(@"(\s+)", "g"), " ") From 687d95077fb8f3a3f75055683e7b159a587222f4 Mon Sep 17 00:00:00 2001 From: Wollywoger Date: Sun, 2 Mar 2025 00:49:14 -0500 Subject: [PATCH 18/27] changes the change spell, adds a rage ability, among framework for later changes --- maplestation.dme | 1 + maplestation_modules/code/__DEFINES/traits.dm | 4 + .../datums/mood_events/other_mood_events.dm | 5 + .../modules/magic/story_spells/lycanthropy.dm | 100 +++++++++++++++++- .../carbon/human/species_types/werewolf.dm | 4 +- .../code/modules/surgery/organs/heart.dm | 13 ++- .../code/modules/surgery/organs/liver.dm | 10 +- .../modules/surgery/organs/werewolf_parts.dm | 12 +-- 8 files changed, 132 insertions(+), 17 deletions(-) create mode 100644 maplestation_modules/code/datums/mood_events/other_mood_events.dm diff --git a/maplestation.dme b/maplestation.dme index a214b0abbe09..173c65ce4b35 100644 --- a/maplestation.dme +++ b/maplestation.dme @@ -6146,6 +6146,7 @@ #include "maplestation_modules\code\datums\greyscale\_greyscale_config.dm" #include "maplestation_modules\code\datums\id_trim\jobs.dm" #include "maplestation_modules\code\datums\keybinding\communication.dm" +#include "maplestation_modules\code\datums\mood_events\other_mood_events.dm" #include "maplestation_modules\code\datums\mood_events\quirk_mood_events.dm" #include "maplestation_modules\code\datums\mood_events\reagent_mood_events.dm" #include "maplestation_modules\code\datums\pain\pain.dm" diff --git a/maplestation_modules/code/__DEFINES/traits.dm b/maplestation_modules/code/__DEFINES/traits.dm index c77d34bbfbd3..777734a66555 100644 --- a/maplestation_modules/code/__DEFINES/traits.dm +++ b/maplestation_modules/code/__DEFINES/traits.dm @@ -4,3 +4,7 @@ #define TRAIT_FEATHERED "feathers" ///Gives positive mood on drinking anything caffeinated, kinda generic so people can like coffee, tea, energy drinks, whatever. #define TRAIT_CAFFEINE_LOVER "caffeine_lover" +// Used to indicate a mob is vulnerable to silver, most notably werewolves. +#define TRAIT_SILVER_VULNERABLE "silver_vulnerable" +// Used to indicate a mob is a werewolf, regardless of their state. +#define TRAIT_WEREWOLF "werewolf" diff --git a/maplestation_modules/code/datums/mood_events/other_mood_events.dm b/maplestation_modules/code/datums/mood_events/other_mood_events.dm new file mode 100644 index 000000000000..577bffc6347e --- /dev/null +++ b/maplestation_modules/code/datums/mood_events/other_mood_events.dm @@ -0,0 +1,5 @@ +// inflicted by witnessing a werewolf activate rage +/datum/mood_event/werewolf_delirium + description = "NOPENOPENOPENOPENOPENOPENOPENOPENOPENOPE!" + mood_change = -10 + timeout = 4 MINUTES diff --git a/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm b/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm index 139189037ee1..7cfdd2245e38 100644 --- a/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm +++ b/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm @@ -15,11 +15,16 @@ name = "Werewolf Change" desc = "Change to and from your full werewolf form. \ You will gain the full effects of this, both negative and positive." - invocation = "ARRRROOOOO!" // i don't know man + + invocation = "Grrrh-" invocation_type = INVOCATION_SHOUT + spell_requirements = SPELL_REQUIRES_HUMAN + cooldown_time = 10 SECONDS // so it can't be spammed + button_icon = 'maplestation_modules/icons/mob/actions/actions_advspells.dmi' button_icon_state = "moon" + var/datum/species/owner_base_species // what species we are other than a werewolf var/list/base_features = list("mcolor" = "#FFFFFF") // yes this might cause other implications, such as mass species change, or with synths (synthcode moment) but i'll look into it later down the line @@ -28,6 +33,8 @@ . = ..() var/mob/living/carbon/human/lycanthrope = grant_to owner_base_species = lycanthrope.dna.species + base_features = lycanthrope.dna.features.Copy() + ADD_TRAIT(owner, TRAIT_WEREWOLF, TRAIT_GENERIC) // todo: move this to a datum (eg, like antag/heretic) /datum/action/cooldown/spell/werewolf_form/cast(atom/movable/cast_on) @@ -38,7 +45,96 @@ lycanthrope.dna.features = base_features lycanthrope.set_species(owner_base_species) else + to_chat(lycanthrope, span_green("You call upon the wolf within yourself, preparing to change shape...")) + lycanthrope.set_jitter_if_lower(3 SECONDS) + if(!do_after(lycanthrope, 3 SECONDS)) + to_chat(lycanthrope, span_warning("Your focus is broken, and your body returns to its original state.")) + return base_features = lycanthrope.dna.features.Copy() owner_base_species = lycanthrope.dna.species - lycanthrope.balloon_alert(cast_on, "turning") lycanthrope.set_species(/datum/species/werewolf) + lycanthrope.say("ARRRROOOOO!!", forced = "spell ([src])") + +/datum/action/cooldown/spell/werewolf_rage + name = "Lycanthropic Rage" + desc = "Enrage" + invocation = "GRRR-!!" // todo: this sucks + invocation_type = INVOCATION_SHOUT + spell_requirements = SPELL_REQUIRES_HUMAN + cooldown_time = 3 MINUTES + button_icon_state = "splattercasting" + /// The radius around us that we frighten people. + var/scare_radius = 6 + +/datum/action/cooldown/spell/werewolf_rage/before_cast(mob/living/user) + ..() + if(user.has_status_effect(/datum/status_effect/werewolf_rage)) + user.balloon_alert(user, "already raging!") + return SPELL_CANCEL_CAST + +/datum/action/cooldown/spell/werewolf_rage/cast(mob/living/user) + ..() + + to_chat(user, span_green("You begin to dredge up the supernatural fury that boils within your body...")) + + for(var/mob/living/carbon/human/nearby_human in view(scare_radius, user)) + if(HAS_TRAIT(nearby_human, TRAIT_WEREWOLF) || HAS_TRAIT(nearby_human, TRAIT_MINDSHIELD) || HAS_TRAIT(nearby_human, TRAIT_DEAF) || HAS_TRAIT(nearby_human, TRAIT_FEARLESS) || nearby_human == user) + continue + to_chat(nearby_human, span_warning("You feel an unknown, primal terror building up within you...")) + + if(!do_after(user, 2 SECONDS)) + to_chat(user, span_warning("Your focus is broken, and you settle back down.")) + return + + + to_chat(user, span_notice("You release the supernatural wrath within you!")) + user.apply_status_effect(/datum/status_effect/werewolf_rage) + user.say("RRRRAGGGGHHHH!!", forced = "spell ([src])") + playsound(user.loc, 'sound/creatures/space_dragon_roar.ogg', 40, use_reverb = TRUE) + + // hearing a werewolf violently howl- and enter its enraged state, forces unprotected normal humans to panic + for(var/mob/living/carbon/human/nearby_human in view(scare_radius, user)) + if(nearby_human == user) + continue + // if you are: mentally protected, fearless, deaf, or a werewolf yourself (or the person who used this) you aren't affected. + if(HAS_TRAIT(nearby_human, TRAIT_WEREWOLF) || HAS_TRAIT(nearby_human, TRAIT_MINDSHIELD) || HAS_TRAIT(nearby_human, TRAIT_DEAF) || HAS_TRAIT(nearby_human, TRAIT_FEARLESS)) + to_chat(nearby_human, span_warning("You feel something horrible pass over you.")) + continue + + to_chat(nearby_human, span_danger("Your mind recoils as it is filled with a primordial terror!")) + // if you aren't, you'll become dizzy and jittery, alongside get a -10 negative moodlet + nearby_human.set_jitter_if_lower(15 SECONDS) + nearby_human.set_dizzy_if_lower(7 SECONDS) + nearby_human.add_mood_event("werewolf_delirium", /datum/mood_event/werewolf_delirium) + // and a chance to involuntarily scream + if(prob(4)) + nearby_human.emote("scream") + +/datum/status_effect/werewolf_rage + id = "blooddrunk" + duration = 60 + tick_interval = -1 + alert_type = /atom/movable/screen/alert/status_effect/werewolf_rage + +/atom/movable/screen/alert/status_effect/werewolf_rage + name = "Lycanthropic Rage" + desc = "You are filled with a supernatural rage! Your pulse thunders in your ears!" + icon_state = "blooddrunk" + +/datum/status_effect/werewolf_rage/on_apply() + owner.add_movespeed_mod_immunities(id, /datum/movespeed_modifier/damage_slowdown) + if(ishuman(owner)) + var/mob/living/carbon/human/human_owner = owner + human_owner.physiology.brute_mod *= 0.8 + human_owner.physiology.burn_mod *= 0.8 + human_owner.physiology.tox_mod *= 0.8 + owner.playsound_local(get_turf(owner), 'sound/effects/singlebeat.ogg', 40, 1, use_reverb = FALSE) + return TRUE + +/datum/status_effect/werewolf_rage/on_remove() + if(ishuman(owner)) + var/mob/living/carbon/human/human_owner = owner + human_owner.physiology.brute_mod *= 1.25 + human_owner.physiology.burn_mod *= 1.25 + human_owner.physiology.tox_mod *= 1.25 + owner.remove_movespeed_mod_immunities(id, /datum/movespeed_modifier/damage_slowdown) diff --git a/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm b/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm index cf7b171ef198..5a203bdfb3d0 100644 --- a/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm +++ b/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm @@ -37,7 +37,7 @@ name = "werewolf brain" desc = "a strange mixture of a human and wolf brain" organ_traits = list(TRAIT_ADVANCEDTOOLUSER, TRAIT_LITERATE, TRAIT_PRIMITIVE, TRAIT_CAN_STRIP) // you may be a raging monster, but you still retain traits of your normal self - // also you can just inject clever mutation and get the first two traits anyways *shrug + // i'll look into making this more interesting when rage is fully implemented /obj/item/organ/internal/brain/werewolf/get_attacking_limb(mob/living/carbon/human/target) if(target.body_position == LYING_DOWN) @@ -65,7 +65,7 @@ feel free to update this section if any of the three below can be accessed out o list( SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, SPECIES_PERK_ICON = "paw", - SPECIES_PERK_NAME = "Primal Primate", + SPECIES_PERK_NAME = "The Creature", SPECIES_PERK_DESC = "Werewolves are monstrous humans, and can't do most things a human can do. Computers are impossible, \ complex machines are right out, and most clothes don't fit your larger form.", ), diff --git a/maplestation_modules/code/modules/surgery/organs/heart.dm b/maplestation_modules/code/modules/surgery/organs/heart.dm index e31743256a04..1e9bc59e7859 100644 --- a/maplestation_modules/code/modules/surgery/organs/heart.dm +++ b/maplestation_modules/code/modules/surgery/organs/heart.dm @@ -5,6 +5,17 @@ base_icon_state = "heart" maxHealth = 2 * STANDARD_ORGAN_THRESHOLD -/obj/item/organ/internal/heart/wolf/Initialize(mapload) +/obj/item/organ/internal/heart/werewolf/Initialize(mapload) . = ..() transform = transform.Scale(1.5) + +/obj/item/organ/internal/heart/werewolf/on_mob_insert(mob/living/carbon/heart_owner) + . = ..() + // Gives rage to the heart owner. + var/datum/action/cooldown/spell/werewolf_rage/rage = new(heart_owner) + rage.Grant(heart_owner) + +/obj/item/organ/internal/heart/werewolf/on_mob_remove(mob/living/carbon/heart_owner, special = FALSE) + . = ..() + var/datum/action/cooldown/spell/werewolf_rage/rage = locate() in heart_owner.actions + qdel(rage) diff --git a/maplestation_modules/code/modules/surgery/organs/liver.dm b/maplestation_modules/code/modules/surgery/organs/liver.dm index a4a796db0fc5..267522c6959a 100644 --- a/maplestation_modules/code/modules/surgery/organs/liver.dm +++ b/maplestation_modules/code/modules/surgery/organs/liver.dm @@ -7,11 +7,8 @@ desc = "A large monstrous liver." icon_state = "liver" organ_flags = ORGAN_UNREMOVABLE - organ_traits = list(TRAIT_STABLELIVER) - // TODO: implement these - var/blood_brute_healing = 2.5 - ///Var for burn healing via blood - var/blood_burn_healing = 2.5 + // this is a major stop gap: i do want down the line for this to be removable, but this is the easiest way to keep liver in even when untransformed, and prevent werewolves from removing it for 0 downsides + organ_traits = list(TRAIT_STABLELIVER, TRAIT_SILVER_VULNERABLE) /obj/item/organ/internal/liver/werewolf/handle_chemical(mob/living/carbon/organ_owner, datum/reagent/chem, seconds_per_tick, times_fired) . = ..() @@ -19,5 +16,6 @@ if((. & COMSIG_MOB_STOP_REAGENT_CHECK) || (organ_flags & ORGAN_FAILING)) return if(istype(chem, /datum/reagent/silver)) - organ_owner.adjustStaminaLoss(4 * REM * seconds_per_tick, updating_stamina = TRUE) + organ_owner.adjustStaminaLoss(2 * REM * seconds_per_tick, updating_stamina = TRUE) organ_owner.adjustFireLoss(2 * REM * seconds_per_tick, updating_health = TRUE) + organ_owner.cause_pain(BODY_ZONES_ALL, 1 * REM * seconds_per_tick) diff --git a/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm b/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm index 6b8019c129f0..73d0339a4104 100644 --- a/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm +++ b/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm @@ -5,7 +5,7 @@ is_dimorphic = FALSE should_draw_greyscale = TRUE burn_modifier = 0.9 - brute_modifier = 0.7 + brute_modifier = 0.8 unarmed_attack_verb = "bite" grappled_attack_verb = "maul" unarmed_attack_effect = ATTACK_EFFECT_BITE @@ -29,7 +29,7 @@ is_dimorphic = TRUE should_draw_greyscale = TRUE burn_modifier = 0.9 - brute_modifier = 0.7 + brute_modifier = 0.8 dmg_overlay_type = null bodypart_traits = list(TRAIT_NO_JUMPSUIT, TRAIT_PUSHIMMUNE, TRAIT_STUNIMMUNE) wing_types = NONE @@ -54,7 +54,7 @@ unarmed_damage_high = 23 unarmed_effectiveness = 15 burn_modifier = 0.9 - brute_modifier = 0.7 + brute_modifier = 0.8 dmg_overlay_type = null bodypart_traits = list(TRAIT_CHUNKYFINGERS) @@ -79,7 +79,7 @@ unarmed_damage_high = 23 unarmed_effectiveness = 15 burn_modifier = 0.9 - brute_modifier = 0.7 + brute_modifier = 0.8 dmg_overlay_type = null bodypart_traits = list(TRAIT_CHUNKYFINGERS) @@ -95,7 +95,7 @@ icon_greyscale = 'maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi' should_draw_greyscale = TRUE burn_modifier = 0.9 - brute_modifier = 0.7 + brute_modifier = 0.8 speed_modifier = -0.1 dmg_overlay_type = null bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_DIGITIGRADE @@ -112,7 +112,7 @@ icon_greyscale = 'maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi' should_draw_greyscale = TRUE burn_modifier = 0.9 - brute_modifier = 0.7 + brute_modifier = 0.8 speed_modifier = -0.1 dmg_overlay_type = null bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_DIGITIGRADE From ee5f495aa5b697867f1002762d4dba44f8ba0171 Mon Sep 17 00:00:00 2001 From: Wollywoger Date: Wed, 9 Jul 2025 18:25:12 -0400 Subject: [PATCH 19/27] updates unarmed attack verbs --- .../code/modules/surgery/organs/werewolf_parts.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm b/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm index 73d0339a4104..6c52fb329976 100644 --- a/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm +++ b/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm @@ -6,8 +6,8 @@ should_draw_greyscale = TRUE burn_modifier = 0.9 brute_modifier = 0.8 - unarmed_attack_verb = "bite" - grappled_attack_verb = "maul" + unarmed_attack_verbs = list("bite") + grappled_attack_verbs = list("maul") unarmed_attack_effect = ATTACK_EFFECT_BITE unarmed_attack_sound = 'sound/weapons/bite.ogg' unarmed_miss_sound = 'sound/weapons/bite.ogg' @@ -45,7 +45,7 @@ limb_id = SPECIES_WEREWOLF icon_greyscale = 'maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi' should_draw_greyscale = TRUE - unarmed_attack_verb = "slash" + unarmed_attack_verbs = list("slash") grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW unarmed_attack_sound = 'sound/weapons/slice.ogg' @@ -70,7 +70,7 @@ limb_id = SPECIES_WEREWOLF icon_greyscale = 'maplestation_modules/icons/mob/werewolf_parts_greyscale.dmi' should_draw_greyscale = TRUE - unarmed_attack_verb = "slash" + unarmed_attack_verbs = list("slash") grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW unarmed_attack_sound = 'sound/weapons/slice.ogg' From e451eb25f64f0574662354fd123c3751f64b3139 Mon Sep 17 00:00:00 2001 From: Wollywoger Date: Wed, 9 Jul 2025 18:27:41 -0400 Subject: [PATCH 20/27] whoops --- .../code/modules/surgery/organs/werewolf_parts.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm b/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm index 6c52fb329976..bdaf92731619 100644 --- a/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm +++ b/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm @@ -7,7 +7,7 @@ burn_modifier = 0.9 brute_modifier = 0.8 unarmed_attack_verbs = list("bite") - grappled_attack_verbs = list("maul") + grappled_attack_verb = "maul" unarmed_attack_effect = ATTACK_EFFECT_BITE unarmed_attack_sound = 'sound/weapons/bite.ogg' unarmed_miss_sound = 'sound/weapons/bite.ogg' From 98fa284ccf547dae7a04e0ae99ef530ee7726254 Mon Sep 17 00:00:00 2001 From: Wollywoger Date: Wed, 9 Jul 2025 21:46:17 -0400 Subject: [PATCH 21/27] nerfs some stuff, moves werewolf parts to the right folder --- maplestation.dme | 2 +- .../code/datums/mood_events/other_mood_events.dm | 2 +- .../code/modules/magic/story_spells/lycanthropy.dm | 6 +++--- .../modules/surgery/{organs => bodyparts}/werewolf_parts.dm | 0 maplestation_modules/code/modules/surgery/organs/liver.dm | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) rename maplestation_modules/code/modules/surgery/{organs => bodyparts}/werewolf_parts.dm (100%) diff --git a/maplestation.dme b/maplestation.dme index 41b726ed9859..205758621853 100644 --- a/maplestation.dme +++ b/maplestation.dme @@ -6631,6 +6631,7 @@ #include "maplestation_modules\code\modules\surgery\bodyparts\cyber_arms.dm" #include "maplestation_modules\code\modules\surgery\bodyparts\cyber_digi.dm" #include "maplestation_modules\code\modules\surgery\bodyparts\cyber_tech.dm" +#include "maplestation_modules\code\modules\surgery\bodyparts\werewolf_parts.dm" #include "maplestation_modules\code\modules\surgery\organs\augments_arms.dm" #include "maplestation_modules\code\modules\surgery\organs\augments_chest.dm" #include "maplestation_modules\code\modules\surgery\organs\augments_eyes.dm" @@ -6642,7 +6643,6 @@ #include "maplestation_modules\code\modules\surgery\organs\liver.dm" #include "maplestation_modules\code\modules\surgery\organs\tails.dm" #include "maplestation_modules\code\modules\surgery\organs\tongue.dm" -#include "maplestation_modules\code\modules\surgery\organs\werewolf_parts.dm" #include "maplestation_modules\code\modules\uplink\uplink_devices.dm" #include "maplestation_modules\code\modules\uplink\uplink_infiltrator.dm" #include "maplestation_modules\code\modules\uplink\uplink_items.dm" diff --git a/maplestation_modules/code/datums/mood_events/other_mood_events.dm b/maplestation_modules/code/datums/mood_events/other_mood_events.dm index 577bffc6347e..49768bb79b93 100644 --- a/maplestation_modules/code/datums/mood_events/other_mood_events.dm +++ b/maplestation_modules/code/datums/mood_events/other_mood_events.dm @@ -1,5 +1,5 @@ // inflicted by witnessing a werewolf activate rage /datum/mood_event/werewolf_delirium description = "NOPENOPENOPENOPENOPENOPENOPENOPENOPENOPE!" - mood_change = -10 + mood_change = -5 timeout = 4 MINUTES diff --git a/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm b/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm index 7cfdd2245e38..b62a5a8f138c 100644 --- a/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm +++ b/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm @@ -102,9 +102,9 @@ continue to_chat(nearby_human, span_danger("Your mind recoils as it is filled with a primordial terror!")) - // if you aren't, you'll become dizzy and jittery, alongside get a -10 negative moodlet - nearby_human.set_jitter_if_lower(15 SECONDS) - nearby_human.set_dizzy_if_lower(7 SECONDS) + // if you aren't, you'll become dizzy and jittery, alongside get a -5 negative moodlet + nearby_human.set_jitter_if_lower(7 SECONDS) + nearby_human.set_dizzy_if_lower(3 SECONDS) nearby_human.add_mood_event("werewolf_delirium", /datum/mood_event/werewolf_delirium) // and a chance to involuntarily scream if(prob(4)) diff --git a/maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm b/maplestation_modules/code/modules/surgery/bodyparts/werewolf_parts.dm similarity index 100% rename from maplestation_modules/code/modules/surgery/organs/werewolf_parts.dm rename to maplestation_modules/code/modules/surgery/bodyparts/werewolf_parts.dm diff --git a/maplestation_modules/code/modules/surgery/organs/liver.dm b/maplestation_modules/code/modules/surgery/organs/liver.dm index 267522c6959a..63cb03a238a2 100644 --- a/maplestation_modules/code/modules/surgery/organs/liver.dm +++ b/maplestation_modules/code/modules/surgery/organs/liver.dm @@ -8,7 +8,7 @@ icon_state = "liver" organ_flags = ORGAN_UNREMOVABLE // this is a major stop gap: i do want down the line for this to be removable, but this is the easiest way to keep liver in even when untransformed, and prevent werewolves from removing it for 0 downsides - organ_traits = list(TRAIT_STABLELIVER, TRAIT_SILVER_VULNERABLE) + organ_traits = list(TRAIT_SILVER_VULNERABLE) /obj/item/organ/internal/liver/werewolf/handle_chemical(mob/living/carbon/organ_owner, datum/reagent/chem, seconds_per_tick, times_fired) . = ..() From 5a067e61dc6bd203ee4fe4e37d61de2319193aa3 Mon Sep 17 00:00:00 2001 From: Wollywoger Date: Wed, 9 Jul 2025 22:20:35 -0400 Subject: [PATCH 22/27] add an interaction if you're not a werewolf and activate rage --- .../modules/magic/story_spells/lycanthropy.dm | 55 ++++++++++--------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm b/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm index b62a5a8f138c..d9d27c894fd3 100644 --- a/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm +++ b/maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm @@ -76,39 +76,42 @@ ..() to_chat(user, span_green("You begin to dredge up the supernatural fury that boils within your body...")) - - for(var/mob/living/carbon/human/nearby_human in view(scare_radius, user)) - if(HAS_TRAIT(nearby_human, TRAIT_WEREWOLF) || HAS_TRAIT(nearby_human, TRAIT_MINDSHIELD) || HAS_TRAIT(nearby_human, TRAIT_DEAF) || HAS_TRAIT(nearby_human, TRAIT_FEARLESS) || nearby_human == user) - continue - to_chat(nearby_human, span_warning("You feel an unknown, primal terror building up within you...")) + if(is_species(user, /datum/species/werewolf)) + for(var/mob/living/carbon/human/nearby_human in view(scare_radius, user)) + if(HAS_TRAIT(nearby_human, TRAIT_WEREWOLF) || HAS_TRAIT(nearby_human, TRAIT_MINDSHIELD) || HAS_TRAIT(nearby_human, TRAIT_DEAF) || HAS_TRAIT(nearby_human, TRAIT_FEARLESS) || nearby_human == user) + continue + to_chat(nearby_human, span_warning("You feel an unknown, primal terror building up within you...")) if(!do_after(user, 2 SECONDS)) to_chat(user, span_warning("Your focus is broken, and you settle back down.")) return - to_chat(user, span_notice("You release the supernatural wrath within you!")) user.apply_status_effect(/datum/status_effect/werewolf_rage) - user.say("RRRRAGGGGHHHH!!", forced = "spell ([src])") - playsound(user.loc, 'sound/creatures/space_dragon_roar.ogg', 40, use_reverb = TRUE) - - // hearing a werewolf violently howl- and enter its enraged state, forces unprotected normal humans to panic - for(var/mob/living/carbon/human/nearby_human in view(scare_radius, user)) - if(nearby_human == user) - continue - // if you are: mentally protected, fearless, deaf, or a werewolf yourself (or the person who used this) you aren't affected. - if(HAS_TRAIT(nearby_human, TRAIT_WEREWOLF) || HAS_TRAIT(nearby_human, TRAIT_MINDSHIELD) || HAS_TRAIT(nearby_human, TRAIT_DEAF) || HAS_TRAIT(nearby_human, TRAIT_FEARLESS)) - to_chat(nearby_human, span_warning("You feel something horrible pass over you.")) - continue - - to_chat(nearby_human, span_danger("Your mind recoils as it is filled with a primordial terror!")) - // if you aren't, you'll become dizzy and jittery, alongside get a -5 negative moodlet - nearby_human.set_jitter_if_lower(7 SECONDS) - nearby_human.set_dizzy_if_lower(3 SECONDS) - nearby_human.add_mood_event("werewolf_delirium", /datum/mood_event/werewolf_delirium) - // and a chance to involuntarily scream - if(prob(4)) - nearby_human.emote("scream") + + if(is_species(user, /datum/species/werewolf)) + user.say("RRRRAGGGGHHHH!!", forced = "spell ([src])") + playsound(user.loc, 'sound/creatures/space_dragon_roar.ogg', 40, use_reverb = TRUE) + // hearing a werewolf violently howl- and enter its enraged state, forces unprotected normal humans to panic + for(var/mob/living/carbon/human/nearby_human in view(scare_radius, user)) + if(nearby_human == user) + continue + // if you are: mentally protected, fearless, deaf, or a werewolf yourself (or the person who used this) you aren't affected. + if(HAS_TRAIT(nearby_human, TRAIT_WEREWOLF) || HAS_TRAIT(nearby_human, TRAIT_MINDSHIELD) || HAS_TRAIT(nearby_human, TRAIT_DEAF) || HAS_TRAIT(nearby_human, TRAIT_FEARLESS)) + to_chat(nearby_human, span_warning("You feel something horrible pass over you.")) + continue + + to_chat(nearby_human, span_danger("Your mind recoils as it is filled with a primordial terror!")) + // if you aren't, you'll become dizzy and jittery, alongside get a -5 negative moodlet + nearby_human.set_jitter_if_lower(7 SECONDS) + nearby_human.set_dizzy_if_lower(3 SECONDS) + nearby_human.add_mood_event("werewolf_delirium", /datum/mood_event/werewolf_delirium) + // and a chance to involuntarily scream + if(prob(4)) + nearby_human.emote("scream") + else + user.say("REEEEEEEEE!!!!", forced = "spell([src])") + playsound(user.loc, 'sound/effects/reee.ogg', 40, use_reverb = TRUE) /datum/status_effect/werewolf_rage id = "blooddrunk" From 3f95e13e28cbfc347d554727dedc172c68d1b6ee Mon Sep 17 00:00:00 2001 From: Wollywoger Date: Sat, 12 Jul 2025 15:40:01 -0400 Subject: [PATCH 23/27] adds feedback when a silvervulnerable mob gets hit with silver --- maplestation_modules/code/modules/surgery/organs/liver.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/maplestation_modules/code/modules/surgery/organs/liver.dm b/maplestation_modules/code/modules/surgery/organs/liver.dm index 63cb03a238a2..b42870d27374 100644 --- a/maplestation_modules/code/modules/surgery/organs/liver.dm +++ b/maplestation_modules/code/modules/surgery/organs/liver.dm @@ -19,3 +19,9 @@ organ_owner.adjustStaminaLoss(2 * REM * seconds_per_tick, updating_stamina = TRUE) organ_owner.adjustFireLoss(2 * REM * seconds_per_tick, updating_health = TRUE) organ_owner.cause_pain(BODY_ZONES_ALL, 1 * REM * seconds_per_tick) + +/datum/reagent/silver/on_mob_metabolize(mob/living/exposed) // putting it here just because its relevant- move it down the line + . = ..() + if(HAS_TRAIT(exposed, TRAIT_SILVER_VULNERABLE)) // this is just a notifier the mob is silver vulnerable, unless impossible, what the silver actually DOES to them is decided on the mob itself + exposed.visible_message(span_warning("[exposed] recoils in agony!"), span_notice("Your body shudders upon exposure to pure [lowertext(name)]!")) + exposed.emote("scream") From 4d96510e0fddd490ce6dcd8be33210f2414e30da Mon Sep 17 00:00:00 2001 From: Wollywoger Date: Sat, 13 Sep 2025 23:06:29 -0400 Subject: [PATCH 24/27] fixes that conflict --- .../modules/mob/living/carbon/human/species_types/werewolf.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm b/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm index 5a203bdfb3d0..0cb802bd3b34 100644 --- a/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm +++ b/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm @@ -18,7 +18,7 @@ mutantliver = /obj/item/organ/internal/liver/werewolf mutantheart = /obj/item/organ/internal/heart/werewolf external_organs = list( - /obj/item/organ/external/tail/cat/fox = "Fox", // todo: add custom wolf tail + /obj/item/organ/external/tail/fox = "Fox", // todo: add custom wolf tail ) skinned_type = /obj/item/stack/sheet/animalhide/human changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT From 9f2af7b0819ec345d8fd7d8d51a6e2877e97e158 Mon Sep 17 00:00:00 2001 From: Wollywoger Date: Sat, 13 Sep 2025 23:51:59 -0400 Subject: [PATCH 25/27] changes a macro to appeal to linters --- maplestation_modules/code/modules/surgery/organs/liver.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maplestation_modules/code/modules/surgery/organs/liver.dm b/maplestation_modules/code/modules/surgery/organs/liver.dm index b42870d27374..3b3cfa71ebef 100644 --- a/maplestation_modules/code/modules/surgery/organs/liver.dm +++ b/maplestation_modules/code/modules/surgery/organs/liver.dm @@ -23,5 +23,5 @@ /datum/reagent/silver/on_mob_metabolize(mob/living/exposed) // putting it here just because its relevant- move it down the line . = ..() if(HAS_TRAIT(exposed, TRAIT_SILVER_VULNERABLE)) // this is just a notifier the mob is silver vulnerable, unless impossible, what the silver actually DOES to them is decided on the mob itself - exposed.visible_message(span_warning("[exposed] recoils in agony!"), span_notice("Your body shudders upon exposure to pure [lowertext(name)]!")) + exposed.visible_message(span_warning("[exposed] recoils in agony!"), span_notice("Your body shudders upon exposure to pure [LOWER_TEXT(name)]!")) exposed.emote("scream") From c94c93f7eb17be6b9cb4d468d8d3d602076bc2da Mon Sep 17 00:00:00 2001 From: Wollywoger Date: Wed, 15 Oct 2025 17:20:43 -0400 Subject: [PATCH 26/27] updates paths --- .../carbon/human/species_types/werewolf.dm | 18 +++++++++--------- .../code/modules/surgery/organs/ears.dm | 6 +++--- .../code/modules/surgery/organs/eyes.dm | 2 +- .../code/modules/surgery/organs/heart.dm | 8 ++++---- .../code/modules/surgery/organs/liver.dm | 4 ++-- .../code/modules/surgery/organs/tongue.dm | 4 ++-- 6 files changed, 21 insertions(+), 21 deletions(-) diff --git a/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm b/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm index 0cb802bd3b34..5b4e6d9b31bc 100644 --- a/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm +++ b/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm @@ -11,14 +11,14 @@ TRAIT_CAN_STRIP, TRAIT_CHUNKYFINGERS ) - mutanttongue = /obj/item/organ/internal/tongue/werewolf - mutantears = /obj/item/organ/internal/ears/cat/werewolf - mutanteyes = /obj/item/organ/internal/eyes/werewolf - mutantbrain = /obj/item/organ/internal/brain/werewolf - mutantliver = /obj/item/organ/internal/liver/werewolf - mutantheart = /obj/item/organ/internal/heart/werewolf + mutanttongue = /obj/item/organ/tongue/werewolf + mutantears = /obj/item/organ/ears/cat/werewolf + mutanteyes = /obj/item/organ/eyes/werewolf + mutantbrain = /obj/item/organ/brain/werewolf + mutantliver = /obj/item/organ/liver/werewolf + mutantheart = /obj/item/organ/heart/werewolf external_organs = list( - /obj/item/organ/external/tail/fox = "Fox", // todo: add custom wolf tail + /obj/item/organ/tail/fox = "Fox", // todo: add custom wolf tail ) skinned_type = /obj/item/stack/sheet/animalhide/human changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT @@ -33,13 +33,13 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/werewolf, ) -/obj/item/organ/internal/brain/werewolf +/obj/item/organ/brain/werewolf name = "werewolf brain" desc = "a strange mixture of a human and wolf brain" organ_traits = list(TRAIT_ADVANCEDTOOLUSER, TRAIT_LITERATE, TRAIT_PRIMITIVE, TRAIT_CAN_STRIP) // you may be a raging monster, but you still retain traits of your normal self // i'll look into making this more interesting when rage is fully implemented -/obj/item/organ/internal/brain/werewolf/get_attacking_limb(mob/living/carbon/human/target) +/obj/item/organ/brain/werewolf/get_attacking_limb(mob/living/carbon/human/target) if(target.body_position == LYING_DOWN) return owner.get_bodypart(BODY_ZONE_HEAD) // performs a "maul" attack which does increased melee damage return ..() diff --git a/maplestation_modules/code/modules/surgery/organs/ears.dm b/maplestation_modules/code/modules/surgery/organs/ears.dm index 0a3e8dce563a..9508ee8f12e7 100644 --- a/maplestation_modules/code/modules/surgery/organs/ears.dm +++ b/maplestation_modules/code/modules/surgery/organs/ears.dm @@ -20,7 +20,7 @@ icon = 'maplestation_modules/icons/mob/mutant_bodyparts.dmi' locked = TRUE -/obj/item/organ/internal/ears/cat/werewolf +/obj/item/organ/ears/cat/werewolf name = "wolf ears" icon = 'icons/obj/clothing/head/costume.dmi' icon_state = "kitty" @@ -28,7 +28,7 @@ // Same sensitivity as felinid ears damage_multiplier = 2 -/obj/item/organ/internal/ears/cat/werewolf/on_mob_insert(mob/living/carbon/human/ear_owner) +/obj/item/organ/ears/cat/werewolf/on_mob_insert(mob/living/carbon/human/ear_owner) . = ..() if(istype(ear_owner)) color = ear_owner.hair_color @@ -36,7 +36,7 @@ ear_owner.update_body() ADD_TRAIT(ear_owner, TRAIT_GOOD_HEARING, ORGAN_TRAIT) -/obj/item/organ/internal/ears/cat/werewolf/on_mob_remove(mob/living/carbon/human/ear_owner) +/obj/item/organ/ears/cat/werewolf/on_mob_remove(mob/living/carbon/human/ear_owner) . = ..() if(istype(ear_owner)) ear_owner.dna.features["ears"] = "None" diff --git a/maplestation_modules/code/modules/surgery/organs/eyes.dm b/maplestation_modules/code/modules/surgery/organs/eyes.dm index 27f84ab0e131..e1d16188c798 100644 --- a/maplestation_modules/code/modules/surgery/organs/eyes.dm +++ b/maplestation_modules/code/modules/surgery/organs/eyes.dm @@ -1,4 +1,4 @@ -/obj/item/organ/internal/eyes/werewolf +/obj/item/organ/eyes/werewolf name = "wolf eyes" desc = "Large and powerful eyes." sight_flags = SEE_MOBS diff --git a/maplestation_modules/code/modules/surgery/organs/heart.dm b/maplestation_modules/code/modules/surgery/organs/heart.dm index 1e9bc59e7859..99ed28bd47c3 100644 --- a/maplestation_modules/code/modules/surgery/organs/heart.dm +++ b/maplestation_modules/code/modules/surgery/organs/heart.dm @@ -1,21 +1,21 @@ -/obj/item/organ/internal/heart/werewolf +/obj/item/organ/heart/werewolf name = "massive heart" desc = "An absolutely monstrous heart." icon_state = "heart-on" base_icon_state = "heart" maxHealth = 2 * STANDARD_ORGAN_THRESHOLD -/obj/item/organ/internal/heart/werewolf/Initialize(mapload) +/obj/item/organ/heart/werewolf/Initialize(mapload) . = ..() transform = transform.Scale(1.5) -/obj/item/organ/internal/heart/werewolf/on_mob_insert(mob/living/carbon/heart_owner) +/obj/item/organ/heart/werewolf/on_mob_insert(mob/living/carbon/heart_owner) . = ..() // Gives rage to the heart owner. var/datum/action/cooldown/spell/werewolf_rage/rage = new(heart_owner) rage.Grant(heart_owner) -/obj/item/organ/internal/heart/werewolf/on_mob_remove(mob/living/carbon/heart_owner, special = FALSE) +/obj/item/organ/heart/werewolf/on_mob_remove(mob/living/carbon/heart_owner, special = FALSE) . = ..() var/datum/action/cooldown/spell/werewolf_rage/rage = locate() in heart_owner.actions qdel(rage) diff --git a/maplestation_modules/code/modules/surgery/organs/liver.dm b/maplestation_modules/code/modules/surgery/organs/liver.dm index 3b3cfa71ebef..b4a7988b84c4 100644 --- a/maplestation_modules/code/modules/surgery/organs/liver.dm +++ b/maplestation_modules/code/modules/surgery/organs/liver.dm @@ -1,7 +1,7 @@ // Liver stuff // werewolf liver, used for various funny traits, like handling their silver weakness chemically -/obj/item/organ/internal/liver/werewolf +/obj/item/organ/liver/werewolf name = "Beastly liver" desc = "A large monstrous liver." @@ -10,7 +10,7 @@ // this is a major stop gap: i do want down the line for this to be removable, but this is the easiest way to keep liver in even when untransformed, and prevent werewolves from removing it for 0 downsides organ_traits = list(TRAIT_SILVER_VULNERABLE) -/obj/item/organ/internal/liver/werewolf/handle_chemical(mob/living/carbon/organ_owner, datum/reagent/chem, seconds_per_tick, times_fired) +/obj/item/organ/liver/werewolf/handle_chemical(mob/living/carbon/organ_owner, datum/reagent/chem, seconds_per_tick, times_fired) . = ..() // parent returned COMSIG_MOB_STOP_REAGENT_CHECK or we are failing if((. & COMSIG_MOB_STOP_REAGENT_CHECK) || (organ_flags & ORGAN_FAILING)) diff --git a/maplestation_modules/code/modules/surgery/organs/tongue.dm b/maplestation_modules/code/modules/surgery/organs/tongue.dm index 97f0f065af53..8d611713bfc3 100644 --- a/maplestation_modules/code/modules/surgery/organs/tongue.dm +++ b/maplestation_modules/code/modules/surgery/organs/tongue.dm @@ -74,7 +74,7 @@ speech_sound_list_question = null // same as regular speech sounds speech_sound_list_exclamation = list('maplestation_modules/sound/voice/shad_exclaim.ogg' = 55) -/obj/item/organ/internal/tongue/werewolf +/obj/item/organ/tongue/werewolf name = "wolf tongue" desc = "A large tongue that looks like a mix of a human's and a wolf's." icon_state = "werewolf_tongue" @@ -85,7 +85,7 @@ liked_foodtypes = GROSS | MEAT | RAW | GORE disliked_foodtypes = SUGAR -/obj/item/organ/internal/tongue/werewolf/modify_speech(datum/source, list/speech_args) +/obj/item/organ/tongue/werewolf/modify_speech(datum/source, list/speech_args) var/message = speech_args[SPEECH_MESSAGE] if(message[1] != "*") From e254140738fa1fe6f7e95c0e5968b6d54b6be362 Mon Sep 17 00:00:00 2001 From: Wollywoger Date: Wed, 15 Oct 2025 19:01:52 -0400 Subject: [PATCH 27/27] first attempt at updating --- .../carbon/human/species_types/werewolf.dm | 2 +- .../surgery/bodyparts/werewolf_parts.dm | 6 ++++-- .../code/modules/surgery/organs/ears.dm | 7 ------- .../icons/mob/mutant_bodyparts.dmi | Bin 2571 -> 2567 bytes 4 files changed, 5 insertions(+), 10 deletions(-) diff --git a/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm b/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm index 5b4e6d9b31bc..a598019866ae 100644 --- a/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm +++ b/maplestation_modules/code/modules/mob/living/carbon/human/species_types/werewolf.dm @@ -17,7 +17,7 @@ mutantbrain = /obj/item/organ/brain/werewolf mutantliver = /obj/item/organ/liver/werewolf mutantheart = /obj/item/organ/heart/werewolf - external_organs = list( + mutant_organs = list( /obj/item/organ/tail/fox = "Fox", // todo: add custom wolf tail ) skinned_type = /obj/item/stack/sheet/animalhide/human diff --git a/maplestation_modules/code/modules/surgery/bodyparts/werewolf_parts.dm b/maplestation_modules/code/modules/surgery/bodyparts/werewolf_parts.dm index bdaf92731619..df8577e3da1f 100644 --- a/maplestation_modules/code/modules/surgery/bodyparts/werewolf_parts.dm +++ b/maplestation_modules/code/modules/surgery/bodyparts/werewolf_parts.dm @@ -98,7 +98,8 @@ brute_modifier = 0.8 speed_modifier = -0.1 dmg_overlay_type = null - bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_DIGITIGRADE + bodytype = BODYTYPE_ORGANIC + bodyshape = BODYSHAPE_DIGITIGRADE footstep_type = FOOTSTEP_MOB_CLAW /obj/item/bodypart/leg/left/werewolf/update_limb(dropping_limb, is_creating) @@ -115,7 +116,8 @@ brute_modifier = 0.8 speed_modifier = -0.1 dmg_overlay_type = null - bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_DIGITIGRADE + bodytype = BODYTYPE_ORGANIC + bodyshape = BODYSHAPE_DIGITIGRADE footstep_type = FOOTSTEP_MOB_CLAW /obj/item/bodypart/leg/right/werewolf/update_limb(dropping_limb, is_creating) diff --git a/maplestation_modules/code/modules/surgery/organs/ears.dm b/maplestation_modules/code/modules/surgery/organs/ears.dm index 9508ee8f12e7..a966f75d83d5 100644 --- a/maplestation_modules/code/modules/surgery/organs/ears.dm +++ b/maplestation_modules/code/modules/surgery/organs/ears.dm @@ -31,17 +31,11 @@ /obj/item/organ/ears/cat/werewolf/on_mob_insert(mob/living/carbon/human/ear_owner) . = ..() if(istype(ear_owner)) - color = ear_owner.hair_color - ear_owner.dna.features["ears"] = ear_owner.dna.species.mutant_bodyparts["ears"] = "Werewolf" - ear_owner.update_body() ADD_TRAIT(ear_owner, TRAIT_GOOD_HEARING, ORGAN_TRAIT) /obj/item/organ/ears/cat/werewolf/on_mob_remove(mob/living/carbon/human/ear_owner) . = ..() if(istype(ear_owner)) - ear_owner.dna.features["ears"] = "None" - ear_owner.dna.species.mutant_bodyparts -= "ears" - ear_owner.update_body() REMOVE_TRAIT(ear_owner, TRAIT_GOOD_HEARING, ORGAN_TRAIT) /datum/sprite_accessory/ears/werewolf @@ -49,5 +43,4 @@ icon_state = "werewolf" icon = 'maplestation_modules/icons/mob/mutant_bodyparts.dmi' locked = TRUE - hasinner = TRUE color_src = HAIR_COLOR diff --git a/maplestation_modules/icons/mob/mutant_bodyparts.dmi b/maplestation_modules/icons/mob/mutant_bodyparts.dmi index a3ad18fff662bdba4b5e63631d42b2135f00c9f3..6bc5a6d4414276fa385ad930f505c0cf14f65050 100644 GIT binary patch delta 2461 zcmbV~c{tPy7stm~?v$;GtVMIJNtT<4Y$GnZ8A}M+rd*eiogqv=gA|c_BXY-HmdKJ~ zXu?!XwlRcel%2$g5u?Fux8CP{Ztvgk`RjAeALl&Z@A=-AzA61@kl_HCJTgL?U;f-$ zUtd+-f-9;c5{WxWN&MPceoM4tv*j$I>AXMgp?M;KixlOKDWS2_7qN6 zFAp#Xa0kn2RGp7f5qF|Zg#2kcd?fHjO>`}7F!PxyT>c^p0e(2t1ONMVtfbc<9_P=h zAdzbd@k~KHEd3nx?fVfs;5;KwGvM%pOq)C(RQ8ctE3HOpi9~exaNP34Yr&dMH?kK) z5)v=qmHR8rd;E@cp5hgv%<3SNjR#Y?9PTxq+Ayl!TEKv-o!vd=)8f^;|8Z#BKnD@S z=~aA^FRv!1Qke$=L7eTa;jZyTYsI${Domt*HAacX3m~iRya^8khS*&n`-G+cO8Z=V zw44({Iw!i=oE7vj+>R#?6F?swmWspT8~|)8=8w{f*UxgY2*l9QCUW3FW7yM)33rC6 zNf!Z6@e;lSeT#Uu&s4lF|@LjBuW2vZ1bhP8D3|M1&)8Lvwii5HK{ zWSPyd8r(r3;(NPM17cudimy>@&N1i_I~&)#DQzZiO9=6G2|Ob? z;CENqRe93T9jBxX&fsmnhACl-1?*PR>8a6@-SK8Z(liCt^;6=Hzf?buD1(@$$;98X z_6JD8z}x*X2KRFys#M*OYEwaV)rDP^ShyKBb^qA7VrG)AH#QrN4<+*sE=iT0>ZP63 zlOI*?DeLijh2eA~VfnCLrUqg5x|l(DABLm3E%;6PkMcJbE8Q7#AsLIK8y*o<_}=}d za?OHT_ejSwBTdu+)LDS^D8XE8Mf6>8aElc8@%2ssdKzctb3%<)>%~_PF^&>LVO>*A zBzF$<+N%nm{SNX)N<$@+>3^M+#rupV zuh&72k5?)Z_pv_Gp<@GY5H%y@*(Qq;qM@9%LJFIj>_p1E2^eAhhG2_Ot@Zses~us0 z9rjs_hg1{2W%hn#Z2@n2rL*IG#u*_80sRsp0nRcL;kJlmv{WBXt?z1WZg}~ngB;wZ z!qBwNrpn_jHifDZ=k=}41WSFp?`);i zAPBA`Bk@dL4@WN8YtYg=SC(X7332^!wyX*h4&SG#PO{kXRxy>@pkjXq1A9MoSWY%A z$%;*hyxUGyfu*F;?g}bQ4ou%ji{;J+`8(vu=I?I7%m;NNz9!#Q9_;G_H(vz~EQ<;y z9Lym0>|LSg%H0WvMGT2(PtI_5J1f~Ze)v%Sy5x`j---Ao%}r>eLVI-UQAZu;ye)9j zmL6^Py9w*jc%pS=%06wekJUO`?(K;%MX@u$97f@3hSD4Crm}_p*P{&In#i=g1ha** zEm`!QQ3kPmbJRICK}+=_cFaE4wWmDFUW&b%51;_FLcKvXrO5h#T-0WpwzqTIrfmq> zo=PR3C{REA^CIVlR8ALSw|aD;8mJz%>!82CFNEz5kxExgxj+%B8?dl1xmcrI7(xXX zH^%`aCd*HoMl9&A0AWWWOC5Y|;4pvP)`Wz=`QEFRsof`2;E^ zCqVw5?mex@+>kvwb2_q>MLIKZYp`LjL9_gz=Z2usvTa3uIGeXpr&p6&K)$H!){ZrZD6ta$uJi>ol zRgZc6g;9$_!aQPn@qXgtySmz!&$mljo&tn!N6Rxa+>KHZz$1cq7I?yZLOnJytaMN9 zVT3tY>w0F~$R_o#WbwzLGebF*7&-<^~k0Y{rV>h+KgnQ+9en-M64-%hp|xFOWl_R!NV?lc^#3u{v{@1$L?VKkHDpl>`N!%tIj{(3S45#|GZ&VTR*W zZr6uTXM0Mw@Kjx{tNLnibEv32jheNeidYQxs&RIf{P-N(zEH!D{vk8aDUAOxLKs}? z*dHV8?u{M6Y*@fZPrc%>(ux3TtCM)ye?<{#(pW3({w$YiQ_1qYXZgAiQ(RbsdTYOD z73TLQo`>QiuP>yEQ|b4?wZivIuM;5=ZWT%U5TvO zds1{ P%J+%A4Z^y?%0J~F41S=s delta 2465 zcmbW0X*kpi8^*^NONhZRA|^?WC8=af##WNol8mLrj4fg)bL?mM89x9P1b}W=`kBdv!j)&!_voKRnm<+}H1kgC)YA`sfS~kJXoz6&BTH zW|g+Lx4-Z2pIiFAkH>Q<6mDJJa$4G@XZkxJ5Qrzp-sUFAcwy|`55q{!MgWbnO2rmu z`5i>v-J8$e6w;o%)&<_$b3C_lg>TO5er6I!YcSy;gSVSLS5^A0%wpAi zmAS7Pbb}YmCzo!rM`oSAl1m0^5~?0$hlo{kx7k)XBe-}WpM!Ae(1~v^0iefp$W z3(Kh${Kq}DzNs&r!61;JqouitLs-@tDKR3?0CrX1m#;ZmE5EzqSN#ou`$7e7R{*IF zl{hkwzTkN4M7o!`I$*Xn2st7n0G6+UzZu_w>m_Y`x34AdrT(z~vi0LwCe2@`sfu*5l_1cxBPSmLNFFw+y_Ldl_#=${Uy>6)Ik zr^gv?*!P9F2->C$w#nG?%7nvQ)AGL3j_JPSn2>{<*q-jZAt8;} z*v@#nmHy3wCeZXdt*~31U=A=hWm4J)Km|c&yB$;k_hyC5LfE4c3?W`Wc8TV3Rd7lx zpMsKjMj${Z*MiR+U62I#?!Kq14n{|N8Uh8H#VVCf1Zsp?>PD=3k)RuNzS_-R6PCI zCbf`f%1PXjVx=1`x&EG}RGe;0vdbrRxB-R)f2}9l5HU2b=`nSMF90M;Kklh_@f-D_ zat8I#i0|V^H|uuF=a`#aC9VhgMJ!QYm362#-@7m{f`5%6v-4T@)TeBmNIi$%N98YK z=oHP`H0MJvx_VD?-brRCJn4q+ir~Y=FWvvXq8pk%!V@nVH!h3S(YYAy+<-lQE`Q>9 z2fu+I3JAa&mGWBW0((q@>D~92aeX)R9-w(zKY2NEoh1U+@rcdA%xo`-$1{K3hFWU_ z6+0m~Q&Zh!4PPuY3SlBG^{On^;)Wj6q%X4(yYXjd&je4kES=hb(p3Q{97vOro8TTGt_~xnLQjZi2 z;seXao6ora_+|J`cLP+utpl___Zdg$eIei}AVfVwpMm1r=48 z|0f{1JDz=>#2Q^u%9Fu>h0T~H{mrO7*B<`E0rY-Gm&VXnJv+{}N|(a7DdCGYPwgwb zzXx+VZMZRl$JLM|?cyTSYN=}^ZA;X5^>o-6x`F*Gt7hBtm44*HsTgB&TDKP`;p8)< zi=Pd(HNXgWzf%!EfR+hk2lpY#WaMQspt6Gc+;vLulxybDG*slW)gfAtOi#9PnLw2huqkQdVLTDd-% z5CE`b0bh|@vM@1X{UQx>L!CfrH!vkukKi&&DoA@$wg6H?EGC_7OElv14JFMN|Kbq( z+}N#D$&QuZ@}wuPpyMOjVnV=7_;uce;uPGioCB`2V)oOz1NTdyc_=nS^*R79g%euQ zv!oK*kYwoA>F&v2pX1%cJ^G?R6h&v?&h-l0TI#W&1FI>246J9bSEppck2QK$F?Ltn zZu4ey;)}NAFf8Ws-Wofp*0$wr0W*!CCTE4PzHNA2eweKFOF%k;=Or&_<_7AJ&r#J0 z;qP(^g?mndqmM&eA878S|Gva*i>GeN-}zzS1HqX1J6$jND4U;K7GZ%cWdK8FDPAhY z7zD~VS#Rs|;_))E^^yxVGBn^rUh%F<>Xy=`!7|Y7ID$0sN6z5!)9Atbo*#-ukv4tJ z`}Wh0+C&@+9;*)BkFYOPubdM~S|@U&Wd?mOL+r7|{VZ@I;njmj%gq#N=V66Z6@bd|-3d*IJYgIN_;vcynU z*jQxGv=?SM)9qT=>EBIQ*k0Lga_7@?(lAD+ftQ9Poq;-#n|GxzOrG^>tVTcL`G>D| zdZPgZZiHkBs~6yU2JjsF1*8AAwDAWsr0_G(1$YW2{%CwR5u^ZE-DknaldiXH)s*<*GcPQM^9^{-27r;0O$hJ~|c< Rxvu_CW_iWNyxbHM^EZ3_lMDa=