mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-07-22 05:32:58 +01:00
63ddcbb769
m1911-P put back on the map in creed's office. Rearranged xenobio a bit to make the shield gens more user friendly. Removed the capital at the start of the m1911-P. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1845 316c924e-a436-60f5-8080-3fe189b3f50e
1098 lines
30 KiB
Plaintext
1098 lines
30 KiB
Plaintext
var/const/PROJECTILE_TASER = 1
|
|
var/const/PROJECTILE_LASER = 2
|
|
var/const/PROJECTILE_BULLET = 3
|
|
var/const/PROJECTILE_PULSE = 4
|
|
var/const/PROJECTILE_BOLT = 5
|
|
var/const/PROJECTILE_WEAKBULLET = 6
|
|
var/const/PROJECTILE_TELEGUN = 7
|
|
var/const/PROJECTILE_DART = 8
|
|
|
|
///////////////////////////////////////////////
|
|
////////////////AMMO SECTION///////////////////
|
|
///////////////////////////////////////////////
|
|
|
|
/obj/item/projectile
|
|
name = "projectile"
|
|
icon = 'projectiles.dmi'
|
|
icon_state = "bullet"
|
|
density = 1
|
|
throwforce = 0.1 //an attempt to make it possible to shoot your way through space
|
|
unacidable = 1 //Just to be sure.
|
|
anchored = 1 // I'm not sure if it is a good idea. Bullets sucked to space and curve trajectories near singularity could be awesome. --rastaf0
|
|
flags = FPRINT | TABLEPASS | CONDUCT | ONBELT // ONBELT???
|
|
var
|
|
def_zone = ""
|
|
damage_type = PROJECTILE_BULLET
|
|
mob/firer = null
|
|
silenced = 0
|
|
yo = null
|
|
xo = null
|
|
current = null
|
|
turf/original = null
|
|
|
|
bumped = 0
|
|
|
|
|
|
weakbullet
|
|
damage_type = PROJECTILE_WEAKBULLET
|
|
|
|
beam
|
|
name = "laser"
|
|
damage_type = PROJECTILE_LASER
|
|
icon_state = "laser"
|
|
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
|
|
|
pulse
|
|
name = "pulse"
|
|
damage_type = PROJECTILE_PULSE
|
|
icon_state = "u_laser"
|
|
|
|
dart
|
|
name = "dart"
|
|
damage_type = PROJECTILE_DART
|
|
icon_state = "toxin"
|
|
|
|
electrode
|
|
name = "electrode"
|
|
damage_type = PROJECTILE_TASER
|
|
icon_state = "spark"
|
|
|
|
bolt
|
|
name = "bolt"
|
|
damage_type = PROJECTILE_BOLT
|
|
icon_state = "cbbolt"
|
|
|
|
freeze
|
|
name = "freeze beam"
|
|
icon_state = "ice_2"
|
|
var/temperature = 0
|
|
|
|
proc/Freeze(atom/A as mob|obj|turf|area)
|
|
if(istype(A, /mob))
|
|
var/mob/M = A
|
|
if(M.bodytemperature > temperature)
|
|
M.bodytemperature = temperature
|
|
|
|
plasma
|
|
name = "plasma blast"
|
|
icon_state = "plasma_2"
|
|
var/temperature = 800
|
|
|
|
proc/Heat(atom/A as mob|obj|turf|area)
|
|
if(istype(A, /mob))
|
|
var/mob/M = A
|
|
if(M.bodytemperature < temperature)
|
|
M.bodytemperature = temperature
|
|
|
|
|
|
|
|
|
|
Bump(atom/A as mob|obj|turf|area)
|
|
if(A == firer)
|
|
loc = A.loc
|
|
return // cannot shoot yourself! NO!
|
|
if(bumped) return
|
|
|
|
bumped = 1
|
|
if(firer && istype(A, /mob))
|
|
var/mob/M = A
|
|
if(!silenced)
|
|
/*
|
|
for(var/mob/O in viewers(M))
|
|
O.show_message("\red [A.name] has been shot by [firer.name]!", 1) */
|
|
|
|
visible_message("\red [A.name] has been shot by [firer.name]!", "\blue You hear a [istype(src, /obj/item/projectile/beam) ? "gunshot" : "laser blast"]!")
|
|
else
|
|
M << "\red You've been shot!"
|
|
if(istype(firer, /mob))
|
|
M.attack_log += text("[] <b>[]/[]</b> shot <b>[]/[]</b> with a <b>[]</b>", world.time, firer, firer.ckey, M, M.ckey, src)
|
|
firer.attack_log += text("[] <b>[]/[]</b> shot <b>[]/[]</b> with a <b>[]</b>", world.time, firer, firer.ckey, M, M.ckey, src)
|
|
else
|
|
M.attack_log += text("[] <b>UNKOWN SUBJECT (No longer exists)</b> shot <b>[]/[]</b> with a <b>[]</b>", world.time, M, M.ckey, src)
|
|
spawn(0)
|
|
if(A)
|
|
|
|
if(istype(src, /obj/item/projectile/freeze))
|
|
var/obj/item/projectile/freeze/F = src
|
|
F.Freeze(A)
|
|
if(istype(src, /obj/item/projectile/plasma))
|
|
var/obj/item/projectile/plasma/P = src
|
|
P.Heat(A)
|
|
else
|
|
|
|
A.bullet_act(damage_type, src, def_zone)
|
|
if(istype(A,/turf) && !istype(src, /obj/item/projectile/beam))
|
|
for(var/obj/O in A)
|
|
O.bullet_act(damage_type, src, def_zone)
|
|
del(src)
|
|
return
|
|
|
|
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
|
if(air_group || (height==0)) return 1
|
|
|
|
if(istype(mover, /obj/item/projectile))
|
|
return prob(95)
|
|
else
|
|
return 1
|
|
|
|
process()
|
|
spawn while(src)
|
|
|
|
if ((!( current ) || loc == current))
|
|
current = locate(min(max(x + xo, 1), world.maxx), min(max(y + yo, 1), world.maxy), z)
|
|
if ((x == 1 || x == world.maxx || y == 1 || y == world.maxy))
|
|
del(src)
|
|
return
|
|
step_towards(src, current)
|
|
|
|
sleep( 1 )
|
|
|
|
if(!bumped)
|
|
if(loc == original)
|
|
for(var/mob/M in original)
|
|
Bump(M)
|
|
sleep( 1 )
|
|
|
|
return
|
|
|
|
/obj/item/ammo_casing
|
|
name = "bullet casing (.375)"
|
|
desc = "A .357 bullet casing."
|
|
icon = 'ammo.dmi'
|
|
icon_state = "s-casing"
|
|
flags = FPRINT | TABLEPASS | CONDUCT | ONBELT
|
|
throwforce = 1
|
|
var
|
|
caliber = "357" //Which kind of guns it can be loaded into
|
|
obj/item/projectile/BB //The loaded bullet
|
|
New()
|
|
BB = new /obj/item/projectile(src)
|
|
pixel_x = rand(-10.0, 10)
|
|
pixel_y = rand(-10.0, 10)
|
|
dir = pick(cardinal)
|
|
|
|
|
|
c38
|
|
name = "bullet casing (.38)"
|
|
desc = "A .38 bullet casing."
|
|
caliber = "38"
|
|
|
|
New()
|
|
BB = new /obj/item/projectile/weakbullet(src)
|
|
pixel_x = rand(-10.0, 10)
|
|
pixel_y = rand(-10.0, 10)
|
|
dir = pick(cardinal)
|
|
|
|
c9mm
|
|
name = "bullet casing (9mm)"
|
|
desc = "A 9mm bullet casing."
|
|
caliber = "9mm"
|
|
|
|
New()
|
|
BB = new /obj/item/projectile/weakbullet(src)
|
|
pixel_x = rand(-10.0, 10)
|
|
pixel_y = rand(-10.0, 10)
|
|
dir = pick(cardinal)
|
|
|
|
c45
|
|
name = "bullet casing (.45)"
|
|
desc = "A .45 bullet casing."
|
|
caliber = ".45"
|
|
|
|
New()
|
|
BB = new /obj/item/projectile(src)
|
|
pixel_x = rand(-10.0, 10)
|
|
pixel_y = rand(-10.0, 10)
|
|
dir = pick(cardinal)
|
|
|
|
|
|
shotgun
|
|
desc = "A 12gauge shell."
|
|
name = "12 gauge shell"
|
|
icon_state = "gshell"
|
|
caliber = "shotgun"
|
|
m_amt = 25000
|
|
|
|
New()
|
|
BB = new /obj/item/projectile
|
|
src.pixel_x = rand(-10.0, 10)
|
|
src.pixel_y = rand(-10.0, 10)
|
|
blank
|
|
desc = "A blank shell."
|
|
name = "blank shell"
|
|
icon_state = "blshell"
|
|
m_amt = 500
|
|
|
|
New()
|
|
src.pixel_x = rand(-10.0, 10)
|
|
src.pixel_y = rand(-10.0, 10)
|
|
|
|
beanbag
|
|
desc = "A weak beanbag shell."
|
|
name = "beanbag shell"
|
|
icon_state = "bshell"
|
|
m_amt = 10000
|
|
|
|
New()
|
|
BB = new /obj/item/projectile/weakbullet
|
|
src.pixel_x = rand(-10.0, 10)
|
|
src.pixel_y = rand(-10.0, 10)
|
|
|
|
dart
|
|
desc = "A dart for use in shotguns.."
|
|
name = "shotgun dart"
|
|
icon_state = "blshell" //someone, draw the icon, please.
|
|
m_amt = 50000 //because it's like, instakill.
|
|
|
|
New()
|
|
BB = new /obj/item/projectile/dart
|
|
src.pixel_x = rand(-10.0, 10)
|
|
src.pixel_y = rand(-10.0, 10)
|
|
|
|
/obj/item/ammo_magazine
|
|
name = "ammo box (.357)"
|
|
desc = "A box of .357 ammo"
|
|
icon_state = "357"
|
|
icon = 'ammo.dmi'
|
|
flags = FPRINT | TABLEPASS | CONDUCT | ONBELT
|
|
item_state = "syringe_kit"
|
|
m_amt = 50000
|
|
throwforce = 2
|
|
w_class = 1.0
|
|
throw_speed = 4
|
|
throw_range = 20
|
|
var
|
|
list/stored_ammo = list()
|
|
|
|
New()
|
|
for(var/i = 1, i <= 7, i++)
|
|
stored_ammo += new /obj/item/ammo_casing(src)
|
|
update_icon()
|
|
|
|
update_icon()
|
|
icon_state = text("[initial(icon_state)]-[]", stored_ammo.len)
|
|
desc = text("There are [] shell\s left!", stored_ammo.len)
|
|
|
|
c38
|
|
name = "speed loader (.38)"
|
|
icon_state = "38"
|
|
New()
|
|
for(var/i = 1, i <= 7, i++)
|
|
stored_ammo += new /obj/item/ammo_casing/c38(src)
|
|
update_icon()
|
|
|
|
c9mm
|
|
name = "Ammunition Box (9mm)"
|
|
icon_state = "9mm"
|
|
origin_tech = "combat=3;materials=2"
|
|
New()
|
|
for(var/i = 1, i <= 30, i++)
|
|
stored_ammo += new /obj/item/ammo_casing/c9mm(src)
|
|
update_icon()
|
|
|
|
update_icon()
|
|
desc = text("There are [] round\s left!", stored_ammo.len)
|
|
|
|
c45
|
|
name = "Ammunition Box (.45)"
|
|
icon_state = "9mm"
|
|
origin_tech = "combat=3;materials=2"
|
|
New()
|
|
for(var/i = 1, i <= 30, i++)
|
|
stored_ammo += new /obj/item/ammo_casing/c45(src)
|
|
update_icon()
|
|
|
|
update_icon()
|
|
desc = text("There are [] round\s left!", stored_ammo.len)
|
|
|
|
/*
|
|
shotgun
|
|
name = "ammo box (12gauge)"
|
|
desc = "A box of 12 gauge shell"
|
|
icon_state = "" //no sprite :'(
|
|
caliber = "shotgun"
|
|
m_amt = 25000
|
|
|
|
New()
|
|
BB = new /obj/item/projectile/shotgun(src)
|
|
src.pixel_x = rand(-10.0, 10)
|
|
src.pixel_y = rand(-10.0, 10)
|
|
*/
|
|
///////////////////////////////////////////////
|
|
//////////////////////Guns/////////////////////
|
|
///////////////////////////////////////////////
|
|
|
|
/obj/item/weapon/gun
|
|
name = "gun"
|
|
desc = "Its a gun. It's pretty terrible, though."
|
|
icon = 'gun.dmi'
|
|
icon_state = "detective"
|
|
item_state = "gun"
|
|
flags = FPRINT | TABLEPASS | CONDUCT | ONBELT | USEDELAY
|
|
m_amt = 2000
|
|
w_class = 2.0
|
|
throw_speed = 4
|
|
throwforce = 5
|
|
throw_range = 10
|
|
force = 10
|
|
|
|
origin_tech = "combat=1"
|
|
var
|
|
fire_sound = 'Gunshot.ogg'
|
|
obj/item/projectile/in_chamber
|
|
caliber = ""
|
|
silenced = 0
|
|
badmin = 0
|
|
|
|
projectile
|
|
desc = "A classic revolver. Uses 357 ammo"
|
|
name = "revolver"
|
|
icon_state = "revolver"
|
|
caliber = "357"
|
|
origin_tech = "combat=2;materials=2;syndicate=6"
|
|
w_class = 3.0
|
|
throw_speed = 2
|
|
throw_range = 10
|
|
m_amt = 1000
|
|
force = 24
|
|
var
|
|
list/loaded = list()
|
|
max_shells = 7
|
|
load_method = 0 //0 = Single shells or quick loader, 1 = magazine
|
|
|
|
load_into_chamber()
|
|
if(!loaded.len)
|
|
return 0
|
|
var/obj/item/ammo_casing/AC = loaded[1] //load next casing.
|
|
loaded -= AC //Remove casing from loaded list.
|
|
AC.loc = get_turf(src) //Eject casing onto ground.
|
|
if(AC.BB)
|
|
in_chamber = AC.BB //Load projectile into chamber.
|
|
AC.BB.loc = src //Set projectile loc to gun.
|
|
return 1
|
|
else
|
|
return 0
|
|
|
|
New()
|
|
for(var/i = 1, i <= max_shells, i++)
|
|
loaded += new /obj/item/ammo_casing(src)
|
|
update_icon()
|
|
|
|
attackby(var/obj/item/A as obj, mob/user as mob)
|
|
var/num_loaded = 0
|
|
if(istype(A, /obj/item/ammo_magazine))
|
|
var/obj/item/ammo_magazine/AM = A
|
|
for(var/obj/item/ammo_casing/AC in AM.stored_ammo)
|
|
if(loaded.len >= max_shells)
|
|
break
|
|
if(AC.caliber == caliber && loaded.len < max_shells)
|
|
AC.loc = src
|
|
AM.stored_ammo -= AC
|
|
loaded += AC
|
|
num_loaded++
|
|
else if(istype(A, /obj/item/ammo_casing) && !load_method)
|
|
var/obj/item/ammo_casing/AC = A
|
|
if(AC.caliber == caliber && loaded.len < max_shells)
|
|
user.drop_item()
|
|
AC.loc = src
|
|
loaded += AC
|
|
num_loaded++
|
|
if(num_loaded)
|
|
user << text("\blue You load [] shell\s into the gun!", num_loaded)
|
|
A.update_icon()
|
|
return
|
|
|
|
update_icon()
|
|
desc = initial(desc) + text(" Has [] rounds remaining.", loaded.len)
|
|
|
|
detective
|
|
desc = "A cheap Martian knock-off of a Smith & Wesson Model 10. Uses .38-Special rounds."
|
|
name = ".38 revolver"
|
|
icon_state = "detective"
|
|
force = 14.0
|
|
caliber = "38"
|
|
origin_tech = "combat=2;materials=2"
|
|
|
|
New()
|
|
for(var/i = 1, i <= max_shells, i++)
|
|
loaded += new /obj/item/ammo_casing/c38(src)
|
|
update_icon()
|
|
|
|
special_check(var/mob/living/carbon/human/M)
|
|
if(istype(M))
|
|
if(istype(M.w_uniform, /obj/item/clothing/under/det) && istype(M.head, /obj/item/clothing/head/det_hat) && istype(M.wear_suit, /obj/item/clothing/suit/det_suit))
|
|
return 1
|
|
M << "\red You just don't feel cool enough to use this gun looking like that."
|
|
return 0
|
|
|
|
verb
|
|
rename_gun()
|
|
set name = "Name Gun"
|
|
set desc = "Click to rename your gun. If you're the detective."
|
|
|
|
var/mob/U = usr
|
|
if(ishuman(U)&&U.mind&&U.mind.assigned_role=="Detective")
|
|
var/input = input("What do you want to name the gun?",,"")
|
|
input = sanitize(input)
|
|
if(input)
|
|
if(in_range(U,src)&&(!isnull(src))&&!U.stat)
|
|
name = input
|
|
U << "You name the gun [input]. Say hello to your new friend."
|
|
else
|
|
U << "\red Can't let you do that, detective!"
|
|
else
|
|
U << "\red You don't feel cool enough to name this gun, chump."
|
|
|
|
mateba
|
|
name = "mateba"
|
|
desc = "When you absolutely, positively need a 10mm hole in the other guy. Uses .357 ammo."
|
|
icon_state = "mateba"
|
|
origin_tech = "combat=2;materials=2"
|
|
|
|
shotgun
|
|
name = "shotgun"
|
|
desc = "Useful for sweeping alleys."
|
|
icon_state = "shotgun"
|
|
max_shells = 2
|
|
w_class = 4.0
|
|
force = 7.0
|
|
flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY | ONBACK
|
|
caliber = "shotgun"
|
|
origin_tech = "combat=2;materials=2"
|
|
|
|
New()
|
|
for(var/i = 1, i <= max_shells, i++)
|
|
loaded += new /obj/item/ammo_casing/shotgun/beanbag(src)
|
|
update_icon()
|
|
|
|
combat
|
|
name = "combat shotgun"
|
|
icon_state = "cshotgun"
|
|
w_class = 4.0
|
|
force = 12.0
|
|
flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY | ONBACK
|
|
max_shells = 8
|
|
origin_tech = "combat=3"
|
|
New()
|
|
for(var/i = 1, i <= max_shells, i++)
|
|
loaded += new /obj/item/ammo_casing/shotgun(src)
|
|
update_icon()
|
|
|
|
automatic //Hopefully someone will find a way to make these fire in bursts or something. --Superxpdude
|
|
name = "Submachine Gun"
|
|
desc = "A lightweight, fast firing gun. Uses 9mm rounds."
|
|
icon_state = "saber"
|
|
w_class = 3.0
|
|
force = 7
|
|
max_shells = 18
|
|
caliber = "9mm"
|
|
origin_tech = "combat=4;materials=2"
|
|
|
|
New()
|
|
for(var/i = 1, i <= max_shells, i++)
|
|
loaded += new /obj/item/ammo_casing/c9mm(src)
|
|
update_icon()
|
|
|
|
mini_uzi
|
|
name = "Mini-Uzi"
|
|
desc = "A lightweight, fast firing gun, for when you REALLY need someone dead. Uses .45 rounds."
|
|
icon_state = "mini-uzi"
|
|
w_class = 3.0
|
|
force = 16
|
|
max_shells = 20
|
|
caliber = ".45"
|
|
origin_tech = "combat=5;materials=2;syndicate=8"
|
|
|
|
New()
|
|
for(var/i = 1, i <= max_shells, i++)
|
|
loaded += new /obj/item/ammo_casing/c45(src)
|
|
update_icon()
|
|
|
|
silenced
|
|
name = "Silenced Pistol"
|
|
desc = "A small, quiet, easily concealable gun. Uses .45 rounds."
|
|
icon_state = "silenced_pistol"
|
|
w_class = 3.0
|
|
force = 14.0
|
|
max_shells = 12
|
|
caliber = ".45"
|
|
silenced = 1
|
|
origin_tech = "combat=2;materials=2;syndicate=8"
|
|
|
|
New()
|
|
for(var/i = 1, i <= max_shells, i++)
|
|
loaded += new /obj/item/ammo_casing/c45(src)
|
|
update_icon()
|
|
|
|
energy
|
|
icon_state = "energy"
|
|
name = "energy gun"
|
|
desc = "A basic energy-based gun with two settings: Stun and kill."
|
|
fire_sound = 'Taser.ogg'
|
|
var
|
|
var/obj/item/weapon/cell/power_supply
|
|
mode = 0 //0 = stun, 1 = kill
|
|
charge_cost = 100 //How much energy is needed to fire.
|
|
|
|
New()
|
|
power_supply = new(src)
|
|
power_supply.give(power_supply.maxcharge)
|
|
|
|
load_into_chamber()
|
|
if(in_chamber)
|
|
return 1
|
|
if(!power_supply)
|
|
return 0
|
|
if(power_supply.charge < charge_cost)
|
|
return 0
|
|
switch (mode)
|
|
if(0)
|
|
in_chamber = new /obj/item/projectile/electrode(src)
|
|
if(1)
|
|
in_chamber = new /obj/item/projectile/beam(src)
|
|
power_supply.use(charge_cost)
|
|
return 1
|
|
|
|
attack_self(mob/living/user as mob)
|
|
switch(mode)
|
|
if(0)
|
|
mode = 1
|
|
charge_cost = 100
|
|
fire_sound = 'Laser.ogg'
|
|
user << "\red [src.name] is now set to kill."
|
|
if(1)
|
|
mode = 0
|
|
charge_cost = 100
|
|
fire_sound = 'Taser.ogg'
|
|
user << "\red [src.name] is now set to stun."
|
|
update_icon()
|
|
return
|
|
|
|
update_icon()
|
|
var/ratio = power_supply.charge / power_supply.maxcharge
|
|
ratio = round(ratio, 0.25) * 100
|
|
icon_state = text("[][]", initial(icon_state), ratio)
|
|
|
|
laser
|
|
name = "laser gun"
|
|
icon_state = "laser"
|
|
fire_sound = 'Laser.ogg'
|
|
w_class = 3.0
|
|
throw_speed = 2
|
|
throw_range = 10
|
|
force = 7.0
|
|
m_amt = 2000
|
|
origin_tech = "combat=3;magnets=2"
|
|
mode = 1 //We don't want laser guns to be on a stun setting. --Superxpdude
|
|
|
|
attack_self(mob/living/user as mob)
|
|
return // We don't want laser guns to be able to change to a stun setting. --Superxpdude
|
|
|
|
captain
|
|
icon_state = "caplaser"
|
|
desc = "This is an antique laser gun. All craftsmanship is of the highest quality. It is decorated with assistant leather and chrome. The object menaces with spikes of energy. On the item is an image of Space Station 13. The station is exploding."
|
|
force = 10
|
|
origin_tech = null //forgotten technology of ancients lol
|
|
|
|
cyborg
|
|
load_into_chamber()
|
|
if(in_chamber)
|
|
return 1
|
|
if(isrobot(src.loc))
|
|
var/mob/living/silicon/robot/R = src.loc
|
|
R.cell.use(20)
|
|
in_chamber = new /obj/item/projectile/beam(src)
|
|
return 1
|
|
return 0
|
|
|
|
pulse_rifle
|
|
name = "pulse rifle"
|
|
desc = "A heavy-duty, pulse-based energy weapon with multiple fire settings, preferred by front-line combat personnel."
|
|
icon_state = "pulse"
|
|
force = 15
|
|
mode = 2
|
|
fire_sound = 'pulse.ogg'
|
|
load_into_chamber()
|
|
if(in_chamber)
|
|
return 1
|
|
if(power_supply.charge < charge_cost)
|
|
return 0
|
|
switch (mode)
|
|
if(0)
|
|
in_chamber = new /obj/item/projectile/electrode(src)
|
|
if(1)
|
|
in_chamber = new /obj/item/projectile/beam(src)
|
|
if(2)
|
|
in_chamber = new /obj/item/projectile/beam/pulse(src)
|
|
power_supply.use(charge_cost)
|
|
return 1
|
|
|
|
attack_self(mob/living/user as mob)
|
|
mode++
|
|
switch(mode)
|
|
if(1)
|
|
user << "\red [src.name] is now set to kill."
|
|
fire_sound = 'Laser.ogg'
|
|
charge_cost = 100
|
|
if(2)
|
|
user << "\red [src.name] is now set to destroy."
|
|
fire_sound = 'pulse.ogg'
|
|
charge_cost = 200
|
|
else
|
|
mode = 0
|
|
user << "\red [src.name] is now set to stun."
|
|
fire_sound = 'Taser.ogg'
|
|
charge_cost = 50
|
|
New()
|
|
power_supply = new /obj/item/weapon/cell/super(src)
|
|
power_supply.give(power_supply.maxcharge)
|
|
update_icon()
|
|
|
|
destroyer
|
|
name = "pulse destroyer"
|
|
desc = "A heavy-duty, pulse-based energy weapon. The mode is set to DESTROY. Always destroy."
|
|
mode = 2
|
|
New()
|
|
power_supply = new /obj/item/weapon/cell/infinite(src)
|
|
power_supply.give(power_supply.maxcharge)
|
|
update_icon()
|
|
attack_self(mob/living/user as mob)
|
|
return
|
|
M1911
|
|
name = "m1911-P"
|
|
desc = "It's not the size of the gun, it's the size of the hole it puts through people."
|
|
icon_state = "m1911-p"
|
|
New()
|
|
power_supply = new /obj/item/weapon/cell/infinite(src)
|
|
power_supply.give(power_supply.maxcharge)
|
|
update_icon()
|
|
|
|
nuclear
|
|
name = "Advanced Energy Gun"
|
|
desc = "An energy gun with an experimental miniaturized reactor."
|
|
origin_tech = "combat=3;materials=5;powerstorage=3"
|
|
var/lightfail = 0
|
|
icon_state = "nucgun"
|
|
|
|
New()
|
|
..()
|
|
charge()
|
|
|
|
proc
|
|
charge()
|
|
if(power_supply.charge < power_supply.maxcharge)
|
|
if(failcheck())
|
|
power_supply.give(100)
|
|
update_icon()
|
|
if(!crit_fail)
|
|
spawn(50) charge()
|
|
|
|
failcheck()
|
|
lightfail = 0
|
|
if (prob(src.reliability)) return 1 //No failure
|
|
if (prob(src.reliability))
|
|
for (var/mob/M in range(0,src)) //Only a minor failure, enjoy your radiation if you're in the same tile or carrying it
|
|
if (src in M.contents)
|
|
M << "\red Your gun feels pleasantly warm for a moment."
|
|
else
|
|
M << "\red You feel a warm sensation."
|
|
M.radiation += rand(1,40)
|
|
lightfail = 1
|
|
else
|
|
for (var/mob/M in range(rand(1,4),src)) //Big failure, TIME FOR RADIATION BITCHES
|
|
if (src in M.contents)
|
|
M << "\red Your gun's reactor overloads!"
|
|
M << "\red You feel a wave of heat wash over you."
|
|
M.radiation += 100
|
|
crit_fail = 1 //break the gun so it stops recharging
|
|
update_icon()
|
|
|
|
update_charge()
|
|
if (crit_fail)
|
|
overlays += "nucgun-whee"
|
|
return
|
|
var/ratio = power_supply.charge / power_supply.maxcharge
|
|
ratio = round(ratio, 0.25) * 100
|
|
overlays += text("nucgun-[]", ratio)
|
|
|
|
update_reactor()
|
|
if(crit_fail)
|
|
overlays += "nucgun-crit"
|
|
return
|
|
if(lightfail)
|
|
overlays += "nucgun-medium"
|
|
else if ((power_supply.charge/power_supply.maxcharge) <= 0.5)
|
|
overlays += "nucgun-light"
|
|
else
|
|
overlays += "nucgun-clean"
|
|
|
|
update_mode()
|
|
if (mode == 2)
|
|
overlays += "nucgun-stun"
|
|
else if (mode == 1)
|
|
overlays += "nucgun-kill"
|
|
|
|
emp_act(severity)
|
|
..()
|
|
reliability -= round(15/severity)
|
|
|
|
update_icon()
|
|
overlays = null
|
|
update_charge()
|
|
update_reactor()
|
|
update_mode()
|
|
|
|
taser
|
|
name = "taser gun"
|
|
icon_state = "taser"
|
|
fire_sound = 'Taser.ogg'
|
|
charge_cost = 100
|
|
|
|
load_into_chamber()
|
|
if(in_chamber)
|
|
return 1
|
|
if(power_supply.charge <= charge_cost)
|
|
return 0
|
|
in_chamber = new /obj/item/projectile/electrode(src)
|
|
power_supply.use(charge_cost)
|
|
return 1
|
|
|
|
attack_self(mob/living/user as mob)
|
|
return
|
|
|
|
New()
|
|
power_supply = new /obj/item/weapon/cell/crap(src)
|
|
power_supply.give(power_supply.maxcharge)
|
|
|
|
cyborg
|
|
load_into_chamber()
|
|
if(in_chamber)
|
|
return 1
|
|
if(isrobot(src.loc))
|
|
var/mob/living/silicon/robot/R = src.loc
|
|
R.cell.use(20)
|
|
in_chamber = new /obj/item/projectile/electrode(src)
|
|
return 1
|
|
return 0
|
|
|
|
freeze
|
|
name = "freeze gun"
|
|
icon_state = "freezegun"
|
|
fire_sound = 'pulse3.ogg'
|
|
desc = "A gun that shoots supercooled hydrogen particles to drastically chill a target's body temperature."
|
|
var/temperature = T20C
|
|
var/current_temperature = T20C
|
|
charge_cost = 100
|
|
origin_tech = "combat=3;materials=4;powerstorage=3;magnets=2"
|
|
|
|
|
|
New()
|
|
power_supply = new /obj/item/weapon/cell/crap(src)
|
|
power_supply.give(power_supply.maxcharge)
|
|
spawn()
|
|
Life()
|
|
|
|
|
|
load_into_chamber()
|
|
if(in_chamber)
|
|
return 1
|
|
if(power_supply.charge < charge_cost)
|
|
return 0
|
|
in_chamber = new /obj/item/projectile/freeze(src)
|
|
power_supply.use(charge_cost)
|
|
return 1
|
|
|
|
attack_self(mob/living/user as mob)
|
|
user.machine = src
|
|
var/temp_text = ""
|
|
if(temperature > (T0C - 50))
|
|
temp_text = "<FONT color=black>[temperature] ([round(temperature-T0C)]°C) ([round(temperature*1.8-459.67)]°F)</FONT>"
|
|
else
|
|
temp_text = "<FONT color=blue>[temperature] ([round(temperature-T0C)]°C) ([round(temperature*1.8-459.67)]°F)</FONT>"
|
|
|
|
var/dat = {"<B>Freeze Gun Configuration: </B><BR>
|
|
Current output temperature: [temp_text]<BR>
|
|
Target output temperature: <A href='?src=\ref[src];temp=-100'>-</A> <A href='?src=\ref[src];temp=-10'>-</A> <A href='?src=\ref[src];temp=-1'>-</A> [current_temperature] <A href='?src=\ref[src];temp=1'>+</A> <A href='?src=\ref[src];temp=10'>+</A> <A href='?src=\ref[src];temp=100'>+</A><BR>
|
|
"}
|
|
|
|
user << browse(dat, "window=freezegun;size=450x300")
|
|
onclose(user, "freezegun")
|
|
|
|
Topic(href, href_list)
|
|
if (..())
|
|
return
|
|
usr.machine = src
|
|
src.add_fingerprint(usr)
|
|
if(href_list["temp"])
|
|
var/amount = text2num(href_list["temp"])
|
|
if(amount > 0)
|
|
src.current_temperature = min(T20C, src.current_temperature+amount)
|
|
else
|
|
src.current_temperature = max(0, src.current_temperature+amount)
|
|
if (istype(src.loc, /mob))
|
|
attack_self(src.loc)
|
|
src.add_fingerprint(usr)
|
|
return
|
|
|
|
proc/Life()
|
|
while(src)
|
|
sleep(10)
|
|
|
|
switch(temperature)
|
|
if(0 to 10) charge_cost = 500
|
|
if(11 to 50) charge_cost = 150
|
|
if(51 to 100) charge_cost = 100
|
|
if(101 to 150) charge_cost = 75
|
|
if(151 to 200) charge_cost = 50
|
|
if(201 to 300) charge_cost = 25
|
|
|
|
if(current_temperature != temperature)
|
|
var/difference = abs(current_temperature - temperature)
|
|
if(difference >= 10)
|
|
if(current_temperature < temperature)
|
|
temperature -= 10
|
|
else
|
|
temperature += 10
|
|
|
|
else
|
|
temperature = current_temperature
|
|
|
|
if (istype(src.loc, /mob))
|
|
attack_self(src.loc)
|
|
|
|
plasma
|
|
name = "plasma gun"
|
|
icon_state = "plasmagun"
|
|
fire_sound = 'pulse3.ogg'
|
|
desc = "A gun that fires super heated plasma at targets, thus increasing their overal body temparature and also harming them."
|
|
var/temperature = T20C
|
|
var/current_temperature = T20C
|
|
charge_cost = 100
|
|
origin_tech = "combat=3;materials=4;powerstorage=3;magnets=2"
|
|
|
|
|
|
New()
|
|
power_supply = new /obj/item/weapon/cell/crap(src)
|
|
power_supply.give(power_supply.maxcharge)
|
|
spawn()
|
|
Life()
|
|
|
|
|
|
load_into_chamber()
|
|
if(in_chamber)
|
|
return 1
|
|
if(power_supply.charge < charge_cost)
|
|
return 0
|
|
in_chamber = new /obj/item/projectile/plasma(src)
|
|
power_supply.use(charge_cost)
|
|
return 1
|
|
|
|
attack_self(mob/living/user as mob)
|
|
user.machine = src
|
|
var/temp_text = ""
|
|
if(temperature > (T0C + 50))
|
|
temp_text = "<FONT color=black>[temperature] ([round(temperature+T0C)]°C) ([round(temperature*1.8+459.67)]°F)</FONT>"
|
|
else
|
|
temp_text = "<FONT color=blue>[temperature] ([round(temperature+T0C)]°C) ([round(temperature*1.8+459.67)]°F)</FONT>"
|
|
|
|
var/dat = {"<B>Plasma Gun Configuration: </B><BR>
|
|
Current output temperature: [temp_text]<BR>
|
|
Target output temperature: <A href='?src=\ref[src];temp=-100'>-</A> <A href='?src=\ref[src];temp=-10'>-</A> <A href='?src=\ref[src];temp=-1'>-</A> [current_temperature] <A href='?src=\ref[src];temp=1'>+</A> <A href='?src=\ref[src];temp=10'>+</A> <A href='?src=\ref[src];temp=100'>+</A><BR>
|
|
"}
|
|
|
|
user << browse(dat, "window=plasmagun;size=450x300")
|
|
onclose(user, "plasmagun")
|
|
|
|
Topic(href, href_list)
|
|
if (..())
|
|
return
|
|
usr.machine = src
|
|
src.add_fingerprint(usr)
|
|
if(href_list["temp"])
|
|
var/amount = text2num(href_list["temp"])
|
|
if(amount > 0)
|
|
src.current_temperature = min(T20C, src.current_temperature+amount)
|
|
else
|
|
src.current_temperature = max(800, src.current_temperature+amount)
|
|
if (istype(src.loc, /mob))
|
|
attack_self(src.loc)
|
|
src.add_fingerprint(usr)
|
|
return
|
|
|
|
proc/Life()
|
|
while(src)
|
|
sleep(10)
|
|
|
|
switch(temperature)
|
|
if(601 to 800) charge_cost = 500
|
|
if(401 to 600) charge_cost = 150
|
|
if(201 to 400) charge_cost = 100
|
|
if(101 to 200) charge_cost = 75
|
|
if(51 to 100) charge_cost = 50
|
|
if(0 to 50) charge_cost = 25
|
|
|
|
if(current_temperature != temperature)
|
|
var/difference = abs(current_temperature + temperature)
|
|
if(difference >= 10)
|
|
if(current_temperature < temperature)
|
|
temperature -= 10
|
|
else
|
|
temperature += 10
|
|
|
|
else
|
|
temperature = current_temperature
|
|
|
|
if (istype(src.loc, /mob))
|
|
attack_self(src.loc)
|
|
|
|
|
|
|
|
|
|
crossbow
|
|
name = "mini energy-crossbow"
|
|
desc = "A weapon favored by many of the syndicates stealth specialists."
|
|
icon_state = "crossbow"
|
|
w_class = 2.0
|
|
item_state = "crossbow"
|
|
force = 4.0
|
|
throw_speed = 2
|
|
throw_range = 10
|
|
m_amt = 2000
|
|
origin_tech = "combat=2;magnets=2;syndicate=5"
|
|
silenced = 1
|
|
fire_sound = 'Genhit.ogg'
|
|
|
|
New()
|
|
power_supply = new /obj/item/weapon/cell/crap(src)
|
|
power_supply.give(power_supply.maxcharge)
|
|
charge()
|
|
|
|
proc/charge()
|
|
if(power_supply)
|
|
if(power_supply.charge < power_supply.maxcharge) power_supply.give(100)
|
|
spawn(50) charge()
|
|
|
|
update_icon()
|
|
return
|
|
|
|
attack_self(mob/living/user as mob)
|
|
return
|
|
|
|
load_into_chamber()
|
|
if(in_chamber)
|
|
return 1
|
|
if(power_supply.charge <= charge_cost)
|
|
return 0
|
|
in_chamber = new /obj/item/projectile/bolt(src)
|
|
power_supply.use(charge_cost)
|
|
return 1
|
|
|
|
cyborg
|
|
load_into_chamber()
|
|
if(in_chamber)
|
|
return 1
|
|
if(isrobot(src.loc))
|
|
var/mob/living/silicon/robot/R = src.loc
|
|
R.cell.use(20)
|
|
in_chamber = new /obj/item/projectile/electrode(src)
|
|
return 1
|
|
return 0
|
|
|
|
proc
|
|
load_into_chamber()
|
|
in_chamber = new /obj/item/projectile/weakbullet(src)
|
|
return 1
|
|
|
|
badmin_ammo() //CREEEEEED!!!!!!!!!
|
|
switch(badmin)
|
|
if(1)
|
|
in_chamber = new /obj/item/projectile/electrode(src)
|
|
if(2)
|
|
in_chamber = new /obj/item/projectile/weakbullet(src)
|
|
if(3)
|
|
in_chamber = new /obj/item/projectile(src)
|
|
if(4)
|
|
in_chamber = new /obj/item/projectile/beam(src)
|
|
if(5)
|
|
in_chamber = new /obj/item/projectile/beam/pulse(src)
|
|
else
|
|
return 0
|
|
if(!istype(src, /obj/item/weapon/gun/energy))
|
|
var/obj/item/ammo_casing/AC = new(get_turf(src))
|
|
AC.name = "unidentifiable bullet casing"
|
|
AC.desc = "This casing has the Central Command Insignia etched into the side."
|
|
return 1
|
|
|
|
special_check(var/mob/M) //Placeholder for any special checks, like detective's revolver.
|
|
return 1
|
|
|
|
emp_act(severity)
|
|
for(var/obj/O in contents)
|
|
O.emp_act(severity)
|
|
|
|
afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag)
|
|
if (flag)
|
|
return //we're placing gun on a table or in backpack --rastaf0
|
|
if(istype(target, /obj/machinery/recharger) && istype(src, /obj/item/weapon/gun/energy))
|
|
return
|
|
if(istype(user, /mob/living))
|
|
var/mob/living/M = user
|
|
if ((M.mutations & CLOWN) && prob(50))
|
|
M << "\red The [src.name] blows up in your face."
|
|
M.take_organ_damage(0,20)
|
|
M.drop_item()
|
|
del(src)
|
|
return
|
|
if ( ! (istype(usr, /mob/living/carbon/human) || \
|
|
istype(usr, /mob/living/silicon/robot) || \
|
|
istype(usr, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey") )
|
|
usr << "\red You don't have the dexterity to do this!"
|
|
return
|
|
|
|
add_fingerprint(user)
|
|
|
|
var/turf/curloc = user.loc
|
|
var/turf/targloc = get_turf(target)
|
|
if (!istype(targloc) || !istype(curloc))
|
|
return
|
|
|
|
if(badmin)
|
|
badmin_ammo()
|
|
else if(!special_check(user))
|
|
return
|
|
else if(!load_into_chamber())
|
|
user << "\red *click* *click*";
|
|
return
|
|
|
|
update_icon()
|
|
|
|
playsound(user, fire_sound, 50, 1)
|
|
|
|
if(!in_chamber)
|
|
return
|
|
|
|
in_chamber.firer = user
|
|
in_chamber.def_zone = user.get_organ_target()
|
|
|
|
if(targloc == curloc)
|
|
user.bullet_act(in_chamber.damage_type)
|
|
del(in_chamber)
|
|
else
|
|
if(istype(src, /obj/item/weapon/gun/energy/freeze))
|
|
var/obj/item/projectile/freeze/F = in_chamber
|
|
var/obj/item/weapon/gun/energy/freeze/Fgun = src
|
|
|
|
F.temperature = Fgun.temperature
|
|
|
|
in_chamber.original = targloc
|
|
in_chamber.loc = get_turf(user)
|
|
user.next_move = world.time + 4
|
|
in_chamber.silenced = silenced
|
|
in_chamber.current = curloc
|
|
in_chamber.yo = targloc.y - curloc.y
|
|
in_chamber.xo = targloc.x - curloc.x
|
|
spawn()
|
|
in_chamber.process()
|
|
sleep(1)
|
|
in_chamber = null
|