Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
40 changes: 20 additions & 20 deletions code/_globalvars/special_traits/traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -76,13 +76,13 @@
ADD_TRAIT(character, TRAIT_NOMOOD, "[type]")
ADD_TRAIT(character, TRAIT_NOSTINK, "[type]")

/datum/special_trait/latentmagic
name = "Latent Magic"
greet_text = span_notice("I have innate magical potential.")
weight = 25
// /datum/special_trait/latentmagic
// name = "Latent Magic"
// greet_text = span_notice("I have innate magical potential.")
// weight = 25

/datum/special_trait/latentmagic/on_apply(mob/living/carbon/human/character, silent)
character.adjust_skillrank(/datum/skill/magic/arcane, 1, TRUE)
// /datum/special_trait/latentmagic/on_apply(mob/living/carbon/human/character, silent)
// character.adjust_skillrank(/datum/skill/magic/arcane, 1, TRUE)

/datum/special_trait/value
name = "Coin Counter"
Expand Down Expand Up @@ -565,20 +565,20 @@
allowed_jobs = list(/datum/job/lord)
weight = 25 //Should be fine.

/datum/special_trait/thinker/on_apply(mob/living/carbon/human/character, silent)
character.change_stat("strength", -3)
character.change_stat("intelligence", 6)
character.change_stat("constitution", -1)
character.change_stat("endurance", -1)
character.adjust_skillrank(/datum/skill/magic/arcane, 5, TRUE)
character.set_skillrank(/datum/skill/combat/swords, 2, TRUE) //Average only.
character.mind.adjust_spellpoints(14) //Less points than Court Mage, why do Court mage get 17 points? what even?
character.mind.AddSpell(new /obj/effect/proc_holder/spell/self/learnspell)
character.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/touch/prestidigitation)
character.generate_random_attunements(rand(4,6))
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))
// /datum/special_trait/thinker/on_apply(mob/living/carbon/human/character, silent)
// character.change_stat("strength", -3)
// character.change_stat("intelligence", 6)
// character.change_stat("constitution", -1)
// character.change_stat("endurance", -1)
// character.adjust_skillrank(/datum/skill/magic/arcane, 5, TRUE)
// character.set_skillrank(/datum/skill/combat/swords, 2, TRUE) //Average only.
// character.mind.adjust_spellpoints(14) //Less points than Court Mage, why do Court mage get 17 points? what even?
// character.mind.AddSpell(new /obj/effect/proc_holder/spell/self/learnspell)
// character.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/touch/prestidigitation)
// character.generate_random_attunements(rand(4,6))
// 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))

/datum/special_trait/skeleton
name = "Skeleton"
Expand Down
19 changes: 0 additions & 19 deletions code/_onclick/hud/screen_objects.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1791,25 +1791,6 @@
icon = 'icons/mob/rogueheat.dmi'
screen_loc = mana_loc

/atom/movable/screen/mana/extra_info(mob/user)
var/info = ""
for(var/datum/attunement/attunement as anything in user?.mana_pool.attunements)
var/value = user.mana_pool.attunements[attunement]
if(!value)
continue

switch(value)
if(0.01 to 0.4)
info += "<br> Minor [initial(attunement.name)] Attunment"
if(0.41 to 0.7)
info += "<br> Moderate [initial(attunement.name)] Attunment"
if(0.71 to 1.2)
info += "<br> Major [initial(attunement.name)] Attunment"
if(1.21 to INFINITY)
info += "<br> Apex [initial(attunement.name)] Attunment"

return info

/atom/movable/screen/stamina
name = "stamina"
icon_state = "fat100"
Expand Down
23 changes: 2 additions & 21 deletions code/datums/components/use_mana.dm
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@
var/datum/callback/get_user_callback
var/datum/callback/get_mana_required_callback

var/list/datum/attunement/attunements

var/pre_use_check_with_feedback_comsig
var/pre_use_check_comsig
var/post_use_comsig
Expand All @@ -31,7 +29,6 @@
pre_use_check_comsig,
post_use_comsig,
datum/callback/mana_required,
list/datum/attunement/attunements,
)
. = ..()

Expand All @@ -50,7 +47,6 @@
else if (isnum(mana_required))
src.mana_required = mana_required

src.attunements = attunements
src.pre_use_check_with_feedback_comsig = pre_use_check_with_feedback_comsig
src.post_use_comsig = post_use_comsig

Expand All @@ -68,7 +64,7 @@
UnregisterSignal(parent, post_use_comsig)

