Merge branch 'master' of https://github.com/tgstation/-tg-station into EmergencyResponseTeam

Conflicts:
	code/modules/projectiles/guns/energy/nuclear.dm
	icons/obj/gun.dmi
This commit is contained in:
Steelpoint
2015-01-09 11:02:50 +08:00
59 changed files with 522 additions and 281 deletions
+1 -1
View File
@@ -796,7 +796,7 @@ var/global/list/g_fancy_list_of_types = null
qdel(briefcase_item)
for(var/i=3, i>0, i--)
sec_briefcase.contents += new /obj/item/weapon/spacecash/c1000
sec_briefcase.contents += new /obj/item/weapon/gun/energy/crossbow
sec_briefcase.contents += new /obj/item/weapon/gun/projectile/automatic/crossbow
sec_briefcase.contents += new /obj/item/weapon/gun/projectile/revolver/mateba
sec_briefcase.contents += new /obj/item/ammo_box/a357
sec_briefcase.contents += new /obj/item/weapon/c4
+1 -1
View File
@@ -342,7 +342,7 @@ mob/living/carbon/proc/handle_hallucinations()
return
var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/item/ammo_box/a357,\
/obj/item/weapon/gun/energy/crossbow, /obj/item/weapon/melee/energy/sword/saber,\
/obj/item/weapon/gun/projectile/automatic/crossbow, /obj/item/weapon/melee/energy/sword/saber,\
/obj/item/weapon/storage/box/syndicate, /obj/item/weapon/storage/box/emps,\
/obj/item/weapon/cartridge/syndicate, /obj/item/clothing/under/chameleon,\
/obj/item/clothing/shoes/syndigaloshes, /obj/item/weapon/card/id/syndicate,\
+1 -12
View File
@@ -471,13 +471,6 @@
force = 10
throwforce = 10
var/cooldown = 0
var/list/can_be_placed_into = list(
/obj/structure/table,
/obj/structure/closet,
/obj/item/weapon/storage,
/obj/structure/safe,
/obj/machinery/disposal
)
/obj/item/weapon/resonator/proc/CreateResonance(var/target, var/creator)
if(cooldown <= 0)
@@ -493,12 +486,8 @@
..()
/obj/item/weapon/resonator/afterattack(atom/target, mob/user, proximity_flag)
if(target in user.contents)
return
if(proximity_flag)
for(var/type in can_be_placed_into)
if(istype(target, type))
return
if(!check_allowed_items(target, 1)) return
CreateResonance(target, user)
/obj/effect/resonance
+8 -8
View File
@@ -313,11 +313,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
dat += "<h4>Crew Manifest</h4>"
dat += data_core.get_manifest()
src << browse(dat, "window=manifest;size=370x420;can_close=1")
/mob/dead/observer/Topic(href, href_list)
if(href_list["follow"])
var/atom/movable/target = locate(href_list["follow"])
if((usr == src) && istype(target) && (target != src)) //for safety against href exploits
ManualFollow(target)
src << browse(dat, "window=manifest;size=387x420;can_close=1")
/mob/dead/observer/Topic(href, href_list)
if(href_list["follow"])
var/atom/movable/target = locate(href_list["follow"])
if((usr == src) && istype(target) && (target != src)) //for safety against href exploits
ManualFollow(target)
@@ -248,9 +248,9 @@
..()
modules += new /obj/item/device/flashlight(src)
modules += new /obj/item/weapon/melee/energy/sword/cyborg(src)
modules += new /obj/item/weapon/gun/energy/crossbow/cyborg(src)
modules += new /obj/item/weapon/gun/energy/printer(src)
modules += new /obj/item/weapon/gun/projectile/revolver/grenadelauncher/cyborg(src)
modules += new /obj/item/weapon/card/emag(src)
modules += new /obj/item/weapon/gun/energy/laser/cyborg(src)
modules += new /obj/item/weapon/tank/jetpack/carbondioxide(src)
modules += new /obj/item/weapon/crowbar(src)
emag = null
+47 -21
View File
@@ -82,24 +82,37 @@ var/next_mob_id = 0
// blind_message (optional) is what blind people will hear e.g. "You hear something!"
/mob/visible_message(var/message, var/self_message, var/blind_message)
var/list/atom_viewers = list()
for(var/atom/movable/A in view(src))
atom_viewers |= recursive_hear_check(A)
atom_viewers |= src
for(var/mob/M in atom_viewers)
var/list/mob_viewers = list()
var/list/possible_viewers = list()
mob_viewers |= src
mob_viewers |= viewers(src)
var/heard = get_hear(7, src)
for(var/atom/movable/A in heard)
possible_viewers |= recursive_hear_check(A)
for(var/mob/B in possible_viewers)
if(B in mob_viewers)
continue
if(isturf(B.loc))
continue
var/turf/T = get_turf(B)
if(src in view(T))
mob_viewers |= B
for(var/mob/M in mob_viewers)
if(M.see_invisible < invisibility)
continue //can't view the invisible
var/msg = message
if(self_message && M==src)
msg = self_message
M.show_message( msg, 1)
M.show_message(msg, 1)
if(blind_message)
var/list/atom_hearers = list()
for(var/atom/movable/O in get_hearers_in_view(7, src))
if(O in atom_viewers)
var/list/mob_hearers = list()
for(var/mob/C in get_hearers_in_view(7, src))
if(C in mob_viewers)
continue
atom_hearers |= O
for(var/mob/MOB in atom_hearers)
mob_hearers |= C
for(var/mob/MOB in mob_hearers)
MOB.show_message(blind_message, 2)
// Show a message to all mobs who sees this atom
@@ -108,18 +121,31 @@ var/next_mob_id = 0
// blind_message (optional) is what blind people will hear e.g. "You hear something!"
/atom/proc/visible_message(var/message, var/blind_message)
var/list/atom_viewers = list()
for(var/atom/movable/A in view(src))
atom_viewers |= recursive_hear_check(A)
for(var/mob/M in atom_viewers)
M.show_message( message, 1)
var/list/mob_viewers = list()
var/list/possible_viewers = list()
mob_viewers |= viewers(src)
var/heard = get_hear(7, src)
for(var/atom/movable/A in heard)
possible_viewers |= recursive_hear_check(A)
for(var/mob/B in possible_viewers)
if(B in mob_viewers)
continue
if(isturf(B.loc))
continue
var/turf/T = get_turf(B)
if(src in view(T))
mob_viewers |= B
for(var/mob/M in mob_viewers)
M.show_message(message, 1)
if(blind_message)
var/list/atom_hearers = list()
for(var/atom/movable/O in get_hearers_in_view(7, src))
if(O in atom_viewers)
var/list/mob_hearers = list()
for(var/mob/C in get_hearers_in_view(7, src))
if(C in mob_viewers)
continue
atom_hearers |= O
for(var/mob/MOB in atom_hearers)
mob_hearers |= C
for(var/mob/MOB in mob_hearers)
MOB.show_message(blind_message, 2)
// Show a message to all mobs in earshot of this one
+3 -3
View File
@@ -29,7 +29,7 @@
output += "<p>\[ <a href='byond://?src=\ref[src];ready=1'>Ready</a> | <b>Not Ready</b> \]</p>"
else
output += "<a href='byond://?src=\ref[src];manifest=1'>View the Crew Manifest</A><br><br>"
output += "<p><a href='byond://?src=\ref[src];manifest=1'>View the Crew Manifest</A></p>"
output += "<p><a href='byond://?src=\ref[src];late_join=1'>Join Game!</A></p>"
output += "<p><a href='byond://?src=\ref[src];observe=1'>Observe</A></p>"
@@ -56,7 +56,7 @@
output += "</center>"
//src << browse(output,"window=playersetup;size=210x240;can_close=0")
var/datum/browser/popup = new(src, "playersetup", "<div align='center'>New Player Options</div>", 220, 250)
var/datum/browser/popup = new(src, "playersetup", "<div align='center'>New Player Options</div>", 220, 265)
popup.set_window_options("can_close=0")
popup.set_content(output)
popup.open(0)
@@ -370,7 +370,7 @@
dat += "<h4>Crew Manifest</h4>"
dat += data_core.get_manifest(OOC = 1)
src << browse(dat, "window=manifest;size=370x420;can_close=1")
src << browse(dat, "window=manifest;size=387x420;can_close=1")
/mob/new_player/Move()
return 0
-2
View File
@@ -34,8 +34,6 @@
BB = new projectile_type(src)
return
//Boxes of ammo
/obj/item/ammo_box
name = "ammo box (null_reference_exception)"
@@ -136,9 +136,9 @@
caliber = "a762"
projectile_type = /obj/item/projectile/bullet
/obj/item/ammo_casing/a545
desc = "A 5.45mm bullet casing."
caliber = "a545"
/obj/item/ammo_casing/a556
desc = "A 5.56mm bullet casing."
caliber = "a556"
projectile_type = /obj/item/projectile/bullet/heavybullet
/obj/item/ammo_casing/caseless
@@ -164,3 +164,11 @@
caliber = "40mm"
icon_state = "40mmHE"
projectile_type = /obj/item/projectile/bullet/a40mm
/obj/item/ammo_casing/caseless/bolt //xbow
name = "poison crossbow bolt"
desc = "A reusable crossbow bolt tipped with specialized carpotoxin."
projectile_type = /obj/item/projectile/energy/bolt
caliber = "crossbow"
icon = 'icons/obj/projectiles.dmi'
icon_state = "cbbolt"
+7 -1
View File
@@ -38,4 +38,10 @@
icon_state = "40mm"
ammo_type = /obj/item/ammo_casing/a40mm
max_ammo = 4
multiple_sprites = 1
multiple_sprites = 1
/obj/item/ammo_box/crossbow
name = "ammo box (crossbow bolts)"
icon_state = "xbow"
ammo_type = /obj/item/ammo_casing/caseless/bolt
max_ammo = 4
+3 -11
View File
@@ -64,15 +64,6 @@
projectile_type = /obj/item/projectile/lasertag/redtag
select_name = "redtag"
/obj/item/ammo_casing/energy/bolt
projectile_type = /obj/item/projectile/energy/bolt
select_name = "bolt"
fire_sound = 'sound/weapons/Genhit.ogg'
/obj/item/ammo_casing/energy/bolt/large
projectile_type = /obj/item/projectile/energy/bolt/large
select_name = "heavy bolt"
/obj/item/ammo_casing/energy/xray
projectile_type = /obj/item/projectile/beam/xray
e_cost = 50
@@ -82,9 +73,11 @@
projectile_type = /obj/item/projectile/energy/electrode
select_name = "stun"
fire_sound = 'sound/weapons/taser.ogg'
e_cost = 200
/obj/item/ammo_casing/energy/electrode/gun
fire_sound = 'sound/weapons/gunshot.ogg'
e_cost = 100
/obj/item/ammo_casing/energy/ion
projectile_type = /obj/item/projectile/ion
@@ -149,5 +142,4 @@
/obj/item/ammo_casing/energy/wormhole/orange
projectile_type = /obj/item/projectile/beam/wormhole/orange
select_name = "orange"
select_name = "orange"
@@ -90,6 +90,15 @@
ammo_type = /obj/item/ammo_casing/a40mm
max_ammo = 6
/obj/item/ammo_box/magazine/internal/cylinder/crossbow
name = "autocrossbow internal magazine"
ammo_type = /obj/item/ammo_casing/caseless/bolt
caliber = "crossbow"
max_ammo = 10
/obj/item/ammo_box/magazine/internal/cylinder/crossbow/large
max_ammo = 15
///////////EXTERNAL MAGAZINES////////////////
/obj/item/ammo_box/magazine/m10mm
@@ -159,17 +168,14 @@ obj/item/ammo_box/magazine/tommygunm45
multiple_sprites = 2
max_ammo = 8
/obj/item/ammo_box/magazine/m545
name = "box magazine (5.45mm)"
icon_state = "5.45m"
/obj/item/ammo_box/magazine/m556
name = "toploader magazine (5.56mm)"
icon_state = "5.56m"
origin_tech = "combat=5;syndicate=1"
ammo_type = /obj/item/ammo_casing/a545
caliber = "a545"
ammo_type = /obj/item/ammo_casing/a556
caliber = "a556"
max_ammo = 30
/obj/item/ammo_box/magazine/m545/update_icon()
..()
icon_state = "[initial(icon_state)]-[round(ammo_count(),10)]"
multiple_sprites = 2
/obj/item/ammo_box/magazine/m762
name = "box magazine (7.62mm)"
@@ -34,4 +34,10 @@
/obj/item/ammo_casing/syringegun
name = "syringe gun spring"
desc = "A high-power spring that throws syringes."
projectile_type = null
projectile_type = null
/obj/item/ammo_casing/energy/c3dbullet
projectile_type = /obj/item/projectile/bullet/midbullet3
select_name = "spraydown"
fire_sound = 'sound/weapons/gunshot_smg.ogg'
e_cost = 20
+82 -1
View File
@@ -30,6 +30,8 @@
var/sawn_state = SAWN_INTACT
var/burst_size = 1
var/fire_delay = 0
var/obj/item/device/flashlight/F = null
var/can_flashlight = 0
/obj/item/weapon/gun/proc/process_chamber()
return 0
@@ -145,4 +147,83 @@
if(user.a_intent == "harm") //Flogging
..()
else
return
return
/obj/item/weapon/gun/attackby(var/obj/item/A as obj, mob/user as mob)
if(istype(A, /obj/item/device/flashlight/seclite))
var/obj/item/device/flashlight/seclite/S = A
if(can_flashlight)
if(!F)
if(user.l_hand != src && user.r_hand != src)
user << "<span class='notice'>You'll need [src] in your hands to do that.</span>"
return
user.drop_item()
user << "<span class='notice'>You click [S] into place on [src].</span>"
if(S.on)
SetLuminosity(0)
F = S
A.loc = src
update_icon()
update_gunlight(user)
if(istype(A, /obj/item/weapon/screwdriver))
if(F)
if(user.l_hand != src && user.r_hand != src)
user << "<span class='notice'>You'll need [src] in your hands to do that.</span>"
return
for(var/obj/item/device/flashlight/seclite/S in src)
user << "<span class='notice'>You unscrew the seclite from [src].</span>"
F = null
S.loc = get_turf(user)
update_gunlight(user)
S.update_brightness(user)
update_icon()
..()
return
/obj/item/weapon/gun/verb/toggle_gunlight()
set name = "Toggle Gunlight"
set category = "Object"
set desc = "Click to toggle your weapon's attached flashlight."
var/mob/living/carbon/human/user = usr
if(!isturf(user.loc))
user << "You cannot turn the light on while in this [user.loc]."
F.on = !F.on
user << "<span class='notice'>You toggle the gunlight [F.on ? "on":"off"].</span>"
playsound(user, 'sound/weapons/empty.ogg', 100, 1)
update_gunlight(user)
return
/obj/item/weapon/gun/proc/update_gunlight(var/mob/user = null)
if(F)
action_button_name = "Toggle Gunlight"
if(F.on)
if(loc == user)
user.AddLuminosity(F.brightness_on)
else if(isturf(loc))
SetLuminosity(F.brightness_on)
else
if(loc == user)
user.AddLuminosity(-F.brightness_on)
else if(isturf(loc))
SetLuminosity(0)
update_icon()
else
action_button_name = null
if(loc == user)
user.AddLuminosity(-5)
else if(isturf(loc))
SetLuminosity(0)
return
/obj/item/weapon/gun/pickup(mob/user)
if(F)
if(F.on)
user.AddLuminosity(F.brightness_on)
SetLuminosity(0)
/obj/item/weapon/gun/dropped(mob/user)
if(F)
if(F.on)
user.AddLuminosity(-F.brightness_on)
SetLuminosity(F.brightness_on)
+10 -1
View File
@@ -79,4 +79,13 @@
icon_state = "[initial(icon_state)][shot.mod_name][ratio]"
if (2)
icon_state = "[initial(icon_state)][shot.select_name][ratio]"
return
overlays.Cut()
if(F)
if(F.on)
overlays += "flight-on"
else
overlays += "flight"
return
/obj/item/weapon/gun/energy/ui_action_click()
toggle_gunlight()
@@ -6,6 +6,7 @@
ammo_type = list(/obj/item/ammo_casing/energy/disabler, /obj/item/ammo_casing/energy/laser)
origin_tech = "combat=3;magnets=2"
modifystate = 2
can_flashlight = 1
/obj/item/weapon/gun/energy/gun/attack_self(mob/living/user as mob)
select_fire(user)
@@ -20,6 +21,7 @@
var/charge_tick = 0
modifystate = 0
ammo_type = list(/obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser)
can_flashlight = 0
/obj/item/weapon/gun/energy/gun/nuclear/New()
..()
@@ -134,7 +134,6 @@
icon_state = "disabler"
item_state = null
ammo_type = list(/obj/item/ammo_casing/energy/disabler)
cell_type = "/obj/item/weapon/stock_parts/cell"
/obj/item/weapon/gun/energy/wormhole_projector
@@ -180,3 +179,42 @@
if(orange && blue)
blue.target = get_turf(orange)
orange.target = get_turf(blue)
/* 3d printer 'pseudo guns' for borgs */
/obj/item/weapon/gun/energy/printer
name = "cyborg lmg"
desc = "A machinegun that fires 3d-printed flachettes slowly regenerated using a cyborg's internal power source."
icon_state = "l6closed0"
cell_type = "/obj/item/weapon/stock_parts/cell/secborg"
ammo_type = list(/obj/item/ammo_casing/energy/c3dbullet)
var/charge_tick = 0
var/recharge_time = 5
/obj/item/weapon/gun/energy/printer/update_icon()
return
/obj/item/weapon/gun/energy/printer/New()
..()
SSobj.processing.Add(src)
/obj/item/weapon/gun/energy/printer/Destroy()
SSobj.processing.Remove(src)
..()
/obj/item/weapon/gun/energy/printer/process()
charge_tick++
if(charge_tick < recharge_time) return 0
charge_tick = 0
if(!power_supply) return 0 //sanity
if(isrobot(src.loc))
var/mob/living/silicon/robot/R = src.loc
if(R && R.cell)
var/obj/item/ammo_casing/energy/shot = ammo_type[select] //Necessary to find cost of shot
if(R.cell.use(shot.e_cost)) //Take power from the borg...
power_supply.give(shot.e_cost) //...to recharge the shot
return 1
+7 -64
View File
@@ -5,30 +5,29 @@
icon_state = "taser"
item_state = null //so the human update icon uses the icon_state instead.
ammo_type = list(/obj/item/ammo_casing/energy/electrode)
cell_type = "/obj/item/weapon/stock_parts/cell/crap"
/obj/item/weapon/gun/energy/stunrevolver
name = "stun revolver"
desc = "A high-tech revolver that fires internal, reusable stun cartidges in a revolving cylinder."
desc = "A high-tech revolver that fires internal, reusable stun cartidges in a revolving cylinder. Holds twice as many electrodes as a standard taser."
icon_state = "stunrevolver"
origin_tech = "combat=3;materials=3;powerstorage=2"
ammo_type = list(/obj/item/ammo_casing/energy/electrode/gun)
cell_type = "/obj/item/weapon/stock_parts/cell"
can_flashlight = 0
/obj/item/weapon/gun/energy/gun/advtaser
name = "advanced taser"
desc = "A hybrid taser designed to fire both short-range high-power electrodes and long-range disabler beams."
name = "hybrid taser"
desc = "A dual-mode taser designed to fire both short-range high-power electrodes and long-range disabler beams."
icon_state = "advtaser"
ammo_type = list(/obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/disabler)
cell_type = "/obj/item/weapon/stock_parts/cell/crap"
origin_tech = null
/obj/item/weapon/gun/energy/gun/advtaser/cyborg
name = "advanced taser"
desc = "An integrated advanced taser that draws directly from a cyborg's power cell. The weapon contains a limiter to prevent the cyborg's power cell from overheating."
cell_type = "/obj/item/weapon/stock_parts/cell/secborg"
name = "cyborg taser"
desc = "An integrated hybrid taser that draws directly from a cyborg's power cell. The weapon contains a limiter to prevent the cyborg's power cell from overheating."
var/charge_tick = 0
var/recharge_time = 10
can_flashlight = 0
/obj/item/weapon/gun/energy/gun/advtaser/cyborg/New()
..()
@@ -54,59 +53,3 @@
update_icon()
return 1
/obj/item/weapon/gun/energy/crossbow
name = "mini energy crossbow"
desc = "A weapon favored by syndicate stealth specialists."
icon_state = "crossbow"
item_state = "crossbow"
w_class = 2.0
m_amt = 2000
origin_tech = "combat=2;magnets=2;syndicate=5"
suppressed = 1
ammo_type = list(/obj/item/ammo_casing/energy/bolt)
cell_type = "/obj/item/weapon/stock_parts/cell/crap"
var/charge_tick = 0
/obj/item/weapon/gun/energy/crossbow/New()
..()
SSobj.processing.Add(src)
/obj/item/weapon/gun/energy/crossbow/Destroy()
SSobj.processing.Remove(src)
..()
/obj/item/weapon/gun/energy/crossbow/process()
charge_tick++
if(charge_tick < 4) return 0
charge_tick = 0
if(!power_supply) return 0
power_supply.give(100)
return 1
/obj/item/weapon/gun/energy/crossbow/update_icon()
return
/obj/item/weapon/gun/energy/crossbow/cyborg/newshot()
if(isrobot(src.loc))
var/mob/living/silicon/robot/R = src.loc
if(R && R.cell)
var/obj/item/ammo_casing/energy/shot = ammo_type[select] //Necessary to find cost of shot
if(R.cell.use(shot.e_cost))
chambered = shot
chambered.newshot()
return
/obj/item/weapon/gun/energy/crossbow/largecrossbow
name = "energy crossbow"
desc = "A weapon favored by syndicate carp hunters."
icon_state = "crossbowlarge"
w_class = 3.0
force = 10
m_amt = 4000
suppressed = 0
@@ -9,8 +9,8 @@
can_suppress = 1
burst_size = 3
fire_delay = 1
var/select = 0
action_button_name = "Toggle Fire Mode"
var/select = 1
action_button_name = "Toggle Firemode"
/obj/item/weapon/gun/projectile/automatic/update_icon()
..()
@@ -23,28 +23,40 @@
return
/obj/item/weapon/gun/projectile/automatic/attackby(var/obj/item/A as obj, mob/user as mob)
if(..() && chambered)
alarmed = 0
if(istype(A, /obj/item/ammo_box/magazine))
var/obj/item/ammo_box/magazine/AM = A
if(istype(AM, mag_type))
if(magazine)
user << "<span class='notice'>You perform a tactical reload on \the [src], replacing the magazine.</span>"
magazine.loc = get_turf(src.loc)
magazine.update_icon()
magazine = null
else
user << "<span class='notice'>You insert the magazine into \the [src].</span>"
user.remove_from_mob(AM)
magazine = AM
magazine.loc = src
chamber_round()
A.update_icon()
update_icon()
return 1
/obj/item/weapon/gun/projectile/automatic/ui_action_click()
burst_select()
/obj/item/weapon/gun/projectile/automatic/verb/burst_select()
set name = "Toggle Fire Mode"
set category = "Object"
set desc = "Click to switch fire modes."
/obj/item/weapon/gun/projectile/automatic/proc/burst_select()
var/mob/living/carbon/human/user = usr
select = !select
if(select)
select = 0
burst_size = 1
fire_delay = 0
user << "<span class='notice'>You switch to semi-automatic.</span>"
else
select = 1
burst_size = initial(burst_size)
fire_delay = initial(fire_delay)
user << "<span class='notice'>You switch to [burst_size]-rnd burst.</span>"
playsound(user, 'sound/weapons/empty.ogg', 100, 1)
update_icon()
return
@@ -98,12 +110,8 @@
fire_sound = 'sound/weapons/Gunshot_smg.ogg'
var/cover_open = 0
can_suppress = 0
burst_size = 1
fire_delay = 0
/obj/item/weapon/gun/projectile/automatic/l6_saw/burst_select()
return
burst_size = 5
fire_delay = 3
/obj/item/weapon/gun/projectile/automatic/l6_saw/attack_self(mob/user as mob)
cover_open = !cover_open
@@ -145,71 +153,70 @@
return
..()
/obj/item/weapon/gun/projectile/automatic/c90gl
name = "syndicate assault rifle"
desc = "A bullpup three-round burst 5.45x39 assault rifle with a unique toploading design, designated 'C-90gl'. Has an attached underbarrel grenade launcher which can be toggled on and off."
icon_state = "c90gl"
item_state = "c90gl"
/obj/item/weapon/gun/projectile/automatic/m90
name = "syndicate carbine"
desc = "A three-round burst 5.56 toploading carbine, designated 'M-90gl'. Has an attached underbarrel grenade launcher which can be toggled on and off."
icon_state = "m90"
item_state = "m90"
origin_tech = "combat=5;materials=2;syndicate=8"
mag_type = /obj/item/ammo_box/magazine/m545
mag_type = /obj/item/ammo_box/magazine/m556
fire_sound = 'sound/weapons/Gunshot_smg.ogg'
action_button_name = "Toggle Grenade Launcher"
can_suppress = 0
var/obj/item/weapon/gun/projectile/revolver/grenadelauncher/underbarrel
burst_size = 3
fire_delay = 2
/obj/item/weapon/gun/projectile/automatic/c90gl/New()
/obj/item/weapon/gun/projectile/automatic/m90/New()
..()
underbarrel = new /obj/item/weapon/gun/projectile/revolver/grenadelauncher(src)
update_icon()
return
/obj/item/weapon/gun/projectile/automatic/c90gl/afterattack(var/atom/target, var/mob/living/user, flag, params)
/obj/item/weapon/gun/projectile/automatic/m90/afterattack(var/atom/target, var/mob/living/user, flag, params)
if(select == 2)
underbarrel.afterattack(target, user, flag, params)
else
..()
empty_alarm()
return
/obj/item/weapon/gun/projectile/automatic/c90gl/attackby(var/obj/item/A, mob/user)
if(select == 2)
underbarrel.attackby(A, user)
else
..()
/obj/item/weapon/gun/projectile/automatic/c90gl/attack_self(var/mob/living/user)
if(select == 2)
underbarrel.attack_self(user)
/obj/item/weapon/gun/projectile/automatic/m90/attackby(var/obj/item/A, mob/user)
if(istype(A, /obj/item/ammo_casing))
if(istype(A, underbarrel.magazine.ammo_type))
underbarrel.attack_self()
underbarrel.attackby(A, user)
else
..()
/obj/item/weapon/gun/projectile/automatic/c90gl/update_icon()
/obj/item/weapon/gun/projectile/automatic/m90/update_icon()
..()
overlays.Cut()
if(!select)
overlays += "[initial(icon_state)]semi"
if(select == 1)
overlays += "[initial(icon_state)]burst"
if(select == 2)
overlays += "[initial(icon_state)]gren"
icon_state = "c90gl[magazine ? "-[Ceiling(get_ammo(0)/6)*6]" : ""][chambered ? "" : "-e"]"
switch(select)
if(0)
overlays += "[initial(icon_state)]semi"
if(1)
overlays += "[initial(icon_state)]burst"
if(2)
overlays += "[initial(icon_state)]gren"
icon_state = "[initial(icon_state)][magazine ? "" : "-e"]"
return
/obj/item/weapon/gun/projectile/automatic/c90gl/burst_select()
/obj/item/weapon/gun/projectile/automatic/m90/burst_select()
var/mob/living/carbon/human/user = usr
if(!select)
select = 1
burst_size = initial(burst_size)
fire_delay = initial(fire_delay)
user << "<span class='notice'>You switch to [burst_size]-rnd burst.</span>"
if(select == 1)
select = 2
user << "<span class='notice'>You switch to grenades.</span>"
if(select == 2)
select = 0
burst_size = 1
fire_delay = 0
user << "<span class='notice'>You switch to semi-auto.</span>"
switch(select)
if(0)
select = 1
burst_size = initial(burst_size)
fire_delay = initial(fire_delay)
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>"
if(2)
select = 0
burst_size = 1
fire_delay = 0
user << "<span class='notice'>You switch to semi-auto.</span>"
playsound(user, 'sound/weapons/empty.ogg', 100, 1)
update_icon()
return
@@ -217,7 +224,7 @@
name = "tommy gun"
desc = "A genuine 'Chicago Typewriter'."
icon_state = "tommygun"
item_state = "tommygun"
item_state = "shotgun"
slot_flags = 0
origin_tech = "combat=5;materials=1;syndicate=2"
mag_type = /obj/item/ammo_box/magazine/tommygunm45
@@ -7,6 +7,7 @@
icon_state = "dshotgun-sawn"
item_state = "gun"
mag_type = /obj/item/ammo_box/magazine/internal/cylinder/grenadelauncher
fire_sound = 'sound/weapons/grenadelaunch.ogg'
w_class = 3
/obj/item/weapon/gun/projectile/revolver/grenadelauncher/attackby(var/obj/item/A, mob/user)
@@ -14,22 +15,26 @@
if(istype(A, /obj/item/ammo_box) || istype(A, /obj/item/ammo_casing))
chamber_round()
/obj/item/weapon/gun/projectile/revolver/grenadelauncher/multi
desc = "A revolving 6-shot grenade launcher."
/obj/item/weapon/gun/projectile/revolver/grenadelauncher/cyborg
desc = "A 6-shot grenade launcher."
name = "multi grenade launcher"
icon_state = "bulldog"
item_state = "bulldog"
icon = 'icons/mecha/mecha_equipment.dmi'
icon_state = "mecha_grenadelnchr"
mag_type = /obj/item/ammo_box/magazine/internal/cylinder/grenadelauncher/multi
/obj/item/weapon/gun/projectile/revolver/grenadelauncher/cyborg/attack_self()
return
/obj/item/weapon/gun/projectile/automatic/gyropistol
name = "gyrojet pistol"
desc = "A prototype pistol designed to fire self propelled rockets."
icon_state = "gyropistol"
fire_sound = 'sound/effects/Explosion1.ogg'
fire_sound = 'sound/weapons/grenadelaunch.ogg'
origin_tech = "combat=3"
mag_type = /obj/item/ammo_box/magazine/m75
burst_size = 1
fire_delay = 0
action_button_name = null
/obj/item/weapon/gun/projectile/automatic/gyropistol/process_chamber(var/eject_casing = 0, var/empty_chamber = 1)
..()
@@ -37,4 +42,46 @@
/obj/item/weapon/gun/projectile/automatic/gyropistol/update_icon()
..()
icon_state = "[initial(icon_state)][magazine ? "loaded" : ""]"
return
return
/obj/item/weapon/gun/projectile/automatic/crossbow
name = "mini auto-crossbow"
desc = "A weapon favored by syndicate stealth specialists. Fires specialized poison bolts."
icon_state = "crossbow"
item_state = "crossbow"
w_class = 2
m_amt = 2000
origin_tech = "combat=2;magnets=2;syndicate=5"
suppressed = 1
mag_type = /obj/item/ammo_box/magazine/internal/cylinder/crossbow
fire_sound = 'sound/weapons/genhit.ogg'
burst_size = 1
fire_delay = 0
select = 0
action_button_name = null
/obj/item/weapon/gun/projectile/automatic/crossbow/update_icon()
return
/obj/item/weapon/gun/projectile/automatic/crossbow/attack_self()
return
/obj/item/weapon/gun/projectile/automatic/crossbow/process_chamber(var/eject_casing = 0, var/empty_chamber = 1)
..()
/obj/item/weapon/gun/projectile/automatic/crossbow/attackby(var/obj/item/A, mob/user)
var/num_loaded = magazine.attackby(A, user, 1)
if(num_loaded)
user << "<span class='notice'>You load [num_loaded] bolt\s into \the [src].</span>"
update_icon()
chamber_round()
/obj/item/weapon/gun/projectile/automatic/crossbow/large //holds twice the ammo of mini crossbows but can't be pocketed
name = "auto crossbow"
desc = "A weapon favored by carp hunters. Fires specialized poison bolts."
icon_state = "crossbowlarge"
w_class = 3
force = 10
m_amt = 4000
suppressed = 0
mag_type = /obj/item/ammo_box/magazine/internal/cylinder/crossbow/large
@@ -8,6 +8,7 @@
can_suppress = 1
burst_size = 1
fire_delay = 0
action_button_name = null
/obj/item/weapon/gun/projectile/automatic/pistol/update_icon()
..()
@@ -204,8 +204,9 @@
mag_type = /obj/item/ammo_box/magazine/m12g
fire_sound = 'sound/weapons/Gunshot.ogg'
can_suppress = 0
burst_size = 2
fire_delay = 1
burst_size = 1
fire_delay = 0
/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/New()
..()
update_icon()
@@ -41,6 +41,7 @@
icon_state = "omnilaser"
damage = 36
damage_type = STAMINA
flag = "energy"
hitsound = 'sound/weapons/tap.ogg'
eyeblur = 0
+15 -7
View File
@@ -7,14 +7,15 @@
flag = "bullet"
/obj/item/projectile/bullet/weakbullet
/obj/item/projectile/bullet/weakbullet //beanbag, heavy stamina damage
damage = 5
stamina = 33
stamina = 80
/obj/item/projectile/bullet/weakbullet2
/obj/item/projectile/bullet/weakbullet2 //detective revolver instastuns, but multiple shots are better for keeping punks down
damage = 15
stamina = 75 //the detective can't shoot in bursts and will get yelled at if he sinks 50 rounds into perps to stun 'em
weaken = 3
stamina = 50
/obj/item/projectile/bullet/weakbullet3
damage = 20
@@ -28,7 +29,8 @@
/obj/item/projectile/bullet/midbullet
damage = 20
stamina = 50 //two round bursts from the c20r
stamina = 65 //two round bursts from the c20r knocks people down
/obj/item/projectile/bullet/midbullet2
damage = 25
@@ -40,10 +42,16 @@
damage = 35
/obj/item/projectile/bullet/stunshot
/obj/item/projectile/bullet/stunshot //taser slugs for shotguns, nothing special
name = "stunshot"
damage = 5
stamina = 50 //two round bursts from the bulldog
stun = 5
weaken = 5
stutter = 5
jitter = 20
range = 7
icon_state = "spark"
color = "#FFFF00"
/obj/item/projectile/bullet/incendiary/on_hit(var/atom/target, var/blocked = 0)
..()
+14 -7
View File
@@ -4,18 +4,18 @@
damage = 0
damage_type = BURN
flag = "energy"
color = "#FFFF00"
/obj/item/projectile/energy/electrode
name = "electrode"
icon_state = "spark"
color = "#FFFF00"
nodamage = 1
stun = 5
weaken = 5
stutter = 5
jitter = 20
hitsound = "sparks"
hitsound = 'sound/weapons/taserhit.ogg'
range = 7
/obj/item/projectile/energy/electrode/on_hit(var/atom/target, var/blocked = 0)
@@ -51,7 +51,7 @@
weaken = 5
range = 7
/obj/item/projectile/energy/bolt //ebow bolts
/obj/item/projectile/energy/bolt //xbow bolts
name = "bolt"
icon_state = "cbbolt"
damage = 15
@@ -59,8 +59,15 @@
nodamage = 0
weaken = 5
stutter = 5
range = 10
range = 7
/obj/item/projectile/energy/bolt/large
name = "largebolt"
damage = 20
/obj/item/projectile/energy/bolt/on_hit(var/atom/target, var/blocked = 0) //drop a bolt on hitting basically anything
if(!proj_hit)
proj_hit = 1
new /obj/item/ammo_casing/caseless/bolt(src.loc)
..()
/obj/item/projectile/energy/bolt/on_range() //drop a bolt after 7 tiles
if(!proj_hit)
new /obj/item/ammo_casing/caseless/bolt(src.loc)
..()
@@ -28,7 +28,6 @@
icon_state= "bolter"
damage = 60
flag = "bullet"
range = 7
/obj/item/projectile/bullet/a40mm/on_hit(atom/target, blocked = 0)
explosion(target, -1, 0, 2, 1, 0, flame_range = 3)
@@ -178,4 +177,4 @@ obj/item/projectile/kinetic/New()
/obj/item/projectile/bullet/frag12
name ="explosive slug"
damage = 25
weaken = 5
weaken = 5
+7 -2
View File
@@ -17,6 +17,7 @@
var/beaker = null
var/recharged = 0
var/recharge_delay = 15 //Time it game ticks between recharges
var/image/icon_beaker = null //cached overlay
var/list/dispensable_reagents = list("hydrogen","lithium","carbon","nitrogen","oxygen","fluorine",
"sodium","aluminium","silicon","phosphorus","sulfur","chlorine","potassium","iron",
"copper","mercury","radium","water","ethanol","sugar","sacid")
@@ -138,7 +139,7 @@
var/obj/item/weapon/reagent_containers/glass/B = beaker
B.loc = loc
beaker = null
overlays -= "disp_beaker"
overlays.Cut()
add_fingerprint(usr)
return 1 // update UIs attached to this object
@@ -159,7 +160,11 @@
B.loc = src
user << "You add the beaker to the machine!"
SSnano.update_uis(src) // update all UIs attached to src
overlays += "disp_beaker"
if(!icon_beaker)
icon_beaker = image('icons/obj/chemical.dmi', src, "disp_beaker") //randomize beaker overlay position.
icon_beaker.pixel_x = rand(-10,5)
overlays += icon_beaker
/obj/machinery/chem_dispenser/attack_ai(mob/user as mob)
return src.attack_hand(user)
@@ -12,11 +12,13 @@
volume = 50
flags = OPENCONTAINER
var/list/can_be_placed_into = list(
can_be_placed_into = list(
/obj/machinery/chem_master/,
/obj/machinery/chem_dispenser/,
/obj/machinery/reagentgrinder,
/obj/machinery/biogenerator,
/obj/structure/table,
/obj/structure/rack,
/obj/structure/closet,
/obj/structure/sink,
/obj/item/weapon/storage,
@@ -35,10 +37,7 @@
/obj/item/weapon/reagent_containers/glass/afterattack(obj/target, mob/user, proximity)
if(!proximity) return // not adjacent
for(var/type in can_be_placed_into)
if(istype(target, type))
return
if((!proximity) || !check_allowed_items(target)) return
if(ismob(target) && target.reagents && reagents.total_volume)
var/mob/M = target
@@ -14,6 +14,7 @@
possible_transfer_amounts = null //list(5, 10, 15)
volume = 15
var/mode = SYRINGE_DRAW
var/busy = 0 // needed for delayed drawing of blood
g_amt = 20
m_amt = 10
@@ -43,6 +44,8 @@
return
/obj/item/weapon/reagent_containers/syringe/afterattack(obj/target, mob/user , proximity)
if(busy)
return
if(!proximity) return
if(!target.reagents) return
@@ -81,8 +84,11 @@
if(target != user)
target.visible_message("<span class='danger'>[user] is trying to take a blood sample from [target]!</span>", \
"<span class='userdanger'>[user] is trying to take a blood sample from [target]!</span>")
busy = 1
if(!do_mob(user, target))
busy = 0
return
busy = 0
B.holder = src
B.volume = amount
//set reagent data
@@ -75,7 +75,7 @@
req_tech = list("combat" = 5, "materials" = 5, "engineering" = 3, "biotech" = 4, "syndicate" = 3)
build_type = PROTOLATHE
materials = list("$metal" = 5000, "$glass" = 1500, "$uranium" = 1500, "$silver" = 1500)
build_path = /obj/item/weapon/gun/energy/crossbow/largecrossbow
build_path = /obj/item/weapon/gun/projectile/automatic/crossbow/large
locked = 1
category = list("Weapons")