diff --git a/baystation12.dme b/baystation12.dme index 1bb34a9363..a00b0a2cd3 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -401,6 +401,7 @@ #include "code\game\machinery\status_display_ai.dm" #include "code\game\machinery\suit_storage_unit.dm" #include "code\game\machinery\supply_display.dm" +#include "code\game\machinery\supplybeacon.dm" #include "code\game\machinery\syndicatebeacon.dm" #include "code\game\machinery\teleporter.dm" #include "code\game\machinery\turret_control.dm" diff --git a/code/game/machinery/supplybeacon.dm b/code/game/machinery/supplybeacon.dm new file mode 100644 index 0000000000..60415af371 --- /dev/null +++ b/code/game/machinery/supplybeacon.dm @@ -0,0 +1,117 @@ +// Used to deploy the bacon. +/obj/item/supply_beacon + name = "inactive supply beacon" + icon = 'icons/obj/supplybeacon.dmi' + icon_state = "beacon" + var/deploy_path = /obj/machinery/power/supply_beacon + var/deploy_time = 30 + +/obj/item/supply_beacon/supermatter + name = "inactive supermatter supply beacon" + deploy_path = /obj/machinery/power/supply_beacon/supermatter + +/obj/item/supply_beacon/attack_self(var/mob/user) + user.visible_message("\The [user] begins setting up \the [src].") + if(!do_after(user, deploy_time)) + return + var/obj/S = new deploy_path(get_turf(user)) + user.visible_message("\The [user] deploys \the [S].") + user.unEquip(src) + qdel(src) + +/obj/machinery/power/supply_beacon + name = "supply beacon" + desc = "A bulky moonshot supply beacon. Someone has been messing with the wiring." + icon = 'icons/obj/supplybeacon.dmi' + icon_state = "beacon" + + anchored = 0 + density = 1 + layer = MOB_LAYER - 0.1 + stat = 0 + + var/target_drop_time + var/drop_delay = 450 + var/expended + var/drop_type + +/obj/machinery/power/supply_beacon/New() + ..() + if(!drop_type) drop_type = pick(supply_drop_random_loot_types) + +/obj/machinery/power/supply_beacon/supermatter + name = "supermatter supply beacon" + drop_type = "supermatter" + +/obj/machinery/power/supply_beacon/attackby(var/obj/item/weapon/W, var/mob/user) + if(!use_power && istype(W, /obj/item/weapon/wrench)) + if(!anchored && !connect_to_network()) + user << "This device must be placed over an exposed cable." + return + anchored = !anchored + user.visible_message("\The [user] [anchored ? "secures" : "unsecures"] \the [src].") + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + return + return ..() + +/obj/machinery/power/supply_beacon/attack_hand(var/mob/user) + + if(expended) + use_power = 0 + user << "\The [src] has used up its charge." + return + + if(anchored) + return use_power ? deactivate(user) : activate(user) + else + user << "You need to secure the beacon with a wrench first!" + return + +/obj/machinery/power/supply_beacon/attack_ai(var/mob/user) + if(user.Adjacent(src)) + attack_hand(user) + +/obj/machinery/power/supply_beacon/proc/activate(var/mob/user) + if(expended) + return + if(surplus() < 500) + if(user) user << "The connected wire doesn't have enough current." + return + set_light(3, 3, "#00CCAA") + icon_state = "beacon_active" + use_power = 1 + machines |= src + if(user) user << "You activate the beacon. The supply drop will be dispatched soon." + +/obj/machinery/power/supply_beacon/proc/deactivate(var/mob/user, var/permanent) + if(permanent) + expended = 1 + icon_state = "beacon_depleted" + else + icon_state = "beacon" + set_light(0) + use_power = 0 + target_drop_time = null + if(user) user << "You deactivate the beacon." + +/obj/machinery/power/supply_beacon/Destroy() + if(use_power) + deactivate() + ..() + +/obj/machinery/power/supply_beacon/process() + if(!use_power || expended) + return PROCESS_KILL + if(draw_power(500) < 500) + deactivate() + return + if(!target_drop_time) + target_drop_time = world.time + drop_delay + else if(world.time >= target_drop_time) + deactivate(permanent = 1) + var/drop_x = src.x-2 + var/drop_y = src.y-2 + var/drop_z = src.z + command_announcement.Announce("Nyx Rapid Fabrication priority supply request #[rand(1000,9999)]-[rand(100,999)] recieved. Shipment dispatched via ballistic supply pod for immediate delivery. Have a nice day.", "Thank You For Your Patronage") + spawn(rand(100,300)) + new /datum/random_map/droppod/supply(null, drop_x, drop_y, drop_z, supplied_drop = drop_type) // Splat. diff --git a/code/game/turfs/simulated/wall_types.dm b/code/game/turfs/simulated/wall_types.dm index 9a15491990..46498d9be5 100644 --- a/code/game/turfs/simulated/wall_types.dm +++ b/code/game/turfs/simulated/wall_types.dm @@ -41,3 +41,5 @@ ..(newloc,"voxalloy") /turf/simulated/wall/voxshuttle/attackby() return +/turf/simulated/wall/titanium/New(var/newloc) + ..(newloc,"titanium") diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index 153b4313c4..4e14143fa2 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -346,6 +346,14 @@ var/list/name_to_material stack_origin_tech = list(TECH_MATERIAL = 2) composite_material = list(DEFAULT_WALL_MATERIAL = 3750, "platinum" = 3750) //todo +/material/plasteel/titanium + name = "titanium" + stack_type = null + icon_base = "metal" + door_icon_base = "metal" + icon_colour = "#D1E6E3" + icon_reinf = "reinf_metal" + /material/glass name = "glass" stack_type = /obj/item/stack/material/glass diff --git a/code/modules/random_map/drop/droppod.dm b/code/modules/random_map/drop/droppod.dm index c2018659b9..985a743851 100644 --- a/code/modules/random_map/drop/droppod.dm +++ b/code/modules/random_map/drop/droppod.dm @@ -3,6 +3,7 @@ #define SD_DOOR_TILE 2 #define SD_EMPTY_TILE 3 #define SD_SUPPLY_TILE 7 + var/global/list/supply_drop_random_loot_types = list( "guns", "seeds", @@ -23,15 +24,17 @@ var/global/list/supply_drop_random_loot_types = list( limit_y = 3 preserve_map = 0 - wall_type = /turf/simulated/wall/voxshuttle + wall_type = /turf/simulated/wall/titanium floor_type = /turf/simulated/floor/engine var/list/supplied_drop_types = list() var/door_type = /obj/structure/droppod_door var/drop_type = /mob/living/simple_animal/parrot + + var/has_pod_doors var/auto_open_doors - var/placement_explosion_dev = 2 - var/placement_explosion_heavy = 4 + var/placement_explosion_dev = 1 + var/placement_explosion_heavy = 2 var/placement_explosion_light = 6 var/placement_explosion_flash = 4 @@ -96,7 +99,6 @@ var/global/list/supply_drop_random_loot_types = list( if(istype(T)) explosion(T, placement_explosion_dev, placement_explosion_heavy, placement_explosion_light, placement_explosion_flash) sleep(5) // Let the explosion finish proccing before we ChangeTurf(), otherwise it might destroy our spawned objects. - sleep(-1) return ..() /datum/random_map/droppod/get_appropriate_path(var/value) @@ -104,6 +106,8 @@ var/global/list/supply_drop_random_loot_types = list( return floor_type else if(value == SD_WALL_TILE) return wall_type + else if(value == SD_DOOR_TILE && !has_pod_doors) + return wall_type return null // Pods are circular. Get the direction this object is facing from the center of the pod. @@ -132,7 +136,7 @@ var/global/list/supply_drop_random_loot_types = list( qdel(A) // Also spawn doors and loot. - if(value == SD_DOOR_TILE) + if(value == SD_DOOR_TILE && has_pod_doors) var/obj/structure/S = new door_type(T, auto_open_doors) S.set_dir(spawn_dir) @@ -242,4 +246,4 @@ var/global/list/supply_drop_random_loot_types = list( else return - new /datum/random_map/droppod(null, usr.x-2, usr.y-2, usr.z, supplied_drops = spawned_mobs, automated = automatic_pod) \ No newline at end of file + new /datum/random_map/droppod(null, usr.x-1, usr.y-1, usr.z, supplied_drops = spawned_mobs, automated = automatic_pod) \ No newline at end of file diff --git a/code/modules/random_map/drop/supply.dm b/code/modules/random_map/drop/supply.dm index 101f849205..fa370bc4b9 100644 --- a/code/modules/random_map/drop/supply.dm +++ b/code/modules/random_map/drop/supply.dm @@ -3,8 +3,6 @@ limit_x = 5 limit_y = 5 - placement_explosion_dev = 3 - placement_explosion_heavy = 5 placement_explosion_light = 7 placement_explosion_flash = 5 @@ -28,6 +26,10 @@ drop_type = pick(supply_drop_random_loot_types) switch(drop_type) + + if("supermatter") + new /obj/machinery/power/supermatter(T) + if("lasers") var/obj/structure/largecrate/C = new(T) new /obj/item/weapon/gun/energy/laser(C) diff --git a/icons/obj/supplybeacon.dmi b/icons/obj/supplybeacon.dmi new file mode 100644 index 0000000000..9734d85458 Binary files /dev/null and b/icons/obj/supplybeacon.dmi differ