diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 781f3ff9009..2034e1db2aa 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -137,9 +137,10 @@ var/list/uplink_items = list() surplus = 0 /datum/uplink_item/dangerous/crossbow - name = "Miniature Auto Crossbow" - desc = "A short bow mounted across a tiller in miniature. Small enough to fit into a pocket or slip into a bag unnoticed. It fires bolts tipped with a paralyzing toxin collected from a rare organism." - item = /obj/item/weapon/gun/projectile/automatic/crossbow + name = "Miniature Energy Crossbow" + desc = "A short bow mounted across a tiller in miniature. Small enough to fit into a pocket or slip into a bag unnoticed. It fires bolts tipped with a paralyzing toxin collected from a rare organism. \ + The bow generates bolts using an internal power source but must be manually charged between shots." + item = /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow cost = 10 excludefrom = list(/datum/game_mode/nuclear) surplus = 50 @@ -230,13 +231,6 @@ var/list/uplink_items = list() item = /obj/item/ammo_box/magazine/m10mm cost = 1 -/datum/uplink_item/ammo/crossbow - name = "Poison-tipped Crossbow Bolts (x4)" - desc = "A four pack of paralyzing crossbow bolts, for hunting big game." - item = /obj/item/ammo_box/crossbow - cost = 2 - excludefrom = list(/datum/game_mode/nuclear) - /datum/uplink_item/ammo/revolver name = "Speed Loader - .357" desc = "A speed loader that contains seven additional .357 Magnum rounds for the syndicate revolver. For when you really need a lot of things dead." diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm index 93f32bbf153..96ce6de8815 100644 --- a/code/game/gamemodes/wizard/rightandwrong.dm +++ b/code/game/gamemodes/wizard/rightandwrong.dm @@ -1,7 +1,7 @@ //In this file: Summon Magic/Summon Guns/Summon Events /proc/rightandwrong(var/summon_type, var/mob/user, var/survivor_probability) //0 = Summon Guns, 1 = Summon Magic - var/list/gunslist = list("taser","egun","laser","revolver","detective","c20r","nuclear","deagle","gyrojet","pulse","suppressed","cannon","doublebarrel","shotgun","combatshotgun","bulldog","mateba","sabr","uzi","crossbow","saw","car") + var/list/gunslist = list("taser","egun","laser","revolver","detective","c20r","nuclear","deagle","gyrojet","pulse","suppressed","cannon","doublebarrel","shotgun","combatshotgun","bulldog","mateba","sabr","uzi","crossbow","saw","car","speargun") var/list/magiclist = list("fireball","smoke","blind","mindswap","forcewall","knock","horsemask","charge", "summonitem", "wandnothing", "wanddeath", "wandresurrection", "wandpolymorph", "wandteleport", "wanddoor", "wandfireball", "staffchange", "staffhealing", "armor", "scrying", "staffdoor", "special") var/list/magicspeciallist = list("staffchange","staffanimation", "wandbelt", "contract", "staffchaos") @@ -68,11 +68,13 @@ if("sabr") new /obj/item/weapon/gun/projectile/automatic(get_turf(H)) if("crossbow") - new /obj/item/weapon/gun/projectile/automatic/crossbow(get_turf(H)) + new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow(get_turf(H)) if("saw") new /obj/item/weapon/gun/projectile/automatic/l6_saw(get_turf(H)) if("car") new /obj/item/weapon/gun/projectile/automatic/m90(get_turf(H)) + if("speargun") + new /obj/item/weapon/gun/projectile/automatic/speargun(get_turf(H)) else switch (randomizemagic) if("fireball") diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index f28044bff28..c56027936ce 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -36,6 +36,7 @@ message_admins("[key_name(usr)]? has primed a [name] for detonation at [A.name] (JMP).") log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]).") user << "You prime the [name]! [det_time / 10] second\s!" + playsound(user.loc, 'sound/weapons/armbomb.ogg', 60, 1) active = 1 icon_state = initial(icon_state) + "_active" if(iscarbon(user)) diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index dcc30b68420..eb815c35be9 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -58,6 +58,7 @@ if(!active) if(clown_check(user)) user << "You prime the [name]! [det_time/10] seconds!" + playsound(user.loc, 'sound/weapons/armbomb.ogg', 60, 1) active = 1 icon_state = initial(icon_state) + "_active" add_fingerprint(user) diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 0858856ab77..dbbd74dbd19 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -276,7 +276,7 @@ add_fingerprint(usr) - if(!prevent_warning && !istype(W, /obj/item/weapon/gun/projectile/automatic/crossbow)) + if(!prevent_warning && !istype(W, /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow)) for(var/mob/M in viewers(usr, null)) if(M == usr) usr << "You put [W] [preposition]to [src]." diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 95318319f48..85f2b2e30fb 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -13,7 +13,7 @@ return if("stealth") - new /obj/item/weapon/gun/projectile/automatic/crossbow(src) + new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow(src) new /obj/item/weapon/pen/sleepy(src) new /obj/item/device/chameleon(src) return diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index f6a8d2ef349..164caf56ce1 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -796,7 +796,7 @@ var/global/list/g_fancy_list_of_types = null qdel(briefcase_item) for(var/i=3, i>0, i--) sec_briefcase.contents += new /obj/item/weapon/spacecash/c1000 - sec_briefcase.contents += new /obj/item/weapon/gun/projectile/automatic/crossbow + sec_briefcase.contents += new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow sec_briefcase.contents += new /obj/item/weapon/gun/projectile/revolver/mateba sec_briefcase.contents += new /obj/item/ammo_box/a357 sec_briefcase.contents += new /obj/item/weapon/c4 diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 521b6595861..00c1ac86c4a 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -342,7 +342,7 @@ mob/living/carbon/proc/handle_hallucinations() return var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/item/ammo_box/a357,\ - /obj/item/weapon/gun/projectile/automatic/crossbow, /obj/item/weapon/melee/energy/sword/saber,\ + /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow, /obj/item/weapon/melee/energy/sword/saber,\ /obj/item/weapon/storage/box/syndicate, /obj/item/weapon/storage/box/emps,\ /obj/item/weapon/cartridge/syndicate, /obj/item/clothing/under/chameleon,\ /obj/item/clothing/shoes/syndigaloshes, /obj/item/weapon/card/id/syndicate,\ diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index 0234f53051d..6b29a4e9a29 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -165,10 +165,11 @@ icon_state = "40mmHE" projectile_type = /obj/item/projectile/bullet/a40mm -/obj/item/ammo_casing/caseless/bolt //xbow - name = "poison crossbow bolt" - desc = "A reusable crossbow bolt tipped with specialized carpotoxin." - projectile_type = /obj/item/projectile/energy/bolt - caliber = "crossbow" - icon = 'icons/obj/projectiles.dmi' - icon_state = "cbbolt" \ No newline at end of file +/obj/item/ammo_casing/caseless/magspear + name = "magnetic spear" + desc = "A reusable spear that is typically loaded into kinetic spearguns." + projectile_type = /obj/item/projectile/bullet/magspear + caliber = "speargun" + icon_state = "magspear" + throwforce = 15 //still deadly when thrown + throw_speed = 3 \ No newline at end of file diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index f9d940c3bfb..8f05c92eaa4 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -38,10 +38,4 @@ icon_state = "40mm" ammo_type = /obj/item/ammo_casing/a40mm max_ammo = 4 - multiple_sprites = 1 - -/obj/item/ammo_box/crossbow - name = "ammo box (crossbow bolts)" - icon_state = "xbow" - ammo_type = /obj/item/ammo_casing/caseless/bolt - max_ammo = 4 \ No newline at end of file + multiple_sprites = 1 \ No newline at end of file diff --git a/code/modules/projectiles/ammunition/energy.dm b/code/modules/projectiles/ammunition/energy.dm index 9658df36be9..75fa469ed91 100644 --- a/code/modules/projectiles/ammunition/energy.dm +++ b/code/modules/projectiles/ammunition/energy.dm @@ -124,4 +124,14 @@ /obj/item/ammo_casing/energy/wormhole/orange projectile_type = /obj/item/projectile/beam/wormhole/orange - select_name = "orange" \ No newline at end of file + select_name = "orange" + +/obj/item/ammo_casing/energy/bolt + projectile_type = /obj/item/projectile/energy/bolt + select_name = "bolt" + e_cost = 500 + fire_sound = 'sound/weapons/Genhit.ogg' + +/obj/item/ammo_casing/energy/bolt/large + projectile_type = /obj/item/projectile/energy/bolt/large + select_name = "heavy bolt" \ No newline at end of file diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index ff130fc53ae..d615969667b 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -90,14 +90,11 @@ ammo_type = /obj/item/ammo_casing/a40mm max_ammo = 6 -/obj/item/ammo_box/magazine/internal/cylinder/crossbow - name = "autocrossbow internal magazine" - ammo_type = /obj/item/ammo_casing/caseless/bolt - caliber = "crossbow" - max_ammo = 10 - -/obj/item/ammo_box/magazine/internal/cylinder/crossbow/large - max_ammo = 15 +/obj/item/ammo_box/magazine/internal/cylinder/speargun + name = "speargun internal magazine" + ammo_type = /obj/item/ammo_casing/caseless/magspear + caliber = "speargun" + max_ammo = 1 ///////////EXTERNAL MAGAZINES//////////////// diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 69b5049f25e..70e3a0a6a5e 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -119,15 +119,39 @@ recent_reload = 0 ..() -/obj/item/weapon/gun/energy/kinetic_accelerator/attack_self(var/mob/living/user/L) +/obj/item/weapon/gun/energy/kinetic_accelerator/attack_self(mob/living/user) if(overheat || recent_reload) return power_supply.give(500) - playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1) + if(!suppressed) + playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1) + else + playsound(user, 'sound/weapons/kenetic_reload.ogg', 60, 1) recent_reload = 1 update_icon() return +/obj/item/weapon/gun/energy/kinetic_accelerator/crossbow + name = "mini energy crossbow" + desc = "A weapon favored by syndicate stealth specialists." + icon_state = "crossbow" + item_state = "crossbow" + w_class = 2 + m_amt = 2000 + origin_tech = "combat=2;magnets=2;syndicate=5" + suppressed = 1 + ammo_type = list(/obj/item/ammo_casing/energy/bolt) + +/obj/item/weapon/gun/energy/kinetic_accelerator/crossbow/large + name = "energy crossbow" + desc = "A reverse engineered weapon using syndicate technology." + icon_state = "crossbowlarge" + w_class = 3 + m_amt = 4000 + origin_tech = "combat=2;magnets=2;syndicate=3" //can be further researched for more syndie tech + suppressed = 0 + ammo_type = list(/obj/item/ammo_casing/energy/bolt/large) + /obj/item/weapon/gun/energy/disabler name = "disabler" desc = "A self-defense weapon that exhausts organic targets, weakening them until they collapse." diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 52fafa9fa6e..2e0c76b1d33 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -47,7 +47,7 @@ /obj/item/weapon/gun/projectile/automatic/proc/burst_select() var/mob/living/carbon/human/user = usr select = !select - if(select) + if(!select) burst_size = 1 fire_delay = 0 user << "You switch to semi-automatic." diff --git a/code/modules/projectiles/guns/projectile/launchers.dm b/code/modules/projectiles/guns/projectile/launchers.dm index 50220780acd..88bc5406c2a 100644 --- a/code/modules/projectiles/guns/projectile/launchers.dm +++ b/code/modules/projectiles/guns/projectile/launchers.dm @@ -34,6 +34,7 @@ mag_type = /obj/item/ammo_box/magazine/m75 burst_size = 1 fire_delay = 0 + can_suppress = 0 action_button_name = null /obj/item/weapon/gun/projectile/automatic/gyropistol/process_chamber(var/eject_casing = 0, var/empty_chamber = 1) @@ -44,44 +45,33 @@ icon_state = "[initial(icon_state)][magazine ? "loaded" : ""]" return -/obj/item/weapon/gun/projectile/automatic/crossbow - name = "mini auto-crossbow" - desc = "A weapon favored by syndicate stealth specialists. Fires specialized poison bolts." - icon_state = "crossbow" - item_state = "crossbow" - w_class = 2 - m_amt = 2000 - origin_tech = "combat=2;magnets=2;syndicate=5" - suppressed = 1 - mag_type = /obj/item/ammo_box/magazine/internal/cylinder/crossbow - fire_sound = 'sound/weapons/genhit.ogg' +/obj/item/weapon/gun/projectile/automatic/speargun + name = "kinetic speargun" + desc = "A weapon favored by carp hunters. Fires specialized spears using kinetic energy." + icon_state = "speargun" + item_state = "misteratmos" //professional asset reuse + w_class = 4 + force = 10 + can_suppress = 0 + mag_type = /obj/item/ammo_box/magazine/internal/cylinder/speargun + fire_sound = 'sound/weapons/grenadelaunch.ogg' burst_size = 1 fire_delay = 0 select = 0 action_button_name = null -/obj/item/weapon/gun/projectile/automatic/crossbow/update_icon() +/obj/item/weapon/gun/projectile/automatic/speargun/update_icon() return -/obj/item/weapon/gun/projectile/automatic/crossbow/attack_self() +/obj/item/weapon/gun/projectile/automatic/speargun/attack_self() return -/obj/item/weapon/gun/projectile/automatic/crossbow/process_chamber(var/eject_casing = 0, var/empty_chamber = 1) +/obj/item/weapon/gun/projectile/automatic/speargun/process_chamber(var/eject_casing = 0, var/empty_chamber = 1) ..() -/obj/item/weapon/gun/projectile/automatic/crossbow/attackby(var/obj/item/A, mob/user) +/obj/item/weapon/gun/projectile/automatic/speargun/attackby(var/obj/item/A, mob/user) var/num_loaded = magazine.attackby(A, user, 1) if(num_loaded) - user << "You load [num_loaded] bolt\s into \the [src]." + user << "You load [num_loaded] spear\s into \the [src]." update_icon() - chamber_round() - -/obj/item/weapon/gun/projectile/automatic/crossbow/large //holds twice the ammo of mini crossbows but can't be pocketed - name = "auto crossbow" - desc = "A weapon favored by carp hunters. Fires specialized poison bolts." - icon_state = "crossbowlarge" - w_class = 3 - force = 10 - m_amt = 4000 - suppressed = 0 - mag_type = /obj/item/ammo_box/magazine/internal/cylinder/crossbow/large \ No newline at end of file + chamber_round() \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index 11c7bc823d8..7e3635defc1 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -21,6 +21,7 @@ icon_state = "m1911" w_class = 3 mag_type = /obj/item/ammo_box/magazine/m45 + can_suppress = 0 /obj/item/weapon/gun/projectile/automatic/pistol/deagle name = "desert eagle" @@ -28,6 +29,7 @@ icon_state = "deagle" force = 14 mag_type = /obj/item/ammo_box/magazine/m50 + can_suppress = 0 /obj/item/weapon/gun/projectile/automatic/pistol/deagle/update_icon() ..() diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index cef3dcdd269..a034c16c3c4 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -196,7 +196,7 @@ /obj/item/weapon/gun/projectile/automatic/shotgun/bulldog name = "syndicate shotgun" - desc = "A compact, mag-fed burst-fire shotgun for combat in narrow corridors, nicknamed 'Bulldog' by boarding parties. Compatible only with specialized 8-round drum magazines." + desc = "A semi-auto, mag-fed shotgun for combat in narrow corridors, nicknamed 'Bulldog' by boarding parties. Compatible only with specialized 8-round drum magazines." icon_state = "bulldog" item_state = "bulldog" w_class = 3.0 @@ -206,22 +206,26 @@ can_suppress = 0 burst_size = 1 fire_delay = 0 + action_button_name = null /obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/New() ..() update_icon() return + /obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/proc/update_magazine() if(magazine) src.overlays = 0 overlays += "[magazine.icon_state]" return + /obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/update_icon() src.overlays = 0 update_magazine() icon_state = "bulldog[chambered ? "" : "-e"]" return + /obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/afterattack() ..() empty_alarm() - return \ No newline at end of file + return diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index 6ff5d42fc22..7ca29b5fed5 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -51,7 +51,7 @@ weaken = 5 range = 7 -/obj/item/projectile/energy/bolt //xbow bolts +/obj/item/projectile/energy/bolt //ebow bolts name = "bolt" icon_state = "cbbolt" damage = 15 @@ -61,13 +61,5 @@ stutter = 5 range = 7 -/obj/item/projectile/energy/bolt/on_hit(var/atom/target, var/blocked = 0) //drop a bolt on hitting basically anything - if(!proj_hit) - proj_hit = 1 - new /obj/item/ammo_casing/caseless/bolt(src.loc) - ..() - -/obj/item/projectile/energy/bolt/on_range() //drop a bolt after 7 tiles - if(!proj_hit) - new /obj/item/ammo_casing/caseless/bolt(src.loc) - ..() \ No newline at end of file +/obj/item/projectile/energy/bolt/large + damage = 20 \ No newline at end of file diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index 7b78b6ad120..597ca6550ca 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -178,3 +178,20 @@ obj/item/projectile/kinetic/New() name ="explosive slug" damage = 25 weaken = 5 + +/obj/item/projectile/bullet/magspear + name = "magnetic spear" + desc = "WHITE WHALE, HOLY GRAIL" + damage = 30 //takes 3 spears to kill a mega carp, one to kill a normal carp + icon_state = "magspear" + +/obj/item/projectile/bullet/magspear/on_hit(var/atom/target, var/blocked = 0) + if(!proj_hit) + proj_hit = 1 + new /obj/item/ammo_casing/caseless/magspear(src.loc) + ..() + +/obj/item/projectile/bullet/magspear/on_range() + if(!proj_hit) + new /obj/item/ammo_casing/caseless/magspear(src.loc) + ..() \ No newline at end of file diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index fd90822a838..cdd16bac1b6 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -75,8 +75,9 @@ req_tech = list("combat" = 5, "materials" = 5, "engineering" = 3, "biotech" = 4, "syndicate" = 3) build_type = PROTOLATHE materials = list("$metal" = 5000, "$glass" = 1500, "$uranium" = 1500, "$silver" = 1500) - build_path = /obj/item/weapon/gun/projectile/automatic/crossbow/large + build_path = /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow/large locked = 1 + reliability = 76 category = list("Weapons") /datum/design/temp_gun diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index 33726c6de7c..a903c5b77b3 100644 Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi index d0b8e3ca1c0..04fb1cbd3bb 100644 Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index df8b6c1477f..598999653f8 100644 Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