mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-19 12:05:59 +01:00
b80f8f1127
## About The Pull Request Instead of forcing the player to dual wield it, Cain & Abel can now be held with one hand, although doing so prohibits you from using it to attack, throw/spin daggers or send out wisps. ## Why It's Good For The Game Forcing dual wielding on a small pocketable item is a bit weird and feels bad in gameplay, as it essentially prohibits you from being able to use any healing items unless you keep an empty pocket, in which case quick storage on all other items will default to it which is rather impractical. Requiring an empty offhand essentially keeps the wielding requirement without UX issues coming from inhand usage swapping modes or inventory jank. ## Changelog 🆑 balance: Cain & Abel no longer forces dual-wielding and instead requires an empty offhand /🆑
69 lines
2.2 KiB
Plaintext
69 lines
2.2 KiB
Plaintext
#define THROW_CRYSTALS_COOLDOWN 15 SECONDS
|
|
#define THROW_LAUNCH_COOLDOWN 7 SECONDS
|
|
|
|
/obj/item/cain_and_abel/on_thrown(mob/living/carbon/user, atom/target)
|
|
. = null
|
|
if(!COOLDOWN_FINISHED(src, throw_cooldown))
|
|
user.balloon_alert(user, "on cooldown!")
|
|
return
|
|
|
|
if(user.incapacitated || HAS_TRAIT(user, TRAIT_NO_THROWING) || !isturf(user.loc) || user.buckled)
|
|
user.balloon_alert(user, "unable!")
|
|
return
|
|
|
|
if(!check_wield(user))
|
|
user.balloon_alert(user, "offhand busy!")
|
|
return
|
|
|
|
if(get_dist(target, user) > 9)
|
|
user.balloon_alert(user, "too far away!")
|
|
return
|
|
|
|
var/static/list/throw_options = list(
|
|
THROW_MODE_LAUNCH = list(
|
|
"cooldown" = THROW_LAUNCH_COOLDOWN,
|
|
"projectile" = /obj/projectile/dagger/launch,
|
|
),
|
|
THROW_MODE_CRYSTALS = list(
|
|
"cooldown" = THROW_CRYSTALS_COOLDOWN,
|
|
"projectile" = /obj/projectile/dagger/crystal,
|
|
),
|
|
)
|
|
|
|
var/list/throw_settings = throw_options[throw_mode]
|
|
COOLDOWN_START(src, throw_cooldown, throw_settings["cooldown"])
|
|
var/atom/dagger = user.fire_projectile(throw_settings["projectile"], target, 'sound/items/weapons/fwoosh.ogg', user)
|
|
if(isnull(dagger))
|
|
return
|
|
|
|
set_dagger_icon(thrown = TRUE) //when we throw a dagger, we'll only be holding 1
|
|
user.Beam(dagger, icon_state = "chain", icon = 'icons/obj/mining_zones/artefacts.dmi', maxdistance = 9, layer = BELOW_MOB_LAYER)
|
|
RegisterSignal(dagger, COMSIG_QDELETING, PROC_REF(reset_dagger_icon))
|
|
RegisterSignal(dagger, COMSIG_PROJECTILE_SELF_ON_HIT, PROC_REF(on_dagger_hit))
|
|
|
|
/obj/item/cain_and_abel/proc/on_dagger_hit(obj/projectile/dagger/source, atom/movable/firer, atom/target, Angle)
|
|
SIGNAL_HANDLER
|
|
|
|
UnregisterSignal(source, list(COMSIG_QDELETING, COMSIG_PROJECTILE_SELF_ON_HIT))
|
|
if(!ismob(loc))
|
|
return
|
|
|
|
var/atom/dagger_visual = source.dagger_effects(target)
|
|
if(!QDELETED(dagger_visual))
|
|
RegisterSignal(dagger_visual, COMSIG_QDELETING, PROC_REF(reset_dagger_icon))
|
|
return
|
|
|
|
set_dagger_icon(thrown = FALSE)
|
|
|
|
/obj/item/cain_and_abel/proc/set_dagger_icon(thrown = FALSE)
|
|
dagger_thrown = thrown
|
|
update_dagger_icon()
|
|
update_inhand_icon()
|
|
|
|
/obj/item/cain_and_abel/proc/reset_dagger_icon(datum/source)
|
|
SIGNAL_HANDLER
|
|
set_dagger_icon(thrown = FALSE)
|
|
|
|
#undef THROW_CRYSTALS_COOLDOWN
|
|
#undef THROW_LAUNCH_COOLDOWN
|