mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-13 08:03:43 +01:00
Enhances the Smoking Experience - Adds Many New Item Interactions for Cigarettes and Items Interacting With Them (#25571)
* Refactoring and other stuff. * moar * More smoking * Update energy_melee_weapons.dm * Update code/game/objects/items/robot/cyborg_gripper.dm Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com> Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com> Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com> * Update cigs.dm * Update cigs.dm * Update cigs.dm * Update code/game/objects/items/weapons/lighters.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com> * eee * Apply suggestions from code review Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com> * sigh * Update cigs.dm * Apply suggestions from code review Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com> * hell * Update cigs.dm * aa * cool * Fixing some minor typos for cyborg upgrade flavour text Throws in some missing apostrophes, capitalisation, and the letter "s." * Briefcase Full of Cash buff Increases the amount of cash in the Syndicate Briefcase Full of Cash from 600 Cr to 1000 Cr * Reverts double-feature PR * Reverts a broken revert * Reverting again because Ebba told me to * And reverting yet again * Update robot_upgrades.dm * aa * aaa * suffering * Soon * Is it done!? Am I finally free!? * Apply suggestions from code review Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com> * Update * Update * No longer assume the cig is in a mouth * Update tools.dm * Update pronouns.dm * Fixing some minor typos for cyborg upgrade flavour text Throws in some missing apostrophes, capitalisation, and the letter "s." * Briefcase Full of Cash buff Increases the amount of cash in the Syndicate Briefcase Full of Cash from 600 Cr to 1000 Cr * Reverts double-feature PR * Reverts a broken revert * Reverting again because Ebba told me to * And reverting yet again * Update robot_upgrades.dm * Fixing some minor typos for cyborg upgrade flavour text Throws in some missing apostrophes, capitalisation, and the letter "s." * Briefcase Full of Cash buff Increases the amount of cash in the Syndicate Briefcase Full of Cash from 600 Cr to 1000 Cr * Reverts double-feature PR * Reverts a broken revert * Reverting again because Ebba told me to * And reverting yet again * Update robot_upgrades.dm * update * Attack animations for sword lighting! * Update * indentation * Update cigs.dm * minor refactor * Update items.dm * Update items.dm * Update welder.dm * Update energy_melee_weapons.dm * Apply suggestions from code review Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com> * refactor * Update items.dm * Apply suggestions from code review Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com> * Fixing some minor typos for cyborg upgrade flavour text Throws in some missing apostrophes, capitalisation, and the letter "s." * Briefcase Full of Cash buff Increases the amount of cash in the Syndicate Briefcase Full of Cash from 600 Cr to 1000 Cr * Reverts double-feature PR * Reverts a broken revert * Reverting again because Ebba told me to * And reverting yet again * Update robot_upgrades.dm * Update flamethrower.dm * clipping * Update legion_loot.dm * anti attack check * Fixes a zippo runtime * Fixes evil runtime and stops unnecessary violence. * Apply suggestions from code review Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com> * Update based on review * Update cigs.dm * Update energy_melee_weapons.dm * Apply suggestions from code review Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com> * Update toys.dm * Update energy_melee_weapons.dm * Update legion_loot.dm * Update code/game/objects/items/weapons/melee/energy_melee_weapons.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com> --------- Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com> Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
This commit is contained in:
@@ -28,7 +28,10 @@
|
||||
var/turf/location = get_turf(loc)
|
||||
if(location)
|
||||
location.hotspot_expose(1000, 1000)
|
||||
|
||||
visible_message(
|
||||
"<span class='notice'>Sparks shoot out of [src].</span>",
|
||||
"<span class='warning'>You hear a shower of sparks shooting out from something!</span>"
|
||||
)
|
||||
sparks.start()
|
||||
|
||||
if(istype(loc, /obj/item/assembly_holder))
|
||||
@@ -54,6 +57,30 @@
|
||||
|
||||
return TRUE
|
||||
|
||||
/obj/item/assembly/igniter/attack(mob/living/target, mob/living/user)
|
||||
if(!cigarette_lighter_act(user, target))
|
||||
return ..()
|
||||
|
||||
/obj/item/assembly/igniter/cigarette_lighter_act(mob/living/user, mob/living/target, obj/item/direct_attackby_item)
|
||||
var/obj/item/clothing/mask/cigarette/cig = ..()
|
||||
if(!cig)
|
||||
return !isnull(cig)
|
||||
|
||||
if(target == user)
|
||||
user.visible_message(
|
||||
"<span class='notice'>[user] presses [src] against [cig] and activates it, lighting [cig] in a shower of sparks!</span>",
|
||||
"<span class='notice'>You press [src] against [cig] and activates it, lighting [cig] in a shower of sparks!</span>",
|
||||
"<span class='warning'>You hear a shower of sparks shooting out from something!</span>"
|
||||
)
|
||||
else
|
||||
user.visible_message(
|
||||
"<span class='notice'>[user] presses [src] against [cig] and activates it, lighting [cig] for [target] in a shower of sparks!</span>",
|
||||
"<span class='notice'>You press [src] against [cig] and activate it, lighting [cig] in a shower of sparks!</span>",
|
||||
"<span class='warning'>You hear a shower of sparks shooting out from something!</span>"
|
||||
)
|
||||
sparks.start() // Make sparks fly!
|
||||
cig.light(user, target)
|
||||
return TRUE
|
||||
|
||||
/obj/item/assembly/igniter/attack_self(mob/user)
|
||||
if(!istype(loc, /obj/item/assembly_holder))
|
||||
|
||||
@@ -273,6 +273,28 @@
|
||||
. = ..()
|
||||
banned_turfs = typecacheof(list(/turf/space/transit, /turf/simulated/wall, /turf/simulated/mineral))
|
||||
|
||||
/obj/item/lava_staff/attack(mob/target, mob/living/user)
|
||||
if(!cigarette_lighter_act(user, target))
|
||||
return ..()
|
||||
|
||||
/obj/item/lava_staff/cigarette_lighter_act(mob/living/user, mob/living/target, obj/item/direct_attackby_item)
|
||||
var/obj/item/clothing/mask/cigarette/cig = ..()
|
||||
if(!cig)
|
||||
return !isnull(cig)
|
||||
|
||||
if(target == user)
|
||||
user.visible_message(
|
||||
"<span class='notice'>[user] holds the tip of [src] near [user.p_their()] [cig.name] until it is suddenly set alight.</span>",
|
||||
"<span class='notice'>You hold the tip of [src] near [cig] until it is suddenly set alight.</span>",
|
||||
)
|
||||
else
|
||||
user.visible_message(
|
||||
"<span class='notice'>[user] points [src] at [target] until [target.p_their()] [cig.name] is suddenly set alight.</span>",
|
||||
"<span class='notice'>You point [src] at [target] until [target.p_their()] [cig] is suddenly set alight.</span>",
|
||||
)
|
||||
cig.light(user, target)
|
||||
return TRUE
|
||||
|
||||
/obj/item/lava_staff/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
..()
|
||||
if(timer > world.time)
|
||||
|
||||
@@ -30,6 +30,38 @@
|
||||
. += "<span class='notice'>Use it on targets to summon thunderbolts from the sky.</span>"
|
||||
. += "<span class='notice'>The thunderbolts are boosted if in an area with weather effects.</span>"
|
||||
|
||||
/obj/item/storm_staff/attack(mob/living/target, mob/living/user)
|
||||
if(cigarette_lighter_act(user, target))
|
||||
return TRUE
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/item/storm_staff/cigarette_lighter_act(mob/living/user, mob/living/target, obj/item/direct_attackby_item)
|
||||
var/obj/item/clothing/mask/cigarette/cig = ..()
|
||||
if(!cig)
|
||||
return !isnull(cig)
|
||||
|
||||
if(!thunder_charges)
|
||||
to_chat(user, "<span class='warning'>[src] needs to recharge!</span>")
|
||||
return TRUE
|
||||
|
||||
if(target == user)
|
||||
user.visible_message(
|
||||
"<span class='warning'>[user] holds [src] up to [user.p_their()] [cig.name] and shoots a tiny bolt of lightning that sets it alight!</span>",
|
||||
"<span class='warning'>You hold [src] up to [cig] and shoot a tiny bolt of lightning that sets it alight!</span>",
|
||||
"<span class='danger'>A thundercrack fills the air!</span>"
|
||||
)
|
||||
else
|
||||
user.visible_message(
|
||||
"<span class='warning'>[user] points [src] at [target] and shoots a tiny bolt of lightning that sets [target.p_their()] [cig.name] alight!</span>",
|
||||
"<span class='warning'>You point [src] at [target] and shoot a tiny bolt of lightning that sets [target.p_their()] [cig.name] alight!</span>",
|
||||
"<span class='danger'>A thundercrack fills the air!</span>"
|
||||
)
|
||||
cig.light(user, target)
|
||||
playsound(target, 'sound/magic/lightningbolt.ogg', 50, TRUE)
|
||||
thunder_charges--
|
||||
return TRUE
|
||||
|
||||
/obj/item/storm_staff/attack_self(mob/user)
|
||||
var/area/user_area = get_area(user)
|
||||
var/turf/user_turf = get_turf(user)
|
||||
@@ -48,9 +80,11 @@
|
||||
if(A.stage == WEATHER_WIND_DOWN_STAGE)
|
||||
to_chat(user, "<span class='warning'>The storm is already ending! It would be a waste to use the staff now.</span>")
|
||||
return
|
||||
user.visible_message("<span class='warning'>[user] holds [src] skywards as an orange beam travels into the sky!</span>", \
|
||||
"<span class='notice'>You hold [src] skyward, dispelling the storm!</span>")
|
||||
playsound(user, 'sound/magic/staff_change.ogg', 200, 0)
|
||||
user.visible_message(
|
||||
"<span class='warning'>[user] holds [src] skywards as an orange beam travels into the sky!</span>",
|
||||
"<span class='notice'>You hold [src] skyward, dispelling the storm!</span>"
|
||||
)
|
||||
playsound(user, 'sound/magic/staff_change.ogg', 200, FALSE)
|
||||
A.wind_down()
|
||||
var/old_color = user.color
|
||||
user.color = list(340/255, 240/255, 0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0)
|
||||
@@ -59,6 +93,13 @@
|
||||
animate(user, color = old_color, transform = old_transform, time = 1 SECONDS)
|
||||
|
||||
/obj/item/storm_staff/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
// This early return stops the staff from shooting lightning at someone when being used as a lighter.
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/cig_haver = target
|
||||
var/mask_item = cig_haver.get_item_by_slot(SLOT_HUD_WEAR_MASK)
|
||||
if(istype(mask_item, /obj/item/clothing/mask/cigarette) && user.zone_selected == "mouth" && user.a_intent == INTENT_HELP)
|
||||
return
|
||||
|
||||
. = ..()
|
||||
if(!thunder_charges)
|
||||
to_chat(user, "<span class='warning'>The staff needs to recharge.</span>")
|
||||
@@ -120,7 +161,10 @@
|
||||
for(var/obj/hit_thing in T)
|
||||
hit_thing.take_damage(20, BURN, ENERGY, FALSE)
|
||||
playsound(target, 'sound/magic/lightningbolt.ogg', 100, TRUE)
|
||||
target.visible_message("<span class='danger'>A thunderbolt strikes [target]!</span>")
|
||||
target.visible_message(
|
||||
"<span class='danger'>A thunderbolt strikes [target]!</span>",
|
||||
"<span class='danger'>A thundercrack fills the air!</span>"
|
||||
)
|
||||
explosion(target, -1, -1, light_impact_range = (boosted ? 1 : 0), flame_range = (boosted ? 2 : 1), silent = TRUE)
|
||||
|
||||
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
/* Pens!
|
||||
* Contains:
|
||||
* Pens
|
||||
* Sleepy Pens
|
||||
* Edaggers
|
||||
* CONTENTS:
|
||||
* 1. PENS
|
||||
* 2. SLEEPYPENS
|
||||
* 3. E-DAGGERS
|
||||
4. POISON PEN
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Pens
|
||||
*/
|
||||
// PENS
|
||||
|
||||
/obj/item/pen
|
||||
desc = "It's a normal black ink pen."
|
||||
name = "pen"
|
||||
@@ -139,15 +139,13 @@
|
||||
desc = "An expensive-looking pen only issued to heads of cargo."
|
||||
icon_state = "pen_qm"
|
||||
|
||||
/*
|
||||
* Sleepypens
|
||||
*/
|
||||
// SLEEPYPEN
|
||||
|
||||
/obj/item/pen/sleepy
|
||||
container_type = OPENCONTAINER
|
||||
origin_tech = "engineering=4;syndicate=2"
|
||||
var/transfer_amount = 50
|
||||
|
||||
|
||||
/obj/item/pen/sleepy/attack(mob/living/M, mob/user)
|
||||
if(!istype(M))
|
||||
return
|
||||
@@ -169,7 +167,6 @@
|
||||
add_attack_logs(user, M, "Stabbed with (sleepy) [src]. [transfered]u of reagents transfered from pen containing [english_list(contained)].")
|
||||
return TRUE
|
||||
|
||||
|
||||
/obj/item/pen/sleepy/Initialize(mapload)
|
||||
. = ..()
|
||||
create_reagents(100)
|
||||
@@ -201,12 +198,11 @@
|
||||
desc = "Used to stealthily inject targets. Comes loaded with ketamine but can be refilled with other chemicals. This one isn't disguised."
|
||||
icon_state = "pen_syndie"
|
||||
|
||||
/*
|
||||
* (Alan) Edaggers
|
||||
*/
|
||||
// E-DAGGER
|
||||
|
||||
/obj/item/pen/edagger
|
||||
origin_tech = "combat=3;syndicate=1"
|
||||
var/on = FALSE
|
||||
var/active = FALSE
|
||||
var/brightness_on = 2
|
||||
light_color = LIGHT_COLOR_RED
|
||||
var/backstab_sound = 'sound/items/unsheath.ogg'
|
||||
@@ -215,14 +211,20 @@
|
||||
throw_speed = 4
|
||||
|
||||
/obj/item/pen/edagger/attack(mob/living/M, mob/living/user, def_zone)
|
||||
if(cigarette_lighter_act(user, M))
|
||||
return
|
||||
|
||||
var/extra_force_applied = FALSE
|
||||
if(on && user.dir == M.dir && !HAS_TRAIT(M, TRAIT_FLOORED) && user != M)
|
||||
if(active && user.dir == M.dir && !HAS_TRAIT(M, TRAIT_FLOORED) && user != M)
|
||||
force += backstab_damage
|
||||
extra_force_applied = TRUE
|
||||
add_attack_logs(user, M, "Backstabbed with [src]", ATKLOG_ALL)
|
||||
M.apply_damage(40, STAMINA) //Just enough to slow
|
||||
M.KnockDown(2 SECONDS)
|
||||
M.visible_message("<span class='warning'>[user] stabs [M] in the back!</span>", "<span class='userdanger'>[user] stabs you in the back! The energy blade makes you collapse in pain!</span>")
|
||||
M.visible_message(
|
||||
"<span class='warning'>[user] stabs [M] in the back!</span>",
|
||||
"<span class='userdanger'>[user] stabs you in the back! The energy blade makes you collapse in pain!</span>"
|
||||
)
|
||||
|
||||
playsound(loc, backstab_sound, 5, TRUE, ignore_walls = FALSE, falloff_distance = 0)
|
||||
else
|
||||
@@ -231,13 +233,40 @@
|
||||
if(extra_force_applied)
|
||||
force -= backstab_damage
|
||||
|
||||
/obj/item/pen/edagger/get_clamped_volume() //So the parent proc of attack isn't the loudest sound known to man
|
||||
return 0
|
||||
/obj/item/pen/edagger/cigarette_lighter_act(mob/living/user, mob/living/carbon/target, obj/item/direct_attackby_item)
|
||||
var/obj/item/clothing/mask/cigarette/cig = ..()
|
||||
if(!cig)
|
||||
return !isnull(cig)
|
||||
|
||||
if(!active)
|
||||
to_chat(user, "<span class='warning'>You need to activate [src] before you can light anything with it!</span>")
|
||||
return TRUE
|
||||
|
||||
if(target == user)
|
||||
user.visible_message(
|
||||
"<span class='warning'>[user] makes a violent slashing motion, barely missing [user.p_their()] nose as light flashes! \
|
||||
[user.p_they(TRUE)] light[user.p_s()] [user.p_their()] [cig] with [src] in the process.</span>",
|
||||
"<span class='notice'>You casually slash [src] at [cig], lighting it with the blade.</span>",
|
||||
"<span class='danger'>You hear an energy blade slashing something!</span>"
|
||||
)
|
||||
else
|
||||
user.visible_message(
|
||||
"<span class='danger'>[user] makes a violent slashing motion, barely missing the nose of [target] as light flashes! \
|
||||
[user.p_they(TRUE)] light[user.p_s()] [cig] in the mouth of [target] with [src] in the process.</span>",
|
||||
"<span class='notice'>You casually slash [src] at [cig] in the mouth of [target], lighting it with the blade.</span>",
|
||||
"<span class='danger'>You hear an energy blade slashing something!</span>"
|
||||
)
|
||||
user.do_attack_animation(target)
|
||||
playsound(user.loc, hitsound, 5, TRUE, ignore_walls = FALSE, falloff_distance = 0)
|
||||
cig.light(user, target)
|
||||
return TRUE
|
||||
|
||||
/obj/item/pen/edagger/get_clamped_volume() //So the parent proc of attack isn't the loudest sound known to man
|
||||
return FALSE
|
||||
|
||||
/obj/item/pen/edagger/attack_self(mob/living/user)
|
||||
if(on)
|
||||
on = FALSE
|
||||
if(active)
|
||||
active = FALSE
|
||||
force = initial(force)
|
||||
w_class = initial(w_class)
|
||||
name = initial(name)
|
||||
@@ -249,7 +278,7 @@
|
||||
to_chat(user, "<span class='warning'>[src] can now be concealed.</span>")
|
||||
set_light(0)
|
||||
else
|
||||
on = TRUE
|
||||
active = TRUE
|
||||
force = 18
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
name = "energy dagger"
|
||||
@@ -257,14 +286,14 @@
|
||||
hitsound = 'sound/weapons/blade1.ogg'
|
||||
embed_chance = 100 //rule of cool
|
||||
throwforce = 35
|
||||
playsound(user, 'sound/weapons/saberon.ogg', 2, 1)
|
||||
playsound(user, 'sound/weapons/saberon.ogg', 2, TRUE)
|
||||
to_chat(user, "<span class='warning'>[src] is now active.</span>")
|
||||
set_light(brightness_on, 1)
|
||||
set_sharpness(on)
|
||||
set_sharpness(active)
|
||||
update_icon()
|
||||
|
||||
/obj/item/pen/edagger/update_icon_state()
|
||||
if(on)
|
||||
if(active)
|
||||
icon_state = "edagger"
|
||||
item_state = "edagger"
|
||||
else
|
||||
@@ -274,6 +303,8 @@
|
||||
/obj/item/proc/on_write(obj/item/paper/P, mob/user)
|
||||
return
|
||||
|
||||
// POISON PEN
|
||||
|
||||
/obj/item/pen/multi/poison
|
||||
var/current_poison = null
|
||||
|
||||
|
||||
@@ -1,3 +1,16 @@
|
||||
/*
|
||||
CONTENTS:
|
||||
1. Wand of Nothing
|
||||
2. Wand of Death
|
||||
3. Wand of Healing
|
||||
4. Wand of Polymorph
|
||||
5. Wand of Teleportation
|
||||
6. Wand of Door Creation
|
||||
7. Wand of Fireball
|
||||
8. Wand of Slipping
|
||||
9. Wand of Chaos
|
||||
*/
|
||||
|
||||
/obj/item/gun/magic/wand
|
||||
name = "wand of nothing"
|
||||
desc = "It's not just a stick, it's a MAGIC stick!"
|
||||
@@ -59,9 +72,8 @@
|
||||
user.create_attack_log("<b>[key_name(user)]</b> zapped [user.p_themselves()] with a <b>[src]</b>")
|
||||
add_attack_logs(user, user, "zapped [user.p_themselves()] with a [src]", ATKLOG_ALL)
|
||||
|
||||
/////////////////////////////////////
|
||||
//WAND OF DEATH
|
||||
/////////////////////////////////////
|
||||
// WAND OF DEATH
|
||||
|
||||
|
||||
/obj/item/gun/magic/wand/death
|
||||
name = "wand of death"
|
||||
@@ -85,9 +97,7 @@
|
||||
user.adjustFireLoss(6969)
|
||||
user.death(FALSE)
|
||||
|
||||
/////////////////////////////////////
|
||||
//WAND OF HEALING
|
||||
/////////////////////////////////////
|
||||
// WAND OF HEALING
|
||||
|
||||
/obj/item/gun/magic/wand/resurrection
|
||||
name = "wand of resurrection"
|
||||
@@ -109,9 +119,8 @@
|
||||
user.revive()
|
||||
to_chat(user, "<span class='notice'>You feel great!</span>")
|
||||
|
||||
/////////////////////////////////////
|
||||
//WAND OF POLYMORPH
|
||||
/////////////////////////////////////
|
||||
// WAND OF POLYMORPH
|
||||
|
||||
|
||||
/obj/item/gun/magic/wand/polymorph
|
||||
name = "wand of polymorph"
|
||||
@@ -127,9 +136,8 @@
|
||||
wabbajack(user)
|
||||
charges--
|
||||
|
||||
/////////////////////////////////////
|
||||
//WAND OF TELEPORTATION
|
||||
/////////////////////////////////////
|
||||
// WAND OF TELEPORTATION
|
||||
|
||||
|
||||
/obj/item/gun/magic/wand/teleport
|
||||
name = "wand of teleportation"
|
||||
@@ -149,9 +157,8 @@
|
||||
charges--
|
||||
..()
|
||||
|
||||
/////////////////////////////////////
|
||||
//WAND OF DOOR CREATION
|
||||
/////////////////////////////////////
|
||||
// WAND OF DOOR CREATION
|
||||
|
||||
|
||||
/obj/item/gun/magic/wand/door
|
||||
name = "wand of door creation"
|
||||
@@ -168,9 +175,8 @@
|
||||
charges--
|
||||
..()
|
||||
|
||||
/////////////////////////////////////
|
||||
//WAND OF FIREBALL
|
||||
/////////////////////////////////////
|
||||
// WAND OF FIREBALL
|
||||
|
||||
|
||||
/obj/item/gun/magic/wand/fireball
|
||||
name = "wand of fireball"
|
||||
@@ -186,9 +192,61 @@
|
||||
charges--
|
||||
..()
|
||||
|
||||
/////////////////////////////////////
|
||||
//WAND OF SLIPPING
|
||||
/////////////////////////////////////
|
||||
/obj/item/gun/magic/wand/fireball/attack(atom/target, mob/living/user)
|
||||
if(!iscarbon(target))
|
||||
return ..()
|
||||
|
||||
var/mob/living/M = target
|
||||
if(cigarette_lighter_act(user, M))
|
||||
return
|
||||
|
||||
if(M != user) // Do not blow yourself up!
|
||||
return ..() // Blow everyone else up!
|
||||
|
||||
/obj/item/gun/magic/wand/fireball/cigarette_lighter_act(mob/living/user, mob/living/target, obj/item/direct_attackby_item)
|
||||
var/obj/item/clothing/mask/cigarette/cig = ..()
|
||||
if(!cig)
|
||||
return !isnull(cig)
|
||||
|
||||
if(!charges)
|
||||
to_chat(user, "<span class='warning'>[src] is out of charge!</span>")
|
||||
return TRUE
|
||||
|
||||
if(prob(50) || user.mind.assigned_role == "Wizard")
|
||||
if(target == user)
|
||||
user.visible_message(
|
||||
"<span class='warning'>Holy shit! Did [user] just manage to light [user.p_their()] [cig.name] with [src], with only moderate eyebrow singing!?</span>",
|
||||
"<span class='notice'>You swish and flick [src], lighting [cig] with a plume of flame, whilst only moderately eyebrow singing your eyebrows.</span>",
|
||||
"<span class='warning'>You hear a brief burst of flame!</span>"
|
||||
)
|
||||
else
|
||||
user.visible_message(
|
||||
"<span class='warning'>Holy shit! Did [user] just manage to light [cig] for [target] with [src], only moderately singing [target.p_their()] eyebrows!?</span>",
|
||||
"<span class='notice'>You swish and flick [src] at [target], lighting [user.p_their()] [cig.name] with a plume of flame, whilst only moderately singing [target.p_their()] eyebrows.</span>",
|
||||
"<span class='warning'>You hear a brief burst of flame!</span>"
|
||||
)
|
||||
cig.light(user, target)
|
||||
return TRUE
|
||||
|
||||
// Oops...
|
||||
user.visible_message(
|
||||
"<span class='userdanger'>Unsure which end of [src] is which, [user] zaps [user.p_themselves()] with a fireball!</span>",
|
||||
"<span class='userdanger'>Unsure which end of [src] is which, you accidentally zap yourself with a fireball!</span>",
|
||||
"<span class='userdanger'>You hear a firey explosion!</span>"
|
||||
)
|
||||
explosion(user.loc, -1, 0, 2, 3, 0, flame_range = 2)
|
||||
charges--
|
||||
return TRUE
|
||||
|
||||
// This is needed to you don't try to perform an execution/suicide when lighting a cigarette.
|
||||
/obj/item/gun/magic/wand/fireball/handle_suicide(mob/user, mob/living/carbon/human/target, params)
|
||||
var/mask_item = target.get_item_by_slot(SLOT_HUD_WEAR_MASK)
|
||||
if(istype(mask_item, /obj/item/clothing/mask/cigarette) && user.zone_selected == "mouth" && user.a_intent == INTENT_HELP)
|
||||
return
|
||||
. = ..()
|
||||
|
||||
// WAND OF SLIPPING
|
||||
|
||||
/obj/item/gun/magic/wand/slipping
|
||||
name = "wand of slipping"
|
||||
desc = "This wand shoots... banana peels?"
|
||||
@@ -202,9 +260,8 @@
|
||||
charges--
|
||||
..()
|
||||
|
||||
/////////////////////////////////////
|
||||
//WAND OF CHAOS - Only spawned by the Staff of Chaos as a rare random effect
|
||||
/////////////////////////////////////
|
||||
// WAND OF CHAOS - Only spawned by the Staff of Chaos as a rare random effect
|
||||
|
||||
/obj/item/gun/magic/wand/chaos
|
||||
name = "wand of chaos"
|
||||
desc = "Payback time!"
|
||||
|
||||
@@ -56,6 +56,28 @@
|
||||
attack_verb = list("burnt")
|
||||
tool_behaviour = TOOL_CAUTERY
|
||||
|
||||
/obj/item/cautery/attack(mob/living/target, mob/living/user)
|
||||
if(!cigarette_lighter_act(user, target))
|
||||
return ..()
|
||||
|
||||
/obj/item/cautery/cigarette_lighter_act(mob/living/user, mob/living/target, obj/item/direct_attackby_item)
|
||||
var/obj/item/clothing/mask/cigarette/cig = ..()
|
||||
if(!cig)
|
||||
return !isnull(cig)
|
||||
|
||||
if(target == user)
|
||||
user.visible_message(
|
||||
"<span class='notice'>[user] presses [src] against [cig], heating it until it lights.</span>",
|
||||
"<span class='notice'>You press [src] against [cig], heating it until it lights.</span>"
|
||||
)
|
||||
else
|
||||
user.visible_message(
|
||||
"<span class='notice'>[user] presses [src] against [cig] for [target], heating it until it lights.</span>",
|
||||
"<span class='notice'>You press [src] against [cig] for [target], heating it until it lights.</span>"
|
||||
)
|
||||
cig.light(user, target)
|
||||
return TRUE
|
||||
|
||||
/obj/item/cautery/Initialize(mapload)
|
||||
. = ..()
|
||||
ADD_TRAIT(src, TRAIT_SURGICAL, ROUNDSTART_TRAIT)
|
||||
@@ -146,6 +168,28 @@
|
||||
damtype = "fire"
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
|
||||
/obj/item/scalpel/laser/attack(mob/living/carbon/target, mob/living/user)
|
||||
if(!cigarette_lighter_act(user, target))
|
||||
return ..()
|
||||
|
||||
/obj/item/scalpel/laser/cigarette_lighter_act(mob/living/user, mob/living/target, obj/item/direct_attackby_item)
|
||||
var/obj/item/clothing/mask/cigarette/cig = ..()
|
||||
if(!cig)
|
||||
return !isnull(cig)
|
||||
|
||||
if(target == user)
|
||||
user.visible_message(
|
||||
"<span class='notice'>[user] presses [src] against [cig], heating it until it lights.</span>",
|
||||
"<span class='notice'>You press [src] against [cig], heating it until it lights.</span>"
|
||||
)
|
||||
else
|
||||
user.visible_message(
|
||||
"<span class='notice'>[user] presses [src] against [cig] for [target], heating it until it lights.</span>",
|
||||
"<span class='notice'>You press [src] against [cig] for [target], heating it until it lights.</span>"
|
||||
)
|
||||
cig.light(user, target)
|
||||
return TRUE
|
||||
|
||||
/// lasers also count as catuarys
|
||||
/obj/item/scalpel/laser/laser1
|
||||
name = "laser scalpel"
|
||||
|
||||
Reference in New Issue
Block a user