mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-14 12:13:06 +00:00
Merge branch 'dev' into ofChemistryAndStuff
Conflicts: code/game/objects/effects/chem/chemsmoke.dm code/modules/customitems/item_defines.dm code/modules/projectiles/guns/launcher/syringe_gun.dm code/modules/reagents/Chemistry-Holder.dm code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm code/modules/reagents/reagent_containers/food/drinks.dm code/modules/reagents/reagent_containers/pill.dm maps/exodus-1.dmm
This commit is contained in:
@@ -66,7 +66,7 @@
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
item_state = "syringe_kit"
|
||||
matter = list("metal" = 500)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 500)
|
||||
throwforce = 5
|
||||
w_class = 2
|
||||
throw_speed = 4
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
icon_state = "T38"
|
||||
caliber = "357"
|
||||
ammo_type = /obj/item/ammo_casing/a357
|
||||
matter = list("metal" = 1260)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1260)
|
||||
max_ammo = 7
|
||||
multiple_sprites = 1
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
name = "speed loader (.38)"
|
||||
icon_state = "38"
|
||||
caliber = "38"
|
||||
matter = list("metal" = 360)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 360)
|
||||
ammo_type = /obj/item/ammo_casing/c38
|
||||
max_ammo = 6
|
||||
multiple_sprites = 1
|
||||
@@ -28,7 +28,7 @@
|
||||
icon_state = "45"
|
||||
mag_type = MAGAZINE
|
||||
ammo_type = /obj/item/ammo_casing/c45
|
||||
matter = list("metal" = 525) //metal costs are very roughly based around 1 .45 casing = 75 metal
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 525) //metal costs are very roughly based around 1 .45 casing = 75 metal
|
||||
caliber = ".45"
|
||||
max_ammo = 7
|
||||
multiple_sprites = 1
|
||||
@@ -53,7 +53,7 @@
|
||||
icon_state = "9x19p"
|
||||
origin_tech = "combat=2"
|
||||
mag_type = MAGAZINE
|
||||
matter = list("metal" = 600)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 600)
|
||||
caliber = "9mm"
|
||||
ammo_type = /obj/item/ammo_casing/c9mm
|
||||
max_ammo = 10
|
||||
@@ -69,7 +69,7 @@
|
||||
name = "ammunition Box (9mm)"
|
||||
icon_state = "9mm"
|
||||
origin_tech = "combat=2"
|
||||
matter = list("metal" = 1800)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1800)
|
||||
caliber = "9mm"
|
||||
ammo_type = /obj/item/ammo_casing/c9mm
|
||||
max_ammo = 30
|
||||
@@ -82,7 +82,7 @@
|
||||
icon_state = "9mmt"
|
||||
mag_type = MAGAZINE
|
||||
ammo_type = /obj/item/ammo_casing/c9mm
|
||||
matter = list("metal" = 1200)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1200)
|
||||
caliber = "9mm"
|
||||
max_ammo = 20
|
||||
multiple_sprites = 1
|
||||
@@ -103,7 +103,7 @@
|
||||
icon_state = "9mm"
|
||||
origin_tech = "combat=2"
|
||||
caliber = ".45"
|
||||
matter = list("metal" = 2250)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 2250)
|
||||
ammo_type = /obj/item/ammo_casing/c45
|
||||
max_ammo = 30
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
origin_tech = "combat=2"
|
||||
mag_type = MAGAZINE
|
||||
caliber = "12mm"
|
||||
matter = list("metal" = 1500)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1500)
|
||||
ammo_type = "/obj/item/ammo_casing/a12mm"
|
||||
max_ammo = 20
|
||||
multiple_sprites = 1
|
||||
@@ -130,7 +130,7 @@
|
||||
origin_tech = "combat=2"
|
||||
mag_type = MAGAZINE
|
||||
caliber = "a556"
|
||||
matter = list("metal" = 1800)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1800)
|
||||
ammo_type = /obj/item/ammo_casing/a556
|
||||
max_ammo = 10
|
||||
multiple_sprites = 1
|
||||
@@ -148,7 +148,7 @@
|
||||
origin_tech = "combat=2"
|
||||
mag_type = MAGAZINE
|
||||
caliber = ".50"
|
||||
matter = list("metal" = 1260)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1260)
|
||||
ammo_type = /obj/item/ammo_casing/a50
|
||||
max_ammo = 7
|
||||
multiple_sprites = 1
|
||||
@@ -174,7 +174,7 @@
|
||||
origin_tech = "combat=2"
|
||||
mag_type = MAGAZINE
|
||||
caliber = "a762"
|
||||
matter = list("metal" = 4500)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 4500)
|
||||
ammo_type = /obj/item/ammo_casing/a762
|
||||
max_ammo = 50
|
||||
multiple_sprites = 1
|
||||
@@ -187,7 +187,7 @@
|
||||
icon_state = "c762"
|
||||
mag_type = MAGAZINE
|
||||
caliber = "a762"
|
||||
matter = list("metal" = 1800)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1800)
|
||||
ammo_type = /obj/item/ammo_casing/a762
|
||||
max_ammo = 20
|
||||
multiple_sprites = 1
|
||||
|
||||
@@ -76,21 +76,21 @@
|
||||
icon_state = "slshell"
|
||||
caliber = "shotgun"
|
||||
projectile_type = /obj/item/projectile/bullet/shotgun
|
||||
matter = list("metal" = 360)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 360)
|
||||
|
||||
/obj/item/ammo_casing/shotgun/pellet
|
||||
name = "shotgun shell"
|
||||
desc = "A 12 gauge shell."
|
||||
icon_state = "gshell"
|
||||
projectile_type = /obj/item/projectile/bullet/pellet/shotgun
|
||||
matter = list("metal" = 360)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 360)
|
||||
|
||||
/obj/item/ammo_casing/shotgun/blank
|
||||
name = "shotgun shell"
|
||||
desc = "A blank shell."
|
||||
icon_state = "blshell"
|
||||
projectile_type = /obj/item/projectile/bullet/blank
|
||||
matter = list("metal" = 90)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 90)
|
||||
|
||||
/obj/item/ammo_casing/shotgun/practice
|
||||
name = "shotgun shell"
|
||||
@@ -104,7 +104,7 @@
|
||||
desc = "A beanbag shell."
|
||||
icon_state = "bshell"
|
||||
projectile_type = /obj/item/projectile/bullet/shotgun/beanbag
|
||||
matter = list("metal" = 180)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 180)
|
||||
|
||||
//Can stun in one hit if aimed at the head, but
|
||||
//is blocked by clothing that stops tasers and is vulnerable to EMP
|
||||
@@ -114,7 +114,7 @@
|
||||
icon_state = "stunshell"
|
||||
spent_icon = "stunshell-spent"
|
||||
projectile_type = /obj/item/projectile/energy/electrode/stunshot
|
||||
matter = list("metal" = 360, "glass" = 720)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 360, "glass" = 720)
|
||||
|
||||
/obj/item/ammo_casing/shotgun/stunshell/emp_act(severity)
|
||||
if(prob(100/severity)) BB = null
|
||||
@@ -126,7 +126,7 @@
|
||||
desc = "A chemical shell used to signal distress or provide illumination."
|
||||
icon_state = "fshell"
|
||||
projectile_type = /obj/item/projectile/energy/flash/flare
|
||||
matter = list("metal" = 90, "glass" = 90)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 90, "glass" = 90)
|
||||
|
||||
/obj/item/ammo_casing/a762
|
||||
desc = "A 7.62mm bullet casing."
|
||||
@@ -140,7 +140,7 @@
|
||||
spent_icon = "lcasing-spent"
|
||||
caliber = "14.5mm"
|
||||
projectile_type = /obj/item/projectile/bullet/rifle/a145
|
||||
matter = list("metal" = 1250)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1250)
|
||||
|
||||
/obj/item/ammo_casing/a556
|
||||
desc = "A 5.56mm bullet casing."
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
item_state = "gun"
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT|SLOT_HOLSTER
|
||||
matter = list("metal" = 2000)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 2000)
|
||||
w_class = 3
|
||||
throwforce = 5
|
||||
throw_speed = 4
|
||||
@@ -57,6 +57,7 @@
|
||||
var/fire_sound_text = "gunshot"
|
||||
var/recoil = 0 //screen shake
|
||||
var/silenced = 0
|
||||
var/muzzle_flash = 3
|
||||
var/accuracy = 0 //accuracy is measured in tiles. +1 accuracy means that everything is effectively one tile closer for the purpose of miss chance, -1 means the opposite. launchers are not supported, at the moment.
|
||||
var/scoped_accuracy = null
|
||||
|
||||
@@ -157,7 +158,7 @@
|
||||
|
||||
if(world.time < next_fire_time)
|
||||
if (world.time % 3) //to prevent spam
|
||||
user << "<span class='warning'>[src] is not ready to fire again!"
|
||||
user << "<span class='warning'>[src] is not ready to fire again!</span>"
|
||||
return
|
||||
|
||||
//unpack firemode data
|
||||
@@ -245,6 +246,12 @@
|
||||
"You hear a [fire_sound_text]!"
|
||||
)
|
||||
|
||||
if(muzzle_flash)
|
||||
var/turf/T_user = get_turf(user)
|
||||
var/turf/T_target = get_turf(target)
|
||||
var/obj/effect/effect/smoke/illumination/I = new /obj/effect/effect/smoke/illumination(get_step(T_user, get_dir(T_user,T_target)), brightness=muzzle_flash, lifetime=8)
|
||||
I.alpha = 0
|
||||
|
||||
if(recoil)
|
||||
spawn()
|
||||
shake_camera(user, recoil+1, recoil)
|
||||
|
||||
@@ -13,12 +13,13 @@
|
||||
firemode_type = /datum/firemode/energy
|
||||
|
||||
var/obj/item/weapon/cell/power_supply //What type of power cell this uses
|
||||
var/charge_cost = 100 //How much energy is needed to fire.
|
||||
var/cell_type = /obj/item/weapon/cell
|
||||
var/charge_cost = 200 //How much energy is needed to fire.
|
||||
var/max_shots = 10 //Determines the capacity of the weapon's power cell. Specifying a cell_type overrides this value.
|
||||
var/cell_type = null
|
||||
var/projectile_type = /obj/item/projectile/beam/practice
|
||||
var/modifystate
|
||||
var/charge_meter = 1 //if set, the icon state will be chosen based on the current charge
|
||||
|
||||
|
||||
//self-recharging
|
||||
var/self_recharge = 0 //if set, the weapon will recharge itself
|
||||
var/use_external_power = 0 //if set, the weapon will look for an external power source to draw from, otherwise it recharges magically
|
||||
@@ -33,7 +34,7 @@
|
||||
modifystate = isnull(current_mode.modifystate)? initial(modifystate) : current_mode.modifystate
|
||||
charge_cost = isnull(current_mode.charge_cost)? initial(charge_cost) : current_mode.charge_cost
|
||||
fire_sound = isnull(current_mode.fire_sound)? initial(fire_sound) : current_mode.fire_sound
|
||||
|
||||
|
||||
update_icon()
|
||||
update_held_icon()
|
||||
|
||||
@@ -45,7 +46,8 @@
|
||||
..()
|
||||
if(cell_type)
|
||||
power_supply = new cell_type(src)
|
||||
power_supply.give(power_supply.maxcharge)
|
||||
else
|
||||
power_supply = new /obj/item/weapon/cell/device/variable(src, max_shots*charge_cost)
|
||||
if(self_recharge)
|
||||
processing_objects.Add(src)
|
||||
update_icon()
|
||||
@@ -60,15 +62,15 @@
|
||||
charge_tick++
|
||||
if(charge_tick < recharge_time) return 0
|
||||
charge_tick = 0
|
||||
|
||||
|
||||
if(!power_supply || power_supply.charge >= power_supply.maxcharge)
|
||||
return 0 // check if we actually need to recharge
|
||||
|
||||
|
||||
if(use_external_power)
|
||||
var/obj/item/weapon/cell/external = get_external_power_supply()
|
||||
if(!external || !external.use(charge_cost)) //Take power from the borg...
|
||||
return 0
|
||||
|
||||
|
||||
power_supply.give(charge_cost) //... to recharge the shot
|
||||
update_icon()
|
||||
return 1
|
||||
@@ -93,16 +95,22 @@
|
||||
return suit.cell
|
||||
return null
|
||||
|
||||
/obj/item/weapon/gun/energy/examine(mob/user)
|
||||
..(user)
|
||||
var/shots_remaining = round(power_supply.charge / charge_cost)
|
||||
user << "Has [shots_remaining] shot\s remaining."
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/energy/update_icon()
|
||||
if(charge_meter)
|
||||
var/ratio = power_supply.charge / power_supply.maxcharge
|
||||
|
||||
|
||||
//make sure that rounding down will not give us the empty state even if we have charge for a shot left.
|
||||
if(power_supply.charge < charge_cost)
|
||||
ratio = 0
|
||||
else
|
||||
ratio = max(round(ratio, 0.25) * 100, 25)
|
||||
|
||||
|
||||
if(modifystate)
|
||||
icon_state = "[modifystate][ratio]"
|
||||
else
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
slot_flags = SLOT_BELT|SLOT_BACK
|
||||
w_class = 3
|
||||
force = 10
|
||||
matter = list("metal" = 2000)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 2000)
|
||||
origin_tech = "combat=3;magnets=2"
|
||||
projectile_type = /obj/item/projectile/beam
|
||||
fire_delay = 1 //rapid fire
|
||||
@@ -43,7 +43,7 @@ obj/item/weapon/gun/energy/retro
|
||||
w_class = 3
|
||||
projectile_type = /obj/item/projectile/beam
|
||||
origin_tech = null
|
||||
charge_cost = 200 //to compensate a bit for self-recharging
|
||||
max_shots = 5 //to compensate a bit for self-recharging
|
||||
self_recharge = 1
|
||||
|
||||
/obj/item/weapon/gun/energy/lasercannon
|
||||
@@ -55,7 +55,8 @@ obj/item/weapon/gun/energy/retro
|
||||
origin_tech = "combat=4;materials=3;powerstorage=3"
|
||||
slot_flags = SLOT_BELT|SLOT_BACK
|
||||
projectile_type = /obj/item/projectile/beam/heavylaser
|
||||
charge_cost = 250
|
||||
charge_cost = 400
|
||||
max_shots = 5
|
||||
fire_delay = 20
|
||||
|
||||
/obj/item/weapon/gun/energy/lasercannon/mounted
|
||||
@@ -72,7 +73,8 @@ obj/item/weapon/gun/energy/retro
|
||||
fire_sound = 'sound/weapons/laser3.ogg'
|
||||
origin_tech = "combat=5;materials=3;magnets=2;syndicate=2"
|
||||
projectile_type = /obj/item/projectile/beam/xray
|
||||
charge_cost = 50
|
||||
charge_cost = 100
|
||||
max_shots = 20
|
||||
fire_delay = 1
|
||||
|
||||
/obj/item/weapon/gun/energy/sniperrifle
|
||||
@@ -84,7 +86,8 @@ obj/item/weapon/gun/energy/retro
|
||||
origin_tech = "combat=6;materials=5;powerstorage=4"
|
||||
projectile_type = /obj/item/projectile/beam/sniper
|
||||
slot_flags = SLOT_BACK
|
||||
charge_cost = 250
|
||||
charge_cost = 400
|
||||
max_shots = 4
|
||||
fire_delay = 35
|
||||
force = 10
|
||||
w_class = 4
|
||||
@@ -106,7 +109,7 @@ obj/item/weapon/gun/energy/retro
|
||||
desc = "Standard issue weapon of the Imperial Guard"
|
||||
origin_tech = "combat=1;magnets=2"
|
||||
self_recharge = 1
|
||||
matter = list("metal" = 2000)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 2000)
|
||||
fire_sound = 'sound/weapons/Laser.ogg'
|
||||
projectile_type = /obj/item/projectile/beam/lastertag/blue
|
||||
var/required_vest
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
icon_state = "energystun100"
|
||||
item_state = null //so the human update icon uses the icon_state instead.
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
max_shots = 10
|
||||
|
||||
charge_cost = 100 //How much energy is needed to fire.
|
||||
projectile_type = /obj/item/projectile/beam/stun
|
||||
origin_tech = "combat=3;magnets=2"
|
||||
modifystate = "energystun"
|
||||
|
||||
@@ -6,14 +6,14 @@
|
||||
slot_flags = SLOT_BELT|SLOT_BACK
|
||||
force = 10
|
||||
fire_sound='sound/weapons/Laser.ogg'
|
||||
charge_cost = 50
|
||||
projectile_type = /obj/item/projectile/beam
|
||||
sel_mode = 2
|
||||
max_shots = 10
|
||||
|
||||
firemodes = list(
|
||||
list(name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_sound='sound/weapons/Taser.ogg'),
|
||||
list(name="lethal", projectile_type=/obj/item/projectile/beam, fire_sound='sound/weapons/Laser.ogg'),
|
||||
list(name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_sound='sound/weapons/pulse.ogg', fire_delay=25, charge_cost=100),
|
||||
list(name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_sound='sound/weapons/pulse.ogg', fire_delay=25, charge_cost=400),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/energy/pulse_rifle/mounted
|
||||
@@ -27,6 +27,7 @@
|
||||
fire_delay = 25
|
||||
fire_sound='sound/weapons/pulse.ogg'
|
||||
projectile_type=/obj/item/projectile/beam/pulse
|
||||
charge_cost=400
|
||||
|
||||
/obj/item/weapon/gun/energy/pulse_rifle/destroyer/attack_self(mob/living/user as mob)
|
||||
user << "<span class='warning'>[src.name] has three settings, and they are all DESTROY.</span>"
|
||||
@@ -37,4 +38,4 @@
|
||||
desc = "It's not the size of the gun, it's the size of the hole it puts through people."
|
||||
slot_flags = SLOT_BELT|SLOT_HOLSTER
|
||||
icon_state = "m1911-p"
|
||||
cell_type = /obj/item/weapon/cell/crap
|
||||
max_shots = 5
|
||||
|
||||
@@ -9,7 +9,8 @@
|
||||
force = 10
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BACK
|
||||
charge_cost = 100
|
||||
charge_cost = 300
|
||||
max_shots = 10
|
||||
projectile_type = /obj/item/projectile/ion
|
||||
|
||||
/obj/item/weapon/gun/energy/ionrifle/emp_act(severity)
|
||||
@@ -29,7 +30,7 @@
|
||||
item_state = "decloner"
|
||||
fire_sound = 'sound/weapons/pulse3.ogg'
|
||||
origin_tech = "combat=5;materials=4;powerstorage=3"
|
||||
charge_cost = 100
|
||||
max_shots = 10
|
||||
projectile_type = /obj/item/projectile/energy/declone
|
||||
|
||||
/obj/item/weapon/gun/energy/floragun
|
||||
@@ -39,6 +40,7 @@
|
||||
item_state = "floramut"
|
||||
fire_sound = 'sound/effects/stealthoff.ogg'
|
||||
charge_cost = 100
|
||||
max_shots = 10
|
||||
projectile_type = /obj/item/projectile/energy/floramut
|
||||
origin_tech = "materials=2;biotech=3;powerstorage=3"
|
||||
modifystate = "floramut"
|
||||
@@ -65,7 +67,6 @@
|
||||
slot_flags = SLOT_BELT|SLOT_BACK
|
||||
w_class = 4
|
||||
projectile_type = /obj/item/projectile/meteor
|
||||
charge_cost = 100
|
||||
cell_type = /obj/item/weapon/cell/potato
|
||||
self_recharge = 1
|
||||
recharge_time = 5 //Time it takes for shots to recharge (in ticks)
|
||||
@@ -110,7 +111,7 @@
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BACK
|
||||
w_class = 4.0
|
||||
charge_cost = 200
|
||||
max_shots = 5
|
||||
projectile_type = /obj/item/projectile/change
|
||||
origin_tech = null
|
||||
self_recharge = 1
|
||||
@@ -127,7 +128,7 @@
|
||||
name = "staff of animation"
|
||||
desc = "An artefact that spits bolts of life-force which causes objects which are hit by it to animate and come to life! This magic doesn't affect machines."
|
||||
projectile_type = /obj/item/projectile/animate
|
||||
charge_cost = 100
|
||||
max_shots = 10
|
||||
|
||||
obj/item/weapon/gun/energy/staff/focus
|
||||
name = "mental focus"
|
||||
@@ -140,11 +141,11 @@ obj/item/weapon/gun/energy/staff/focus
|
||||
/*
|
||||
attack_self(mob/living/user as mob)
|
||||
if(projectile_type == "/obj/item/projectile/forcebolt")
|
||||
charge_cost = 200
|
||||
charge_cost = 400
|
||||
user << "<span class='warning'>The [src.name] will now strike a small area.</span>"
|
||||
projectile_type = "/obj/item/projectile/forcebolt/strong"
|
||||
else
|
||||
charge_cost = 100
|
||||
charge_cost = 200
|
||||
user << "<span class='warning'>The [src.name] will now strike only a single person.</span>"
|
||||
projectile_type = "/obj/item/projectile/forcebolt"
|
||||
*/
|
||||
|
||||
@@ -4,9 +4,8 @@
|
||||
icon_state = "taser"
|
||||
item_state = null //so the human update icon uses the icon_state instead.
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
charge_cost = 100
|
||||
max_shots = 5
|
||||
projectile_type = /obj/item/projectile/beam/stun
|
||||
cell_type = /obj/item/weapon/cell/crap
|
||||
|
||||
/obj/item/weapon/gun/energy/taser/mounted
|
||||
name = "mounted taser gun"
|
||||
@@ -15,7 +14,7 @@
|
||||
|
||||
/obj/item/weapon/gun/energy/taser/mounted/cyborg
|
||||
name = "taser gun"
|
||||
cell_type = /obj/item/weapon/cell/secborg
|
||||
max_shots = 6
|
||||
recharge_time = 10 //Time it takes for shots to recharge (in ticks)
|
||||
|
||||
|
||||
@@ -26,9 +25,8 @@
|
||||
item_state = "stunrevolver"
|
||||
fire_sound = 'sound/weapons/Gunshot.ogg'
|
||||
origin_tech = "combat=3;materials=3;powerstorage=2"
|
||||
charge_cost = 125
|
||||
projectile_type = /obj/item/projectile/energy/electrode/stunshot
|
||||
cell_type = /obj/item/weapon/cell
|
||||
max_shots = 8
|
||||
|
||||
|
||||
/obj/item/weapon/gun/energy/crossbow
|
||||
@@ -37,13 +35,13 @@
|
||||
icon_state = "crossbow"
|
||||
w_class = 2.0
|
||||
item_state = "crossbow"
|
||||
matter = list("metal" = 2000)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 2000)
|
||||
origin_tech = "combat=2;magnets=2;syndicate=5"
|
||||
slot_flags = SLOT_BELT
|
||||
silenced = 1
|
||||
fire_sound = 'sound/weapons/Genhit.ogg'
|
||||
projectile_type = /obj/item/projectile/energy/bolt
|
||||
cell_type = /obj/item/weapon/cell/crap
|
||||
max_shots = 5
|
||||
self_recharge = 1
|
||||
charge_meter = 0
|
||||
|
||||
@@ -56,5 +54,5 @@
|
||||
desc = "A weapon favored by mercenary infiltration teams."
|
||||
w_class = 4
|
||||
force = 10
|
||||
matter = list("metal" = 200000)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 200000)
|
||||
projectile_type = /obj/item/projectile/energy/bolt/large
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
var/release_force = 0
|
||||
var/throw_distance = 10
|
||||
muzzle_flash = 0
|
||||
fire_sound_text = "a launcher firing"
|
||||
|
||||
//This normally uses a proc on projectiles and our ammo is not strictly speaking a projectile.
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
var/obj/item/weapon/grenade/chambered
|
||||
var/list/grenades = new/list()
|
||||
var/max_grenades = 5 //holds this + one in the chamber
|
||||
matter = list("metal" = 2000)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 2000)
|
||||
|
||||
//revolves the magazine, allowing players to choose between multiple grenade types
|
||||
/obj/item/weapon/gun/launcher/grenade/proc/pump(mob/M as mob)
|
||||
@@ -80,7 +80,7 @@
|
||||
chambered.det_time = 10
|
||||
chambered.activate(null)
|
||||
return chambered
|
||||
|
||||
|
||||
/obj/item/weapon/gun/launcher/grenade/handle_post_fire(mob/user)
|
||||
message_admins("[key_name_admin(user)] fired a grenade ([chambered.name]) from a grenade launcher ([src.name]).")
|
||||
log_game("[key_name_admin(user)] used a grenade ([chambered.name]).")
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon = 'icons/obj/ammo.dmi'
|
||||
icon_state = "syringe-cartridge"
|
||||
var/icon_flight = "syringe-cartridge-flight" //so it doesn't look so weird when shot
|
||||
matter = list("metal" = 125, "glass" = 375)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 125, "glass" = 375)
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 3
|
||||
@@ -53,10 +53,9 @@
|
||||
if(L.can_inject())
|
||||
if(syringe.reagents)
|
||||
syringe.reagents.trans_to_mob(L, 15, CHEM_BLOOD)
|
||||
|
||||
syringe.break_syringe(iscarbon(hit_atom)? hit_atom : null)
|
||||
syringe.update_icon()
|
||||
|
||||
|
||||
icon_state = initial(icon_state) //reset icon state
|
||||
update_icon()
|
||||
|
||||
@@ -67,15 +66,15 @@
|
||||
item_state = "syringegun"
|
||||
w_class = 3
|
||||
force = 7
|
||||
matter = list("metal" = 2000)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 2000)
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
|
||||
fire_sound = 'sound/weapons/empty.ogg'
|
||||
fire_sound_text = "a metallic thunk"
|
||||
recoil = 0
|
||||
release_force = 10
|
||||
throw_distance = 10
|
||||
|
||||
|
||||
var/list/darts = list()
|
||||
var/max_darts = 1
|
||||
var/obj/item/weapon/syringe_cartridge/next
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
icon_state = "revolver"
|
||||
origin_tech = "combat=2;materials=2"
|
||||
w_class = 3
|
||||
matter = list("metal" = 1000)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1000)
|
||||
recoil = 1
|
||||
|
||||
|
||||
var/caliber = "357" //determines which casings will fit
|
||||
var/handle_casings = EJECT_CASINGS //determines how spent casings should be handled
|
||||
var/load_method = SINGLE_CASING|SPEEDLOADER //1 = Single shells, 2 = box or quick loader, 3 = magazine
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
//For SINGLE_CASING or SPEEDLOADER guns
|
||||
var/max_shells = 0 //the number of casings that will fit inside
|
||||
var/ammo_type = null //the type of ammo that the gun comes preloaded with
|
||||
var/ammo_type = null //the type of ammo that the gun comes preloaded with
|
||||
var/list/loaded = list() //stored ammo
|
||||
|
||||
//For MAGAZINE guns
|
||||
@@ -50,7 +50,7 @@
|
||||
chambered = ammo_magazine.stored_ammo[1]
|
||||
if(handle_casings != HOLD_CASINGS)
|
||||
ammo_magazine.stored_ammo -= chambered
|
||||
|
||||
|
||||
if (chambered)
|
||||
return chambered.BB
|
||||
return null
|
||||
@@ -186,7 +186,7 @@
|
||||
)
|
||||
if(auto_eject_sound)
|
||||
playsound(user, auto_eject_sound, 40, 1)
|
||||
ammo_magazine.update_icon()
|
||||
ammo_magazine.update_icon()
|
||||
ammo_magazine = null
|
||||
update_icon() //make sure to do this after unsetting ammo_magazine
|
||||
|
||||
@@ -213,8 +213,8 @@
|
||||
set name = "Unload Ammo"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
|
||||
if(usr.stat || usr.restrained()) return
|
||||
|
||||
|
||||
unload_ammo(usr)
|
||||
*/
|
||||
*/
|
||||
|
||||
@@ -41,3 +41,24 @@
|
||||
name = input
|
||||
M << "You name the gun [input]. Say hello to your new friend."
|
||||
return 1
|
||||
|
||||
// Blade Runner pistol.
|
||||
/obj/item/weapon/gun/projectile/revolver/deckard
|
||||
name = "Deckard .44"
|
||||
desc = "A custom-built revolver, based off the semi-popular Detective Special model."
|
||||
icon_state = "deckard-empty"
|
||||
ammo_type = /obj/item/ammo_magazine/c38/rubber
|
||||
|
||||
/obj/item/weapon/gun/projectile/revolver/deckard/update_icon()
|
||||
..()
|
||||
if(loaded.len)
|
||||
icon_state = "deckard-loaded"
|
||||
else
|
||||
icon_state = "deckard-empty"
|
||||
|
||||
/obj/item/weapon/gun/projectile/revolver/deckard/load_ammo(var/obj/item/A, mob/user)
|
||||
if(istype(A, /obj/item/ammo_magazine))
|
||||
flick("deckard-reload",src)
|
||||
..()
|
||||
|
||||
|
||||
|
||||
@@ -180,16 +180,17 @@
|
||||
visible_message("<span class='danger'>\The [target_mob] is hit by \the [src] in the [parse_zone(def_zone)]!</span>")//X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter
|
||||
|
||||
//admin logs
|
||||
if(istype(firer, /mob))
|
||||
target_mob.attack_log += "\[[time_stamp()]\] <b>[firer]/[firer.ckey]</b> shot <b>[target_mob]/[target_mob.ckey]</b> with a <b>[src.type]</b>"
|
||||
firer.attack_log += "\[[time_stamp()]\] <b>[firer]/[firer.ckey]</b> shot <b>[target_mob]/[target_mob.ckey]</b> with a <b>[src.type]</b>"
|
||||
msg_admin_attack("[firer] ([firer.ckey]) shot [target_mob] ([target_mob.ckey]) with a [src] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[firer.x];Y=[firer.y];Z=[firer.z]'>JMP</a>)") //BS12 EDIT ALG
|
||||
else if(firer)
|
||||
target_mob.attack_log += "\[[time_stamp()]\] <b>UNKNOWN SUBJECT (No longer exists)</b> shot <b>[target_mob]/[target_mob.ckey]</b> with a <b>[src]</b>"
|
||||
msg_admin_attack("UNKNOWN shot [target_mob] ([target_mob.ckey]) with a [src] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[firer.x];Y=[firer.y];Z=[firer.z]'>JMP</a>)") //BS12 EDIT ALG
|
||||
else
|
||||
target_mob.attack_log += "\[[time_stamp()]\] <b>UNKNOWN SUBJECT (No longer exists)</b> shot <b>[target_mob]/[target_mob.ckey]</b> with a <b>[src]</b>"
|
||||
msg_admin_attack("UNKNOWN shot [target_mob] ([target_mob.ckey]) with a [src] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[target_mob.x];Y=[target_mob.y];Z=[target_mob.z]'>JMP</a>)") //BS12 EDIT ALG
|
||||
if(!no_attack_log)
|
||||
if(istype(firer, /mob))
|
||||
target_mob.attack_log += "\[[time_stamp()]\] <b>[firer]/[firer.ckey]</b> shot <b>[target_mob]/[target_mob.ckey]</b> with a <b>[src.type]</b>"
|
||||
firer.attack_log += "\[[time_stamp()]\] <b>[firer]/[firer.ckey]</b> shot <b>[target_mob]/[target_mob.ckey]</b> with a <b>[src.type]</b>"
|
||||
msg_admin_attack("[firer] ([firer.ckey]) shot [target_mob] ([target_mob.ckey]) with a [src] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[firer.x];Y=[firer.y];Z=[firer.z]'>JMP</a>)") //BS12 EDIT ALG
|
||||
else if(firer)
|
||||
target_mob.attack_log += "\[[time_stamp()]\] <b>UNKNOWN SUBJECT (No longer exists)</b> shot <b>[target_mob]/[target_mob.ckey]</b> with a <b>[src]</b>"
|
||||
msg_admin_attack("UNKNOWN shot [target_mob] ([target_mob.ckey]) with a [src] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[firer.x];Y=[firer.y];Z=[firer.z]'>JMP</a>)") //BS12 EDIT ALG
|
||||
else
|
||||
target_mob.attack_log += "\[[time_stamp()]\] <b>UNKNOWN SUBJECT (No longer exists)</b> shot <b>[target_mob]/[target_mob.ckey]</b> with a <b>[src]</b>"
|
||||
msg_admin_attack("UNKNOWN shot [target_mob] ([target_mob.ckey]) with a [src] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[target_mob.x];Y=[target_mob.y];Z=[target_mob.z]'>JMP</a>)") //BS12 EDIT ALG
|
||||
|
||||
//sometimes bullet_act() will want the projectile to continue flying
|
||||
if (target_mob.bullet_act(src, def_zone) == -1)
|
||||
|
||||
@@ -68,6 +68,7 @@
|
||||
icon_state = "bluelaser"
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
damage = 0
|
||||
no_attack_log = 1
|
||||
damage_type = BURN
|
||||
check_armour = "laser"
|
||||
|
||||
@@ -87,6 +88,7 @@
|
||||
icon_state = "laser"
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
damage = 0
|
||||
no_attack_log = 1
|
||||
damage_type = BURN
|
||||
check_armour = "laser"
|
||||
|
||||
|
||||
@@ -45,12 +45,12 @@
|
||||
var/chance = 0
|
||||
if(istype(A, /turf/simulated/wall))
|
||||
var/turf/simulated/wall/W = A
|
||||
chance = round(damage/W.damage_cap*180)
|
||||
chance = round(damage/W.material.integrity*180)
|
||||
else if(istype(A, /obj/machinery/door))
|
||||
var/obj/machinery/door/D = A
|
||||
chance = round(damage/D.maxhealth*180)
|
||||
if(D.glass) chance *= 2
|
||||
else if(istype(A, /obj/structure/girder) || istype(A, /obj/structure/cultgirder))
|
||||
else if(istype(A, /obj/structure/girder))
|
||||
chance = 100
|
||||
else if(istype(A, /obj/machinery) || istype(A, /obj/structure))
|
||||
chance = 25
|
||||
@@ -196,4 +196,4 @@
|
||||
|
||||
/obj/item/projectile/bullet/shotgun/practice
|
||||
name = "practice"
|
||||
damage = 5
|
||||
damage = 5
|
||||
|
||||
Reference in New Issue
Block a user