Commit b3e1a071 authored by Sprok0's avatar Sprok0 Committed by Intigracy
Browse files

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
parent e1e6fde2
......@@ -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
\ No newline at end of file
......@@ -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)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment