diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bsdroppod.dm b/code/game/objects/structures/crates_lockers/closets/secure/bsdroppod.dm deleted file mode 100644 index b72d1d1482..0000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/bsdroppod.dm +++ /dev/null @@ -1,84 +0,0 @@ -//The "BDPtarget" temp visual is created by the expressconsole, which in turn makes two things: a falling droppod animation, and the droppod itself. - - -//------------------------------------BLUESPACE DROP POD-------------------------------------// -/obj/structure/closet/bsdroppod - name = "Supply Drop Pod" - desc = "A Nanotrasen supply drop pod." - icon = 'icons/obj/2x2.dmi' - icon_state = "BDP" - pixel_x = -16//2x2 sprite - pixel_y = -5 - layer = TABLE_LAYER//so that the crate inside doesn't appear underneath - allow_objects = TRUE - allow_dense = TRUE - delivery_icon = null - can_weld_shut = FALSE - armor = list("melee" = 30, "bullet" = 50, "laser" = 50, "energy" = 100, "bomb" = 90, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) - anchored = TRUE - anchorable = FALSE - var/datum/supply_order/SupplyOrder - -/obj/structure/closet/bsdroppod/Initialize(mapload, datum/supply_order/so) - . = ..() - SupplyOrder = so//uses Supply Order passed from expressconsole into BDPtarget - addtimer(CALLBACK(src, .proc/open), 30)//open 3seconds after appearing - -/obj/structure/closet/bsdroppod/update_icon() - cut_overlays() - if (opened) - add_overlay("BDP_open") - else - add_overlay("BDP_door") - -/obj/structure/closet/bsdroppod/toggle(mob/living/user) - return - -/obj/structure/closet/bsdroppod/open() - var/turf/T = get_turf(src) - opened = TRUE - SupplyOrder.generate(T)//not called during populateContents as supplyorder generation requires a turf - update_icon() - playsound(src, open_sound, 15, 1, -3) - -/obj/structure/closet/bsdroppod/Destroy()//make some sparks b4 deletion - QDEL_NULL(SupplyOrder) - return ..() - -//------------------------------------FALLING BLUESPACE DROP POD-------------------------------------// -/obj/effect/temp_visual/BDPfall - icon = 'icons/obj/2x2.dmi' - icon_state = "BDP_falling" - pixel_x = -16 - pixel_y = -5 - pixel_z = 200 - name = "Bluespace Drop Pod" - desc = "Get out of the way!" - layer = FLY_LAYER//that wasnt flying, that was falling with style! - randomdir = FALSE - -//------------------------------------TEMPORARY_VISUAL-------------------------------------// -/obj/effect/BDPtarget - icon = 'icons/mob/actions/actions_items.dmi' - icon_state = "sniper_zoom" - layer = PROJECTILE_HIT_THRESHHOLD_LAYER - light_range = 2 - var/obj/effect/temp_visual/fallingPod - -/obj/effect/BDPtarget/Initialize(mapload, datum/supply_order/SO) - . = ..() - addtimer(CALLBACK(src, .proc/beginLaunch, SO), 30)//wait 3 seconds - -/obj/effect/BDPtarget/proc/beginLaunch(datum/supply_order/SO) - fallingPod = new /obj/effect/temp_visual/BDPfall(drop_location()) - animate(fallingPod, pixel_z = 0, time = 3, easing = LINEAR_EASING)//make and animate a falling pod - addtimer(CALLBACK(src, .proc/endLaunch, SO), 3, TIMER_CLIENT_TIME)//fall 0.3seconds - -/obj/effect/BDPtarget/proc/endLaunch(datum/supply_order/SO) - new /obj/structure/closet/bsdroppod(drop_location(), SO)//pod is created - explosion(src,0,0,2, flame_range = 2) //explosion and camshake (shoutout to @cyberboss) - qdel(src) - -/obj/effect/BDPtarget/Destroy() - QDEL_NULL(fallingPod)//delete falling pod after animation's over - return ..() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/supplypod.dm b/code/game/objects/structures/crates_lockers/closets/secure/supplypod.dm new file mode 100644 index 0000000000..8a25e831f0 --- /dev/null +++ b/code/game/objects/structures/crates_lockers/closets/secure/supplypod.dm @@ -0,0 +1,118 @@ +//The "BDPtarget" temp visual is created by the expressconsole, which in turn makes two things: a falling droppod animation, and the droppod itself. + + +//------------------------------------SUPPLY POD-------------------------------------// +/obj/structure/closet/supplypod + name = "Supply Drop Pod" + desc = "A Nanotrasen supply drop pod." + icon = 'icons/obj/2x2.dmi' + icon_state = "supplypod" + pixel_x = -16//2x2 sprite + pixel_y = -5 + layer = TABLE_LAYER//so that the crate inside doesn't appear underneath + allow_objects = TRUE + allow_dense = TRUE + delivery_icon = null + can_weld_shut = FALSE + armor = list("melee" = 30, "bullet" = 50, "laser" = 50, "energy" = 100, "bomb" = 90, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) + anchored = TRUE + anchorable = FALSE + var/datum/supply_order/SupplyOrder + +/obj/structure/closet/supplypod/bluespacepod + name = "Bluespace Drop Pod" + desc = "A Nanotrasen Bluespace drop pod. Teleports back to Centcom after delivery." + icon_state = "bluespacepod" + +/obj/structure/closet/supplypod/Initialize(mapload, datum/supply_order/so) + . = ..() + SupplyOrder = so//uses Supply Order passed from expressconsole into BDPtarget + addtimer(CALLBACK(src, .proc/open), 30)//open 3seconds after appearing + +/obj/structure/closet/supplypod/update_icon() + cut_overlays() + if (opened) + add_overlay("[icon_state]_open") + else + add_overlay("[icon_state]_door") + +/obj/structure/closet/supplypod/bluespacepod/tool_interact(obj/item/W, mob/user) + return TRUE + +/obj/structure/closet/supplypod/toggle(mob/living/user) + return + +/obj/structure/closet/supplypod/open() + var/turf/T = get_turf(src) + opened = TRUE + SupplyOrder.generate(T)//not called during populateContents as supplyorder generation requires a turf + update_icon() + playsound(src, open_sound, 15, 1, -3) + if(istype(src,/obj/structure/closet/supplypod/bluespacepod)) + addtimer(CALLBACK(src, .proc/sparks), 30)//if bluespace, then 3 seconds after opening, make some sparks and delete + +/obj/structure/closet/supplypod/proc/sparks()//sparks cant be called from addtimer + do_sparks(5, TRUE, src) + qdel(src)//no need for QDEL_IN if we already have a timer + +/obj/structure/closet/supplypod/Destroy()//make some sparks b4 deletion + QDEL_NULL(SupplyOrder) + return ..() + +//------------------------------------FALLING SUPPLY POD-------------------------------------// +/obj/effect/temp_visual/DPfall + icon = 'icons/obj/2x2.dmi' + pixel_x = -16 + pixel_y = -5 + pixel_z = 200 + desc = "Get out of the way!" + layer = FLY_LAYER//that wasnt flying, that was falling with style! + randomdir = FALSE + +/obj/effect/temp_visual/DPfall/Initialize(var/dropLocation, var/podID) + if (podID == 1) + icon_state = "bluespacepod_falling" + name = "Bluespace Drop Pod" + else + icon_state = "supplypod_falling" + name = "Supply Drop Pod" + . = ..() + +//------------------------------------TEMPORARY_VISUAL-------------------------------------// +/obj/effect/DPtarget + icon = 'icons/mob/actions/actions_items.dmi' + icon_state = "sniper_zoom" + layer = PROJECTILE_HIT_THRESHHOLD_LAYER + light_range = 2 + var/obj/effect/temp_visual/fallingPod + +/obj/effect/DPtarget/Initialize(mapload, datum/supply_order/SO, var/podID) + . = ..() + addtimer(CALLBACK(src, .proc/beginLaunch, SO, podID), 30)//wait 3 seconds + +/obj/effect/DPtarget/proc/beginLaunch(datum/supply_order/SO, var/podID) + fallingPod = new /obj/effect/temp_visual/DPfall(drop_location(), podID) + animate(fallingPod, pixel_z = 0, time = 3, easing = LINEAR_EASING)//make and animate a falling pod + addtimer(CALLBACK(src, .proc/endLaunch, SO, podID), 3, TIMER_CLIENT_TIME)//fall 0.3seconds + +/obj/effect/DPtarget/proc/endLaunch(datum/supply_order/SO, var/podID) + if (podID == 1)//podID 1 = bluespace supplypod, podID 0 = standard supplypod + new /obj/structure/closet/supplypod/bluespacepod(drop_location(), SO)//pod is created + explosion(src,0,0,2, flame_range = 1) //explosion and camshake (shoutout to @cyberboss) + else + new /obj/structure/closet/supplypod(drop_location(), SO)//pod is created + explosion(src,0,0,2, flame_range = 3) //less advanced equipment than bluespace pod, so larger explosion when landing + qdel(src) + +/obj/effect/DPtarget/Destroy() + QDEL_NULL(fallingPod)//delete falling pod after animation's over + return ..() + +//------------------------------------UPGRADES-------------------------------------// +/obj/item/disk/cargo/bluespace_pod + name = "Bluespace Drop Pod Upgrade" + desc = "This disk provides a firmware update to the Express Supply Console, granting the use of Nanotrasen's Bluespace Drop Pods to the supply department." + icon = 'icons/obj/module.dmi' + icon_state = "cargodisk" + item_state = "card-id" + w_class = WEIGHT_CLASS_SMALL \ No newline at end of file diff --git a/code/modules/cargo/expressconsole.dm b/code/modules/cargo/expressconsole.dm index 1e2ed1d0bf..13dc742c55 100644 --- a/code/modules/cargo/expressconsole.dm +++ b/code/modules/cargo/expressconsole.dm @@ -12,7 +12,12 @@ var/message var/locked = TRUE var/list/meme_pack_data +<<<<<<< HEAD +======= + var/podID = 0//0 is your standard supply droppod (requires dissassembly after landing), 1 is the bluespace drop pod (teleports out after landing) + +>>>>>>> 9ec4f2f... Adds the Bluespace Drop Pod upgrade to the cargo express console (#34560) /obj/machinery/computer/cargo/express/Initialize() . = ..() packin_up() @@ -24,6 +29,12 @@ locked = !locked to_chat(user, "You [locked ? "lock" : "unlock"] the interface.") + else if(istype(W, /obj/item/disk/cargo/bluespace_pod)) + podID = 1//doesnt effect circuit board, so that reversal is possible + to_chat(user, "You insert the disk into [src], allowing for advanced supply delivery vehicles.") + qdel(W) + return TRUE + /obj/machinery/computer/cargo/express/emag_act(mob/living/user) if(emagged) return @@ -114,7 +125,7 @@ if(empty_turfs && empty_turfs.len) var/LZ = empty_turfs[rand(empty_turfs.len-1)] SSshuttle.points -= SO.pack.cost * 2 - new /obj/effect/BDPtarget(LZ, SO) + new /obj/effect/DPtarget(LZ, SO, podID) . = TRUE update_icon() else @@ -131,7 +142,7 @@ for(var/i in 1 to MAX_EMAG_ROCKETS) var/LZ = empty_turfs[rand(empty_turfs.len-1)] LAZYREMOVE(empty_turfs, LZ) - new /obj/effect/BDPtarget(LZ, SO) + new /obj/effect/DPtarget(LZ, SO, podID) . = TRUE update_icon() CHECK_TICK diff --git a/code/modules/research/designs/mining_designs.dm b/code/modules/research/designs/mining_designs.dm index d4c716f125..9ad13081eb 100644 --- a/code/modules/research/designs/mining_designs.dm +++ b/code/modules/research/designs/mining_designs.dm @@ -13,6 +13,16 @@ category = list("Mining Designs") departmental_flags = DEPARTMENTAL_FLAG_CARGO +/datum/design/bluespace_pod + name = "Supply Drop Pod Upgrade Disk" + desc = "Allows the Cargo Express Console to call down the Bluespace Drop Pod, greatly increasing user saftey."//who? + id = "bluespace_pod"//the coder reading this + build_type = PROTOLATHE + materials = list(MAT_GLASS = 1000) + build_path = /obj/item/disk/cargo/bluespace_pod + category = list("Mining Designs") + departmental_flags = DEPARTMENTAL_FLAG_CARGO + /datum/design/drill name = "Mining Drill" desc = "Yours is the drill that will pierce through the rock walls." diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 9c453486e4..d182843105 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -432,7 +432,7 @@ display_name = "Advanced Mining Technology" description = "Efficiency Level 127" //dumb mc references prereq_ids = list("basic_mining", "adv_engi", "adv_power", "adv_plasma") - design_ids = list("drill_diamond", "jackhammer", "hypermod", "plasmacutter", "plasmacutter_adv") + design_ids = list("drill_diamond", "jackhammer", "hypermod", "plasmacutter", "plasmacutter_adv", "bluespace_pod") research_cost = 2500 export_price = 5000 diff --git a/icons/obj/2x2.dmi b/icons/obj/2x2.dmi index 21adc379e9..246afe51e6 100644 Binary files a/icons/obj/2x2.dmi and b/icons/obj/2x2.dmi differ diff --git a/icons/obj/module.dmi b/icons/obj/module.dmi index f5bd612c22..037525150e 100644 Binary files a/icons/obj/module.dmi and b/icons/obj/module.dmi differ diff --git a/tgstation.dme b/tgstation.dme index fa513af6fe..ed718e3880 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -1112,7 +1112,6 @@ #include "code\game\objects\structures\crates_lockers\closets\utility_closets.dm" #include "code\game\objects\structures\crates_lockers\closets\wardrobe.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\bar.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\bsdroppod.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\cargo.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\engineering.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\freezer.dm" @@ -1123,6 +1122,7 @@ #include "code\game\objects\structures\crates_lockers\closets\secure\scientist.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\secure_closets.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\security.dm" +#include "code\game\objects\structures\crates_lockers\closets\secure\supplypod.dm" #include "code\game\objects\structures\crates_lockers\crates\bins.dm" #include "code\game\objects\structures\crates_lockers\crates\critter.dm" #include "code\game\objects\structures\crates_lockers\crates\large.dm"