// TODO: Do I need the vararg?
/// Should return the numerical value of mana needed to use whatever it is we're using. Unaffected by attunements.
/// Should return the numerical value of mana needed to use whatever it is we're using.
/datum/component/uses_mana/proc/get_mana_required(atom/caster, ...) // Get the mana required to cast the spell.
if (!isnull(get_mana_required_callback))
return get_mana_required_callback?.Invoke(arglist(args))
Expand Down Expand Up @@ -105,7 +101,7 @@


for (var/datum/mana_pool/iterated_pool as anything in provided_mana)
total_effective_mana += iterated_pool.get_attuned_amount(attunements, caster)
total_effective_mana += iterated_pool.get_attuned_amount(caster)
if (total_effective_mana > required_mana)
return TRUE
else
Expand All @@ -117,39 +113,25 @@
var/mob/user = get_user_callback?.Invoke()

var/mana_consumed = -get_mana_required(arglist(args))
var/total_mana_consumed = -mana_consumed
if (isnull(mana_consumed))
stack_trace("mana_consumed after get_mana_required is null!")
return

var/list/datum/mana_pool/available_pools = get_mana_to_use()
var/mob/living/caster = get_parent_user()
var/attunement_total_value = 0
var/total_damage = 0
for(var/datum/attunement/attunement as anything in attunements)
attunement_total_value += attunements[attunement]

while (mana_consumed <= -0.05)
var/mult
var/attuned_cost
for (var/datum/mana_pool/pool as anything in available_pools)
mult = pool.get_overall_attunement_mults(attunements, user)
attuned_cost = (mana_consumed * mult)
if (pool.amount < attuned_cost)
attuned_cost = (pool.amount)
var/mana_adjusted = SAFE_DIVIDE(pool.adjust_mana((attuned_cost)), mult) * (has_world_trait(/datum/world_trait/noc_wisdom) ? 0.8 : 1)
mana_consumed -= mana_adjusted
record_featured_stat(FEATURED_STATS_MAGES, user, abs(mana_adjusted))
GLOB.vanderlin_round_stats[STATS_MANA_SPENT] += abs(mana_adjusted)
if (available_pools.Find(pool) == available_pools.len && mana_consumed <= -0.05) // if we're at the end of the list and mana_consumed is not 0 or near 0 (floating points grrr)
stack_trace("cost: [mana_consumed] was not 0 after drain_mana on [src]! This could've been an infinite loop!")
mana_consumed = 0 // lets terminate the loop to be safe
if(pool.parent == caster)
for(var/datum/attunement/attunement as anything in attunements)
if(pool.negative_attunements[attunement] < 0)
var/composition_gain = attunement_total_value / attunements[attunement]
var/negative_impact_mana = total_mana_consumed * composition_gain
total_damage += round(negative_impact_mana * 0.1,1)
if(total_damage)
caster.mana_pool.mana_backlash(total_damage)

Expand Down Expand Up @@ -197,7 +179,6 @@
pre_use_check_comsig,
post_use_comsig = COMSIG_SPELL_AFTER_CAST,
datum/callback/mana_required,
list/datum/attunement/attunements
)

. = ..()
Expand Down
9 changes: 0 additions & 9 deletions code/datums/mana/living_mana.dm
Original file line number Diff line number Diff line change
Expand Up @@ -74,15 +74,6 @@
/mob/living/carbon/get_initial_mana_pool_type()
return /datum/mana_pool/mob

/mob/living/carbon/proc/generate_random_attunements(amount = rand(2, 3))
var/list/attunements = subtypesof(/datum/attunement)
for(var/i = 1 to amount)
var/datum/attunement/picked = pick(attunements)
mana_pool?.adjust_attunement(picked, rand(1, 3) * 0.1)

/mob/living/carbon/after_manapool_init()
generate_random_attunements()

/mob/living/carbon/human/dummy
has_initial_mana_pool = FALSE

Expand Down
30 changes: 0 additions & 30 deletions code/datums/rituals/ritual_runes.dm
Original file line number Diff line number Diff line change
Expand Up @@ -822,35 +822,5 @@ GLOBAL_LIST(teleport_runes)
return
. = ..()

/obj/effect/decal/cleanable/roguerune/arcyne/attunement
name = "arcyne attunement matrix"
desc = "A large matrix designed to imbue the energies of materials."
icon = 'icons/effects/160x160.dmi'
icon_state = "imbuement"
tier = 2
req_invokers = 2
invocation = "Xel’thix un’oral!"
ritual_number = FALSE
req_keyword = TRUE
runesize = 2
pixel_x = -64 //So the big ol' 96x96 sprite shows up right
pixel_y = -64
pixel_z = 0
can_be_scribed = TRUE
associated_ritual = /datum/runerituals/attunement
takes_all_items = TRUE

