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, iThe thermite starts melting through the wall." spawn(100) - if(O) qdel(O) + if(O) + qdel(O) // F.sd_LumReset() //TODO: ~Carn return /turf/simulated/wall/meteorhit(obj/M as obj) + var/rotting = (locate(/obj/effect/overlay/wallrot) in src) if (prob(15) && !rotting) dismantle_wall() else if(prob(70) && !rotting) @@ -264,232 +230,51 @@ ReplaceWithLattice() return 0 -/turf/simulated/wall - var/hulk_destroy_prob = 40 - var/hulk_take_damage = 1 - var/rotting_destroy_touch = 1 - var/rotting_touch_message = "\blue The wall crumbles under your touch." - -//Interactions -/turf/simulated/wall/attack_hand(mob/user as mob) - if (HULK in user.mutations) - if (prob(hulk_destroy_prob) || rotting) - usr << text("\blue You smash through the wall.") - usr.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) - dismantle_wall(1) - return 1 - else - usr << text("\blue You punch the wall.") - if(hulk_take_damage) - take_damage(rand(25, 75)) - return 1 - - if(rotting) - user << rotting_touch_message - if(rotting_destroy_touch) - dismantle_wall() - return 1 - - if(..()) return 1 - - user << "\blue You push the wall but nothing happens!" - playsound(src, 'sound/weapons/Genhit.ogg', 25, 1) - src.add_fingerprint(user) - return 0 - -/turf/simulated/wall/attack_generic(var/mob/user, var/damage, var/attack_message, var/wallbreaker) - if(!damage || !wallbreaker) - user << "You push the wall but nothing happens." +/turf/simulated/wall/proc/radiate() + var/material/M = name_to_material[material] + if(!istype(M) || !M.radioactivity) return - if(rotting || prob(40)) - user << "You smash through the wall!" - spawn(1) dismantle_wall(1) - else - user << "You smash against the wall." - take_damage(rand(25,75)) - return 1 - -/turf/simulated/wall/attackby(obj/item/weapon/W as obj, mob/user as mob) - - if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") - user << "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(rotting) - 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/E in src) if(E.name == "Wallrot") - qdel(E) - rotting = 0 - 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) + if(!active) + if(world.time > last_event+15) + active = 1 + for(var/mob/living/L in range(3,src)) + L.apply_effect(M.radioactivity,IRRADIATE,0) + for(var/turf/simulated/wall/T in range(3,src)) + T.radiate() + last_event = world.time + active = null return - - //THERMITE related stuff. Calls src.thermitemelt() which handles melting simulated walls and the relevant effects - if( thermite ) - if( istype(W, /obj/item/weapon/weldingtool) ) - var/obj/item/weapon/weldingtool/WT = W - if( WT.remove_fuel(0,user) ) - thermitemelt(user) - return - - else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) - thermitemelt(user) - return - - else if( istype(W, /obj/item/weapon/melee/energy/blade) ) - var/obj/item/weapon/melee/energy/blade/EB = W - - EB.spark_system.start() - user << "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 - - //DECONSTRUCTION - if( istype(W, /obj/item/weapon/weldingtool) ) - - var/response = "Dismantle" - if(damage) - response = alert(user, "Would you like to repair or dismantle [src]?", "[src]", "Repair", "Dismantle") - - var/obj/item/weapon/weldingtool/WT = W - - if(WT.remove_fuel(0,user)) - if(response == "Repair") - user << "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 if(response == "Dismantle") - user << "You begin slicing through the outer plating." - playsound(src, 'sound/items/Welder.ogg', 100, 1) - if(!do_after(user,100)) - return - if(WT.isOn()) - user << "You remove the outer plating." - dismantle_wall() - for(var/mob/O in viewers(user, 5)) - O.show_message("The wall was sliced apart by [user]!", 1, "You hear metal being sliced apart.", 2) - return - return - else - user << "You need more welding fuel to complete this task." - return - - else if( istype(W, /obj/item/weapon/pickaxe/plasmacutter) ) - - user << "You begin slicing through the outer plating." - playsound(src, 'sound/items/Welder.ogg', 100, 1) - - var/delay = 60 - if(mineral == "diamond") - delay += 60 - - if(!do_after(user,delay)) - return - - user << "You remove the outer plating." - dismantle_wall() - for(var/mob/O in viewers(user, 5)) - O.show_message("The wall was sliced apart by [user]!", 1, "You hear metal being sliced apart.", 2) - return - - //DRILLING - else if (istype(W, /obj/item/weapon/pickaxe/diamonddrill)) - - user << "You begin to drill though the wall." - - var/delay = 60 - if(mineral == "diamond") - delay += 60 - - if(!do_after(user,delay)) - return - - user << "Your drill tears though the last of the reinforced plating." - dismantle_wall() - for(var/mob/O in viewers(user, 5)) - O.show_message("The wall was drilled through by [user]!", 1, "You hear the grinding of metal.", 2) - return - - else if( istype(W, /obj/item/weapon/melee/energy/blade) ) - var/obj/item/weapon/melee/energy/blade/EB = W - - EB.spark_system.start() - user << "You stab \the [EB] into the wall and begin to slice it apart." - playsound(src, "sparks", 50, 1) - - sleep(70) - if(mineral == "diamond") - sleep(70) - if( !istype(src, /turf/simulated/wall) || !user || !EB || !T ) return - - if( user.loc == T && user.get_active_hand() == W ) - EB.spark_system.start() - playsound(src, "sparks", 50, 1) - playsound(src, 'sound/weapons/blade1.ogg', 50, 1) - dismantle_wall(1) - for(var/mob/O in viewers(user, 5)) - O.show_message("The wall was sliced apart by [user]!", 1, "You hear metal being sliced apart and sparks flying.", 2) - return - - else if(istype(W,/obj/item/apc_frame)) - var/obj/item/apc_frame/AH = W - AH.try_build(src) - return - - else if(istype(W,/obj/item/alarm_frame)) - var/obj/item/alarm_frame/AH = W - AH.try_build(src) - return - - else if(istype(W,/obj/item/firealarm_frame)) - var/obj/item/firealarm_frame/AH = W - AH.try_build(src) - return - - else if(istype(W,/obj/item/light_fixture_frame)) - var/obj/item/light_fixture_frame/AH = W - AH.try_build(src) - return - - else if(istype(W,/obj/item/light_fixture_frame/small)) - var/obj/item/light_fixture_frame/small/AH = W - AH.try_build(src) - return - - else if(istype(W,/obj/item/rust_fuel_compressor_frame)) - var/obj/item/rust_fuel_compressor_frame/AH = W - AH.try_build(src) - return - - else if(istype(W,/obj/item/rust_fuel_assembly_port_frame)) - var/obj/item/rust_fuel_assembly_port_frame/AH = W - AH.try_build(src) - return - - else if(istype(W,/obj/item/weapon/rcd)) //I bitterly resent having to write this. ~Z - return - - else if(istype(W, /obj/item/weapon/reagent_containers)) - return // They tend to have meaningful afterattack - let them apply it without destroying a rotting wall - - else - return attack_hand(user) return + +/turf/simulated/wall/proc/burn(temperature) + spawn(2) + new /obj/structure/girder(src) + src.ChangeTurf(/turf/simulated/floor) + for(var/turf/simulated/floor/target_tile in range(0,src)) + if(material == "phoron") //ergh + target_tile.assume_gas("phoron", 20, 400+T0C) + spawn (0) target_tile.hotspot_expose(temperature, 400) + for(var/turf/simulated/wall/W in range(3,src)) + W.ignite((temperature/4)) + for(var/obj/machinery/door/airlock/phoron/D in range(3,src)) + D.ignite(temperature/4) + +/turf/simulated/wall/proc/ignite(var/exposed_temperature) + + var/material/M = name_to_material[material] + if(!istype(M) || !isnull(M.ignition_point)) + return + if(exposed_temperature > M.ignition_point)//If the temperature of the object is over 300, then ignite + burn(exposed_temperature) + return + ..() + +/turf/simulated/wall/Bumped(AM as mob|obj) + radiate() + ..() + +/turf/simulated/wall/Destroy() + clear_plants() + check_relatives() + ..() \ No newline at end of file diff --git a/code/game/turfs/simulated/walls_mineral.dm b/code/game/turfs/simulated/walls_mineral.dm deleted file mode 100644 index 335d701656..0000000000 --- a/code/game/turfs/simulated/walls_mineral.dm +++ /dev/null @@ -1,130 +0,0 @@ -/turf/simulated/wall/mineral - name = "mineral wall" - desc = "This shouldn't exist" - icon_state = "" - var/last_event = 0 - var/active = null - -/turf/simulated/wall/mineral/gold - name = "gold wall" - desc = "A wall with gold plating. Swag!" - icon_state = "gold0" - walltype = "gold" - mineral = "gold" - //var/electro = 1 - //var/shocked = null - -/turf/simulated/wall/mineral/silver - name = "silver wall" - desc = "A wall with silver plating. Shiny!" - icon_state = "silver0" - walltype = "silver" - mineral = "silver" - //var/electro = 0.75 - //var/shocked = null - -/turf/simulated/wall/mineral/diamond - name = "diamond wall" - desc = "A wall with diamond plating. You monster." - icon_state = "diamond0" - walltype = "diamond" - mineral = "diamond" - -/turf/simulated/wall/mineral/sandstone - name = "sandstone wall" - desc = "A wall with sandstone plating." - icon_state = "sandstone0" - walltype = "sandstone" - mineral = "sandstone" - -/turf/simulated/wall/mineral/uranium - name = "uranium wall" - desc = "A wall with uranium plating. This is probably a bad idea." - icon_state = "uranium0" - walltype = "uranium" - mineral = "uranium" - -/turf/simulated/wall/mineral/uranium/proc/radiate() - if(!active) - if(world.time > last_event+15) - active = 1 - for(var/mob/living/L in range(3,src)) - L.apply_effect(12,IRRADIATE,0) - for(var/turf/simulated/wall/mineral/uranium/T in range(3,src)) - T.radiate() - last_event = world.time - active = null - return - return - -/turf/simulated/wall/mineral/uranium/attack_hand(mob/user as mob) - radiate() - ..() - -/turf/simulated/wall/mineral/uranium/attackby(obj/item/weapon/W as obj, mob/user as mob) - radiate() - ..() - -/turf/simulated/wall/mineral/uranium/Bumped(AM as mob|obj) - radiate() - ..() - -/turf/simulated/wall/mineral/phoron - name = "phoron wall" - desc = "A wall with phoron plating. This is definately a bad idea." - icon_state = "phoron0" - walltype = "phoron" - mineral = "phoron" - -/turf/simulated/wall/mineral/phoron/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(is_hot(W) > 300)//If the temperature of the object is over 300, then ignite - ignite(is_hot(W)) - return - ..() - -/turf/simulated/wall/mineral/phoron/proc/PhoronBurn(temperature) - spawn(2) - new /obj/structure/girder(src) - src.ChangeTurf(/turf/simulated/floor) - for(var/turf/simulated/floor/target_tile in range(0,src)) - target_tile.assume_gas("phoron", 20, 400+T0C) - spawn (0) target_tile.hotspot_expose(temperature, 400) - for(var/obj/structure/falsewall/phoron/F in range(3,src))//Hackish as fuck, but until temperature_expose works, there is nothing I can do -Sieve - var/turf/T = get_turf(F) - T.ChangeTurf(/turf/simulated/wall/mineral/phoron/) - qdel(F) - for(var/turf/simulated/wall/mineral/phoron/W in range(3,src)) - W.ignite((temperature/4))//Added so that you can't set off a massive chain reaction with a small flame - for(var/obj/machinery/door/airlock/phoron/D in range(3,src)) - D.ignite(temperature/4) - -/turf/simulated/wall/mineral/phoron/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)//Doesn't fucking work because walls don't interact with air :( - if(exposed_temperature > 300) - PhoronBurn(exposed_temperature) - -/turf/simulated/wall/mineral/phoron/proc/ignite(exposed_temperature) - if(exposed_temperature > 300) - PhoronBurn(exposed_temperature) - -/turf/simulated/wall/mineral/phoron/bullet_act(var/obj/item/projectile/Proj) - if(istype(Proj,/obj/item/projectile/beam)) - PhoronBurn(2500) - else if(istype(Proj,/obj/item/projectile/ion)) - PhoronBurn(500) - ..() - -/* -/turf/simulated/wall/mineral/proc/shock() - if (electrocute_mob(user, C, src)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() - return 1 - else - return 0 - -/turf/simulated/wall/mineral/proc/attackby(obj/item/weapon/W as obj, mob/user as mob) - if((mineral == "gold") || (mineral == "silver")) - if(shocked) - shock() -*/ diff --git a/code/game/turfs/simulated/walls_misc.dm b/code/game/turfs/simulated/walls_misc.dm deleted file mode 100644 index fdc5d92995..0000000000 --- a/code/game/turfs/simulated/walls_misc.dm +++ /dev/null @@ -1,8 +0,0 @@ -/turf/simulated/wall/cult - name = "wall" - desc = "The patterns engraved on the wall seem to shift as you try to focus on them. You feel sick" - icon_state = "cult" - walltype = "cult" - -/turf/unsimulated/wall/cult/cultify() - return diff --git a/code/game/turfs/simulated/walls_reinforced.dm b/code/game/turfs/simulated/walls_reinforced.dm deleted file mode 100644 index 0ddf0c34e7..0000000000 --- a/code/game/turfs/simulated/walls_reinforced.dm +++ /dev/null @@ -1,307 +0,0 @@ -/turf/simulated/wall/r_wall - name = "reinforced wall" - desc = "A huge chunk of reinforced metal used to seperate rooms." - icon_state = "r_wall" - opacity = 1 - density = 1 - - damage_cap = 800 - max_temperature = 6000 - - walltype = "rwall" - - var/d_state = 0 - -/turf/simulated/wall/r_wall - hulk_destroy_prob = 10 - hulk_take_damage = 0 - rotting_destroy_touch = 0 - rotting_touch_message = "\blue This wall feels rather unstable." - -/turf/simulated/wall/r_wall/attack_generic(var/mob/user, var/damage, var/attack_message, var/wallbreaker) - if(!rotting && wallbreaker < 2) - user << "You push the wall but nothing happens." - return - - return ..() - -/turf/simulated/wall/r_wall/attackby(obj/item/W as obj, mob/user as mob) - - if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") - 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(rotting) - 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/E in src) if(E.name == "Wallrot") - qdel(E) - rotting = 0 - 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() - 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 - - else if(istype(W, /obj/item/weapon/melee/energy/blade)) - user << "This wall is too thick to slice through. You will need to find a different path." - return - - if(damage && istype(W, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/WT = W - 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) - return - else - user << "You need more welding fuel to complete this task." - return - - var/turf/T = user.loc //get user's location for delay checks - - //DECONSTRUCTION - switch(d_state) - if(0) - if (istype(W, /obj/item/weapon/wirecutters)) - playsound(src, 'sound/items/Wirecutter.ogg', 100, 1) - src.d_state = 1 - src.icon_state = "r_wall-1" - PoolOrNew(/obj/item/stack/rods, src) - user << "You cut the outer grille." - return - - if(1) - if (istype(W, /obj/item/weapon/screwdriver)) - user << "You begin removing the support lines." - playsound(src, 'sound/items/Screwdriver.ogg', 100, 1) - - sleep(40) - if( !istype(src, /turf/simulated/wall/r_wall) || !user || !W || !T ) return - - if( d_state == 1 && user.loc == T && user.get_active_hand() == W ) - src.d_state = 2 - src.icon_state = "r_wall-2" - user << "You remove the support lines." - return - - //REPAIRING (replacing the outer grille for cosmetic damage) - else if( istype(W, /obj/item/stack/rods) ) - var/obj/item/stack/O = W - src.d_state = 0 - src.icon_state = "r_wall" - relativewall_neighbours() //call smoothwall stuff - user << "You replace the outer grille." - if (O.amount > 1) - O.amount-- - else - qdel(O) - return - - if(2) - if( istype(W, /obj/item/weapon/weldingtool) ) - var/obj/item/weapon/weldingtool/WT = W - if( WT.remove_fuel(0,user) ) - - user << "You begin slicing through the metal cover." - playsound(src, 'sound/items/Welder.ogg', 100, 1) - - sleep(60) - if( !istype(src, /turf/simulated/wall/r_wall) || !user || !WT || !WT.isOn() || !T ) return - - if( d_state == 2 && user.loc == T && user.get_active_hand() == WT ) - src.d_state = 3 - src.icon_state = "r_wall-3" - user << "You press firmly on the cover, dislodging it." - else - user << "You need more welding fuel to complete this task." - return - - if( istype(W, /obj/item/weapon/pickaxe/plasmacutter) ) - - user << "You begin slicing through the metal cover." - playsound(src, 'sound/items/Welder.ogg', 100, 1) - - sleep(40) - if( !istype(src, /turf/simulated/wall/r_wall) || !user || !W || !T ) return - - if( d_state == 2 && user.loc == T && user.get_active_hand() == W ) - src.d_state = 3 - src.icon_state = "r_wall-3" - 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) - - sleep(100) - if( !istype(src, /turf/simulated/wall/r_wall) || !user || !W || !T ) return - - if( d_state == 3 && user.loc == T && user.get_active_hand() == W ) - src.d_state = 4 - src.icon_state = "r_wall-4" - user << "You pry off the cover." - return - - if(4) - 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) - - sleep(40) - if( !istype(src, /turf/simulated/wall/r_wall) || !user || !W || !T ) return - - if( d_state == 4 && user.loc == T && user.get_active_hand() == W ) - src.d_state = 5 - src.icon_state = "r_wall-5" - user << "You remove the bolts anchoring the support rods." - return - - if(5) - if( istype(W, /obj/item/weapon/weldingtool) ) - var/obj/item/weapon/weldingtool/WT = W - if( WT.remove_fuel(0,user) ) - - user << "You begin slicing through the support rods." - playsound(src, 'sound/items/Welder.ogg', 100, 1) - - sleep(100) - if( !istype(src, /turf/simulated/wall/r_wall) || !user || !WT || !WT.isOn() || !T ) return - - if( d_state == 5 && user.loc == T && user.get_active_hand() == WT ) - src.d_state = 6 - src.icon_state = "r_wall-6" - PoolOrNew(/obj/item/stack/rods, src) - user << "The support rods drop out as you cut them loose from the frame." - else - user << "You need more welding fuel to complete this task." - return - - if( istype(W, /obj/item/weapon/pickaxe/plasmacutter) ) - - user << "You begin slicing through the support rods." - playsound(src, 'sound/items/Welder.ogg', 100, 1) - - sleep(70) - if( !istype(src, /turf/simulated/wall/r_wall) || !user || !W || !T ) return - - if( d_state == 5 && user.loc == T && user.get_active_hand() == W ) - src.d_state = 6 - src.icon_state = "r_wall-6" - PoolOrNew(/obj/item/stack/rods, src) - user << "The support rods drop out as you cut them loose from the frame." - return - - if(6) - 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/r_wall) || !user || !W || !T ) return - - if( user.loc == T && user.get_active_hand() == W ) - user << "You pry off the outer sheath." - dismantle_wall() - return - -//vv OK, we weren't performing a valid deconstruction step or igniting thermite,let's check the other possibilities vv - - //DRILLING - if (istype(W, /obj/item/weapon/pickaxe/diamonddrill)) - - user << "You begin to drill though the wall." - - sleep(200) - if( !istype(src, /turf/simulated/wall/r_wall) || !user || !W || !T ) return - - if( user.loc == T && user.get_active_hand() == W ) - user << "Your drill tears though the last of the reinforced plating." - dismantle_wall() - - //REPAIRING - else if( istype(W, /obj/item/stack/sheet/metal) && d_state ) - var/obj/item/stack/sheet/metal/MS = W - - user << "You begin patching-up the wall with \a [MS]." - - sleep( max(20*d_state,100) ) //time taken to repair is proportional to the damage! (max 10 seconds) - if( !istype(src, /turf/simulated/wall/r_wall) || !user || !MS || !T ) return - - if( user.loc == T && user.get_active_hand() == MS && d_state ) - src.d_state = 0 - src.icon_state = "r_wall" - relativewall_neighbours() //call smoothwall stuff - user << "You repair the last of the damage." - if (MS.amount > 1) - MS.amount-- - else - qdel(MS) - - //APC - else if( istype(W,/obj/item/apc_frame) ) - var/obj/item/apc_frame/AH = W - AH.try_build(src) - - else if( istype(W,/obj/item/alarm_frame) ) - var/obj/item/alarm_frame/AH = W - AH.try_build(src) - - else if(istype(W,/obj/item/firealarm_frame)) - var/obj/item/firealarm_frame/AH = W - AH.try_build(src) - return - - else if(istype(W,/obj/item/light_fixture_frame)) - var/obj/item/light_fixture_frame/AH = W - AH.try_build(src) - return - - else if(istype(W,/obj/item/light_fixture_frame/small)) - var/obj/item/light_fixture_frame/small/AH = W - AH.try_build(src) - return - - else if(istype(W, /obj/item/weapon/reagent_containers)) - return // They tend to have meaningful afterattack - let them apply it without destroying a rotting wall - - //Finally, CHECKING FOR FALSE WALLS if it isn't damaged - else if(!d_state) - return attack_hand(user) - return \ No newline at end of file diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 05fc4cd2db..7af228b49c 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -237,10 +237,7 @@ if(S.zone) S.zone.rebuild() if(ispath(N, /turf/simulated/floor)) - var/turf/simulated/W = new N( locate(src.x, src.y, src.z) ) - //W.Assimilate_Air() - if(old_fire) fire = old_fire diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index ca4717307a..e73856b85f 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -5,7 +5,7 @@ icon_state = "" flags = CONDUCT w_class = 2.0 - matter = list("metal" = 100) + matter = list(DEFAULT_WALL_MATERIAL = 100) throwforce = 2 throw_speed = 3 throw_range = 10 diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm index ece2f08219..d44f45fa97 100644 --- a/code/modules/assembly/igniter.dm +++ b/code/modules/assembly/igniter.dm @@ -2,7 +2,7 @@ name = "igniter" desc = "A small electronic device able to ignite combustable substances." icon_state = "igniter" - matter = list("metal" = 500, "glass" = 50, "waste" = 10) + matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 50, "waste" = 10) origin_tech = "magnets=1" secured = 1 diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 3f3c4f4dbd..d163a9d29f 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -4,7 +4,7 @@ name = "infrared emitter" desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted." icon_state = "infrared" - matter = list("metal" = 1000, "glass" = 500, "waste" = 100) + matter = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500, "waste" = 100) origin_tech = "magnets=2" wires = WIRE_PULSE diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index 676ee17cd1..a2cbe632c7 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -2,7 +2,7 @@ name = "mousetrap" desc = "A handy little spring-loaded trap for catching pesty rodents." icon_state = "mousetrap" - matter = list("metal" = 100, "waste" = 10) + matter = list(DEFAULT_WALL_MATERIAL = 100, "waste" = 10) origin_tech = "combat=1" var/armed = 0 diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index 06923f8458..39bf3f2fcc 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -2,7 +2,7 @@ name = "proximity sensor" desc = "Used for scanning and alerting when someone enters a certain proximity." icon_state = "prox" - matter = list("metal" = 800, "glass" = 200, "waste" = 50) + matter = list(DEFAULT_WALL_MATERIAL = 800, "glass" = 200, "waste" = 50) origin_tech = "magnets=1" wires = WIRE_PULSE diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 271b63e6d5..4d93ad26ee 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -3,7 +3,7 @@ desc = "Used to remotely activate devices." icon_state = "signaller" item_state = "signaler" - matter = list("metal" = 1000, "glass" = 200, "waste" = 100) + matter = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 200, "waste" = 100) origin_tech = "magnets=1" wires = WIRE_RECEIVE | WIRE_PULSE | WIRE_RADIO_PULSE | WIRE_RADIO_RECEIVE diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 326d36195f..d4fb73a764 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -2,7 +2,7 @@ name = "timer" desc = "Used to time things. Works well with contraptions which has to count down. Tick tock." icon_state = "timer" - matter = list("metal" = 500, "glass" = 50, "waste" = 10) + matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 50, "waste" = 10) origin_tech = "magnets=1" wires = WIRE_PULSE diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm index b9c3eb88de..ca33f9d106 100644 --- a/code/modules/assembly/voice.dm +++ b/code/modules/assembly/voice.dm @@ -2,7 +2,7 @@ name = "voice analyzer" desc = "A small electronic device able to record a voice sample, and send a signal when that sample is repeated." icon_state = "voice" - matter = list("metal" = 500, "glass" = 50, "waste" = 10) + matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 50, "waste" = 10) origin_tech = "magnets=1" var/listening = 0 var/recorded //the activation message diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 051f6e4c20..fcbd890263 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -84,6 +84,7 @@ datum/preferences var/religion = "None" //Religious association. //Mob preview + var/mob/living/carbon/human/dummy //the mannequin var/icon/preview_icon = null var/icon/preview_icon_front = null var/icon/preview_icon_side = null @@ -1642,30 +1643,18 @@ datum/preferences character.gen_record = gen_record character.exploit_record = exploit_record - character.gender = gender + character.change_gender(gender) character.age = age character.b_type = b_type - character.r_eyes = r_eyes - character.g_eyes = g_eyes - character.b_eyes = b_eyes + character.change_eye_color(r_eyes,g_eyes,b_eyes) + character.change_hair_color(r_hair,g_hair,b_hair) + character.change_facial_hair_color(r_facial,g_facial,b_facial) + character.change_skin_color(r_skin,g_skin,b_skin) + character.change_skin_tone(s_tone) - character.r_hair = r_hair - character.g_hair = g_hair - character.b_hair = b_hair - - character.r_facial = r_facial - character.g_facial = g_facial - character.b_facial = b_facial - - character.r_skin = r_skin - character.g_skin = g_skin - character.b_skin = b_skin - - character.s_tone = s_tone - - character.h_style = h_style - character.f_style = f_style + character.change_hair(h_style) + character.change_facial_hair(f_style) character.home_system = home_system character.citizenship = citizenship diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 47308280bb..1a0052d316 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -17,7 +17,7 @@ icon_state = "welding" flags = HEADCOVERSEYES | HEADCOVERSMOUTH item_state = "welding" - matter = list("metal" = 3000, "glass" = 1000) + matter = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 1000) var/up = 0 armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) flags_inv = (HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE) diff --git a/code/modules/clothing/spacesuits/rig/modules/modules.dm b/code/modules/clothing/spacesuits/rig/modules/modules.dm index ac9a80b07a..3eaf324709 100644 --- a/code/modules/clothing/spacesuits/rig/modules/modules.dm +++ b/code/modules/clothing/spacesuits/rig/modules/modules.dm @@ -13,7 +13,7 @@ desc = "It looks pretty sciency." icon = 'icons/obj/rig_modules.dmi' icon_state = "module" - matter = list("metal" = 20000, "plastic" = 30000, "glass" = 5000) + matter = list(DEFAULT_WALL_MATERIAL = 20000, "plastic" = 30000, "glass" = 5000) var/damage = 0 var/obj/item/weapon/rig/holder diff --git a/code/modules/clothing/spacesuits/void/void.dm b/code/modules/clothing/spacesuits/void/void.dm index 997048424a..246f37c0e4 100644 --- a/code/modules/clothing/spacesuits/void/void.dm +++ b/code/modules/clothing/spacesuits/void/void.dm @@ -59,15 +59,10 @@ /obj/item/clothing/suit/space/void/examine(user) ..(user) - if(boots || helmet || tank) - var/D = "Installed equipment: " - var/first = 1 - for(var/obj/item/I in list(helmet,boots,tank)) - if (I) - D += "[first?"":", "]\the [I]\icon[I]" - first = 0 - D += "." - user << D + var/list/part_list = new + for(var/obj/item/I in list(helmet,boots,tank)) + part_list += "\a [I]" + user << "\The [src] has [english_list(part_list)] installed." if(tank && in_range(src,user)) user << "The wrist-mounted pressure gauge reads [max(round(tank.air_contents.return_pressure()),0)] kPa remaining in \the [tank]." diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index 8b4d7f9ef1..cf00e4f78b 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -1,5 +1,11 @@ /var/global/spacevines_spawned = 0 +/datum/event/spacevine + announceWhen = 10 + /datum/event/spacevine/start() spacevine_infestation() spacevines_spawned = 1 + +/datum/event/spacevine/announce() + command_announcement.Announce("Confirmed outbreak of level 7 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg') diff --git a/code/modules/holodeck/HolodeckObjects.dm b/code/modules/holodeck/HolodeckObjects.dm index 1dabe9f345..b463ec4209 100644 --- a/code/modules/holodeck/HolodeckObjects.dm +++ b/code/modules/holodeck/HolodeckObjects.dm @@ -192,6 +192,7 @@ /obj/item/weapon/holo damtype = HALLOSS + no_attack_log = 1 /obj/item/weapon/holo/esword desc = "May the force be within you. Sorta." diff --git a/code/modules/hydroponics/trays/tray_process.dm b/code/modules/hydroponics/trays/tray_process.dm index 68e6fbce37..daa3586fd7 100644 --- a/code/modules/hydroponics/trays/tray_process.dm +++ b/code/modules/hydroponics/trays/tray_process.dm @@ -120,6 +120,14 @@ harvest = 1 lastproduce = age + // If we're a vine which is not in a closed tray and is at least half mature, and there's no vine currently on our turf: make one (maybe) + if(!closed_system && \ + seed.get_trait(TRAIT_SPREAD) == 2 && \ + 2 * age >= seed.get_trait(TRAIT_MATURATION) && \ + !(locate(/obj/effect/plant) in get_turf(src)) && \ + prob(2 * seed.get_trait(TRAIT_POTENCY))) + new /obj/effect/plant(get_turf(src), seed) + if(prob(3)) // On each tick, there's a chance the pest population will increase pestlevel += 0.1 * HYDRO_SPEED_MULTIPLIER diff --git a/code/modules/hydroponics/trays/tray_reagents.dm b/code/modules/hydroponics/trays/tray_reagents.dm index 3dad0adc45..8dac48ca8a 100644 --- a/code/modules/hydroponics/trays/tray_reagents.dm +++ b/code/modules/hydroponics/trays/tray_reagents.dm @@ -58,7 +58,7 @@ force = 5.0 throwforce = 7.0 w_class = 2.0 - matter = list("metal" = 50) + matter = list(DEFAULT_WALL_MATERIAL = 50) attack_verb = list("slashed", "sliced", "cut", "clawed") diff --git a/code/modules/hydroponics/trays/tray_tools.dm b/code/modules/hydroponics/trays/tray_tools.dm index 3b42ee3854..934cc119fc 100644 --- a/code/modules/hydroponics/trays/tray_tools.dm +++ b/code/modules/hydroponics/trays/tray_tools.dm @@ -215,7 +215,7 @@ force = 5.0 throwforce = 7.0 w_class = 2.0 - matter = list("metal" = 50) + matter = list(DEFAULT_WALL_MATERIAL = 50) attack_verb = list("slashed", "sliced", "cut", "clawed") //Hatchets and things to kill kudzu @@ -232,7 +232,7 @@ throw_range = 4 sharp = 1 edge = 1 - matter = list("metal" = 15000) + matter = list(DEFAULT_WALL_MATERIAL = 15000) origin_tech = "materials=2;combat=1" attack_verb = list("chopped", "torn", "cut") @@ -277,4 +277,4 @@ for(var/obj/effect/plant/B in orange(A,1)) if(prob(80)) B.die_off(1) - qdel(A) \ No newline at end of file + qdel(A) diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm new file mode 100644 index 0000000000..04e8d485ba --- /dev/null +++ b/code/modules/materials/materials.dm @@ -0,0 +1,170 @@ +var/list/name_to_material + +/proc/populate_material_list() + name_to_material = list() + for(var/type in typesof(/material) - /material) + var/material/new_mineral = new type + if(!new_mineral.name) + continue + name_to_material[lowertext(new_mineral.name)] = new_mineral + return 1 + +/* + Valid sprite masks: + stone + metal + solid + cult +*/ + +/material + var/name // Tag for use in overlay generation/list population . + var/display_name + var/icon_base = "metal" + var/icon_colour + var/icon_reinf = "reinf_metal" + var/stack_type + var/unmeltable + var/cut_delay = 0 + var/radioactivity + var/ignition_point + var/melting_point = 1800 // K, walls will take damage if they're next to a fire hotter than this + var/integrity = 150 // Damage before wall falls apart, essentially. + var/hardness = 60 // Used to determine if a hulk can punch through this wall. + var/rotting_touch_message = "crumbles under your touch" + var/opacity = 1 + var/explosion_resistance = 5 + +/material/New() + ..() + if(!display_name) + display_name = name + +/material/proc/place_dismantled_girder(var/turf/target, var/material/reinf_material) + var/obj/structure/girder/G = new(target) + if(reinf_material) + G.reinf_material = reinf_material + G.reinforce_girder() + +/material/proc/place_dismantled_product(var/turf/target,var/is_devastated) + for(var/x=1;x<(is_devastated?2:3);x++) + place_sheet(target) + +/material/proc/place_sheet(var/turf/target) + if(stack_type) + new stack_type(target) + +/material/uranium + name = "uranium" + stack_type = /obj/item/stack/sheet/mineral/uranium + radioactivity = 12 + icon_base = "stone" + icon_reinf = "reinf_stone" + icon_colour = "#007A00" + +/material/diamond + name = "diamond" + stack_type = /obj/item/stack/sheet/mineral/diamond + unmeltable = 1 + cut_delay = 60 + icon_colour = "#00FFE1" + opacity = 0.4 + +/material/gold + name = "gold" + stack_type = /obj/item/stack/sheet/mineral/gold + icon_colour = "#EDD12F" + +/material/silver + name = "silver" + stack_type = /obj/item/stack/sheet/mineral/silver + icon_colour = "#D1E6E3" + +/material/phoron + name = "phoron" + stack_type = /obj/item/stack/sheet/mineral/phoron + ignition_point = 300 + icon_base = "stone" + icon_colour = "#FC2BC5" + +/material/sandstone + name = "sandstone" + stack_type = /obj/item/stack/sheet/mineral/sandstone + icon_base = "stone" + icon_reinf = "reinf_stone" + icon_colour = "#D9C179" + +/material/steel + name = DEFAULT_WALL_MATERIAL + stack_type = /obj/item/stack/sheet/metal + icon_base = "solid" + icon_reinf = "reinf_over" + icon_colour = "#666666" + +/material/plasteel + name = "plasteel" + stack_type = /obj/item/stack/sheet/plasteel + integrity = 800 + melting_point = 6000 + icon_base = "solid" + icon_reinf = "reinf_over" + icon_colour = "#777777" + explosion_resistance = 25 + +/material/glass + name = "glass" + stack_type = /obj/item/stack/sheet/glass + icon_colour = "#00E1FF" + opacity = 0.3 + +/material/plastic + name = "plastic" + stack_type = /obj/item/stack/sheet/mineral/plastic + icon_base = "solid" + icon_reinf = "reinf_over" + icon_colour = "#CCCCCC" + +/material/osmium + name = "osmium" + stack_type = /obj/item/stack/sheet/mineral/osmium + icon_colour = "#9999FF" + +/material/tritium + name = "tritium" + stack_type = /obj/item/stack/sheet/mineral/tritium + icon_colour = "#777777" + +/material/mhydrogen + name = "mhydrogen" + stack_type = /obj/item/stack/sheet/mineral/mhydrogen + icon_colour = "#E6C5DE" + +/material/platinum + name = "platinum" + stack_type = /obj/item/stack/sheet/mineral/platinum + icon_colour = "#9999FF" + +/material/iron + name = "iron" + stack_type = /obj/item/stack/sheet/mineral/iron + icon_colour = "#5C5454" + +/material/cult + name = "cult" + display_name = "disturbing stone" + icon_base = "cult" + icon_colour = "#402821" + icon_reinf = "reinf_cult" + +/material/cult/place_dismantled_girder(var/turf/target) + new /obj/structure/girder/cult(target) + +/material/cult/place_dismantled_product(var/turf/target) + new /obj/effect/decal/cleanable/blood(target) + +/material/cult/reinf + name = "cult2" + display_name = "human remains" + +/material/cult/reinf/place_dismantled_product(var/turf/target) + new /obj/effect/decal/remains/human(target) diff --git a/code/modules/mining/alloys.dm b/code/modules/mining/alloys.dm index ce29725d87..6495d706b4 100644 --- a/code/modules/mining/alloys.dm +++ b/code/modules/mining/alloys.dm @@ -19,7 +19,7 @@ product = /obj/item/stack/sheet/plasteel /datum/alloy/steel - metaltag = "steel" + metaltag = DEFAULT_WALL_MATERIAL requires = list( "coal" = 1, "hematite" = 1 diff --git a/code/modules/mining/drilling/scanner.dm b/code/modules/mining/drilling/scanner.dm index 510172d795..6903256d92 100644 --- a/code/modules/mining/drilling/scanner.dm +++ b/code/modules/mining/drilling/scanner.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/device.dmi' icon_state = "forensic0-old" //GET A BETTER SPRITE. item_state = "electronic" - matter = list("metal" = 150) + matter = list(DEFAULT_WALL_MATERIAL = 150) origin_tech = "magnets=1;engineering=1" /obj/item/weapon/mining_scanner/attack_self(mob/user as mob) diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 234f1f9ecc..649dee1e1e 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -42,8 +42,9 @@ for(var/ore in machine.ores_processing) if(!machine.ores_stored[ore] && !show_all_ores) continue - - dat += "[capitalize(ore)][machine.ores_stored[ore]] 0 && ores_processing[metal] != 0) - var/datum/ore/O = ore_data[metal] + var/ore/O = ore_data[metal] if(!O) continue @@ -206,24 +209,28 @@ var/can_make = Clamp(ores_stored[metal],0,sheets_per_tick-sheets) if(can_make%2>0) can_make-- - if(!can_make || ores_stored[metal] < 1) + var/material/M = name_to_material[O.compresses_to] + + if(!istype(M) || !can_make || ores_stored[metal] < 1) continue for(var/i=0,iChoose") dat += text("
Iron inserted: [amt_iron] ") - if (chosen == "metal") + if (chosen == DEFAULT_WALL_MATERIAL) dat += text("chosen") else dat += text("Choose") @@ -133,7 +133,7 @@ icon_state = "coinpress1" var/obj/item/weapon/moneybag/M switch(chosen) - if("metal") + if(DEFAULT_WALL_MATERIAL) while(amt_iron > 0 && coinsToProduce > 0) if (locate(/obj/item/weapon/moneybag,output.loc)) M = locate(/obj/item/weapon/moneybag,output.loc) diff --git a/code/modules/mining/ore.dm b/code/modules/mining/ore.dm index 30385d49a5..a46b263152 100644 --- a/code/modules/mining/ore.dm +++ b/code/modules/mining/ore.dm @@ -4,71 +4,71 @@ icon_state = "ore2" w_class = 2 var/datum/geosample/geologic_data - var/oretag + var/material /obj/item/weapon/ore/uranium name = "pitchblende" - icon_state = "Uranium ore" + icon_state = "ore_uranium" origin_tech = "materials=5" - oretag = "uranium" + material = "uranium" /obj/item/weapon/ore/iron name = "hematite" - icon_state = "Iron ore" + icon_state = "ore_iron" origin_tech = "materials=1" - oretag = "hematite" + material = "hematite" /obj/item/weapon/ore/coal - name = "carbonaceous rock" - icon_state = "Coal ore" + name = "raw carbon" + icon_state = "ore_coal" origin_tech = "materials=1" - oretag = "coal" + material = "carbon" /obj/item/weapon/ore/glass name = "impure silicates" - icon_state = "Glass ore" + icon_state = "ore_glass" origin_tech = "materials=1" - oretag = "sand" + material = "sand" /obj/item/weapon/ore/phoron name = "phoron crystals" - icon_state = "Phoron ore" + icon_state = "ore_phoron" origin_tech = "materials=2" - oretag = "phoron" + material = "phoron" /obj/item/weapon/ore/silver name = "native silver ore" - icon_state = "Silver ore" + icon_state = "ore_silver" origin_tech = "materials=3" - oretag = "silver" + material = "silver" /obj/item/weapon/ore/gold name = "native gold ore" - icon_state = "Gold ore" + icon_state = "ore_gold" origin_tech = "materials=4" - oretag = "gold" + material = "gold" /obj/item/weapon/ore/diamond name = "diamonds" - icon_state = "Diamond ore" + icon_state = "ore_diamond" origin_tech = "materials=6" - oretag = "diamond" + material = "diamond" /obj/item/weapon/ore/osmium name = "raw platinum" - icon_state = "Platinum ore" - oretag = "platinum" + icon_state = "ore_platinum" + material = "platinum" /obj/item/weapon/ore/hydrogen name = "raw hydrogen" - icon_state = "Phazon" - oretag = "hydrogen" + icon_state = "ore_hydrogen" + material = "mhydrogen" /obj/item/weapon/ore/slag name = "Slag" - desc = "Completely useless" + desc = "Someone screwed up..." icon_state = "slag" - oretag = "slag" + material = null /obj/item/weapon/ore/New() pixel_x = rand(0,16)-8 diff --git a/code/modules/mining/ore_datum.dm b/code/modules/mining/ore_datum.dm index b3689d3abb..32f03c072f 100644 --- a/code/modules/mining/ore_datum.dm +++ b/code/modules/mining/ore_datum.dm @@ -1,52 +1,133 @@ -/datum/ore - var/oretag +var/global/list/ore_data = list() + +/ore + var/name + var/display_name var/alloy var/smelts_to var/compresses_to + var/result_amount // How much ore? + var/spread = 1 // Does this type of deposit spread? + var/spread_chance // Chance of spreading in any direction + var/ore // Path to the ore produced when tile is mined. + var/scan_icon // Overlay for ore scanners. + // Xenoarch stuff. No idea what it's for, just refactored it to be less awful. + var/list/xarch_ages = list( + "thousand" = 999, + "million" = 999 + ) + var/xarch_source_mineral = "iron" -/datum/ore/uranium - smelts_to = /obj/item/stack/sheet/mineral/uranium - oretag = "uranium" +/ore/New() + . = ..() + if(!display_name) + display_name = name -/datum/ore/iron - smelts_to = /obj/item/stack/sheet/mineral/iron +/ore/uranium + name = "uranium" + display_name = "pitchblende" + smelts_to = "uranium" + result_amount = 5 + spread_chance = 10 + ore = /obj/item/weapon/ore/uranium + scan_icon = "mineral_uncommon" + xarch_ages = list( + "thousand" = 999, + "million" = 704 + ) + xarch_source_mineral = "potassium" + +/ore/hematite + name = "hematite" + display_name = "hematite" + smelts_to = "iron" alloy = 1 - oretag = "hematite" + result_amount = 5 + spread_chance = 25 + ore = /obj/item/weapon/ore/iron + scan_icon = "mineral_common" -/datum/ore/coal - smelts_to = /obj/item/stack/sheet/mineral/plastic +/ore/coal + name = "carbon" + display_name = "raw carbon" + smelts_to = "plastic" alloy = 1 - oretag = "coal" + result_amount = 5 + spread_chance = 25 + ore = /obj/item/weapon/ore/coal + scan_icon = "mineral_common" -/datum/ore/glass - smelts_to = /obj/item/stack/sheet/glass - compresses_to = /obj/item/stack/sheet/mineral/sandstone - oretag = "sand" +/ore/glass + name = "sand" + display_name = "impure silicates" + smelts_to = "glass" + compresses_to = "sandstone" -/datum/ore/phoron +/ore/phoron + name = "phoron" + display_name = "phoron crystals" + compresses_to = "phoron" //smelts_to = something that explodes violently on the conveyor, huhuhuhu - compresses_to = /obj/item/stack/sheet/mineral/phoron - oretag = "phoron" + result_amount = 5 + spread_chance = 25 + ore = /obj/item/weapon/ore/phoron + scan_icon = "mineral_uncommon" + xarch_ages = list( + "thousand" = 999, + "million" = 999, + "billion" = 13, + "billion_lower" = 10 + ) + xarch_source_mineral = "phoron" -/datum/ore/silver - smelts_to = /obj/item/stack/sheet/mineral/silver - oretag = "silver" +/ore/silver + name = "silver" + display_name = "native silver" + smelts_to = "silver" + result_amount = 5 + spread_chance = 10 + ore = /obj/item/weapon/ore/silver + scan_icon = "mineral_uncommon" -/datum/ore/gold - smelts_to = /obj/item/stack/sheet/mineral/gold - oretag = "gold" +/ore/gold + smelts_to = "gold" + name = "gold" + display_name = "native gold" + result_amount = 5 + spread_chance = 10 + ore = /obj/item/weapon/ore/gold + scan_icon = "mineral_uncommon" + xarch_ages = list( + "thousand" = 999, + "million" = 999, + "billion" = 4, + "billion_lower" = 3 + ) -/datum/ore/diamond - compresses_to = /obj/item/stack/sheet/mineral/diamond - oretag = "diamond" +/ore/diamond + name = "diamond" + display_name = "diamond" + compresses_to = "diamond" + result_amount = 5 + spread_chance = 10 + ore = /obj/item/weapon/ore/diamond + scan_icon = "mineral_rare" + xarch_source_mineral = "nitrogen" -/datum/ore/osmium - smelts_to = /obj/item/stack/sheet/mineral/platinum - compresses_to = /obj/item/stack/sheet/mineral/osmium +/ore/platinum + name = "platinum" + display_name = "raw platinum" + smelts_to = "platinum" + compresses_to = "osmium" alloy = 1 - oretag = "platinum" + result_amount = 5 + spread_chance = 10 + ore = /obj/item/weapon/ore/osmium + scan_icon = "mineral_rare" -/datum/ore/hydrogen - smelts_to = /obj/item/stack/sheet/mineral/tritium - compresses_to = /obj/item/stack/sheet/mineral/mhydrogen - oretag = "hydrogen" +/ore/hydrogen + name = "mhydrogen" + display_name = "metallic hydrogen" + smelts_to = "tritium" + compresses_to = "mhydrogen" + scan_icon = "mineral_rare" \ No newline at end of file diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index c98c6304f5..4e9ef55280 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -25,7 +25,7 @@ w_class = 3 origin_tech = "biotech=3" - var/list/construction_cost = list("metal"=1000,"glass"=500) + var/list/construction_cost = list(DEFAULT_WALL_MATERIAL=1000,"glass"=500) var/construction_time = 75 //these vars are so the mecha fabricator doesn't shit itself anymore. --NEO diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index 4f4543b3b9..b9ff795aaa 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -6,7 +6,7 @@ w_class = 3 origin_tech = "engineering=4;materials=4;bluespace=2;programming=4" - construction_cost = list("metal"=500,"glass"=500,"silver"=200,"gold"=200,"phoron"=100,"diamond"=10) + construction_cost = list(DEFAULT_WALL_MATERIAL=500,"glass"=500,"silver"=200,"gold"=200,"phoron"=100,"diamond"=10) construction_time = 75 var/searching = 0 var/askDelay = 10 * 60 * 1 diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 04c88e47b1..f409bee147 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -138,6 +138,14 @@ emp_act return 1 return 0 +//Used to check if they can be fed food/drinks/pills +/mob/living/carbon/human/proc/check_mouth_coverage() + var/list/protective_gear = list(head, wear_mask, wear_suit, w_uniform) + for(var/obj/item/gear in protective_gear) + if(istype(gear) && (gear.body_parts_covered & FACE) && (gear.flags & (MASKCOVERSMOUTH|HEADCOVERSMOUTH))) + return gear + return null + /mob/living/carbon/human/proc/check_shields(var/damage = 0, var/attack_text = "the attack") if(l_hand && istype(l_hand, /obj/item/weapon))//Current base is the prob(50-d/3) var/obj/item/weapon/I = l_hand diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm index caea1ae7a8..7bab6d074c 100644 --- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm +++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm @@ -134,13 +134,20 @@ return // OBJ CHECK + var/cannot_melt if(isobj(O)) var/obj/I = O - if(I.unacidable) //So the aliens don't destroy energy fields/singularies/other aliens/etc with their acid. - src << "You cannot dissolve this object." - return - // TURF CHECK - else if(istype(O, /turf/simulated/wall/r_wall) || istype(O, /turf/simulated/floor/engine)) + if(I.unacidable) + cannot_melt = 1 + else + if(istype(O, /turf/simulated/wall)) + var/turf/simulated/wall/W = O + if(W.material.unmeltable) + cannot_melt = 1 + else if(istype(O, /turf/simulated/floor/engine)) + cannot_melt = 1 + + if(cannot_melt) src << "You cannot dissolve this object." return diff --git a/code/modules/mob/living/carbon/resist.dm b/code/modules/mob/living/carbon/resist.dm index 95ee36b1f6..7a4c184ca7 100644 --- a/code/modules/mob/living/carbon/resist.dm +++ b/code/modules/mob/living/carbon/resist.dm @@ -1,6 +1,6 @@ /mob/living/carbon/process_resist() - + //drop && roll if(on_fire) fire_stacks -= 2 //reduced @@ -18,34 +18,34 @@ ) ExtinguishMob() return - + if(handcuffed) spawn() escape_handcuffs() else if(legcuffed) spawn() escape_legcuffs() - + ..() /mob/living/carbon/proc/escape_handcuffs() if(!(last_special <= world.time)) return - + next_move = world.time + 100 last_special = world.time + 100 if(can_break_cuffs()) //Don't want to do a lot of logic gating here. break_handcuffs() return - + var/obj/item/weapon/handcuffs/HC = handcuffed - + //A default in case you are somehow handcuffed with something that isn't an obj/item/weapon/handcuffs type - var/breakouttime = 1200 + var/breakouttime = 1200 var/displaytime = 2 //Minutes to display in the "this will take X minutes." //If you are handcuffed with actual handcuffs... Well what do I know, maybe someone will want to handcuff you with toilet paper in the future... if(istype(HC)) breakouttime = HC.breakouttime displaytime = breakouttime / 600 //Minutes - + visible_message( "[src] attempts to remove \the [HC]!", "You attempt to remove \the [HC]. (This will take around [displaytime] minutes and you need to stand still)" @@ -62,7 +62,7 @@ /mob/living/carbon/proc/escape_legcuffs() if(!(last_special <= world.time)) return - + next_move = world.time + 100 last_special = world.time + 100 @@ -71,7 +71,7 @@ return var/obj/item/weapon/legcuffs/HC = legcuffed - + //A default in case you are somehow legcuffed with something that isn't an obj/item/weapon/legcuffs type var/breakouttime = 1200 var/displaytime = 2 //Minutes to display in the "this will take X minutes." @@ -79,20 +79,20 @@ if(istype(HC)) breakouttime = HC.breakouttime displaytime = breakouttime / 600 //Minutes - - visible_message( - "[usr] attempts to remove \the [HC]!", + + visible_message( + "[usr] attempts to remove \the [HC]!", "You attempt to remove \the [HC]. (This will take around [displaytime] minutes and you need to stand still)" ) if(do_after(src, breakouttime)) if(!legcuffed || buckled) - return + return visible_message( - "[src] manages to remove \the [legcuffed]!", + "[src] manages to remove \the [legcuffed]!", "You successfully remove \the [legcuffed]." ) - + drop_from_inventory(legcuffed) legcuffed = null update_inv_legcuffed() @@ -106,18 +106,18 @@ "[src] is trying to break \the [handcuffed]!", "You attempt to break your [handcuffed.name]. (This will take around 5 seconds and you need to stand still)" ) - + if(do_after(src, 50)) if(!handcuffed || buckled) return - + visible_message( - "[src] manages to break \the [handcuffed]!", + "[src] manages to break \the [handcuffed]!", "You successfully break your [handcuffed.name]." ) - + say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) - + del(handcuffed) handcuffed = null if(buckled && buckled.buckle_require_restraints) @@ -131,14 +131,14 @@ if(do_after(src, 50)) if(!legcuffed || buckled) return - + visible_message( "[src] manages to break the legcuffs!", "You successfully break your legcuffs." ) - + say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) - + del(legcuffed) legcuffed = null update_inv_legcuffed() diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index f40036ae6b..558576e658 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -282,7 +282,7 @@ var/list/ai_verbs_default = list( //if(icon_state == initial(icon_state)) var/icontype = "" if (custom_sprite == 1) icontype = ("Custom")//automagically selects custom sprite if one is available - else icontype = input("Select an icon!", "AI", null, null) in list("Monochrome", "Rainbow", "Blue", "Inverted", "Text", "Smiley", "Angry", "Dorf", "Matrix", "Bliss", "Firewall", "Green", "Red", "Static", "Triumvirate", "Triumvirate Static", "Soviet", "Trapped", "Heartline", "Chatterbox") + else icontype = input("Select an icon!", "AI", null, null) in list("Monochrome", "Rainbow", "Blue", "Inverted", "Text", "Smiley", "Angry", "Dorf", "Matrix", "Bliss", "Firewall", "Green", "Red", "Static", "Triumvirate", "Triumvirate Static", "Soviet", "Trapped", "Heartline", "Chatterbox", "Helios", "Dug Too Deep", "Goon", "Database", "Glitchman", "Lonestar", "Nanotrasen") switch(icontype) if("Custom") icon_state = "[src.ckey]-ai" if("Rainbow") icon_state = "ai-clown" @@ -304,6 +304,13 @@ var/list/ai_verbs_default = list( if("Trapped") icon_state = "ai-hades" if("Heartline") icon_state = "ai-heartline" if("Chatterbox") icon_state = "ai-president" + if("Helios") icon_state = "ai-helios" + if("Dug Too Deep") icon_state = "ai-toodeep" + if("Goon") icon_state = "ai-goon" + if("Database") icon_state = "ai-database" + if("Glitchman") icon_state = "ai-glitchman" + if("Lonestar") icon_state = "ai-lonestar" + if("Nanotrasen") icon_state = "ai-nanotrasen" else icon_state = "ai" //else //usr <<"You can only change your display once!" diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index cb9431f04e..472125cef9 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -7,7 +7,13 @@ var/list/pai_emotions = list( "Off" = 6, "Sad" = 7, "Angry" = 8, - "What" = 9 + "What" = 9, + "Neutral" = 10, + "Silly" = 11, + "Nose" = 12, + "Smirk" = 13, + "Exclamation Points" = 14, + "Question Mark" = 15 ) diff --git a/code/modules/mob/living/silicon/robot/analyzer.dm b/code/modules/mob/living/silicon/robot/analyzer.dm index cb86e52302..75556cf304 100644 --- a/code/modules/mob/living/silicon/robot/analyzer.dm +++ b/code/modules/mob/living/silicon/robot/analyzer.dm @@ -12,7 +12,7 @@ w_class = 2.0 throw_speed = 5 throw_range = 10 - matter = list("metal" = 500, "glass" = 200) + matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 200) origin_tech = "magnets=2;biotech=1;engineering=2" var/mode = 1; diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm index 0d70692b13..1894d62942 100644 --- a/code/modules/mob/living/silicon/robot/component.dm +++ b/code/modules/mob/living/silicon/robot/component.dm @@ -218,7 +218,7 @@ icon = 'icons/obj/robot_component.dmi' icon_state = "working" construction_time = 200 - construction_cost = list("metal"=5000) + construction_cost = list(DEFAULT_WALL_MATERIAL=5000) var/brute = 0 var/burn = 0 var/icon_state_broken = "broken" diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index 1864e0171b..5634cda9b6 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -16,10 +16,7 @@ /obj/item/weapon/airlock_electronics, /obj/item/weapon/module/power_control, /obj/item/weapon/stock_parts, - /obj/item/light_fixture_frame, - /obj/item/apc_frame, - /obj/item/alarm_frame, - /obj/item/firealarm_frame, + /obj/item/frame, /obj/item/weapon/table_parts, /obj/item/weapon/table_parts/rack, /obj/item/weapon/camera_assembly, diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 8a19607edc..589af5a168 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -594,6 +594,8 @@ user << "Close the panel first." else if(cell) user << "There is a power cell already installed." + else if(W.w_class != 3) + user << "\The [W] is too [W.w_class < 3? "small" : "large"] to fit here." else user.drop_item() W.loc = src diff --git a/code/modules/mob/living/simple_animal/worm.dm b/code/modules/mob/living/simple_animal/worm.dm index 6342c66576..20a8ee499c 100644 --- a/code/modules/mob/living/simple_animal/worm.dm +++ b/code/modules/mob/living/simple_animal/worm.dm @@ -137,10 +137,9 @@ proc/AttemptToEat(var/atom/target) if(istype(target,/turf/simulated/wall)) - if((!istype(target,/turf/simulated/wall/r_wall) && eatingDuration >= 100) || eatingDuration >= 200) //need 20 ticks to eat an rwall, 10 for a regular one - var/turf/simulated/wall/wall = target - wall.ChangeTurf(/turf/simulated/floor) - new /obj/item/stack/sheet/metal(src, flatPlasmaValue) + var/turf/simulated/wall/W = target + if((!W.reinf_material && eatingDuration >= 100) || eatingDuration >= 200) //need 20 ticks to eat an rwall, 10 for a regular one + W.dismantle_wall() return 1 else if(istype(target,/atom/movable)) if(istype(target,/mob) || eatingDuration >= 50) //5 ticks to eat stuff like airlocks diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 6ca5caf174..1e18882137 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -5,6 +5,7 @@ var/spawning = 0//Referenced when you want to delete the new_player later on in the code. var/totalPlayers = 0 //Player counts for the Lobby tab var/totalPlayersReady = 0 + universal_speak = 1 invisibility = 101 @@ -130,6 +131,8 @@ if(client.prefs.be_random_name) client.prefs.real_name = random_name(client.prefs.gender) + if(client.prefs.dummy) + qdel(client.prefs.dummy) observer.real_name = client.prefs.real_name observer.name = observer.real_name if(!client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed. @@ -449,7 +452,8 @@ client.prefs.randomize_appearance_for(new_character) else client.prefs.copy_to(new_character) - + if(client.prefs.dummy) + qdel(client.prefs.dummy) src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS cant last forever yo if(mind) diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 00b6a3b8e4..f5b6056e15 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -178,519 +178,41 @@ datum/preferences b_skin = blue - proc/update_preview_icon() //seriously. This is horrendous. - qdel(preview_icon_front) - qdel(preview_icon_side) - qdel(preview_icon) + proc/update_preview_icon() //seriously. This is horrendous. //less so now + if(!dummy) + dummy = new(null, species) + dummy.set_species(species) + dummy.flags |= GODMODE + copy_to(dummy) - var/g = "m" - if(gender == FEMALE) g = "f" + var/jobflag + var/dept + if(job_civilian_high) + jobflag = job_civilian_high + dept = CIVILIAN + else if (job_medsci_high) + jobflag = job_medsci_high + dept = MEDSCI + else if (job_engsec_high) + jobflag = job_engsec_high + dept = ENGSEC - var/icon/icobase - var/datum/species/current_species = all_species[species] - - if(current_species) - icobase = current_species.icobase - else - icobase = 'icons/mob/human_races/r_human.dmi' - - preview_icon = new /icon(icobase, "torso_[g]") - preview_icon.Blend(new /icon(icobase, "groin_[g]"), ICON_OVERLAY) - preview_icon.Blend(new /icon(icobase, "head_[g]"), ICON_OVERLAY) - - for(var/name in list("r_arm","r_hand","r_leg","r_foot","l_leg","l_foot","l_arm","l_hand")) - if(organ_data[name] == "amputated") continue - if(organ_data[name] == "cyborg") - var/datum/robolimb/R - if(rlimb_data[name]) R = all_robolimbs[rlimb_data[name]] - if(!R) R = basic_robolimb - preview_icon.Blend(icon(R.icon, "[name]"), ICON_OVERLAY) // This doesn't check gendered_icon. Not an issue while only limbs can be robotic. - continue - preview_icon.Blend(new /icon(icobase, "[name]"), ICON_OVERLAY) - - //Tail - if(current_species && (current_species.tail)) - var/icon/temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[current_species.tail]_s") - preview_icon.Blend(temp, ICON_OVERLAY) - - // Skin color - if(current_species && (current_species.flags & HAS_SKIN_COLOR)) - preview_icon.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD) - - // Skin tone - if(current_species && (current_species.flags & HAS_SKIN_TONE)) - if (s_tone >= 0) - preview_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD) - else - preview_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT) - - var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = current_species ? current_species.eyes : "eyes_s") - if ((current_species && (current_species.flags & HAS_EYE_COLOR))) - eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD) - - var/datum/sprite_accessory/hair_style = hair_styles_list[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(r_hair, g_hair, b_hair), ICON_ADD) - eyes_s.Blend(hair_s, ICON_OVERLAY) - - var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[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(r_facial, g_facial, b_facial), ICON_ADD) - eyes_s.Blend(facial_s, ICON_OVERLAY) - - var/icon/underwear_s = null - if(underwear && current_species.flags & HAS_UNDERWEAR) - underwear_s = new/icon("icon" = 'icons/mob/human.dmi', "icon_state" = underwear) - - var/icon/undershirt_s = null - if(undershirt && current_species.flags & HAS_UNDERWEAR) - undershirt_s = new/icon("icon" = 'icons/mob/human.dmi', "icon_state" = undershirt) - - var/icon/clothes_s = null - if(job_civilian_low & ASSISTANT)//This gives the preview icon clothes depending on which job(if any) is set to 'high' - clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - else if(backbag == 3 || backbag == 4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - - else if(job_civilian_high)//I hate how this looks, but there's no reason to go through this switch if it's empty - switch(job_civilian_high) - if(HOP) - clothes_s = new /icon('icons/mob/uniform.dmi', "hop_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "ianshirt"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - 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(prob(1)) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "tophat"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(BOTANIST) - clothes_s = new /icon('icons/mob/uniform.dmi', "hydroponics_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "ggloves"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "apron"), ICON_OVERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "nymph"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-hyd"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(CHEF) - clothes_s = new /icon('icons/mob/uniform.dmi', "chef_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "chefhat"), ICON_OVERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "apronchef"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - 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(prob(1)) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "bio_janitor"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - 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(prob(1)) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "hairflower"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(QUARTERMASTER) - clothes_s = new /icon('icons/mob/uniform.dmi', "qm_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "poncho"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(CARGOTECH) - clothes_s = new /icon('icons/mob/uniform.dmi', "cargotech_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "flat_cap"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(MINER) - clothes_s = new /icon('icons/mob/uniform.dmi', "miner_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "bearpelt"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(LAWYER) - clothes_s = new /icon('icons/mob/uniform.dmi', "internalaffairs_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - clothes_s.Blend(new /icon(INV_R_HAND_DEF_ICON, "briefcase"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "suitjacket_blue"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - 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(prob(1)) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "imperium_monk"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(CLOWN) - clothes_s = new /icon('icons/mob/uniform.dmi', "clown_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "clown"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/mask.dmi', "clown"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "clownpack"), ICON_OVERLAY) - if(MIME) - clothes_s = new /icon('icons/mob/uniform.dmi', "mime_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "lgloves"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/mask.dmi', "mime"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "beret"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "suspenders"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - - else if(job_medsci_high) - switch(job_medsci_high) - if(RD) - 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(prob(1)) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "petehat"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-tox"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), 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(prob(1)) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "metroid"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-tox"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(XENOBIOLOGIST) - 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(prob(1)) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "metroid"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-tox"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), 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) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labgreen"), ICON_OVERLAY) - else - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_chem_open"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-chem"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(CMO) - clothes_s = new /icon('icons/mob/uniform.dmi', "cmo_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "bio_cmo"), ICON_OVERLAY) - else - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_cmo_open"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(DOCTOR) - clothes_s = new /icon('icons/mob/uniform.dmi', "medical_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "surgeon"), ICON_OVERLAY) - else - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), 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) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "monkeysuit"), ICON_OVERLAY) - else - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_gen_open"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-gen"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), 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/mask.dmi', "sterile"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_vir_open"), ICON_OVERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "plaguedoctor"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-vir"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), 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/hands.dmi', "bgloves"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY) - if(prob(1)) - clothes_s.Blend(new /icon(INV_R_HAND_DEF_ICON, "toolbox_blue"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - - else if(job_engsec_high) - switch(job_engsec_high) - 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(prob(1)) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "centcomcaptain"), ICON_OVERLAY) - else - clothes_s.Blend(new /icon('icons/mob/head.dmi', "captain"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-cap"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(HOS) - clothes_s = new /icon('icons/mob/uniform.dmi', "hosred_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "hosberet"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(WARDEN) - clothes_s = new /icon('icons/mob/uniform.dmi', "warden_s") - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "slippers_worn"), ICON_OVERLAY) - else - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - 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/hands.dmi', "bgloves"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/mask.dmi', "cigaron"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "detective"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "detective"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(OFFICER) - clothes_s = new /icon('icons/mob/uniform.dmi', "secred_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "officerberet"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(CHIEF) - 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/hands.dmi', "bgloves"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "hardhat0_white"), ICON_OVERLAY) - if(prob(1)) - clothes_s.Blend(new /icon(INV_R_HAND_DEF_ICON, "blueprints"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(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) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "hardhat0_yellow"), ICON_OVERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "hazard"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(ATMOSTECH) - 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/hands.dmi', "bgloves"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "firesuit"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - - if(AI)//Gives AI and borgs assistant-wear, so they can still customize their character - clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "straight_jacket"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "cardborg_h"), ICON_OVERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - else if(backbag == 3 || backbag == 4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(CYBORG) - clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "cardborg"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "cardborg_h"), ICON_OVERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - else if(backbag == 3 || backbag == 4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - - if(disabilities & NEARSIGHTED) - preview_icon.Blend(new /icon('icons/mob/eyes.dmi', "glasses"), ICON_OVERLAY) - - preview_icon.Blend(eyes_s, ICON_OVERLAY) - if(underwear_s) - preview_icon.Blend(underwear_s, ICON_OVERLAY) - if(undershirt_s) - preview_icon.Blend(undershirt_s, ICON_OVERLAY) - if(clothes_s) - preview_icon.Blend(clothes_s, ICON_OVERLAY) + if(jobflag && dept && job_master) + for (var/datum/job/J in job_master.occupations) + if((J.department_flag & dept) && (J.flag & jobflag)) + var/alt = GetPlayerAltTitle(J) + if(alt) //more hacks + if(!dummy.mind) + dummy.mind = new + dummy.mind.role_alt_title = alt + J.equip(dummy) + break + dummy.update_eyes() + dummy.force_update_limbs() + dummy.regenerate_icons() + preview_icon = icon(dummy.icon) + for(var/image/I in dummy.overlays_standing) + if(I && I.icon) + preview_icon.Blend(icon(I.icon, I.icon_state), ICON_OVERLAY) preview_icon_front = new(preview_icon, dir = SOUTH) - preview_icon_side = new(preview_icon, dir = WEST) - - qdel(eyes_s) - qdel(underwear_s) - qdel(undershirt_s) - qdel(clothes_s) + preview_icon_side = new(preview_icon, dir = WEST) \ No newline at end of file diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 3b56cf92b8..2be70ad5e7 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -20,7 +20,7 @@ w_class = 1.0 throw_speed = 7 throw_range = 15 - matter = list("metal" = 10) + matter = list(DEFAULT_WALL_MATERIAL = 10) var/colour = "black" //what colour the ink is! pressure_resistance = 2 diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 269d86c003..46853a978c 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -124,7 +124,7 @@ var/global/photo_count = 0 w_class = 2.0 flags = CONDUCT slot_flags = SLOT_BELT - matter = list("metal" = 2000) + matter = list(DEFAULT_WALL_MATERIAL = 2000) var/pictures_max = 10 var/pictures_left = 10 var/on = 1 diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm index c200ff86cc..a6954e9e2f 100644 --- a/code/modules/paperwork/stamps.dm +++ b/code/modules/paperwork/stamps.dm @@ -8,7 +8,7 @@ w_class = 1.0 throw_speed = 7 throw_range = 15 - matter = list("metal" = 60) + matter = list(DEFAULT_WALL_MATERIAL = 60) pressure_resistance = 2 attack_verb = list("stamped") @@ -73,4 +73,4 @@ if(chosen_stamp) name = chosen_stamp.name - icon_state = chosen_stamp.icon_state + icon_state = chosen_stamp.icon_state \ No newline at end of file diff --git a/code/modules/power/antimatter/shielding.dm b/code/modules/power/antimatter/shielding.dm index 281f6a1117..700fad25ad 100644 --- a/code/modules/power/antimatter/shielding.dm +++ b/code/modules/power/antimatter/shielding.dm @@ -210,7 +210,7 @@ proc/cardinalrange(var/center) throwforce = 5 throw_speed = 1 throw_range = 2 - matter = list("metal" = 100, "waste" = 2000) + matter = list(DEFAULT_WALL_MATERIAL = 100, "waste" = 2000) /obj/item/device/am_shielding_container/attackby(var/obj/item/I, var/mob/user) if(istype(I, /obj/item/device/multitool) && istype(src.loc,/turf)) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 04cdb353e2..594bc89bd0 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -442,18 +442,21 @@ if(cell) user << "There is a power cell already installed." return - else - if (stat & MAINT) - user << "There is no connector for your power cell." - return - user.drop_item() - W.loc = src - cell = W - user.visible_message(\ - "[user.name] has inserted the power cell to [src.name]!",\ - "You insert the power cell.") - chargecount = 0 - update_icon() + if (stat & MAINT) + user << "There is no connector for your power cell." + return + if(W.w_class != 3) + user << "\The [W] is too [W.w_class < 3? "small" : "large"] to fit here." + return + + user.drop_item() + W.loc = src + cell = W + user.visible_message(\ + "[user.name] has inserted the power cell to [src.name]!",\ + "You insert the power cell.") + chargecount = 0 + update_icon() else if (istype(W, /obj/item/weapon/screwdriver)) // haxing if(opened) if (cell) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index abf5f0e199..e5be56b944 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -475,7 +475,7 @@ obj/structure/cable/proc/cableColor(var/colorC) w_class = 2.0 throw_speed = 2 throw_range = 5 - matter = list("metal" = 50, "glass" = 20) + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 20) flags = CONDUCT slot_flags = SLOT_BELT item_state = "coil" diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 97b78668bf..ba3c539c77 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -8,65 +8,8 @@ #define LIGHT_EMPTY 1 #define LIGHT_BROKEN 2 #define LIGHT_BURNED 3 - #define LIGHT_BULB_TEMPERATURE 400 //K - used value for a 60W bulb -/obj/item/light_fixture_frame - name = "light fixture frame" - desc = "Used for building lights." - icon = 'icons/obj/lighting.dmi' - icon_state = "tube-construct-item" - flags = CONDUCT - var/fixture_type = "tube" - var/obj/machinery/light/newlight = null - var/sheets_refunded = 2 - -/obj/item/light_fixture_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), sheets_refunded ) - qdel(src) - return - ..() - -/obj/item/light_fixture_frame/proc/try_build(turf/on_wall) - if (get_dist(on_wall,usr)>1) - return - var/ndir = get_dir(usr,on_wall) - if (!(ndir in cardinal)) - return - var/turf/loc = get_turf(usr) - if (!istype(loc, /turf/simulated/floor)) - usr << "\red [src.name] cannot be placed on this spot." - return - usr << "Attaching [src] to the wall." - playsound(src.loc, 'sound/machines/click.ogg', 75, 1) - var/constrdir = usr.dir - var/constrloc = usr.loc - if (!do_after(usr, 30)) - return - switch(fixture_type) - if("bulb") - newlight = new /obj/machinery/light_construct/small(constrloc) - if("tube") - newlight = new /obj/machinery/light_construct(constrloc) - newlight.dir = constrdir - newlight.fingerprints = src.fingerprints - newlight.fingerprintshidden = src.fingerprintshidden - newlight.fingerprintslast = src.fingerprintslast - - usr.visible_message("[usr.name] attaches [src] to the wall.", \ - "You attach [src] to the wall.") - qdel(src) - -/obj/item/light_fixture_frame/small - name = "small light fixture frame" - desc = "Used for building small lights." - icon = 'icons/obj/lighting.dmi' - icon_state = "bulb-construct-item" - flags = CONDUCT - fixture_type = "bulb" - sheets_refunded = 1 - /obj/machinery/light_construct name = "light fixture frame" desc = "A light fixture under construction." @@ -658,7 +601,7 @@ var/status = 0 // LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN var/base_state var/switchcount = 0 // number of times switched - matter = list("metal" = 60) + matter = list(DEFAULT_WALL_MATERIAL = 60) var/rigged = 0 // true if rigged to explode var/brightness_range = 2 //how much light it gives off var/brightness_power = 1 diff --git a/code/modules/power/rust/circuits_and_design.dm b/code/modules/power/rust/circuits_and_design.dm index 4c00673061..441da2e4aa 100644 --- a/code/modules/power/rust/circuits_and_design.dm +++ b/code/modules/power/rust/circuits_and_design.dm @@ -75,7 +75,6 @@ datum/design/rust_fuel_compressor build_path = "/obj/machinery/power/rust_core" board_type = "machine" origin_tech = "bluespace=3;phorontech=4;magnets=5;powerstorage=6" - frame_desc = "Requires 2 Pico Manipulators, 1 Ultra Micro-Laser, 5 Pieces of Cable, 1 Subspace Crystal and 1 Console Screen." req_components = list( "/obj/item/weapon/stock_parts/manipulator/pico" = 2, "/obj/item/weapon/stock_parts/micro_laser/ultra" = 1, @@ -101,7 +100,6 @@ datum/design/rust_core build_path = "/obj/machinery/power/rust_fuel_injector" board_type = "machine" origin_tech = "powerstorage=3;engineering=4;phorontech=4;materials=6" - frame_desc = "Requires 2 Pico Manipulators, 1 Phasic Scanning Module, 1 Super Matter Bin, 1 Console Screen and 5 Pieces of Cable." req_components = list( "/obj/item/weapon/stock_parts/manipulator/pico" = 2, "/obj/item/weapon/stock_parts/scanning_module/phasic" = 1, diff --git a/code/modules/power/rust/fuel_assembly_port_construction.dm b/code/modules/power/rust/fuel_assembly_port_construction.dm index 0438249e6d..fa4ededb3d 100644 --- a/code/modules/power/rust/fuel_assembly_port_construction.dm +++ b/code/modules/power/rust/fuel_assembly_port_construction.dm @@ -1,37 +1,3 @@ - -//frame assembly - -/obj/item/rust_fuel_assembly_port_frame - name = "Fuel Assembly Port frame" - icon = 'icons/rust.dmi' - icon_state = "port2" - w_class = 4 - flags = CONDUCT - -/obj/item/rust_fuel_assembly_port_frame/attackby(obj/item/weapon/W as obj, mob/user as mob) - if (istype(W, /obj/item/weapon/wrench)) - new /obj/item/stack/sheet/plasteel( get_turf(src.loc), 12 ) - qdel(src) - return - ..() - -/obj/item/rust_fuel_assembly_port_frame/proc/try_build(turf/on_wall) - if (get_dist(on_wall,usr)>1) - return - var/ndir = get_dir(usr,on_wall) - if (!(ndir in cardinal)) - return - var/turf/loc = get_turf(usr) - var/area/A = loc.loc - if (!istype(loc, /turf/simulated/floor)) - usr << "\red Port cannot be placed on this spot." - return - if (A.requires_power == 0 || A.name == "Space") - usr << "\red Port cannot be placed in this area." - return - new /obj/machinery/rust_fuel_assembly_port(loc, ndir, 1) - qdel(src) - //construction steps /obj/machinery/rust_fuel_assembly_port/New(turf/loc, var/ndir, var/building=0) ..() @@ -122,7 +88,7 @@ playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) if(do_after(user, 50)) if(!src || !WT.remove_fuel(3, user)) return - new /obj/item/rust_fuel_assembly_port_frame(loc) + new /obj/item/frame/rust/assembly(loc) user.visible_message(\ "\red [src] has been cut away from the wall by [user.name].",\ "You detached the port frame.",\ diff --git a/code/modules/power/rust/fuel_compressor_construction.dm b/code/modules/power/rust/fuel_compressor_construction.dm index 422a46116b..9f52a2cf7c 100644 --- a/code/modules/power/rust/fuel_compressor_construction.dm +++ b/code/modules/power/rust/fuel_compressor_construction.dm @@ -1,38 +1,3 @@ - -//frame assembly - -/obj/item/rust_fuel_compressor_frame - name = "Fuel Compressor frame" - icon = 'icons/rust.dmi' - icon_state = "fuel_compressor0" - w_class = 4 - flags = CONDUCT - -/obj/item/rust_fuel_compressor_frame/attackby(obj/item/weapon/W as obj, mob/user as mob) - if (istype(W, /obj/item/weapon/wrench)) - new /obj/item/stack/sheet/plasteel( get_turf(src.loc), 12 ) - qdel(src) - return - ..() - -/obj/item/rust_fuel_compressor_frame/proc/try_build(turf/on_wall) - if (get_dist(on_wall,usr)>1) - return - var/ndir = get_dir(usr,on_wall) - if (!(ndir in cardinal)) - return - var/turf/loc = get_turf(usr) - var/area/A = loc.loc - if (!istype(loc, /turf/simulated/floor)) - usr << "\red Compressor cannot be placed on this spot." - return - if (A.requires_power == 0 || A.name == "Space") - usr << "\red Compressor cannot be placed in this area." - return - new /obj/machinery/rust_fuel_assembly_port(loc, ndir, 1) - qdel(src) - -//construction steps /obj/machinery/rust_fuel_compressor/New(turf/loc, var/ndir, var/building=0) ..() @@ -149,7 +114,7 @@ playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) if(do_after(user, 50)) if(!src || !WT.remove_fuel(3, user)) return - new /obj/item/rust_fuel_assembly_port_frame(loc) + new /obj/item/frame/rust(loc) user.visible_message(\ "\red [src] has been cut away from the wall by [user.name].",\ "You detached the compressor frame.",\ diff --git a/code/modules/power/singularity/act.dm b/code/modules/power/singularity/act.dm index 30631be604..dc8f667a28 100644 --- a/code/modules/power/singularity/act.dm +++ b/code/modules/power/singularity/act.dm @@ -108,18 +108,19 @@ return 2 /turf/simulated/wall/singularity_pull(S, current_size) - if(current_size >= STAGE_FIVE) - if(prob(75)) - dismantle_wall() - return - if(current_size == STAGE_FOUR) - if(prob(30)) - dismantle_wall() -/turf/simulated/wall/r_wall/singularity_pull(S, current_size) - if(current_size >= STAGE_FIVE) - if(prob(30)) - dismantle_wall() + if(!reinf_material) + if(current_size >= STAGE_FIVE) + if(prob(75)) + dismantle_wall() + return + if(current_size == STAGE_FOUR) + if(prob(30)) + dismantle_wall() + else + if(current_size >= STAGE_FIVE) + if(prob(30)) + dismantle_wall() /turf/space/singularity_act() return diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 01f6a55044..515d5596b6 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -66,7 +66,7 @@ flags = CONDUCT slot_flags = SLOT_BELT item_state = "syringe_kit" - matter = list("metal" = 500) + matter = list(DEFAULT_WALL_MATERIAL = 500) throwforce = 5 w_class = 2 throw_speed = 4 diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index eb2e6f1c1d..75b1680d0b 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -6,7 +6,7 @@ icon_state = "T38" caliber = "357" ammo_type = /obj/item/ammo_casing/a357 - matter = list("metal" = 1260) + matter = list(DEFAULT_WALL_MATERIAL = 1260) max_ammo = 7 multiple_sprites = 1 @@ -14,7 +14,7 @@ name = "speed loader (.38)" icon_state = "38" caliber = "38" - matter = list("metal" = 360) + matter = list(DEFAULT_WALL_MATERIAL = 360) ammo_type = /obj/item/ammo_casing/c38 max_ammo = 6 multiple_sprites = 1 @@ -28,7 +28,7 @@ icon_state = "45" mag_type = MAGAZINE ammo_type = /obj/item/ammo_casing/c45 - matter = list("metal" = 525) //metal costs are very roughly based around 1 .45 casing = 75 metal + matter = list(DEFAULT_WALL_MATERIAL = 525) //metal costs are very roughly based around 1 .45 casing = 75 metal caliber = ".45" max_ammo = 7 multiple_sprites = 1 @@ -53,7 +53,7 @@ icon_state = "9x19p" origin_tech = "combat=2" mag_type = MAGAZINE - matter = list("metal" = 600) + matter = list(DEFAULT_WALL_MATERIAL = 600) caliber = "9mm" ammo_type = /obj/item/ammo_casing/c9mm max_ammo = 10 @@ -69,7 +69,7 @@ name = "ammunition Box (9mm)" icon_state = "9mm" origin_tech = "combat=2" - matter = list("metal" = 1800) + matter = list(DEFAULT_WALL_MATERIAL = 1800) caliber = "9mm" ammo_type = /obj/item/ammo_casing/c9mm max_ammo = 30 @@ -82,7 +82,7 @@ icon_state = "9mmt" mag_type = MAGAZINE ammo_type = /obj/item/ammo_casing/c9mm - matter = list("metal" = 1200) + matter = list(DEFAULT_WALL_MATERIAL = 1200) caliber = "9mm" max_ammo = 20 multiple_sprites = 1 @@ -103,7 +103,7 @@ icon_state = "9mm" origin_tech = "combat=2" caliber = ".45" - matter = list("metal" = 2250) + matter = list(DEFAULT_WALL_MATERIAL = 2250) ammo_type = /obj/item/ammo_casing/c45 max_ammo = 30 @@ -116,7 +116,7 @@ origin_tech = "combat=2" mag_type = MAGAZINE caliber = "12mm" - matter = list("metal" = 1500) + matter = list(DEFAULT_WALL_MATERIAL = 1500) ammo_type = "/obj/item/ammo_casing/a12mm" max_ammo = 20 multiple_sprites = 1 @@ -130,7 +130,7 @@ origin_tech = "combat=2" mag_type = MAGAZINE caliber = "a556" - matter = list("metal" = 1800) + matter = list(DEFAULT_WALL_MATERIAL = 1800) ammo_type = /obj/item/ammo_casing/a556 max_ammo = 10 multiple_sprites = 1 @@ -148,7 +148,7 @@ origin_tech = "combat=2" mag_type = MAGAZINE caliber = ".50" - matter = list("metal" = 1260) + matter = list(DEFAULT_WALL_MATERIAL = 1260) ammo_type = /obj/item/ammo_casing/a50 max_ammo = 7 multiple_sprites = 1 @@ -174,7 +174,7 @@ origin_tech = "combat=2" mag_type = MAGAZINE caliber = "a762" - matter = list("metal" = 4500) + matter = list(DEFAULT_WALL_MATERIAL = 4500) ammo_type = /obj/item/ammo_casing/a762 max_ammo = 50 multiple_sprites = 1 @@ -187,7 +187,7 @@ icon_state = "c762" mag_type = MAGAZINE caliber = "a762" - matter = list("metal" = 1800) + matter = list(DEFAULT_WALL_MATERIAL = 1800) ammo_type = /obj/item/ammo_casing/a762 max_ammo = 20 multiple_sprites = 1 diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm index a07e5735c0..4bb8cbf10f 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/bullets.dm @@ -76,21 +76,21 @@ icon_state = "slshell" caliber = "shotgun" projectile_type = /obj/item/projectile/bullet/shotgun - matter = list("metal" = 360) + matter = list(DEFAULT_WALL_MATERIAL = 360) /obj/item/ammo_casing/shotgun/pellet name = "shotgun shell" desc = "A 12 gauge shell." icon_state = "gshell" projectile_type = /obj/item/projectile/bullet/pellet/shotgun - matter = list("metal" = 360) + matter = list(DEFAULT_WALL_MATERIAL = 360) /obj/item/ammo_casing/shotgun/blank name = "shotgun shell" desc = "A blank shell." icon_state = "blshell" projectile_type = /obj/item/projectile/bullet/blank - matter = list("metal" = 90) + matter = list(DEFAULT_WALL_MATERIAL = 90) /obj/item/ammo_casing/shotgun/practice name = "shotgun shell" @@ -104,7 +104,7 @@ desc = "A beanbag shell." icon_state = "bshell" projectile_type = /obj/item/projectile/bullet/shotgun/beanbag - matter = list("metal" = 180) + matter = list(DEFAULT_WALL_MATERIAL = 180) //Can stun in one hit if aimed at the head, but //is blocked by clothing that stops tasers and is vulnerable to EMP @@ -114,7 +114,7 @@ icon_state = "stunshell" spent_icon = "stunshell-spent" projectile_type = /obj/item/projectile/energy/electrode/stunshot - matter = list("metal" = 360, "glass" = 720) + matter = list(DEFAULT_WALL_MATERIAL = 360, "glass" = 720) /obj/item/ammo_casing/shotgun/stunshell/emp_act(severity) if(prob(100/severity)) BB = null @@ -126,7 +126,7 @@ desc = "A chemical shell used to signal distress or provide illumination." icon_state = "fshell" projectile_type = /obj/item/projectile/energy/flash/flare - matter = list("metal" = 90, "glass" = 90) + matter = list(DEFAULT_WALL_MATERIAL = 90, "glass" = 90) /obj/item/ammo_casing/a762 desc = "A 7.62mm bullet casing." @@ -140,7 +140,7 @@ spent_icon = "lcasing-spent" caliber = "14.5mm" projectile_type = /obj/item/projectile/bullet/rifle/a145 - matter = list("metal" = 1250) + matter = list(DEFAULT_WALL_MATERIAL = 1250) /obj/item/ammo_casing/a556 desc = "A 5.56mm bullet casing." diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 2f17c0783d..dc53d788f1 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -41,7 +41,7 @@ item_state = "gun" flags = CONDUCT slot_flags = SLOT_BELT|SLOT_HOLSTER - matter = list("metal" = 2000) + matter = list(DEFAULT_WALL_MATERIAL = 2000) w_class = 3 throwforce = 5 throw_speed = 4 diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 161dd23e15..32771984f6 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -13,8 +13,9 @@ firemode_type = /datum/firemode/energy var/obj/item/weapon/cell/power_supply //What type of power cell this uses - var/charge_cost = 100 //How much energy is needed to fire. - var/cell_type = /obj/item/weapon/cell + var/charge_cost = 200 //How much energy is needed to fire. + var/max_shots = 10 //Determines the capacity of the weapon's power cell. Specifying a cell_type overrides this value. + var/cell_type = null var/projectile_type = /obj/item/projectile/beam/practice var/modifystate var/charge_meter = 1 //if set, the icon state will be chosen based on the current charge @@ -45,7 +46,8 @@ ..() if(cell_type) power_supply = new cell_type(src) - power_supply.give(power_supply.maxcharge) + else + power_supply = new /obj/item/weapon/cell/device/variable(src, max_shots*charge_cost) if(self_recharge) processing_objects.Add(src) update_icon() diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index dffc012998..3521b49a14 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -7,7 +7,7 @@ slot_flags = SLOT_BELT|SLOT_BACK w_class = 3 force = 10 - matter = list("metal" = 2000) + matter = list(DEFAULT_WALL_MATERIAL = 2000) origin_tech = "combat=3;magnets=2" projectile_type = /obj/item/projectile/beam fire_delay = 1 //rapid fire @@ -43,7 +43,7 @@ obj/item/weapon/gun/energy/retro w_class = 3 projectile_type = /obj/item/projectile/beam origin_tech = null - charge_cost = 200 //to compensate a bit for self-recharging + max_shots = 5 //to compensate a bit for self-recharging self_recharge = 1 /obj/item/weapon/gun/energy/lasercannon @@ -55,7 +55,8 @@ obj/item/weapon/gun/energy/retro origin_tech = "combat=4;materials=3;powerstorage=3" slot_flags = SLOT_BELT|SLOT_BACK projectile_type = /obj/item/projectile/beam/heavylaser - charge_cost = 250 + charge_cost = 400 + max_shots = 5 fire_delay = 20 /obj/item/weapon/gun/energy/lasercannon/mounted @@ -72,7 +73,8 @@ obj/item/weapon/gun/energy/retro fire_sound = 'sound/weapons/laser3.ogg' origin_tech = "combat=5;materials=3;magnets=2;syndicate=2" projectile_type = /obj/item/projectile/beam/xray - charge_cost = 50 + charge_cost = 100 + max_shots = 20 fire_delay = 1 /obj/item/weapon/gun/energy/sniperrifle @@ -84,7 +86,8 @@ obj/item/weapon/gun/energy/retro origin_tech = "combat=6;materials=5;powerstorage=4" projectile_type = /obj/item/projectile/beam/sniper slot_flags = SLOT_BACK - charge_cost = 250 + charge_cost = 400 + max_shots = 4 fire_delay = 35 force = 10 w_class = 4 @@ -106,7 +109,7 @@ obj/item/weapon/gun/energy/retro desc = "Standard issue weapon of the Imperial Guard" origin_tech = "combat=1;magnets=2" self_recharge = 1 - matter = list("metal" = 2000) + matter = list(DEFAULT_WALL_MATERIAL = 2000) fire_sound = 'sound/weapons/Laser.ogg' projectile_type = /obj/item/projectile/beam/lastertag/blue var/required_vest diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index 1e6d22a510..adb2d7e517 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -4,8 +4,8 @@ icon_state = "energystun100" item_state = null //so the human update icon uses the icon_state instead. fire_sound = 'sound/weapons/Taser.ogg' + max_shots = 10 - charge_cost = 100 //How much energy is needed to fire. projectile_type = /obj/item/projectile/beam/stun origin_tech = "combat=3;magnets=2" modifystate = "energystun" diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index 62c77cf4f3..507bc22735 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -6,14 +6,14 @@ slot_flags = SLOT_BELT|SLOT_BACK force = 10 fire_sound='sound/weapons/Laser.ogg' - charge_cost = 50 projectile_type = /obj/item/projectile/beam sel_mode = 2 + max_shots = 10 firemodes = list( list(name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_sound='sound/weapons/Taser.ogg'), list(name="lethal", projectile_type=/obj/item/projectile/beam, fire_sound='sound/weapons/Laser.ogg'), - list(name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_sound='sound/weapons/pulse.ogg', fire_delay=25, charge_cost=100), + list(name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_sound='sound/weapons/pulse.ogg', fire_delay=25, charge_cost=400), ) /obj/item/weapon/gun/energy/pulse_rifle/mounted @@ -27,6 +27,7 @@ fire_delay = 25 fire_sound='sound/weapons/pulse.ogg' projectile_type=/obj/item/projectile/beam/pulse + charge_cost=400 /obj/item/weapon/gun/energy/pulse_rifle/destroyer/attack_self(mob/living/user as mob) user << "[src.name] has three settings, and they are all DESTROY." @@ -37,4 +38,4 @@ desc = "It's not the size of the gun, it's the size of the hole it puts through people." slot_flags = SLOT_BELT|SLOT_HOLSTER icon_state = "m1911-p" - cell_type = /obj/item/weapon/cell/crap + max_shots = 5 diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 5525c25bbf..d9ef1b9504 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -9,7 +9,8 @@ force = 10 flags = CONDUCT slot_flags = SLOT_BACK - charge_cost = 100 + charge_cost = 300 + max_shots = 10 projectile_type = /obj/item/projectile/ion /obj/item/weapon/gun/energy/ionrifle/emp_act(severity) @@ -29,7 +30,7 @@ item_state = "decloner" fire_sound = 'sound/weapons/pulse3.ogg' origin_tech = "combat=5;materials=4;powerstorage=3" - charge_cost = 100 + max_shots = 10 projectile_type = /obj/item/projectile/energy/declone /obj/item/weapon/gun/energy/floragun @@ -39,6 +40,7 @@ item_state = "floramut" fire_sound = 'sound/effects/stealthoff.ogg' charge_cost = 100 + max_shots = 10 projectile_type = /obj/item/projectile/energy/floramut origin_tech = "materials=2;biotech=3;powerstorage=3" modifystate = "floramut" @@ -65,7 +67,6 @@ slot_flags = SLOT_BELT|SLOT_BACK w_class = 4 projectile_type = /obj/item/projectile/meteor - charge_cost = 100 cell_type = /obj/item/weapon/cell/potato self_recharge = 1 recharge_time = 5 //Time it takes for shots to recharge (in ticks) @@ -110,7 +111,7 @@ flags = CONDUCT slot_flags = SLOT_BACK w_class = 4.0 - charge_cost = 200 + max_shots = 5 projectile_type = /obj/item/projectile/change origin_tech = null self_recharge = 1 @@ -127,7 +128,7 @@ name = "staff of animation" desc = "An artefact that spits bolts of life-force which causes objects which are hit by it to animate and come to life! This magic doesn't affect machines." projectile_type = /obj/item/projectile/animate - charge_cost = 100 + max_shots = 10 obj/item/weapon/gun/energy/staff/focus name = "mental focus" @@ -140,11 +141,11 @@ obj/item/weapon/gun/energy/staff/focus /* attack_self(mob/living/user as mob) if(projectile_type == "/obj/item/projectile/forcebolt") - charge_cost = 200 + charge_cost = 400 user << "The [src.name] will now strike a small area." projectile_type = "/obj/item/projectile/forcebolt/strong" else - charge_cost = 100 + charge_cost = 200 user << "The [src.name] will now strike only a single person." projectile_type = "/obj/item/projectile/forcebolt" */ diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 1d51f7957e..cc40169fb5 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -4,9 +4,8 @@ icon_state = "taser" item_state = null //so the human update icon uses the icon_state instead. fire_sound = 'sound/weapons/Taser.ogg' - charge_cost = 100 + max_shots = 5 projectile_type = /obj/item/projectile/beam/stun - cell_type = /obj/item/weapon/cell/crap /obj/item/weapon/gun/energy/taser/mounted name = "mounted taser gun" @@ -15,7 +14,7 @@ /obj/item/weapon/gun/energy/taser/mounted/cyborg name = "taser gun" - cell_type = /obj/item/weapon/cell/secborg + max_shots = 6 recharge_time = 10 //Time it takes for shots to recharge (in ticks) @@ -26,9 +25,8 @@ item_state = "stunrevolver" fire_sound = 'sound/weapons/Gunshot.ogg' origin_tech = "combat=3;materials=3;powerstorage=2" - charge_cost = 125 projectile_type = /obj/item/projectile/energy/electrode/stunshot - cell_type = /obj/item/weapon/cell + max_shots = 8 /obj/item/weapon/gun/energy/crossbow @@ -37,13 +35,13 @@ icon_state = "crossbow" w_class = 2.0 item_state = "crossbow" - matter = list("metal" = 2000) + matter = list(DEFAULT_WALL_MATERIAL = 2000) origin_tech = "combat=2;magnets=2;syndicate=5" slot_flags = SLOT_BELT silenced = 1 fire_sound = 'sound/weapons/Genhit.ogg' projectile_type = /obj/item/projectile/energy/bolt - cell_type = /obj/item/weapon/cell/crap + max_shots = 5 self_recharge = 1 charge_meter = 0 @@ -56,5 +54,5 @@ desc = "A weapon favored by mercenary infiltration teams." w_class = 4 force = 10 - matter = list("metal" = 200000) + matter = list(DEFAULT_WALL_MATERIAL = 200000) projectile_type = /obj/item/projectile/energy/bolt/large diff --git a/code/modules/projectiles/guns/launcher/grenade_launcher.dm b/code/modules/projectiles/guns/launcher/grenade_launcher.dm index 906e428e8d..fe27d35790 100644 --- a/code/modules/projectiles/guns/launcher/grenade_launcher.dm +++ b/code/modules/projectiles/guns/launcher/grenade_launcher.dm @@ -15,7 +15,7 @@ var/obj/item/weapon/grenade/chambered var/list/grenades = new/list() var/max_grenades = 5 //holds this + one in the chamber - matter = list("metal" = 2000) + matter = list(DEFAULT_WALL_MATERIAL = 2000) //revolves the magazine, allowing players to choose between multiple grenade types /obj/item/weapon/gun/launcher/grenade/proc/pump(mob/M as mob) @@ -80,7 +80,7 @@ chambered.det_time = 10 chambered.activate(null) return chambered - + /obj/item/weapon/gun/launcher/grenade/handle_post_fire(mob/user) message_admins("[key_name_admin(user)] fired a grenade ([chambered.name]) from a grenade launcher ([src.name]).") log_game("[key_name_admin(user)] used a grenade ([chambered.name]).") diff --git a/code/modules/projectiles/guns/launcher/syringe_gun.dm b/code/modules/projectiles/guns/launcher/syringe_gun.dm index 099f8687a3..755ca336a7 100644 --- a/code/modules/projectiles/guns/launcher/syringe_gun.dm +++ b/code/modules/projectiles/guns/launcher/syringe_gun.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/ammo.dmi' icon_state = "syringe-cartridge" var/icon_flight = "syringe-cartridge-flight" //so it doesn't look so weird when shot - matter = list("metal" = 125, "glass" = 375) + matter = list(DEFAULT_WALL_MATERIAL = 125, "glass" = 375) flags = CONDUCT slot_flags = SLOT_BELT throwforce = 3 @@ -53,10 +53,10 @@ if(L.can_inject()) if(syringe.reagents) syringe.reagents.trans_to(L, 15) - + syringe.break_syringe(iscarbon(hit_atom)? hit_atom : null) syringe.update_icon() - + icon_state = initial(icon_state) //reset icon state update_icon() @@ -67,15 +67,15 @@ item_state = "syringegun" w_class = 3 force = 7 - matter = list("metal" = 2000) + matter = list(DEFAULT_WALL_MATERIAL = 2000) slot_flags = SLOT_BELT - + fire_sound = 'sound/weapons/empty.ogg' fire_sound_text = "a metallic thunk" recoil = 0 release_force = 10 throw_distance = 10 - + var/list/darts = list() var/max_darts = 1 var/obj/item/weapon/syringe_cartridge/next diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 31ea6b0335..576488e774 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -8,9 +8,9 @@ icon_state = "revolver" origin_tech = "combat=2;materials=2" w_class = 3 - matter = list("metal" = 1000) + matter = list(DEFAULT_WALL_MATERIAL = 1000) recoil = 1 - + var/caliber = "357" //determines which casings will fit var/handle_casings = EJECT_CASINGS //determines how spent casings should be handled var/load_method = SINGLE_CASING|SPEEDLOADER //1 = Single shells, 2 = box or quick loader, 3 = magazine @@ -18,7 +18,7 @@ //For SINGLE_CASING or SPEEDLOADER guns var/max_shells = 0 //the number of casings that will fit inside - var/ammo_type = null //the type of ammo that the gun comes preloaded with + var/ammo_type = null //the type of ammo that the gun comes preloaded with var/list/loaded = list() //stored ammo //For MAGAZINE guns @@ -50,7 +50,7 @@ chambered = ammo_magazine.stored_ammo[1] if(handle_casings != HOLD_CASINGS) ammo_magazine.stored_ammo -= chambered - + if (chambered) return chambered.BB return null @@ -186,7 +186,7 @@ ) if(auto_eject_sound) playsound(user, auto_eject_sound, 40, 1) - ammo_magazine.update_icon() + ammo_magazine.update_icon() ammo_magazine = null update_icon() //make sure to do this after unsetting ammo_magazine @@ -213,8 +213,8 @@ set name = "Unload Ammo" set category = "Object" set src in usr - + if(usr.stat || usr.restrained()) return - + unload_ammo(usr) -*/ \ No newline at end of file +*/ diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 8f24273eb2..2bd77f3442 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -180,16 +180,17 @@ visible_message("\The [target_mob] is hit by \the [src] in the [parse_zone(def_zone)]!")//X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter //admin logs - if(istype(firer, /mob)) - target_mob.attack_log += "\[[time_stamp()]\] [firer]/[firer.ckey] shot [target_mob]/[target_mob.ckey] with a [src.type]" - firer.attack_log += "\[[time_stamp()]\] [firer]/[firer.ckey] shot [target_mob]/[target_mob.ckey] with a [src.type]" - msg_admin_attack("[firer] ([firer.ckey]) shot [target_mob] ([target_mob.ckey]) with a [src] (JMP)") //BS12 EDIT ALG - else if(firer) - target_mob.attack_log += "\[[time_stamp()]\] UNKNOWN SUBJECT (No longer exists) shot [target_mob]/[target_mob.ckey] with a [src]" - msg_admin_attack("UNKNOWN shot [target_mob] ([target_mob.ckey]) with a [src] (JMP)") //BS12 EDIT ALG - else - target_mob.attack_log += "\[[time_stamp()]\] UNKNOWN SUBJECT (No longer exists) shot [target_mob]/[target_mob.ckey] with a [src]" - msg_admin_attack("UNKNOWN shot [target_mob] ([target_mob.ckey]) with a [src] (JMP)") //BS12 EDIT ALG + if(!no_attack_log) + if(istype(firer, /mob)) + target_mob.attack_log += "\[[time_stamp()]\] [firer]/[firer.ckey] shot [target_mob]/[target_mob.ckey] with a [src.type]" + firer.attack_log += "\[[time_stamp()]\] [firer]/[firer.ckey] shot [target_mob]/[target_mob.ckey] with a [src.type]" + msg_admin_attack("[firer] ([firer.ckey]) shot [target_mob] ([target_mob.ckey]) with a [src] (JMP)") //BS12 EDIT ALG + else if(firer) + target_mob.attack_log += "\[[time_stamp()]\] UNKNOWN SUBJECT (No longer exists) shot [target_mob]/[target_mob.ckey] with a [src]" + msg_admin_attack("UNKNOWN shot [target_mob] ([target_mob.ckey]) with a [src] (JMP)") //BS12 EDIT ALG + else + target_mob.attack_log += "\[[time_stamp()]\] UNKNOWN SUBJECT (No longer exists) shot [target_mob]/[target_mob.ckey] with a [src]" + msg_admin_attack("UNKNOWN shot [target_mob] ([target_mob.ckey]) with a [src] (JMP)") //BS12 EDIT ALG //sometimes bullet_act() will want the projectile to continue flying if (target_mob.bullet_act(src, def_zone) == -1) diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index cbe1ad5625..eb515298ef 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -68,6 +68,7 @@ icon_state = "bluelaser" pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE damage = 0 + no_attack_log = 1 damage_type = BURN check_armour = "laser" @@ -87,6 +88,7 @@ icon_state = "laser" pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE damage = 0 + no_attack_log = 1 damage_type = BURN check_armour = "laser" diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 80142b5f97..06e0a02c1f 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -45,12 +45,12 @@ var/chance = 0 if(istype(A, /turf/simulated/wall)) var/turf/simulated/wall/W = A - chance = round(damage/W.damage_cap*180) + chance = round(damage/W.material.integrity*180) else if(istype(A, /obj/machinery/door)) var/obj/machinery/door/D = A chance = round(damage/D.maxhealth*180) if(D.glass) chance *= 2 - else if(istype(A, /obj/structure/girder) || istype(A, /obj/structure/cultgirder)) + else if(istype(A, /obj/structure/girder)) chance = 100 else if(istype(A, /obj/machinery) || istype(A, /obj/structure)) chance = 25 @@ -196,4 +196,4 @@ /obj/item/projectile/bullet/shotgun/practice name = "practice" - damage = 5 \ No newline at end of file + damage = 5 diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm index bea079a755..6971683d24 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm @@ -194,12 +194,10 @@ /datum/reagent/toxin/plantbgone/reaction_turf(var/turf/T, var/volume) if(istype(T, /turf/simulated/wall)) var/turf/simulated/wall/W = T - if(W.rotting) - W.rotting = 0 - for(var/obj/effect/E in W) if(E.name == "Wallrot") qdel(E) - - for(var/mob/O in viewers(W, null)) - O.show_message(text("\blue The fungi are completely dissolved by the solution!"), 1) + if(locate(/obj/effect/overlay/wallrot) in W) + for(var/obj/effect/overlay/wallrot/E in W) + qdel(E) + W.visible_message("The fungi are completely dissolved by the solution!") /datum/reagent/toxin/plantbgone/reaction_obj(var/obj/O, var/volume) if(istype(O,/obj/effect/alien/weeds/)) diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm index 23dc52e1fb..405737028c 100644 --- a/code/modules/reagents/reagent_containers/food/drinks.dm +++ b/code/modules/reagents/reagent_containers/food/drinks.dm @@ -23,7 +23,7 @@ var/fillevel = gulp_size if(!R.total_volume || !R) - user << "\red The [src.name] is empty!" + user << "The [src.name] is empty!" return 0 if(M == user) @@ -31,10 +31,15 @@ if(istype(M,/mob/living/carbon/human)) var/mob/living/carbon/human/H = M if(H.species.flags & IS_SYNTHETIC) - H << "\red You have a monitor for a head, where do you think you're going to put that?" + H << "You have a monitor for a head, where do you think you're going to put that?" + return + + var/obj/item/blocked = H.check_mouth_coverage() + if(blocked) + user << "\The [blocked] is in the way!" return - M << "\blue You swallow a gulp from \the [src]." + M << "You swallow a gulp from \the [src]." if(reagents.total_volume) reagents.trans_to_ingest(M, gulp_size) @@ -44,14 +49,17 @@ var/mob/living/carbon/human/H = M if(H.species.flags & IS_SYNTHETIC) - H << "\red They have a monitor for a head, where do you think you're going to put that?" + user << "They have a monitor for a head, where do you think you're going to put that?" + return + + var/obj/item/blocked = H.check_mouth_coverage() + if(blocked) + user << "\The [blocked] is in the way!" return - for(var/mob/O in viewers(world.view, user)) - O.show_message("\red [user] attempts to feed [M] [src].", 1) + user.visible_message("[user] attempts to feed [M] [src].") if(!do_mob(user, M)) return - for(var/mob/O in viewers(world.view, user)) - O.show_message("\red [user] feeds [M] [src].", 1) + user.visible_message("[user] feeds [M] [src].") M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: [reagentlist(src)]") user.attack_log += text("\[[time_stamp()]\] Fed [M.name] by [M.name] ([M.ckey]) Reagents: [reagentlist(src)]") diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index ab064bead7..6e1d443300 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -47,35 +47,44 @@ if(istype(M,/mob/living/carbon/human)) var/mob/living/carbon/human/H = M if(H.species.flags & IS_SYNTHETIC) - H << "\red You have a monitor for a head, where do you think you're going to put that?" + H << "You have a monitor for a head, where do you think you're going to put that?" return + + var/obj/item/blocked = H.check_mouth_coverage() + if(blocked) + user << "\The [blocked] is in the way!" + return + if (fullness <= 50) - M << "\red You hungrily chew out a piece of [src] and gobble it!" + M << "You hungrily chew out a piece of [src] and gobble it!" if (fullness > 50 && fullness <= 150) - M << "\blue You hungrily begin to eat [src]." + M << "You hungrily begin to eat [src]." if (fullness > 150 && fullness <= 350) - M << "\blue You take a bite of [src]." + M << "You take a bite of [src]." if (fullness > 350 && fullness <= 550) - M << "\blue You unwillingly chew a bit of [src]." + M << "You unwillingly chew a bit of [src]." if (fullness > (550 * (1 + M.overeatduration / 2000))) // The more you eat - the more you can eat - M << "\red You cannot force any more of [src] to go down your throat." + M << "You cannot force any more of [src] to go down your throat." return 0 else if(istype(M,/mob/living/carbon/human)) var/mob/living/carbon/human/H = M if(H.species.flags & IS_SYNTHETIC) - H << "\red They have a monitor for a head, where do you think you're going to put that?" + user << "They have a monitor for a head, where do you think you're going to put that?" + return + + var/obj/item/blocked = H.check_mouth_coverage() + if(blocked) + user << "\The [blocked] is in the way!" return if(!istype(M, /mob/living/carbon/slime)) //If you're feeding it to someone else. if (fullness <= (550 * (1 + M.overeatduration / 1000))) - for(var/mob/O in viewers(world.view, user)) - O.show_message("\red [user] attempts to feed [M] [src].", 1) + user.visible_message("[user] attempts to feed [M] [src].") else - for(var/mob/O in viewers(world.view, user)) - O.show_message("\red [user] cannot force anymore of [src] down [M]'s throat.", 1) - return 0 + user.visible_message("[user] cannot force anymore of [src] down [M]'s throat.") + return 0 if(!do_mob(user, M)) return @@ -83,8 +92,7 @@ user.attack_log += text("\[[time_stamp()]\] Fed [src.name] by [M.name] ([M.ckey]) Reagents: [reagentlist(src)]") msg_admin_attack("[key_name(user)] fed [key_name(M)] with [src.name] Reagents: [reagentlist(src)] (INTENT: [uppertext(user.a_intent)])") - for(var/mob/O in viewers(world.view, user)) - O.show_message("\red [user] feeds [M] [src].", 1) + user.visible_message("[user] feeds [M] [src].") else user << "This creature does not seem to have a mouth!" diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index fba5d8ac39..181df457d4 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -260,7 +260,7 @@ icon = 'icons/obj/janitor.dmi' icon_state = "bucket" item_state = "bucket" - matter = list("metal" = 200) + matter = list(DEFAULT_WALL_MATERIAL = 200) w_class = 3.0 amount_per_transfer_from_this = 20 possible_transfer_amounts = list(10,20,30,60,120) diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index d0f678ddd9..d38c159868 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -24,10 +24,15 @@ if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M if(H.species.flags & IS_SYNTHETIC) - H << "\red You have a monitor for a head, where do you think you're going to put that?" + H << "You have a monitor for a head, where do you think you're going to put that?" + return + + var/obj/item/blocked = H.check_mouth_coverage() + if(blocked) + user << "\The [blocked] is in the way!" return - M << "\blue You swallow [src]." + M << "You swallow [src]." M.drop_from_inventory(src) //icon update if(reagents.total_volume) reagents.trans_to_ingest(M, reagents.total_volume) @@ -40,17 +45,20 @@ var/mob/living/carbon/human/H = M if(H.species.flags & IS_SYNTHETIC) - H << "\red They have a monitor for a head, where do you think you're going to put that?" + user << "They have a monitor for a head, where do you think you're going to put that?" + return + + var/obj/item/blocked = H.check_mouth_coverage() + if(blocked) + user << "\The [blocked] is in the way!" return - for(var/mob/O in viewers(world.view, user)) - O.show_message("\red [user] attempts to force [M] to swallow [src].", 1) + user.visible_message("[user] attempts to force [M] to swallow [src].") if(!do_mob(user, M)) return user.drop_from_inventory(src) //icon update - for(var/mob/O in viewers(world.view, user)) - O.show_message("\red [user] forces [M] to swallow [src].", 1) + user.visible_message("[user] forces [M] to swallow [src].") M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: [reagentlist(src)]") user.attack_log += text("\[[time_stamp()]\] Fed [M.name] by [M.name] ([M.ckey]) Reagents: [reagentlist(src)]") diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index d95921bb2c..4032d00a89 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -10,7 +10,7 @@ anchored = 0 density = 0 pressure_resistance = 5*ONE_ATMOSPHERE - matter = list("metal" = 1850) + matter = list(DEFAULT_WALL_MATERIAL = 1850) level = 2 var/ptype = 0 // 0=straight, 1=bent, 2=junction-j1, 3=junction-j2, 4=junction-y, 5=trunk, 6=disposal bin, 7=outlet, 8=inlet diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 7ba0192a85..8f1113043d 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -67,8 +67,8 @@ won't update every console in existence) but it's more of a hassle to do. Also, if (copytext(ID, 1, 2) == "$") return_name = copytext(ID, 2) switch(return_name) - if("metal") - return_name = "Metal" + if(DEFAULT_WALL_MATERIAL) + return_name = "Steel" if("glass") return_name = "Glass" if("gold") @@ -263,7 +263,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, if(linked_destroy.loaded_item.reliability < 100 && linked_destroy.loaded_item.crit_fail) files.UpdateDesign(linked_destroy.loaded_item.type) if(linked_lathe && linked_destroy.loaded_item.matter) //Also sends salvaged materials to a linked protolathe, if any. - linked_lathe.m_amount += min((linked_lathe.max_material_storage - linked_lathe.TotalMaterials()), (linked_destroy.loaded_item.matter["metal"]*linked_destroy.decon_mod)) + linked_lathe.m_amount += min((linked_lathe.max_material_storage - linked_lathe.TotalMaterials()), (linked_destroy.loaded_item.matter[DEFAULT_WALL_MATERIAL]*linked_destroy.decon_mod)) linked_lathe.g_amount += min((linked_lathe.max_material_storage - linked_lathe.TotalMaterials()), (linked_destroy.loaded_item.matter["glass"]*linked_destroy.decon_mod)) linked_destroy.loaded_item = null for(var/obj/I in linked_destroy.contents) @@ -439,27 +439,24 @@ won't update every console in existence) but it's more of a hassle to do. Also, else if(href_list["lathe_ejectsheet"] && linked_lathe) //Causes the protolathe to eject a sheet of material var/desired_num_sheets = text2num(href_list["amount"]) var/res_amount, type - switch(href_list["lathe_ejectsheet"]) - if("metal") - type = /obj/item/stack/sheet/metal + var/material/M = name_to_material[href_list["lathe_ejectsheet"]] + if(istype(M)) + type = M.stack_type + + switch(name_to_material[href_list["lathe_ejectsheet"]]) + if(DEFAULT_WALL_MATERIAL) res_amount = "m_amount" if("glass") - type = /obj/item/stack/sheet/glass res_amount = "g_amount" if("gold") - type = /obj/item/stack/sheet/mineral/gold res_amount = "gold_amount" if("silver") - type = /obj/item/stack/sheet/mineral/silver res_amount = "silver_amount" if("phoron") - type = /obj/item/stack/sheet/mineral/phoron res_amount = "phoron_amount" if("uranium") - type = /obj/item/stack/sheet/mineral/uranium res_amount = "uranium_amount" if("diamond") - type = /obj/item/stack/sheet/mineral/diamond res_amount = "diamond_amount" if(ispath(type) && hasvar(linked_lathe, res_amount)) @@ -818,11 +815,11 @@ won't update every console in existence) but it's more of a hassle to do. Also, dat += "Protolathe Menu
" dat += "Material Storage

