mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-13 11:43:31 +00:00
485 lines
14 KiB
Plaintext
485 lines
14 KiB
Plaintext
/obj/item/weapon/banhammer
|
|
desc = "A banhammer"
|
|
name = "banhammer"
|
|
icon = 'icons/obj/items.dmi'
|
|
icon_state = "toyhammer"
|
|
flags = FPRINT | TABLEPASS
|
|
slot_flags = SLOT_BELT
|
|
throwforce = 0
|
|
w_class = 2.0
|
|
throw_speed = 7
|
|
throw_range = 15
|
|
attack_verb = list("banned")
|
|
|
|
suicide_act(mob/user)
|
|
viewers(user) << "\red <b>[user] is hitting \himself with the [src.name]! It looks like \he's trying to ban \himself from life.</b>"
|
|
return (BRUTELOSS|FIRELOSS|TOXLOSS|OXYLOSS)
|
|
|
|
/obj/item/weapon/nullrod
|
|
name = "null rod"
|
|
desc = "A rod of pure obsidian, its very presence disrupts and dampens the powers of paranormal phenomenae."
|
|
icon_state = "nullrod"
|
|
item_state = "nullrod"
|
|
flags = FPRINT | TABLEPASS
|
|
slot_flags = SLOT_BELT
|
|
force = 15
|
|
throw_speed = 1
|
|
throw_range = 4
|
|
throwforce = 10
|
|
w_class = 2
|
|
|
|
suicide_act(mob/user)
|
|
viewers(user) << "\red <b>[user] is impaling \himself with the [src.name]! It looks like \he's trying to commit suicide.</b>"
|
|
return (BRUTELOSS|FIRELOSS)
|
|
|
|
/obj/item/weapon/nullrod/attack(mob/M as mob, mob/living/user as mob) //Paste from old-code to decult with a null rod.
|
|
|
|
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>")
|
|
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>")
|
|
|
|
msg_admin_attack("[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
|
|
|
if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
|
|
user << "\red You don't have the dexterity to do this!"
|
|
return
|
|
|
|
if ((CLUMSY in user.mutations) && prob(50))
|
|
user << "\red The rod slips out of your hand and hits your head."
|
|
user.take_organ_damage(10)
|
|
user.Paralyse(20)
|
|
return
|
|
|
|
if (M.stat !=2)
|
|
if((M.mind in ticker.mode.cult) && prob(33))
|
|
M << "\red The power of [src] clears your mind of the cult's influence!"
|
|
user << "\red You wave [src] over [M]'s head and see their eyes become clear, their mind returning to normal."
|
|
ticker.mode.remove_cultist(M.mind)
|
|
for(var/mob/O in viewers(M, null))
|
|
O.show_message(text("\red [] waves [] over []'s head.", user, src, M), 1)
|
|
else if(prob(10))
|
|
user << "\red The rod slips in your hand."
|
|
..()
|
|
else
|
|
user << "\red The rod appears to do nothing."
|
|
for(var/mob/O in viewers(M, null))
|
|
O.show_message(text("\red [] waves [] over []'s head.", user, src, M), 1)
|
|
return
|
|
|
|
/obj/item/weapon/nullrod/afterattack(atom/A, mob/user as mob, proximity)
|
|
if(!proximity)
|
|
return
|
|
if (istype(A, /turf/simulated/floor))
|
|
user << "\blue You hit the floor with the [src]."
|
|
call(/obj/effect/rune/proc/revealrunes)(src)
|
|
|
|
/obj/item/weapon/sord
|
|
name = "\improper SORD"
|
|
desc = "This thing is so unspeakably shitty you are having a hard time even holding it."
|
|
icon_state = "sord"
|
|
item_state = "sord"
|
|
flags = FPRINT | TABLEPASS
|
|
slot_flags = SLOT_BELT
|
|
force = 2
|
|
throwforce = 1
|
|
sharp = 1
|
|
edge = 1
|
|
w_class = 3
|
|
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
|
|
|
suicide_act(mob/user)
|
|
viewers(user) << "\red <b>[user] is impaling \himself with the [src.name]! It looks like \he's trying to commit suicide.</b>"
|
|
return(BRUTELOSS)
|
|
|
|
/obj/item/weapon/sord/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
|
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
|
|
return ..()
|
|
|
|
/obj/item/weapon/claymore
|
|
name = "claymore"
|
|
desc = "What are you standing around staring at this for? Get to killing!"
|
|
icon_state = "claymore"
|
|
item_state = "claymore"
|
|
flags = FPRINT | TABLEPASS | CONDUCT
|
|
slot_flags = SLOT_BELT
|
|
force = 40
|
|
throwforce = 10
|
|
sharp = 1
|
|
edge = 1
|
|
w_class = 3
|
|
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
|
|
|
IsShield()
|
|
return 1
|
|
|
|
suicide_act(mob/user)
|
|
viewers(user) << "\red <b>[user] is falling on the [src.name]! It looks like \he's trying to commit suicide.</b>"
|
|
return(BRUTELOSS)
|
|
|
|
/obj/item/weapon/claymore/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
|
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
|
|
return ..()
|
|
|
|
/obj/item/weapon/katana
|
|
name = "katana"
|
|
desc = "Woefully underpowered in D20"
|
|
icon_state = "katana"
|
|
item_state = "katana"
|
|
flags = FPRINT | TABLEPASS | CONDUCT
|
|
slot_flags = SLOT_BELT | SLOT_BACK
|
|
force = 40
|
|
throwforce = 10
|
|
sharp = 1
|
|
edge = 1
|
|
w_class = 3
|
|
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
|
|
|
suicide_act(mob/user)
|
|
viewers(user) << "\red <b>[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.</b>"
|
|
return(BRUTELOSS)
|
|
|
|
/obj/item/weapon/katana/IsShield()
|
|
return 1
|
|
|
|
/obj/item/weapon/katana/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
|
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
|
|
return ..()
|
|
|
|
/obj/item/weapon/harpoon
|
|
name = "harpoon"
|
|
sharp = 1
|
|
edge = 0
|
|
desc = "Tharr she blows!"
|
|
icon_state = "harpoon"
|
|
item_state = "harpoon"
|
|
force = 20
|
|
throwforce = 15
|
|
w_class = 3
|
|
attack_verb = list("jabbed","stabbed","ripped")
|
|
|
|
/obj/item/weapon/baseballbat
|
|
name = "wooden bat"
|
|
desc = "HOME RUN!"
|
|
icon_state = "woodbat"
|
|
item_state = "woodbat"
|
|
sharp = 0
|
|
edge = 0
|
|
w_class = 3
|
|
force = 15
|
|
throw_speed = 3
|
|
throw_range = 7
|
|
throwforce = 7
|
|
attack_verb = list("smashed", "beaten", "slammed", "smacked", "striked", "battered", "bonked")
|
|
hitsound = 'sound/weapons/genhit3.ogg'
|
|
|
|
|
|
/obj/item/weapon/baseballbat/metal
|
|
name = "metal bat"
|
|
desc = "A shiny metal bat."
|
|
icon_state = "metalbat"
|
|
item_state = "metalbat"
|
|
force = 18
|
|
w_class = 3.0
|
|
|
|
/obj/item/weapon/butterfly
|
|
name = "butterfly knife"
|
|
desc = "A basic metal blade concealed in a lightweight plasteel grip. Small enough when folded to fit in a pocket."
|
|
icon_state = "butterflyknife"
|
|
item_state = null
|
|
hitsound = null
|
|
var/active = 0
|
|
w_class = 2
|
|
force = 2
|
|
sharp = 0
|
|
edge = 0
|
|
throw_speed = 3
|
|
throw_range = 4
|
|
throwforce = 7
|
|
attack_verb = list("patted", "tapped")
|
|
|
|
/obj/item/butterflyconstruction
|
|
name = "unfinished concealed knife"
|
|
desc = "An unfinished concealed knife, it looks like the screws need to be tightened."
|
|
icon = 'icons/obj/buildingobject.dmi'
|
|
icon_state = "butterflystep1"
|
|
|
|
/obj/item/butterflyconstruction/attackby(obj/item/W as obj, mob/user as mob)
|
|
if(istype(W,/obj/item/weapon/screwdriver))
|
|
user << "You finish the concealed blade weapon."
|
|
new /obj/item/weapon/butterfly(user.loc)
|
|
del(src)
|
|
return
|
|
|
|
/obj/item/butterflyblade
|
|
name = "knife blade"
|
|
desc = "A knife blade. Unusable as a weapon without a grip."
|
|
icon = 'icons/obj/buildingobject.dmi'
|
|
icon_state = "butterfly2"
|
|
matter = list("metal" = 5000)
|
|
|
|
/obj/item/butterflyhandle
|
|
name = "concealed knife grip"
|
|
desc = "A plasteel grip with screw fittings for a blade."
|
|
icon = 'icons/obj/buildingobject.dmi'
|
|
icon_state = "butterfly1"
|
|
matter = list("metal" = 4000)
|
|
|
|
/obj/item/butterflyhandle/attackby(obj/item/W as obj, mob/user as mob)
|
|
if(istype(W,/obj/item/butterflyblade))
|
|
user << "You attach the two concealed blade parts."
|
|
new /obj/item/butterflyconstruction(user.loc)
|
|
del(W)
|
|
del(src)
|
|
return
|
|
update_icon(user)
|
|
|
|
/obj/item/weapon/butterfly/switchblade
|
|
name = "switchblade"
|
|
desc = "A classic switchblade with gold engraving. Just holding it makes you feel like a gangster."
|
|
icon_state = "switchblade"
|
|
|
|
/obj/item/weapon/butterfly/attack_self(mob/user)
|
|
active = !active
|
|
if(active)
|
|
user << "<span class='notice'>You flip out your [src].</span>"
|
|
playsound(user, 'sound/weapons/flipblade.ogg', 15, 1)
|
|
force = 15 //bay adjustments
|
|
throwforce = 12
|
|
edge = 1
|
|
sharp = 1
|
|
hitsound = 'sound/weapons/bladeslice.ogg'
|
|
icon_state += "_open"
|
|
w_class = 3
|
|
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
|
else
|
|
user << "<span class='notice'>The butterfly knife can now be concealed.</span>"
|
|
force = initial(force)
|
|
edge = 0
|
|
sharp = 0
|
|
hitsound = initial(hitsound)
|
|
icon_state = initial(icon_state)
|
|
w_class = initial(w_class)
|
|
attack_verb = initial(attack_verb)
|
|
add_fingerprint(user)
|
|
|
|
|
|
obj/item/weapon/wirerod
|
|
name = "wired rod"
|
|
desc = "A rod with some wire wrapped around the top. It'd be easy to attach something to the top bit."
|
|
icon_state = "wiredrod"
|
|
item_state = "rods"
|
|
flags = CONDUCT
|
|
force = 8
|
|
throwforce = 10
|
|
w_class = 3
|
|
attack_verb = list("hit", "bludgeoned", "whacked", "bonked")
|
|
|
|
|
|
obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob)
|
|
..()
|
|
if(istype(I, /obj/item/weapon/shard))
|
|
var/obj/item/weapon/twohanded/spear/S = new /obj/item/weapon/twohanded/spear
|
|
|
|
user.put_in_hands(S)
|
|
user << "<span class='notice'>You fasten the glass shard to the top of the rod with the cable.</span>"
|
|
del(I)
|
|
del(src)
|
|
update_icon(user)
|
|
|
|
else if(istype(I, /obj/item/weapon/wirecutters))
|
|
var/obj/item/weapon/melee/baton/cattleprod/P = new /obj/item/weapon/melee/baton/cattleprod
|
|
|
|
user.put_in_hands(P)
|
|
user << "<span class='notice'>You fasten the wirecutters to the top of the rod with the cable, prongs outward.</span>"
|
|
del(I)
|
|
del(src)
|
|
update_icon(user)
|
|
update_icon(user)
|
|
|
|
/obj/item/weapon/star
|
|
name = "shuriken"
|
|
desc = "A sharp, perfectly weighted piece of metal."
|
|
icon_state = "star"
|
|
force = 5
|
|
throw_speed = 10
|
|
throwforce = 15
|
|
throw_range = 15
|
|
sharp = 1
|
|
edge = 1
|
|
matter = list("metal" = 500)
|
|
|
|
var/poisoned = 0
|
|
|
|
/obj/item/weapon/star/New()
|
|
..()
|
|
src.pixel_x = rand(-12, 12)
|
|
src.pixel_y = rand(-12, 12)
|
|
|
|
//TODO: consider making this something done with reagents.
|
|
/obj/item/weapon/star/throw_impact(atom/hit_atom)
|
|
..()
|
|
if(poisoned && istype(hit_atom,/mob/living))
|
|
var/mob/living/M = hit_atom
|
|
M.adjustToxLoss(rand(20,40))
|
|
poisoned = 0
|
|
color = null
|
|
|
|
/obj/item/weapon/star/ninja
|
|
color = "#007700"
|
|
poisoned = 1
|
|
|
|
/obj/item/weapon/energy_net
|
|
name = "energy net"
|
|
desc = "It's a net made of green energy."
|
|
icon = 'icons/effects/effects.dmi'
|
|
icon_state = "energynet"
|
|
throwforce = 0
|
|
force = 0
|
|
var/net_type = /obj/effect/energy_net
|
|
|
|
/obj/item/weapon/energy_net/dropped()
|
|
spawn(10)
|
|
if(src) del(src)
|
|
|
|
/obj/item/weapon/energy_net/throw_impact(atom/hit_atom)
|
|
..()
|
|
|
|
var/mob/living/M = hit_atom
|
|
|
|
if(!istype(M) || locate(/obj/effect/energy_net) in M.loc)
|
|
del(src)
|
|
return 0
|
|
|
|
var/turf/T = get_turf(M)
|
|
if(T)
|
|
var/obj/effect/energy_net/net = new net_type(T)
|
|
net.layer = M.layer+1
|
|
M.captured = 1
|
|
net.affecting = M
|
|
T.visible_message("[M] was caught in an energy net!")
|
|
del(src)
|
|
|
|
// If we miss or hit an obstacle, we still want to delete the net.
|
|
spawn(10)
|
|
if(src) del(src)
|
|
|
|
/obj/effect/energy_net
|
|
name = "energy net"
|
|
desc = "It's a net made of green energy."
|
|
icon = 'icons/effects/effects.dmi'
|
|
icon_state = "energynet"
|
|
|
|
density = 1
|
|
opacity = 0
|
|
mouse_opacity = 1
|
|
anchored = 1
|
|
|
|
var/health = 25
|
|
var/mob/living/affecting = null //Who it is currently affecting, if anyone.
|
|
var/mob/living/master = null //Who shot web. Will let this person know if the net was successful.
|
|
var/countdown = -1
|
|
|
|
/obj/effect/energy_net/teleport
|
|
countdown = 60
|
|
|
|
/obj/effect/energy_net/New()
|
|
..()
|
|
processing_objects |= src
|
|
|
|
/obj/effect/energy_net/Del()
|
|
|
|
if(affecting)
|
|
var/mob/living/carbon/M = affecting
|
|
M.anchored = initial(affecting.anchored)
|
|
M.captured = 0
|
|
M << "You are free of the net!"
|
|
|
|
processing_objects -= src
|
|
..()
|
|
|
|
/obj/effect/energy_net/proc/healthcheck()
|
|
|
|
if(health <=0)
|
|
density = 0
|
|
src.visible_message("The energy net is torn apart!")
|
|
del(src)
|
|
return
|
|
|
|
/obj/effect/energy_net/process()
|
|
|
|
if(isnull(affecting) || affecting.loc != loc)
|
|
del(src)
|
|
return
|
|
|
|
// Countdown begin set to -1 will stop the teleporter from firing.
|
|
// Clientless mobs can be netted but they will not teleport or decrement the timer.
|
|
var/mob/living/M = affecting
|
|
if(countdown == -1 || (istype(M) && !M.client))
|
|
return
|
|
|
|
if(countdown > 0)
|
|
countdown--
|
|
return
|
|
|
|
// TODO: consider removing or altering this; energy nets are useful on their own
|
|
// merits and the teleportation was never properly implemented; it's halfassed.
|
|
density = 0
|
|
invisibility = 101 //Make the net invisible so all the animations can play out.
|
|
health = INFINITY //Make the net invincible so that an explosion/something else won't kill it during anims.
|
|
|
|
playsound(affecting.loc, 'sound/effects/sparks4.ogg', 50, 1)
|
|
anim(affecting.loc,affecting,'icons/mob/mob.dmi',,"phaseout",,affecting.dir)
|
|
|
|
affecting.visible_message("[affecting] vanishes in a flare of light!")
|
|
|
|
if(holdingfacility.len)
|
|
affecting.loc = pick(holdingfacility)
|
|
|
|
affecting << "You appear in a strange place!"
|
|
|
|
playsound(affecting.loc, 'sound/effects/phasein.ogg', 25, 1)
|
|
playsound(affecting.loc, 'sound/effects/sparks2.ogg', 50, 1)
|
|
anim(affecting.loc,affecting,'icons/mob/mob.dmi',,"phasein",,affecting.dir)
|
|
|
|
del(src)
|
|
|
|
/obj/effect/energy_net/bullet_act(var/obj/item/projectile/Proj)
|
|
health -= Proj.damage
|
|
healthcheck()
|
|
return 0
|
|
|
|
/obj/effect/energy_net/ex_act()
|
|
health = 0
|
|
healthcheck()
|
|
|
|
/obj/effect/energy_net/blob_act()
|
|
health = 0
|
|
healthcheck()
|
|
|
|
/obj/effect/energy_net/meteorhit()
|
|
health = 0
|
|
healthcheck()
|
|
|
|
/obj/effect/energy_net/attack_hand(var/mob/user)
|
|
|
|
var/mob/living/carbon/human/H = user
|
|
if(istype(H))
|
|
if(H.species.can_shred(H))
|
|
playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1)
|
|
health -= rand(10, 20)
|
|
else
|
|
health -= rand(1,3)
|
|
|
|
else if (HULK in user.mutations)
|
|
health = 0
|
|
else
|
|
health -= rand(5,8)
|
|
|
|
H << "<span class='danger'>You claw at the energy net.</span>"
|
|
|
|
healthcheck()
|
|
return
|
|
|
|
/obj/effect/energy_net/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
|
health -= W.force
|
|
healthcheck()
|
|
..() |