mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-30 03:22:41 +00:00
## About The Pull Request This PR was originally meant as a replacement for the Bloody Bastard blade, but then I stopped existing for 7 months. Now that I'm here again, I'm finishing the job once and for all. ### **HERETICS VERSUS CULTISTS** ### Heretics Heretics can now sacrifice cultists, which will give them one of three gifts: The Cursed Blade, the Crimson Focus, and the Rusted Harvester. The gifts given are weighted to be spread out equally with each type. They will also gain one knowledge point. - The Cursed Blade is a free heretic blade that is more powerful than the normal heretic blade, including a small block chance. It can also be used to draw heretic runes off combat mode. - The Crimson Focus is a necklace that grants focusing and a minor regeneration effect which also affects nearby heretics, at the cost of gaining the BLOODY_MESS trait while wearing it. Additionally, it can be squeezed to heal 50 points of brute/burn damage, injecting yourself with three to six (separately) units of Eldritch ~~Water~~ Essence and Unholy Water. Yes, this isn't good. - The Rusted Harvester is a heretic 'monster' summon. It's a normal Harvester, but instead of Area Conversion and Forcewall, it has Aggressive Spread and Rust Construction (Raise Wall). It can delimb, but only cultists, with a delay. It has an aura of decay, corroding the environment and withering enemies near it, but it's VERY fragile. Rusting cultist item dispensers will now cause them to turn into a Heretic object. Altars turn into small heretic runes, Archives turn into Codex Cicatrixi, Forges turn into Mawed Crucibles. Ideally, Heretics would be able to gain an amount of these new powers and use them to turn the tide against the cultists, amassing their power and almost forming a sect of their own in turn which sweeps over and converts the cult. ### Cultists When a Cultist sacrifices a heretic, two things will happen: - A new item will be available for creation at one of the dispensers. - The Heretic will be trapped inside a powerful Haunted Blade. `/obj/item/melee/cultblade/haunted` ` name = "haunted longsword"` ` desc = "An eerie sword with a blade that is less 'black' than it is 'absolute nothingness'. It glows with furious, restrained green energy."` This blade will be stronger across-the-board than a normal cult sword, and will even allow those who wield it to cast one heretic spell from their previous path. The only downside? The heretic can also cast one spell. It's up to the trapped spirit if it wants to help you, or be a nuisance. The unlocked items are: - The Cursed Blade, again. For cultists, it can be used to draw runes twice as fast as usual, and they can even right-click it to teleport to safety, just like a heretic! - The Crimson Focus, again. Cultists are twice as fast at carving spells into their body, and they gain a 5th spellslot as long as they wear the amulet. It still causes hemophilia and grants weak regeneration. - The Proteon Orb. This orb will create a gateway to Nar'sie's own realm, spawning one Proteon every 15 seconds, which ghosts can possess. The gateways cannot be placed close to one another. Originally, they were going to be able to create a Harvester Shell, but there were some concerns of it being too OP. The true Bastard sword has been fully deleted. The null rod conversion has been changed to a Bloody Halberd instead. I'm considering re-enabling Stun Hand on Heretics, with Mansus Grasp stats. ### Other All the items above can be used by both Heretics and Cultists, no matter how they were first created. Hell, even normal crew can use them! This is probably not the best idea a lot of the time, though. There are a lot of other changes in this PR. A loooooot. I will likely miss some in the changelog, but I'll try to be as thorough as possible. There's probably also some leftover garbo that I didn't find and clear out yet. ## Why It's Good For The Game Cult and Heretics, despite being mortally opposed, have very few interactions with eachother, especially now that the Blade's gone. The only thing of note is just the Heretic's unfair complete resistance to stun hand, which is only marginally better than the alternative. This PR will reintroduce their animosity, and give both sides a very, very good reason to fight eachother. The Cult will gain a sick sword that keeps the heretic in the game, and unlike with the original implementation, will recieve a cult-wide bonus in the form of a powerful, well deserved, and fun new item to summon. The Heretic will gain powerful trinkets and knowledge from the sacrifices, incentivizing them to become a terrifying cult-hunter. And if they do succeed in wiping out the cult, they will have quite the rewards to help with their ascension. The crew, while mostly unaffected, will have a damn good reason to not just Side with the heretic, out of fear of what they may become after the cult is stomped down. They can also use a few of the items here in an attempt to get one up on either side, as long as they manage to stay clear of the side-effects. Let the heretics eradicate the apostates. Let the cultists root out the heathens.  The haunted longsword creates an aura of darkness (disabled for the cultist for the image) Sprites... are not great. Hopefully someone comes by and improves them. code: Added get_inactive_hand() as an easy shortcut for carbons code: Wall walker element can now accept a trait for wall-checking fix: Fixed soulsword component being unable to invoke the post summon callback refactor: Turned Heretic rust turf healing into an element, given to Rust Walkers and Rusted Harvesters refactor: Converted Limb Amputation from an element to a component Blade and Sword sprites by meyhaza!!! I did the inhands though. Cuz im cool
355 lines
11 KiB
Plaintext
355 lines
11 KiB
Plaintext
/obj/item/gun/magic/wand
|
|
name = "wand"
|
|
desc = "You shouldn't have this."
|
|
ammo_type = /obj/item/ammo_casing/magic
|
|
icon_state = "nothingwand"
|
|
inhand_icon_state = "wand"
|
|
lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/items_righthand.dmi'
|
|
base_icon_state = "nothingwand"
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
can_charge = FALSE
|
|
max_charges = 100 //100, 50, 50, 34 (max charge distribution by 25%ths)
|
|
var/variable_charges = TRUE
|
|
|
|
/obj/item/gun/magic/wand/Initialize(mapload)
|
|
if(prob(75) && variable_charges) //25% chance of listed max charges, 50% chance of 1/2 max charges, 25% chance of 1/3 max charges
|
|
if(prob(33))
|
|
max_charges = CEILING(max_charges / 3, 1)
|
|
else
|
|
max_charges = CEILING(max_charges / 2, 1)
|
|
return ..()
|
|
|
|
/obj/item/gun/magic/wand/examine(mob/user)
|
|
. = ..()
|
|
. += "Has [charges] charge\s remaining."
|
|
|
|
/obj/item/gun/magic/wand/update_icon_state()
|
|
icon_state = "[base_icon_state][charges ? null : "-drained"]"
|
|
return ..()
|
|
|
|
/obj/item/gun/magic/wand/attack(atom/target, mob/living/user)
|
|
if(target == user)
|
|
return
|
|
..()
|
|
|
|
/obj/item/gun/magic/wand/try_fire_gun(atom/target, mob/living/user, params)
|
|
if(!charges)
|
|
shoot_with_empty_chamber(user)
|
|
return FALSE
|
|
if(target == user)
|
|
if(no_den_usage && istype(get_area(user), /area/centcom/wizard_station))
|
|
to_chat(user, span_warning("You know better than to violate the security of The Den, best wait until you leave to use [src]."))
|
|
return FALSE
|
|
zap_self(user)
|
|
. = TRUE
|
|
|
|
else
|
|
. = ..()
|
|
|
|
if(.)
|
|
update_appearance()
|
|
return .
|
|
|
|
/obj/item/gun/magic/wand/proc/zap_self(mob/living/user)
|
|
user.visible_message(span_danger("[user] zaps [user.p_them()]self with [src]."))
|
|
playsound(user, fire_sound, 50, TRUE)
|
|
user.log_message("zapped [user.p_them()]self with a <b>[src]</b>", LOG_ATTACK)
|
|
|
|
|
|
/////////////////////////////////////
|
|
//WAND OF DEATH
|
|
/////////////////////////////////////
|
|
|
|
/obj/item/gun/magic/wand/death
|
|
name = "wand of death"
|
|
desc = "This deadly wand overwhelms the victim's body with pure energy, slaying them without fail."
|
|
school = SCHOOL_NECROMANCY
|
|
fire_sound = 'sound/magic/wandodeath.ogg'
|
|
ammo_type = /obj/item/ammo_casing/magic/death
|
|
icon_state = "deathwand"
|
|
base_icon_state = "deathwand"
|
|
max_charges = 3 //3, 2, 2, 1
|
|
|
|
/obj/item/gun/magic/wand/death/zap_self(mob/living/user)
|
|
..()
|
|
charges--
|
|
if(user.can_block_magic())
|
|
user.visible_message(span_warning("[src] has no effect on [user]!"))
|
|
return
|
|
if(isliving(user))
|
|
var/mob/living/L = user
|
|
if(L.mob_biotypes & MOB_UNDEAD) //negative energy heals the undead
|
|
user.revive(ADMIN_HEAL_ALL, force_grab_ghost = TRUE) // This heals suicides
|
|
to_chat(user, span_notice("You feel great!"))
|
|
return
|
|
to_chat(user, "<span class='warning'>You irradiate yourself with pure negative energy! \
|
|
[pick("Do not pass go. Do not collect 200 zorkmids.","You feel more confident in your spell casting skills.","You die...","Do you want your possessions identified?")]\
|
|
</span>")
|
|
user.death(FALSE)
|
|
|
|
/obj/item/gun/magic/wand/death/debug
|
|
desc = "In some obscure circles, this is known as the 'cloning tester's friend'."
|
|
max_charges = 500
|
|
variable_charges = FALSE
|
|
can_charge = TRUE
|
|
recharge_rate = 1
|
|
|
|
|
|
/////////////////////////////////////
|
|
//WAND OF HEALING
|
|
/////////////////////////////////////
|
|
|
|
/obj/item/gun/magic/wand/resurrection
|
|
name = "wand of healing"
|
|
desc = "This wand uses healing magics to heal and revive. They are rarely utilized within the Wizard Federation for some reason."
|
|
school = SCHOOL_RESTORATION
|
|
ammo_type = /obj/item/ammo_casing/magic/heal
|
|
fire_sound = 'sound/magic/staff_healing.ogg'
|
|
icon_state = "revivewand"
|
|
base_icon_state = "revivewand"
|
|
max_charges = 10 //10, 5, 5, 4
|
|
|
|
/obj/item/gun/magic/wand/resurrection/zap_self(mob/living/user)
|
|
..()
|
|
charges--
|
|
if(user.can_block_magic())
|
|
user.visible_message(span_warning("[src] has no effect on [user]!"))
|
|
return
|
|
if(isliving(user))
|
|
var/mob/living/L = user
|
|
if(L.mob_biotypes & MOB_UNDEAD) //positive energy harms the undead
|
|
to_chat(user, "<span class='warning'>You irradiate yourself with pure positive energy! \
|
|
[pick("Do not pass go. Do not collect 200 zorkmids.","You feel more confident in your spell casting skills.","You die...","Do you want your possessions identified?")]\
|
|
</span>")
|
|
user.investigate_log("has been killed by a bolt of resurrection.", INVESTIGATE_DEATHS)
|
|
user.death(FALSE)
|
|
return
|
|
user.revive(ADMIN_HEAL_ALL, force_grab_ghost = TRUE) // This heals suicides
|
|
to_chat(user, span_notice("You feel great!"))
|
|
|
|
/obj/item/gun/magic/wand/resurrection/debug //for testing
|
|
desc = "Is it possible for something to be even more powerful than regular magic? This wand is."
|
|
max_charges = 500
|
|
variable_charges = FALSE
|
|
can_charge = TRUE
|
|
recharge_rate = 1
|
|
|
|
/////////////////////////////////////
|
|
//WAND OF POLYMORPH
|
|
/////////////////////////////////////
|
|
|
|
/obj/item/gun/magic/wand/polymorph
|
|
name = "wand of polymorph"
|
|
desc = "This wand is attuned to chaos and will radically alter the victim's form."
|
|
school = SCHOOL_TRANSMUTATION
|
|
ammo_type = /obj/item/ammo_casing/magic/change
|
|
icon_state = "polywand"
|
|
base_icon_state = "polywand"
|
|
fire_sound = 'sound/magic/staff_change.ogg'
|
|
max_charges = 10 //10, 5, 5, 4
|
|
|
|
/obj/item/gun/magic/wand/polymorph/zap_self(mob/living/user)
|
|
. = ..() //because the user mob ceases to exists by the time wabbajack fully resolves
|
|
|
|
user.wabbajack()
|
|
charges--
|
|
|
|
/////////////////////////////////////
|
|
//WAND OF TELEPORTATION
|
|
/////////////////////////////////////
|
|
|
|
/obj/item/gun/magic/wand/teleport
|
|
name = "wand of teleportation"
|
|
desc = "This wand will wrench targets through space and time to move them somewhere else."
|
|
school = SCHOOL_TRANSLOCATION
|
|
ammo_type = /obj/item/ammo_casing/magic/teleport
|
|
fire_sound = 'sound/magic/wand_teleport.ogg'
|
|
icon_state = "telewand"
|
|
base_icon_state = "telewand"
|
|
max_charges = 10 //10, 5, 5, 4
|
|
no_den_usage = TRUE
|
|
|
|
/obj/item/gun/magic/wand/teleport/zap_self(mob/living/user)
|
|
if(do_teleport(user, user, 10, channel = TELEPORT_CHANNEL_MAGIC))
|
|
var/datum/effect_system/fluid_spread/smoke/smoke = new
|
|
smoke.set_up(3, holder = src, location = user.loc)
|
|
smoke.start()
|
|
charges--
|
|
..()
|
|
|
|
/obj/item/gun/magic/wand/safety
|
|
name = "wand of safety"
|
|
desc = "This wand will use the lightest of bluespace currents to gently place the target somewhere safe."
|
|
school = SCHOOL_TRANSLOCATION
|
|
ammo_type = /obj/item/ammo_casing/magic/safety
|
|
fire_sound = 'sound/magic/wand_teleport.ogg'
|
|
icon_state = "telewand"
|
|
base_icon_state = "telewand"
|
|
max_charges = 10 //10, 5, 5, 4
|
|
no_den_usage = FALSE
|
|
|
|
/obj/item/gun/magic/wand/safety/zap_self(mob/living/user)
|
|
var/turf/origin = get_turf(user)
|
|
var/turf/destination = find_safe_turf(extended_safety_checks = TRUE)
|
|
|
|
if(do_teleport(user, destination, channel=TELEPORT_CHANNEL_MAGIC))
|
|
for(var/t in list(origin, destination))
|
|
var/datum/effect_system/fluid_spread/smoke/smoke = new
|
|
smoke.set_up(0, holder = src, location = t)
|
|
smoke.start()
|
|
..()
|
|
|
|
/obj/item/gun/magic/wand/safety/debug
|
|
desc = "This wand has 'find_safe_turf()' engraved into its blue wood. Perhaps it's a secret message?"
|
|
max_charges = 500
|
|
variable_charges = FALSE
|
|
can_charge = TRUE
|
|
recharge_rate = 1
|
|
|
|
|
|
/////////////////////////////////////
|
|
//WAND OF DOOR CREATION
|
|
/////////////////////////////////////
|
|
|
|
/obj/item/gun/magic/wand/door
|
|
name = "wand of door creation"
|
|
desc = "This particular wand can create doors in any wall for the unscrupulous wizard who shuns teleportation magics."
|
|
school = SCHOOL_TRANSMUTATION
|
|
ammo_type = /obj/item/ammo_casing/magic/door
|
|
icon_state = "doorwand"
|
|
base_icon_state = "doorwand"
|
|
fire_sound = 'sound/magic/staff_door.ogg'
|
|
max_charges = 20 //20, 10, 10, 7
|
|
no_den_usage = 1
|
|
|
|
/obj/item/gun/magic/wand/door/zap_self(mob/living/user)
|
|
to_chat(user, span_notice("You feel vaguely more open with your feelings."))
|
|
charges--
|
|
..()
|
|
|
|
/////////////////////////////////////
|
|
//WAND OF FIREBALL
|
|
/////////////////////////////////////
|
|
|
|
/obj/item/gun/magic/wand/fireball
|
|
name = "wand of fireball"
|
|
desc = "This wand shoots scorching balls of fire that explode into destructive flames."
|
|
school = SCHOOL_EVOCATION
|
|
fire_sound = 'sound/magic/fireball.ogg'
|
|
ammo_type = /obj/item/ammo_casing/magic/fireball
|
|
icon_state = "firewand"
|
|
base_icon_state = "firewand"
|
|
max_charges = 8 //8, 4, 4, 3
|
|
|
|
/obj/item/gun/magic/wand/fireball/zap_self(mob/living/user)
|
|
..()
|
|
explosion(user, devastation_range = -1, light_impact_range = 2, flame_range = 2, flash_range = 3, adminlog = FALSE, explosion_cause = src)
|
|
charges--
|
|
|
|
/////////////////////////////////////
|
|
//WAND OF NOTHING
|
|
/////////////////////////////////////
|
|
|
|
/obj/item/gun/magic/wand/nothing
|
|
name = "wand of nothing"
|
|
desc = "It's not just a stick, it's a MAGIC stick?"
|
|
ammo_type = /obj/item/ammo_casing/magic/nothing
|
|
|
|
|
|
/////////////////////////////////////
|
|
//WAND OF SHRINKING
|
|
/////////////////////////////////////
|
|
|
|
/obj/item/gun/magic/wand/shrink
|
|
name = "wand of shrinking"
|
|
desc = "Feel the tiny eldritch terror of an itty... bitty... head!"
|
|
ammo_type = /obj/item/ammo_casing/magic/shrink/wand
|
|
icon_state = "shrinkwand"
|
|
base_icon_state = "shrinkwand"
|
|
fire_sound = 'sound/magic/staff_shrink.ogg'
|
|
max_charges = 10 //10, 5, 5, 4
|
|
no_den_usage = TRUE
|
|
w_class = WEIGHT_CLASS_TINY
|
|
|
|
/obj/item/gun/magic/wand/shrink/zap_self(mob/living/user)
|
|
to_chat(user, span_notice("The world grows large..."))
|
|
charges--
|
|
user.AddComponent(/datum/component/shrink, -1) // small forever
|
|
return ..()
|
|
|
|
// Wand of debugging
|
|
|
|
#ifdef TESTING
|
|
|
|
/obj/item/gun/magic/wand/antag
|
|
name = "wand of antag"
|
|
desc = "This wand uses the powers of bullshit to turn anyone it hits into an antag"
|
|
school = SCHOOL_FORBIDDEN
|
|
ammo_type = /obj/item/ammo_casing/magic/antag
|
|
icon_state = "revivewand"
|
|
base_icon_state = "revivewand"
|
|
color = COLOR_ADMIN_PINK
|
|
max_charges = 99999
|
|
|
|
/obj/item/gun/magic/wand/antag/zap_self(mob/living/user)
|
|
. = ..()
|
|
var/obj/item/ammo_casing/magic/antag/casing = new ammo_type()
|
|
var/obj/projectile/magic/magic_proj = casing.projectile_type
|
|
magic_proj = new magic_proj(src)
|
|
magic_proj.on_hit(user)
|
|
QDEL_NULL(casing)
|
|
|
|
/obj/item/ammo_casing/magic/antag
|
|
projectile_type = /obj/projectile/magic/antag
|
|
harmful = FALSE
|
|
|
|
/obj/projectile/magic/antag
|
|
name = "bolt of antag"
|
|
icon_state = "ion"
|
|
var/antag = /datum/antagonist/traitor
|
|
|
|
/obj/projectile/magic/antag/on_hit(atom/target, blocked, pierce_hit)
|
|
. = ..()
|
|
|
|
if(isliving(target))
|
|
var/mob/living/victim = target
|
|
if(isnull(victim.mind))
|
|
victim.mind_initialize()
|
|
if(victim.mind.has_antag_datum(antag))
|
|
victim.mind.remove_antag_datum(antag)
|
|
to_chat(world, "removed")
|
|
else
|
|
victim.mind.add_antag_datum(antag)
|
|
to_chat(world, "added")
|
|
|
|
/obj/item/gun/magic/wand/antag/heretic
|
|
name = "wand of antag heretic"
|
|
desc = "This wand uses the powers of bullshit to turn anyone it hits into an antag heretic"
|
|
color = COLOR_GREEN
|
|
ammo_type = /obj/item/ammo_casing/magic/antag/heretic
|
|
|
|
/obj/item/ammo_casing/magic/antag/heretic
|
|
projectile_type = /obj/projectile/magic/antag/heretic
|
|
|
|
/obj/projectile/magic/antag/heretic
|
|
name = "bolt of antag heretic"
|
|
icon_state = "ion"
|
|
antag = /datum/antagonist/heretic
|
|
|
|
/obj/item/gun/magic/wand/antag/cult
|
|
name = "wand of antag cultist"
|
|
desc = "This wand uses the powers of bullshit to turn anyone it hits into an antag cultist"
|
|
color = COLOR_CULT_RED
|
|
ammo_type = /obj/item/ammo_casing/magic/antag/cult
|
|
|
|
/obj/item/ammo_casing/magic/antag/cult
|
|
projectile_type = /obj/projectile/magic/antag/cult
|
|
|
|
/obj/projectile/magic/antag/cult
|
|
name = "bolt of antag cult"
|
|
icon_state = "ion"
|
|
antag = /datum/antagonist/cult
|
|
|
|
#endif
|