mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-28 01:51:46 +00:00
## About The Pull Request Some changes to Cosmic and Knock heretic ascensions, in response to feedback. - Cosmic Heretics can no longer control their summon while jaunted. - Additionally the death link element the Star Gazer used... wouldn't work if there was more than one cosmic heretic. I refactored it into a component, so that it would. Frankly there are probably a lot of _other_ abilities which shouldn't be usable while jaunted but are, but I have been burned in the past by adding defaults which were applied too widely so we'll leave it case-by-case for now. - The Knock rift can no longer summon Flesh Worms of any kind. - But it _can_ summon fire sharks (we really need to reflavour these...) and any future "basic mob" heretic mobs (or ones which are converted). - Additionally the rift can't be clicked by ghosts while it's polling ghosts automatically because that would create funky empty-minded mobs. - Finally it goes away when the heretic dies. ## Why It's Good For The Game For Cosmic Heretics, controlling the Star Gazer in conjunction with Space Jaunt essentially meant that the heretic was playing an RTS as an invincible observer with an invulnerable unit, now they have to actually be present and killable in order to sic The Beast on you. For Knock Heretics, Minor Flesh Worms are a proof of concept which was never meant to be used except by admins. They're _barely_ weaker than a normal flesh worm, extraordinarily tanky, delete walls, and generally devalue the Flesh path ascension. Vanishing upon heretic death is because every _other_ ascension is at least theoretically stoppable except this one. Now this one is too. It's still _very hard_ to kill the heretic because every _10 seconds_ they can transform into a heretic mob which acts as an extra health pool. ## Changelog 🆑 fix: If two cosmic heretics ascend in the same round, their star gazer survival will be linked to each individual heretic and not shared by just one of them. fix: You can't click the Knock heretic portal to join as a mob while already signed up to become a mob. balance: Cosmic heretics can't order the Star Gazer around while jaunting. balance: The Knock Heretic portal cannot summon Flesh Worms, but can summon Fire Sharks. balance: The Knock Heretic portal will disperse if its creator is killed. /🆑
108 lines
4.9 KiB
Plaintext
108 lines
4.9 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_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))
|