Final lighting updates

This commit is contained in:
Mark van Alphen
2019-04-22 22:43:21 +02:00
parent ab7fb176f6
commit 3285efd36c
7 changed files with 351 additions and 377 deletions
+19 -35
View File
@@ -55,11 +55,11 @@ var/list/ghostteleportlocs = list()
name = "\improper Arrival Area"
icon_state = "start"
/area/admin/
/area/admin
name = "\improper Admin Room"
icon_state = "start"
requires_power = 0
dynamic_lighting = 0
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
/area/adminconstruction
@@ -106,7 +106,6 @@ var/list/ghostteleportlocs = list()
/area/shuttle
no_teleportlocs = TRUE
requires_power = FALSE
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
valid_territory = FALSE
/area/shuttle/arrival
@@ -423,7 +422,7 @@ var/list/ghostteleportlocs = list()
/area/shuttle/trade
name = "Trade Shuttle"
icon_state = "shuttle"
requires_power = 0
requires_power = FALSE
/area/shuttle/trade/sol
name = "Sol Freighter"
@@ -440,17 +439,16 @@ var/list/ghostteleportlocs = list()
/area/start // will be unused once kurper gets his login interface patch done
name = "start area"
icon_state = "start"
requires_power = 0
luminosity = 1
requires_power = FALSE
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
has_gravity = 1
has_gravity = TRUE
// === end remove
/area/alien
name = "\improper Alien base"
icon_state = "yellow"
requires_power = 0
requires_power = FALSE
// CENTCOM
@@ -458,7 +456,7 @@ var/list/ghostteleportlocs = list()
name = "\improper Centcom"
icon_state = "centcom"
requires_power = FALSE
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
nad_allowed = TRUE
/area/centcom/control
@@ -511,7 +509,6 @@ var/list/ghostteleportlocs = list()
/area/syndicate_mothership/control
name = "\improper Syndicate Control Room"
icon_state = "syndie-control"
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
/area/syndicate_mothership/elite_squad
name = "\improper Syndicate Elite Squad"
@@ -543,18 +540,16 @@ var/list/ghostteleportlocs = list()
name = "\improper Thunderdome"
icon_state = "thunder"
requires_power = FALSE
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
/area/tdome/arena_source
name = "\improper Thunderdome Arena Template"
icon_state = "thunder"
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
/area/tdome/arena
name = "\improper Thunderdome Arena"
icon_state = "thunder"
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
/area/tdome/tdome1
name = "\improper Thunderdome (Team 1)"
@@ -630,13 +625,12 @@ var/list/ghostteleportlocs = list()
icon_state = "yellow"
requires_power = FALSE
has_gravity = TRUE
dynamic_lighting = FALSE
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
/area/wizard_station
name = "\improper Wizard's Den"
icon_state = "yellow"
requires_power = FALSE
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
/area/ninja
name = "\improper Ninja Area Parent"
@@ -654,7 +648,7 @@ var/list/ghostteleportlocs = list()
name = "\improper Vox Base"
icon_state = "yellow"
requires_power = FALSE
dynamic_lighting = FALSE
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
no_teleportlocs = TRUE
/area/vox_station/transit
@@ -1237,7 +1231,7 @@ var/list/ghostteleportlocs = list()
/area/holodeck
name = "\improper Holodeck"
icon_state = "Holodeck"
dynamic_lighting = 0
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
/area/holodeck/alphadeck
name = "\improper Holodeck Alpha"
@@ -2306,26 +2300,22 @@ var/list/ghostteleportlocs = list()
/area/turret_protected/AIsatextFP
name = "\improper AI Sat Ext"
icon_state = "storage"
luminosity = 1
dynamic_lighting = 0
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
/area/turret_protected/AIsatextFS
name = "\improper AI Sat Ext"
icon_state = "storage"
luminosity = 1
dynamic_lighting = 0
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
/area/turret_protected/AIsatextAS
name = "\improper AI Sat Ext"
icon_state = "storage"
luminosity = 1
dynamic_lighting = 0
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
/area/turret_protected/AIsatextAP
name = "\improper AI Sat Ext"
icon_state = "storage"
luminosity = 1
dynamic_lighting = 0
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
/area/turret_protected/NewAIMain
name = "\improper AI Main New"
@@ -2419,31 +2409,26 @@ var/list/ghostteleportlocs = list()
/area/awaymission/wwmines
name = "\improper Wild West Mines"
icon_state = "away1"
luminosity = 1
requires_power = 0
requires_power = FALSE
/area/awaymission/wwgov
name = "\improper Wild West Mansion"
icon_state = "away2"
luminosity = 1
requires_power = 0
requires_power = FALSE
/area/awaymission/wwrefine
name = "\improper Wild West Refinery"
icon_state = "away3"
luminosity = 1
requires_power = 0
requires_power = FALSE
/area/awaymission/wwvault
name = "\improper Wild West Vault"
icon_state = "away3"
luminosity = 0
/area/awaymission/wwvaultdoors
name = "\improper Wild West Vault Doors" // this is to keep the vault area being entirely lit because of requires_power
icon_state = "away2"
requires_power = 0
luminosity = 0
requires_power = FALSE
/area/awaymission/desert
name = "Mars"
@@ -2496,7 +2481,6 @@ var/list/ghostteleportlocs = list()
/area/awaymission/beach
name = "Beach"
icon_state = "beach"
luminosity = TRUE
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
requires_power = FALSE
ambientsounds = list('sound/ambience/shore.ogg', 'sound/ambience/seag1.ogg','sound/ambience/seag2.ogg','sound/ambience/seag2.ogg')
@@ -3,25 +3,24 @@
/area/awaymission/BMPship
name = "\improper BMP Asteroids"
icon_state = "away"
luminosity = 0
report_alerts = 0
report_alerts = FALSE
/area/awaymission/BMPship/Aft
name = "\improper Aft Block"
icon_state = "away1"
requires_power = 1
requires_power = TRUE
/area/awaymission/BMPship/Midship
name = "\improper Midship Block"
icon_state = "away2"
requires_power = 1
requires_power = TRUE
/area/awaymission/BMPship/Fore
name = "\improper Fore Block"
icon_state = "away3"
requires_power = 1
requires_power = TRUE
/area/awaymission/BMPship/Gate
name = "\improper Gateway Block"
icon_state = "away4"
requires_power = 1
requires_power = TRUE
@@ -3,19 +3,16 @@
/area/planet/clown
name = "\improper Clown Planet"
icon_state = "honk"
luminosity = 1
dynamic_lighting = 0
requires_power = 0
report_alerts = 0
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
requires_power = FALSE
report_alerts = FALSE
/area/awaymission/clownplanet/miningtown
name = "\improper Clown Planet - Bananium-o-Rama"
icon_state = "away1"
luminosity = 1
requires_power = 0
requires_power = FALSE
/area/awaymission/clownplanet/mine
name = "\improper Clown Planet - Bananium-o-Rama Mines"
icon_state = "away2"
luminosity = 1
requires_power = 0
requires_power = FALSE
@@ -9,31 +9,26 @@
/area/awaymission/wwmines
name = "\improper Wild West Mines"
icon_state = "away1"
luminosity = 1
requires_power = 0
requires_power = FALSE
/area/awaymission/wwgov
name = "\improper Wild West Mansion"
icon_state = "away2"
luminosity = 1
requires_power = 0
requires_power = FALSE
/area/awaymission/wwrefine
name = "\improper Wild West Refinery"
icon_state = "away3"
luminosity = 1
requires_power = 0
requires_power = FALSE
/area/awaymission/wwvault
name = "\improper Wild West Vault"
icon_state = "away3"
luminosity = 0
/area/awaymission/wwvaultdoors
name = "\improper Wild West Vault Doors" // this is to keep the vault area being entirely lit because of requires_power
icon_state = "away2"
requires_power = 0
luminosity = 0
requires_power = FALSE
/*
* Wish Granter
+316 -317
View File
@@ -1,368 +1,367 @@
// /area/awaymission/upperlevel
// name = "Open Space"
// color = "#888"
// dynamic_lighting = 0
// requires_power = 0
/area/awaymission/upperlevel
name = "Open Space"
color = "#888"
dynamic_lighting = 0
requires_power = 0
// // Used by /turf/unsimulated/floor/upperlevel as a reference for where the other floor is
// /obj/effect/levelref
// name = "level reference"
// icon = 'icons/mob/screen_gen.dmi'
// icon_state = "x2"
// invisibility = 101
// Used by /turf/unsimulated/floor/upperlevel as a reference for where the other floor is
/obj/effect/levelref
name = "level reference"
icon = 'icons/mob/screen_gen.dmi'
icon_state = "x2"
invisibility = 101
// var/id = null
// var/obj/effect/levelref/other = null
// var/offset_x
// var/offset_y
// var/offset_z
// var/global/list/levels[0]
var/id = null
var/obj/effect/levelref/other = null
var/offset_x
var/offset_y
var/offset_z
var/global/list/levels[0]
// /obj/effect/levelref/New()
// ..()
// levels += src
/obj/effect/levelref/New()
..()
levels += src
// /obj/effect/levelref/Initialize()
// ..()
// for(var/obj/effect/levelref/O in levels)
// if(id == O.id && O != src)
// other = O
// update_offset()
// O.other = src
// O.update_offset()
// for(var/turf/unsimulated/floor/upperlevel/U in get_area(loc))
// U.init(src)
// return
/obj/effect/levelref/Initialize()
..()
for(var/obj/effect/levelref/O in levels)
if(id == O.id && O != src)
other = O
update_offset()
O.other = src
O.update_offset()
for(var/turf/unsimulated/floor/upperlevel/U in get_area(loc))
U.init(src)
return
// /obj/effect/levelref/Destroy()
// levels -= src
// return ..()
/obj/effect/levelref/Destroy()
levels -= src
return ..()
// /obj/effect/levelref/proc/update_offset()
// offset_x = other.x - x
// offset_y = other.y - y
// offset_z = other.z - z
/obj/effect/levelref/proc/update_offset()
offset_x = other.x - x
offset_y = other.y - y
offset_z = other.z - z
// // Used by /turf/unsimulated/floor/upperlevel and /obj/effect/view_portal/visual
// // to know if the world changed on the remote side
// /obj/effect/portal_sensor
// invisibility = 101
// var/light_hash = -1
// var/triggered_this_tick = 0
// var/datum/owner // owner that receive signals
// var/list/params[0] // what to send to the main object to indicate which sensor
// var/trigger_limit = 5 // number of time we're allowed to trigger per ptick
// Used by /turf/unsimulated/floor/upperlevel and /obj/effect/view_portal/visual
// to know if the world changed on the remote side
/obj/effect/portal_sensor
invisibility = 101
var/required_color = -1
var/triggered_this_tick = 0
var/datum/owner // owner that receive signals
var/list/params[0] // what to send to the main object to indicate which sensor
var/trigger_limit = 5 // number of time we're allowed to trigger per ptick
// /obj/effect/portal_sensor/New(loc, o, ...)
// ..()
// owner = o
// if(args.len >= 3)
// params = args.Copy(3)
// processing_objects += src
// trigger()
/obj/effect/portal_sensor/New(loc, o, ...)
..()
owner = o
if(args.len >= 3)
params = args.Copy(3)
processing_objects += src
trigger()
// /obj/effect/portal_sensor/Destroy()
// processing_objects -= src
// return ..()
/obj/effect/portal_sensor/Destroy()
processing_objects -= src
return ..()
// /obj/effect/portal_sensor/Crossed(A)
// trigger()
/obj/effect/portal_sensor/Crossed(A)
trigger()
// /obj/effect/portal_sensor/Uncrossed(A)
// trigger()
/obj/effect/portal_sensor/Uncrossed(A)
trigger()
// /obj/effect/portal_sensor/process()
// check_light()
// if(triggered_this_tick >= trigger_limit)
// call(owner, "trigger")(arglist(params))
// triggered_this_tick = 0
/obj/effect/portal_sensor/process()
check_light()
if(triggered_this_tick >= trigger_limit)
call(owner, "trigger")(arglist(params))
triggered_this_tick = 0
// /obj/effect/portal_sensor/proc/trigger()
// triggered_this_tick++
// if(triggered_this_tick < trigger_limit)
// call(owner, "trigger")(arglist(params))
/obj/effect/portal_sensor/proc/trigger()
triggered_this_tick++
if(triggered_this_tick < trigger_limit)
call(owner, "trigger")(arglist(params))
// /obj/effect/portal_sensor/proc/check_light()
// var/turf/T = loc
// if(istype(T) && T.lighting_object && !T.lighting_object.needs_update)
// var/atom/movable/lighting_object/O = T.lighting_object
// var/hash = O.lum_r + O.lum_g + O.lum_b
// if(hash != light_hash)
// light_hash = hash
// trigger()
// else
// if(light_hash != -1)
// light_hash = -1
// trigger()
/obj/effect/portal_sensor/proc/check_light()
var/turf/T = loc
if(istype(T) && T.lighting_object && !T.lighting_object.needs_update)
var/atom/movable/lighting_object/O = T.lighting_object
if(O.color != required_color)
required_color = O.color
trigger()
else
if(required_color != -1)
required_color = -1
trigger()
// // for second floor showing floor below
// /turf/unsimulated/floor/upperlevel
// icon = 'icons/turf/areas.dmi'
// icon_state = "dark128"
// layer = AREA_LAYER + 0.5
// appearance_flags = TILE_BOUND | KEEP_TOGETHER
// var/turf/lower_turf
// var/obj/effect/portal_sensor/sensor
// for second floor showing floor below
/turf/unsimulated/floor/upperlevel
icon = 'icons/turf/areas.dmi'
icon_state = "dark128"
layer = AREA_LAYER + 0.5
appearance_flags = TILE_BOUND | KEEP_TOGETHER
var/turf/lower_turf
var/obj/effect/portal_sensor/sensor
// /turf/unsimulated/floor/upperlevel/New()
// ..()
// var/obj/effect/levelref/R = locate() in get_area(src)
// if(R && R.other)
// init(R)
/turf/unsimulated/floor/upperlevel/New()
..()
var/obj/effect/levelref/R = locate() in get_area(src)
if(R && R.other)
init(R)
// /turf/unsimulated/floor/upperlevel/Destroy()
// QDEL_NULL(sensor)
// return ..()
/turf/unsimulated/floor/upperlevel/Destroy()
QDEL_NULL(sensor)
return ..()
// /turf/unsimulated/floor/upperlevel/proc/init(var/obj/effect/levelref/R)
// lower_turf = locate(x + R.offset_x, y + R.offset_y, z + R.offset_z)
// if(lower_turf)
// sensor = new(lower_turf, src)
/turf/unsimulated/floor/upperlevel/proc/init(var/obj/effect/levelref/R)
lower_turf = locate(x + R.offset_x, y + R.offset_y, z + R.offset_z)
if(lower_turf)
sensor = new(lower_turf, src)
// /turf/unsimulated/floor/upperlevel/Entered(atom/movable/AM, atom/OL, ignoreRest = 0)
// if(isliving(AM) || istype(AM, /obj))
// if(isliving(AM))
// var/mob/living/M = AM
// M.emote("scream")
// M.SpinAnimation(5, 1)
// AM.forceMove(lower_turf)
/turf/unsimulated/floor/upperlevel/Entered(atom/movable/AM, atom/OL, ignoreRest = 0)
if(isliving(AM) || istype(AM, /obj))
if(isliving(AM))
var/mob/living/M = AM
M.emote("scream")
M.SpinAnimation(5, 1)
AM.forceMove(lower_turf)
// /turf/unsimulated/floor/upperlevel/attack_ghost(mob/user)
// user.forceMove(lower_turf)
/turf/unsimulated/floor/upperlevel/attack_ghost(mob/user)
user.forceMove(lower_turf)
// /turf/unsimulated/floor/upperlevel/proc/trigger()
// name = lower_turf.name
// desc = lower_turf.desc
/turf/unsimulated/floor/upperlevel/proc/trigger()
name = lower_turf.name
desc = lower_turf.desc
// // render each atom
// underlays.Cut()
// for(var/X in list(lower_turf) + lower_turf.contents)
// var/atom/A = X
// if(A && A.invisibility <= SEE_INVISIBLE_LIVING)
// var/image/I = image(A, layer = AREA_LAYER + A.layer * 0.01, dir = A.dir)
// I.pixel_x = A.pixel_x
// I.pixel_y = A.pixel_y
// underlays += I
// render each atom
underlays.Cut()
for(var/X in list(lower_turf) + lower_turf.contents)
var/atom/A = X
if(A && A.invisibility <= SEE_INVISIBLE_LIVING)
var/image/I = image(A, layer = AREA_LAYER + A.layer * 0.01, dir = A.dir)
I.pixel_x = A.pixel_x
I.pixel_y = A.pixel_y
underlays += I
// // remote end of narnia portal
// /obj/effect/view_portal
// name = "portal target"
// icon = 'icons/mob/screen_gen.dmi'
// icon_state = "x2"
// invisibility = 101
// anchored = 1
// remote end of narnia portal
/obj/effect/view_portal
name = "portal target"
icon = 'icons/mob/screen_gen.dmi'
icon_state = "x2"
invisibility = 101
anchored = 1
// var/id = null // id of other portal turf we connect to
var/id = null // id of other portal turf we connect to
// var/obj/effect/view_portal/other = null
// var/global/list/portals[0]
var/obj/effect/view_portal/other = null
var/global/list/portals[0]
// /obj/effect/view_portal/New()
// ..()
// GLOB.portals += src
/obj/effect/view_portal/New()
..()
GLOB.portals += src
// /obj/effect/view_portal/Initialize()
// ..()
// if(id)
// for(var/obj/effect/view_portal/O in GLOB.portals)
// if(id == O.id && O != src && can_link(O))
// other = O
// O.other = src
// linkup()
// O.linkup()
// if(other)
// return
/obj/effect/view_portal/Initialize()
..()
if(id)
for(var/obj/effect/view_portal/O in GLOB.portals)
if(id == O.id && O != src && can_link(O))
other = O
O.other = src
linkup()
O.linkup()
if(other)
return
// /obj/effect/view_portal/Destroy()
// GLOB.portals -= src
// return ..()
/obj/effect/view_portal/Destroy()
GLOB.portals -= src
return ..()
// /obj/effect/view_portal/proc/can_link(obj/effect/view_portal/P)
// return P.type == /obj/effect/view_portal/visual && !P.other
/obj/effect/view_portal/proc/can_link(obj/effect/view_portal/P)
return P.type == /obj/effect/view_portal/visual && !P.other
// /obj/effect/view_portal/proc/linkup()
// // allow it to link to multiple visual nodes
// other = null
/obj/effect/view_portal/proc/linkup()
// allow it to link to multiple visual nodes
other = null
// // near end of nania portal
// /obj/effect/view_portal/visual
// name = "???"
// desc = "You'll have to get closer to clearly see what this is."
// near end of nania portal
/obj/effect/view_portal/visual
name = "???"
desc = "You'll have to get closer to clearly see what this is."
// icon = 'icons/turf/floors.dmi'
// icon_state = "loadingarea"
// opacity = 1
// density = 1
// invisibility = 0
// appearance_flags = TILE_BOUND | KEEP_TOGETHER
// var/dist = 6 // dist that we render out
// var/radius = 3 // dist we render on other axis, in each direction
// var/frustrum = 0 // if 1, get wider and wider at each step outward
// var/teleport = 1 // should teleport?
icon = 'icons/turf/floors.dmi'
icon_state = "loadingarea"
opacity = 1
density = 1
invisibility = 0
appearance_flags = TILE_BOUND | KEEP_TOGETHER
var/dist = 6 // dist that we render out
var/radius = 3 // dist we render on other axis, in each direction
var/frustrum = 0 // if 1, get wider and wider at each step outward
var/teleport = 1 // should teleport?
// var/list/render_block
// var/list/sensors[0]
// var/list/tiles[0]
var/list/render_block
var/list/sensors[0]
var/list/tiles[0]
// var/list/near_render_block
// var/turf/near_viewpoint
var/list/near_render_block
var/turf/near_viewpoint
// /obj/effect/view_portal/visual/Destroy()
// for(var/T in sensors)
// qdel(sensors[T])
// sensors.Cut()
// sensors = null
// for(var/T in tiles)
// qdel(tiles[T])
// tiles.Cut()
// tiles = null
// render_block = null
// near_render_block = null
// near_viewpoint = null
// return ..()
/obj/effect/view_portal/visual/Destroy()
for(var/T in sensors)
qdel(sensors[T])
sensors.Cut()
sensors = null
for(var/T in tiles)
qdel(tiles[T])
tiles.Cut()
tiles = null
render_block = null
near_render_block = null
near_viewpoint = null
return ..()
// /obj/effect/view_portal/visual/can_link(obj/effect/view_portal/P)
// return P.type == /obj/effect/view_portal
/obj/effect/view_portal/visual/can_link(obj/effect/view_portal/P)
return P.type == /obj/effect/view_portal
// /obj/effect/view_portal/visual/linkup()
// icon = null
// icon_state = null
// var/turf/Tloc = get_turf(loc)
// if(Tloc)
// Tloc.icon = null
// Tloc.icon_state = null
// Tloc.dynamic_lighting = 0
// layer = AREA_LAYER + 0.5
/obj/effect/view_portal/visual/linkup()
icon = null
icon_state = null
var/turf/Tloc = get_turf(loc)
if(Tloc)
Tloc.icon = null
Tloc.icon_state = null
Tloc.dynamic_lighting = 0
layer = AREA_LAYER + 0.5
// // setup references
// var/crossdir = angle2dir((dir2angle(dir) + 90) % 360)
// near_viewpoint = get_step(get_turf(src), GetOppositeDir(dir))
// setup references
var/crossdir = angle2dir((dir2angle(dir) + 90) % 360)
near_viewpoint = get_step(get_turf(src), GetOppositeDir(dir))
// // setup far turfs
// var/turf/T1 = get_turf(other)
// var/turf/T2 = T1
// setup far turfs
var/turf/T1 = get_turf(other)
var/turf/T2 = T1
// for(var/i in 1 to radius)
// T1 = get_step(T1, crossdir)
// T2 = get_step(T2, GetOppositeDir(crossdir))
// if(frustrum)
// // make a trapazoid, with length dist, short end radius*2 long,
// // and 45 degree angles
// render_block = block(T1, T2)
// for(var/i in 1 to dist)
// T1 = get_step(get_step(T1, dir), crossdir)
// T2 = get_step(get_step(T2, dir), GetOppositeDir(crossdir))
// render_block += block(T1, T2)
// else
// // else make a box dist x radius*2
// for(var/i in 1 to dist)
// T2 = get_step(T2, dir)
// render_block = block(T1, T2)
// for(var/turf/T in render_block)
// sensors[T] = new /obj/effect/portal_sensor(T, src, 0, T)
for(var/i in 1 to radius)
T1 = get_step(T1, crossdir)
T2 = get_step(T2, GetOppositeDir(crossdir))
if(frustrum)
// make a trapazoid, with length dist, short end radius*2 long,
// and 45 degree angles
render_block = block(T1, T2)
for(var/i in 1 to dist)
T1 = get_step(get_step(T1, dir), crossdir)
T2 = get_step(get_step(T2, dir), GetOppositeDir(crossdir))
render_block += block(T1, T2)
else
// else make a box dist x radius*2
for(var/i in 1 to dist)
T2 = get_step(T2, dir)
render_block = block(T1, T2)
for(var/turf/T in render_block)
sensors[T] = new /obj/effect/portal_sensor(T, src, 0, T)
// // setup turfs on this side of the portal to cover the map streaming
// // has to be done later for view() to be correct (so it happens when the walls exist)
// /obj/effect/view_portal/visual/proc/setup_near()
// var/nvs = dir & (EAST|WEST) ? near_viewpoint.x - x : near_viewpoint.y - y
// if(nvs)
// nvs = SIGN(nvs)
// // need a mob for view() to work correctly
// var/mob/M = new(near_viewpoint)
// M.see_invisible = SEE_INVISIBLE_LIVING
// near_render_block = view(M, world.view)
// qdel(M)
// for(var/A in near_render_block)
// var/turf/T = A
// if(istype(T))
// var/ts = dir & (EAST|WEST) ? T.x - x : T.y - y
// if(ts)
// ts = SIGN(ts)
// if(nvs == ts)
// sensors[T] = new /obj/effect/portal_sensor(T, src, 1, T)
// else
// near_render_block -= T
// else
// near_render_block -= T
// setup turfs on this side of the portal to cover the map streaming
// has to be done later for view() to be correct (so it happens when the walls exist)
/obj/effect/view_portal/visual/proc/setup_near()
var/nvs = dir & (EAST|WEST) ? near_viewpoint.x - x : near_viewpoint.y - y
if(nvs)
nvs = SIGN(nvs)
// need a mob for view() to work correctly
var/mob/M = new(near_viewpoint)
M.see_invisible = SEE_INVISIBLE_LIVING
near_render_block = view(M, world.view)
qdel(M)
for(var/A in near_render_block)
var/turf/T = A
if(istype(T))
var/ts = dir & (EAST|WEST) ? T.x - x : T.y - y
if(ts)
ts = SIGN(ts)
if(nvs == ts)
sensors[T] = new /obj/effect/portal_sensor(T, src, 1, T)
else
near_render_block -= T
else
near_render_block -= T
// /obj/effect/view_portal/visual/Bumped(atom/movable/thing)
// if((istype(thing, /obj) || isliving(thing)) && other && teleport)
// if(!near_render_block)
// setup_near()
/obj/effect/view_portal/visual/Bumped(atom/movable/thing)
if((istype(thing, /obj) || isliving(thing)) && other && teleport)
if(!near_render_block)
setup_near()
// var/mob/living/M = thing
// // make the person glide onto the dest, giving a smooth transition
// var/ox = thing.x - x
// var/oy = thing.y - y
// if(istype(M) && M.client)
// M.notransform = 1
// // cover up client-side map loading
// M.screen_loc = "CENTER"
// M.client.screen += M
// for(var/T in tiles)
// M.client.screen += tiles[T]
var/mob/living/M = thing
// make the person glide onto the dest, giving a smooth transition
var/ox = thing.x - x
var/oy = thing.y - y
if(istype(M) && M.client)
M.notransform = 1
// cover up client-side map loading
M.screen_loc = "CENTER"
M.client.screen += M
for(var/T in tiles)
M.client.screen += tiles[T]
// // wait a tick for the screen to replicate across network
// // or this whole exercise of covering the transition is pointless
// spawn(1)
// thing.forceMove(locate(other.x + ox, other.y + oy, other.z))
// sleep(1)
// if(istype(M) && M.client)
// for(var/T in tiles)
// M.client.screen -= tiles[T]
// M.client.screen -= M
// M.screen_loc = initial(M.screen_loc)
// thing.forceMove(get_turf(other.loc))
// if(istype(M) && M.client)
// M.notransform = 0
// wait a tick for the screen to replicate across network
// or this whole exercise of covering the transition is pointless
spawn(1)
thing.forceMove(locate(other.x + ox, other.y + oy, other.z))
sleep(1)
if(istype(M) && M.client)
for(var/T in tiles)
M.client.screen -= tiles[T]
M.client.screen -= M
M.screen_loc = initial(M.screen_loc)
thing.forceMove(get_turf(other.loc))
if(istype(M) && M.client)
M.notransform = 0
// /obj/effect/view_portal/visual/attack_ghost(mob/user)
// user.forceMove(get_turf(other.loc))
/obj/effect/view_portal/visual/attack_ghost(mob/user)
user.forceMove(get_turf(other.loc))
// /obj/effect/view_portal/visual/proc/trigger(near, turf/T)
// var/obj/effect/view_portal_dummy/D = tiles[T]
// if(D)
// D.overlays.Cut()
// else
// D = new(src, near, T)
// tiles[T] = D
/obj/effect/view_portal/visual/proc/trigger(near, turf/T)
var/obj/effect/view_portal_dummy/D = tiles[T]
if(D)
D.overlays.Cut()
else
D = new(src, near, T)
tiles[T] = D
// // render atoms to overlays of a dummy object
// if(D.name != T.name)
// D.name = T.name
// D.desc = T.desc
// for(var/AX in list(T) + T.contents)
// var/atom/A = AX
// if(A && A.invisibility <= SEE_INVISIBLE_LIVING)
// var/image/I = image(A, layer = D.layer + A.layer * 0.01, dir = A.dir)
// I.pixel_x = A.pixel_x
// I.pixel_y = A.pixel_y
// D.overlays += I
// render atoms to overlays of a dummy object
if(D.name != T.name)
D.name = T.name
D.desc = T.desc
for(var/AX in list(T) + T.contents)
var/atom/A = AX
if(A && A.invisibility <= SEE_INVISIBLE_LIVING)
var/image/I = image(A, layer = D.layer + A.layer * 0.01, dir = A.dir)
I.pixel_x = A.pixel_x
I.pixel_y = A.pixel_y
D.overlays += I
// // tile of rendered other side for narnia portal
// /obj/effect/view_portal_dummy
// var/obj/effect/view_portal/visual/owner
// tile of rendered other side for narnia portal
/obj/effect/view_portal_dummy
var/obj/effect/view_portal/visual/owner
// /obj/effect/view_portal_dummy/New(obj/effect/view_portal/visual/V, near, turf/T)
// ..()
// if(!near)
// loc = V.loc
// owner = V
/obj/effect/view_portal_dummy/New(obj/effect/view_portal/visual/V, near, turf/T)
..()
if(!near)
loc = V.loc
owner = V
// var/ox
// var/oy
// if(near)
// ox = (T.x - V.near_viewpoint.x)
// oy = (T.y - V.near_viewpoint.y)
// layer = AREA_LAYER + 0.4
// else
// ox = T.x - V.other.x + V.x - V.near_viewpoint.x
// oy = T.y - V.other.y + V.y - V.near_viewpoint.y
// pixel_x = 32 * (T.x - V.other.x)
// pixel_y = 32 * (T.y - V.other.y)
// layer = AREA_LAYER + 0.5
// if(abs(ox) <= world.view && abs(oy) <= world.view)
// screen_loc = "CENTER[ox >= 0 ? "+" : ""][ox],CENTER[oy >= 0 ? "+" : ""][oy]"
var/ox
var/oy
if(near)
ox = (T.x - V.near_viewpoint.x)
oy = (T.y - V.near_viewpoint.y)
layer = AREA_LAYER + 0.4
else
ox = T.x - V.other.x + V.x - V.near_viewpoint.x
oy = T.y - V.other.y + V.y - V.near_viewpoint.y
pixel_x = 32 * (T.x - V.other.x)
pixel_y = 32 * (T.y - V.other.y)
layer = AREA_LAYER + 0.5
if(abs(ox) <= world.view && abs(oy) <= world.view)
screen_loc = "CENTER[ox >= 0 ? "+" : ""][ox],CENTER[oy >= 0 ? "+" : ""][oy]"
// /obj/effect/view_portal_dummy/attack_ghost(mob/user)
// owner.attack_ghost(user)
/obj/effect/view_portal_dummy/attack_ghost(mob/user)
owner.attack_ghost(user)
+1 -1
View File
@@ -1,5 +1,5 @@
/proc/create_all_lighting_objects()
for(var/area/A in world)
for(var/area/A in GLOB.all_areas)
if(!IS_DYNAMIC_LIGHTING(A))
continue
@@ -179,6 +179,6 @@
/datum/chemical_reaction/rotatium
name = "Rotatium"
id = "Rotatium"
results = "rotatium"
result = "rotatium"
required_reagents = list("lsd" = 1, "teslium" = 1, "fentanyl" = 1)
mix_message = "<span class='danger'>After sparks, fire, and the smell of LSD, the mix is constantly spinning with no stop in sight.</span>"