diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index def1e00057c..b7fb46e461a 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -171,6 +171,9 @@ return 1 return 0 +/obj/item/weapon/rcd/borg/infinite/useResource() + return 1 + /obj/item/weapon/rcd/borg/attackby() return diff --git a/code/modules/mob/living/silicon/robot/presets.dm b/code/modules/mob/living/silicon/robot/presets.dm index c501bfb5357..d985b9662db 100644 --- a/code/modules/mob/living/silicon/robot/presets.dm +++ b/code/modules/mob/living/silicon/robot/presets.dm @@ -76,3 +76,62 @@ else icon_state = module_sprites[icontype] +/mob/living/silicon/robot/bluespace + modtype = "Bluespace" + spawn_module = /obj/item/weapon/robot_module/bluespace + cell_type = /obj/item/weapon/cell/infinite + overclocked = 1 + lawupdate = 0 + scrambledcodes = 1 + status_flags = GODMODE + +/mob/living/silicon/robot/bluespace/verb/bstwalk() + set name = "Ruin Everything" + set desc = "Uses bluespace technology to phase through solid matter and move quickly." + set category = "BST" + set popup_menu = 0 + + if(!src.incorporeal_move) + src.incorporeal_move = 2 + to_chat(src, span("notice", "You will now phase through solid matter.")) + else + src.incorporeal_move = 0 + to_chat(src, span("notice", "You will no-longer phase through solid matter.")) + return + +/mob/living/silicon/robot/bluespace/verb/bstrecover() + set name = "Rejuv" + set desc = "Use the bluespace within you to restore your health" + set category = "BST" + set popup_menu = 0 + + src.revive() + +/mob/living/silicon/robot/bluespace/verb/bstquit() + set name = "Teleport out" + set desc = "Activate bluespace to leave and return to your original mob (if you have one)." + set category = "BST" + + src.custom_emote(1,"politely beeps with all ligth starting to flash.") + spark(src, 5, alldirs) + addtimer(CALLBACK(GLOBAL_PROC, .proc/qdel, src), 10, TIMER_CLIENT_TIME) + animate(src, alpha = 0, time = 9, easing = QUAD_EASING) + + if(key) + if(client.holder && client.holder.original_mob) + client.holder.original_mob.key = key + else + var/mob/abstract/observer/ghost = new(src) //Transfer safety to observer spawning proc. + ghost.key = key + ghost.mind.name = "[ghost.key] BSTech" + ghost.name = "[ghost.key] BSTech" + ghost.real_name = "[ghost.key] BSTech" + ghost.voice_name = "[ghost.key] BSTech" + +/mob/living/silicon/robot/bluespace/verb/tgm() + set name = "Toggle Godmode" + set desc = "Enable or disable god mode. For testing things that require you to be vulnerable." + set category = "BST" + + status_flags ^= GODMODE + to_chat(src, span("notice", "God mode is now [status_flags & GODMODE ? "enabled" : "disabled"]")) \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 06d912efee9..c1ad5aab8b3 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -1038,4 +1038,176 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/weldingtool/robotic(src) supported_upgrades = list(/obj/item/robot_parts/robot_component/jetpack) - return \ No newline at end of file + return + +/obj/item/weapon/robot_module/bluespace + name = "bluespace robot module" + languages = list( + LANGUAGE_TCB = 1, + LANGUAGE_GUTTER = 1, + LANGUAGE_SIGN = 1, + LANGUAGE_TRADEBAND = 1, + LANGUAGE_UNATHI = 1, + LANGUAGE_AZAZIBA = 1, + LANGUAGE_SIIK_MAAS = 1, + LANGUAGE_SIIK_TAJR = 1, + LANGUAGE_SIGN_TAJARA = 1, + LANGUAGE_SKRELLIAN = 1, + LANGUAGE_SOL_COMMON = 1, + LANGUAGE_ROOTSONG = 1, + LANGUAGE_VAURCA = 1, + LANGUAGE_RESOMI = 1, + LANGUAGE_ROBOT = 1, + LANGUAGE_DRONE = 1, + LANGUAGE_EAL = 1, + LANGUAGE_VOX = 1, + LANGUAGE_XENOMORPH = 1, + LANGUAGE_HIVEMIND = 1, + LANGUAGE_CHANGELING = 1, + LANGUAGE_BORER = 1 + ) + channels = list( + "Service" = 1, + "Supply" = 1, + "Science" = 1, + "Security" = 1, + "Engineering" = 1, + "Medical" = 1, + "Command" = 1, + "Response Team" = 1, + "AI Private" = 1 + ) + subsystems = list( + /mob/living/silicon/proc/subsystem_crew_monitor, + /mob/living/silicon/proc/subsystem_power_monitor + ) + sprites = list("Roller" = "droid-combat") //TMP + can_be_pushed = 0 + + +/obj/item/weapon/robot_module/bluespace/New(var/mob/living/silicon/robot/R) + ..() + loc = R + src.modules += new /obj/item/device/flash(src) + src.modules += new /obj/item/borg/sight/meson(src) + src.modules += new /obj/item/borg/sight/hud/med(src) + src.modules += new /obj/item/borg/sight/hud/sec(src) + src.modules += new /obj/item/weapon/rcd/borg/infinite(src) + src.modules += new /obj/item/weapon/extinguisher(src) + src.modules += new /obj/item/weapon/weldingtool/largetank(src) + src.modules += new /obj/item/weapon/screwdriver(src) + src.modules += new /obj/item/weapon/wrench(src) + src.modules += new /obj/item/weapon/crowbar(src) + src.modules += new /obj/item/weapon/wirecutters(src) + src.modules += new /obj/item/device/multitool(src) + src.modules += new /obj/item/device/t_scanner(src) + src.modules += new /obj/item/device/analyzer(src) + src.modules += new /obj/item/weapon/gripper(src) + src.modules += new /obj/item/weapon/gripper/no_use/loader(src) + src.modules += new /obj/item/device/lightreplacer(src) + src.modules += new /obj/item/weapon/inflatable_dispenser(src) + // Medical + src.modules += new /obj/item/device/healthanalyzer(src) + src.modules += new /obj/item/weapon/reagent_containers/borghypo/medical(src) + src.modules += new /obj/item/weapon/scalpel(src) + src.modules += new /obj/item/weapon/hemostat(src) + src.modules += new /obj/item/weapon/retractor(src) + src.modules += new /obj/item/weapon/cautery(src) + src.modules += new /obj/item/weapon/bonegel(src) + src.modules += new /obj/item/weapon/FixOVein(src) + src.modules += new /obj/item/weapon/bonesetter(src) + src.modules += new /obj/item/weapon/circular_saw(src) + src.modules += new /obj/item/weapon/surgicaldrill(src) + src.modules += new /obj/item/weapon/gripper/chemistry(src) + src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src) + src.modules += new /obj/item/weapon/reagent_containers/syringe(src) + src.modules += new /obj/item/weapon/reagent_containers/borghypo/rescue(src) + src.modules += new /obj/item/roller_holder(src) + // Security + src.modules += new /obj/item/weapon/handcuffs/cyborg(src) + src.modules += new /obj/item/weapon/melee/baton/robot(src) + src.modules += new /obj/item/weapon/gun/energy/taser/mounted/cyborg/overclocked(src) + src.modules += new /obj/item/weapon/gun/energy/laser/mounted/cyborg/overclocked(src) + src.modules += new /obj/item/weapon/melee/hammer/powered(src) + src.modules += new /obj/item/weapon/gun/energy/lasercannon/mounted/cyborg/overclocked(src) + src.modules += new /obj/item/borg/combat/shield(src) + src.modules += new /obj/item/borg/combat/mobility(src) + // BST + src.modules += new/obj/item/weapon/card/id/bst(src) + + var/datum/matter_synth/metal = new /datum/matter_synth/metal(60000) + var/datum/matter_synth/glass = new /datum/matter_synth/glass(40000) + var/datum/matter_synth/plasteel = new /datum/matter_synth/plasteel(20000) + var/datum/matter_synth/wire = new /datum/matter_synth/wire(45) + var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(10000) + synths += metal + synths += glass + synths += plasteel + synths += wire + synths += medicine + + var/obj/item/weapon/matter_decompiler/MD = new /obj/item/weapon/matter_decompiler(src) + MD.metal = metal + MD.glass = glass + src.modules += MD + + var/obj/item/stack/material/cyborg/steel/M = new (src) + M.synths = list(metal) + src.modules += M + + var/obj/item/stack/material/cyborg/glass/G = new (src) + G.synths = list(glass) + src.modules += G + + var/obj/item/stack/rods/cyborg/RO = new /obj/item/stack/rods/cyborg(src) + RO.synths = list(metal) + src.modules += RO + + var/obj/item/stack/cable_coil/cyborg/C = new /obj/item/stack/cable_coil/cyborg(src) + C.synths = list(wire) + src.modules += C + + var/obj/item/stack/tile/floor/cyborg/S = new /obj/item/stack/tile/floor/cyborg(src) + S.synths = list(metal) + src.modules += S + + var/obj/item/stack/material/cyborg/glass/reinforced/RG = new (src) + RG.synths = list(metal, glass) + src.modules += RG + + var/obj/item/stack/material/cyborg/plasteel/PL = new (src) + PL.synths = list(plasteel) + src.modules += PL + + var/obj/item/stack/tile/floor_dark/cyborg/FTD = new (src) + FTD.synths = list(plasteel) + src.modules += FTD + + var/obj/item/stack/nanopaste/N = new /obj/item/stack/nanopaste(src) + var/obj/item/stack/medical/advanced/bruise_pack/B = new /obj/item/stack/medical/advanced/bruise_pack(src) + N.uses_charge = 1 + N.charge_costs = list(1000) + N.synths = list(medicine) + B.uses_charge = 1 + B.charge_costs = list(1000) + B.synths = list(medicine) + src.modules += N + src.modules += B + +/obj/item/weapon/robot_module/bluespace/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) + ..() + var/obj/item/weapon/gun/energy/taser/mounted/cyborg/T = locate() in src.modules + if(T.power_supply.charge < T.power_supply.maxcharge) + T.power_supply.give(T.charge_cost * amount) + T.update_icon() + else + T.charge_tick = 0 + var/obj/item/weapon/melee/baton/robot/B = locate() in src.modules + if(B && B.bcell) + B.bcell.give(amount) + var/obj/item/weapon/reagent_containers/syringe/S = locate() in src.modules + if(S.mode == 2) + S.reagents.clear_reagents() + S.mode = initial(S.mode) + S.desc = initial(S.desc) + S.update_icon() diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 9d830f1c06f..d11549a0bc9 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -21,6 +21,10 @@ use_external_power = 1 can_turret = 0 +/obj/item/weapon/gun/energy/laser/mounted/cyborg/overclocked + max_shots = 15 + recharge_time = 1 + /obj/item/weapon/gun/energy/laser/practice name = "practice laser carbine" desc = "A modified version of the HI G40E, this one fires less concentrated energy bolts designed for target practice." @@ -80,6 +84,10 @@ obj/item/weapon/gun/energy/retro recharge_time = 10 can_turret = 0 +/obj/item/weapon/gun/energy/lasercannon/mounted/cyborg/overclocked + recharge_time = 1 + max_shots = 15 + /obj/item/weapon/gun/energy/xray name = "xray laser gun" desc = "A high-power laser gun capable of expelling concentrated xray blasts." diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 758727d4f7c..1cc8abc0556 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -22,6 +22,9 @@ max_shots = 6 recharge_time = 10 //Time it takes for shots to recharge (in ticks) +/obj/item/weapon/gun/energy/taser/mounted/cyborg/overclocked + max_shots = 20 + recharge_time = 1 /obj/item/weapon/gun/energy/stunrevolver name = "stun revolver" diff --git a/html/changelogs/BSB.yml b/html/changelogs/BSB.yml new file mode 100644 index 00000000000..b949423c155 --- /dev/null +++ b/html/changelogs/BSB.yml @@ -0,0 +1,4 @@ +author: Karolis2011 +delete-after: True +changes: + - rscadd: "Added over powered admin only admin preset."