diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index 94a247171c..2a8f455e64 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -67,6 +67,7 @@ #define ADMIN_PUNISHMENT_BSA "Bluespace Artillery Device" #define ADMIN_PUNISHMENT_FIREBALL "Fireball" #define ADMIN_PUNISHMENT_ROD "Immovable Rod" +#define ADMIN_PUNISHMENT_SUPPLYPOD "Supply Pod" #define AHELP_ACTIVE 1 #define AHELP_CLOSED 2 diff --git a/code/game/objects/structures/crates_lockers/closets/secure/supplypod.dm b/code/game/objects/structures/crates_lockers/closets/secure/supplypod.dm index ca64b7c537..c51f13bb12 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/supplypod.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/supplypod.dm @@ -1,6 +1,7 @@ //The "BDPtarget" temp visual is created by the expressconsole, which in turn makes two things: a falling droppod animation, and the droppod itself. #define POD_STANDARD 0 #define POD_BLUESPACE 1 +#define POD_CENTCOM 2 //------------------------------------SUPPLY POD-------------------------------------// /obj/structure/closet/supplypod @@ -18,17 +19,25 @@ 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/generated = FALSE var/datum/supply_order/SupplyOrder + var/atom/other_delivery /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) +/obj/structure/closet/supplypod/bluespacepod/centcompod + name = "CentCom Drop Pod" + desc = "A Nanotrasen Bluespace drop pod, this one has been marked with Central Command's designations. Teleports back to Centcom after delivery." + icon_state = "centcompod" + +/obj/structure/closet/supplypod/Initialize(mapload, var/SO) . = ..() - SupplyOrder = so//uses Supply Order passed from expressconsole into BDPtarget + if(istype(SO, /datum/supply_order)) + SupplyOrder = SO//uses Supply Order passed from expressconsole into BDPtarget + else + other_delivery = SO//if the object is not a supply order, we force the object in the pod addtimer(CALLBACK(src, .proc/open), 30)//open 3seconds after appearing /obj/structure/closet/supplypod/update_icon() @@ -47,9 +56,10 @@ /obj/structure/closet/supplypod/open() var/turf/T = get_turf(src) opened = TRUE - if(!generated) - generated = TRUE + if(SupplyOrder) SupplyOrder.generate(T)//not called during populateContents as supplyorder generation requires a turf + if(other_delivery) + new other_delivery(T) update_icon() playsound(src, open_sound, 15, 1, -3) if(istype(src,/obj/structure/closet/supplypod/bluespacepod)) @@ -66,21 +76,24 @@ //------------------------------------FALLING SUPPLY POD-------------------------------------// /obj/effect/temp_visual/DPfall icon = 'icons/obj/2x2.dmi' - icon_state = "supplypod_falling" 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 + icon_state = "supplypod_falling" /obj/effect/temp_visual/DPfall/Initialize(var/dropLocation, var/podID) - if (podID == POD_BLUESPACE) + if (podID == POD_STANDARD) + icon_state = "supplypod_falling" + name = "Supply Drop Pod" + else if (podID == POD_BLUESPACE) icon_state = "bluespacepod_falling" name = "Bluespace Drop Pod" else - icon_state = "supplypod_falling" - name = "Supply Drop Pod" + icon_state = "centcompod_falling" + name = "CentCom Drop Pod" . = ..() //------------------------------------TEMPORARY_VISUAL-------------------------------------// @@ -91,22 +104,34 @@ light_range = 2 var/obj/effect/temp_visual/fallingPod -/obj/effect/DPtarget/Initialize(mapload, datum/supply_order/SO, var/podID) +/obj/effect/DPtarget/Initialize(mapload, var/SO, var/podID) . = ..() - addtimer(CALLBACK(src, .proc/beginLaunch, SO, podID), podID == POD_BLUESPACE ? 15 : 30)//standard pods take 3 seconds to come in, bluespace pods take 1.5 + var/delayTime = 0 + switch(podID) + if(POD_STANDARD) + delayTime = 30 + if(POD_BLUESPACE) + delayTime = 15 + if(POD_CENTCOM) + delayTime = 1 -/obj/effect/DPtarget/proc/beginLaunch(datum/supply_order/SO, var/podID) + addtimer(CALLBACK(src, .proc/beginLaunch, SO, podID), delayTime)//standard pods take 3 seconds to come in, bluespace pods take 1.5 + +/obj/effect/DPtarget/proc/beginLaunch(var/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 == POD_BLUESPACE) +/obj/effect/DPtarget/proc/endLaunch(var/SO, var/podID) + if (podID == POD_STANDARD) + 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 + else if (podID == POD_BLUESPACE) 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 + new /obj/structure/closet/supplypod/bluespacepod/centcompod(drop_location(), SO) + explosion(src,0,0,2, flame_range = 1) qdel(src) /obj/effect/DPtarget/Destroy() @@ -120,4 +145,4 @@ icon = 'icons/obj/module.dmi' icon_state = "cargodisk" item_state = "card-id" - w_class = WEIGHT_CLASS_SMALL + w_class = WEIGHT_CLASS_SMALL \ No newline at end of file diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index be0b9d04bb..fb5111e88e 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -1277,7 +1277,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits if(!check_rights(R_ADMIN)) return - var/list/punishment_list = list(ADMIN_PUNISHMENT_LIGHTNING, ADMIN_PUNISHMENT_BRAINDAMAGE, ADMIN_PUNISHMENT_GIB, ADMIN_PUNISHMENT_BSA, ADMIN_PUNISHMENT_FIREBALL, ADMIN_PUNISHMENT_ROD) + var/list/punishment_list = list(ADMIN_PUNISHMENT_LIGHTNING, ADMIN_PUNISHMENT_BRAINDAMAGE, ADMIN_PUNISHMENT_GIB, ADMIN_PUNISHMENT_BSA, ADMIN_PUNISHMENT_FIREBALL, ADMIN_PUNISHMENT_ROD, ADMIN_PUNISHMENT_SUPPLYPOD) var/punishment = input("Choose a punishment", "DIVINE SMITING") as null|anything in punishment_list @@ -1305,6 +1305,22 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits var/turf/startT = spaceDebrisStartLoc(startside, T.z) var/turf/endT = spaceDebrisFinishLoc(startside, T.z) new /obj/effect/immovablerod(startT, endT,target) + if(ADMIN_PUNISHMENT_SUPPLYPOD) + ///////load the supply pod up with something! + var/target_path = input(usr,"Enter typepath of an atom you'd like to send with the pod (type \"empty\" to send an empty pod):" ,"Typepath","/obj/item/reagent_containers/food/snacks/grown/harebell") as null|text + if (isnull(target_path)) + return + if (target_path == "empty")//if you type "abort", spawn an empty pod + new /obj/effect/DPtarget(get_turf(target), null, POD_CENTCOM) + return + var/delivery = text2path(target_path) + if(!ispath(delivery)) + delivery = pick_closest_path(target_path) + if(!delivery) + delivery = /obj/item/reagent_containers/food/snacks/grown/harebell + alert("That path is not allowed.") + //send the pod + new /obj/effect/DPtarget(get_turf(target), delivery, POD_CENTCOM) var/msg = "[key_name_admin(usr)] punished [key_name_admin(target)] with [punishment]." message_admins(msg) diff --git a/icons/obj/2x2.dmi b/icons/obj/2x2.dmi index 246afe51e6..a72a86f3d8 100644 Binary files a/icons/obj/2x2.dmi and b/icons/obj/2x2.dmi differ