[Ready] Shuttle dock() rewrite (#2040)
This commit is contained in:
committed by
kevinz000
parent
bbc28aa856
commit
e522f715a2
+15
-8
@@ -113,20 +113,27 @@
|
||||
if(T.z == ZLEVEL_TRANSIT)
|
||||
for(var/A in SSshuttle.mobile)
|
||||
var/obj/docking_port/mobile/M = A
|
||||
if(M.launch_status == ENDGAME_TRANSIT && T in M.areaInstance)
|
||||
return TRUE
|
||||
if(M.launch_status == ENDGAME_TRANSIT)
|
||||
for(var/place in M.shuttle_areas)
|
||||
var/area/shuttle/shuttle_area = place
|
||||
if(T in shuttle_area)
|
||||
return TRUE
|
||||
|
||||
if(T.z != ZLEVEL_CENTCOM)//if not, don't bother
|
||||
return FALSE
|
||||
|
||||
//check for centcomm shuttles
|
||||
//Check for centcom itself
|
||||
if(istype(T.loc, /area/centcom))
|
||||
return TRUE
|
||||
|
||||
//Check for centcomm shuttles
|
||||
for(var/A in SSshuttle.mobile)
|
||||
var/obj/docking_port/mobile/M = A
|
||||
if(M.launch_status == ENDGAME_LAUNCHED && T in M.areaInstance)
|
||||
return TRUE
|
||||
|
||||
//finally check for centcom itself
|
||||
return istype(T.loc,/area/centcom)
|
||||
if(M.launch_status == ENDGAME_LAUNCHED)
|
||||
for(var/place in M.shuttle_areas)
|
||||
var/area/shuttle/shuttle_area = place
|
||||
if(T in shuttle_area)
|
||||
return TRUE
|
||||
|
||||
/atom/proc/onSyndieBase()
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
@@ -240,9 +240,7 @@
|
||||
return 0
|
||||
if(issilicon(owner.current))
|
||||
return 0
|
||||
|
||||
var/area/A = get_area(owner.current)
|
||||
if(SSshuttle.emergency.areaInstance != A)
|
||||
if(SSshuttle.emergency.shuttle_areas[get_area(owner.current)])
|
||||
return 0
|
||||
|
||||
return SSshuttle.emergency.is_hijacked()
|
||||
@@ -255,40 +253,31 @@
|
||||
|
||||
/datum/objective/hijackclone/check_completion()
|
||||
if(!owner.current)
|
||||
return 0
|
||||
return FALSE
|
||||
if(SSshuttle.emergency.mode != SHUTTLE_ENDGAME)
|
||||
return 0
|
||||
|
||||
var/area/A = SSshuttle.emergency.areaInstance
|
||||
return FALSE
|
||||
|
||||
var/in_shuttle = FALSE
|
||||
for(var/mob/living/player in GLOB.player_list) //Make sure nobody else is onboard
|
||||
if(player.mind && player.mind != owner)
|
||||
if(player.stat != DEAD)
|
||||
if(issilicon(player)) //Borgs are technically dead anyways
|
||||
continue
|
||||
if(isanimal(player)) //animals don't count
|
||||
continue
|
||||
if(isbrain(player)) //also technically dead
|
||||
continue
|
||||
if(get_area(player) == A)
|
||||
if(SSshuttle.emergency.shuttle_areas[get_area(player)])
|
||||
if(player.mind && player.mind != owner)
|
||||
if(player.stat != DEAD)
|
||||
if(issilicon(player)) //Borgs are technically dead anyways
|
||||
continue
|
||||
if(isanimal(player)) //animals don't count
|
||||
continue
|
||||
if(isbrain(player)) //also technically dead
|
||||
continue
|
||||
var/location = get_turf(player.mind.current)
|
||||
if(player.real_name != owner.current.real_name && !istype(location, /turf/open/floor/plasteel/shuttle/red) && !istype(location, /turf/open/floor/mineral/plastitanium/brig))
|
||||
return 0
|
||||
|
||||
for(var/mob/living/player in GLOB.player_list) //Make sure at least one of you is onboard
|
||||
if(player.mind && player.mind != owner)
|
||||
if(player.stat != DEAD)
|
||||
if(issilicon(player)) //Borgs are technically dead anyways
|
||||
continue
|
||||
if(isanimal(player)) //animals don't count
|
||||
continue
|
||||
if(isbrain(player)) //also technically dead
|
||||
continue
|
||||
if(get_area(player) == A)
|
||||
var/location = get_turf(player.mind.current)
|
||||
if(player.real_name == owner.current.real_name && !istype(location, /turf/open/floor/plasteel/shuttle/red) && !istype(location, /turf/open/floor/mineral/plastitanium/brig))
|
||||
return 1
|
||||
return 0
|
||||
if(istype(location, /turf/open/floor/plasteel/shuttle/red))
|
||||
continue
|
||||
if(istype(location, /turf/open/floor/mineral/plastitanium/brig))
|
||||
continue
|
||||
if(player.real_name != owner.current.real_name)
|
||||
return FALSE
|
||||
else
|
||||
in_shuttle = TRUE
|
||||
return in_shuttle
|
||||
|
||||
/datum/objective/block
|
||||
explanation_text = "Do not allow any organic lifeforms to escape on the shuttle alive."
|
||||
@@ -301,14 +290,12 @@
|
||||
if(SSshuttle.emergency.mode != SHUTTLE_ENDGAME)
|
||||
return 1
|
||||
|
||||
var/area/A = SSshuttle.emergency.areaInstance
|
||||
|
||||
for(var/mob/living/player in GLOB.player_list)
|
||||
if(issilicon(player))
|
||||
continue
|
||||
if(player.mind)
|
||||
if(player.stat != DEAD)
|
||||
if(get_area(player) == A)
|
||||
if(get_area(player) in SSshuttle.emergency.shuttle_areas)
|
||||
return 0
|
||||
|
||||
return 1
|
||||
@@ -323,10 +310,8 @@
|
||||
if(SSshuttle.emergency.mode != SHUTTLE_ENDGAME)
|
||||
return 1
|
||||
|
||||
var/area/A = SSshuttle.emergency.areaInstance
|
||||
|
||||
for(var/mob/living/player in GLOB.player_list)
|
||||
if(get_area(player) == A && player.mind && player.stat != DEAD && ishuman(player))
|
||||
if(get_area(player) in SSshuttle.emergency.shuttle_areas && player.mind && player.stat != DEAD && ishuman(player))
|
||||
var/mob/living/carbon/human/H = player
|
||||
if(H.dna.species.id != "human")
|
||||
return 0
|
||||
@@ -701,7 +686,7 @@ GLOBAL_LIST_EMPTY(possible_items_special)
|
||||
explanation_text = "Destroy [target.name], the experimental AI."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
|
||||
|
||||
/datum/objective/destroy/internal
|
||||
var/stolen = FALSE //Have we already eliminated this target?
|
||||
|
||||
|
||||
@@ -143,11 +143,6 @@ GLOBAL_LIST_EMPTY(telecomms_list)
|
||||
var/turf/position = get_turf(src)
|
||||
listening_level = position.z
|
||||
|
||||
/obj/machinery/telecomms/onShuttleMove(turf/T1, rotation)
|
||||
. = ..()
|
||||
if(. && T1) // Update listening Z, just in case you have telecomm relay on a shuttle
|
||||
listening_level = T1.z
|
||||
|
||||
/obj/machinery/telecomms/Initialize(mapload)
|
||||
..()
|
||||
if(mapload && autolinkers.len)
|
||||
|
||||
@@ -31,6 +31,8 @@
|
||||
/turf/open/space/transit/proc/throw_atom(atom/movable/AM)
|
||||
if(!AM || istype(AM, /obj/docking_port))
|
||||
return
|
||||
if(AM.loc != src) // Multi-tile objects are "in" multiple locs but its loc is it's true placement.
|
||||
return // Don't move multi tile objects if their origin isnt in transit
|
||||
var/max = world.maxx-TRANSITIONEDGE
|
||||
var/min = 1+TRANSITIONEDGE
|
||||
|
||||
|
||||
+14
-20
@@ -197,11 +197,11 @@
|
||||
qdel(L)
|
||||
|
||||
//wrapper for ChangeTurf()s that you want to prevent/affect without overriding ChangeTurf() itself
|
||||
/turf/proc/TerraformTurf(path, defer_change = FALSE, ignore_air = FALSE)
|
||||
return ChangeTurf(path, defer_change, ignore_air)
|
||||
/turf/proc/TerraformTurf(path, defer_change = FALSE, ignore_air = FALSE, new_baseturf)
|
||||
return ChangeTurf(path, defer_change, ignore_air, new_baseturf)
|
||||
|
||||
//Creates a new turf
|
||||
/turf/proc/ChangeTurf(path, defer_change = FALSE, ignore_air = FALSE)
|
||||
/turf/proc/ChangeTurf(path, defer_change = FALSE, ignore_air = FALSE, new_baseturf)
|
||||
if(!path)
|
||||
return
|
||||
if(!GLOB.use_preloader && path == type) // Don't no-op if the map loader requires it to be reconstructed
|
||||
@@ -212,7 +212,10 @@
|
||||
qdel(src) //Just get the side effects and call Destroy
|
||||
var/turf/W = new path(src)
|
||||
|
||||
W.baseturf = old_baseturf
|
||||
if(new_baseturf)
|
||||
W.baseturf = new_baseturf
|
||||
else
|
||||
W.baseturf = old_baseturf
|
||||
|
||||
if(!defer_change)
|
||||
W.AfterChange(ignore_air)
|
||||
@@ -223,10 +226,6 @@
|
||||
levelupdate()
|
||||
CalculateAdjacentTurfs()
|
||||
|
||||
if(!can_have_cabling())
|
||||
for(var/obj/structure/cable/C in contents)
|
||||
C.deconstruct()
|
||||
|
||||
//update firedoor adjacency
|
||||
var/list/turfs_to_check = get_adjacent_open_turfs(src) | src
|
||||
for(var/I in turfs_to_check)
|
||||
@@ -408,21 +407,16 @@
|
||||
if(!SSticker.HasRoundStarted())
|
||||
add_blueprints(AM)
|
||||
|
||||
/turf/proc/empty(turf_type=/turf/open/space)
|
||||
/turf/proc/empty(turf_type=/turf/open/space, baseturf_type)
|
||||
// Remove all atoms except observers, landmarks, docking ports
|
||||
var/turf/T0 = src
|
||||
for(var/A in T0.GetAllContents())
|
||||
if(istype(A, /mob/dead))
|
||||
continue
|
||||
if(istype(A, /obj/effect/landmark))
|
||||
continue
|
||||
if(istype(A, /obj/docking_port))
|
||||
continue
|
||||
if(A == T0)
|
||||
continue
|
||||
qdel(A, force=TRUE)
|
||||
var/static/list/ignored_atoms = typecacheof(list(/mob/dead, /obj/effect/landmark, /obj/docking_port, /atom/movable/lighting_object))
|
||||
var/list/allowed_contents = typecache_filter_list(T0.GetAllContents(),ignored_atoms)
|
||||
for(var/i in 1 to allowed_contents.len)
|
||||
var/thing = allowed_contents[i]
|
||||
qdel(thing, force=TRUE)
|
||||
|
||||
T0.ChangeTurf(turf_type)
|
||||
T0.ChangeTurf(turf_type, FALSE, FALSE, baseturf_type)
|
||||
|
||||
SSair.remove_from_active(T0)
|
||||
T0.CalculateAdjacentTurfs()
|
||||
|
||||
Reference in New Issue
Block a user