Merge branch 'master' into GunsAndGunAccessories

# Conflicts:
#	code/modules/projectiles/guns/projectile/automatic.dm
This commit is contained in:
Granodd
2019-01-26 02:17:22 -05:00
660 changed files with 18114 additions and 21521 deletions
@@ -29,6 +29,12 @@
icon_state = "r-casing"
projectile_type = /obj/item/projectile/bullet/weakbullet2
/obj/item/ammo_casing/c38/invisible
projectile_type = /obj/item/projectile/bullet/weakbullet2/invisible
/obj/item/ammo_casing/c38/invisible/fake
projectile_type = /obj/item/projectile/bullet/weakbullet2/invisible/fake
/obj/item/ammo_casing/c10mm
desc = "A 10mm bullet casing."
caliber = "10mm"
@@ -364,16 +370,17 @@
projectile_type = /obj/item/projectile/bullet/reusable/foam_dart/riot
icon_state = "foamdart_riot"
/obj/item/ammo_casing/shotgun/dart/assassination
desc = "A specialist shotgun dart designed to inncapacitate and kill the target over time, so you can get very far away from your target"
/obj/item/ammo_casing/shotgun/dart/assassination/New()
..()
reagents.add_reagent("neurotoxin", 6)
/obj/item/ammo_casing/shotgun/assassination
name = "assassination shell"
desc = "A specialist shrapnel shell that has been laced with a silencing toxin."
projectile_type = /obj/item/projectile/bullet/pellet/assassination
icon_state = "gshell"
pellets = 6
variance = 25
/obj/item/ammo_casing/cap
desc = "A cap for children toys."
caliber = "caps"
caliber = "cap"
projectile_type = /obj/item/projectile/bullet/cap
/obj/item/ammo_casing/laser
@@ -87,7 +87,7 @@
delay = 15
/obj/item/ammo_casing/energy/electrode/gun
fire_sound = 'sound/weapons/gunshots/Gunshot.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot.ogg'
e_cost = 100
/obj/item/ammo_casing/energy/electrode/hos //allows balancing of HoS and blueshit guns seperately from other energy weapons
@@ -218,7 +218,7 @@
/obj/item/ammo_casing/energy/clown
projectile_type = /obj/item/projectile/clown
fire_sound = 'sound/weapons/gunshots/Gunshot_smg.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot_smg.ogg'
select_name = "clown"
/obj/item/ammo_casing/energy/sniper
@@ -61,6 +61,14 @@
caliber = "38"
max_ammo = 6
/obj/item/ammo_box/magazine/internal/cylinder/rev38/invisible
name = "finger gun cylinder"
desc = "Wait, what?"
ammo_type = /obj/item/ammo_casing/c38/invisible
/obj/item/ammo_box/magazine/internal/cylinder/rev38/invisible/fake
ammo_type = /obj/item/ammo_casing/c38/invisible/fake
/obj/item/ammo_box/magazine/internal/cylinder/rev762
name = "nagant revolver cylinder"
ammo_type = /obj/item/ammo_casing/n762
@@ -114,6 +122,9 @@
ammo_type = /obj/item/ammo_casing/shotgun/improvised
max_ammo = 1
/obj/item/ammo_box/magazine/internal/shot/improvised/cane
ammo_type = /obj/item/ammo_casing/shotgun/assassination
/obj/item/ammo_box/magazine/internal/shot/riot
name = "riot shotgun internal magazine"
ammo_type = /obj/item/ammo_casing/shotgun/rubbershot
@@ -210,7 +221,7 @@
multiple_sprites = 1
/obj/item/ammo_box/magazine/enforcer
name = "handgun magazine (9mm)"
name = "handgun magazine (9mm rubber)"
icon_state = "enforcer"
ammo_type = /obj/item/ammo_casing/rubber9mm
max_ammo = 8
@@ -239,6 +250,7 @@
return 0
/obj/item/ammo_box/magazine/enforcer/lethal
name = "handgun magazine (9mm)"
ammo_type = /obj/item/ammo_casing/c9mm
/obj/item/ammo_box/magazine/wt550m9
@@ -30,13 +30,13 @@
/obj/item/ammo_casing/magic/spellblade
projectile_type = /obj/item/projectile/magic/spellblade
/obj/item/ammo_casing/magic/slipping
projectile_type = /obj/item/projectile/magic/slipping
/obj/item/ammo_casing/magic/chaos/newshot()
projectile_type = pick(typesof(/obj/item/projectile/magic))
..()
/obj/item/ammo_casing/magic/honk
projectile_type = /obj/item/projectile/bullet/honker
/obj/item/ammo_casing/forcebolt
projectile_type = /obj/item/projectile/forcebolt
@@ -48,5 +48,5 @@
/obj/item/ammo_casing/energy/c3dbullet
projectile_type = /obj/item/projectile/bullet/midbullet3
select_name = "spraydown"
fire_sound = 'sound/weapons/gunshots/Gunshot_MG.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot_mg.ogg'
e_cost = 20
@@ -140,6 +140,14 @@
overlays += image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset)
/obj/item/gun/energy/kinetic_accelerator/experimental
name = "experimental kinetic accelerator"
desc = "A modified version of the proto-kinetic accelerator, with twice the modkit space of the standard version."
icon_state = "kineticgun_h"
item_state = "kineticgun_h"
origin_tech = "combat=5;powerstorage=3;engineering=5"
max_mod_capacity = 200
//Casing
/obj/item/ammo_casing/energy/kinetic
projectile_type = /obj/item/projectile/kinetic
+6 -11
View File
@@ -140,24 +140,19 @@
////////Laser Tag////////////////////
/obj/item/gun/energy/laser/bluetag
/obj/item/gun/energy/laser/tag
name = "laser tag gun"
icon_state = "bluetag"
desc = "Standard issue weapon of the Imperial Guard"
ammo_type = list(/obj/item/ammo_casing/energy/laser/bluetag)
origin_tech = "combat=2;magnets=2"
clumsy_check = 0
needs_permit = 0
ammo_x_offset = 2
selfcharge = 1
/obj/item/gun/energy/laser/redtag
name = "laser tag gun"
/obj/item/gun/energy/laser/tag/blue
icon_state = "bluetag"
ammo_type = list(/obj/item/ammo_casing/energy/laser/bluetag)
/obj/item/gun/energy/laser/tag/red
icon_state = "redtag"
desc = "Standard issue weapon of the Imperial Guard"
ammo_type = list(/obj/item/ammo_casing/energy/laser/redtag)
origin_tech = "combat=2;magnets=2"
clumsy_check = 0
needs_permit = 0
ammo_x_offset = 2
selfcharge = 1
@@ -34,6 +34,7 @@
ammo_x_offset = 2
charge_sections = 3
can_flashlight = 0 // Can't attach or detach the flashlight, and override it's icon update
actions_types = list(/datum/action/item_action/toggle_gunlight)
/obj/item/gun/energy/gun/mini/New()
gun_light = new /obj/item/flashlight/seclite(src)
@@ -66,7 +66,7 @@
icon = 'icons/obj/guns/projectile.dmi'
icon_state = "riotgun"
item_state = "c20r"
fire_sound = 'sound/weapons/gunshots/Gunshot_shotgun.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot_shotgun.ogg'
w_class = WEIGHT_CLASS_BULKY
ammo_type = list(/obj/item/ammo_casing/energy/meteor)
cell_type = /obj/item/stock_parts/cell/potato
@@ -148,7 +148,7 @@
modifystate = -1
origin_tech = "combat=1;materials=3;magnets=2;plasmatech=3;engineering=1"
ammo_type = list(/obj/item/ammo_casing/energy/plasma)
fire_sound = 'sound/weapons/laser.ogg'
fire_sound = 'sound/weapons/Laser.ogg'
usesound = 'sound/items/Welder.ogg'
toolspeed = 1
container_type = OPENCONTAINER
+13 -8
View File
@@ -52,15 +52,20 @@
no_den_usage = 1
fire_sound = 'sound/magic/Staff_Door.ogg'
/obj/item/gun/magic/staff/honk
/obj/item/gun/magic/staff/slipping
name = "staff of slipping"
desc = "An artefact that spits... bananas?"
ammo_type = /obj/item/ammo_casing/magic/slipping
icon_state = "staffofslipping"
item_state = "staffofslipping"
max_charges = 10
recharge_rate = 2
fire_sound = 'sound/items/bikehorn.ogg'
/obj/item/gun/magic/staff/slipping/honkmother
name = "staff of the honkmother"
desc = "Honk"
ammo_type = /obj/item/ammo_casing/magic/honk
icon_state = "honker"
item_state = "honker"
max_charges = 4
recharge_rate = 8
fire_sound = 'sound/items/airhorn.ogg'
desc = "An ancient artefact, sought after by clowns everywhere."
fire_sound = 'sound/items/Airhorn.ogg'
/obj/item/gun/magic/staff/focus
name = "mental focus"
+1 -1
View File
@@ -97,7 +97,7 @@
suppressed = A
S.oldsound = fire_sound
S.initial_w_class = w_class
fire_sound = 'sound/weapons/gunshots/Gunshot_silenced.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot_silenced.ogg'
w_class = WEIGHT_CLASS_NORMAL //so pistols do not fit in pockets when suppressed
A.loc = src
update_icon()
@@ -20,6 +20,32 @@
overlays += "[initial(icon_state)]burst"
icon_state = "[initial(icon_state)][magazine ? "-[magazine.max_ammo]" : ""][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]"
/obj/item/gun/projectile/automatic/attackby(var/obj/item/A as obj, mob/user as mob, params)
. = ..()
if(.)
if(alarmed) // Did the empty clip alarm go off already?
alarmed = 0 // Reset the alarm once a magazine is loaded
return
if(istype(A, /obj/item/ammo_box/magazine))
var/obj/item/ammo_box/magazine/AM = A
if(istype(AM, mag_type))
if(magazine)
to_chat(user, "<span class='notice'>You perform a tactical reload on \the [src], replacing the magazine.</span>")
magazine.loc = get_turf(loc)
magazine.update_icon()
magazine = null
else
to_chat(user, "<span class='notice'>You insert the magazine into \the [src].</span>")
if(alarmed)
alarmed = 0
user.remove_from_mob(AM)
magazine = AM
magazine.loc = src
chamber_round()
A.update_icon()
update_icon()
return 1
/obj/item/gun/projectile/automatic/ui_action_click()
burst_select()
@@ -57,7 +83,7 @@
icon_state = "saber"
mag_type = /obj/item/ammo_box/magazine/smgm9mm
origin_tech = "combat=4;materials=2"
fire_sound = 'sound/weapons/gunshots/Gunshot_pistol.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot_pistol.ogg'
//C-20r SMG//
/obj/item/gun/projectile/automatic/c20r
@@ -67,7 +93,7 @@
item_state = "c20r"
origin_tech = "combat=5;materials=2;syndicate=6"
mag_type = /obj/item/ammo_box/magazine/smgm45
fire_sound = 'sound/weapons/gunshots/Gunshot_smg.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot_smg.ogg'
fire_delay = 2
burst_size = 2
@@ -90,7 +116,7 @@
icon_state = "wt550"
item_state = "arg"
mag_type = /obj/item/ammo_box/magazine/wt550m9
fire_sound = 'sound/weapons/gunshots/Gunshot_rifle.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot_rifle.ogg'
magin_sound = 'sound/weapons/gun_interactions/batrifle_magin.ogg'
magout_sound = 'sound/weapons/gun_interactions/batrifle_magout.ogg'
fire_delay = 2
@@ -109,7 +135,7 @@
icon_state = "mini-uzi"
origin_tech = "combat=4;materials=2;syndicate=4"
mag_type = /obj/item/ammo_box/magazine/uzim9mm
fire_sound = 'sound/weapons/gunshots/Gunshot_pistol.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot_pistol.ogg'
burst_size = 2
//M-90gl Carbine//
@@ -120,7 +146,7 @@
item_state = "m90-4"
origin_tech = "combat=5;materials=2;syndicate=6"
mag_type = /obj/item/ammo_box/magazine/m556
fire_sound = 'sound/weapons/gunshots/Gunshot_rifle.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot_rifle.ogg'
magin_sound = 'sound/weapons/gun_interactions/batrifle_magin.ogg'
magout_sound = 'sound/weapons/gun_interactions/batrifle_magout.ogg'
can_suppress = 0
@@ -195,7 +221,7 @@
slot_flags = 0
origin_tech = "combat=5;materials=1;syndicate=3"
mag_type = /obj/item/ammo_box/magazine/tommygunm45
fire_sound = 'sound/weapons/gunshots/Gunshot_smg.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot_smg.ogg'
can_suppress = 0
burst_size = 4
fire_delay = 1
@@ -209,7 +235,7 @@
slot_flags = 0
origin_tech = "combat=6;engineering=4"
mag_type = /obj/item/ammo_box/magazine/m556
fire_sound = 'sound/weapons/gunshots/Gunshot_MG.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot_mg.ogg'
magin_sound = 'sound/weapons/gun_interactions/batrifle_magin.ogg'
magout_sound = 'sound/weapons/gun_interactions/batrifle_magout.ogg'
can_suppress = 0
@@ -225,7 +251,7 @@
w_class = WEIGHT_CLASS_NORMAL
origin_tech = "combat=6;materials=4;syndicate=6"
mag_type = /obj/item/ammo_box/magazine/m12g
fire_sound = 'sound/weapons/gunshots/Gunshot_shotgun.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot_shotgun.ogg'
magin_sound = 'sound/weapons/gun_interactions/batrifle_magin.ogg'
magout_sound = 'sound/weapons/gun_interactions/batrifle_magout.ogg'
can_suppress = 0
@@ -261,7 +287,7 @@
w_class = WEIGHT_CLASS_NORMAL
origin_tech = "combat=4;materials=2"
mag_type = /obj/item/ammo_box/magazine/laser
fire_sound = 'sound/weapons/gunshots/Gunshot_lascarbine.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot_lascarbine.ogg'
magin_sound = 'sound/weapons/gun_interactions/batrifle_magin.ogg'
magout_sound = 'sound/weapons/gun_interactions/batrifle_magout.ogg'
can_suppress = 0
@@ -6,7 +6,7 @@
w_class = WEIGHT_CLASS_SMALL
origin_tech = "combat=3;materials=2;syndicate=4"
mag_type = /obj/item/ammo_box/magazine/m10mm
fire_sound = 'sound/weapons/gunshots/Gunshot_pistol.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot_pistol.ogg'
magin_sound = 'sound/weapons/gun_interactions/pistol_magin.ogg'
magout_sound = 'sound/weapons/gun_interactions/pistol_magout.ogg'
can_suppress = 1
@@ -85,7 +85,7 @@
icon_state = "deagle"
force = 14.0
mag_type = /obj/item/ammo_box/magazine/m50
fire_sound = 'sound/weapons/gunshots/Gunshot_pistolH.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot_pistolH.ogg'
magin_sound = 'sound/weapons/gun_interactions/hpistol_magin.ogg'
magout_sound = 'sound/weapons/gun_interactions/hpistol_magout.ogg'
can_suppress = 0
@@ -4,7 +4,7 @@
icon_state = "revolver"
mag_type = /obj/item/ammo_box/magazine/internal/cylinder
origin_tech = "combat=3;materials=2"
fire_sound = 'sound/weapons/gunshots/Gunshot_strong.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot_strong.ogg'
/obj/item/gun/projectile/revolver/New()
..()
@@ -144,6 +144,48 @@
desc = initial(desc)
to_chat(user, "<span class='notice'>You remove the modifications on [src]. Now it will fire .38 rounds.</span>")
/obj/item/gun/projectile/revolver/fingergun //Summoned by the Finger Gun spell, from advanced mimery traitor item
name = "\improper finger gun"
desc = "Bang bang bang!"
icon_state = "fingergun"
mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rev38/invisible
origin_tech = ""
flags = ABSTRACT | NODROP | DROPDEL
slot_flags = null
fire_sound = null
fire_sound_text = null
lefthand_file = null
righthand_file = null
clumsy_check = 0 //Stole your uplink! Honk!
needs_permit = 0 //go away beepsky
/obj/item/gun/projectile/revolver/fingergun/fake
desc = "Pew pew pew!"
mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rev38/invisible/fake
/obj/item/gun/projectile/revolver/fingergun/New()
..()
verbs -= /obj/item/gun/projectile/revolver/verb/spin
/obj/item/gun/projectile/revolver/fingergun/shoot_with_empty_chamber(/*mob/living/user as mob|obj*/)
to_chat(usr, "<span class='warning'>You are out of ammo! You holster your fingers.</span>")
qdel(src)
return
/obj/item/gun/projectile/revolver/fingergun/afterattack(atom/target, mob/living/user, flag, params)
if(!user.mind.miming)
to_chat(usr, "<span class='warning'>You must dedicate yourself to silence first. Use your fingers if you wish to holster them.</span>")
return
..()
/obj/item/gun/projectile/revolver/fingergun/attackby(obj/item/A, mob/user, params)
return
/obj/item/gun/projectile/revolver/fingergun/attack_self(mob/living/user)
to_chat(usr, "<span class='notice'>You holster your fingers. Another time.</span>")
qdel(src)
return
/obj/item/gun/projectile/revolver/mateba
name = "\improper Unica 6 auto-revolver"
desc = "A retro high-powered autorevolver typically used by officers of the New Russia military. Uses .357 ammo." //>10mm hole >.357
@@ -277,7 +319,7 @@
flags = CONDUCT
slot_flags = SLOT_BACK
mag_type = /obj/item/ammo_box/magazine/internal/shot/dual
fire_sound = 'sound/weapons/gunshots/Gunshot_shotgun.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot_shotgun.ogg'
sawn_desc = "Omar's coming!"
unique_rename = 1
unique_reskin = 1
@@ -333,7 +375,7 @@
force = 10
slot_flags = null
mag_type = /obj/item/ammo_box/magazine/internal/shot/improvised
fire_sound = 'sound/weapons/gunshots/Gunshot_shotgun.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot_shotgun.ogg'
sawn_desc = "I'm just here for the gasoline."
unique_rename = 0
unique_reskin = 0
@@ -382,10 +424,10 @@
can_unsuppress = 0
slot_flags = null
origin_tech = "" // NO GIVAWAYS
mag_type = /obj/item/ammo_box/magazine/internal/shot/improvised
mag_type = /obj/item/ammo_box/magazine/internal/shot/improvised/cane
sawn_desc = "I'm sorry, but why did you saw your cane in the first place?"
attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed")
fire_sound = 'sound/weapons/gunshots/Gunshot_silenced.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot_silenced.ogg'
suppressed = 1
needs_permit = 0 //its just a cane beepsky.....
@@ -8,7 +8,7 @@
origin_tech = "combat=6;engineering=3;syndicate=6"
mag_type = /obj/item/ammo_box/magazine/mm556x45
weapon_weight = WEAPON_MEDIUM
fire_sound = 'sound/weapons/gunshots/Gunshot_MG.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot_mg.ogg'
magin_sound = 'sound/weapons/gun_interactions/lmg_magin.ogg'
magout_sound = 'sound/weapons/gun_interactions/lmg_magout.ogg'
var/cover_open = 0
@@ -9,7 +9,7 @@
slot_flags = SLOT_BACK
origin_tech = "combat=4;materials=2"
mag_type = /obj/item/ammo_box/magazine/internal/shot
fire_sound = 'sound/weapons/gunshots/Gunshot_shotgun.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot_shotgun.ogg'
var/recentpump = 0 // to prevent spammage
/obj/item/gun/projectile/shotgun/attackby(obj/item/A, mob/user, params)
@@ -208,7 +208,7 @@
item_state = "moistnugget"
slot_flags = 0 //no SLOT_BACK sprite, alas
mag_type = /obj/item/ammo_box/magazine/internal/boltaction
fire_sound = 'sound/weapons/gunshots/Gunshot_rifle.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot_rifle.ogg'
var/bolt_open = 0
/obj/item/gun/projectile/shotgun/boltaction/pump(mob/M)
@@ -6,7 +6,7 @@
recoil = 2
weapon_weight = WEAPON_MEDIUM
mag_type = /obj/item/ammo_box/magazine/sniper_rounds
fire_sound = 'sound/weapons/gunshots/Gunshot_sniper.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot_sniper.ogg'
magin_sound = 'sound/weapons/gun_interactions/batrifle_magin.ogg'
magout_sound = 'sound/weapons/gun_interactions/batrifle_magout.ogg'
fire_delay = 40
@@ -31,6 +31,14 @@
desc = "Syndicate flavoured sniper rifle, it packs quite a punch, a punch to your face"
origin_tech = "combat=7;syndicate=6"
/obj/item/gun/projectile/automatic/sniper_rifle/soporific
name = "Soporific sniper rifle"
desc = "A sniper rifle that's primarily used to fire non-lethal soporific rounds."
origin_tech = "combat=7;syndicate=6"
mag_type = /obj/item/ammo_box/magazine/sniper_rounds/soporific
can_unsuppress = 0
can_suppress = 0
//Normal Boolets
/obj/item/ammo_box/magazine/sniper_rounds
name = "sniper rounds (.50)"
@@ -5,7 +5,7 @@
icon_state = "saber"
item_state = "gun"
mag_type = /obj/item/ammo_box/magazine/toy/smg
fire_sound = 'sound/weapons/gunshots/Gunshot_smg.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot_smg.ogg'
force = 0
throwforce = 0
burst_size = 3
@@ -22,7 +22,7 @@
icon_state = "pistol"
w_class = WEIGHT_CLASS_SMALL
mag_type = /obj/item/ammo_box/magazine/toy/pistol
fire_sound = 'sound/weapons/gunshots/Gunshot.ogg'
fire_sound = 'sound/weapons/gunshots/gunshot.ogg'
can_suppress = 0
burst_size = 1
fire_delay = 0
+32 -1
View File
@@ -30,7 +30,9 @@
var/spread = 0 //amount (in degrees) of projectile spread
var/legacy = FALSE //legacy projectile system
animate_movement = 0
var/ignore_source_check = FALSE
var/damage = 10
var/tile_dropoff = 0 //how much damage should be decremented as the bullet moves
var/tile_dropoff_s = 0 //same as above but for stamina
@@ -54,6 +56,9 @@
var/jitter = 0
var/forcedodge = 0 //to pass through everything
var/dismemberment = 0 //The higher the number, the greater the bonus to dismembering. 0 will not dismember at all.
var/ricochets = 0
var/ricochets_max = 2
var/ricochet_chance = 0
var/log_override = FALSE //whether print to admin attack logs or just keep it in the diary
@@ -157,6 +162,14 @@
/obj/item/projectile/Bump(atom/A, yes)
if(!yes) //prevents double bumps.
return
if(check_ricochet(A) && check_ricochet_flag(A) && ricochets < ricochets_max)
ricochets++
if(A.handle_ricochet(src))
on_ricochet(A)
ignore_source_check = TRUE
range = initial(range)
return TRUE
if(firer)
if(A == firer || (A == firer.loc && istype(A, /obj/mecha))) //cannot shoot yourself or your mech
loc = A.loc
@@ -280,3 +293,21 @@ obj/item/projectile/Crossed(atom/movable/AM) //A mob moving on a tile with a pro
/obj/item/projectile/proc/dumbfire(var/dir)
current = get_ranged_target_turf(src, dir, world.maxx) //world.maxx is the range. Not sure how to handle this better.
fire()
/obj/item/projectile/proc/on_ricochet(atom/A)
return
/obj/item/projectile/proc/check_ricochet()
if(prob(ricochet_chance))
return TRUE
return FALSE
/obj/item/projectile/proc/check_ricochet_flag(atom/A)
if(A.flags_2 & CHECK_RICOCHET_1)
return TRUE
return FALSE
/obj/item/projectile/proc/setAngle(new_angle) //wrapper for overrides.
Angle = new_angle
return TRUE
+21 -17
View File
@@ -37,6 +37,18 @@
stamina = 60
icon_state = "bullet-r"
/obj/item/projectile/bullet/weakbullet2/invisible //finger gun bullets
name = "invisible bullet"
damage = 0
icon_state = null
hitsound_wall = null
/obj/item/projectile/bullet/weakbullet2/invisible/fake
weaken = 0
stamina = 0
nodamage = 1
log_override = TRUE
/obj/item/projectile/bullet/weakbullet3
damage = 20
@@ -97,6 +109,15 @@
range = rand(1, 10)
..()
/obj/item/projectile/bullet/pellet/assassination
damage = 12
tile_dropoff = 1 // slightly less damage and greater damage falloff compared to normal buckshot
/obj/item/projectile/bullet/pellet/assassination/on_hit(atom/target, blocked = 0)
if(..(target, blocked))
var/mob/living/M = target
M.AdjustSilence(2) // HELP MIME KILLING ME IN MAINT
/obj/item/projectile/bullet/pellet/overload/on_hit(atom/target, blocked = 0)
..()
explosion(target, 0, 0, 2)
@@ -188,23 +209,6 @@
weaken = 4
stun = 4
/obj/item/projectile/bullet/honker
name = "banana"
damage = 0
weaken = 5
stun = 5
forcedodge = 1
nodamage = 1
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
hitsound = 'sound/items/bikehorn.ogg'
icon = 'icons/obj/hydroponics/harvest.dmi'
icon_state = "banana"
range = 200
/obj/item/projectile/bullet/honker/New()
..()
SpinAnimation()
/obj/item/projectile/bullet/mime
damage = 0
stun = 5
+31 -1
View File
@@ -19,6 +19,7 @@
nodamage = 0
//explosion values
var/exp_devastate = -1
var/exp_heavy = 0
var/exp_light = 2
var/exp_flash = 3
@@ -55,7 +56,7 @@
/obj/item/projectile/magic/fireball/on_hit(var/target)
. = ..()
var/turf/T = get_turf(target)
explosion(T, -1, 0, 2, 3, 0, flame_range = 2)
explosion(T, exp_devastate, exp_heavy, exp_light, exp_flash, 0, flame_range = exp_fire)
if(ismob(target)) //multiple flavors of pain
var/mob/living/M = target
M.take_overall_damage(0,10) //between this 10 burn, the 10 brute, the explosion brute, and the onfire burn, your at about 65 damage if you stop drop and roll immediately
@@ -301,3 +302,32 @@
flag = "magic"
dismemberment = 50
nodamage = 0
/obj/item/projectile/magic/slipping
name = "magical banana"
icon = 'icons/obj/hydroponics/harvest.dmi'
icon_state = "banana"
var/slip_stun = 5
var/slip_weaken = 5
hitsound = 'sound/items/bikehorn.ogg'
/obj/item/projectile/magic/slipping/New()
..()
SpinAnimation()
/obj/item/projectile/magic/slipping/on_hit(var/atom/target, var/blocked = 0)
if(ishuman(target))
var/mob/living/carbon/human/H = target
H.slip(src, slip_stun, slip_weaken, 0, FALSE, TRUE) //Slips even with noslips/magboots on. NO ESCAPE!
else if(isrobot(target)) //You think you're safe, cyborg? FOOL!
var/mob/living/silicon/robot/R = target
if(!R.incapacitated())
to_chat(target, "<span class='warning'>You get splatted by [src], HONKING your sensors!</span>")
R.Stun(slip_stun)
else if(ismob(target))
var/mob/M = target
if(!M.stunned)
to_chat(target, "<span class='notice'>You get splatted by [src].</span>")
M.Weaken(slip_weaken)
M.Stun(slip_stun)
. = ..()