mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
Adds flaming exhaust when shuttles launch (#12508)
* shuttle engine flames * 1 * awful blue fire * more blue * more fire * fixes projectiles phasing into windowgrilles * shorter fire
This commit is contained in:
@@ -128,6 +128,10 @@ datum/shuttle_controller/proc/move_pod(var/start_type,var/end_type,var/direction
|
||||
var/area/start_location=locate(start_type)
|
||||
var/area/end_location=locate(end_type)
|
||||
|
||||
for(var/obj/structure/shuttle/engine/propulsion/P in start_location)
|
||||
spawn()
|
||||
P.shoot_exhaust()
|
||||
|
||||
start_location.move_contents_to(end_location, null, direction)
|
||||
|
||||
for(var/obj/machinery/door/D in all_doors)
|
||||
@@ -189,6 +193,9 @@ datum/shuttle_controller/emergency_shuttle/process()
|
||||
|
||||
/* --- Shuttle is in transit to Central Command from SS13 --- */
|
||||
if(direction == 2)
|
||||
for(var/obj/structure/shuttle/engine/propulsion/P in shuttle.linked_area)
|
||||
spawn()
|
||||
P.shoot_exhaust()
|
||||
if(timeleft>0)
|
||||
return 0
|
||||
|
||||
@@ -265,6 +272,9 @@ datum/shuttle_controller/emergency_shuttle/process()
|
||||
spawn(0)
|
||||
D.close()
|
||||
D.locked = 1
|
||||
for(var/obj/structure/shuttle/engine/propulsion/P in shuttle.linked_area)
|
||||
spawn()
|
||||
P.shoot_exhaust()
|
||||
|
||||
if(timeleft>0)
|
||||
return 0
|
||||
@@ -293,6 +303,11 @@ datum/shuttle_controller/emergency_shuttle/process()
|
||||
if(shuttle && istype(shuttle,/datum/shuttle/escape))
|
||||
var/datum/shuttle/escape/E = shuttle
|
||||
E.close_all_doors()
|
||||
|
||||
for(var/obj/structure/shuttle/engine/propulsion/P in E.linked_area)
|
||||
spawn()
|
||||
P.shoot_exhaust()
|
||||
|
||||
if(!E.move_to_dock(E.transit_port, 0, turn(E.dir,180))) //Throw everything backwards
|
||||
message_admins("WARNING: THE EMERGENCY SHUTTLE FAILED TO FIND TRANSIT! PANIC PANIC PANIC")
|
||||
else
|
||||
|
||||
@@ -273,6 +273,12 @@
|
||||
|
||||
log_game("[usr ? key_name(usr) : "Something"] sent [name] ([type]) to [D.areaname]")
|
||||
|
||||
if(get_pre_flight_delay())
|
||||
spawn(max(1,get_pre_flight_delay()-5))
|
||||
for(var/obj/structure/shuttle/engine/propulsion/P in linked_area)
|
||||
spawn()
|
||||
P.shoot_exhaust()
|
||||
|
||||
spawn(get_pre_flight_delay())
|
||||
//If moving to another zlevel, check for items which can't leave the zlevel (nuke disk, primarily)
|
||||
if(linked_port.z != D.z)
|
||||
@@ -314,6 +320,10 @@
|
||||
if(transit_port && get_transit_delay())
|
||||
if(use_transit == TRANSIT_ALWAYS || (use_transit == TRANSIT_ACROSS_Z_LEVELS && (linked_area.z != destination_port.z)))
|
||||
move_to_dock(transit_port)
|
||||
spawn(max(1,get_transit_delay()-5))
|
||||
for(var/obj/structure/shuttle/engine/propulsion/P in linked_area)
|
||||
spawn()
|
||||
P.shoot_exhaust()
|
||||
sleep(get_transit_delay())
|
||||
|
||||
if(destination_port)
|
||||
|
||||
@@ -10,20 +10,22 @@
|
||||
var/blast_age = 1
|
||||
var/duration = 10 //1/10ths of a second
|
||||
var/spread = 1
|
||||
var/spread_start = 100
|
||||
var/spread_chance = 20
|
||||
|
||||
/obj/effect/fire_blast/New(turf/T, var/damage = 0, var/current_step = 0, var/age = 1, var/pressure = 0, var/blast_temperature = 0)
|
||||
/obj/effect/fire_blast/New(turf/T, var/damage = 0, var/current_step = 0, var/age = 1, var/pressure = 0, var/blast_temperature = 0, var/fire_duration)
|
||||
..(T)
|
||||
icon_state = "[rand(1,3)]"
|
||||
|
||||
blast_age = age
|
||||
if(fire_duration)
|
||||
duration = fire_duration
|
||||
|
||||
if(damage)
|
||||
fire_damage = damage
|
||||
set_light(3)
|
||||
|
||||
var/spread_start = 100
|
||||
pressure = round(pressure)
|
||||
var/spread_chance = 20
|
||||
var/adjusted_fire_damage = fire_damage
|
||||
|
||||
switch(pressure)
|
||||
@@ -65,7 +67,7 @@
|
||||
if(D.density)
|
||||
obstructed = 1
|
||||
if(prob(spread_chance) && TS.Adjacent(TU) && !TU.density && !tilehasfire && !obstructed)
|
||||
new /obj/effect/fire_blast(TU, fire_damage, current_step, blast_age+1, pressure, blast_temperature)
|
||||
new type(TU, fire_damage, current_step, blast_age+1, pressure, blast_temperature, duration)
|
||||
sleep(1)
|
||||
|
||||
spawn()
|
||||
@@ -105,6 +107,14 @@
|
||||
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/fire_blast/blue
|
||||
icon = 'icons/effects/fireblue.dmi'
|
||||
|
||||
/obj/effect/fire_blast/blue/New(T, var/damage = 0, var/current_step = 0, var/age = 1, var/pressure = 0, var/blast_temperature = 0, var/fire_duration)
|
||||
..(T, damage, current_step, age, pressure, blast_temperature, fire_duration)
|
||||
spread_start = 0
|
||||
spread_chance = 30
|
||||
|
||||
/obj/effect/gas_puff
|
||||
name = "gas puff"
|
||||
desc = "A small puff of gas."
|
||||
|
||||
@@ -127,6 +127,9 @@
|
||||
else
|
||||
return !density
|
||||
|
||||
/obj/structure/grille/projectile_check() //handled by the projectile's grillepasschance in Cross()
|
||||
return
|
||||
|
||||
/obj/structure/grille/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(!Proj)
|
||||
return
|
||||
|
||||
@@ -41,6 +41,27 @@
|
||||
icon_state = "propulsion"
|
||||
opacity = 1
|
||||
|
||||
/obj/structure/shuttle/engine/propulsion/proc/shoot_exhaust()
|
||||
|
||||
var/turf/target = get_edge_target_turf(src,dir)
|
||||
var/turf/T = get_turf(src)
|
||||
var/obj/item/projectile/A = new /obj/item/projectile/fire_breath/shuttle_exhaust(T)
|
||||
|
||||
for(var/i=0, i<2, i++)
|
||||
A.original = target
|
||||
A.starting = T
|
||||
A.shot_from = src
|
||||
A.current = T
|
||||
A.yo = target.y - T.y
|
||||
A.xo = target.x - T.x
|
||||
A.OnFired()
|
||||
spawn()
|
||||
A.process()
|
||||
|
||||
target = get_edge_target_turf(src,reverse_direction(dir))
|
||||
sleep(6)
|
||||
A = new /obj/item/projectile/fire_breath/shuttle_exhaust(T)
|
||||
|
||||
/obj/structure/shuttle/engine/propulsion/left
|
||||
icon_state = "propulsion_l"
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ var/global/datum/shuttle/supply/cargo_shuttle = new(starting_area = /area/shuttl
|
||||
var/obj/docking_port/destination/dock_centcom
|
||||
var/obj/docking_port/destination/dock_station
|
||||
|
||||
pre_flight_delay = 0
|
||||
pre_flight_delay = 10
|
||||
|
||||
cooldown = 0
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ var/global/datum/shuttle/transport/transport_shuttle = new(starting_area = /area
|
||||
cant_leave_zlevel = list() //Bus
|
||||
|
||||
cooldown = 0
|
||||
pre_flight_delay = 0
|
||||
pre_flight_delay = 10
|
||||
transit_delay = 0
|
||||
|
||||
stable = 1
|
||||
@@ -71,7 +71,7 @@ var/global/datum/shuttle/admin/admin_shuttle = new(starting_area = /area/shuttle
|
||||
cant_leave_zlevel = list() //Bus
|
||||
|
||||
cooldown = 0
|
||||
pre_flight_delay = 0
|
||||
pre_flight_delay = 10
|
||||
transit_delay = 0
|
||||
|
||||
stable = 1
|
||||
|
||||
@@ -203,6 +203,10 @@ var/list/mechtoys = list(
|
||||
message_admins("WARNING: Cargo shuttle unable to find the station!")
|
||||
warning("Cargo shuttle can't find centcomm")
|
||||
else //at station
|
||||
for(var/obj/structure/shuttle/engine/propulsion/P in cargo_shuttle.linked_area)
|
||||
spawn()
|
||||
P.shoot_exhaust()
|
||||
sleep(3)
|
||||
destination = cargo_shuttle.dock_centcom
|
||||
|
||||
at_station = 0
|
||||
|
||||
@@ -338,12 +338,15 @@ obj/item/projectile/kinetic/New()
|
||||
penetration_message = 0
|
||||
grillepasschance = 100
|
||||
|
||||
var/fire_blast_type = /obj/effect/fire_blast
|
||||
|
||||
var/stepped_range = 0
|
||||
var/max_range = 9
|
||||
|
||||
var/fire_damage = 10
|
||||
var/pressure = ONE_ATMOSPHERE * 4.5
|
||||
var/temperature = T0C + 175
|
||||
var/fire_duration
|
||||
|
||||
/obj/item/projectile/fire_breath/process_step()
|
||||
..()
|
||||
@@ -358,4 +361,12 @@ obj/item/projectile/kinetic/New()
|
||||
if(!T)
|
||||
return
|
||||
|
||||
new /obj/effect/fire_blast(T, fire_damage, stepped_range, 1, pressure, temperature)
|
||||
new fire_blast_type(T, fire_damage, stepped_range, 1, pressure, temperature, fire_duration)
|
||||
|
||||
/obj/item/projectile/fire_breath/shuttle_exhaust //don't stand behind rockets
|
||||
fire_blast_type = /obj/effect/fire_blast/blue
|
||||
|
||||
temperature = PLASMA_UPPER_TEMPERATURE
|
||||
max_range = 9
|
||||
fire_damage = 20
|
||||
fire_duration = 6 //shorter but hotter
|
||||
@@ -75,8 +75,7 @@
|
||||
..()
|
||||
|
||||
for(var/turf/T in locations)
|
||||
var/obj/effect/fire_blast/ring_of_fire/F = new /obj/effect/fire_blast/ring_of_fire(T)
|
||||
F.duration = duration
|
||||
var/obj/effect/fire_blast/ring_of_fire/F = new /obj/effect/fire_blast/ring_of_fire(T, fire_duration = duration)
|
||||
|
||||
var/lock_id = "\ref[F]"
|
||||
add_lock_cat(/datum/locking_category/ring_of_fire, lock_id)
|
||||
|
||||
BIN
icons/effects/fireblue.dmi
Normal file
BIN
icons/effects/fireblue.dmi
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 273 KiB |
Reference in New Issue
Block a user