[Ready] Shuttle dock() rewrite (#2040)

This commit is contained in:
CitadelStationBot
2017-07-18 00:52:18 -05:00
committed by kevinz000
parent bbc28aa856
commit e522f715a2
22 changed files with 1034 additions and 3766 deletions
+15 -8
View File
@@ -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)
+25 -40
View File
@@ -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)
+2
View File
@@ -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
View File
@@ -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()