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
1 change: 1 addition & 0 deletions maps/karzerfeste/karzerfeste.dm
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include "../../mods/content/fantasy/_fantasy.dme"
#include "../../mods/content/undead/_undead.dme"
#include "../../mods/content/biomods/_biomods.dme"
#include "../../mods/content/wyrd/_wyrd.dme"
#include "../../mods/pyrelight/_pyrelight.dme" // include after _fantasy.dme so overrides work

#include "areas/_area.dm"
Expand Down
2 changes: 1 addition & 1 deletion maps/shaded_hills/shaded_hills.dm
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
#include "../../mods/species/drakes/_drakes.dme" // include before _fantasy.dme so overrides work
#include "../../mods/species/neoavians/_neoavians.dme" // include before _fantasy.dme so overrides work
#include "../../mods/content/item_sharpening/_item_sharpening.dme"
#include "../../mods/content/anima/_anima.dme" // include before _fantasy.dme so skill overrides work
#include "../../mods/content/wyrd/_wyrd.dme" // include before _fantasy.dme so skill overrides work
#include "../../mods/content/fantasy/_fantasy.dme"
#include "../../mods/content/undead/_undead.dme"
#include "../../mods/content/biomods/_biomods.dme"
Expand Down
6 changes: 0 additions & 6 deletions maps/shaded_hills/shaded_hills_skills.dm
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,6 @@
/obj/item/runestone
work_skill = /decl/skill/crafting/artifice

/decl/material/solid/potentia
arcana_skill = SKILL_SCIENCE

/decl/runestone_spell_archetype
arcana_skill = SKILL_SCIENCE

// Removal of space skills
/datum/map/shaded_hills/get_available_skill_types()
. = ..()
Expand Down
15 changes: 0 additions & 15 deletions mods/content/anima/_anima.dm

This file was deleted.

14 changes: 0 additions & 14 deletions mods/content/anima/_anima.dme

This file was deleted.

29 changes: 0 additions & 29 deletions mods/content/anima/spell_archetypes.dm

This file was deleted.

14 changes: 0 additions & 14 deletions mods/content/anima/spell_datum.dm

This file was deleted.

100 changes: 0 additions & 100 deletions mods/content/anima/spell_effect.dm

This file was deleted.

6 changes: 0 additions & 6 deletions mods/content/anima/spellcasting.dm

This file was deleted.

19 changes: 19 additions & 0 deletions mods/content/wyrd/_wyrd.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/decl/modpack/wyrd
name = "Pyrelight Magic Content"
credits_topics = list("ANCIENT MAGIC", "ANCIENT ANIMA", "MAGICAL RITUALS", "MAGIC SPELLS")
credits_nouns = list("MAGIC", "ANIMA", "WYRD")
credits_adjectives = list("ANCIENT", "MAGICAL", "ARCANE", "DIVINE", "BEWITCHED", "ENCHANTED")
credits_crew_outcomes = list("BEWITCHED", "ENCHANTED", "MAGICKED", "CURSED")
dreams = list(
"wyrd", "anima", "potentia", "magic", "an ancient curse", "an arcane ritual",
"a magic spell", "a magician", "a wizard", "a witch",
"a necromancer", "an ancient scroll", "a magic crystal"
)

/*
Notes to self on my own system structure:
- A spell as a concept is /decl/wyrd_archetype
- Archetype provides /decl/wyrd_effect for basic effect, metamagic effect, etc.
- /decl/wyrd_effect is the specific mechanical interaction when the spell is cast.
- /datum/wyrd_working is a temporary holder for a /decl/wyrd_effect and /decl/wyrd_archetype as well as cast strength and cast mode (AOE, single target, etc)
*/
28 changes: 28 additions & 0 deletions mods/content/wyrd/_wyrd.dme
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#ifndef MODPACK_WYRD
#define MODPACK_WYRD
// BEGIN_INCLUDE
#include "_wyrd.dm"
#include "wyrd_abilities.dm"
#include "wyrdling_mask.dm"
#include "anima\_anima.dm"
#include "anima\anima_aura.dm"
#include "anima\anima_source.dm"
#include "anima\area.dm"
#include "anima\culture.dm"
#include "anima\turf.dm"
#include "potentia\_potentia.dm"
#include "potentia\potentia_stack.dm"
#include "spells\spell_archetypes.dm"
#include "spells\spell_datum.dm"
#include "spells\spell_effect.dm"
#include "spells\spellcasting.dm"
#include "spells\practices\hedge_magic.dm"
#include "spells\practices\rose_art.dm"
#include "spells\practices\sky_sign.dm"
#include "spells\runestones\_runestones.dm"
#include "spells\runestones\spellscribing.dm"
#include "traits\_wyrd.dm"
#include "traits\wyrd_signs.dm"
#include "traits\wyrd_wild.dm"
// END_INCLUDE
#endif
76 changes: 76 additions & 0 deletions mods/content/wyrd/anima/_anima.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
// Anima system: radiant energy or potential of your current location.
// Influenced by natural background levels (based on area) and other sources (that may move around)
// TODO: temporary/decaying radiant anima resulting from spells cast in a location.
// TODO: visual effects for very high anima in an area/on a turf.

