[MDB IGNORE] Adds summon beacons for command pets, secmed locker, and commandrobes (#14658)

* command beacons

* readme

* secmedic landmark

* template change

* Revert "secmedic landmark"

This reverts commit fb0b4cf88b69db6cfe88ca81fa7265521fb5952d.

* Revert "template change"

This reverts commit fd45f05f2e4f471745c85458ceab7ec1bcaf8b2d.

* Revert "Revert "secmedic landmark""

This reverts commit c50dd63f9c481641c1178c43f4e0c3e9992ec555.

* templates: attempt 2

* Update map_resetting.md

* Apply suggestions from code review

Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>

* clean them out of blueshift

* delete advanced_choice_beacon.dm

* missed

* wew

* radial support

Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
This commit is contained in:
Zonespace
2022-07-02 00:52:30 +01:00
committed by GitHub
co-authored by Tom
parent a5048dd7b4
commit d44ded228b
15 changed files with 592 additions and 1317 deletions
@@ -305,7 +305,6 @@
/turf/open/floor/iron,
/area/station/engineering/main)
"adB" = (
/obj/structure/closet/secure_closet/security_medic,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/turf/open/floor/carpet/red,
/area/station/security/medical)
@@ -8981,7 +8980,6 @@
"cuc" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
/mob/living/simple_animal/pet/dog/markus,
/obj/machinery/holopad,
/turf/open/floor/iron,
/area/station/cargo/office)
@@ -18828,7 +18826,6 @@
"fSO" = (
/obj/structure/flora/bush/fullgrass,
/obj/structure/flora/bush/lavendergrass,
/mob/living/simple_animal/pet/bumbles,
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{
dir = 5
},
@@ -72879,7 +72876,6 @@
/turf/open/floor/iron,
/area/station/commons/storage/tools)
"xWK" = (
/mob/living/simple_animal/pet/poppy,
/obj/effect/turf_decal/tile/yellow{
dir = 1
},
@@ -45387,7 +45387,7 @@
/obj/effect/turf_decal/siding/wood{
dir = 8
},
/obj/machinery/vending/access/command,
/obj/machinery/vending/autodrobe/all_access,
/turf/open/floor/iron/dark,
/area/station/command/meeting_room/council)
"pqB" = (
File diff suppressed because it is too large Load Diff
+11 -2
View File
@@ -5,6 +5,7 @@
## Map resetting /TG/ maps
TG maps do periodically need to be reset to what they are upstream.
In the event some major repathing occurs, which would otherwise render the map useless, the maps will need to be reset. Some **CRITICAL** things need to be brought over. These **CRITICAL** things are necessary for the flow of the game and round, in other words, they're **ROUND CRITICAL**.
@@ -24,6 +25,16 @@ Round Critical items are rooms/spawners/objs that are **REQUIRED** for the flow
- Arrival Shuttle Console
## Critical Changes:
Critical changes are changes that **NEED** be reset during the main reset PR.
- Security:
- - Add Ammo Workbench
- - Add Gun Vendor
- Armory:
- - Replace Disablers With Smartgun
- - Replace Shotguns With Shotgun Spawners
- - Replace Energy Guns With MCRS
- - Replace Laser Guns With CMGs
- Central Command Ferry Hangar (inside Arrival area)
### Security
@@ -52,8 +63,6 @@ These are rooms/spawners/objs that aren't really required for the flow of the ro
- Xenoarch Base (Lavaland)
- Modular pets: E-N (Robotics), Poppy (Engineering), Bumbles (Hydroponics) and Markus (Cargo)
- Drone Dispensers added to all maps
- Cryopods (inside Recreational/Dormitory area)
@@ -30,3 +30,4 @@
new /obj/item/gun/ballistic/rifle/boltaction/brand_new/quartermaster(src) // SKYRAT EDIT - The QM's 'special' head item. It spawns loaded, but you have to find more ammo if you run out and get ready to manually load rounds in!
new /obj/item/cargo_teleporter(src) // SKYRAT EDIT - Adds a cargo teleporter to QM locker, so they can intice others to research it
new /obj/item/clothing/glasses/hud/gun_permit/sunglasses(src) //SKYRAT EDIT - GUN CARGO
new /obj/item/summon_beacon/markus(src) // SKYRAT EDIT ADDITION
@@ -22,6 +22,7 @@
new /obj/item/storage/box/gas_miner_beacons(src) // SKYRAT EDIT ADDITION
new /obj/item/construction/plumbing/engineering(src) //SKYRAT EDIT ADDITION
new /obj/item/circuitboard/machine/rodstopper(src) //SKYRAT EDIT ADDITION
new /obj/item/summon_beacon/poppy(src) //SKYRAT EDIT ADDITION
/obj/structure/closet/secure_closet/engineering_electrical
name = "electrical supplies locker"
@@ -20,6 +20,7 @@
new /obj/item/circuitboard/machine/techfab/department/science(src)
new /obj/item/storage/photo_album/rd(src)
new /obj/item/storage/box/skillchips/science(src)
new /obj/item/summon_beacon/borgi(src) // SKYRAT EDIT ADDITION
@@ -20,6 +20,7 @@
new /obj/item/storage/box/gunset/pdh_captain(src) // SKYRAT EDIT ADDITION
new /obj/item/door_remote/captain(src)
new /obj/item/storage/photo_album/captain(src)
new /obj/item/summon_beacon/command_drobe(src) // SKYRAT EDIT ADDITION
/obj/structure/closet/secure_closet/hop
name = "\proper head of personnel's locker"
@@ -44,6 +45,7 @@
new /obj/item/circuitboard/machine/techfab/department/service(src)
new /obj/item/storage/photo_album/hop(src)
new /obj/item/storage/lockbox/medal/hop(src)
new /obj/item/summon_beacon/bumbles(src) // SKYRAT EDIT ADDITION
/obj/structure/closet/secure_closet/hos
name = "\proper head of security's locker"
@@ -1,80 +0,0 @@
/obj/item/advanced_choice_beacon
name = "advanced choice beacon"
desc = "A beacon that will send whatever your heart desires, providing Nanotrasen approves it."
icon = 'icons/obj/device.dmi'
icon_state = "gangtool-red"
inhand_icon_state = "radio"
var/list/possible_choices = list()
var/pod_style = STYLE_CENTCOM
/obj/item/advanced_choice_beacon/attack_self(mob/user, modifiers)
if(canUseBeacon(user))
display_options(user)
/obj/item/advanced_choice_beacon/proc/canUseBeacon(mob/living/user)
if(user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return TRUE
else
playsound(src, 'sound/machines/buzz-sigh.ogg', 40, TRUE)
return FALSE
/obj/item/advanced_choice_beacon/proc/display_options(mob/user)
var/list/radial_build = get_available_options()
if(!radial_build)
return
var/chosen_option = show_radial_menu(user, src, radial_build, radius = 40, tooltips = TRUE)
if(!chosen_option)
return
podspawn(list(
"target" = get_turf(src),
"style" = pod_style,
"spawn" = chosen_option,
))
qdel(src)
/obj/item/advanced_choice_beacon/proc/get_available_options()
var/list/options = list()
for(var/iterating_choice in possible_choices)
var/obj/our_object = iterating_choice
var/datum/radial_menu_choice/option = new
option.image = image(icon = initial(our_object.icon), icon_state = initial(our_object.icon_state))
option.info = span_boldnotice("[initial(our_object.desc)]")
options[our_object] = option
sort_list(options)
return options
/obj/item/advanced_choice_beacon/exp_corps
name = "vanguard operatives supply beacon"
desc = "Used to request your job supplies, use in hand to do so!"
possible_choices = list(
/obj/structure/closet/crate/secure/exp_corps/marksman,
/obj/structure/closet/crate/secure/exp_corps/pointman,
/obj/structure/closet/crate/secure/exp_corps/field_medic,
/obj/structure/closet/crate/secure/exp_corps/combat_tech
)
/obj/item/advanced_choice_beacon/exp_corps/get_available_options()
var/list/options = list()
for(var/iterating_choice in possible_choices)
var/obj/structure/closet/crate/secure/exp_corps/our_crate = iterating_choice
var/datum/radial_menu_choice/option = new
option.image = image(icon = initial(our_crate.icon), icon_state = initial(our_crate.icon_state))
option.info = span_boldnotice("[initial(our_crate.loadout_desc)]")
options[our_crate] = option
sort_list(options)
return options
+2 -2
View File
@@ -128,7 +128,7 @@
/obj/item/clothing/suit/armor/vest/alt,
/obj/item/clothing/suit/armor/vest/alt)
crate_name = "armor crate"
/datum/supply_pack/security/helmets
name = "Helmets Crate"
desc = "Contains three standard-issue brain buckets. Requires Security access to open."
@@ -222,7 +222,7 @@
name = "Gas Miner Delivery Beacon Crate"
desc = "Contains a single gas miner delivery beacon, for the ordering of one gas miner."
access = ACCESS_ATMOSPHERICS
contains = list(/obj/item/gas_miner_beacon)
contains = list(/obj/item/summon_beacon/gas_miner)
cost = CARGO_CRATE_VALUE * 50
crate_name = "gas miner delivery beacon crate"
crate_type = /obj/structure/closet/crate/secure/engineering
@@ -47,7 +47,7 @@
box = /obj/item/storage/box/survival/expeditionary_corps
backpack_contents = list(/obj/item/advanced_choice_beacon/exp_corps)
backpack_contents = list(/obj/item/summon_beacon/vanguard)
id = /obj/item/card/id/advanced/silver/exp_corps
id_trim = /datum/id_trim/job/expeditionary_trooper
@@ -1,107 +0,0 @@
/obj/item/gas_miner_beacon
name = "gas miner beacon"
desc = "Once a gas miner type is selected, delivers a gas miner to the target location."
icon = 'icons/obj/device.dmi'
icon_state = "gangtool-blue"
inhand_icon_state = "radio"
w_class = WEIGHT_CLASS_SMALL
/// How many charges the beacon has left
var/uses = 1
/// A list of allowed areas that a miner can be spawned in
var/static/list/allowed_areas = list(
/area/station/engineering/atmos,
/area/station/engineering/atmospherics_engine,
)
/// A list of possible gas miners available to spawn
var/static/list/miners = list(
/obj/machinery/atmospherics/miner/carbon_dioxide,
/obj/machinery/atmospherics/miner/n2o,
/obj/machinery/atmospherics/miner/nitrogen,
/obj/machinery/atmospherics/miner/oxygen,
/obj/machinery/atmospherics/miner/plasma,
)
/// The currently selected gas miner, if any
var/obj/machinery/atmospherics/miner/selected_miner = null
/obj/item/gas_miner_beacon/examine()
. = ..()
. += span_warning("Caution: Only works in atmospherics areas.")
. += span_notice("Currently selected: [selected_miner ? selected_miner.name : "None"].")
/obj/item/gas_miner_beacon/attack_self(mob/user)
if(!can_use_beacon(user))
return
show_options(user)
/obj/item/gas_miner_beacon/proc/can_use_beacon(mob/living/user)
if(user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return TRUE
else
playsound(src, 'sound/machines/buzz-sigh.ogg', 40, TRUE)
return FALSE
/obj/item/gas_miner_beacon/proc/generate_display_names()
var/list/miner_list = list()
for(var/obj/machinery/atmospherics/miner/iterated_miner as anything in miners)
miner_list[initial(iterated_miner.name)] = iterated_miner
return miner_list
/obj/item/gas_miner_beacon/proc/show_options(mob/user)
var/list/display_names = generate_display_names()
if(!length(display_names))
return
var/choice = tgui_input_list(user, "Choose a miner", "Miner selection", display_names)
if(isnull(choice))
return
if(isnull(display_names[choice]))
return
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
selected_miner = display_names[choice]
/obj/item/gas_miner_beacon/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
if(!selected_miner)
balloon_alert(user, "no miner selected!")
return
var/turf/target_turf = get_turf(target)
var/area/target_area = get_area(target)
if(!target_turf || !target_area || !is_type_in_list(target_area, allowed_areas))
balloon_alert(user, "can't call here!")
return
var/confirmed = tgui_alert(user, "Are you sure you want to call it here?", "Confirmation", list("Yes", "No"))
if(confirmed != "Yes")
return
podspawn(list(
"target" = get_turf(target),
"path" = /obj/structure/closet/supplypod/podspawn/no_return,
"style" = STYLE_CENTCOM,
"spawn" = selected_miner,
))
if(ishuman(user))
var/mob/living/carbon/human/human_user = user
if(istype(human_user.ears, /obj/item/radio/headset))
to_chat(user, span_notice("You hear something crackle in your ears for a moment before a voice speaks. \
\"Please stand by for a message from Central Command. Message as follows: \
[span_bold("Request received. Your miner is inbound, please stand back from the landing site.")] \
Message ends.\""))
uses--
if(!uses)
qdel(src)
else
balloon_alert(user, "[uses] use[uses > 1 ? "s" : ""] left!")
/obj/structure/closet/supplypod/podspawn/no_return
bluespace = FALSE
/obj/item/storage/box/gas_miner_beacons
name = "box of gas miner delivery beacons"
desc = "Contains two beacons for delivery of atmospheric gas miners."
/obj/item/storage/box/gas_miner_beacons/PopulateContents()
new /obj/item/gas_miner_beacon(src)
new /obj/item/gas_miner_beacon(src)
@@ -0,0 +1,252 @@
/obj/item/summon_beacon
name = "summoner beacon"
desc = "Summons a thing. Probably shouldn't use this one, though."
icon = 'icons/obj/device.dmi'
icon_state = "gangtool-blue"
inhand_icon_state = "radio"
w_class = WEIGHT_CLASS_SMALL
/// How many uses the beacon has left
var/uses = 1
/// A list of allowed areas that the atom can be spawned in
var/list/allowed_areas = list(
/area,
)
/// A list of possible atoms available to spawn
var/list/selectable_atoms = list(
/obj/item/summon_beacon,
)
/// The currently selected atom, if any
var/atom/selected_atom = null
/// Descriptor of what area it should work in
var/area_string = "any"
/// If the supply pod should stay or not
var/supply_pod_stay = FALSE
/obj/item/summon_beacon/examine()
. = ..()
. += span_warning("Caution: Only works in [area_string].")
. += span_notice("Currently selected: [selected_atom ? selected_atom.name : "None"].")
/obj/item/summon_beacon/attack_self(mob/user)
if(!can_use_beacon(user))
return
if(length(selectable_atoms) == 1)
selected_atom = selectable_atoms[1]
return
show_options(user)
/obj/item/summon_beacon/proc/can_use_beacon(mob/living/user)
if(user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return TRUE
else
playsound(src, 'sound/machines/buzz-sigh.ogg', 40, TRUE)
return FALSE
/obj/item/summon_beacon/proc/generate_display_names()
var/list/atom_list = list()
for(var/atom/iterated_atom as anything in selectable_atoms)
atom_list[initial(iterated_atom.name)] = iterated_atom
return atom_list
/obj/item/summon_beacon/proc/show_options(mob/user)
var/list/radial_build = get_available_options()
if(!radial_build)
return
selected_atom = show_radial_menu(user, src, radial_build, radius = 40, tooltips = TRUE)
/obj/item/summon_beacon/proc/get_available_options()
var/list/options = list()
for(var/iterating_choice in selectable_atoms)
var/obj/our_object = iterating_choice
var/datum/radial_menu_choice/option = new
option.image = image(icon = initial(our_object.icon), icon_state = initial(our_object.icon_state))
option.info = span_boldnotice("[initial(our_object.desc)]")
options[our_object] = option
sort_list(options)
return options
/obj/item/summon_beacon/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
if(!selected_atom)
balloon_alert(user, "no choice selected!")
return
var/turf/target_turf = get_turf(target)
var/area/target_area = get_area(target)
if(!target_turf || !target_area || !is_type_in_list(target_area, allowed_areas))
balloon_alert(user, "can't call here!")
return
var/confirmed = tgui_alert(user, "Are you sure you want to call [selected_atom.name] here?", "Confirmation", list("Yes", "No"))
if(confirmed != "Yes")
return
podspawn(list(
"target" = get_turf(target),
"path" = supply_pod_stay ? /obj/structure/closet/supplypod/podspawn/no_return : /obj/structure/closet/supplypod/podspawn,
"style" = STYLE_CENTCOM,
"spawn" = selected_atom,
))
if(ishuman(user))
var/mob/living/carbon/human/human_user = user
if(istype(human_user.ears, /obj/item/radio/headset))
to_chat(user, span_notice("You hear something crackle in your ears for a moment before a voice speaks. \
\"Please stand by for a message from Central Command. Message as follows: \
[span_bold("Request received. Pod inbound, please stand back from the landing site.")] \
Message ends.\""))
uses--
if(!uses)
qdel(src)
else
balloon_alert(user, "[uses] use[uses > 1 ? "s" : ""] left!")
// Misc stuff here
/obj/structure/closet/supplypod/podspawn/no_return
bluespace = FALSE
/obj/item/storage/box/gas_miner_beacons
name = "box of gas miner delivery beacons"
desc = "Contains two beacons for delivery of atmospheric gas miners."
/obj/item/storage/box/gas_miner_beacons/PopulateContents()
new /obj/item/summon_beacon/gas_miner(src)
new /obj/item/summon_beacon/gas_miner(src)
// Actual beacons start here
/obj/item/summon_beacon/gas_miner
name = "gas miner beacon"
desc = "Once a gas miner type is selected, delivers a gas miner to the target location."
allowed_areas = list(
/area/station/engineering/atmos,
/area/station/engineering/atmospherics_engine,
)
selectable_atoms = list(
/obj/machinery/atmospherics/miner/carbon_dioxide,
/obj/machinery/atmospherics/miner/n2o,
/obj/machinery/atmospherics/miner/nitrogen,
/obj/machinery/atmospherics/miner/oxygen,
/obj/machinery/atmospherics/miner/plasma,
)
area_string = "atmospherics"
supply_pod_stay = TRUE
/obj/item/summon_beacon/command_drobe
name = "command outfitting beacon"
desc = "Delivers a command outfitting station to the target location."
allowed_areas = list(
/area/station/command/bridge,
/area/station/command/heads_quarters/captain,
/area/station/command/heads_quarters/hop,
)
selectable_atoms = list(
/obj/machinery/vending/access/command,
)
area_string = "the bridge"
/obj/item/summon_beacon/borgi
name = "E-N beacon"
desc = "Delivers a lovable borgi to the target location."
allowed_areas = list(
/area/station/science/robotics,
)
selectable_atoms = list(
/mob/living/simple_animal/pet/dog/corgi/borgi,
)
area_string = "robotics"
/obj/item/summon_beacon/poppy
name = "engineering possum beacon"
desc = "Delivers the engineering possum, Poppy, to the target location."
allowed_areas = list(
/area/station/engineering,
)
selectable_atoms = list(
/mob/living/simple_animal/pet/poppy,
)
area_string = "engineering"
/obj/item/summon_beacon/bumbles
name = "Bumbles beacon"
desc = "Delivers hydreponics' bee, Bumbles, to the target location."
allowed_areas = list(
/area/station/service/hydroponics,
)
selectable_atoms = list(
/mob/living/simple_animal/pet/bumbles,
)
area_string = "hydroponics"
/obj/item/summon_beacon/markus
name = "cargo corgi beacon"
desc = "Delivers Markus, the mascot of cargo, to the target location."
allowed_areas = list(
/area/station/cargo,
)
selectable_atoms = list(
/mob/living/simple_animal/pet/dog/markus,
)
area_string = "cargo"
/obj/item/summon_beacon/secmed
name = "security medic locker beacon"
desc = "Delivers a security medic's locker to the target location."
allowed_areas = list(
/area/station/security/medical,
)
selectable_atoms = list(
/obj/structure/closet/secure_closet/security_medic,
)
area_string = "the medical ward of security"
/obj/item/summon_beacon/vanguard
name = "vanguard operatives supply beacon"
desc = "Used to request your job supplies, use in hand to do so!"
allowed_areas = list(
/area/awaymission,
/area/station/command/gateway,
)
selectable_atoms = list(
/obj/structure/closet/crate/secure/exp_corps/marksman,
/obj/structure/closet/crate/secure/exp_corps/pointman,
/obj/structure/closet/crate/secure/exp_corps/field_medic,
/obj/structure/closet/crate/secure/exp_corps/combat_tech,
)
area_string = "the gateway chamber"
@@ -57,7 +57,10 @@
suit = /obj/item/clothing/suit/armor/vest/peacekeeper/security_medic
l_hand = /obj/item/storage/medkit/brute
head = /obj/item/clothing/head/beret/sec/peacekeeper/security_medic
backpack_contents = list(/obj/item/storage/box/gunset/firefly = 1)
backpack_contents = list(
/obj/item/storage/box/gunset/firefly = 1,
/obj/item/summon_beacon/secmed = 1,
)
backpack = /obj/item/storage/backpack/security
satchel = /obj/item/storage/backpack/satchel/sec
duffelbag = /obj/item/storage/backpack/duffelbag/sec
@@ -68,6 +71,10 @@
id_trim = /datum/id_trim/job/security_medic
/obj/effect/landmark/start/security_officer/Initialize(mapload)
. = ..()
new /obj/effect/landmark/start/security_medic(get_turf(src))
/obj/effect/landmark/start/security_medic
name = "Security Medic"
icon_state = "Security Medic"
+1 -2
View File
@@ -4878,7 +4878,6 @@
#include "modular_skyrat\modules\admin\code\manage_player_ranks.dm"
#include "modular_skyrat\modules\admin\code\sooc.dm"
#include "modular_skyrat\modules\admin\code\smites\pie.dm"
#include "modular_skyrat\modules\advanced_choice_beacons\code\advanced_choice_beacon.dm"
#include "modular_skyrat\modules\advanced_shuttles\code\areas.dm"
#include "modular_skyrat\modules\advanced_shuttles\code\closet.dm"
#include "modular_skyrat\modules\advanced_shuttles\code\computer.dm"
@@ -5648,7 +5647,6 @@
#include "modular_skyrat\modules\modular_items\code\ciggies.dm"
#include "modular_skyrat\modules\modular_items\code\cross.dm"
#include "modular_skyrat\modules\modular_items\code\designs.dm"
#include "modular_skyrat\modules\modular_items\code\gas_miner_beacon.dm"
#include "modular_skyrat\modules\modular_items\code\goosenade.dm"
#include "modular_skyrat\modules\modular_items\code\kinetic_crusher.dm"
#include "modular_skyrat\modules\modular_items\code\makeshift.dm"
@@ -5657,6 +5655,7 @@
#include "modular_skyrat\modules\modular_items\code\pastries.dm"
#include "modular_skyrat\modules\modular_items\code\ranged_analyzer.dm"
#include "modular_skyrat\modules\modular_items\code\recipes_misc.dm"
#include "modular_skyrat\modules\modular_items\code\summon_beacon.dm"
#include "modular_skyrat\modules\modular_items\code\tailoring.dm"
#include "modular_skyrat\modules\modular_items\code\thieving_gloves.dm"
#include "modular_skyrat\modules\modular_items\lewd_items\code\arousal_system.dm"