mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-10 17:52:36 +00:00
[MIRROR] Shooting specific wizard staffs as a non-wizard or non-magician now backfires in different ways. [MDB IGNORE] (#9089)
* Shooting specific wizard staffs as a non-wizard or non-magician now backfires in different ways. (#62257) About The Pull Request If you try using the staff of change, the staff of chaos, the spellblade or the staff of healing as a crewmember, then it'll backfire. People who can use the staff normally: Apprentices, Wizards, Amateur Magician (from Summon Magic event) Backfiring is different depending on the staff, each effect is listed below and happens when you try firing the staff. Staff of change - Wabbajacks the imposter, although they can't become a xeno or a borg. Staff of chaos - 5% chance to fire the staff at the imposter using it. Staff of healing - Acts as a medibeam gun to the imposter. Why It's Good For The Game Crew getting access to the Staff of Change tends to end in a lot of people becoming xenomorphs or syndicate borgs. It forces the round into a turn for the worse for all antags as xenomorphs have hardstuns, syndicate borgs have emag, greatly improved healing chemicals and powerful weaponary. Crew getting access to the Staff of Healing results in death being irrelevant. Killing people is no longer a viable tactic as an antagonist because anyone killed, no matter how damaged their body is, can be instantly healed with this staff. Crew getting access to the Staff of Chaos is like crew getting access to the staff of change and the staff of healing at the same time, only more unpredictable. It's better if they can't reliably use it to get the spells they want as chaos is implied in the name, it becomes russian roulette trying to get the correct bolt as you can also get shot by a bolt of death, instantly killing you. This is a better alternative to outright removing the staffs or making them usable only by wizards as it gives a quirky use to trying to use them as a crewmember. Maybe not the staff of healing, but fuck the staff of healing. Changelog cl balance: If you try using the staff of change, the staff of chaos or the staff of healing as a crewmember, then it'll backfire. The Staff of change wabbajacks the user, like the pool of change; this means you can't become a xenomorph or a syndicate borg. The Staff of chaos has a 5% chance of firing the bolt directly at the user using it. The Staff of healing now behaves like a medibeam gun to non-wizards trying to use it. /cl * Shooting specific wizard staffs as a non-wizard or non-magician now backfires in different ways. Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
This commit is contained in:
@@ -246,7 +246,7 @@
|
||||
shoot_with_empty_chamber(user)
|
||||
return
|
||||
|
||||
if(check_botched(user))
|
||||
if(check_botched(user, target))
|
||||
return
|
||||
|
||||
var/obj/item/bodypart/other_hand = user.has_hand_for_held_index(user.get_inactive_hand_index()) //returns non-disabled inactive hands
|
||||
@@ -268,13 +268,13 @@
|
||||
|
||||
return process_fire(target, user, TRUE, params, null, bonus_spread)
|
||||
|
||||
/obj/item/gun/proc/check_botched(mob/living/user, params)
|
||||
/obj/item/gun/proc/check_botched(mob/living/user, atom/target)
|
||||
if(clumsy_check)
|
||||
if(istype(user))
|
||||
if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(40))
|
||||
to_chat(user, span_userdanger("You shoot yourself in the foot with [src]!"))
|
||||
var/shot_leg = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
|
||||
process_fire(user, user, FALSE, params, shot_leg)
|
||||
process_fire(user, user, FALSE, null, shot_leg)
|
||||
SEND_SIGNAL(user, COMSIG_MOB_CLUMSY_SHOOT_FOOT)
|
||||
user.dropItemToGround(src, TRUE)
|
||||
return TRUE
|
||||
|
||||
@@ -6,6 +6,27 @@
|
||||
lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi'
|
||||
item_flags = NEEDS_PERMIT | NO_MAT_REDEMPTION
|
||||
var/allow_intruder_use = FALSE
|
||||
|
||||
/obj/item/gun/magic/staff/proc/is_wizard_or_friend(mob/user)
|
||||
if(!user?.mind?.has_antag_datum(/datum/antagonist/wizard) \
|
||||
&& !user.mind.has_antag_datum(/datum/antagonist/survivalist/magic) \
|
||||
&& !user.mind.has_antag_datum(/datum/antagonist/wizard_minion))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/item/gun/magic/staff/check_botched(mob/living/user, atom/target)
|
||||
if(allow_intruder_use)
|
||||
return ..()
|
||||
|
||||
if(!is_wizard_or_friend(user))
|
||||
return !on_intruder_use(user, target)
|
||||
return ..()
|
||||
|
||||
/// Called when someone who isn't a wizard or magician uses this staff.
|
||||
/// Return TRUE to allow usage.
|
||||
/obj/item/gun/magic/staff/proc/on_intruder_use(mob/living/user, atom/target)
|
||||
return TRUE
|
||||
|
||||
/obj/item/gun/magic/staff/change
|
||||
name = "staff of change"
|
||||
@@ -16,6 +37,21 @@
|
||||
inhand_icon_state = "staffofchange"
|
||||
school = SCHOOL_TRANSMUTATION
|
||||
|
||||
/obj/item/gun/magic/staff/change/unrestricted
|
||||
allow_intruder_use = TRUE
|
||||
|
||||
/obj/item/gun/magic/staff/change/pickup(mob/user)
|
||||
. = ..()
|
||||
if(!is_wizard_or_friend(user))
|
||||
to_chat(user, span_hypnophrase("<span style='font-size: 24px'>You don't feel strong enough to properly wield this staff!</span>"))
|
||||
balloon_alert(user, "you feel weak holding this staff")
|
||||
|
||||
/obj/item/gun/magic/staff/change/on_intruder_use(mob/living/user, atom/target)
|
||||
user.dropItemToGround(src, TRUE)
|
||||
var/randomize = pick("monkey","humanoid","animal")
|
||||
var/mob/new_body = user.wabbajack(randomize)
|
||||
balloon_alert(new_body, "wabbajack, wabbajack!")
|
||||
|
||||
/obj/item/gun/magic/staff/animate
|
||||
name = "staff of animation"
|
||||
desc = "An artefact that spits bolts of life-force which causes objects which are hit by it to animate and come to life! This magic doesn't affect machines."
|
||||
@@ -33,6 +69,35 @@
|
||||
icon_state = "staffofhealing"
|
||||
inhand_icon_state = "staffofhealing"
|
||||
school = SCHOOL_RESTORATION
|
||||
var/obj/item/gun/medbeam/healing_beam
|
||||
|
||||
/obj/item/gun/magic/staff/healing/pickup(mob/user)
|
||||
. = ..()
|
||||
if(!is_wizard_or_friend(user))
|
||||
to_chat(user, span_hypnophrase("<span style='font-size: 24px'>The staff feels weaker as you touch it</span>"))
|
||||
balloon_alert(user, "the staff feels weaker as you touch it")
|
||||
|
||||
/obj/item/gun/magic/staff/healing/Initialize(mapload)
|
||||
. = ..()
|
||||
healing_beam = new(src)
|
||||
healing_beam.mounted = TRUE
|
||||
|
||||
/obj/item/gun/magic/staff/healing/Destroy()
|
||||
qdel(healing_beam)
|
||||
return ..()
|
||||
|
||||
/obj/item/gun/magic/staff/healing/unrestricted
|
||||
allow_intruder_use = TRUE
|
||||
|
||||
/obj/item/gun/magic/staff/healing/on_intruder_use(mob/living/user, atom/target)
|
||||
if(target == user)
|
||||
return FALSE
|
||||
healing_beam.process_fire(target, user)
|
||||
return FALSE
|
||||
|
||||
/obj/item/gun/magic/staff/healing/dropped(mob/user)
|
||||
healing_beam.LoseTarget()
|
||||
return ..()
|
||||
|
||||
/obj/item/gun/magic/staff/healing/handle_suicide() //Stops people trying to commit suicide to heal themselves
|
||||
return
|
||||
@@ -54,10 +119,25 @@
|
||||
/obj/projectile/magic/bounty, /obj/projectile/magic/antimagic, /obj/projectile/magic/fetch, /obj/projectile/magic/sapping,
|
||||
/obj/projectile/magic/necropotence, /obj/projectile/magic, /obj/projectile/temp/chill, /obj/projectile/magic/wipe) //SKYRAT EDIT - Removes /obj/projectile/magic/change
|
||||
|
||||
/obj/item/gun/magic/staff/chaos/unrestricted
|
||||
allow_intruder_use = TRUE
|
||||
|
||||
/obj/item/gun/magic/staff/chaos/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
|
||||
chambered.projectile_type = pick(allowed_projectile_types)
|
||||
. = ..()
|
||||
|
||||
/obj/item/gun/magic/staff/chaos/on_intruder_use(mob/living/user)
|
||||
if(user.anti_magic_check(TRUE, FALSE, FALSE)) // Don't let people with antimagic use the staff of chaos.
|
||||
balloon_alert(user, "the staff refuses to fire!")
|
||||
return FALSE
|
||||
|
||||
if(prob(95)) // You have a 5% chance of hitting yourself when using the staff of chaos.
|
||||
return TRUE
|
||||
balloon_alert(user, "chaos!")
|
||||
user.dropItemToGround(src, TRUE)
|
||||
process_fire(user, user, FALSE)
|
||||
return FALSE
|
||||
|
||||
/obj/item/gun/magic/staff/door
|
||||
name = "staff of door creation"
|
||||
desc = "An artefact that spits bolts of transformative magic that can create doors in walls."
|
||||
|
||||
Reference in New Issue
Block a user