From 346e19f4e48200d219bf6e72075e7fb3c963583c Mon Sep 17 00:00:00 2001 From: panurgomatic Date: Thu, 29 Dec 2011 00:13:29 +0000 Subject: [PATCH] - Added some new Odysseus parts and tweaked old ones - Added Exosuit Syringe Gun Module - New Odysseus sprites - courtesy of Veyveyr - Updated the changelog git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2847 316c924e-a436-60f5-8080-3fe189b3f50e --- code/game/mecha/equipment/tools/tools.dm | 272 +++++++++++++++++++- code/game/mecha/mech_fabricator.dm | 5 +- code/game/mecha/mecha.dm | 74 ++++-- code/game/mecha/mecha_construction_paths.dm | 20 +- code/game/mecha/mecha_parts.dm | 43 ++-- code/game/mecha/mecha_wreckage.dm | 21 ++ code/game/mecha/medical/odysseus.dm | 6 +- code/modules/research/designs.dm | 7 + html/changelog.html | 10 + icons/misc/mech_construct.dmi | Bin 37905 -> 41825 bytes icons/mob/mecha.dmi | Bin 110725 -> 110226 bytes 11 files changed, 401 insertions(+), 57 deletions(-) diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm index 57470a74335..f1f806cf794 100644 --- a/code/game/mecha/equipment/tools/tools.dm +++ b/code/game/mecha/equipment/tools/tools.dm @@ -871,13 +871,13 @@ /obj/item/mecha_parts/mecha_equipment/tool/sleeper name = "Mounted Sleeper" - desc = "Mounted Sleeper" + desc = "Mounted Sleeper. (Can be attached to: Medical Exosuits)" icon = 'Cryogenic2.dmi' icon_state = "sleeper_0" origin_tech = "programming=2;biotech=3" energy_drain = 20 range = MELEE - construction_cost = list("metal"=5000,"silver"=100,"glass"=10000) + construction_cost = list("metal"=5000,"glass"=10000) reliability = 1000 equip_cooldown = 20 var/mob/living/carbon/occupant = null @@ -1039,7 +1039,7 @@ if(occupant.reagents) for(var/datum/reagent/R in occupant.reagents.reagent_list) if(R.volume > 0) - . += "[R]: [round(R.volume,0.01)]" + . += "[R]: [round(R.volume,0.01)]
" return . || "None" @@ -1110,6 +1110,12 @@ cable.amount = 0 ..() + can_attach(obj/mecha/working/M) + if(..()) + if(istype(M)) + return 1 + return 0 + attach() ..() event = chassis.events.addEvent("onMove",src,"layCable") @@ -1179,7 +1185,7 @@ return proc/use_cable(amount) - if(!equip_ready && (!cable || cable.amount<1)) + if(!cable || cable.amount<1) set_ready_state(1) chassis.occupant_message("Cable depleted, [src] deactivated.") chassis.log_message("Cable depleted, [src] deactivated.") @@ -1229,6 +1235,264 @@ last_piece = NC return 1 +/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun + name = "Syringe Gun" + desc = "Exosuit-mounted chem synthesizer with syringe gun. Reagents inside are held in stasis, so no reactions will occur. (Can be attached to: Medical Exosuits)" + icon = 'gun.dmi' + icon_state = "syringegun" + var/list/syringes + var/list/known_reagents + var/list/processed_reagents + var/max_syringes = 10 + var/max_volume = 75 //max reagent volume + var/synth_speed = 5 //[num] reagent units per cycle + energy_drain = 10 + var/mode = 0 //0 - fire syringe, 1 - analyze reagents. + var/datum/global_iterator/mech_synth/synth + range = MELEE|RANGED + equip_cooldown = 10 + origin_tech = "materials=3;biotech=4;magnets=4;programming=3" + construction_time = 200 + construction_cost = list("metal"=3000,"gold"=2000,"plasma"=4000) + + New() + ..() + flags |= NOREACT + syringes = new + known_reagents = list("inaprovaline"="Inaprovaline","anti_toxin"="Anti-Toxin (Dylovene)") + processed_reagents = new + create_reagents(max_volume) + synth = new (list(src),0) + + detach() + synth.stop() + return ..() + + critfail() + ..() + flags &= ~NOREACT + return + + can_attach(obj/mecha/medical/M) + if(..()) + if(istype(M)) + return 1 + return 0 + + get_equip_info() + var/output = ..() + if(output) + return "[output] \[[mode? "Analyze" : "Launch"]\]
\[Syringes: [syringes.len]/[max_syringes] | Reagents: [reagents.total_volume]/[reagents.maximum_volume]\]
Reagents list" + return + + action(atom/movable/target) + if(!action_checks(target)) + return + if(istype(target,/obj/item/weapon/reagent_containers/syringe)) + return load_syringe(target) + if(mode) + return analyze_reagents(target) + if(!syringes.len) + chassis.occupant_message("No syringes loaded.") + return + if(reagents.total_volume<=0) + chassis.occupant_message("No available reagents to load syringe with.") + return + set_ready_state(0) + chassis.use_power(energy_drain) + var/turf/trg = get_turf(target) + var/obj/item/weapon/reagent_containers/syringe/S = syringes[1] + S.forceMove(get_turf(chassis)) + reagents.trans_to(S, min(S.volume, reagents.total_volume)) + syringes -= S + S.icon = 'chemical.dmi' + S.icon_state = "syringeproj" + playsound(chassis, 'syringeproj.ogg', 50, 1) + spawn(-1) + src = null //if src is deleted, still process the syringe + for(var/i=0, i<6, i++) + if(!S) + break + if(step_towards(S,trg)) + var/list/mobs = new + for(var/mob/living/carbon/M in S.loc) + mobs += M + var/mob/living/carbon/M = safepick(mobs) + if(M) + S.icon_state = initial(S.icon_state) + S.icon = initial(S.icon) + S.reagents.trans_to(M, S.reagents.total_volume) + M.take_organ_damage(5) + S.visible_message(" [M] was hit by the syringe!") + break + else if(S.loc == trg) + S.icon_state = initial(S.icon_state) + S.icon = initial(S.icon) + S.update_icon() + break + else + S.icon_state = initial(S.icon_state) + S.icon = initial(S.icon) + S.update_icon() + break + sleep(1) + do_after_cooldown() + return 1 + + Topic(href,href_list) + ..() + var/datum/topic_input/filter = new (href,href_list) + if(filter.get("toggle_mode")) + mode = !mode + update_equip_info() + return + if(filter.get("select_reagents")) + processed_reagents.len = 0 + var/m = 0 + for(var/i=1 to known_reagents.len) + if(m>synth_speed) + break + var/reagent = filter.get("reagent_[i]") + if(reagent && (reagent in known_reagents)) + chassis.occupant_message("[known_reagents[reagent]] added to production") + processed_reagents += reagent + m++ + if(processed_reagents.len) + synth.start() + chassis.occupant_message("Reagent processing started.") + return + if(filter.get("show_reagents")) + chassis.occupant << browse(get_reagents_page(),"window=msyringegun") + if(filter.get("purge_reagent")) + var/reagent = filter.get("purge_reagent") + if(reagent) + reagents.del_reagent(reagent) + return + if(filter.get("purge_all")) + reagents.clear_reagents() + return + return + + proc/get_reagents_page() + var/output = {" + + Reagent Synthesizer + + + + +

