diff --git a/baystation12.dme b/baystation12.dme index 2584fc6002..a1074dc190 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" @@ -701,7 +701,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" @@ -765,10 +764,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" @@ -1039,6 +1038,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" @@ -1048,7 +1048,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/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/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 e7bd01c1ef..67d8e5667c 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 @@ -1089,7 +1095,7 @@ origin_tech = "engineering=1;biotech=1" energy_drain = 10 range = MELEE - construction_cost = list("metal"=5000,"glass"=5000) + construction_cost = list(DEFAULT_WALL_MATERIAL=5000,"glass"=5000) reliability = 1000 equip_cooldown = 20 var/mob/living/carbon/occupant = null 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/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 aeff3464fa..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 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/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/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 b6c9c5b14b..5f5fbff188 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/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 e27e38af7b..4eef78e45c 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") @@ -175,7 +175,7 @@ throwforce = 8.0 throw_speed = 3 throw_range = 6 - matter = list("metal" = 12000) + matter = list(DEFAULT_WALL_MATERIAL = 12000) origin_tech = "materials=1" attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") sharp = 1 @@ -247,7 +247,7 @@ throw_range = 5 w_class = 3.0 flags = CONDUCT - matter = list("metal" = 3000) + matter = list(DEFAULT_WALL_MATERIAL = 3000) /* // NOPE var/food_total= 0 var/burger_amt = 0 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 25f88f0270..d40294b5e7 100644 --- a/code/game/objects/items/weapons/power_cells.dm +++ b/code/game/objects/items/weapons/power_cells.dm @@ -14,9 +14,9 @@ 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." @@ -44,7 +44,7 @@ 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() ..() @@ -54,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() ..() @@ -64,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() ..() @@ -82,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() ..() @@ -94,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() ..() @@ -106,7 +106,7 @@ icon_state = "icell" origin_tech = null maxcharge = 30000 - matter = list("metal" = 700, "glass" = 80) + matter = list(DEFAULT_WALL_MATERIAL = 700, "glass" = 80) use() return 1 diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index 65f1abddfb..436eea0339 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -13,7 +13,7 @@ throw_speed = 1 throw_range = 4 w_class = 4.0 - matter = list("glass" = 7500, "metal" = 1000) + matter = list("glass" = 7500, DEFAULT_WALL_MATERIAL = 1000) origin_tech = "materials=2" attack_verb = list("shoved", "bashed") var/cooldown = 0 //shield bash cooldown. based on world.time diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index 383e21ff4f..55d233e3bc 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -16,7 +16,7 @@ desc = "Retracts stuff." icon = 'icons/obj/surgery.dmi' icon_state = "retractor" - matter = list("metal" = 10000, "glass" = 5000) + matter = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 5000) flags = CONDUCT w_class = 2.0 origin_tech = "materials=1;biotech=1" @@ -29,7 +29,7 @@ desc = "You think you have seen this before." icon = 'icons/obj/surgery.dmi' icon_state = "hemostat" - matter = list("metal" = 5000, "glass" = 2500) + matter = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 2500) flags = CONDUCT w_class = 2.0 origin_tech = "materials=1;biotech=1" @@ -43,7 +43,7 @@ desc = "This stops bleeding." icon = 'icons/obj/surgery.dmi' icon_state = "cautery" - matter = list("metal" = 5000, "glass" = 2500) + matter = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 2500) flags = CONDUCT w_class = 2.0 origin_tech = "materials=1;biotech=1" @@ -58,7 +58,7 @@ icon = 'icons/obj/surgery.dmi' icon_state = "drill" hitsound = 'sound/weapons/circsawhit.ogg' - matter = list("metal" = 15000, "glass" = 10000) + matter = list(DEFAULT_WALL_MATERIAL = 15000, "glass" = 10000) flags = CONDUCT force = 15.0 w_class = 2.0 @@ -86,7 +86,7 @@ throwforce = 5.0 throw_speed = 3 throw_range = 5 - matter = list("metal" = 10000, "glass" = 5000) + matter = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 5000) origin_tech = "materials=1;biotech=1" attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") @@ -140,7 +140,7 @@ throwforce = 9.0 throw_speed = 3 throw_range = 5 - matter = list("metal" = 20000,"glass" = 10000) + matter = list(DEFAULT_WALL_MATERIAL = 20000,"glass" = 10000) origin_tech = "materials=1;biotech=1" attack_verb = list("attacked", "slashed", "sawed", "cut") sharp = 1 diff --git a/code/game/objects/items/weapons/table_rack_parts.dm b/code/game/objects/items/weapons/table_rack_parts.dm index 79e512321e..8437a5e29f 100644 --- a/code/game/objects/items/weapons/table_rack_parts.dm +++ b/code/game/objects/items/weapons/table_rack_parts.dm @@ -6,7 +6,7 @@ gender = PLURAL icon = 'icons/obj/items.dmi' icon_state = "table_parts" - matter = list("metal" = 3750) + matter = list(DEFAULT_WALL_MATERIAL = 3750) flags = CONDUCT attack_verb = list("slammed", "bashed", "battered", "bludgeoned", "thrashed", "whacked") @@ -49,7 +49,7 @@ desc = "Hard table parts. Well... harder." icon = 'icons/obj/items.dmi' icon_state = "reinf_tableparts" - matter = list("metal" = 7500) + matter = list(DEFAULT_WALL_MATERIAL = 7500) flags = CONDUCT stack_types = list(/obj/item/stack/sheet/metal, /obj/item/stack/rods) diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm index 20d96676ed..996be52663 100644 --- a/code/game/objects/items/weapons/teleportation.dm +++ b/code/game/objects/items/weapons/teleportation.dm @@ -21,7 +21,7 @@ item_state = "electronic" throw_speed = 4 throw_range = 20 - matter = list("metal" = 400) + matter = list(DEFAULT_WALL_MATERIAL = 400) origin_tech = "magnets=1" /obj/item/weapon/locator/attack_self(mob/user as mob) @@ -132,7 +132,7 @@ Frequency: w_class = 2.0 throw_speed = 3 throw_range = 5 - matter = list("metal" = 10000) + matter = list(DEFAULT_WALL_MATERIAL = 10000) origin_tech = "magnets=1;bluespace=3" /obj/item/weapon/hand_tele/attack_self(mob/user as mob) diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 1090431916..91b5ff6027 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -24,7 +24,7 @@ force = 5.0 throwforce = 7.0 w_class = 2.0 - matter = list("metal" = 150) + matter = list(DEFAULT_WALL_MATERIAL = 150) origin_tech = "materials=1;engineering=1" attack_verb = list("bashed", "battered", "bludgeoned", "whacked") @@ -44,7 +44,7 @@ throwforce = 5.0 throw_speed = 3 throw_range = 5 - matter = list("metal" = 75) + matter = list(DEFAULT_WALL_MATERIAL = 75) attack_verb = list("stabbed") suicide_act(mob/user) @@ -102,7 +102,7 @@ throw_speed = 2 throw_range = 9 w_class = 2.0 - matter = list("metal" = 80) + matter = list(DEFAULT_WALL_MATERIAL = 80) origin_tech = "materials=1;engineering=1" attack_verb = list("pinched", "nipped") sharp = 1 @@ -144,7 +144,7 @@ w_class = 2.0 //Cost to make in the autolathe - matter = list("metal" = 70, "glass" = 30) + matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 30) //R&D tech level origin_tech = "engineering=1" @@ -403,21 +403,21 @@ /obj/item/weapon/weldingtool/largetank name = "industrial welding tool" max_fuel = 40 - matter = list("metal" = 70, "glass" = 60) + matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 60) origin_tech = "engineering=2" /obj/item/weapon/weldingtool/hugetank name = "upgraded welding tool" max_fuel = 80 w_class = 3.0 - matter = list("metal" = 70, "glass" = 120) + matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 120) origin_tech = "engineering=3" /obj/item/weapon/weldingtool/experimental name = "experimental welding tool" max_fuel = 40 w_class = 3.0 - matter = list("metal" = 70, "glass" = 120) + matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 120) origin_tech = "engineering=4;phorontech=3" var/last_gen = 0 @@ -444,7 +444,7 @@ throwforce = 7.0 item_state = "crowbar" w_class = 2.0 - matter = list("metal" = 50) + matter = list(DEFAULT_WALL_MATERIAL = 50) origin_tech = "engineering=1" attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked") diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 3cabb3f685..fbbc731f2a 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -185,14 +185,14 @@ desc = "A knife blade. Unusable as a weapon without a grip." icon = 'icons/obj/buildingobject.dmi' icon_state = "butterfly2" - matter = list("metal" = 5000) + matter = list(DEFAULT_WALL_MATERIAL = 5000) /obj/item/butterflyhandle name = "concealed knife grip" desc = "A plasteel grip with screw fittings for a blade." icon = 'icons/obj/buildingobject.dmi' icon_state = "butterfly1" - matter = list("metal" = 4000) + matter = list(DEFAULT_WALL_MATERIAL = 4000) /obj/item/butterflyhandle/attackby(obj/item/W as obj, mob/user as mob) if(istype(W,/obj/item/butterflyblade)) @@ -276,7 +276,7 @@ obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob) throw_range = 15 sharp = 1 edge = 1 - matter = list("metal" = 500) + matter = list(DEFAULT_WALL_MATERIAL = 500) var/poisoned = 0 diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm deleted file mode 100644 index 7690a2d11e..0000000000 --- a/code/game/objects/structures/false_walls.dm +++ /dev/null @@ -1,333 +0,0 @@ -/* - * False Walls - */ -/obj/structure/falsewall - name = "wall" - desc = "A huge chunk of metal used to seperate rooms." - anchored = 1 - icon = 'icons/turf/walls.dmi' - var/mineral = "metal" - var/opening = 0 - -/obj/structure/falsewall/New() - relativewall_neighbours() - ..() - -/obj/structure/falsewall/Destroy() - - var/temploc = src.loc - - spawn(10) - for(var/turf/simulated/wall/W in range(temploc,1)) - W.relativewall() - - for(var/obj/structure/falsewall/W in range(temploc,1)) - W.relativewall() - - for(var/obj/structure/falserwall/W in range(temploc,1)) - W.relativewall() - ..() - - -/obj/structure/falsewall/relativewall() - - if(!density) - icon_state = "[mineral]fwall_open" - return - - var/junction = 0 //will be used to determine from which side the wall is connected to other walls - - for(var/turf/simulated/wall/W in orange(src,1)) - if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls - if(src.mineral == W.mineral)//Only 'like' walls connect -Sieve - junction |= get_dir(src,W) - for(var/obj/structure/falsewall/W in orange(src,1)) - if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls - if(src.mineral == W.mineral) - junction |= get_dir(src,W) - for(var/obj/structure/falserwall/W in orange(src,1)) - if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls - if(src.mineral == W.mineral) - junction |= get_dir(src,W) - icon_state = "[mineral][junction]" - return - -/obj/structure/falsewall/attack_hand(mob/user as mob) - if(opening) - return - - if(density) - opening = 1 - icon_state = "[mineral]fwall_open" - flick("[mineral]fwall_opening", src) - sleep(15) - src.density = 0 - set_opacity(0) - opening = 0 - else - opening = 1 - flick("[mineral]fwall_closing", src) - icon_state = "[mineral]0" - density = 1 - sleep(15) - set_opacity(1) - src.relativewall() - opening = 0 - -/obj/structure/falsewall/update_icon()//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open - ..() - if(density) - icon_state = "[mineral]0" - src.relativewall() - else - icon_state = "[mineral]fwall_open" - -/obj/structure/falsewall/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(opening) - user << "\red You must wait until the door has stopped moving." - return - - if(density) - var/turf/T = get_turf(src) - if(T.density) - user << "\red The wall is blocked!" - return - if(istype(W, /obj/item/weapon/screwdriver)) - user.visible_message("[user] tightens some bolts on the wall.", "You tighten the bolts on the wall.") - if(!mineral || mineral == "metal") - T.ChangeTurf(/turf/simulated/wall) - else - T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[mineral]")) - qdel(src) - - if( istype(W, /obj/item/weapon/weldingtool) ) - var/obj/item/weapon/weldingtool/WT = W - if( WT:welding ) - if(!mineral) - T.ChangeTurf(/turf/simulated/wall) - else - T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[mineral]")) - if(mineral != "phoron")//Stupid shit keeps me from pushing the attackby() to phoron walls -Sieve - T = get_turf(src) - T.attackby(W,user) - qdel(src) - else - user << "\blue You can't reach, close it first!" - - if( istype(W, /obj/item/weapon/pickaxe/plasmacutter) ) - var/turf/T = get_turf(src) - if(!mineral) - T.ChangeTurf(/turf/simulated/wall) - else - T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[mineral]")) - if(mineral != "phoron") - T = get_turf(src) - T.attackby(W,user) - qdel(src) - - //DRILLING - else if (istype(W, /obj/item/weapon/pickaxe/diamonddrill)) - var/turf/T = get_turf(src) - if(!mineral) - T.ChangeTurf(/turf/simulated/wall) - else - T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[mineral]")) - T = get_turf(src) - T.attackby(W,user) - qdel(src) - - else if( istype(W, /obj/item/weapon/melee/energy/blade) ) - var/turf/T = get_turf(src) - if(!mineral) - T.ChangeTurf(/turf/simulated/wall) - else - T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[mineral]")) - if(mineral != "phoron") - T = get_turf(src) - T.attackby(W,user) - qdel(src) - -/obj/structure/falsewall/update_icon()//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open - ..() - if(density) - icon_state = "[mineral]0" - src.relativewall() - else - icon_state = "[mineral]fwall_open" - -/* - * False R-Walls - */ - -/obj/structure/falserwall - name = "reinforced wall" - desc = "A huge chunk of reinforced metal used to seperate rooms." - icon = 'icons/turf/walls.dmi' - icon_state = "r_wall" - density = 1 - opacity = 1 - anchored = 1 - var/mineral = "metal" - var/opening = 0 - -/obj/structure/falserwall/New() - relativewall_neighbours() - ..() - - -/obj/structure/falserwall/attack_hand(mob/user as mob) - if(opening) - return - - if(density) - opening = 1 - // Open wall - icon_state = "frwall_open" - flick("frwall_opening", src) - sleep(15) - density = 0 - set_opacity(0) - opening = 0 - else - opening = 1 - icon_state = "r_wall" - flick("frwall_closing", src) - density = 1 - sleep(15) - set_opacity(1) - relativewall() - opening = 0 - -/obj/structure/falserwall/relativewall() - - if(!density) - icon_state = "frwall_open" - return - - var/junction = 0 //will be used to determine from which side the wall is connected to other walls - - for(var/turf/simulated/wall/W in orange(src,1)) - if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls - if(src.mineral == W.mineral)//Only 'like' walls connect -Sieve - junction |= get_dir(src,W) - for(var/obj/structure/falsewall/W in orange(src,1)) - if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls - if(src.mineral == W.mineral) - junction |= get_dir(src,W) - for(var/obj/structure/falserwall/W in orange(src,1)) - if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls - if(src.mineral == W.mineral) - junction |= get_dir(src,W) - icon_state = "rwall[junction]" - return - - - -/obj/structure/falserwall/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(opening) - user << "\red You must wait until the door has stopped moving." - return - - if(istype(W, /obj/item/weapon/screwdriver)) - var/turf/T = get_turf(src) - user.visible_message("[user] tightens some bolts on the r wall.", "You tighten the bolts on the wall.") - T.ChangeTurf(/turf/simulated/wall) //Intentionally makes a regular wall instead of an r-wall (no cheap r-walls for you). - qdel(src) - - if( istype(W, /obj/item/weapon/weldingtool) ) - var/obj/item/weapon/weldingtool/WT = W - if( WT.remove_fuel(0,user) ) - var/turf/T = get_turf(src) - T.ChangeTurf(/turf/simulated/wall) - T = get_turf(src) - T.attackby(W,user) - qdel(src) - - else if( istype(W, /obj/item/weapon/pickaxe/plasmacutter) ) - var/turf/T = get_turf(src) - T.ChangeTurf(/turf/simulated/wall) - T = get_turf(src) - T.attackby(W,user) - qdel(src) - - //DRILLING - else if (istype(W, /obj/item/weapon/pickaxe/diamonddrill)) - var/turf/T = get_turf(src) - T.ChangeTurf(/turf/simulated/wall) - T = get_turf(src) - T.attackby(W,user) - qdel(src) - - else if( istype(W, /obj/item/weapon/melee/energy/blade) ) - var/turf/T = get_turf(src) - T.ChangeTurf(/turf/simulated/wall) - T = get_turf(src) - T.attackby(W,user) - qdel(src) - - -/* - * Uranium Falsewalls - */ - -/obj/structure/falsewall/uranium - name = "uranium wall" - desc = "A wall with uranium plating. This is probably a bad idea." - icon_state = "" - mineral = "uranium" - var/active = null - var/last_event = 0 - -/obj/structure/falsewall/uranium/attackby(obj/item/weapon/W as obj, mob/user as mob) - radiate() - ..() - -/obj/structure/falsewall/uranium/attack_hand(mob/user as mob) - radiate() - ..() - -/obj/structure/falsewall/uranium/proc/radiate() - if(!active) - if(world.time > last_event+15) - active = 1 - for(var/mob/living/L in range(3,src)) - L.apply_effect(12,IRRADIATE,0) - for(var/turf/simulated/wall/mineral/uranium/T in range(3,src)) - T.radiate() - last_event = world.time - active = null - return - return -/* - * Other misc falsewall types - */ - -/obj/structure/falsewall/gold - name = "gold wall" - desc = "A wall with gold plating. Swag!" - icon_state = "" - mineral = "gold" - -/obj/structure/falsewall/silver - name = "silver wall" - desc = "A wall with silver plating. Shiny." - icon_state = "" - mineral = "silver" - -/obj/structure/falsewall/diamond - name = "diamond wall" - desc = "A wall with diamond plating. You monster." - icon_state = "" - mineral = "diamond" - -/obj/structure/falsewall/phoron - name = "phoron wall" - desc = "A wall with phoron plating. This is definately a bad idea." - icon_state = "" - mineral = "phoron" - -/obj/structure/falsewall/sandstone - name = "sandstone wall" - desc = "A wall with sandstone plating." - icon_state = "" - mineral = "sandstone" diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 8c53135528..e8cb65a33d 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -6,6 +6,13 @@ var/state = 0 var/health = 200 var/cover = 50 //how much cover the girder provides against projectiles. + var/material/reinf_material + +/obj/structure/girder/displaced + icon_state = "displaced" + anchored = 0 + health = 50 + cover = 25 /obj/structure/girder/attack_generic(var/mob/user, var/damage, var/attack_message = "smashes apart", var/wallbreaker) if(!damage || !wallbreaker) @@ -30,156 +37,165 @@ health -= damage ..() if(health <= 0) - new /obj/item/stack/sheet/metal(get_turf(src)) - qdel(src) + dismantle() return +/obj/structure/girder/proc/reset_girder() + cover = initial(cover) + health = min(health,initial(health)) + state = 0 + icon_state = initial(icon_state) + if(reinf_material) + reinforce_girder() + /obj/structure/girder/attackby(obj/item/W as obj, mob/user as mob) if(istype(W, /obj/item/weapon/wrench) && state == 0) - if(anchored && !istype(src,/obj/structure/girder/displaced)) + if(anchored && !reinf_material) playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - user << "\blue Now disassembling the girder" + user << "Now disassembling the girder..." if(do_after(user,40)) if(!src) return - user << "\blue You dissasembled the girder!" + user << "You dissasembled the girder!" dismantle() else if(!anchored) playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - user << "\blue Now securing the girder" + user << "Now securing the girder..." if(get_turf(user, 40)) - user << "\blue You secured the girder!" - new/obj/structure/girder( src.loc ) - qdel(src) + user << "You secured the girder!" + reset_girder() else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) - user << "\blue Now slicing apart the girder" + user << "Now slicing apart the girder..." if(do_after(user,30)) if(!src) return - user << "\blue You slice apart the girder!" + user << "You slice apart the girder!" dismantle() else if(istype(W, /obj/item/weapon/pickaxe/diamonddrill)) - user << "\blue You drill through the girder!" + user << "You drill through the girder!" dismantle() - else if(istype(W, /obj/item/weapon/screwdriver) && state == 2 && istype(src,/obj/structure/girder/reinforced)) + else if(istype(W, /obj/item/weapon/screwdriver) && state == 2) playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) - user << "\blue Now unsecuring support struts" + user << "Now unsecuring support struts..." if(do_after(user,40)) if(!src) return - user << "\blue You unsecured the support struts!" + user << "You unsecured the support struts!" state = 1 - else if(istype(W, /obj/item/weapon/wirecutters) && istype(src,/obj/structure/girder/reinforced) && state == 1) + else if(istype(W, /obj/item/weapon/wirecutters) && state == 1) playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) - user << "\blue Now removing support struts" + user << "Now removing support struts..." if(do_after(user,40)) if(!src) return - user << "\blue You removed the support struts!" - new/obj/structure/girder( src.loc ) - qdel(src) + user << "You removed the support struts!" + reinf_material.place_dismantled_product(get_turf(src)) + reinf_material = null + reset_girder() - else if(istype(W, /obj/item/weapon/crowbar) && state == 0 && anchored ) + else if(istype(W, /obj/item/weapon/crowbar) && state == 0 && anchored) playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) - user << "\blue Now dislodging the girder" + user << "Now dislodging the girder..." if(do_after(user, 40)) if(!src) return - user << "\blue You dislodged the girder!" - new/obj/structure/girder/displaced( src.loc ) - qdel(src) + user << "You dislodged the girder!" + icon_state = "displaced" + anchored = 0 + health = 50 + cover = 25 else if(istype(W, /obj/item/stack/sheet)) var/obj/item/stack/sheet/S = W - switch(S.type) + if(S.get_amount() < 2) + return ..() - if(/obj/item/stack/sheet/metal, /obj/item/stack/sheet/metal/cyborg) - if(!anchored) - if(S.use(2)) - user << "You create a false wall! Push on it to open or close the passage." - new /obj/structure/falsewall (src.loc) - qdel(src) - else - if(S.get_amount() < 2) return ..() - user << "Now adding plating..." - if (do_after(user,40)) - if (S.use(2)) - user << "You added the plating!" - var/turf/Tsrc = get_turf(src) - Tsrc.ChangeTurf(/turf/simulated/wall) - for(var/turf/simulated/wall/X in Tsrc.loc) - if(X) X.add_hiddenprint(usr) - qdel(src) - return - - if(/obj/item/stack/sheet/plasteel, /obj/item/stack/sheet/plasteel/cyborg) - if(!anchored) - if(S.use(2)) - user << "\blue You create a false wall! Push on it to open or close the passage." - new /obj/structure/falserwall (src.loc) - qdel(src) - else - if (src.icon_state == "reinforced") //I cant believe someone would actually write this line of code... - if(S.get_amount() < 1) return ..() - user << "Now finalising reinforced wall." - if(do_after(user, 50)) - if (S.use(1)) - user << "Wall fully reinforced!" - var/turf/Tsrc = get_turf(src) - Tsrc.ChangeTurf(/turf/simulated/wall/r_wall) - for(var/turf/simulated/wall/r_wall/X in Tsrc.loc) - if(X) X.add_hiddenprint(usr) - qdel(src) - return - else - if(S.get_amount() < 1) return ..() - user << "Now reinforcing girders..." - if (do_after(user,60)) - if(S.use(1)) - user << "Girders reinforced!" - new/obj/structure/girder/reinforced( src.loc ) - qdel(src) - return - - if(S.sheettype) - var/M = S.sheettype - // Ugly hack, will suffice for now. Need to fix it upstream as well, may rewrite mineral walls. ~Z - if(M in list("mhydrogen","osmium","tritium","platinum","iron")) - user << "You cannot plate the girder in that material." - return - if(!anchored) - if(S.amount < 2) return - S.use(2) - user << "\blue You create a false wall! Push on it to open or close the passage." - var/F = text2path("/obj/structure/falsewall/[M]") - new F (src.loc) - qdel(src) - else - if(S.amount < 2) return ..() - user << "\blue Now adding plating..." - if (do_after(user,40)) - if(!src || !S || S.amount < 2) return - S.use(2) - user << "\blue You added the plating!" - var/turf/Tsrc = get_turf(src) - Tsrc.ChangeTurf(text2path("/turf/simulated/wall/mineral/[M]")) - for(var/turf/simulated/wall/mineral/X in Tsrc.loc) - if(X) X.add_hiddenprint(usr) - qdel(src) - return + var/material/M = name_to_material[S.sheettype] + if(!istype(M)) + return ..() + var/wall_fake add_hiddenprint(usr) + if(M.integrity < 50) + user << "This material is too soft for use in wall construction." + return + + user << "You begin adding the plating..." + + if(!do_after(user,40) || !S.use(2)) + return + + if(anchored) + user << "You added the plating!" + else + user << "You create a false wall! Push on it to open or close the passage." + wall_fake = 1 + + var/turf/Tsrc = get_turf(src) + Tsrc.ChangeTurf(/turf/simulated/wall) + var/turf/simulated/wall/T = get_turf(src) + T.set_material(M, reinf_material) + if(wall_fake) + T.can_open = 1 + T.add_hiddenprint(usr) + qdel(src) + return + else if(istype(W, /obj/item/pipe)) var/obj/item/pipe/P = W if (P.pipe_type in list(0, 1, 5)) //simple pipes, simple bends, and simple manifolds. user.drop_item() P.loc = src.loc - user << "\blue You fit the pipe into the [src]!" + user << "You fit the pipe into the [src]!" else ..() +/obj/structure/girder/proc/reinforce_girder() + cover = reinf_material.hardness + health = 500 + state = 2 + icon_state = "reinforced" + +/obj/structure/girder/verb/reinforce_with_material() + set name = "Reinforce girder" + set desc = "Reinforce a girder with metal." + set src in view(1) + + var/mob/living/user = usr + if(!istype(user) || !(user.l_hand || user.r_hand)) + return + + if(reinf_material) + user << "\The [src] is already reinforced." + return + + var/obj/item/stack/sheet/S = user.l_hand + if(!istype(S)) + S = user.r_hand + if(!istype(S)) + user << "You cannot plate \the [src] with that." + return + + if(S.get_amount() < 2) + user << "There is not enough material here to reinforce the girder." + return + + var/material/M = name_to_material[S.sheettype] + if(!istype(M) || M.integrity < 50) + user << "You cannot reinforce \the [src] with that; it is too soft." + return + + user << "Now reinforcing..." + if (!do_after(user,40) || !S.use(2)) + return + user << "You added reinforcement!" + + reinf_material = M + reinforce_girder() + + /obj/structure/girder/proc/dismantle() new /obj/item/stack/sheet/metal(get_turf(src)) qdel(src) @@ -203,101 +219,40 @@ return if(2.0) if (prob(30)) - var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal) - new remains(loc) - qdel(src) + dismantle() return if(3.0) if (prob(5)) - var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal) - new remains(loc) - qdel(src) + dismantle() return else return -/obj/structure/girder/displaced - icon_state = "displaced" - anchored = 0 - health = 50 - cover = 25 - -/obj/structure/girder/reinforced - icon_state = "reinforced" - state = 2 - health = 500 - cover = 80 - -/obj/structure/cultgirder +/obj/structure/girder/cult icon= 'icons/obj/cult.dmi' icon_state= "cultgirder" - anchored = 1 - density = 1 - layer = 2 - var/health = 250 - var/cover = 70 + health = 250 + cover = 70 -/obj/structure/cultgirder/attack_generic(var/mob/user, var/damage, var/attack_message = "smashes apart", var/wallbreaker) - if(!damage || !wallbreaker) - return 0 - visible_message("[user] [attack_message] the [src]!") - dismantle() - return 1 - -/obj/structure/cultgirder/proc/dismantle() +/obj/structure/girder/cult/dismantle() new /obj/effect/decal/remains/human(get_turf(src)) qdel(src) -/obj/structure/cultgirder/attackby(obj/item/W as obj, mob/user as mob) +/obj/structure/girder/cult/attackby(obj/item/W as obj, mob/user as mob) if(istype(W, /obj/item/weapon/wrench)) playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - user << "\blue Now disassembling the girder" + user << "Now disassembling the girder..." if(do_after(user,40)) - user << "\blue You dissasembled the girder!" + user << "You dissasembled the girder!" dismantle() else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) - user << "\blue Now slicing apart the girder" + user << "Now slicing apart the girder..." if(do_after(user,30)) - user << "\blue You slice apart the girder!" + user << "You slice apart the girder!" dismantle() else if(istype(W, /obj/item/weapon/pickaxe/diamonddrill)) - user << "\blue You drill through the girder!" + user << "You drill through the girder!" new /obj/effect/decal/remains/human(get_turf(src)) dismantle() - -/obj/structure/cultgirder/blob_act() - if(prob(40)) - dismantle() - -/obj/structure/cultgirder/bullet_act(var/obj/item/projectile/Proj) //No beam check- How else will you destroy the cult girder with silver bullets????? - //Girders only provide partial cover. There's a chance that the projectiles will just pass through. (unless you are trying to shoot the girder) - if(Proj.original != src && !prob(cover)) - return -1 //pass through - - //Tasers and the like should not damage cultgirders. - if(!(Proj.damage_type == BRUTE || Proj.damage_type == BURN)) - return - - health -= Proj.damage - ..() - if(health <= 0) - dismantle() - return - -/obj/structure/cultgirder/ex_act(severity) - switch(severity) - if(1.0) - qdel(src) - return - if(2.0) - if (prob(30)) - dismantle() - return - if(3.0) - if (prob(5)) - dismantle() - return - else - return diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index ecd2d823db..695b11db95 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -10,7 +10,7 @@ icon = 'icons/obj/doors/mineral_doors.dmi' icon_state = "metal" - var/mineralType = "metal" + var/mineralType = DEFAULT_WALL_MATERIAL var/state = 0 //closed, 1 == open var/isSwitchingStates = 0 var/hardness = 1 @@ -119,24 +119,10 @@ Dismantle(1) proc/Dismantle(devastated = 0) - if(!devastated) - if (mineralType == "metal") - var/ore = /obj/item/stack/sheet/metal - for(var/i = 1, i <= oreAmount, i++) - new ore(get_turf(src)) - else - var/ore = text2path("/obj/item/stack/sheet/mineral/[mineralType]") - for(var/i = 1, i <= oreAmount, i++) - new ore(get_turf(src)) - else - if (mineralType == "metal") - var/ore = /obj/item/stack/sheet/metal - for(var/i = 3, i <= oreAmount, i++) - new ore(get_turf(src)) - else - var/ore = text2path("/obj/item/stack/sheet/mineral/[mineralType]") - for(var/i = 3, i <= oreAmount, i++) - new ore(get_turf(src)) + var/material/M = name_to_material[mineralType] + if(istype(M)) + for(var/i = (devastated? 1 : 3), i <= oreAmount, i++) + new M.stack_type(get_turf(src)) qdel(src) ex_act(severity = 1) @@ -155,7 +141,7 @@ return /obj/structure/mineral_door/iron - mineralType = "metal" + mineralType = "iron" hardness = 3 /obj/structure/mineral_door/silver diff --git a/code/game/smoothwall.dm b/code/game/smoothwall.dm deleted file mode 100644 index c31b5a8ef1..0000000000 --- a/code/game/smoothwall.dm +++ /dev/null @@ -1,141 +0,0 @@ -//Separate dm because it relates to two types of atoms + ease of removal in case it's needed. -//Also assemblies.dm for falsewall checking for this when used. -//I should really make the shuttle wall check run every time it's moved, but centcom uses unsimulated floors so !effort - -/atom/proc/relativewall() //atom because it should be useable both for walls and false walls - if(istype(src,/turf/simulated/floor/vault)||istype(src,/turf/simulated/wall/vault)) //HACK!!! - return - - var/junction = 0 //will be used to determine from which side the wall is connected to other walls - - if(!istype(src,/turf/simulated/shuttle/wall)) //or else we'd have wacky shuttle merging with walls action - for(var/turf/simulated/wall/W in orange(src,1)) - if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls - junction |= get_dir(src,W) - for(var/obj/structure/falsewall/W in orange(src,1)) - if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls - junction |= get_dir(src,W) - for(var/obj/structure/falserwall/W in orange(src,1)) - if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls - junction |= get_dir(src,W) - -/* Commenting this out for now until we figure out what to do with shuttle smooth walls, if anything. - As they are now, they sort of work screwy and may need further coding. Or just be scrapped.*/ - /*else - for(var/turf/simulated/shuttle/wall/W in orange(src,1)) - if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls - junction |= get_dir(src,W) - for(var/obj/machinery/shuttle/W in orange(src,1)) //stuff like engine and propulsion should merge with walls - if(abs(src.x-W.x)-abs(src.y-W.y)) - junction |= get_dir(src,W) - for(var/obj/machinery/door/W in orange(src,1)) //doors should not result in diagonal walls, it just looks ugly. checking if area is shuttle so it won't merge with the station - if((abs(src.x-W.x)-abs(src.y-W.y)) && (istype(W.loc.loc,/area/shuttle) || istype(W.loc.loc,/area/supply))) - junction |= get_dir(src,W) - for(var/obj/structure/grille/W in orange(src,1)) //same for grilles. checking if area is shuttle so it won't merge with the station - if((abs(src.x-W.x)-abs(src.y-W.y)) && (istype(W.loc.loc,/area/shuttle) || istype(W.loc.loc,/area/supply))) - junction |= get_dir(src,W)*/ - - if(istype(src,/turf/simulated/wall)) - var/turf/simulated/wall/wall = src - wall.icon_state = "[wall.walltype][junction]" - else if (istype(src,/obj/structure/falserwall)) - src.icon_state = "rwall[junction]" - else if (istype(src,/obj/structure/falsewall)) - var/obj/structure/falsewall/fwall = src - fwall.icon_state = "[fwall.mineral][junction]" -/* else if(istype(src,/turf/simulated/shuttle/wall)) - var/newicon = icon; - var/newiconstate = icon_state; - if(junction!=5 && junction!=6 && junction!=9 && junction!=10) //if it's not diagonal, all is well, no additional calculations needed - src.icon_state = "swall[junction]" - else //if it's diagonal, we need to figure out if we're using the floor diagonal or the space diagonal sprite - var/is_floor = 0 - for(var/turf/unsimulated/floor/F in orange(src,1)) - if(abs(src.x-F.x)-abs(src.y-F.y)) - if((15-junction) & get_dir(src,F)) //if there's a floor in at least one of the empty space directions, return 1 - is_floor = 1 - newicon = F.icon - newiconstate = F.icon_state //we'll save these for later - for(var/turf/simulated/floor/F in orange(src,1)) - if(abs(src.x-F.x)-abs(src.y-F.y)) - if((15-junction) & get_dir(src,F)) //if there's a floor in at least one of the empty space directions, return 1 - is_floor = 1 - newicon = F.icon - newiconstate = F.icon_state //we'll save these for later - for(var/turf/simulated/shuttle/floor/F in orange(src,1)) - if(abs(src.x-F.x)-abs(src.y-F.y)) - if((15-junction) & get_dir(src,F)) //if there's a floor in at least one of the empty space directions, return 1 - is_floor = 1 - newicon = F.icon - newiconstate = F.icon_state //we'll save these for later - if(is_floor) //if is_floor = 1, we use the floor diagonal sprite - src.icon = newicon; //we'll set the floor's icon to the floor next to it and overlay the wall segment. shuttle floor sprites have priority - src.icon_state = newiconstate; // - src.overlays += icon('icons/turf/shuttle.dmi',"swall_f[junction]") - else //otherwise, the space one - src.icon_state = "swall_s[junction]"*/ - - return - -/atom/proc/relativewall_neighbours() - for(var/turf/simulated/wall/W in range(src,1)) - W.relativewall() - for(var/obj/structure/falsewall/W in range(src,1)) - W.relativewall() - W.update_icon()//Refreshes the wall to make sure the icons don't desync - for(var/obj/structure/falserwall/W in range(src,1)) - W.relativewall() - return - -/turf/simulated/wall/New() - relativewall_neighbours() - ..() - -/*/turf/simulated/shuttle/wall/New() - - spawn(20) //testing if this will make /obj/machinery/shuttle and /door count - It does, it stays. - if(src.icon_state in list("wall1", "wall", "diagonalWall", "wall_floor", "wall_space")) //so wizard den, syndie shuttle etc will remain black - for(var/turf/simulated/shuttle/wall/W in range(src,1)) - W.relativewall() - - ..()*/ - -/turf/simulated/wall/Destroy() - spawn(10) - for(var/turf/simulated/wall/W in range(src,1)) - W.relativewall() - - for(var/obj/structure/falsewall/W in range(src,1)) - W.relativewall() - - for(var/direction in cardinal) - for(var/obj/effect/plant/shroom in get_step(src,direction)) - if(!shroom.floor) //shrooms drop to the floor - shroom.floor = 1 - shroom.update_icon() - shroom.pixel_x = 0 - shroom.pixel_y = 0 - - ..() - -/turf/simulated/wall/relativewall() - if(istype(src,/turf/simulated/wall/vault)) //HACK!!! - return - - var/junction = 0 //will be used to determine from which side the wall is connected to other walls - - for(var/turf/simulated/wall/W in orange(src,1)) - if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls - if(src.mineral == W.mineral)//Only 'like' walls connect -Sieve - junction |= get_dir(src,W) - for(var/obj/structure/falsewall/W in orange(src,1)) - if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls - if(src.mineral == W.mineral) - junction |= get_dir(src,W) - for(var/obj/structure/falserwall/W in orange(src,1)) - if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls - if(src.mineral == W.mineral) - junction |= get_dir(src,W) - var/turf/simulated/wall/wall = src - wall.icon_state = "[wall.walltype][junction]" - return \ No newline at end of file diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index cefccdc46f..bb7d93fbf1 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -41,7 +41,7 @@ var/list/wood_icons = list("wood","wood-broken") var/lava = 0 var/broken = 0 var/burnt = 0 - var/mineral = "metal" + var/mineral = DEFAULT_WALL_MATERIAL var/floor_type = /obj/item/stack/tile/plasteel var/lightfloor_state // for light floors, this is the state of the tile. 0-7, 0x4 is on-bit - use the helper procs below diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm new file mode 100644 index 0000000000..4d86d70877 --- /dev/null +++ b/code/game/turfs/simulated/wall_attacks.dm @@ -0,0 +1,311 @@ +//Interactions +/turf/simulated/wall/proc/toggle_open(var/mob/user) + + if(can_open == WALL_OPENING) + return + + if(density) + can_open = WALL_OPENING + set_wall_state("[material.icon_base]fwall_open") + //flick("[material.icon_base]fwall_opening", src) + sleep(15) + density = 0 + set_light(0) + else + can_open = WALL_OPENING + //flick("[material.icon_base]fwall_closing", src) + set_wall_state("[material.icon_base]0") + density = 1 + sleep(15) + set_light(1) + + can_open = WALL_CAN_OPEN + update_icon() + +/turf/simulated/wall/proc/fail_smash(var/mob/user) + user << "You smash against the wall!" + take_damage(rand(25,75)) + +/turf/simulated/wall/proc/success_smash(var/mob/user) + user << "You smash through the wall!" + spawn(1) + dismantle_wall(1) + +/turf/simulated/wall/proc/try_touch(var/mob/user, var/rotting) + + if(rotting) + if(reinf_material) + user << "\The [reinf_material.display_name] feels porous and crumbly." + else + user << "\The [material.display_name] crumbles under your touch!" + dismantle_wall() + return 1 + + if(..()) return 1 + + if(!can_open) + user << "You push the wall, but nothing happens." + playsound(src, 'sound/weapons/Genhit.ogg', 25, 1) + else + toggle_open(user) + return 0 + + +/turf/simulated/wall/attack_hand(var/mob/user) + + radiate() + add_fingerprint(user) + var/rotting = (locate(/obj/effect/overlay/wallrot) in src) + if (HULK in user.mutations) + if (rotting || !prob(material.hardness)) + success_smash(user) + else + fail_smash(user) + return 1 + + try_touch(user, rotting) + +/turf/simulated/wall/attack_generic(var/mob/user, var/damage, var/attack_message, var/wallbreaker) + + radiate() + var/rotting = (locate(/obj/effect/overlay/wallrot) in src) + if(!damage || !wallbreaker) + try_touch(user, rotting) + return + + if(rotting) + return success_smash(user) + + if(reinf_material) + if((wallbreaker == 2) || (damage >= max(material.hardness,reinf_material.hardness))) + return success_smash(user) + else if(damage >= material.hardness) + return success_smash(user) + return fail_smash(user) + +/turf/simulated/wall/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (!user.) + user << "You don't have the dexterity to do this!" + return + + //get the user's location + if(!istype(user.loc, /turf)) return //can't do this stuff whilst inside objects and such + + if(W) + radiate() + if(is_hot(W)) + ignite(is_hot(W)) + + if(locate(/obj/effect/overlay/wallrot) in src) + if(istype(W, /obj/item/weapon/weldingtool) ) + var/obj/item/weapon/weldingtool/WT = W + if( WT.remove_fuel(0,user) ) + user << "You burn away the fungi with \the [WT]." + playsound(src, 'sound/items/Welder.ogg', 10, 1) + for(var/obj/effect/overlay/wallrot/WR in src) + qdel(WR) + return + else if(!is_sharp(W) && W.force >= 10 || W.force >= 20) + user << "\The [src] crumbles away under the force of your [W.name]." + src.dismantle_wall(1) + return + + //THERMITE related stuff. Calls src.thermitemelt() which handles melting simulated walls and the relevant effects + if(thermite) + if( istype(W, /obj/item/weapon/weldingtool) ) + var/obj/item/weapon/weldingtool/WT = W + if( WT.remove_fuel(0,user) ) + thermitemelt(user) + return + + else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) + thermitemelt(user) + return + + else if( istype(W, /obj/item/weapon/melee/energy/blade) ) + var/obj/item/weapon/melee/energy/blade/EB = W + + EB.spark_system.start() + user << "You slash \the [src] with \the [EB]; the thermite ignites!" + playsound(src, "sparks", 50, 1) + playsound(src, 'sound/weapons/blade1.ogg', 50, 1) + + thermitemelt(user) + return + + var/turf/T = user.loc //get user's location for delay checks + + if(damage && istype(W, /obj/item/weapon/weldingtool)) + + var/obj/item/weapon/weldingtool/WT = W + + if(!WT.isOn()) + return + + if(WT.remove_fuel(0,user)) + user << "You start repairing the damage to [src]." + playsound(src, 'sound/items/Welder.ogg', 100, 1) + if(do_after(user, max(5, damage / 5)) && WT && WT.isOn()) + user << "You finish repairing the damage to [src]." + take_damage(-damage) + else + user << "You need more welding fuel to complete this task." + return + return + + // Basic dismantling. + if(isnull(construction_stage) || !reinf_material) + + var/cut_delay = 60 - material.cut_delay + var/dismantle_verb + var/dismantle_sound + + if(istype(W,/obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/WT = W + if(!WT.isOn()) + return + if(!WT.remove_fuel(0,user)) + user << "You need more welding fuel to complete this task." + return + dismantle_verb = "cutting" + dismantle_sound = 'sound/items/Welder.ogg' + cut_delay *= 0.7 + else if(istype(W,/obj/item/weapon/melee/energy/blade)) + dismantle_sound = "sparks" + dismantle_verb = "slicing" + cut_delay *= 0.5 + else if(istype(W,/obj/item/weapon/pickaxe)) + var/obj/item/weapon/pickaxe/P = W + dismantle_verb = P.drill_verb + dismantle_sound = P.drill_sound + cut_delay -= P.digspeed + + if(dismantle_verb) + + user << "You begin [dismantle_verb] through the outer plating." + if(dismantle_sound) + playsound(src, dismantle_sound, 100, 1) + + if(cut_delay<0) + cut_delay = 0 + + if(!do_after(user,cut_delay)) + return + + user << "You remove the outer plating." + dismantle_wall() + user.visible_message("The wall was torn open by [user]!") + return + + //Reinforced dismantling. + else + switch(construction_stage) + if(6) + if (istype(W, /obj/item/weapon/wirecutters)) + playsound(src, 'sound/items/Wirecutter.ogg', 100, 1) + construction_stage = 5 + new /obj/item/stack/rods( src ) + user << "You cut the outer grille." + set_wall_state() + return + if(5) + if (istype(W, /obj/item/weapon/screwdriver)) + user << "You begin removing the support lines." + playsound(src, 'sound/items/Screwdriver.ogg', 100, 1) + if(!do_after(user,40) || !istype(src, /turf/simulated/wall) || construction_stage != 5) + return + construction_stage = 4 + set_wall_state() + user << "You remove the support lines." + return + else if( istype(W, /obj/item/stack/rods) ) + var/obj/item/stack/O = W + if(O.get_amount()>0) + O.use(1) + construction_stage = 6 + set_wall_state() + user << "You replace the outer grille." + return + if(4) + var/cut_cover + if(istype(W,/obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/WT = W + if(!WT.isOn()) + return + if(WT.remove_fuel(0,user)) + cut_cover=1 + else + user << "You need more welding fuel to complete this task." + return + else if (istype(W, /obj/item/weapon/pickaxe/plasmacutter)) + cut_cover = 1 + if(cut_cover) + user << "You begin slicing through the metal cover." + playsound(src, 'sound/items/Welder.ogg', 100, 1) + if(!do_after(user, 60) || !istype(src, /turf/simulated/wall) || construction_stage != 4) + return + construction_stage = 3 + set_wall_state() + user << "You press firmly on the cover, dislodging it." + return + if(3) + if (istype(W, /obj/item/weapon/crowbar)) + user << "You struggle to pry off the cover." + playsound(src, 'sound/items/Crowbar.ogg', 100, 1) + if(!do_after(user,100) || !istype(src, /turf/simulated/wall) || construction_stage != 3) + return + construction_stage = 2 + set_wall_state() + user << "You pry off the cover." + return + if(2) + if (istype(W, /obj/item/weapon/wrench)) + user << "You start loosening the anchoring bolts which secure the support rods to their frame." + playsound(src, 'sound/items/Ratchet.ogg', 100, 1) + if(!do_after(user,40) || !istype(src, /turf/simulated/wall) || construction_stage != 2) + return + construction_stage = 1 + set_wall_state() + user << "You remove the bolts anchoring the support rods." + return + if(1) + var/cut_cover + if(istype(W, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/WT = W + if( WT.remove_fuel(0,user) ) + cut_cover=1 + else + user << "You need more welding fuel to complete this task." + return + else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) + cut_cover = 1 + if(cut_cover) + user << "You begin slicing through the support rods." + playsound(src, 'sound/items/Welder.ogg', 100, 1) + if(!do_after(user,70) || !istype(src, /turf/simulated/wall) || construction_stage != 1) + return + construction_stage = 0 + set_wall_state() + new /obj/item/stack/rods(src) + user << "The support rods drop out as you cut them loose from the frame." + return + if(0) + if(istype(W, /obj/item/weapon/crowbar)) + user << "You struggle to pry off the outer sheath." + playsound(src, 'sound/items/Crowbar.ogg', 100, 1) + sleep(100) + if(!istype(src, /turf/simulated/wall) || !user || !W || !T ) return + if(user.loc == T && user.get_active_hand() == W ) + user << "You pry off the outer sheath." + dismantle_wall() + return + + if(istype(W,/obj/item/frame)) + var/obj/item/frame/F = W + F.try_build(src) + return + + else if(!istype(W,/obj/item/weapon/rcd) && !istype(W, /obj/item/weapon/reagent_containers)) + return attack_hand(user) + diff --git a/code/game/turfs/simulated/wall_icon.dm b/code/game/turfs/simulated/wall_icon.dm new file mode 100644 index 0000000000..b02311ee98 --- /dev/null +++ b/code/game/turfs/simulated/wall_icon.dm @@ -0,0 +1,130 @@ +/turf/simulated/wall/proc/update_material() + + if(!material) + return + + if(reinf_material) + construction_stage = 6 + else + construction_stage = null + if(!material) + material = name_to_material[DEFAULT_WALL_MATERIAL] + if(material) + explosion_resistance = material.explosion_resistance + if(reinf_material && reinf_material.explosion_resistance > explosion_resistance) + explosion_resistance = reinf_material.explosion_resistance + + if(reinf_material) + name = "reinforced [material.display_name] wall" + desc = "It seems to be a section of hull reinforced with [reinf_material.display_name] and plated with [material.display_name]." + else + name = "[material.display_name] wall" + desc = "It seems to be a section of hull plated with [material.display_name]." + + set_wall_state("[material.icon_base]0") + + if(material.opacity > 0.5 && !opacity) + set_light(1) + else if(material.opacity < 0.5 && opacity) + set_light(0) + + update_icon() + check_relatives() + +/turf/simulated/wall/proc/set_wall_state(var/new_state) + + if(!material) + return + + if(new_state) + last_state = new_state + else if(last_state) + new_state = last_state + else + return + + overlays.Cut() + + if(!wall_cache["[new_state]-[material.icon_colour]"]) + var/image/I = image(icon='icons/turf/wall_masks.dmi',icon_state="[new_state]") + I.color = material.icon_colour + wall_cache["[new_state]-[material.icon_colour]"] = I + overlays |= wall_cache["[new_state]-[material.icon_colour]"] + if(reinf_material) + + var/cache_key = "[material.icon_reinf]-[reinf_material.icon_colour]" + if(!isnull(construction_stage) && construction_stage<6) + cache_key = "reinf_construct-[reinf_material.icon_colour]-[construction_stage]" + + if(!wall_cache[cache_key]) + var/image/I + if(!isnull(construction_stage) && construction_stage<6) + I = image(icon='icons/turf/wall_masks.dmi',icon_state="reinf_construct-[construction_stage]") + else + I = image(icon='icons/turf/wall_masks.dmi',icon_state="[material.icon_reinf]") + I.color = reinf_material.icon_colour + wall_cache[cache_key] = I + overlays |= wall_cache[cache_key] + +/turf/simulated/wall/proc/set_material(var/material/newmaterial, var/material/newrmaterial) + material = newmaterial + reinf_material = newrmaterial + check_relatives() + check_relatives(1) + +/turf/simulated/wall/proc/update_icon() + + if(!material) + return + + if(!damage_overlays[1]) //list hasn't been populated + generate_overlays() + + if(density) + check_relatives(1) + else + set_wall_state("[material.icon_base]fwall_open") + + var/overlay = round(damage / material.integrity * damage_overlays.len) + 1 + if(overlay > damage_overlays.len) + overlay = damage_overlays.len + if(density) + if(damage_overlay && overlay == damage_overlay) //No need to update. + return + overlays += damage_overlays[overlay] + damage_overlay = overlay + return + +/turf/simulated/wall/proc/generate_overlays() + var/alpha_inc = 256 / damage_overlays.len + + for(var/i = 1; i <= damage_overlays.len; i++) + var/image/img = image(icon = 'icons/turf/walls.dmi', icon_state = "overlay_damage") + img.blend_mode = BLEND_MULTIPLY + img.alpha = (i * alpha_inc) - 1 + damage_overlays[i] = img + +//Smoothwall code. update_self for relativewall(), not for relativewall_neighbors() +/turf/simulated/wall/proc/check_relatives(var/update_self) + if(!material) + return + var/junction + if(update_self) + junction = 0 + for(var/checkdir in cardinal) + var/turf/simulated/wall/T = get_step(src, checkdir) + if(!istype(T) || !T.material) + continue + if(T.material && can_join_with(T)) + if(update_self) + junction |= get_dir(src,T) //Not too sure why, but using checkdir just breaks walls. + else + T.check_relatives(1) + if(!isnull(junction)) + set_wall_state("[material.icon_base][junction]") + return + +/turf/simulated/wall/proc/can_join_with(var/turf/simulated/wall/W) + if(material && W.material && material.name == W.material.name) + return 1 + return 0 \ No newline at end of file diff --git a/code/game/turfs/simulated/wall_types.dm b/code/game/turfs/simulated/wall_types.dm new file mode 100644 index 0000000000..dc9346e323 --- /dev/null +++ b/code/game/turfs/simulated/wall_types.dm @@ -0,0 +1,43 @@ +/turf/simulated/wall/r_wall + icon_state = "rgeneric" +/turf/simulated/wall/r_wall/New(var/newloc) + ..(newloc, DEFAULT_WALL_MATERIAL,"plasteel") //3strong +/turf/simulated/wall/cult + icon_state = "cult" +/turf/simulated/wall/cult/New(var/newloc) + ..(newloc,"cult","cult2") + +/turf/unsimulated/wall/cult + name = "cult wall" + desc = "Hideous images dance beneath the surface." + icon = 'icons/turf/wall_masks.dmi' + icon_state = "cult" + + +/turf/simulated/wall/iron/New(var/newloc) + ..(newloc,"iron") +/turf/simulated/wall/uranium/New(var/newloc) + ..(newloc,"uranium") +/turf/simulated/wall/diamond/New(var/newloc) + ..(newloc,"diamond") +/turf/simulated/wall/gold/New(var/newloc) + ..(newloc,"gold") +/turf/simulated/wall/silver/New(var/newloc) + ..(newloc,"silver") +/turf/simulated/wall/phoron/New(var/newloc) + ..(newloc,"phoron") +/turf/simulated/wall/sandstone/New(var/newloc) + ..(newloc,"sandstone") + +/turf/simulated/wall/ironphoron/New(var/newloc) + ..(newloc,"iron","phoron") +/turf/simulated/wall/golddiamond/New(var/newloc) + ..(newloc,"gold","diamond") +/turf/simulated/wall/silvergold/New(var/newloc) + ..(newloc,"silver","gold") +/turf/simulated/wall/sandstonediamond/New(var/newloc) + ..(newloc,"sandstone","diamond") + + +/turf/simulated/wall/cult/New(var/newloc) + ..(newloc,"cult","cult2") \ No newline at end of file diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index ef7dd74e8f..4596512fe4 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -1,29 +1,47 @@ +var/list/global/wall_cache = list() + /turf/simulated/wall name = "wall" desc = "A huge chunk of metal used to seperate rooms." - icon = 'icons/turf/walls.dmi' - var/mineral = "metal" - var/rotting = 0 - - var/damage = 0 - var/damage_cap = 150 //Wall will break down to girders if damage reaches this point - - var/damage_overlay - var/global/damage_overlays[8] - - var/max_temperature = 1800 //K, walls will take damage if they're next to a fire hotter than this - + icon = 'icons/turf/wall_masks.dmi' + icon_state = "generic" opacity = 1 density = 1 blocks_air = 1 - thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall - var/walltype = "metal" + var/damage = 0 + var/damage_overlay + var/global/damage_overlays[8] + var/active + var/last_event + var/can_open = 0 + var/material/material + var/material/reinf_material + var/last_state + var/construction_stage + +/turf/simulated/wall/New(var/newloc, var/materialtype, var/rmaterialtype) + ..(newloc) + icon_state = "blank" + if(!name_to_material) + populate_material_list() + if(!materialtype) + materialtype = DEFAULT_WALL_MATERIAL + material = name_to_material[materialtype] + if(!isnull(rmaterialtype)) + reinf_material = name_to_material[rmaterialtype] + update_material() /turf/simulated/wall/bullet_act(var/obj/item/projectile/Proj) + radiate() + if(istype(Proj,/obj/item/projectile/beam)) + ignite(2500) + else if(istype(Proj,/obj/item/projectile/ion)) + ignite(500) + // Tasers and stuff? No thanks. Also no clone or tox damage crap. if(!(Proj.damage_type == BRUTE || Proj.damage_type == BURN)) return @@ -45,25 +63,29 @@ take_damage(tforce) -/turf/simulated/wall/Destroy() - for(var/obj/effect/E in src) if(E.name == "Wallrot") qdel(E) - ..() +/turf/simulated/wall/proc/clear_plants() + for(var/obj/effect/overlay/wallrot/WR in src) + qdel(WR) + for(var/obj/effect/plant/plant in range(src, 1)) + if(!plant.floor) //shrooms drop to the floor + plant.floor = 1 + plant.update_icon() + plant.pixel_x = 0 + plant.pixel_y = 0 + plant.update_neighbors() /turf/simulated/wall/ChangeTurf(var/newtype) - for(var/obj/effect/E in src) if(E.name == "Wallrot") qdel(E) - for(var/obj/effect/plant/plant in range(1)) - plant.update_neighbors() + clear_plants() ..(newtype) //Appearance - /turf/simulated/wall/examine(mob/user) . = ..(user) if(!damage) user << "It looks fully intact." else - var/dam = damage / damage_cap + var/dam = damage / material.integrity if(dam <= 0.3) user << "It looks slightly damaged." else if(dam <= 0.6) @@ -71,43 +93,14 @@ else user << "It looks heavily damaged." - if(rotting) + if(locate(/obj/effect/overlay/wallrot) in src) user << "There is fungus growing on [src]." -/turf/simulated/wall/proc/update_icon() - if(!damage_overlays[1]) //list hasn't been populated - generate_overlays() - - if(!damage) - overlays.Cut() - return - - var/overlay = round(damage / damage_cap * damage_overlays.len) + 1 - if(overlay > damage_overlays.len) - overlay = damage_overlays.len - - if(damage_overlay && overlay == damage_overlay) //No need to update. - return - - overlays.Cut() - overlays += damage_overlays[overlay] - damage_overlay = overlay - - return - -/turf/simulated/wall/proc/generate_overlays() - var/alpha_inc = 256 / damage_overlays.len - - for(var/i = 1; i <= damage_overlays.len; i++) - var/image/img = image(icon = 'icons/turf/walls.dmi', icon_state = "overlay_damage") - img.blend_mode = BLEND_MULTIPLY - img.alpha = (i * alpha_inc) - 1 - damage_overlays[i] = img - //Damage /turf/simulated/wall/melt() - if(mineral == "diamond") + + if(!can_melt()) return src.ChangeTurf(/turf/simulated/floor/plating) @@ -127,8 +120,11 @@ return /turf/simulated/wall/proc/update_damage() - var/cap = damage_cap - if(rotting) + var/cap = material.integrity + if(reinf_material) + cap += reinf_material.integrity + + if(locate(/obj/effect/overlay/wallrot) in src) cap = cap / 10 if(damage >= cap) @@ -138,52 +134,25 @@ return +/turf/simulated/wall/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)//Doesn't fucking work because walls don't interact with air :( + ignite(exposed_temperature) + /turf/simulated/wall/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume) - if(adj_temp > max_temperature) - take_damage(log(RAND_F(0.9, 1.1) * (adj_temp - max_temperature))) + ignite(adj_temp) + if(adj_temp > material.melting_point) + take_damage(log(RAND_F(0.9, 1.1) * (adj_temp - material.melting_point))) return ..() /turf/simulated/wall/proc/dismantle_wall(devastated=0, explode=0) - if(istype(src,/turf/simulated/wall/r_wall)) - if(!devastated) - playsound(src, 'sound/items/Welder.ogg', 100, 1) - new /obj/structure/girder/reinforced(src) - new /obj/item/stack/sheet/plasteel( src ) - else - new /obj/item/stack/sheet/metal( src ) - new /obj/item/stack/sheet/metal( src ) - new /obj/item/stack/sheet/plasteel( src ) - else if(istype(src,/turf/simulated/wall/cult)) - if(!devastated) - playsound(src, 'sound/items/Welder.ogg', 100, 1) - new /obj/effect/decal/cleanable/blood(src) - new /obj/structure/cultgirder(src) - else - new /obj/effect/decal/cleanable/blood(src) - new /obj/effect/decal/remains/human(src) + playsound(src, 'sound/items/Welder.ogg', 100, 1) + if(reinf_material) + reinf_material.place_dismantled_girder(src, reinf_material) + reinf_material.place_dismantled_product(src,devastated) else - if(!devastated) - playsound(src, 'sound/items/Welder.ogg', 100, 1) - new /obj/structure/girder(src) - if (mineral == "metal") - new /obj/item/stack/sheet/metal( src ) - new /obj/item/stack/sheet/metal( src ) - else - var/M = text2path("/obj/item/stack/sheet/mineral/[mineral]") - new M( src ) - new M( src ) - else - if (mineral == "metal") - new /obj/item/stack/sheet/metal( src ) - new /obj/item/stack/sheet/metal( src ) - new /obj/item/stack/sheet/metal( src ) - else - var/M = text2path("/obj/item/stack/sheet/mineral/[mineral]") - new M( src ) - new M( src ) - new /obj/item/stack/sheet/metal( src ) + material.place_dismantled_girder(src) + material.place_dismantled_product(src,devastated) for(var/obj/O in src.contents) //Eject contents! if(istype(O,/obj/structure/sign/poster)) @@ -215,24 +184,19 @@ // Wall-rot effect, a nasty fungus that destroys walls. /turf/simulated/wall/proc/rot() - if(!rotting) - rotting = 1 + if(locate(/obj/effect/overlay/wallrot) in src) + return + var/number_rots = rand(2,3) + for(var/i=0, i