/obj/effect/decal/cleanable/roguerune/arcyne/attunement/invoke(list/invokers, datum/runerituals/runeritual)
runeritual = associated_ritual
if(!..()) //VERY important. Calls parent and checks if it fails. parent/invoke has all the checks for ingredients
return
var/mob/living/user = invokers[1] //the first invoker is always the user
var/datum/runerituals/attunement/attune_ritual = pickritual

var/list/attunements = attune_ritual.attunement_modifiers

for(var/datum/attunement/attunement as anything in attunements)
user.mana_pool?.adjust_attunement(attunement, attunements[attunement])

pickritual.cleanup_atoms(selected_atoms)
do_invoke_glow()
1 change: 0 additions & 1 deletion code/modules/crafting/quality_of_crafting/books.dm
Original file line number Diff line number Diff line change
Expand Up @@ -768,7 +768,6 @@

types = list(
/datum/book_entry/grimoire,
/datum/book_entry/attunement,
/datum/book_entry/mana_sources,
/datum/repeatable_crafting_recipe/arcyne,
/datum/slapcraft_recipe/arcyne,
Expand Down
1 change: 1 addition & 0 deletions code/modules/jobs/job_types/apprentices/wapprentice.dm
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
allowed_races = RACES_PLAYER_ALL
allowed_sexes = list(MALE, FEMALE)
allowed_ages = list(AGE_CHILD, AGE_ADULT)
allowed_patrons = list(/datum/patron/divine/noc, /datum/patron/inhumen/zizo)


outfit = /datum/outfit/job/wapprentice
Expand Down
2 changes: 0 additions & 2 deletions code/modules/jobs/job_types/nobility/magician.dm
Original file line number Diff line number Diff line change
Expand Up @@ -81,5 +81,3 @@
H.mind?.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt)
H.mind?.AddSpell(new /obj/effect/proc_holder/spell/self/learnspell)
H.mind?.AddSpell(new /obj/effect/proc_holder/spell/targeted/touch/prestidigitation)

H?.generate_random_attunements(rand(4,6))
2 changes: 0 additions & 2 deletions code/modules/mob/living/stats.dm
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,8 @@
return FALSE
if(patron && !ispath(patron))
patron.on_remove(src)
mana_pool?.remove_attunements(patron)
patron = new_patron
patron.on_gain(src)
mana_pool?.set_attunements(patron)
return TRUE

///Rolls random stats base 10, +-1, for SPECIAL, and applies species stats and age stats.
Expand Down
2 changes: 1 addition & 1 deletion code/modules/mob/mob_helpers.dm
Original file line number Diff line number Diff line change
Expand Up @@ -642,7 +642,7 @@
if(istype(ranged_ability, /obj/effect/proc_holder/spell))
var/obj/effect/proc_holder/spell/ability = ranged_ability
if(!ability.miracle && ability.uses_mana)
mmb_intent.AddComponent(/datum/component/uses_mana/spell,CALLBACK(mmb_intent, TYPE_PROC_REF(/datum/intent, spell_cannot_activate)),CALLBACK(mmb_intent, TYPE_PROC_REF(/datum/intent, get_owner)),COMSIG_SPELL_BEFORE_CAST,null,COMSIG_SPELL_AFTER_CAST,CALLBACK(ranged_ability, TYPE_PROC_REF(/obj/effect/proc_holder, get_fatigue_drain)),ranged_ability.attunements)
mmb_intent.AddComponent(/datum/component/uses_mana/spell,CALLBACK(mmb_intent, TYPE_PROC_REF(/datum/intent, spell_cannot_activate)),CALLBACK(mmb_intent, TYPE_PROC_REF(/datum/intent, get_owner)),COMSIG_SPELL_BEFORE_CAST,null,COMSIG_SPELL_AFTER_CAST,CALLBACK(ranged_ability, TYPE_PROC_REF(/obj/effect/proc_holder, get_fatigue_drain)),ranged_ability)


hud_used.quad_intents?.switch_intent(input)
Expand Down
24 changes: 0 additions & 24 deletions code/modules/spells/spell.dm
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,6 @@
var/obj/inhand_requirement = null
var/overlay_state = null

var/list/attunements
var/attuned_strength = 1

