mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-24 05:30:05 +01:00
Merge pull request #5200 from PatchouliKnowledge/Phazons
Lots of mecha changes and additions.
This commit is contained in:
@@ -5,20 +5,9 @@
|
||||
var/list/destroyable_obj = list(/obj/mecha, /obj/structure/window, /obj/structure/grille, /turf/simulated/wall)
|
||||
internal_damage_threshold = 50
|
||||
maint_access = 0
|
||||
//add_req_access = 0
|
||||
//operation_req_access = list(access_hos)
|
||||
damage_absorption = list("brute"=0.7,"fire"=1,"bullet"=0.7,"laser"=0.85,"energy"=1,"bomb"=0.8)
|
||||
var/am = "d3c2fbcadca903a41161ccc9df9cf948"
|
||||
|
||||
/*
|
||||
/obj/mecha/combat/range_action(target as obj|mob|turf)
|
||||
if(internal_damage&MECHA_INT_CONTROL_LOST)
|
||||
target = pick(view(3,target))
|
||||
if(selected_weapon)
|
||||
selected_weapon.fire(target)
|
||||
return
|
||||
*/
|
||||
|
||||
/obj/mecha/combat/melee_action(target as obj|mob|turf)
|
||||
if(internal_damage&MECHA_INT_CONTROL_LOST)
|
||||
target = safepick(oview(1,src))
|
||||
@@ -26,21 +15,10 @@
|
||||
if(istype(target, /mob/living))
|
||||
var/mob/living/M = target
|
||||
if(src.occupant.a_intent == "harm")
|
||||
playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
|
||||
if(damtype == "brute")
|
||||
step_away(M,src,15)
|
||||
/*
|
||||
if(M.stat>1)
|
||||
M.gib()
|
||||
melee_can_hit = 0
|
||||
if(do_after(melee_cooldown))
|
||||
melee_can_hit = 1
|
||||
return
|
||||
*/
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = target
|
||||
// if (M.health <= 0) return
|
||||
|
||||
var/obj/item/organ/limb/temp = H.get_organ(pick("chest", "chest", "chest", "head"))
|
||||
if(temp)
|
||||
var/update = 0
|
||||
@@ -48,14 +26,17 @@
|
||||
if("brute")
|
||||
H.Paralyse(1)
|
||||
update |= temp.take_damage(rand(force/2, force), 0)
|
||||
playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
|
||||
if("fire")
|
||||
update |= temp.take_damage(0, rand(force/2, force))
|
||||
playsound(src, 'sound/items/Welder.ogg', 50, 1)
|
||||
if("tox")
|
||||
playsound(src, 'sound/effects/spray2.ogg', 50, 1)
|
||||
if(H.reagents)
|
||||
if(H.reagents.get_reagent_amount("carpotoxin") + force < force*2)
|
||||
H.reagents.add_reagent("carpotoxin", force)
|
||||
if(H.reagents.get_reagent_amount("cryptobiolin") + force < force*2)
|
||||
H.reagents.add_reagent("cryptobiolin", force)
|
||||
H.reagents.add_reagent("cryptobiolin", force/2)
|
||||
if(H.reagents.get_reagent_amount("toxin") + force < force*2)
|
||||
H.reagents.add_reagent("toxin", force/2.5)
|
||||
else
|
||||
return
|
||||
if(update) H.update_damage_overlays(0)
|
||||
@@ -66,14 +47,17 @@
|
||||
if("brute")
|
||||
M.Paralyse(1)
|
||||
M.take_overall_damage(rand(force/2, force))
|
||||
playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
|
||||
if("fire")
|
||||
M.take_overall_damage(0, rand(force/2, force))
|
||||
playsound(src, 'sound/items/Welder.ogg', 50, 1)
|
||||
if("tox")
|
||||
playsound(src, 'sound/effects/spray2.ogg', 50, 1)
|
||||
if(M.reagents)
|
||||
if(M.reagents.get_reagent_amount("carpotoxin") + force < force*2)
|
||||
M.reagents.add_reagent("carpotoxin", force)
|
||||
if(M.reagents.get_reagent_amount("cryptobiolin") + force < force*2)
|
||||
M.reagents.add_reagent("cryptobiolin", force)
|
||||
M.reagents.add_reagent("cryptobiolin", force/2)
|
||||
if(M.reagents.get_reagent_amount("toxin") + force < force*2)
|
||||
M.reagents.add_reagent("toxin", force/2.5)
|
||||
else
|
||||
return
|
||||
M.updatehealth()
|
||||
@@ -109,134 +93,6 @@
|
||||
break
|
||||
return
|
||||
|
||||
/*
|
||||
/obj/mecha/combat/proc/mega_shake(target)
|
||||
if(!istype(target, /obj) && !istype(target, /mob)) return
|
||||
if(istype(target, /mob))
|
||||
var/mob/M = target
|
||||
M.Dizzy(3)
|
||||
M.adjustBruteLoss(1)
|
||||
M.updatehealth()
|
||||
for (var/mob/V in viewers(src))
|
||||
V.show_message("[src.name] shakes [M] like a rag doll.")
|
||||
return
|
||||
*/
|
||||
|
||||
/*
|
||||
if(energy>0 && can_move)
|
||||
if(step(src,direction))
|
||||
can_move = 0
|
||||
spawn(step_in) can_move = 1
|
||||
if(overload)
|
||||
energy = energy-2
|
||||
health--
|
||||
else
|
||||
energy--
|
||||
return 1
|
||||
|
||||
return 0
|
||||
*/
|
||||
/*
|
||||
/obj/mecha/combat/hear_talk(mob/M as mob, text)
|
||||
..()
|
||||
if(am && M==occupant)
|
||||
if(findtext(text,""))
|
||||
sam()
|
||||
return
|
||||
|
||||
/obj/mecha/combat/proc/sam()
|
||||
if(am)
|
||||
var/window = {"<html>
|
||||
<head>
|
||||
<style>
|
||||
body {background:#000;color: #00ff00;font-family:"Courier",monospace;font-size:12px;}
|
||||
#target {word-wrap: break-word;width:100%;padding-right:2px;}
|
||||
#form {display:none;padding:0;margin:0;}
|
||||
#input {background:#000;color: #00ff00;font-family:"Courier",monospace;border:none;padding:0;margin:0;width:90%;font-size:12px;}
|
||||
</style>
|
||||
<script type="text/javascript">
|
||||
var text = "SGNL RCVD\\nTAG ANL :: STTS ACCPTD \\nINITSOC{buff:{128,0,NIL};p:'-zxf';stddev;inenc:'bin';outenc:'plain'}\\nSOD ->\\n0010101100101011001000000101010001101000011010010111001100100000011011010110000101100011011010000110100101101110011001010010000001101001011100110010000001100100011010010111001101100011011010000110000101110010011001110110010101100100001000000110100101101110011101000110111100100000011110010110111101110101011100100010000001100011011000010111001001100101001000000010101100101011000011010000101000101011001010110010000001000110011010010110011101101000011101000010000001110111011010010111010001101000001000000111010001101000011010010111001100100000011011010110000101100011011010000110100101101110011001010010110000100000011000010110111001100100001000000110011101110101011000010111001001100100001000000110100101110100001000000110011001110010011011110110110100100000011101000110100001100101001000000111001101101000011000010110110101100101001000000110111101100110001000000110010001100101011001100110010101100001011101000010000000101011001010110000110100001010001010110010101100100000010100110110010101110010011101100110010100100000011101000110100001101001011100110010000001101101011000010110001101101000011010010110111001100101001011000010000001100001011100110010000001111001011011110111010100100000011101110110111101110101011011000110010000100000011010000110000101110110011001010010000001100110011010010110011101101000011101000010000001101001011101000010000001100110011011110111001000100000011110010110111101110101001000000010101100101011\\n<- EOD\\nSOCFLUSH\\n";
|
||||
var target_id = "target";
|
||||
var form_id = "form";
|
||||
var input_id = "input";
|
||||
var delay=5;
|
||||
var currentChar=0;
|
||||
var inter;
|
||||
var cur_el;
|
||||
var maiden_el;
|
||||
|
||||
function type()
|
||||
{
|
||||
maiden_el = cur_el = document.getElementById(target_id);
|
||||
if(cur_el && typeof(cur_el)!='undefined'){
|
||||
inter = setInterval(function(){appendText(cur_el)},delay);
|
||||
}
|
||||
}
|
||||
|
||||
function appendText(el){
|
||||
if(currentChar>text.length){
|
||||
maiden_el.style.border = 'none';
|
||||
clearInterval(inter);
|
||||
var form = document.getElementById(form_id);
|
||||
var input = document.getElementById(input_id);
|
||||
if((form && typeof(form)!='undefined') && (input && typeof(input)!='undefined')){
|
||||
form.style.display = 'block';
|
||||
input.focus();
|
||||
}
|
||||
return;
|
||||
}
|
||||
var tchar = text.substr(currentChar, 1);
|
||||
if(tchar=='\\n'){
|
||||
el = cur_el = document.createElement('div');
|
||||
maiden_el.appendChild(cur_el);
|
||||
currentChar++;
|
||||
return;
|
||||
}
|
||||
if(!el.firstChild){
|
||||
var tNode=document.createTextNode(tchar);
|
||||
el.appendChild(tNode);
|
||||
}
|
||||
else {
|
||||
el.firstChild.nodeValue = el.firstChild.nodeValue+tchar
|
||||
}
|
||||
currentChar++;
|
||||
}
|
||||
|
||||
function addSubmitEvent(form, input) {
|
||||
input.onkeydown = function(e) {
|
||||
e = e || window.event;
|
||||
if (e.keyCode == 13) {
|
||||
form.submit();
|
||||
return false;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
window.onload = function(){
|
||||
var form = document.getElementById(form_id);
|
||||
var input = document.getElementById(input_id);
|
||||
if((!form || typeof(form)=='undefined') || (!input || typeof(input)=='undefined')){
|
||||
return false;
|
||||
}
|
||||
addSubmitEvent(form,input);
|
||||
type();
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="wrapper"><div id="target"></div>
|
||||
<form id="form" name="form" action="byond://" method="get">
|
||||
<label for="input">></label><input name="saminput" type="text" id="input" value="" />
|
||||
<input type=\"hidden\" name=\"src\" value=\"\ref[src]\">
|
||||
</form>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
"}
|
||||
occupant << browse(window, "window=sam;size=800x600;")
|
||||
onclose(occupant, "sam", src)
|
||||
return
|
||||
*/
|
||||
/obj/mecha/combat/moved_inside(var/mob/living/carbon/human/H as mob)
|
||||
if(..())
|
||||
if(H.client)
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/obj/mecha/combat/phazon
|
||||
desc = "An exosuit which can only be described as 'WTF?'."
|
||||
desc = "This is a Phazon exosuit. The pinnacle of scientific research and pride of Nanotrasen, it uses cutting edge bluespace technology and expensive materials."
|
||||
name = "\improper Phazon"
|
||||
icon_state = "phazon"
|
||||
step_in = 1
|
||||
dir_in = 1 //Facing North.
|
||||
step_in = 2
|
||||
dir_in = 2 //Facing South.
|
||||
step_energy_drain = 3
|
||||
health = 200
|
||||
deflect_chance = 30
|
||||
@@ -12,21 +12,11 @@
|
||||
infra_luminosity = 3
|
||||
wreckage = /obj/structure/mecha_wreckage/phazon
|
||||
add_req_access = 1
|
||||
//operation_req_access = list()
|
||||
internal_damage_threshold = 25
|
||||
force = 15
|
||||
var/phasing = 0
|
||||
var/phasing_energy_drain = 200
|
||||
max_equip = 4
|
||||
|
||||
|
||||
/obj/mecha/combat/phazon/New()
|
||||
..()
|
||||
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tool/rcd
|
||||
ME.attach(src)
|
||||
ME = new /obj/item/mecha_parts/mecha_equipment/gravcatapult
|
||||
ME.attach(src)
|
||||
return
|
||||
max_equip = 3
|
||||
|
||||
/obj/mecha/combat/phazon/Bump(var/atom/obstacle)
|
||||
if(phasing && get_charge()>=phasing_energy_drain)
|
||||
@@ -51,20 +41,23 @@
|
||||
|
||||
/obj/mecha/combat/phazon/verb/switch_damtype()
|
||||
set category = "Exosuit Interface"
|
||||
set name = "Change melee damage type"
|
||||
set name = "Reconfigure arm microtool arrays"
|
||||
set src = usr.loc
|
||||
set popup_menu = 0
|
||||
if(usr!=src.occupant)
|
||||
return
|
||||
var/new_damtype = alert(src.occupant,"Melee Damage Type",null,"Brute","Fire","Toxic")
|
||||
var/new_damtype = alert(src.occupant,"Arm tool selection",null,"Fists","Torch","Toxic injector")
|
||||
switch(new_damtype)
|
||||
if("Brute")
|
||||
if("Fists")
|
||||
damtype = "brute"
|
||||
if("Fire")
|
||||
src.occupant_message("Your exosuit's hands form into fists.")
|
||||
if("Torch")
|
||||
damtype = "fire"
|
||||
if("Toxic")
|
||||
src.occupant_message("A torch tip extends from your exosuit's hand, glowing red.")
|
||||
if("Toxic injector")
|
||||
damtype = "tox"
|
||||
src.occupant_message("Melee damage type switched to [new_damtype ]")
|
||||
src.occupant_message("A bone-chillingly thick plasteel needle protracts from the exosuit's palm.")
|
||||
playsound(src, 'sound/mecha/mechmove01.ogg', 50, 1)
|
||||
return
|
||||
|
||||
/obj/mecha/combat/phazon/get_commands()
|
||||
@@ -72,7 +65,7 @@
|
||||
<div class='header'>Special</div>
|
||||
<div class='links'>
|
||||
<a href='?src=\ref[src];phasing=1'><span id="phasing_command">[phasing?"Dis":"En"]able phasing</span></a><br>
|
||||
<a href='?src=\ref[src];switch_damtype=1'>Change melee damage type</a><br>
|
||||
<a href='?src=\ref[src];switch_damtype=1'>Reconfigure arm microtool arrays</a><br>
|
||||
</div>
|
||||
</div>
|
||||
"}
|
||||
|
||||
@@ -233,164 +233,12 @@
|
||||
M.AdjustStunned(-4)
|
||||
M.AdjustWeakened(-4)
|
||||
M.AdjustStunned(-4)
|
||||
M.Paralyse(2)
|
||||
M.Weaken(2)
|
||||
M.Stun(2)
|
||||
if(M.reagents.get_reagent_amount("inaprovaline") < 5)
|
||||
M.reagents.add_reagent("inaprovaline", 5)
|
||||
S.chassis.use_power(S.energy_drain)
|
||||
S.update_equip_info()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer
|
||||
name = "cable layer"
|
||||
desc = "Equipment for engineering exosuits. Lays cable along the exosuit's path."
|
||||
icon_state = "mecha_wire"
|
||||
var/datum/event/event
|
||||
var/turf/old_turf
|
||||
var/obj/structure/cable/last_piece
|
||||
var/obj/item/stack/cable_coil/cable
|
||||
var/max_cable = 1000
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/New()
|
||||
cable = new(src)
|
||||
cable.amount = 0
|
||||
..()
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/can_attach(obj/mecha/working/M)
|
||||
if(..())
|
||||
if(istype(M))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/attach()
|
||||
..()
|
||||
event = chassis.events.addEvent("onMove",src,"layCable")
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/detach()
|
||||
chassis.events.clearEvent("onMove",event)
|
||||
return ..()
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/destroy()
|
||||
chassis.events.clearEvent("onMove",event)
|
||||
return ..()
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/action(var/obj/item/stack/cable_coil/target)
|
||||
if(!action_checks(target))
|
||||
return
|
||||
var/result = load_cable(target)
|
||||
var/message
|
||||
if(isnull(result))
|
||||
message = "<span class='danger'>Unable to load [target] - no cable found.</span>"
|
||||
else if(!result)
|
||||
message = "Reel is full."
|
||||
else
|
||||
message = "[result] meters of cable successfully loaded."
|
||||
send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info())
|
||||
occupant_message(message)
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/Topic(href,href_list)
|
||||
..()
|
||||
if(href_list["toggle"])
|
||||
set_ready_state(!equip_ready)
|
||||
occupant_message("[src] [equip_ready?"dea":"a"]ctivated.")
|
||||
log_message("[equip_ready?"Dea":"A"]ctivated.")
|
||||
return
|
||||
if(href_list["cut"])
|
||||
if(cable && cable.amount)
|
||||
var/m = round(input(chassis.occupant,"Please specify the length of cable to cut","Cut cable",min(cable.amount,30)) as num, 1)
|
||||
m = min(m, cable.amount)
|
||||
if(m)
|
||||
use_cable(m)
|
||||
var/obj/item/stack/cable_coil/CC = new (get_turf(chassis))
|
||||
CC.amount = m
|
||||
else
|
||||
occupant_message("There's no more cable on the reel.")
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/get_equip_info()
|
||||
var/output = ..()
|
||||
if(output)
|
||||
return "[output] \[Cable: [cable ? cable.amount : 0] m\][(cable && cable.amount) ? "- <a href='?src=\ref[src];toggle=1'>[!equip_ready?"Dea":"A"]ctivate</a>|<a href='?src=\ref[src];cut=1'>Cut</a>" : null]"
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/load_cable(var/obj/item/stack/cable_coil/CC)
|
||||
if(istype(CC) && CC.amount)
|
||||
var/cur_amount = cable? cable.amount : 0
|
||||
var/to_load = max(max_cable - cur_amount,0)
|
||||
if(to_load)
|
||||
to_load = min(CC.amount, to_load)
|
||||
if(!cable)
|
||||
cable = new(src)
|
||||
cable.amount = 0
|
||||
cable.amount += to_load
|
||||
CC.use(to_load)
|
||||
return to_load
|
||||
else
|
||||
return 0
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/use_cable(amount)
|
||||
if(!cable || cable.amount<1)
|
||||
set_ready_state(1)
|
||||
occupant_message("Cable depleted, [src] deactivated.")
|
||||
log_message("Cable depleted, [src] deactivated.")
|
||||
return
|
||||
if(cable.amount < amount)
|
||||
occupant_message("No enough cable to finish the task.")
|
||||
return
|
||||
cable.use(amount)
|
||||
update_equip_info()
|
||||
return 1
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/reset()
|
||||
last_piece = null
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/dismantleFloor(var/turf/new_turf)
|
||||
if(istype(new_turf, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/T = new_turf
|
||||
if(!T.is_plating())
|
||||
if(!T.broken && !T.burnt)
|
||||
new T.floor_tile.type(T)
|
||||
T.make_plating()
|
||||
return !new_turf.intact
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/layCable(var/turf/new_turf)
|
||||
if(equip_ready || !istype(new_turf) || !dismantleFloor(new_turf))
|
||||
return reset()
|
||||
var/fdirn = turn(chassis.dir,180)
|
||||
for(var/obj/structure/cable/LC in new_turf) // check to make sure there's not a cable there already
|
||||
if(LC.d1 == fdirn || LC.d2 == fdirn)
|
||||
return reset()
|
||||
if(!use_cable(1))
|
||||
return reset()
|
||||
var/obj/structure/cable/NC = new(new_turf)
|
||||
NC.cableColor("red")
|
||||
NC.d1 = 0
|
||||
NC.d2 = fdirn
|
||||
NC.updateicon()
|
||||
|
||||
var/datum/powernet/PN
|
||||
if(last_piece && last_piece.d2 != chassis.dir)
|
||||
last_piece.d1 = min(last_piece.d2, chassis.dir)
|
||||
last_piece.d2 = max(last_piece.d2, chassis.dir)
|
||||
last_piece.updateicon()
|
||||
PN = last_piece.powernet
|
||||
|
||||
if(!PN)
|
||||
PN = new()
|
||||
powernets += PN
|
||||
NC.powernet = PN
|
||||
PN.cables += NC
|
||||
NC.mergeConnectedNetworks(NC.d2)
|
||||
|
||||
//NC.mergeConnectedNetworksOnTurf()
|
||||
last_piece = NC
|
||||
return 1
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun
|
||||
name = "exosuit syringe gun"
|
||||
desc = "Equipment for medical exosuits. A chem synthesizer with syringe gun. Reagents inside are held in stasis, so no reactions will occur."
|
||||
|
||||
@@ -214,8 +214,8 @@
|
||||
range = MELEE|RANGED
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/extinguisher/New()
|
||||
create_reagents(200)
|
||||
reagents.add_reagent("water", 200)
|
||||
create_reagents(1000)
|
||||
reagents.add_reagent("water", 1000)
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -226,7 +226,7 @@
|
||||
if(do_after_cooldown(target))
|
||||
if(istype(target, /obj/structure/reagent_dispensers/watertank) && get_dist(chassis,target) <= 1)
|
||||
var/obj/o = target
|
||||
o.reagents.trans_to(src, 200)
|
||||
o.reagents.trans_to(src, 1000)
|
||||
occupant_message("<span class='notice'>Extinguisher refilled.</span>")
|
||||
playsound(chassis, 'sound/effects/refill.ogg', 50, 1, -6)
|
||||
else
|
||||
@@ -379,6 +379,153 @@
|
||||
return "[..()] \[<a href='?src=\ref[src];mode=0'>D</a>|<a href='?src=\ref[src];mode=1'>C</a>|<a href='?src=\ref[src];mode=2'>A</a>\]"
|
||||
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer
|
||||
name = "cable layer"
|
||||
desc = "Equipment for engineering exosuits. Lays cable along the exosuit's path."
|
||||
icon_state = "mecha_wire"
|
||||
var/datum/event/event
|
||||
var/turf/old_turf
|
||||
var/obj/structure/cable/last_piece
|
||||
var/obj/item/stack/cable_coil/cable
|
||||
var/max_cable = 1000
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/New()
|
||||
cable = new(src)
|
||||
cable.amount = 0
|
||||
..()
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/can_attach(obj/mecha/working/M)
|
||||
if(..())
|
||||
if(istype(M))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/attach()
|
||||
..()
|
||||
event = chassis.events.addEvent("onMove",src,"layCable")
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/detach()
|
||||
chassis.events.clearEvent("onMove",event)
|
||||
return ..()
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/destroy()
|
||||
chassis.events.clearEvent("onMove",event)
|
||||
return ..()
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/action(var/obj/item/stack/cable_coil/target)
|
||||
if(!action_checks(target))
|
||||
return
|
||||
var/result = load_cable(target)
|
||||
var/message
|
||||
if(isnull(result))
|
||||
message = "<span class='danger'>Unable to load [target] - no cable found.</span>"
|
||||
else if(!result)
|
||||
message = "Reel is full."
|
||||
else
|
||||
message = "[result] meters of cable successfully loaded."
|
||||
send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info())
|
||||
occupant_message(message)
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/Topic(href,href_list)
|
||||
..()
|
||||
if(href_list["toggle"])
|
||||
set_ready_state(!equip_ready)
|
||||
occupant_message("[src] [equip_ready?"dea":"a"]ctivated.")
|
||||
log_message("[equip_ready?"Dea":"A"]ctivated.")
|
||||
return
|
||||
if(href_list["cut"])
|
||||
if(cable && cable.amount)
|
||||
var/m = round(input(chassis.occupant,"Please specify the length of cable to cut","Cut cable",min(cable.amount,30)) as num, 1)
|
||||
m = min(m, cable.amount)
|
||||
if(m)
|
||||
use_cable(m)
|
||||
var/obj/item/stack/cable_coil/CC = new (get_turf(chassis))
|
||||
CC.amount = m
|
||||
else
|
||||
occupant_message("There's no more cable on the reel.")
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/get_equip_info()
|
||||
var/output = ..()
|
||||
if(output)
|
||||
return "[output] \[Cable: [cable ? cable.amount : 0] m\][(cable && cable.amount) ? "- <a href='?src=\ref[src];toggle=1'>[!equip_ready?"Dea":"A"]ctivate</a>|<a href='?src=\ref[src];cut=1'>Cut</a>" : null]"
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/load_cable(var/obj/item/stack/cable_coil/CC)
|
||||
if(istype(CC) && CC.amount)
|
||||
var/cur_amount = cable? cable.amount : 0
|
||||
var/to_load = max(max_cable - cur_amount,0)
|
||||
if(to_load)
|
||||
to_load = min(CC.amount, to_load)
|
||||
if(!cable)
|
||||
cable = new(src)
|
||||
cable.amount = 0
|
||||
cable.amount += to_load
|
||||
CC.use(to_load)
|
||||
return to_load
|
||||
else
|
||||
return 0
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/use_cable(amount)
|
||||
if(!cable || cable.amount<1)
|
||||
set_ready_state(1)
|
||||
occupant_message("Cable depleted, [src] deactivated.")
|
||||
log_message("Cable depleted, [src] deactivated.")
|
||||
return
|
||||
if(cable.amount < amount)
|
||||
occupant_message("No enough cable to finish the task.")
|
||||
return
|
||||
cable.use(amount)
|
||||
update_equip_info()
|
||||
return 1
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/reset()
|
||||
last_piece = null
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/dismantleFloor(var/turf/new_turf)
|
||||
if(istype(new_turf, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/T = new_turf
|
||||
if(!T.is_plating())
|
||||
if(!T.broken && !T.burnt)
|
||||
new T.floor_tile.type(T)
|
||||
T.make_plating()
|
||||
return !new_turf.intact
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/layCable(var/turf/new_turf)
|
||||
if(equip_ready || !istype(new_turf) || !dismantleFloor(new_turf))
|
||||
return reset()
|
||||
var/fdirn = turn(chassis.dir,180)
|
||||
for(var/obj/structure/cable/LC in new_turf) // check to make sure there's not a cable there already
|
||||
if(LC.d1 == fdirn || LC.d2 == fdirn)
|
||||
return reset()
|
||||
if(!use_cable(1))
|
||||
return reset()
|
||||
var/obj/structure/cable/NC = new(new_turf)
|
||||
NC.cableColor("red")
|
||||
NC.d1 = 0
|
||||
NC.d2 = fdirn
|
||||
NC.updateicon()
|
||||
|
||||
var/datum/powernet/PN
|
||||
if(last_piece && last_piece.d2 != chassis.dir)
|
||||
last_piece.d1 = min(last_piece.d2, chassis.dir)
|
||||
last_piece.d2 = max(last_piece.d2, chassis.dir)
|
||||
last_piece.updateicon()
|
||||
PN = last_piece.powernet
|
||||
|
||||
if(!PN)
|
||||
PN = new()
|
||||
powernets += PN
|
||||
NC.powernet = PN
|
||||
PN.cables += NC
|
||||
NC.mergeConnectedNetworks(NC.d2)
|
||||
|
||||
//NC.mergeConnectedNetworksOnTurf()
|
||||
last_piece = NC
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/teleporter
|
||||
@@ -869,8 +1016,8 @@
|
||||
var/coeff = 100
|
||||
var/obj/item/stack/sheet/fuel
|
||||
var/max_fuel = 150000
|
||||
var/fuel_per_cycle_idle = 100
|
||||
var/fuel_per_cycle_active = 500
|
||||
var/fuel_per_cycle_idle = 25
|
||||
var/fuel_per_cycle_active = 200
|
||||
var/power_per_cycle = 20
|
||||
reliability = 1000
|
||||
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
),
|
||||
"Ripley"=list(
|
||||
/obj/item/mecha_parts/chassis/ripley,
|
||||
/obj/item/mecha_parts/chassis/firefighter,
|
||||
/obj/item/mecha_parts/part/ripley_torso,
|
||||
/obj/item/mecha_parts/part/ripley_left_arm,
|
||||
/obj/item/mecha_parts/part/ripley_right_arm,
|
||||
@@ -93,7 +94,17 @@
|
||||
/obj/item/mecha_parts/part/honker_right_arm,
|
||||
/obj/item/mecha_parts/part/honker_left_leg,
|
||||
/obj/item/mecha_parts/part/honker_right_leg
|
||||
),
|
||||
),
|
||||
"Phazon"=list(
|
||||
/obj/item/mecha_parts/chassis/phazon,
|
||||
/obj/item/mecha_parts/part/phazon_torso,
|
||||
/obj/item/mecha_parts/part/phazon_head,
|
||||
/obj/item/mecha_parts/part/phazon_left_arm,
|
||||
/obj/item/mecha_parts/part/phazon_right_arm,
|
||||
/obj/item/mecha_parts/part/phazon_left_leg,
|
||||
/obj/item/mecha_parts/part/phazon_right_leg,
|
||||
/obj/item/mecha_parts/part/phazon_armor
|
||||
),
|
||||
"Exosuit Equipment"=list(
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp,
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/drill,
|
||||
@@ -101,8 +112,7 @@
|
||||
/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/chassis/firefighter,
|
||||
///obj/item/mecha_parts/mecha_equipment/repair_droid,
|
||||
/obj/item/mecha_parts/mecha_equipment/repair_droid,
|
||||
/obj/item/mecha_parts/mecha_equipment/generator,
|
||||
///obj/item/mecha_parts/mecha_equipment/jetpack, //TODO MECHA JETPACK SPRITE MISSING
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser,
|
||||
|
||||
@@ -481,6 +481,7 @@
|
||||
|
||||
/obj/mecha/attack_alien(mob/user as mob)
|
||||
src.log_message("Attack by alien. Attacker - [user].",1)
|
||||
user.changeNext_move(CLICK_CD_MELEE) //Now stompy alien killer mechs are actually scary to aliens!
|
||||
if(!prob(src.deflect_chance))
|
||||
src.take_damage(15)
|
||||
src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||
@@ -660,7 +661,7 @@
|
||||
////// AttackBy //////
|
||||
//////////////////////
|
||||
|
||||
/obj/mecha/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
/obj/mecha/attackby(obj/item/W as obj, mob/user as mob)
|
||||
|
||||
if(istype(W, /obj/item/device/mmi))
|
||||
if(mmi_move_inside(W,user))
|
||||
@@ -771,7 +772,7 @@
|
||||
user.visible_message("[user] attaches [W] to [src].", "You attach [W] to [src]")
|
||||
return
|
||||
|
||||
else
|
||||
else if(!(W.flags&NOBLUDGEON))
|
||||
call((proc_res["dynattackby"]||src), "dynattackby")(W,user)
|
||||
/*
|
||||
src.log_message("Attacked by [W]. Attacker - [user]")
|
||||
@@ -791,8 +792,6 @@
|
||||
*/
|
||||
return
|
||||
|
||||
|
||||
|
||||
/*
|
||||
/obj/mecha/attack_ai(var/mob/living/silicon/ai/user as mob)
|
||||
if(!istype(user, /mob/living/silicon/ai))
|
||||
@@ -804,6 +803,8 @@
|
||||
return
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////
|
||||
//////// Atmospheric stuff ////////
|
||||
/////////////////////////////////////
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -296,7 +296,7 @@
|
||||
|
||||
/obj/item/mecha_parts/chassis/phazon
|
||||
name = "\improper Phazon chassis"
|
||||
origin_tech = "materials=7"
|
||||
origin_tech = "materials=6"
|
||||
|
||||
/obj/item/mecha_parts/chassis/phazon/New()
|
||||
..()
|
||||
@@ -304,20 +304,23 @@
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_torso
|
||||
name="\improper Phazon torso"
|
||||
desc="A Phazon torso part. The socket for the bluespace core that powers the exosuit's unique phase drives is located in the middle."
|
||||
icon_state = "phazon_harness"
|
||||
construction_time = 300
|
||||
construction_cost = list("metal"=35000,"glass"=10000,"plasma"=20000)
|
||||
origin_tech = "programming=5;materials=7;bluespace=6;powerstorage=6"
|
||||
origin_tech = "programming=5;materials=6;bluespace=5;powerstorage=5"
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_head
|
||||
name="\improper Phazon head"
|
||||
desc="A Phazon head. Its sensors are carefully calibrated to provide vision and data even when the exosuit is phasing."
|
||||
icon_state = "phazon_head"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=15000,"glass"=5000,"plasma"=10000)
|
||||
origin_tech = "programming=4;materials=5;magnets=6"
|
||||
origin_tech = "programming=4;materials=5;magnets=5"
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_left_arm
|
||||
name="\improper Phazon left arm"
|
||||
desc="A Phazon left arm. Several microtool arrays are located under the armor plating, which can be adjusted to the situation at hand."
|
||||
icon_state = "phazon_l_arm"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=20000,"plasma"=10000)
|
||||
@@ -325,6 +328,7 @@
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_right_arm
|
||||
name="\improper Phazon right arm"
|
||||
desc="A Phazon right arm. Several microtool arrays are located under the armor plating, which can be adjusted to the situation at hand."
|
||||
icon_state = "phazon_r_arm"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=20000,"plasma"=10000)
|
||||
@@ -332,6 +336,7 @@
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_left_leg
|
||||
name="\improper Phazon left leg"
|
||||
desc="A Phazon left leg. It contains the unique phase drives that allow the exosuit to phase through solid matter when engaged."
|
||||
icon_state = "phazon_l_leg"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=20000,"plasma"=10000)
|
||||
@@ -339,11 +344,19 @@
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_right_leg
|
||||
name="\improper Phazon right leg"
|
||||
desc="A Phazon right leg. It contains the unique phase drives that allow the exosuit to phase through solid matter when engaged."
|
||||
icon_state = "phazon_r_leg"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=20000,"plasma"=10000)
|
||||
origin_tech = "materials=5;bluespace=3;magnets=3"
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_armor
|
||||
name="Phazon armor"
|
||||
desc="Phazon armor plates. They are layered with plasma to protect the pilot from the stress of phasing and have unusual properties."
|
||||
icon_state = "phazon_armor"
|
||||
construction_time = 300
|
||||
construction_cost = list("metal"=45000,"plasma"=30000)
|
||||
origin_tech = "materials=6;bluespace=5;magnets=5"
|
||||
///////// Odysseus
|
||||
|
||||
|
||||
@@ -494,4 +507,16 @@
|
||||
name = "circuit board (Odysseus Central Control module)"
|
||||
icon_state = "mainboard"
|
||||
|
||||
/obj/item/weapon/circuitboard/mecha/phazon
|
||||
origin_tech = "programming=5"
|
||||
|
||||
/obj/item/weapon/circuitboard/mecha/phazon/peripherals
|
||||
name = "circuit board (Phazon Peripherals Control module)"
|
||||
icon_state = "mcontroller"
|
||||
|
||||
/obj/item/weapon/circuitboard/mecha/phazon/targeting
|
||||
name = "circuit board (Phazon Weapon Control and Targeting module)"
|
||||
icon_state = "mcontroller"
|
||||
|
||||
/obj/item/weapon/circuitboard/mecha/phazon/main
|
||||
name = "circuit board (Phazon Central Control module)"
|
||||
@@ -1,10 +1,13 @@
|
||||
/obj/mecha/working/ripley
|
||||
desc = "Autonomous Power Loader Unit. The workhorse of the exosuit world."
|
||||
desc = "Autonomous Power Loader Unit. This newer model is refitted with powerful armour against the dangers of the EVA mining process."
|
||||
name = "\improper APLU \"Ripley\""
|
||||
icon_state = "ripley"
|
||||
step_in = 6
|
||||
step_in = 5
|
||||
max_temperature = 20000
|
||||
health = 200
|
||||
lights_power = 7
|
||||
deflect_chance = 15
|
||||
damage_absorption = list("brute"=0.6,"bomb"=0.2)
|
||||
wreckage = /obj/structure/mecha_wreckage/ripley
|
||||
var/list/cargo = new
|
||||
var/cargo_capacity = 15
|
||||
@@ -16,19 +19,49 @@
|
||||
*/
|
||||
|
||||
/obj/mecha/working/ripley/Destroy()
|
||||
while(src.damage_absorption.["brute"] < 0.6)
|
||||
new /obj/item/asteroid/goliath_hide(src.loc)
|
||||
src.damage_absorption.["brute"] = src.damage_absorption.["brute"] + 0.1 //If a goliath-plated ripley gets killed, all the plates drop
|
||||
for(var/atom/movable/A in src.cargo)
|
||||
A.loc = loc
|
||||
step_rand(A)
|
||||
cargo.Cut()
|
||||
..()
|
||||
|
||||
/obj/mecha/working/ripley/go_out()
|
||||
..()
|
||||
if (src.damage_absorption.["brute"] < 0.6 && src.damage_absorption.["brute"] > 0.3)
|
||||
src.overlays = null
|
||||
src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-open")
|
||||
else if (src.damage_absorption.["brute"] == 0.3)
|
||||
src.overlays = null
|
||||
src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full-open")
|
||||
|
||||
/obj/mecha/working/ripley/moved_inside(var/mob/living/carbon/human/H as mob)
|
||||
..()
|
||||
if (src.damage_absorption.["brute"] < 0.6 && src.damage_absorption.["brute"] > 0.3)
|
||||
src.overlays = null
|
||||
src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g")
|
||||
else if (src.damage_absorption.["brute"] == 0.3)
|
||||
src.overlays = null
|
||||
src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full")
|
||||
|
||||
/obj/mecha/working/ripley/mmi_moved_inside(var/obj/item/device/mmi/mmi_as_oc as obj,mob/user as mob)
|
||||
..()
|
||||
if (src.damage_absorption.["brute"] < 0.6 && src.damage_absorption.["brute"] > 0.3)
|
||||
src.overlays = null
|
||||
src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g")
|
||||
else if (src.damage_absorption.["brute"] == 0.3)
|
||||
src.overlays = null
|
||||
src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full")
|
||||
|
||||
/obj/mecha/working/ripley/firefighter
|
||||
desc = "Standart APLU chassis was refitted with additional thermal protection and cistern."
|
||||
name = "\improper APLU \"Firefighter\""
|
||||
icon_state = "firefighter"
|
||||
max_temperature = 65000
|
||||
health = 250
|
||||
lights_power = 8
|
||||
lights_power = 7
|
||||
damage_absorption = list("fire"=0.5,"bullet"=0.8,"bomb"=0.5)
|
||||
wreckage = /obj/structure/mecha_wreckage/ripley/firefighter
|
||||
|
||||
@@ -38,7 +71,7 @@
|
||||
icon_state = "deathripley"
|
||||
step_in = 3
|
||||
opacity=0
|
||||
lights_power = 60
|
||||
lights_power = 7
|
||||
wreckage = /obj/structure/mecha_wreckage/ripley/deathripley
|
||||
step_energy_drain = 0
|
||||
|
||||
|
||||
@@ -416,6 +416,7 @@
|
||||
desc = "Pieces of a goliath's rocky hide, these might be able to make your suit a bit more durable to attack from the local fauna."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "goliath_hide"
|
||||
flags = NOBLUDGEON
|
||||
w_class = 3
|
||||
layer = 4
|
||||
|
||||
@@ -423,11 +424,32 @@
|
||||
if(proximity_flag)
|
||||
if(istype(target, /obj/item/clothing/suit/space/hardsuit/mining) || istype(target, /obj/item/clothing/head/helmet/space/hardsuit/mining))
|
||||
var/obj/item/clothing/C = target
|
||||
var/current_armor = C.armor
|
||||
var/list/current_armor = C.armor
|
||||
if(current_armor.["melee"] < 80)
|
||||
current_armor.["melee"] = min(current_armor.["melee"] + 10, 80)
|
||||
user << "<span class='info'>You strengthen [target], improving its resistance against melee attacks.</span>"
|
||||
qdel(src)
|
||||
else
|
||||
user << "<span class='info'>You can't improve [C] any further.</span>"
|
||||
return
|
||||
return
|
||||
if(istype(target, /obj/mecha/working/ripley))
|
||||
var/obj/mecha/D = target
|
||||
var/list/damage_absorption = D.damage_absorption
|
||||
if(damage_absorption.["brute"] > 0.3)
|
||||
damage_absorption.["brute"] = max(damage_absorption.["brute"] - 0.1, 0.3)
|
||||
user << "<span class='info'>You strengthen [target], improving its resistance against melee attacks.</span>"
|
||||
qdel(src)
|
||||
if(D.icon_state == "ripley-open")
|
||||
D.overlays += image("icon"="mecha.dmi", "icon_state"="ripley-g-open")
|
||||
D.desc = "Autonomous Power Loader Unit. Its armour is enhanced with some goliath hide plates."
|
||||
else
|
||||
user << "<span class='info'>You can't add armour onto the mech while someone is inside!</span>"
|
||||
if(damage_absorption.["brute"] == 0.3)
|
||||
if(D.icon_state == "ripley-open")
|
||||
D.overlays += image("icon"="mecha.dmi", "icon_state"="ripley-g-full-open")
|
||||
D.desc = "Autonomous Power Loader Unit. It's wearing a fearsome carapace entirely composed of goliath hide plates - the pilot must be an experienced monster hunter."
|
||||
else
|
||||
user << "<span class='info'>You can't add armour onto the mech while someone is inside!</span>"
|
||||
else
|
||||
user << "<span class='info'>You can't improve [D] any further.</span>"
|
||||
return
|
||||
@@ -119,6 +119,33 @@ datum/design/honker_targ
|
||||
materials = list("$glass" = 1000, "sacid" = 20)
|
||||
build_path = /obj/item/weapon/circuitboard/mecha/honker/targeting
|
||||
|
||||
datum/design/phazon_main
|
||||
name = "Exosuit Design (\"Phazon\" Central Control module)"
|
||||
desc = "Allows for the construction of a \"Phazon\" Central Control module."
|
||||
id = "phazon_main"
|
||||
req_tech = list("programming" = 5, "materials" = 7, "powerstorage" = 6)
|
||||
build_type = IMPRINTER
|
||||
materials = list("$glass" = 1000, "sacid" = 20)
|
||||
build_path = /obj/item/weapon/circuitboard/mecha/phazon/main
|
||||
|
||||
datum/design/phazon_peri
|
||||
name = "Exosuit Design (\"Phazon\" Peripherals Control module)"
|
||||
desc = "Allows for the construction of a \"Phazon\" Peripheral Control module."
|
||||
id = "phazon_peri"
|
||||
req_tech = list("programming" = 5, "bluespace" = 6)
|
||||
build_type = IMPRINTER
|
||||
materials = list("$glass" = 1000, "sacid" = 20)
|
||||
build_path = /obj/item/weapon/circuitboard/mecha/phazon/peripherals
|
||||
|
||||
datum/design/phazon_targ
|
||||
name = "Exosuit Design (\"Phazon\" Weapons & Targeting Control module)"
|
||||
desc = "Allows for the construction of a \"Phazon\" Weapons & Targeting Control module."
|
||||
id = "phazon_targ"
|
||||
req_tech = list("programming" = 5, "magnets" = 6)
|
||||
build_type = IMPRINTER
|
||||
materials = list("$glass" = 1000, "sacid" = 20)
|
||||
build_path = /obj/item/weapon/circuitboard/mecha/phazon/targeting
|
||||
|
||||
////////////////////////////////////////
|
||||
/////////// Mecha Equpment /////////////
|
||||
////////////////////////////////////////
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
author: Patchouli Knowledge
|
||||
delete-after: true
|
||||
changes:
|
||||
- rscadd: "In light of the recent achievements of the Robotics department, new and upgraded exosuit schematics were delivered to SS13 exosuit fabricators as a reward from CentComm.
|
||||
- rscadd: "The countless hours of research, experimentation, and reverse-engineering of wrecks from the mining asteroid have paid off - the Research team has rediscovered the process of building Phazon exosuits. The parts and circuits have been made available in the exofabs and circuit printers."
|
||||
- rscadd: "The APLU Ripley exosuit has been refitted with asteroid mining purposes in mind. Its armour plating will provide extra protection against the brute attacks of asteroid alien lifeforms, and protect from gibtonite explosions. The leg servos were upgraded to provide faster movement."
|
||||
- rscadd: "There are rumours of some creative shaft miners discovering a way of augmenting APLU Ripley armour with trophy hides from goliath-type asteroid lifeforms..."
|
||||
- tweak: "Durand construction routines now require a phasic scanner module and a super capacitor to match Nanotrasen industry standards."
|
||||
- tweak: "The exosuit fire extinguisher now boasts a larger watertank, and carries a whole 1000u of water from the old 200u tank."
|
||||
- tweak: "The exosuit plasma converter's efficiency has been vastly improved upon, and its fuel consumption has been cut to nearly half of old values."
|
||||
- bugfix: "The exosuit sleeper interiors have been refitted to allow the occupants more freedom of movement, and the occupants may now eject at will.
|
||||
- bugfix: "The armour plating on all exosuits was fitted with reactive deflection systems specifically designed to stop the rapid slashes from xenomorph threats."
|
||||
- bugfix: "The Firefighter Ripley chassis were moved from the Exosuit Equipment section to the APLU Ripley section of exofab menus."
|
||||
- spellcheck: "Fixed some minor errors in the exosuit construction message syntax."
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 31 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 17 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 135 KiB After Width: | Height: | Size: 139 KiB |
Reference in New Issue
Block a user