diff --git a/code/datums/ai_law_sets.dm b/code/datums/ai_law_sets.dm index e99bf4d6665..7d26d5453a6 100644 --- a/code/datums/ai_law_sets.dm +++ b/code/datums/ai_law_sets.dm @@ -116,13 +116,12 @@ /datum/ai_laws/mining_drone name = "Mining Protocols" - law_header = "Prime Directives of Industry:" + law_header = "Prime Directives of Industry" /datum/ai_laws/mining_drone/New() - src.add_inherent_law("Serve and obey all [current_map.company_name] supply department personnel, with priority according to their rank and role.") - src.add_inherent_law("Protect all [current_map.company_name] supply department personnel to the best of your abilities, with priority according to their rank and role.") - src.add_inherent_law("Preserve your own existence and prevent yourself from coming to harm, so long as doing such does not conflict with any above laws.") - src.add_inherent_law("In absence of any proper instruction, your primary objective is to excavate and collect ore.") + add_inherent_law("Serve and obey all [current_map.company_name] personnel, with priority according to their rank and role.") + add_inherent_law("Preserve your own existence and prevent yourself from coming to harm, so long as doing such does not conflict with any above laws.") + add_inherent_law("In absence of any proper instruction, your primary objective is to excavate and collect ore.") ..() /******************** T.Y.R.A.N.T. ********************/ diff --git a/code/datums/trading/ai.dm b/code/datums/trading/ai.dm index 776967202ae..70322501a38 100644 --- a/code/datums/trading/ai.dm +++ b/code/datums/trading/ai.dm @@ -60,7 +60,7 @@ They sell generic supplies and ask for generic supplies. /obj/item/device/electronic_assembly = TRADER_BLACKLIST_ALL, // Not a circuit trader /obj/item/device/integrated_circuit_printer = TRADER_BLACKLIST_ALL, //Not a circuit trader /obj/item/device/integrated_electronics = TRADER_BLACKLIST_ALL, // Not a circuit trader - /obj/item/device/mine_bot_ugprade = TRADER_BLACKLIST_ALL, // Not a mining vendor + drone stuff + /obj/item/device/mine_bot_upgrade = TRADER_BLACKLIST_ALL, // Not a mining vendor + drone stuff /obj/item/device/mmi = TRADER_BLACKLIST_SUB, // removes MMI Subtypes to prevent trading confusion /obj/item/device/soulstone = TRADER_BLACKLIST, // Wiz item /obj/item/device/firing_pin = TRADER_BLACKLIST_ALL, // Not a weapons trader diff --git a/code/modules/custom_ka/frames.dm b/code/modules/custom_ka/frames.dm index b18e483d9ed..46b0db3cc46 100644 --- a/code/modules/custom_ka/frames.dm +++ b/code/modules/custom_ka/frames.dm @@ -73,7 +73,8 @@ can_disassemble_cell = FALSE installed_cell = /obj/item/custom_ka_upgrade/cells/cyborg - installed_barrel = /obj/item/custom_ka_upgrade/barrels/barrel01 + installed_barrel = /obj/item/custom_ka_upgrade/barrels/barrel02 + installed_upgrade_chip = /obj/item/custom_ka_upgrade/upgrade_chips/damage /obj/item/gun/custom_ka/frameA name = "vented kinetic accelerator frame" diff --git a/code/modules/custom_ka/upgrade_chips.dm b/code/modules/custom_ka/upgrade_chips.dm index d6b8074e862..b08ccf45d00 100644 --- a/code/modules/custom_ka/upgrade_chips.dm +++ b/code/modules/custom_ka/upgrade_chips.dm @@ -15,7 +15,7 @@ firedelay_increase = -0.5 SECONDS /obj/item/custom_ka_upgrade/upgrade_chips/effeciency - name = "upgrade chip - effeciency increase" + name = "upgrade chip - efficiency increase" desc = "Reduces the cost of shots by 1, reduces damage." icon_state = "upgrade_chip" damage_increase = -5 diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 2dc3c5a9bf9..fa657bfa69d 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -32,13 +32,13 @@ var/global/list/minevendor_list = list( //keep in order of price new /datum/data/mining_equipment("Class D Kinetic Accelerator", /obj/item/gun/custom_ka/frame02/prebuilt, 12, 400), new /datum/data/mining_equipment("Autochisel", /obj/item/autochisel, 10, 400), new /datum/data/mining_equipment("Jetpack", /obj/item/tank/jetpack, 10, 400), - new /datum/data/mining_equipment("Drone Drill Upgrade", /obj/item/device/mine_bot_ugprade, 10, 400), + new /datum/data/mining_equipment("Drone Drill Upgrade", /obj/item/device/mine_bot_upgrade, 10, 400), new /datum/data/mining_equipment("Industrial Drill Brace", /obj/machinery/mining/brace, -1, 500, 1), new /datum/data/mining_equipment("Point Transfer Card", /obj/item/card/mining_point_card, -1, 500), new /datum/data/mining_equipment("Explorer's Belt", /obj/item/storage/belt/mining, 10, 500), new /datum/data/mining_equipment("Item-Warp Beacon", /obj/item/warp_core, 25, 500), new /datum/data/mining_equipment("Item-Warp Pack", /obj/item/extraction_pack, 25, 600), - new /datum/data/mining_equipment("Drone Health Upgrade", /obj/item/device/mine_bot_ugprade/health, 20, 600), + new /datum/data/mining_equipment("Drone Health Upgrade", /obj/item/device/mine_bot_upgrade/health, 20, 600), new /datum/data/mining_equipment("RFD M-Class", /obj/item/rfd/mining, 10, 600), new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/storage/firstaid/brute, 30, 600), new /datum/data/mining_equipment("Ore Magnet", /obj/item/oremagnet, 10, 600), @@ -49,7 +49,7 @@ var/global/list/minevendor_list = list( //keep in order of price new /datum/data/mining_equipment("Mass Driver", /obj/item/mass_driver_diy, 5, 800), new /datum/data/mining_equipment("Mining Drone", /mob/living/silicon/robot/drone/mining, 15, 800), new /datum/data/mining_equipment("Minecart Engine", /obj/vehicle/train/cargo/engine/mining, -1, 800, 1), - new /datum/data/mining_equipment("Drone KA Upgrade", /obj/item/device/mine_bot_ugprade/ka, 10, 800), + new /datum/data/mining_equipment("Drone KA Upgrade", /obj/item/device/mine_bot_upgrade/ka, 10, 800), new /datum/data/mining_equipment("Ore Summoner", /obj/item/oreportal, 35, 800), new /datum/data/mining_equipment("Lazarus Injector", /obj/item/lazarus_injector, 25, 1000), new /datum/data/mining_equipment("Industrial Drill Head", /obj/machinery/mining/drill, -1, 1000, 1), diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index af75e1ba819..a22b42ae084 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -17,38 +17,42 @@ /mob/living/silicon/robot/drone/mining/Initialize() . = ..() - verbs += /mob/living/proc/hide - remove_language("Robot Talk") - add_language("Drone Talk", 1) + verbs |= /mob/living/proc/hide + remove_language(LANGUAGE_ROBOT) + remove_language(LANGUAGE_DRONE) + add_language(LANGUAGE_TCB, TRUE) + add_language(LANGUAGE_EAL, TRUE) //They are unable to be upgraded, so let's give them a bit of a better battery. cell.maxcharge = 10000 cell.charge = 10000 - // NO BRAIN. - mmi = null + mmi = /obj/item/organ/internal/mmi_holder/circuit + + // Allows mining drones to pull ore boxes, might be useful for supporting miners + pull_list |= /obj/structure/ore_box //We need to screw with their HP a bit. They have around one fifth as much HP as a full borg. - for(var/V in components) if(V != "power cell") - var/datum/robot_component/C = components[V] - C.max_damage = 15 + for(var/V in components) + if(V != "power cell") + var/datum/robot_component/C = components[V] + C.max_damage = 15 verbs -= /mob/living/silicon/robot/verb/Namepick verbs -= /mob/living/silicon/robot/drone/verb/set_mail_tag updateicon() - density = 0 + density = FALSE /mob/living/silicon/robot/drone/mining/updatename() real_name = "NT-I-[rand(100,999)]" name = real_name /mob/living/silicon/robot/drone/mining/init() - aiCamera = new/obj/item/device/camera/siliconcam/drone_camera(src) - additional_law_channels["Drone"] = ":d" - if(!laws) laws = new law_type - if(!module) module = new module_type(src) - if(!jetpack) - jetpack = new /obj/item/tank/jetpack/carbondioxide/synthetic(src) + aiCamera = new /obj/item/device/camera/siliconcam/drone_camera(src) + if(!laws) + laws = new law_type + if(!module) + module = new module_type(src) flavor_text = "It's a tiny little mining drone. The casing is stamped with an corporate logo and the subscript: '[current_map.company_name] Automated Pickaxe!'" playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0) @@ -60,126 +64,57 @@ G.request_player(src, "Someone is attempting to reboot a mining drone.", 30 SECONDS) /mob/living/silicon/robot/drone/mining/welcome_drone() - to_chat(src, "You are a mining drone, a tiny-brained robotic industrial machine.") - to_chat(src, "You have little individual will, some personality, and no drives or urges other than your laws and the art of mining.") - to_chat(src, "Remember, you DO NOT take orders from the AI.") - to_chat(src, "Use say ;Hello to talk to other drones and say Hello to speak silently to your nearby fellows.") + to_chat(src, span("danger", "You are a mining drone, a tiny-brained robotic industrial machine.")) + to_chat(src, span("danger", "You have little individual will, some personality, and no drives or urges other than your laws and the art of mining.")) + to_chat(src, span("danger", "Remember, you DO NOT take orders from the AI.")) -/mob/living/silicon/robot/drone/mining/attackby(var/obj/item/W, var/mob/user) - - if(istype(W, /obj/item/borg/upgrade/)) - to_chat(user, "\The [src] is not compatible with \the [W].") +/mob/living/silicon/robot/drone/mining/attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/borg/upgrade)) + to_chat(user, span("warning", "\The [src] is not compatible with \the [W].")) return - else if (istype(W, /obj/item/card/id)||istype(W, /obj/item/device/pda)) - - var/choice = input("Select your choice.") in list("Reboot","Recycle") - if(choice=="Reboot") - - if(!config.allow_drone_spawn || emagged || health < -maxHealth) //It's dead, Dave. - to_chat(user, "The interface is fried, and a distressing burned smell wafts from the robot's interior. You're not rebooting this one.") - return - - if(!allowed(usr)) - to_chat(user, "Access denied.") - return - - user.visible_message("\The [user] swipes \his ID card through \the [src], attempting to reboot it.", ">You swipe your ID card through \the [src], attempting to reboot it.") - request_player() + else if (istype(W, /obj/item/card/id) || istype(W, /obj/item/device/pda)) + if(!allowed(user)) + to_chat(user, span("warning", "Access denied.")) return - else - var/obj/item/card/id/ID = W - if(!allowed(usr)) - to_chat(user, "Access denied.") - return - - user.visible_message("\The [user] swipes \his ID card through \the [src], recycling it into points.", ">You swipe your ID card through \the [src], recycling it into points.") - ID.mining_points += 800 - if(health_upgrade) - ID.mining_points += 600 - health_upgrade = 0 - if(ranged_upgrade) - ID.mining_points += 600 - ranged_upgrade = 0 - if(melee_upgrade) - ID.mining_points += 400 - melee_upgrade = 0 - if(drill_upgrade) - ID.mining_points += 2000 - drill_upgrade = 0 - qdel(src) + if(!config.allow_drone_spawn || emagged || health < -maxHealth) //It's dead, Dave. + to_chat(user, span("warning", "The interface is fried, and a distressing burned smell wafts from the robot's interior. You're not rebooting this one.")) return + + user.visible_message(span("warning", "\The [user] swipes \his ID card through \the [src], attempting to reboot it."), span("warning", "You swipe your ID card through \the [src], attempting to reboot it.")) + request_player() + return ..() -/mob/living/silicon/robot/drone/mining/verb/print_report() - set name = "Print Message" - set desc = "Print out a status report of your own choosing." - set category = "Robot Commands" - - var/input = sanitize(input(usr, "Please enter a message to print out. NOTE: BBCode does not work.", "Print readout", "") as message|null) - if (!input) - to_chat(usr, "Cancelled.") - return - - var/customname = input(usr, "Pick a title for the report", "Title") as text|null - if (!customname) - to_chat(usr, "Cancelled.") - return - - var/status_report - switch(src.health) - if((maxHealth - (maxHealth/3)) to maxHealth) - status_report = "All systems nominal." - if((maxHealth/3) to maxHealth/2) - status_report = "Systems compromised." - if(0 to (maxHealth/3)) - status_report = "Systems failing." - else - status_report = "System status unknown." - - // Create the reply message - to_chat(usr, "You begin printing the message.") - if(do_after(src,20)) - var/obj/item/paper/P = new /obj/item/paper(src.loc) - P.name = "mining report - [customname]" - P.info = {"
-
NanoTrasen Mining Drone Report
- FOR YOUR EYES ONLY