/obj/effect/proc_holder/Initialize()
. = ..()
if(has_action)
Expand Down Expand Up @@ -389,18 +386,6 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th
charge_counter = recharge_time
recharging = FALSE

/obj/effect/proc_holder/spell/proc/set_attuned_strength(list/incoming_attunements)
var/total_value = 1
for(var/datum/attunement/attunement as anything in attunements)
if(!(attunement in incoming_attunements))
continue
if(attunements[attunement] < 0)
total_value += incoming_attunements[attunement] + attunements[attunement]
else
total_value += incoming_attunements[attunement] - attunements[attunement]
attuned_strength = total_value
return

/obj/effect/proc_holder/spell/proc/perform(list/targets, recharge = TRUE, mob/user = usr) //if recharge is started is important for the trigger spells
if(length(targets) && miracle && healing_miracle)
var/mob/living/target = targets[1]
Expand All @@ -421,15 +406,6 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th
if (!isnull(user.mana_pool))
usable_pools += user.mana_pool

var/list/total_attunements = GLOB.default_attunements.Copy()

for(var/datum/mana_pool/pool as anything in usable_pools)
for(var/negative_attunement in pool.negative_attunements)
total_attunements[negative_attunement] += pool.negative_attunements[negative_attunement]
for(var/attunement in pool.attunements)
total_attunements[attunement] += pool.attunements[attunement]

set_attuned_strength(total_attunements)
if(user && user.ckey)
create_logs(user, targets)
if(recharge)
Expand Down
3 changes: 0 additions & 3 deletions code/modules/spells/spell_types/blindness.dm
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@
antimagic_allowed = TRUE
recharge_time = 2 MINUTES
associated_skill = /datum/skill/magic/arcane
attunements = list(
/datum/attunement/arcyne = 0.1
)

/obj/effect/proc_holder/spell/invoked/blindness/cast(list/targets, mob/user = usr)
if(isliving(targets[1]))
Expand Down
3 changes: 0 additions & 3 deletions code/modules/spells/spell_types/ethereal_jaunt.dm
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,6 @@
var/jaunt_in_type = /obj/effect/temp_visual/wizard
var/jaunt_out_type = /obj/effect/temp_visual/wizard/out
associated_skill = /datum/skill/magic/arcane
attunements = list(
/datum/attunement/arcyne = 0.4,
)

/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/cast(list/targets,mob/user = usr) //magnets, so mostly hardcoded
. = ..()
Expand Down
19 changes: 2 additions & 17 deletions code/modules/spells/spell_types/invoked/acolyte/dendor.dm
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,6 @@
invocation_type = "shout" //can be none, whisper, emote and shout
miracle = TRUE
devotion_cost = 15
attunements = list(
/datum/attunement/earth = 0.5,
/datum/attunement/life = 0.5,
)

/obj/effect/proc_holder/spell/targeted/blesscrop/cast(list/targets,mob/user = usr)
. = ..()
Expand Down Expand Up @@ -59,9 +55,6 @@
releasedrain = 30
miracle = TRUE
devotion_cost = 15
attunements = list(
/datum/attunement/earth = 0.5,
)

/obj/effect/proc_holder/spell/self/beastsense/cast(list/targets,mob/living/user = usr)
playsound(get_turf(user), 'sound/vo/smokedrag.ogg', 100, TRUE)
Expand Down Expand Up @@ -96,9 +89,7 @@
invocation_type = "whisper" //can be none, whisper, emote and shout
miracle = TRUE
devotion_cost = 60
attunements = list(
/datum/attunement/earth = 1,
)

var/static/list/pet_commands = list(
/datum/pet_command/idle,
/datum/pet_command/free,
Expand Down Expand Up @@ -256,9 +247,7 @@
req_items = list(/obj/item/clothing/neck/psycross/silver/dendor)
invocation = "Treefather light the way."
invocation_type = "whisper" //can be none, whisper, emote and shout
attunements = list(
/datum/attunement/earth = 0.6,
)

miracle = TRUE

/obj/effect/proc_holder/spell/targeted/conjure_kneestingers/cast(list/targets,mob/user = usr)
Expand Down Expand Up @@ -293,10 +282,6 @@
releasedrain = 100
miracle = TRUE
devotion_cost = 100
attunements = list(
/datum/attunement/earth = 0.7,
/datum/attunement/polymorph = 0.5,
)

/obj/effect/proc_holder/spell/self/trollshape/cast(list/targets,mob/living/user = usr)
. = ..()
Expand Down
Loading
Loading