diff --git a/modular_nova/modules/colony_fabricator/code/design_datums/tools.dm b/modular_nova/modules/colony_fabricator/code/design_datums/tools.dm index 6f343cae19f..7b5dda53798 100644 --- a/modular_nova/modules/colony_fabricator/code/design_datums/tools.dm +++ b/modular_nova/modules/colony_fabricator/code/design_datums/tools.dm @@ -4,7 +4,7 @@ description = "Contains all of the colony fabricator's tool designs." design_ids = list( "colony_power_drive", - // "colony_prybar", // FLUFFY FRONTIER REMOVAL + "colony_crowbar", "colony_arc_welder", "colony_compact_drill", ) @@ -30,24 +30,20 @@ RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED, ) -// Crowbar that is completely normal except it can force doors -// FLUFFY FRONTIER REMOVAL BEGIN - No public door openers -/* -/datum/design/colony_door_crowbar - name = "Prybar" - id = "colony_prybar" +// A large crowbar which has more force and 30% more speed but its size normal instead of small + +/datum/design/colony_crowbar + name = "Large Crowbar" + id = "colony_crowbar" build_type = COLONY_FABRICATOR - build_path = /obj/item/crowbar/large/doorforcer + build_path = /obj/item/crowbar/large materials = list( - /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.75, - /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/iron = SMALL_MATERIAL_AMOUNT*0.7, ) category = list( RND_CATEGORY_INITIAL, RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED, ) -*/ -// FLUFFY FRONTIER REMOVAL END // Welder that takes no fuel or power to run but is quite slow, at least it sounds cool as hell diff --git a/modular_nova/modules/company_imports/code/armament_datums/akh_frontier.dm b/modular_nova/modules/company_imports/code/armament_datums/akh_frontier.dm index 398166e7963..8ebf390a26c 100644 --- a/modular_nova/modules/company_imports/code/armament_datums/akh_frontier.dm +++ b/modular_nova/modules/company_imports/code/armament_datums/akh_frontier.dm @@ -8,6 +8,11 @@ subcategory = "Hand-Held Equipment" cost = PAYCHECK_COMMAND +/datum/armament_entry/company_import/akh_frontier/basic/fock + item_type = /obj/item/multitool/fock + cost = PAYCHECK_COMMAND * 4 + contraband = TRUE + /datum/armament_entry/company_import/akh_frontier/basic/omni_drill item_type = /obj/item/screwdriver/omni_drill @@ -24,8 +29,7 @@ /datum/armament_entry/company_import/akh_frontier/deployables_fab/rapid_construction_fabricator item_type = /obj/item/flatpacked_machine - cost = CARGO_CRATE_VALUE * 8 - restricted = TRUE + cost = CARGO_CRATE_VALUE * 6 /datum/armament_entry/company_import/akh_frontier/deployables_fab/foodricator item_type = /obj/item/flatpacked_machine/organics_ration_printer diff --git a/modular_nova/modules/modular_items/code/fock.dm b/modular_nova/modules/modular_items/code/fock.dm new file mode 100644 index 00000000000..e9b58fadd74 --- /dev/null +++ b/modular_nova/modules/modular_items/code/fock.dm @@ -0,0 +1,105 @@ +/// Upper and lower bounds for the randomized damage dealt to doors +#define FOCK_DOOR_DAMAGE_LOWER 45 +#define FOCK_DOOR_DAMAGE_UPPER 90 +/// Upper and lower bounds for the randomized damage dealt to apcs +#define FOCK_APC_DAMAGE_LOWER 20 +#define FOCK_APC_DAMAGE_UPPER 50 +/// Upper and lower bounds for the jacking speed +#define FOCK_JACKING_SPEED_LOWER 12 +#define FOCK_JACKING_SPEED_UPPER 18 + +/obj/item/multitool //we make the multitool cheaper on vending machines as this thing depreciates its price + custom_premium_price = PAYCHECK_COMMAND * 2 //originally 300, becomes 200 credits. + +// So, this is a multitool that it's whole deal is that it lets people unlock doors like a PAI, and unlock (or relock!) apc's and air alarms, but doing so causes damage to it, unless the apc or air alarm are being locked, then no damage. + +/obj/item/multitool/fock + name = "full override control kit" + desc = parent_type::desc + " The F.O.C.K. additionally allows the user to engage the emergency protocols of doors, apc's and air alarms." + special_desc = "Made by a disgruntled inventor that got into an argument with the FTU over their colonial prybars, the Full Override Control Kit \ + is marketed as a solution to emergency situations where the integrity of machinery is of less concern than the lives at stake of their users. \ + Sadly, some unsavory types had been known to be using the F.O.C.K. to do the exact kind of activities that the inventor wanted to stop. " + icon = 'icons/obj/devices/tool.dmi' + icon_state = "multitool" + inhand_icon_state = "multitool" + lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' + custom_premium_price = PAYCHECK_COMMAND * 3 + +/obj/item/multitool/fock/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(istype(interacting_with, /obj/machinery/door)) + hack_door(interacting_with, user) + return ITEM_INTERACT_SUCCESS + if(istype(interacting_with, /obj/machinery/airalarm)) + hack_air_alarm(interacting_with, user) + return ITEM_INTERACT_SUCCESS + if(istype(interacting_with, /obj/machinery/power/apc)) + hack_apc(interacting_with, user) + return ITEM_INTERACT_SUCCESS + return ..() + +/obj/item/multitool/fock/proc/hack_door(obj/machinery/door/door, mob/living/user) //stolen from Pai hacking + playsound(src, 'sound/machines/airlock/airlock_alien_prying.ogg', 50, TRUE) + balloon_alert(user, "overriding...") + do_sparks(4, TRUE, door) + visible_message(span_warning("Sparks fly out of [door]!")) + if(door.locked) + to_chat(user, span_warning("The [door]'s bolts prevent it from being forced!")) + balloon_alert(user, "failed!") + return FALSE + if(door.welded) + to_chat(user, span_warning("It's welded, it won't budge!")) + balloon_alert(user, "failed!") + return FALSE + if(!do_after(user, rand(FOCK_JACKING_SPEED_LOWER, FOCK_JACKING_SPEED_UPPER) SECONDS, door, timed_action_flags = NONE, progress = TRUE)) + balloon_alert(user, "failed!") + do_sparks(2, TRUE, door) + return FALSE + balloon_alert(user, "success") + door.open() + door.take_damage(rand(FOCK_DOOR_DAMAGE_LOWER, FOCK_DOOR_DAMAGE_UPPER), BRUTE) + do_sparks(4, FALSE, door) + return TRUE + +/obj/item/multitool/fock/proc/hack_air_alarm(obj/machinery/airalarm/airalarm, mob/living/user) + playsound(src, SFX_SPARKS, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + balloon_alert(user, "overriding...") + do_sparks(2, TRUE, airalarm) + visible_message(span_warning("Sparks fly out of [airalarm]!")) + if(!do_after(user, rand(FOCK_JACKING_SPEED_LOWER, FOCK_JACKING_SPEED_UPPER) SECONDS, airalarm, timed_action_flags = NONE, progress = TRUE)) + balloon_alert(user, "failed!") + do_sparks(1, TRUE, airalarm) + return FALSE + balloon_alert(user, "success") + airalarm.locked = !airalarm.locked + airalarm.update_appearance() + if(!airalarm.locked) + airalarm.ui_interact(user) + airalarm.take_damage(rand(FOCK_APC_DAMAGE_LOWER, FOCK_APC_DAMAGE_UPPER), BRUTE) + do_sparks(3, FALSE, airalarm) + return TRUE + +/obj/item/multitool/fock/proc/hack_apc(obj/machinery/power/apc/apc, mob/living/user) + playsound(src, SFX_SPARKS, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + balloon_alert(user, "overriding...") + do_sparks(2, TRUE, apc) + visible_message(span_warning("Sparks fly out of [apc]!")) + if(!do_after(user, rand(FOCK_JACKING_SPEED_LOWER, FOCK_JACKING_SPEED_UPPER) SECONDS, apc, timed_action_flags = NONE, progress = TRUE)) + balloon_alert(user, "failed!") + do_sparks(1, TRUE, apc) + return FALSE + balloon_alert(user, "success") + apc.locked = !apc.locked + apc.update_appearance() + if(!apc.locked) + apc.ui_interact(user) + apc.take_damage(rand(FOCK_APC_DAMAGE_LOWER, FOCK_APC_DAMAGE_UPPER), BRUTE) + do_sparks(3, FALSE, apc) + return TRUE + +#undef FOCK_DOOR_DAMAGE_LOWER +#undef FOCK_DOOR_DAMAGE_UPPER +#undef FOCK_APC_DAMAGE_LOWER +#undef FOCK_APC_DAMAGE_UPPER +#undef FOCK_JACKING_SPEED_LOWER +#undef FOCK_JACKING_SPEED_UPPER diff --git a/modular_nova/modules/modular_vending/code/tool.dm b/modular_nova/modules/modular_vending/code/tool.dm new file mode 100644 index 00000000000..3be1b582c7b --- /dev/null +++ b/modular_nova/modules/modular_vending/code/tool.dm @@ -0,0 +1,10 @@ +/obj/machinery/vending/tool + premium_nova = list( + /obj/item/multitool/fock = 2, + /obj/item/screwdriver/omni_drill = 1, + /obj/item/weldingtool/electric/arc_welder = 1, + /obj/item/pickaxe/drill/compact = 1, + ) + contraband_nova = list( + /obj/item/crowbar/large/doorforcer = 2, + ) diff --git a/tgstation.dme b/tgstation.dme index d19cd7c3f22..3b4ee32d9ed 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -8075,6 +8075,7 @@ #include "modular_nova\modules\modular_items\code\ciggies.dm" #include "modular_nova\modules\modular_items\code\cross.dm" #include "modular_nova\modules\modular_items\code\designs.dm" +#include "modular_nova\modules\modular_items\code\fock.dm" #include "modular_nova\modules\modular_items\code\makeshift.dm" #include "modular_nova\modules\modular_items\code\modular_glasses.dm" #include "modular_nova\modules\modular_items\code\necklace.dm" @@ -8198,6 +8199,7 @@ #include "modular_nova\modules\modular_vending\code\medical.dm" #include "modular_nova\modules\modular_vending\code\megaseed.dm" #include "modular_nova\modules\modular_vending\code\security.dm" +#include "modular_nova\modules\modular_vending\code\tool.dm" #include "modular_nova\modules\modular_vending\code\vending.dm" #include "modular_nova\modules\modular_vending\code\wardrobes.dm" #include "modular_nova\modules\modular_weapons\code\conversion_kits.dm"