mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-25 04:57:47 +01:00
Merge branch 'dev' of https://github.com/Baystation12/Baystation12 into newmalf-merge
This commit is contained in:
+6
-6
@@ -210,7 +210,6 @@
|
||||
#include "code\game\response_team.dm"
|
||||
#include "code\game\shuttle_engines.dm"
|
||||
#include "code\game\skincmd.dm"
|
||||
#include "code\game\smoothwall.dm"
|
||||
#include "code\game\sound.dm"
|
||||
#include "code\game\supplyshuttle.dm"
|
||||
#include "code\game\antagonist\antagonist.dm"
|
||||
@@ -375,6 +374,7 @@
|
||||
#include "code\game\machinery\turret_control.dm"
|
||||
#include "code\game\machinery\turrets.dm"
|
||||
#include "code\game\machinery\vending.dm"
|
||||
#include "code\game\machinery\wall_frames.dm"
|
||||
#include "code\game\machinery\washing_machine.dm"
|
||||
#include "code\game\machinery\wishgranter.dm"
|
||||
#include "code\game\machinery\atmoalter\area_atmos_computer.dm"
|
||||
@@ -708,7 +708,6 @@
|
||||
#include "code\game\objects\structures\door_assembly.dm"
|
||||
#include "code\game\objects\structures\electricchair.dm"
|
||||
#include "code\game\objects\structures\extinguisher.dm"
|
||||
#include "code\game\objects\structures\false_walls.dm"
|
||||
#include "code\game\objects\structures\flora.dm"
|
||||
#include "code\game\objects\structures\girders.dm"
|
||||
#include "code\game\objects\structures\grille.dm"
|
||||
@@ -772,10 +771,10 @@
|
||||
#include "code\game\turfs\unsimulated.dm"
|
||||
#include "code\game\turfs\simulated\floor.dm"
|
||||
#include "code\game\turfs\simulated\floor_types.dm"
|
||||
#include "code\game\turfs\simulated\wall_attacks.dm"
|
||||
#include "code\game\turfs\simulated\wall_icon.dm"
|
||||
#include "code\game\turfs\simulated\wall_types.dm"
|
||||
#include "code\game\turfs\simulated\walls.dm"
|
||||
#include "code\game\turfs\simulated\walls_mineral.dm"
|
||||
#include "code\game\turfs\simulated\walls_misc.dm"
|
||||
#include "code\game\turfs\simulated\walls_reinforced.dm"
|
||||
#include "code\game\turfs\space\space.dm"
|
||||
#include "code\game\turfs\space\transit.dm"
|
||||
#include "code\game\turfs\unsimulated\beach.dm"
|
||||
@@ -1046,6 +1045,7 @@
|
||||
#include "code\modules\maps\reader.dm"
|
||||
#include "code\modules\maps\swapmaps.dm"
|
||||
#include "code\modules\maps\writer.dm"
|
||||
#include "code\modules\materials\materials.dm"
|
||||
#include "code\modules\mining\abandonedcrates.dm"
|
||||
#include "code\modules\mining\alloys.dm"
|
||||
#include "code\modules\mining\coins.dm"
|
||||
@@ -1055,7 +1055,7 @@
|
||||
#include "code\modules\mining\machine_unloading.dm"
|
||||
#include "code\modules\mining\mine_items.dm"
|
||||
#include "code\modules\mining\mine_turfs.dm"
|
||||
#include "code\modules\mining\minerals.dm"
|
||||
#include "code\modules\mining\mineral_effect.dm"
|
||||
#include "code\modules\mining\mint.dm"
|
||||
#include "code\modules\mining\money_bag.dm"
|
||||
#include "code\modules\mining\ore.dm"
|
||||
|
||||
@@ -427,10 +427,19 @@
|
||||
//If set, sink_volume_mod adjusts the effective output volume used in the calculation. This is useful when the output gas_mixture is
|
||||
//part of a pipenetwork, and so it's volume isn't representative of the actual volume since the gas will be shared across the pipenetwork when it processes.
|
||||
/proc/calculate_transfer_moles(datum/gas_mixture/source, datum/gas_mixture/sink, var/pressure_delta, var/sink_volume_mod=0)
|
||||
//Make the approximation that the sink temperature is unchanged after transferring gas
|
||||
var/air_temperature = (sink.temperature > 0)? sink.temperature : source.temperature
|
||||
var/output_volume = (sink.volume * sink.group_multiplier) + sink_volume_mod
|
||||
if(source.temperature == 0 || source.total_moles == 0) return 0
|
||||
|
||||
var/output_volume = (sink.volume * sink.group_multiplier) + sink_volume_mod
|
||||
var/source_total_moles = source.total_moles * source.group_multiplier
|
||||
|
||||
var/air_temperature = source.temperature
|
||||
if(sink.total_moles > 0 && sink.temperature > 0)
|
||||
//estimate the final temperature of the sink after transfer
|
||||
var/estimate_moles = pressure_delta*output_volume/(sink.temperature * R_IDEAL_GAS_EQUATION)
|
||||
var/sink_heat_capacity = sink.heat_capacity()
|
||||
var/transfer_heat_capacity = source.heat_capacity()*estimate_moles/source_total_moles
|
||||
air_temperature = (sink.temperature*sink_heat_capacity + source.temperature*transfer_heat_capacity) / (sink_heat_capacity + transfer_heat_capacity)
|
||||
|
||||
//get the number of moles that would have to be transfered to bring sink to the target pressure
|
||||
return pressure_delta*output_volume/(air_temperature * R_IDEAL_GAS_EQUATION)
|
||||
|
||||
|
||||
@@ -72,6 +72,10 @@
|
||||
assign_uid()
|
||||
id_tag = num2text(uid)
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/Destroy()
|
||||
unregister_radio(src, frequency)
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/high_volume
|
||||
name = "Large Air Vent"
|
||||
power_channel = EQUIP
|
||||
@@ -209,14 +213,6 @@
|
||||
|
||||
return pressure_delta
|
||||
|
||||
//Radio remote control
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/proc/set_frequency(new_frequency)
|
||||
radio_controller.remove_object(src, frequency)
|
||||
frequency = new_frequency
|
||||
if(frequency)
|
||||
radio_connection = radio_controller.add_object(src, frequency,radio_filter_in)
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/proc/broadcast_status()
|
||||
if(!radio_connection)
|
||||
return 0
|
||||
@@ -258,7 +254,7 @@
|
||||
radio_filter_in = frequency==1439?(RADIO_FROM_AIRALARM):null
|
||||
radio_filter_out = frequency==1439?(RADIO_TO_AIRALARM):null
|
||||
if(frequency)
|
||||
set_frequency(frequency)
|
||||
radio_connection = register_radio(src, frequency, frequency, radio_filter_in)
|
||||
src.broadcast_status()
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/receive_signal(datum/signal/signal)
|
||||
|
||||
@@ -41,6 +41,11 @@
|
||||
assign_uid()
|
||||
id_tag = num2text(uid)
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/Destroy()
|
||||
unregister_radio(src, frequency)
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/update_icon(var/safety = 0)
|
||||
if(!check_icon_cache())
|
||||
return
|
||||
|
||||
@@ -17,7 +17,14 @@
|
||||
return 0
|
||||
|
||||
/proc/max_default_z_level()
|
||||
return max(config.station_levels, max(config.admin_levels, config.player_levels))
|
||||
var/max_z = 0
|
||||
for(var/z in config.station_levels)
|
||||
max_z = max(z, max_z)
|
||||
for(var/z in config.admin_levels)
|
||||
max_z = max(z, max_z)
|
||||
for(var/z in config.player_levels)
|
||||
max_z = max(z, max_z)
|
||||
return max_z
|
||||
|
||||
/proc/get_area(O)
|
||||
var/turf/loc = get_turf(O)
|
||||
|
||||
@@ -125,3 +125,10 @@ Proc for attack log creation, because really why not
|
||||
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been [what_done] by [user ? "[user.name][(ismob(user) && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition]</font>")
|
||||
if(admin)
|
||||
log_attack("<font color='red'>[user ? "[user.name][(ismob(user) && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"] [what_done] [target ? "[target.name][(ismob(target) && target.ckey)? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition]</font>")
|
||||
|
||||
//checks whether this item is a module of the robot it is located in.
|
||||
/proc/is_robot_module(var/obj/item/thing)
|
||||
if (!thing || !istype(thing.loc, /mob/living/silicon/robot))
|
||||
return 0
|
||||
var/mob/living/silicon/robot/R = thing.loc
|
||||
return (thing in R.module.modules)
|
||||
|
||||
@@ -25,13 +25,31 @@
|
||||
|
||||
if(!istype(M) || (can_operate(M) && do_surgery(M,user,src))) return 0
|
||||
|
||||
// Knifing
|
||||
if(edge)
|
||||
for(var/obj/item/weapon/grab/G in M.grabbed_by)
|
||||
if(G.assailant == user && G.state >= GRAB_NECK && world.time >= (G.last_action + 20))
|
||||
//TODO: better alternative for applying damage multiple times? Nice knifing sound?
|
||||
M.apply_damage(20, BRUTE, "head", 0, sharp=sharp, edge=edge)
|
||||
M.apply_damage(20, BRUTE, "head", 0, sharp=sharp, edge=edge)
|
||||
M.apply_damage(20, BRUTE, "head", 0, sharp=sharp, edge=edge)
|
||||
M.adjustOxyLoss(60) // Brain lacks oxygen immediately, pass out
|
||||
flick(G.hud.icon_state, G.hud)
|
||||
G.last_action = world.time
|
||||
user.visible_message("<span class='danger'>[user] slit [M]'s throat open with \the [name]!</span>")
|
||||
user.attack_log += "\[[time_stamp()]\]<font color='red'> Knifed [M.name] ([M.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])</font>"
|
||||
M.attack_log += "\[[time_stamp()]\]<font color='orange'> Got knifed by [user.name] ([user.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])</font>"
|
||||
msg_admin_attack("[key_name(user)] knifed [key_name(M)] with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" )
|
||||
return
|
||||
|
||||
/////////////////////////
|
||||
user.lastattacked = M
|
||||
M.lastattacker = user
|
||||
|
||||
user.attack_log += "\[[time_stamp()]\]<font color='red'> Attacked [M.name] ([M.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])</font>"
|
||||
M.attack_log += "\[[time_stamp()]\]<font color='orange'> Attacked by [user.name] ([user.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])</font>"
|
||||
msg_admin_attack("[key_name(user)] attacked [key_name(M)] with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" )
|
||||
if(!no_attack_log)
|
||||
user.attack_log += "\[[time_stamp()]\]<font color='red'> Attacked [M.name] ([M.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])</font>"
|
||||
M.attack_log += "\[[time_stamp()]\]<font color='orange'> Attacked by [user.name] ([user.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])</font>"
|
||||
msg_admin_attack("[key_name(user)] attacked [key_name(M)] with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" )
|
||||
/////////////////////////
|
||||
|
||||
var/power = force
|
||||
|
||||
@@ -78,7 +78,7 @@ var/list/delayed_garbage = list()
|
||||
destroyed["\ref[A]"] = world.time
|
||||
|
||||
/datum/controller/process/garbage_collector/getStatName()
|
||||
return ..()+"([garbage_collector.dels]/[garbage_collector.hard_dels])"
|
||||
return ..()+"([garbage_collector.destroyed.len]/[garbage_collector.dels]/[garbage_collector.hard_dels])"
|
||||
|
||||
// Should be treated as a replacement for the 'del' keyword.
|
||||
// Datums passed to this will be given a chance to clean up references to allow the GC to collect them.
|
||||
@@ -121,7 +121,7 @@ var/list/delayed_garbage = list()
|
||||
/icon/finalize_qdel()
|
||||
del(src)
|
||||
|
||||
/imagine/finalize_qdel()
|
||||
/image/finalize_qdel()
|
||||
del(src)
|
||||
|
||||
/mob/finalize_qdel()
|
||||
|
||||
+5
-156
@@ -140,160 +140,9 @@
|
||||
|
||||
|
||||
proc/get_id_photo(var/mob/living/carbon/human/H)
|
||||
var/icon/preview_icon = null
|
||||
|
||||
var/g = "m"
|
||||
if (H.gender == FEMALE)
|
||||
g = "f"
|
||||
|
||||
var/icon/icobase = H.species.icobase
|
||||
|
||||
preview_icon = new /icon(icobase, "torso_[g]")
|
||||
var/icon/temp
|
||||
temp = new /icon(icobase, "groin_[g]")
|
||||
preview_icon.Blend(temp, ICON_OVERLAY)
|
||||
temp = new /icon(icobase, "head_[g]")
|
||||
preview_icon.Blend(temp, ICON_OVERLAY)
|
||||
|
||||
for(var/obj/item/organ/external/E in H.organs)
|
||||
preview_icon.Blend(E.get_icon(), ICON_OVERLAY)
|
||||
|
||||
//Tail
|
||||
if(H.species.tail)
|
||||
temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[H.species.tail]_s")
|
||||
preview_icon.Blend(temp, ICON_OVERLAY)
|
||||
|
||||
// Skin tone
|
||||
if(H.species.flags & HAS_SKIN_TONE)
|
||||
if (H.s_tone >= 0)
|
||||
preview_icon.Blend(rgb(H.s_tone, H.s_tone, H.s_tone), ICON_ADD)
|
||||
else
|
||||
preview_icon.Blend(rgb(-H.s_tone, -H.s_tone, -H.s_tone), ICON_SUBTRACT)
|
||||
|
||||
// Skin color
|
||||
if(H.species.flags & HAS_SKIN_TONE)
|
||||
if(!H.species || H.species.flags & HAS_SKIN_COLOR)
|
||||
preview_icon.Blend(rgb(H.r_skin, H.g_skin, H.b_skin), ICON_ADD)
|
||||
|
||||
var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = H.species ? H.species.eyes : "eyes_s")
|
||||
|
||||
if (H.species.flags & HAS_EYE_COLOR)
|
||||
eyes_s.Blend(rgb(H.r_eyes, H.g_eyes, H.b_eyes), ICON_ADD)
|
||||
|
||||
var/datum/sprite_accessory/hair_style = hair_styles_list[H.h_style]
|
||||
if(hair_style)
|
||||
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
|
||||
hair_s.Blend(rgb(H.r_hair, H.g_hair, H.b_hair), ICON_ADD)
|
||||
eyes_s.Blend(hair_s, ICON_OVERLAY)
|
||||
|
||||
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[H.f_style]
|
||||
if(facial_hair_style)
|
||||
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
|
||||
facial_s.Blend(rgb(H.r_facial, H.g_facial, H.b_facial), ICON_ADD)
|
||||
eyes_s.Blend(facial_s, ICON_OVERLAY)
|
||||
|
||||
var/icon/clothes_s = null
|
||||
switch(H.mind.assigned_role)
|
||||
if("Head of Personnel")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "hop_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
if("Bartender")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "ba_suit_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if("Gardener")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "hydroponics_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if("Chef")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "chef_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if("Janitor")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "janitor_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if("Librarian")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "red_suit_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if("Quartermaster")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "qm_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
if("Cargo Technician")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "cargotech_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if("Shaft Miner")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "miner_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if("Lawyer")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "internalaffairs_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
if("Chaplain")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "chapblack_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if("Research Director")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "director_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
|
||||
if("Scientist")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "sciencewhite_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_tox_open"), ICON_OVERLAY)
|
||||
if("Chemist")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "chemistrywhite_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_chem_open"), ICON_OVERLAY)
|
||||
if("Chief Medical Officer")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "cmo_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_cmo_open"), ICON_OVERLAY)
|
||||
if("Medical Doctor")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "medical_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
|
||||
if("Geneticist")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "geneticswhite_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_gen_open"), ICON_OVERLAY)
|
||||
if("Virologist")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "virologywhite_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_vir_open"), ICON_OVERLAY)
|
||||
if("Captain")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "captain_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
if("Head of Security")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "hosred_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
if("Warden")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "warden_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
if("Detective")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "detective_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "detective"), ICON_OVERLAY)
|
||||
if("Security Officer")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "secred_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
if("Chief Engineer")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "chief_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
|
||||
if("Station Engineer")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "engine_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "orange"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
|
||||
if("Atmospheric Technician")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "atmos_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
|
||||
if("Roboticist")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "robotics_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
|
||||
else
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
preview_icon.Blend(eyes_s, ICON_OVERLAY)
|
||||
if(clothes_s)
|
||||
preview_icon.Blend(clothes_s, ICON_OVERLAY)
|
||||
qdel(eyes_s)
|
||||
qdel(clothes_s)
|
||||
|
||||
H.regenerate_icons()
|
||||
var/icon/preview_icon = icon(H.icon)
|
||||
for(var/image/I in H.overlays_standing)
|
||||
if(I && I.icon)
|
||||
preview_icon.Blend(icon(I.icon, I.icon_state), ICON_OVERLAY)
|
||||
return preview_icon
|
||||
|
||||
+25
-25
@@ -83,7 +83,7 @@
|
||||
force = 5.0
|
||||
throwforce = 7.0
|
||||
w_class = 2.0
|
||||
matter = list("metal" = 50)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50)
|
||||
attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed")
|
||||
|
||||
/obj/item/weapon/cane/concealed
|
||||
@@ -271,7 +271,7 @@
|
||||
w_class = 2.0
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
matter = list("metal" = 100)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 100)
|
||||
origin_tech = "magnets=1"
|
||||
|
||||
/obj/item/weapon/staff
|
||||
@@ -321,7 +321,7 @@
|
||||
var/amount = 1.0
|
||||
var/laying = 0.0
|
||||
var/old_lay = null
|
||||
matter = list("metal" = 40)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 40)
|
||||
attack_verb = list("whipped", "lashed", "disciplined", "tickled")
|
||||
|
||||
suicide_act(mob/user)
|
||||
@@ -345,7 +345,7 @@
|
||||
name = "power control module"
|
||||
icon_state = "power_mod"
|
||||
desc = "Heavy-duty switching circuits for power control."
|
||||
matter = list("metal" = 50, "glass" = 50)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
|
||||
/obj/item/weapon/module/power_control/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
|
||||
if (istype(W, /obj/item/device/multitool))
|
||||
@@ -467,35 +467,35 @@
|
||||
desc = "A basic capacitor used in the construction of a variety of devices."
|
||||
icon_state = "capacitor"
|
||||
origin_tech = "powerstorage=1"
|
||||
matter = list("metal" = 50,"glass" = 50)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 50)
|
||||
|
||||
/obj/item/weapon/stock_parts/scanning_module
|
||||
name = "scanning module"
|
||||
desc = "A compact, high resolution scanning module used in the construction of certain devices."
|
||||
icon_state = "scan_module"
|
||||
origin_tech = "magnets=1"
|
||||
matter = list("metal" = 50,"glass" = 20)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 20)
|
||||
|
||||
/obj/item/weapon/stock_parts/manipulator
|
||||
name = "micro-manipulator"
|
||||
desc = "A tiny little manipulator used in the construction of certain devices."
|
||||
icon_state = "micro_mani"
|
||||
origin_tech = "materials=1;programming=1"
|
||||
matter = list("metal" = 30)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 30)
|
||||
|
||||
/obj/item/weapon/stock_parts/micro_laser
|
||||
name = "micro-laser"
|
||||
desc = "A tiny laser used in certain devices."
|
||||
icon_state = "micro_laser"
|
||||
origin_tech = "magnets=1"
|
||||
matter = list("metal" = 10,"glass" = 20)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 10,"glass" = 20)
|
||||
|
||||
/obj/item/weapon/stock_parts/matter_bin
|
||||
name = "matter bin"
|
||||
desc = "A container for hold compressed matter awaiting re-construction."
|
||||
icon_state = "matter_bin"
|
||||
origin_tech = "materials=1"
|
||||
matter = list("metal" = 80)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 80)
|
||||
|
||||
//Rank 2
|
||||
|
||||
@@ -504,7 +504,7 @@
|
||||
desc = "An advanced capacitor used in the construction of a variety of devices."
|
||||
origin_tech = "powerstorage=3"
|
||||
rating = 2
|
||||
matter = list("metal" = 50,"glass" = 50)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 50)
|
||||
|
||||
/obj/item/weapon/stock_parts/scanning_module/adv
|
||||
name = "advanced scanning module"
|
||||
@@ -512,7 +512,7 @@
|
||||
icon_state = "scan_module"
|
||||
origin_tech = "magnets=3"
|
||||
rating = 2
|
||||
matter = list("metal" = 50,"glass" = 20)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 20)
|
||||
|
||||
/obj/item/weapon/stock_parts/manipulator/nano
|
||||
name = "nano-manipulator"
|
||||
@@ -520,7 +520,7 @@
|
||||
icon_state = "nano_mani"
|
||||
origin_tech = "materials=3,programming=2"
|
||||
rating = 2
|
||||
matter = list("metal" = 30)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 30)
|
||||
|
||||
/obj/item/weapon/stock_parts/micro_laser/high
|
||||
name = "high-power micro-laser"
|
||||
@@ -528,7 +528,7 @@
|
||||
icon_state = "high_micro_laser"
|
||||
origin_tech = "magnets=3"
|
||||
rating = 2
|
||||
matter = list("metal" = 10,"glass" = 20)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 10,"glass" = 20)
|
||||
|
||||
/obj/item/weapon/stock_parts/matter_bin/adv
|
||||
name = "advanced matter bin"
|
||||
@@ -536,7 +536,7 @@
|
||||
icon_state = "advanced_matter_bin"
|
||||
origin_tech = "materials=3"
|
||||
rating = 2
|
||||
matter = list("metal" = 80)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 80)
|
||||
|
||||
//Rating 3
|
||||
|
||||
@@ -545,14 +545,14 @@
|
||||
desc = "A super-high capacity capacitor used in the construction of a variety of devices."
|
||||
origin_tech = "powerstorage=5;materials=4"
|
||||
rating = 3
|
||||
matter = list("metal" = 50,"glass" = 50)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 50)
|
||||
|
||||
/obj/item/weapon/stock_parts/scanning_module/phasic
|
||||
name = "phasic scanning module"
|
||||
desc = "A compact, high resolution phasic scanning module used in the construction of certain devices."
|
||||
origin_tech = "magnets=5"
|
||||
rating = 3
|
||||
matter = list("metal" = 50,"glass" = 20)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 20)
|
||||
|
||||
/obj/item/weapon/stock_parts/manipulator/pico
|
||||
name = "pico-manipulator"
|
||||
@@ -560,7 +560,7 @@
|
||||
icon_state = "pico_mani"
|
||||
origin_tech = "materials=5,programming=2"
|
||||
rating = 3
|
||||
matter = list("metal" = 30)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 30)
|
||||
|
||||
/obj/item/weapon/stock_parts/micro_laser/ultra
|
||||
name = "ultra-high-power micro-laser"
|
||||
@@ -568,7 +568,7 @@
|
||||
desc = "A tiny laser used in certain devices."
|
||||
origin_tech = "magnets=5"
|
||||
rating = 3
|
||||
matter = list("metal" = 10,"glass" = 20)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 10,"glass" = 20)
|
||||
|
||||
/obj/item/weapon/stock_parts/matter_bin/super
|
||||
name = "super matter bin"
|
||||
@@ -576,7 +576,7 @@
|
||||
icon_state = "super_matter_bin"
|
||||
origin_tech = "materials=5"
|
||||
rating = 3
|
||||
matter = list("metal" = 80)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 80)
|
||||
|
||||
// Subspace stock parts
|
||||
|
||||
@@ -585,35 +585,35 @@
|
||||
icon_state = "subspace_ansible"
|
||||
desc = "A compact module capable of sensing extradimensional activity."
|
||||
origin_tech = "programming=3;magnets=5;materials=4;bluespace=2"
|
||||
matter = list("metal" = 30,"glass" = 10)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 10)
|
||||
|
||||
/obj/item/weapon/stock_parts/subspace/filter
|
||||
name = "hyperwave filter"
|
||||
icon_state = "hyperwave_filter"
|
||||
desc = "A tiny device capable of filtering and converting super-intense radiowaves."
|
||||
origin_tech = "programming=4;magnets=2"
|
||||
matter = list("metal" = 30,"glass" = 10)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 10)
|
||||
|
||||
/obj/item/weapon/stock_parts/subspace/amplifier
|
||||
name = "subspace amplifier"
|
||||
icon_state = "subspace_amplifier"
|
||||
desc = "A compact micro-machine capable of amplifying weak subspace transmissions."
|
||||
origin_tech = "programming=3;magnets=4;materials=4;bluespace=2"
|
||||
matter = list("metal" = 30,"glass" = 10)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 10)
|
||||
|
||||
/obj/item/weapon/stock_parts/subspace/treatment
|
||||
name = "subspace treatment disk"
|
||||
icon_state = "treatment_disk"
|
||||
desc = "A compact micro-machine capable of stretching out hyper-compressed radio waves."
|
||||
origin_tech = "programming=3;magnets=2;materials=5;bluespace=2"
|
||||
matter = list("metal" = 30,"glass" = 10)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 10)
|
||||
|
||||
/obj/item/weapon/stock_parts/subspace/analyzer
|
||||
name = "subspace wavelength analyzer"
|
||||
icon_state = "wavelength_analyzer"
|
||||
desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths."
|
||||
origin_tech = "programming=3;magnets=4;materials=4;bluespace=2"
|
||||
matter = list("metal" = 30,"glass" = 10)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 10)
|
||||
|
||||
/obj/item/weapon/stock_parts/subspace/crystal
|
||||
name = "ansible crystal"
|
||||
@@ -627,7 +627,7 @@
|
||||
icon_state = "subspace_transmitter"
|
||||
desc = "A large piece of equipment used to open a window into the subspace dimension."
|
||||
origin_tech = "magnets=5;materials=5;bluespace=3"
|
||||
matter = list("metal" = 50)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50)
|
||||
|
||||
/obj/item/weapon/ectoplasm
|
||||
name = "ectoplasm"
|
||||
|
||||
@@ -3,6 +3,16 @@
|
||||
#define TELECOMMS_RECEPTION_RECEIVER 2
|
||||
#define TELECOMMS_RECEPTION_BOTH 3
|
||||
|
||||
/proc/register_radio(source, old_frequency, new_frequency, radio_filter)
|
||||
if(old_frequency)
|
||||
radio_controller.remove_object(source, old_frequency)
|
||||
if(new_frequency)
|
||||
return radio_controller.add_object(source, new_frequency, radio_filter)
|
||||
|
||||
/proc/unregister_radio(source, frequency)
|
||||
if(radio_controller)
|
||||
radio_controller.remove_object(source, frequency)
|
||||
|
||||
/proc/get_frequency_name(var/display_freq)
|
||||
var/freq_text
|
||||
|
||||
|
||||
@@ -127,6 +127,7 @@ var/list/sacrificed = list()
|
||||
if(target.getFireLoss() < 100)
|
||||
target.hallucination = min(target.hallucination, 500)
|
||||
return 0
|
||||
|
||||
target.take_overall_damage(0, rand(5, 20)) // You dirty resister cannot handle the damage to your mind. Easily. - even cultists who accept right away should experience some effects
|
||||
// Resist messages go!
|
||||
if(initial_message) //don't do this stuff right away, only if they resist or hesitate.
|
||||
@@ -417,6 +418,7 @@ var/list/sacrificed = list()
|
||||
var/mob/dead/observer/ghost
|
||||
for(var/mob/dead/observer/O in this_rune.loc)
|
||||
if(!O.client) continue
|
||||
if(!O.MayRespawn()) continue
|
||||
if(O.mind && O.mind.current && O.mind.current.stat != DEAD) continue
|
||||
ghost = O
|
||||
break
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
item_state = "electronic"
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
matter = list("metal" = 500)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 500)
|
||||
var/obj/item/weapon/disk/nuclear/the_disk = null
|
||||
var/active = 0
|
||||
|
||||
|
||||
@@ -798,7 +798,7 @@ datum/objective/heist/salvage
|
||||
choose_target()
|
||||
switch(rand(1,8))
|
||||
if(1)
|
||||
target = "metal"
|
||||
target = DEFAULT_WALL_MATERIAL
|
||||
target_amount = 300
|
||||
if(2)
|
||||
target = "glass"
|
||||
|
||||
@@ -99,8 +99,10 @@
|
||||
target_temperature = 90
|
||||
|
||||
/obj/machinery/alarm/Destroy()
|
||||
if(radio_controller)
|
||||
radio_controller.remove_object(src, frequency)
|
||||
unregister_radio(src, frequency)
|
||||
if(wires)
|
||||
qdel(wires)
|
||||
wires = null
|
||||
..()
|
||||
|
||||
/obj/machinery/alarm/New(var/loc, var/dir, var/building = 0)
|
||||
@@ -836,8 +838,7 @@
|
||||
|
||||
else if(istype(W, /obj/item/weapon/wrench))
|
||||
user << "You remove the fire alarm assembly from the wall!"
|
||||
var/obj/item/alarm_frame/frame = new /obj/item/alarm_frame()
|
||||
frame.loc = user.loc
|
||||
new /obj/item/frame/air_alarm(get_turf(user))
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
qdel(src)
|
||||
|
||||
@@ -864,51 +865,7 @@ Just a object used in constructing air alarms
|
||||
icon_state = "door_electronics"
|
||||
desc = "Looks like a circuit. Probably is."
|
||||
w_class = 2.0
|
||||
matter = list("metal" = 50, "glass" = 50)
|
||||
|
||||
|
||||
/*
|
||||
AIR ALARM ITEM
|
||||
Handheld air alarm frame, for placing on walls
|
||||
Code shamelessly copied from apc_frame
|
||||
*/
|
||||
/obj/item/alarm_frame
|
||||
name = "air alarm frame"
|
||||
desc = "Used for building Air Alarms"
|
||||
icon = 'icons/obj/monitors.dmi'
|
||||
icon_state = "alarm_bitem"
|
||||
flags = CONDUCT
|
||||
|
||||
/obj/item/alarm_frame/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/wrench))
|
||||
new /obj/item/stack/sheet/metal( get_turf(src.loc), 2 )
|
||||
qdel(src)
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/alarm_frame/proc/try_build(turf/on_wall)
|
||||
if (get_dist(on_wall,usr)>1)
|
||||
return
|
||||
|
||||
var/ndir = get_dir(on_wall,usr)
|
||||
if (!(ndir in cardinal))
|
||||
return
|
||||
|
||||
var/turf/loc = get_turf(usr)
|
||||
var/area/A = loc.loc
|
||||
if (!istype(loc, /turf/simulated/floor))
|
||||
usr << "\red Air Alarm cannot be placed on this spot."
|
||||
return
|
||||
if (A.requires_power == 0 || A.name == "Space")
|
||||
usr << "\red Air Alarm cannot be placed in this area."
|
||||
return
|
||||
|
||||
if(gotwallitem(loc, ndir))
|
||||
usr << "\red There's already an item on this wall!"
|
||||
return
|
||||
|
||||
new /obj/machinery/alarm(loc, ndir, 1)
|
||||
qdel(src)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
|
||||
/*
|
||||
FIRE ALARM
|
||||
@@ -1019,8 +976,7 @@ FIRE ALARM
|
||||
|
||||
else if(istype(W, /obj/item/weapon/wrench))
|
||||
user << "You remove the fire alarm assembly from the wall!"
|
||||
var/obj/item/firealarm_frame/frame = new /obj/item/firealarm_frame()
|
||||
frame.loc = user.loc
|
||||
new /obj/item/frame/fire_alarm(get_turf(user))
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
qdel(src)
|
||||
return
|
||||
@@ -1183,53 +1139,7 @@ Just a object used in constructing fire alarms
|
||||
icon_state = "door_electronics"
|
||||
desc = "A circuit. It has a label on it, it says \"Can handle heat levels up to 40 degrees celsius!\""
|
||||
w_class = 2.0
|
||||
matter = list("metal" = 50, "glass" = 50)
|
||||
|
||||
|
||||
/*
|
||||
FIRE ALARM ITEM
|
||||
Handheld fire alarm frame, for placing on walls
|
||||
Code shamelessly copied from apc_frame
|
||||
*/
|
||||
/obj/item/firealarm_frame
|
||||
name = "fire alarm frame"
|
||||
desc = "Used for building Fire Alarms"
|
||||
icon = 'icons/obj/monitors.dmi'
|
||||
icon_state = "fire_bitem"
|
||||
flags = CONDUCT
|
||||
|
||||
/obj/item/firealarm_frame/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/wrench))
|
||||
new /obj/item/stack/sheet/metal( get_turf(src.loc), 2 )
|
||||
qdel(src)
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/firealarm_frame/proc/try_build(turf/on_wall)
|
||||
if (get_dist(on_wall,usr)>1)
|
||||
return
|
||||
|
||||
var/ndir = get_dir(on_wall,usr)
|
||||
if (!(ndir in cardinal))
|
||||
return
|
||||
|
||||
var/turf/loc = get_turf(usr)
|
||||
var/area/A = loc.loc
|
||||
if (!istype(loc, /turf/simulated/floor))
|
||||
usr << "\red Fire Alarm cannot be placed on this spot."
|
||||
return
|
||||
if (A.requires_power == 0 || A.name == "Space")
|
||||
usr << "\red Fire Alarm cannot be placed in this area."
|
||||
return
|
||||
|
||||
if(gotwallitem(loc, ndir))
|
||||
usr << "\red There's already an item on this wall!"
|
||||
return
|
||||
|
||||
new /obj/machinery/firealarm(loc, ndir, 1)
|
||||
|
||||
qdel(src)
|
||||
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
|
||||
/obj/machinery/partyalarm
|
||||
name = "\improper PARTY BUTTON"
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
active_power_usage = 2000
|
||||
|
||||
var/list/machine_recipes
|
||||
var/list/stored_material = list("metal" = 0, "glass" = 0)
|
||||
var/list/storage_capacity = list("metal" = 0, "glass" = 0)
|
||||
var/list/stored_material = list(DEFAULT_WALL_MATERIAL = 0, "glass" = 0)
|
||||
var/list/storage_capacity = list(DEFAULT_WALL_MATERIAL = 0, "glass" = 0)
|
||||
var/show_category = "All"
|
||||
|
||||
var/hacked = 0
|
||||
@@ -279,18 +279,20 @@
|
||||
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
|
||||
man_rating += M.rating
|
||||
|
||||
storage_capacity["metal"] = mb_rating * 25000
|
||||
storage_capacity[DEFAULT_WALL_MATERIAL] = mb_rating * 25000
|
||||
storage_capacity["glass"] = mb_rating * 12500
|
||||
build_time = 50 / man_rating
|
||||
mat_efficiency = 1.1 - man_rating * 0.1// Normally, price is 1.25 the amount of material, so this shouldn't go higher than 0.8. Maximum rating of parts is 3
|
||||
|
||||
/obj/machinery/autolathe/dismantle()
|
||||
var/list/sheets = list("metal" = /obj/item/stack/sheet/metal, "glass" = /obj/item/stack/sheet/glass)
|
||||
|
||||
for(var/mat in stored_material)
|
||||
var/T = sheets[mat]
|
||||
var/obj/item/stack/sheet/S = new T
|
||||
var/material/M = name_to_material[mat]
|
||||
if(!istype(M))
|
||||
continue
|
||||
var/obj/item/stack/sheet/S = new M.stack_type(get_turf(src))
|
||||
if(stored_material[mat] > S.perunit)
|
||||
S.amount = round(stored_material[mat] / S.perunit)
|
||||
S.loc = loc
|
||||
else
|
||||
qdel(S)
|
||||
..()
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
w_class = 2
|
||||
anchored = 0
|
||||
|
||||
matter = list("metal" = 700,"glass" = 300)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 700,"glass" = 300)
|
||||
|
||||
// Motion, EMP-Proof, X-Ray
|
||||
var/list/obj/item/possible_upgrades = list(/obj/item/device/assembly/prox_sensor, /obj/item/stack/sheet/mineral/osmium, /obj/item/weapon/stock_parts/scanning_module)
|
||||
|
||||
@@ -222,6 +222,8 @@
|
||||
desc = "Damn, why do they never have anything interesting on these things?"
|
||||
icon = 'icons/obj/status_display.dmi'
|
||||
icon_state = "entertainment"
|
||||
light_color = "#FFEEDB"
|
||||
light_range_on = 2
|
||||
circuit = null
|
||||
|
||||
/obj/machinery/computer/security/wooden_tv
|
||||
@@ -229,7 +231,8 @@
|
||||
desc = "An old TV hooked into the stations camera network."
|
||||
icon_state = "security_det"
|
||||
circuit = null
|
||||
|
||||
light_color = "#3848B3"
|
||||
light_power_on = 0.5
|
||||
|
||||
/obj/machinery/computer/security/mining
|
||||
name = "outpost camera monitor"
|
||||
@@ -237,12 +240,14 @@
|
||||
icon_state = "miningcameras"
|
||||
network = list("MINE")
|
||||
circuit = /obj/item/weapon/circuitboard/security/mining
|
||||
light_color = "#F9BBFC"
|
||||
|
||||
/obj/machinery/computer/security/engineering
|
||||
name = "engineering camera monitor"
|
||||
desc = "Used to monitor fires and breaches."
|
||||
icon_state = "engineeringcameras"
|
||||
circuit = /obj/item/weapon/circuitboard/security/engineering
|
||||
light_color = "#FAC54B"
|
||||
|
||||
/obj/machinery/computer/security/engineering/New()
|
||||
if(!network)
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
for(var/x in verbs)
|
||||
verbs -= x
|
||||
set_broken()
|
||||
var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread()
|
||||
var/datum/effect/effect/system/smoke_spread/smoke = PoolOrNew(/datum/effect/effect/system/smoke_spread)
|
||||
smoke.set_up(5, 0, src)
|
||||
smoke.start()
|
||||
return
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
var/list/req_components = null
|
||||
var/powernet = null
|
||||
var/list/records = null
|
||||
var/frame_desc = null
|
||||
|
||||
var/datum/file/program/OS = new/datum/file/program/ntos
|
||||
|
||||
|
||||
@@ -18,15 +18,11 @@
|
||||
proc/update_desc()
|
||||
var/D
|
||||
if(req_components)
|
||||
D = "Requires "
|
||||
var/first = 1
|
||||
var/list/component_list = new
|
||||
for(var/I in req_components)
|
||||
if(req_components[I] > 0)
|
||||
D += "[first?"":", "][num2text(req_components[I])] [req_component_names[I]]"
|
||||
first = 0
|
||||
if(first) // nothing needs to be added, then
|
||||
D += "nothing"
|
||||
D += "."
|
||||
component_list += "[num2text(req_components[I])] [req_component_names[I]]"
|
||||
D = "Requires [english_list(component_list)]."
|
||||
desc = D
|
||||
|
||||
/obj/machinery/constructable_frame/machine_frame
|
||||
@@ -74,10 +70,7 @@
|
||||
var/cp = text2path(A)
|
||||
var/obj/ct = new cp() // have to quickly instantiate it get name
|
||||
req_component_names[A] = ct.name
|
||||
if(circuit.frame_desc)
|
||||
desc = circuit.frame_desc
|
||||
else
|
||||
update_desc()
|
||||
update_desc()
|
||||
user << desc
|
||||
else
|
||||
user << "\red This frame does not accept circuit boards of this type!"
|
||||
|
||||
@@ -272,11 +272,7 @@
|
||||
for(var/turf/simulated/floor/target_tile in range(2,loc))
|
||||
target_tile.assume_gas("phoron", 35, 400+T0C)
|
||||
spawn (0) target_tile.hotspot_expose(temperature, 400)
|
||||
for(var/obj/structure/falsewall/phoron/F in range(3,src))//Hackish as fuck, but until temperature_expose works, there is nothing I can do -Sieve
|
||||
var/turf/T = get_turf(F)
|
||||
T.ChangeTurf(/turf/simulated/wall/mineral/phoron/)
|
||||
qdel (F)
|
||||
for(var/turf/simulated/wall/mineral/phoron/W in range(3,src))
|
||||
for(var/turf/simulated/wall/W in range(3,src))
|
||||
W.ignite((temperature/4))//Added so that you can't set off a massive chain reaction with a small flame
|
||||
for(var/obj/machinery/door/airlock/phoron/D in range(3,src))
|
||||
D.ignite(temperature/4)
|
||||
@@ -613,7 +609,7 @@ About the new airlock wires panel:
|
||||
if (src.isElectrified())
|
||||
if (istype(mover, /obj/item))
|
||||
var/obj/item/i = mover
|
||||
if (i.matter && ("metal" in i.matter) && i.matter["metal"] > 0)
|
||||
if (i.matter && (DEFAULT_WALL_MATERIAL in i.matter) && i.matter[DEFAULT_WALL_MATERIAL] > 0)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(5, 1, src)
|
||||
s.start()
|
||||
@@ -1019,12 +1015,18 @@ About the new airlock wires panel:
|
||||
else
|
||||
wires = new/datum/wires/airlock(src)
|
||||
|
||||
/obj/machinery/door/airlock/initialize()
|
||||
if(src.closeOtherId != null)
|
||||
spawn (5)
|
||||
for (var/obj/machinery/door/airlock/A in world)
|
||||
if(A.closeOtherId == src.closeOtherId && A != src)
|
||||
src.closeOther = A
|
||||
break
|
||||
for (var/obj/machinery/door/airlock/A in world)
|
||||
if(A.closeOtherId == src.closeOtherId && A != src)
|
||||
src.closeOther = A
|
||||
break
|
||||
|
||||
/obj/machinery/door/airlock/Destroy()
|
||||
if(wires)
|
||||
qdel(wires)
|
||||
wires = null
|
||||
..()
|
||||
|
||||
// Most doors will never be deconstructed over the course of a round,
|
||||
// so as an optimization defer the creation of electronics until
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
icon_state = "door_electronics"
|
||||
w_class = 2.0 //It should be tiny! -Agouri
|
||||
|
||||
matter = list("metal" = 50,"glass" = 50)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 50)
|
||||
|
||||
req_access = list(access_engine)
|
||||
|
||||
|
||||
@@ -150,6 +150,7 @@
|
||||
/obj/machinery/porta_turret/Destroy()
|
||||
//deletes its own cover with it
|
||||
qdel(cover)
|
||||
cover = null
|
||||
..()
|
||||
|
||||
/obj/machinery/porta_turret/proc/isLocked(mob/user)
|
||||
@@ -870,6 +871,10 @@
|
||||
density = 0
|
||||
var/obj/machinery/porta_turret/Parent_Turret = null
|
||||
|
||||
/obj/machinery/porta_turret_cover/Destroy()
|
||||
Parent_Turret = null
|
||||
..()
|
||||
|
||||
/obj/machinery/porta_turret_cover/attack_ai(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
if(!M.get_amount())
|
||||
return
|
||||
while(metal_amount < 150000 && M.amount)
|
||||
src.metal_amount += O.matter["metal"] /*O:height * O:width * O:length * 100000.0*/
|
||||
src.metal_amount += O.matter[DEFAULT_WALL_MATERIAL] /*O:height * O:width * O:length * 100000.0*/
|
||||
M.use(1)
|
||||
count++
|
||||
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
/obj/item/frame
|
||||
name = "frame"
|
||||
desc = "Used for building machines."
|
||||
icon = 'icons/obj/monitors.dmi'
|
||||
icon_state = "fire_bitem"
|
||||
flags = CONDUCT
|
||||
var/build_machine_type
|
||||
var/refund_amt = 2
|
||||
var/refund_type = /obj/item/stack/sheet/metal
|
||||
|
||||
/obj/item/frame/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/wrench))
|
||||
new refund_type( get_turf(src.loc), refund_amt)
|
||||
qdel(src)
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/frame/proc/try_build(turf/on_wall)
|
||||
if(!build_machine_type)
|
||||
return
|
||||
|
||||
if (get_dist(on_wall,usr)>1)
|
||||
return
|
||||
|
||||
var/ndir = get_dir(on_wall,usr)
|
||||
if (!(ndir in cardinal))
|
||||
return
|
||||
|
||||
var/turf/loc = get_turf(usr)
|
||||
var/area/A = loc.loc
|
||||
if (!istype(loc, /turf/simulated/floor))
|
||||
usr << "<span class='danger>\The [src] Alarm cannot be placed on this spot.</span>"
|
||||
return
|
||||
if (A.requires_power == 0 || A.name == "Space")
|
||||
usr << "<span class='danger>\The [src] Alarm cannot be placed in this area.</span>"
|
||||
return
|
||||
|
||||
if(gotwallitem(loc, ndir))
|
||||
usr << "<span class='danger>There's already an item on this wall!</span>"
|
||||
return
|
||||
|
||||
var/obj/machinery/M = new build_machine_type(loc, ndir, 1)
|
||||
M.fingerprints = src.fingerprints
|
||||
M.fingerprintshidden = src.fingerprintshidden
|
||||
M.fingerprintslast = src.fingerprintslast
|
||||
qdel(src)
|
||||
|
||||
/obj/item/frame/fire_alarm
|
||||
name = "fire alarm frame"
|
||||
desc = "Used for building fire alarms."
|
||||
build_machine_type = /obj/machinery/firealarm
|
||||
|
||||
/obj/item/frame/air_alarm
|
||||
name = "air alarm frame"
|
||||
desc = "Used for building air alarms."
|
||||
build_machine_type = /obj/machinery/alarm
|
||||
|
||||
/obj/item/frame/light
|
||||
name = "light fixture frame"
|
||||
desc = "Used for building lights."
|
||||
icon = 'icons/obj/lighting.dmi'
|
||||
icon_state = "tube-construct-item"
|
||||
build_machine_type = /obj/machinery/light_construct
|
||||
|
||||
/obj/item/frame/light/small
|
||||
name = "small light fixture frame"
|
||||
icon_state = "bulb-construct-item"
|
||||
refund_amt = 1
|
||||
build_machine_type = /obj/machinery/light_construct/small
|
||||
|
||||
/obj/item/frame/rust
|
||||
name = "Fuel Compressor frame"
|
||||
icon = 'icons/rust.dmi'
|
||||
icon_state = "fuel_compressor0"
|
||||
w_class = 4
|
||||
refund_type = /obj/item/stack/sheet/plasteel
|
||||
refund_amt = 12
|
||||
build_machine_type = /obj/machinery/rust_fuel_compressor
|
||||
|
||||
/obj/item/frame/rust/assembly
|
||||
name = "Fuel Assembly Port frame"
|
||||
icon_state = "port2"
|
||||
build_machine_type = /obj/machinery/rust_fuel_assembly_port
|
||||
@@ -9,7 +9,7 @@
|
||||
force = 5
|
||||
origin_tech = "materials=2"
|
||||
construction_time = 100
|
||||
construction_cost = list("metal"=10000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=10000)
|
||||
var/equip_cooldown = 0
|
||||
var/equip_ready = 1
|
||||
var/energy_drain = 0
|
||||
@@ -100,11 +100,11 @@
|
||||
|
||||
if (ispath(required_type))
|
||||
return istype(M, required_type)
|
||||
|
||||
|
||||
for (var/path in required_type)
|
||||
if (istype(M, path))
|
||||
return 1
|
||||
|
||||
|
||||
return 0
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/proc/attach(obj/mecha/M as obj)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
origin_tech = "programming=2;biotech=3"
|
||||
energy_drain = 20
|
||||
range = MELEE
|
||||
construction_cost = list("metal"=5000,"glass"=10000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=5000,"glass"=10000)
|
||||
reliability = 1000
|
||||
equip_cooldown = 20
|
||||
var/mob/living/carbon/occupant = null
|
||||
@@ -394,7 +394,7 @@
|
||||
equip_cooldown = 10
|
||||
origin_tech = "materials=3;biotech=4;magnets=4;programming=3"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=3000,"glass"=2000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=3000,"glass"=2000)
|
||||
required_type = /obj/mecha/medical
|
||||
|
||||
New()
|
||||
|
||||
@@ -89,8 +89,13 @@
|
||||
var/C = target.loc //why are these backwards? we may never know -Pete
|
||||
if(do_after_cooldown(target))
|
||||
if(T == chassis.loc && src == chassis.selected)
|
||||
if(istype(target, /turf/simulated/wall/r_wall))
|
||||
occupant_message("<span class='warning'>[target] is too durable to drill through.</span>")
|
||||
if(istype(target, /turf/simulated/wall))
|
||||
var/turf/simulated/wall/W = target
|
||||
if(W.reinf_material)
|
||||
occupant_message("<span class='warning'>[target] is too durable to drill through.</span>")
|
||||
else
|
||||
log_message("Drilled through [target]")
|
||||
target.ex_act(2)
|
||||
else if(istype(target, /turf/simulated/mineral))
|
||||
for(var/turf/simulated/mineral/M in range(chassis,1))
|
||||
if(get_dir(chassis,M)&chassis.dir)
|
||||
@@ -123,7 +128,7 @@
|
||||
desc = "This is an upgraded version of the drill that'll pierce the heavens! (Can be attached to: Combat and Engineering Exosuits)"
|
||||
icon_state = "mecha_diamond_drill"
|
||||
origin_tech = "materials=4;engineering=3"
|
||||
construction_cost = list("metal"=10000,"diamond"=6500)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=10000,"diamond"=6500)
|
||||
equip_cooldown = 20
|
||||
force = 15
|
||||
|
||||
@@ -140,8 +145,9 @@
|
||||
var/C = target.loc //why are these backwards? we may never know -Pete
|
||||
if(do_after_cooldown(target))
|
||||
if(T == chassis.loc && src == chassis.selected)
|
||||
if(istype(target, /turf/simulated/wall/r_wall))
|
||||
if(do_after_cooldown(target))//To slow down how fast mechs can drill through the station
|
||||
if(istype(target, /turf/simulated/wall))
|
||||
var/turf/simulated/wall/W = target
|
||||
if(!W.reinf_material || do_after_cooldown(target))//To slow down how fast mechs can drill through the station
|
||||
log_message("Drilled through [target]")
|
||||
target.ex_act(3)
|
||||
else if(istype(target, /turf/simulated/mineral))
|
||||
@@ -255,7 +261,7 @@
|
||||
energy_drain = 250
|
||||
range = MELEE|RANGED
|
||||
construction_time = 1200
|
||||
construction_cost = list("metal"=30000,"phoron"=25000,"silver"=20000,"gold"=20000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=30000,"phoron"=25000,"silver"=20000,"gold"=20000)
|
||||
var/mode = 0 //0 - deconstruct, 1 - wall or floor, 2 - airlock.
|
||||
var/disabled = 0 //malf
|
||||
|
||||
@@ -505,7 +511,7 @@
|
||||
equip_cooldown = 10
|
||||
energy_drain = 50
|
||||
range = 0
|
||||
construction_cost = list("metal"=20000,"silver"=5000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"silver"=5000)
|
||||
var/deflect_coeff = 1.15
|
||||
var/damage_coeff = 0.8
|
||||
|
||||
@@ -555,7 +561,7 @@
|
||||
equip_cooldown = 10
|
||||
energy_drain = 50
|
||||
range = 0
|
||||
construction_cost = list("metal"=20000,"gold"=5000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"gold"=5000)
|
||||
var/deflect_coeff = 1.15
|
||||
var/damage_coeff = 0.8
|
||||
|
||||
@@ -626,7 +632,7 @@
|
||||
equip_cooldown = 20
|
||||
energy_drain = 100
|
||||
range = 0
|
||||
construction_cost = list("metal"=10000,"gold"=1000,"silver"=2000,"glass"=5000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=10000,"gold"=1000,"silver"=2000,"glass"=5000)
|
||||
var/health_boost = 2
|
||||
var/datum/global_iterator/pr_repair_droid
|
||||
var/icon/droid_overlay
|
||||
@@ -721,7 +727,7 @@
|
||||
equip_cooldown = 10
|
||||
energy_drain = 0
|
||||
range = 0
|
||||
construction_cost = list("metal"=10000,"gold"=2000,"silver"=3000,"glass"=2000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=10000,"gold"=2000,"silver"=3000,"glass"=2000)
|
||||
var/datum/global_iterator/pr_energy_relay
|
||||
var/coeff = 100
|
||||
var/list/use_channels = list(EQUIP,ENVIRON,LIGHT)
|
||||
@@ -838,7 +844,7 @@
|
||||
equip_cooldown = 10
|
||||
energy_drain = 0
|
||||
range = MELEE
|
||||
construction_cost = list("metal"=10000,"silver"=500,"glass"=1000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=10000,"silver"=500,"glass"=1000)
|
||||
var/datum/global_iterator/pr_mech_generator
|
||||
var/coeff = 100
|
||||
var/obj/item/stack/sheet/fuel
|
||||
@@ -978,7 +984,7 @@
|
||||
desc = "Generates power using uranium. Pollutes the environment."
|
||||
icon_state = "tesla"
|
||||
origin_tech = "powerstorage=3;engineering=3"
|
||||
construction_cost = list("metal"=10000,"silver"=500,"glass"=1000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=10000,"silver"=500,"glass"=1000)
|
||||
max_fuel = 50000
|
||||
fuel_per_cycle_idle = 10
|
||||
fuel_per_cycle_active = 30
|
||||
@@ -1089,7 +1095,7 @@
|
||||
origin_tech = "engineering=1;biotech=1"
|
||||
energy_drain = 10
|
||||
range = MELEE
|
||||
construction_cost = list("metal"=5000,"glass"=5000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=5000,"glass"=5000)
|
||||
reliability = 1000
|
||||
equip_cooldown = 20
|
||||
var/mob/living/carbon/occupant = null
|
||||
|
||||
@@ -274,7 +274,7 @@
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang//Because I am a heartless bastard -Sieve
|
||||
name = "\improper SOP-6 grenade launcher"
|
||||
projectile = /obj/item/weapon/grenade/flashbang/clusterbang
|
||||
construction_cost = list("metal"=20000,"gold"=6000,"uranium"=6000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"gold"=6000,"uranium"=6000)
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang/limited/get_equip_info()//Limited version of the clusterbang launcher that can't reload
|
||||
return "<span style=\"color:[equip_ready?"#0f0":"#f00"];\">*</span> [chassis.selected==src?"<b>":"<a href='?src=\ref[chassis];select_equip=\ref[src]'>"][src.name][chassis.selected==src?"</b>":"</a>"]\[[src.projectiles]\]"
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
var/time_coeff = 1.5 //can be upgraded with research
|
||||
var/resource_coeff = 1.5 //can be upgraded with research
|
||||
var/list/resources = list(
|
||||
"metal"=0,
|
||||
DEFAULT_WALL_MATERIAL=0,
|
||||
"glass"=0,
|
||||
"gold"=0,
|
||||
"silver"=0,
|
||||
@@ -719,7 +719,7 @@
|
||||
/obj/machinery/mecha_part_fabricator/proc/remove_material(var/mat_string, var/amount)
|
||||
var/type
|
||||
switch(mat_string)
|
||||
if("metal")
|
||||
if(DEFAULT_WALL_MATERIAL)
|
||||
type = /obj/item/stack/sheet/metal
|
||||
if("glass")
|
||||
type = /obj/item/stack/sheet/glass
|
||||
@@ -774,9 +774,9 @@
|
||||
if(I.reliability != 100 && crit_fail)
|
||||
I.crit_fail = 1
|
||||
I.loc = src.loc
|
||||
if(src.resources["metal"] >= 3750)
|
||||
if(src.resources[DEFAULT_WALL_MATERIAL] >= 3750)
|
||||
var/obj/item/stack/sheet/metal/G = new /obj/item/stack/sheet/metal(src.loc)
|
||||
G.amount = round(src.resources["metal"] / G.perunit)
|
||||
G.amount = round(src.resources[DEFAULT_WALL_MATERIAL] / G.perunit)
|
||||
if(src.resources["glass"] >= 3750)
|
||||
var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(src.loc)
|
||||
G.amount = round(src.resources["glass"] / G.perunit)
|
||||
@@ -816,7 +816,7 @@
|
||||
if(/obj/item/stack/sheet/mineral/phoron)
|
||||
material = "phoron"
|
||||
if(/obj/item/stack/sheet/metal)
|
||||
material = "metal"
|
||||
material = DEFAULT_WALL_MATERIAL
|
||||
if(/obj/item/stack/sheet/glass)
|
||||
material = "glass"
|
||||
if(/obj/item/stack/sheet/mineral/uranium)
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
icon_state = "motion2"
|
||||
origin_tech = "programming=2;magnets=2"
|
||||
construction_time = 50
|
||||
construction_cost = list("metal"=500)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=500)
|
||||
|
||||
proc/get_mecha_info()
|
||||
if(!in_mecha())
|
||||
|
||||
@@ -12,14 +12,14 @@
|
||||
flags = CONDUCT
|
||||
origin_tech = "programming=2;materials=2"
|
||||
var/construction_time = 100
|
||||
var/list/construction_cost = list("metal"=20000,"glass"=5000)
|
||||
var/list/construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"glass"=5000)
|
||||
|
||||
|
||||
/obj/item/mecha_parts/chassis
|
||||
name="Mecha Chassis"
|
||||
icon_state = "backbone"
|
||||
var/datum/construction/construct
|
||||
construction_cost = list("metal"=20000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=20000)
|
||||
flags = CONDUCT
|
||||
|
||||
attackby(obj/item/W as obj, mob/user as mob)
|
||||
@@ -45,7 +45,7 @@
|
||||
icon_state = "ripley_harness"
|
||||
origin_tech = "programming=2;materials=2;biotech=2;engineering=2"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=40000,"glass"=15000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=40000,"glass"=15000)
|
||||
|
||||
/obj/item/mecha_parts/part/ripley_left_arm
|
||||
name="Ripley Left Arm"
|
||||
@@ -53,7 +53,7 @@
|
||||
icon_state = "ripley_l_arm"
|
||||
origin_tech = "programming=2;materials=2;engineering=2"
|
||||
construction_time = 150
|
||||
construction_cost = list("metal"=25000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=25000)
|
||||
|
||||
/obj/item/mecha_parts/part/ripley_right_arm
|
||||
name="Ripley Right Arm"
|
||||
@@ -61,7 +61,7 @@
|
||||
icon_state = "ripley_r_arm"
|
||||
origin_tech = "programming=2;materials=2;engineering=2"
|
||||
construction_time = 150
|
||||
construction_cost = list("metal"=25000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=25000)
|
||||
|
||||
/obj/item/mecha_parts/part/ripley_left_leg
|
||||
name="Ripley Left Leg"
|
||||
@@ -69,7 +69,7 @@
|
||||
icon_state = "ripley_l_leg"
|
||||
origin_tech = "programming=2;materials=2;engineering=2"
|
||||
construction_time = 150
|
||||
construction_cost = list("metal"=30000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=30000)
|
||||
|
||||
/obj/item/mecha_parts/part/ripley_right_leg
|
||||
name="Ripley Right Leg"
|
||||
@@ -77,13 +77,13 @@
|
||||
icon_state = "ripley_r_leg"
|
||||
origin_tech = "programming=2;materials=2;engineering=2"
|
||||
construction_time = 150
|
||||
construction_cost = list("metal"=30000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=30000)
|
||||
|
||||
///////// Gygax
|
||||
|
||||
/obj/item/mecha_parts/chassis/gygax
|
||||
name = "Gygax Chassis"
|
||||
construction_cost = list("metal"=25000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=25000)
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -95,7 +95,7 @@
|
||||
icon_state = "gygax_harness"
|
||||
origin_tech = "programming=2;materials=2;biotech=3;engineering=3"
|
||||
construction_time = 300
|
||||
construction_cost = list("metal"=50000,"glass"=20000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=50000,"glass"=20000)
|
||||
|
||||
/obj/item/mecha_parts/part/gygax_head
|
||||
name="Gygax Head"
|
||||
@@ -103,7 +103,7 @@
|
||||
icon_state = "gygax_head"
|
||||
origin_tech = "programming=2;materials=2;magnets=3;engineering=3"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=20000,"glass"=10000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"glass"=10000)
|
||||
|
||||
/obj/item/mecha_parts/part/gygax_left_arm
|
||||
name="Gygax Left Arm"
|
||||
@@ -111,7 +111,7 @@
|
||||
icon_state = "gygax_l_arm"
|
||||
origin_tech = "programming=2;materials=2;engineering=3"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=30000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=30000)
|
||||
|
||||
/obj/item/mecha_parts/part/gygax_right_arm
|
||||
name="Gygax Right Arm"
|
||||
@@ -119,35 +119,35 @@
|
||||
icon_state = "gygax_r_arm"
|
||||
origin_tech = "programming=2;materials=2;engineering=3"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=30000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=30000)
|
||||
|
||||
/obj/item/mecha_parts/part/gygax_left_leg
|
||||
name="Gygax Left Leg"
|
||||
icon_state = "gygax_l_leg"
|
||||
origin_tech = "programming=2;materials=2;engineering=3"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=35000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=35000)
|
||||
|
||||
/obj/item/mecha_parts/part/gygax_right_leg
|
||||
name="Gygax Right Leg"
|
||||
icon_state = "gygax_r_leg"
|
||||
origin_tech = "programming=2;materials=2;engineering=3"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=35000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=35000)
|
||||
|
||||
/obj/item/mecha_parts/part/gygax_armour
|
||||
name="Gygax Armour Plates"
|
||||
icon_state = "gygax_armour"
|
||||
origin_tech = "materials=6;combat=4;engineering=5"
|
||||
construction_time = 600
|
||||
construction_cost = list("metal"=50000,"diamond"=10000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=50000,"diamond"=10000)
|
||||
|
||||
|
||||
//////////// Durand
|
||||
|
||||
/obj/item/mecha_parts/chassis/durand
|
||||
name = "Durand Chassis"
|
||||
construction_cost = list("metal"=25000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=25000)
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -158,49 +158,49 @@
|
||||
icon_state = "durand_harness"
|
||||
origin_tech = "programming=2;materials=3;biotech=3;engineering=3"
|
||||
construction_time = 300
|
||||
construction_cost = list("metal"=55000,"glass"=20000,"silver"=10000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=55000,"glass"=20000,"silver"=10000)
|
||||
|
||||
/obj/item/mecha_parts/part/durand_head
|
||||
name="Durand Head"
|
||||
icon_state = "durand_head"
|
||||
origin_tech = "programming=2;materials=3;magnets=3;engineering=3"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=25000,"glass"=10000,"silver"=3000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=25000,"glass"=10000,"silver"=3000)
|
||||
|
||||
/obj/item/mecha_parts/part/durand_left_arm
|
||||
name="Durand Left Arm"
|
||||
icon_state = "durand_l_arm"
|
||||
origin_tech = "programming=2;materials=3;engineering=3"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=35000,"silver"=3000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=35000,"silver"=3000)
|
||||
|
||||
/obj/item/mecha_parts/part/durand_right_arm
|
||||
name="Durand Right Arm"
|
||||
icon_state = "durand_r_arm"
|
||||
origin_tech = "programming=2;materials=3;engineering=3"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=35000,"silver"=3000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=35000,"silver"=3000)
|
||||
|
||||
/obj/item/mecha_parts/part/durand_left_leg
|
||||
name="Durand Left Leg"
|
||||
icon_state = "durand_l_leg"
|
||||
origin_tech = "programming=2;materials=3;engineering=3"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=40000,"silver"=3000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=40000,"silver"=3000)
|
||||
|
||||
/obj/item/mecha_parts/part/durand_right_leg
|
||||
name="Durand Right Leg"
|
||||
icon_state = "durand_r_leg"
|
||||
origin_tech = "programming=2;materials=3;engineering=3"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=40000,"silver"=3000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=40000,"silver"=3000)
|
||||
|
||||
/obj/item/mecha_parts/part/durand_armour
|
||||
name="Durand Armour Plates"
|
||||
icon_state = "durand_armour"
|
||||
origin_tech = "materials=5;combat=4;engineering=5"
|
||||
construction_time = 600
|
||||
construction_cost = list("metal"=50000,"uranium"=10000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=50000,"uranium"=10000)
|
||||
|
||||
|
||||
|
||||
@@ -248,42 +248,42 @@
|
||||
name="Phazon Torso"
|
||||
icon_state = "phazon_harness"
|
||||
construction_time = 300
|
||||
construction_cost = list("metal"=35000,"glass"=10000,"phoron"=20000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=35000,"glass"=10000,"phoron"=20000)
|
||||
origin_tech = "programming=5;materials=7;bluespace=6;powerstorage=6"
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_head
|
||||
name="Phazon Head"
|
||||
icon_state = "phazon_head"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=15000,"glass"=5000,"phoron"=10000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=15000,"glass"=5000,"phoron"=10000)
|
||||
origin_tech = "programming=4;materials=5;magnets=6"
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_left_arm
|
||||
name="Phazon Left Arm"
|
||||
icon_state = "phazon_l_arm"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=20000,"phoron"=10000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"phoron"=10000)
|
||||
origin_tech = "materials=5;bluespace=2;magnets=2"
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_right_arm
|
||||
name="Phazon Right Arm"
|
||||
icon_state = "phazon_r_arm"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=20000,"phoron"=10000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"phoron"=10000)
|
||||
origin_tech = "materials=5;bluespace=2;magnets=2"
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_left_leg
|
||||
name="Phazon Left Leg"
|
||||
icon_state = "phazon_l_leg"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=20000,"phoron"=10000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"phoron"=10000)
|
||||
origin_tech = "materials=5;bluespace=3;magnets=3"
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_right_leg
|
||||
name="Phazon Right Leg"
|
||||
icon_state = "phazon_r_leg"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=20000,"phoron"=10000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"phoron"=10000)
|
||||
origin_tech = "materials=5;bluespace=3;magnets=3"
|
||||
|
||||
///////// Odysseus
|
||||
@@ -300,7 +300,7 @@
|
||||
name="Odysseus Head"
|
||||
icon_state = "odysseus_head"
|
||||
construction_time = 100
|
||||
construction_cost = list("metal"=2000,"glass"=10000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=2000,"glass"=10000)
|
||||
origin_tech = "programming=3;materials=2"
|
||||
|
||||
/obj/item/mecha_parts/part/odysseus_torso
|
||||
@@ -309,7 +309,7 @@
|
||||
icon_state = "odysseus_torso"
|
||||
origin_tech = "programming=2;materials=2;biotech=2;engineering=2"
|
||||
construction_time = 180
|
||||
construction_cost = list("metal"=25000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=25000)
|
||||
|
||||
/obj/item/mecha_parts/part/odysseus_left_arm
|
||||
name="Odysseus Left Arm"
|
||||
@@ -317,7 +317,7 @@
|
||||
icon_state = "odysseus_l_arm"
|
||||
origin_tech = "programming=2;materials=2;engineering=2"
|
||||
construction_time = 120
|
||||
construction_cost = list("metal"=10000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=10000)
|
||||
|
||||
/obj/item/mecha_parts/part/odysseus_right_arm
|
||||
name="Odysseus Right Arm"
|
||||
@@ -325,7 +325,7 @@
|
||||
icon_state = "odysseus_r_arm"
|
||||
origin_tech = "programming=2;materials=2;engineering=2"
|
||||
construction_time = 120
|
||||
construction_cost = list("metal"=10000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=10000)
|
||||
|
||||
/obj/item/mecha_parts/part/odysseus_left_leg
|
||||
name="Odysseus Left Leg"
|
||||
@@ -333,7 +333,7 @@
|
||||
icon_state = "odysseus_l_leg"
|
||||
origin_tech = "programming=2;materials=2;engineering=2"
|
||||
construction_time = 130
|
||||
construction_cost = list("metal"=15000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=15000)
|
||||
|
||||
/obj/item/mecha_parts/part/odysseus_right_leg
|
||||
name="Odysseus Right Leg"
|
||||
@@ -341,11 +341,11 @@
|
||||
icon_state = "odysseus_r_leg"
|
||||
origin_tech = "programming=2;materials=2;engineering=2"
|
||||
construction_time = 130
|
||||
construction_cost = list("metal"=15000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=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)*/
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=15000)*/
|
||||
|
||||
@@ -38,3 +38,17 @@
|
||||
icon = 'icons/turf/space.dmi'
|
||||
icon_state = "bluespacify"
|
||||
layer = 10
|
||||
|
||||
/obj/effect/overlay/wallrot
|
||||
name = "wallrot"
|
||||
desc = "Ick..."
|
||||
icon = 'icons/effects/wallrot.dmi'
|
||||
anchored = 1
|
||||
density = 1
|
||||
layer = 5
|
||||
mouse_opacity = 0
|
||||
|
||||
/obj/effect/overlay/wallrot/New()
|
||||
..()
|
||||
pixel_x += rand(-10, 10)
|
||||
pixel_y += rand(-10, 10)
|
||||
|
||||
@@ -88,9 +88,6 @@ proc/explosion_rec(turf/epicenter, power)
|
||||
/turf/simulated/wall
|
||||
explosion_resistance = 10
|
||||
|
||||
/turf/simulated/wall/r_wall
|
||||
explosion_resistance = 25
|
||||
|
||||
//Code-wise, a safe value for power is something up to ~25 or ~30.. This does quite a bit of damage to the station.
|
||||
//direction is the direction that the spread took to come to this tile. So it is pointing in the main blast direction - meaning where this tile should spread most of it's force.
|
||||
/turf/proc/explosion_spread(power, direction)
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
var/hitsound = null
|
||||
var/w_class = 3.0
|
||||
var/slot_flags = 0 //This is used to determine on which slots an item can fit.
|
||||
var/no_attack_log = 0 //If it's an item we don't want to log attack_logs with, set this to 1
|
||||
pass_flags = PASSTABLE
|
||||
pressure_resistance = 5
|
||||
// causeerrorheresoifixthis
|
||||
@@ -599,4 +600,4 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
|
||||
if(!cannotzoom)
|
||||
usr.visible_message("[zoomdevicename ? "[usr] looks up from the [src.name]" : "[usr] lowers the [src.name]"].")
|
||||
|
||||
return
|
||||
return
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
icon_broken = "ashtray_bork_bl"
|
||||
max_butts = 14
|
||||
health = 24.0
|
||||
matter = list("metal" = 30,"glass" = 30)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 30)
|
||||
empty_desc = "Cheap plastic ashtray."
|
||||
throwforce = 3.0
|
||||
die()
|
||||
@@ -102,7 +102,7 @@
|
||||
icon_broken = "ashtray_bork_br"
|
||||
max_butts = 10
|
||||
health = 72.0
|
||||
matter = list("metal" = 80)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 80)
|
||||
empty_desc = "Massive bronze ashtray."
|
||||
throwforce = 10.0
|
||||
|
||||
|
||||
@@ -201,10 +201,6 @@ move an amendment</a> to the drawing.</p>
|
||||
return BORDER_BETWEEN
|
||||
if (locate(/obj/machinery/door) in T2)
|
||||
return BORDER_2NDTILE
|
||||
if (locate(/obj/structure/falsewall) in T2)
|
||||
return BORDER_2NDTILE
|
||||
if (locate(/obj/structure/falserwall) in T2)
|
||||
return BORDER_2NDTILE
|
||||
|
||||
return BORDER_NONE
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
throw_speed = 3
|
||||
desc = "You can use this on airlocks or APCs to try to hack them without cutting wires."
|
||||
|
||||
matter = list("metal" = 50,"glass" = 20)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 20)
|
||||
|
||||
origin_tech = "magnets=1;engineering=1"
|
||||
var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage
|
||||
|
||||
@@ -194,7 +194,7 @@
|
||||
desc = "When a problem arises, SCIENCE is the solution."
|
||||
icon_state = "sflash"
|
||||
origin_tech = "magnets=2;combat=1"
|
||||
var/construction_cost = list("metal"=750,"glass"=750)
|
||||
var/construction_cost = list(DEFAULT_WALL_MATERIAL=750,"glass"=750)
|
||||
var/construction_time=100
|
||||
|
||||
/obj/item/device/flash/synthetic/attack(mob/living/M as mob, mob/user as mob)
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
matter = list("metal" = 50,"glass" = 20)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 20)
|
||||
|
||||
icon_action_button = "action_flashlight"
|
||||
var/on = 0
|
||||
@@ -119,7 +119,7 @@
|
||||
icon_state = "lampgreen"
|
||||
item_state = "lampgreen"
|
||||
brightness_on = 5
|
||||
|
||||
light_color = "#FFC58F"
|
||||
|
||||
/obj/item/device/flashlight/lamp/verb/toggle_light()
|
||||
set name = "Toggle light"
|
||||
@@ -136,6 +136,7 @@
|
||||
desc = "A red Nanotrasen issued flare. There are instructions on the side, it reads 'pull cord, make light'."
|
||||
w_class = 2.0
|
||||
brightness_on = 7 // Pretty bright.
|
||||
light_color = "#e58775"
|
||||
icon_state = "flare"
|
||||
item_state = "flare"
|
||||
icon_action_button = null //just pull it manually, neckbeard.
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
throw_speed = 3
|
||||
desc = "You can use this on airlocks or APCs to try to hack them without cutting wires."
|
||||
|
||||
matter = list("metal" = 50,"glass" = 20)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 20)
|
||||
|
||||
origin_tech = "magnets=1;engineering=1"
|
||||
var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage
|
||||
|
||||
@@ -296,6 +296,12 @@
|
||||
if(7) src.overlays += "pai-sad"
|
||||
if(8) src.overlays += "pai-angry"
|
||||
if(9) src.overlays += "pai-what"
|
||||
if(10) src.overlays += "pai-neutral"
|
||||
if(11) src.overlays += "pai-silly"
|
||||
if(12) src.overlays += "pai-nose"
|
||||
if(13) src.overlays += "pai-smirk"
|
||||
if(14) src.overlays += "pai-exclamation"
|
||||
if(15) src.overlays += "pai-question"
|
||||
current_emotion = emotion
|
||||
|
||||
/obj/item/device/paicard/proc/alertUpdate()
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
throw_speed = 1
|
||||
throw_range = 2
|
||||
|
||||
matter = list("metal" = 750,"waste" = 750)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 750,"waste" = 750)
|
||||
|
||||
origin_tech = "powerstorage=3;syndicate=5"
|
||||
var/drain_rate = 1500000 // amount of power to drain per tick
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
slot_flags = SLOT_BACK
|
||||
w_class = 5.0
|
||||
|
||||
matter = list("metal" = 10000,"glass" = 2500)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 10000,"glass" = 2500)
|
||||
|
||||
var/code = 2
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
var/radio_desc = ""
|
||||
icon_state = "headset"
|
||||
item_state = "headset"
|
||||
matter = list("metal" = 75)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 75)
|
||||
subspace_transmission = 1
|
||||
canhear_range = 0 // can't hear headsets from very far away
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
throw_range = 9
|
||||
w_class = 2
|
||||
|
||||
matter = list("glass" = 25,"metal" = 75)
|
||||
matter = list("glass" = 25,DEFAULT_WALL_MATERIAL = 75)
|
||||
var/const/FREQ_LISTENING = 1
|
||||
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ REAGENT SCANNER
|
||||
w_class = 2
|
||||
item_state = "electronic"
|
||||
|
||||
matter = list("metal" = 150)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 150)
|
||||
|
||||
origin_tech = "magnets=1;engineering=1"
|
||||
|
||||
@@ -73,7 +73,7 @@ REAGENT SCANNER
|
||||
w_class = 2.0
|
||||
throw_speed = 5
|
||||
throw_range = 10
|
||||
matter = list("metal" = 200)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 200)
|
||||
origin_tech = "magnets=1;biotech=1"
|
||||
var/mode = 1;
|
||||
|
||||
@@ -238,7 +238,7 @@ REAGENT SCANNER
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
|
||||
matter = list("metal" = 30,"glass" = 20)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 20)
|
||||
|
||||
origin_tech = "magnets=1;engineering=1"
|
||||
|
||||
@@ -285,7 +285,7 @@ REAGENT SCANNER
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
|
||||
matter = list("metal" = 30,"glass" = 20)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 20)
|
||||
|
||||
origin_tech = "magnets=2;biotech=2"
|
||||
var/details = 0
|
||||
@@ -358,7 +358,7 @@ REAGENT SCANNER
|
||||
throwforce = 5
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
matter = list("metal" = 30,"glass" = 20)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 20)
|
||||
|
||||
origin_tech = "magnets=2;biotech=2"
|
||||
var/details = 0
|
||||
@@ -417,7 +417,7 @@ REAGENT SCANNER
|
||||
throwforce = 0
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
matter = list("metal" = 30,"glass" = 20)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 20)
|
||||
|
||||
/obj/item/device/slime_scanner/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
if (!isslime(M))
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
item_state = "analyzer"
|
||||
w_class = 2.0
|
||||
|
||||
matter = list("metal" = 60,"glass" = 30)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 60,"glass" = 30)
|
||||
|
||||
var/emagged = 0.0
|
||||
var/recording = 0.0
|
||||
|
||||
@@ -6,33 +6,53 @@
|
||||
w_class = 1.0
|
||||
flags = CONDUCT
|
||||
|
||||
var/use_message = "Halt! Security!"
|
||||
var/spamcheck = 0
|
||||
var/emagged = 0
|
||||
var/insults = 0//just in case
|
||||
var/insults
|
||||
|
||||
/obj/item/device/hailer/attack_self(mob/living/carbon/user as mob)
|
||||
/obj/item/device/hailer/verb/set_message()
|
||||
set name = "Set Hailer Message"
|
||||
set category = "Object"
|
||||
set desc = "Alter the message shouted by your hailer."
|
||||
|
||||
if(!isnull(insults))
|
||||
usr << "The hailer is fried. The tiny input screen just shows a waving ASCII penis."
|
||||
return
|
||||
|
||||
var/new_message = input(usr, "Please enter new message (leave blank to reset).") as text
|
||||
if(!new_message || new_message == "")
|
||||
use_message = "Halt! Security!"
|
||||
else
|
||||
use_message = capitalize(copytext(sanitize(new_message), 1, MAX_MESSAGE_LEN))
|
||||
|
||||
usr << "You configure the hailer to shout \"[use_message]\"."
|
||||
/
|
||||
obj/item/device/hailer/attack_self(mob/living/carbon/user as mob)
|
||||
if (spamcheck)
|
||||
return
|
||||
|
||||
if(emagged)
|
||||
if(insults >= 1)
|
||||
playsound(get_turf(src), 'sound/voice/binsult.ogg', 100, 1, vary = 0)//hueheuheuheuheuheuhe
|
||||
user.show_message("<span class='warning'>[user]'s [name] gurgles, \"FUCK YOUR CUNT YOU SHIT EATING CUNT TILL YOU ARE A MASS EATING SHIT CUNT. EAT PENISES IN YOUR FUCK FACE AND SHIT OUT ABORTIONS TO FUCK UP SHIT IN YOUR ASS YOU COCK FUCK SHIT MONKEY FROM THE DEPTHS OF SHIT\"</span>",2) //It's a hearable message silly!
|
||||
if(isnull(insults))
|
||||
playsound(get_turf(src), 'sound/voice/halt.ogg', 100, 1, vary = 0)
|
||||
user.show_message("<span class='warning'>[user]'s [name] rasps, \"[use_message]\"</span>",1)
|
||||
else
|
||||
if(insults > 0)
|
||||
playsound(get_turf(src), 'sound/voice/binsult.ogg', 100, 1, vary = 0)
|
||||
// Yes, it used to show the transcription of the sound clip. That was a) inaccurate b) immature as shit.
|
||||
user.show_message("<span class='warning'>[user]'s [name] gurgles something indecipherable and deeply offensive.</span>")
|
||||
insults--
|
||||
else
|
||||
user << "\red *BZZZZcuntZZZZT*"
|
||||
else
|
||||
playsound(get_turf(src), 'sound/voice/halt.ogg', 100, 1, vary = 0)
|
||||
user.show_message("<span class='warning'>[user]'s [name] rasps, \"Halt! Security!\"</span>",1)
|
||||
user << "<span class='danger'>*BZZZZZZZZT*</span>"
|
||||
|
||||
spamcheck = 1
|
||||
spawn(20)
|
||||
spamcheck = 0
|
||||
|
||||
/obj/item/device/hailer/attackby(obj/item/I, mob/user)
|
||||
if(istype(I, /obj/item/weapon/card/emag) && !emagged)
|
||||
user << "\red You overload \the [src]'s voice synthesizer."
|
||||
emagged = 1
|
||||
insults = rand(1, 3)//to prevent dickflooding
|
||||
return
|
||||
return
|
||||
if(istype(I, /obj/item/weapon/card/emag))
|
||||
if(isnull(insults))
|
||||
user << "<span class='danger'>You overload \the [src]'s voice synthesizer.</span>"
|
||||
insults = rand(1, 3)//to prevent dickflooding
|
||||
else
|
||||
user << "The hailer is fried. You can't even fit the sequencer into the input slot."
|
||||
else
|
||||
return .. ()
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
var/construction_time = 100
|
||||
var/list/construction_cost = list("metal"=20000,"glass"=5000)
|
||||
var/list/construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"glass"=5000)
|
||||
var/list/part = null // Order of args is important for installing robolimbs.
|
||||
var/sabotaged = 0 //Emagging limbs can have repercussions when installed as prosthetics.
|
||||
var/model_info
|
||||
@@ -33,7 +33,7 @@
|
||||
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
|
||||
icon_state = "l_arm"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=18000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=18000)
|
||||
part = list("l_arm","l_hand")
|
||||
model_info = 1
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
|
||||
icon_state = "r_arm"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=18000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=18000)
|
||||
part = list("r_arm","r_hand")
|
||||
model_info = 1
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
|
||||
icon_state = "l_leg"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=15000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=15000)
|
||||
part = list("l_leg","l_foot")
|
||||
model_info = 1
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
|
||||
icon_state = "r_leg"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=15000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=15000)
|
||||
part = list("r_leg","r_foot")
|
||||
model_info = 1
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
desc = "A heavily reinforced case containing cyborg logic boards, with space for a standard power cell."
|
||||
icon_state = "chest"
|
||||
construction_time = 350
|
||||
construction_cost = list("metal"=40000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=40000)
|
||||
var/wires = 0.0
|
||||
var/obj/item/weapon/cell/cell = null
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
desc = "A standard reinforced braincase, with spine-plugged neural socket and sensor gimbals."
|
||||
icon_state = "head"
|
||||
construction_time = 350
|
||||
construction_cost = list("metal"=25000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=25000)
|
||||
var/obj/item/device/flash/flash1 = null
|
||||
var/obj/item/device/flash/flash2 = null
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
desc = "A complex metal backbone with standard limb sockets and pseudomuscle anchors."
|
||||
icon_state = "robo_suit"
|
||||
construction_time = 500
|
||||
construction_cost = list("metal"=50000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=50000)
|
||||
var/obj/item/robot_parts/l_arm/l_arm = null
|
||||
var/obj/item/robot_parts/r_arm/r_arm = null
|
||||
var/obj/item/robot_parts/l_leg/l_leg = null
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
icon = 'icons/obj/module.dmi'
|
||||
icon_state = "cyborg_upgrade"
|
||||
var/construction_time = 120
|
||||
var/construction_cost = list("metal"=10000)
|
||||
var/construction_cost = list(DEFAULT_WALL_MATERIAL=10000)
|
||||
var/locked = 0
|
||||
var/require_module = 0
|
||||
var/installed = 0
|
||||
@@ -43,7 +43,7 @@
|
||||
name = "robot reclassification board"
|
||||
desc = "Used to rename a cyborg."
|
||||
icon_state = "cyborg_upgrade1"
|
||||
construction_cost = list("metal"=35000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=35000)
|
||||
var/heldname = "default name"
|
||||
|
||||
/obj/item/borg/upgrade/rename/attack_self(mob/user as mob)
|
||||
@@ -61,7 +61,7 @@
|
||||
/obj/item/borg/upgrade/restart
|
||||
name = "robot emergency restart module"
|
||||
desc = "Used to force a restart of a disabled-but-repaired robot, bringing it back online."
|
||||
construction_cost = list("metal"=60000 , "glass"=5000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=60000 , "glass"=5000)
|
||||
icon_state = "cyborg_upgrade1"
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
/obj/item/borg/upgrade/vtec
|
||||
name = "robotic VTEC Module"
|
||||
desc = "Used to kick in a robot's VTEC systems, increasing their speed."
|
||||
construction_cost = list("metal"=80000 , "glass"=6000 , "gold"= 5000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=80000 , "glass"=6000 , "gold"= 5000)
|
||||
icon_state = "cyborg_upgrade2"
|
||||
require_module = 1
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
/obj/item/borg/upgrade/tasercooler
|
||||
name = "robotic Rapid Taser Cooling Module"
|
||||
desc = "Used to cool a mounted taser, increasing the potential current in it and thus its recharge rate."
|
||||
construction_cost = list("metal"=80000 , "glass"=6000 , "gold"= 2000, "diamond" = 500)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=80000 , "glass"=6000 , "gold"= 2000, "diamond" = 500)
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
|
||||
@@ -137,7 +137,7 @@
|
||||
/obj/item/borg/upgrade/jetpack
|
||||
name = "mining robot jetpack"
|
||||
desc = "A carbon dioxide jetpack suitable for low-gravity mining operations."
|
||||
construction_cost = list("metal"=10000,"phoron"=15000,"uranium" = 20000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=10000,"phoron"=15000,"uranium" = 20000)
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
/obj/item/borg/upgrade/syndicate/
|
||||
name = "illegal equipment module"
|
||||
desc = "Unlocks the hidden, deadlier functions of a robot"
|
||||
construction_cost = list("metal"=10000,"glass"=15000,"diamond" = 10000)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=10000,"glass"=15000,"diamond" = 10000)
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
throwforce = 15.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
matter = list("metal" = 1875)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1875)
|
||||
max_amount = 60
|
||||
attack_verb = list("hit", "bludgeoned", "whacked")
|
||||
|
||||
|
||||
@@ -144,7 +144,7 @@
|
||||
singular_name = "reinforced glass sheet"
|
||||
icon_state = "sheet-rglass"
|
||||
|
||||
matter = list("metal" = 1875,"glass" = 3750)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1875,"glass" = 3750)
|
||||
origin_tech = "materials=2"
|
||||
|
||||
created_window = /obj/structure/window/reinforced
|
||||
@@ -200,7 +200,7 @@
|
||||
desc = "Phoron glass which has been reinforced with metal rods."
|
||||
singular_name = "reinforced phoron glass sheet"
|
||||
icon_state = "sheet-phoronrglass"
|
||||
matter = list("glass" = 7500,"metal" = 1875)
|
||||
matter = list("glass" = 7500,DEFAULT_WALL_MATERIAL = 1875)
|
||||
|
||||
origin_tech = "materials=4;phorontech=2"
|
||||
created_window = /obj/structure/window/phoronreinforced
|
||||
|
||||
@@ -69,29 +69,30 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
|
||||
), 4), \
|
||||
null, \
|
||||
new/datum/stack_recipe("grenade casing", /obj/item/weapon/grenade/chem_grenade), \
|
||||
new/datum/stack_recipe("light fixture frame", /obj/item/light_fixture_frame, 2), \
|
||||
new/datum/stack_recipe("small light fixture frame", /obj/item/light_fixture_frame/small, 1), \
|
||||
new/datum/stack_recipe("light fixture frame", /obj/item/frame/light, 2), \
|
||||
new/datum/stack_recipe("small light fixture frame", /obj/item/frame/light/small, 1), \
|
||||
null, \
|
||||
new/datum/stack_recipe("apc frame", /obj/item/apc_frame, 2), \
|
||||
new/datum/stack_recipe("air alarm frame", /obj/item/alarm_frame, 2), \
|
||||
new/datum/stack_recipe("fire alarm frame", /obj/item/firealarm_frame, 2), \
|
||||
new/datum/stack_recipe("air alarm frame", /obj/item/frame/air_alarm, 2), \
|
||||
new/datum/stack_recipe("fire alarm frame", /obj/item/frame/fire_alarm, 2), \
|
||||
null, \
|
||||
new/datum/stack_recipe("knife blade", /obj/item/butterflyblade, 6, time = 20, one_per_turf = 0, on_floor = 1) \
|
||||
)
|
||||
|
||||
/obj/item/stack/sheet/metal
|
||||
name = "metal"
|
||||
desc = "Sheets made out off metal. It has been dubbed Metal Sheets."
|
||||
name = DEFAULT_WALL_MATERIAL
|
||||
desc = "Sheets made out off steel."
|
||||
singular_name = "metal sheet"
|
||||
icon_state = "sheet-metal"
|
||||
matter = list("metal" = 3750)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 3750)
|
||||
throwforce = 14.0
|
||||
flags = CONDUCT
|
||||
origin_tech = "materials=1"
|
||||
sheettype = DEFAULT_WALL_MATERIAL
|
||||
|
||||
/obj/item/stack/sheet/metal/cyborg
|
||||
name = "metal synthesizer"
|
||||
desc = "A device that makes metal sheets."
|
||||
name = "steel synthesizer"
|
||||
desc = "A device that makes steel sheets."
|
||||
gender = NEUTER
|
||||
matter = null
|
||||
uses_charge = 1
|
||||
@@ -109,21 +110,22 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
|
||||
var/global/list/datum/stack_recipe/plasteel_recipes = list ( \
|
||||
new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = 1), \
|
||||
new/datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1), \
|
||||
new/datum/stack_recipe("RUST fuel assembly port frame", /obj/item/rust_fuel_assembly_port_frame, 12, time = 50, one_per_turf = 1), \
|
||||
new/datum/stack_recipe("RUST fuel compressor frame", /obj/item/rust_fuel_compressor_frame, 12, time = 50, one_per_turf = 1), \
|
||||
new/datum/stack_recipe("RUST fuel assembly port frame", /obj/item/frame/rust/assembly, 12, time = 50, one_per_turf = 1), \
|
||||
new/datum/stack_recipe("RUST fuel compressor frame", /obj/item/frame/rust, 12, time = 50, one_per_turf = 1), \
|
||||
new/datum/stack_recipe("knife grip", /obj/item/butterflyhandle, 4, time = 20, one_per_turf = 0, on_floor = 1),
|
||||
)
|
||||
|
||||
/obj/item/stack/sheet/plasteel
|
||||
name = "plasteel"
|
||||
singular_name = "plasteel sheet"
|
||||
desc = "This sheet is an alloy of iron and phoron."
|
||||
desc = "This sheet is an alloy of iron and platinum."
|
||||
icon_state = "sheet-plasteel"
|
||||
item_state = "sheet-metal"
|
||||
matter = list("metal" = 7500)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 7500)
|
||||
throwforce = 15.0
|
||||
flags = CONDUCT
|
||||
origin_tech = "materials=2"
|
||||
sheettype = "plasteel"
|
||||
|
||||
/obj/item/stack/sheet/plasteel/cyborg
|
||||
name = "plasteel synthesizer"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
desc = "Those could work as a pretty decent throwing weapon"
|
||||
icon_state = "tile"
|
||||
force = 6.0
|
||||
matter = list("metal" = 937.5)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 937.5)
|
||||
throwforce = 15.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
|
||||
@@ -146,7 +146,7 @@
|
||||
slot_flags = SLOT_BELT|SLOT_HOLSTER
|
||||
w_class = 3.0
|
||||
|
||||
matter = list("glass" = 10,"metal" = 10)
|
||||
matter = list("glass" = 10,DEFAULT_WALL_MATERIAL = 10)
|
||||
|
||||
attack_verb = list("struck", "pistol whipped", "hit", "bashed")
|
||||
var/bullets = 7.0
|
||||
@@ -201,7 +201,7 @@
|
||||
flags = CONDUCT
|
||||
w_class = 1.0
|
||||
|
||||
matter = list("metal" = 10,"glass" = 10)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 10,"glass" = 10)
|
||||
|
||||
var/amount_left = 7.0
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 3.0
|
||||
matter = list("metal" = 50000)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50000)
|
||||
origin_tech = "engineering=4;materials=2"
|
||||
var/datum/effect/effect/system/spark_spread/spark_system
|
||||
var/stored_matter = 0
|
||||
@@ -105,9 +105,10 @@
|
||||
build_type = "floor"
|
||||
build_turf = /turf/simulated/floor/plating/airless
|
||||
else if(deconstruct && istype(T,/turf/simulated/wall))
|
||||
var/turf/simulated/wall/W = T
|
||||
build_delay = deconstruct ? 50 : 40
|
||||
build_cost = 5
|
||||
build_type = (!canRwall && istype(T,/turf/simulated/wall/r_wall)) ? null : "wall"
|
||||
build_type = (!canRwall && W.reinf_material) ? null : "wall"
|
||||
build_turf = /turf/simulated/floor
|
||||
else if(istype(T,/turf/simulated/floor))
|
||||
build_delay = deconstruct ? 50 : 20
|
||||
@@ -158,7 +159,7 @@
|
||||
density = 0
|
||||
anchored = 0.0
|
||||
origin_tech = "materials=2"
|
||||
matter = list("metal" = 30000,"glass" = 15000)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 30000,"glass" = 15000)
|
||||
|
||||
/obj/item/weapon/rcd/borg
|
||||
canRwall = 1
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
icon_state = "candle1"
|
||||
item_state = "candle1"
|
||||
w_class = 1
|
||||
|
||||
light_color = "#E09D37"
|
||||
var/wax = 2000
|
||||
|
||||
/obj/item/weapon/flame/candle/New()
|
||||
|
||||
@@ -146,10 +146,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
M.update_inv_r_hand(1)
|
||||
var/turf/T = get_turf(src)
|
||||
T.visible_message(flavor_text)
|
||||
set_light(2, 0.25, "#E38F46")
|
||||
processing_objects.Add(src)
|
||||
|
||||
/obj/item/clothing/mask/smokable/proc/die(var/nomessage = 0)
|
||||
var/turf/T = get_turf(src)
|
||||
set_light(0)
|
||||
if (type_butt)
|
||||
var/obj/item/butt = new type_butt(T)
|
||||
transfer_fingerprints_to(butt)
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
var/build_path = null
|
||||
var/board_type = "computer"
|
||||
var/list/req_components = null
|
||||
var/frame_desc = null
|
||||
var/contain_parts = 1
|
||||
|
||||
//Called when the circuitboard is used to contruct a new machine.
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
build_path = "/obj/machinery/biogenerator"
|
||||
board_type = "machine"
|
||||
origin_tech = "programming=2"
|
||||
frame_desc = "Requires 1 Manipulator, and 1 Matter Bin."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 1,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1)
|
||||
@@ -7,7 +7,6 @@
|
||||
build_path = "/obj/machinery/clonepod"
|
||||
board_type = "machine"
|
||||
origin_tech = "programming=3;biotech=3"
|
||||
frame_desc = "Requires 2 Manipulator, 2 Scanning Module, 2 pieces of cable and 1 Console Screen."
|
||||
req_components = list(
|
||||
"/obj/item/stack/cable_coil" = 2,
|
||||
"/obj/item/weapon/stock_parts/scanning_module" = 2,
|
||||
@@ -19,7 +18,6 @@
|
||||
build_path = "/obj/machinery/dna_scannernew"
|
||||
board_type = "machine"
|
||||
origin_tech = "programming=2;biotech=2"
|
||||
frame_desc = "Requires 1 Scanning module, 1 Micro Manipulator, 1 Micro-Laser, 2 pieces of cable and 1 Console Screen."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/scanning_module" = 1,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1,
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
build_path = "/obj/machinery/bluespacerelay"
|
||||
board_type = "machine"
|
||||
origin_tech = "bluespace=4,programming=4"
|
||||
frame_desc = "Requires 30 Cable Coil, 1 Hyperwave Filter and 1 Ansible Crystal, and 2 Micro-Manipulators"
|
||||
req_components = list(
|
||||
"/obj/item/stack/cable_coil" = 30,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
build_path = "/obj/machinery/mining/drill"
|
||||
board_type = "machine"
|
||||
origin_tech = "programming=1;engineering=1"
|
||||
frame_desc = "Requires 1 capacitor, 1 cell, 1 matter bin, and 1 micro laser."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/capacitor" = 1,
|
||||
"/obj/item/weapon/cell" = 1,
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
build_path = "/obj/machinery/power/port_gen/pacman"
|
||||
board_type = "machine"
|
||||
origin_tech = "programming=3;powerstorage=3;phorontech=3;engineering=3"
|
||||
frame_desc = "Requires 1 Matter Bin, 1 Micro-Laser, 2 Pieces of Cable, and 1 Capacitor."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 1,
|
||||
"/obj/item/weapon/stock_parts/micro_laser" = 1,
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
build_path = "/obj/machinery/power/smes/buildable"
|
||||
board_type = "machine"
|
||||
origin_tech = "powerstorage=6;engineering=4"
|
||||
frame_desc = "Requires 1 superconducting magnetic coil and 30 wires."
|
||||
req_components = list("/obj/item/weapon/smes_coil" = 1, "/obj/item/stack/cable_coil" = 30)
|
||||
|
||||
/obj/item/weapon/circuitboard/batteryrack
|
||||
@@ -15,7 +14,6 @@
|
||||
build_path = "/obj/machinery/power/smes/batteryrack"
|
||||
board_type = "machine"
|
||||
origin_tech = "powerstorage=3;engineering=2"
|
||||
frame_desc = "Requires 3 power cells."
|
||||
req_components = list("/obj/item/weapon/cell" = 3)
|
||||
|
||||
/obj/item/weapon/circuitboard/ghettosmes
|
||||
@@ -23,5 +21,4 @@
|
||||
desc = "An APC circuit repurposed into some power storage device controller"
|
||||
build_path = "/obj/machinery/power/smes/batteryrack/makeshift"
|
||||
board_type = "machine"
|
||||
frame_desc = "Requires 3 power cells."
|
||||
req_components = list("/obj/item/weapon/cell" = 3)
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
build_path = "/obj/machinery/recharge_station"
|
||||
board_type = "machine"
|
||||
origin_tech = "programming=3;engineering=3"
|
||||
frame_desc = "Requires 2 Manipulator, 2 Capacitor, 1 Cell, and 5 pieces of cable."
|
||||
req_components = list(
|
||||
"/obj/item/stack/cable_coil" = 5,
|
||||
"/obj/item/weapon/stock_parts/capacitor" = 2,
|
||||
|
||||
@@ -7,7 +7,6 @@ obj/item/weapon/circuitboard/rdserver
|
||||
build_path = "/obj/machinery/r_n_d/server"
|
||||
board_type = "machine"
|
||||
origin_tech = "programming=3"
|
||||
frame_desc = "Requires 2 pieces of cable, and 1 Scanning Module."
|
||||
req_components = list(
|
||||
"/obj/item/stack/cable_coil" = 2,
|
||||
"/obj/item/weapon/stock_parts/scanning_module" = 1)
|
||||
@@ -17,7 +16,6 @@ obj/item/weapon/circuitboard/rdserver
|
||||
build_path = "/obj/machinery/r_n_d/destructive_analyzer"
|
||||
board_type = "machine"
|
||||
origin_tech = "magnets=2;engineering=2;programming=2"
|
||||
frame_desc = "Requires 1 Scanning Module, 1 Micro Manipulator, and 1 Micro-Laser."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/scanning_module" = 1,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1,
|
||||
@@ -28,7 +26,6 @@ obj/item/weapon/circuitboard/rdserver
|
||||
build_path = "/obj/machinery/autolathe"
|
||||
board_type = "machine"
|
||||
origin_tech = "engineering=2;programming=2"
|
||||
frame_desc = "Requires 3 Matter Bins, 1 Micro Manipulator, and 1 Console Screen."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 3,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1,
|
||||
@@ -39,7 +36,6 @@ obj/item/weapon/circuitboard/rdserver
|
||||
build_path = "/obj/machinery/r_n_d/protolathe"
|
||||
board_type = "machine"
|
||||
origin_tech = "engineering=2;programming=2"
|
||||
frame_desc = "Requires 2 Matter Bins, 2 Micro Manipulators, and 2 Beakers."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 2,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
@@ -51,7 +47,6 @@ obj/item/weapon/circuitboard/rdserver
|
||||
build_path = "/obj/machinery/r_n_d/circuit_imprinter"
|
||||
board_type = "machine"
|
||||
origin_tech = "engineering=2;programming=2"
|
||||
frame_desc = "Requires 1 Matter Bin, 1 Micro Manipulator, and 2 Beakers."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 1,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1,
|
||||
@@ -62,7 +57,6 @@ obj/item/weapon/circuitboard/rdserver
|
||||
build_path = "/obj/machinery/mecha_part_fabricator"
|
||||
board_type = "machine"
|
||||
origin_tech = "programming=3;engineering=3"
|
||||
frame_desc = "Requires 2 Matter Bins, 1 Micro Manipulator, 1 Micro-Laser and 1 Console Screen."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 2,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1,
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
board_type = "machine"
|
||||
build_path = "/obj/machinery/shield_gen/external"
|
||||
origin_tech = "bluespace=4;phorontech=3"
|
||||
frame_desc = "Requires 2 Pico Manipulators, 1 Subspace Transmitter, 5 Pieces of cable, 1 Subspace Crystal, 1 Subspace Amplifier and 1 Console Screen."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator/pico" = 2,
|
||||
"/obj/item/weapon/stock_parts/subspace/transmitter" = 1,
|
||||
@@ -21,7 +20,6 @@
|
||||
board_type = "machine"
|
||||
build_path = "/obj/machinery/shield_gen"
|
||||
origin_tech = "bluespace=4;phorontech=3"
|
||||
frame_desc = "Requires 2 Pico Manipulators, 1 Subspace Transmitter, 5 Pieces of cable, 1 Subspace Crystal, 1 Subspace Amplifier and 1 Console Screen."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator/pico" = 2,
|
||||
"/obj/item/weapon/stock_parts/subspace/transmitter" = 1,
|
||||
@@ -35,7 +33,6 @@
|
||||
board_type = "machine"
|
||||
build_path = "/obj/machinery/shield_capacitor"
|
||||
origin_tech = "magnets=3;powerstorage=4"
|
||||
frame_desc = "Requires 2 Pico Manipulators, 1 Subspace Filter, 5 Pieces of cable, 1 Subspace Treatment disk, 1 Subspace Analyzer and 1 Console Screen."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator/pico" = 2,
|
||||
"/obj/item/weapon/stock_parts/subspace/filter" = 1,
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
name = T_BOARD("subspace receiver")
|
||||
build_path = "/obj/machinery/telecomms/receiver"
|
||||
origin_tech = "programming=4;engineering=3;bluespace=2"
|
||||
frame_desc = "Requires 1 Subspace Ansible, 1 Hyperwave Filter, 2 Micro Manipulators, and 1 Micro-Laser."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/subspace/ansible" = 1,
|
||||
"/obj/item/weapon/stock_parts/subspace/filter" = 1,
|
||||
@@ -20,7 +19,6 @@
|
||||
name = T_BOARD("hub mainframe")
|
||||
build_path = "/obj/machinery/telecomms/hub"
|
||||
origin_tech = "programming=4;engineering=4"
|
||||
frame_desc = "Requires 2 Micro Manipulators, 2 Cable Coil and 2 Hyperwave Filter."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/stack/cable_coil" = 2,
|
||||
@@ -30,7 +28,6 @@
|
||||
name = T_BOARD("relay mainframe")
|
||||
build_path = "/obj/machinery/telecomms/relay"
|
||||
origin_tech = "programming=3;engineering=4;bluespace=3"
|
||||
frame_desc = "Requires 2 Micro Manipulators, 2 Cable Coil and 2 Hyperwave Filters."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/stack/cable_coil" = 2,
|
||||
@@ -40,7 +37,6 @@
|
||||
name = T_BOARD("bus mainframe")
|
||||
build_path = "/obj/machinery/telecomms/bus"
|
||||
origin_tech = "programming=4;engineering=4"
|
||||
frame_desc = "Requires 2 Micro Manipulators, 1 Cable Coil and 1 Hyperwave Filter."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/stack/cable_coil" = 1,
|
||||
@@ -50,7 +46,6 @@
|
||||
name = T_BOARD("processor unit")
|
||||
build_path = "/obj/machinery/telecomms/processor"
|
||||
origin_tech = "programming=4;engineering=4"
|
||||
frame_desc = "Requires 3 Micro Manipulators, 1 Hyperwave Filter, 2 Treatment Disks, 1 Wavelength Analyzer, 2 Cable Coils and 1 Subspace Amplifier."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 3,
|
||||
"/obj/item/weapon/stock_parts/subspace/filter" = 1,
|
||||
@@ -63,7 +58,6 @@
|
||||
name = T_BOARD("telecommunication server")
|
||||
build_path = "/obj/machinery/telecomms/server"
|
||||
origin_tech = "programming=4;engineering=4"
|
||||
frame_desc = "Requires 2 Micro Manipulators, 1 Cable Coil and 1 Hyperwave Filter."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/stack/cable_coil" = 1,
|
||||
@@ -73,7 +67,6 @@
|
||||
name = T_BOARD("subspace broadcaster")
|
||||
build_path = "/obj/machinery/telecomms/broadcaster"
|
||||
origin_tech = "programming=4;engineering=4;bluespace=2"
|
||||
frame_desc = "Requires 2 Micro Manipulators, 1 Cable Coil, 1 Hyperwave Filter, 1 Ansible Crystal and 2 High-Powered Micro-Lasers. "
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/stack/cable_coil" = 1,
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
name = T_BOARD("gas heating system")
|
||||
build_path = "/obj/machinery/atmospherics/unary/heater"
|
||||
origin_tech = "powerstorage=2;engineering=1"
|
||||
frame_desc = "Requires 5 Pieces of Cable, 1 Matter Bin, and 2 Capacitors."
|
||||
req_components = list(
|
||||
"/obj/item/stack/cable_coil" = 5,
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 1,
|
||||
@@ -27,7 +26,6 @@
|
||||
name = T_BOARD("gas cooling system")
|
||||
build_path = "/obj/machinery/atmospherics/unary/freezer"
|
||||
origin_tech = "magnets=2;engineering=2"
|
||||
frame_desc = "Requires 2 Pieces of Cable, 1 Matter Bin, 1 Micro Manipulator, and 2 Capacitors."
|
||||
req_components = list(
|
||||
"/obj/item/stack/cable_coil" = 2,
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 1,
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
throw_speed = 2
|
||||
throw_range = 10
|
||||
force = 10.0
|
||||
matter = list("metal" = 90)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 90)
|
||||
attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed")
|
||||
|
||||
var/spray_particles = 6
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 3.0
|
||||
matter = list("metal" = 500)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 500)
|
||||
origin_tech = "combat=1;phorontech=1"
|
||||
var/status = 0
|
||||
var/throw_amount = 100
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
w_class = 2.0
|
||||
throw_speed = 2
|
||||
throw_range = 5
|
||||
matter = list("metal" = 500)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 500)
|
||||
origin_tech = "materials=1"
|
||||
var/dispenser = 0
|
||||
var/breakouttime = 1200 //Deciseconds = 120s = 2 minutes
|
||||
|
||||
@@ -32,9 +32,7 @@
|
||||
for (var/mob/O in viewers(M, null))
|
||||
O.show_message("\red [M] has been implanted by [user].", 1)
|
||||
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'> Implanted with [src.name] ([src.imp.name]) by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] ([src.imp.name]) to implant [M.name] ([M.ckey])</font>")
|
||||
msg_admin_attack("[user.name] ([user.ckey]) implanted [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
admin_attack_log(user, M, "Implanted using \the [src.name] ([src.imp.name])", "Implanted with \the [src.name] ([src.imp.name])", "used an implanter, [src.name] ([src.imp.name]), on")
|
||||
|
||||
user.show_message("\red You implanted the implant into [M].")
|
||||
if(src.imp.implanted(M))
|
||||
|
||||
@@ -145,7 +145,7 @@
|
||||
throwforce = 6.0
|
||||
throw_speed = 3
|
||||
throw_range = 6
|
||||
matter = list("metal" = 12000)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 12000)
|
||||
origin_tech = "materials=1"
|
||||
attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
|
||||
@@ -175,7 +175,7 @@
|
||||
throwforce = 8.0
|
||||
throw_speed = 3
|
||||
throw_range = 6
|
||||
matter = list("metal" = 12000)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 12000)
|
||||
origin_tech = "materials=1"
|
||||
attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
sharp = 1
|
||||
@@ -247,7 +247,7 @@
|
||||
throw_range = 5
|
||||
w_class = 3.0
|
||||
flags = CONDUCT
|
||||
matter = list("metal" = 3000)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 3000)
|
||||
/* // NOPE
|
||||
var/food_total= 0
|
||||
var/burger_amt = 0
|
||||
|
||||
@@ -9,7 +9,7 @@ var/global/list/cached_icons = list()
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "paint_neutral"
|
||||
item_state = "paintcan"
|
||||
matter = list("metal" = 200)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 200)
|
||||
w_class = 3.0
|
||||
amount_per_transfer_from_this = 10
|
||||
possible_transfer_amounts = list(10,20,30,60)
|
||||
|
||||
@@ -106,7 +106,6 @@ var/list/tape_roll_applications = list()
|
||||
var/obj/item/tape/P = new tape_type(cur)
|
||||
P.icon_state = "[P.icon_base]_[dir]"
|
||||
cur = get_step_towards(cur,end)
|
||||
//is_blocked_turf(var/turf/T)
|
||||
usr << "\blue You finish placing the [src]." //Git Test
|
||||
|
||||
/obj/item/taperoll/afterattack(var/atom/A, mob/user as mob, proximity)
|
||||
|
||||
@@ -14,20 +14,37 @@
|
||||
var/maxcharge = 1000
|
||||
var/rigged = 0 // true if rigged to explode
|
||||
var/minor_fault = 0 //If not 100% reliable, it will build up faults.
|
||||
var/construction_cost = list("metal"=750,"glass"=75)
|
||||
var/construction_cost = list(DEFAULT_WALL_MATERIAL=750,"glass"=75)
|
||||
var/construction_time=100
|
||||
matter = list("metal" = 700, "glass" = 50)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 700, "glass" = 50)
|
||||
|
||||
suicide_act(mob/user)
|
||||
viewers(user) << "\red <b>[user] is licking the electrodes of the [src.name]! It looks like \he's trying to commit suicide.</b>"
|
||||
return (FIRELOSS)
|
||||
|
||||
//currently only used by energy-type guns, that may change in the future.
|
||||
/obj/item/weapon/cell/device
|
||||
name = "device power cell"
|
||||
desc = "A small power cell designed to power handheld devices."
|
||||
icon_state = "cell" //placeholder
|
||||
w_class = 2
|
||||
force = 0
|
||||
throw_speed = 5
|
||||
throw_range = 7
|
||||
maxcharge = 1000
|
||||
matter = list("metal" = 350, "glass" = 50)
|
||||
|
||||
/obj/item/weapon/cell/device/variable/New(newloc, charge_amount)
|
||||
..(newloc)
|
||||
maxcharge = charge_amount
|
||||
charge = maxcharge
|
||||
|
||||
/obj/item/weapon/cell/crap
|
||||
name = "\improper Nanotrasen brand rechargable AA battery"
|
||||
desc = "You can't top the plasma top." //TOTALLY TRADEMARK INFRINGEMENT
|
||||
origin_tech = "powerstorage=0"
|
||||
maxcharge = 500
|
||||
matter = list("metal" = 700, "glass" = 40)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 700, "glass" = 40)
|
||||
|
||||
/obj/item/weapon/cell/crap/empty/New()
|
||||
..()
|
||||
@@ -37,7 +54,7 @@
|
||||
name = "security borg rechargable D battery"
|
||||
origin_tech = "powerstorage=0"
|
||||
maxcharge = 600 //600 max charge / 100 charge per shot = six shots
|
||||
matter = list("metal" = 700, "glass" = 40)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 700, "glass" = 40)
|
||||
|
||||
/obj/item/weapon/cell/secborg/empty/New()
|
||||
..()
|
||||
@@ -47,14 +64,14 @@
|
||||
name = "heavy-duty power cell"
|
||||
origin_tech = "powerstorage=1"
|
||||
maxcharge = 5000
|
||||
matter = list("metal" = 700, "glass" = 50)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 700, "glass" = 50)
|
||||
|
||||
/obj/item/weapon/cell/high
|
||||
name = "high-capacity power cell"
|
||||
origin_tech = "powerstorage=2"
|
||||
icon_state = "hcell"
|
||||
maxcharge = 10000
|
||||
matter = list("metal" = 700, "glass" = 60)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 700, "glass" = 60)
|
||||
|
||||
/obj/item/weapon/cell/high/empty/New()
|
||||
..()
|
||||
@@ -65,8 +82,8 @@
|
||||
origin_tech = "powerstorage=5"
|
||||
icon_state = "scell"
|
||||
maxcharge = 20000
|
||||
matter = list("metal" = 700, "glass" = 70)
|
||||
construction_cost = list("metal"=750,"glass"=100)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 700, "glass" = 70)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=750,"glass"=100)
|
||||
|
||||
/obj/item/weapon/cell/super/empty/New()
|
||||
..()
|
||||
@@ -77,8 +94,8 @@
|
||||
origin_tech = "powerstorage=6"
|
||||
icon_state = "hpcell"
|
||||
maxcharge = 30000
|
||||
matter = list("metal" = 700, "glass" = 80)
|
||||
construction_cost = list("metal"=500,"glass"=150,"gold"=200,"silver"=200)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 700, "glass" = 80)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=500,"glass"=150,"gold"=200,"silver"=200)
|
||||
|
||||
/obj/item/weapon/cell/hyper/empty/New()
|
||||
..()
|
||||
@@ -89,7 +106,7 @@
|
||||
icon_state = "icell"
|
||||
origin_tech = null
|
||||
maxcharge = 30000
|
||||
matter = list("metal" = 700, "glass" = 80)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 700, "glass" = 80)
|
||||
use()
|
||||
return 1
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
throw_speed = 1
|
||||
throw_range = 4
|
||||
w_class = 4.0
|
||||
matter = list("glass" = 7500, "metal" = 1000)
|
||||
matter = list("glass" = 7500, DEFAULT_WALL_MATERIAL = 1000)
|
||||
origin_tech = "materials=2"
|
||||
attack_verb = list("shoved", "bashed")
|
||||
var/cooldown = 0 //shield bash cooldown. based on world.time
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
desc = "Retracts stuff."
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "retractor"
|
||||
matter = list("metal" = 10000, "glass" = 5000)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 5000)
|
||||
flags = CONDUCT
|
||||
w_class = 2.0
|
||||
origin_tech = "materials=1;biotech=1"
|
||||
@@ -29,7 +29,7 @@
|
||||
desc = "You think you have seen this before."
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "hemostat"
|
||||
matter = list("metal" = 5000, "glass" = 2500)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 2500)
|
||||
flags = CONDUCT
|
||||
w_class = 2.0
|
||||
origin_tech = "materials=1;biotech=1"
|
||||
@@ -43,7 +43,7 @@
|
||||
desc = "This stops bleeding."
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "cautery"
|
||||
matter = list("metal" = 5000, "glass" = 2500)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 2500)
|
||||
flags = CONDUCT
|
||||
w_class = 2.0
|
||||
origin_tech = "materials=1;biotech=1"
|
||||
@@ -58,7 +58,7 @@
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "drill"
|
||||
hitsound = 'sound/weapons/circsawhit.ogg'
|
||||
matter = list("metal" = 15000, "glass" = 10000)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 15000, "glass" = 10000)
|
||||
flags = CONDUCT
|
||||
force = 15.0
|
||||
w_class = 2.0
|
||||
@@ -86,7 +86,7 @@
|
||||
throwforce = 5.0
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
matter = list("metal" = 10000, "glass" = 5000)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 5000)
|
||||
origin_tech = "materials=1;biotech=1"
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
throwforce = 9.0
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
matter = list("metal" = 20000,"glass" = 10000)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 20000,"glass" = 10000)
|
||||
origin_tech = "materials=1;biotech=1"
|
||||
attack_verb = list("attacked", "slashed", "sawed", "cut")
|
||||
sharp = 1
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
gender = PLURAL
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "table_parts"
|
||||
matter = list("metal" = 3750)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 3750)
|
||||
flags = CONDUCT
|
||||
attack_verb = list("slammed", "bashed", "battered", "bludgeoned", "thrashed", "whacked")
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
desc = "Hard table parts. Well... harder."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "reinf_tableparts"
|
||||
matter = list("metal" = 7500)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 7500)
|
||||
flags = CONDUCT
|
||||
|
||||
stack_types = list(/obj/item/stack/sheet/metal, /obj/item/stack/rods)
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
item_state = "electronic"
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
matter = list("metal" = 400)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 400)
|
||||
origin_tech = "magnets=1"
|
||||
|
||||
/obj/item/weapon/locator/attack_self(mob/user as mob)
|
||||
@@ -132,7 +132,7 @@ Frequency:
|
||||
w_class = 2.0
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
matter = list("metal" = 10000)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 10000)
|
||||
origin_tech = "magnets=1;bluespace=3"
|
||||
|
||||
/obj/item/weapon/hand_tele/attack_self(mob/user as mob)
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
force = 5.0
|
||||
throwforce = 7.0
|
||||
w_class = 2.0
|
||||
matter = list("metal" = 150)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 150)
|
||||
origin_tech = "materials=1;engineering=1"
|
||||
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
throwforce = 5.0
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
matter = list("metal" = 75)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 75)
|
||||
attack_verb = list("stabbed")
|
||||
|
||||
suicide_act(mob/user)
|
||||
@@ -102,7 +102,7 @@
|
||||
throw_speed = 2
|
||||
throw_range = 9
|
||||
w_class = 2.0
|
||||
matter = list("metal" = 80)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 80)
|
||||
origin_tech = "materials=1;engineering=1"
|
||||
attack_verb = list("pinched", "nipped")
|
||||
sharp = 1
|
||||
@@ -144,7 +144,7 @@
|
||||
w_class = 2.0
|
||||
|
||||
//Cost to make in the autolathe
|
||||
matter = list("metal" = 70, "glass" = 30)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 30)
|
||||
|
||||
//R&D tech level
|
||||
origin_tech = "engineering=1"
|
||||
@@ -403,21 +403,21 @@
|
||||
/obj/item/weapon/weldingtool/largetank
|
||||
name = "industrial welding tool"
|
||||
max_fuel = 40
|
||||
matter = list("metal" = 70, "glass" = 60)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 60)
|
||||
origin_tech = "engineering=2"
|
||||
|
||||
/obj/item/weapon/weldingtool/hugetank
|
||||
name = "upgraded welding tool"
|
||||
max_fuel = 80
|
||||
w_class = 3.0
|
||||
matter = list("metal" = 70, "glass" = 120)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 120)
|
||||
origin_tech = "engineering=3"
|
||||
|
||||
/obj/item/weapon/weldingtool/experimental
|
||||
name = "experimental welding tool"
|
||||
max_fuel = 40
|
||||
w_class = 3.0
|
||||
matter = list("metal" = 70, "glass" = 120)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 120)
|
||||
origin_tech = "engineering=4;phorontech=3"
|
||||
var/last_gen = 0
|
||||
|
||||
@@ -444,7 +444,7 @@
|
||||
throwforce = 7.0
|
||||
item_state = "crowbar"
|
||||
w_class = 2.0
|
||||
matter = list("metal" = 50)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50)
|
||||
origin_tech = "engineering=1"
|
||||
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked")
|
||||
|
||||
|
||||
@@ -185,14 +185,14 @@
|
||||
desc = "A knife blade. Unusable as a weapon without a grip."
|
||||
icon = 'icons/obj/buildingobject.dmi'
|
||||
icon_state = "butterfly2"
|
||||
matter = list("metal" = 5000)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 5000)
|
||||
|
||||
/obj/item/butterflyhandle
|
||||
name = "concealed knife grip"
|
||||
desc = "A plasteel grip with screw fittings for a blade."
|
||||
icon = 'icons/obj/buildingobject.dmi'
|
||||
icon_state = "butterfly1"
|
||||
matter = list("metal" = 4000)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 4000)
|
||||
|
||||
/obj/item/butterflyhandle/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/butterflyblade))
|
||||
@@ -276,7 +276,7 @@ obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob)
|
||||
throw_range = 15
|
||||
sharp = 1
|
||||
edge = 1
|
||||
matter = list("metal" = 500)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 500)
|
||||
|
||||
var/poisoned = 0
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#define SHOWER_OPEN_LAYER MOB_LAYER + 0.1
|
||||
#define SHOWER_CLOSED_LAYER OBJ_LAYER + 0.4
|
||||
#define SHOWER_OPEN_LAYER OBJ_LAYER + 0.4
|
||||
#define SHOWER_CLOSED_LAYER MOB_LAYER + 0.1
|
||||
|
||||
/obj/structure/curtain
|
||||
name = "curtain"
|
||||
|
||||
@@ -1,333 +0,0 @@
|
||||
/*
|
||||
* False Walls
|
||||
*/
|
||||
/obj/structure/falsewall
|
||||
name = "wall"
|
||||
desc = "A huge chunk of metal used to seperate rooms."
|
||||
anchored = 1
|
||||
icon = 'icons/turf/walls.dmi'
|
||||
var/mineral = "metal"
|
||||
var/opening = 0
|
||||
|
||||
/obj/structure/falsewall/New()
|
||||
relativewall_neighbours()
|
||||
..()
|
||||
|
||||
/obj/structure/falsewall/Destroy()
|
||||
|
||||
var/temploc = src.loc
|
||||
|
||||
spawn(10)
|
||||
for(var/turf/simulated/wall/W in range(temploc,1))
|
||||
W.relativewall()
|
||||
|
||||
for(var/obj/structure/falsewall/W in range(temploc,1))
|
||||
W.relativewall()
|
||||
|
||||
for(var/obj/structure/falserwall/W in range(temploc,1))
|
||||
W.relativewall()
|
||||
..()
|
||||
|
||||
|
||||
/obj/structure/falsewall/relativewall()
|
||||
|
||||
if(!density)
|
||||
icon_state = "[mineral]fwall_open"
|
||||
return
|
||||
|
||||
var/junction = 0 //will be used to determine from which side the wall is connected to other walls
|
||||
|
||||
for(var/turf/simulated/wall/W in orange(src,1))
|
||||
if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
|
||||
if(src.mineral == W.mineral)//Only 'like' walls connect -Sieve
|
||||
junction |= get_dir(src,W)
|
||||
for(var/obj/structure/falsewall/W in orange(src,1))
|
||||
if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
|
||||
if(src.mineral == W.mineral)
|
||||
junction |= get_dir(src,W)
|
||||
for(var/obj/structure/falserwall/W in orange(src,1))
|
||||
if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
|
||||
if(src.mineral == W.mineral)
|
||||
junction |= get_dir(src,W)
|
||||
icon_state = "[mineral][junction]"
|
||||
return
|
||||
|
||||
/obj/structure/falsewall/attack_hand(mob/user as mob)
|
||||
if(opening)
|
||||
return
|
||||
|
||||
if(density)
|
||||
opening = 1
|
||||
icon_state = "[mineral]fwall_open"
|
||||
flick("[mineral]fwall_opening", src)
|
||||
sleep(15)
|
||||
src.density = 0
|
||||
set_opacity(0)
|
||||
opening = 0
|
||||
else
|
||||
opening = 1
|
||||
flick("[mineral]fwall_closing", src)
|
||||
icon_state = "[mineral]0"
|
||||
density = 1
|
||||
sleep(15)
|
||||
set_opacity(1)
|
||||
src.relativewall()
|
||||
opening = 0
|
||||
|
||||
/obj/structure/falsewall/update_icon()//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open
|
||||
..()
|
||||
if(density)
|
||||
icon_state = "[mineral]0"
|
||||
src.relativewall()
|
||||
else
|
||||
icon_state = "[mineral]fwall_open"
|
||||
|
||||
/obj/structure/falsewall/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(opening)
|
||||
user << "\red You must wait until the door has stopped moving."
|
||||
return
|
||||
|
||||
if(density)
|
||||
var/turf/T = get_turf(src)
|
||||
if(T.density)
|
||||
user << "\red The wall is blocked!"
|
||||
return
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
user.visible_message("[user] tightens some bolts on the wall.", "You tighten the bolts on the wall.")
|
||||
if(!mineral || mineral == "metal")
|
||||
T.ChangeTurf(/turf/simulated/wall)
|
||||
else
|
||||
T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[mineral]"))
|
||||
qdel(src)
|
||||
|
||||
if( istype(W, /obj/item/weapon/weldingtool) )
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if( WT:welding )
|
||||
if(!mineral)
|
||||
T.ChangeTurf(/turf/simulated/wall)
|
||||
else
|
||||
T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[mineral]"))
|
||||
if(mineral != "phoron")//Stupid shit keeps me from pushing the attackby() to phoron walls -Sieve
|
||||
T = get_turf(src)
|
||||
T.attackby(W,user)
|
||||
qdel(src)
|
||||
else
|
||||
user << "\blue You can't reach, close it first!"
|
||||
|
||||
if( istype(W, /obj/item/weapon/pickaxe/plasmacutter) )
|
||||
var/turf/T = get_turf(src)
|
||||
if(!mineral)
|
||||
T.ChangeTurf(/turf/simulated/wall)
|
||||
else
|
||||
T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[mineral]"))
|
||||
if(mineral != "phoron")
|
||||
T = get_turf(src)
|
||||
T.attackby(W,user)
|
||||
qdel(src)
|
||||
|
||||
//DRILLING
|
||||
else if (istype(W, /obj/item/weapon/pickaxe/diamonddrill))
|
||||
var/turf/T = get_turf(src)
|
||||
if(!mineral)
|
||||
T.ChangeTurf(/turf/simulated/wall)
|
||||
else
|
||||
T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[mineral]"))
|
||||
T = get_turf(src)
|
||||
T.attackby(W,user)
|
||||
qdel(src)
|
||||
|
||||
else if( istype(W, /obj/item/weapon/melee/energy/blade) )
|
||||
var/turf/T = get_turf(src)
|
||||
if(!mineral)
|
||||
T.ChangeTurf(/turf/simulated/wall)
|
||||
else
|
||||
T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[mineral]"))
|
||||
if(mineral != "phoron")
|
||||
T = get_turf(src)
|
||||
T.attackby(W,user)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/falsewall/update_icon()//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open
|
||||
..()
|
||||
if(density)
|
||||
icon_state = "[mineral]0"
|
||||
src.relativewall()
|
||||
else
|
||||
icon_state = "[mineral]fwall_open"
|
||||
|
||||
/*
|
||||
* False R-Walls
|
||||
*/
|
||||
|
||||
/obj/structure/falserwall
|
||||
name = "reinforced wall"
|
||||
desc = "A huge chunk of reinforced metal used to seperate rooms."
|
||||
icon = 'icons/turf/walls.dmi'
|
||||
icon_state = "r_wall"
|
||||
density = 1
|
||||
opacity = 1
|
||||
anchored = 1
|
||||
var/mineral = "metal"
|
||||
var/opening = 0
|
||||
|
||||
/obj/structure/falserwall/New()
|
||||
relativewall_neighbours()
|
||||
..()
|
||||
|
||||
|
||||
/obj/structure/falserwall/attack_hand(mob/user as mob)
|
||||
if(opening)
|
||||
return
|
||||
|
||||
if(density)
|
||||
opening = 1
|
||||
// Open wall
|
||||
icon_state = "frwall_open"
|
||||
flick("frwall_opening", src)
|
||||
sleep(15)
|
||||
density = 0
|
||||
set_opacity(0)
|
||||
opening = 0
|
||||
else
|
||||
opening = 1
|
||||
icon_state = "r_wall"
|
||||
flick("frwall_closing", src)
|
||||
density = 1
|
||||
sleep(15)
|
||||
set_opacity(1)
|
||||
relativewall()
|
||||
opening = 0
|
||||
|
||||
/obj/structure/falserwall/relativewall()
|
||||
|
||||
if(!density)
|
||||
icon_state = "frwall_open"
|
||||
return
|
||||
|
||||
var/junction = 0 //will be used to determine from which side the wall is connected to other walls
|
||||
|
||||
for(var/turf/simulated/wall/W in orange(src,1))
|
||||
if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
|
||||
if(src.mineral == W.mineral)//Only 'like' walls connect -Sieve
|
||||
junction |= get_dir(src,W)
|
||||
for(var/obj/structure/falsewall/W in orange(src,1))
|
||||
if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
|
||||
if(src.mineral == W.mineral)
|
||||
junction |= get_dir(src,W)
|
||||
for(var/obj/structure/falserwall/W in orange(src,1))
|
||||
if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
|
||||
if(src.mineral == W.mineral)
|
||||
junction |= get_dir(src,W)
|
||||
icon_state = "rwall[junction]"
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/structure/falserwall/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(opening)
|
||||
user << "\red You must wait until the door has stopped moving."
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
var/turf/T = get_turf(src)
|
||||
user.visible_message("[user] tightens some bolts on the r wall.", "You tighten the bolts on the wall.")
|
||||
T.ChangeTurf(/turf/simulated/wall) //Intentionally makes a regular wall instead of an r-wall (no cheap r-walls for you).
|
||||
qdel(src)
|
||||
|
||||
if( istype(W, /obj/item/weapon/weldingtool) )
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if( WT.remove_fuel(0,user) )
|
||||
var/turf/T = get_turf(src)
|
||||
T.ChangeTurf(/turf/simulated/wall)
|
||||
T = get_turf(src)
|
||||
T.attackby(W,user)
|
||||
qdel(src)
|
||||
|
||||
else if( istype(W, /obj/item/weapon/pickaxe/plasmacutter) )
|
||||
var/turf/T = get_turf(src)
|
||||
T.ChangeTurf(/turf/simulated/wall)
|
||||
T = get_turf(src)
|
||||
T.attackby(W,user)
|
||||
qdel(src)
|
||||
|
||||
//DRILLING
|
||||
else if (istype(W, /obj/item/weapon/pickaxe/diamonddrill))
|
||||
var/turf/T = get_turf(src)
|
||||
T.ChangeTurf(/turf/simulated/wall)
|
||||
T = get_turf(src)
|
||||
T.attackby(W,user)
|
||||
qdel(src)
|
||||
|
||||
else if( istype(W, /obj/item/weapon/melee/energy/blade) )
|
||||
var/turf/T = get_turf(src)
|
||||
T.ChangeTurf(/turf/simulated/wall)
|
||||
T = get_turf(src)
|
||||
T.attackby(W,user)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/*
|
||||
* Uranium Falsewalls
|
||||
*/
|
||||
|
||||
/obj/structure/falsewall/uranium
|
||||
name = "uranium wall"
|
||||
desc = "A wall with uranium plating. This is probably a bad idea."
|
||||
icon_state = ""
|
||||
mineral = "uranium"
|
||||
var/active = null
|
||||
var/last_event = 0
|
||||
|
||||
/obj/structure/falsewall/uranium/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
radiate()
|
||||
..()
|
||||
|
||||
/obj/structure/falsewall/uranium/attack_hand(mob/user as mob)
|
||||
radiate()
|
||||
..()
|
||||
|
||||
/obj/structure/falsewall/uranium/proc/radiate()
|
||||
if(!active)
|
||||
if(world.time > last_event+15)
|
||||
active = 1
|
||||
for(var/mob/living/L in range(3,src))
|
||||
L.apply_effect(12,IRRADIATE,0)
|
||||
for(var/turf/simulated/wall/mineral/uranium/T in range(3,src))
|
||||
T.radiate()
|
||||
last_event = world.time
|
||||
active = null
|
||||
return
|
||||
return
|
||||
/*
|
||||
* Other misc falsewall types
|
||||
*/
|
||||
|
||||
/obj/structure/falsewall/gold
|
||||
name = "gold wall"
|
||||
desc = "A wall with gold plating. Swag!"
|
||||
icon_state = ""
|
||||
mineral = "gold"
|
||||
|
||||
/obj/structure/falsewall/silver
|
||||
name = "silver wall"
|
||||
desc = "A wall with silver plating. Shiny."
|
||||
icon_state = ""
|
||||
mineral = "silver"
|
||||
|
||||
/obj/structure/falsewall/diamond
|
||||
name = "diamond wall"
|
||||
desc = "A wall with diamond plating. You monster."
|
||||
icon_state = ""
|
||||
mineral = "diamond"
|
||||
|
||||
/obj/structure/falsewall/phoron
|
||||
name = "phoron wall"
|
||||
desc = "A wall with phoron plating. This is definately a bad idea."
|
||||
icon_state = ""
|
||||
mineral = "phoron"
|
||||
|
||||
/obj/structure/falsewall/sandstone
|
||||
name = "sandstone wall"
|
||||
desc = "A wall with sandstone plating."
|
||||
icon_state = ""
|
||||
mineral = "sandstone"
|
||||
@@ -6,6 +6,13 @@
|
||||
var/state = 0
|
||||
var/health = 200
|
||||
var/cover = 50 //how much cover the girder provides against projectiles.
|
||||
var/material/reinf_material
|
||||
|
||||
/obj/structure/girder/displaced
|
||||
icon_state = "displaced"
|
||||
anchored = 0
|
||||
health = 50
|
||||
cover = 25
|
||||
|
||||
/obj/structure/girder/attack_generic(var/mob/user, var/damage, var/attack_message = "smashes apart", var/wallbreaker)
|
||||
if(!damage || !wallbreaker)
|
||||
@@ -30,156 +37,165 @@
|
||||
health -= damage
|
||||
..()
|
||||
if(health <= 0)
|
||||
new /obj/item/stack/sheet/metal(get_turf(src))
|
||||
qdel(src)
|
||||
dismantle()
|
||||
|
||||
return
|
||||
|
||||
/obj/structure/girder/proc/reset_girder()
|
||||
cover = initial(cover)
|
||||
health = min(health,initial(health))
|
||||
state = 0
|
||||
icon_state = initial(icon_state)
|
||||
if(reinf_material)
|
||||
reinforce_girder()
|
||||
|
||||
/obj/structure/girder/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wrench) && state == 0)
|
||||
if(anchored && !istype(src,/obj/structure/girder/displaced))
|
||||
if(anchored && !reinf_material)
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
|
||||
user << "\blue Now disassembling the girder"
|
||||
user << "<span class='notice'>Now disassembling the girder...</span>"
|
||||
if(do_after(user,40))
|
||||
if(!src) return
|
||||
user << "\blue You dissasembled the girder!"
|
||||
user << "<span class='notice'>You dissasembled the girder!</span>"
|
||||
dismantle()
|
||||
else if(!anchored)
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
|
||||
user << "\blue Now securing the girder"
|
||||
user << "<span class='notice'>Now securing the girder...</span>"
|
||||
if(get_turf(user, 40))
|
||||
user << "\blue You secured the girder!"
|
||||
new/obj/structure/girder( src.loc )
|
||||
qdel(src)
|
||||
user << "<span class='notice'>You secured the girder!</span>"
|
||||
reset_girder()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter))
|
||||
user << "\blue Now slicing apart the girder"
|
||||
user << "<span class='notice'>Now slicing apart the girder...</span>"
|
||||
if(do_after(user,30))
|
||||
if(!src) return
|
||||
user << "\blue You slice apart the girder!"
|
||||
user << "<span class='notice'>You slice apart the girder!</span>"
|
||||
dismantle()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/pickaxe/diamonddrill))
|
||||
user << "\blue You drill through the girder!"
|
||||
user << "<span class='notice'>You drill through the girder!</span>"
|
||||
dismantle()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/screwdriver) && state == 2 && istype(src,/obj/structure/girder/reinforced))
|
||||
else if(istype(W, /obj/item/weapon/screwdriver) && state == 2)
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
|
||||
user << "\blue Now unsecuring support struts"
|
||||
user << "<span class='notice'>Now unsecuring support struts...</span>"
|
||||
if(do_after(user,40))
|
||||
if(!src) return
|
||||
user << "\blue You unsecured the support struts!"
|
||||
user << "<span class='notice'>You unsecured the support struts!</span>"
|
||||
state = 1
|
||||
|
||||
else if(istype(W, /obj/item/weapon/wirecutters) && istype(src,/obj/structure/girder/reinforced) && state == 1)
|
||||
else if(istype(W, /obj/item/weapon/wirecutters) && state == 1)
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
|
||||
user << "\blue Now removing support struts"
|
||||
user << "<span class='notice'>Now removing support struts...</span>"
|
||||
if(do_after(user,40))
|
||||
if(!src) return
|
||||
user << "\blue You removed the support struts!"
|
||||
new/obj/structure/girder( src.loc )
|
||||
qdel(src)
|
||||
user << "<span class='notice'>You removed the support struts!</span>"
|
||||
reinf_material.place_dismantled_product(get_turf(src))
|
||||
reinf_material = null
|
||||
reset_girder()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/crowbar) && state == 0 && anchored )
|
||||
else if(istype(W, /obj/item/weapon/crowbar) && state == 0 && anchored)
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
|
||||
user << "\blue Now dislodging the girder"
|
||||
user << "<span class='notice'>Now dislodging the girder...</span>"
|
||||
if(do_after(user, 40))
|
||||
if(!src) return
|
||||
user << "\blue You dislodged the girder!"
|
||||
new/obj/structure/girder/displaced( src.loc )
|
||||
qdel(src)
|
||||
user << "<span class='notice'>You dislodged the girder!</span>"
|
||||
icon_state = "displaced"
|
||||
anchored = 0
|
||||
health = 50
|
||||
cover = 25
|
||||
|
||||
else if(istype(W, /obj/item/stack/sheet))
|
||||
|
||||
var/obj/item/stack/sheet/S = W
|
||||
switch(S.type)
|
||||
if(S.get_amount() < 2)
|
||||
return ..()
|
||||
|
||||
if(/obj/item/stack/sheet/metal, /obj/item/stack/sheet/metal/cyborg)
|
||||
if(!anchored)
|
||||
if(S.use(2))
|
||||
user << "<span class='notice'>You create a false wall! Push on it to open or close the passage.</span>"
|
||||
new /obj/structure/falsewall (src.loc)
|
||||
qdel(src)
|
||||
else
|
||||
if(S.get_amount() < 2) return ..()
|
||||
user << "<span class='notice'>Now adding plating...</span>"
|
||||
if (do_after(user,40))
|
||||
if (S.use(2))
|
||||
user << "<span class='notice'>You added the plating!</span>"
|
||||
var/turf/Tsrc = get_turf(src)
|
||||
Tsrc.ChangeTurf(/turf/simulated/wall)
|
||||
for(var/turf/simulated/wall/X in Tsrc.loc)
|
||||
if(X) X.add_hiddenprint(usr)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(/obj/item/stack/sheet/plasteel, /obj/item/stack/sheet/plasteel/cyborg)
|
||||
if(!anchored)
|
||||
if(S.use(2))
|
||||
user << "\blue You create a false wall! Push on it to open or close the passage."
|
||||
new /obj/structure/falserwall (src.loc)
|
||||
qdel(src)
|
||||
else
|
||||
if (src.icon_state == "reinforced") //I cant believe someone would actually write this line of code...
|
||||
if(S.get_amount() < 1) return ..()
|
||||
user << "<span class='notice'>Now finalising reinforced wall.</span>"
|
||||
if(do_after(user, 50))
|
||||
if (S.use(1))
|
||||
user << "<span class='notice'>Wall fully reinforced!</span>"
|
||||
var/turf/Tsrc = get_turf(src)
|
||||
Tsrc.ChangeTurf(/turf/simulated/wall/r_wall)
|
||||
for(var/turf/simulated/wall/r_wall/X in Tsrc.loc)
|
||||
if(X) X.add_hiddenprint(usr)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
if(S.get_amount() < 1) return ..()
|
||||
user << "<span class='notice'>Now reinforcing girders...</span>"
|
||||
if (do_after(user,60))
|
||||
if(S.use(1))
|
||||
user << "<span class='notice'>Girders reinforced!</span>"
|
||||
new/obj/structure/girder/reinforced( src.loc )
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(S.sheettype)
|
||||
var/M = S.sheettype
|
||||
// Ugly hack, will suffice for now. Need to fix it upstream as well, may rewrite mineral walls. ~Z
|
||||
if(M in list("mhydrogen","osmium","tritium","platinum","iron"))
|
||||
user << "You cannot plate the girder in that material."
|
||||
return
|
||||
if(!anchored)
|
||||
if(S.amount < 2) return
|
||||
S.use(2)
|
||||
user << "\blue You create a false wall! Push on it to open or close the passage."
|
||||
var/F = text2path("/obj/structure/falsewall/[M]")
|
||||
new F (src.loc)
|
||||
qdel(src)
|
||||
else
|
||||
if(S.amount < 2) return ..()
|
||||
user << "\blue Now adding plating..."
|
||||
if (do_after(user,40))
|
||||
if(!src || !S || S.amount < 2) return
|
||||
S.use(2)
|
||||
user << "\blue You added the plating!"
|
||||
var/turf/Tsrc = get_turf(src)
|
||||
Tsrc.ChangeTurf(text2path("/turf/simulated/wall/mineral/[M]"))
|
||||
for(var/turf/simulated/wall/mineral/X in Tsrc.loc)
|
||||
if(X) X.add_hiddenprint(usr)
|
||||
qdel(src)
|
||||
return
|
||||
var/material/M = name_to_material[S.sheettype]
|
||||
if(!istype(M))
|
||||
return ..()
|
||||
|
||||
var/wall_fake
|
||||
add_hiddenprint(usr)
|
||||
|
||||
if(M.integrity < 50)
|
||||
user << "<span class='notice'>This material is too soft for use in wall construction.</span>"
|
||||
return
|
||||
|
||||
user << "<span class='notice'>You begin adding the plating...</span>"
|
||||
|
||||
if(!do_after(user,40) || !S.use(2))
|
||||
return
|
||||
|
||||
if(anchored)
|
||||
user << "<span class='notice'>You added the plating!</span>"
|
||||
else
|
||||
user << "<span class='notice'>You create a false wall! Push on it to open or close the passage.</span>"
|
||||
wall_fake = 1
|
||||
|
||||
var/turf/Tsrc = get_turf(src)
|
||||
Tsrc.ChangeTurf(/turf/simulated/wall)
|
||||
var/turf/simulated/wall/T = get_turf(src)
|
||||
T.set_material(M, reinf_material)
|
||||
if(wall_fake)
|
||||
T.can_open = 1
|
||||
T.add_hiddenprint(usr)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/pipe))
|
||||
var/obj/item/pipe/P = W
|
||||
if (P.pipe_type in list(0, 1, 5)) //simple pipes, simple bends, and simple manifolds.
|
||||
user.drop_item()
|
||||
P.loc = src.loc
|
||||
user << "\blue You fit the pipe into the [src]!"
|
||||
user << "<span class='notice'>You fit the pipe into the [src]!"
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/structure/girder/proc/reinforce_girder()
|
||||
cover = reinf_material.hardness
|
||||
health = 500
|
||||
state = 2
|
||||
icon_state = "reinforced"
|
||||
|
||||
/obj/structure/girder/verb/reinforce_with_material()
|
||||
set name = "Reinforce girder"
|
||||
set desc = "Reinforce a girder with metal."
|
||||
set src in view(1)
|
||||
|
||||
var/mob/living/user = usr
|
||||
if(!istype(user) || !(user.l_hand || user.r_hand))
|
||||
return
|
||||
|
||||
if(reinf_material)
|
||||
user << "\The [src] is already reinforced."
|
||||
return
|
||||
|
||||
var/obj/item/stack/sheet/S = user.l_hand
|
||||
if(!istype(S))
|
||||
S = user.r_hand
|
||||
if(!istype(S))
|
||||
user << "You cannot plate \the [src] with that."
|
||||
return
|
||||
|
||||
if(S.get_amount() < 2)
|
||||
user << "There is not enough material here to reinforce the girder."
|
||||
return
|
||||
|
||||
var/material/M = name_to_material[S.sheettype]
|
||||
if(!istype(M) || M.integrity < 50)
|
||||
user << "You cannot reinforce \the [src] with that; it is too soft."
|
||||
return
|
||||
|
||||
user << "<span class='notice'>Now reinforcing...</span>"
|
||||
if (!do_after(user,40) || !S.use(2))
|
||||
return
|
||||
user << "<span class='notice'>You added reinforcement!</span>"
|
||||
|
||||
reinf_material = M
|
||||
reinforce_girder()
|
||||
|
||||
|
||||
/obj/structure/girder/proc/dismantle()
|
||||
new /obj/item/stack/sheet/metal(get_turf(src))
|
||||
qdel(src)
|
||||
@@ -203,101 +219,40 @@
|
||||
return
|
||||
if(2.0)
|
||||
if (prob(30))
|
||||
var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal)
|
||||
new remains(loc)
|
||||
qdel(src)
|
||||
dismantle()
|
||||
return
|
||||
if(3.0)
|
||||
if (prob(5))
|
||||
var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal)
|
||||
new remains(loc)
|
||||
qdel(src)
|
||||
dismantle()
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/obj/structure/girder/displaced
|
||||
icon_state = "displaced"
|
||||
anchored = 0
|
||||
health = 50
|
||||
cover = 25
|
||||
|
||||
/obj/structure/girder/reinforced
|
||||
icon_state = "reinforced"
|
||||
state = 2
|
||||
health = 500
|
||||
cover = 80
|
||||
|
||||
/obj/structure/cultgirder
|
||||
/obj/structure/girder/cult
|
||||
icon= 'icons/obj/cult.dmi'
|
||||
icon_state= "cultgirder"
|
||||
anchored = 1
|
||||
density = 1
|
||||
layer = 2
|
||||
var/health = 250
|
||||
var/cover = 70
|
||||
health = 250
|
||||
cover = 70
|
||||
|
||||
/obj/structure/cultgirder/attack_generic(var/mob/user, var/damage, var/attack_message = "smashes apart", var/wallbreaker)
|
||||
if(!damage || !wallbreaker)
|
||||
return 0
|
||||
visible_message("<span class='danger'>[user] [attack_message] the [src]!</span>")
|
||||
dismantle()
|
||||
return 1
|
||||
|
||||
/obj/structure/cultgirder/proc/dismantle()
|
||||
/obj/structure/girder/cult/dismantle()
|
||||
new /obj/effect/decal/remains/human(get_turf(src))
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/cultgirder/attackby(obj/item/W as obj, mob/user as mob)
|
||||
/obj/structure/girder/cult/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
|
||||
user << "\blue Now disassembling the girder"
|
||||
user << "<span class='notice'>Now disassembling the girder...</span>"
|
||||
if(do_after(user,40))
|
||||
user << "\blue You dissasembled the girder!"
|
||||
user << "<span class='notice'>You dissasembled the girder!</span>"
|
||||
dismantle()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter))
|
||||
user << "\blue Now slicing apart the girder"
|
||||
user << "<span class='notice'>Now slicing apart the girder..."
|
||||
if(do_after(user,30))
|
||||
user << "\blue You slice apart the girder!"
|
||||
user << "<span class='notice'>You slice apart the girder!</span>"
|
||||
dismantle()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/pickaxe/diamonddrill))
|
||||
user << "\blue You drill through the girder!"
|
||||
user << "<span class='notice'>You drill through the girder!</span>"
|
||||
new /obj/effect/decal/remains/human(get_turf(src))
|
||||
dismantle()
|
||||
|
||||
/obj/structure/cultgirder/blob_act()
|
||||
if(prob(40))
|
||||
dismantle()
|
||||
|
||||
/obj/structure/cultgirder/bullet_act(var/obj/item/projectile/Proj) //No beam check- How else will you destroy the cult girder with silver bullets?????
|
||||
//Girders only provide partial cover. There's a chance that the projectiles will just pass through. (unless you are trying to shoot the girder)
|
||||
if(Proj.original != src && !prob(cover))
|
||||
return -1 //pass through
|
||||
|
||||
//Tasers and the like should not damage cultgirders.
|
||||
if(!(Proj.damage_type == BRUTE || Proj.damage_type == BURN))
|
||||
return
|
||||
|
||||
health -= Proj.damage
|
||||
..()
|
||||
if(health <= 0)
|
||||
dismantle()
|
||||
return
|
||||
|
||||
/obj/structure/cultgirder/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
qdel(src)
|
||||
return
|
||||
if(2.0)
|
||||
if (prob(30))
|
||||
dismantle()
|
||||
return
|
||||
if(3.0)
|
||||
if (prob(5))
|
||||
dismantle()
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
icon = 'icons/obj/doors/mineral_doors.dmi'
|
||||
icon_state = "metal"
|
||||
|
||||
var/mineralType = "metal"
|
||||
var/mineralType = DEFAULT_WALL_MATERIAL
|
||||
var/state = 0 //closed, 1 == open
|
||||
var/isSwitchingStates = 0
|
||||
var/hardness = 1
|
||||
@@ -119,24 +119,10 @@
|
||||
Dismantle(1)
|
||||
|
||||
proc/Dismantle(devastated = 0)
|
||||
if(!devastated)
|
||||
if (mineralType == "metal")
|
||||
var/ore = /obj/item/stack/sheet/metal
|
||||
for(var/i = 1, i <= oreAmount, i++)
|
||||
new ore(get_turf(src))
|
||||
else
|
||||
var/ore = text2path("/obj/item/stack/sheet/mineral/[mineralType]")
|
||||
for(var/i = 1, i <= oreAmount, i++)
|
||||
new ore(get_turf(src))
|
||||
else
|
||||
if (mineralType == "metal")
|
||||
var/ore = /obj/item/stack/sheet/metal
|
||||
for(var/i = 3, i <= oreAmount, i++)
|
||||
new ore(get_turf(src))
|
||||
else
|
||||
var/ore = text2path("/obj/item/stack/sheet/mineral/[mineralType]")
|
||||
for(var/i = 3, i <= oreAmount, i++)
|
||||
new ore(get_turf(src))
|
||||
var/material/M = name_to_material[mineralType]
|
||||
if(istype(M))
|
||||
for(var/i = (devastated? 1 : 3), i <= oreAmount, i++)
|
||||
new M.stack_type(get_turf(src))
|
||||
qdel(src)
|
||||
|
||||
ex_act(severity = 1)
|
||||
@@ -155,7 +141,7 @@
|
||||
return
|
||||
|
||||
/obj/structure/mineral_door/iron
|
||||
mineralType = "metal"
|
||||
mineralType = "iron"
|
||||
hardness = 3
|
||||
|
||||
/obj/structure/mineral_door/silver
|
||||
|
||||
@@ -41,6 +41,15 @@
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
new /obj/item/stack/sheet/metal(src.loc)
|
||||
qdel(src)
|
||||
else if(istype(W, /obj/item/weapon/grab))
|
||||
user.visible_message("<span class='notice'>[user] attempts to buckle [W:affecting] into \the [src]!</span>")
|
||||
if(do_after(user, 20))
|
||||
W:affecting.loc = loc
|
||||
if(buckle_mob(W:affecting))
|
||||
W:affecting.visible_message(\
|
||||
"<span class='danger'>[W:affecting.name] is buckled to [src] by [user.name]!</span>",\
|
||||
"<span class='danger'>You are buckled to [src] by [user.name]!</span>",\
|
||||
"<span class='notice'>You hear metal clanking.</span>")
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
@@ -37,10 +37,12 @@ var/can_call_ert
|
||||
log_admin("[key_name(usr)] used Dispatch Response Team.")
|
||||
trigger_armed_response_team(1)
|
||||
|
||||
|
||||
client/verb/JoinResponseTeam()
|
||||
set category = "IC"
|
||||
|
||||
if(!MayRespawn(1))
|
||||
return
|
||||
|
||||
if(istype(usr,/mob/dead/observer) || istype(usr,/mob/new_player))
|
||||
if(!send_emergency_team)
|
||||
usr << "No emergency response team is currently being sent."
|
||||
|
||||
@@ -1,141 +0,0 @@
|
||||
//Separate dm because it relates to two types of atoms + ease of removal in case it's needed.
|
||||
//Also assemblies.dm for falsewall checking for this when used.
|
||||
//I should really make the shuttle wall check run every time it's moved, but centcom uses unsimulated floors so !effort
|
||||
|
||||
/atom/proc/relativewall() //atom because it should be useable both for walls and false walls
|
||||
if(istype(src,/turf/simulated/floor/vault)||istype(src,/turf/simulated/wall/vault)) //HACK!!!
|
||||
return
|
||||
|
||||
var/junction = 0 //will be used to determine from which side the wall is connected to other walls
|
||||
|
||||
if(!istype(src,/turf/simulated/shuttle/wall)) //or else we'd have wacky shuttle merging with walls action
|
||||
for(var/turf/simulated/wall/W in orange(src,1))
|
||||
if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
|
||||
junction |= get_dir(src,W)
|
||||
for(var/obj/structure/falsewall/W in orange(src,1))
|
||||
if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
|
||||
junction |= get_dir(src,W)
|
||||
for(var/obj/structure/falserwall/W in orange(src,1))
|
||||
if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
|
||||
junction |= get_dir(src,W)
|
||||
|
||||
/* Commenting this out for now until we figure out what to do with shuttle smooth walls, if anything.
|
||||
As they are now, they sort of work screwy and may need further coding. Or just be scrapped.*/
|
||||
/*else
|
||||
for(var/turf/simulated/shuttle/wall/W in orange(src,1))
|
||||
if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
|
||||
junction |= get_dir(src,W)
|
||||
for(var/obj/machinery/shuttle/W in orange(src,1)) //stuff like engine and propulsion should merge with walls
|
||||
if(abs(src.x-W.x)-abs(src.y-W.y))
|
||||
junction |= get_dir(src,W)
|
||||
for(var/obj/machinery/door/W in orange(src,1)) //doors should not result in diagonal walls, it just looks ugly. checking if area is shuttle so it won't merge with the station
|
||||
if((abs(src.x-W.x)-abs(src.y-W.y)) && (istype(W.loc.loc,/area/shuttle) || istype(W.loc.loc,/area/supply)))
|
||||
junction |= get_dir(src,W)
|
||||
for(var/obj/structure/grille/W in orange(src,1)) //same for grilles. checking if area is shuttle so it won't merge with the station
|
||||
if((abs(src.x-W.x)-abs(src.y-W.y)) && (istype(W.loc.loc,/area/shuttle) || istype(W.loc.loc,/area/supply)))
|
||||
junction |= get_dir(src,W)*/
|
||||
|
||||
if(istype(src,/turf/simulated/wall))
|
||||
var/turf/simulated/wall/wall = src
|
||||
wall.icon_state = "[wall.walltype][junction]"
|
||||
else if (istype(src,/obj/structure/falserwall))
|
||||
src.icon_state = "rwall[junction]"
|
||||
else if (istype(src,/obj/structure/falsewall))
|
||||
var/obj/structure/falsewall/fwall = src
|
||||
fwall.icon_state = "[fwall.mineral][junction]"
|
||||
/* else if(istype(src,/turf/simulated/shuttle/wall))
|
||||
var/newicon = icon;
|
||||
var/newiconstate = icon_state;
|
||||
if(junction!=5 && junction!=6 && junction!=9 && junction!=10) //if it's not diagonal, all is well, no additional calculations needed
|
||||
src.icon_state = "swall[junction]"
|
||||
else //if it's diagonal, we need to figure out if we're using the floor diagonal or the space diagonal sprite
|
||||
var/is_floor = 0
|
||||
for(var/turf/unsimulated/floor/F in orange(src,1))
|
||||
if(abs(src.x-F.x)-abs(src.y-F.y))
|
||||
if((15-junction) & get_dir(src,F)) //if there's a floor in at least one of the empty space directions, return 1
|
||||
is_floor = 1
|
||||
newicon = F.icon
|
||||
newiconstate = F.icon_state //we'll save these for later
|
||||
for(var/turf/simulated/floor/F in orange(src,1))
|
||||
if(abs(src.x-F.x)-abs(src.y-F.y))
|
||||
if((15-junction) & get_dir(src,F)) //if there's a floor in at least one of the empty space directions, return 1
|
||||
is_floor = 1
|
||||
newicon = F.icon
|
||||
newiconstate = F.icon_state //we'll save these for later
|
||||
for(var/turf/simulated/shuttle/floor/F in orange(src,1))
|
||||
if(abs(src.x-F.x)-abs(src.y-F.y))
|
||||
if((15-junction) & get_dir(src,F)) //if there's a floor in at least one of the empty space directions, return 1
|
||||
is_floor = 1
|
||||
newicon = F.icon
|
||||
newiconstate = F.icon_state //we'll save these for later
|
||||
if(is_floor) //if is_floor = 1, we use the floor diagonal sprite
|
||||
src.icon = newicon; //we'll set the floor's icon to the floor next to it and overlay the wall segment. shuttle floor sprites have priority
|
||||
src.icon_state = newiconstate; //
|
||||
src.overlays += icon('icons/turf/shuttle.dmi',"swall_f[junction]")
|
||||
else //otherwise, the space one
|
||||
src.icon_state = "swall_s[junction]"*/
|
||||
|
||||
return
|
||||
|
||||
/atom/proc/relativewall_neighbours()
|
||||
for(var/turf/simulated/wall/W in range(src,1))
|
||||
W.relativewall()
|
||||
for(var/obj/structure/falsewall/W in range(src,1))
|
||||
W.relativewall()
|
||||
W.update_icon()//Refreshes the wall to make sure the icons don't desync
|
||||
for(var/obj/structure/falserwall/W in range(src,1))
|
||||
W.relativewall()
|
||||
return
|
||||
|
||||
/turf/simulated/wall/New()
|
||||
relativewall_neighbours()
|
||||
..()
|
||||
|
||||
/*/turf/simulated/shuttle/wall/New()
|
||||
|
||||
spawn(20) //testing if this will make /obj/machinery/shuttle and /door count - It does, it stays.
|
||||
if(src.icon_state in list("wall1", "wall", "diagonalWall", "wall_floor", "wall_space")) //so wizard den, syndie shuttle etc will remain black
|
||||
for(var/turf/simulated/shuttle/wall/W in range(src,1))
|
||||
W.relativewall()
|
||||
|
||||
..()*/
|
||||
|
||||
/turf/simulated/wall/Destroy()
|
||||
spawn(10)
|
||||
for(var/turf/simulated/wall/W in range(src,1))
|
||||
W.relativewall()
|
||||
|
||||
for(var/obj/structure/falsewall/W in range(src,1))
|
||||
W.relativewall()
|
||||
|
||||
for(var/direction in cardinal)
|
||||
for(var/obj/effect/plant/shroom in get_step(src,direction))
|
||||
if(!shroom.floor) //shrooms drop to the floor
|
||||
shroom.floor = 1
|
||||
shroom.update_icon()
|
||||
shroom.pixel_x = 0
|
||||
shroom.pixel_y = 0
|
||||
|
||||
..()
|
||||
|
||||
/turf/simulated/wall/relativewall()
|
||||
if(istype(src,/turf/simulated/wall/vault)) //HACK!!!
|
||||
return
|
||||
|
||||
var/junction = 0 //will be used to determine from which side the wall is connected to other walls
|
||||
|
||||
for(var/turf/simulated/wall/W in orange(src,1))
|
||||
if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
|
||||
if(src.mineral == W.mineral)//Only 'like' walls connect -Sieve
|
||||
junction |= get_dir(src,W)
|
||||
for(var/obj/structure/falsewall/W in orange(src,1))
|
||||
if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
|
||||
if(src.mineral == W.mineral)
|
||||
junction |= get_dir(src,W)
|
||||
for(var/obj/structure/falserwall/W in orange(src,1))
|
||||
if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
|
||||
if(src.mineral == W.mineral)
|
||||
junction |= get_dir(src,W)
|
||||
var/turf/simulated/wall/wall = src
|
||||
wall.icon_state = "[wall.walltype][junction]"
|
||||
return
|
||||
@@ -41,7 +41,7 @@ var/list/wood_icons = list("wood","wood-broken")
|
||||
var/lava = 0
|
||||
var/broken = 0
|
||||
var/burnt = 0
|
||||
var/mineral = "metal"
|
||||
var/mineral = DEFAULT_WALL_MATERIAL
|
||||
var/floor_type = /obj/item/stack/tile/plasteel
|
||||
var/lightfloor_state // for light floors, this is the state of the tile. 0-7, 0x4 is on-bit - use the helper procs below
|
||||
|
||||
|
||||
@@ -0,0 +1,311 @@
|
||||
//Interactions
|
||||
/turf/simulated/wall/proc/toggle_open(var/mob/user)
|
||||
|
||||
if(can_open == WALL_OPENING)
|
||||
return
|
||||
|
||||
if(density)
|
||||
can_open = WALL_OPENING
|
||||
set_wall_state("[material.icon_base]fwall_open")
|
||||
//flick("[material.icon_base]fwall_opening", src)
|
||||
sleep(15)
|
||||
density = 0
|
||||
set_light(0)
|
||||
else
|
||||
can_open = WALL_OPENING
|
||||
//flick("[material.icon_base]fwall_closing", src)
|
||||
set_wall_state("[material.icon_base]0")
|
||||
density = 1
|
||||
sleep(15)
|
||||
set_light(1)
|
||||
|
||||
can_open = WALL_CAN_OPEN
|
||||
update_icon()
|
||||
|
||||
/turf/simulated/wall/proc/fail_smash(var/mob/user)
|
||||
user << "<span class='danger'>You smash against the wall!</span>"
|
||||
take_damage(rand(25,75))
|
||||
|
||||
/turf/simulated/wall/proc/success_smash(var/mob/user)
|
||||
user << "<span class='danger'>You smash through the wall!</span>"
|
||||
spawn(1)
|
||||
dismantle_wall(1)
|
||||
|
||||
/turf/simulated/wall/proc/try_touch(var/mob/user, var/rotting)
|
||||
|
||||
if(rotting)
|
||||
if(reinf_material)
|
||||
user << "<span class='danger'>\The [reinf_material.display_name] feels porous and crumbly.</span>"
|
||||
else
|
||||
user << "<span class='danger'>\The [material.display_name] crumbles under your touch!</span>"
|
||||
dismantle_wall()
|
||||
return 1
|
||||
|
||||
if(..()) return 1
|
||||
|
||||
if(!can_open)
|
||||
user << "<span class='notice'>You push the wall, but nothing happens.</span>"
|
||||
playsound(src, 'sound/weapons/Genhit.ogg', 25, 1)
|
||||
else
|
||||
toggle_open(user)
|
||||
return 0
|
||||
|
||||
|
||||
/turf/simulated/wall/attack_hand(var/mob/user)
|
||||
|
||||
radiate()
|
||||
add_fingerprint(user)
|
||||
var/rotting = (locate(/obj/effect/overlay/wallrot) in src)
|
||||
if (HULK in user.mutations)
|
||||
if (rotting || !prob(material.hardness))
|
||||
success_smash(user)
|
||||
else
|
||||
fail_smash(user)
|
||||
return 1
|
||||
|
||||
try_touch(user, rotting)
|
||||
|
||||
/turf/simulated/wall/attack_generic(var/mob/user, var/damage, var/attack_message, var/wallbreaker)
|
||||
|
||||
radiate()
|
||||
var/rotting = (locate(/obj/effect/overlay/wallrot) in src)
|
||||
if(!damage || !wallbreaker)
|
||||
try_touch(user, rotting)
|
||||
return
|
||||
|
||||
if(rotting)
|
||||
return success_smash(user)
|
||||
|
||||
if(reinf_material)
|
||||
if((wallbreaker == 2) || (damage >= max(material.hardness,reinf_material.hardness)))
|
||||
return success_smash(user)
|
||||
else if(damage >= material.hardness)
|
||||
return success_smash(user)
|
||||
return fail_smash(user)
|
||||
|
||||
/turf/simulated/wall/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
|
||||
if (!user.)
|
||||
user << "<span class='warning'>You don't have the dexterity to do this!</span>"
|
||||
return
|
||||
|
||||
//get the user's location
|
||||
if(!istype(user.loc, /turf)) return //can't do this stuff whilst inside objects and such
|
||||
|
||||
if(W)
|
||||
radiate()
|
||||
if(is_hot(W))
|
||||
ignite(is_hot(W))
|
||||
|
||||
if(locate(/obj/effect/overlay/wallrot) in src)
|
||||
if(istype(W, /obj/item/weapon/weldingtool) )
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if( WT.remove_fuel(0,user) )
|
||||
user << "<span class='notice'>You burn away the fungi with \the [WT].</span>"
|
||||
playsound(src, 'sound/items/Welder.ogg', 10, 1)
|
||||
for(var/obj/effect/overlay/wallrot/WR in src)
|
||||
qdel(WR)
|
||||
return
|
||||
else if(!is_sharp(W) && W.force >= 10 || W.force >= 20)
|
||||
user << "<span class='notice'>\The [src] crumbles away under the force of your [W.name].</span>"
|
||||
src.dismantle_wall(1)
|
||||
return
|
||||
|
||||
//THERMITE related stuff. Calls src.thermitemelt() which handles melting simulated walls and the relevant effects
|
||||
if(thermite)
|
||||
if( istype(W, /obj/item/weapon/weldingtool) )
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if( WT.remove_fuel(0,user) )
|
||||
thermitemelt(user)
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter))
|
||||
thermitemelt(user)
|
||||
return
|
||||
|
||||
else if( istype(W, /obj/item/weapon/melee/energy/blade) )
|
||||
var/obj/item/weapon/melee/energy/blade/EB = W
|
||||
|
||||
EB.spark_system.start()
|
||||
user << "<span class='notice'>You slash \the [src] with \the [EB]; the thermite ignites!</span>"
|
||||
playsound(src, "sparks", 50, 1)
|
||||
playsound(src, 'sound/weapons/blade1.ogg', 50, 1)
|
||||
|
||||
thermitemelt(user)
|
||||
return
|
||||
|
||||
var/turf/T = user.loc //get user's location for delay checks
|
||||
|
||||
if(damage && istype(W, /obj/item/weapon/weldingtool))
|
||||
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
|
||||
if(!WT.isOn())
|
||||
return
|
||||
|
||||
if(WT.remove_fuel(0,user))
|
||||
user << "<span class='notice'>You start repairing the damage to [src].</span>"
|
||||
playsound(src, 'sound/items/Welder.ogg', 100, 1)
|
||||
if(do_after(user, max(5, damage / 5)) && WT && WT.isOn())
|
||||
user << "<span class='notice'>You finish repairing the damage to [src].</span>"
|
||||
take_damage(-damage)
|
||||
else
|
||||
user << "<span class='notice'>You need more welding fuel to complete this task.</span>"
|
||||
return
|
||||
return
|
||||
|
||||
// Basic dismantling.
|
||||
if(isnull(construction_stage) || !reinf_material)
|
||||
|
||||
var/cut_delay = 60 - material.cut_delay
|
||||
var/dismantle_verb
|
||||
var/dismantle_sound
|
||||
|
||||
if(istype(W,/obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(!WT.isOn())
|
||||
return
|
||||
if(!WT.remove_fuel(0,user))
|
||||
user << "<span class='notice'>You need more welding fuel to complete this task.</span>"
|
||||
return
|
||||
dismantle_verb = "cutting"
|
||||
dismantle_sound = 'sound/items/Welder.ogg'
|
||||
cut_delay *= 0.7
|
||||
else if(istype(W,/obj/item/weapon/melee/energy/blade))
|
||||
dismantle_sound = "sparks"
|
||||
dismantle_verb = "slicing"
|
||||
cut_delay *= 0.5
|
||||
else if(istype(W,/obj/item/weapon/pickaxe))
|
||||
var/obj/item/weapon/pickaxe/P = W
|
||||
dismantle_verb = P.drill_verb
|
||||
dismantle_sound = P.drill_sound
|
||||
cut_delay -= P.digspeed
|
||||
|
||||
if(dismantle_verb)
|
||||
|
||||
user << "<span class='notice'>You begin [dismantle_verb] through the outer plating.</span>"
|
||||
if(dismantle_sound)
|
||||
playsound(src, dismantle_sound, 100, 1)
|
||||
|
||||
if(cut_delay<0)
|
||||
cut_delay = 0
|
||||
|
||||
if(!do_after(user,cut_delay))
|
||||
return
|
||||
|
||||
user << "<span class='notice'>You remove the outer plating.</span>"
|
||||
dismantle_wall()
|
||||
user.visible_message("<span class='warning'>The wall was torn open by [user]!</span>")
|
||||
return
|
||||
|
||||
//Reinforced dismantling.
|
||||
else
|
||||
switch(construction_stage)
|
||||
if(6)
|
||||
if (istype(W, /obj/item/weapon/wirecutters))
|
||||
playsound(src, 'sound/items/Wirecutter.ogg', 100, 1)
|
||||
construction_stage = 5
|
||||
new /obj/item/stack/rods( src )
|
||||
user << "<span class='notice'>You cut the outer grille.</span>"
|
||||
set_wall_state()
|
||||
return
|
||||
if(5)
|
||||
if (istype(W, /obj/item/weapon/screwdriver))
|
||||
user << "<span class='notice'>You begin removing the support lines.</span>"
|
||||
playsound(src, 'sound/items/Screwdriver.ogg', 100, 1)
|
||||
if(!do_after(user,40) || !istype(src, /turf/simulated/wall) || construction_stage != 5)
|
||||
return
|
||||
construction_stage = 4
|
||||
set_wall_state()
|
||||
user << "<span class='notice'>You remove the support lines.</span>"
|
||||
return
|
||||
else if( istype(W, /obj/item/stack/rods) )
|
||||
var/obj/item/stack/O = W
|
||||
if(O.get_amount()>0)
|
||||
O.use(1)
|
||||
construction_stage = 6
|
||||
set_wall_state()
|
||||
user << "<span class='notice'>You replace the outer grille.</span>"
|
||||
return
|
||||
if(4)
|
||||
var/cut_cover
|
||||
if(istype(W,/obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(!WT.isOn())
|
||||
return
|
||||
if(WT.remove_fuel(0,user))
|
||||
cut_cover=1
|
||||
else
|
||||
user << "<span class='notice'>You need more welding fuel to complete this task.</span>"
|
||||
return
|
||||
else if (istype(W, /obj/item/weapon/pickaxe/plasmacutter))
|
||||
cut_cover = 1
|
||||
if(cut_cover)
|
||||
user << "<span class='notice'>You begin slicing through the metal cover.</span>"
|
||||
playsound(src, 'sound/items/Welder.ogg', 100, 1)
|
||||
if(!do_after(user, 60) || !istype(src, /turf/simulated/wall) || construction_stage != 4)
|
||||
return
|
||||
construction_stage = 3
|
||||
set_wall_state()
|
||||
user << "<span class='notice'>You press firmly on the cover, dislodging it.</span>"
|
||||
return
|
||||
if(3)
|
||||
if (istype(W, /obj/item/weapon/crowbar))
|
||||
user << "<span class='notice'>You struggle to pry off the cover.</span>"
|
||||
playsound(src, 'sound/items/Crowbar.ogg', 100, 1)
|
||||
if(!do_after(user,100) || !istype(src, /turf/simulated/wall) || construction_stage != 3)
|
||||
return
|
||||
construction_stage = 2
|
||||
set_wall_state()
|
||||
user << "<span class='notice'>You pry off the cover.</span>"
|
||||
return
|
||||
if(2)
|
||||
if (istype(W, /obj/item/weapon/wrench))
|
||||
user << "<span class='notice'>You start loosening the anchoring bolts which secure the support rods to their frame.</span>"
|
||||
playsound(src, 'sound/items/Ratchet.ogg', 100, 1)
|
||||
if(!do_after(user,40) || !istype(src, /turf/simulated/wall) || construction_stage != 2)
|
||||
return
|
||||
construction_stage = 1
|
||||
set_wall_state()
|
||||
user << "<span class='notice'>You remove the bolts anchoring the support rods.</span>"
|
||||
return
|
||||
if(1)
|
||||
var/cut_cover
|
||||
if(istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if( WT.remove_fuel(0,user) )
|
||||
cut_cover=1
|
||||
else
|
||||
user << "<span class='notice'>You need more welding fuel to complete this task.</span>"
|
||||
return
|
||||
else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter))
|
||||
cut_cover = 1
|
||||
if(cut_cover)
|
||||
user << "<span class='notice'>You begin slicing through the support rods.</span>"
|
||||
playsound(src, 'sound/items/Welder.ogg', 100, 1)
|
||||
if(!do_after(user,70) || !istype(src, /turf/simulated/wall) || construction_stage != 1)
|
||||
return
|
||||
construction_stage = 0
|
||||
set_wall_state()
|
||||
new /obj/item/stack/rods(src)
|
||||
user << "<span class='notice'>The support rods drop out as you cut them loose from the frame.</span>"
|
||||
return
|
||||
if(0)
|
||||
if(istype(W, /obj/item/weapon/crowbar))
|
||||
user << "<span class='notice'>You struggle to pry off the outer sheath.</span>"
|
||||
playsound(src, 'sound/items/Crowbar.ogg', 100, 1)
|
||||
sleep(100)
|
||||
if(!istype(src, /turf/simulated/wall) || !user || !W || !T ) return
|
||||
if(user.loc == T && user.get_active_hand() == W )
|
||||
user << "<span class='notice'>You pry off the outer sheath.</span>"
|
||||
dismantle_wall()
|
||||
return
|
||||
|
||||
if(istype(W,/obj/item/frame))
|
||||
var/obj/item/frame/F = W
|
||||
F.try_build(src)
|
||||
return
|
||||
|
||||
else if(!istype(W,/obj/item/weapon/rcd) && !istype(W, /obj/item/weapon/reagent_containers))
|
||||
return attack_hand(user)
|
||||
|
||||
@@ -0,0 +1,130 @@
|
||||
/turf/simulated/wall/proc/update_material()
|
||||
|
||||
if(!material)
|
||||
return
|
||||
|
||||
if(reinf_material)
|
||||
construction_stage = 6
|
||||
else
|
||||
construction_stage = null
|
||||
if(!material)
|
||||
material = name_to_material[DEFAULT_WALL_MATERIAL]
|
||||
if(material)
|
||||
explosion_resistance = material.explosion_resistance
|
||||
if(reinf_material && reinf_material.explosion_resistance > explosion_resistance)
|
||||
explosion_resistance = reinf_material.explosion_resistance
|
||||
|
||||
if(reinf_material)
|
||||
name = "reinforced [material.display_name] wall"
|
||||
desc = "It seems to be a section of hull reinforced with [reinf_material.display_name] and plated with [material.display_name]."
|
||||
else
|
||||
name = "[material.display_name] wall"
|
||||
desc = "It seems to be a section of hull plated with [material.display_name]."
|
||||
|
||||
set_wall_state("[material.icon_base]0")
|
||||
|
||||
if(material.opacity > 0.5 && !opacity)
|
||||
set_light(1)
|
||||
else if(material.opacity < 0.5 && opacity)
|
||||
set_light(0)
|
||||
|
||||
update_icon()
|
||||
check_relatives()
|
||||
|
||||
/turf/simulated/wall/proc/set_wall_state(var/new_state)
|
||||
|
||||
if(!material)
|
||||
return
|
||||
|
||||
if(new_state)
|
||||
last_state = new_state
|
||||
else if(last_state)
|
||||
new_state = last_state
|
||||
else
|
||||
return
|
||||
|
||||
overlays.Cut()
|
||||
|
||||
if(!wall_cache["[new_state]-[material.icon_colour]"])
|
||||
var/image/I = image(icon='icons/turf/wall_masks.dmi',icon_state="[new_state]")
|
||||
I.color = material.icon_colour
|
||||
wall_cache["[new_state]-[material.icon_colour]"] = I
|
||||
overlays |= wall_cache["[new_state]-[material.icon_colour]"]
|
||||
if(reinf_material)
|
||||
|
||||
var/cache_key = "[material.icon_reinf]-[reinf_material.icon_colour]"
|
||||
if(!isnull(construction_stage) && construction_stage<6)
|
||||
cache_key = "reinf_construct-[reinf_material.icon_colour]-[construction_stage]"
|
||||
|
||||
if(!wall_cache[cache_key])
|
||||
var/image/I
|
||||
if(!isnull(construction_stage) && construction_stage<6)
|
||||
I = image(icon='icons/turf/wall_masks.dmi',icon_state="reinf_construct-[construction_stage]")
|
||||
else
|
||||
I = image(icon='icons/turf/wall_masks.dmi',icon_state="[material.icon_reinf]")
|
||||
I.color = reinf_material.icon_colour
|
||||
wall_cache[cache_key] = I
|
||||
overlays |= wall_cache[cache_key]
|
||||
|
||||
/turf/simulated/wall/proc/set_material(var/material/newmaterial, var/material/newrmaterial)
|
||||
material = newmaterial
|
||||
reinf_material = newrmaterial
|
||||
check_relatives()
|
||||
check_relatives(1)
|
||||
|
||||
/turf/simulated/wall/proc/update_icon()
|
||||
|
||||
if(!material)
|
||||
return
|
||||
|
||||
if(!damage_overlays[1]) //list hasn't been populated
|
||||
generate_overlays()
|
||||
|
||||
if(density)
|
||||
check_relatives(1)
|
||||
else
|
||||
set_wall_state("[material.icon_base]fwall_open")
|
||||
|
||||
var/overlay = round(damage / material.integrity * damage_overlays.len) + 1
|
||||
if(overlay > damage_overlays.len)
|
||||
overlay = damage_overlays.len
|
||||
if(density)
|
||||
if(damage_overlay && overlay == damage_overlay) //No need to update.
|
||||
return
|
||||
overlays += damage_overlays[overlay]
|
||||
damage_overlay = overlay
|
||||
return
|
||||
|
||||
/turf/simulated/wall/proc/generate_overlays()
|
||||
var/alpha_inc = 256 / damage_overlays.len
|
||||
|
||||
for(var/i = 1; i <= damage_overlays.len; i++)
|
||||
var/image/img = image(icon = 'icons/turf/walls.dmi', icon_state = "overlay_damage")
|
||||
img.blend_mode = BLEND_MULTIPLY
|
||||
img.alpha = (i * alpha_inc) - 1
|
||||
damage_overlays[i] = img
|
||||
|
||||
//Smoothwall code. update_self for relativewall(), not for relativewall_neighbors()
|
||||
/turf/simulated/wall/proc/check_relatives(var/update_self)
|
||||
if(!material)
|
||||
return
|
||||
var/junction
|
||||
if(update_self)
|
||||
junction = 0
|
||||
for(var/checkdir in cardinal)
|
||||
var/turf/simulated/wall/T = get_step(src, checkdir)
|
||||
if(!istype(T) || !T.material)
|
||||
continue
|
||||
if(T.material && can_join_with(T))
|
||||
if(update_self)
|
||||
junction |= get_dir(src,T) //Not too sure why, but using checkdir just breaks walls.
|
||||
else
|
||||
T.check_relatives(1)
|
||||
if(!isnull(junction))
|
||||
set_wall_state("[material.icon_base][junction]")
|
||||
return
|
||||
|
||||
/turf/simulated/wall/proc/can_join_with(var/turf/simulated/wall/W)
|
||||
if(material && W.material && material.name == W.material.name)
|
||||
return 1
|
||||
return 0
|
||||
@@ -0,0 +1,43 @@
|
||||
/turf/simulated/wall/r_wall
|
||||
icon_state = "rgeneric"
|
||||
/turf/simulated/wall/r_wall/New(var/newloc)
|
||||
..(newloc, DEFAULT_WALL_MATERIAL,"plasteel") //3strong
|
||||
/turf/simulated/wall/cult
|
||||
icon_state = "cult"
|
||||
/turf/simulated/wall/cult/New(var/newloc)
|
||||
..(newloc,"cult","cult2")
|
||||
|
||||
/turf/unsimulated/wall/cult
|
||||
name = "cult wall"
|
||||
desc = "Hideous images dance beneath the surface."
|
||||
icon = 'icons/turf/wall_masks.dmi'
|
||||
icon_state = "cult"
|
||||
|
||||
|
||||
/turf/simulated/wall/iron/New(var/newloc)
|
||||
..(newloc,"iron")
|
||||
/turf/simulated/wall/uranium/New(var/newloc)
|
||||
..(newloc,"uranium")
|
||||
/turf/simulated/wall/diamond/New(var/newloc)
|
||||
..(newloc,"diamond")
|
||||
/turf/simulated/wall/gold/New(var/newloc)
|
||||
..(newloc,"gold")
|
||||
/turf/simulated/wall/silver/New(var/newloc)
|
||||
..(newloc,"silver")
|
||||
/turf/simulated/wall/phoron/New(var/newloc)
|
||||
..(newloc,"phoron")
|
||||
/turf/simulated/wall/sandstone/New(var/newloc)
|
||||
..(newloc,"sandstone")
|
||||
|
||||
/turf/simulated/wall/ironphoron/New(var/newloc)
|
||||
..(newloc,"iron","phoron")
|
||||
/turf/simulated/wall/golddiamond/New(var/newloc)
|
||||
..(newloc,"gold","diamond")
|
||||
/turf/simulated/wall/silvergold/New(var/newloc)
|
||||
..(newloc,"silver","gold")
|
||||
/turf/simulated/wall/sandstonediamond/New(var/newloc)
|
||||
..(newloc,"sandstone","diamond")
|
||||
|
||||
|
||||
/turf/simulated/wall/cult/New(var/newloc)
|
||||
..(newloc,"cult","cult2")
|
||||
+121
-336
@@ -1,29 +1,47 @@
|
||||
var/list/global/wall_cache = list()
|
||||
|
||||
/turf/simulated/wall
|
||||
name = "wall"
|
||||
desc = "A huge chunk of metal used to seperate rooms."
|
||||
icon = 'icons/turf/walls.dmi'
|
||||
var/mineral = "metal"
|
||||
var/rotting = 0
|
||||
|
||||
var/damage = 0
|
||||
var/damage_cap = 150 //Wall will break down to girders if damage reaches this point
|
||||
|
||||
var/damage_overlay
|
||||
var/global/damage_overlays[8]
|
||||
|
||||
var/max_temperature = 1800 //K, walls will take damage if they're next to a fire hotter than this
|
||||
|
||||
icon = 'icons/turf/wall_masks.dmi'
|
||||
icon_state = "generic"
|
||||
opacity = 1
|
||||
density = 1
|
||||
blocks_air = 1
|
||||
|
||||
thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT
|
||||
heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall
|
||||
|
||||
var/walltype = "metal"
|
||||
var/damage = 0
|
||||
var/damage_overlay
|
||||
var/global/damage_overlays[8]
|
||||
var/active
|
||||
var/last_event
|
||||
var/can_open = 0
|
||||
var/material/material
|
||||
var/material/reinf_material
|
||||
var/last_state
|
||||
var/construction_stage
|
||||
|
||||
/turf/simulated/wall/New(var/newloc, var/materialtype, var/rmaterialtype)
|
||||
..(newloc)
|
||||
icon_state = "blank"
|
||||
if(!name_to_material)
|
||||
populate_material_list()
|
||||
if(!materialtype)
|
||||
materialtype = DEFAULT_WALL_MATERIAL
|
||||
material = name_to_material[materialtype]
|
||||
if(!isnull(rmaterialtype))
|
||||
reinf_material = name_to_material[rmaterialtype]
|
||||
update_material()
|
||||
|
||||
/turf/simulated/wall/bullet_act(var/obj/item/projectile/Proj)
|
||||
|
||||
radiate()
|
||||
if(istype(Proj,/obj/item/projectile/beam))
|
||||
ignite(2500)
|
||||
else if(istype(Proj,/obj/item/projectile/ion))
|
||||
ignite(500)
|
||||
|
||||
// Tasers and stuff? No thanks. Also no clone or tox damage crap.
|
||||
if(!(Proj.damage_type == BRUTE || Proj.damage_type == BURN))
|
||||
return
|
||||
@@ -45,25 +63,29 @@
|
||||
|
||||
take_damage(tforce)
|
||||
|
||||
/turf/simulated/wall/Destroy()
|
||||
for(var/obj/effect/E in src) if(E.name == "Wallrot") qdel(E)
|
||||
..()
|
||||
/turf/simulated/wall/proc/clear_plants()
|
||||
for(var/obj/effect/overlay/wallrot/WR in src)
|
||||
qdel(WR)
|
||||
for(var/obj/effect/plant/plant in range(src, 1))
|
||||
if(!plant.floor) //shrooms drop to the floor
|
||||
plant.floor = 1
|
||||
plant.update_icon()
|
||||
plant.pixel_x = 0
|
||||
plant.pixel_y = 0
|
||||
plant.update_neighbors()
|
||||
|
||||
/turf/simulated/wall/ChangeTurf(var/newtype)
|
||||
for(var/obj/effect/E in src) if(E.name == "Wallrot") qdel(E)
|
||||
for(var/obj/effect/plant/plant in range(1))
|
||||
plant.update_neighbors()
|
||||
clear_plants()
|
||||
..(newtype)
|
||||
|
||||
//Appearance
|
||||
|
||||
/turf/simulated/wall/examine(mob/user)
|
||||
. = ..(user)
|
||||
|
||||
if(!damage)
|
||||
user << "<span class='notice'>It looks fully intact.</span>"
|
||||
else
|
||||
var/dam = damage / damage_cap
|
||||
var/dam = damage / material.integrity
|
||||
if(dam <= 0.3)
|
||||
user << "<span class='warning'>It looks slightly damaged.</span>"
|
||||
else if(dam <= 0.6)
|
||||
@@ -71,43 +93,14 @@
|
||||
else
|
||||
user << "<span class='danger'>It looks heavily damaged.</span>"
|
||||
|
||||
if(rotting)
|
||||
if(locate(/obj/effect/overlay/wallrot) in src)
|
||||
user << "<span class='warning'>There is fungus growing on [src].</span>"
|
||||
|
||||
/turf/simulated/wall/proc/update_icon()
|
||||
if(!damage_overlays[1]) //list hasn't been populated
|
||||
generate_overlays()
|
||||
|
||||
if(!damage)
|
||||
overlays.Cut()
|
||||
return
|
||||
|
||||
var/overlay = round(damage / damage_cap * damage_overlays.len) + 1
|
||||
if(overlay > damage_overlays.len)
|
||||
overlay = damage_overlays.len
|
||||
|
||||
if(damage_overlay && overlay == damage_overlay) //No need to update.
|
||||
return
|
||||
|
||||
overlays.Cut()
|
||||
overlays += damage_overlays[overlay]
|
||||
damage_overlay = overlay
|
||||
|
||||
return
|
||||
|
||||
/turf/simulated/wall/proc/generate_overlays()
|
||||
var/alpha_inc = 256 / damage_overlays.len
|
||||
|
||||
for(var/i = 1; i <= damage_overlays.len; i++)
|
||||
var/image/img = image(icon = 'icons/turf/walls.dmi', icon_state = "overlay_damage")
|
||||
img.blend_mode = BLEND_MULTIPLY
|
||||
img.alpha = (i * alpha_inc) - 1
|
||||
damage_overlays[i] = img
|
||||
|
||||
//Damage
|
||||
|
||||
/turf/simulated/wall/melt()
|
||||
if(mineral == "diamond")
|
||||
|
||||
if(!can_melt())
|
||||
return
|
||||
|
||||
src.ChangeTurf(/turf/simulated/floor/plating)
|
||||
@@ -127,8 +120,11 @@
|
||||
return
|
||||
|
||||
/turf/simulated/wall/proc/update_damage()
|
||||
var/cap = damage_cap
|
||||
if(rotting)
|
||||
var/cap = material.integrity
|
||||
if(reinf_material)
|
||||
cap += reinf_material.integrity
|
||||
|
||||
if(locate(/obj/effect/overlay/wallrot) in src)
|
||||
cap = cap / 10
|
||||
|
||||
if(damage >= cap)
|
||||
@@ -138,52 +134,25 @@
|
||||
|
||||
return
|
||||
|
||||
/turf/simulated/wall/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)//Doesn't fucking work because walls don't interact with air :(
|
||||
ignite(exposed_temperature)
|
||||
|
||||
/turf/simulated/wall/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume)
|
||||
if(adj_temp > max_temperature)
|
||||
take_damage(log(RAND_F(0.9, 1.1) * (adj_temp - max_temperature)))
|
||||
ignite(adj_temp)
|
||||
if(adj_temp > material.melting_point)
|
||||
take_damage(log(RAND_F(0.9, 1.1) * (adj_temp - material.melting_point)))
|
||||
|
||||
return ..()
|
||||
|
||||
/turf/simulated/wall/proc/dismantle_wall(devastated=0, explode=0)
|
||||
if(istype(src,/turf/simulated/wall/r_wall))
|
||||
if(!devastated)
|
||||
playsound(src, 'sound/items/Welder.ogg', 100, 1)
|
||||
new /obj/structure/girder/reinforced(src)
|
||||
new /obj/item/stack/sheet/plasteel( src )
|
||||
else
|
||||
new /obj/item/stack/sheet/metal( src )
|
||||
new /obj/item/stack/sheet/metal( src )
|
||||
new /obj/item/stack/sheet/plasteel( src )
|
||||
else if(istype(src,/turf/simulated/wall/cult))
|
||||
if(!devastated)
|
||||
playsound(src, 'sound/items/Welder.ogg', 100, 1)
|
||||
new /obj/effect/decal/cleanable/blood(src)
|
||||
new /obj/structure/cultgirder(src)
|
||||
else
|
||||
new /obj/effect/decal/cleanable/blood(src)
|
||||
new /obj/effect/decal/remains/human(src)
|
||||
|
||||
playsound(src, 'sound/items/Welder.ogg', 100, 1)
|
||||
if(reinf_material)
|
||||
reinf_material.place_dismantled_girder(src, reinf_material)
|
||||
reinf_material.place_dismantled_product(src,devastated)
|
||||
else
|
||||
if(!devastated)
|
||||
playsound(src, 'sound/items/Welder.ogg', 100, 1)
|
||||
new /obj/structure/girder(src)
|
||||
if (mineral == "metal")
|
||||
new /obj/item/stack/sheet/metal( src )
|
||||
new /obj/item/stack/sheet/metal( src )
|
||||
else
|
||||
var/M = text2path("/obj/item/stack/sheet/mineral/[mineral]")
|
||||
new M( src )
|
||||
new M( src )
|
||||
else
|
||||
if (mineral == "metal")
|
||||
new /obj/item/stack/sheet/metal( src )
|
||||
new /obj/item/stack/sheet/metal( src )
|
||||
new /obj/item/stack/sheet/metal( src )
|
||||
else
|
||||
var/M = text2path("/obj/item/stack/sheet/mineral/[mineral]")
|
||||
new M( src )
|
||||
new M( src )
|
||||
new /obj/item/stack/sheet/metal( src )
|
||||
material.place_dismantled_girder(src)
|
||||
material.place_dismantled_product(src,devastated)
|
||||
|
||||
for(var/obj/O in src.contents) //Eject contents!
|
||||
if(istype(O,/obj/structure/sign/poster))
|
||||
@@ -215,24 +184,19 @@
|
||||
|
||||
// Wall-rot effect, a nasty fungus that destroys walls.
|
||||
/turf/simulated/wall/proc/rot()
|
||||
if(!rotting)
|
||||
rotting = 1
|
||||
if(locate(/obj/effect/overlay/wallrot) in src)
|
||||
return
|
||||
var/number_rots = rand(2,3)
|
||||
for(var/i=0, i<number_rots, i++)
|
||||
new/obj/effect/overlay/wallrot(src)
|
||||
|
||||
var/number_rots = rand(2,3)
|
||||
for(var/i=0, i<number_rots, i++)
|
||||
var/obj/effect/overlay/O = new/obj/effect/overlay( src )
|
||||
O.name = "Wallrot"
|
||||
O.desc = "Ick..."
|
||||
O.icon = 'icons/effects/wallrot.dmi'
|
||||
O.pixel_x += rand(-10, 10)
|
||||
O.pixel_y += rand(-10, 10)
|
||||
O.anchored = 1
|
||||
O.density = 1
|
||||
O.layer = 5
|
||||
O.mouse_opacity = 0
|
||||
/turf/simulated/wall/proc/can_melt()
|
||||
if(material.unmeltable)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/turf/simulated/wall/proc/thermitemelt(mob/user as mob)
|
||||
if(mineral == "diamond")
|
||||
if(!can_melt())
|
||||
return
|
||||
var/obj/effect/overlay/O = new/obj/effect/overlay( src )
|
||||
O.name = "Thermite"
|
||||
@@ -251,11 +215,13 @@
|
||||
user << "<span class='warning'>The thermite starts melting through the wall.</span>"
|
||||
|
||||
spawn(100)
|
||||
if(O) qdel(O)
|
||||
if(O)
|
||||
qdel(O)
|
||||
// F.sd_LumReset() //TODO: ~Carn
|
||||
return
|
||||
|
||||
/turf/simulated/wall/meteorhit(obj/M as obj)
|
||||
var/rotting = (locate(/obj/effect/overlay/wallrot) in src)
|
||||
if (prob(15) && !rotting)
|
||||
dismantle_wall()
|
||||
else if(prob(70) && !rotting)
|
||||
@@ -264,232 +230,51 @@
|
||||
ReplaceWithLattice()
|
||||
return 0
|
||||
|
||||
/turf/simulated/wall
|
||||
var/hulk_destroy_prob = 40
|
||||
var/hulk_take_damage = 1
|
||||
var/rotting_destroy_touch = 1
|
||||
var/rotting_touch_message = "\blue The wall crumbles under your touch."
|
||||
|
||||
//Interactions
|
||||
/turf/simulated/wall/attack_hand(mob/user as mob)
|
||||
if (HULK in user.mutations)
|
||||
if (prob(hulk_destroy_prob) || rotting)
|
||||
usr << text("\blue You smash through the wall.")
|
||||
usr.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
dismantle_wall(1)
|
||||
return 1
|
||||
else
|
||||
usr << text("\blue You punch the wall.")
|
||||
if(hulk_take_damage)
|
||||
take_damage(rand(25, 75))
|
||||
return 1
|
||||
|
||||
if(rotting)
|
||||
user << rotting_touch_message
|
||||
if(rotting_destroy_touch)
|
||||
dismantle_wall()
|
||||
return 1
|
||||
|
||||
if(..()) return 1
|
||||
|
||||
user << "\blue You push the wall but nothing happens!"
|
||||
playsound(src, 'sound/weapons/Genhit.ogg', 25, 1)
|
||||
src.add_fingerprint(user)
|
||||
return 0
|
||||
|
||||
/turf/simulated/wall/attack_generic(var/mob/user, var/damage, var/attack_message, var/wallbreaker)
|
||||
if(!damage || !wallbreaker)
|
||||
user << "You push the wall but nothing happens."
|
||||
/turf/simulated/wall/proc/radiate()
|
||||
var/material/M = name_to_material[material]
|
||||
if(!istype(M) || !M.radioactivity)
|
||||
return
|
||||
|
||||
if(rotting || prob(40))
|
||||
user << "You smash through the wall!"
|
||||
spawn(1) dismantle_wall(1)
|
||||
else
|
||||
user << "You smash against the wall."
|
||||
take_damage(rand(25,75))
|
||||
return 1
|
||||
|
||||
/turf/simulated/wall/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
|
||||
if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
|
||||
user << "<span class='warning'>You don't have the dexterity to do this!</span>"
|
||||
return
|
||||
|
||||
//get the user's location
|
||||
if( !istype(user.loc, /turf) ) return //can't do this stuff whilst inside objects and such
|
||||
|
||||
if(rotting)
|
||||
if(istype(W, /obj/item/weapon/weldingtool) )
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if( WT.remove_fuel(0,user) )
|
||||
user << "<span class='notice'>You burn away the fungi with \the [WT].</span>"
|
||||
playsound(src, 'sound/items/Welder.ogg', 10, 1)
|
||||
for(var/obj/effect/E in src) if(E.name == "Wallrot")
|
||||
qdel(E)
|
||||
rotting = 0
|
||||
return
|
||||
else if(!is_sharp(W) && W.force >= 10 || W.force >= 20)
|
||||
user << "<span class='notice'>\The [src] crumbles away under the force of your [W.name].</span>"
|
||||
src.dismantle_wall(1)
|
||||
if(!active)
|
||||
if(world.time > last_event+15)
|
||||
active = 1
|
||||
for(var/mob/living/L in range(3,src))
|
||||
L.apply_effect(M.radioactivity,IRRADIATE,0)
|
||||
for(var/turf/simulated/wall/T in range(3,src))
|
||||
T.radiate()
|
||||
last_event = world.time
|
||||
active = null
|
||||
return
|
||||
|
||||
//THERMITE related stuff. Calls src.thermitemelt() which handles melting simulated walls and the relevant effects
|
||||
if( thermite )
|
||||
if( istype(W, /obj/item/weapon/weldingtool) )
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if( WT.remove_fuel(0,user) )
|
||||
thermitemelt(user)
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter))
|
||||
thermitemelt(user)
|
||||
return
|
||||
|
||||
else if( istype(W, /obj/item/weapon/melee/energy/blade) )
|
||||
var/obj/item/weapon/melee/energy/blade/EB = W
|
||||
|
||||
EB.spark_system.start()
|
||||
user << "<span class='notice'>You slash \the [src] with \the [EB]; the thermite ignites!</span>"
|
||||
playsound(src, "sparks", 50, 1)
|
||||
playsound(src, 'sound/weapons/blade1.ogg', 50, 1)
|
||||
|
||||
thermitemelt(user)
|
||||
return
|
||||
|
||||
var/turf/T = user.loc //get user's location for delay checks
|
||||
|
||||
//DECONSTRUCTION
|
||||
if( istype(W, /obj/item/weapon/weldingtool) )
|
||||
|
||||
var/response = "Dismantle"
|
||||
if(damage)
|
||||
response = alert(user, "Would you like to repair or dismantle [src]?", "[src]", "Repair", "Dismantle")
|
||||
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
|
||||
if(WT.remove_fuel(0,user))
|
||||
if(response == "Repair")
|
||||
user << "<span class='notice'>You start repairing the damage to [src].</span>"
|
||||
playsound(src, 'sound/items/Welder.ogg', 100, 1)
|
||||
if(do_after(user, max(5, damage / 5)) && WT && WT.isOn())
|
||||
user << "<span class='notice'>You finish repairing the damage to [src].</span>"
|
||||
take_damage(-damage)
|
||||
|
||||
else if(response == "Dismantle")
|
||||
user << "<span class='notice'>You begin slicing through the outer plating.</span>"
|
||||
playsound(src, 'sound/items/Welder.ogg', 100, 1)
|
||||
if(!do_after(user,100))
|
||||
return
|
||||
if(WT.isOn())
|
||||
user << "<span class='notice'>You remove the outer plating.</span>"
|
||||
dismantle_wall()
|
||||
for(var/mob/O in viewers(user, 5))
|
||||
O.show_message("<span class='warning'>The wall was sliced apart by [user]!</span>", 1, "<span class='warning'>You hear metal being sliced apart.</span>", 2)
|
||||
return
|
||||
return
|
||||
else
|
||||
user << "<span class='notice'>You need more welding fuel to complete this task.</span>"
|
||||
return
|
||||
|
||||
else if( istype(W, /obj/item/weapon/pickaxe/plasmacutter) )
|
||||
|
||||
user << "<span class='notice'>You begin slicing through the outer plating.</span>"
|
||||
playsound(src, 'sound/items/Welder.ogg', 100, 1)
|
||||
|
||||
var/delay = 60
|
||||
if(mineral == "diamond")
|
||||
delay += 60
|
||||
|
||||
if(!do_after(user,delay))
|
||||
return
|
||||
|
||||
user << "<span class='notice'>You remove the outer plating.</span>"
|
||||
dismantle_wall()
|
||||
for(var/mob/O in viewers(user, 5))
|
||||
O.show_message("<span class='warning'>The wall was sliced apart by [user]!</span>", 1, "<span class='warning'>You hear metal being sliced apart.</span>", 2)
|
||||
return
|
||||
|
||||
//DRILLING
|
||||
else if (istype(W, /obj/item/weapon/pickaxe/diamonddrill))
|
||||
|
||||
user << "<span class='notice'>You begin to drill though the wall.</span>"
|
||||
|
||||
var/delay = 60
|
||||
if(mineral == "diamond")
|
||||
delay += 60
|
||||
|
||||
if(!do_after(user,delay))
|
||||
return
|
||||
|
||||
user << "<span class='notice'>Your drill tears though the last of the reinforced plating.</span>"
|
||||
dismantle_wall()
|
||||
for(var/mob/O in viewers(user, 5))
|
||||
O.show_message("<span class='warning'>The wall was drilled through by [user]!</span>", 1, "<span class='warning'>You hear the grinding of metal.</span>", 2)
|
||||
return
|
||||
|
||||
else if( istype(W, /obj/item/weapon/melee/energy/blade) )
|
||||
var/obj/item/weapon/melee/energy/blade/EB = W
|
||||
|
||||
EB.spark_system.start()
|
||||
user << "<span class='notice'>You stab \the [EB] into the wall and begin to slice it apart.</span>"
|
||||
playsound(src, "sparks", 50, 1)
|
||||
|
||||
sleep(70)
|
||||
if(mineral == "diamond")
|
||||
sleep(70)
|
||||
if( !istype(src, /turf/simulated/wall) || !user || !EB || !T ) return
|
||||
|
||||
if( user.loc == T && user.get_active_hand() == W )
|
||||
EB.spark_system.start()
|
||||
playsound(src, "sparks", 50, 1)
|
||||
playsound(src, 'sound/weapons/blade1.ogg', 50, 1)
|
||||
dismantle_wall(1)
|
||||
for(var/mob/O in viewers(user, 5))
|
||||
O.show_message("<span class='warning'>The wall was sliced apart by [user]!</span>", 1, "<span class='warning'>You hear metal being sliced apart and sparks flying.</span>", 2)
|
||||
return
|
||||
|
||||
else if(istype(W,/obj/item/apc_frame))
|
||||
var/obj/item/apc_frame/AH = W
|
||||
AH.try_build(src)
|
||||
return
|
||||
|
||||
else if(istype(W,/obj/item/alarm_frame))
|
||||
var/obj/item/alarm_frame/AH = W
|
||||
AH.try_build(src)
|
||||
return
|
||||
|
||||
else if(istype(W,/obj/item/firealarm_frame))
|
||||
var/obj/item/firealarm_frame/AH = W
|
||||
AH.try_build(src)
|
||||
return
|
||||
|
||||
else if(istype(W,/obj/item/light_fixture_frame))
|
||||
var/obj/item/light_fixture_frame/AH = W
|
||||
AH.try_build(src)
|
||||
return
|
||||
|
||||
else if(istype(W,/obj/item/light_fixture_frame/small))
|
||||
var/obj/item/light_fixture_frame/small/AH = W
|
||||
AH.try_build(src)
|
||||
return
|
||||
|
||||
else if(istype(W,/obj/item/rust_fuel_compressor_frame))
|
||||
var/obj/item/rust_fuel_compressor_frame/AH = W
|
||||
AH.try_build(src)
|
||||
return
|
||||
|
||||
else if(istype(W,/obj/item/rust_fuel_assembly_port_frame))
|
||||
var/obj/item/rust_fuel_assembly_port_frame/AH = W
|
||||
AH.try_build(src)
|
||||
return
|
||||
|
||||
else if(istype(W,/obj/item/weapon/rcd)) //I bitterly resent having to write this. ~Z
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/weapon/reagent_containers))
|
||||
return // They tend to have meaningful afterattack - let them apply it without destroying a rotting wall
|
||||
|
||||
else
|
||||
return attack_hand(user)
|
||||
return
|
||||
|
||||
/turf/simulated/wall/proc/burn(temperature)
|
||||
spawn(2)
|
||||
new /obj/structure/girder(src)
|
||||
src.ChangeTurf(/turf/simulated/floor)
|
||||
for(var/turf/simulated/floor/target_tile in range(0,src))
|
||||
if(material == "phoron") //ergh
|
||||
target_tile.assume_gas("phoron", 20, 400+T0C)
|
||||
spawn (0) target_tile.hotspot_expose(temperature, 400)
|
||||
for(var/turf/simulated/wall/W in range(3,src))
|
||||
W.ignite((temperature/4))
|
||||
for(var/obj/machinery/door/airlock/phoron/D in range(3,src))
|
||||
D.ignite(temperature/4)
|
||||
|
||||
/turf/simulated/wall/proc/ignite(var/exposed_temperature)
|
||||
|
||||
var/material/M = name_to_material[material]
|
||||
if(!istype(M) || !isnull(M.ignition_point))
|
||||
return
|
||||
if(exposed_temperature > M.ignition_point)//If the temperature of the object is over 300, then ignite
|
||||
burn(exposed_temperature)
|
||||
return
|
||||
..()
|
||||
|
||||
/turf/simulated/wall/Bumped(AM as mob|obj)
|
||||
radiate()
|
||||
..()
|
||||
|
||||
/turf/simulated/wall/Destroy()
|
||||
clear_plants()
|
||||
check_relatives()
|
||||
..()
|
||||
@@ -1,130 +0,0 @@
|
||||
/turf/simulated/wall/mineral
|
||||
name = "mineral wall"
|
||||
desc = "This shouldn't exist"
|
||||
icon_state = ""
|
||||
var/last_event = 0
|
||||
var/active = null
|
||||
|
||||
/turf/simulated/wall/mineral/gold
|
||||
name = "gold wall"
|
||||
desc = "A wall with gold plating. Swag!"
|
||||
icon_state = "gold0"
|
||||
walltype = "gold"
|
||||
mineral = "gold"
|
||||
//var/electro = 1
|
||||
//var/shocked = null
|
||||
|
||||
/turf/simulated/wall/mineral/silver
|
||||
name = "silver wall"
|
||||
desc = "A wall with silver plating. Shiny!"
|
||||
icon_state = "silver0"
|
||||
walltype = "silver"
|
||||
mineral = "silver"
|
||||
//var/electro = 0.75
|
||||
//var/shocked = null
|
||||
|
||||
/turf/simulated/wall/mineral/diamond
|
||||
name = "diamond wall"
|
||||
desc = "A wall with diamond plating. You monster."
|
||||
icon_state = "diamond0"
|
||||
walltype = "diamond"
|
||||
mineral = "diamond"
|
||||
|
||||
/turf/simulated/wall/mineral/sandstone
|
||||
name = "sandstone wall"
|
||||
desc = "A wall with sandstone plating."
|
||||
icon_state = "sandstone0"
|
||||
walltype = "sandstone"
|
||||
mineral = "sandstone"
|
||||
|
||||
/turf/simulated/wall/mineral/uranium
|
||||
name = "uranium wall"
|
||||
desc = "A wall with uranium plating. This is probably a bad idea."
|
||||
icon_state = "uranium0"
|
||||
walltype = "uranium"
|
||||
mineral = "uranium"
|
||||
|
||||
/turf/simulated/wall/mineral/uranium/proc/radiate()
|
||||
if(!active)
|
||||
if(world.time > last_event+15)
|
||||
active = 1
|
||||
for(var/mob/living/L in range(3,src))
|
||||
L.apply_effect(12,IRRADIATE,0)
|
||||
for(var/turf/simulated/wall/mineral/uranium/T in range(3,src))
|
||||
T.radiate()
|
||||
last_event = world.time
|
||||
active = null
|
||||
return
|
||||
return
|
||||
|
||||
/turf/simulated/wall/mineral/uranium/attack_hand(mob/user as mob)
|
||||
radiate()
|
||||
..()
|
||||
|
||||
/turf/simulated/wall/mineral/uranium/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
radiate()
|
||||
..()
|
||||
|
||||
/turf/simulated/wall/mineral/uranium/Bumped(AM as mob|obj)
|
||||
radiate()
|
||||
..()
|
||||
|
||||
/turf/simulated/wall/mineral/phoron
|
||||
name = "phoron wall"
|
||||
desc = "A wall with phoron plating. This is definately a bad idea."
|
||||
icon_state = "phoron0"
|
||||
walltype = "phoron"
|
||||
mineral = "phoron"
|
||||
|
||||
/turf/simulated/wall/mineral/phoron/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(is_hot(W) > 300)//If the temperature of the object is over 300, then ignite
|
||||
ignite(is_hot(W))
|
||||
return
|
||||
..()
|
||||
|
||||
/turf/simulated/wall/mineral/phoron/proc/PhoronBurn(temperature)
|
||||
spawn(2)
|
||||
new /obj/structure/girder(src)
|
||||
src.ChangeTurf(/turf/simulated/floor)
|
||||
for(var/turf/simulated/floor/target_tile in range(0,src))
|
||||
target_tile.assume_gas("phoron", 20, 400+T0C)
|
||||
spawn (0) target_tile.hotspot_expose(temperature, 400)
|
||||
for(var/obj/structure/falsewall/phoron/F in range(3,src))//Hackish as fuck, but until temperature_expose works, there is nothing I can do -Sieve
|
||||
var/turf/T = get_turf(F)
|
||||
T.ChangeTurf(/turf/simulated/wall/mineral/phoron/)
|
||||
qdel(F)
|
||||
for(var/turf/simulated/wall/mineral/phoron/W in range(3,src))
|
||||
W.ignite((temperature/4))//Added so that you can't set off a massive chain reaction with a small flame
|
||||
for(var/obj/machinery/door/airlock/phoron/D in range(3,src))
|
||||
D.ignite(temperature/4)
|
||||
|
||||
/turf/simulated/wall/mineral/phoron/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)//Doesn't fucking work because walls don't interact with air :(
|
||||
if(exposed_temperature > 300)
|
||||
PhoronBurn(exposed_temperature)
|
||||
|
||||
/turf/simulated/wall/mineral/phoron/proc/ignite(exposed_temperature)
|
||||
if(exposed_temperature > 300)
|
||||
PhoronBurn(exposed_temperature)
|
||||
|
||||
/turf/simulated/wall/mineral/phoron/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(istype(Proj,/obj/item/projectile/beam))
|
||||
PhoronBurn(2500)
|
||||
else if(istype(Proj,/obj/item/projectile/ion))
|
||||
PhoronBurn(500)
|
||||
..()
|
||||
|
||||
/*
|
||||
/turf/simulated/wall/mineral/proc/shock()
|
||||
if (electrocute_mob(user, C, src))
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(5, 1, src)
|
||||
s.start()
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
/turf/simulated/wall/mineral/proc/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if((mineral == "gold") || (mineral == "silver"))
|
||||
if(shocked)
|
||||
shock()
|
||||
*/
|
||||
@@ -1,8 +0,0 @@
|
||||
/turf/simulated/wall/cult
|
||||
name = "wall"
|
||||
desc = "The patterns engraved on the wall seem to shift as you try to focus on them. You feel sick"
|
||||
icon_state = "cult"
|
||||
walltype = "cult"
|
||||
|
||||
/turf/unsimulated/wall/cult/cultify()
|
||||
return
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user