Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
ebe11cd
Bunch of stuff relating to my own story content.
CRITAWAKETS Feb 22, 2025
2b2c882
I am amazed at how errorprone the automatic file ticking can be.
CRITAWAKETS Feb 22, 2025
6cfee8c
Updates to attack chain stuffs
CRITAWAKETS May 29, 2025
251642b
Evil creatura, Death from Beyond
CRITAWAKETS Jul 12, 2025
a56b3e6
fixes stuff i guess
CRITAWAKETS Sep 28, 2025
d76f946
Adds in Hunter's Smoke
CRITAWAKETS Oct 26, 2025
e766739
Fixed up dme, story lazy templates are now more modular
CRITAWAKETS Nov 16, 2025
a771b91
Observing the newly loaded lazy template is a choice now
CRITAWAKETS Nov 16, 2025
614da21
Adds in a kanabo.
CRITAWAKETS Nov 16, 2025
82d695d
Adds in a lot more rapid statuses and spells for them.
CRITAWAKETS Dec 9, 2025
0cac3fa
Fixes some dmi jank with the moon sprite
CRITAWAKETS Dec 9, 2025
ec400b1
Fixes some issues with the shadow knife on drop
CRITAWAKETS Dec 9, 2025
56f2993
Removes the non-functional summoned star gazer.
CRITAWAKETS Dec 14, 2025
cbeec33
Punts everything into new directories
CRITAWAKETS Dec 14, 2025
86ec570
i did a stupid
CRITAWAKETS Dec 14, 2025
b859da4
Spirit Force
CRITAWAKETS Feb 16, 2026
d320500
Dark forging, spirit force is more built out
CRITAWAKETS Feb 24, 2026
c01064f
Adds self-message to clown pockets spell, calls post_created() (#93885)
lelandkemble Nov 12, 2025
3e39a15
Overall improvements
CRITAWAKETS Feb 24, 2026
22bab1a
516.1681 compatibility
CRITAWAKETS Jun 7, 2026
5d707f9
Fixes up all the new and amazing merge conflicts we just got
CRITAWAKETS Jul 5, 2026
25d85d4
Adds in the Ornate Psi-Blade
CRITAWAKETS Aug 16, 2026
97c86e5
Unlock spell
CRITAWAKETS Aug 16, 2026
632fb0e
Adds in the webs spell
CRITAWAKETS Aug 16, 2026
62fd43d
quick feex
CRITAWAKETS Aug 16, 2026
9fff6b4
Repaths crit_equipment to not be prioritized again
CRITAWAKETS Aug 29, 2026
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
10 changes: 9 additions & 1 deletion code/modules/antagonists/heretic/magic/furious_steel.dm
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,14 @@
/// A ref to the status effect surrounding our heretic on activation.
var/datum/status_effect/protective_blades/blade_effect

/// NON-MODULE CHANGE : Made to make this more modular, actually
/// Time between each blade appearing for the protective effect.
var/time_between_blades = 0.66 SECONDS

/// NON-MODULE CHANGE
/// What status effect we apply
var/applied_status = /datum/status_effect/protective_blades

/datum/action/cooldown/spell/pointed/projectile/furious_steel/Grant(mob/grant_to)
. = ..()
if(!owner)
Expand Down Expand Up @@ -67,7 +75,7 @@
QDEL_NULL(blade_effect)

var/mob/living/living_user = on_who
blade_effect = living_user.apply_status_effect(/datum/status_effect/protective_blades, null, projectile_amount, 25, 0.66 SECONDS)
blade_effect = living_user.apply_status_effect(applied_status, null, projectile_amount, 25, time_between_blades) /// NON-MODULE CHANGE
RegisterSignal(blade_effect, COMSIG_QDELETING, PROC_REF(on_status_effect_deleted))

/datum/action/cooldown/spell/pointed/projectile/furious_steel/on_deactivation(mob/on_who, refund_cooldown = TRUE)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
return ..()

/datum/action/cooldown/spell/conjure_item/clown_pockets/post_created(atom/cast_on, atom/created)
cast_on.visible_message(span_notice("[cast_on] pulls out [created]!"))
cast_on.visible_message(span_notice("[cast_on] pulls out [created]!"), span_notice("You pull out [created]!"))

/datum/action/cooldown/spell/conjure_item/clown_pockets/can_cast_spell(feedback = TRUE)
. = ..()
Expand All @@ -76,15 +76,17 @@
/// Prints a funny message, exists so I can override it to print a different message
/datum/action/cooldown/spell/conjure_item/clown_pockets/proc/cast_message(mob/cast_on)
cast_on.visible_message(span_notice("[cast_on] reaches far deeper into [cast_on.p_their()] pockets than you think \
should be possible and starts rummaging around for something."))
should be possible and starts rummaging around for something."), span_notice("You reach further down into your \
pockets than you ever have before and feel around for something."))

/// Longer cooldown variant which is attached to the enchanted clown suit
/datum/action/cooldown/spell/conjure_item/clown_pockets/enchantment
name = "Enchanted Clown Pockets"
cooldown_time = 60 SECONDS

/datum/action/cooldown/spell/conjure_item/clown_pockets/enchantment/cast_message(mob/cast_on)
cast_on.visible_message(span_notice("[cast_on] starts rummaging around in [cast_on.p_their()] comically large pants."))
cast_on.visible_message(span_notice("[cast_on] starts rummaging around in [cast_on.p_their()] comically large pants."), span_notice("You \
start rummaging around in your comically large pants."))

/// Enchanted clown suit
/obj/item/clothing/under/rank/civilian/clown/magic
Expand Down
2 changes: 2 additions & 0 deletions code/modules/spells/spell_types/conjure_item/_conjure_item.dm
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@
if(istype(mob_caster))
mob_caster.put_in_hands(created, del_on_fail = delete_on_failure)

post_created(cast_on, created)

return ..()

/// Instantiates the item we're conjuring and returns it.
Expand Down
27 changes: 24 additions & 3 deletions maplestation.dme
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// DM Environment file for tgstation.dme.

Check failure on line 1 in maplestation.dme

View workflow job for this annotation

GitHub Actions / Run Linters / linters

Ticked File Enforcement

The include at line 6828 is out of order (#include "maplestation_modules\story_content\crit_equipment\code\areas.dm", expected #include "maplestation_modules\story_content\armored_corps\code\clothing\aylie_cloak.dm")
// All manual changes should be made outside the BEGIN_ and END_ blocks.
// New source code should be placed in .dm files: choose File/New --> Code File.
// BEGIN_INTERNALS
Expand Down Expand Up @@ -6808,10 +6808,31 @@
#include "maplestation_modules\code\modules\wiremod\component_printer.dm"
#include "maplestation_modules\code\modules\wiremod\shells.dm"
#ifdef MAPLESTATION_STORY_CONTENT
#include "maplestation_modules\story_content\__common_story\code\story_lazy_template.dm"
#include "maplestation_modules\story_content\__common_story\code\story_rapid_status.dm"
#include "maplestation_modules\story_content\__common_story\code\story_rapid_status_datum.dm"
#include "maplestation_modules\story_content\__common_story\code\rapid_statuses\lunar_judge.dm"
#include "maplestation_modules\story_content\__common_story\code\rapid_statuses\rabid_shadowfiend.dm"
#include "maplestation_modules\story_content\__common_story\code\smites\death_from_beyond.dm"
#include "maplestation_modules\story_content\__common_story\code\spells\shadow_knife.dm"
#include "maplestation_modules\story_content\__common_story\code\spells\shadow_steel.dm"
#include "maplestation_modules\story_content\crit_equipment\code\areas.dm"
#include "maplestation_modules\story_content\crit_equipment\code\heat_blade.dm"
#include "maplestation_modules\story_content\crit_equipment\code\olivia_blade.dm"
#include "maplestation_modules\story_content\crit_equipment\code\pendant.dm"
#include "maplestation_modules\story_content\crit_equipment\code\spells.dm"
#include "maplestation_modules\story_content\crit_equipment\code\library\invitation.dm"
#include "maplestation_modules\story_content\crit_equipment\code\library\lazy_templates.dm"
#include "maplestation_modules\story_content\crit_equipment\code\library\weapons.dm"
#include "maplestation_modules\story_content\crit_equipment\code\rapid_statuses\_cosmos.dm"
#include "maplestation_modules\story_content\crit_equipment\code\rapid_statuses\hacker_they.dm"
#include "maplestation_modules\story_content\crit_equipment\code\rapid_statuses\herald_of_cosmos.dm"
#include "maplestation_modules\story_content\crit_equipment\code\rapid_statuses\prince_of_cosmos.dm"
#include "maplestation_modules\story_content\crit_equipment\code\rapid_statuses\princess_of_cosmos.dm"
#include "maplestation_modules\story_content\crit_equipment\code\rapid_statuses\silvered_huntress.dm"
#include "maplestation_modules\story_content\crit_equipment\code\tevetia_spells\dark_forging.dm"
#include "maplestation_modules\story_content\crit_equipment\code\tevetia_spells\dark_smoke.dm"
#include "maplestation_modules\story_content\armored_corps\code\clothing\aylie_cloak.dm"
#include "maplestation_modules\story_content\armored_corps\code\mecha_weapons\gauss_override.dm"
#include "maplestation_modules\story_content\armored_corps\code\mecha_weapons\laser_override.dm"
#include "maplestation_modules\story_content\armored_corps\code\mecha_weapons\ppc_override.dm"
#include "maplestation_modules\story_content\armored_corps\code\melee\void_blade.dm"
#include "maplestation_modules\story_content\misc\underwear.dm"
#include "maplestation_modules\story_content\post_overlay\code\post_overlay.dm"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
A common folder for story-related code and icons, for things to share or things that can't be easily split off into their own folders.
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/datum/story_rapid_status/lunar_judge
name = "Lunar Judge"

/datum/story_rapid_status/lunar_judge/apply(mob/living/carbon/human/selected)
var/list/datum/action/cooldown/spell/spells_to_grant = list(
/datum/action/cooldown/spell/jaunt/ethereal_jaunt/lunar,
/datum/action/cooldown/spell/summonitem,
)

grant_spell_list(selected, spells_to_grant, TRUE)

var/obj/item/toy/the_moon_itself/new_moon = new(selected)
selected.equip_conspicuous_item(new_moon)

return TRUE

/datum/action/cooldown/spell/jaunt/ethereal_jaunt/lunar
name = "Judge's Jaunt"

background_icon_state = "bg_hive"
overlay_icon_state = "bg_demon_border"
cooldown_time = 12 SECONDS
cooldown_reduction_per_rank = 0 SECONDS
sound = 'sound/magic/cosmic_energy.ogg'
exit_jaunt_sound = 'sound/magic/cosmic_energy.ogg'

/obj/item/toy/the_moon_itself
name = "The Moon"
desc = "Where did you even get this? I swear there's lunar colonies, are those people shrunk or dead?"
icon = 'maplestation_modules/story_content/__common_story/icons/literally_just_the_moon.dmi'
icon_state = "moon"
inhand_icon_state = "minimeteor"
w_class = WEIGHT_CLASS_SMALL

force = 20
throwforce = 99
max_integrity = 500000
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
armor_type = /datum/armor/the_moon_itself

/datum/armor/the_moon_itself
melee = 65
bullet = 70
laser = 90 // highly reflective
energy = 80
consume = 100
bomb = 95
fire = 100
acid = 90

/obj/item/toy/the_moon_itself/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
. = ..()
playsound(src, 'sound/effects/meteorimpact.ogg', 40, TRUE)
for(var/mob/M in urange(10, src))
if(!M.stat && !isAI(M))
shake_camera(M, 3, 1)
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/datum/story_rapid_status/rabid_shadowfiend
name = "Rabid Shadowfiend"

var/list/datum/action/cooldown/spell/spells_to_grant = list(
/datum/action/cooldown/spell/jaunt/shadow_walk,
/datum/action/cooldown/spell/aoe/flicker_lights,
/datum/action/cooldown/spell/conjure_item/ice_knife/shadow_knife,
)

/datum/story_rapid_status/rabid_shadowfiend/apply(mob/living/carbon/human/selected)
grant_spell_list(selected, spells_to_grant, TRUE)

clawify(selected, BODY_ZONE_L_ARM, 10, 15, 20)
clawify(selected, BODY_ZONE_R_ARM, 10, 15, 20)

return TRUE

/datum/story_rapid_status/rabid_shadowfiend/proc/clawify(mob/living/carbon/human/selected, bodyzone, damage_low, damage_high, effectiveness)
var/obj/item/bodypart/arm/selected_arm = selected.get_bodypart(bodyzone) // your fists are now claws
selected_arm.unarmed_attack_verbs = list("slash")
selected_arm.grappled_attack_verb = "lacerate"
selected_arm.unarmed_attack_effect = ATTACK_EFFECT_CLAW
selected_arm.unarmed_attack_sound = 'sound/weapons/slash.ogg'
selected_arm.unarmed_miss_sound = 'sound/weapons/slashmiss.ogg'
selected_arm.unarmed_damage_low = damage_low
selected_arm.unarmed_damage_high = damage_high
selected_arm.unarmed_effectiveness = effectiveness
selected_arm.appendage_noun = "clawed hand"


/datum/story_rapid_status/rabid_shadowfiend/strong
name = "Rabid Shadowfiend (Strong)"

spells_to_grant = list(
/datum/action/cooldown/spell/jaunt/shadow_walk,
/datum/action/cooldown/spell/aoe/flicker_lights,
/datum/action/cooldown/spell/conjure_item/ice_knife/shadow_knife,
/datum/action/cooldown/spell/pointed/projectile/furious_steel/shadow_steel,
)

Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
/// Slashes up the target like bloodless, but SLOWLY
/datum/smite/death_from_beyond
name = "Death from Beyond"
var/strength
var/how_many = 1

/datum/smite/death_from_beyond/configure(client/user)
var/static/list/knowledge_forbidenness = list("Low", "Moderate", "High", "DEATH")
strength = input(user, "How much do you hate this person?") in knowledge_forbidenness

/datum/smite/death_from_beyond/effect(client/user, mob/living/target)
. = ..()
if(!iscarbon(target))
to_chat(user, span_warning("This must be used on a carbon mob."), confidential = TRUE)
return
var/mob/living/carbon/carbon_target = target

switch(strength)
if("Low")
how_many = 3
if("Moderate")
how_many = 4
if("High")
how_many = 5
if("DEATH")
how_many = 10

to_chat(target, span_boldwarning("Cuts rapidly appear all over you as entities from beyond start attacking you!"))

ultra_murder(carbon_target)

/datum/smite/death_from_beyond/proc/ultra_murder(mob/living/carbon/carbon_target)
var/picked_severity
switch(strength)
if("Low")
picked_severity = pick_weight(alist(
WOUND_SEVERITY_MODERATE = 2,
WOUND_SEVERITY_SEVERE = 1,
))
if("Moderate")
picked_severity = pick_weight(alist(
WOUND_SEVERITY_MODERATE = 1,
WOUND_SEVERITY_SEVERE = 2,
WOUND_SEVERITY_CRITICAL = 1,
))
if("High")
picked_severity = pick_weight(alist(
WOUND_SEVERITY_MODERATE = 1,
WOUND_SEVERITY_SEVERE = 1,
WOUND_SEVERITY_CRITICAL = 3,
))
if("DEATH")
picked_severity = WOUND_SEVERITY_CRITICAL

carbon_target.cause_wound_of_type_and_severity(WOUND_SLASH, null, picked_severity)
how_many--
if(how_many > 0)
addtimer(CALLBACK(src, PROC_REF(ultra_murder), carbon_target), rand(0.5 SECONDS, 1 SECONDS), TIMER_DELETE_ME)
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/datum/action/cooldown/spell/conjure_item/ice_knife/shadow_knife
name = "Shadow Knife"
desc = "Summon a temporary knife from pure shadow."
background_icon_state = "bg_cult"
overlay_icon_state = "bg_cult_border"
mana_cost = 0
item_type = /obj/item/knife/combat/ice/shadow

cooldown_time = 90 SECONDS
invocation = "Tai'loda."

/obj/item/knife/combat/ice/shadow
name = "shadow knife"
color = "#000000"
desc = "A knife made of concentrated shadow. It won't exist forever. Nothing does."
force = 15
throwforce = 15

/obj/item/knife/combat/ice/shadow/Initialize(mapload)
. = ..()
expire_time = world.time + 40 SECONDS
RegisterSignal(src, COMSIG_ITEM_DROPPED, PROC_REF(on_drop))

// Expires on drop unlike the regular knife.
/obj/item/knife/combat/ice/shadow/proc/on_drop(atom/source)
expire()
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
/datum/action/cooldown/spell/pointed/projectile/furious_steel/shadow_steel
name = "Shadow Steel"
desc = "Summon two shadow blades which orbit you. \
While orbiting you, these blades will protect you from from attacks, but will be consumed on use. \
Additionally, you can click to fire the blades at a target, dealing damage and causing bleeding."
background_icon_state = "bg_cult"
overlay_icon_state = "bg_cult_border"

invocation = span_notice("<b>%CASTER</b> holds out their arm forwards, commanding a blade to fire.")
invocation_self_message = span_notice("You hold your arm forward.")
invocation_type = INVOCATION_EMOTE

active_msg = "You summon forth two blades from darkness."
deactive_msg = "You conceal your black blades."
cast_range = 20
projectile_type = /obj/projectile/shadow_steel
projectile_amount = 2

time_between_blades = 1 SECONDS

applied_status = /datum/status_effect/protective_blades/shadow

/obj/projectile/shadow_steel
name = "blade"
icon = 'icons/obj/service/kitchen.dmi'
icon_state = "knife"
speed = 2
damage = 15
sharpness = SHARP_EDGED
wound_bonus = 20
pass_flags = PASSTABLE | PASSFLAPS

/obj/projectile/shadow_steel/Initialize(mapload)
. = ..()
add_filter("knife_color", 1, list("type" = "color", "color" = "#000000"))
add_filter("knife", 2, list("type" = "outline", "color" = "#640000", "size" = 1))

/obj/projectile/shadow_steel/prehit_pierce(atom/hit)
if(isliving(hit) && isliving(firer))
var/mob/living/caster = firer
var/mob/living/victim = hit
if(caster == victim)
return PROJECTILE_PIERCE_PHASE

if(caster.mind) // probably not going to be used in this one but whatever
var/datum/antagonist/heretic_monster/monster = victim.mind?.has_antag_datum(/datum/antagonist/heretic_monster)
if(monster?.master == caster.mind)
return PROJECTILE_PIERCE_PHASE

if(victim.can_block_magic(MAGIC_RESISTANCE))
visible_message(span_warning("[src] drops to the ground and dissolves on contact [victim]!"))
return PROJECTILE_DELETE_WITHOUT_HITTING

return ..()

/datum/status_effect/protective_blades/shadow

/// overriden to make it use shadow blades
/datum/status_effect/protective_blades/shadow/create_blade()
if(QDELETED(src) || QDELETED(owner))
return

var/obj/effect/floating_blade/shadow/blade = new(get_turf(owner))
blades += blade
blade.orbit(owner, blade_orbit_radius)
RegisterSignal(blade, COMSIG_QDELETING, PROC_REF(remove_blade))
playsound(get_turf(owner), 'sound/items/unsheath.ogg', 33, TRUE)

/obj/effect/floating_blade/shadow
name = "shadow knife"
glow_color = "#640000"

/obj/effect/floating_blade/shadow/Initialize(mapload)
. = ..()
add_filter("knife_color", 1, list("type" = "color", "color" = "#000000"))
Loading
Loading