Bleeding edgy refresh (#303)
* not code stuff * other things * global vars, defines, helpers * onclick hud stuff, orphans, world.dm * controllers and datums * game folder * everything not client/mobs in modules * client folder * stage 1 mob stuff * simple animal things * silicons * carbon things * ayylmaos and monkeys * hyoomahn * icons n shit * sprite fixes * compile fixes * some fixes I cherrypicked. * qdel fixes * forgot brain refractors
This commit is contained in:
@@ -53,8 +53,8 @@
|
||||
continue
|
||||
if (boolets > 0)
|
||||
box.update_icon()
|
||||
user << "<span class='notice'>You collect [boolets] shell\s. [box] now contains [box.stored_ammo.len] shell\s.</span>"
|
||||
to_chat(user, "<span class='notice'>You collect [boolets] shell\s. [box] now contains [box.stored_ammo.len] shell\s.</span>")
|
||||
else
|
||||
user << "<span class='warning'>You fail to collect anything!</span>"
|
||||
to_chat(user, "<span class='warning'>You fail to collect anything!</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
modified = 1
|
||||
FD.modified = 1
|
||||
FD.damage_type = BRUTE
|
||||
user << "<span class='notice'>You pop the safety cap off of [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You pop the safety cap off of [src].</span>")
|
||||
update_icon()
|
||||
else if (istype(A, /obj/item/weapon/pen))
|
||||
if(modified)
|
||||
@@ -92,11 +92,11 @@
|
||||
FD.pen = A
|
||||
FD.damage = 5
|
||||
FD.nodamage = 0
|
||||
user << "<span class='notice'>You insert [A] into [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You insert [A] into [src].</span>")
|
||||
else
|
||||
user << "<span class='warning'>There's already something in [src].</span>"
|
||||
to_chat(user, "<span class='warning'>There's already something in [src].</span>")
|
||||
else
|
||||
user << "<span class='warning'>The safety cap prevents you from inserting [A] into [src].</span>"
|
||||
to_chat(user, "<span class='warning'>The safety cap prevents you from inserting [A] into [src].</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
FD.damage = initial(FD.damage)
|
||||
FD.nodamage = initial(FD.nodamage)
|
||||
user.put_in_hands(FD.pen)
|
||||
user << "<span class='notice'>You remove [FD.pen] from [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You remove [FD.pen] from [src].</span>")
|
||||
FD.pen = null
|
||||
|
||||
/obj/item/ammo_casing/caseless/foam_dart/riot
|
||||
|
||||
@@ -8,6 +8,18 @@
|
||||
fire_sound = 'sound/weapons/Laser.ogg'
|
||||
firing_effect_type = /obj/effect/overlay/temp/dir_setting/firing_effect/energy
|
||||
|
||||
/obj/item/ammo_casing/energy/chameleon
|
||||
e_cost = 0
|
||||
var/list/projectile_vars = list()
|
||||
|
||||
/obj/item/ammo_casing/energy/chameleon/ready_proj()
|
||||
. = ..()
|
||||
if(!BB)
|
||||
newshot()
|
||||
for(var/V in projectile_vars)
|
||||
if(BB.vars[V])
|
||||
BB.vars[V] = projectile_vars[V]
|
||||
|
||||
/obj/item/ammo_casing/energy/laser
|
||||
projectile_type = /obj/item/projectile/beam/laser
|
||||
select_name = "kill"
|
||||
@@ -222,31 +234,3 @@
|
||||
|
||||
/obj/item/ammo_casing/energy/plasma/adv
|
||||
projectile_type = /obj/item/projectile/plasma/adv
|
||||
|
||||
/obj/item/ammo_casing/energy/plasmagun
|
||||
projectile_type = /obj/item/projectile/energy/plasmabolt
|
||||
e_cost = 50
|
||||
fire_sound = 'sound/weapons/elecfire.ogg'
|
||||
|
||||
/obj/item/ammo_casing/energy/plasmagun/rifle
|
||||
projectile_type = /obj/item/projectile/energy/plasmabolt/rifle
|
||||
e_cost = 150
|
||||
|
||||
/obj/item/ammo_casing/energy/plasmagun/light
|
||||
projectile_type = /obj/item/projectile/energy/plasmabolt/light
|
||||
e_cost = 50
|
||||
|
||||
/obj/item/ammo_casing/energy/plasmagun/MP40k
|
||||
projectile_type = /obj/item/projectile/energy/plasmabolt/MP40k
|
||||
e_cost = 75
|
||||
|
||||
/obj/item/ammo_casing/energy/megabuster
|
||||
projectile_type = /obj/item/projectile/energy/megabuster
|
||||
fire_sound = 'sound/weapons/megabuster.ogg'
|
||||
e_cost = 5
|
||||
|
||||
/obj/item/ammo_casing/energy/buster
|
||||
e_cost = 25
|
||||
projectile_type = /obj/item/projectile/energy/buster
|
||||
fire_sound = 'sound/weapons/mmlbuster.ogg'
|
||||
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
|
||||
/obj/item/ammo_casing/energy/plasmagun
|
||||
projectile_type = /obj/item/projectile/energy/plasmabolt
|
||||
e_cost = 50
|
||||
fire_sound = 'sound/weapons/elecfire.ogg'
|
||||
|
||||
/obj/item/ammo_casing/energy/plasmagun/rifle
|
||||
projectile_type = /obj/item/projectile/energy/plasmabolt/rifle
|
||||
e_cost = 150
|
||||
|
||||
/obj/item/ammo_casing/energy/plasmagun/light
|
||||
projectile_type = /obj/item/projectile/energy/plasmabolt/light
|
||||
e_cost = 50
|
||||
|
||||
/obj/item/ammo_casing/energy/plasmagun/MP40k
|
||||
projectile_type = /obj/item/projectile/energy/plasmabolt/MP40k
|
||||
e_cost = 75
|
||||
|
||||
/obj/item/ammo_casing/energy/megabuster
|
||||
projectile_type = /obj/item/projectile/energy/megabuster
|
||||
fire_sound = 'sound/weapons/megabuster.ogg'
|
||||
e_cost = 5
|
||||
|
||||
/obj/item/ammo_casing/energy/buster
|
||||
e_cost = 25
|
||||
projectile_type = /obj/item/projectile/energy/buster
|
||||
fire_sound = 'sound/weapons/mmlbuster.ogg'
|
||||
@@ -85,7 +85,7 @@
|
||||
|
||||
if(num_loaded)
|
||||
if(!silent)
|
||||
user << "<span class='notice'>You load [num_loaded] shell\s into \the [src]!</span>"
|
||||
to_chat(user, "<span class='notice'>You load [num_loaded] shell\s into \the [src]!</span>")
|
||||
A.update_icon()
|
||||
update_icon()
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
var/obj/item/ammo_casing/A = get_round()
|
||||
if(A)
|
||||
user.put_in_hands(A)
|
||||
user << "<span class='notice'>You remove a round from \the [src]!</span>"
|
||||
to_chat(user, "<span class='notice'>You remove a round from \the [src]!</span>")
|
||||
update_icon()
|
||||
|
||||
/obj/item/ammo_box/update_icon()
|
||||
|
||||
@@ -83,11 +83,11 @@
|
||||
/obj/item/weapon/gun/examine(mob/user)
|
||||
..()
|
||||
if(pin)
|
||||
user << "It has [pin] installed."
|
||||
to_chat(user, "It has [pin] installed.")
|
||||
else
|
||||
user << "It doesn't have a firing pin installed, and won't fire."
|
||||
to_chat(user, "It doesn't have a firing pin installed, and won't fire.")
|
||||
if(unique_reskin && !current_skin)
|
||||
user << "<span class='notice'>Alt-click it to reskin it.</span>"
|
||||
to_chat(user, "<span class='notice'>Alt-click it to reskin it.</span>")
|
||||
|
||||
//called after the gun has successfully fired its chambered ammo.
|
||||
/obj/item/weapon/gun/proc/process_chamber()
|
||||
@@ -101,7 +101,7 @@
|
||||
|
||||
|
||||
/obj/item/weapon/gun/proc/shoot_with_empty_chamber(mob/living/user as mob|obj)
|
||||
user << "<span class='danger'>*click*</span>"
|
||||
to_chat(user, "<span class='danger'>*click*</span>")
|
||||
playsound(user, 'sound/weapons/empty.ogg', 100, 1)
|
||||
|
||||
|
||||
@@ -154,14 +154,14 @@
|
||||
if(clumsy_check)
|
||||
if(istype(user))
|
||||
if (user.disabilities & CLUMSY && prob(40))
|
||||
user << "<span class='userdanger'>You shoot yourself in the foot with [src]!</span>"
|
||||
to_chat(user, "<span class='userdanger'>You shoot yourself in the foot with [src]!</span>")
|
||||
var/shot_leg = pick("l_leg", "r_leg")
|
||||
process_fire(user,user,0,params, zone_override = shot_leg)
|
||||
user.drop_item()
|
||||
return
|
||||
|
||||
if(weapon_weight == WEAPON_HEAVY && user.get_inactive_held_item())
|
||||
user << "<span class='userdanger'>You need both hands free to fire [src]!</span>"
|
||||
to_chat(user, "<span class='userdanger'>You need both hands free to fire [src]!</span>")
|
||||
return
|
||||
|
||||
//DUAL (or more!) WIELDING
|
||||
@@ -197,7 +197,7 @@
|
||||
pin.auth_fail(user)
|
||||
return 0
|
||||
else
|
||||
user << "<span class='warning'>[src]'s trigger is locked. This weapon doesn't have a firing pin installed!</span>"
|
||||
to_chat(user, "<span class='warning'>[src]'s trigger is locked. This weapon doesn't have a firing pin installed!</span>")
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/gun/proc/recharge_newshot()
|
||||
@@ -282,9 +282,9 @@
|
||||
if(!gun_light)
|
||||
if(!user.transferItemToLoc(I, src))
|
||||
return
|
||||
user << "<span class='notice'>You click [S] into place on [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You click [S] into place on [src].</span>")
|
||||
if(S.on)
|
||||
SetLuminosity(0)
|
||||
set_light(0)
|
||||
gun_light = S
|
||||
update_icon()
|
||||
update_gunlight(user)
|
||||
@@ -296,7 +296,7 @@
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
if(gun_light)
|
||||
for(var/obj/item/device/flashlight/seclite/S in src)
|
||||
user << "<span class='notice'>You unscrew the seclite from [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You unscrew the seclite from [src].</span>")
|
||||
gun_light = null
|
||||
S.forceMove(get_turf(user))
|
||||
update_gunlight(user)
|
||||
@@ -320,7 +320,7 @@
|
||||
|
||||
var/mob/living/carbon/human/user = usr
|
||||
gun_light.on = !gun_light.on
|
||||
user << "<span class='notice'>You toggle the gunlight [gun_light.on ? "on":"off"].</span>"
|
||||
to_chat(user, "<span class='notice'>You toggle the gunlight [gun_light.on ? "on":"off"].</span>")
|
||||
|
||||
playsound(user, 'sound/weapons/empty.ogg', 100, 1)
|
||||
update_gunlight(user)
|
||||
@@ -329,21 +329,12 @@
|
||||
/obj/item/weapon/gun/proc/update_gunlight(mob/user = null)
|
||||
if(gun_light)
|
||||
if(gun_light.on)
|
||||
if(loc == user)
|
||||
user.AddLuminosity(gun_light.brightness_on)
|
||||
else if(isturf(loc))
|
||||
SetLuminosity(gun_light.brightness_on)
|
||||
set_light(gun_light.brightness_on)
|
||||
else
|
||||
if(loc == user)
|
||||
user.AddLuminosity(-gun_light.brightness_on)
|
||||
else if(isturf(loc))
|
||||
SetLuminosity(0)
|
||||
set_light(0)
|
||||
update_icon()
|
||||
else
|
||||
if(loc == user)
|
||||
user.AddLuminosity(-5)
|
||||
else if(isturf(loc))
|
||||
SetLuminosity(0)
|
||||
set_light(0)
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.UpdateButtonIcon()
|
||||
@@ -351,19 +342,11 @@
|
||||
|
||||
/obj/item/weapon/gun/pickup(mob/user)
|
||||
..()
|
||||
if(gun_light)
|
||||
if(gun_light.on)
|
||||
user.AddLuminosity(gun_light.brightness_on)
|
||||
SetLuminosity(0)
|
||||
if(azoom)
|
||||
azoom.Grant(user)
|
||||
|
||||
/obj/item/weapon/gun/dropped(mob/user)
|
||||
..()
|
||||
if(gun_light)
|
||||
if(gun_light.on)
|
||||
user.AddLuminosity(-gun_light.brightness_on)
|
||||
SetLuminosity(gun_light.brightness_on)
|
||||
zoom(user,FALSE)
|
||||
if(azoom)
|
||||
azoom.Remove(user)
|
||||
@@ -372,7 +355,7 @@
|
||||
/obj/item/weapon/gun/AltClick(mob/user)
|
||||
..()
|
||||
if(user.incapacitated())
|
||||
user << "<span class='warning'>You can't do that right now!</span>"
|
||||
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
|
||||
return
|
||||
if(unique_reskin && !current_skin && loc == user)
|
||||
reskin_gun(user)
|
||||
@@ -385,7 +368,7 @@
|
||||
if(options[choice] == null)
|
||||
return
|
||||
current_skin = options[choice]
|
||||
M << "Your gun is now skinned as [choice]. Say hello to your new friend."
|
||||
to_chat(M, "Your gun is now skinned as [choice]. Say hello to your new friend.")
|
||||
update_icon()
|
||||
|
||||
|
||||
@@ -493,4 +476,3 @@
|
||||
if(zoomable)
|
||||
azoom = new()
|
||||
azoom.gun = src
|
||||
|
||||
|
||||
@@ -58,23 +58,23 @@
|
||||
if (!magazine && istype(AM, mag_type))
|
||||
if(user.transferItemToLoc(AM, src))
|
||||
magazine = AM
|
||||
user << "<span class='notice'>You load a new magazine into \the [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You load a new magazine into \the [src].</span>")
|
||||
chamber_round()
|
||||
A.update_icon()
|
||||
update_icon()
|
||||
return 1
|
||||
else
|
||||
user << "<span class='warning'>You cannot seem to get \the [src] out of your hands!</span>"
|
||||
to_chat(user, "<span class='warning'>You cannot seem to get \the [src] out of your hands!</span>")
|
||||
return
|
||||
else if (magazine)
|
||||
user << "<span class='notice'>There's already a magazine in \the [src].</span>"
|
||||
to_chat(user, "<span class='notice'>There's already a magazine in \the [src].</span>")
|
||||
if(istype(A, /obj/item/weapon/suppressor))
|
||||
var/obj/item/weapon/suppressor/S = A
|
||||
if(can_suppress)
|
||||
if(!suppressed)
|
||||
if(!user.transferItemToLoc(A, src))
|
||||
return
|
||||
user << "<span class='notice'>You screw [S] onto [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You screw [S] onto [src].</span>")
|
||||
suppressed = A
|
||||
S.oldsound = fire_sound
|
||||
S.initial_w_class = w_class
|
||||
@@ -83,10 +83,10 @@
|
||||
update_icon()
|
||||
return
|
||||
else
|
||||
user << "<span class='warning'>[src] already has a suppressor!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] already has a suppressor!</span>")
|
||||
return
|
||||
else
|
||||
user << "<span class='warning'>You can't seem to figure out how to fit [S] on [src]!</span>"
|
||||
to_chat(user, "<span class='warning'>You can't seem to figure out how to fit [S] on [src]!</span>")
|
||||
return
|
||||
return 0
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
if(!user.is_holding(src))
|
||||
..()
|
||||
return
|
||||
user << "<span class='notice'>You unscrew [suppressed] from [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You unscrew [suppressed] from [src].</span>")
|
||||
user.put_in_hands(suppressed)
|
||||
fire_sound = S.oldsound
|
||||
w_class = S.initial_w_class
|
||||
@@ -113,21 +113,21 @@
|
||||
user.put_in_hands(magazine)
|
||||
magazine.update_icon()
|
||||
magazine = null
|
||||
user << "<span class='notice'>You pull the magazine out of \the [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You pull the magazine out of \the [src].</span>")
|
||||
else if(chambered)
|
||||
AC.loc = get_turf(src)
|
||||
AC.SpinAnimation(10, 1)
|
||||
chambered = null
|
||||
user << "<span class='notice'>You unload the round from \the [src]'s chamber.</span>"
|
||||
to_chat(user, "<span class='notice'>You unload the round from \the [src]'s chamber.</span>")
|
||||
else
|
||||
user << "<span class='notice'>There's no magazine in \the [src].</span>"
|
||||
to_chat(user, "<span class='notice'>There's no magazine in \the [src].</span>")
|
||||
update_icon()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/gun/ballistic/examine(mob/user)
|
||||
..()
|
||||
user << "Has [get_ammo()] round\s remaining."
|
||||
to_chat(user, "Has [get_ammo()] round\s remaining.")
|
||||
|
||||
/obj/item/weapon/gun/ballistic/proc/get_ammo(countchambered = 1)
|
||||
var/boolets = 0 //mature var names for mature people
|
||||
@@ -157,7 +157,7 @@
|
||||
|
||||
/obj/item/weapon/gun/ballistic/proc/sawoff(mob/user)
|
||||
if(sawn_state == SAWN_OFF)
|
||||
user << "<span class='warning'>\The [src] is already shortened!</span>"
|
||||
to_chat(user, "<span class='warning'>\The [src] is already shortened!</span>")
|
||||
return
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
user.visible_message("[user] begins to shorten \the [src].", "<span class='notice'>You begin to shorten \the [src]...</span>")
|
||||
|
||||
@@ -38,18 +38,18 @@
|
||||
if(user.transferItemToLoc(AM, src))
|
||||
magazine = AM
|
||||
if(oldmag)
|
||||
user << "<span class='notice'>You perform a tactical reload on \the [src], replacing the magazine.</span>"
|
||||
to_chat(user, "<span class='notice'>You perform a tactical reload on \the [src], replacing the magazine.</span>")
|
||||
oldmag.dropped()
|
||||
oldmag.forceMove(get_turf(src.loc))
|
||||
oldmag.update_icon()
|
||||
else
|
||||
user << "<span class='notice'>You insert the magazine into \the [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You insert the magazine into \the [src].</span>")
|
||||
chamber_round()
|
||||
A.update_icon()
|
||||
update_icon()
|
||||
return 1
|
||||
else
|
||||
user << "<span class='warning'>You cannot seem to get \the [src] out of your hands!</span>"
|
||||
to_chat(user, "<span class='warning'>You cannot seem to get \the [src] out of your hands!</span>")
|
||||
|
||||
/obj/item/weapon/gun/ballistic/automatic/ui_action_click()
|
||||
burst_select()
|
||||
@@ -60,11 +60,11 @@
|
||||
if(!select)
|
||||
burst_size = 1
|
||||
fire_delay = 0
|
||||
user << "<span class='notice'>You switch to semi-automatic.</span>"
|
||||
to_chat(user, "<span class='notice'>You switch to semi-automatic.</span>")
|
||||
else
|
||||
burst_size = initial(burst_size)
|
||||
fire_delay = initial(fire_delay)
|
||||
user << "<span class='notice'>You switch to [burst_size]-rnd burst.</span>"
|
||||
to_chat(user, "<span class='notice'>You switch to [burst_size]-rnd burst.</span>")
|
||||
|
||||
playsound(user, 'sound/weapons/empty.ogg', 100, 1)
|
||||
update_icon()
|
||||
@@ -195,15 +195,15 @@
|
||||
select = 1
|
||||
burst_size = initial(burst_size)
|
||||
fire_delay = initial(fire_delay)
|
||||
user << "<span class='notice'>You switch to [burst_size]-rnd burst.</span>"
|
||||
to_chat(user, "<span class='notice'>You switch to [burst_size]-rnd burst.</span>")
|
||||
if(1)
|
||||
select = 2
|
||||
user << "<span class='notice'>You switch to grenades.</span>"
|
||||
to_chat(user, "<span class='notice'>You switch to grenades.</span>")
|
||||
if(2)
|
||||
select = 0
|
||||
burst_size = 1
|
||||
fire_delay = 0
|
||||
user << "<span class='notice'>You switch to semi-auto.</span>"
|
||||
to_chat(user, "<span class='notice'>You switch to semi-auto.</span>")
|
||||
playsound(user, 'sound/weapons/empty.ogg', 100, 1)
|
||||
update_icon()
|
||||
return
|
||||
@@ -299,7 +299,7 @@
|
||||
|
||||
/obj/item/weapon/gun/ballistic/automatic/l6_saw/attack_self(mob/user)
|
||||
cover_open = !cover_open
|
||||
user << "<span class='notice'>You [cover_open ? "open" : "close"] [src]'s cover.</span>"
|
||||
to_chat(user, "<span class='notice'>You [cover_open ? "open" : "close"] [src]'s cover.</span>")
|
||||
update_icon()
|
||||
|
||||
|
||||
@@ -310,7 +310,7 @@
|
||||
|
||||
/obj/item/weapon/gun/ballistic/automatic/l6_saw/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params) //what I tried to do here is just add a check to see if the cover is open or not and add an icon_state change because I can't figure out how c-20rs do it with overlays
|
||||
if(cover_open)
|
||||
user << "<span class='warning'>[src]'s cover is open! Close it before firing!</span>"
|
||||
to_chat(user, "<span class='warning'>[src]'s cover is open! Close it before firing!</span>")
|
||||
else
|
||||
..()
|
||||
update_icon()
|
||||
@@ -329,7 +329,7 @@
|
||||
user.put_in_hands(magazine)
|
||||
magazine = null
|
||||
update_icon()
|
||||
user << "<span class='notice'>You remove the magazine from [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You remove the magazine from [src].</span>")
|
||||
|
||||
|
||||
/obj/item/weapon/gun/ballistic/automatic/l6_saw/attackby(obj/item/A, mob/user, params)
|
||||
@@ -337,7 +337,7 @@
|
||||
if(.)
|
||||
return
|
||||
if(!cover_open)
|
||||
user << "<span class='warning'>[src]'s cover is closed! You can't insert a new mag.</span>"
|
||||
to_chat(user, "<span class='warning'>[src]'s cover is closed! You can't insert a new mag.</span>")
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
@@ -9,12 +9,15 @@
|
||||
var/item_state_firing = "bow"
|
||||
fire_sound = 'sound/weapons/grenadelaunch.ogg'
|
||||
mag_type = /obj/item/ammo_box/magazine/internal/bow
|
||||
flags = HANDSLOW
|
||||
weapon_weight = WEAPON_HEAVY
|
||||
var/draw_sound = 'sound/weapons/draw_bow.ogg'
|
||||
var/ready_to_fire = 0
|
||||
var/slowdown_when_ready = 2
|
||||
|
||||
/obj/item/weapon/gun/ballistic/bow/Initialize(mapload)
|
||||
..()
|
||||
SET_SECONDARY_FLAG(src, SLOWS_WHILE_IN_HAND)
|
||||
|
||||
/obj/item/weapon/gun/ballistic/bow/update_icon()
|
||||
if(ready_to_fire)
|
||||
icon_state = icon_state_firing
|
||||
@@ -47,7 +50,7 @@
|
||||
/obj/item/weapon/gun/ballistic/bow/attackby(obj/item/A, mob/user, params)
|
||||
var/num_loaded = magazine.attackby(A, user, params, 1)
|
||||
if(num_loaded)
|
||||
user << "<span class='notice'>You ready \the [A] into \the [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You ready \the [A] into \the [src].</span>")
|
||||
update_icon()
|
||||
chamber_round()
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
/obj/item/weapon/minigunpack/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/minigunpack/process()
|
||||
overheat = max(0, overheat - heat_diffusion)
|
||||
@@ -34,13 +34,13 @@
|
||||
armed = 1
|
||||
if(!user.put_in_hands(gun))
|
||||
armed = 0
|
||||
user << "<span class='warning'>You need a free hand to hold the gun!</span>"
|
||||
to_chat(user, "<span class='warning'>You need a free hand to hold the gun!</span>")
|
||||
return
|
||||
update_icon()
|
||||
gun.forceMove(user)
|
||||
user.update_inv_back()
|
||||
else
|
||||
user << "<span class='warning'>You are already holding the gun!</span>"
|
||||
to_chat(user, "<span class='warning'>You are already holding the gun!</span>")
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
gun.forceMove(src)
|
||||
armed = 0
|
||||
if(user)
|
||||
user << "<span class='notice'>You attach the [gun.name] to the [name].</span>"
|
||||
to_chat(user, "<span class='notice'>You attach the [gun.name] to the [name].</span>")
|
||||
else
|
||||
src.visible_message("<span class='warning'>The [gun.name] snaps back onto the [name]!</span>")
|
||||
update_icon()
|
||||
@@ -96,7 +96,7 @@
|
||||
icon_state = "minigun_spin"
|
||||
item_state = "minigun"
|
||||
origin_tech = "combat=6;powerstorage=5;magnets=4"
|
||||
flags = CONDUCT | HANDSLOW
|
||||
flags = CONDUCT
|
||||
slowdown = 1
|
||||
slot_flags = null
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
@@ -110,6 +110,17 @@
|
||||
casing_ejector = 0
|
||||
var/obj/item/weapon/minigunpack/ammo_pack
|
||||
|
||||
/obj/item/weapon/gun/ballistic/minigun/Initialize(mapload)
|
||||
..()
|
||||
SET_SECONDARY_FLAG(src, SLOWS_WHILE_IN_HAND)
|
||||
|
||||
if(!ammo_pack)
|
||||
if(istype(loc,/obj/item/weapon/minigunpack)) //We should spawn inside a ammo pack so let's use that one.
|
||||
ammo_pack = loc
|
||||
..()
|
||||
else
|
||||
qdel(src)//No pack, no gun
|
||||
|
||||
/obj/item/weapon/gun/ballistic/minigun/attack_self(mob/living/user)
|
||||
return
|
||||
|
||||
@@ -125,21 +136,13 @@
|
||||
ammo_pack.overheat += burst_size
|
||||
..()
|
||||
else
|
||||
user << "The gun's heat sensor locked the trigger to prevent lens damage."
|
||||
to_chat(user, "The gun's heat sensor locked the trigger to prevent lens damage.")
|
||||
|
||||
/obj/item/weapon/gun/ballistic/minigun/afterattack(atom/target, mob/living/user, flag, params)
|
||||
if(!ammo_pack || ammo_pack.loc != user)
|
||||
user << "You need the backpack power source to fire the gun!"
|
||||
to_chat(user, "You need the backpack power source to fire the gun!")
|
||||
..()
|
||||
|
||||
/obj/item/weapon/gun/ballistic/minigun/New()
|
||||
if(!ammo_pack)
|
||||
if(istype(loc,/obj/item/weapon/minigunpack)) //We should spawn inside a ammo pack so let's use that one.
|
||||
ammo_pack = loc
|
||||
..()
|
||||
else
|
||||
qdel(src)//No pack, no gun
|
||||
|
||||
/obj/item/weapon/gun/ballistic/minigun/dropped(mob/living/user)
|
||||
ammo_pack.attach_gun(user)
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
/obj/item/weapon/gun/ballistic/automatic/speargun/attackby(obj/item/A, mob/user, params)
|
||||
var/num_loaded = magazine.attackby(A, user, params, 1)
|
||||
if(num_loaded)
|
||||
user << "<span class='notice'>You load [num_loaded] spear\s into \the [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You load [num_loaded] spear\s into \the [src].</span>")
|
||||
update_icon()
|
||||
chamber_round()
|
||||
|
||||
|
||||
@@ -33,7 +33,12 @@
|
||||
|
||||
/obj/item/weapon/gun/ballistic/automatic/pistol/deagle/update_icon()
|
||||
..()
|
||||
icon_state = "[initial(icon_state)][magazine ? "" : "-e"]"
|
||||
if(magazine)
|
||||
cut_overlays()
|
||||
add_overlay("deagle_magazine")
|
||||
else
|
||||
cut_overlays()
|
||||
icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
|
||||
|
||||
/obj/item/weapon/gun/ballistic/automatic/pistol/deagle/gold
|
||||
desc = "A gold plated desert eagle folded over a million times by superior martian gunsmiths. Uses .50 AE ammo."
|
||||
@@ -64,12 +69,12 @@
|
||||
origin_tech = "combat=3;materials=2;abductor=3"
|
||||
|
||||
/obj/item/weapon/gun/ballistic/automatic/pistol/stickman/pickup(mob/living/user)
|
||||
user << "<span class='notice'>As you try to pick up [src], it slips out of your grip..</span>"
|
||||
to_chat(user, "<span class='notice'>As you try to pick up [src], it slips out of your grip..</span>")
|
||||
if(prob(50))
|
||||
user << "<span class='notice'>..and vanishes from your vision! Where the hell did it go?</span>"
|
||||
to_chat(user, "<span class='notice'>..and vanishes from your vision! Where the hell did it go?</span>")
|
||||
qdel(src)
|
||||
user.update_icons()
|
||||
else
|
||||
user << "<span class='notice'>..and falls into view. Whew, that was a close one.</span>"
|
||||
to_chat(user, "<span class='notice'>..and falls into view. Whew, that was a close one.</span>")
|
||||
user.dropItemToGround(src)
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
return
|
||||
var/num_loaded = magazine.attackby(A, user, params, 1)
|
||||
if(num_loaded)
|
||||
user << "<span class='notice'>You load [num_loaded] shell\s into \the [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You load [num_loaded] shell\s into \the [src].</span>")
|
||||
A.update_icon()
|
||||
update_icon()
|
||||
chamber_round(0)
|
||||
@@ -44,9 +44,9 @@
|
||||
CB.update_icon()
|
||||
num_unloaded++
|
||||
if (num_unloaded)
|
||||
user << "<span class='notice'>You unload [num_unloaded] shell\s from [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You unload [num_unloaded] shell\s from [src].</span>")
|
||||
else
|
||||
user << "<span class='warning'>[src] is empty!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] is empty!</span>")
|
||||
|
||||
/obj/item/weapon/gun/ballistic/revolver/verb/spin()
|
||||
set name = "Spin Chamber"
|
||||
@@ -83,7 +83,7 @@
|
||||
|
||||
/obj/item/weapon/gun/ballistic/revolver/examine(mob/user)
|
||||
..()
|
||||
user << "[get_ammo(0,0)] of those are live rounds."
|
||||
to_chat(user, "[get_ammo(0,0)] of those are live rounds.")
|
||||
|
||||
/obj/item/weapon/gun/ballistic/revolver/detective
|
||||
name = "\improper .38 Mars Special"
|
||||
@@ -100,14 +100,13 @@
|
||||
options["Black Panther"] = "detective_panther"
|
||||
options["Gold Trim"] = "detective_gold"
|
||||
options["The Peacemaker"] = "detective_peacemaker"
|
||||
options["The Spacemaker"] = "detective_future"
|
||||
options["Cancel"] = null
|
||||
|
||||
/obj/item/weapon/gun/ballistic/revolver/detective/process_fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, message = 1, params, zone_override = "")
|
||||
if(magazine.caliber != initial(magazine.caliber))
|
||||
if(prob(70 - (magazine.ammo_count() * 10))) //minimum probability of 10, maximum of 60
|
||||
playsound(user, fire_sound, 50, 1)
|
||||
user << "<span class='userdanger'>[src] blows up in your face!</span>"
|
||||
to_chat(user, "<span class='userdanger'>[src] blows up in your face!</span>")
|
||||
user.take_bodypart_damage(0,20)
|
||||
user.dropItemToGround(src)
|
||||
return 0
|
||||
@@ -117,31 +116,31 @@
|
||||
..()
|
||||
if(istype(A, /obj/item/weapon/screwdriver))
|
||||
if(magazine.caliber == "38")
|
||||
user << "<span class='notice'>You begin to reinforce the barrel of [src]...</span>"
|
||||
to_chat(user, "<span class='notice'>You begin to reinforce the barrel of [src]...</span>")
|
||||
if(magazine.ammo_count())
|
||||
afterattack(user, user) //you know the drill
|
||||
user.visible_message("<span class='danger'>[src] goes off!</span>", "<span class='userdanger'>[src] goes off in your face!</span>")
|
||||
return
|
||||
if(do_after(user, 30*A.toolspeed, target = src))
|
||||
if(magazine.ammo_count())
|
||||
user << "<span class='warning'>You can't modify it!</span>"
|
||||
to_chat(user, "<span class='warning'>You can't modify it!</span>")
|
||||
return
|
||||
magazine.caliber = "357"
|
||||
desc = "The barrel and chamber assembly seems to have been modified."
|
||||
user << "<span class='notice'>You reinforce the barrel of [src]. Now it will fire .357 rounds.</span>"
|
||||
to_chat(user, "<span class='notice'>You reinforce the barrel of [src]. Now it will fire .357 rounds.</span>")
|
||||
else
|
||||
user << "<span class='notice'>You begin to revert the modifications to [src]...</span>"
|
||||
to_chat(user, "<span class='notice'>You begin to revert the modifications to [src]...</span>")
|
||||
if(magazine.ammo_count())
|
||||
afterattack(user, user) //and again
|
||||
user.visible_message("<span class='danger'>[src] goes off!</span>", "<span class='userdanger'>[src] goes off in your face!</span>")
|
||||
return
|
||||
if(do_after(user, 30*A.toolspeed, target = src))
|
||||
if(magazine.ammo_count())
|
||||
user << "<span class='warning'>You can't modify it!</span>"
|
||||
to_chat(user, "<span class='warning'>You can't modify it!</span>")
|
||||
return
|
||||
magazine.caliber = "38"
|
||||
desc = initial(desc)
|
||||
user << "<span class='notice'>You remove the modifications on [src]. Now it will fire .38 rounds.</span>"
|
||||
to_chat(user, "<span class='notice'>You remove the modifications on [src]. Now it will fire .38 rounds.</span>")
|
||||
|
||||
|
||||
/obj/item/weapon/gun/ballistic/revolver/mateba
|
||||
@@ -209,13 +208,13 @@
|
||||
return
|
||||
if(target != user)
|
||||
if(ismob(target))
|
||||
user << "<span class='warning'>A mechanism prevents you from shooting anyone but yourself!</span>"
|
||||
to_chat(user, "<span class='warning'>A mechanism prevents you from shooting anyone but yourself!</span>")
|
||||
return
|
||||
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(!spun)
|
||||
user << "<span class='warning'>You need to spin the revolver's chamber first!</span>"
|
||||
to_chat(user, "<span class='warning'>You need to spin the revolver's chamber first!</span>")
|
||||
return
|
||||
|
||||
spun = FALSE
|
||||
@@ -301,9 +300,9 @@
|
||||
CB.update_icon()
|
||||
num_unloaded++
|
||||
if (num_unloaded)
|
||||
user << "<span class='notice'>You break open \the [src] and unload [num_unloaded] shell\s.</span>"
|
||||
to_chat(user, "<span class='notice'>You break open \the [src] and unload [num_unloaded] shell\s.</span>")
|
||||
else
|
||||
user << "<span class='warning'>[src] is empty!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] is empty!</span>")
|
||||
|
||||
// IMPROVISED SHOTGUN //
|
||||
|
||||
@@ -327,11 +326,11 @@
|
||||
var/obj/item/stack/cable_coil/C = A
|
||||
if(C.use(10))
|
||||
slot_flags = SLOT_BACK
|
||||
user << "<span class='notice'>You tie the lengths of cable to the shotgun, making a sling.</span>"
|
||||
to_chat(user, "<span class='notice'>You tie the lengths of cable to the shotgun, making a sling.</span>")
|
||||
slung = 1
|
||||
update_icon()
|
||||
else
|
||||
user << "<span class='warning'>You need at least ten lengths of cable if you want to make a sling!</span>"
|
||||
to_chat(user, "<span class='warning'>You need at least ten lengths of cable if you want to make a sling!</span>")
|
||||
|
||||
/obj/item/weapon/gun/ballistic/revolver/doublebarrel/improvised/update_icon()
|
||||
..()
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
return
|
||||
var/num_loaded = magazine.attackby(A, user, params, 1)
|
||||
if(num_loaded)
|
||||
user << "<span class='notice'>You load [num_loaded] shell\s into \the [src]!</span>"
|
||||
to_chat(user, "<span class='notice'>You load [num_loaded] shell\s into \the [src]!</span>")
|
||||
A.update_icon()
|
||||
update_icon()
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
/obj/item/weapon/gun/ballistic/shotgun/examine(mob/user)
|
||||
..()
|
||||
if (chambered)
|
||||
user << "A [chambered.BB ? "live" : "spent"] one is in the chamber."
|
||||
to_chat(user, "A [chambered.BB ? "live" : "spent"] one is in the chamber.")
|
||||
|
||||
/obj/item/weapon/gun/ballistic/shotgun/lethal
|
||||
mag_type = /obj/item/ammo_box/magazine/internal/shot/lethal
|
||||
@@ -120,13 +120,13 @@
|
||||
|
||||
/obj/item/weapon/gun/ballistic/shotgun/boltaction/attackby(obj/item/A, mob/user, params)
|
||||
if(!bolt_open)
|
||||
user << "<span class='notice'>The bolt is closed!</span>"
|
||||
to_chat(user, "<span class='notice'>The bolt is closed!</span>")
|
||||
return
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/gun/ballistic/shotgun/boltaction/examine(mob/user)
|
||||
..()
|
||||
user << "The bolt is [bolt_open ? "open" : "closed"]."
|
||||
to_chat(user, "The bolt is [bolt_open ? "open" : "closed"].")
|
||||
|
||||
|
||||
/obj/item/weapon/gun/ballistic/shotgun/boltaction/enchanted
|
||||
@@ -224,9 +224,9 @@
|
||||
alternate_magazine = current_mag
|
||||
toggled = !toggled
|
||||
if(toggled)
|
||||
user << "You switch to tube B."
|
||||
to_chat(user, "You switch to tube B.")
|
||||
else
|
||||
user << "You switch to tube A."
|
||||
to_chat(user, "You switch to tube A.")
|
||||
|
||||
/obj/item/weapon/gun/ballistic/shotgun/automatic/dual_tube/AltClick(mob/living/user)
|
||||
if(user.incapacitated() || !Adjacent(user) || !istype(user))
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
fire_sound = shot.fire_sound
|
||||
fire_delay = shot.delay
|
||||
if (shot.select_name)
|
||||
user << "<span class='notice'>[src] is now set to [shot.select_name].</span>"
|
||||
to_chat(user, "<span class='notice'>[src] is now set to [shot.select_name].</span>")
|
||||
chambered = null
|
||||
recharge_newshot(1)
|
||||
update_icon()
|
||||
|
||||
@@ -106,12 +106,12 @@
|
||||
if(0 to 200)
|
||||
fail_tick += (2*(fail_chance))
|
||||
M.rad_act(40)
|
||||
M << "<span class='userdanger'>Your [name] feels warmer.</span>"
|
||||
to_chat(M, "<span class='userdanger'>Your [name] feels warmer.</span>")
|
||||
if(201 to INFINITY)
|
||||
SSobj.processing.Remove(src)
|
||||
M.rad_act(80)
|
||||
crit_fail = 1
|
||||
M << "<span class='userdanger'>Your [name]'s reactor overloads!</span>"
|
||||
to_chat(M, "<span class='userdanger'>Your [name]'s reactor overloads!</span>")
|
||||
|
||||
/obj/item/weapon/gun/energy/e_gun/nuclear/emp_act(severity)
|
||||
..()
|
||||
|
||||
@@ -25,20 +25,20 @@
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator/examine(mob/user)
|
||||
..()
|
||||
if(max_mod_capacity)
|
||||
user << "<b>[get_remaining_mod_capacity()]%</b> mod capacity remaining."
|
||||
to_chat(user, "<b>[get_remaining_mod_capacity()]%</b> mod capacity remaining.")
|
||||
for(var/A in get_modkits())
|
||||
var/obj/item/borg/upgrade/modkit/M = A
|
||||
user << "<span class='notice'>There is a [M.name] mod installed, using <b>[M.cost]%</b> capacity.</span>"
|
||||
to_chat(user, "<span class='notice'>There is a [M.name] mod installed, using <b>[M.cost]%</b> capacity.</span>")
|
||||
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator/attackby(obj/item/A, mob/user)
|
||||
if(istype(A, /obj/item/weapon/crowbar))
|
||||
if(modkits.len)
|
||||
user << "<span class='notice'>You pry the modifications out.</span>"
|
||||
to_chat(user, "<span class='notice'>You pry the modifications out.</span>")
|
||||
playsound(loc, A.usesound, 100, 1)
|
||||
for(var/obj/item/borg/upgrade/modkit/M in modkits)
|
||||
M.uninstall(src)
|
||||
else
|
||||
user << "<span class='notice'>There are no modifications currently installed.</span>"
|
||||
to_chat(user, "<span class='notice'>There are no modifications currently installed.</span>")
|
||||
else if(istype(A, /obj/item/borg/upgrade/modkit))
|
||||
var/obj/item/borg/upgrade/modkit/MK = A
|
||||
MK.install(src, user)
|
||||
@@ -123,7 +123,7 @@
|
||||
if(!suppressed)
|
||||
playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1)
|
||||
else
|
||||
loc << "<span class='warning'>[src] silently charges up.<span>"
|
||||
to_chat(loc, "<span class='warning'>[src] silently charges up.<span>")
|
||||
update_icon()
|
||||
overheat = FALSE
|
||||
|
||||
@@ -205,7 +205,7 @@
|
||||
for(var/mob/living/L in range(1, target_turf) - firer - target)
|
||||
var/armor = L.run_armor_check(def_zone, flag, "", "", armour_penetration)
|
||||
L.apply_damage(damage*mob_aoe, damage_type, def_zone, armor)
|
||||
L << "<span class='userdanger'>You're struck by a [name]!</span>"
|
||||
to_chat(L, "<span class='userdanger'>You're struck by a [name]!</span>")
|
||||
|
||||
|
||||
//Modkits
|
||||
@@ -224,7 +224,7 @@
|
||||
|
||||
/obj/item/borg/upgrade/modkit/examine(mob/user)
|
||||
..()
|
||||
user << "<span class='notice'>Occupies <b>[cost]%</b> of mod capacity.</span>"
|
||||
to_chat(user, "<span class='notice'>Occupies <b>[cost]%</b> of mod capacity.</span>")
|
||||
|
||||
/obj/item/borg/upgrade/modkit/attackby(obj/item/A, mob/user)
|
||||
if(istype(A, /obj/item/weapon/gun/energy/kinetic_accelerator) && !issilicon(user))
|
||||
@@ -254,13 +254,13 @@
|
||||
if(.)
|
||||
if(!user.transferItemToLoc(src, KA))
|
||||
return
|
||||
user << "<span class='notice'>You install the modkit.</span>"
|
||||
to_chat(user, "<span class='notice'>You install the modkit.</span>")
|
||||
playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1)
|
||||
KA.modkits += src
|
||||
else
|
||||
user << "<span class='notice'>The modkit you're trying to install would conflict with an already installed modkit. Use a crowbar to remove existing modkits.</span>"
|
||||
to_chat(user, "<span class='notice'>The modkit you're trying to install would conflict with an already installed modkit. Use a crowbar to remove existing modkits.</span>")
|
||||
else
|
||||
user << "<span class='notice'>You don't have room(<b>[KA.get_remaining_mod_capacity()]%</b> remaining, [cost]% needed) to install this modkit. Use a crowbar to remove existing modkits.</span>"
|
||||
to_chat(user, "<span class='notice'>You don't have room(<b>[KA.get_remaining_mod_capacity()]%</b> remaining, [cost]% needed) to install this modkit. Use a crowbar to remove existing modkits.</span>")
|
||||
. = FALSE
|
||||
|
||||
|
||||
@@ -277,7 +277,7 @@
|
||||
name = "range increase"
|
||||
desc = "Increases the range of a kinetic accelerator when installed."
|
||||
modifier = 1
|
||||
cost = 24 //so you can fit four plus a tracer cosmetic
|
||||
cost = 25
|
||||
|
||||
/obj/item/borg/upgrade/modkit/range/modify_projectile(obj/item/projectile/kinetic/K)
|
||||
K.range += modifier
|
||||
|
||||
@@ -134,25 +134,3 @@
|
||||
pin = /obj/item/device/firing_pin/tag/red
|
||||
ammo_x_offset = 2
|
||||
selfcharge = 1
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/gun/energy/laser/rifle
|
||||
name = "laser rifle"
|
||||
desc = "A laser rifle issued to high ranking members of a certain shadow corporation."
|
||||
icon_state = "xcomlasergun"
|
||||
item_state = null
|
||||
icon = 'icons/obj/guns/VGguns.dmi'
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/lasergun)
|
||||
ammo_x_offset = 4
|
||||
|
||||
/obj/item/weapon/gun/energy/laser/LaserAK
|
||||
name = "Laser AK470"
|
||||
desc = "A laser AK. Death solves all problems -- No man, no problem."
|
||||
icon_state = "LaserAK"
|
||||
item_state = null
|
||||
icon = 'icons/obj/guns/VGguns.dmi'
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/laser)
|
||||
ammo_x_offset = 4
|
||||
|
||||
|
||||
|
||||
@@ -38,3 +38,23 @@
|
||||
icon = 'icons/obj/guns/VGguns.dmi'
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/plasmagun/MP40k)
|
||||
ammo_x_offset = 3
|
||||
|
||||
//Laser rifles, technically lazer, but w/e
|
||||
|
||||
/obj/item/weapon/gun/energy/laser/rifle
|
||||
name = "laser rifle"
|
||||
desc = "A laser rifle issued to high ranking members of a certain shadow corporation."
|
||||
icon_state = "xcomlasergun"
|
||||
item_state = null
|
||||
icon = 'icons/obj/guns/VGguns.dmi'
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/lasergun)
|
||||
ammo_x_offset = 4
|
||||
|
||||
/obj/item/weapon/gun/energy/laser/LaserAK
|
||||
name = "Laser AK470"
|
||||
desc = "A laser AK. Death solves all problems -- No man, no problem."
|
||||
icon_state = "LaserAK"
|
||||
item_state = null
|
||||
icon = 'icons/obj/guns/VGguns.dmi'
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/laser)
|
||||
ammo_x_offset = 4
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/laser/pulse)
|
||||
|
||||
/obj/item/weapon/gun/energy/pulse/destroyer/attack_self(mob/living/user)
|
||||
user << "<span class='danger'>[src.name] has three settings, and they are all DESTROY.</span>"
|
||||
to_chat(user, "<span class='danger'>[src.name] has three settings, and they are all DESTROY.</span>")
|
||||
|
||||
/obj/item/weapon/gun/energy/pulse/pistol/m1911
|
||||
name = "\improper M1911-P"
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
/obj/item/weapon/gun/energy/meteorgun
|
||||
name = "meteor gun"
|
||||
desc = "For the love of god, make sure you're aiming this the right way!"
|
||||
icon_state = "riotgun"
|
||||
icon_state = "meteor_gun"
|
||||
item_state = "c20r"
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/meteor)
|
||||
@@ -146,12 +146,12 @@
|
||||
S.use(1)
|
||||
power_supply.give(1000)
|
||||
recharge_newshot(1)
|
||||
user << "<span class='notice'>You insert [A] in [src], recharging it.</span>"
|
||||
to_chat(user, "<span class='notice'>You insert [A] in [src], recharging it.</span>")
|
||||
else if(istype(A, /obj/item/weapon/ore/plasma))
|
||||
qdel(A)
|
||||
power_supply.give(500)
|
||||
recharge_newshot(1)
|
||||
user << "<span class='notice'>You insert [A] in [src], recharging it.</span>"
|
||||
to_chat(user, "<span class='notice'>You insert [A] in [src], recharging it.</span>")
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
/obj/item/weapon/gun/grenadelauncher/examine(mob/user)
|
||||
..()
|
||||
user << "[grenades.len] / [max_grenades] grenades loaded."
|
||||
to_chat(user, "[grenades.len] / [max_grenades] grenades loaded.")
|
||||
|
||||
/obj/item/weapon/gun/grenadelauncher/attackby(obj/item/I, mob/user, params)
|
||||
|
||||
@@ -23,10 +23,10 @@
|
||||
if(!user.transferItemToLoc(I, src))
|
||||
return
|
||||
grenades += I
|
||||
user << "<span class='notice'>You put the grenade in the grenade launcher.</span>"
|
||||
user << "<span class='notice'>[grenades.len] / [max_grenades] Grenades.</span>"
|
||||
to_chat(user, "<span class='notice'>You put the grenade in the grenade launcher.</span>")
|
||||
to_chat(user, "<span class='notice'>[grenades.len] / [max_grenades] Grenades.</span>")
|
||||
else
|
||||
usr << "<span class='danger'>The grenade launcher cannot hold more grenades.</span>"
|
||||
to_chat(usr, "<span class='danger'>The grenade launcher cannot hold more grenades.</span>")
|
||||
|
||||
/obj/item/weapon/gun/grenadelauncher/afterattack(obj/target, mob/user , flag)
|
||||
if(target == user)
|
||||
@@ -35,7 +35,7 @@
|
||||
if(grenades.len)
|
||||
fire_grenade(target,user)
|
||||
else
|
||||
user << "<span class='danger'>The grenade launcher is empty.</span>"
|
||||
to_chat(user, "<span class='danger'>The grenade launcher is empty.</span>")
|
||||
|
||||
/obj/item/weapon/gun/grenadelauncher/proc/fire_grenade(atom/target, mob/user)
|
||||
user.visible_message("<span class='danger'>[user] fired a grenade!</span>", \
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
if(no_den_usage)
|
||||
var/area/A = get_area(user)
|
||||
if(istype(A, /area/wizard_station))
|
||||
user << "<span class='warning'>You know better than to violate the security of The Den, best wait until you leave to use [src].<span>"
|
||||
to_chat(user, "<span class='warning'>You know better than to violate the security of The Den, best wait until you leave to use [src].<span>")
|
||||
return
|
||||
else
|
||||
no_den_usage = 0
|
||||
@@ -72,7 +72,7 @@
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/magic/shoot_with_empty_chamber(mob/living/user as mob|obj)
|
||||
user << "<span class='warning'>The [name] whizzles quietly.<span>"
|
||||
to_chat(user, "<span class='warning'>The [name] whizzles quietly.<span>")
|
||||
|
||||
/obj/item/weapon/gun/magic/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is twisting [src] above [user.p_their()] head, releasing a magical blast! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
/obj/item/weapon/gun/magic/wand/examine(mob/user)
|
||||
..()
|
||||
user << "Has [charges] charge\s remaining."
|
||||
to_chat(user, "Has [charges] charge\s remaining.")
|
||||
|
||||
/obj/item/weapon/gun/magic/wand/update_icon()
|
||||
icon_state = "[initial(icon_state)][charges ? "" : "-drained"]"
|
||||
@@ -37,7 +37,7 @@
|
||||
if(no_den_usage)
|
||||
var/area/A = get_area(user)
|
||||
if(istype(A, /area/wizard_station))
|
||||
user << "<span class='warning'>You know better than to violate the security of The Den, best wait until you leave to use [src].<span>"
|
||||
to_chat(user, "<span class='warning'>You know better than to violate the security of The Den, best wait until you leave to use [src].<span>")
|
||||
return
|
||||
else
|
||||
no_den_usage = 0
|
||||
@@ -50,7 +50,7 @@
|
||||
/obj/item/weapon/gun/magic/wand/proc/zap_self(mob/living/user)
|
||||
user.visible_message("<span class='danger'>[user] zaps [user.p_them()]self with [src].</span>")
|
||||
playsound(user, fire_sound, 50, 1)
|
||||
user.attack_log += "\[[time_stamp()]\] <b>[user]/[user.ckey]</b> zapped [user.p_them()]self with a <b>[src]</b>"
|
||||
user.log_message("zapped [user.p_them()]self with a <b>[src]</b>", INDIVIDUAL_ATTACK_LOG)
|
||||
|
||||
|
||||
/////////////////////////////////////
|
||||
@@ -67,9 +67,9 @@
|
||||
|
||||
/obj/item/weapon/gun/magic/wand/death/zap_self(mob/living/user)
|
||||
..()
|
||||
user << "<span class='warning'>You irradiate yourself with pure energy! \
|
||||
to_chat(user, "<span class='warning'>You irradiate yourself with pure energy! \
|
||||
[pick("Do not pass go. Do not collect 200 zorkmids.","You feel more confident in your spell casting skills.","You Die...","Do you want your possessions identified?")]\
|
||||
</span>"
|
||||
</span>")
|
||||
user.adjustOxyLoss(500)
|
||||
charges--
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
var/mob/living/carbon/C = user
|
||||
C.regenerate_limbs()
|
||||
C.regenerate_organs()
|
||||
user << "<span class='notice'>You feel great!</span>"
|
||||
to_chat(user, "<span class='notice'>You feel great!</span>")
|
||||
charges--
|
||||
..()
|
||||
|
||||
@@ -148,7 +148,7 @@
|
||||
no_den_usage = 1
|
||||
|
||||
/obj/item/weapon/gun/magic/wand/door/zap_self(mob/living/user)
|
||||
user << "<span class='notice'>You feel vaguely more open with your feelings.</span>"
|
||||
to_chat(user, "<span class='notice'>You feel vaguely more open with your feelings.</span>")
|
||||
charges--
|
||||
..()
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
if(get_dist(source, current_target)>max_range || !los_check(source, current_target))
|
||||
LoseTarget()
|
||||
if(isliving(source))
|
||||
source << "<span class='warning'>You lose control of the beam!</span>"
|
||||
to_chat(source, "<span class='warning'>You lose control of the beam!</span>")
|
||||
return
|
||||
|
||||
if(current_target)
|
||||
|
||||
@@ -32,11 +32,11 @@
|
||||
|
||||
/obj/item/weapon/gun/syringe/examine(mob/user)
|
||||
..()
|
||||
user << "Can hold [max_syringes] syringe\s. Has [syringes.len] syringe\s remaining."
|
||||
to_chat(user, "Can hold [max_syringes] syringe\s. Has [syringes.len] syringe\s remaining.")
|
||||
|
||||
/obj/item/weapon/gun/syringe/attack_self(mob/living/user)
|
||||
if(!syringes.len)
|
||||
user << "<span class='warning'>[src] is empty!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] is empty!</span>")
|
||||
return 0
|
||||
|
||||
var/obj/item/weapon/reagent_containers/syringe/S = syringes[syringes.len]
|
||||
@@ -45,7 +45,7 @@
|
||||
S.loc = user.loc
|
||||
|
||||
syringes.Remove(S)
|
||||
user << "<span class='notice'>You unload [S] from \the [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You unload [S] from \the [src].</span>")
|
||||
|
||||
return 1
|
||||
|
||||
@@ -54,12 +54,12 @@
|
||||
if(syringes.len < max_syringes)
|
||||
if(!user.transferItemToLoc(A, src))
|
||||
return
|
||||
user << "<span class='notice'>You load [A] into \the [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You load [A] into \the [src].</span>")
|
||||
syringes.Add(A)
|
||||
recharge_newshot()
|
||||
return 1
|
||||
else
|
||||
usr << "<span class='warning'>[src] cannot hold more syringes!</span>"
|
||||
to_chat(usr, "<span class='warning'>[src] cannot hold more syringes!</span>")
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/gun/syringe/rapidsyringe
|
||||
|
||||
@@ -28,20 +28,20 @@
|
||||
if(G.pin && (force_replace || G.pin.pin_removeable))
|
||||
G.pin.loc = get_turf(G)
|
||||
G.pin.gun_remove(user)
|
||||
user << "<span class ='notice'>You remove [G]'s old pin.</span>"
|
||||
to_chat(user, "<span class ='notice'>You remove [G]'s old pin.</span>")
|
||||
|
||||
if(!G.pin)
|
||||
if(!user.temporarilyRemoveItemFromInventory(src))
|
||||
return
|
||||
gun_insert(user, G)
|
||||
user << "<span class ='notice'>You insert [src] into [G].</span>"
|
||||
to_chat(user, "<span class ='notice'>You insert [src] into [G].</span>")
|
||||
else
|
||||
user << "<span class ='notice'>This firearm already has a firing pin installed.</span>"
|
||||
to_chat(user, "<span class ='notice'>This firearm already has a firing pin installed.</span>")
|
||||
|
||||
/obj/item/device/firing_pin/emag_act(mob/user)
|
||||
if(!emagged)
|
||||
emagged = 1
|
||||
user << "<span class='notice'>You override the authentication mechanism.</span>"
|
||||
to_chat(user, "<span class='notice'>You override the authentication mechanism.</span>")
|
||||
|
||||
/obj/item/device/firing_pin/proc/gun_insert(mob/living/user, obj/item/weapon/gun/G)
|
||||
gun = G
|
||||
@@ -61,7 +61,7 @@
|
||||
user.show_message(fail_message, 1)
|
||||
if(selfdestruct)
|
||||
user.show_message("<span class='danger'>SELF-DESTRUCTING...</span><br>", 1)
|
||||
user << "<span class='userdanger'>[gun] explodes!</span>"
|
||||
to_chat(user, "<span class='userdanger'>[gun] explodes!</span>")
|
||||
explosion(get_turf(gun), -1, 0, 2, 3)
|
||||
if(gun)
|
||||
qdel(gun)
|
||||
@@ -165,7 +165,7 @@
|
||||
var/mob/living/carbon/M = target
|
||||
if(M.dna && M.dna.unique_enzymes)
|
||||
unique_enzymes = M.dna.unique_enzymes
|
||||
user << "<span class='notice'>DNA-LOCK SET.</span>"
|
||||
to_chat(user, "<span class='notice'>DNA-LOCK SET.</span>")
|
||||
|
||||
/obj/item/device/firing_pin/dna/pin_auth(mob/living/carbon/user)
|
||||
if(istype(user) && user.dna && user.dna.unique_enzymes)
|
||||
@@ -178,7 +178,7 @@
|
||||
if(!unique_enzymes)
|
||||
if(istype(user) && user.dna && user.dna.unique_enzymes)
|
||||
unique_enzymes = user.dna.unique_enzymes
|
||||
user << "<span class='notice'>DNA-LOCK SET.</span>"
|
||||
to_chat(user, "<span class='notice'>DNA-LOCK SET.</span>")
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -200,7 +200,7 @@
|
||||
var/mob/living/carbon/human/M = user
|
||||
if(istype(M.wear_suit, suit_requirement))
|
||||
return 1
|
||||
user << "<span class='warning'>You need to be wearing [tagcolor] laser tag armor!</span>"
|
||||
to_chat(user, "<span class='warning'>You need to be wearing [tagcolor] laser tag armor!</span>")
|
||||
return 0
|
||||
|
||||
/obj/item/device/firing_pin/tag/red
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
organ_hit_text = " in \the [parse_zone(limb_hit)]"
|
||||
if(suppressed)
|
||||
playsound(loc, hitsound, 5, 1, -1)
|
||||
L << "<span class='userdanger'>You're shot by \a [src][organ_hit_text]!</span>"
|
||||
to_chat(L, "<span class='userdanger'>You're shot by \a [src][organ_hit_text]!</span>")
|
||||
else
|
||||
if(hitsound)
|
||||
var/volume = vol_by_damage()
|
||||
@@ -279,7 +279,7 @@
|
||||
|
||||
//Split Y+Pixel_Y up into list(Y, Pixel_Y)
|
||||
var/list/screen_loc_Y = splittext(screen_loc_params[2],":")
|
||||
// world << "X: [screen_loc_X[1]] PixelX: [screen_loc_X[2]] / Y: [screen_loc_Y[1]] PixelY: [screen_loc_Y[2]]"
|
||||
// to_chat(world, "X: [screen_loc_X[1]] PixelX: [screen_loc_X[2]] / Y: [screen_loc_Y[1]] PixelY: [screen_loc_Y[2]]")
|
||||
var/x = text2num(screen_loc_X[1]) * 32 + text2num(screen_loc_X[2]) - 32
|
||||
var/y = text2num(screen_loc_Y[1]) * 32 + text2num(screen_loc_Y[2]) - 32
|
||||
|
||||
@@ -288,9 +288,9 @@
|
||||
|
||||
var/ox = round(screenview/2) //"origin" x
|
||||
var/oy = round(screenview/2) //"origin" y
|
||||
// world << "Pixel position: [x] [y]"
|
||||
// to_chat(world, "Pixel position: [x] [y]")
|
||||
var/angle = Atan2(y - oy, x - ox)
|
||||
// world << "Angle: [angle]"
|
||||
// to_chat(world, "Angle: [angle]")
|
||||
src.Angle = angle
|
||||
if(spread)
|
||||
src.Angle += spread
|
||||
|
||||
@@ -3,13 +3,14 @@
|
||||
icon_state = "laser"
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
damage = 20
|
||||
luminosity = 1
|
||||
light_range = 2
|
||||
damage_type = BURN
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
hitsound_wall = 'sound/weapons/effects/searwall.ogg'
|
||||
flag = "laser"
|
||||
eyeblur = 2
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/red_laser
|
||||
light_color = LIGHT_COLOR_RED
|
||||
|
||||
/obj/item/projectile/beam/laser
|
||||
|
||||
@@ -48,6 +49,7 @@
|
||||
range = 15
|
||||
forcedodge = 1
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/green_laser
|
||||
light_color = LIGHT_COLOR_GREEN
|
||||
|
||||
/obj/item/projectile/beam/disabler
|
||||
name = "disabler beam"
|
||||
@@ -58,13 +60,14 @@
|
||||
hitsound = 'sound/weapons/tap.ogg'
|
||||
eyeblur = 0
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/blue_laser
|
||||
light_color = LIGHT_COLOR_BLUE
|
||||
|
||||
/obj/item/projectile/beam/pulse
|
||||
name = "pulse"
|
||||
icon_state = "u_laser"
|
||||
damage = 50
|
||||
luminosity = 2
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/blue_laser
|
||||
light_color = LIGHT_COLOR_BLUE
|
||||
|
||||
/obj/item/projectile/beam/pulse/on_hit(atom/target, blocked = 0)
|
||||
. = ..()
|
||||
@@ -90,9 +93,9 @@
|
||||
icon_state = "emitter"
|
||||
damage = 30
|
||||
legacy = 1
|
||||
luminosity = 2
|
||||
animate_movement = SLIDE_STEPS
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/green_laser
|
||||
light_color = LIGHT_COLOR_GREEN
|
||||
|
||||
/obj/item/projectile/beam/emitter/singularity_pull()
|
||||
return //don't want the emitters to miss
|
||||
@@ -106,6 +109,7 @@
|
||||
flag = "laser"
|
||||
var/suit_types = list(/obj/item/clothing/suit/redtag, /obj/item/clothing/suit/bluetag)
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/blue_laser
|
||||
light_color = LIGHT_COLOR_BLUE
|
||||
|
||||
/obj/item/projectile/beam/lasertag/on_hit(atom/target, blocked = 0)
|
||||
. = ..()
|
||||
@@ -119,6 +123,7 @@
|
||||
icon_state = "laser"
|
||||
suit_types = list(/obj/item/clothing/suit/bluetag)
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/red_laser
|
||||
light_color = LIGHT_COLOR_RED
|
||||
|
||||
/obj/item/projectile/beam/lasertag/bluetag
|
||||
icon_state = "bluelaser"
|
||||
@@ -130,18 +135,21 @@
|
||||
damage = 200
|
||||
damage_type = BURN
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/purple_laser
|
||||
light_color = LIGHT_COLOR_PURPLE
|
||||
|
||||
/obj/item/projectile/beam/instakill/blue
|
||||
icon_state = "blue_laser"
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/blue_laser
|
||||
light_color = LIGHT_COLOR_BLUE
|
||||
|
||||
/obj/item/projectile/beam/instakill/red
|
||||
icon_state = "red_laser"
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/red_laser
|
||||
light_color = LIGHT_COLOR_RED
|
||||
|
||||
/obj/item/projectile/beam/instakill/on_hit(atom/target)
|
||||
. = ..()
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/M = target
|
||||
M.visible_message("<span class='danger'>[M] explodes into a shower of gibs!</span>")
|
||||
M.gib()
|
||||
M.gib()
|
||||
|
||||
@@ -35,6 +35,12 @@
|
||||
name = "pellet"
|
||||
damage = 12.5
|
||||
|
||||
/obj/item/projectile/bullet/pellet/Range()
|
||||
..()
|
||||
damage += -0.75
|
||||
if(damage < 0)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/projectile/bullet/pellet/weak
|
||||
damage = 6
|
||||
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
|
||||
/obj/effect/nettingportal/New()
|
||||
..()
|
||||
SetLuminosity(3)
|
||||
set_light(3)
|
||||
var/obj/item/device/radio/beacon/teletarget = null
|
||||
for(var/obj/machinery/computer/teleporter/com in machines)
|
||||
if(com.target)
|
||||
@@ -155,7 +155,7 @@
|
||||
/obj/item/projectile/energy/bolt //ebow bolts
|
||||
name = "bolt"
|
||||
icon_state = "cbbolt"
|
||||
damage = 15
|
||||
damage = 8
|
||||
damage_type = TOX
|
||||
nodamage = 0
|
||||
weaken = 5
|
||||
|
||||
@@ -35,10 +35,9 @@
|
||||
C.regenerate_organs()
|
||||
if(target.revive(full_heal = 1))
|
||||
target.grab_ghost(force = TRUE) // even suicides
|
||||
target << "<span class='notice'>You rise with a start, \
|
||||
you're alive!!!</span>"
|
||||
to_chat(target, "<span class='notice'>You rise with a start, you're alive!!!</span>")
|
||||
else if(target.stat != DEAD)
|
||||
target << "<span class='notice'>You feel great!</span>"
|
||||
to_chat(target, "<span class='notice'>You feel great!</span>")
|
||||
|
||||
/obj/item/projectile/magic/teleport
|
||||
name = "bolt of teleportation"
|
||||
@@ -265,20 +264,19 @@
|
||||
|
||||
new_mob.languages_spoken |= HUMAN
|
||||
new_mob.languages_understood |= HUMAN
|
||||
new_mob.attack_log = M.attack_log
|
||||
new_mob.logging = M.logging
|
||||
|
||||
// Some forms can still wear some items
|
||||
for(var/obj/item/W in contents)
|
||||
new_mob.equip_to_appropriate_slot(W)
|
||||
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>[M.real_name] ([M.ckey]) became [new_mob.real_name].</font>")
|
||||
M.log_message("<font color='orange'>became [new_mob.real_name].</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
|
||||
new_mob.a_intent = INTENT_HARM
|
||||
|
||||
M.wabbajack_act(new_mob)
|
||||
|
||||
new_mob << "<span class='warning'>Your form morphs into that of \
|
||||
a [randomize].</span>"
|
||||
to_chat(new_mob, "<span class='warning'>Your form morphs into that of a [randomize].</span>")
|
||||
|
||||
qdel(M)
|
||||
return new_mob
|
||||
@@ -312,7 +310,7 @@
|
||||
if(L.mind)
|
||||
L.mind.transfer_to(S)
|
||||
if(owner)
|
||||
S << "<span class='userdanger'>You are an animate statue. You cannot move when monitored, but are nearly invincible and deadly when unobserved! Do not harm [owner], your creator.</span>"
|
||||
to_chat(S, "<span class='userdanger'>You are an animate statue. You cannot move when monitored, but are nearly invincible and deadly when unobserved! Do not harm [owner], your creator.</span>")
|
||||
P.loc = S
|
||||
return
|
||||
else
|
||||
|
||||
@@ -8,6 +8,8 @@ obj/item/projectile/energy/plasmabolt
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
hitsound_wall = 'sound/weapons/effects/searwall.ogg'
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/green_laser
|
||||
light_range = 3
|
||||
light_color = LIGHT_COLOR_GREEN
|
||||
|
||||
/obj/item/projectile/energy/plasmabolt/light
|
||||
damage = 35
|
||||
|
||||
Reference in New Issue
Block a user