mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-29 16:10:02 +01:00
Prosthetic and Robot limb fabrication is now separate. (#8300)
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
@@ -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."
|
||||
Reference in New Issue
Block a user