diff --git a/baystation12.dme b/baystation12.dme index 95aab9ea58..0fc9f7bd99 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -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" @@ -368,6 +367,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" @@ -702,7 +702,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" @@ -766,10 +765,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" @@ -1041,6 +1040,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" @@ -1050,7 +1050,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" diff --git a/code/ATMOSPHERICS/_atmospherics_helpers.dm b/code/ATMOSPHERICS/_atmospherics_helpers.dm index 5ea54e7a56..f85fa84b93 100644 --- a/code/ATMOSPHERICS/_atmospherics_helpers.dm +++ b/code/ATMOSPHERICS/_atmospherics_helpers.dm @@ -427,10 +427,19 @@ //If set, sink_volume_mod adjusts the effective output volume used in the calculation. This is useful when the output gas_mixture is //part of a pipenetwork, and so it's volume isn't representative of the actual volume since the gas will be shared across the pipenetwork when it processes. /proc/calculate_transfer_moles(datum/gas_mixture/source, datum/gas_mixture/sink, var/pressure_delta, var/sink_volume_mod=0) - //Make the approximation that the sink temperature is unchanged after transferring gas - var/air_temperature = (sink.temperature > 0)? sink.temperature : source.temperature - var/output_volume = (sink.volume * sink.group_multiplier) + sink_volume_mod + if(source.temperature == 0 || source.total_moles == 0) return 0 + var/output_volume = (sink.volume * sink.group_multiplier) + sink_volume_mod + var/source_total_moles = source.total_moles * source.group_multiplier + + var/air_temperature = source.temperature + if(sink.total_moles > 0 && sink.temperature > 0) + //estimate the final temperature of the sink after transfer + var/estimate_moles = pressure_delta*output_volume/(sink.temperature * R_IDEAL_GAS_EQUATION) + var/sink_heat_capacity = sink.heat_capacity() + var/transfer_heat_capacity = source.heat_capacity()*estimate_moles/source_total_moles + air_temperature = (sink.temperature*sink_heat_capacity + source.temperature*transfer_heat_capacity) / (sink_heat_capacity + transfer_heat_capacity) + //get the number of moles that would have to be transfered to bring sink to the target pressure return pressure_delta*output_volume/(air_temperature * R_IDEAL_GAS_EQUATION) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 1d68fb54e8..45e0cbbf96 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -29,9 +29,10 @@ user.lastattacked = M M.lastattacker = user - user.attack_log += "\[[time_stamp()]\] Attacked [M.name] ([M.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" - M.attack_log += "\[[time_stamp()]\] Attacked by [user.name] ([user.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" - 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()]\] Attacked [M.name] ([M.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" + M.attack_log += "\[[time_stamp()]\] Attacked by [user.name] ([user.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" + msg_admin_attack("[key_name(user)] attacked [key_name(M)] with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" ) ///////////////////////// var/power = force diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 351ec9a845..97e1f59582 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -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 diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 5b0ae96726..99ff26c89a 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -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" diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm index 7b6b1dc952..530b9b9567 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -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 diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 076c0afbf3..d13f90d2be 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -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" diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 2b8ea74117..e1297510c8 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -836,8 +836,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 +863,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 +974,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 +1137,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" diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index d60404d5de..f8f8a9c21e 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -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) ..() diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index b9aa81e858..28691004f3 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -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) diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 8cc47a52ef..fd68c4ec62 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -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) diff --git a/code/game/machinery/computer3/buildandrepair.dm b/code/game/machinery/computer3/buildandrepair.dm index bc02e474e4..eef7503f97 100644 --- a/code/game/machinery/computer3/buildandrepair.dm +++ b/code/game/machinery/computer3/buildandrepair.dm @@ -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 diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index da2ebb9d2d..e01c3e4b8e 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -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!" diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 76b08dba2c..0857d2d175 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -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() diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index 32e356de3f..78b8808d28 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -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) diff --git a/code/game/machinery/robot_fabricator.dm b/code/game/machinery/robot_fabricator.dm index 0c3ae56115..6b0cb71fbd 100644 --- a/code/game/machinery/robot_fabricator.dm +++ b/code/game/machinery/robot_fabricator.dm @@ -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++ diff --git a/code/game/machinery/wall_frames.dm b/code/game/machinery/wall_frames.dm new file mode 100644 index 0000000000..36e37cb9c6 --- /dev/null +++ b/code/game/machinery/wall_frames.dm @@ -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 << "\The [src] Alarm cannot be placed in this area." + return + + if(gotwallitem(loc, ndir)) + usr << "" + 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 diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index f53533828b..36f3ea6f85 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -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) diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index adf27da034..b3c5180c7a 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -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() diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm index 57bba9c97a..432c990114 100644 --- a/code/game/mecha/equipment/tools/tools.dm +++ b/code/game/mecha/equipment/tools/tools.dm @@ -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("[target] is too durable to drill through.") + if(istype(target, /turf/simulated/wall)) + var/turf/simulated/wall/W = target + if(W.reinf_material) + occupant_message("[target] is too durable to drill through.") + 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 @@ -1077,7 +1083,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 diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 13d0600df4..61eaa214da 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -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 "* [chassis.selected==src?"":""][src.name][chassis.selected==src?"":""]\[[src.projectiles]\]" diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index cc1c1aedbb..9dadd13554 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -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) diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm index 92d7f6ee66..d334d6eb29 100644 --- a/code/game/mecha/mecha_control_console.dm +++ b/code/game/mecha/mecha_control_console.dm @@ -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()) diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm index c3257bb61b..6dba12db0c 100644 --- a/code/game/mecha/mecha_parts.dm +++ b/code/game/mecha/mecha_parts.dm @@ -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)*/ diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index aac0b7d56a..cc52bf7bbf 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -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) diff --git a/code/game/objects/explosion_recursive.dm b/code/game/objects/explosion_recursive.dm index 9b03866b98..191fb01d47 100644 --- a/code/game/objects/explosion_recursive.dm +++ b/code/game/objects/explosion_recursive.dm @@ -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) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 1c29aa8088..4b9a89bda1 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -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 \ No newline at end of file + return diff --git a/code/game/objects/items/ashtray.dm b/code/game/objects/items/ashtray.dm index 24e9adb5ad..abb6adb48d 100644 --- a/code/game/objects/items/ashtray.dm +++ b/code/game/objects/items/ashtray.dm @@ -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 diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index 57fb2d647c..9ec1a2e144 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -201,10 +201,6 @@ move an amendment to the drawing.
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 diff --git a/code/game/objects/items/devices/debugger.dm b/code/game/objects/items/devices/debugger.dm index faab1ee054..0e066a4817 100644 --- a/code/game/objects/items/devices/debugger.dm +++ b/code/game/objects/items/devices/debugger.dm @@ -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 diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 0c1106f12a..42a4967bfe 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -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) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 36cd50ce2d..29bcbc4332 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -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. diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index a31a866bc7..b876fbd27a 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -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 diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index a2a714ee9b..eed6cdb12e 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -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() diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index 623c57be89..21d0474a68 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -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 diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index e7f9ec3b9f..e5e94fc93d 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -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 diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index e2e2c2b365..85f4ed4b89 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -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 diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 5c979f0569..2018aa7919 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -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 diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 1a646d3fe1..f42a3995dc 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -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)) diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 7e450c8f96..35d04e4d08 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -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 diff --git a/code/game/objects/items/devices/whistle.dm b/code/game/objects/items/devices/whistle.dm index 49df9aa31c..d2627ed094 100644 --- a/code/game/objects/items/devices/whistle.dm +++ b/code/game/objects/items/devices/whistle.dm @@ -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("[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\"",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("[user]'s [name] rasps, \"[use_message]\"",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("[user]'s [name] gurgles something indecipherable and deeply offensive.") insults-- else - user << "\red *BZZZZcuntZZZZT*" - else - playsound(get_turf(src), 'sound/voice/halt.ogg', 100, 1, vary = 0) - user.show_message("[user]'s [name] rasps, \"Halt! Security!\"",1) + user << "*BZZZZZZZZT*" 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 << "You overload \the [src]'s voice synthesizer." + 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 .. () diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 6e2f9dd64a..e1ebc9fdc1 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -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 diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 92798eb92e..10fb1dc6fd 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -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 diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 143539968e..e3bbce8386 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -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") diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index ec0ece216e..a4d9e631e8 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -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 diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 4be7f6e7f7..1fefeca1ab 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -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" diff --git a/code/game/objects/items/stacks/tiles/plasteel.dm b/code/game/objects/items/stacks/tiles/plasteel.dm index 3215d0efaf..86af65a2fa 100644 --- a/code/game/objects/items/stacks/tiles/plasteel.dm +++ b/code/game/objects/items/stacks/tiles/plasteel.dm @@ -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 diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 01aab07ec2..09da666a46 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -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 diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index 52e7fac02d..da169c6dfc 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -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 diff --git a/code/game/objects/items/weapons/candle.dm b/code/game/objects/items/weapons/candle.dm index 3141779884..f5f2a8d9fd 100644 --- a/code/game/objects/items/weapons/candle.dm +++ b/code/game/objects/items/weapons/candle.dm @@ -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() diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index 0f202d9d05..736c995870 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -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) diff --git a/code/game/objects/items/weapons/circuitboards/circuitboard.dm b/code/game/objects/items/weapons/circuitboards/circuitboard.dm index 00cc7a6835..2e82763c4c 100644 --- a/code/game/objects/items/weapons/circuitboards/circuitboard.dm +++ b/code/game/objects/items/weapons/circuitboards/circuitboard.dm @@ -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. diff --git a/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm b/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm index c01893b158..0b0c494cde 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm @@ -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) \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm b/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm index fdc0865f9c..e3b22c3fec 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm @@ -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, diff --git a/code/game/objects/items/weapons/circuitboards/machinery/commsantenna.dm b/code/game/objects/items/weapons/circuitboards/machinery/commsantenna.dm index 81216003d5..05ce85865d 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/commsantenna.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/commsantenna.dm @@ -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, diff --git a/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm b/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm index d4292effe2..97b60686e0 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm @@ -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, diff --git a/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm b/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm index 77d313e414..0a8f2b6cdd 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm @@ -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, diff --git a/code/game/objects/items/weapons/circuitboards/machinery/power.dm b/code/game/objects/items/weapons/circuitboards/machinery/power.dm index 80955b1b8e..46241049b6 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/power.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/power.dm @@ -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) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm b/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm index 5a0dc01bc1..6feda42613 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm @@ -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, diff --git a/code/game/objects/items/weapons/circuitboards/machinery/research.dm b/code/game/objects/items/weapons/circuitboards/machinery/research.dm index 9853150b17..0ab0822e4b 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/research.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/research.dm @@ -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, diff --git a/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm b/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm index 6e892a6603..cbfe5f69b1 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm @@ -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, diff --git a/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm b/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm index a312d2995a..7e0195de9a 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm @@ -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, diff --git a/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm b/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm index db76bbcc8e..a1beabbea6 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm @@ -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, diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index 1348fc7605..d787921c18 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -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 diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index f57ffaf84c..a8d03b9539 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -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 diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 8aa2f1819d..af8ab05d34 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -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 diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index 60f8c24c40..cfb05d1148 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -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") @@ -181,7 +181,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 @@ -253,7 +253,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 diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm index 77f8172f8f..8e5e61aa24 100644 --- a/code/game/objects/items/weapons/paint.dm +++ b/code/game/objects/items/weapons/paint.dm @@ -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) diff --git a/code/game/objects/items/weapons/policetape.dm b/code/game/objects/items/weapons/policetape.dm index 48d1d4cf64..68a821e3a7 100644 --- a/code/game/objects/items/weapons/policetape.dm +++ b/code/game/objects/items/weapons/policetape.dm @@ -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) diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm index 5cab6b24cb..d40294b5e7 100644 --- a/code/game/objects/items/weapons/power_cells.dm +++ b/code/game/objects/items/weapons/power_cells.dm @@ -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 [user] is licking the electrodes of the [src.name]! It looks like \he's trying to commit suicide." 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 diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index 65f1abddfb..436eea0339 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -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 diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index 383e21ff4f..55d233e3bc 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -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 diff --git a/code/game/objects/items/weapons/table_rack_parts.dm b/code/game/objects/items/weapons/table_rack_parts.dm index 79e512321e..8437a5e29f 100644 --- a/code/game/objects/items/weapons/table_rack_parts.dm +++ b/code/game/objects/items/weapons/table_rack_parts.dm @@ -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) diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm index 20d96676ed..996be52663 100644 --- a/code/game/objects/items/weapons/teleportation.dm +++ b/code/game/objects/items/weapons/teleportation.dm @@ -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) diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 1090431916..91b5ff6027 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -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") diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 3cabb3f685..fbbc731f2a 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -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 diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm deleted file mode 100644 index 7690a2d11e..0000000000 --- a/code/game/objects/structures/false_walls.dm +++ /dev/null @@ -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" diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 8c53135528..e8cb65a33d 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -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 << "Now disassembling the girder..." if(do_after(user,40)) if(!src) return - user << "\blue You dissasembled the girder!" + user << "You dissasembled the girder!" dismantle() else if(!anchored) playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - user << "\blue Now securing the girder" + user << "Now securing the girder..." if(get_turf(user, 40)) - user << "\blue You secured the girder!" - new/obj/structure/girder( src.loc ) - qdel(src) + user << "You secured the girder!" + reset_girder() else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) - user << "\blue Now slicing apart the girder" + user << "Now slicing apart the girder..." if(do_after(user,30)) if(!src) return - user << "\blue You slice apart the girder!" + user << "You slice apart the girder!" dismantle() else if(istype(W, /obj/item/weapon/pickaxe/diamonddrill)) - user << "\blue You drill through the girder!" + user << "You drill through the girder!" 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 << "Now unsecuring support struts..." if(do_after(user,40)) if(!src) return - user << "\blue You unsecured the support struts!" + user << "You unsecured the support struts!" 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 << "Now removing support struts..." if(do_after(user,40)) if(!src) return - user << "\blue You removed the support struts!" - new/obj/structure/girder( src.loc ) - qdel(src) + user << "You removed the support struts!" + 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 << "Now dislodging the girder..." if(do_after(user, 40)) if(!src) return - user << "\blue You dislodged the girder!" - new/obj/structure/girder/displaced( src.loc ) - qdel(src) + user << "You dislodged the girder!" + 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 << "You create a false wall! Push on it to open or close the passage." - new /obj/structure/falsewall (src.loc) - qdel(src) - else - if(S.get_amount() < 2) return ..() - user << "Now adding plating..." - if (do_after(user,40)) - if (S.use(2)) - user << "You added the plating!" - 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 << "Now finalising reinforced wall." - if(do_after(user, 50)) - if (S.use(1)) - user << "Wall fully reinforced!" - 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 << "Now reinforcing girders..." - if (do_after(user,60)) - if(S.use(1)) - user << "Girders reinforced!" - 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 << "This material is too soft for use in wall construction." + return + + user << "You begin adding the plating..." + + if(!do_after(user,40) || !S.use(2)) + return + + if(anchored) + user << "You added the plating!" + else + user << "You create a false wall! Push on it to open or close the passage." + 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 << "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 << "Now reinforcing..." + if (!do_after(user,40) || !S.use(2)) + return + user << "You added reinforcement!" + + 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("[user] [attack_message] the [src]!") - 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 << "Now disassembling the girder..." if(do_after(user,40)) - user << "\blue You dissasembled the girder!" + user << "You dissasembled the girder!" dismantle() else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) - user << "\blue Now slicing apart the girder" + user << "Now slicing apart the girder..." if(do_after(user,30)) - user << "\blue You slice apart the girder!" + user << "You slice apart the girder!" dismantle() else if(istype(W, /obj/item/weapon/pickaxe/diamonddrill)) - user << "\blue You drill through the girder!" + user << "You drill through the girder!" 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 diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index ecd2d823db..695b11db95 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -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 diff --git a/code/game/smoothwall.dm b/code/game/smoothwall.dm deleted file mode 100644 index c31b5a8ef1..0000000000 --- a/code/game/smoothwall.dm +++ /dev/null @@ -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 \ No newline at end of file diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index cefccdc46f..bb7d93fbf1 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -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 diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm new file mode 100644 index 0000000000..4d86d70877 --- /dev/null +++ b/code/game/turfs/simulated/wall_attacks.dm @@ -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 << "You smash against the wall!" + take_damage(rand(25,75)) + +/turf/simulated/wall/proc/success_smash(var/mob/user) + user << "You smash through the wall!" + spawn(1) + dismantle_wall(1) + +/turf/simulated/wall/proc/try_touch(var/mob/user, var/rotting) + + if(rotting) + if(reinf_material) + user << "\The [reinf_material.display_name] feels porous and crumbly." + else + user << "\The [material.display_name] crumbles under your touch!" + dismantle_wall() + return 1 + + if(..()) return 1 + + if(!can_open) + user << "You push the wall, but nothing happens." + 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 << "You don't have the dexterity to do this!" + 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 << "You burn away the fungi with \the [WT]." + 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 << "\The [src] crumbles away under the force of your [W.name]." + 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 << "You slash \the [src] with \the [EB]; the thermite ignites!" + 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 << "You start repairing the damage to [src]." + playsound(src, 'sound/items/Welder.ogg', 100, 1) + if(do_after(user, max(5, damage / 5)) && WT && WT.isOn()) + user << "You finish repairing the damage to [src]." + take_damage(-damage) + else + user << "You need more welding fuel to complete this task." + 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 << "You need more welding fuel to complete this task." + 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 << "You begin [dismantle_verb] through the outer plating." + if(dismantle_sound) + playsound(src, dismantle_sound, 100, 1) + + if(cut_delay<0) + cut_delay = 0 + + if(!do_after(user,cut_delay)) + return + + user << "You remove the outer plating." + dismantle_wall() + user.visible_message("The wall was torn open by [user]!") + 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 << "You cut the outer grille." + set_wall_state() + return + if(5) + if (istype(W, /obj/item/weapon/screwdriver)) + user << "You begin removing the support lines." + 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 << "You remove the support lines." + 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 << "You replace the outer grille." + 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 << "You need more welding fuel to complete this task." + return + else if (istype(W, /obj/item/weapon/pickaxe/plasmacutter)) + cut_cover = 1 + if(cut_cover) + user << "You begin slicing through the metal cover." + 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 << "You press firmly on the cover, dislodging it." + return + if(3) + if (istype(W, /obj/item/weapon/crowbar)) + user << "You struggle to pry off the cover." + 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 << "You pry off the cover." + return + if(2) + if (istype(W, /obj/item/weapon/wrench)) + user << "You start loosening the anchoring bolts which secure the support rods to their frame." + 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 << "You remove the bolts anchoring the support rods." + 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 << "You need more welding fuel to complete this task." + return + else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) + cut_cover = 1 + if(cut_cover) + user << "You begin slicing through the support rods." + 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 << "The support rods drop out as you cut them loose from the frame." + return + if(0) + if(istype(W, /obj/item/weapon/crowbar)) + user << "You struggle to pry off the outer sheath." + 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 << "You pry off the outer sheath." + 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) + diff --git a/code/game/turfs/simulated/wall_icon.dm b/code/game/turfs/simulated/wall_icon.dm new file mode 100644 index 0000000000..b02311ee98 --- /dev/null +++ b/code/game/turfs/simulated/wall_icon.dm @@ -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 \ No newline at end of file diff --git a/code/game/turfs/simulated/wall_types.dm b/code/game/turfs/simulated/wall_types.dm new file mode 100644 index 0000000000..dc9346e323 --- /dev/null +++ b/code/game/turfs/simulated/wall_types.dm @@ -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") \ No newline at end of file diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index ef7dd74e8f..4596512fe4 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -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 << "It looks fully intact." else - var/dam = damage / damage_cap + var/dam = damage / material.integrity if(dam <= 0.3) user << "It looks slightly damaged." else if(dam <= 0.6) @@ -71,43 +93,14 @@ else user << "It looks heavily damaged." - if(rotting) + if(locate(/obj/effect/overlay/wallrot) in src) user << "There is fungus growing on [src]." -/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