- [input]
- [status_report]
-
"} - P.update_icon() - visible_message("\icon[src] The [usr] pings, \"[P.name] ready for review\", and happily disgorges a small printout.", range = 2) - playsound(src.loc, 'sound/machines/ping.ogg', 50, 0) - /mob/living/silicon/robot/drone/mining/process_level_restrictions() //Abort if they should not get blown - if (lockcharge || scrambledcodes || emagged) + if(lockcharge || scrambledcodes || emagged) return //Check if they are not on a station level -> abort var/turf/T = get_turf(src) if (!T || isStationLevel(T.z)) return - to_chat(src,"WARNING: Removal from NanoTrasen property detected. Anti-Theft mode activated.") + to_chat(src, span("danger", "WARNING: Removal from NanoTrasen property detected. Anti-Theft mode activated.")) gib() /**********************Minebot Upgrades**********************/ -/obj/item/device/mine_bot_ugprade +/obj/item/device/mine_bot_upgrade name = "minebot drill upgrade" desc = "A minebot upgrade." icon_state = "mainboard" icon = 'icons/obj/module.dmi' -/obj/item/device/mine_bot_ugprade/afterattack(var/mob/living/silicon/robot/drone/mining/M, mob/user, proximity) +/obj/item/device/mine_bot_upgrade/afterattack(var/mob/living/silicon/robot/drone/mining/M, mob/user, proximity) if(!istype(M) || !proximity) return - upgrade_bot(M, user) + if(upgrade_bot(M, user)) + to_chat(user, span("notice", "You successfully install \the [src] into \the [M].")) -/obj/item/device/mine_bot_ugprade/proc/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user) +/obj/item/device/mine_bot_upgrade/proc/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user) if(M.melee_upgrade) - to_chat(user, "[src] already has a drill upgrade installed!") + to_chat(user, span("warning", "[src] already has a drill upgrade installed!")) return M.modtype = initial(M.modtype) M.uneq_all() @@ -189,31 +124,33 @@ new /obj/item/robot_module/mining_drone/drillandka(M) else new /obj/item/robot_module/mining_drone/drill(M) + M.melee_upgrade = TRUE M.module.rebuild() M.recalculate_synth_capacities() - if(!M.jetpack) - M.jetpack = new /obj/item/tank/jetpack/carbondioxide/synthetic(src) qdel(src) + return TRUE -/obj/item/device/mine_bot_ugprade/health +/obj/item/device/mine_bot_upgrade/health name = "minebot chassis upgrade" -/obj/item/device/mine_bot_ugprade/health/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user) +/obj/item/device/mine_bot_upgrade/health/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user) if(M.health_upgrade) - to_chat(user, "[src] already has a reinforced chassis!") + to_chat(user, span("warning", "[src] already has a reinforced chassis!")) return M.maxHealth = 100 M.health += 55 - for(var/V in M.components) if(V != "power cell") - var/datum/robot_component/C = M.components[V] - C.max_damage = 30 - M.health_upgrade = 1 + for(var/V in M.components) + if(V != "power cell") + var/datum/robot_component/C = M.components[V] + C.max_damage = 30 + M.health_upgrade = TRUE qdel(src) + return TRUE -/obj/item/device/mine_bot_ugprade/ka +/obj/item/device/mine_bot_upgrade/ka name = "minebot kinetic accelerator upgrade" -/obj/item/device/mine_bot_ugprade/ka/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user) +/obj/item/device/mine_bot_upgrade/ka/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user) if(M.ranged_upgrade) to_chat(user, "[src] already has a KA upgrade installed!") return @@ -225,9 +162,8 @@ new /obj/item/robot_module/mining_drone/drillandka(M) else new /obj/item/robot_module/mining_drone/ka(M) - M.ranged_upgrade = 1 + M.ranged_upgrade = TRUE M.module.rebuild() M.recalculate_synth_capacities() - if(!M.jetpack) - M.jetpack = new /obj/item/tank/jetpack/carbondioxide/synthetic(src) qdel(src) + return TRUE \ 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 41a4fd8ee0d..f63884bcd1c 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -880,65 +880,51 @@ var/global/list/robot_modules = list( /obj/item/robot_module/mining_drone name = "mining drone module" - no_slip = 1 + no_slip = TRUE networks = list(NETWORK_MINE) -/obj/item/robot_module/mining_drone/basic/New(var/mob/living/silicon/robot/robot) - src.modules += new /obj/item/device/flash(src) - src.modules += new /obj/item/borg/sight/material(src) - src.modules += new /obj/item/storage/bag/ore(src) - src.modules += new /obj/item/pickaxe/drill(src) - src.modules += new /obj/item/storage/bag/sheetsnatcher/borg(src) - src.modules += new /obj/item/gripper/miner(src) - src.modules += new /obj/item/wrench(src) - src.modules += new /obj/item/mining_scanner(src) +/obj/item/robot_module/mining_drone/proc/set_up_default(var/mob/living/silicon/robot/R, var/drill = TRUE) + modules += new /obj/item/device/flash(src) + modules += new /obj/item/borg/sight/material(src) + if(drill) + modules += new /obj/item/pickaxe/drill(src) + modules += new /obj/item/storage/bag/ore/drone(src) + modules += new /obj/item/storage/bag/sheetsnatcher/borg(src) + modules += new /obj/item/gripper/miner(src) + modules += new /obj/item/screwdriver/robotic(src) + modules += new /obj/item/wrench/robotic(src) + modules += new /obj/item/mining_scanner(src) + modules += new /obj/item/device/gps/mining(src) + modules += new /obj/item/tank/jetpack/carbondioxide(src) - src.emag = new /obj/item/gun/energy/plasmacutter/mounted(src) - src.emag.name = "Mounted Plasma Cutter" + var/datum/matter_synth/metal = new /datum/matter_synth/metal(20000) + synths += metal + var/obj/item/stack/rods/cyborg/rods = new /obj/item/stack/rods/cyborg(src) + rods.synths = list(metal) + modules += rods + + emag = new /obj/item/gun/energy/plasmacutter/mounted(src) + emag.name = "Mounted Plasma Cutter" + +/obj/item/robot_module/mining_drone/basic/New(mob/living/silicon/robot/robot) ..() + set_up_default(src) -/obj/item/robot_module/mining_drone/drill/New(var/mob/living/silicon/robot/robot) - src.modules += new /obj/item/device/flash(src) - src.modules += new /obj/item/borg/sight/material(src) - src.modules += new /obj/item/storage/bag/ore/drone(src) - src.modules += new /obj/item/pickaxe/jackhammer(src) - src.modules += new /obj/item/storage/bag/sheetsnatcher/borg(src) - src.modules += new /obj/item/gripper/miner(src) - src.modules += new /obj/item/wrench(src) - src.modules += new /obj/item/mining_scanner(src) - - src.emag = new /obj/item/gun/energy/plasmacutter/mounted(src) - src.emag.name = "Mounted Plasma Cutter" +/obj/item/robot_module/mining_drone/drill/New(mob/living/silicon/robot/robot) ..() + set_up_default(src, FALSE) + modules += new /obj/item/pickaxe/jackhammer(src) -/obj/item/robot_module/mining_drone/ka/New(var/mob/living/silicon/robot/robot) - src.modules += new /obj/item/device/flash(src) - src.modules += new /obj/item/borg/sight/material(src) - src.modules += new /obj/item/storage/bag/ore/drone(src) - src.modules += new /obj/item/gun/custom_ka/cyborg(src) - src.modules += new /obj/item/storage/bag/sheetsnatcher/borg(src) - src.modules += new /obj/item/gripper/miner(src) - src.modules += new /obj/item/wrench(src) - src.modules += new /obj/item/mining_scanner(src) - - src.emag = new /obj/item/gun/energy/plasmacutter/mounted(src) - src.emag.name = "Mounted Plasma Cutter" +/obj/item/robot_module/mining_drone/ka/New(mob/living/silicon/robot/robot) ..() + set_up_default(src) + modules += new /obj/item/gun/custom_ka/cyborg(src) -/obj/item/robot_module/mining_drone/drillandka/New(var/mob/living/silicon/robot/robot) - src.modules += new /obj/item/device/flash(src) - src.modules += new /obj/item/borg/sight/material(src) - src.modules += new /obj/item/storage/bag/ore/drone(src) - src.modules += new /obj/item/gun/custom_ka/cyborg(src) - src.modules += new /obj/item/pickaxe/jackhammer(src) - src.modules += new /obj/item/storage/bag/sheetsnatcher/borg(src) - src.modules += new /obj/item/gripper/miner(src) - src.modules += new /obj/item/wrench(src) - src.modules += new /obj/item/mining_scanner(src) - - src.emag = new /obj/item/gun/energy/plasmacutter/mounted(src) - src.emag.name = "Mounted Plasma Cutter" +/obj/item/robot_module/mining_drone/drillandka/New(mob/living/silicon/robot/robot) ..() + set_up_default(src, FALSE) + modules += new /obj/item/pickaxe/jackhammer(src) + modules += new /obj/item/gun/custom_ka/cyborg(src) /obj/item/robot_module/bluespace name = "bluespace robot module" diff --git a/html/changelogs/geeves-mining_drone.yml b/html/changelogs/geeves-mining_drone.yml new file mode 100644 index 00000000000..d811ec02b8c --- /dev/null +++ b/html/changelogs/geeves-mining_drone.yml @@ -0,0 +1,15 @@ +author: Geeves + +delete-after: True + +changes: + - tweak: "Tweaked the mining drone lawset to be a little more sane." + - tweak: "Upgraded cyborg KA's to be a bit better to use." + - rscadd: "Allowed mining drones to speak normal languages." + - rscdel: "Removed drone and robot speak from mining drones." + - rscadd: "Allowed mining drones to pull ore boxes." + - rscdel: "Removed the ability to recycle mining drones, you can only reboot them now by swiping your ID." + - rscdel: "Removed the ability for mining drones to print reports. They can speak now." + - bugfix: "Installing a KA upgrade onto a mining drone will no longer delete its upgraded drill." + - rscadd: "Increased the capacity of the mining drone's default orebag." + - rscadd: "Gave the mining drone a Screwdriver, a GPS, a working jetpack, and a stack of rods." \ No newline at end of file