Shuttle update: Part Two: The Legion Protects (#7457)

This commit is contained in:
fernerr
2019-11-23 18:50:19 +01:00
committed by Werner
parent 0683b6f487
commit aa2e02c1a6
82 changed files with 22253 additions and 13703 deletions
@@ -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."
+42 -2
View File
@@ -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."
+28 -6
View File
@@ -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")
+13
View File
@@ -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."
+18 -1
View File
@@ -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"
+32 -10
View File
@@ -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"
+19 -5
View File
@@ -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
+1 -1
View File
@@ -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),
+12
View File
@@ -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."
+19 -1
View File
@@ -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
View File
@@ -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