////////////////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