|
|
|
@@ -24,9 +24,9 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
*/
|
|
|
|
|
/obj/item/banhammer/attack(mob/M, mob/user)
|
|
|
|
|
if(user.zone_selected == BODY_ZONE_HEAD)
|
|
|
|
|
M.visible_message("<span class='danger'>[user] are stroking the head of [M] with a bangammer</span>", "<span class='userdanger'>[user] are stroking the head with a bangammer</span>", "you hear a bangammer stroking a head");
|
|
|
|
|
M.visible_message("<span class='danger'>[user] are stroking the head of [M] with a bangammer.</span>", "<span class='userdanger'>[user] are stroking your head with a bangammer.</span>", "<span class='hear'>You hear a bangammer stroking a head.</span>") // see above comment
|
|
|
|
|
else
|
|
|
|
|
M.visible_message("<span class='danger'>[M] has been banned FOR NO REISIN by [user]</span>", "<span class='userdanger'>You have been banned FOR NO REISIN by [user]</span>", "you hear a banhammer banning someone")
|
|
|
|
|
M.visible_message("<span class='danger'>[M] has been banned FOR NO REISIN by [user]!</span>", "<span class='userdanger'>You have been banned FOR NO REISIN by [user]!</span>", "<span class='hear'>You hear a banhammer banning someone.</span>")
|
|
|
|
|
playsound(loc, 'sound/effects/adminhelp.ogg', 15) //keep it at 15% volume so people don't jump out of their skin too much
|
|
|
|
|
if(user.a_intent != INTENT_HELP)
|
|
|
|
|
return ..(M, user)
|
|
|
|
@@ -89,7 +89,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
/obj/item/claymore/highlander //ALL COMMENTS MADE REGARDING THIS SWORD MUST BE MADE IN ALL CAPS
|
|
|
|
|
desc = "<b><i>THERE CAN BE ONLY ONE, AND IT WILL BE YOU!!!</i></b>\nActivate it in your hand to point to the nearest victim."
|
|
|
|
|
flags_1 = CONDUCT_1
|
|
|
|
|
item_flags = DROPDEL
|
|
|
|
|
item_flags = DROPDEL //WOW BRO YOU LOST AN ARM, GUESS WHAT YOU DONT GET YOUR SWORD ANYMORE //I CANT BELIEVE SPOOKYDONUT WOULD BREAK THE REQUIREMENTS
|
|
|
|
|
slot_flags = null
|
|
|
|
|
block_chance = 0 //RNG WON'T HELP YOU NOW, PANSY
|
|
|
|
|
light_range = 3
|
|
|
|
@@ -130,8 +130,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
/obj/item/claymore/highlander/dropped(mob/living/user)
|
|
|
|
|
. = ..()
|
|
|
|
|
user.unignore_slowdown(HIGHLANDER)
|
|
|
|
|
if(!QDELETED(src))
|
|
|
|
|
qdel(src) //If this ever happens, it's because you lost an arm
|
|
|
|
|
|
|
|
|
|
/obj/item/claymore/highlander/examine(mob/user)
|
|
|
|
|
. = ..()
|
|
|
|
@@ -141,8 +139,8 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
|
|
|
|
|
/obj/item/claymore/highlander/attack(mob/living/target, mob/living/user)
|
|
|
|
|
. = ..()
|
|
|
|
|
if(!QDELETED(target) && iscarbon(target) && target.stat == DEAD && target.mind && target.mind.special_role == "highlander")
|
|
|
|
|
user.fully_heal() //STEAL THE LIFE OF OUR FALLEN FOES
|
|
|
|
|
if(!QDELETED(target) && target.stat == DEAD && target.mind && target.mind.special_role == "highlander")
|
|
|
|
|
user.fully_heal(admin_revive = FALSE) //STEAL THE LIFE OF OUR FALLEN FOES
|
|
|
|
|
add_notch(user)
|
|
|
|
|
target.visible_message("<span class='warning'>[target] crumbles to dust beneath [user]'s blows!</span>", "<span class='userdanger'>As you fall, your body crumbles to dust!</span>")
|
|
|
|
|
target.dust()
|
|
|
|
@@ -150,9 +148,13 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
/obj/item/claymore/highlander/attack_self(mob/living/user)
|
|
|
|
|
var/closest_victim
|
|
|
|
|
var/closest_distance = 255
|
|
|
|
|
for(var/mob/living/carbon/human/H in GLOB.player_list - user)
|
|
|
|
|
if(H.client && H.mind.special_role == "highlander" && (!closest_victim || get_dist(user, closest_victim) < closest_distance))
|
|
|
|
|
closest_victim = H
|
|
|
|
|
for(var/mob/living/carbon/human/scot in GLOB.player_list - user)
|
|
|
|
|
if(scot.mind.special_role == "highlander" && (!closest_victim || get_dist(user, closest_victim) < closest_distance))
|
|
|
|
|
closest_victim = scot
|
|
|
|
|
for(var/mob/living/silicon/robot/siliscot in GLOB.player_list - user)
|
|
|
|
|
if(siliscot.mind.special_role == "highlander" && (!closest_victim || get_dist(user, closest_victim) < closest_distance))
|
|
|
|
|
closest_victim = siliscot
|
|
|
|
|
|
|
|
|
|
if(!closest_victim)
|
|
|
|
|
to_chat(user, "<span class='warning'>[src] thrums for a moment and falls dark. Perhaps there's nobody nearby.</span>")
|
|
|
|
|
return
|
|
|
|
@@ -161,7 +163,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
/obj/item/claymore/highlander/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
|
|
|
|
|
if((attack_type & ATTACK_TYPE_PROJECTILE) && is_energy_reflectable_projectile(object))
|
|
|
|
|
return BLOCK_SUCCESS | BLOCK_SHOULD_REDIRECT | BLOCK_PHYSICAL_EXTERNAL | BLOCK_REDIRECTED
|
|
|
|
|
return ..()
|
|
|
|
|
return ..() //YOU THINK YOUR PUNY LASERS CAN STOP ME?
|
|
|
|
|
|
|
|
|
|
/obj/item/claymore/highlander/proc/add_notch(mob/living/user) //DYNAMIC CLAYMORE PROGRESSION SYSTEM - THIS IS THE FUTURE
|
|
|
|
|
notches++
|
|
|
|
@@ -214,7 +216,22 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
remove_atom_colour(ADMIN_COLOUR_PRIORITY)
|
|
|
|
|
|
|
|
|
|
name = new_name
|
|
|
|
|
playsound(user, 'sound/items/screwdriver2.ogg', 50, 1)
|
|
|
|
|
playsound(user, 'sound/items/screwdriver2.ogg', 50, TRUE)
|
|
|
|
|
|
|
|
|
|
/obj/item/claymore/highlander/robot //BLOODTHIRSTY BORGS NOW COME IN PLAID
|
|
|
|
|
icon = 'icons/obj/items_cyborg.dmi'
|
|
|
|
|
icon_state = "claymore_cyborg"
|
|
|
|
|
var/mob/living/silicon/robot/robot
|
|
|
|
|
|
|
|
|
|
/obj/item/claymore/highlander/robot/Initialize()
|
|
|
|
|
var/obj/item/robot_module/kiltkit = loc
|
|
|
|
|
robot = kiltkit.loc
|
|
|
|
|
if(!istype(robot))
|
|
|
|
|
qdel(src)
|
|
|
|
|
return ..()
|
|
|
|
|
|
|
|
|
|
/obj/item/claymore/highlander/robot/process()
|
|
|
|
|
loc.layer = LARGE_MOB_LAYER
|
|
|
|
|
|
|
|
|
|
/obj/item/katana
|
|
|
|
|
name = "katana"
|
|
|
|
@@ -227,7 +244,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK
|
|
|
|
|
force = 40
|
|
|
|
|
throwforce = 10
|
|
|
|
|
w_class = WEIGHT_CLASS_BULKY
|
|
|
|
|
w_class = WEIGHT_CLASS_HUGE
|
|
|
|
|
hitsound = 'sound/weapons/bladeslice.ogg'
|
|
|
|
|
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
|
|
|
|
block_chance = 50
|
|
|
|
@@ -417,7 +434,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
desc = "A misnomer of sorts, this is effectively a blunt katana made from steelwood, a dense organic wood derived from steelcaps. Why steelwood? Druids can use it. Duh."
|
|
|
|
|
icon_state = "bokken_steel"
|
|
|
|
|
item_state = "bokken_steel"
|
|
|
|
|
force = 12
|
|
|
|
|
force = 12
|
|
|
|
|
stamina_damage_increment = 3
|
|
|
|
|
|
|
|
|
|
/obj/item/melee/bokken/waki
|
|
|
|
@@ -427,7 +444,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
item_state = "wakibokken"
|
|
|
|
|
slot_flags = ITEM_SLOT_BELT
|
|
|
|
|
w_class = WEIGHT_CLASS_NORMAL
|
|
|
|
|
force = 6
|
|
|
|
|
force = 6
|
|
|
|
|
stamina_damage_increment = 4
|
|
|
|
|
block_parry_data = /datum/block_parry_data/bokken/waki
|
|
|
|
|
default_parry_data = /datum/block_parry_data/bokken/waki
|
|
|
|
@@ -442,7 +459,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
parry_time_perfect_leeway = 1
|
|
|
|
|
parry_imperfect_falloff_percent = 7.5
|
|
|
|
|
parry_efficiency_to_counterattack = 120
|
|
|
|
|
parry_efficiency_considered_successful = 65
|
|
|
|
|
parry_efficiency_considered_successful = 65
|
|
|
|
|
parry_efficiency_perfect = 120
|
|
|
|
|
parry_efficiency_perfect_override = list(
|
|
|
|
|
TEXT_ATTACK_TYPE_PROJECTILE = 30,
|
|
|
|
@@ -455,10 +472,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
/datum/block_parry_data/bokken/waki/quick_parry //For the parry spammer in you
|
|
|
|
|
parry_stamina_cost = 2 // Slam that parry button
|
|
|
|
|
parry_time_active = 2.5
|
|
|
|
|
parry_time_perfect = 1
|
|
|
|
|
parry_time_perfect = 1
|
|
|
|
|
parry_time_perfect_leeway = 1
|
|
|
|
|
parry_failed_stagger_duration = 1 SECONDS
|
|
|
|
|
parry_failed_clickcd_duration = 1 SECONDS
|
|
|
|
|
parry_failed_clickcd_duration = 1 SECONDS
|
|
|
|
|
|
|
|
|
|
/datum/block_parry_data/bokken/waki/quick_parry/proj
|
|
|
|
|
parry_efficiency_perfect_override = list()
|
|
|
|
@@ -468,7 +485,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
desc = "A misnomer of sorts, this is effectively a blunt wakizashi made from steelwood, a dense organic wood derived from steelcaps. Why steelwood? Druids can use it. Duh."
|
|
|
|
|
icon_state = "wakibokken_steel"
|
|
|
|
|
item_state = "wakibokken_steel"
|
|
|
|
|
force = 8
|
|
|
|
|
force = 8
|
|
|
|
|
stamina_damage_increment = 2
|
|
|
|
|
|
|
|
|
|
/obj/item/melee/bokken/debug
|
|
|
|
@@ -575,7 +592,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
user.put_in_hands(S)
|
|
|
|
|
to_chat(user, "<span class='notice'>You fasten the glass shard to the top of the rod with the cable.</span>")
|
|
|
|
|
|
|
|
|
|
else if(istype(I, /obj/item/assembly/igniter) && !HAS_TRAIT(I, TRAIT_NODROP))
|
|
|
|
|
else if(istype(I, /obj/item/assembly/igniter) && !(HAS_TRAIT(I, TRAIT_NODROP)))
|
|
|
|
|
var/obj/item/melee/baton/cattleprod/P = new /obj/item/melee/baton/cattleprod
|
|
|
|
|
|
|
|
|
|
remove_item_from_storage(user)
|
|
|
|
@@ -598,13 +615,13 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi'
|
|
|
|
|
righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi'
|
|
|
|
|
force = 2
|
|
|
|
|
throwforce = 10 //This is never used on mobs since this has a 100% embed chance.
|
|
|
|
|
throwforce = 10 //10 + 2 (WEIGHT_CLASS_SMALL) * 4 (EMBEDDED_IMPACT_PAIN_MULTIPLIER) = 18 damage on hit due to guaranteed embedding
|
|
|
|
|
throw_speed = 4
|
|
|
|
|
embedding = list("pain_mult" = 4, "embed_chance" = 100, "fall_chance" = 0, "embed_chance_turf_mod" = 15)
|
|
|
|
|
armour_penetration = 40
|
|
|
|
|
|
|
|
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
|
|
|
sharpness = SHARP_EDGED
|
|
|
|
|
sharpness = SHARP_POINTY
|
|
|
|
|
custom_materials = list(/datum/material/iron=500, /datum/material/glass=500)
|
|
|
|
|
resistance_flags = FIRE_PROOF
|
|
|
|
|
|
|
|
|
@@ -639,27 +656,23 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
attack_verb = list("stubbed", "poked")
|
|
|
|
|
resistance_flags = FIRE_PROOF
|
|
|
|
|
var/extended = 0
|
|
|
|
|
var/extended_force = 20
|
|
|
|
|
var/extended_throwforce = 23
|
|
|
|
|
var/extended_icon_state = "switchblade_ext"
|
|
|
|
|
var/retracted_icon_state = "switchblade"
|
|
|
|
|
|
|
|
|
|
/obj/item/switchblade/attack_self(mob/user)
|
|
|
|
|
extended = !extended
|
|
|
|
|
playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, 1)
|
|
|
|
|
playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, TRUE)
|
|
|
|
|
if(extended)
|
|
|
|
|
force = extended_force
|
|
|
|
|
force = 20
|
|
|
|
|
w_class = WEIGHT_CLASS_NORMAL
|
|
|
|
|
throwforce = extended_throwforce
|
|
|
|
|
icon_state = extended_icon_state
|
|
|
|
|
throwforce = 23
|
|
|
|
|
icon_state = "switchblade_ext"
|
|
|
|
|
attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
|
|
|
|
hitsound = 'sound/weapons/bladeslice.ogg'
|
|
|
|
|
sharpness = SHARP_EDGED
|
|
|
|
|
else
|
|
|
|
|
force = initial(force)
|
|
|
|
|
force = 3
|
|
|
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
|
|
|
throwforce = initial(throwforce)
|
|
|
|
|
icon_state = retracted_icon_state
|
|
|
|
|
throwforce = 5
|
|
|
|
|
icon_state = "switchblade"
|
|
|
|
|
attack_verb = list("stubbed", "poked")
|
|
|
|
|
hitsound = 'sound/weapons/genhit.ogg'
|
|
|
|
|
sharpness = SHARP_NONE
|
|
|
|
@@ -750,6 +763,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
user.visible_message("<span class='suicide'>[user] is inhaling [src]! It looks like [user.p_theyre()] trying to visit the astral plane!</span>")
|
|
|
|
|
return (OXYLOSS)
|
|
|
|
|
|
|
|
|
|
// /obj/item/ectoplasm/angelic
|
|
|
|
|
// icon = 'icons/obj/wizard.dmi'
|
|
|
|
|
// icon_state = "angelplasm"
|
|
|
|
|
|
|
|
|
|
/obj/item/mounted_chainsaw
|
|
|
|
|
name = "mounted chainsaw"
|
|
|
|
|
desc = "A chainsaw that has replaced your arm."
|
|
|
|
@@ -758,7 +775,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi'
|
|
|
|
|
righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi'
|
|
|
|
|
item_flags = ABSTRACT | DROPDEL
|
|
|
|
|
w_class = WEIGHT_CLASS_BULKY
|
|
|
|
|
w_class = WEIGHT_CLASS_HUGE
|
|
|
|
|
force = 24
|
|
|
|
|
throwforce = 0
|
|
|
|
|
throw_range = 0
|
|
|
|
@@ -801,7 +818,13 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
/obj/item/statuebust/Initialize()
|
|
|
|
|
. = ..()
|
|
|
|
|
AddElement(/datum/element/art, impressiveness)
|
|
|
|
|
addtimer(CALLBACK(src, /datum.proc/_AddElement, list(/datum/element/beauty, 1000)), 0)
|
|
|
|
|
// AddComponent(/datum/component/beauty, 1000)
|
|
|
|
|
|
|
|
|
|
// /obj/item/statuebust/hippocratic
|
|
|
|
|
// name = "hippocrates bust"
|
|
|
|
|
// desc = "A bust of the famous Greek physician Hippocrates of Kos, often referred to as the father of western medicine."
|
|
|
|
|
// icon_state = "hippocratic"
|
|
|
|
|
// impressiveness = 50
|
|
|
|
|
|
|
|
|
|
/obj/item/tailclub
|
|
|
|
|
name = "tail club"
|
|
|
|
@@ -825,8 +848,8 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
icon_state = "catwhip"
|
|
|
|
|
|
|
|
|
|
/obj/item/melee/skateboard
|
|
|
|
|
name = "improvised skateboard"
|
|
|
|
|
desc = "A skateboard. It can be placed on its wheels and ridden, or used as a strong weapon."
|
|
|
|
|
name = "skateboard"
|
|
|
|
|
desc = "A skateboard. It can be placed on its wheels and ridden, or used as a radical weapon."
|
|
|
|
|
icon_state = "skateboard"
|
|
|
|
|
item_state = "skateboard"
|
|
|
|
|
force = 12
|
|
|
|
@@ -839,17 +862,22 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
/obj/item/melee/skateboard/attack_self(mob/user)
|
|
|
|
|
if(!user.canUseTopic(src, TRUE, FALSE, TRUE))
|
|
|
|
|
return
|
|
|
|
|
var/obj/vehicle/ridden/scooter/skateboard/S = new board_item_type(get_turf(user))
|
|
|
|
|
var/obj/vehicle/ridden/scooter/skateboard/S = new board_item_type(get_turf(user))//this probably has fucky interactions with telekinesis but for the record it wasn't my fault
|
|
|
|
|
S.buckle_mob(user)
|
|
|
|
|
qdel(src)
|
|
|
|
|
|
|
|
|
|
/obj/item/melee/skateboard/improvised
|
|
|
|
|
name = "improvised skateboard"
|
|
|
|
|
desc = "A jury-rigged skateboard. It can be placed on its wheels and ridden, or used as a radical weapon."
|
|
|
|
|
// board_item_type = /obj/vehicle/ridden/scooter/skateboard/improvised
|
|
|
|
|
|
|
|
|
|
/obj/item/melee/skateboard/pro
|
|
|
|
|
name = "skateboard"
|
|
|
|
|
desc = "A RaDSTORMz brand professional skateboard. It looks sturdy and well made."
|
|
|
|
|
desc = "An EightO brand professional skateboard. It looks sturdy and well made."
|
|
|
|
|
icon_state = "skateboard2"
|
|
|
|
|
item_state = "skateboard2"
|
|
|
|
|
board_item_type = /obj/vehicle/ridden/scooter/skateboard/pro
|
|
|
|
|
custom_premium_price = 500
|
|
|
|
|
custom_premium_price = PAYCHECK_HARD * 5
|
|
|
|
|
|
|
|
|
|
/obj/item/melee/skateboard/hoverboard
|
|
|
|
|
name = "hoverboard"
|
|
|
|
@@ -857,10 +885,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
icon_state = "hoverboard_red"
|
|
|
|
|
item_state = "hoverboard_red"
|
|
|
|
|
board_item_type = /obj/vehicle/ridden/scooter/skateboard/hoverboard
|
|
|
|
|
custom_premium_price = 2015
|
|
|
|
|
custom_premium_price = PAYCHECK_COMMAND * 5.4 //If I can't make it a meme I'll make it RAD
|
|
|
|
|
|
|
|
|
|
/obj/item/melee/skateboard/hoverboard/admin
|
|
|
|
|
name = "\improper Board Of Directors"
|
|
|
|
|
name = "Board Of Directors"
|
|
|
|
|
desc = "The engineering complexity of a spaceship concentrated inside of a board. Just as expensive, too."
|
|
|
|
|
icon_state = "hoverboard_nt"
|
|
|
|
|
item_state = "hoverboard_nt"
|
|
|
|
@@ -879,11 +907,19 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
throwforce = 12
|
|
|
|
|
attack_verb = list("beat", "smacked")
|
|
|
|
|
custom_materials = list(/datum/material/wood = MINERAL_MATERIAL_AMOUNT * 3.5)
|
|
|
|
|
w_class = WEIGHT_CLASS_BULKY
|
|
|
|
|
w_class = WEIGHT_CLASS_HUGE
|
|
|
|
|
var/homerun_ready = 0
|
|
|
|
|
var/homerun_able = 0
|
|
|
|
|
total_mass = 2.7 //a regular wooden major league baseball bat weighs somewhere between 2 to 3.4 pounds, according to google
|
|
|
|
|
|
|
|
|
|
/obj/item/melee/baseball_bat/Initialize()
|
|
|
|
|
. = ..()
|
|
|
|
|
if(prob(1))
|
|
|
|
|
name = "cricket bat"
|
|
|
|
|
desc = "You've got red on you."
|
|
|
|
|
icon_state = "baseball_bat_brit"
|
|
|
|
|
item_state = "baseball_bat_brit"
|
|
|
|
|
|
|
|
|
|
/obj/item/melee/baseball_bat/chaplain
|
|
|
|
|
name = "blessed baseball bat"
|
|
|
|
|
desc = "There ain't a cult in the league that can withstand a swatter."
|
|
|
|
@@ -908,11 +944,11 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
..()
|
|
|
|
|
return
|
|
|
|
|
if(homerun_ready)
|
|
|
|
|
to_chat(user, "<span class='notice'>You're already ready to do a home run!</span>")
|
|
|
|
|
to_chat(user, "<span class='warning'>You're already ready to do a home run!</span>")
|
|
|
|
|
..()
|
|
|
|
|
return
|
|
|
|
|
to_chat(user, "<span class='warning'>You begin gathering strength...</span>")
|
|
|
|
|
playsound(get_turf(src), 'sound/magic/lightning_chargeup.ogg', 65, 1)
|
|
|
|
|
playsound(get_turf(src), 'sound/magic/lightning_chargeup.ogg', 65, TRUE)
|
|
|
|
|
if(do_after(user, 90, target = src))
|
|
|
|
|
to_chat(user, "<span class='userdanger'>You gather power! Time for a home run!</span>")
|
|
|
|
|
homerun_ready = 1
|
|
|
|
@@ -920,12 +956,14 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
|
|
|
|
|
/obj/item/melee/baseball_bat/attack(mob/living/target, mob/living/user)
|
|
|
|
|
. = ..()
|
|
|
|
|
if(HAS_TRAIT(user, TRAIT_PACIFISM))
|
|
|
|
|
return
|
|
|
|
|
var/atom/throw_target = get_edge_target_turf(target, user.dir)
|
|
|
|
|
if(homerun_ready)
|
|
|
|
|
user.visible_message("<span class='userdanger'>It's a home run!</span>")
|
|
|
|
|
target.throw_at(throw_target, rand(8,10), 14, user)
|
|
|
|
|
target.ex_act(EXPLODE_HEAVY)
|
|
|
|
|
playsound(get_turf(src), 'sound/weapons/homerun.ogg', 100, 1)
|
|
|
|
|
playsound(get_turf(src), 'sound/weapons/homerun.ogg', 100, TRUE)
|
|
|
|
|
homerun_ready = 0
|
|
|
|
|
return
|
|
|
|
|
else if(!target.anchored)
|
|
|
|
@@ -956,7 +994,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
|
|
|
|
|
/obj/item/melee/flyswatter
|
|
|
|
|
name = "flyswatter"
|
|
|
|
|
desc = "Useful for killing insects of all sizes."
|
|
|
|
|
desc = "Useful for killing pests of all sizes."
|
|
|
|
|
icon = 'icons/obj/items_and_weapons.dmi'
|
|
|
|
|
icon_state = "flyswatter"
|
|
|
|
|
item_state = "flyswatter"
|
|
|
|
@@ -969,7 +1007,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
|
|
|
//Things in this list will be instantly splatted. Flyman weakness is handled in the flyman species weakness proc.
|
|
|
|
|
var/list/strong_against
|
|
|
|
|
var/list/spider_panic
|
|
|
|
|
|
|
|
|
|
/obj/item/melee/flyswatter/Initialize()
|
|
|
|
|
. = ..()
|
|
|
|
@@ -977,13 +1014,11 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
/mob/living/simple_animal/hostile/poison/bees/,
|
|
|
|
|
/mob/living/simple_animal/butterfly,
|
|
|
|
|
/mob/living/simple_animal/cockroach,
|
|
|
|
|
/obj/item/queen_bee
|
|
|
|
|
))
|
|
|
|
|
spider_panic = typecacheof(list(
|
|
|
|
|
/mob/living/simple_animal/banana_spider,
|
|
|
|
|
/mob/living/simple_animal/hostile/poison/giant_spider,
|
|
|
|
|
/obj/item/queen_bee,
|
|
|
|
|
/obj/structure/spider/spiderling
|
|
|
|
|
))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/obj/item/melee/flyswatter/afterattack(atom/target, mob/user, proximity_flag)
|
|
|
|
|
. = ..()
|
|
|
|
|
if(proximity_flag)
|
|
|
|
@@ -993,11 +1028,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
if(istype(target, /mob/living/))
|
|
|
|
|
var/mob/living/bug = target
|
|
|
|
|
bug.death(1)
|
|
|
|
|
if(is_type_in_typecache(target, spider_panic))
|
|
|
|
|
to_chat(user, "<span class='warning'>You easily land a critical blow on the [target].</span>")
|
|
|
|
|
if(istype(target, /mob/living/))
|
|
|
|
|
var/mob/living/bug = target
|
|
|
|
|
bug.adjustBruteLoss(35) //What kinda mad man would go into melee with a spider?!
|
|
|
|
|
else
|
|
|
|
|
qdel(target)
|
|
|
|
|
|
|
|
|
@@ -1007,7 +1037,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
icon_state = "madeyoulook"
|
|
|
|
|
force = 0
|
|
|
|
|
throwforce = 0
|
|
|
|
|
item_flags = DROPDEL | ABSTRACT
|
|
|
|
|
item_flags = DROPDEL | ABSTRACT // | HAND_ITEM
|
|
|
|
|
attack_verb = list("bopped")
|
|
|
|
|
|
|
|
|
|
/obj/item/circlegame/Initialize()
|
|
|
|
@@ -1030,6 +1060,8 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
|
|
|
|
|
/// Stage 1: The mistake is made
|
|
|
|
|
/obj/item/circlegame/proc/ownerExamined(mob/living/owner, mob/living/sucker)
|
|
|
|
|
SIGNAL_HANDLER
|
|
|
|
|
|
|
|
|
|
if(!istype(sucker) || !in_range(owner, sucker))
|
|
|
|
|
return
|
|
|
|
|
addtimer(CALLBACK(src, .proc/waitASecond, owner, sucker), 4)
|
|
|
|
@@ -1076,6 +1108,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
to_chat(owner, "<span class='warning'>[sucker] looks down at your [src.name] before trying to avert [sucker.p_their()] eyes, but it's too late!</span>")
|
|
|
|
|
to_chat(sucker, "<span class='danger'><b>[owner] sees the fear in your eyes as you try to look away from [owner.p_their()] [src.name]!</b></span>")
|
|
|
|
|
|
|
|
|
|
owner.face_atom(sucker)
|
|
|
|
|
if(owner.client)
|
|
|
|
|
owner.client.give_award(/datum/award/achievement/misc/gottem, owner) // then everybody clapped
|
|
|
|
|
|
|
|
|
|
playsound(get_turf(owner), 'sound/effects/hit_punch.ogg', 50, TRUE, -1)
|
|
|
|
|
owner.do_attack_animation(sucker)
|
|
|
|
|
|
|
|
|
@@ -1103,7 +1139,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
item_state = "nothing"
|
|
|
|
|
force = 0
|
|
|
|
|
throwforce = 0
|
|
|
|
|
item_flags = DROPDEL | ABSTRACT
|
|
|
|
|
item_flags = DROPDEL | ABSTRACT // | HAND_ITEM
|
|
|
|
|
attack_verb = list("slapped")
|
|
|
|
|
hitsound = 'sound/effects/snap.ogg'
|
|
|
|
|
|
|
|
|
@@ -1112,16 +1148,12 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
var/mob/living/carbon/human/L = M
|
|
|
|
|
if(L && L.dna && L.dna.species)
|
|
|
|
|
L.dna.species.stop_wagging_tail(M)
|
|
|
|
|
if(user.a_intent != INTENT_HARM && ((user.zone_selected == BODY_ZONE_PRECISE_MOUTH) || (user.zone_selected == BODY_ZONE_PRECISE_EYES) || (user.zone_selected == BODY_ZONE_HEAD)))
|
|
|
|
|
user.do_attack_animation(M)
|
|
|
|
|
playsound(M, 'sound/weapons/slap.ogg', 50, 1, -1)
|
|
|
|
|
user.visible_message("<span class='danger'>[user] slaps [M]!</span>",
|
|
|
|
|
"<span class='notice'>You slap [M]!</span>",\
|
|
|
|
|
"You hear a slap.")
|
|
|
|
|
return
|
|
|
|
|
else
|
|
|
|
|
..()
|
|
|
|
|
|
|
|
|
|
user.do_attack_animation(M)
|
|
|
|
|
playsound(M, 'sound/weapons/slap.ogg', 50, TRUE, -1)
|
|
|
|
|
user.visible_message("<span class='danger'>[user] slaps [M]!</span>",
|
|
|
|
|
"<span class='notice'>You slap [M]!</span>",\
|
|
|
|
|
"<span class='hear'>You hear a slap.</span>")
|
|
|
|
|
return
|
|
|
|
|
/obj/item/proc/can_trigger_gun(mob/living/user)
|
|
|
|
|
if(!user.can_use_guns(src))
|
|
|
|
|
return FALSE
|
|
|
|
@@ -1138,6 +1170,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
force = 0
|
|
|
|
|
throwforce = 5
|
|
|
|
|
reach = 2
|
|
|
|
|
var/min_reach = 2
|
|
|
|
|
|
|
|
|
|
/obj/item/extendohand/acme
|
|
|
|
|
name = "\improper ACME Extendo-Hand"
|
|
|
|
@@ -1145,13 +1178,26 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
|
|
|
|
|
/obj/item/extendohand/attack(atom/M, mob/living/carbon/human/user)
|
|
|
|
|
var/dist = get_dist(M, user)
|
|
|
|
|
if(dist < reach)
|
|
|
|
|
if(dist < min_reach)
|
|
|
|
|
to_chat(user, "<span class='warning'>[M] is too close to use [src] on.</span>")
|
|
|
|
|
return
|
|
|
|
|
M.attack_hand(user)
|
|
|
|
|
|
|
|
|
|
//HF blade
|
|
|
|
|
// /obj/item/gohei
|
|
|
|
|
// name = "gohei"
|
|
|
|
|
// desc = "A wooden stick with white streamers at the end. Originally used by shrine maidens to purify things. Now used by the station's valued weeaboos."
|
|
|
|
|
// force = 5
|
|
|
|
|
// throwforce = 5
|
|
|
|
|
// hitsound = "swing_hit"
|
|
|
|
|
// attack_verb_continuous = list("whacks", "thwacks", "wallops", "socks")
|
|
|
|
|
// attack_verb_simple = list("whack", "thwack", "wallop", "sock")
|
|
|
|
|
// icon = 'icons/obj/items_and_weapons.dmi'
|
|
|
|
|
// icon_state = "gohei"
|
|
|
|
|
// inhand_icon_state = "gohei"
|
|
|
|
|
// lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
|
|
|
|
|
// righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi'
|
|
|
|
|
|
|
|
|
|
//HF blade
|
|
|
|
|
/obj/item/vibro_weapon
|
|
|
|
|
icon_state = "hfrequency0"
|
|
|
|
|
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
|
|
|
|
@@ -1160,6 +1206,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
desc = "A potent weapon capable of cutting through nearly anything. Wielding it in two hands will allow you to deflect gunfire."
|
|
|
|
|
armour_penetration = 100
|
|
|
|
|
block_chance = 40
|
|
|
|
|
force = 20
|
|
|
|
|
throwforce = 20
|
|
|
|
|
throw_speed = 4
|
|
|
|
|
sharpness = SHARP_EDGED
|
|
|
|
@@ -1182,10 +1229,14 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
|
|
|
|
|
|
|
|
|
/// triggered on wield of two handed item
|
|
|
|
|
/obj/item/vibro_weapon/proc/on_wield(obj/item/source, mob/user)
|
|
|
|
|
SIGNAL_HANDLER
|
|
|
|
|
|
|
|
|
|
wielded = TRUE
|
|
|
|
|
|
|
|
|
|
/// triggered on unwield of two handed item
|
|
|
|
|
/obj/item/vibro_weapon/proc/on_unwield(obj/item/source, mob/user)
|
|
|
|
|
SIGNAL_HANDLER
|
|
|
|
|
|
|
|
|
|
wielded = FALSE
|
|
|
|
|
|
|
|
|
|
/obj/item/vibro_weapon/update_icon_state()
|
|
|
|
|