Merge branch 'dev' of https://github.com/Baystation12/Baystation12 into newmalf-merge

This commit is contained in:
Atlantiscze
2015-05-13 06:17:26 +02:00
217 changed files with 2423 additions and 3260 deletions
+6 -6
View File
@@ -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"
+12 -3
View File
@@ -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
+8 -1
View File
@@ -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)
+7
View File
@@ -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)
+21 -3
View File
@@ -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
+2 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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"
+10
View File
@@ -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
+2
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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"
+8 -98
View File
@@ -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 -7
View File
@@ -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)
+6 -1
View File
@@ -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)
+1 -1
View File
@@ -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
+4 -11
View File
@@ -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!"
+13 -11
View File
@@ -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)
+5
View File
@@ -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)
+1 -1
View File
@@ -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++
+83
View File
@@ -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
+3 -3
View File
@@ -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()
+19 -13
View File
@@ -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
+1 -1
View File
@@ -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>&nbsp;[chassis.selected==src?"<b>":"<a href='?src=\ref[chassis];select_equip=\ref[src]'>"][src.name][chassis.selected==src?"</b>":"</a>"]\[[src.projectiles]\]"
+5 -5
View File
@@ -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)
+1 -1
View File
@@ -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())
+36 -36
View File
@@ -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)*/
+14
View File
@@ -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)
-3
View File
@@ -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)
+2 -1
View File
@@ -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
+2 -2
View File
@@ -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
-4
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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.
+1 -1
View File
@@ -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()
+1 -1
View File
@@ -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
+6 -6
View File
@@ -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
+37 -17
View File
@@ -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 .. ()
+8 -8
View File
@@ -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
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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
+4 -3
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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))
+3 -3
View File
@@ -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
+1 -1
View File
@@ -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)
+28 -11
View File
@@ -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
+1 -1
View File
@@ -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)
+8 -8
View File
@@ -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")
+3 -3
View File
@@ -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
+2 -2
View File
@@ -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"
-333
View File
@@ -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"
+129 -174
View File
@@ -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
+6 -20
View File
@@ -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
..()
+3 -1
View File
@@ -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."
-141
View File
@@ -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
+1 -1
View File
@@ -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
+311
View File
@@ -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)
+130
View File
@@ -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
+43
View File
@@ -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
View File
@@ -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()
..()
-130
View File
@@ -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()
*/
-8
View File
@@ -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