mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-09 07:46:20 +00:00
## About The Pull Request This PR introduces new examine tags for the antimagic component to give players specific feedback on an item's defensive properties. | Condition | Tag | Description | | :--- | :--- | :--- | | **All Resistances** | `magic-proof` | "It is thoroughly shielded against all known forms of magic." | | **MAGIC_RESISTANCE** | `warded` | "It possesses a general resistance to regular spells and magic." | | **MAGIC_RESISTANCE_MIND** | `telepathy-proof` | "It appears to be insulated against telepathic or mental influence." | | **MAGIC_RESISTANCE_HOLY** | `blessed` | "It is protected by a divine shield against unholy and dark forms of magic." | ## Why It's Good For The Game Gives players more context and helpful information about items. ## Changelog 🆑 qol: New examine tags for the antimagic component to give players specific feedback on an item's magical resistance. /🆑
110 lines
5.0 KiB
Plaintext
110 lines
5.0 KiB
Plaintext
// 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"
|
|
/// Psychic school. Not true magic, but psychic spells only benefit themselves.
|
|
#define SCHOOL_PSYCHIC "psychic"
|
|
/// 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"
|
|
/// Blood magic, involves vampirism, draining blood, etc.
|
|
#define SCHOOL_SANGUINE "sanguine"
|
|
|
|
// Invocation types - what does the wizard need to do to invoke (cast) the spell?
|
|
/// Allows being able to cast the spell without saying or doing anything.
|
|
#define INVOCATION_NONE "none"
|
|
/// Forces the wizard to shout the invocation to cast the spell.
|
|
#define INVOCATION_SHOUT "shout"
|
|
/// Forces the wizard to whisper the invocation to cast the spell.
|
|
#define INVOCATION_WHISPER "whisper"
|
|
/// Forces the wizard to emote to cast the spell.
|
|
#define INVOCATION_EMOTE "emote"
|
|
|
|
// Bitflags for spell requirements
|
|
/// Whether the spell requires wizard clothes to cast.
|
|
#define SPELL_REQUIRES_WIZARD_GARB (1 << 0)
|
|
/// Whether the spell can only be cast by humans (mob type, not species).
|
|
/// SPELL_REQUIRES_WIZARD_GARB comes with this flag implied, as carbons and below can't wear clothes.
|
|
#define SPELL_REQUIRES_HUMAN (1 << 1)
|
|
/// Whether the spell can be cast by mobs who are brains / mmis.
|
|
/// When applying, bear in mind most spells will not function for brains out of the box.
|
|
#define SPELL_CASTABLE_AS_BRAIN (1 << 2)
|
|
|
|
/// Whether the spell can be cast while the user has antimagic on them that corresponds to the spell's own antimagic flags.
|
|
#define SPELL_REQUIRES_NO_ANTIMAGIC (1 << 4)
|
|
/// Whether the spell requires being on the station z-level to be cast.
|
|
#define SPELL_REQUIRES_STATION (1 << 5)
|
|
/// Whether the spell must be cast by someone with a mind datum.
|
|
#define SPELL_REQUIRES_MIND (1 << 6)
|
|
/// Whether the spell requires the caster have a mime vow (mindless mobs will succeed this check regardless).
|
|
#define SPELL_REQUIRES_MIME_VOW (1 << 7)
|
|
/// Whether the spell can be cast, even if the caster is unable to speak the invocation
|
|
/// (effectively making the invocation flavor, instead of required).
|
|
#define SPELL_CASTABLE_WITHOUT_INVOCATION (1 << 8)
|
|
|
|
DEFINE_BITFIELD(spell_requirements, list(
|
|
"SPELL_CASTABLE_AS_BRAIN" = SPELL_CASTABLE_AS_BRAIN,
|
|
"SPELL_CASTABLE_WITHOUT_INVOCATION" = SPELL_CASTABLE_WITHOUT_INVOCATION,
|
|
"SPELL_REQUIRES_HUMAN" = SPELL_REQUIRES_HUMAN,
|
|
"SPELL_REQUIRES_MIME_VOW" = SPELL_REQUIRES_MIME_VOW,
|
|
"SPELL_REQUIRES_MIND" = SPELL_REQUIRES_MIND,
|
|
"SPELL_REQUIRES_NO_ANTIMAGIC" = SPELL_REQUIRES_NO_ANTIMAGIC,
|
|
"SPELL_REQUIRES_STATION" = SPELL_REQUIRES_STATION,
|
|
"SPELL_REQUIRES_WIZARD_GARB" = SPELL_REQUIRES_WIZARD_GARB,
|
|
))
|
|
|
|
// Bitflags for teleport spells
|
|
/// Whether the teleport spell skips over space turfs
|
|
#define TELEPORT_SPELL_SKIP_SPACE (1 << 0)
|
|
/// Whether the teleport spell skips over dense turfs
|
|
#define TELEPORT_SPELL_SKIP_DENSE (1 << 1)
|
|
/// Whether the teleport spell skips over blocked turfs
|
|
#define TELEPORT_SPELL_SKIP_BLOCKED (1 << 2)
|
|
|
|
// Bitflags for magic resistance types
|
|
/// Default magic resistance that blocks normal magic (wizard, spells, magical staff projectiles)
|
|
#define MAGIC_RESISTANCE (1<<0)
|
|
/// Tinfoil hat magic resistance that blocks mental magic (telepathy / mind links, mind curses, abductors)
|
|
#define MAGIC_RESISTANCE_MIND (1<<1)
|
|
/// Holy magic resistance that blocks unholy magic (revenant, vampire, voice of god)
|
|
#define MAGIC_RESISTANCE_HOLY (1<<2)
|
|
|
|
#define ALL_MAGIC_RESISTANCE (MAGIC_RESISTANCE|MAGIC_RESISTANCE_MIND|MAGIC_RESISTANCE_HOLY)
|
|
|
|
DEFINE_BITFIELD(antimagic_flags, list(
|
|
"MAGIC_RESISTANCE" = MAGIC_RESISTANCE,
|
|
"MAGIC_RESISTANCE_HOLY" = MAGIC_RESISTANCE_HOLY,
|
|
"MAGIC_RESISTANCE_MIND" = MAGIC_RESISTANCE_MIND,
|
|
))
|
|
|
|
/**
|
|
* Checks if our mob is jaunting actively (within a phased mob object)
|
|
* Used in jaunting spells specifically to determine whether they should be entering or exiting jaunt
|
|
*
|
|
* If you want to use this in non-jaunt related code, it is preferable
|
|
* to instead check for trait [TRAIT_MAGICALLY_PHASED] instead of using this
|
|
* as it encompasses more states in which a mob may be "incorporeal from magic"
|
|
*/
|
|
#define is_jaunting(atom) (istype(atom.loc, /obj/effect/dummy/phased_mob))
|