From c7aa32715924dcef5336d3b23ab64f78507de003 Mon Sep 17 00:00:00 2001 From: panurgomatic Date: Sun, 27 Mar 2011 13:27:31 +0000 Subject: [PATCH] - Operation permision now can be set for all mechs, including combat models. - Added Durand parts and Durand construction (currently using Gygax part sprites) - Other mecha tweaks. - Fixed smelter not showing sand as smeltable material. - Cyborg gibbing inside recharge station should now update its icon and power consumption. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1288 316c924e-a436-60f5-8080-3fe189b3f50e --- code/WorkInProgress/mining.dm | 2 +- code/defines/atom.dm | 9 + code/game/asteroid/asteroid.dm | 5 +- code/game/mecha/combat/combat.dm | 20 +- code/game/mecha/combat/durand.dm | 5 +- code/game/mecha/combat/gygax.dm | 5 +- code/game/mecha/combat/marauder.dm | 2 + code/game/mecha/equipment/tools/tools.dm | 19 +- code/game/mecha/equipment/weapons/weapons.dm | 4 +- code/game/mecha/mech_fabricator.dm | 26 +- code/game/mecha/mecha.dm | 66 +++++- code/game/mecha/mecha_construction.dm | 224 ++++++++++++++++-- code/game/mecha/mecha_control_console.dm | 1 + code/game/mecha/working/working.dm | 64 +---- code/game/research/designs.dm | 46 +++- .../modules/mob/living/silicon/robot/death.dm | 4 + icons/mob/xcomalien.dmi | Bin 20277 -> 19404 bytes 17 files changed, 369 insertions(+), 133 deletions(-) diff --git a/code/WorkInProgress/mining.dm b/code/WorkInProgress/mining.dm index dda03101e86..d424a97fd19 100644 --- a/code/WorkInProgress/mining.dm +++ b/code/WorkInProgress/mining.dm @@ -1342,7 +1342,7 @@ var/list/datum/material_recipe/MATERIAL_RECIPES = list( var/dat = "Smelter control console

" //iron - if(machine.ore_iron || machine.ore_plasma || machine.ore_uranium || machine.ore_gold || machine.ore_silver || machine.ore_diamond || machine.ore_clown) + if(machine.ore_iron || machine.ore_glass || machine.ore_plasma || machine.ore_uranium || machine.ore_gold || machine.ore_silver || machine.ore_diamond || machine.ore_clown) if(machine.ore_iron) if (machine.selected_iron==1) dat += text("Smelting ") diff --git a/code/defines/atom.dm b/code/defines/atom.dm index 418a3cad36c..069096cb48f 100644 --- a/code/defines/atom.dm +++ b/code/defines/atom.dm @@ -79,6 +79,14 @@ obj /atom/proc/emp_act(var/severity) return +/atom/proc/in_contents_of(container)//can take class or object instance as argument + if(ispath(container)) + if(istype(src.loc, container)) + return 1 + else if(src in container) + return 1 + return + /atom/movable/overlay/attackby(a, b) if (src.master) return src.master.attackby(a, b) @@ -127,5 +135,6 @@ obj src.last_move = get_dir(A, src.loc) src.moved_recently = 1 return + //////////// diff --git a/code/game/asteroid/asteroid.dm b/code/game/asteroid/asteroid.dm index e120ab6e8a5..6e95a36df10 100644 --- a/code/game/asteroid/asteroid.dm +++ b/code/game/asteroid/asteroid.dm @@ -31,8 +31,9 @@ proc/spawn_asteroid(var/atom/start_loc,var/type,var/size,var/richness)//type: 0 var/x_len = rand(4,size) var/y_len = pick(4,size) var/st_l = locate(start_loc.x-round(x_len/2),start_loc.y-round(y_len/2),start_loc.z) - spawn_room(st_l,x_len,y_len) - max_secret_rooms-- + if(st_l) + spawn_room(st_l,x_len,y_len) + max_secret_rooms-- return 1 diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm index a2cb685ba09..a834bee88de 100644 --- a/code/game/mecha/combat/combat.dm +++ b/code/game/mecha/combat/combat.dm @@ -1,8 +1,4 @@ /obj/mecha/combat - deflect_chance = 10 - health = 500 - operation_req_access = list(access_security) - internals_req_access = list(access_engine,access_robotics) var/force = 25 var/damtype = "brute" var/melee_cooldown = 10 @@ -52,7 +48,7 @@ if(M.stat>1) M.gib() melee_can_hit = 0 - spawn(melee_cooldown) + if(do_after(melee_cooldown)) melee_can_hit = 1 return if(istype(target, /mob/living/carbon/human)) @@ -87,19 +83,15 @@ else return M.updatehealth() - - src.occupant.show_message("[src.name] hits [target].", 1) - for (var/mob/V in viewers(src)) - if(V.client && !(V.blinded)) - V.show_message("[src.name] hits [target].", 1) - + src.occupant_message("You hit [target].") + src.visible_message("[src.name] hits [target].") else step_away(M,src) src.occupant_message("You push [target] out of the way.") src.visible_message("[src] pushes [target] out of the way.") melee_can_hit = 0 - spawn(melee_cooldown) + if(do_after(melee_cooldown)) melee_can_hit = 1 return @@ -114,13 +106,13 @@ V.show_message("[src.name] hits [target].", 1) if(!istype(target, /turf/simulated/wall)) target:attackby(src,src.occupant) - else if(prob(20)) + else if(prob(5)) target:dismantle_wall(1) src.occupant_message("\blue You smash through the wall.") src.visible_message("[src.name] smashes through the wall") playsound(src, 'smash.ogg', 50, 1) melee_can_hit = 0 - spawn(melee_cooldown) + if(do_after(melee_cooldown)) melee_can_hit = 1 break return diff --git a/code/game/mecha/combat/durand.dm b/code/game/mecha/combat/durand.dm index 9df6bc6d9e1..5f85fb1e94c 100644 --- a/code/game/mecha/combat/durand.dm +++ b/code/game/mecha/combat/durand.dm @@ -4,13 +4,12 @@ icon_state = "durand" step_in = 6 health = 350 - deflect_chance = 15 + deflect_chance = 20 max_temperature = 3000 infra_luminosity = 8 - operation_req_access = list(access_security) force = 35 var/defence = 0 - var/defence_deflect = 30 + var/defence_deflect = 35 wreckage = "/obj/decal/mecha_wreckage/durand" /* diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm index 6c20420f385..8279b660732 100644 --- a/code/game/mecha/combat/gygax.dm +++ b/code/game/mecha/combat/gygax.dm @@ -4,12 +4,13 @@ icon_state = "gygax" step_in = 5 health = 300 - deflect_chance = 10 + deflect_chance = 15 max_temperature = 3500 infra_luminosity = 6 var/overload = 0 - operation_req_access = list(access_security) wreckage = "/obj/decal/mecha_wreckage/gygax" + internal_damage_threshold = 35 + /* /obj/mecha/combat/gygax/New() diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index 142dfe715c4..15a92366c65 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -15,6 +15,8 @@ var/datum/effects/system/harmless_smoke_spread/smoke_system = new operation_req_access = list(access_heads) wreckage = "/obj/decal/mecha_wreckage/marauder" + add_req_access = 0 + internal_damage_threshold = 25 /obj/mecha/combat/marauder/New() diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm index 4ca32a898c0..625de351c51 100644 --- a/code/game/mecha/equipment/tools/tools.dm +++ b/code/game/mecha/equipment/tools/tools.dm @@ -35,10 +35,6 @@ cargo_holder.cargo += O O.loc = chassis O.anchored = 0 - /* - if(istype(O, /obj/machinery/bot))// That's shit-code right here, folks. - O:on = 0 - */ chassis.occupant_message("[target] succesfully loaded.") chassis.log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]") else @@ -66,7 +62,7 @@ chassis.visible_message("[chassis] pushes [target] out of the way.") equip_ready = 0 chassis.cell.use(energy_drain) - spawn(equip_cooldown) + if(do_after_cooldown()) equip_ready = 1 return 1 @@ -89,12 +85,10 @@ if(istype(target, /turf/simulated/wall/r_wall)) chassis.occupant_message("[target] is too durable to drill through.") else if(istype(target, /turf/simulated/mineral)) - var/turf/simulated/mineral/M = target + for(var/turf/simulated/mineral/M in range(chassis,1)) + if(get_dir(chassis,M)&chassis.dir) + M.gets_drilled() chassis.log_message("Drilled through [target]") - M.gets_drilled() - for(var/turf/simulated/mineral/N in range(chassis,1)) - if(get_dir(chassis,N)&chassis.dir) - N.gets_drilled() else chassis.log_message("Drilled through [target]") target.ex_act(2) @@ -107,6 +101,7 @@ icon_state = "mecha_exting" equip_cooldown = 5 energy_drain = 0 + range = MELEE|RANGED New() reagents = new/datum/reagents(200) @@ -116,7 +111,7 @@ return action(atom/target) //copypasted from extinguisher. TODO: Rewrite from scratch. - if(!action_checks(target)) return + if(!action_checks(target) || get_dist(chassis, target)>3) return if(get_dist(chassis, target)>2) return equip_ready = 0 if(do_after_cooldown()) @@ -145,7 +140,7 @@ W.reagents = R R.my_atom = W src.reagents.trans_to(W,1) - for(var/b=0, b<5, b++) + for(var/b=0, b<4, b++) if(!W) return step_towards(W,my_target) diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index af9b5af84d2..5a89eadae6b 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -43,6 +43,7 @@ name = "eZ-13 mk2 Heavy pulse rifle" icon_state = "mecha_pulse" energy_drain = 120 + origin_tech = "materials=3;combat=6;powerstorage=4" action(target) if(!action_checks(target)) return @@ -70,7 +71,8 @@ /obj/beam/a_laser/pulse_laser/heavy_pulse name = "heavy pulse laser" - icon_state = "u_laser" + icon = 'xcomalien.dmi' + icon_state = "plasma" life = 20 Bump(atom/A) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index f1795e72c19..cc9b277d359 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -53,7 +53,16 @@ /obj/item/mecha_parts/part/gygax_right_leg, /obj/item/mecha_parts/part/gygax_armour ), - + "Durand"=list( + /obj/item/mecha_parts/chassis/durand, + /obj/item/mecha_parts/part/durand_torso, + /obj/item/mecha_parts/part/durand_head, + /obj/item/mecha_parts/part/durand_left_arm, + /obj/item/mecha_parts/part/durand_right_arm, + /obj/item/mecha_parts/part/durand_left_leg, + /obj/item/mecha_parts/part/durand_right_leg, + /obj/item/mecha_parts/part/durand_armour + ), "H.O.N.K"=list( /obj/item/mecha_parts/chassis/honker, /obj/item/mecha_parts/part/honker_torso, @@ -170,7 +179,7 @@ return output proc/output_part_info(var/obj/item/mecha_parts/part) - var/output = "[part.name] (Cost: [output_part_cost(part)]) [round(part.construction_time*time_coeff,0.1)/10]sec" + var/output = "[part.name] (Cost: [output_part_cost(part)]) [get_construction_time_w_coeff(part,0.1)/10]sec" return output proc/output_part_cost(var/obj/item/mecha_parts/part) @@ -178,7 +187,7 @@ var/output for(var/p in part.construction_cost) if(p in resources) - output += "[i?" | ":null][round(part.construction_cost[p]*resource_coeff,1)] [p]" + output += "[i?" | ":null][get_resource_cost_w_coeff(part,p,1)] [p]" i++ return output @@ -191,13 +200,13 @@ proc/remove_resources(var/obj/item/mecha_parts/part as obj) for(var/resource in part.construction_cost) if(resource in src.resources) - src.resources[resource] -= round(part.construction_cost[resource]*resource_coeff,1) + src.resources[resource] -= get_resource_cost_w_coeff(part,resource,1) return proc/check_resources(var/obj/item/mecha_parts/part as obj) for(var/resource in part.construction_cost) if(resource in src.resources) - if(src.resources[resource] < round(part.construction_cost[resource]*resource_coeff,1)) + if(src.resources[resource] < get_resource_cost_w_coeff(part,resource,1)) return 0 return 1 @@ -319,6 +328,13 @@ src.updateUsrDialog() return + proc/get_resource_cost_w_coeff(var/obj/item/mecha_parts/part as obj,var/resource as text, var/roundto=null) + roundto = roundto || 0.01 + return round(part.construction_cost[resource]*resource_coeff, roundto) + + proc/get_construction_time_w_coeff(var/obj/item/mecha_parts/part as obj, var/roundto=null) + roundto = roundto || 0.01 + return round(part.construction_time*time_coeff, roundto) attack_hand(mob/user as mob) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 6a71a0246d3..416d1d574d7 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -23,11 +23,12 @@ var/step_in = 10 //make a step in step_in/10 sec. var/step_energy_drain = 10 var/health = 300 //health is health - var/deflect_chance = 2 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act. + var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act. var/obj/item/weapon/cell/cell = new var/state = 0 var/list/log = new var/last_message = 0 + var/add_req_access = 1 var/datum/effects/system/spark_spread/spark_system = new var/lights = 0 @@ -45,13 +46,13 @@ var/internal_damage_threshold = 50 //health percentage below which internal damage is possible var/internal_damage = 0 //contains bitflags - var/list/operation_req_access = list(access_engine)//required access level for mecha operation - var/list/internals_req_access = list(access_engine)//required access level to open cell compartment + var/list/operation_req_access = list()//required access level for mecha operation + var/list/internals_req_access = list(access_engine,access_robotics)//required access level to open cell compartment var/datum/global_iterator/pr_int_temp_processor //normalizes internal air mixture temperature var/datum/global_iterator/pr_update_stats //used to auto-update stats window var/datum/global_iterator/pr_inertial_movement //controls intertial movement in spesss - var/datum/global_iterator/pr_location_temp_check //processes location temperature damage +// var/datum/global_iterator/pr_location_temp_check //processes location temperature damage var/datum/global_iterator/pr_internal_damage //processes internal damage var/wreckage @@ -76,7 +77,7 @@ pr_int_temp_processor = new /datum/global_iterator/mecha_preserve_temp(list(src)) pr_update_stats = new /datum/global_iterator/mecha_view_stats(list(src),0) pr_inertial_movement = new /datum/global_iterator/mecha_intertial_movement(null,0) - pr_location_temp_check = new /datum/global_iterator/mecha_location_temp_check(list(src)) +// pr_location_temp_check = new /datum/global_iterator/mecha_location_temp_check(list(src)) pr_internal_damage = new /datum/global_iterator/mecha_internal_damage(list(src),0) src.verbs -= /obj/mecha/verb/disconnect_from_port @@ -86,6 +87,7 @@ /obj/mecha/Del() src.go_out() + src.loc.Exited(src) ..() return @@ -93,7 +95,7 @@ /client/Click(object,location,control,params) var/mob/M = src.mob - if(M && istype(M.loc, /obj/mecha)) + if(M && M.in_contents_of(/obj/mecha)) /* if(mech_click == world.time) return mech_click = world.time @@ -258,7 +260,7 @@ /obj/mecha/proc/check_for_internal_damage(var/list/possible_int_damage,var/ignore_threshold=null) if(!src) return - if(prob(25)) + if(prob(15)) if(ignore_threshold || src.health*100/initial(src.health)src.max_temperature) + src.take_damage(5,"fire") + src.check_for_internal_damage(list(MECHA_INT_FIRE, MECHA_INT_TEMP_CONTROL)) + return + ///////////////////////////////////// //////// Atmospheric stuff //////// ///////////////////////////////////// @@ -776,6 +784,15 @@ if(src.occupant) user << "Unable to initiate maintenance protocol." return + if(add_req_access) + 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_access_dialog(id_card, user) + return if(src.internals_access_allowed(usr)) if(state==0) state = 1 @@ -901,6 +918,7 @@ Toggle Internal Airtank Usage
[(/obj/mecha/verb/disconnect_from_port in src.verbs)?"Disconnect from port
":null] [(/obj/mecha/verb/connect_to_port in src.verbs)?"Connect to port
":null] + Unlock ID upload panel
View internal log
Eject
"} @@ -948,6 +966,20 @@ src.selected = equip src.occupant_message("You switch to [equip]") src.visible_message("[src] raises [equip]") + if (href_list["unlock_id_upload"]) + add_req_access = 1 + if (href_list["add_req_access"]) + if(!add_req_access) return + var/access = text2num(href_list["add_req_access"]) + operation_req_access += access + output_access_dialog(locate(href_list["id_card"]),locate(href_list["user"])) + if (href_list["del_req_access"]) + operation_req_access -= text2num(href_list["del_req_access"]) + output_access_dialog(locate(href_list["id_card"]),locate(href_list["user"])) + if (href_list["finish_req_access"]) + add_req_access = 0 + var/mob/user = locate(href_list["user"]) + user << browse(null,"window=exosuit_add_access") /* if (href_list["ai_take_control"]) @@ -1036,6 +1068,24 @@ if ("alientalk") return max(0, src.cell.charge) +/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 + + ////////////////////////////////////////// //////// Mecha global iterators //////// ////////////////////////////////////////// @@ -1069,6 +1119,7 @@ if ("alientalk") src.stop() return +/* /datum/global_iterator/mecha_location_temp_check //mecha location temperature checks process(var/obj/mecha/mecha) @@ -1079,6 +1130,7 @@ if ("alientalk") mecha.take_damage(5,"fire") mecha.check_for_internal_damage(list(MECHA_INT_FIRE, MECHA_INT_TEMP_CONTROL)) return +*/ /datum/global_iterator/mecha_internal_damage // processing internal damage diff --git a/code/game/mecha/mecha_construction.dm b/code/game/mecha/mecha_construction.dm index 966a63cd3d3..0bcfe460b27 100644 --- a/code/game/mecha/mecha_construction.dm +++ b/code/game/mecha/mecha_construction.dm @@ -17,6 +17,7 @@ name="Mecha Chassis" icon_state = "backbone" var/datum/construction/construct + construction_cost = list("metal"=20000) flags = FPRINT | CONDUCT attackby(obj/item/W as obj, mob/user as mob) @@ -39,30 +40,35 @@ /obj/item/mecha_parts/part/ripley_torso name="Ripley Torso" icon_state = "ripley_harness" + origin_tech = "programming=2;materials=3;biotech=1" construction_time = 300 construction_cost = list("metal"=40000,"glass"=15000) /obj/item/mecha_parts/part/ripley_left_arm name="Ripley Left Arm" icon_state = "ripley_l_arm" + origin_tech = "programming=2;materials=3" construction_time = 200 construction_cost = list("metal"=25000) /obj/item/mecha_parts/part/ripley_right_arm name="Ripley Right Arm" icon_state = "ripley_r_arm" + origin_tech = "programming=2;materials=3" construction_time = 200 construction_cost = list("metal"=25000) /obj/item/mecha_parts/part/ripley_left_leg name="Ripley Left Leg" icon_state = "ripley_l_leg" + origin_tech = "programming=2;materials=3" construction_time = 200 construction_cost = list("metal"=30000) /obj/item/mecha_parts/part/ripley_right_leg name="Ripley Right Leg" icon_state = "ripley_r_leg" + origin_tech = "programming=2;materials=3" construction_time = 200 construction_cost = list("metal"=30000) @@ -79,51 +85,113 @@ /obj/item/mecha_parts/part/gygax_torso name="Gygax Torso" icon_state = "gygax_harness" - origin_tech = "programming=3;materials=4;biotech=1" + origin_tech = "programming=2;materials=4;biotech=2" construction_time = 300 construction_cost = list("metal"=50000,"glass"=20000) /obj/item/mecha_parts/part/gygax_head name="Gygax Head" icon_state = "gygax_head" - origin_tech = "programming=3;materials=4;magnets=3" + origin_tech = "programming=2;materials=4;magnets=3" construction_time = 200 construction_cost = list("metal"=20000,"glass"=10000) /obj/item/mecha_parts/part/gygax_left_arm name="Gygax Left Arm" icon_state = "gygax_l_arm" - origin_tech = "programming=3;materials=4" + origin_tech = "programming=2;materials=4" construction_time = 200 - construction_cost = list("metal"=30000,"glass"=20000) + construction_cost = list("metal"=30000) /obj/item/mecha_parts/part/gygax_right_arm name="Gygax Right Arm" icon_state = "gygax_r_arm" - origin_tech = "programming=3;materials=4" + origin_tech = "programming=2;materials=4" construction_time = 200 - construction_cost = list("metal"=30000,"glass"=20000) + construction_cost = list("metal"=30000) /obj/item/mecha_parts/part/gygax_left_leg name="Gygax Left Leg" icon_state = "gygax_l_leg" - origin_tech = "programming=3;materials=4" + origin_tech = "programming=2;materials=4" construction_time = 200 - construction_cost = list("metal"=35000,"glass"=20000) + construction_cost = list("metal"=35000) /obj/item/mecha_parts/part/gygax_right_leg name="Gygax Right Leg" icon_state = "gygax_r_leg" - origin_tech = "programming=3;materials=4" + origin_tech = "programming=2;materials=4" construction_time = 200 - construction_cost = list("metal"=35000,"glass"=20000) + construction_cost = list("metal"=35000) /obj/item/mecha_parts/part/gygax_armour name="Gygax Armour Plates" icon_state = "gygax_armour" origin_tech = "materials=5;combat=4" construction_time = 600 - construction_cost = list("metal"=75000,"diamond"=10000) + construction_cost = list("metal"=50000,"diamond"=10000) + + +//////////// Durand + +/obj/item/mecha_parts/chassis/durand + name = "Durand Chassis" + construction_cost = list("metal"=25000) + + New() + ..() + construct = new /datum/construction/mecha/durand_chassis(src) + +/obj/item/mecha_parts/part/durand_torso + name="Durand Torso" + icon_state = "gygax_harness" + origin_tech = "programming=2;materials=4;biotech=2" + construction_time = 300 + construction_cost = list("metal"=55000,"glass"=20000,"silver"=10000) + +/obj/item/mecha_parts/part/durand_head + name="Durand Head" + icon_state = "gygax_head" + origin_tech = "programming=2;materials=4;magnets=3" + construction_time = 200 + construction_cost = list("metal"=25000,"glass"=10000,"silver"=5000) + +/obj/item/mecha_parts/part/durand_left_arm + name="Durand Left Arm" + icon_state = "gygax_l_arm" + origin_tech = "programming=2;materials=4" + construction_time = 200 + construction_cost = list("metal"=35000,"silver"=5000) + +/obj/item/mecha_parts/part/durand_right_arm + name="Durand Right Arm" + icon_state = "gygax_r_arm" + origin_tech = "programming=2;materials=4" + construction_time = 200 + construction_cost = list("metal"=35000,"silver"=5000) + +/obj/item/mecha_parts/part/durand_left_leg + name="Durand Left Leg" + icon_state = "gygax_l_leg" + origin_tech = "programming=2;materials=4" + construction_time = 200 + construction_cost = list("metal"=40000,"silver"=5000) + +/obj/item/mecha_parts/part/durand_right_leg + name="Durand Right Leg" + icon_state = "gygax_r_leg" + origin_tech = "programming=2;materials=4" + construction_time = 200 + construction_cost = list("metal"=40000,"silver"=5000) + +/obj/item/mecha_parts/part/durand_armour + name="Durand Armour Plates" + icon_state = "gygax_armour" + origin_tech = "materials=5;combat=4" + construction_time = 600 + construction_cost = list("metal"=50000,"uranium"=10000) + + ////////// Firefighter @@ -214,7 +282,7 @@ throw_range = 15 ripley - origin_tech = "programming=3;materials=1" + origin_tech = "programming=3" ripley/peripherals name = "Circuit board (Ripley Peripherals Control module)" @@ -225,7 +293,7 @@ icon_state = "mainboard" gygax - origin_tech = "programming=4;materials=2" + origin_tech = "programming=4" gygax/peripherals name = "Circuit board (Gygax Peripherals Control module)" @@ -234,18 +302,34 @@ gygax/targeting name = "Circuit board (Gygax Weapon Control and Targeting module)" icon_state = "mcontroller" - origin_tech = "programming=3;materials=1;combat=3" + origin_tech = "programming=3;combat=3" gygax/main name = "Circuit board (Gygax Central Control module)" icon_state = "mainboard" + durand + origin_tech = "programming=4" + + durand/peripherals + name = "Circuit board (Durand Peripherals Control module)" + icon_state = "mcontroller" + + durand/targeting + name = "Circuit board (Durand Weapon Control and Targeting module)" + icon_state = "mcontroller" + origin_tech = "programming=3;combat=3" + + durand/main + name = "Circuit board (Durand Central Control module)" + icon_state = "mainboard" + firefighter/peripherals name = "Circuit board (Ripley-on-Fire Peripherals Control module)" icon_state = "mcontroller" honker - origin_tech = "programming=3;materials=2" + origin_tech = "programming=4" honker/peripherals name = "Circuit board (H.O.N.K Peripherals Control module)" @@ -731,6 +815,116 @@ +/datum/construction/mecha/durand_chassis + steps = list(list("key"="/obj/item/mecha_parts/part/durand_torso"),//1 + list("key"="/obj/item/mecha_parts/part/durand_left_arm"),//2 + list("key"="/obj/item/mecha_parts/part/durand_right_arm"),//3 + list("key"="/obj/item/mecha_parts/part/durand_left_leg"),//4 + list("key"="/obj/item/mecha_parts/part/durand_right_leg"),//5 + list("key"="/obj/item/mecha_parts/part/durand_head") + ) + + 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/mecha/durand(const_holder) + const_holder.density = 1 + spawn() + del src + return + +/datum/construction/mecha/durand + result = "/obj/mecha/combat/durand" + steps = list(list("key"="/obj/item/weapon/weldingtool"),//1 + list("key"="/obj/item/weapon/wrench"),//2 + list("key"="/obj/item/mecha_parts/part/durand_armour"),//3 + list("key"="/obj/item/weapon/weldingtool"),//4 + 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/weapon/stock_parts/capacitor/adv"),//8 + 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/screwdriver"),//13 + list("key"="/obj/item/mecha_parts/circuitboard/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/wirecutters"),//17 + list("key"="/obj/item/weapon/cable_coil"),//18 + list("key"="/obj/item/weapon/screwdriver"),//19 + list("key"="/obj/item/weapon/wrench")//20 + ) + + action(atom/used_atom,mob/user as mob) + return check_step(used_atom,user) + + custom_action(step, atom/used_atom, mob/user) + if(!..()) + return 0 + + //TODO: better messages. + switch(step) + if(20) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + if(19) + user.visible_message("[user] adjusts [holder] hydraulic systems.", "You adjust [holder] hydraulic systems.") + if(18) + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + if(17) + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + if(16) + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + del used_atom + if(15) + user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") + if(14) + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + del used_atom + if(13) + user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") + if(12) + user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") + del used_atom + if(11) + user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") + if(10) + user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].") + del used_atom + if(9) + user.visible_message("[user] secures the advanced scanner module.", "You secure the advanced scanner module.") + if(8) + user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].") + del used_atom + if(7) + user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.") + if(6) + user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") + if(5) + user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") + if(4) + user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + if(3) + user.visible_message("[user] installs Durand Armour Plates to [holder].", "You install Durand Armour Plates to [holder].") + holder.overlays += used_atom.icon_state + del used_atom + if(2) + user.visible_message("[user] secures Durand Armour Plates.", "You secure Durand Armour Plates.") + if(1) + user.visible_message("[user] welds Durand Armour Plates to [holder].", "You weld Durand Armour Plates to [holder].") + return 1 + + + ////////////////// misc //////////////// diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm index 70bc263e669..103bdfd67f4 100644 --- a/code/game/mecha/mecha_control_console.dm +++ b/code/game/mecha/mecha_control_console.dm @@ -88,6 +88,7 @@ desc = "Device used to transmit exosuit data." icon = 'device.dmi' icon_state = "motion2" + origin_tech = "programming=2;magnets=2" var/construction_time = 30 var/list/construction_cost = list("metal"=500) diff --git a/code/game/mecha/working/working.dm b/code/game/mecha/working/working.dm index c113d650420..af64204922e 100644 --- a/code/game/mecha/working/working.dm +++ b/code/game/mecha/working/working.dm @@ -1,11 +1,6 @@ /obj/mecha/working - deflect_chance = 10 - health = 500 req_access = access_heads - operation_req_access = list(access_engine,access_robotics) - internals_req_access = list(access_engine,access_robotics) - var/add_req_access = 1 - internal_damage_threshold = 70 + internal_damage_threshold = 60 /obj/mecha/working/New() ..() @@ -24,24 +19,6 @@ /obj/mecha/working/range_action(atom/target as obj|mob|turf) return -/obj/mecha/working/Topic(href, href_list) - ..() - if (href_list["unlock_id_upload"]) - add_req_access = 1 - if (href_list["add_req_access"]) - if(!add_req_access) return - var/access = text2num(href_list["add_req_access"]) - operation_req_access += access - output_access_dialog(locate(href_list["id_card"]),locate(href_list["user"])) - if (href_list["del_req_access"]) - operation_req_access -= text2num(href_list["del_req_access"]) - output_access_dialog(locate(href_list["id_card"]),locate(href_list["user"])) - if (href_list["finish_req_access"]) - add_req_access = 0 - var/mob/user = locate(href_list["user"]) - user << browse(null,"window=exosuit_add_access") - return - /obj/mecha/working/get_stats_part() var/output = ..() output += "[src.name] Tools:
" @@ -51,41 +28,4 @@ else output += "None" output += "
" - return output - - -/obj/mecha/working/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(add_req_access && (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))) - 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_access_dialog(id_card, user) - else - return ..() - -/obj/mecha/working/get_commands() - var/output = {"Unlock ID upload panel
- "} - output += ..() - return output - - -/obj/mecha/working/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 + return output \ No newline at end of file diff --git a/code/game/research/designs.dm b/code/game/research/designs.dm index 75bdeadf46a..0d800c827c4 100644 --- a/code/game/research/designs.dm +++ b/code/game/research/designs.dm @@ -380,7 +380,7 @@ datum name = "Circuit Design (APLU \"Ripley\" Central Control module)" desc = "Allows for the construction of a \"Ripley\" Central Control module." id = "ripley_main" - req_tech = list("programming" = 3, "materials" = 3) + req_tech = list("programming" = 3, "materials" = 2) build_type = IMPRINTER materials = list("$glass" = 2000, "acid" = 20) build_path = "/obj/item/mecha_parts/circuitboard/ripley/main" @@ -389,7 +389,7 @@ datum name = "Circuit Design (APLU \"Ripley\" Peripherals Control module)" desc = "Allows for the construction of a \"Ripley\" Peripheral Control module." id = "ripley_peri" - req_tech = list("programming" = 3, "materials" = 3) + req_tech = list("programming" = 3, "materials" = 2) build_type = IMPRINTER materials = list("$glass" = 2000, "acid" = 20) build_path = "/obj/item/mecha_parts/circuitboard/ripley/peripherals" @@ -398,7 +398,7 @@ datum name = "Circuit Design (\"Gygax\" Central Control module)" desc = "Allows for the construction of a \"Gygax\" Central Control module." id = "gygax_main" - req_tech = list("programming" = 4, "materials" = 4) + req_tech = list("programming" = 4, "materials" = 2) build_type = IMPRINTER materials = list("$glass" = 2000, "acid" = 20) build_path = "/obj/item/mecha_parts/circuitboard/gygax/main" @@ -407,7 +407,7 @@ datum name = "Circuit Design (\"Gygax\" Peripherals Control module)" desc = "Allows for the construction of a \"Gygax\" Peripheral Control module." id = "gygax_peri" - req_tech = list("programming" = 4, "materials" = 4) + req_tech = list("programming" = 4, "materials" = 2) build_type = IMPRINTER materials = list("$glass" = 2000, "acid" = 20) build_path = "/obj/item/mecha_parts/circuitboard/gygax/peripherals" @@ -416,16 +416,44 @@ datum name = "Circuit Design (\"Gygax\" Weapons & Targeting Control module)" desc = "Allows for the construction of a \"Gygax\" Weapons & Targeting Control module." id = "gygax_targ" - req_tech = list("programming" = 4, "materials" = 4) + req_tech = list("programming" = 4, "materials" = 2) build_type = IMPRINTER materials = list("$glass" = 2000, "acid" = 20) build_path = "/obj/item/mecha_parts/circuitboard/gygax/targeting" + durand_main + name = "Circuit Design (\"Gygax\" Central Control module)" + desc = "Allows for the construction of a \"Gygax\" Central Control module." + id = "durand_main" + req_tech = list("programming" = 4, "materials" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/mecha_parts/circuitboard/durand/main" + + durand_peri + name = "Circuit Design (\"Gygax\" Peripherals Control module)" + desc = "Allows for the construction of a \"Gygax\" Peripheral Control module." + id = "durand_peri" + req_tech = list("programming" = 4, "materials" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/mecha_parts/circuitboard/durand/peripherals" + + durand_targ + name = "Circuit Design (\"Gygax\" Weapons & Targeting Control module)" + desc = "Allows for the construction of a \"Gygax\" Weapons & Targeting Control module." + id = "durand_targ" + req_tech = list("programming" = 4, "materials" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/mecha_parts/circuitboard/durand/targeting" + + honker_main name = "Circuit Design (\"H.O.N.K\" Central Control module)" desc = "Allows for the construction of a \"H.O.N.K\" Central Control module." id = "honker_main" - req_tech = list("programming" = 3, "materials" = 3) + req_tech = list("programming" = 3, "materials" = 2) build_type = IMPRINTER materials = list("$glass" = 2000, "acid" = 20) build_path = "/obj/item/mecha_parts/circuitboard/honker/main" @@ -434,7 +462,7 @@ datum name = "Circuit Design (\"H.O.N.K\" Peripherals Control module)" desc = "Allows for the construction of a \"H.O.N.K\" Peripheral Control module." id = "honker_peri" - req_tech = list("programming" = 3, "materials" = 3) + req_tech = list("programming" = 3, "materials" = 2) build_type = IMPRINTER materials = list("$glass" = 2000, "acid" = 20) build_path = "/obj/item/mecha_parts/circuitboard/honker/peripherals" @@ -443,7 +471,7 @@ datum name = "Circuit Design (\"H.O.N.K\" Weapons & Targeting Control module)" desc = "Allows for the construction of a \"H.O.N.K\" Weapons & Targeting Control module." id = "honker_targ" - req_tech = list("programming" = 3, "materials" = 3) + req_tech = list("programming" = 3, "materials" = 2) build_type = IMPRINTER materials = list("$glass" = 2000, "acid" = 20) build_path = "/obj/item/mecha_parts/circuitboard/honker/targeting" @@ -505,7 +533,7 @@ datum desc = "An exosuit mounted Gravitational Catapult." id = "mech_gravcatapult" build_type = MECHFAB - req_tech = list("bluespace" = 1, "magnets" = 3) + req_tech = list("bluespace" = 2, "magnets" = 3) build_path = "/obj/item/mecha_parts/mecha_equipment/gravcatapult" diff --git a/code/modules/mob/living/silicon/robot/death.dm b/code/modules/mob/living/silicon/robot/death.dm index a31590247e9..547d2eee6dd 100644 --- a/code/modules/mob/living/silicon/robot/death.dm +++ b/code/modules/mob/living/silicon/robot/death.dm @@ -7,6 +7,10 @@ src.camera.status = 0.0 + if(src.in_contents_of(/obj/machinery/recharge_station))//exit the recharge station + var/obj/machinery/recharge_station/RC = src.loc + RC.go_out() + if(src.blind) src.blind.layer = 0 src.sight |= SEE_TURFS diff --git a/icons/mob/xcomalien.dmi b/icons/mob/xcomalien.dmi index 7148ba6aa2b7ecc736648f474a0101143fd9585e..2698282fe6e9066937a422c5709a5388d747c12f 100644 GIT binary patch literal 19404 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