// Anima:
// - Very broad categories of magical energy.
// - Influences things within the area of effect (high levels of water anima/low levels of fire anima -> harder to light things on fire).
// - Modifies the chances of spellcasting in the area of effect (high levels of sky anima makes air spells easier).
// - Higher or lower intensities associated with entities/areas.
// - Has an associated subset of potentia that can be refined from local anima (sky sign -> air and water anima, etc)

// Local events that create temporary powerful anima sources:
// - sacrificing an animal spikes waning and blood anima in the immediate vicinity to boost/enable particular workings
// - burning incense, taking drugs, scribing a circle

// Process notes:
// 1. mob wants to cast a spell
// 2. retrieve local anima (turf + area)
// 3. retrieve personal anima (aura extension)
// a. effective anima - local anima +/- (personal anima * strength of will)
// b. very high will + personal anima can override local anima
// 4. retrieve spellcasting condition of the mob
// a. stressors mean poor spellcasting focus
// b. nutrition/stamina are needed for fuelling the spell
// 4. if anima state or conditions do not allow spell, fizzles
// 5. spellcaster's personal aura and will are applied agains the target's personal aura/will (for mobs) or just ambient anima for inanimate objects
// 6. effect of spell is scaled based on how much stronger (or more effectively aligned) the spellcaster is

/decl/anima
abstract_type = /decl/anima
decl_flags = DECL_FLAG_MANDATORY_UID
var/name

var/const/ANIMA_DEPLETED = 0
var/const/ANIMA_NEGLIGIBLE = 1
var/const/ANIMA_NOTABLE = 2
var/const/ANIMA_DENSE = 3
var/const/ANIMA_RICH = 4
var/const/ANIMA_SATURATED = 5

/decl/anima/proc/get_personal_anima_description(_density, decl/background_detail/_culture)
return _culture.get_personal_anima_description(src, _density)

/decl/anima/proc/get_ambient_anima_description(_density, decl/background_detail/_culture)
return _culture.get_ambient_anima_description(src, _density)

// burning sign: label for potentia-based spellcasting, not a 'real' type of anima
// wild sign: complex category of workings, not a specific single type of anima

/decl/anima/sky
name = "Sky"
uid = "anima_sky"
// air, stars, moon, truth, purity

/decl/anima/waning
name = "Waning"
uid = "anima_waning"
// transition, change, death, birth

/decl/anima/deep
name = "Deep"
uid = "anima_deep"
// concealment, earth, mystery

/decl/anima/blood
name = "Blood"
uid = "anima_blood"
// growth, life, heat, violence
// source of volatile potentia - fire, mania

/decl/anima/breath
name = "Breath"
uid = "anima_breath"
// growth, life, heat, violence
// source of volatile potentia - fire, mania
40 changes: 40 additions & 0 deletions mods/content/wyrd/anima/anima_aura.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
// Inner anima state used for spellcasting.
/datum/extension/anima_aura
expected_type = /mob
base_type = /datum/extension/anima_aura
var/alist/pool

/datum/extension/anima_aura/proc/update_totals()
return

/mob/proc/get_personal_anima(anima_type)
var/alist/pool = get_personal_anima_pool()
var/decl/anima/anima = RESOLVE_TO_DECL(anima_type)
return (istype(pool) && pool[anima.type]) || /decl/anima::ANIMA_DEPLETED

/mob/proc/get_personal_anima_pool()
var/datum/extension/anima_aura/aura = get_extension(src, /datum/extension/anima_aura)
if(aura)
return aura.pool?.Copy()
return alist(
/decl/anima/sky = /decl/anima::ANIMA_DEPLETED,
/decl/anima/waning = /decl/anima::ANIMA_DEPLETED,
/decl/anima/deep = /decl/anima::ANIMA_DEPLETED,
/decl/anima/blood = /decl/anima::ANIMA_DEPLETED
)

/mob/proc/adjust_personal_anima(anima_type, anima_amount, skip_update = FALSE)
return set_personal_anima(anima_type, get_personal_anima(anima_type) + anima_amount, skip_update)

/mob/proc/set_personal_anima(anima_type, anima_amount, skip_update = FALSE)
var/datum/extension/anima_aura/aura = (anima_amount == /decl/anima::ANIMA_DEPLETED) ? get_extension(src, /datum/extension/anima_aura) : get_or_create_extension(src, /datum/extension/anima_aura)
if(!istype(aura) || anima_amount == get_personal_anima(anima_type))
return FALSE
var/decl/anima/anima = RESOLVE_TO_DECL(anima_type)
if(anima_amount == 0)
LAZYREMOVE(aura.pool, anima.type)
else
LAZYSET(aura.pool, anima.type, anima_amount)
if(!skip_update)
aura.update_totals()
return TRUE
Loading
Loading