mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-22 08:01:06 +00:00
Adds drop pods (#3296)
Adds drop pods syndicates can use to drop in on locations. It causes breaches and can only target the surface level (minus the arrivals dock, cyro, and the bedroom).
This commit is contained in:
@@ -2174,6 +2174,7 @@
|
||||
#include "code\modules\udp\ship_udp.dm"
|
||||
#include "code\modules\vehicles\bike.dm"
|
||||
#include "code\modules\vehicles\cargo_train.dm"
|
||||
#include "code\modules\vehicles\droppod.dm"
|
||||
#include "code\modules\vehicles\train.dm"
|
||||
#include "code\modules\vehicles\vehicle.dm"
|
||||
#include "code\modules\ventcrawl\ventcrawl.dm"
|
||||
|
||||
228
code/modules/vehicles/droppod.dm
Normal file
228
code/modules/vehicles/droppod.dm
Normal file
@@ -0,0 +1,228 @@
|
||||
/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
|
||||
|
||||
load_item_visible = 0
|
||||
health = 500 // pretty strong because it can't move or be shot out of
|
||||
maxhealth = 500
|
||||
|
||||
fire_dam_coeff = 0.6
|
||||
brute_dam_coeff = 0.5
|
||||
var/list/validfirelocations = list(7) // 7 Is above the station.
|
||||
|
||||
var/used = 0
|
||||
|
||||
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)
|
||||
|
||||
/obj/vehicle/droppod/Initialize()
|
||||
. = ..()
|
||||
|
||||
/obj/vehicle/droppod/emag_act()
|
||||
return
|
||||
|
||||
/obj/vehicle/droppod/Move()
|
||||
return
|
||||
|
||||
/obj/vehicle/droppod/verb/launchinterface()
|
||||
set src in oview(1)
|
||||
set category = "Vehicle"
|
||||
set name = "Open launch interface"
|
||||
|
||||
ui_interact(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))
|
||||
return 0
|
||||
if(!isturf(C.loc))
|
||||
return 0
|
||||
if((humanload && passenger) || C.anchored)
|
||||
return 0
|
||||
if(humanload)
|
||||
passenger = C
|
||||
else
|
||||
humanload = C
|
||||
|
||||
C.forceMove(src)
|
||||
|
||||
C.set_dir(dir)
|
||||
C.anchored = 1
|
||||
|
||||
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
|
||||
if(!(humanload || passenger))
|
||||
return 0
|
||||
|
||||
var/turf/dest = null
|
||||
|
||||
if(direction)
|
||||
dest = get_step(src, direction)
|
||||
else if(user)
|
||||
dest = get_turf(user)
|
||||
if(!dest)
|
||||
dest = get_step_to(src, get_step(src, turn(dir, 90)))
|
||||
|
||||
if(!dest || dest == get_turf(src))
|
||||
var/list/options = new()
|
||||
for(var/test_dir in alldirs)
|
||||
var/new_dir = get_step_to(src, get_step(src, test_dir))
|
||||
if(new_dir && user.Adjacent(new_dir))
|
||||
options += new_dir
|
||||
if(options.len)
|
||||
dest = pick(options)
|
||||
else
|
||||
dest = get_turf(src)
|
||||
|
||||
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)
|
||||
|
||||
if(user == humanload)
|
||||
humanload = null
|
||||
else
|
||||
passenger = null
|
||||
return 1
|
||||
|
||||
/obj/vehicle/droppod/attack_hand(mob/user as mob)
|
||||
..()
|
||||
if(user == (humanload || passenger))
|
||||
unload(user)
|
||||
else
|
||||
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
|
||||
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, "droppod.tmpl", "Drop Pod", 400, 400, state = state)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
|
||||
/obj/vehicle/droppod/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(href_list["fire"])
|
||||
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)
|
||||
|
||||
/obj/vehicle/droppod/proc/firefromarea(var/area/A)
|
||||
if(A in protrectedareas)
|
||||
ermessage()
|
||||
return
|
||||
|
||||
var/turf/targetturf = pick_area_turf(A)
|
||||
if(iswall(targetturf))
|
||||
ermessage(0,2)
|
||||
firefromarea(A)
|
||||
else
|
||||
fire(targetturf)
|
||||
|
||||
/obj/vehicle/droppod/proc/fire(var/turf/A)
|
||||
if(!isturf(A))
|
||||
ermessage()
|
||||
return
|
||||
|
||||
if(!(src.z in validfirelocations))
|
||||
ermessage(1, 1)
|
||||
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)
|
||||
|
||||
var/turf/belowturf = GetBelow(A)
|
||||
if(belowturf)
|
||||
//sound here
|
||||
belowturf.visible_message("<span class='danger'>You hear something crash into the ceiling above!</span>")
|
||||
|
||||
if(humanload)
|
||||
humanload.forceMove(loc)
|
||||
|
||||
if(passenger)
|
||||
passenger.forceMove(loc)
|
||||
|
||||
used = 1
|
||||
|
||||
/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>")
|
||||
for(var/obj/B in A)
|
||||
if(B.simulated)
|
||||
qdel(B)
|
||||
B.visible_message("<span class='danger'>[B] is destroyed by the drop pod!</span>")
|
||||
|
||||
/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>")
|
||||
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>")
|
||||
4
html/changelogs/printer16-droppod.yml
Normal file
4
html/changelogs/printer16-droppod.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
author: Printer16
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Added a drop pod."
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
14
nano/templates/droppod.tmpl
Normal file
14
nano/templates/droppod.tmpl
Normal file
@@ -0,0 +1,14 @@
|
||||
{{:helper.syndicateMode()}}
|
||||
<H2><span class="white">Welcome Operative.</span></H2>
|
||||
|
||||
<H2>Please select your launch target:</H2>
|
||||
{{if data.used}}
|
||||
Pod Status: <span class="bad">Nonoperational</span></H2>
|
||||
{{else}}
|
||||
Pod Status: <span class="good">Operational</span></H2>
|
||||
{{:helper.link('Arrivals', 'gear', {'fire' : 'arrivals'})}}<br><br>
|
||||
{{:helper.link('Cargo', 'gear', {'fire' : 'cargo'})}}<br><br>
|
||||
{{:helper.link('Telecommunications', 'gear', {'fire' : 'tcoms'})}}<br><br>
|
||||
{{:helper.link('Command Escape', 'gear', {'fire' : 'commandescape'})}}<br><br>
|
||||
{{/if}}
|
||||
|
||||
Reference in New Issue
Block a user