mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 19:22:56 +00:00
- 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
This commit is contained in:
@@ -871,13 +871,13 @@
|
|||||||
|
|
||||||
/obj/item/mecha_parts/mecha_equipment/tool/sleeper
|
/obj/item/mecha_parts/mecha_equipment/tool/sleeper
|
||||||
name = "Mounted Sleeper"
|
name = "Mounted Sleeper"
|
||||||
desc = "Mounted Sleeper"
|
desc = "Mounted Sleeper. (Can be attached to: Medical Exosuits)"
|
||||||
icon = 'Cryogenic2.dmi'
|
icon = 'Cryogenic2.dmi'
|
||||||
icon_state = "sleeper_0"
|
icon_state = "sleeper_0"
|
||||||
origin_tech = "programming=2;biotech=3"
|
origin_tech = "programming=2;biotech=3"
|
||||||
energy_drain = 20
|
energy_drain = 20
|
||||||
range = MELEE
|
range = MELEE
|
||||||
construction_cost = list("metal"=5000,"silver"=100,"glass"=10000)
|
construction_cost = list("metal"=5000,"glass"=10000)
|
||||||
reliability = 1000
|
reliability = 1000
|
||||||
equip_cooldown = 20
|
equip_cooldown = 20
|
||||||
var/mob/living/carbon/occupant = null
|
var/mob/living/carbon/occupant = null
|
||||||
@@ -1039,7 +1039,7 @@
|
|||||||
if(occupant.reagents)
|
if(occupant.reagents)
|
||||||
for(var/datum/reagent/R in occupant.reagents.reagent_list)
|
for(var/datum/reagent/R in occupant.reagents.reagent_list)
|
||||||
if(R.volume > 0)
|
if(R.volume > 0)
|
||||||
. += "[R]: [round(R.volume,0.01)]"
|
. += "[R]: [round(R.volume,0.01)]<br />"
|
||||||
return . || "None"
|
return . || "None"
|
||||||
|
|
||||||
|
|
||||||
@@ -1110,6 +1110,12 @@
|
|||||||
cable.amount = 0
|
cable.amount = 0
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
can_attach(obj/mecha/working/M)
|
||||||
|
if(..())
|
||||||
|
if(istype(M))
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
attach()
|
attach()
|
||||||
..()
|
..()
|
||||||
event = chassis.events.addEvent("onMove",src,"layCable")
|
event = chassis.events.addEvent("onMove",src,"layCable")
|
||||||
@@ -1179,7 +1185,7 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
proc/use_cable(amount)
|
proc/use_cable(amount)
|
||||||
if(!equip_ready && (!cable || cable.amount<1))
|
if(!cable || cable.amount<1)
|
||||||
set_ready_state(1)
|
set_ready_state(1)
|
||||||
chassis.occupant_message("Cable depleted, [src] deactivated.")
|
chassis.occupant_message("Cable depleted, [src] deactivated.")
|
||||||
chassis.log_message("Cable depleted, [src] deactivated.")
|
chassis.log_message("Cable depleted, [src] deactivated.")
|
||||||
@@ -1229,6 +1235,264 @@
|
|||||||
last_piece = NC
|
last_piece = NC
|
||||||
return 1
|
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] \[<a href=\"?src=\ref[src];toggle_mode=1\">[mode? "Analyze" : "Launch"]</a>\]<br />\[Syringes: [syringes.len]/[max_syringes] | Reagents: [reagents.total_volume]/[reagents.maximum_volume]\]<br /><a href='?src=\ref[src];show_reagents=1'>Reagents list</a>"
|
||||||
|
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("<span class=\"alert\">No syringes loaded.</span>")
|
||||||
|
return
|
||||||
|
if(reagents.total_volume<=0)
|
||||||
|
chassis.occupant_message("<span class=\"alert\">No available reagents to load syringe with.</span>")
|
||||||
|
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("<span class=\"attack\"> [M] was hit by the syringe!</span>")
|
||||||
|
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 = {"<html>
|
||||||
|
<head>
|
||||||
|
<title>Reagent Synthesizer</title>
|
||||||
|
<script language='javascript' type='text/javascript'>
|
||||||
|
[js_byjax]
|
||||||
|
</script>
|
||||||
|
<style>
|
||||||
|
h3 {margin-bottom:2px;font-size:14px;}
|
||||||
|
#reagents, #reagents_form {}
|
||||||
|
form {width: 90%; margin:10px auto; border:1px dotted #999; padding:6px;}
|
||||||
|
#submit {margin-top:5px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h3>Current reagents:</h3>
|
||||||
|
<div id="reagents">
|
||||||
|
[get_current_reagents() || "None"]
|
||||||
|
</div>
|
||||||
|
<h3>Reagents production:</h3>
|
||||||
|
<div id="reagents_form">
|
||||||
|
[get_reagents_form()]
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"}
|
||||||
|
return output
|
||||||
|
|
||||||
|
proc/get_reagents_form()
|
||||||
|
var/r_list = get_reagents_list()
|
||||||
|
var/inputs
|
||||||
|
if(r_list)
|
||||||
|
inputs += "<input type=\"hidden\" name=\"src\" value=\"\ref[src]\">"
|
||||||
|
inputs += "<input type=\"hidden\" name=\"select_reagents\" value=\"1\">"
|
||||||
|
inputs += "<input id=\"submit\" type=\"submit\" value=\"Apply settings\">"
|
||||||
|
var/output = {"<form action="byond://" method="get">
|
||||||
|
[r_list || "No known reagents"]
|
||||||
|
[inputs]
|
||||||
|
</form>
|
||||||
|
[r_list? "<span style=\"font-size:80%;\">Only the first [synth_speed] selected reagent\s will be added to production</span>" : null]
|
||||||
|
"}
|
||||||
|
return output
|
||||||
|
|
||||||
|
proc/get_reagents_list()
|
||||||
|
var/output
|
||||||
|
for(var/i=1 to known_reagents.len)
|
||||||
|
var/reagent_id = known_reagents[i]
|
||||||
|
output += {"<input type="checkbox" value="[reagent_id]" name="reagent_[i]" [(reagent_id in processed_reagents)? "checked=\"1\"" : null]> [known_reagents[reagent_id]]<br />"}
|
||||||
|
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)] - <a href=\"?src=\ref[src];purge_reagent=[R.id]\">Purge Reagent</a><br />"
|
||||||
|
if(output)
|
||||||
|
output += "Total: [round(reagents.total_volume,0.001)]/[reagents.maximum_volume] - <a href=\"?src=\ref[src];purge_all=1\">Purge All</a>"
|
||||||
|
return output
|
||||||
|
|
||||||
|
proc/load_syringe(obj/item/weapon/reagent_containers/syringe/S)
|
||||||
|
if(syringes.len<max_syringes)
|
||||||
|
S.reagents.trans_to(src, S.reagents.total_volume)
|
||||||
|
S.forceMove(src)
|
||||||
|
syringes += S
|
||||||
|
chassis.occupant_message("Syringe loaded.")
|
||||||
|
update_equip_info()
|
||||||
|
return 1
|
||||||
|
chassis.occupant_message("The [src] syringe chamber is full.")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
proc/analyze_reagents(atom/A)
|
||||||
|
if(!A.reagents)
|
||||||
|
chassis.occupant_message("<span class=\"alert\">No reagent info gained from [A].</span>")
|
||||||
|
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("<span class=\"alert\">Reagent processing stopped.</a>")
|
||||||
|
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
|
/obj/item/mecha_parts/mecha_equipment/defence_shocker
|
||||||
name = "Exosuit Defence Shocker"
|
name = "Exosuit Defence Shocker"
|
||||||
|
|||||||
@@ -56,10 +56,12 @@
|
|||||||
"Odysseus"=list(
|
"Odysseus"=list(
|
||||||
/obj/item/mecha_parts/chassis/odysseus,
|
/obj/item/mecha_parts/chassis/odysseus,
|
||||||
/obj/item/mecha_parts/part/odysseus_torso,
|
/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_left_arm,
|
||||||
/obj/item/mecha_parts/part/odysseus_right_arm,
|
/obj/item/mecha_parts/part/odysseus_right_arm,
|
||||||
/obj/item/mecha_parts/part/odysseus_left_leg,
|
/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(
|
"Gygax"=list(
|
||||||
@@ -97,6 +99,7 @@
|
|||||||
/obj/item/mecha_parts/mecha_equipment/tool/extinguisher,
|
/obj/item/mecha_parts/mecha_equipment/tool/extinguisher,
|
||||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer,
|
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer,
|
||||||
/obj/item/mecha_parts/mecha_equipment/tool/sleeper,
|
/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/repair_droid,
|
||||||
/obj/item/mecha_parts/mecha_equipment/plasma_generator,
|
/obj/item/mecha_parts/mecha_equipment/plasma_generator,
|
||||||
/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser,
|
/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser,
|
||||||
|
|||||||
@@ -74,13 +74,10 @@
|
|||||||
radio.icon_state = icon_state
|
radio.icon_state = icon_state
|
||||||
radio.subspace_transmission = 1
|
radio.subspace_transmission = 1
|
||||||
src.icon_state += "-open"
|
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.set_up(2, 0, src)
|
||||||
src.spark_system.attach(src)
|
src.spark_system.attach(src)
|
||||||
cell = new(src)
|
cell = new(src)
|
||||||
@@ -93,8 +90,8 @@
|
|||||||
// 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)
|
pr_internal_damage = new /datum/global_iterator/mecha_internal_damage(list(src),0)
|
||||||
|
|
||||||
src.verbs -= /obj/mecha/verb/disconnect_from_port
|
removeVerb(/obj/mecha/verb/disconnect_from_port)
|
||||||
src.verbs -= /atom/movable/verb/pull
|
removeVerb(/atom/movable/verb/pull)
|
||||||
src.log_message("[src.name] created.")
|
src.log_message("[src.name] created.")
|
||||||
src.loc.Entered(src)
|
src.loc.Entered(src)
|
||||||
return
|
return
|
||||||
@@ -108,6 +105,16 @@
|
|||||||
////// Helpers /////////
|
////// 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)
|
/obj/mecha/proc/do_after(delay as num)
|
||||||
sleep(delay)
|
sleep(delay)
|
||||||
if(src)
|
if(src)
|
||||||
@@ -705,6 +712,12 @@
|
|||||||
//////// Atmospheric stuff ////////
|
//////// 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)
|
/obj/mecha/remove_air(amount)
|
||||||
if(use_internal_tank && internal_tank)
|
if(use_internal_tank && internal_tank)
|
||||||
return internal_tank.air_contents.remove(amount)
|
return internal_tank.air_contents.remove(amount)
|
||||||
@@ -715,19 +728,25 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
/obj/mecha/return_air()
|
/obj/mecha/return_air()
|
||||||
if(internal_tank)
|
if(use_internal_tank && internal_tank)
|
||||||
return internal_tank.return_air()
|
. = internal_tank.return_air()
|
||||||
|
else
|
||||||
|
. = get_turf_air()
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/mecha/proc/return_pressure()
|
/obj/mecha/proc/return_pressure()
|
||||||
if(internal_tank)
|
. = 0
|
||||||
return internal_tank.return_pressure()
|
var/datum/gas_mixture/gm = return_air()
|
||||||
return 0
|
if(gm)
|
||||||
|
. = gm.return_pressure()
|
||||||
|
return
|
||||||
|
|
||||||
/obj/mecha/proc/return_temperature()
|
/obj/mecha/proc/return_temperature()
|
||||||
if(internal_tank)
|
. = 0
|
||||||
return internal_tank.return_temperature()
|
var/datum/gas_mixture/gm = return_air()
|
||||||
return 0
|
if(gm)
|
||||||
|
. = gm.return_temperature()
|
||||||
|
return
|
||||||
|
|
||||||
/obj/mecha/proc/connect(obj/machinery/atmospherics/portables_connector/new_port)
|
/obj/mecha/proc/connect(obj/machinery/atmospherics/portables_connector/new_port)
|
||||||
//Make sure not already connected to something else
|
//Make sure not already connected to something else
|
||||||
@@ -1387,6 +1406,7 @@
|
|||||||
else
|
else
|
||||||
src.occupant_message("<font color='red'>Recalibration failed.</font>")
|
src.occupant_message("<font color='red'>Recalibration failed.</font>")
|
||||||
src.log_message("Recalibration of coordination system failed with 1 error.",1)
|
src.log_message("Recalibration of coordination system failed with 1 error.",1)
|
||||||
|
|
||||||
//debug
|
//debug
|
||||||
/*
|
/*
|
||||||
if(href_list["debug"])
|
if(href_list["debug"])
|
||||||
@@ -1397,6 +1417,7 @@
|
|||||||
return
|
return
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
if (href_list["ai_take_control"])
|
if (href_list["ai_take_control"])
|
||||||
@@ -1506,10 +1527,11 @@
|
|||||||
return src.stop()
|
return src.stop()
|
||||||
var/datum/gas_mixture/int_tank_air = mecha.return_air()
|
var/datum/gas_mixture/int_tank_air = mecha.return_air()
|
||||||
if(mecha.hasInternalDamage(MECHA_INT_FIRE))
|
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))
|
if(!mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL) && prob(5))
|
||||||
mecha.clearInternalDamage(MECHA_INT_FIRE)
|
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
|
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))
|
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.
|
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
|
if(mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL)) //stop the mecha_preserve_temp loop datum
|
||||||
mecha.pr_int_temp_processor.stop()
|
mecha.pr_int_temp_processor.stop()
|
||||||
if(mecha.hasInternalDamage(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)
|
if(mecha.internal_tank)
|
||||||
var/datum/gas_mixture/leaked_gas = int_tank_air.remove_ratio(0.10)
|
int_tank_air = mecha.internal_tank.return_air()
|
||||||
if(mecha.loc && hascall(mecha.loc,"assume_air"))
|
if(int_tank_air)
|
||||||
mecha.loc.assume_air(leaked_gas)
|
var/datum/gas_mixture/leaked_gas = int_tank_air.remove_ratio(0.10)
|
||||||
else
|
if(mecha.loc && hascall(mecha.loc,"assume_air"))
|
||||||
del(leaked_gas)
|
mecha.loc.assume_air(leaked_gas)
|
||||||
|
else
|
||||||
|
del(leaked_gas)
|
||||||
if(mecha.hasInternalDamage(MECHA_INT_SHORT_CIRCUIT))
|
if(mecha.hasInternalDamage(MECHA_INT_SHORT_CIRCUIT))
|
||||||
if(mecha.get_charge())
|
if(mecha.get_charge())
|
||||||
mecha.spark_system.start()
|
mecha.spark_system.start()
|
||||||
@@ -1566,4 +1590,4 @@
|
|||||||
//src.health = initial(src.health)/2.2
|
//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))
|
//src.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||||
return
|
return
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -775,10 +775,11 @@
|
|||||||
|
|
||||||
/datum/construction/mecha/odysseus_chassis
|
/datum/construction/mecha/odysseus_chassis
|
||||||
steps = list(list("key"=/obj/item/mecha_parts/part/odysseus_torso),//1
|
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_head),//2
|
||||||
list("key"=/obj/item/mecha_parts/part/odysseus_right_arm),//3
|
list("key"=/obj/item/mecha_parts/part/odysseus_left_arm),//3
|
||||||
list("key"=/obj/item/mecha_parts/part/odysseus_left_leg),//4
|
list("key"=/obj/item/mecha_parts/part/odysseus_right_arm),//4
|
||||||
list("key"=/obj/item/mecha_parts/part/odysseus_right_leg)//5
|
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)
|
custom_action(step, atom/used_atom, mob/user)
|
||||||
@@ -812,7 +813,7 @@
|
|||||||
"backkey"=/obj/item/weapon/crowbar,
|
"backkey"=/obj/item/weapon/crowbar,
|
||||||
"desc"="External armor is installed."),
|
"desc"="External armor is installed."),
|
||||||
//3
|
//3
|
||||||
list("key"=/obj/item/stack/sheet/r_metal,
|
list("key"=/obj/item/mecha_parts/part/odysseus_armour,
|
||||||
"backkey"=/obj/item/weapon/weldingtool,
|
"backkey"=/obj/item/weapon/weldingtool,
|
||||||
"desc"="Internal armor is welded."),
|
"desc"="Internal armor is welded."),
|
||||||
//4
|
//4
|
||||||
@@ -931,16 +932,17 @@
|
|||||||
user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
|
user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
|
||||||
if(3)
|
if(3)
|
||||||
if(diff==FORWARD)
|
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
|
else
|
||||||
user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].")
|
user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].")
|
||||||
if(2)
|
if(2)
|
||||||
if(diff==FORWARD)
|
if(diff==FORWARD)
|
||||||
user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.")
|
user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.")
|
||||||
else
|
else
|
||||||
user.visible_message("[user] pries external armor layer from [holder].", "You prie external armor layer from [holder].")
|
var/obj/item/mecha_parts/part/odysseus_armour/MS = new /obj/item/mecha_parts/part/odysseus_armour(get_turf(holder))
|
||||||
var/obj/item/stack/sheet/r_metal/MS = new /obj/item/stack/sheet/r_metal(get_turf(holder))
|
user.visible_message("[user] pries [MS] from [holder].", "You prie [MS] from [holder].")
|
||||||
MS.amount = 5
|
|
||||||
if(1)
|
if(1)
|
||||||
if(diff==FORWARD)
|
if(diff==FORWARD)
|
||||||
user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].")
|
user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].")
|
||||||
|
|||||||
@@ -340,46 +340,59 @@
|
|||||||
..()
|
..()
|
||||||
construct = new /datum/construction/mecha/odysseus_chassis(src)
|
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
|
/obj/item/mecha_parts/part/odysseus_torso
|
||||||
name="Odysseus Torso"
|
name="Odysseus Torso"
|
||||||
desc="A torso part of Odysseus. Contains power unit, processing core and life support systems."
|
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"
|
origin_tech = "programming=2;materials=2;biotech=2;engineering=2"
|
||||||
construction_time = 200
|
construction_time = 180
|
||||||
construction_cost = list("metal"=25000,"glass"=10000)
|
construction_cost = list("metal"=25000)
|
||||||
|
|
||||||
/obj/item/mecha_parts/part/odysseus_left_arm
|
/obj/item/mecha_parts/part/odysseus_left_arm
|
||||||
name="Odysseus Left Arm"
|
name="Odysseus Left Arm"
|
||||||
desc="An Odysseus left arm. Data and power sockets are compatible with most exosuit tools."
|
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"
|
origin_tech = "programming=2;materials=2;engineering=2"
|
||||||
construction_time = 150
|
construction_time = 120
|
||||||
construction_cost = list("metal"=15000)
|
construction_cost = list("metal"=10000)
|
||||||
|
|
||||||
/obj/item/mecha_parts/part/odysseus_right_arm
|
/obj/item/mecha_parts/part/odysseus_right_arm
|
||||||
name="Odysseus Right Arm"
|
name="Odysseus Right Arm"
|
||||||
desc="An Odysseus right arm. Data and power sockets are compatible with most exosuit tools."
|
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"
|
origin_tech = "programming=2;materials=2;engineering=2"
|
||||||
construction_time = 150
|
construction_time = 120
|
||||||
construction_cost = list("metal"=15000)
|
construction_cost = list("metal"=10000)
|
||||||
|
|
||||||
/obj/item/mecha_parts/part/odysseus_left_leg
|
/obj/item/mecha_parts/part/odysseus_left_leg
|
||||||
name="Odysseus Left Leg"
|
name="Odysseus Left Leg"
|
||||||
desc="An Odysseus left leg. Contains somewhat complex servodrives and balance maintaining systems."
|
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"
|
origin_tech = "programming=2;materials=2;engineering=2"
|
||||||
construction_time = 150
|
construction_time = 130
|
||||||
construction_cost = list("metal"=20000)
|
construction_cost = list("metal"=15000)
|
||||||
|
|
||||||
/obj/item/mecha_parts/part/odysseus_right_leg
|
/obj/item/mecha_parts/part/odysseus_right_leg
|
||||||
name="Odysseus Right Leg"
|
name="Odysseus Right Leg"
|
||||||
desc="A Odysseus right leg. Contains somewhat complex servodrives and balance maintaining systems."
|
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"
|
origin_tech = "programming=2;materials=2;engineering=2"
|
||||||
construction_time = 150
|
construction_time = 130
|
||||||
construction_cost = list("metal"=20000)
|
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
|
///////// Circuitboards
|
||||||
|
|||||||
@@ -170,3 +170,24 @@
|
|||||||
/obj/effect/decal/mecha_wreckage/phazon
|
/obj/effect/decal/mecha_wreckage/phazon
|
||||||
name = "Phazon wreckage"
|
name = "Phazon wreckage"
|
||||||
icon_state = "phazon-broken"
|
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
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
/obj/mecha/medical/odysseus
|
/obj/mecha/medical/odysseus
|
||||||
desc = "Odysseus Medical Exosuit"
|
desc = "These exosuits are developed and produced by Vey-Med. (© All rights reserved)."
|
||||||
name = "Odysseus"
|
name = "Odysseus"
|
||||||
icon_state = "placeholder-1"
|
icon_state = "odysseus"
|
||||||
step_in = 2
|
step_in = 2
|
||||||
max_temperature = 1500
|
max_temperature = 1500
|
||||||
health = 120
|
health = 120
|
||||||
wreckage = null
|
wreckage = /obj/effect/decal/mecha_wreckage/odysseus
|
||||||
internal_damage_threshold = 35
|
internal_damage_threshold = 35
|
||||||
deflect_chance = 15
|
deflect_chance = 15
|
||||||
step_energy_drain = 6
|
step_energy_drain = 6
|
||||||
|
|||||||
@@ -775,6 +775,13 @@ datum
|
|||||||
req_tech = list("materials" = 5, "combat" = 5, "engineering"=3)
|
req_tech = list("materials" = 5, "combat" = 5, "engineering"=3)
|
||||||
build_path = "/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster"
|
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"
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////
|
////////////////////////////////////////
|
||||||
|
|||||||
@@ -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
|
(ie. code improvements for expandability, etc.) should not be listed here. They
|
||||||
should be listed in the changelog upon commit tho. Thanks. -->
|
should be listed in the changelog upon commit tho. Thanks. -->
|
||||||
|
|
||||||
|
<b><font color='blue'>29 December 2011</font><b>
|
||||||
|
<ul>
|
||||||
|
<li><b>ConstantA updated:</b>
|
||||||
|
<ul>
|
||||||
|
<li>Added some new Odysseus parts and tweaked old ones.</li>
|
||||||
|
<li>Added Exosuit Syringe Gun Module</li>
|
||||||
|
<li>New Odysseus sprites - courtesy of Veyveyr</li>
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<b><font color='blue'>28 December 2011</font><b>
|
<b><font color='blue'>28 December 2011</font><b>
|
||||||
<ul>
|
<ul>
|
||||||
<li><b>RavingManiac updated:</b>
|
<li><b>RavingManiac updated:</b>
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 41 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 108 KiB |
Reference in New Issue
Block a user