Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
b419f7f
very early WIP
dwasint Jul 18, 2026
de819e0
adds spell vairents of the essence spells for the book
dwasint Jul 19, 2026
cade4d2
removes old learnspell, adds spell modifiers base system
dwasint Jul 19, 2026
ec8f9ac
some new spells, and icons
dwasint Jul 19, 2026
78f2960
adds smoke burst and arc spells
dwasint Jul 19, 2026
ce8dd47
adds in spell dismember impact effects, arcyne strike and some new ar…
dwasint Jul 19, 2026
bc664e1
adds a form spell create fire
dwasint Jul 19, 2026
5a3c990
more spells
dwasint Jul 19, 2026
5e4396c
adds new earth and lightning spells reworks lightning spells
dwasint Jul 20, 2026
27bdabd
adds in new summon spell type
dwasint Jul 20, 2026
18a928b
adds in primordials 1 for fire air and water uses summoning technique…
dwasint Jul 20, 2026
94fa6e0
adds new spellsword and spellfist spells
dwasint Jul 20, 2026
f66e56d
Update _base.dm
dwasint Jul 20, 2026
3568d71
redoes how unfinished spellbooks are done allowing the base modificat…
dwasint Jul 20, 2026
005a768
Update unfiinshed_spellbook.dm
dwasint Jul 20, 2026
af77f1a
adds in recipe book for spellcraft, fixes being unable to open close …
dwasint Jul 21, 2026
b22cdde
earth
dwasint Jul 21, 2026
d73151a
Merge remote-tracking branch 'upstream/main' into magic-2
dwasint Jul 21, 2026
de8fc60
more stuff
dwasint Jul 21, 2026
c886a64
adds in spell_form and technique to mana cost reduction, adds in supp…
dwasint Jul 21, 2026
7cfc6b0
Update session.dm
dwasint Jul 21, 2026
9c48140
fixes and adds an addspell hook
dwasint Jul 22, 2026
a2effd5
some tweaks to move spells over to the mastery system.
dwasint Jul 22, 2026
b32db08
whoops
dwasint Jul 22, 2026
77c6194
adds in adjust_form and adjust_technique
dwasint Jul 22, 2026
8c5eeb5
adds in a sorc trait to prevent getting spells from books
dwasint Jul 22, 2026
a28ab17
makes court mage a mage using new system
dwasint Jul 22, 2026
e20e3a4
spellsword redone
dwasint Jul 22, 2026
c0859e9
whoops
dwasint Jul 22, 2026
b7cd3dd
they get an undead book but the spells in it don't work
dwasint Jul 22, 2026
af46799
Update emote.dm
dwasint Jul 22, 2026
385aabe
death of attunements on spells no more attuned strength, no more spel…
dwasint Jul 22, 2026
e9e41cf
Update _base.dm
dwasint Jul 22, 2026
35f14e8
removes these comments as they aren't really correct anymore
dwasint Jul 22, 2026
2662e91
these are also incorrect now
dwasint Jul 22, 2026
c8c205c
Update arcane_momentum.dm
dwasint Jul 22, 2026
6909c31
adds recharge ritual
dwasint Jul 22, 2026
14d70a0
adds starter tome types to give to jobs
dwasint Jul 22, 2026
e1a0d73
Update spell.dm
dwasint Jul 22, 2026
0b60a83
dead spell now
dwasint Jul 22, 2026
8390103
Update spell.dm
dwasint Jul 22, 2026
858ede1
Update arcane_momentum.dm
dwasint Jul 22, 2026
aca914f
Merge remote-tracking branch 'upstream/main' into magic-2
dwasint Jul 22, 2026
4563548
Update spirit_possession.dm
dwasint Jul 22, 2026
668dbd8
Update spirit_possession.dm
dwasint Jul 22, 2026
e1c37c3
spellbook repath
dwasint Jul 22, 2026
5f48f22
makes spellbooks drop spells on book close
dwasint Jul 22, 2026
7603bd3
first linter pass
dwasint Jul 23, 2026
665be57
adds names to these
dwasint Jul 23, 2026
af40f0f
Update unit_test.dm
dwasint Jul 23, 2026
9809161
fixes, and lets recoil work after 0.1 seconds thus letting the spell …
dwasint Jul 23, 2026
cdc4740
linter
dwasint Jul 23, 2026
24603b2
Update unit_test.dm
dwasint Jul 23, 2026
7a05b9c
Update vanderlin_mountain.dmm
dwasint Jul 23, 2026
9c666d8
added the ability to add spell modifiers to items, for future plans
dwasint Jul 23, 2026
c2b91e3
Merge branch 'main' into magic-2
dwasint Jul 25, 2026
39cd47e
Update definitions.dm
dwasint Jul 25, 2026
a55e5e1
Merge remote-tracking branch 'upstream/main' into magic-2
dwasint Jul 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions _maps/map_files/vanderlin/vanderlin_mountain.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -3368,7 +3368,7 @@
/turf/open/floor/cobble,
/area/indoors/mountains/anvil/upperkeep)
"aqq" = (
/obj/item/book/granter/spellbook/horrible,
/obj/item/spellbook/horrible,
/turf/open/floor/herringbone,
/area/indoors/mountains/anvil/upperkeep)
"aqr" = (
Expand Down Expand Up @@ -6008,7 +6008,7 @@
/obj/structure/fluff/walldeco/painting/castle{
pixel_y = 32
},
/obj/item/book/granter/spellbook/adept,
/obj/item/spellbook/adept,
/turf/open/floor/herringbone,
/area/indoors/mountains/anvil/upperkeep)
"aCs" = (
Expand Down Expand Up @@ -13652,7 +13652,7 @@
/area/indoors/mountains/anvil/upperkeep)
"rjA" = (
/obj/effect/decal/cleanable/ritual_rune/arcyne/summoning/adv,
/obj/effect/decal/cleanable/ritual_rune/arcyne/attunement,
/obj/effect/decal/cleanable/ritual_rune/arcyne/recharge,
/obj/item/riddleofsteel,
/mob/living/simple_animal/hostile/retaliate/voiddragon/red,
/turf/open/floor/plasteel/maniac,
Expand Down
5 changes: 5 additions & 0 deletions code/__DEFINES/ai/_ai.dm
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,9 @@
#define BB_ENERGY_REGEN_RATE "energy_regen"
#define BB_BASIC_MOB_STOP_FLEEING "bb_stop_fleeing"

///Blackboard key for a whitelist typecache of "things we can target while trying to move"
#define BB_OBSTACLE_TARGETING_WHITELIST "BB_targeting_whitelist"

#define BB_DRAGGER_HUNTING_COOLDOWN "dragger_hunting_cooldown"
#define BB_DRAGGER_TELEPORT_COOLDOWN "dragger_teleport_cooldown"
#define BB_DRAGGER_DRAG_COOLDOWN "dragger_drag_cooldown"
Expand Down Expand Up @@ -207,6 +210,8 @@
#define BB_CAT_GROOM_CHANCE "cat_groom"
#define BB_CAT_RACISM "cat_racist"

#define BB_FORCED_ATTACK_ZONE "bb_forced_attack_zone"

/// key that holds the target we will battle over our turf
#define BB_TRESSPASSER_TARGET "tresspasser_target"
/// key that holds angry meows
Expand Down
63 changes: 0 additions & 63 deletions code/__DEFINES/attunement.dm
Original file line number Diff line number Diff line change
Expand Up @@ -7,71 +7,8 @@
to_convert = (-to_convert+1); \
} \
} \
// Elements

