diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm index 51bd7dee36e..34cf9419d90 100644 --- a/code/game/gamemodes/wizard/rightandwrong.dm +++ b/code/game/gamemodes/wizard/rightandwrong.dm @@ -1,6 +1,7 @@ /mob/proc/rightandwrong() + usr << "You summoned guns!" message_admins("[key_name_admin(usr, 1)] summoned guns!") for(var/mob/living/carbon/human/H in player_list) if(H.stat == 2 || !(H.client)) continue @@ -16,7 +17,7 @@ for(var/datum/objective/OBJ in H.mind.objectives) H << "Objective #[obj_count]: [OBJ.explanation_text]" obj_count++ - var/randomize = pick("taser","egun","laser","revolver","smg","nuclear","deagle","gyrojet","pulse","silenced","cannon","shotgun","mateba","uzi","crossbow") + var/randomize = pick("taser","egun","laser","revolver","smg","nuclear","deagle","gyrojet","pulse","silenced","cannon","shotgun","mateba","uzi","crossbow","saw") switch (randomize) if("taser") new /obj/item/weapon/gun/energy/taser(get_turf(H)) @@ -48,3 +49,5 @@ new /obj/item/weapon/gun/projectile/automatic/mini_uzi(get_turf(H)) if("crossbow") new /obj/item/weapon/gun/energy/crossbow(get_turf(H)) + if("saw") + new /obj/item/weapon/gun/projectile/automatic/l6_saw(get_turf(H)) \ No newline at end of file diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 78734f9bb64..22dabe6f2e2 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -133,3 +133,20 @@ R.internals = src R.icon_state="Miner+j" return 1 + + +/obj/item/borg/upgrade/syndicate/ + name = "Illegal Equipment Module" + desc = "Unlocks the hidden, deadlier functions of a cyborg" + construction_cost = list("metal"=10000,"glass"=15000,"diamond" = 10000) + icon_state = "cyborg_upgrade3" + require_module = 1 + +/obj/item/borg/upgrade/syndicate/action(var/mob/living/silicon/robot/R) + if(..()) return 0 + + if(R.emagged == 1) + return 0 + + R.emagged = 1 + return 1 \ No newline at end of file diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 5996319945d..ddb7796ec12 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -92,6 +92,11 @@ else return !density +/obj/structure/grille/bullet_act(var/obj/item/projectile/Proj) + if(!Proj) return + src.health -= Proj.damage*0.2 + healthcheck() + return 0 /obj/structure/grille/attackby(obj/item/weapon/W as obj, mob/user as mob) if(iswirecutter(W)) diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index 12a7a686a53..6bc9821ad8a 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -92,3 +92,18 @@ icon_state = "75" ammo_type = "/obj/item/ammo_casing/a75" max_ammo = 0 + +/obj/item/ammo_magazine/a762 + name = "magazine (a762)" + icon_state = "a762-50" + origin_tech = "combat=2" + ammo_type = "/obj/item/ammo_casing/a762" + max_ammo = 50 + multiple_sprites = 1 + +/obj/item/ammo_magazine/a762/empty + name = "magazine (a762)" + icon_state = "a762-0" + ammo_type = "/obj/item/ammo_casing/a762" + max_ammo = 0 + multiple_sprites = 1 \ No newline at end of file diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm index 3b861cde463..e9a5a09a419 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/bullets.dm @@ -88,4 +88,9 @@ desc = "A dart for use in shotguns." icon_state = "blshell" //someone, draw the icon, please. projectile_type = "/obj/item/projectile/energy/dart" - m_amt = 12500 \ No newline at end of file + m_amt = 12500 + +/obj/item/ammo_casing/a762 + desc = "A 7.62 bullet casing." + caliber = "a762" + projectile_type = "/obj/item/projectile/bullet" \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 5d2bf620a7b..4b7bd2d6c60 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -65,4 +65,116 @@ +/obj/item/weapon/gun/projectile/automatic/l6_saw + name = "L6 SAW" + desc = "A rather traditionally made light machine gun with a pleasantly lacquered wooden pistol grip. Has 'Aussec Armoury- 2531' engraved on the reciever" + icon_state = "l4closed100" + item_state = "l6closedmag" + max_shells = 50 + caliber = "a762" + origin_tech = "combat=5;materials=1;syndicate=2" + ammo_type = "/obj/item/ammo_casing/a762" + fire_sound = 'sound/weapons/Gunshot_smg.ogg' + load_method = 2 + //recoil = 1 + var/cover_open = 0 + var/mag_inserted = 1 + + attack_self(mob/user as mob) + if(!cover_open && mag_inserted) + cover_open = 1 + icon_state = "l4open[round(((loaded.len)*2),25)]" + item_state = "l6openmag" + usr << "You open the [src]'s cover, allowing you to swap magazines." + else if(cover_open && mag_inserted) + cover_open = 0 + icon_state = "l4closed[round(((loaded.len)*2),25)]" + item_state = "l6closedmag" + usr << "You close the [src]'s cover." + else if(!cover_open && !mag_inserted) + cover_open = 1 + icon_state = "l4opennomag" + item_state = "l6opennomag" + usr << "You open the [src]'s cover, allowing you to swap magazines." + else if(cover_open && !mag_inserted) + cover_open = 0 + icon_state = "l4closednomag" + item_state = "l6closednomag" + usr << "You close the [src]'s cover." + update_icon() //another update_icon() thing here, I know it's repeated in afterattack() but this one also takes into account cover_open + if(!cover_open) + icon_state = "l4closed[round(((loaded.len)*2),25)]" + item_state = "l6closedmag" + else + icon_state = "l4open[round(((loaded.len)*2),25)]" + item_state = "l6openmag" + //update_inv_l_hand() + //update_inv_r_hand() + + afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params) //what I tried to do here is just add a check to see if the cover is open or not and add an icon_state change because I can't figure out how c-20rs do it with overlays + if(cover_open) + usr << "The SAW cover is open! Close it before firing!" + else + ..() + if(!cover_open && mag_inserted) + icon_state = "l4closed[round(((loaded.len)*2),25)]" + item_state = "l6closedmag" + else if(!cover_open && !mag_inserted) + icon_state = "l4closednomag" + item_state = "l6nomag" + //update_inv_l_hand() + //update_inv_r_hand() + + /obj/item/weapon/gun/projectile/automatic/l6_saw/verb/remove_magazine() + set category = "Object" + set name = "Remove SAW magazine." + set src in view(1) + var/mob/M = usr + + if(usr.canmove && !usr.stat && !usr.restrained() && !M.paralysis && ! M.stunned) + if(!cover_open) + usr << "The [src]'s cover is closed! You can't remove the magazine!" + else if (!cover_open && !mag_inserted) + usr << "The [src]'s cover is open but there's no magazine for you to remove!" + else if (cover_open && mag_inserted) + drop_mag() + loaded = list() + mag_inserted = 0 + icon_state = "l4opennomag" + item_state = "l6opennomag" + usr << "You remove the magazine from the [src]!" + //update_inv_l_hand() + //update_inv_r_hand() + + /obj/item/weapon/gun/projectile/automatic/l6_saw/proc/drop_mag() + empty_mag = new /obj/item/ammo_magazine/a762(src) + empty_mag.stored_ammo = loaded + empty_mag.icon_state = "a762-[round((loaded.len),10)]" + //desc = "There are [loaded] shells left!" + empty_mag.loc = get_turf(src.loc) + empty_mag = null + + + /obj/item/weapon/gun/projectile/automatic/l6_saw/attackby(var/obj/item/A as obj, mob/user as mob) + if(!cover_open) + usr << "The [src]'s cover is closed! You can't insert a new mag!" + else if (cover_open && mag_inserted) + usr << "The [src] already has a magazine inserted!" + else if (cover_open && !mag_inserted) + mag_inserted = 1 + usr << "You insert the magazine!" + icon_state = "l4openmag[round(((loaded.len)*2),25)]" + item_state = "l6openmag" + update_icon() + ..() + //update_inv_l_hand() something pete suggested. Dunno if this is a proc already defined way up in the obj/ thing + //update_inv_r_hand() or if it's something I have to define myself + + +/* The thing I found with guns in ss13 is that they don't seem to simulate the rounds in the magazine in the gun. + Afaik, since projectile.dm features a revolver, this would make sense since the magazine is part of the gun. + However, it looks like subsequent guns that use removable magazines don't take that into account and just get + around simulating a removable magazine by adding the casings into the loaded list and spawning an empty magazine + when the gun is out of rounds. Which means you can't eject magazines with rounds in them. The below is a very + rough and poor attempt at making that happen. -Ausops */ diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index e59190f7c0d..8918df034fa 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -43,4 +43,7 @@ damage = 5 stun = 10 weaken = 10 - stutter = 10 \ No newline at end of file + stutter = 10 + +/obj/item/projectile/bullet/a762 + damage = 25 \ No newline at end of file diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 092dc5c24e1..039fb9acbbb 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -1580,3 +1580,14 @@ datum/design/security_hud src.pixel_y = rand(-5.0, 5) +///////////////////////////////////////// +//////////////Borg Upgrades////////////// +///////////////////////////////////////// +datum/design/borg_syndicate_module + name = "Borg Illegal Weapons Upgrade" + desc = "Allows for the construction of illegal upgrades for cyborgs" + id = "borg_syndicate_module" + build_type = MECHFAB + req_tech = list("combat" = 4, "syndicate" = 3) + build_path = "/obj/item/borg/upgrade/syndicate" + category = "Cyborg Upgrade Modules" diff --git a/html/changelog.html b/html/changelog.html index 1050e16390e..7c485a94dbe 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -48,6 +48,15 @@ Stuff which is in development and not yet visible to players or just code relate should be listed in the changelog upon commit tho. Thanks. --> +