Current reagents:

+
+ [get_current_reagents() || "None"] +
+

Reagents production:

+
+ [get_reagents_form()] +
+ + + "} + return output + + proc/get_reagents_form() + var/r_list = get_reagents_list() + var/inputs + if(r_list) + inputs += "" + inputs += "" + inputs += "" + var/output = {"
+ [r_list || "No known reagents"] + [inputs] +
+ [r_list? "Only the first [synth_speed] selected reagent\s will be added to production" : null] + "} + return output + + proc/get_reagents_list() + var/output + for(var/i=1 to known_reagents.len) + var/reagent_id = known_reagents[i] + output += {" [known_reagents[reagent_id]]
"} + return output + + proc/get_current_reagents() + var/output + for(var/datum/reagent/R in reagents.reagent_list) + if(R.volume > 0) + output += "[R]: [round(R.volume,0.001)] - Purge Reagent
" + if(output) + output += "Total: [round(reagents.total_volume,0.001)]/[reagents.maximum_volume] - Purge All" + return output + + proc/load_syringe(obj/item/weapon/reagent_containers/syringe/S) + if(syringes.lenNo reagent info gained from [A].") + return 0 + chassis.occupant_message("Analyzing reagents...") + for(var/datum/reagent/R in A.reagents.reagent_list) + if(R.reagent_state == 2 && add_known_reagent(R.id,R.name)) + chassis.occupant_message("Reagent analyzed, identified as [R.name] and added to database.") + send_byjax(chassis.occupant,"msyringegun.browser","reagents_form",get_reagents_form()) + chassis.occupant_message("Analyzis complete.") + return 1 + + proc/add_known_reagent(r_id,r_name) + set_ready_state(0) + do_after_cooldown() + if(!(r_id in known_reagents)) + known_reagents += r_id + known_reagents[r_id] = r_name + return 1 + return 0 + + + update_equip_info() + if(..()) + send_byjax(chassis.occupant,"msyringegun.browser","reagents",get_current_reagents()) + send_byjax(chassis.occupant,"msyringegun.browser","reagents_form",get_reagents_form()) + return 1 + return + + on_reagent_change() + ..() + update_equip_info() + return + +/datum/global_iterator/mech_synth + delay = 100 + + process(var/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/S) + if(!S.processed_reagents.len || S.reagents.total_volume >= S.reagents.maximum_volume) + S.chassis.occupant_message("Reagent processing stopped.") + return stop() + if(anyprob(S.reliability)) + S.critfail() + var/amount = S.synth_speed / S.processed_reagents.len + for(var/reagent in S.processed_reagents) + S.reagents.add_reagent(reagent,amount) + S.chassis.use_power(S.energy_drain*10) + return 1 + + /* /obj/item/mecha_parts/mecha_equipment/defence_shocker name = "Exosuit Defence Shocker" diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index d9bb91014fb..ad2dcca0c19 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -56,10 +56,12 @@ "Odysseus"=list( /obj/item/mecha_parts/chassis/odysseus, /obj/item/mecha_parts/part/odysseus_torso, + /obj/item/mecha_parts/part/odysseus_head, /obj/item/mecha_parts/part/odysseus_left_arm, /obj/item/mecha_parts/part/odysseus_right_arm, /obj/item/mecha_parts/part/odysseus_left_leg, - /obj/item/mecha_parts/part/odysseus_right_leg + /obj/item/mecha_parts/part/odysseus_right_leg, + /obj/item/mecha_parts/part/odysseus_armour ), "Gygax"=list( @@ -97,6 +99,7 @@ /obj/item/mecha_parts/mecha_equipment/tool/extinguisher, /obj/item/mecha_parts/mecha_equipment/tool/cable_layer, /obj/item/mecha_parts/mecha_equipment/tool/sleeper, + /obj/item/mecha_parts/mecha_equipment/tool/syringe_gun, ///obj/item/mecha_parts/mecha_equipment/repair_droid, /obj/item/mecha_parts/mecha_equipment/plasma_generator, /obj/item/mecha_parts/mecha_equipment/weapon/energy/taser, diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index a818e7ab3ac..65b23540ed0 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -74,13 +74,10 @@ radio.icon_state = icon_state radio.subspace_transmission = 1 src.icon_state += "-open" - /* - src.air_contents.volume = gas_tank_volume //liters - src.air_contents.temperature = T20C - src.air_contents.oxygen = (src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature) - */ - internal_tank = new /obj/machinery/portable_atmospherics/canister/air(src) + if(!add_airtank()) + removeVerb(/obj/mecha/verb/connect_to_port) + removeVerb(/obj/mecha/verb/toggle_internal_tank) src.spark_system.set_up(2, 0, src) src.spark_system.attach(src) cell = new(src) @@ -93,8 +90,8 @@ // 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 - src.verbs -= /atom/movable/verb/pull + removeVerb(/obj/mecha/verb/disconnect_from_port) + removeVerb(/atom/movable/verb/pull) src.log_message("[src.name] created.") src.loc.Entered(src) return @@ -108,6 +105,16 @@ ////// Helpers ///////// //////////////////////// +/obj/mecha/proc/removeVerb(verb_path) + verbs -= verb_path + +/obj/mecha/proc/addVerb(verb_path) + verbs += verb_path + +/obj/mecha/proc/add_airtank() + internal_tank = new /obj/machinery/portable_atmospherics/canister/air(src) + return internal_tank + /obj/mecha/proc/do_after(delay as num) sleep(delay) if(src) @@ -705,6 +712,12 @@ //////// Atmospheric stuff //////// ///////////////////////////////////// +/obj/mecha/proc/get_turf_air() + var/turf/T = get_turf(src) + if(T) + . = T.return_air() + return + /obj/mecha/remove_air(amount) if(use_internal_tank && internal_tank) return internal_tank.air_contents.remove(amount) @@ -715,19 +728,25 @@ return /obj/mecha/return_air() - if(internal_tank) - return internal_tank.return_air() + if(use_internal_tank && internal_tank) + . = internal_tank.return_air() + else + . = get_turf_air() return /obj/mecha/proc/return_pressure() - if(internal_tank) - return internal_tank.return_pressure() - return 0 + . = 0 + var/datum/gas_mixture/gm = return_air() + if(gm) + . = gm.return_pressure() + return /obj/mecha/proc/return_temperature() - if(internal_tank) - return internal_tank.return_temperature() - return 0 + . = 0 + var/datum/gas_mixture/gm = return_air() + if(gm) + . = gm.return_temperature() + return /obj/mecha/proc/connect(obj/machinery/atmospherics/portables_connector/new_port) //Make sure not already connected to something else @@ -1387,6 +1406,7 @@ else src.occupant_message("Recalibration failed.") src.log_message("Recalibration of coordination system failed with 1 error.",1) + //debug /* if(href_list["debug"]) @@ -1397,6 +1417,7 @@ return */ + /* if (href_list["ai_take_control"]) @@ -1506,10 +1527,11 @@ return src.stop() var/datum/gas_mixture/int_tank_air = mecha.return_air() 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(mecha.use_internal_tank && mecha.internal_tank) + if(mecha.return_pressure()>mecha.internal_tank.maximum_pressure && !(mecha.hasInternalDamage(MECHA_INT_TANK_BREACH))) + mecha.setInternalDamage(MECHA_INT_TANK_BREACH) 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. @@ -1517,12 +1539,14 @@ if(mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL)) //stop the mecha_preserve_temp loop datum mecha.pr_int_temp_processor.stop() 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.internal_tank) + int_tank_air = mecha.internal_tank.return_air() + 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() @@ -1566,4 +1590,4 @@ //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 -*/ \ No newline at end of file +*/ diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm index 0642adcb131..42efe367e0e 100644 --- a/code/game/mecha/mecha_construction_paths.dm +++ b/code/game/mecha/mecha_construction_paths.dm @@ -775,10 +775,11 @@ /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 + list("key"=/obj/item/mecha_parts/part/odysseus_head),//2 + list("key"=/obj/item/mecha_parts/part/odysseus_left_arm),//3 + list("key"=/obj/item/mecha_parts/part/odysseus_right_arm),//4 + list("key"=/obj/item/mecha_parts/part/odysseus_left_leg),//5 + list("key"=/obj/item/mecha_parts/part/odysseus_right_leg)//6 ) custom_action(step, atom/used_atom, mob/user) @@ -812,7 +813,7 @@ "backkey"=/obj/item/weapon/crowbar, "desc"="External armor is installed."), //3 - list("key"=/obj/item/stack/sheet/r_metal, + list("key"=/obj/item/mecha_parts/part/odysseus_armour, "backkey"=/obj/item/weapon/weldingtool, "desc"="Internal armor is welded."), //4 @@ -931,16 +932,17 @@ 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].") + user.visible_message("[user] installs [used_atom] layer to [holder].", "You install external reinforced armor layer to [holder].") + holder.overlays += used_atom.icon_state + del used_atom 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 + var/obj/item/mecha_parts/part/odysseus_armour/MS = new /obj/item/mecha_parts/part/odysseus_armour(get_turf(holder)) + user.visible_message("[user] pries [MS] from [holder].", "You prie [MS] from [holder].") if(1) if(diff==FORWARD) user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].") diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm index a29156ab3d4..6961bd7e818 100644 --- a/code/game/mecha/mecha_parts.dm +++ b/code/game/mecha/mecha_parts.dm @@ -340,46 +340,59 @@ ..() construct = new /datum/construction/mecha/odysseus_chassis(src) +/obj/item/mecha_parts/part/odysseus_head + name="Odysseus Head" + icon_state = "odysseus_head" + construction_time = 100 + construction_cost = list("metal"=2000,"glass"=10000) + origin_tech = "programming=3;materials=2" + /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" + icon_state = "odysseus_torso" origin_tech = "programming=2;materials=2;biotech=2;engineering=2" - construction_time = 200 - construction_cost = list("metal"=25000,"glass"=10000) + construction_time = 180 + construction_cost = list("metal"=25000) /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" + icon_state = "odysseus_l_arm" origin_tech = "programming=2;materials=2;engineering=2" - construction_time = 150 - construction_cost = list("metal"=15000) + construction_time = 120 + construction_cost = list("metal"=10000) /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" + icon_state = "odysseus_r_arm" origin_tech = "programming=2;materials=2;engineering=2" - construction_time = 150 - construction_cost = list("metal"=15000) + construction_time = 120 + construction_cost = list("metal"=10000) /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" + icon_state = "odysseus_l_leg" origin_tech = "programming=2;materials=2;engineering=2" - construction_time = 150 - construction_cost = list("metal"=20000) + construction_time = 130 + construction_cost = list("metal"=15000) /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" + icon_state = "odysseus_r_leg" origin_tech = "programming=2;materials=2;engineering=2" - construction_time = 150 - construction_cost = list("metal"=20000) + construction_time = 130 + construction_cost = list("metal"=15000) +/obj/item/mecha_parts/part/odysseus_armour + name="Odysseus Carapace" + icon_state = "odysseus_armour" + origin_tech = "materials=3;engineering=3" + construction_time = 200 + construction_cost = list("metal"=15000) ///////// Circuitboards diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm index 7d1108c8f38..366e475a164 100644 --- a/code/game/mecha/mecha_wreckage.dm +++ b/code/game/mecha/mecha_wreckage.dm @@ -170,3 +170,24 @@ /obj/effect/decal/mecha_wreckage/phazon name = "Phazon wreckage" icon_state = "phazon-broken" + + +/obj/effect/decal/mecha_wreckage/odysseus + name = "Odysseus wreckage" + icon_state = "odysseus-broken" + + New() + ..() + var/list/parts = list( + /obj/item/mecha_parts/part/odysseus_torso, + /obj/item/mecha_parts/part/odysseus_head, + /obj/item/mecha_parts/part/odysseus_left_arm, + /obj/item/mecha_parts/part/odysseus_right_arm, + /obj/item/mecha_parts/part/odysseus_left_leg, + /obj/item/mecha_parts/part/odysseus_right_leg) + for(var/i=0;i<2;i++) + if(!isemptylist(parts) && prob(40)) + var/part = pick(parts) + welder_salvage += part + parts -= part + return \ No newline at end of file diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm index ff19add9f7e..26850eec4b9 100644 --- a/code/game/mecha/medical/odysseus.dm +++ b/code/game/mecha/medical/odysseus.dm @@ -1,11 +1,11 @@ /obj/mecha/medical/odysseus - desc = "Odysseus Medical Exosuit" + desc = "These exosuits are developed and produced by Vey-Med. (© All rights reserved)." name = "Odysseus" - icon_state = "placeholder-1" + icon_state = "odysseus" step_in = 2 max_temperature = 1500 health = 120 - wreckage = null + wreckage = /obj/effect/decal/mecha_wreckage/odysseus internal_damage_threshold = 35 deflect_chance = 15 step_energy_drain = 6 diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 5c9ad3cef24..2d80a87d292 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -775,6 +775,13 @@ datum req_tech = list("materials" = 5, "combat" = 5, "engineering"=3) build_path = "/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster" + mech_syringe_gun + name = "Exosuit Module Design(Syringe Gun)" + desc = "Exosuit-mounted syringe gun and chemical synthesizer." + id = "mech_syringe_gun" + build_type = MECHFAB + req_tech = list("materials" = 3, "biotech"=4, "magnets"=4, "programming"=3) + build_path = "/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun" //////////////////////////////////////// diff --git a/html/changelog.html b/html/changelog.html index 498e83c3f6f..98eec79cc19 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -54,6 +54,16 @@ Stuff which is in development and not yet visible to players or just code relate (ie. code improvements for expandability, etc.) should not be listed here. They should be listed in the changelog upon commit tho. Thanks. --> +29 December 2011 +
    +
  • ConstantA updated: +
      +
    • Added some new Odysseus parts and tweaked old ones.
    • +
    • Added Exosuit Syringe Gun Module
    • +
    • New Odysseus sprites - courtesy of Veyveyr
    • +
    +
+ 28 December 2011