diff --git a/code/__DEFINES/construction.dm b/code/__DEFINES/construction.dm index 2842e70be21..9612ed7f2c1 100644 --- a/code/__DEFINES/construction.dm +++ b/code/__DEFINES/construction.dm @@ -38,6 +38,9 @@ #define PLASTIC_FLAPS_NORMAL 0 #define PLASTIC_FLAPS_DETACHED 1 +//Mounted Frames BITMASK +#define MOUNTED_FRAME_SIMFLOOR (1 << 0) +#define MOUNTED_FRAME_NOSPACE (1 << 1) //ai core defines #define EMPTY_CORE 0 diff --git a/code/game/machinery/defib_mount.dm b/code/game/machinery/defib_mount.dm index e64d443a9c6..e759b6922d1 100644 --- a/code/game/machinery/defib_mount.dm +++ b/code/game/machinery/defib_mount.dm @@ -151,10 +151,10 @@ desc = "A frame for a defibrillator mount." icon = 'icons/obj/machines/defib_mount.dmi' icon_state = "defibrillator_mount" - sheets_refunded = 0 - materials = list(MAT_METAL = 300, MAT_GLASS = 100) w_class = WEIGHT_CLASS_BULKY + materials = list(MAT_METAL = 300, MAT_GLASS = 100) + /obj/item/mounted/frame/defib_mount/do_build(turf/on_wall, mob/user) new /obj/machinery/defibrillator_mount(get_turf(src), get_dir(user, on_wall), 1) playsound(src, 'sound/machines/click.ogg', 50, TRUE) diff --git a/code/game/objects/items/mountable_frames/air_alarm.dm b/code/game/objects/items/mountable_frames/air_alarm.dm index 432b4169355..b0d3d1bc8e1 100644 --- a/code/game/objects/items/mountable_frames/air_alarm.dm +++ b/code/game/objects/items/mountable_frames/air_alarm.dm @@ -8,8 +8,10 @@ Code shamelessly copied from apc_frame desc = "Used for building Air Alarms" icon = 'icons/obj/monitors.dmi' icon_state = "alarm_bitem" + materials = list(MAT_METAL=2000) - mount_reqs = list("simfloor", "nospace") + metal_sheets_refunded = 1 + mount_requirements = MOUNTED_FRAME_SIMFLOOR | MOUNTED_FRAME_NOSPACE /obj/item/mounted/frame/alarm_frame/do_build(turf/on_wall, mob/user) new /obj/machinery/alarm(get_turf(src), get_dir(on_wall, user), 1) diff --git a/code/game/objects/items/mountable_frames/apc_frame.dm b/code/game/objects/items/mountable_frames/apc_frame.dm index 8cabb9c6921..5e96e694731 100644 --- a/code/game/objects/items/mountable_frames/apc_frame.dm +++ b/code/game/objects/items/mountable_frames/apc_frame.dm @@ -3,7 +3,9 @@ desc = "Used for repairing or building APCs" icon = 'icons/obj/apc_repair.dmi' icon_state = "apc_frame" - mount_reqs = list("simfloor", "nospace") + + mount_requirements = MOUNTED_FRAME_SIMFLOOR | MOUNTED_FRAME_NOSPACE + metal_sheets_refunded = 2 /obj/item/mounted/frame/apc_frame/try_build(turf/on_wall, mob/user) if(!..()) diff --git a/code/game/objects/items/mountable_frames/buttons_switches.dm b/code/game/objects/items/mountable_frames/buttons_switches.dm index 30b77ea2f33..dd57c87dc40 100644 --- a/code/game/objects/items/mountable_frames/buttons_switches.dm +++ b/code/game/objects/items/mountable_frames/buttons_switches.dm @@ -3,8 +3,9 @@ desc = "Used for repairing or building mass driver buttons" icon = 'icons/obj/objects.dmi' icon_state = "launcherbtt_frame" - mount_reqs = list("simfloor") - sheets_refunded = 1 + + mount_requirements = MOUNTED_FRAME_SIMFLOOR + metal_sheets_refunded = 1 /obj/item/mounted/frame/driver_button/do_build(turf/on_wall, mob/user) new /obj/machinery/driver_button(get_turf(user), get_dir(user, on_wall)) @@ -15,8 +16,9 @@ desc = "Used for repairing or building light switches" icon = 'icons/obj/power.dmi' icon_state = "light-p" - mount_reqs = list("simfloor", "nospace") - sheets_refunded = 1 + + mount_requirements = MOUNTED_FRAME_SIMFLOOR | MOUNTED_FRAME_NOSPACE + metal_sheets_refunded = 1 /obj/item/mounted/frame/light_switch/do_build(turf/on_wall, mob/user) new /obj/machinery/light_switch(get_turf(user), get_dir(user, on_wall)) diff --git a/code/game/objects/items/mountable_frames/extinguisher_frame.dm b/code/game/objects/items/mountable_frames/extinguisher_frame.dm index 5356a154a6d..b151cdb2ab3 100644 --- a/code/game/objects/items/mountable_frames/extinguisher_frame.dm +++ b/code/game/objects/items/mountable_frames/extinguisher_frame.dm @@ -3,7 +3,9 @@ desc = "Used for building extinguisher cabinet" icon = 'icons/obj/closet.dmi' icon_state = "extinguisher_frame" - mount_reqs = list("simfloor", "nospace") + + mount_requirements = MOUNTED_FRAME_SIMFLOOR | MOUNTED_FRAME_NOSPACE + metal_sheets_refunded = 2 /obj/item/mounted/frame/extinguisher/do_build(turf/on_wall, mob/user) new /obj/structure/extinguisher_cabinet/empty(get_turf(src), get_dir(user, on_wall)) diff --git a/code/game/objects/items/mountable_frames/fire_alarm.dm b/code/game/objects/items/mountable_frames/fire_alarm.dm index 46822e365b9..9238684af1f 100644 --- a/code/game/objects/items/mountable_frames/fire_alarm.dm +++ b/code/game/objects/items/mountable_frames/fire_alarm.dm @@ -3,7 +3,9 @@ desc = "Used for building Fire Alarms" icon = 'icons/obj/monitors.dmi' icon_state = "firealarm_frame" - mount_reqs = list("simfloor", "nospace") + + mount_requirements = MOUNTED_FRAME_SIMFLOOR | MOUNTED_FRAME_NOSPACE + metal_sheets_refunded = 2 /obj/item/mounted/frame/firealarm/do_build(turf/on_wall, mob/user) new /obj/machinery/firealarm(get_turf(src), get_dir(user, on_wall), 1) diff --git a/code/game/objects/items/mountable_frames/frames.dm b/code/game/objects/items/mountable_frames/frames.dm index 92bcf2d6a80..526c3eb5b5b 100644 --- a/code/game/objects/items/mountable_frames/frames.dm +++ b/code/game/objects/items/mountable_frames/frames.dm @@ -2,29 +2,37 @@ name = "mountable frame" desc = "Place it on a wall." origin_tech = "materials=1;engineering=1" - var/sheets_refunded = 2 - var/list/mount_reqs = list() //can contain simfloor, nospace. Used in try_build to see if conditions are needed, then met toolspeed = 1 usesound = 'sound/items/deconstruct.ogg' + ///amount of metal sheets returned upon the frame being wrenched + var/metal_sheets_refunded = 2 + ///amount of glass sheets returned upon the frame being wrenched + var/glass_sheets_refunded = 0 + ///The requirements for this frame to be placed, uses bit flags + var/mount_requirements = 0 + /obj/item/mounted/frame/attackby(obj/item/W, mob/user) ..() - if(istype(W, /obj/item/wrench) && sheets_refunded) - //new /obj/item/stack/sheet/metal( get_turf(src.loc), sheets_refunded ) - var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal(get_turf(src)) - M.amount = sheets_refunded + if(istype(W, /obj/item/wrench)) + var/turf/user_turf = get_turf(user) + if(metal_sheets_refunded) + new /obj/item/stack/sheet/metal(user_turf, metal_sheets_refunded) + if(glass_sheets_refunded) + new /obj/item/stack/sheet/glass(user_turf, glass_sheets_refunded) qdel(src) /obj/item/mounted/frame/try_build(turf/on_wall, mob/user) - if(..()) //if we pass the parent tests - var/turf/turf_loc = get_turf(user) + if(!..()) + return - if(src.mount_reqs.Find("simfloor") && !istype(turf_loc, /turf/simulated/floor)) - to_chat(user, "[src] cannot be placed on this spot.") + var/turf/build_turf = get_turf(user) + if((mount_requirements & MOUNTED_FRAME_SIMFLOOR) && !isfloorturf(build_turf)) + to_chat(user, "[src] cannot be placed on this spot.") + return + if(mount_requirements & MOUNTED_FRAME_NOSPACE) + var/area/my_area = get_area(build_turf) + if(!istype(my_area) || !my_area.requires_power || istype(my_area, /area/space)) + to_chat(user, "[src] cannot be placed in this area.") return - if(src.mount_reqs.Find("nospace")) - var/area/my_area = turf_loc.loc - if(!istype(my_area) || (my_area.requires_power == 0 || istype(my_area,/area/space))) - to_chat(user, "[src] cannot be placed in this area.") - return - return 1 + return TRUE diff --git a/code/game/objects/items/mountable_frames/intercom.dm b/code/game/objects/items/mountable_frames/intercom.dm index 95f21b5c2c9..b160a437f76 100644 --- a/code/game/objects/items/mountable_frames/intercom.dm +++ b/code/game/objects/items/mountable_frames/intercom.dm @@ -3,7 +3,9 @@ desc = "Used for building intercoms" icon = 'icons/obj/monitors.dmi' icon_state = "intercom-frame" - mount_reqs = list("simfloor", "nospace") + + mount_requirements = MOUNTED_FRAME_SIMFLOOR | MOUNTED_FRAME_NOSPACE + metal_sheets_refunded = 2 /obj/item/mounted/frame/intercom/do_build(turf/on_wall, mob/user) new /obj/item/radio/intercom(get_turf(src), get_dir(user, on_wall), 0) diff --git a/code/game/objects/items/mountable_frames/lights.dm b/code/game/objects/items/mountable_frames/lights.dm index d7954fd2704..7d31cf49a24 100644 --- a/code/game/objects/items/mountable_frames/lights.dm +++ b/code/game/objects/items/mountable_frames/lights.dm @@ -3,8 +3,11 @@ desc = "Used for building lights." icon = 'icons/obj/lighting.dmi' icon_state = "tube-construct-item" + + mount_requirements = MOUNTED_FRAME_SIMFLOOR + metal_sheets_refunded = 2 + ///specifies which type of light fixture this frame will build var/fixture_type = "tube" - mount_reqs = list("simfloor") /obj/item/mounted/frame/light_fixture/do_build(turf/on_wall, mob/user) to_chat(user, "You begin attaching [src] to \the [on_wall].") @@ -36,4 +39,4 @@ icon = 'icons/obj/lighting.dmi' icon_state = "bulb-construct-item" fixture_type = "bulb" - sheets_refunded = 1 + metal_sheets_refunded = 1 diff --git a/code/game/objects/items/mountable_frames/newscaster_frame.dm b/code/game/objects/items/mountable_frames/newscaster_frame.dm index 760e5c6147b..b8b39782bcd 100644 --- a/code/game/objects/items/mountable_frames/newscaster_frame.dm +++ b/code/game/objects/items/mountable_frames/newscaster_frame.dm @@ -3,26 +3,11 @@ desc = "Used to build newscasters, just secure to the wall." icon_state = "newscaster" item_state = "syringe_kit" + materials = list(MAT_METAL=14000, MAT_GLASS=8000) - mount_reqs = list("simfloor", "nospace") - -/obj/item/mounted/frame/newscaster_frame/try_build(turf/on_wall, mob/user) - if(..()) - var/turf/loc = get_turf(usr) - var/area/A = loc.loc - if(!istype(loc, /turf/simulated/floor)) - to_chat(usr, "Newscaster cannot be placed on this spot.") - return - if(A.requires_power == 0 || A.name == "Space") - to_chat(usr, "Newscaster cannot be placed in this area.") - return - - for(var/obj/machinery/newscaster/T in loc) - to_chat(usr, "There is another newscaster here.") - return - - return 1 - return + mount_requirements = MOUNTED_FRAME_SIMFLOOR | MOUNTED_FRAME_NOSPACE + metal_sheets_refunded = 7 + glass_sheets_refunded = 4 /obj/item/mounted/frame/newscaster_frame/do_build(turf/on_wall, mob/user) var/obj/machinery/newscaster/N = new /obj/machinery/newscaster(get_turf(src), get_dir(on_wall, user), 1)