#define MAGIC_ELEMENT_FIRE /datum/attunement/fire
#define MAGIC_ELEMENT_ICE /datum/attunement/ice
#define MAGIC_ELEMENT_BLOOD /datum/attunement/blood

#define MAGIC_ELEMENT_EARTH /datum/attunement/earth
#define MAGIC_ELEMENT_WIND /datum/attunement/aeromancy

#define MAGIC_ELEMENT_LIFE /datum/attunement/life
#define MAGIC_ELEMENT_DEATH /datum/attunement/death
#define MAGIC_ELEMENT_LIGHT /datum/attunement/light

#define MAGIC_ELEMENT_ELECTRIC /datum/attunement/electric
// When other elements are used, add them here

// Alignments
#define MAGIC_ALIGNMENT_NORMAL "Follower of Noc"
#define MAGIC_ALIGNMENT_NECROMANCER "Child of Zizo"

/// Returns the raw attunement correspondance between args 1 and 3. Its fine if both are negative, since thats a positive correspondance.
/// The direction and intensity of the correspondance should correspond to altered casting cost - intense positive correspondance should lower
/// casting cost by a large amount-but a weak negative correspondance should increase casting cost by a small amount.
#define GET_RAW_ATTUNEMENT_CORRESPONDANCE(attunements, intensity, attunement) (attunements[attunement] * intensity)

