mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
The message when firing a gun is removed. To keep things balanced melee attacks (punches, alien attacks, animal attacks, etc...) now show a visual effect (similar to what we current have with item attacks. Fixes muzzle flash effect not appearing for mech guns. Fixes muzzle flash effect not appearing for certain ranged animal. Fixes the item attack effect not being visible to camera viewers and mech occupants. Fixes toy guns foam dart not dropping on the ground when shooting a mob on the same tile as us. Fixes toy smg magazine sprite being invisible sometimes. Fixes foam dart not facing the correct direction when fired. Changes the bullet projectile sprite to have a slight tracer effect so as to be more visible.
502 lines
14 KiB
Plaintext
502 lines
14 KiB
Plaintext
////////////////INTERNAL MAGAZINES//////////////////////
|
|
|
|
/obj/item/ammo_box/magazine/internal
|
|
desc = "Oh god, this shouldn't be here"
|
|
|
|
//internals magazines are accessible, so replace spent ammo if full when trying to put a live one in
|
|
/obj/item/ammo_box/magazine/internal/give_round(obj/item/ammo_casing/R)
|
|
return ..(R,1)
|
|
|
|
|
|
|
|
// Revolver internal mags
|
|
/obj/item/ammo_box/magazine/internal/cylinder
|
|
name = "revolver cylinder"
|
|
ammo_type = /obj/item/ammo_casing/a357
|
|
caliber = "357"
|
|
max_ammo = 7
|
|
|
|
/obj/item/ammo_box/magazine/internal/cylinder/ammo_count(countempties = 1)
|
|
var/boolets = 0
|
|
for(var/obj/item/ammo_casing/bullet in stored_ammo)
|
|
if(bullet && (bullet.BB || countempties))
|
|
boolets++
|
|
|
|
return boolets
|
|
|
|
/obj/item/ammo_box/magazine/internal/cylinder/get_round(keep = 0)
|
|
rotate()
|
|
|
|
var/b = stored_ammo[1]
|
|
if(!keep)
|
|
stored_ammo[1] = null
|
|
|
|
return b
|
|
|
|
/obj/item/ammo_box/magazine/internal/cylinder/proc/rotate()
|
|
var/b = stored_ammo[1]
|
|
stored_ammo.Cut(1,2)
|
|
stored_ammo.Insert(0, b)
|
|
|
|
/obj/item/ammo_box/magazine/internal/cylinder/proc/spin()
|
|
for(var/i in 1 to rand(0, max_ammo*2))
|
|
rotate()
|
|
|
|
|
|
/obj/item/ammo_box/magazine/internal/cylinder/give_round(obj/item/ammo_casing/R, replace_spent = 0)
|
|
if(!R || (caliber && R.caliber != caliber) || (!caliber && R.type != ammo_type))
|
|
return 0
|
|
|
|
for(var/i in 1 to stored_ammo.len)
|
|
var/obj/item/ammo_casing/bullet = stored_ammo[i]
|
|
if(!bullet || !bullet.BB) // found a spent ammo
|
|
stored_ammo[i] = R
|
|
R.loc = src
|
|
|
|
if(bullet)
|
|
bullet.loc = get_turf(src.loc)
|
|
return 1
|
|
|
|
return 0
|
|
|
|
/obj/item/ammo_box/magazine/internal/cylinder/rev38
|
|
name = "detective revolver cylinder"
|
|
ammo_type = /obj/item/ammo_casing/c38
|
|
caliber = "38"
|
|
max_ammo = 6
|
|
|
|
/obj/item/ammo_box/magazine/internal/cylinder/grenademulti
|
|
name = "grenade launcher internal magazine"
|
|
ammo_type = /obj/item/ammo_casing/a40mm
|
|
caliber = "40mm"
|
|
max_ammo = 6
|
|
|
|
/obj/item/ammo_box/magazine/internal/cylinder/rev762
|
|
name = "nagant revolver cylinder"
|
|
ammo_type = /obj/item/ammo_casing/n762
|
|
caliber = "n762"
|
|
max_ammo = 7
|
|
|
|
// Shotgun internal mags
|
|
/obj/item/ammo_box/magazine/internal/shot
|
|
name = "shotgun internal magazine"
|
|
ammo_type = /obj/item/ammo_casing/shotgun/beanbag
|
|
caliber = "shotgun"
|
|
max_ammo = 4
|
|
multiload = 0
|
|
|
|
/obj/item/ammo_box/magazine/internal/shot/ammo_count(countempties = 1)
|
|
if (!countempties)
|
|
var/boolets = 0
|
|
for(var/obj/item/ammo_casing/bullet in stored_ammo)
|
|
if(bullet.BB)
|
|
boolets++
|
|
return boolets
|
|
else
|
|
return ..()
|
|
|
|
|
|
/obj/item/ammo_box/magazine/internal/shot/tube
|
|
name = "dual feed shotgun internal tube"
|
|
ammo_type = /obj/item/ammo_casing/shotgun/rubbershot
|
|
max_ammo = 4
|
|
|
|
/obj/item/ammo_box/magazine/internal/shot/lethal
|
|
ammo_type = /obj/item/ammo_casing/shotgun/buckshot
|
|
|
|
/obj/item/ammo_box/magazine/internal/shot/com
|
|
name = "combat shotgun internal magazine"
|
|
ammo_type = /obj/item/ammo_casing/shotgun/buckshot
|
|
max_ammo = 6
|
|
|
|
/obj/item/ammo_box/magazine/internal/shot/dual
|
|
name = "double-barrel shotgun internal magazine"
|
|
max_ammo = 2
|
|
|
|
/obj/item/ammo_box/magazine/internal/shot/improvised
|
|
name = "improvised shotgun internal magazine"
|
|
ammo_type = /obj/item/ammo_casing/shotgun/improvised
|
|
max_ammo = 1
|
|
|
|
/obj/item/ammo_box/magazine/internal/shot/riot
|
|
name = "riot shotgun internal magazine"
|
|
ammo_type = /obj/item/ammo_casing/shotgun/rubbershot
|
|
max_ammo = 6
|
|
|
|
|
|
|
|
|
|
/obj/item/ammo_box/magazine/internal/grenadelauncher
|
|
name = "grenade launcher internal magazine"
|
|
ammo_type = /obj/item/ammo_casing/a40mm
|
|
caliber = "40mm"
|
|
max_ammo = 1
|
|
|
|
/obj/item/ammo_box/magazine/internal/speargun
|
|
name = "speargun internal magazine"
|
|
ammo_type = /obj/item/ammo_casing/caseless/magspear
|
|
caliber = "speargun"
|
|
max_ammo = 1
|
|
|
|
/obj/item/ammo_box/magazine/internal/rus357
|
|
name = "russian revolver cylinder"
|
|
ammo_type = /obj/item/ammo_casing/a357
|
|
caliber = "357"
|
|
max_ammo = 6
|
|
multiload = 0
|
|
|
|
/obj/item/ammo_box/magazine/internal/rus357/New()
|
|
stored_ammo += new ammo_type(src)
|
|
|
|
/obj/item/ammo_box/magazine/internal/boltaction
|
|
name = "bolt action rifle internal magazine"
|
|
desc = "Oh god, this shouldn't be here"
|
|
ammo_type = /obj/item/ammo_casing/a762
|
|
caliber = "a762"
|
|
max_ammo = 5
|
|
multiload = 1
|
|
|
|
/obj/item/ammo_box/magazine/internal/boltaction/enchanted
|
|
max_ammo =1
|
|
ammo_type = /obj/item/ammo_casing/a762/enchanted
|
|
|
|
|
|
/obj/item/ammo_box/magazine/internal/shot/toy
|
|
ammo_type = /obj/item/ammo_casing/caseless/foam_dart
|
|
caliber = "foam_force"
|
|
max_ammo = 4
|
|
|
|
/obj/item/ammo_box/magazine/internal/shot/toy/crossbow
|
|
max_ammo = 5
|
|
|
|
/obj/item/ammo_box/magazine/internal/minigun
|
|
name = "gatling gun fusion core"
|
|
ammo_type = /obj/item/ammo_casing/caseless/laser/gatling
|
|
caliber = "gatling"
|
|
max_ammo = 5000
|
|
|
|
|
|
|
|
///////////EXTERNAL MAGAZINES////////////////
|
|
|
|
/obj/item/ammo_box/magazine/m10mm
|
|
name = "pistol magazine (10mm)"
|
|
desc = "A gun magazine."
|
|
icon_state = "9x19p"
|
|
origin_tech = "combat=2"
|
|
ammo_type = /obj/item/ammo_casing/c10mm
|
|
caliber = "10mm"
|
|
max_ammo = 8
|
|
multiple_sprites = 2
|
|
|
|
/obj/item/ammo_box/magazine/m45
|
|
name = "handgun magazine (.45)"
|
|
icon_state = "45-8"
|
|
ammo_type = /obj/item/ammo_casing/c45
|
|
caliber = ".45"
|
|
max_ammo = 8
|
|
|
|
/obj/item/ammo_box/magazine/m45/update_icon()
|
|
..()
|
|
icon_state = "45-[ammo_count() ? "8" : "0"]"
|
|
|
|
/obj/item/ammo_box/magazine/wt550m9
|
|
name = "wt550 magazine (4.6x30mm)"
|
|
icon_state = "46x30mmt-20"
|
|
ammo_type = /obj/item/ammo_casing/c46x30mm
|
|
caliber = "4.6x30mm"
|
|
max_ammo = 20
|
|
|
|
/obj/item/ammo_box/magazine/wt550m9/update_icon()
|
|
..()
|
|
icon_state = "46x30mmt-[round(ammo_count(),4)]"
|
|
|
|
/obj/item/ammo_box/magazine/wt550m9/wtap
|
|
name = "wt550 magazine (Armour Piercing 4.6x30mm)"
|
|
ammo_type = /obj/item/ammo_casing/c46x30mmap
|
|
|
|
/obj/item/ammo_box/magazine/wt550m9/wttx
|
|
name = "wt550 magazine (Toxin Tipped 4.6x30mm)"
|
|
ammo_type = /obj/item/ammo_casing/c46x30mmtox
|
|
|
|
/obj/item/ammo_box/magazine/wt550m9/wtic
|
|
name = "wt550 magazine (Incindiary 4.6x30mm)"
|
|
ammo_type = /obj/item/ammo_casing/c46x30mminc
|
|
|
|
/obj/item/ammo_box/magazine/uzim9mm
|
|
name = "uzi magazine (9mm)"
|
|
icon_state = "uzi9mm-32"
|
|
ammo_type = /obj/item/ammo_casing/c9mm
|
|
caliber = "9mm"
|
|
max_ammo = 32
|
|
|
|
/obj/item/ammo_box/magazine/uzim9mm/update_icon()
|
|
..()
|
|
icon_state = "uzi9mm-[round(ammo_count(),4)]"
|
|
|
|
/obj/item/ammo_box/magazine/smgm9mm
|
|
name = "SMG magazine (9mm)"
|
|
icon_state = "smg9mm-42"
|
|
ammo_type = /obj/item/ammo_casing/c9mm
|
|
caliber = "9mm"
|
|
max_ammo = 21
|
|
|
|
/obj/item/ammo_box/magazine/smgm9mm/update_icon()
|
|
..()
|
|
icon_state = "smg9mm-[ammo_count() ? "42" : "0"]"
|
|
|
|
/obj/item/ammo_box/magazine/smgm9mm/ap
|
|
name = "SMG magazine (Armour Piercing 9mm)"
|
|
ammo_type = /obj/item/ammo_casing/c9mmap
|
|
|
|
/obj/item/ammo_box/magazine/smgm9mm/toxin
|
|
name = "SMG magazine (Toxin Tipped 9mm)"
|
|
ammo_type = /obj/item/ammo_casing/c9mmtox
|
|
|
|
/obj/item/ammo_box/magazine/smgm9mm/fire
|
|
name = "SMG Magazine (Incindiary 9mm)"
|
|
ammo_type = /obj/item/ammo_casing/c9mminc
|
|
|
|
/obj/item/ammo_box/magazine/pistolm9mm
|
|
name = "pistol magazine (9mm)"
|
|
icon_state = "9x19p-8"
|
|
ammo_type = /obj/item/ammo_casing/c9mm
|
|
caliber = "9mm"
|
|
max_ammo = 15
|
|
|
|
/obj/item/ammo_box/magazine/pistolm9mm/update_icon()
|
|
..()
|
|
icon_state = "9x19p-[ammo_count() ? "8" : "0"]"
|
|
|
|
/obj/item/ammo_box/magazine/smgm45
|
|
name = "SMG magazine (.45)"
|
|
icon_state = "c20r45-24"
|
|
origin_tech = "combat=2"
|
|
ammo_type = /obj/item/ammo_casing/c45nostamina
|
|
caliber = ".45"
|
|
max_ammo = 24
|
|
|
|
/obj/item/ammo_box/magazine/smgm45/update_icon()
|
|
..()
|
|
icon_state = "c20r45-[round(ammo_count(),2)]"
|
|
|
|
obj/item/ammo_box/magazine/tommygunm45
|
|
name = "drum magazine (.45)"
|
|
icon_state = "drum45"
|
|
ammo_type = /obj/item/ammo_casing/c45
|
|
caliber = ".45"
|
|
max_ammo = 50
|
|
|
|
/obj/item/ammo_box/magazine/m50
|
|
name = "handgun magazine (.50ae)"
|
|
icon_state = "50ae"
|
|
origin_tech = "combat=2"
|
|
ammo_type = /obj/item/ammo_casing/a50
|
|
caliber = ".50"
|
|
max_ammo = 7
|
|
multiple_sprites = 1
|
|
|
|
/obj/item/ammo_box/magazine/m75
|
|
name = "specialized magazine (.75)"
|
|
icon_state = "75"
|
|
ammo_type = /obj/item/ammo_casing/caseless/a75
|
|
caliber = "75"
|
|
multiple_sprites = 2
|
|
max_ammo = 8
|
|
|
|
/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/a556
|
|
caliber = "a556"
|
|
max_ammo = 30
|
|
multiple_sprites = 2
|
|
|
|
/obj/item/ammo_box/magazine/m12g
|
|
name = "shotgun magazine (12g taser slugs)"
|
|
desc = "A drum magazine."
|
|
icon_state = "m12gs"
|
|
ammo_type = /obj/item/ammo_casing/shotgun/stunslug
|
|
origin_tech = "combat=3;syndicate=1"
|
|
caliber = "shotgun"
|
|
max_ammo = 8
|
|
|
|
/obj/item/ammo_box/magazine/m12g/update_icon()
|
|
..()
|
|
icon_state = "[initial(icon_state)]-[Ceiling(ammo_count(0)/8)*8]"
|
|
|
|
/obj/item/ammo_box/magazine/m12g/buckshot
|
|
name = "shotgun magazine (12g buckshot slugs)"
|
|
icon_state = "m12gb"
|
|
ammo_type = /obj/item/ammo_casing/shotgun/buckshot
|
|
|
|
/obj/item/ammo_box/magazine/m12g/slug
|
|
name = "shotgun magazine (12g slugs)"
|
|
icon_state = "m12gb"
|
|
ammo_type = /obj/item/ammo_casing/shotgun
|
|
|
|
/obj/item/ammo_box/magazine/m12g/dragon
|
|
name = "shotgun magazine (12g dragon's breath)"
|
|
icon_state = "m12gf"
|
|
ammo_type = /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath
|
|
|
|
/obj/item/ammo_box/magazine/m12g/bioterror
|
|
name = "shotgun magazine (12g bioterror)"
|
|
icon_state = "m12gt"
|
|
ammo_type = /obj/item/ammo_casing/shotgun/dart/bioterror
|
|
|
|
/obj/item/ammo_box/magazine/m12g/breach
|
|
name = "shotgun magazine (12g breacher slugs)"
|
|
icon_state = "m12gbc"
|
|
ammo_type = /obj/item/ammo_casing/shotgun/breaching
|
|
|
|
|
|
//// SNIPER MAGAZINES
|
|
|
|
/obj/item/ammo_box/magazine/sniper_rounds
|
|
name = "sniper rounds (.50)"
|
|
icon_state = ".50mag"
|
|
origin_tech = "combat=6;syndicate=2"
|
|
ammo_type = /obj/item/ammo_casing/point50
|
|
max_ammo = 6
|
|
caliber = ".50"
|
|
|
|
/obj/item/ammo_box/magazine/sniper_rounds/update_icon()
|
|
if(ammo_count())
|
|
icon_state = "[initial(icon_state)]-ammo"
|
|
else
|
|
icon_state = "[initial(icon_state)]"
|
|
|
|
/obj/item/ammo_box/magazine/sniper_rounds/soporific
|
|
name = "sniper rounds (Zzzzz)"
|
|
desc = "Soporific sniper rounds, designed for happy days and dead quiet nights..."
|
|
icon_state = "soporific"
|
|
origin_tech = "combat=6;syndicate=3"
|
|
ammo_type = /obj/item/ammo_casing/soporific
|
|
max_ammo = 3
|
|
caliber = ".50"
|
|
|
|
/obj/item/ammo_box/magazine/sniper_rounds/haemorrhage
|
|
name = "sniper rounds (Bleed)"
|
|
desc = "Haemorrhage sniper rounds, leaves your target in a pool of crimson pain"
|
|
icon_state = "haemorrhage"
|
|
ammo_type = /obj/item/ammo_casing/haemorrhage
|
|
max_ammo = 5
|
|
caliber = ".50"
|
|
|
|
/obj/item/ammo_box/magazine/sniper_rounds/penetrator
|
|
name = "sniper rounds (penetrator)"
|
|
desc = "An extremely powerful round capable of passing straight through cover and anyone unfortunate enough to be behind it."
|
|
ammo_type = /obj/item/ammo_casing/penetrator
|
|
origin_tech = "combat=6;syndicate=3"
|
|
max_ammo = 5
|
|
|
|
|
|
//// SAW MAGAZINES
|
|
|
|
/obj/item/ammo_box/magazine/mm556x45
|
|
name = "box magazine (5.56x45mm)"
|
|
icon_state = "a762-50"
|
|
origin_tech = "combat=2"
|
|
ammo_type = /obj/item/ammo_casing/mm556x45
|
|
caliber = "mm55645"
|
|
max_ammo = 50
|
|
|
|
/obj/item/ammo_box/magazine/mm556x45/bleeding
|
|
name = "box magazine (Bleeding 5.56x45mm)"
|
|
origin_tech = "combat=3"
|
|
ammo_type = /obj/item/ammo_casing/mm556x45/bleeding
|
|
|
|
/obj/item/ammo_box/magazine/mm556x45/hollow
|
|
name = "box magazine (Hollow-Point 5.56x45mm)"
|
|
origin_tech = "combat=3"
|
|
ammo_type = /obj/item/ammo_casing/mm556x45/hollow
|
|
|
|
/obj/item/ammo_box/magazine/mm556x45/ap
|
|
name = "box magazine (Armor Penetrating 5.56x45mm)"
|
|
origin_tech = "combat=4"
|
|
ammo_type = /obj/item/ammo_casing/mm556x45/ap
|
|
|
|
/obj/item/ammo_box/magazine/mm556x45/incen
|
|
name = "box magazine (Incendiary 5.56x45mm)"
|
|
origin_tech = "combat=4"
|
|
ammo_type = /obj/item/ammo_casing/mm556x45/incen
|
|
|
|
/obj/item/ammo_box/magazine/mm556x45/update_icon()
|
|
..()
|
|
icon_state = "a762-[round(ammo_count(),10)]"
|
|
|
|
|
|
|
|
|
|
////TOY GUN MAGAZINES
|
|
|
|
/obj/item/ammo_box/magazine/toy
|
|
name = "foam force META magazine"
|
|
ammo_type = /obj/item/ammo_casing/caseless/foam_dart
|
|
caliber = "foam_force"
|
|
|
|
/obj/item/ammo_box/magazine/toy/smg
|
|
name = "foam force SMG magazine"
|
|
icon_state = "smg9mm-42"
|
|
max_ammo = 20
|
|
|
|
/obj/item/ammo_box/magazine/toy/smg/update_icon()
|
|
..()
|
|
if(ammo_count())
|
|
icon_state = "smg9mm-42"
|
|
else
|
|
icon_state = "smg9mm-0"
|
|
|
|
/obj/item/ammo_box/magazine/toy/smg/riot
|
|
ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot
|
|
|
|
/obj/item/ammo_box/magazine/toy/pistol
|
|
name = "foam force pistol magazine"
|
|
icon_state = "9x19p"
|
|
max_ammo = 8
|
|
multiple_sprites = 2
|
|
|
|
/obj/item/ammo_box/magazine/toy/pistol/riot
|
|
ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot
|
|
|
|
/obj/item/ammo_box/magazine/toy/smgm45
|
|
name = "donksoft SMG magazine"
|
|
caliber = "foam_force"
|
|
ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot
|
|
max_ammo = 20
|
|
|
|
/obj/item/ammo_box/magazine/toy/smgm45/update_icon()
|
|
..()
|
|
icon_state = "c20r45-[round(ammo_count(),2)]"
|
|
|
|
/obj/item/ammo_box/magazine/toy/m762
|
|
name = "donksoft box magazine"
|
|
caliber = "foam_force"
|
|
ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot
|
|
max_ammo = 50
|
|
|
|
/obj/item/ammo_box/magazine/toy/m762/update_icon()
|
|
..()
|
|
icon_state = "a762-[round(ammo_count(),10)]"
|
|
|
|
|
|
|
|
|
|
//// RECHARGEABLE MAGAZINES
|
|
|
|
/obj/item/ammo_box/magazine/recharge
|
|
name = "power pack"
|
|
desc = "A rechargeable, detachable battery that serves as a magazine for laser rifles."
|
|
icon_state = "oldrifle-20"
|
|
ammo_type = /obj/item/ammo_casing/caseless/laser
|
|
caliber = "laser"
|
|
max_ammo = 20
|
|
|
|
/obj/item/ammo_box/magazine/recharge/update_icon()
|
|
desc = "[initial(desc)] It has [stored_ammo.len] shot\s left."
|
|
icon_state = "oldrifle-[round(ammo_count(),4)]"
|
|
|
|
/obj/item/ammo_box/magazine/recharge/attack_self() //No popping out the "bullets"
|
|
return |