From a8b801b3776693ef63f76a571e47a435eea367d3 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Mon, 3 Aug 2015 22:14:20 +0930 Subject: [PATCH] Added supply beacon. --- baystation12.dme | 1 + code/game/machinery/supplybeacon.dm | 117 ++++++++++++++++++++++++ code/game/turfs/simulated/wall_types.dm | 2 + code/modules/materials/materials.dm | 8 ++ code/modules/random_map/drop/droppod.dm | 16 ++-- code/modules/random_map/drop/supply.dm | 6 +- icons/obj/supplybeacon.dmi | Bin 0 -> 3853 bytes 7 files changed, 142 insertions(+), 8 deletions(-) create mode 100644 code/game/machinery/supplybeacon.dm create mode 100644 icons/obj/supplybeacon.dmi 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 0000000000000000000000000000000000000000..9734d85458774fe8c28ff4139a37a24c9614a13b GIT binary patch literal 3853 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 aN|gKq_)W@IY7qRt1<;qw3`-0g9{dZa__NCZ literal 0 HcmV?d00001