diff --git a/code/__defines/admin_vr.dm b/code/__defines/admin_vr.dm index aceb8c08beb..c03c24bb810 100644 --- a/code/__defines/admin_vr.dm +++ b/code/__defines/admin_vr.dm @@ -8,3 +8,5 @@ #define MODIFIY_ROBOT_MODULE_REMOVE "Remove a Module" #define MODIFIY_ROBOT_RADIOC_ADD "Add a Radio Channel" #define MODIFIY_ROBOT_RADIOC_REMOVE "Remove a Radio Channel" +#define MODIFIY_ROBOT_COMP_ADD "Replace a Component" +#define MODIFIY_ROBOT_COMP_REMOVE "Remove a Component" diff --git a/code/modules/admin/verbs/modify_robot.dm b/code/modules/admin/verbs/modify_robot.dm index 6cf2d8d0b02..e05f48adede 100644 --- a/code/modules/admin/verbs/modify_robot.dm +++ b/code/modules/admin/verbs/modify_robot.dm @@ -12,7 +12,7 @@ if(!target.module.modules) return - var/list/modification_options = list(MODIFIY_ROBOT_MODULE_ADD,MODIFIY_ROBOT_MODULE_REMOVE, MODIFIY_ROBOT_RADIOC_ADD, MODIFIY_ROBOT_RADIOC_REMOVE) + var/list/modification_options = list(MODIFIY_ROBOT_MODULE_ADD,MODIFIY_ROBOT_MODULE_REMOVE, MODIFIY_ROBOT_RADIOC_ADD, MODIFIY_ROBOT_RADIOC_REMOVE, MODIFIY_ROBOT_COMP_ADD, MODIFIY_ROBOT_COMP_REMOVE) var/modification_choice = tgui_input_list(usr, "Select if you want to add or remove a module to/from [target]","Choice", modification_options) if(!modification_choice) @@ -139,3 +139,48 @@ target.radio.channels[n_chan] -= target.module.channels[n_chan] radio_controller.remove_object(target.radio, radiochannels[selected_radio_channel]) target.radio.secure_radio_connections -= selected_radio_channel + if(MODIFIY_ROBOT_COMP_ADD) + while(TRUE) + var/selected_component = tgui_input_list(usr, "Please select the component to add or replace", "Component", target.components) + if(!selected_component || selected_component == "Cancel") + break + var/datum/robot_component/C = target.components[selected_component] + if(C.wrapped && !selected_component == "power cell") + qdel(C.wrapped) + switch(selected_component) + if("actuator") + C.wrapped = new /obj/item/robot_parts/robot_component/actuator(src) + if("radio") + C.wrapped = new /obj/item/robot_parts/robot_component/radio(src) + if("power cell") + var/list/recommended_cells = list(/obj/item/weapon/cell/robot_station, /obj/item/weapon/cell/high, /obj/item/weapon/cell/super, /obj/item/weapon/cell/robot_syndi, /obj/item/weapon/cell/hyper, + /obj/item/weapon/cell/infinite, /obj/item/weapon/cell/potato, /obj/item/weapon/cell/slime) + var/celltype = tgui_input_list(usr, "What kind of cell do you want to install?", "Cells", recommended_cells) + if(!celltype || celltype == "Cancel") + continue + qdel(C.wrapped) + target.cell = new celltype(src) + C.wrapped = target.cell + if("diagnosis unit") + C.wrapped = new /obj/item/robot_parts/robot_component/diagnosis_unit(src) + if("camera") + C.wrapped = new /obj/item/robot_parts/robot_component/camera(src) + if("comms") + C.wrapped = new /obj/item/robot_parts/robot_component/binary_communication_device(src) + if("armour") + C.wrapped = new /obj/item/robot_parts/robot_component/armour(src) + C.install() + C.installed = 1 + if(MODIFIY_ROBOT_COMP_REMOVE) + while(TRUE) + var/selected_component = tgui_input_list(usr, "Please select the component to remove", "Component", target.components) + if(!selected_component || selected_component == "Cancel") + break + var/datum/robot_component/C = target.components[selected_component] + if(C.wrapped) + C.uninstall() + C.installed = 0 + qdel(C.wrapped) + C.wrapped = null + if(selected_component == "power cell") + target.cell = null diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 05ce14c9164..e05e0322d0c 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -148,9 +148,7 @@ C.wrapped = new C.external_type if(!cell) - cell = new /obj/item/weapon/cell(src) - cell.maxcharge = 7500 - cell.charge = 7500 + cell = new /obj/item/weapon/cell/robot_station(src) else if(ispath(cell)) cell = new cell(src) @@ -177,6 +175,38 @@ . = ..() update_icon() +/mob/living/silicon/robot/rejuvenate() + for (var/V in components) + var/datum/robot_component/C = components[V] + if(istype(C.wrapped, /obj/item/broken_device)) + qdel(C.wrapped) + if(!C.wrapped) + switch(V) + if("actuator") + C.wrapped = new /obj/item/robot_parts/robot_component/actuator(src) + if("radio") + C.wrapped = new /obj/item/robot_parts/robot_component/radio(src) + if("power cell") + var/list/recommended_cells = list(/obj/item/weapon/cell/robot_station, /obj/item/weapon/cell/high, /obj/item/weapon/cell/super, /obj/item/weapon/cell/robot_syndi, /obj/item/weapon/cell/hyper, + /obj/item/weapon/cell/infinite, /obj/item/weapon/cell/potato, /obj/item/weapon/cell/slime) + var/celltype = tgui_input_list(usr, "What kind of cell do you want to install? Cancel installs a default robot cell.", "Cells", recommended_cells) + if(!celltype || !celltype == "Cancel") + celltype = /obj/item/weapon/cell/robot_station + cell = new celltype(src) + C.wrapped = cell + if("diagnosis unit") + C.wrapped = new /obj/item/robot_parts/robot_component/diagnosis_unit(src) + if("camera") + C.wrapped = new /obj/item/robot_parts/robot_component/camera(src) + if("comms") + C.wrapped = new /obj/item/robot_parts/robot_component/binary_communication_device(src) + if("armour") + C.wrapped = new /obj/item/robot_parts/robot_component/armour(src) + C.installed = 1 + C.install() + cell.charge = cell.maxcharge + ..() + /mob/living/silicon/robot/proc/init() aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src) laws = new /datum/ai_laws/nanotrasen() diff --git a/code/modules/mob/living/silicon/robot/syndicate.dm b/code/modules/mob/living/silicon/robot/syndicate.dm index 18d2b9ce80d..286b2abf75c 100644 --- a/code/modules/mob/living/silicon/robot/syndicate.dm +++ b/code/modules/mob/living/silicon/robot/syndicate.dm @@ -8,9 +8,7 @@ /mob/living/silicon/robot/syndicate/New() if(!cell) - cell = new /obj/item/weapon/cell(src) - cell.maxcharge = 25000 - cell.charge = 25000 + cell = new /obj/item/weapon/cell/robot_syndi(src) ..() diff --git a/code/modules/power/cells/power_cells.dm b/code/modules/power/cells/power_cells.dm index 082abfb9da4..c164c9e17c9 100644 --- a/code/modules/power/cells/power_cells.dm +++ b/code/modules/power/cells/power_cells.dm @@ -34,6 +34,13 @@ maxcharge = 5000 matter = list(MAT_STEEL = 700, MAT_GLASS = 50) +/* + * Robot + */ +/obj/item/weapon/cell/robot_station + name = "A standard robot power cell" + maxcharge = 7500 + /* * High */ @@ -64,6 +71,14 @@ charge = 0 update_icon() +/* + * Syndicate + */ +/obj/item/weapon/cell/robot_syndi + name = "A syndicate robot power cell" + description_fluff = "Almost as good as a hyper." + maxcharge = 25000 + /* * Hyper */ @@ -223,4 +238,4 @@ desc += " This one has already been used." cut_overlays() target.adjust_nutrition(amount) - user.custom_emote(message = "connects \the [src] to [user == target ? "their" : "[target]'s"] charging port, expending it.") \ No newline at end of file + user.custom_emote(message = "connects \the [src] to [user == target ? "their" : "[target]'s"] charging port, expending it.")