mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-28 15:47:15 +01:00
[MOSTLY MODULAR] Oppressive Force Relocation Medicell (#12654)
* start * It's important to have this be a standard part of every medical doctor's kit * Update modular_skyrat/modules/modular_weapons/code/medcells.dm Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com> * Update modular_skyrat/modules/modular_weapons/code/medcells.dm Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com> * fun removal * removes the fools * refactors a whole bunch of code * safety * Update medcells.dm * wew boy * Update medcells.dm * Update medguns.dm * adds to techweb * Update mediguns.dm * Update medcells.dm * Update medcells.dm * Update medcells.dm * body safety * Update medcells.dm * Update medcells.dm * Update medcells.dm Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com> Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
This commit is contained in:
co-authored by
Zonespace
GoldenAlpharex
parent
e9b1bc00c5
commit
bd4e0c0f4f
@@ -378,6 +378,7 @@
|
||||
"burn2medicell",
|
||||
"toxin2medicell",
|
||||
"oxy2medicell",
|
||||
"relocatemedicell",
|
||||
"tempmedicell",
|
||||
"bodymedicell",
|
||||
"clotmedicell",
|
||||
|
||||
@@ -557,6 +557,125 @@
|
||||
usr.visible_message(span_notice("[usr] deactivates \the [src]."), span_notice("You deactivate \the [src]."))
|
||||
qdel(src)
|
||||
|
||||
//Oppressive Force Relocation
|
||||
/obj/item/ammo_casing/energy/medical/utility/relocation
|
||||
projectile_type = /obj/projectile/energy/medical/utility/relocation
|
||||
select_name = "relocation"
|
||||
select_color = "#140085"
|
||||
|
||||
//The version that the normal medicells use
|
||||
/obj/item/ammo_casing/energy/medical/utility/relocation/standard
|
||||
projectile_type = /obj/projectile/energy/medical/utility/relocation/standard
|
||||
delay = 12
|
||||
|
||||
/obj/projectile/energy/medical/utility/relocation
|
||||
name = "bluespace transportation field"
|
||||
/// Determines whether or not this works anywhere?
|
||||
var/area_locked = FALSE
|
||||
/// A list of areas that the effect works in, if area_locked is set to true
|
||||
var/list/teleport_areas
|
||||
/// Where the target will be teleported to.
|
||||
var/destination_area = /area/medical/medbay/lobby
|
||||
|
||||
/// Is there a grace period before someone is teleported
|
||||
var/grace_period = FALSE
|
||||
/// How much time does the target have to leave the area before they end up getting teleported?
|
||||
var/time_allowance = 10 SECONDS
|
||||
|
||||
/// Is access required to teleport
|
||||
var/access_teleporting = FALSE
|
||||
/// if the target doesn't have this access on their ID, they will be teleported
|
||||
var/required_access = ACCESS_SURGERY
|
||||
|
||||
/obj/projectile/energy/medical/utility/relocation/standard
|
||||
area_locked = TRUE
|
||||
teleport_areas = list(/area/medical/surgery, /area/medical/treatment_center, /area/medical/storage, /area/medical/patients_rooms)
|
||||
grace_period = TRUE
|
||||
access_teleporting = TRUE
|
||||
|
||||
/obj/projectile/energy/medical/utility/relocation/on_hit(mob/living/target)
|
||||
. = ..()
|
||||
|
||||
if(!ishuman(target))
|
||||
return FALSE
|
||||
|
||||
var/mob/living/carbon/human/teleportee = target
|
||||
|
||||
if(area_locked && length(teleport_areas) && !is_type_in_list(get_area(target), teleport_areas))
|
||||
return FALSE
|
||||
|
||||
if(access_teleporting && teleportee.wear_id)
|
||||
var/target_access = teleportee.wear_id.GetAccess() //Stores the access of the target within a variable
|
||||
if(required_access in target_access)
|
||||
return FALSE
|
||||
|
||||
if(grace_period)
|
||||
to_chat(teleportee, span_warning("You have [(time_allowance / 10)] seconds to leave, if you do not leave in this time, you will be forcibly teleported outside."))
|
||||
teleportee.AddComponent(/datum/component/medigun_relocation, time_allowance, destination_area, area_locked, teleport_areas)
|
||||
return TRUE
|
||||
|
||||
var/list/turf_list
|
||||
|
||||
if(!turf_list)
|
||||
turf_list = list()
|
||||
for(var/turf/turf_in_area in get_area_turfs(destination_area))
|
||||
if(!turf_in_area.is_blocked_turf())
|
||||
turf_list += turf_in_area
|
||||
|
||||
teleportee.visible_message(span_notice("[teleportee] is teleported away!"))
|
||||
|
||||
do_teleport(teleportee, pick(turf_list), no_effects = FALSE, channel = TELEPORT_CHANNEL_QUANTUM)
|
||||
|
||||
/// Used to handle teleporting if there is a grace period
|
||||
/datum/component/medigun_relocation
|
||||
/// Area that the target is teleported to
|
||||
var/area/destination_area
|
||||
/// The person that is being teleported
|
||||
var/mob/living/carbon/human/teleportee
|
||||
/// Is the teleport locked to only specific areas.
|
||||
var/area_locked
|
||||
/// If area_locked is enabled, people can be teleported while in these areas.
|
||||
var/list/teleport_areas
|
||||
|
||||
/datum/component/medigun_relocation/Initialize(time_allowance, destination, locked, areas)
|
||||
if(!isatom(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
var/atom/parent_atom = parent
|
||||
|
||||
teleport_areas = areas
|
||||
teleportee = parent_atom
|
||||
area_locked = locked
|
||||
destination_area = destination
|
||||
|
||||
addtimer(CALLBACK(src, .proc/dispense_treat), (time_allowance * 0.95))
|
||||
QDEL_IN(src, time_allowance)
|
||||
|
||||
/datum/component/medigun_relocation/Destroy()
|
||||
if(area_locked && length(teleport_areas) && !is_type_in_list(get_area(teleportee), teleport_areas))
|
||||
return ..()
|
||||
|
||||
if(!teleportee.stat == CONSCIOUS) // This is mostly here to stop medical from accidentally teleporting out people they otherwise wouldn't want to.
|
||||
return ..()
|
||||
|
||||
var/list/turf_list
|
||||
|
||||
if(!turf_list)
|
||||
turf_list = list()
|
||||
for(var/turf/turf_in_area in get_area_turfs(destination_area))
|
||||
if(!turf_in_area.is_blocked_turf())
|
||||
turf_list += turf_in_area
|
||||
|
||||
teleportee.visible_message(span_notice("[teleportee] is teleported away!"))
|
||||
|
||||
do_teleport(teleportee, pick(turf_list), no_effects = FALSE, channel = TELEPORT_CHANNEL_QUANTUM)
|
||||
|
||||
return ..()
|
||||
|
||||
/// Puts a treat in the teleportee's hands.
|
||||
/datum/component/medigun_relocation/proc/dispense_treat()
|
||||
var/obj/item/goodbye_treat = new /obj/item/food/lollipop/cyborg(teleportee) // The borg one is being used because it has psicodine instead of omnizine.
|
||||
teleportee.put_in_hands(goodbye_treat)
|
||||
|
||||
//End of utility
|
||||
#undef UPGRADED_MEDICELL_PASSFLAGS
|
||||
#undef MINIMUM_TEMP_DIFFERENCE
|
||||
|
||||
@@ -272,6 +272,17 @@
|
||||
icon_state = "body"
|
||||
ammo_type = /obj/item/ammo_casing/energy/medical/utility/body_teleporter
|
||||
|
||||
/obj/item/weaponcell/medical/utility/relocation
|
||||
name = "Oppressive Force Relocation Medicell"
|
||||
desc = "A medicell that safely relocates personnel"
|
||||
icon_state = "body"
|
||||
ammo_type = /obj/item/ammo_casing/energy/medical/utility/relocation/standard
|
||||
|
||||
/obj/item/weaponcell/medical/utility/relocation/upgraded
|
||||
name = "Upgraded Oppressive Force Relocation Medicell"
|
||||
desc = "An upgraded version of the Relocation Medicell. It has the access and area requirements removed, along with having the standard grace period disabled."
|
||||
ammo_type = /obj/item/ammo_casing/energy/medical/utility/relocation
|
||||
|
||||
//Empty Medicell//
|
||||
/obj/item/device/custom_kit/empty_cell //Having the empty cell as an upgrade kit sounds jank, but it should work well.
|
||||
name = "empty salve medicell"
|
||||
|
||||
@@ -151,6 +151,17 @@
|
||||
category = list("Ammo")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/bodymedicell
|
||||
name = "Oppressive Force Relocation Medicell"
|
||||
desc = "A medicell that can be used to teleport non-medical staff to the lobby."
|
||||
id = "relocatemedicell"
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/plastic = 2000, /datum/material/glass = 2000, /datum/material/plasma = 1000, /datum/material/diamond = 500, /datum/material/bluespace = 2000)
|
||||
reagents_list = list(/datum/reagent/eigenstate = 10)
|
||||
build_path = /obj/item/weaponcell/medical/utility/relocation
|
||||
category = list("Ammo")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
//Upgrade Kit//
|
||||
/datum/design/medigunspeedkit
|
||||
name = "VeyMedical CWM-479 Upgrade kit"
|
||||
|
||||
Reference in New Issue
Block a user