mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-26 14:31:59 +01:00
Shuttle update: Part Two: The Legion Protects (#7457)
This commit is contained in:
@@ -24,10 +24,14 @@
|
||||
heat_protection = HANDS
|
||||
max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
|
||||
/obj/item/clothing/gloves/swat/ert
|
||||
species_restricted = null
|
||||
|
||||
/obj/item/clothing/gloves/swat/tactical
|
||||
name = "\improper tactical gloves"
|
||||
icon_state = "black_leather"
|
||||
item_state = "black_leather_gloves"
|
||||
species_restricted = null
|
||||
|
||||
/obj/item/clothing/gloves/combat //Combined effect of SWAT gloves and insulated gloves
|
||||
desc = "These tactical gloves are somewhat fire and impact resistant."
|
||||
|
||||
@@ -211,7 +211,7 @@
|
||||
|
||||
/obj/item/clothing/head/helmet/tank
|
||||
name = "padded cap"
|
||||
desc = "A padded skullcup for those prone to bumping their heads against hard surfaces."
|
||||
desc = "A padded skullcap for those prone to bumping their heads against hard surfaces."
|
||||
icon_state = "tank"
|
||||
flags_inv = BLOCKHEADHAIR
|
||||
color = "#5f5f5f"
|
||||
@@ -224,6 +224,9 @@
|
||||
/obj/item/clothing/head/helmet/tank/tan
|
||||
color = "#ae9f79"
|
||||
|
||||
/obj/item/clothing/head/helmet/tank/legion
|
||||
color = "#5674a6"
|
||||
|
||||
//Non-hardsuit ERT helmets.
|
||||
/obj/item/clothing/head/helmet/ert
|
||||
name = "emergency response team helmet"
|
||||
@@ -264,10 +267,47 @@
|
||||
desc = "A large helmet meant to fit some pretty big heads. It has a ballistic faceplate on the front of it."
|
||||
icon_state = "legion_helmet"
|
||||
body_parts_covered = HEAD|FACE|EYES
|
||||
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE
|
||||
flags_inv = HIDEEARS|HIDEEYES|BLOCKHEADHAIR
|
||||
armor = list(melee = 50, bullet = 30, laser = 30, energy = 15, bomb = 40, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.35
|
||||
|
||||
action_button_name = "Toggle Helmet Light"
|
||||
light_overlay = "helmet_light_dual"
|
||||
brightness_on = 6
|
||||
light_wedge = LIGHT_WIDE
|
||||
on = 0
|
||||
|
||||
/obj/item/clothing/head/helmet/legion_pilot
|
||||
name = "foreign legion flight helmet"
|
||||
desc = "A helmet with an aged pilot visor mounted to it. The visor feeds its wearer in-flight information via a heads-up display."
|
||||
icon_state = "legion_pilot_up"
|
||||
body_parts_covered = null
|
||||
flags_inv = BLOCKHEADHAIR
|
||||
armor = list(melee = 40, bullet = 20, laser = 20, energy = 10, bomb = 40, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.35
|
||||
action_button_name = "Flip Pilot Visor"
|
||||
|
||||
/obj/item/clothing/head/helmet/legion_pilot/attack_self()
|
||||
flip_visor()
|
||||
|
||||
/obj/item/clothing/head/helmet/legion_pilot/verb/flip_visor()
|
||||
set category = "Object"
|
||||
set name = "Flip pilot visor"
|
||||
var/mob/living/carbon/human/user
|
||||
if(istype(usr,/mob/living/carbon/human))
|
||||
user = usr
|
||||
else
|
||||
return
|
||||
if(icon_state == initial(icon_state))
|
||||
icon_state = "legion_pilot"
|
||||
to_chat(user, "You flip down the pilot visor.")
|
||||
sound_to(user, 'sound/items/goggles_charge.ogg')
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
to_chat(user, "You flip up the pilot visor.")
|
||||
update_clothing_icon()
|
||||
user.update_action_buttons()
|
||||
|
||||
/obj/item/clothing/head/helmet/tajara
|
||||
name = "amohdan swordsmen helmet"
|
||||
desc = "A helmet used by the traditional warriors of Amohda."
|
||||
|
||||
@@ -270,11 +270,6 @@
|
||||
flags_inv = BLOCKHAIR
|
||||
siemens_coefficient = 2.0
|
||||
|
||||
/obj/item/clothing/head/legion_beret
|
||||
name = "TCFL dress beret"
|
||||
desc = "A pale blue dress beret with a rubber insignia of a torch, surrounded by red stars and the letters \"TCFL\". A common good luck charm among former legionaires."
|
||||
icon_state = "legion_beret"
|
||||
|
||||
/obj/item/clothing/head/chicken
|
||||
name = "chicken suit head"
|
||||
desc = "Bkaw!"
|
||||
@@ -484,6 +479,33 @@
|
||||
body_parts_covered = 0
|
||||
drop_sound = 'sound/items/drop/herb.ogg'
|
||||
|
||||
//Tau Ceti Foreign Legion
|
||||
|
||||
/obj/item/clothing/head/legion_beret
|
||||
name = "TCFL dress beret"
|
||||
desc = "A pale blue dress beret with a rubber insignia of a torch, surrounded by red stars and the letters \"TCFL\". A common good luck charm among former legionaires."
|
||||
icon_state = "legion_beret"
|
||||
item_state = "legion_beret"
|
||||
|
||||
/obj/item/clothing/head/legion
|
||||
name = "TCFL field beret"
|
||||
desc = "A hardy, stark red field beret with a rubber insignia of a torch, surrounded by red stars and the letters \"TCFL\". Offers some minor protection."
|
||||
armor = list(melee = 20, bullet = 10, laser = 10, energy = 10, bomb = 10, bio = 0, rad = 0)
|
||||
icon_state = "legion_field_beret"
|
||||
item_state = "legion_field_beret"
|
||||
|
||||
/obj/item/clothing/head/legion/sentinel
|
||||
name = "TCFL sentinel beret"
|
||||
desc = "A hardy, stark purple sentinel beret with a rubber insignia of a torch, surrounded by red stars and the letters \"TCFL\". Offers some minor protection."
|
||||
icon_state = "legion_sentinel_beret"
|
||||
item_state = "legion_sentinel_beret"
|
||||
|
||||
/obj/item/clothing/head/legion/legate
|
||||
name = "TCFL peaked cap"
|
||||
desc = "A stark red peaked cap. Worn by senior officers of the Tau Ceti Foreign Legion."
|
||||
icon_state = "legion_cap"
|
||||
item_state = "legion_cap"
|
||||
|
||||
//golden beep stuff
|
||||
|
||||
/obj/item/clothing/head/headchain
|
||||
@@ -587,7 +609,7 @@
|
||||
body_parts_covered = HEAD|EYES
|
||||
cold_protection = HEAD
|
||||
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
|
||||
|
||||
/obj/item/clothing/head/vaurca_breeder
|
||||
name = "zo'ra representative shroud"
|
||||
desc = "Large shroud used by Zo'ra representatives."
|
||||
|
||||
@@ -87,7 +87,9 @@
|
||||
/obj/item/ammo_casing,
|
||||
/obj/item/melee/baton,
|
||||
/obj/item/melee/energy/sword,
|
||||
/obj/item/handcuffs
|
||||
/obj/item/handcuffs,
|
||||
/obj/item/material/twohanded/fireaxe,
|
||||
/obj/item/rfd/construction
|
||||
)
|
||||
|
||||
species_restricted = list("Human","Tajara","Unathi", "Skrell", "Machine", "Vaurca")
|
||||
|
||||
@@ -550,6 +550,19 @@
|
||||
armor = list(melee = 50, bullet = 30, laser = 30, energy = 15, bomb = 40, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.35
|
||||
|
||||
/obj/item/clothing/suit/storage/vest/legion/legate
|
||||
name = "foreign legion legate coat"
|
||||
desc = "A luxurious coat made out of sturdy synthetic fabrics and reinforced with lightweight alloys. Only worn by some of the highest decorated officers of the TCFL."
|
||||
icon_state = "legion_coat"
|
||||
item_state = "legion_coat"
|
||||
|
||||
/obj/item/clothing/suit/storage/vest/legion/legate/Initialize()
|
||||
. = ..()
|
||||
pockets = new/obj/item/storage/internal(src)
|
||||
pockets.storage_slots = 4
|
||||
pockets.max_w_class = 2
|
||||
pockets.max_storage_space = 8
|
||||
|
||||
/obj/item/clothing/suit/armor/vest/idris
|
||||
name = "Idris Reclamation Unit coat"
|
||||
desc = "A coat worn by the Idris reclamation units, notorious across space."
|
||||
|
||||
@@ -306,6 +306,16 @@
|
||||
icon_open = "wflight_open"
|
||||
icon_closed = "wflight"
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/leather_jacket/flight/legion
|
||||
name = "tcfl flight jacket"
|
||||
desc = "A Tau Ceti Foreign Legion pilot's jacket made from a silky, shiny nanonylon material and lined with tough, protective synthfabrics."
|
||||
icon_state = "lflight"
|
||||
item_state = "lflight"
|
||||
icon_open = "lflight_open"
|
||||
icon_closed = "lflight"
|
||||
armor = list(melee = 40, bullet = 10, laser = 20, energy = 10, bomb = 30, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.35
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/leather_jacket/military
|
||||
name = "military jacket"
|
||||
desc = "A military-styled jacket made from thick, distressed canvas. Popular among Martian punks. Patches not included."
|
||||
|
||||
@@ -704,6 +704,23 @@
|
||||
worn_state = "taucetilegion"
|
||||
siemens_coefficient = 0.7
|
||||
|
||||
/obj/item/clothing/under/legion/sentinel
|
||||
name = "Tau Ceti Foreign Legion sentinel uniform."
|
||||
desc = "A blue uniform with purple trimming, indicating that the wearer is a sentinel of the TCFL."
|
||||
worn_state = "taucetilegion_sentinel"
|
||||
|
||||
/obj/item/clothing/under/legion/legate
|
||||
name = "Legate uniform"
|
||||
desc = "A stark red uniform worn by senior officers of the Tau Ceti Foreign Legion."
|
||||
icon_state = "taucetilegion_legate"
|
||||
worn_state = "taucetilegion_legate"
|
||||
|
||||
/obj/item/clothing/under/legion/pilot
|
||||
name = "Tau Ceti Foreign Legion flightsuit"
|
||||
desc = "The uniform worn by Tau Ceti Foreign Legion pilots."
|
||||
icon_state = "taucetilegion_pilot"
|
||||
worn_state = "taucetilegion_pilot"
|
||||
|
||||
/obj/item/clothing/under/offworlder
|
||||
name = "\improper CR suit"
|
||||
desc = "A very tight form-fitting padded suit that looks extremely comfortable to wear."
|
||||
@@ -744,7 +761,7 @@
|
||||
icon_state = "lance_dress_f"
|
||||
item_state = "lance_dress_f"
|
||||
worn_state = "lance_dress_f"
|
||||
|
||||
|
||||
|
||||
/obj/item/clothing/under/dress/lance_dress/male
|
||||
name = "lance dress uniform"
|
||||
|
||||
@@ -28,25 +28,25 @@
|
||||
mob_name_pick_message = "Pick a name."
|
||||
|
||||
/datum/ghostspawner/human/admin/legion_commander
|
||||
short_name = "legioncommander"
|
||||
name = "TCFL Commander"
|
||||
desc = "Command the TCFL, a walking and talking joke, whos members regularly die before they even arrive at their target."
|
||||
short_name = "legionlegate"
|
||||
name = "TCFL Legate"
|
||||
desc = "Command the TCFL onboard BLV The Tower, a legion patrolship from where Task Force XIII - Fortune operates from."
|
||||
|
||||
landmark_name = "TCFLCommander"
|
||||
landmark_name = "TCFLLegate"
|
||||
req_perms = R_CCIAA
|
||||
|
||||
//Vars related to human mobs
|
||||
outfit = /datum/outfit/admin/nt/tcfl_commander
|
||||
possible_species = list("Human")
|
||||
outfit = /datum/outfit/admin/nt/tcfl_legate
|
||||
possible_species = list("Human","M'sai Tajara","Skrell", "Unathi","Baseline Frame")
|
||||
possible_genders = list(MALE,FEMALE)
|
||||
allow_appearance_change = APPEARANCE_PLASTICSURGERY
|
||||
|
||||
assigned_role = "Tau Ceti Foreign Legion Commander"
|
||||
special_role = "TCFL Commander"
|
||||
assigned_role = "Tau Ceti Foreign Legion Legate"
|
||||
special_role = "TCFL Legate"
|
||||
respawn_flag = null
|
||||
|
||||
mob_name = null
|
||||
mob_name_prefix = "Cmdr. "
|
||||
mob_name_prefix = "Lgt. "
|
||||
mob_name_pick_message = "Pick a callsign or last-name."
|
||||
|
||||
/datum/ghostspawner/human/admin/cciaagent
|
||||
@@ -74,7 +74,7 @@
|
||||
/datum/ghostspawner/human/admin/cciaescort
|
||||
short_name = "cciaescort"
|
||||
name = "CCIA Escort"
|
||||
desc = "Escort a CCIA Agent to the station, watch them annoy the crew and prevent them from throwing themselvs under their own shuttle."
|
||||
desc = "Escort a CCIA Agent to the station, watch them annoy the crew and prevent them from throwing themselves under their own shuttle."
|
||||
|
||||
enabled = FALSE
|
||||
landmark_name = "CCIAEscort"
|
||||
@@ -122,7 +122,29 @@
|
||||
mob_name_prefix = "Spec. "
|
||||
mob_name_pick_message = "Pick a callsign or last-name."
|
||||
|
||||
/datum/ghostspawner/human/admin/tcflsentinel
|
||||
short_name = "tcflsentinel"
|
||||
name = "TCFL Sentinel"
|
||||
desc = "Secure BLV The Tower from any would-be interlopers, provide assistance to returning personnel and/or evacuees."
|
||||
|
||||
enabled = FALSE
|
||||
spawnpoints = list("TCFLSentinel")
|
||||
req_perms = null
|
||||
req_perms_edit = R_CCIAA
|
||||
max_count = 4
|
||||
|
||||
outfit = /datum/outfit/admin/ert/legion/sentinel
|
||||
possible_species = list("Human", "Tajara", "M'sai Tajara", "Zhan-Khazan Tajara", "Skrell", "Unathi", "Vaurca Warrior", "Vaurca Worker", "Baseline Frame", "Diona")
|
||||
possible_genders = list(MALE,FEMALE)
|
||||
allow_appearance_change = APPEARANCE_PLASTICSURGERY
|
||||
|
||||
assigned_role = "TCFL Sentinel"
|
||||
special_role = "TCFL Sentinel"
|
||||
respawn_flag = null
|
||||
|
||||
mob_name = null
|
||||
mob_name_prefix = "Sent. "
|
||||
mob_name_pick_message = "Pick a callsign or last-name."
|
||||
|
||||
/client/proc/despawn()
|
||||
set name = "Despawn"
|
||||
|
||||
@@ -59,29 +59,43 @@
|
||||
possible_species = list("Human", "Skrell")
|
||||
|
||||
//TCFL ERT
|
||||
|
||||
/datum/ghostspawner/human/ert/tcfl
|
||||
name = "TCFL Responder"
|
||||
name = "TCFL Volunteer"
|
||||
short_name = "tcflr"
|
||||
desc = "The Tau Ceti Foreign Legion's rank and file."
|
||||
welcome_message = "The Tau Ceti Foreign Legion works for the Republic of Biesel; your job is to protect the place you're heading to and fix the problem. You can be a volounteer (Vol.) or a legionnaire (Lgn.). The former is recommended for new players."
|
||||
welcome_message = "The Tau Ceti Foreign Legion works for the Republic of Biesel; your job is to protect the place you're heading to and fix the problem. You can be a Volunteer (Vol.), Legionnaire (Lgn.) or Prefect (Pfct.). The first option is recommended for new players."
|
||||
max_count = 3
|
||||
outfit = /datum/outfit/admin/ert/legion
|
||||
spawnpoints = list("TCFLERTSpawn")
|
||||
possible_species = list("Human", "Tajara", "Tajara", "M'sai Tajara", "Zhan-Khazan Tajara", "Skrell", "Unathi", "Vaurca Warrior", "Vaurca Worker", "Baseline Frame", "Diona")
|
||||
|
||||
/datum/ghostspawner/human/ert/tcfl/specialist
|
||||
name = "TCFL Medical Specialist"
|
||||
name = "TCFL Legionnaire"
|
||||
short_name = "tcfls"
|
||||
max_count = 2
|
||||
desc = "A medic of the Tau Ceti Foreign Legion."
|
||||
desc = "An experienced Legionnaire of the TCFL."
|
||||
outfit = /datum/outfit/admin/ert/legion/specialist
|
||||
mob_name_prefix = "Lgn. "
|
||||
|
||||
/datum/ghostspawner/human/ert/tcfl/leader
|
||||
name = "TCFL Leader"
|
||||
name = "TCFL Prefect"
|
||||
short_name = "tcfll"
|
||||
max_count = 1
|
||||
desc = "A leader of Task Force XIII - Fortune."
|
||||
outfit = /datum/outfit/admin/ert/legion/leader
|
||||
mob_name_prefix = "Pfct. "
|
||||
spawnpoints = list("TCFLERTSpawn - Prefect")
|
||||
|
||||
/datum/ghostspawner/human/ert/tcfl/pilot
|
||||
name = "TCFL Dropship Pilot"
|
||||
short_name = "tcflpl"
|
||||
max_count = 1
|
||||
desc = "A dropship pilot of the TCFL."
|
||||
welcome_message = "As a pilot of the Tau Ceti Foreign Legion, your job is to pilot your assigned dropship and keep it safe from any hostile forces. You may also have to assist the main task force in a supporting role if the need arises."
|
||||
outfit = /datum/outfit/admin/ert/legion/pilot
|
||||
mob_name_prefix = "PL. "
|
||||
spawnpoints = list("TCFLERTSpawn - Pilot")
|
||||
|
||||
//Mercenary ERT
|
||||
/datum/ghostspawner/human/ert/mercenary
|
||||
|
||||
@@ -20,7 +20,7 @@ var/global/list/minevendor_list = list( //keep in order of price
|
||||
new /datum/data/mining_equipment("Compressed matter cartridge", /obj/item/rfd_ammo, 50, 100),
|
||||
new /datum/data/mining_equipment("Class E Kinetic Accelerator", /obj/item/gun/custom_ka/frame01/prebuilt, 12, 200),
|
||||
new /datum/data/mining_equipment("Ore Box", /obj/structure/ore_box, -1, 150, 1),
|
||||
new /datum/data/mining_equipment("Emergency Floodlight", /obj/item/floodlight_diy, -1, 150, 1),
|
||||
new /datum/data/mining_equipment("Emergency Floodlight", /obj/item/deployable_kit, -1, 150, 1),
|
||||
new /datum/data/mining_equipment("Premium Cigar", /obj/item/clothing/mask/smokable/cigarette/cigar/havana, 30, 150),
|
||||
new /datum/data/mining_equipment("Seismic Charge", /obj/item/plastique/seismic, 25, 150),
|
||||
new /datum/data/mining_equipment("Deployable Ladder", /obj/item/ladder_mobile, 5, 200),
|
||||
|
||||
@@ -377,6 +377,18 @@
|
||||
icon_state = "redflag"
|
||||
light_color = LIGHT_COLOR_RED
|
||||
|
||||
/obj/item/stack/flag/red/planted
|
||||
name = "red beacon"
|
||||
icon_state = "redflag_open"
|
||||
amount = 1
|
||||
upright = 1
|
||||
anchored = 1
|
||||
|
||||
/obj/item/stack/flag/red/planted/Initialize()
|
||||
..()
|
||||
base_state = "redflag"
|
||||
set_light(2)
|
||||
|
||||
/obj/item/stack/flag/yellow
|
||||
name = "yellow beacons"
|
||||
singular_name = "yellow beacon"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
item_state = "blaster_pistol"
|
||||
fire_sound = 'sound/weapons/Laser.ogg'
|
||||
slot_flags = SLOT_BELT|SLOT_HOLSTER
|
||||
w_class = 3
|
||||
w_class = 2
|
||||
force = 5
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 2)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 2000)
|
||||
@@ -20,7 +20,34 @@
|
||||
list(mode_name="2-round bursts", burst=2, fire_delay=null, move_delay=2, burst_accuracy=list(1,0,0), dispersion=list(0, 10, 15))
|
||||
)
|
||||
|
||||
/obj/item/gun/energy/blaster/revolver
|
||||
name = "blaster revolver"
|
||||
desc = "A robust eight-shot blaster.."
|
||||
icon_state = "blaster_revolver"
|
||||
fire_sound = 'sound/weapons/laserstrong.ogg'
|
||||
projectile_type = /obj/item/projectile/energy/blaster
|
||||
max_shots = 8
|
||||
w_class = 3
|
||||
|
||||
/obj/item/gun/energy/blaster/revolver/verb/spin_cylinder()
|
||||
set name = "Spin cylinder"
|
||||
set desc = "Fun when you're bored out of your skull."
|
||||
set category = "Object"
|
||||
var/mob/living/carbon/human/user
|
||||
if(istype(usr,/mob/living/carbon/human))
|
||||
user = usr
|
||||
else
|
||||
return
|
||||
|
||||
user.visible_message(span("warning","\The [user] spins the cylinder of \the [src]!"),span("warning","You spin the cylinder of \the [src]!"),span("notice","You hear something metallic spin and click."))
|
||||
playsound(src.loc, 'sound/weapons/revolver_spin.ogg', 100, 1)
|
||||
|
||||
/obj/item/gun/energy/blaster/revolver/pilot
|
||||
name = "pilot's sidearm"
|
||||
desc = "A robust, low in maintenance, eight-shot blaster. Perfect for self-defense purposes."
|
||||
|
||||
/obj/item/gun/energy/blaster/carbine
|
||||
|
||||
name = "blaster carbine"
|
||||
desc = "A short-barreled blaster carbine meant for easy handling and comfort when in combat."
|
||||
icon_state = "blaster_carbine"
|
||||
@@ -29,6 +56,7 @@
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2)
|
||||
projectile_type = /obj/item/projectile/energy/blaster
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 3
|
||||
|
||||
/obj/item/gun/energy/blaster/rifle
|
||||
name = "bolt slinger"
|
||||
@@ -48,7 +76,7 @@
|
||||
scoped_accuracy = 4
|
||||
|
||||
fire_delay_wielded = 10
|
||||
accuracy_wielded = 0
|
||||
accuracy_wielded = 1
|
||||
|
||||
is_wieldable = TRUE
|
||||
|
||||
|
||||
@@ -56,6 +56,13 @@
|
||||
/obj/item/reagent_containers/chem_disp_cartridge/clonexadone
|
||||
)
|
||||
|
||||
/obj/machinery/chemical_dispenser/ert/attackby(obj/item/W, mob/user)
|
||||
if(W.iswrench())
|
||||
to_chat(user, span("notice","This dispenser is riveted to the floor and cannot be unanchored."))
|
||||
return
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/chemical_dispenser/bar_soft
|
||||
name = "soft drink dispenser"
|
||||
desc = "A soda machine."
|
||||
|
||||
@@ -241,11 +241,29 @@
|
||||
brightness_color = initial(brightness_color)
|
||||
update()
|
||||
|
||||
//--Tau Ceti Foreign Legion Shuttle--//
|
||||
|
||||
/obj/machinery/computer/shuttle_control/legion
|
||||
name = "deployment shuttle control console"
|
||||
name = "dropship control console"
|
||||
req_access = list(access_legion)
|
||||
shuttle_tag = "Tau Ceti Foreign Legion"
|
||||
|
||||
/datum/shuttle/ferry/legion
|
||||
var/dropship_return_delay = 6600
|
||||
var/earliest_departure_time = 0
|
||||
|
||||
/datum/shuttle/ferry/legion/arrived()
|
||||
if(!location)
|
||||
earliest_departure_time = world.time + dropship_return_delay
|
||||
|
||||
/datum/shuttle/ferry/legion/launch(var/user)
|
||||
if(!location && earliest_departure_time > world.time)
|
||||
var/obj/machinery/computer/shuttle_control/legion/L = user
|
||||
L.visible_message(span("notice","The dropship's skipthrusters will be done recharging in approximately [round((earliest_departure_time - world.time)/600)] minute\s."),null,3)
|
||||
return
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/machinery/computer/shuttle_control/distress
|
||||
name = "shuttle control computer"
|
||||
req_access = list(access_distress)
|
||||
|
||||
+176
-103
@@ -1,9 +1,14 @@
|
||||
#define READY 0
|
||||
#define USED 1
|
||||
#define LAUNCHING 2
|
||||
|
||||
/obj/vehicle/droppod
|
||||
name = "drop pod"
|
||||
desc = "A big metal pod, what could be inside?"
|
||||
icon = 'icons/obj/vehicles.dmi'
|
||||
icon_state = "droppod"
|
||||
dir = SOUTH
|
||||
layer = MOB_LAYER - 0.1
|
||||
|
||||
load_item_visible = 0
|
||||
health = 500 // pretty strong because it can't move or be shot out of
|
||||
@@ -11,14 +16,19 @@
|
||||
|
||||
fire_dam_coeff = 0.6
|
||||
brute_dam_coeff = 0.5
|
||||
var/list/validfirelocations = list(1, 7) // above the station and at the centcomm z-level.
|
||||
var/list/validfirelocations = list(1, 7, 9) // above the station, at the centcomm z-level and at derelicts.
|
||||
|
||||
var/used = 0
|
||||
var/status = READY
|
||||
|
||||
var/mob/humanload
|
||||
var/mob/passenger
|
||||
|
||||
var/static/list/protrectedareas = list(/area/hallway/secondary/entry/dock, /area/crew_quarters/sleep/cryo, /area/crew_quarters/sleep/bedrooms)
|
||||
var/connected_blastdoor //Connect a blast door's _wifi_id here to have it close when the droppod is launched.
|
||||
|
||||
/obj/vehicle/droppod/legion
|
||||
name = "legion drop pod"
|
||||
desc = "A big metal pod painted in the colors of the Tau Ceti Foreign Legion."
|
||||
icon_state = "legion_pod"
|
||||
|
||||
/obj/vehicle/droppod/Initialize()
|
||||
. = ..()
|
||||
@@ -29,12 +39,38 @@
|
||||
/obj/vehicle/droppod/Move()
|
||||
return
|
||||
|
||||
/obj/vehicle/droppod/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(I.iswelder() && status == USED && !humanload && !passenger)
|
||||
var/obj/item/weldingtool/W = I
|
||||
if(W.welding)
|
||||
src.visible_message(span("notice","[user] starts cutting \the [src] apart."))
|
||||
if(do_after(user, 200))
|
||||
src.visible_message(span("danger","\The [src] is cut apart by [user]!"))
|
||||
playsound(src, 'sound/items/Welder.ogg', 100, 1)
|
||||
new /obj/item/stack/material/titanium(src.loc, 10)
|
||||
new /obj/item/stack/material/plasteel(src.loc, 10)
|
||||
var/obj/item/stack/cable_coil/C = new /obj/item/stack/cable_coil(src.loc)
|
||||
C.amount = rand(5,15)
|
||||
qdel(src)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/vehicle/droppod/verb/launchinterface()
|
||||
set src in oview(1)
|
||||
set category = "Vehicle"
|
||||
set name = "Open launch interface"
|
||||
|
||||
ui_interact(usr)
|
||||
if(status == READY)
|
||||
ui_interact(usr)
|
||||
|
||||
/obj/vehicle/droppod/verb/eject()
|
||||
set src in oview(1)
|
||||
set category = "Vehicle"
|
||||
set name = "Eject Pod"
|
||||
|
||||
if(!usr.canmove || usr.stat || usr.restrained())
|
||||
return
|
||||
unload(usr)
|
||||
|
||||
/obj/vehicle/droppod/load(var/mob/C) // this won't call the parent proc due to the differences and the fact it doesn't use load. Also only mobs can be loaded.
|
||||
if(!ismob(C))
|
||||
@@ -53,6 +89,8 @@
|
||||
C.set_dir(dir)
|
||||
C.anchored = 1
|
||||
|
||||
user_buckle_mob(C, C)
|
||||
icon_state = initial(icon_state)
|
||||
return 1
|
||||
|
||||
/obj/vehicle/droppod/unload(var/mob/user, var/direction) // this also won't call the parent proc because it relies on load and doesn't expect a 2nd person
|
||||
@@ -64,7 +102,7 @@
|
||||
if(direction)
|
||||
dest = get_step(src, direction)
|
||||
else if(user)
|
||||
dest = get_turf(user)
|
||||
dest = get_turf(src)
|
||||
if(!dest)
|
||||
dest = get_step_to(src, get_step(src, turn(dir, 90)))
|
||||
|
||||
@@ -82,29 +120,38 @@
|
||||
if(!isturf(dest))
|
||||
return 0
|
||||
|
||||
user.forceMove(dest)
|
||||
user.set_dir(get_dir(loc, dest))
|
||||
user.anchored = 0
|
||||
user.pixel_x = initial(user.pixel_x)
|
||||
user.pixel_y = initial(user.pixel_y)
|
||||
user.layer = initial(user.layer)
|
||||
for(var/a in contents)
|
||||
if(isliving(a))
|
||||
var/mob/living/L = a
|
||||
L.forceMove(dest)
|
||||
L.set_dir(get_dir(loc, dest))
|
||||
L.anchored = 0
|
||||
L.pixel_x = initial(user.pixel_x)
|
||||
L.pixel_y = initial(user.pixel_y)
|
||||
L.layer = initial(user.layer)
|
||||
user_unbuckle_mob(L, L)
|
||||
else if(istype(a, /obj))
|
||||
var/obj/O = a
|
||||
O.forceMove(src.loc)
|
||||
|
||||
if(user == humanload)
|
||||
humanload = null
|
||||
else
|
||||
passenger = null
|
||||
humanload = null
|
||||
passenger = null
|
||||
icon_state = "[initial(icon_state)]_open"
|
||||
return 1
|
||||
|
||||
/obj/vehicle/droppod/attack_hand(mob/user as mob)
|
||||
..()
|
||||
if(user == (humanload || passenger))
|
||||
unload(user)
|
||||
else
|
||||
if(user == humanload || user == passenger)
|
||||
if(status != USED)
|
||||
launchinterface()
|
||||
else
|
||||
unload(user)
|
||||
else if ((!humanload || !passenger) && status != USED)
|
||||
load(user)
|
||||
|
||||
/obj/vehicle/droppod/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
|
||||
var/data[0]
|
||||
data["used"] = used
|
||||
data["status"] = status
|
||||
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
@@ -118,111 +165,137 @@
|
||||
return 1
|
||||
|
||||
if(href_list["fire"])
|
||||
var/area/A = null
|
||||
var/target = href_list["fire"]
|
||||
if(target == "arrivals")
|
||||
if(prob(20))
|
||||
firefromarea(/area/hallway/secondary/entry/fore)
|
||||
else if(prob(20))
|
||||
firefromarea(/area/hallway/secondary/entry/port)
|
||||
else if(prob(20))
|
||||
firefromarea(/area/hallway/secondary/entry/starboard)
|
||||
else if(prob(20))
|
||||
firefromarea(/area/hallway/secondary/entry/aft)
|
||||
else
|
||||
firefromarea(/area/maintenance/arrivals)
|
||||
else if(target == "cargo")
|
||||
if(prob(65))
|
||||
firefromarea(/area/quartermaster/loading)
|
||||
else
|
||||
firefromarea(/area/quartermaster/qm)
|
||||
else if(target == "tcoms")
|
||||
if(prob(20))
|
||||
firefromarea(/area/tcommsat/entrance)
|
||||
else if(prob(5)) // could drop them on an openturf
|
||||
firefromarea(/area/turret_protected/tcomsat)
|
||||
else if(prob(20))
|
||||
firefromarea(/area/turret_protected/tcomfoyer)
|
||||
else if(prob(20))
|
||||
firefromarea(/area/turret_protected/tcomwest)
|
||||
else if(prob(20))
|
||||
firefromarea(/area/turret_protected/tcomeast)
|
||||
else if(prob(20))
|
||||
firefromarea(/area/tcommsat/computer)
|
||||
else
|
||||
firefromarea(/area/tcommsat/powercontrol)
|
||||
else if(target == "commandescape")
|
||||
firefromarea(/area/bridge/levela)
|
||||
switch(target)
|
||||
if("arrivals")
|
||||
var/arrivals_destination_list = list(
|
||||
/area/hallway/secondary/entry/fore = 2,
|
||||
/area/hallway/secondary/entry/port = 2,
|
||||
/area/security/vacantoffice = 1,
|
||||
/area/hallway/secondary/entry/departure_lounge = 1
|
||||
)
|
||||
A = pickweight(arrivals_destination_list)
|
||||
if("cargo")
|
||||
var/cargo_destination_list = list(
|
||||
/area/quartermaster/loading = 4,
|
||||
/area/quartermaster/qm = 1,
|
||||
/area/janitor/surface = 1,
|
||||
/area/storage/tools = 1,
|
||||
/area/sconference_room = 1
|
||||
)
|
||||
A = pickweight(cargo_destination_list)
|
||||
if("tcoms")
|
||||
var/tcoms_destination_list = list(
|
||||
/area/tcommsat/lounge = 1
|
||||
)
|
||||
A = pickweight(tcoms_destination_list)
|
||||
if("commandescape")
|
||||
var/commandescape_destination_list = list(
|
||||
/area/bridge/levela = 2,
|
||||
/area/bridge/levela/research_dock = 2,
|
||||
/area/security/bridge_surface_checkpoint = 1,
|
||||
/area/maintenance/bridge_elevator/surface = 1
|
||||
)
|
||||
A = pickweight(commandescape_destination_list)
|
||||
if(A)
|
||||
status = LAUNCHING
|
||||
var/mob/user = usr
|
||||
var/datum/nanoui/ui = SSnanoui.get_open_ui(user, src, "main")
|
||||
if(ui)
|
||||
ui.close()
|
||||
if(connected_blastdoor)
|
||||
blastdoor_interact()
|
||||
fire_at_area(A)
|
||||
|
||||
/obj/vehicle/droppod/proc/firefromarea(var/area/A)
|
||||
if(A in protrectedareas)
|
||||
ermessage()
|
||||
/obj/vehicle/droppod/proc/fire_at_area(var/area/A)
|
||||
|
||||
var/list/area_turfs = get_area_turfs(A, null, 0, FALSE)
|
||||
var/list/turf_selection = list()
|
||||
|
||||
for(var/turf/T in area_turfs)
|
||||
var/obstacle_found = FALSE
|
||||
if(!iswall(T))
|
||||
for(var/obj/O in T)
|
||||
if(istype(O, /obj/structure/grille) || istype(O, /obj/machinery/door/airlock/external)) //This is to help prevent the pod from landing right on an exterior window or airlock.
|
||||
obstacle_found = TRUE
|
||||
break
|
||||
if(!obstacle_found)
|
||||
turf_selection += T
|
||||
else
|
||||
obstacle_found = FALSE
|
||||
|
||||
var/target_turf = pick(turf_selection)
|
||||
if(!target_turf)
|
||||
playsound(src, 'sound/machines/buzz-sigh.ogg', 30, 1)
|
||||
visible_message(span("warning","\The [src]'s screen displays an error: Targeting module malfunction. Attempt relaunch."))
|
||||
status = READY
|
||||
if(connected_blastdoor)
|
||||
blastdoor_interact(TRUE)
|
||||
return
|
||||
|
||||
var/turf/targetturf = pick_area_turf(A)
|
||||
if(iswall(targetturf))
|
||||
ermessage(0,2)
|
||||
firefromarea(A)
|
||||
else
|
||||
fire(targetturf)
|
||||
fire(target_turf)
|
||||
|
||||
/obj/vehicle/droppod/proc/fire(var/turf/A)
|
||||
if(!isturf(A))
|
||||
ermessage()
|
||||
playsound(src, 'sound/machines/buzz-sigh.ogg', 30, 1)
|
||||
visible_message(span("warning","\The [src]'s screen displays an error: Targeting module malfunction. Attempt relaunch."))
|
||||
status = READY
|
||||
if(connected_blastdoor)
|
||||
blastdoor_interact(TRUE)
|
||||
return
|
||||
|
||||
if(!(src.z in validfirelocations))
|
||||
ermessage(1, 1)
|
||||
playsound(src, 'sound/machines/buzz-sigh.ogg', 30, 1)
|
||||
visible_message(span("warning","\The [src]'s screen displays an error: Pod cannot be launched from this position."))
|
||||
status = READY
|
||||
if(connected_blastdoor)
|
||||
blastdoor_interact(TRUE)
|
||||
return
|
||||
|
||||
var/turf/aboveturf = GetAbove(A)
|
||||
if(aboveturf)
|
||||
if(aboveturf.is_hole)
|
||||
A.visible_message("<span class='danger'>The [src] drops through the hole in the roof!</span>")
|
||||
applyfalldamage(A)
|
||||
forceMove(aboveturf)
|
||||
else
|
||||
applyfalldamage(aboveturf)
|
||||
aboveturf.ChangeTurf(/turf/space)
|
||||
applyfalldamage(A)
|
||||
A.visible_message("<span class='danger'>The [src] crashes through the roof!</span>")
|
||||
forceMove(A)
|
||||
applyfalldamage(aboveturf)
|
||||
aboveturf.ChangeTurf(/turf/simulated/floor/foamedmetal)
|
||||
for(var/turf/T in range(1, aboveturf))
|
||||
if(turf_clear(T))
|
||||
new /obj/structure/foamedmetal(T, src)
|
||||
applyfalldamage(A)
|
||||
explosion(A, 0, 0, 2, 2)
|
||||
var/datum/effect/effect/system/smoke_spread/S = new /datum/effect/effect/system/smoke_spread()
|
||||
S.set_up(5, 0, A)
|
||||
S.start()
|
||||
if(humanload)
|
||||
var/mob/M = humanload
|
||||
shake_camera(M, 5, 1)
|
||||
forceMove(A)
|
||||
A.visible_message(span("danger","\The [src] crashes through the roof!"))
|
||||
|
||||
var/turf/belowturf = GetBelow(A)
|
||||
if(belowturf)
|
||||
//sound here
|
||||
belowturf.visible_message("<span class='danger'>You hear something crash into the ceiling above!</span>")
|
||||
var/turf/belowturf = GetBelow(A)
|
||||
if(belowturf)
|
||||
belowturf.visible_message(span("danger","You hear something crash into the ceiling above!"))
|
||||
|
||||
if(humanload)
|
||||
humanload.forceMove(loc)
|
||||
|
||||
if(passenger)
|
||||
passenger.forceMove(loc)
|
||||
|
||||
used = 1
|
||||
status = USED
|
||||
|
||||
/obj/vehicle/droppod/proc/applyfalldamage(var/turf/A)
|
||||
for(var/mob/T in A)
|
||||
if(T.simulated)
|
||||
T.gib()
|
||||
T.visible_message("<span class='danger'>[T] is squished by the drop pod!</span>")
|
||||
T.visible_message(span("danger","[T] is squished by the drop pod!"))
|
||||
for(var/obj/B in A)
|
||||
if(B.simulated)
|
||||
if(B.simulated && B.density)
|
||||
qdel(B)
|
||||
B.visible_message("<span class='danger'>[B] is destroyed by the drop pod!</span>")
|
||||
B.visible_message(span("danger","[B] is destroyed by the drop pod!"))
|
||||
|
||||
/obj/vehicle/droppod/proc/ermessage(var/type = 0, var/subtype = 0)
|
||||
if(!type)
|
||||
if(!subtype)
|
||||
playsound(src, 'sound/machines/buzz-sigh.ogg', 30, 1)
|
||||
visible_message("<span class='warning'>\The [src]'s screen flashes an error!</span>")
|
||||
else if(subtype == 1)
|
||||
playsound(src, 'sound/machines/buzz-sigh.ogg', 30, 1)
|
||||
visible_message("<span class='warning'>\The [src]'s screen flashes an error reading 'Invalid location to launch from!'</span>")
|
||||
else if(subtype == 2)
|
||||
playsound(src, 'sound/machines/buzz-sigh.ogg', 30, 1)
|
||||
visible_message("<span class='warning'>Target location blocked... Rerouting...</span>")
|
||||
/obj/vehicle/droppod/proc/blastdoor_interact(var/open)
|
||||
var/datum/wifi/sender/door/wifi_sender_blast = new(connected_blastdoor, src)
|
||||
if(open)
|
||||
wifi_sender_blast.activate("open")
|
||||
else
|
||||
if(subtype == 1)
|
||||
visible_message("<span class='notice'>\The [src]'s screen flashes a message reading 'Launch coordinates verified.'</span>")
|
||||
else if(subtype == 2)
|
||||
visible_message("<span class='notice'>The [src]'s screen flashes a message reading 'Laucnhing.'</span>")
|
||||
wifi_sender_blast.activate("close")
|
||||
var/turf/T = src.loc
|
||||
T.ChangeTurf(/turf/space)
|
||||
|
||||
#undef READY
|
||||
#undef USED
|
||||
#undef LAUNCHING
|
||||
|
||||
|
||||
Reference in New Issue
Block a user