/// Compares the two lists of attunements and combines the raw correspondance.
/proc/get_total_correspondance(list/attunements, list/other_attunements)
. = 0

for (var/datum/attunement/iterated_attunement as anything in attunements)
var/intensity = (other_attunements?[iterated_attunement]) || 1
. += GET_RAW_ATTUNEMENT_CORRESPONDANCE(attunements, intensity, iterated_attunement)

/// Returns the "mult" value using the correspondance between attunements and intensity. This value should be multiplied against
/// the mana cost of an action to determine how much "effective" mana a certain mana source can provide to it.
/// Should NEVER return anything negative, ever. The minimum is 0.
/proc/get_total_attunement_mult(list/mana_attunements, list/user_attunements, atom/caster)
. = 1
var/total_correspondance = get_total_correspondance(mana_attunements, user_attunements)

if (total_correspondance != 0)
. = convert_to_attunement_mult(total_correspondance)

var/bias_amount = get_total_attunement_bias(caster, mana_attunements)
if (bias_amount != 0)
. *= convert_to_attunement_mult(bias_amount)

/// attunements should only ever be attunements of a mana source, not mana user.
/proc/get_total_attunement_bias(atom/caster, list/attunements)
. = 0
var/total_attunement = 0
for (var/datum/attunement/iterated_attunement as anything in attunements)
total_attunement += abs(attunements[iterated_attunement])
if (total_attunement == 0)
return
for (var/datum/attunement/iterated_attunement as anything in attunements)
if (attunements[iterated_attunement] == 0)
continue
var/datum/attunement/singleton_instance = GLOB.magic_attunements[iterated_attunement]
. += singleton_instance.get_bias_mult_increment(caster) * ((attunements[iterated_attunement])/total_attunement) //access singleton

/proc/convert_to_attunement_mult(amount)
if (amount != 0)
if (amount > 0)
amount = (1/(1+amount))
else
amount = (-amount+1)
return amount
1 change: 1 addition & 0 deletions code/__DEFINES/colors.dm
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@
#define CLOTHING_WET "#afafaf"

#define GLOW_COLOR_BARDIC "#E8837C" // Warm rose, for bardic songs and cadences
#define GLOW_COLOR_ICE "#87CEEB" // Cyan

#define CM_COLOR_SAT_MIN 0.6
#define CM_COLOR_SAT_MAX 0.7
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@
#define COMPONENT_CANCEL_ATTACK_CHAIN (1<<0)
///Skips the specific attack step, continuing for the next one to happen.
#define COMPONENT_SKIP_ATTACK (1<<1)

#define COMPONENT_ITEM_NO_DEFENSE (1<<2)
#define COMSIG_ATOM_GET_RESISTANCE "atom_get_resistance"
#define COMSIG_ATOM_GET_MAX_RESISTANCE "atom_get_max_resistance"
#define COMSIG_ATOM_GET_STATUS_MOD "atom_get_status_mod"
Expand Down
9 changes: 9 additions & 0 deletions code/__DEFINES/dcs/signals/signals_spell.dm
Original file line number Diff line number Diff line change
Expand Up @@ -100,3 +100,12 @@
#define COMPONENT_ITEM_CHARGED (1 << 0)
/// Return if the item had a negative side effect occur while recharging
#define COMPONENT_ITEM_BURNT_OUT (1 << 1)

#define COMSIG_SPELL_REQUEST_MODIFIERS "spell_request_modifiers"

#define COMSIG_MASTERY_CAST "mastery_cast"

#define COMSIG_MASTERY_ADD_SPELLS "add_mastery_spells"
#define COMSIG_MASTERY_REMOVE_SPELLS "remove_mastery_spells"
#define COMSIG_MASTERY_CHECK_PARENT "mastery_parent_status"
#define COMPONENT_MASTERY_CANCEL (1<<0)
138 changes: 104 additions & 34 deletions code/__DEFINES/magic.dm
Original file line number Diff line number Diff line change
@@ -1,32 +1,3 @@
// Magic schools

/// Unset / default / "not actually magic" school.
#define SCHOOL_UNSET "unset"

// GOOD SCHOOLS (allowed by honorbound gods, some of these you can get on station)
/// Holy school (chaplain magic)
#define SCHOOL_HOLY "holy"
/// Mime... school? Mime magic. It counts
#define SCHOOL_MIME "mime"
/// Restoration school, which is mostly healing stuff
#define SCHOOL_RESTORATION "restoration"

// NEUTRAL SPELLS (punished by honorbound gods if you get caught using it)
/// Evocation school, usually involves killing or destroy stuff, usually out of thin air
#define SCHOOL_EVOCATION "evocation"
/// School of transforming stuff into other stuff
#define SCHOOL_TRANSMUTATION "transmutation"
/// School of transolcation, usually movement spells
#define SCHOOL_TRANSLOCATION "translocation"
/// Conjuration spells summon items / mobs / etc somehow
#define SCHOOL_CONJURATION "conjuration"

// EVIL SPELLS (instant smite + banishment)
/// Necromancy spells, usually involves soul / evil / bad stuff
#define SCHOOL_NECROMANCY "necromancy"
/// Other forbidden magics, such as heretic spells
#define SCHOOL_FORBIDDEN "forbidden"

#define NO_MANA_POOL (1<<0)
#define MANA_POOL_FULL (1<<1)

Expand Down Expand Up @@ -188,6 +159,10 @@ DEFINE_BITFIELD(antimagic_flags, list(
#define SPELL_CASTABLE_WITHOUT_INVOCATION (1 << 6)
/// If the spell requires the user to not move during casting
#define SPELL_REQUIRES_NO_MOVE (1 << 7)
/// Whether the spell requires the target to be on the same Z-level as the caster.
#define SPELL_REQUIRES_SAME_Z (1 << 8)
/// Whether the spell can be cast while buckled to a living mount (on horseback).
#define SPELL_CASTABLE_WHILE_MOUNTED (1 << 9)

DEFINE_BITFIELD(spell_requirements, list(
"SPELL_CASTABLE_WITHOUT_INVOCATION" = SPELL_CASTABLE_WITHOUT_INVOCATION,
Expand All @@ -198,6 +173,7 @@ DEFINE_BITFIELD(spell_requirements, list(
"SPELL_REQUIRES_NO_MOVE" = SPELL_REQUIRES_NO_MOVE,
"SPELL_REQUIRES_STATION" = SPELL_REQUIRES_STATION,
"SPELL_REQUIRES_WIZARD_GARB" = SPELL_REQUIRES_WIZARD_GARB,
"SPELL_REQUIRES_SAME_Z" = SPELL_REQUIRES_SAME_Z,
))

/**
Expand Down Expand Up @@ -225,10 +201,104 @@ DEFINE_BITFIELD(spell_requirements, list(

/// Diceroll requirement at each arcane skill tier for aimed-fire
/// Lower = easier to hit the intended target (roll-under system)
#define SPELLOBJECT_AIM_REQ_NONE 6
#define SPELLOBJECT_AIM_REQ_NOVICE 9
#define SPELLOBJECT_AIM_REQ_NONE 6
#define SPELLOBJECT_AIM_REQ_NOVICE 9
#define SPELLOBJECT_AIM_REQ_APPRENTICE 11
#define SPELLOBJECT_AIM_REQ_JOURNEYMAN 13
#define SPELLOBJECT_AIM_REQ_EXPERT 15
#define SPELLOBJECT_AIM_REQ_MASTER 16
#define SPELLOBJECT_AIM_REQ_LEGENDARY 17
#define SPELLOBJECT_AIM_REQ_EXPERT 15
#define SPELLOBJECT_AIM_REQ_MASTER 16
#define SPELLOBJECT_AIM_REQ_LEGENDARY 17

#define TECHNIQUE_DESTRUCTION "Destruction"
#define TECHNIQUE_CREATION "Creation"
#define TECHNIQUE_SUMMONING "Summoning"
#define TECHNIQUE_RESTORATION "Restoration"
#define TECHNIQUE_ALTERATION "Alteration"
#define TECHNIQUE_ILLUSION "Illusion"
#define TECHNIQUE_IMBUE "Imbue"

#define FORM_FIRE "Fire"
#define FORM_ICE "Ice"
#define FORM_LIGHTNING "Lightning"
#define FORM_EARTH "Earth"
#define FORM_ARCANE "Arcane"
#define FORM_DEATH "Death"
#define FORM_LIFE "Life"
#define FORM_AIR "Aeromancy"
#define FORM_WATER "Hydromancy"

#define MASTERY_RANK_NOVICE 0
#define MASTERY_RANK_ADEPT 2
#define MASTERY_RANK_EXPERT 4
#define MASTERY_RANK_MASTER 6

GLOBAL_LIST_INIT(mastery_rank_names, list(
"[MASTERY_RANK_NOVICE]" = "Novice",
"[MASTERY_RANK_ADEPT]" = "Adept",
"[MASTERY_RANK_EXPERT]" = "Expert",
"[MASTERY_RANK_MASTER]" = "Master",
))

GLOBAL_LIST_INIT(form_colors, list(
FORM_FIRE = "#FF4500",
FORM_ICE = "#00BFFF",
FORM_LIGHTNING = "#FFD700",
FORM_WATER = "#00158b",
FORM_LIFE = "#32CD32",
FORM_DEATH = "#800080",
FORM_EARTH = "#8B4513",
FORM_AIR = "#C0C0C0",
FORM_ARCANE = "#9932CC"
))

GLOBAL_LIST_INIT(all_techniques, list(
TECHNIQUE_DESTRUCTION,
TECHNIQUE_CREATION,
TECHNIQUE_SUMMONING,
TECHNIQUE_RESTORATION,
TECHNIQUE_ALTERATION,
TECHNIQUE_ILLUSION,
TECHNIQUE_IMBUE,
))

GLOBAL_LIST_INIT(all_forms, list(
FORM_FIRE,
FORM_ICE,
FORM_LIGHTNING,
FORM_EARTH,
FORM_ARCANE,
FORM_LIFE,
FORM_DEATH,
FORM_AIR,
FORM_WATER,
))

#define CHARGETIME_POKE 0.5 SECONDS // Staple poke spells
#define CHARGETIME_MINOR 1 SECONDS // Minor utility / support spells
#define CHARGETIME_MAJOR 1.5 SECONDS // Major projectiles
#define CHARGETIME_HEAVY 2 SECONDS // Heavy AOE / ultimates
#define CHARGETIME_BARRAGE 3 SECONDS // Barrage / Channeled spells

#define CHARGING_SLOWDOWN_NONE 0
#define CHARGING_SLOWDOWN_SMALL 1
#define CHARGING_SLOWDOWN_MEDIUM 2
#define CHARGING_SLOWDOWN_HEAVY 3

#define SPELL_RANGE_PROJECTILE 10 // Standard projectile travel distance and projectile spell cast range
#define SPELL_RANGE_GROUND 7 // Standard ground-targeted / AOE spell cast range
#define SPELL_RANGE_TWO_SCREENS 14 // Two screens away for very very special spells
#define SPELL_RANGE_AURA 4 // For 'warcry' type miracles or AOE BUFFS originating on the caster
#define SPELL_RANGE_ADJACENT 1 // Self explanatory

#define SPELL_IMPACT_NONE 0
#define SPELL_IMPACT_LOW 1
#define SPELL_IMPACT_MEDIUM 2
#define SPELL_IMPACT_HIGH 3

#define CONJURE_RECOIL_LIGHT 0
#define CONJURE_RECOIL_PARTIAL 1
#define CONJURE_RECOIL_FULL 2

#define SPELLBOOK_THEME_BASELINE_QUALITY 6
#define SPELLBOOK_THEME_BASELINE_FORM_POINTS 7
#define SPELLBOOK_THEME_BASELINE_TECHNIQUE_POINTS 3
3 changes: 3 additions & 0 deletions code/__DEFINES/mob_timers.dm
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,6 @@
// I've separated then here for clarity's sake.

#define MT_PAINSTUN "painstun"

#define LIGHTNING_ADAPTATION_COOLDOWN 15 SECONDS
#define MT_LIGHTNING_ADAPTATION "lightning_adaptation"
3 changes: 2 additions & 1 deletion code/__DEFINES/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,8 @@
#define SHOCK_ILLUSION (1 << 2)
///The shock doesn't stun.
#define SHOCK_NOSTUN (1 << 3)

///we only show a visual
#define SHOCK_VISUAL_ONLY (1<<4)
#define INCORPOREAL_MOVE_BASIC 1
#define INCORPOREAL_MOVE_SHADOW 2 // leaves a trail of shadows
#define INCORPOREAL_MOVE_JAUNT 3 // is blocked by holy water/salt
Expand Down
2 changes: 2 additions & 0 deletions code/__DEFINES/movespeed_modification.dm
Original file line number Diff line number Diff line change
Expand Up @@ -118,3 +118,5 @@

#define MOVESPEED_ID_CARDIAC_ARREST "cardiac"
#define MOVESPEED_ID_SHOCK "shock"

#define MOVESPEED_ID_LIGHTNINGSTRUCK "LIGHTNINGSTRUCK"
8 changes: 8 additions & 0 deletions code/__DEFINES/traits/definitions.dm
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_BLOODDRINKER "Blood Drinker" // Can drink blood without vomiting
#define TRAIT_FORAGER "Expert Forager"
#define TRAIT_TINY "Tiny"
#define TRAIT_BIGGUY "Big Guy"
#define TRAIT_DREAM_WATCHER "Noc Blessed" //Unique Trait of the Dream Watcher Town Elder Class, they have a chance to know about antags or gods influences.
#define TRAIT_HOLLOWBONES "Hollow Bones"
#define TRAIT_AMAZING_BACK "Light Load"
Expand Down Expand Up @@ -636,3 +637,10 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
// genetic traits
#define TRAIT_ANIMAL_NATURAL_ARMOR "natural_armor"
#define TRAIT_ANIMAL_PRODUCTIVE "trait_productive"

#define TRAIT_CONJURED_SUMMON "conjured_summon"
#define TRAIT_CONJURE_BACKLASH "conjure_backlash"

#define TRAIT_EMPOWERED_UNARMED "empowered_unarmed"
#define TRAIT_SORCERER "Unattuned"

16 changes: 8 additions & 8 deletions code/_globalvars/special_traits/traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -180,10 +180,10 @@
allowed_jobs = list(/datum/job/magician, /datum/job/mageapprentice)

/datum/special_trait/darkmagic/on_apply(mob/living/carbon/human/character, silent)
character.add_spell(/datum/action/cooldown/spell/eyebite, silent = TRUE)
character.add_spell(/datum/action/cooldown/spell/projectile/sickness, silent = TRUE)
character.add_spell(/datum/action/cooldown/spell/conjure/raise_lesser_undead/necromancer, silent = TRUE)
character.add_spell(/datum/action/cooldown/spell/gravemark, silent = TRUE)
character.add_spell(/datum/action/cooldown/spell/eyebite, silent = TRUE, mastery_spell = TRUE)
character.add_spell(/datum/action/cooldown/spell/projectile/sickness, silent = TRUE, mastery_spell = TRUE)
character.add_spell(/datum/action/cooldown/spell/conjure_summon/raise_lesser_undead/necromancer, silent = TRUE, mastery_spell = TRUE)
character.add_spell(/datum/action/cooldown/spell/gravemark, silent = TRUE, mastery_spell = TRUE)

/datum/special_trait/too_smart
name = "Too smart"
Expand Down Expand Up @@ -826,12 +826,12 @@

/datum/special_trait/thinker/on_apply(mob/living/carbon/human/character, silent)
character.attributes?.add_sheet(/datum/attribute_holder/sheet/job/thinker)
character.adjust_spell_points(14) //Less points than Court Mage, why do Court mage get 17 points? what even?
character.add_spell(/datum/action/cooldown/spell/undirected/touch/prestidigitation, silent = TRUE)
character.generate_random_attunements(rand(4,6))
character.adjust_technique_mastery_points(3)
character.adjust_form_mastery_points(8)
character.add_spell(/datum/action/cooldown/spell/undirected/touch/prestidigitation, silent = TRUE, mastery_spell = TRUE)
character.mana_pool.set_intrinsic_recharge(MANA_ALL_LEYLINES)
character.mana_pool.adjust_mana(100) //I don't know, they don't spawn with their full mana bar, so we give them a bit more mana at the start.
new /obj/item/book/granter/spellbook/master(get_turf(character))
new /obj/item/spellbook/master(get_turf(character))

/datum/special_trait/skeleton
name = "Skeleton"
Expand Down
5 changes: 5 additions & 0 deletions code/_onclick/click.dm
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,11 @@
if(next_move > world.time) // in the year 2000...
return

if(isliving(src))
var/mob/living/clicker = src
if(clicker.is_swinging())
return

if(LAZYACCESS(modifiers, RIGHT_CLICK))
if(LAZYACCESS(modifiers, SHIFT_CLICKED))
ShiftRightClickOn(clicked_atom, modifiers)
Expand Down
Loading
Loading