Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
62337ec
first cracks at restoration
Wollywoger Oct 19, 2024
0d1a128
Merge branch 'master' of https://www.github.com/wollywoger/maplestati…
Wollywoger Oct 19, 2024
e003968
temporarily removes a trait from werewolf liver
Wollywoger Oct 19, 2024
e1f667d
moves the organ flags on werewolf liver
Wollywoger Oct 19, 2024
68dec59
fixes the werewolf legs again, adds the spell, screenshots still need…
Wollywoger Oct 20, 2024
601afc3
rebalances, updates screenshots For Now
Wollywoger Oct 20, 2024
5da2d7f
renames werewolfform to test something
Wollywoger Oct 21, 2024
94353cd
fixes the ears and brain, breaks screenshot tests
Wollywoger Oct 28, 2024
80708e6
fixes a runtime, fixes screenshots, fixes how limbs work
Wollywoger Oct 31, 2024
35cb0f6
removes bio state changes from werewolf parts because they're likely …
Wollywoger Nov 1, 2024
16a5380
Merge branch 'master' into werewolf-content
Wollywoger Nov 1, 2024
4b0e406
Merge branch 'master' into werewolf-content
Wollywoger Nov 30, 2024
269ce46
werewolves can wear jumpsuits, adds an icon for the werewolf change, …
Wollywoger Dec 1, 2024
ad93687
Merge branch 'werewolf-content' of https://www.github.com/wollywoger/…
Wollywoger Dec 1, 2024
ca8f194
refactors the werewolf change spell, changes the sprite for werewolve…
Wollywoger Dec 1, 2024
d16bb01
Merge branch 'master' into werewolf-content
Wollywoger Dec 2, 2024
5c10572
mini refactor
Wollywoger Dec 2, 2024
1ed585c
Merge branch 'werewolf-content' of https://www.github.com/wollywoger/…
Wollywoger Dec 2, 2024
a20c470
more refactors
Wollywoger Dec 11, 2024
a5b6cc1
Merge https://github.com/Wollywoger/MapleStationCode into werewolf-co…
Wollywoger Feb 15, 2025
3af4a37
removes a dead trait
Wollywoger Feb 15, 2025
67fe98f
also switches tails
Wollywoger Feb 15, 2025
92c17e7
moves werewolf organ icons
Wollywoger Feb 15, 2025
11cf746
temporary, still flawed, fix for losing ears
Wollywoger Feb 16, 2025
c14e506
Merge branch 'master' into werewolf-content
Wollywoger Feb 20, 2025
e4547af
Merge branch 'master' into werewolf-content
Wollywoger Feb 22, 2025
687d950
changes the change spell, adds a rage ability, among framework for la…
Wollywoger Mar 2, 2025
a5c3ecf
Merge branch 'werewolf-content' of https://www.github.com/wollywoger/…
Wollywoger Mar 2, 2025
dc5e2b5
Merge branch 'master' into werewolf-content
Wollywoger Mar 9, 2025
ddae355
Merge branch 'master' into werewolf-content
Wollywoger Jul 9, 2025
ee5f495
updates unarmed attack verbs
Wollywoger Jul 9, 2025
e451eb2
whoops
Wollywoger Jul 9, 2025
98fa284
nerfs some stuff, moves werewolf parts to the right folder
Wollywoger Jul 10, 2025
5a067e6
add an interaction if you're not a werewolf and activate rage
Wollywoger Jul 10, 2025
3f95e13
adds feedback when a silvervulnerable mob gets hit with silver
Wollywoger Jul 12, 2025
b825851
Merge branch 'master' into werewolf-content
Wollywoger Jul 13, 2025
8d5f0da
Merge branch 'master' into werewolf-content
Wollywoger Jul 13, 2025
c4e6b74
Merge branch 'master' into werewolf-content
Wollywoger Sep 11, 2025
05b2117
Merge branch 'master' into werewolf-content
Wollywoger Sep 14, 2025
4d96510
fixes that conflict
Wollywoger Sep 14, 2025
9f2af7b
changes a macro to appeal to linters
Wollywoger Sep 14, 2025
253daf5
Merge branch 'master' of https://www.github.com/wollywoger/maplestati…
Wollywoger Oct 15, 2025
d139464
Merge branch 'master' of https://www.github.com/wollywoger/maplestati…
Wollywoger Oct 15, 2025
c94c93f
updates paths
Wollywoger Oct 15, 2025
e254140
first attempt at updating
Wollywoger Oct 15, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 7 additions & 0 deletions maplestation.dme
Original file line number Diff line number Diff line change
Expand Up @@ -6309,6 +6309,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"
Expand Down Expand Up @@ -6620,6 +6621,7 @@
#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\mana_charge.dm"
#include "maplestation_modules\code\modules\magic\story_spells\mana_sense.dm"
Expand Down Expand Up @@ -6676,6 +6678,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"
Expand Down Expand Up @@ -6721,12 +6724,16 @@
#include "maplestation_modules\code\modules\surgery\bodyparts\cyber_digi.dm"
#include "maplestation_modules\code\modules\surgery\bodyparts\cyber_reskins.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"
#include "maplestation_modules\code\modules\surgery\organs\augments_internal.dm"
#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\uplink\uplink_devices.dm"
Expand Down
1 change: 1 addition & 0 deletions maplestation_modules/code/__DEFINES/DNA.dm
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@
#define SPECIES_REPLOID "reploid"
#define SPECIES_SYNTH "synth"
#define SPECIES_ORNITHID "ornithid"
#define SPECIES_WEREWOLF "werewolf"
4 changes: 4 additions & 0 deletions maplestation_modules/code/__DEFINES/traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// inflicted by witnessing a werewolf activate rage
/datum/mood_event/werewolf_delirium
description = "NOPENOPENOPENOPENOPENOPENOPENOPENOPENOPE!"
mood_change = -5
timeout = 4 MINUTES
143 changes: 143 additions & 0 deletions maplestation_modules/code/modules/magic/story_spells/lycanthropy.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
// 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 = "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!"
invocation_type = INVOCATION_SHOUT
spell_requirements = NONE
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 = "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

/datum/action/cooldown/spell/werewolf_form/Grant(mob/grant_to)
. = ..()
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)
. = ..()
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
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.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..."))
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)

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"
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)
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,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
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
/datum/species/werewolf
name = "werewolf"
id = SPECIES_WEREWOLF
inherent_traits = list(
TRAIT_USES_SKINTONES,
TRAIT_NO_UNDERWEAR,
TRAIT_NO_AUGMENTS,
TRAIT_PUSHIMMUNE,
TRAIT_STUNIMMUNE,
TRAIT_PRIMITIVE,
TRAIT_CAN_STRIP,
TRAIT_CHUNKYFINGERS
)
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
mutant_organs = list(
/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
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,
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/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/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 ..()

/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"

/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 = "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.",
),
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
Loading
Loading