" dat += "
    " - for(var/M in list("metal", "glass", "gold", "silver", "phoron", "uranium", "diamond")) + for(var/M in list(DEFAULT_WALL_MATERIAL, "glass", "gold", "silver", "phoron", "uranium", "diamond")) var/amount var/sheetsize = 2000 switch(M) - if("metal") + if(DEFAULT_WALL_MATERIAL) amount = linked_lathe.m_amount sheetsize = 3750 if("glass") diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm index 72127cfa89..a397728b73 100644 --- a/code/modules/research/research.dm +++ b/code/modules/research/research.dm @@ -269,7 +269,7 @@ datum/tech/robotics icon_state = "datadisk2" item_state = "card-id" w_class = 2.0 - matter = list("metal" = 30, "glass" = 10) + matter = list(DEFAULT_WALL_MATERIAL = 30, "glass" = 10) var/datum/tech/stored /obj/item/weapon/disk/tech_disk/New() @@ -283,7 +283,7 @@ datum/tech/robotics icon_state = "datadisk2" item_state = "card-id" w_class = 2.0 - matter = list("metal" = 30,"glass" = 10) + matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 10) var/datum/design/blueprint /obj/item/weapon/disk/design_disk/New() diff --git a/code/modules/research/xenoarchaeology/finds/finds.dm b/code/modules/research/xenoarchaeology/finds/finds.dm index 521da5e4aa..7de8474aef 100644 --- a/code/modules/research/xenoarchaeology/finds/finds.dm +++ b/code/modules/research/xenoarchaeology/finds/finds.dm @@ -101,7 +101,7 @@ var/apply_prefix = 1 if(prob(40)) material_descriptor = pick("rusted ","dusty ","archaic ","fragile ") - source_material = pick("cordite","quadrinium","steel","titanium","aluminium","ferritic-alloy","plasteel","duranium") + source_material = pick("cordite","quadrinium",DEFAULT_WALL_MATERIAL,"titanium","aluminium","ferritic-alloy","plasteel","duranium") var/talkative = 0 if(prob(5)) @@ -490,7 +490,7 @@ new_item = new /obj/item/clothing/mask/gas(src.loc) var/decorations = "" if(apply_material_decorations) - source_material = pick("cordite","quadrinium","steel","titanium","aluminium","ferritic-alloy","plasteel","duranium") + source_material = pick("cordite","quadrinium",DEFAULT_WALL_MATERIAL,"titanium","aluminium","ferritic-alloy","plasteel","duranium") desc = "A [material_descriptor ? "[material_descriptor] " : ""][item_type] made of [source_material], all craftsmanship is of [pick("the lowest","low","average","high","the highest")] quality." var/list/descriptors = list() diff --git a/code/modules/research/xenoarchaeology/genetics/reconstitutor.dm b/code/modules/research/xenoarchaeology/genetics/reconstitutor.dm index 284f2cc0e6..5b2a6fed40 100644 --- a/code/modules/research/xenoarchaeology/genetics/reconstitutor.dm +++ b/code/modules/research/xenoarchaeology/genetics/reconstitutor.dm @@ -302,7 +302,6 @@ datum/genesequence name = "Circuit board (Flora Reconstitution Console)" build_path = "/obj/machinery/computer/reconstitutor" origin_tech = "programming=2;biotech=4;materials=6" - frame_desc = "Requires 2 Advanced Scanning Module, 1 Nano Manipulator, 1 Matter Bin and 1 Advanced Capacitor." req_components = list( "/obj/item/weapon/stock_parts/scanning_module/adv" = 2, "/obj/item/weapon/stock_parts/manipulator/nano" = 1, @@ -313,7 +312,6 @@ datum/genesequence name = "Circuit board (Fauna Reconstitution Console)" build_path = "/obj/machinery/computer/reconstitutor/animal" origin_tech = "programming=2;biotech=4;materials=6" - frame_desc = "Requires 2 Advanced Scanning Module, 1 Nano Manipulator, 1 Matter Bin and 1 Advanced Capacitor." req_components = list( "/obj/item/weapon/stock_parts/scanning_module/adv" = 2, "/obj/item/weapon/stock_parts/manipulator/nano" = 1, diff --git a/code/modules/research/xenoarchaeology/geosample.dm b/code/modules/research/xenoarchaeology/geosample.dm index 689f61b888..535a0b4f07 100644 --- a/code/modules/research/xenoarchaeology/geosample.dm +++ b/code/modules/research/xenoarchaeology/geosample.dm @@ -61,44 +61,19 @@ age = rand(1,999) if(container.mineral) - switch(container.mineral.name) - if("Uranium") - age_million = rand(1, 704) - age_thousand = rand(1,999) - find_presence["potassium"] = rand(1,1000) / 100 - source_mineral = "potassium" - if("Iron") - age_thousand = rand(1, 999) - age_million = rand(1, 999) - find_presence["iron"] = rand(1,1000) / 100 - source_mineral = "iron" - if("Diamond") - age_thousand = rand(1,999) - age_million = rand(1,999) - find_presence["nitrogen"] = rand(1,1000) / 100 - source_mineral = "nitrogen" - if("Gold") - age_thousand = rand(1,999) - age_million = rand(1,999) - age_billion = rand(3,4) - find_presence["iron"] = rand(1,1000) / 100 - source_mineral = "iron" - if("Silver") - age_thousand = rand(1,999) - age_million = rand(1,999) - find_presence["iron"] = rand(1,1000) / 100 - source_mineral = "iron" - if("Phoron") - age_thousand = rand(1,999) - age_million = rand(1,999) - age_billion = rand(10, 13) - find_presence["phoron"] = rand(1,1000) / 100 - source_mineral = "phoron" - if("Clown") - age = rand(-1,-999) //thats the joke - age_thousand = rand(-1,-999) - find_presence["phoron"] = rand(1,1000) / 100 - source_mineral = "phoron" + if(islist(container.mineral.xarch_ages)) + var/list/ages = container.mineral.xarch_ages + if(ages["thousand"]) + age_thousand = rand(1,ages["thousand"]) + if(ages["million"]) + age_million = rand(1,ages["million"]) + if(ages["billion"]) + if(ages["billion_lower"]) + age_billion = rand(ages["billion_lower"],ages["billion"]) + else + age_billion = rand(1,ages["billion"]) + if(container.mineral.xarch_source_mineral) + source_mineral = container.mineral.xarch_source_mineral if(prob(75)) find_presence["phosphorus"] = rand(1,500) / 100 diff --git a/code/setup.dm b/code/setup.dm index 14f924a9c5..7cbcf93bdd 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -955,8 +955,13 @@ var/list/be_special_flags = list( #define LANGUAGE_TRADEBAND "Tradeband" #define LANGUAGE_GUTTER "Gutter" +#define WALL_CAN_OPEN 1 +#define WALL_OPENING 2 + #define CLAMP01(x) max(0, min(1, x)) +#define DEFAULT_WALL_MATERIAL "steel" + // Convoluted setup so defines can be supplied by Bay12 main server compile script. // Should still work fine for people jamming the icons into their repo. #ifndef CUSTOM_ITEM_OBJ diff --git a/code/world.dm b/code/world.dm index 58823fec88..acb7ad075d 100644 --- a/code/world.dm +++ b/code/world.dm @@ -55,6 +55,9 @@ var/global/datum/global_init/init = new () // Set up roundstart seed list. plant_controller = new() + // This is kinda important. Set up details of what the hell things are made of. + populate_material_list() + //Create the asteroid Z-level. if(config.generate_asteroid) new /datum/random_map(null,13,32,5,217,223) diff --git a/html/changelog.html b/html/changelog.html index 4ca2d83a96..8e4e854561 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,25 @@ -->
    +

    12 May 2015

    +

    Dennok updated:

    +
      +
    • New buildmode icons made by BartNixon.
    • +
    +

    HarpyEagle updated:

    +
      +
    • Masks and helmets that cover the face block feeding food, drinks, and pills.
    • +
    +

    MrSnapwalk updated:

    +
      +
    • Added seven new AI core displays.
    • +
    • Changed the pAI sprite and added several new expressions.
    • +
    +

    PsiOmegaDelta updated:

    +
      +
    • The space vine event now comes with a station announcement.
    • +
    +

    11 May 2015

    Mloc updated:

      diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 99c8c1e542..f6b7d619d1 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -1751,3 +1751,14 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - rscadd: Voidsuits can have tanks inserted into the storage slot. - rscadd: Voidsuits display helpful information on their contents on examine. - rscadd: Magboots can be equipped over other shoes. Except other magboots. +2015-05-12: + Dennok: + - imageadd: New buildmode icons made by BartNixon. + HarpyEagle: + - rscadd: Masks and helmets that cover the face block feeding food, drinks, and + pills. + MrSnapwalk: + - imageadd: Added seven new AI core displays. + - tweak: Changed the pAI sprite and added several new expressions. + PsiOmegaDelta: + - rscadd: The space vine event now comes with a station announcement. diff --git a/html/changelogs/Dennok-PR-9173.yml b/html/changelogs/Dennok-PR-9173.yml deleted file mode 100644 index 7828a53425..0000000000 --- a/html/changelogs/Dennok-PR-9173.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Dennok - -delete-after: True - -changes: - - imageadd: "New buildmode icons made by BartNixon." diff --git a/icons/mob/AI.dmi b/icons/mob/AI.dmi index 4525fea606..f074231afb 100644 Binary files a/icons/mob/AI.dmi and b/icons/mob/AI.dmi differ diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi index b51f8106a9..213946eb68 100644 Binary files a/icons/obj/mining.dmi and b/icons/obj/mining.dmi differ diff --git a/icons/obj/pda.dmi b/icons/obj/pda.dmi index d50d9c1a62..f4fa84dec7 100644 Binary files a/icons/obj/pda.dmi and b/icons/obj/pda.dmi differ diff --git a/icons/turf/wall_masks.dmi b/icons/turf/wall_masks.dmi new file mode 100644 index 0000000000..99e867746f Binary files /dev/null and b/icons/turf/wall_masks.dmi differ diff --git a/icons/turf/walls.dmi b/icons/turf/walls.dmi index bc3b9e68fc..259333e27b 100644 Binary files a/icons/turf/walls.dmi and b/icons/turf/walls.dmi differ diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm index d500809847..cf39ae2b1a 100644 --- a/maps/exodus-1.dmm +++ b/maps/exodus-1.dmm @@ -4423,7 +4423,7 @@ "bHc" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/medical/genetics) "bHd" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics) "bHe" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/medical/genetics) -"bHf" = (/obj/item/light_fixture_frame,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics) +"bHf" = (/obj/item/frame/light,/turf/simulated/floor/plating,/area/medical/genetics) "bHg" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "cmooffice"; name = "CMO Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/medbay2) "bHh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0; dir = 0; icon_state = "shutter0"; id = "staffroom"; name = "Staff Room Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/cryo) "bHi" = (/obj/machinery/camera/network/command{c_tag = "AI - Messaging Server"; dir = 1},/obj/machinery/blackbox_recorder,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_server_room) @@ -4487,7 +4487,7 @@ "bIo" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "research_dock_pump"},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/rnd/docking) "bIp" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning) "bIq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/genetics) -"bIr" = (/obj/item/light_fixture_frame,/turf/simulated/floor/plating,/area/medical/genetics) +"bIr" = (/obj/item/frame/light,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics) "bIs" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/medical/genetics) "bIt" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics) "bIu" = (/obj/item/weapon/table_parts,/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics) @@ -7523,8 +7523,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbBCbwNbBDbCYbrJbwQbrJbrJbrJbrJbrJbwTbrKbzTbBFbdPbBGbgGbBHbBIbgGbCZbgFbgGbgGbyjbvsbvtbAbbAcbAdbyEbvwbBLbBMbBNbBMbBObvwbDbbDabDdbDcbDfbDebDhbDgbDjbDibBVbyNbBWbzmbBYbBZbCabCabCbbDwbAraRqaRpaJibAsbCebCebySbCfbxCbCgbChbxCbCibCjbCjbCkbwkbClbCmbwkbwkbwkbwkbwkbwkbDIbwkbwkbwmbDKaXKaXKaXKaXKbDYbpjbwwbzAbzAbzAbzAbzAbzAbzAbzAbzAbzIbEibCsbCtbBhbCubCvbEjbCxbCxbCxbCybCzbEkbCBbCCbCDbEpbTGbCGbErbCGbEsbEubBzbuQbuRbEwbuRbuQbBBaafaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbBAbzQbBAbCMbCNbCObrJbrJbrJbCNbrJbwTbrKbzTbCPbdPbCQbgGbrNbwXbgGbqlbCRbgGbgGbECbxcbvtbAbbCTbxcbCUbvwbCVbEKbCXbAWbxlbvwbEMbELbERbAhbEUbEUbEUbAjbEWbEVbEXbyNbDkbDlbDlbDmbDnbDobDpaJibDqbDrbDsaJibDtbEYbDvbEZbDxbDybDzbDAbyWbDBbFabCjbDDbwmbDEbDFbwmbDGbDHbFbbDJbFobDLbDMbCpbDNbDObBTbDQbDRbCpbVLbVMbDUbVAbDWbDXbDXbFrbDZbEabEbbEcbEdbEebEfbEabEgbEhbCvbFVbFFbGfbwwbwwbwwbwwbwwbGhbGgbEnbzKbzMbCJbEobGibCJbzKbzLbzMbGjbCJbGkaafcHOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbGubExbGubEybEzbEAbEAbEAbEAbEAbEBbGAbEDbzTbEEbdPbEFbEGbEHbEIbEJbGDbGCbGWbGEbGvbtCbENbAbbEObEPbyEbvwbEQbHabESbBMbETbvwbBPbHibHjbAhaaaaaaaaabAjbHmbHlbFcbyNbFdbFebFfbFgbDnbDobFhaJibxwaRqaRpbHMbFjbFkbFlbFmbFnbHNbFpbFqbxCbxFbxFbHObxFbwkbFsbFtbFubFvbFwbFxbDJbFybDLbFzbFAbFBbDObFCbFDbFEbHPbVlbDXbHQbVAbFJbDXbDXbFKbFLbFMbFLbFLbFNbFObFPbFQbFRbFSbCvbHRbFUbHSbFWbFXbFYbFZbGabGbbGcbGdaafaafbCJbGebHUbHUbHVbIfbHZbIobEvaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbGlbGmbGnbdPbdPbGobwNbwNbwNbGpbdPbdPbGqbGrbGsbdPbGtbGtbGtbIvbGtbGvbGwbGxbGybGzbtCbvtbAbbIAbGBbtCbtGbtGbtGbtGbtGbIBbtGbtGbtGbIDbtGbIUbIMbIXbtGbJbbtGbtGbtGbtGbtGbtGbtGaJiaJiaJiaJibxwaRqaRpbHMbJqbFkbCSbGGbCWbGIbGJbGKbGLbGMbGNbCjbGObGPbGQbGRbGSbGTbGUbGVbJrbGXbGYbGZbJDbHbbHcbHdbHebHfbCpbUSbUfbwwbwwbwwbwwbwwbJVbwwbwwbwwbzAbKfbzAbzAbHkbBhbCubCvbHRbKobKzbHnbHobHpbHqbGabGbbGcbHraaaaaabCJbHsbHtbEobCIbBybKBbKUbCJaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnaaaaaaaaaaaaaaaaaaaafaaaaaaaaabHuaafaaaaaaaaaaaabGtbHvbHwbHxbHybGvbHzbKVbHBbHCbtCbvtbAbbAcbAabHDbHEbHFbHGbHHbHIbHJbHKbHLbLabLxbLnbLzbAabAabLIbMhbLYbAabHTbAabzZbHHbKJbHWbHXbHYbMibxwaRqbDsaJlbDtbDubDtbDCbDPbxCbIbbIcbIdbIebMlbIgbIhbIibIjbIkbwmbIlbImbInbDJbDTbElbIpbIqbIrbFDbIsbItbIubCpbMpbIwbIxbIybUdbLybMqbICbMCbUcbIFbIGbIHbIIbIJbzAbIKbCubCvbMHbMFbINbIObIPbIQbIRbGabGbbISbEnbEnbEnbCJbCJbCJbMSbMPbCJbCJbBybCJaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbGlbGmbGnbdPbdPbGobwNbwNbwNbGpbdPbdPbGqbGrbGsbdPbGtbGtbGtbIvbGtbGvbGwbGxbGybGzbtCbvtbAbbIAbGBbtCbtGbtGbtGbtGbtGbIBbtGbtGbtGbIDbtGbIUbIMbIXbtGbJbbtGbtGbtGbtGbtGbtGbtGaJiaJiaJiaJibxwaRqaRpbHMbJqbFkbCSbGGbCWbGIbGJbGKbGLbGMbGNbCjbGObGPbGQbGRbGSbGTbGUbGVbJrbGXbGYbGZbJDbHbbHcbHdbHebIrbCpbUSbUfbwwbwwbwwbwwbwwbJVbwwbwwbwwbzAbKfbzAbzAbHkbBhbCubCvbHRbKobKzbHnbHobHpbHqbGabGbbGcbHraaaaaabCJbHsbHtbEobCIbBybKBbKUbCJaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnaaaaaaaaaaaaaaaaaaaafaaaaaaaaabHuaafaaaaaaaaaaaabGtbHvbHwbHxbHybGvbHzbKVbHBbHCbtCbvtbAbbAcbAabHDbHEbHFbHGbHHbHIbHJbHKbHLbLabLxbLnbLzbAabAabLIbMhbLYbAabHTbAabzZbHHbKJbHWbHXbHYbMibxwaRqbDsaJlbDtbDubDtbDCbDPbxCbIbbIcbIdbIebMlbIgbIhbIibIjbIkbwmbIlbImbInbDJbDTbElbIpbIqbHfbFDbIsbItbIubCpbMpbIwbIxbIybUdbLybMqbICbMCbUcbIFbIGbIHbIIbIJbzAbIKbCubCvbMHbMFbINbIObIPbIQbIRbGabGbbISbEnbEnbEnbCJbCJbCJbMSbMPbCJbCJbBybCJaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnaaaaaaaaaaaaaaaaaabMZaaaaaaaaaaaaaaaaaaaaaaaaaaabGtbITbEmbIVbIWbNdbIYbIZbJabNfbtCbvtbJcbJdbJebJebJfbJgbJhbJibJjbJgbJfbJebJebNkbJkbJlbNqbJnbJobNBbJebJebJpbJgbJhbJibJjbJsbJtbJubJtbJvbJwbvUaJlbEtbEqbFHbGFbNLbGHbDzbHAbFibDVbxFbNQbCFbDSbDEbJGbwkbJHbJIbJJbDJbJKbJLbJMbJNbJObFDbJPbItbJObCpbJQbJRbIxbJSbJTbJUbNZbJWbObbJYbIFbJZbKabKbbKbbzAbKcbKdbKebOcbKgbKhbKibKjbKjbKkbGabGbbKlbEnbKmbOdbKnbEnaafaafaafaafaafaafaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbKpbKqbKqbKrbKsbKsbKtbKtbKtbKtbKuaafaafaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnaaaaaaaaaaaaaaaaaaaaaaaabKvbKwbKxbKwbKyaaaaaaaaabGtbGtbOfbKAbIVbKAbOibKCbOnbKDbKEbtCbKFbvtbKGbKHbAabKIbAabzZbHHbKJbAabKKbKLbKMbKNbKObAcbAabKPbKQbHLbKRbHLbHLbKSbKTbODbOtbKWbKXbcLbKYaRpaRpaRpaJlbOEbFlbFnbOFbJmbOGbJybJxbFIbLgbLhbLibLjbHgbDEbIkbIabIzbHhbDJbDJbLobLobLobCpbLpbLqbLrbLsbLtbCpbLubLvbIxbLwbFGbLybOHbLAbLBbLCbIFbJCbLEbKbbKbbzAbRsbLFbCvbwwbLGbLHbOIbLJbLKbLLbGabLMbLNbLObLObLObLPbGdaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafbLQbLRbLSbLRbKsbKtbKtbLTbLUbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLVbRMbLXbRObLVbLZbMabMbbGtbMcbMdbMebMfbMgbOLbOKbMjbMjbMkbtCbtCbtCbOMbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbMmbMnbMobtCbtCbtCbtCbtCbONbtCbtCbtCaJlaJlbOQaJlaKSaMpbMraJlbKZbJXbORbGFbLdbxCbDzbLDbxCbMybMzbMAbMBbwkbOTbMDbMEbOUbMGbPubMIbMJbMKbMLbItbJObFDbFDbMMbJObCpbMNbMObMObMObMObMObMObMObMObMObMObPvbMQbMRbMRbzAbPAbMTbMUbwwbMVbMVbMVbMWbMXbMYbMVbMVbMVbMVbMVbMVbNabNbaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymbPCbLRbLRbNebKtbKtbLTbLTbPDbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa