diff --git a/code/datums/components/crafting/makeshift.dm b/code/datums/components/crafting/makeshift.dm index dbd62567008d..1be42fbd6478 100644 --- a/code/datums/components/crafting/makeshift.dm +++ b/code/datums/components/crafting/makeshift.dm @@ -88,6 +88,18 @@ category = CAT_TOOLS always_available = FALSE +/datum/crafting_recipe/makeshiftemag + name = "Improvised Emag" + reqs = list(/obj/item/stock_parts/subspace/amplifier = 1, + /obj/item/card/id = 1, + /obj/item/electronics/firelock = 1, + /obj/item/stack/cable_coil = 10) + tools = list(TOOL_MULTITOOL, TOOL_WIRECUTTER) + result = /obj/item/card/emag/improvised + time = 12 SECONDS + category = CAT_TOOLS + always_available = FALSE + /datum/crafting_recipe/makeshiftid name = "Makeshift ID" result = /obj/item/card/id/makeshift diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 6974987143c3..8ac35a65abcf 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -75,6 +75,52 @@ color = rgb(40, 130, 255) prox_check = FALSE +/obj/item/card/emag/improvised + name = "improvised cryptographic sequencer" + desc = "It's a card with some junk circuitry strapped to it. It doesn't look like it would be reliable or fast due to shoddy construction, and needs to be manually recharged with uranium sheets." + icon_state = "emag_shitty" + var/charges = 5 //how many times can we use the emag before needing to reload it? + var/max_charges = 5 + var/emagging //are we currently emagging something + +/obj/item/card/emag/improvised/afterattack(atom/target, mob/user, proximity) + if(charges > 0) + if(emagging) + return + if(!proximity && prox_check) //left in for badmins + return + emagging = TRUE + if(do_after(user, rand(5, 10) SECONDS, target)) + charges-- + if (prob(40)) + to_chat(user, span_notice("[src] emits a puff of smoke, but nothing happens.")) + emagging = FALSE + return + if (prob(5)) + var/mob/living/M = user + M.adjust_fire_stacks(1) + M.IgniteMob() + to_chat(user, span_danger("The card shorts out and catches fire in your hands!")) + log_combat(user, target, "attempted to emag") + if (!istype(target, /obj/machinery/computer/cargo)) + target.emag_act(user) + else + to_chat(user, span_notice("The cheap circuitry isn't strong enough to subvert this!")) + emagging = FALSE + +/obj/item/card/emag/improvised/attackby(obj/item/W, mob/user, params) + . = ..() + if (max_charges > charges) + if (istype(W, /obj/item/stack/sheet/mineral/uranium)) + var/obj/item/stack/sheet/mineral/uranium/T = W + T.use(1) + charges++ + to_chat(user, span_notice("You add another charge to the [src]. It now has [charges] use[charges == 1 ? "" : "s"] remaining.")) + +/obj/item/card/emag/improvised/examine(mob/user) + . = ..() + . += span_notice("The charge meter indicates that it has [charges] charge[charges == 1 ? "" : "s"] remaining out of [max_charges] charges.") + /obj/item/card/emag/attack() return diff --git a/code/game/objects/items/granters.dm b/code/game/objects/items/granters.dm index e3575748d999..3937ea421468 100644 --- a/code/game/objects/items/granters.dm +++ b/code/game/objects/items/granters.dm @@ -439,7 +439,7 @@ /obj/item/book/granter/crafting_recipe/weapons name = "makeshift weapons 101" desc = "A book filled with directions on how to make various weaponry." - crafting_recipe_types = list(/datum/crafting_recipe/baseball_bat, /datum/crafting_recipe/lance, /datum/crafting_recipe/knifeboxing, /datum/crafting_recipe/flamethrower, /datum/crafting_recipe/pipebomb, /datum/crafting_recipe/makeshiftpistol, /datum/crafting_recipe/makeshiftmagazine, /datum/crafting_recipe/makeshiftsuppressor, /datum/crafting_recipe/makeshiftcrowbar, /datum/crafting_recipe/makeshiftwrench, /datum/crafting_recipe/makeshiftwirecutters, /datum/crafting_recipe/makeshiftweldingtool, /datum/crafting_recipe/makeshiftmultitool, /datum/crafting_recipe/makeshiftscrewdriver, /datum/crafting_recipe/makeshiftknife, /datum/crafting_recipe/makeshiftpickaxe, /datum/crafting_recipe/makeshiftradio, /datum/crafting_recipe/bola_arrow, /datum/crafting_recipe/flaming_arrow) + crafting_recipe_types = list(/datum/crafting_recipe/baseball_bat, /datum/crafting_recipe/lance, /datum/crafting_recipe/knifeboxing, /datum/crafting_recipe/flamethrower, /datum/crafting_recipe/pipebomb, /datum/crafting_recipe/makeshiftpistol, /datum/crafting_recipe/makeshiftmagazine, /datum/crafting_recipe/makeshiftsuppressor, /datum/crafting_recipe/makeshiftcrowbar, /datum/crafting_recipe/makeshiftwrench, /datum/crafting_recipe/makeshiftwirecutters, /datum/crafting_recipe/makeshiftweldingtool, /datum/crafting_recipe/makeshiftmultitool, /datum/crafting_recipe/makeshiftscrewdriver, /datum/crafting_recipe/makeshiftknife, /datum/crafting_recipe/makeshiftpickaxe, /datum/crafting_recipe/makeshiftradio, /datum/crafting_recipe/bola_arrow, /datum/crafting_recipe/flaming_arrow, /datum/crafting_recipe/makeshiftemag) icon_state = "bookCrafting" oneuse = TRUE diff --git a/yogstation/code/game/objects/items/cards_ids.dm b/yogstation/code/game/objects/items/cards_ids.dm index d90497564994..5b3a8c575a46 100644 --- a/yogstation/code/game/objects/items/cards_ids.dm +++ b/yogstation/code/game/objects/items/cards_ids.dm @@ -72,6 +72,8 @@ var/otherEmag = user.get_active_held_item() if(!otherEmag) return + if(istype(otherEmag, /obj/item/card/emag/improvised)) + return if(prob(10)) to_chat(user, span_notice("By some ungodly miracle, the emag gains new functionality instead of being destroyed.")) playsound(src.loc, "sparks", 50, 1) diff --git a/yogstation/icons/obj/card.dmi b/yogstation/icons/obj/card.dmi index c3d3663a8e1c..050d9d43fdcf 100644 Binary files a/yogstation/icons/obj/card.dmi and b/yogstation/icons/obj/card.dmi differ