Prosthetic and Robot limb fabrication is now separate. (#8300)

This commit is contained in:
mikomyazaki
2020-02-19 23:18:42 +01:00
committed by GitHub
parent a4d0051ad3
commit e9cd29b91b
5 changed files with 24 additions and 84 deletions
+1 -1
View File
@@ -300,7 +300,7 @@
if(D.build_path)
var/loc_offset = get_step(src, dir)
var/obj/new_item = D.Fabricate(loc_offset, src)
visible_message("\The [src] pings, indicating that \the [D] is complete.", "You hear a ping.")
visible_message("\The [src] pings, indicating that \the [new_item] is complete.", "You hear a ping.")
if(mat_efficiency != 1)
if(new_item.matter && new_item.matter.len > 0)
for(var/i in new_item.matter)
+1 -1
View File
@@ -20,7 +20,7 @@
model_info = model
var/datum/robolimb/R = all_robolimbs[model]
if(R)
name = "[R.company] [initial(name)]"
name = "[R.company] robot [initial(name)]"
desc = "[R.desc]"
linked_frame = R.linked_frame
if(icon_state in icon_states(R.icon))
@@ -1,71 +0,0 @@
/obj/item/robot_parts/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob)
var/limbloc = null
if(!istype(M))
return ..()
if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/bed/roller, M.loc) && (M.buckled || M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat)) && prob(75) || (locate(/obj/structure/table/, M.loc) && (M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat) && prob(66))))
return ..()
if(!istype(M, /mob/living/carbon/human))
return ..()
if((user.zone_sel.selecting == BP_L_ARM) && (istype(src, /obj/item/robot_parts/l_arm)))
limbloc = BP_L_HAND
else if((user.zone_sel.selecting == BP_R_ARM) && (istype(src, /obj/item/robot_parts/r_arm)))
limbloc = BP_R_HAND
else if((user.zone_sel.selecting == BP_R_LEG) && (istype(src, /obj/item/robot_parts/r_leg)))
limbloc = BP_R_FOOT
else if((user.zone_sel.selecting == BP_L_LEG) && (istype(src, /obj/item/robot_parts/l_leg)))
limbloc = BP_L_FOOT
else
to_chat(user, "<span class='warning'>That doesn't fit there!</span>")
return ..()
var/mob/living/carbon/human/H = M
var/datum/organ/external/S = H.organs[user.zone_sel.selecting]
if(S.status & ORGAN_DESTROYED)
if(!(S.status & ORGAN_ATTACHABLE))
to_chat(user, "<span class='warning'>The wound is not ready for a replacement!</span>")
return 0
if(M != user)
M.visible_message( \
"<span class='notice'>\The [user] is beginning to attach \the [src] where [H]'s [S.display_name] used to be.</span>", \
"<span class='notice'>\The [user] begins to attach \the [src] where your [S.display_name] used to be.</span>")
else
M.visible_message( \
"<span class='notice'>\The [user] begins to attach a robotic limb where \his [S.display_name] used to be with [src].</span>", \
"<span class='notice'>You begin to attach \the [src] where your [S.display_name] used to be.</span>")
if(do_mob(user, H, 100))
if(M != user)
M.visible_message( \
"<span class='notice'>\The [user] finishes attaching [H]'s new [S.display_name].</span>", \
"<span class='notice'>\The [user] finishes attaching your new [S.display_name].</span>")
else
M.visible_message( \
"<span class='notice'>\The [user] finishes attaching \his new [S.display_name].</span>", \
"<span class='notice'>You finish attaching your new [S.display_name].</span>")
if(H == user && prob(25))
to_chat(user, "<span class='warning'>You mess up!</span>")
S.take_damage(15)
S.status &= ~ORGAN_BROKEN
S.status &= ~ORGAN_SPLINTED
S.status &= ~ORGAN_ATTACHABLE
S.status &= ~ORGAN_DESTROYED
S.status |= ORGAN_ROBOT
var/datum/organ/external/T = H.organs["[limbloc]"]
T.status &= ~ORGAN_BROKEN
T.status &= ~ORGAN_SPLINTED
T.status &= ~ORGAN_ATTACHABLE
T.status &= ~ORGAN_DESTROYED
T.status |= ORGAN_ROBOT
H.update_body()
M.updatehealth()
M.UpdateDamageIcon()
qdel(src)
return 1
return 0
@@ -1,38 +1,43 @@
/datum/design/item/mechfab/prosthetic
category = "Prosthetic (External)"
//if the fabricator is a mech fab pass the manufacturer info over to the robot part constructor
//if the fabricator is a mech fab we need to construct the proper typepath for the manufacturer
/datum/design/item/mechfab/prosthetic/Fabricate(var/newloc, var/fabricator)
if(istype(fabricator, /obj/machinery/mecha_part_fabricator))
var/obj/machinery/mecha_part_fabricator/mechfab = fabricator
return new build_path(newloc, mechfab.manufacturer)
for(var/model_path in subtypesof(build_path))
var/obj/item/organ/external/E = new model_path
if(E.robotize_type == mechfab.manufacturer)
return E.forceMove(newloc)
else
qdel(E)
return new build_path(newloc) // We didn't find our manufacturer in the list, so return an unbranded one
return ..()
// Copied from robot.dm, but reflavoured to be more fitting to prosthetics.
/datum/design/item/mechfab/prosthetic/l_arm
name = "Prosthetic left arm"
id = "robot_l_arm"
build_path = /obj/item/robot_parts/l_arm
id = "prosthetic_l_arm"
build_path = /obj/item/organ/external/arm/industrial
time = 20
materials = list(DEFAULT_WALL_MATERIAL = 18000)
/datum/design/item/mechfab/prosthetic/r_arm
name = "Prosthetic right arm"
id = "robot_r_arm"
build_path = /obj/item/robot_parts/r_arm
id = "prosthetic_r_arm"
build_path = /obj/item/organ/external/arm/right/industrial
time = 20
materials = list(DEFAULT_WALL_MATERIAL = 18000)
/datum/design/item/mechfab/prosthetic/l_leg
name = "Prosthetic left leg"
id = "robot_l_leg"
build_path = /obj/item/robot_parts/l_leg
id = "prosthetic_l_leg"
build_path = /obj/item/organ/external/leg/industrial
time = 20
materials = list(DEFAULT_WALL_MATERIAL = 15000)
/datum/design/item/mechfab/prosthetic/r_leg
name = "Prosthetic right leg"
id = "robot_r_leg"
build_path = /obj/item/robot_parts/r_leg
id = "prosthetic_r_leg"
build_path = /obj/item/organ/external/leg/right/industrial
time = 20
materials = list(DEFAULT_WALL_MATERIAL = 15000)
+6
View File
@@ -0,0 +1,6 @@
author: mikomyazaki
delete-after: True
changes:
- bugfix: "Prosthetic external organs from the Prosthetics (External) tab of the mechfab are now only for surgery on human-mobs, and are now properly attachable. For robots use the robotic limbs that are now in the 'Robot' tab of the fabber."