diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 9ec921fef92..f7df69cad2f 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -178,8 +178,12 @@ var/global/list/datum/stack_recipe/wood_recipes = list( new /datum/stack_recipe("wooden buckler", /obj/item/shield/riot/buckler, 20, time = 40), new /datum/stack_recipe("apiary", /obj/structure/beebox, 40, time = 50), new /datum/stack_recipe("honey frame", /obj/item/honey_frame, 5, time = 10), + new /datum/stack_recipe("wooden bucket", /obj/item/reagent_containers/glass/bucket/wooden, 3, time = 10), + new /datum/stack_recipe("rake", /obj/item/cultivator/rake, 5, time = 10), + new /datum/stack_recipe("ore box", /obj/structure/ore_box, 4, time = 50, one_per_turf = TRUE, on_floor = TRUE), new /datum/stack_recipe("baseball bat", /obj/item/melee/baseball_bat, 5, time = 15), - new /datum/stack_recipe("fermenting barrel", /obj/structure/fermenting_barrel, 30, time = 50) + new /datum/stack_recipe("fermenting barrel", /obj/structure/fermenting_barrel, 30, time = 50), + new /datum/stack_recipe("firebrand", /obj/item/match/firebrand, 2, time = 100) ) /obj/item/stack/sheet/wood diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index 4f94a6b8a1b..eb4e9db7b95 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -115,7 +115,8 @@ throw_range = 6 materials = list(MAT_METAL=12000) attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - sharp = 1 + sharp = TRUE + var/bayonet = FALSE //Can this be attached to a gun? /obj/item/kitchen/knife/suicide_act(mob/user) user.visible_message(pick("[user] is slitting [user.p_their()] wrists with the [src.name]! It looks like [user.p_theyre()] trying to commit suicide.", \ @@ -160,14 +161,21 @@ icon_state = "combatknife" item_state = "knife" desc = "A military combat utility survival knife." + embedded_pain_multiplier = 4 + embed_chance = 65 + embedded_fall_chance = 10 force = 20 throwforce = 20 origin_tech = "materials=3;combat=4" attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "cut") + bayonet = TRUE /obj/item/kitchen/knife/combat/survival name = "survival knife" icon_state = "survivalknife" + embedded_pain_multiplier = 4 + embed_chance = 35 + embedded_fall_chance = 10 desc = "A hunting grade survival knife." force = 15 throwforce = 15 diff --git a/code/game/objects/items/weapons/lighters.dm b/code/game/objects/items/weapons/lighters.dm index ab946de5f0f..56d237c4eda 100644 --- a/code/game/objects/items/weapons/lighters.dm +++ b/code/game/objects/items/weapons/lighters.dm @@ -224,3 +224,13 @@ var/mask_item = M.get_item_by_slot(slot_wear_mask) if(istype(mask_item, /obj/item/clothing/mask/cigarette)) return mask_item + + +/obj/item/match/firebrand + name = "firebrand" + desc = "An unlit firebrand. It makes you wonder why it's not just called a stick." + smoketime = 20 //40 seconds + +/obj/item/match/firebrand/New() + ..() + matchignite() \ No newline at end of file diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 8e5e658e31a..a06b01de65d 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -38,6 +38,21 @@ max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT burn_state = FIRE_PROOF +/obj/item/clothing/gloves/bracer + name = "bone bracers" + desc = "For when you're expecting to get slapped on the wrist. Offers modest protection to your arms." + icon_state = "bracers" + item_state = "bracers" + item_color = null //So they don't wash. + transfer_prints = TRUE + strip_delay = 40 + body_parts_covered = ARMS + cold_protection = ARMS + min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT + resistance_flags = NONE + armor = list(melee = 15, bullet = 25, laser = 15, energy = 15, bomb = 20, bio = 10, rad = 0) + /obj/item/clothing/gloves/botanic_leather desc = "These leather gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin." name = "botanist's leather gloves" diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 96c2ed46f7a..ae8502f7246 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -527,14 +527,15 @@ icon_state = "bonearmor" item_state = "bonearmor" blood_overlay_type = "armor" - armor = list("melee" = 35, "bullet" = 25, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list(melee = 35, bullet = 25, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS -/obj/item/clothing/head/skullhelmet +/obj/item/clothing/head/helmet/skull name = "skull helmet" desc = "An intimidating tribal helmet, it doesn't look very comfortable." - flags = BLOCKHAIR + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE flags_cover = HEADCOVERSEYES - armor = list("melee" = 25, "bullet" = 25, "laser" = 25, "energy" = 10, "bomb" = 10, "bio" = 5, "rad" = 20, "fire" = 40, "acid" = 20) + armor = list(melee = 25, bullet = 25, laser = 25, energy = 10, bomb = 10, bio = 5, rad = 20) icon_state = "skull" - item_state = "skull" \ No newline at end of file + item_state = "skull" + strip_delay = 100 \ No newline at end of file diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 1520e19dcfc..58338efea61 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -385,42 +385,11 @@ ) category = CAT_WEAPON -/datum/crafting_recipe/bonfire - name = "Bonfire" - time = 60 - reqs = list(/obj/item/grown/log = 5) - result = /obj/structure/bonfire - category = CAT_PRIMAL - -/datum/crafting_recipe/boneaxe - name = "Bone Axe" - result = /obj/item/twohanded/fireaxe/boneaxe - time = 50 - reqs = list(/obj/item/stack/sheet/bone = 6, - /obj/item/stack/sheet/sinew = 3) - category = CAT_PRIMAL - -/datum/crafting_recipe/bonespear - name = "Bone Spear" - result = /obj/item/twohanded/spear/bonespear +/datum/crafting_recipe/bonearmor + name = "Bone Armor" + result = /obj/item/clothing/suit/armor/bone time = 30 - reqs = list(/obj/item/stack/sheet/bone = 4, - /obj/item/stack/sheet/sinew = 1) - category = CAT_PRIMAL - -/datum/crafting_recipe/bonedagger - name = "Bone Dagger" - result = /obj/item/kitchen/knife/combat/survival/bone - time = 20 - reqs = list(/obj/item/stack/sheet/bone = 2) - category = CAT_PRIMAL - -/datum/crafting_recipe/bonecodpiece - name = "Skull Codpiece" - result = /obj/item/clothing/accessory/necklace/skullcodpiece - time = 20 - reqs = list(/obj/item/stack/sheet/bone = 2, - /obj/item/stack/sheet/animalhide/goliath_hide = 1) + reqs = list(/obj/item/stack/sheet/bone = 6) category = CAT_PRIMAL /datum/crafting_recipe/bonetalisman @@ -431,16 +400,25 @@ /obj/item/stack/sheet/sinew = 1) category = CAT_PRIMAL -/datum/crafting_recipe/bonearmor - name = "Bone Armor" - result = /obj/item/clothing/suit/armor/bone - time = 30 - reqs = list(/obj/item/stack/sheet/bone = 6) +/datum/crafting_recipe/bonecodpiece + name = "Skull Codpiece" + result = /obj/item/clothing/accessory/necklace/skullcodpiece + time = 20 + reqs = list(/obj/item/stack/sheet/bone = 2, + /obj/item/stack/sheet/animalhide/goliath_hide = 1) + category = CAT_PRIMAL + +/datum/crafting_recipe/bracers + name = "Bone Bracers" + result = /obj/item/clothing/gloves/bracer + time = 20 + reqs = list(/obj/item/stack/sheet/bone = 2, + /obj/item/stack/sheet/sinew = 1) category = CAT_PRIMAL /datum/crafting_recipe/skullhelm name = "Skull Helmet" - result = /obj/item/clothing/head/skullhelmet + result = /obj/item/clothing/head/helmet/skull time = 30 reqs = list(/obj/item/stack/sheet/bone = 4) category = CAT_PRIMAL @@ -463,6 +441,13 @@ /obj/item/stack/sheet/animalhide/ashdrake = 5) category = CAT_PRIMAL +/datum/crafting_recipe/firebrand + name = "Firebrand" + result = /obj/item/match/firebrand + time = 100 //Long construction time. Making fire is hard work. + reqs = list(/obj/item/stack/sheet/wood = 2) + category = CAT_PRIMAL + /datum/crafting_recipe/tribal_splint name = "Tribal Splint" time = 20 @@ -471,6 +456,50 @@ result = /obj/item/stack/medical/splint/tribal category = CAT_PRIMAL +/datum/crafting_recipe/bonedagger + name = "Bone Dagger" + result = /obj/item/kitchen/knife/combat/survival/bone + time = 20 + reqs = list(/obj/item/stack/sheet/bone = 2) + category = CAT_PRIMAL + +/datum/crafting_recipe/bonespear + name = "Bone Spear" + result = /obj/item/twohanded/spear/bonespear + time = 30 + reqs = list(/obj/item/stack/sheet/bone = 4, + /obj/item/stack/sheet/sinew = 1) + category = CAT_PRIMAL + +/datum/crafting_recipe/boneaxe + name = "Bone Axe" + result = /obj/item/twohanded/fireaxe/boneaxe + time = 50 + reqs = list(/obj/item/stack/sheet/bone = 6, + /obj/item/stack/sheet/sinew = 3) + category = CAT_PRIMAL + +/datum/crafting_recipe/bonfire + name = "Bonfire" + time = 60 + reqs = list(/obj/item/grown/log = 5) + result = /obj/structure/bonfire + category = CAT_PRIMAL + +/datum/crafting_recipe/rake //Category resorting incoming + name = "Rake" + time = 30 + reqs = list(/obj/item/stack/sheet/wood = 5) + result = /obj/item/cultivator/rake + category = CAT_PRIMAL + +/datum/crafting_recipe/woodbucket + name = "Wooden Bucket" + time = 30 + reqs = list(/obj/item/stack/sheet/wood = 3) + result = /obj/item/reagent_containers/glass/bucket/wooden + category = CAT_PRIMAL + /datum/crafting_recipe/guillotine name = "Guillotine" result = /obj/structure/guillotine diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm index 14080c62bba..899146f160d 100644 --- a/code/modules/hydroponics/hydroitemdefines.dm +++ b/code/modules/hydroponics/hydroitemdefines.dm @@ -72,6 +72,16 @@ attack_verb = list("slashed", "sliced", "cut", "clawed") hitsound = 'sound/weapons/bladeslice.ogg' +/obj/item/cultivator/rake + name = "rake" + icon_state = "rake" + w_class = WEIGHT_CLASS_NORMAL + attack_verb = list("slashed", "sliced", "bashed", "clawed") + hitsound = null + materials = null + flags = NONE + burn_state = FLAMMABLE + /obj/item/hatchet name = "hatchet" desc = "A very sharp axe blade upon a short fibremetal handle. It has a long history of chopping things, but now it is used for chopping wood." diff --git a/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm index 60c1f5e08e7..264dce29446 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm @@ -403,7 +403,7 @@ if(prob(95)) head = /obj/item/clothing/head/helmet/gladiator else - head = /obj/item/clothing/head/skullhelmet + head = /obj/item/clothing/head/helmet/skull suit = /obj/item/clothing/suit/armor/bone if(prob(5)) back = pickweight(list(/obj/item/twohanded/spear/bonespear = 3, /obj/item/twohanded/fireaxe/boneaxe = 2)) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index d5dfb454e09..eea2c2253e8 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -50,6 +50,12 @@ var/obj/item/flashlight/gun_light = null var/can_flashlight = 0 + var/can_bayonet = FALSE //if a bayonet can be added or removed if it already has one. + var/obj/item/kitchen/knife/bayonet + var/mutable_appearance/knife_overlay + var/knife_x_offset = 0 + var/knife_y_offset = 0 + var/list/upgrades = list() var/ammo_x_offset = 0 //used for positioning ammo count overlay on sprite @@ -69,12 +75,27 @@ verbs += /obj/item/gun/proc/toggle_gunlight build_zooming() +/obj/item/gun/Destroy() + QDEL_NULL(bayonet) + return ..() + +/obj/item/gun/handle_atom_del(atom/A) + if(A == bayonet) + clear_bayonet() + return ..() + /obj/item/gun/examine(mob/user) ..() if(unique_reskin && !current_skin) to_chat(user, "Alt-click it to reskin it.") if(unique_rename) to_chat(user, "Use a pen on it to rename it.") + if(bayonet) + to_chat(user, "It has \a [bayonet] [can_bayonet ? "" : "permanently "]affixed to it.") + if(can_bayonet) //if it has a bayonet and this is false, the bayonet is permanent. + to_chat(user, "[bayonet] looks like it can be unscrewed from [src].") + else if(can_bayonet) + to_chat(user, "It has a bayonet lug on it.") /obj/item/gun/proc/process_chamber() return 0 @@ -233,11 +254,19 @@ obj/item/gun/proc/newshot() user.update_inv_r_hand() feedback_add_details("gun_fired","[type]") -/obj/item/gun/attack(mob/M as mob, mob/user) +/obj/item/gun/attack(mob/M, mob/user) if(user.a_intent == INTENT_HARM) //Flogging - ..() - else - return + if(bayonet) + M.attackby(bayonet, user) + else + return ..() + +/obj/item/gun/attack_obj(obj/O, mob/user) + if(user.a_intent == INTENT_HARM) + if(bayonet) + O.attackby(bayonet, user) + return + return ..() /obj/item/gun/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/flashlight/seclite)) @@ -257,7 +286,7 @@ obj/item/gun/proc/newshot() if(loc == user) A.Grant(user) - if(istype(I, /obj/item/screwdriver)) + if(isscrewdriver(I)) if(gun_light && can_flashlight) for(var/obj/item/flashlight/seclite/S in src) to_chat(user, "You unscrew the seclite from [src].") @@ -268,11 +297,32 @@ obj/item/gun/proc/newshot() update_icon() for(var/datum/action/item_action/toggle_gunlight/TGL in actions) qdel(TGL) + else if(bayonet && can_bayonet) //if it has a bayonet, and the bayonet can be removed + bayonet.forceMove(get_turf(user)) + clear_bayonet() if(unique_rename) if(istype(I, /obj/item/pen)) rename_gun(user) - ..() + if(istype(I, /obj/item/kitchen/knife)) + var/obj/item/kitchen/knife/K = I + if(!can_bayonet || !K.bayonet || bayonet) //ensure the gun has an attachment point available, and that the knife is compatible with it. + return ..() + if(!user.drop_item()) + return + K.forceMove(src) + to_chat(user, "You attach [K] to [src]'s bayonet lug.") + bayonet = K + var/state = "bayonet" //Generic state. + if(bayonet.icon_state in icon_states('icons/obj/guns/bayonets.dmi')) //Snowflake state? + state = bayonet.icon_state + var/icon/bayonet_icons = 'icons/obj/guns/bayonets.dmi' + knife_overlay = mutable_appearance(bayonet_icons, state) + knife_overlay.pixel_x = knife_x_offset + knife_overlay.pixel_y = knife_y_offset + overlays += knife_overlay + else + return ..() /obj/item/gun/proc/toggle_gunlight() set name = "Toggle Gun Light" @@ -305,6 +355,15 @@ obj/item/gun/proc/newshot() var/datum/action/A = X A.UpdateButtonIcon() +/obj/item/gun/proc/clear_bayonet() + if(!bayonet) + return + bayonet = null + if(knife_overlay) + overlays -= knife_overlay + knife_overlay = null + return TRUE + /obj/item/gun/extinguish_light() if(gun_light.on) toggle_gunlight() diff --git a/code/modules/projectiles/guns/dartgun.dm b/code/modules/projectiles/guns/dartgun.dm index 7b39bfa3be8..97f4eaebf1c 100644 --- a/code/modules/projectiles/guns/dartgun.dm +++ b/code/modules/projectiles/guns/dartgun.dm @@ -101,6 +101,8 @@ beakers += B to_chat(user, "You slot [B] into [src].") src.updateUsrDialog() + else + return ..() /obj/item/gun/dartgun/can_shoot() if(!cartridge) diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index cbc230c1e98..6e4de3c49fa 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -140,6 +140,8 @@ if(gun_light.on) iconF = "flight_on" overlays += image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset) + if(bayonet && can_bayonet) + overlays += knife_overlay if(itemState) itemState += "[ratio]" item_state = itemState diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 4662062a56e..f997d559efd 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -16,6 +16,9 @@ var/holds_charge = FALSE var/unique_frequency = FALSE // modified by KA modkits var/overheat = FALSE + can_bayonet = TRUE + knife_x_offset = 20 + knife_y_offset = 12 var/max_mod_capacity = 100 var/list/modkits = list() @@ -148,6 +151,8 @@ if(gun_light.on) iconF = "flight_on" overlays += image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset) + if(bayonet && can_bayonet) + overlays += knife_overlay /obj/item/gun/energy/kinetic_accelerator/experimental diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index fa34753c6a9..be60248cded 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -175,7 +175,7 @@ power_supply.give(500) to_chat(user, "You insert [A] in [src], recharging it.") else - ..() + return ..() /obj/item/gun/energy/plasmacutter/update_icon() return diff --git a/code/modules/projectiles/guns/grenade_launcher.dm b/code/modules/projectiles/guns/grenade_launcher.dm index 0f05cfa32f6..81b8451eb77 100644 --- a/code/modules/projectiles/guns/grenade_launcher.dm +++ b/code/modules/projectiles/guns/grenade_launcher.dm @@ -28,6 +28,8 @@ to_chat(user, "[grenades.len] / [max_grenades] grenades.") else to_chat(user, "The grenade launcher cannot hold more grenades.") + else + return ..() /obj/item/gun/grenadelauncher/afterattack(obj/target, mob/user , flag) if(target == user) diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 9defe7637d4..15efee700d2 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -24,6 +24,8 @@ icon_state = "[current_skin][suppressed ? "-suppressed" : ""][sawn_state ? "-sawn" : ""]" else icon_state = "[initial(icon_state)][suppressed ? "-suppressed" : ""][sawn_state ? "-sawn" : ""]" + if(bayonet && can_bayonet) + overlays += knife_overlay /obj/item/gun/projectile/process_chamber(eject_casing = 1, empty_chamber = 1) var/obj/item/ammo_casing/AC = chambered //Find chambered round @@ -66,7 +68,6 @@ return /obj/item/gun/projectile/attackby(var/obj/item/A as obj, mob/user as mob, params) - ..() if(istype(A, /obj/item/ammo_box/magazine)) var/obj/item/ammo_box/magazine/AM = A if(istype(AM, mag_type)) @@ -108,7 +109,8 @@ else to_chat(user, "You can't seem to figure out how to fit [S] on [src].") return - return 0 + else + return ..() /obj/item/gun/projectile/attack_hand(mob/user) if(loc == user) @@ -178,6 +180,9 @@ if(sawn_state == SAWN_OFF) to_chat(user, "\The [src] is already shortened!") return + if(bayonet) + to_chat(user, "You cannot saw-off [src] with [bayonet] attached!") + return user.changeNext_move(CLICK_CD_MELEE) user.visible_message("[user] begins to shorten \the [src].", "You begin to shorten \the [src]...") diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 399925d0e8a..6601f75d52b 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -19,6 +19,8 @@ if(select == 1) overlays += "[initial(icon_state)]burst" icon_state = "[initial(icon_state)][magazine ? "-[magazine.max_ammo]" : ""][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]" + if(bayonet && can_bayonet) + overlays += knife_overlay /obj/item/gun/projectile/automatic/attackby(var/obj/item/A as obj, mob/user as mob, params) . = ..() @@ -96,6 +98,9 @@ fire_sound = 'sound/weapons/gunshots/gunshot_smg.ogg' fire_delay = 2 burst_size = 2 + can_bayonet = TRUE + knife_x_offset = 26 + knife_y_offset = 12 /obj/item/gun/projectile/automatic/c20r/New() ..() @@ -123,6 +128,9 @@ can_suppress = 0 burst_size = 1 actions_types = list() + can_bayonet = TRUE + knife_x_offset = 25 + knife_y_offset = 12 /obj/item/gun/projectile/automatic/wt550/update_icon() ..() @@ -172,7 +180,7 @@ underbarrel.attack_self() underbarrel.attackby(A, user, params) else - ..() + return ..() /obj/item/gun/projectile/automatic/m90/update_icon() ..() diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 3cba868a379..6f977f2e024 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -115,7 +115,6 @@ ..() /obj/item/gun/projectile/revolver/detective/attackby(obj/item/A, mob/user, params) - ..() if(istype(A, /obj/item/screwdriver)) if(magazine.caliber == "38") to_chat(user, "You begin to reinforce the barrel of [src]...") @@ -143,6 +142,8 @@ magazine.caliber = "38" desc = initial(desc) to_chat(user, "You remove the modifications on [src]. Now it will fire .38 rounds.") + else + return ..() /obj/item/gun/projectile/revolver/fingergun //Summoned by the Finger Gun spell, from advanced mimery traitor item name = "\improper finger gun" @@ -347,7 +348,6 @@ options["Cancel"] = null /obj/item/gun/projectile/revolver/doublebarrel/attackby(obj/item/A, mob/user, params) - ..() if(istype(A, /obj/item/ammo_box) || istype(A, /obj/item/ammo_casing)) chamber_round() if(istype(A, /obj/item/melee/energy)) @@ -356,6 +356,8 @@ sawoff(user) if(istype(A, /obj/item/circular_saw) || istype(A, /obj/item/gun/energy/plasmacutter)) sawoff(user) + else + return ..() /obj/item/gun/projectile/revolver/doublebarrel/attack_self(mob/living/user) var/num_unloaded = 0 @@ -394,7 +396,6 @@ var/slung = 0 /obj/item/gun/projectile/revolver/doublebarrel/improvised/attackby(obj/item/A, mob/user, params) - ..() if(istype(A, /obj/item/stack/cable_coil) && !sawn_state) var/obj/item/stack/cable_coil/C = A if(C.use(10)) @@ -406,6 +407,8 @@ else to_chat(user, "You need at least ten lengths of cable if you want to make a sling.") return + else + return ..() /obj/item/gun/projectile/revolver/doublebarrel/improvised/update_icon() ..() @@ -450,9 +453,10 @@ return /obj/item/gun/projectile/revolver/doublebarrel/improvised/cane/attackby(obj/item/A, mob/user, params) - ..() if(istype(A, /obj/item/stack/cable_coil)) return + else + return ..() /obj/item/gun/projectile/revolver/doublebarrel/improvised/cane/examine(mob/user) // HAD TO REPEAT EXAMINE CODE BECAUSE GUN CODE DOESNT STEALTH var/f_name = "\a [src]." diff --git a/code/modules/projectiles/guns/projectile/saw.dm b/code/modules/projectiles/guns/projectile/saw.dm index 59bb2595714..b9bdb0c9701 100644 --- a/code/modules/projectiles/guns/projectile/saw.dm +++ b/code/modules/projectiles/guns/projectile/saw.dm @@ -50,14 +50,15 @@ to_chat(user, "You remove the magazine from [src].") -/obj/item/gun/projectile/automatic/l6_saw/attackby(obj/item/A, mob/user, params) +/obj/item/gun/projectile/automatic/l6_saw/attackby(obj/item/A, mob/user, params) if(istype(A, /obj/item/ammo_box/magazine)) var/obj/item/ammo_box/magazine/AM = A if(istype(AM, mag_type)) if(!cover_open) to_chat(user, "[src]'s cover is closed! You can't insert a new mag.") return - ..() + else + return ..() //ammo// diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 366b9b6579f..46286bef2af 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -86,7 +86,6 @@ sawn_state = SAWN_INTACT /obj/item/gun/projectile/shotgun/riot/attackby(obj/item/A, mob/user, params) - ..() if(istype(A, /obj/item/circular_saw) || istype(A, /obj/item/gun/energy/plasmacutter)) sawoff(user) if(istype(A, /obj/item/melee/energy)) @@ -95,6 +94,8 @@ sawoff(user) if(istype(A, /obj/item/pipe)) unsaw(A, user) + else + return ..() /obj/item/gun/projectile/shotgun/riot/sawoff(mob/user) if(sawn_state == SAWN_OFF) @@ -210,6 +211,9 @@ mag_type = /obj/item/ammo_box/magazine/internal/boltaction fire_sound = 'sound/weapons/gunshots/gunshot_rifle.ogg' var/bolt_open = 0 + can_bayonet = TRUE + knife_x_offset = 27 + knife_y_offset = 13 /obj/item/gun/projectile/shotgun/boltaction/pump(mob/M) playsound(M, 'sound/weapons/gun_interactions/rifle_load.ogg', 60, 1) @@ -242,6 +246,7 @@ desc = "Careful not to lose your head." var/guns_left = 30 mag_type = /obj/item/ammo_box/magazine/internal/boltaction/enchanted + can_bayonet = FALSE /obj/item/gun/projectile/shotgun/boltaction/enchanted/New() ..() diff --git a/code/modules/projectiles/guns/rocket.dm b/code/modules/projectiles/guns/rocket.dm index fa6dce3f448..983c6f319fd 100644 --- a/code/modules/projectiles/guns/rocket.dm +++ b/code/modules/projectiles/guns/rocket.dm @@ -37,6 +37,8 @@ to_chat(user, "[rockets.len] / [max_rockets] rockets.") else to_chat(usr, "[src] cannot hold more rockets.") + else + return ..() /obj/item/gun/rocketlauncher/can_shoot() return rockets.len diff --git a/code/modules/projectiles/guns/syringe_gun.dm b/code/modules/projectiles/guns/syringe_gun.dm index 21d44fa8634..ca18cdcd82e 100644 --- a/code/modules/projectiles/guns/syringe_gun.dm +++ b/code/modules/projectiles/guns/syringe_gun.dm @@ -76,7 +76,8 @@ return 1 else to_chat(user, "[src] cannot hold more syringes.") - return 0 + else + return ..() /obj/item/gun/syringe/rapidsyringe name = "rapid syringe gun" diff --git a/code/modules/reagents/reagent_containers/glass_containers.dm b/code/modules/reagents/reagent_containers/glass_containers.dm index d408db7f2f0..5221ae5e600 100644 --- a/code/modules/reagents/reagent_containers/glass_containers.dm +++ b/code/modules/reagents/reagent_containers/glass_containers.dm @@ -81,7 +81,7 @@ reagents.reaction(M, TOUCH) reagents.clear_reagents() - else + else if(M != user) M.visible_message("[user] attempts to feed something to [M].", \ "[user] attempts to feed something to you.") @@ -348,6 +348,13 @@ slot_flags = SLOT_HEAD container_type = OPENCONTAINER +/obj/item/reagent_containers/glass/bucket/wooden + name = "wooden bucket" + icon_state = "woodbucket" + item_state = "woodbucket" + materials = null + burn_state = FLAMMABLE + /obj/item/reagent_containers/glass/bucket/equipped(mob/user, slot) ..() if(slot == slot_head && reagents.total_volume) diff --git a/icons/mob/hands.dmi b/icons/mob/hands.dmi index a5a14094fd6..6d6165509c8 100644 Binary files a/icons/mob/hands.dmi and b/icons/mob/hands.dmi differ diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index 47cb86a2c89..397c435306c 100644 Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi index e4630c2764e..858e31e13f8 100644 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi index 42f1eda0e74..f7f54357fdb 100644 Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ diff --git a/icons/obj/guns/bayonets.dmi b/icons/obj/guns/bayonets.dmi new file mode 100644 index 00000000000..32b5448b8ed Binary files /dev/null and b/icons/obj/guns/bayonets.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index c303e2135bd..23e49287922 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi index 83cb94a5ca3..730431590ae 100644 Binary files a/icons/obj/janitor.dmi and b/icons/obj/janitor.dmi differ