mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2025-12-20 15:21:29 +00:00
510 lines
14 KiB
Plaintext
510 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(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/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
|
|
caliber = "n762"
|
|
max_ammo = 7
|
|
|
|
/obj/item/ammo_box/magazine/internal/cylinder/cap
|
|
name = "cap gun revolver cylinder"
|
|
desc = "Oh god, this shouldn't be here"
|
|
ammo_type = /obj/item/ammo_casing/cap
|
|
caliber = "cap"
|
|
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/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
|
|
max_ammo = 6
|
|
|
|
/obj/item/ammo_box/magazine/internal/shot/riot/short
|
|
max_ammo = 3
|
|
|
|
/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/cylinder/grenadelauncher/multi
|
|
ammo_type = /obj/item/ammo_casing/a40mm
|
|
max_ammo = 6
|
|
|
|
/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.Cut() // We only want 1 bullet in there
|
|
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/shot/toy/tommygun
|
|
max_ammo = 10
|
|
|
|
///////////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/m10mm/fire
|
|
name = "pistol magazine (10mm incendiary)"
|
|
icon_state = "9x19pI"
|
|
desc = "A gun magazine. Loaded with rounds which ignite the target."
|
|
ammo_type = /obj/item/ammo_casing/c10mm/fire
|
|
|
|
/obj/item/ammo_box/magazine/m10mm/hp
|
|
name = "pistol magazine (10mm HP)"
|
|
icon_state = "9x19pH"
|
|
desc= "A gun magazine. Loaded with hollow-point rounds, extremely effective against unarmored targets, but nearly useless against protective clothing."
|
|
ammo_type = /obj/item/ammo_casing/c10mm/hp
|
|
|
|
/obj/item/ammo_box/magazine/m10mm/ap
|
|
name = "pistol magazine (10mm AP)"
|
|
icon_state = "9x19pA"
|
|
desc= "A gun magazine. Loaded with rounds which penetrate armour, but are less effective against normal targets"
|
|
ammo_type = /obj/item/ammo_casing/c10mm/ap
|
|
|
|
/obj/item/ammo_box/magazine/m45
|
|
name = "handgun magazine (.45)"
|
|
icon_state = "45"
|
|
ammo_type = /obj/item/ammo_casing/c45
|
|
caliber = ".45"
|
|
max_ammo = 8
|
|
multiple_sprites = 1
|
|
|
|
/obj/item/ammo_box/magazine/enforcer
|
|
name = "handgun magazine (9mm rubber)"
|
|
icon_state = "enforcer"
|
|
ammo_type = /obj/item/ammo_casing/rubber9mm
|
|
max_ammo = 8
|
|
multiple_sprites = 1
|
|
caliber = "9mm"
|
|
|
|
/obj/item/ammo_box/magazine/enforcer/update_icon()
|
|
..()
|
|
overlays.Cut()
|
|
|
|
var/ammo = ammo_count()
|
|
if(ammo && is_rubber())
|
|
overlays += image('icons/obj/ammo.dmi', icon_state = "enforcer-r")
|
|
|
|
/obj/item/ammo_box/magazine/enforcer/examine(mob/user)
|
|
. = ..()
|
|
if(get_dist(user, src) <= 2)
|
|
. += "It seems to be loaded with [is_rubber() ? "rubber" : "lethal"] bullets."//only can see the topmost one.
|
|
|
|
/obj/item/ammo_box/magazine/enforcer/proc/is_rubber()//if the topmost bullet is a rubber one
|
|
var/ammo = ammo_count()
|
|
if(!ammo)
|
|
return 0
|
|
if(istype(contents[contents.len], /obj/item/ammo_casing/rubber9mm))
|
|
return 1
|
|
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
|
|
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 (Incendiary 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"
|
|
ammo_type = /obj/item/ammo_casing/c9mm
|
|
caliber = "9mm"
|
|
max_ammo = 21
|
|
materials = list(MAT_METAL = 2000)
|
|
|
|
/obj/item/ammo_box/magazine/smgm9mm/ap
|
|
name = "SMG magazine (Armour Piercing 9mm)"
|
|
ammo_type = /obj/item/ammo_casing/c9mmap
|
|
materials = list(MAT_METAL = 3000)
|
|
|
|
/obj/item/ammo_box/magazine/smgm9mm/toxin
|
|
name = "SMG magazine (Toxin Tipped 9mm)"
|
|
ammo_type = /obj/item/ammo_casing/c9mmtox
|
|
materials = list(MAT_METAL = 3000)
|
|
|
|
/obj/item/ammo_box/magazine/smgm9mm/fire
|
|
name = "SMG Magazine (Incendiary 9mm)"
|
|
ammo_type = /obj/item/ammo_casing/c9mminc
|
|
materials = list(MAT_METAL = 3000)
|
|
|
|
/obj/item/ammo_box/magazine/smgm9mm/update_icon()
|
|
..()
|
|
icon_state = "[initial(icon_state)]-[round(ammo_count()+1,4)]"
|
|
|
|
/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"
|
|
origin_tech = "combat=2"
|
|
ammo_type = /obj/item/ammo_casing/c45
|
|
caliber = ".45"
|
|
max_ammo = 20
|
|
|
|
/obj/item/ammo_box/magazine/smgm45/update_icon()
|
|
..()
|
|
icon_state = "[initial(icon_state)]-[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 slugs)"
|
|
desc = "A drum magazine."
|
|
icon_state = "m12gb"
|
|
ammo_type = /obj/item/ammo_casing/shotgun
|
|
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, 1)*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/stun
|
|
name = "shotgun magazine (12g taser slugs)"
|
|
icon_state = "m12gs"
|
|
ammo_type = /obj/item/ammo_casing/shotgun/stunslug
|
|
|
|
|
|
/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
|
|
|
|
/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-20"
|
|
max_ammo = 20
|
|
|
|
/obj/item/ammo_box/magazine/toy/smg/update_icon()
|
|
..()
|
|
icon_state = "smg9mm-[round(ammo_count()+1,4)]"
|
|
|
|
/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/enforcer
|
|
name = "Enforcer Foam magazine"
|
|
icon_state = "enforcer"
|
|
max_ammo = 8
|
|
multiple_sprites = 1
|
|
ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot
|
|
|
|
/obj/item/ammo_box/magazine/toy/enforcer/update_icon()
|
|
..()
|
|
overlays.Cut()
|
|
|
|
var/ammo = ammo_count()
|
|
if(ammo && is_riot())
|
|
overlays += image('icons/obj/ammo.dmi', icon_state = "enforcer-rd")
|
|
else if(ammo)
|
|
overlays += image('icons/obj/ammo.dmi', icon_state = "enforcer-bd")
|
|
|
|
/obj/item/ammo_box/magazine/toy/enforcer/proc/is_riot()//if the topmost bullet is a riot dart
|
|
var/ammo = ammo_count()
|
|
if(!ammo)
|
|
return 0
|
|
if(istype(contents[contents.len], /obj/item/ammo_casing/caseless/foam_dart/riot))
|
|
return 1
|
|
return 0
|
|
|
|
/obj/item/ammo_box/magazine/toy/smgm45
|
|
name = "donksoft SMG magazine"
|
|
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"
|
|
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)]"
|
|
|
|
/obj/item/ammo_box/magazine/toy/m762/riot
|
|
ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot
|
|
|
|
/obj/item/ammo_box/magazine/laser
|
|
name = "encased laser projector magazine"
|
|
desc = "Fits experimental laser ammo casings."
|
|
icon_state = "laser"
|
|
ammo_type = /obj/item/ammo_casing/laser
|
|
origin_tech = "combat=3"
|
|
caliber = "laser"
|
|
max_ammo = 20
|
|
|
|
/obj/item/ammo_box/magazine/laser/update_icon()
|
|
..()
|
|
icon_state = "[initial(icon_state)]-[CEILING(ammo_count(0)/20, 1)*20]"
|
|
|
|
/obj/item/ammo_box/magazine/toy/smgm45
|
|
name = "donksoft SMG magazine"
|
|
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/smgm45/riot
|
|
ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot
|