diff --git a/code/game/gamemodes/steal_items.dm b/code/game/gamemodes/steal_items.dm index 780962045be..53377d9f88b 100644 --- a/code/game/gamemodes/steal_items.dm +++ b/code/game/gamemodes/steal_items.dm @@ -70,8 +70,8 @@ return 0 /datum/theft_objective/defib - name = "a compact defibrillator" - typepath = /obj/item/defibrillator/compact + name = "the chief medical officer's advanced compact defibrillator" + typepath = /obj/item/defibrillator/compact/advanced protected_jobs = list("Chief Medical Officer", "Paramedic") location_override = "the Chief Medical Officer's Office" diff --git a/code/game/machinery/defib_mount.dm b/code/game/machinery/defib_mount.dm index 79d02155832..fe012fdca75 100644 --- a/code/game/machinery/defib_mount.dm +++ b/code/game/machinery/defib_mount.dm @@ -34,8 +34,8 @@ if(building) set_pixel_offsets_from_dir(30, -30, 30, -30) -/obj/machinery/defibrillator_mount/loaded/New() //loaded subtype for mapping use - ..() +/obj/machinery/defibrillator_mount/loaded/Initialize(mapload) //loaded subtype for mapping use + . = ..() defib = new/obj/item/defibrillator/loaded(src) update_icon() diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 43808c9105f..790ed57bf46 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -3,6 +3,7 @@ /obj/item/defibrillator name = "defibrillator" desc = "A device that delivers powerful shocks to detachable paddles that resuscitate incapacitated patients." + icon = 'icons/obj/defib.dmi' icon_state = "defibunit" item_state = "defibunit" slot_flags = SLOT_BACK @@ -17,27 +18,26 @@ ) var/paddles_on_defib = TRUE //if the paddles are on the defib (TRUE) - var/safety = TRUE //if you can zap people with the defibs on harm mode var/powered = FALSE //if there's a cell in the defib with enough power for a revive, blocks paddles from reviving otherwise var/obj/item/twohanded/shockpaddles/paddles var/obj/item/stock_parts/cell/high/cell = null + var/safety = TRUE //if you can zap people with the defibs on harm mode var/combat = FALSE //can we revive through space suits? + var/base_icon_state = "defibpaddles" + var/obj/item/twohanded/shockpaddles/paddle_type = /obj/item/twohanded/shockpaddles /obj/item/defibrillator/get_cell() return cell -/obj/item/defibrillator/New() //starts without a cell for rnd - ..() - paddles = make_paddles() +/obj/item/defibrillator/Initialize(mapload) //starts without a cell for rnd + . = ..() + paddles = new paddle_type(src) update_icon() - return -/obj/item/defibrillator/loaded/New() //starts with hicap - ..() - paddles = make_paddles() +/obj/item/defibrillator/loaded/Initialize(mapload) //starts with hicap + . = ..() cell = new(src) update_icon() - return /obj/item/defibrillator/update_icon() update_power() @@ -158,9 +158,6 @@ var/datum/action/A = X A.UpdateButtonIcon() -/obj/item/defibrillator/proc/make_paddles() - return new /obj/item/twohanded/shockpaddles(src) - /obj/item/defibrillator/equipped(mob/user, slot) ..() if(slot != slot_back) @@ -217,35 +214,79 @@ desc = "A belt-equipped defibrillator that can be rapidly deployed." icon_state = "defibcompact" item_state = "defibcompact" + sprite_sheets = null //Because Vox had the belt defibrillator sprites in back.dm w_class = WEIGHT_CLASS_NORMAL slot_flags = SLOT_BELT origin_tech = "biotech=5" +/obj/item/defibrillator/compact/loaded/Initialize(mapload) + . = ..() + cell = new(src) + update_icon() + /obj/item/defibrillator/compact/item_action_slot_check(slot, mob/user) if(slot == slot_belt) return TRUE -/obj/item/defibrillator/compact/loaded/New() - ..() - paddles = make_paddles() - cell = new(src) - update_icon() - return - /obj/item/defibrillator/compact/combat name = "combat defibrillator" desc = "A belt-equipped blood-red defibrillator that can be rapidly deployed. Does not have the restrictions or safeties of conventional defibrillators and can revive through space suits." + icon_state = "defibcombat" + item_state = "defibcombat" + paddle_type = /obj/item/twohanded/shockpaddles/syndicate combat = TRUE safety = FALSE -/obj/item/defibrillator/compact/combat/loaded/New() - ..() - paddles = make_paddles() +/obj/item/defibrillator/compact/combat/loaded/Initialize(mapload) + . = ..() cell = new(src) update_icon() - return -/obj/item/defibrillator/compact/combat/attackby(obj/item/W, mob/user, params) +obj/item/defibrillator/compact/advanced + name = "advanced compact defibrillator" + desc = "A belt-equipped state-of-the-art defibrillator that can be rapidly deployed in all enviroments. Uses an experimental self-charging cell, meaning that it will (probably) never stop working. Can revive through space suits. Impossible to hack or damage." + icon_state = "defibadvanced" + item_state = "defibadvanced" + paddle_type = /obj/item/twohanded/shockpaddles/advanced + combat = TRUE + safety = TRUE + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF //Objective item, better not have it destroyed. + + var/next_emag_message //to prevent spam from the emagging message on the advanced defibrillator + var/next_emp_message //same as above, but for EMPs + +/obj/item/defibrillator/compact/advanced/attackby(obj/item/W, mob/user, params) + if(W == paddles) + paddles.unwield() + toggle_paddles() + update_icon() + return + +/obj/item/defibrillator/compact/advanced/loaded/Initialize(mapload) + . = ..() + cell = new /obj/item/stock_parts/cell/bluespace/charging(src) + update_icon() + +/obj/item/defibrillator/compact/advanced/emag_act(mob/user) + if(world.time > next_emag_message) + to_chat(user, "You try to silently disable [src]'s safety protocols with the card but it rejects your attempt... uh oh...") + atom_say("Warning: Unauthorised software modification is not advised and might result in the warranty becoming void.") + playsound(get_turf(src), 'sound/machines/defib_saftyon.ogg', 50) + next_emag_message = world.time + 1 MINUTES + else + to_chat(user, "You try to silently disable [src]'s safety protocols with the card but nothing happens.") + +/obj/item/defibrillator/compact/advanced/emp_act(severity) + if(world.time > next_emp_message) + atom_say("Warning: Electromagnetic pulse detected. Integrated shielding prevented all potential hardware damage.") + playsound(get_turf(src), 'sound/machines/defib_saftyon.ogg', 50) + next_emp_message = world.time + 5 SECONDS + else + return + + + +/obj/item/defibrillator/compact/advanced/attackby(obj/item/W, mob/user, params) if(W == paddles) paddles.unwield() toggle_paddles() @@ -257,6 +298,7 @@ /obj/item/twohanded/shockpaddles name = "defibrillator paddles" desc = "A pair of plastic-gripped paddles with flat metal surfaces that are used to deliver powerful electric shocks." + icon = 'icons/obj/defib.dmi' icon_state = "defibpaddles" item_state = "defibpaddles" force = 0 @@ -268,6 +310,7 @@ var/revivecost = 1000 var/cooldown = FALSE var/busy = FALSE + var/base_icon_state = "defibpaddles" var/obj/item/defibrillator/defib /obj/item/twohanded/shockpaddles/New(mainunit) @@ -280,10 +323,10 @@ return /obj/item/twohanded/shockpaddles/update_icon() - icon_state = "defibpaddles[wielded]" - item_state = "defibpaddles[wielded]" + icon_state = "[base_icon_state][wielded]" + item_state = "[base_icon_state][wielded]" if(cooldown) - icon_state = "defibpaddles[wielded]_cooldown" + icon_state = "[base_icon_state][wielded]_cooldown" /obj/item/twohanded/shockpaddles/suicide_act(mob/user) user.visible_message("[user] is putting the live paddles on [user.p_their()] chest! It looks like [user.p_theyre()] trying to commit suicide.") @@ -466,6 +509,7 @@ /obj/item/borg_defib name = "defibrillator paddles" desc = "A pair of mounted paddles with flat metal surfaces that are used to deliver powerful electric shocks." + icon = 'icons/obj/defib.dmi' icon_state = "defibpaddles0" item_state = "defibpaddles0" force = 0 @@ -585,3 +629,17 @@ playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) busy = FALSE update_icon() + +/obj/item/twohanded/shockpaddles/syndicate + name = "combat defibrillator paddles" + desc = "A pair of mounted high-tech paddles with flat plasteel surfaces to revive deceased operatives(unless they exploded). They possess both the ability to penetrate armor and to deliver powerful or disabling shocks offensively." + icon_state = "syndiepaddles0" + item_state = "syndiepaddles0" + base_icon_state = "syndiepaddles" + +/obj/item/twohanded/shockpaddles/advanced + name = "advanced defibrillator paddles" + desc = "A pair of mounted high-tech paddles with flat plasteel surfaces that are used to deliver powerful electric shocks. They possess the ability to penetrate armor to deliver shock." + icon_state = "ntpaddles0" + item_state = "ntpaddles0" + base_icon_state = "ntpaddles" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index a56c63937e3..555124cbb47 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -182,7 +182,7 @@ new /obj/item/clothing/shoes/brown (src) new /obj/item/radio/headset/heads/cmo(src) new /obj/item/clothing/gloves/color/latex/nitrile(src) - new /obj/item/defibrillator/compact/loaded(src) + new /obj/item/defibrillator/compact/advanced/loaded(src) new /obj/item/handheld_defibrillator(src) new /obj/item/storage/belt/medical(src) new /obj/item/flash(src) diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index b92b456890f..16526a3bde3 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -284,6 +284,12 @@ charge = 0 update_icon() +/obj/item/stock_parts/cell/bluespace/charging + name = "self-charging bluespace power cell" + desc = "An experimental, self-charging, transdimensional power cell." + origin_tech = "powerstorage=10;bluespace=10" + self_recharge = 1 + /obj/item/stock_parts/cell/infinite name = "infinite-capacity power cell!" icon_state = "icell" @@ -293,9 +299,6 @@ rating = 6 chargerate = 30000 -/obj/item/stock_parts/cell/infinite/use() - return 1 - /obj/item/stock_parts/cell/infinite/abductor name = "void core" desc = "An alien power cell that produces energy seemingly out of nowhere." diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index f91b8f2012b..5fb25d4d15d 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -72,6 +72,16 @@ build_path = /obj/item/defibrillator category = list("Medical") +/datum/design/compact_defib + name = "Compact Defibrillator" + desc = "A belt-equipped defibrillator that can be rapidly deployed." + id = "compact_defib" + req_tech = list("materials" = 7, "biotech" = 7, "powerstorage" = 6) + build_type = PROTOLATHE + materials = list(MAT_METAL = 10000, MAT_GLASS = 4000, MAT_SILVER = 2000) + build_path = /obj/item/defibrillator/compact + category = list("Medical") + /datum/design/defib_mount name = "Defibrillator Wall Mount" desc = "A wall mount for defibrillator units." diff --git a/code/modules/response_team/ert_outfits.dm b/code/modules/response_team/ert_outfits.dm index d5be97a4081..4f83bfe24c7 100644 --- a/code/modules/response_team/ert_outfits.dm +++ b/code/modules/response_team/ert_outfits.dm @@ -353,7 +353,7 @@ /obj/item/organ/internal/cyberimp/arm/surgery, /obj/item/organ/internal/cyberimp/chest/nutriment ) - belt = /obj/item/defibrillator/compact/loaded + belt = /obj/item/defibrillator/compact/advanced/loaded l_pocket = /obj/item/reagent_containers/hypospray/safety/ert r_pocket = /obj/item/melee/classic_baton/telescopic @@ -384,7 +384,7 @@ mask = /obj/item/clothing/mask/gas/sechailer/swat suit_store = /obj/item/gun/energy/gun/blueshield/pdw9 - belt = /obj/item/defibrillator/compact/loaded + belt = /obj/item/defibrillator/compact/advanced/loaded l_pocket = /obj/item/reagent_containers/hypospray/combat/nanites r_pocket = /obj/item/reagent_containers/hypospray/autoinjector diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi index dd893450d75..63a203345ae 100644 Binary files a/icons/mob/belt.dmi and b/icons/mob/belt.dmi differ diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index 31592dbe262..2676e31a7ae 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 8a9c2635d76..b3d8fd6ce4f 100644 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/mob/species/vox/back.dmi b/icons/mob/species/vox/back.dmi index a0a8445964a..7747d55af60 100644 Binary files a/icons/mob/species/vox/back.dmi and b/icons/mob/species/vox/back.dmi differ diff --git a/icons/obj/defib.dmi b/icons/obj/defib.dmi new file mode 100644 index 00000000000..4f88b8e5151 Binary files /dev/null and b/icons/obj/defib.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index dc45f40197c..db9d3daf506 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