[user] hits [src] with [W].")
+ user.visible_message("[user] hits [src] with [W].", "You hit [src] with [W].")
+ src.take_damage(W.force,W.damtype)
+ src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
+*/
+ return
+
+
+
+/*
+/obj/mecha/attack_ai(var/mob/living/silicon/ai/user as mob)
+ if(!istype(user, /mob/living/silicon/ai))
+ return
+ var/output = {"Assume direct control over [src]?
+ Yes
+ "}
+ user << browse(output, "window=mecha_attack_ai")
+ return
+*/
+
/////////////////////////////////////
//////// Atmospheric stuff ////////
/////////////////////////////////////
-/*
-//standard for /obj class
-/obj/mecha/handle_internal_lifeform(lifeform, volume)
- ..()
- world << "Handling [lifeform] breathing. Requested [volume]"
-*/
-
/obj/mecha/remove_air(amount)
if(use_internal_tank && internal_tank)
return internal_tank.air_contents.remove(amount)
@@ -550,19 +750,6 @@
return internal_tank.return_temperature()
return 0
-
-/*
-/obj/mecha/proc/preserve_temp()
-// set background = 1
- spawn while(src)
- if(cell && cell.charge>0)
- if(src.occupant)
- if(src.occupant.bodytemperature > 320 || src.occupant.bodytemperature < 300)
- src.occupant.bodytemperature += src.occupant.adjust_body_temperature(src.occupant.bodytemperature, 310.15, 10)
- cell.charge--
- sleep(10)
-*/
-
/obj/mecha/proc/connect(obj/machinery/atmospherics/portables_connector/new_port)
//Make sure not already connected to something else
if(connected_port || !new_port || new_port.connected_device)
@@ -708,19 +895,21 @@
/obj/mecha/proc/moved_inside(var/mob/living/carbon/human/H as mob)
if(H && H.client && H in range(1))
- H.client.eye = src
+ H.reset_view(src)
+ /*
H.client.perspective = EYE_PERSPECTIVE
+ H.client.eye = src
+ */
H.pulling = null
+ H.forceMove(src)
src.occupant = H
- H.loc = src
src.add_fingerprint(H)
- src.Entered(H)
- src.Move(src.loc)
+ src.forceMove(src.loc)
src.log_append_to_last("[H] moved in as pilot.")
src.icon_state = initial(icon_state)
dir = dir_in
playsound(src, 'windowdoor.ogg', 50, 1)
- if(!internal_damage)
+ if(!hasInternalDamage())
src.occupant << sound('nominal.ogg',volume=50)
return 1
else
@@ -758,8 +947,11 @@
return 0
user.drop_from_slot(mmi_as_oc)
var/mob/brainmob = mmi_as_oc.brainmob
+ brainmob.reset_view(src)
+ /*
brainmob.client.eye = src
brainmob.client.perspective = EYE_PERSPECTIVE
+ */
occupant = brainmob
brainmob.loc = src //should allow relaymove
brainmob.canmove = 1
@@ -771,7 +963,7 @@
src.icon_state = initial(icon_state)
dir = dir_in
src.log_message("[mmi_as_oc] moved in as pilot.")
- if(!internal_damage)
+ if(!hasInternalDamage())
src.occupant << sound('nominal.ogg',volume=50)
return 1
else
@@ -819,12 +1011,14 @@
mob_container = brain.container
else
return
- if(mob_container.Move(src.loc))//ejecting mob container
+ if(mob_container.forceMove(src.loc))//ejecting mob container
src.log_message("[mob_container] moved out.")
- src.Exited(mob_container)
+ occupant.reset_view()
+ /*
if(src.occupant.client)
src.occupant.client.eye = src.occupant.client.mob
src.occupant.client.perspective = MOB_PERSPECTIVE
+ */
src.occupant << browse(null, "window=exosuit")
if(istype(mob_container, /obj/item/device/mmi))
var/obj/item/device/mmi/mmi = mob_container
@@ -838,54 +1032,9 @@
src.dir = dir_in
return
-/obj/mecha/examine()
- set src in view()
- ..()
- var/integrity = health/initial(health)*100
- switch(integrity)
- if(85 to 100)
- usr << "It's fully intact."
- if(65 to 85)
- usr << "It's slightly damaged."
- if(45 to 65)
- usr << "It's badly damaged."
- if(25 to 45)
- usr << "It's heavily damaged."
- else
- usr << "It's falling apart."
- if(equipment && equipment.len)
- usr << "It's equipped with:"
- for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment)
- usr << "\icon[ME] [ME]"
- return
-
-////// Misc
-
-/obj/mecha/proc/occupant_message(message as text)
- if(message)
- if(src.occupant && src.occupant.client)
- src.occupant << "[message]"
- return
-
-/obj/mecha/proc/log_message(message as text,red=null)
- log.len++
- log[log.len] = list("time"=world.timeofday,"message"="[red?"":null][message][red?"":null]")
- return log.len
-
-/obj/mecha/proc/log_append_to_last(message as text,red=null)
- var/list/last_entry = src.log[src.log.len]
- last_entry["message"] += "
[red?"":null][message][red?"":null]"
- return
-
-
-/obj/mecha/proc/get_log_html()
- var/output = "[src.name] Log"
- for(var/list/entry in log)
- output += {"[time2text(entry["time"],"DDD MMM DD hh:mm:ss")] 2555
- [entry["message"]]
- "}
- output += ""
- return output
+/////////////////////////
+////// Access stuff /////
+/////////////////////////
/obj/mecha/proc/operation_allowed(mob/living/carbon/human/H)
for(var/ID in list(H.equipped(), H.wear_id, H.belt))
@@ -922,140 +1071,9 @@
return 1
-/obj/mecha/proc/dynattackby(obj/item/weapon/W as obj, mob/user as mob)
- src.log_message("Attacked by [W]. Attacker - [user]")
- if(prob(src.deflect_chance))
- user << "\red The [W] bounces off [src.name] armor."
- src.log_append_to_last("Armor saved.")
-/*
- for (var/mob/V in viewers(src))
- if(V.client && !(V.blinded))
- V.show_message("The [W] bounces off [src.name] armor.", 1)
-*/
- else
- src.occupant_message("[user] hits [src] with [W].")
- user.visible_message("[user] hits [src] with [W].", "You hit [src] with [W].")
- src.take_damage(W.force,W.damtype)
- src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
- return
-
-
-/obj/mecha/attackby(obj/item/weapon/W as obj, mob/user as mob)
-
- if(istype(W, /obj/item/device/mmi))
- if(mmi_move_inside(W,user))
- user << "[src]-MMI interface initialized successfuly"
- else
- user << "[src]-MMI interface initialization failed."
- return
-
- if(istype(W, /obj/item/mecha_parts/mecha_equipment))
- var/obj/item/mecha_parts/mecha_equipment/E = W
- spawn()
- if(E.can_attach(src))
- user.drop_item()
- E.attach(src)
- user.visible_message("[user] attaches [W] to [src]", "You attach [W] to [src]")
- else
- user << "You were unable to attach [W] to [src]"
- return
- if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
- if(add_req_access || maint_access)
- if(internals_access_allowed(usr))
- var/obj/item/weapon/card/id/id_card
- if(istype(W, /obj/item/weapon/card/id))
- id_card = W
- else
- var/obj/item/device/pda/pda = W
- id_card = pda.id
- output_maintenance_dialog(id_card, user)
- return
- else
- user << "\red Invalid ID: Access denied."
- else
- user << "\red Maintenance protocols disabled by operator."
- else if(istype(W, /obj/item/weapon/wrench))
- if(state==1)
- state = 2
- user << "You undo the securing bolts."
- else if(state==2)
- state = 1
- user << "You tighten the securing bolts."
- return
-
- else if(istype(W, /obj/item/weapon/crowbar))
- if(state==2)
- state = 3
- user << "You open the hatch to the power unit"
- else if(state==3)
- state=2
- user << "You close the hatch to the power unit"
- return
-
- else if(istype(W, /obj/item/weapon/screwdriver))
- if(state==3 && src.cell)
- src.cell.loc = src.loc
- src.cell = null
- state = 4
- user << "You unscrew and pry out the powercell."
- src.log_message("Powercell removed")
- else if(state==4 && src.cell)
- state=3
- user << "You screw the cell in place"
- return
-
- else if(istype(W, /obj/item/weapon/cell))
- if(state==4)
- if(!src.cell)
- user << "You install the powercell"
- user.drop_item()
- W.loc = src
- src.cell = W
- src.log_message("Powercell installed")
- else
- user << "There's already a powercell installed."
- return
-
- else if(istype(W, /obj/item/weapon/weldingtool) && W:welding && user.a_intent != "hurt")
- if (W:remove_fuel(0,user))
- if (src.internal_damage & MECHA_INT_TANK_BREACH)
- src.internal_damage &= ~MECHA_INT_TANK_BREACH
- user << "\blue You repair the damaged gas tank."
- else
- return
- if(src.health[user] hits [src] with [W].")
- user.visible_message("[user] hits [src] with [W].", "You hit [src] with [W].")
- src.take_damage(W.force,W.damtype)
- src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
-*/
- return
-
+////////////////////////////////////
+///// Rendering stats window ///////
+////////////////////////////////////
/obj/mecha/proc/get_stats_html()
var/output = {"
@@ -1102,13 +1120,27 @@
"}
return output
+/obj/mecha/proc/report_internal_damage()
+ var/output = null
+ var/list/dam_reports = list(
+ "[MECHA_INT_FIRE]" = "INTERNAL FIRE",
+ "[MECHA_INT_TEMP_CONTROL]" = "LIFE SUPPORT SYSTEM MALFUNCTION",
+ "[MECHA_INT_TANK_BREACH]" = "GAS TANK BREACH",
+ "[MECHA_INT_CONTROL_LOST]" = "COORDINATION SYSTEM CALIBRATION FAILURE - Recalibrate",
+ "[MECHA_INT_SHORT_CIRCUIT]" = "SHORT CIRCUIT"
+ )
+ for(var/tflag in dam_reports)
+ var/intdamflag = text2num(tflag)
+ if(hasInternalDamage(intdamflag))
+ output += dam_reports[tflag]
+ output += "
"
+ return output
+
+
/obj/mecha/proc/get_stats_part()
var/integrity = health/initial(health)*100
var/cell_charge = get_charge()
- var/output = {"[internal_damage&MECHA_INT_FIRE?"INTERNAL FIRE
":null]
- [internal_damage&MECHA_INT_TEMP_CONTROL?"LIFE SUPPORT SYSTEM MALFUNCTION
":null]
- [internal_damage&MECHA_INT_TANK_BREACH?"GAS TANK BREACH
":null]
- [internal_damage&MECHA_INT_CONTROL_LOST?"COORDINATION SYSTEM CALIBRATION FAILURE - Recalibrate
":null]
+ var/output = {"[report_internal_damage()]
[integrity<30?"DAMAGE LEVEL CRITICAL
":null]
Integrity: [integrity]%
Powercell charge: [isnull(cell_charge)?"No powercell installed":"[cell.percent()]%"]
@@ -1182,6 +1214,85 @@
return output
+/obj/mecha/proc/get_log_html()
+ var/output = "[src.name] Log"
+ for(var/list/entry in log)
+ output += {"[time2text(entry["time"],"DDD MMM DD hh:mm:ss")] 2555
+ [entry["message"]]
+ "}
+ output += ""
+ return output
+
+
+/obj/mecha/proc/output_access_dialog(obj/item/weapon/card/id/id_card, mob/user)
+ if(!id_card || !user) return
+ var/output = {"
+
+
+
+ Following keycodes are present in this system:
"}
+ for(var/a in operation_req_access)
+ output += "[get_access_desc(a)] - Delete
"
+ output += "
Following keycodes were detected on portable device:
"
+ for(var/a in id_card.access)
+ if(a in operation_req_access) continue
+ var/a_name = get_access_desc(a)
+ if(!a_name) continue //there's some strange access without a name
+ output += "[a_name] - Add
"
+ output += "
Finish (Warning! The ID upload panel will be locked. It can be unlocked only through Exosuit Interface.)"
+ output += ""
+ user << browse(output, "window=exosuit_add_access")
+ onclose(user, "exosuit_add_access")
+ return
+
+/obj/mecha/proc/output_maintenance_dialog(obj/item/weapon/card/id/id_card,mob/user)
+ if(!id_card || !user) return
+ var/output = {"
+
+
+
+
+ [add_req_access?"Edit operation keycodes":null]
+ [maint_access?"Initiate maintenance protocol":null]
+
+ "}
+ user << browse(output, "window=exosuit_maint_console")
+ onclose(user, "exosuit_maint_console")
+ return
+
+
+////////////////////////////////
+/////// Messages and Log ///////
+////////////////////////////////
+
+/obj/mecha/proc/occupant_message(message as text)
+ if(message)
+ if(src.occupant && src.occupant.client)
+ src.occupant << "\icon[src] [message]"
+ return
+
+/obj/mecha/proc/log_message(message as text,red=null)
+ log.len++
+ log[log.len] = list("time"=world.timeofday,"message"="[red?"":null][message][red?"":null]")
+ return log.len
+
+/obj/mecha/proc/log_append_to_last(message as text,red=null)
+ var/list/last_entry = src.log[src.log.len]
+ last_entry["message"] += "
[red?"":null][message][red?"":null]"
+ return
+
+
+/////////////////
+///// Topic /////
+/////////////////
+
/obj/mecha/Topic(href, href_list)
..()
if(href_list["update_content"])
@@ -1285,20 +1396,27 @@
return
if(href_list["reset_dna"])
src.dna = null
- if (href_list["repair_int_control_lost"])
+ if(href_list["repair_int_control_lost"])
src.occupant_message("Recalibrating coordination system.")
src.log_message("Recalibration of coordination system started.")
var/T = src.loc
if(do_after(100))
if(T == src.loc)
- src.internal_damage &= ~MECHA_INT_CONTROL_LOST
+ src.clearInternalDamage(MECHA_INT_CONTROL_LOST)
src.occupant_message("Recalibration successful.")
src.log_message("Recalibration of coordination system finished with 0 errors.")
else
src.occupant_message("Recalibration failed.")
src.log_message("Recalibration of coordination system failed with 1 error.",1)
+ //debug
+ /*
+ if(href_list["debug"])
+ if(href_list["set_i_dam"])
+ setInternalDamage(filter.getNum("set_i_dam"))
+ if(href_list["clear_i_dam"])
+ clearInternalDamage(filter.getNum("clear_i_dam"))
return
-
+ */
/*
@@ -1348,27 +1466,15 @@
*/
return
+///////////////////////
+///// Power stuff /////
+///////////////////////
-/obj/mecha/proc/drop_item()//Derpfix, but may be useful in future for engineering exosuits.
- return
-/*
-/obj/mecha/attack_ai(var/mob/living/silicon/ai/user as mob)
- if(!istype(user, /mob/living/silicon/ai))
- return
- var/output = {"Assume direct control over [src]?
- Yes
- "}
- user << browse(output, "window=mecha_attack_ai")
- return
-*/
+/obj/mecha/proc/get_charge()
+ return call((proc_res["dyngetcharge"]||src), "dyngetcharge")()
-/obj/mecha/hear_talk(mob/M as mob, text)
- if(M==occupant && radio.broadcasting)
- radio.talk_into(M, text)
- return
-
-/obj/mecha/proc/get_charge()//returns null if no powercell, else returns cell.charge
+/obj/mecha/proc/dyngetcharge()//returns null if no powercell, else returns cell.charge
if(!src.cell) return
return max(0, src.cell.charge)
@@ -1388,50 +1494,6 @@
return 0
-/obj/mecha/proc/output_access_dialog(obj/item/weapon/card/id/id_card, mob/user)
- if(!id_card || !user) return
- var/output = {"
-
-
-
- Following keycodes are present in this system:
"}
- for(var/a in operation_req_access)
- output += "[get_access_desc(a)] - Delete
"
- output += "
Following keycodes were detected on portable device:
"
- for(var/a in id_card.access)
- if(a in operation_req_access) continue
- var/a_name = get_access_desc(a)
- if(!a_name) continue //there's some strange access without a name
- output += "[a_name] - Add
"
- output += "
Finish (Warning! The ID upload panel will be locked. It can be unlocked only through Exosuit Interface.)"
- output += ""
- user << browse(output, "window=exosuit_add_access")
- onclose(user, "exosuit_add_access")
- return
-
-/obj/mecha/proc/output_maintenance_dialog(obj/item/weapon/card/id/id_card,mob/user)
- if(!id_card || !user) return
- var/output = {"
-
-
-
-
- [add_req_access?"Edit operation keycodes":null]
- [maint_access?"Initiate maintenance protocol":null]
-
- "}
- user << browse(output, "window=exosuit_maint_console")
- onclose(user, "exosuit_maint_console")
- return
-
-
//////////////////////////////////////////
//////// Mecha global iterators ////////
//////////////////////////////////////////
@@ -1461,26 +1523,68 @@
/datum/global_iterator/mecha_internal_damage // processing internal damage
process(var/obj/mecha/mecha)
- if(!mecha.internal_damage)
+ if(!mecha.hasInternalDamage())
return src.stop()
var/datum/gas_mixture/int_tank_air = mecha.return_air()
- if(mecha.internal_damage & MECHA_INT_FIRE)
- if(mecha.return_pressure()>mecha.internal_tank.maximum_pressure && !(mecha.internal_damage&MECHA_INT_TANK_BREACH))
- mecha.internal_damage |= MECHA_INT_TANK_BREACH
- if(!(mecha.internal_damage & MECHA_INT_TEMP_CONTROL) && prob(5))
- mecha.internal_damage &= ~MECHA_INT_FIRE
- mecha.occupant_message("Internal fire extinquished.")
+ if(mecha.hasInternalDamage(MECHA_INT_FIRE))
+ if(mecha.return_pressure()>mecha.internal_tank.maximum_pressure && !(mecha.hasInternalDamage(MECHA_INT_TANK_BREACH)))
+ mecha.setInternalDamage(MECHA_INT_TANK_BREACH)
+ if(!mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL) && prob(5))
+ mecha.clearInternalDamage(MECHA_INT_FIRE)
if(int_tank_air && int_tank_air.volume>0) //heat the air_contents
int_tank_air.temperature = min(6000+T0C, int_tank_air.temperature+rand(10,15))
if(int_tank_air.temperature>mecha.max_temperature/2)//we assume that the tank contents include mecha pilot compartment.
- mecha.take_damage(1,"fire")
- if(mecha.internal_damage & MECHA_INT_TEMP_CONTROL) //stop the mecha_preserve_temp loop datum
+ mecha.take_damage(4/round(mecha.max_temperature/int_tank_air.temperature,0.1),"fire")
+ if(mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL)) //stop the mecha_preserve_temp loop datum
mecha.pr_int_temp_processor.stop()
- if(mecha.internal_damage & MECHA_INT_TANK_BREACH) //remove some air from internal tank
+ if(mecha.hasInternalDamage(MECHA_INT_TANK_BREACH)) //remove some air from internal tank
if(int_tank_air)
var/datum/gas_mixture/leaked_gas = int_tank_air.remove_ratio(0.10)
if(mecha.loc && hascall(mecha.loc,"assume_air"))
mecha.loc.assume_air(leaked_gas)
else
del(leaked_gas)
+ if(mecha.hasInternalDamage(MECHA_INT_SHORT_CIRCUIT))
+ if(mecha.get_charge())
+ mecha.spark_system.start()
+ mecha.cell.charge -= min(20,mecha.cell.charge)
+ mecha.cell.maxcharge -= min(20,mecha.cell.maxcharge)
return
+
+
+/////////////
+
+//debug
+/*
+/obj/mecha/verb/test_int_damage()
+ set name = "Test internal damage"
+ set category = "Exosuit Interface"
+ set src in view(0)
+ if(!occupant) return
+ if(usr!=occupant)
+ return
+ var/output = {"
+
+
+
+ Set:
+ MECHA_INT_FIRE
+ MECHA_INT_TEMP_CONTROL
+ MECHA_INT_SHORT_CIRCUIT
+ MECHA_INT_TANK_BREACH
+ MECHA_INT_CONTROL_LOST
+
+ Clear:
+ MECHA_INT_FIRE
+ MECHA_INT_TEMP_CONTROL
+ MECHA_INT_SHORT_CIRCUIT
+ MECHA_INT_TANK_BREACH
+ MECHA_INT_CONTROL_LOST
+
+ "}
+
+ occupant << browse(output, "window=ex_debug")
+ //src.health = initial(src.health)/2.2
+ //src.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
+ return
+*/
diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm
index 36acfe27e0..5cfead1316 100644
--- a/code/game/mecha/mecha_construction_paths.dm
+++ b/code/game/mecha/mecha_construction_paths.dm
@@ -119,7 +119,7 @@
"backkey"=/obj/item/weapon/crowbar,
"desc"="Peripherals control module is installed"),
//8
- list("key"=/obj/item/mecha_parts/circuitboard/ripley/peripherals,
+ list("key"=/obj/item/weapon/circuitboard/mecha/ripley/peripherals,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="Central control module is secured"),
//9
@@ -127,7 +127,7 @@
"backkey"=/obj/item/weapon/crowbar,
"desc"="Central control module is installed"),
//10
- list("key"=/obj/item/mecha_parts/circuitboard/ripley/main,
+ list("key"=/obj/item/weapon/circuitboard/mecha/ripley/main,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="The wiring is adjusted"),
//11
@@ -186,7 +186,7 @@
user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
else
user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].")
- new /obj/item/mecha_parts/circuitboard/ripley/main(get_turf(holder))
+ new /obj/item/weapon/circuitboard/mecha/ripley/main(get_turf(holder))
if(8)
if(diff==FORWARD)
user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].")
@@ -198,7 +198,7 @@
user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
else
user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].")
- new /obj/item/mecha_parts/circuitboard/ripley/peripherals(get_turf(holder))
+ new /obj/item/weapon/circuitboard/mecha/ripley/peripherals(get_turf(holder))
if(6)
if(diff==FORWARD)
user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].")
@@ -312,7 +312,7 @@
"backkey"=/obj/item/weapon/crowbar,
"desc"="Targeting module is installed"),
//12
- list("key"=/obj/item/mecha_parts/circuitboard/gygax/targeting,
+ list("key"=/obj/item/weapon/circuitboard/mecha/gygax/targeting,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="Peripherals control module is secured"),
//13
@@ -320,7 +320,7 @@
"backkey"=/obj/item/weapon/crowbar,
"desc"="Peripherals control module is installed"),
//14
- list("key"=/obj/item/mecha_parts/circuitboard/gygax/peripherals,
+ list("key"=/obj/item/weapon/circuitboard/mecha/gygax/peripherals,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="Central control module is secured"),
//15
@@ -328,7 +328,7 @@
"backkey"=/obj/item/weapon/crowbar,
"desc"="Central control module is installed"),
//16
- list("key"=/obj/item/mecha_parts/circuitboard/gygax/main,
+ list("key"=/obj/item/weapon/circuitboard/mecha/gygax/main,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="The wiring is adjusted"),
//17
@@ -387,7 +387,7 @@
user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
else
user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].")
- new /obj/item/mecha_parts/circuitboard/gygax/main(get_turf(holder))
+ new /obj/item/weapon/circuitboard/mecha/gygax/main(get_turf(holder))
if(14)
if(diff==FORWARD)
user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].")
@@ -399,7 +399,7 @@
user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
else
user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].")
- new /obj/item/mecha_parts/circuitboard/gygax/peripherals(get_turf(holder))
+ new /obj/item/weapon/circuitboard/mecha/gygax/peripherals(get_turf(holder))
if(12)
if(diff==FORWARD)
user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].")
@@ -411,7 +411,7 @@
user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.")
else
user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].")
- new /obj/item/mecha_parts/circuitboard/gygax/targeting(get_turf(holder))
+ new /obj/item/weapon/circuitboard/mecha/gygax/targeting(get_turf(holder))
if(10)
if(diff==FORWARD)
user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].")
@@ -509,9 +509,9 @@
list("key"=/obj/item/weapon/wrench),//5
list("key"=/obj/item/stack/sheet/metal),//6
list("key"=/obj/item/weapon/screwdriver),//7
- list("key"=/obj/item/mecha_parts/circuitboard/firefighter/peripherals),//8
+ list("key"=/obj/item/weapon/circuitboard/mecha/firefighter/peripherals),//8
list("key"=/obj/item/weapon/screwdriver),//9
- list("key"=/obj/item/mecha_parts/circuitboard/ripley/main),//10
+ list("key"=/obj/item/weapon/circuitboard/mecha/ripley/main),//10
list("key"=/obj/item/weapon/wirecutters),//11
list("key"=/obj/item/weapon/cable_coil),//12
list("key"=/obj/item/weapon/screwdriver),//13
@@ -596,11 +596,11 @@
list("key"=/obj/item/weapon/bikehorn),//3
list("key"=/obj/item/clothing/mask/gas/clown_hat),//4
list("key"=/obj/item/weapon/bikehorn),//5
- list("key"=/obj/item/mecha_parts/circuitboard/honker/targeting),//6
+ list("key"=/obj/item/weapon/circuitboard/mecha/honker/targeting),//6
list("key"=/obj/item/weapon/bikehorn),//7
- list("key"=/obj/item/mecha_parts/circuitboard/honker/peripherals),//8
+ list("key"=/obj/item/weapon/circuitboard/mecha/honker/peripherals),//8
list("key"=/obj/item/weapon/bikehorn),//9
- list("key"=/obj/item/mecha_parts/circuitboard/honker/main),//10
+ list("key"=/obj/item/weapon/circuitboard/mecha/honker/main),//10
list("key"=/obj/item/weapon/bikehorn),//11
)
@@ -676,11 +676,11 @@
list("key"=/obj/item/weapon/screwdriver),//9
list("key"=/obj/item/weapon/stock_parts/scanning_module/adv),//10
list("key"=/obj/item/weapon/screwdriver),//11
- list("key"=/obj/item/mecha_parts/circuitboard/durand/targeting),//12
+ list("key"=/obj/item/weapon/circuitboard/mecha/durand/targeting),//12
list("key"=/obj/item/weapon/screwdriver),//13
- list("key"=/obj/item/mecha_parts/circuitboard/durand/peripherals),//14
+ list("key"=/obj/item/weapon/circuitboard/mecha/durand/peripherals),//14
list("key"=/obj/item/weapon/screwdriver),//15
- list("key"=/obj/item/mecha_parts/circuitboard/durand/main),//16
+ list("key"=/obj/item/weapon/circuitboard/mecha/durand/main),//16
list("key"=/obj/item/weapon/wirecutters),//17
list("key"=/obj/item/weapon/cable_coil),//18
list("key"=/obj/item/weapon/screwdriver),//19
@@ -763,4 +763,182 @@
return 1
action(atom/used_atom,mob/user as mob)
- return check_all_steps(used_atom,user)
\ No newline at end of file
+ return check_all_steps(used_atom,user)
+
+
+
+
+/datum/construction/mecha/odysseus_chassis
+ steps = list(list("key"=/obj/item/mecha_parts/part/odysseus_torso),//1
+ list("key"=/obj/item/mecha_parts/part/odysseus_left_arm),//2
+ list("key"=/obj/item/mecha_parts/part/odysseus_right_arm),//3
+ list("key"=/obj/item/mecha_parts/part/odysseus_left_leg),//4
+ list("key"=/obj/item/mecha_parts/part/odysseus_right_leg)//5
+ )
+
+ custom_action(step, atom/used_atom, mob/user)
+ user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]")
+ holder.overlays += used_atom.icon_state+"+o"
+ del used_atom
+ return 1
+
+ action(atom/used_atom,mob/user as mob)
+ return check_all_steps(used_atom,user)
+
+ spawn_result()
+ var/obj/item/mecha_parts/chassis/const_holder = holder
+ const_holder.construct = new /datum/construction/reversible/mecha/odysseus(const_holder)
+ const_holder.density = 1
+ spawn()
+ del src
+ feedback_inc("mecha_odysseus_created",1)
+ return
+
+
+/datum/construction/reversible/mecha/odysseus
+ result = "/obj/mecha/medical/odysseus"
+ steps = list(
+ //1
+ list("key"=/obj/item/weapon/weldingtool,
+ "backkey"=/obj/item/weapon/wrench,
+ "desc"="External armor is wrenched."),
+ //2
+ list("key"=/obj/item/weapon/wrench,
+ "backkey"=/obj/item/weapon/crowbar,
+ "desc"="External armor is installed."),
+ //3
+ list("key"=/obj/item/stack/sheet/r_metal,
+ "backkey"=/obj/item/weapon/weldingtool,
+ "desc"="Internal armor is welded."),
+ //4
+ list("key"=/obj/item/weapon/weldingtool,
+ "backkey"=/obj/item/weapon/wrench,
+ "desc"="Internal armor is wrenched"),
+ //5
+ list("key"=/obj/item/weapon/wrench,
+ "backkey"=/obj/item/weapon/crowbar,
+ "desc"="Internal armor is installed"),
+ //6
+ list("key"=/obj/item/stack/sheet/metal,
+ "backkey"=/obj/item/weapon/screwdriver,
+ "desc"="Peripherals control module is secured"),
+ //7
+ list("key"=/obj/item/weapon/screwdriver,
+ "backkey"=/obj/item/weapon/crowbar,
+ "desc"="Peripherals control module is installed"),
+ //8
+ list("key"=/obj/item/weapon/circuitboard/mecha/odysseus/peripherals,
+ "backkey"=/obj/item/weapon/screwdriver,
+ "desc"="Central control module is secured"),
+ //9
+ list("key"=/obj/item/weapon/screwdriver,
+ "backkey"=/obj/item/weapon/crowbar,
+ "desc"="Central control module is installed"),
+ //10
+ list("key"=/obj/item/weapon/circuitboard/mecha/odysseus/main,
+ "backkey"=/obj/item/weapon/screwdriver,
+ "desc"="The wiring is adjusted"),
+ //11
+ list("key"=/obj/item/weapon/wirecutters,
+ "backkey"=/obj/item/weapon/screwdriver,
+ "desc"="The wiring is added"),
+ //12
+ list("key"=/obj/item/weapon/cable_coil,
+ "backkey"=/obj/item/weapon/screwdriver,
+ "desc"="The hydraulic systems are active."),
+ //13
+ list("key"=/obj/item/weapon/screwdriver,
+ "backkey"=/obj/item/weapon/wrench,
+ "desc"="The hydraulic systems are connected."),
+ //14
+ list("key"=/obj/item/weapon/wrench,
+ "desc"="The hydraulic systems are disconnected.")
+ )
+
+ action(atom/used_atom,mob/user as mob)
+ return check_step(used_atom,user)
+
+ custom_action(index, diff, atom/used_atom, mob/user)
+ if(!..())
+ return 0
+
+ //TODO: better messages.
+ switch(index)
+ if(14)
+ user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.")
+ if(13)
+ if(diff==FORWARD)
+ user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.")
+ else
+ user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.")
+ if(12)
+ if(diff==FORWARD)
+ user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].")
+ else
+ user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.")
+ if(11)
+ if(diff==FORWARD)
+ user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].")
+ else
+ user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].")
+ var/obj/item/weapon/cable_coil/coil = new /obj/item/weapon/cable_coil(get_turf(holder))
+ coil.amount = 4
+ if(10)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].")
+ del used_atom
+ else
+ user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].")
+ if(9)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
+ else
+ user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].")
+ new /obj/item/weapon/circuitboard/mecha/odysseus/main(get_turf(holder))
+ if(8)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].")
+ del used_atom
+ else
+ user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
+ if(7)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
+ else
+ user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].")
+ new /obj/item/weapon/circuitboard/mecha/odysseus/peripherals(get_turf(holder))
+ if(6)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].")
+ else
+ user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
+ if(5)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.")
+ else
+ user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].")
+ var/obj/item/stack/sheet/metal/MS = new /obj/item/stack/sheet/metal(get_turf(holder))
+ MS.amount = 5
+ if(4)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].")
+ else
+ user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
+ if(3)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs external reinforced armor layer to [holder].", "You install external reinforced armor layer to [holder].")
+ else
+ user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].")
+ if(2)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.")
+ else
+ user.visible_message("[user] pries external armor layer from [holder].", "You prie external armor layer from [holder].")
+ var/obj/item/stack/sheet/r_metal/MS = new /obj/item/stack/sheet/r_metal(get_turf(holder))
+ MS.amount = 5
+ if(1)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].")
+ else
+ user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.")
+ return 1
diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm
index 3299550b25..a83a648dbc 100644
--- a/code/game/mecha/mecha_control_console.dm
+++ b/code/game/mecha/mecha_control_console.dm
@@ -24,8 +24,10 @@
for(var/obj/item/mecha_tracking/TR in world)
var/answer = TR.get_mecha_info()
if(answer)
- dat += {"
[answer]
+ dat += {"
[answer]
+ Send message
Show exosuit log | (EMP pulse)
"}
+
if(screen==1)
dat += "Log contents
"
dat += "Return
"
@@ -41,11 +43,19 @@
Topic(href, href_list)
if(..())
return
+ var/datum/topic_input/filter = new /datum/topic_input(href,href_list)
+ if(href_list["send_message"])
+ var/obj/item/mecha_tracking/MT = filter.getObj("send_message")
+ var/message = strip_html_simple(input(usr,"Input message","Transmit message") as text)
+ var/obj/mecha/M = MT.in_mecha()
+ if(trim(message) && M)
+ M.occupant_message(message)
+ return
if(href_list["shock"])
- var/obj/item/mecha_tracking/MT = locate(href_list["shock"])
+ var/obj/item/mecha_tracking/MT = filter.getObj("shock")
MT.shock()
if(href_list["get_log"])
- var/obj/item/mecha_tracking/MT = locate(href_list["get_log"])
+ var/obj/item/mecha_tracking/MT = filter.getObj("get_log")
stored_data = MT.get_mecha_log()
screen = 1
if(href_list["return"])
@@ -92,12 +102,12 @@
proc/in_mecha()
if(istype(src.loc, /obj/mecha))
- return 1
+ return src.loc
return 0
proc/shock()
- if(src.in_mecha())
- var/obj/mecha/M = src.loc
+ var/obj/mecha/M = in_mecha()
+ if(M)
M.emp_act(2)
del(src)
diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm
index 66d2e7dadf..bdf76b9678 100644
--- a/code/game/mecha/mecha_parts.dm
+++ b/code/game/mecha/mecha_parts.dm
@@ -330,15 +330,66 @@
construction_cost = list("metal"=20000,"plasma"=10000)
origin_tech = "materials=5;bluespace=3;magnets=3"
+///////// Odysseus
+
+
+/obj/item/mecha_parts/chassis/odysseus
+ name = "Odysseus Chassis"
+
+ New()
+ ..()
+ construct = new /datum/construction/mecha/odysseus_chassis(src)
+
+/obj/item/mecha_parts/part/odysseus_torso
+ name="Odysseus Torso"
+ desc="A torso part of Odysseus. Contains power unit, processing core and life support systems."
+ icon_state = "ripley_harness"
+ origin_tech = "programming=2;materials=2;biotech=2;engineering=2"
+ construction_time = 200
+ construction_cost = list("metal"=30000,"glass"=10000)
+
+/obj/item/mecha_parts/part/odysseus_left_arm
+ name="Odysseus Left Arm"
+ desc="An Odysseus left arm. Data and power sockets are compatible with most exosuit tools."
+ icon_state = "ripley_l_arm"
+ origin_tech = "programming=2;materials=2;engineering=2"
+ construction_time = 150
+ construction_cost = list("metal"=20000)
+
+/obj/item/mecha_parts/part/odysseus_right_arm
+ name="Odysseus Right Arm"
+ desc="An Odysseus right arm. Data and power sockets are compatible with most exosuit tools."
+ icon_state = "ripley_r_arm"
+ origin_tech = "programming=2;materials=2;engineering=2"
+ construction_time = 150
+ construction_cost = list("metal"=20000)
+
+/obj/item/mecha_parts/part/odysseus_left_leg
+ name="Odysseus Left Leg"
+ desc="An Odysseus left leg. Contains somewhat complex servodrives and balance maintaining systems."
+ icon_state = "ripley_l_leg"
+ origin_tech = "programming=2;materials=2;engineering=2"
+ construction_time = 150
+ construction_cost = list("metal"=2500)
+
+/obj/item/mecha_parts/part/odysseus_right_leg
+ name="Odysseus Right Leg"
+ desc="A Odysseus right leg. Contains somewhat complex servodrives and balance maintaining systems."
+ icon_state = "ripley_r_leg"
+ origin_tech = "programming=2;materials=2;engineering=2"
+ construction_time = 150
+ construction_cost = list("metal"=2500)
+
+
///////// Circuitboards
-/obj/item/mecha_parts/circuitboard
+/obj/item/weapon/circuitboard/mecha
name = "Exosuit Circuit board"
icon = 'module.dmi'
icon_state = "std_mod"
item_state = "electronic"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = FPRINT | TABLEPASS | CONDUCT
force = 5.0
w_class = 2.0
throwforce = 5.0
@@ -407,4 +458,15 @@
name = "Circuit board (H.O.N.K Central Control module)"
icon_state = "mainboard"
+ odysseus
+ origin_tech = "programming=3"
+
+ odysseus/peripherals
+ name = "Circuit board (Odysseus Peripherals Control module)"
+ icon_state = "mcontroller"
+
+ odysseus/main
+ name = "Circuit board (Odysseus Central Control module)"
+ icon_state = "mainboard"
+
diff --git a/code/game/mecha/medical/medical.dm b/code/game/mecha/medical/medical.dm
new file mode 100644
index 0000000000..851c613f8a
--- /dev/null
+++ b/code/game/mecha/medical/medical.dm
@@ -0,0 +1,22 @@
+/obj/mecha/medical/New()
+ ..()
+ new /obj/item/mecha_tracking(src)
+ return
+
+
+/obj/mecha/medical/mechturn(direction)
+ dir = direction
+ playsound(src,'mechmove01.ogg',40,1)
+ return 1
+
+/obj/mecha/medical/mechstep(direction)
+ var/result = step(src,direction)
+ if(result)
+ playsound(src,'mechstep.ogg',25,1)
+ return result
+
+/obj/mecha/medical/mechsteprand()
+ var/result = step_rand(src)
+ if(result)
+ playsound(src,'mechstep.ogg',25,1)
+ return result
\ No newline at end of file
diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm
new file mode 100644
index 0000000000..ff19add9f7
--- /dev/null
+++ b/code/game/mecha/medical/odysseus.dm
@@ -0,0 +1,99 @@
+/obj/mecha/medical/odysseus
+ desc = "Odysseus Medical Exosuit"
+ name = "Odysseus"
+ icon_state = "placeholder-1"
+ step_in = 2
+ max_temperature = 1500
+ health = 120
+ wreckage = null
+ internal_damage_threshold = 35
+ deflect_chance = 15
+ step_energy_drain = 6
+ var/obj/item/clothing/glasses/hud/health/mech/hud
+
+ New()
+ ..()
+ hud = new /obj/item/clothing/glasses/hud/health/mech(src)
+ return
+
+ moved_inside(var/mob/living/carbon/human/H as mob)
+ if(..())
+ if(H.glasses)
+ occupant_message("[H.glasses] prevent you from using [src] [hud]")
+ else
+ H.glasses = hud
+ return 1
+ else
+ return 0
+
+ go_out()
+ if(ishuman(occupant))
+ var/mob/living/carbon/human/H = occupant
+ if(H.glasses == hud)
+ H.glasses = null
+ ..()
+ return
+/*
+ verb/set_perspective()
+ set name = "Set client perspective."
+ set category = "Exosuit Interface"
+ set src = usr.loc
+ var/perspective = input("Select a perspective type.",
+ "Client perspective",
+ occupant.client.perspective) in list(MOB_PERSPECTIVE,EYE_PERSPECTIVE)
+ world << "[perspective]"
+ occupant.client.perspective = perspective
+ return
+
+ verb/toggle_eye()
+ set name = "Toggle eye."
+ set category = "Exosuit Interface"
+ set src = usr.loc
+ if(occupant.client.eye == occupant)
+ occupant.client.eye = src
+ else
+ occupant.client.eye = occupant
+ world << "[occupant.client.eye]"
+ return
+*/
+
+//TODO - Check documentation for client.eye and client.perspective...
+/obj/item/clothing/glasses/hud/health/mech
+ name = "Integrated Medical Hud"
+
+
+ process_hud(var/mob/M)
+/*
+ world<< "view(M)"
+ for(var/mob/mob in view(M))
+ world << "[mob]"
+ world<< "view(M.client)"
+ for(var/mob/mob in view(M.client))
+ world << "[mob]"
+ world<< "view(M.loc)"
+ for(var/mob/mob in view(M.loc))
+ world << "[mob]"
+*/
+
+ if(!M || M.stat || !(M in view(M))) return
+ if(!M.client) return
+ var/client/C = M.client
+ var/icon/tempHud = 'hud.dmi'
+ for(var/mob/living/carbon/human/patient in view(M.loc))
+ if(M.see_invisible < patient.invisibility)
+ continue
+ var/foundVirus = 0
+ for(var/datum/disease/D in patient.viruses)
+ if(!D.hidden[SCANNER])
+ foundVirus++
+ if(patient.virus2)
+ foundVirus++
+ C.images += image(tempHud,patient,"hud[RoundHealth(patient.health)]")
+ if(patient.stat == 2)
+ C.images += image(tempHud,patient,"huddead")
+ else if(patient.alien_egg_flag)
+ C.images += image(tempHud,patient,"hudxeno")
+ else if(foundVirus)
+ C.images += image(tempHud,patient,"hudill")
+ else
+ C.images += image(tempHud,patient,"hudhealthy")
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 8494727395..a4b566dc44 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -47,7 +47,6 @@
var/light_consumption = 0 //not used
var/equip_consumption = 0 //not used
var/environ_consumption = 0 //not used
- var/emagged = 0
var/wiresexposed = 0
var/apcwires = 15
netnum = -1 // set so that APCs aren't found as powernet nodes
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index dd5f262e99..5ec4485619 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -105,7 +105,6 @@ display round(lastgen) and plasmatank amount
board_path = "/obj/item/weapon/circuitboard/pacman"
coin_left = 0 // How much is left of the coin
time_per_coin = 1
- emagged = 0
heat = 0
New()
diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm
index 57a9a5557a..e9d539ea56 100644
--- a/code/modules/research/designs.dm
+++ b/code/modules/research/designs.dm
@@ -607,7 +607,7 @@ datum
req_tech = list("programming" = 3)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
- build_path = "/obj/item/mecha_parts/circuitboard/ripley/main"
+ build_path = "/obj/item/weapon/circuitboard/mecha/ripley/main"
ripley_peri
name = "Circuit Design (APLU \"Ripley\" Peripherals Control module)"
@@ -616,7 +616,7 @@ datum
req_tech = list("programming" = 3)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
- build_path = "/obj/item/mecha_parts/circuitboard/ripley/peripherals"
+ build_path = "/obj/item/weapon/circuitboard/mecha/ripley/peripherals"
gygax_main
name = "Circuit Design (\"Gygax\" Central Control module)"
@@ -625,7 +625,7 @@ datum
req_tech = list("programming" = 4)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
- build_path = "/obj/item/mecha_parts/circuitboard/gygax/main"
+ build_path = "/obj/item/weapon/circuitboard/mecha/gygax/main"
gygax_peri
name = "Circuit Design (\"Gygax\" Peripherals Control module)"
@@ -634,7 +634,7 @@ datum
req_tech = list("programming" = 4)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
- build_path = "/obj/item/mecha_parts/circuitboard/gygax/peripherals"
+ build_path = "/obj/item/weapon/circuitboard/mecha/gygax/peripherals"
gygax_targ
name = "Circuit Design (\"Gygax\" Weapons & Targeting Control module)"
@@ -643,7 +643,7 @@ datum
req_tech = list("programming" = 4, "combat" = 2)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
- build_path = "/obj/item/mecha_parts/circuitboard/gygax/targeting"
+ build_path = "/obj/item/weapon/circuitboard/mecha/gygax/targeting"
durand_main
name = "Circuit Design (\"Durand\" Central Control module)"
@@ -652,7 +652,7 @@ datum
req_tech = list("programming" = 4)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
- build_path = "/obj/item/mecha_parts/circuitboard/durand/main"
+ build_path = "/obj/item/weapon/circuitboard/mecha/durand/main"
durand_peri
name = "Circuit Design (\"Durand\" Peripherals Control module)"
@@ -661,7 +661,7 @@ datum
req_tech = list("programming" = 4)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
- build_path = "/obj/item/mecha_parts/circuitboard/durand/peripherals"
+ build_path = "/obj/item/weapon/circuitboard/mecha/durand/peripherals"
durand_targ
name = "Circuit Design (\"Durand\" Weapons & Targeting Control module)"
@@ -670,7 +670,7 @@ datum
req_tech = list("programming" = 4, "combat" = 2)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
- build_path = "/obj/item/mecha_parts/circuitboard/durand/targeting"
+ build_path = "/obj/item/weapon/circuitboard/mecha/durand/targeting"
honker_main
@@ -680,7 +680,7 @@ datum
req_tech = list("programming" = 3)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
- build_path = "/obj/item/mecha_parts/circuitboard/honker/main"
+ build_path = "/obj/item/weapon/circuitboard/mecha/honker/main"
honker_peri
name = "Circuit Design (\"H.O.N.K\" Peripherals Control module)"
@@ -689,7 +689,7 @@ datum
req_tech = list("programming" = 3)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
- build_path = "/obj/item/mecha_parts/circuitboard/honker/peripherals"
+ build_path = "/obj/item/weapon/circuitboard/mecha/honker/peripherals"
honker_targ
name = "Circuit Design (\"H.O.N.K\" Weapons & Targeting Control module)"
@@ -698,7 +698,7 @@ datum
req_tech = list("programming" = 3)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
- build_path = "/obj/item/mecha_parts/circuitboard/honker/targeting"
+ build_path = "/obj/item/weapon/circuitboard/mecha/honker/targeting"
////////////////////////////////////////
/////////// Mecha Equpment /////////////
@@ -768,14 +768,14 @@ datum
req_tech = list("bluespace" = 2, "magnets" = 3, "engineering" = 3)
build_path = "/obj/item/mecha_parts/mecha_equipment/gravcatapult"
- /*mech_repair_droid
+ mech_repair_droid
name = "Exosuit Module Design (Repair Droid Module)"
desc = "Automated Repair Droid. BEEP BOOP"
id = "mech_repair_droid"
build_type = MECHFAB
req_tech = list("magnets" = 3, "programming" = 3, "engineering" = 3)
build_path = "/obj/item/mecha_parts/mecha_equipment/repair_droid"
- */
+
mech_plasma_generator
name = "Exosuit Module Design (Plasma Converter Module)"
desc = "Exosuit-mounted plasma converter."
@@ -784,6 +784,32 @@ datum
req_tech = list("plasmatech" = 2, "powerstorage"= 2, "engineering" = 2)
build_path = "/obj/item/mecha_parts/mecha_equipment/plasma_generator"
+ mech_energy_relay
+ name = "Exosuit Module Design (Tesla Energy Relay)"
+ desc = "Tesla Energy Relay"
+ id = "mech_energy_relay"
+ build_type = MECHFAB
+ req_tech = list("magnets" = 4, "syndicate" = 3)
+ build_path = "/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay"
+
+ mech_ccw_armor
+ name = "Exosuit Module Design(Reactive Armor Booster Module)"
+ desc = "Exosuit-mounted armor booster."
+ id = "mech_ccw_armor"
+ build_type = MECHFAB
+ req_tech = list("materials" = 5, "combat" = 4)
+ build_path = "/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster"
+
+ mech_proj_armor
+ name = "Exosuit Module Design(Reflective Armor Booster Module)"
+ desc = "Exosuit-mounted armor booster."
+ id = "mech_proj_armor"
+ build_type = MECHFAB
+ req_tech = list("materials" = 5, "combat" = 5, "engineering"=3)
+ build_path = "/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster"
+
+
+
////////////////////////////////////////
//////////Disk Construction Disks///////
////////////////////////////////////////