diff --git a/baystation12.dme b/baystation12.dme index 1f8ba207fdf..713dccd71fa 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -167,6 +167,7 @@ #define FILE_DIR "code/WorkInProgress/animusstation" #define FILE_DIR "code/WorkInProgress/Apples" #define FILE_DIR "code/WorkInProgress/Cael_Aislinn" +#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/BirdMan" #define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Rust" #define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Supermatter" #define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Tajara" diff --git a/code/WorkInProgress/Cael_Aislinn/sculpture.dm b/code/WorkInProgress/Cael_Aislinn/sculpture.dm index 9dde8b37dd1..a20ed600b08 100644 --- a/code/WorkInProgress/Cael_Aislinn/sculpture.dm +++ b/code/WorkInProgress/Cael_Aislinn/sculpture.dm @@ -130,7 +130,7 @@ //account for darkness var/turf/T = get_turf(src) var/in_darkness = 0 - if(T.sd_lumcount == 0 && !istype(T, /turf/simulated)) + if(max(T.ul_GetRed(), T.ul_GetGreen(), T.ul_GetBlue()) == 0 && !istype(T, /turf/simulated)) in_darkness = 1 //see if we're able to do stuff diff --git a/code/WorkInProgress/SkyMarshal/Ultralight.dm b/code/WorkInProgress/SkyMarshal/Ultralight.dm index 1e3a0aebeda..41014ee1777 100644 --- a/code/WorkInProgress/SkyMarshal/Ultralight.dm +++ b/code/WorkInProgress/SkyMarshal/Ultralight.dm @@ -7,9 +7,11 @@ #define UL_I_LIT 0 #define UL_I_EXTINGUISHED 1 #define UL_I_ONZERO 2 + var ul_LightingEnabled = 1 ul_LightingResolution = 1 + ul_LightingResolutionSqrt = sqrt(ul_LightingResolution) ul_Steps = 7 ul_FalloffStyle = UL_I_FALLOFF_ROUND // Sets the lighting falloff to be either squared or circular. ul_TopLuminosity = 0 @@ -20,26 +22,15 @@ var 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7) -var/list/light_to_instantiate = list() -var/UL_setup = 0 - -proc/setup_UL() - UL_setup = 1 - world << "\red Setting up UltraLight..." - for(var/atom/A in light_to_instantiate) - if(A.ul_IsLuminous()) - A.ul_Illuminate() proc/ul_Clamp(var/Value) return min(max(Value, 0), ul_Steps) -atom - var - LuminosityRed = 0 - LuminosityGreen = 0 - LuminosityBlue = 0 +atom/var/LuminosityRed = 0 +atom/var/LuminosityGreen = 0 +atom/var/LuminosityBlue = 0 - ul_Extinguished = UL_I_ONZERO +atom/var/ul_Extinguished = UL_I_ONZERO atom/proc/ul_SetLuminosity(var/Red, var/Green = Red, var/Blue = Red) @@ -76,22 +67,38 @@ atom/proc/ul_Illuminate() ul_UpdateTopLuminosity() luminosity = ul_Luminosity() - for(var/turf/Affected in view(ul_Luminosity(), src)) + for(var/turf/Affected in view(luminosity, src)) var/Falloff = src.ul_FalloffAmount(Affected) var/DeltaRed = LuminosityRed - Falloff var/DeltaGreen = LuminosityGreen - Falloff var/DeltaBlue = LuminosityBlue - Falloff - if(ul_IsLuminous(DeltaRed, DeltaGreen, DeltaBlue)) + if(DeltaRed > 0 || DeltaGreen > 0 || DeltaBlue > 0) - Affected.LightLevelRed += max(DeltaRed, 0) - Affected.LightLevelGreen += max(DeltaGreen, 0) - Affected.LightLevelBlue += max(DeltaBlue, 0) + if(DeltaRed > 0) + if(!Affected.MaxRed) + Affected.MaxRed = list() + if("[DeltaRed]" in Affected.MaxRed) + Affected.MaxRed["[DeltaRed]"]++ + else + Affected.MaxRed["[DeltaRed]"] = 1 - Affected.MaxRed += LuminosityRed - Affected.MaxGreen += LuminosityGreen - Affected.MaxBlue += LuminosityBlue + if(DeltaGreen > 0) + if(!Affected.MaxGreen) + Affected.MaxGreen = list() + if("[DeltaGreen]" in Affected.MaxGreen) + Affected.MaxGreen["[DeltaGreen]"]++ + else + Affected.MaxGreen["[DeltaGreen]"] = 1 + + if(DeltaBlue > 0) + if(!Affected.MaxBlue) + Affected.MaxBlue = list() + if("[DeltaBlue]" in Affected.MaxBlue) + Affected.MaxBlue["[DeltaBlue]"]++ + else + Affected.MaxBlue["[DeltaBlue]"] = 1 Affected.ul_UpdateLight() @@ -117,15 +124,34 @@ atom/proc/ul_Extinguish() var/DeltaGreen = LuminosityGreen - Falloff var/DeltaBlue = LuminosityBlue - Falloff - if(ul_IsLuminous(DeltaRed, DeltaGreen, DeltaBlue)) + if(DeltaRed > 0 || DeltaGreen > 0 || DeltaBlue > 0) - Affected.LightLevelRed -= max(DeltaRed, 0) - Affected.LightLevelGreen -= max(DeltaGreen, 0) - Affected.LightLevelBlue -= max(DeltaBlue, 0) + if(DeltaRed > 0) + if(Affected.MaxRed) + if(Affected.MaxRed["[DeltaRed]"] > 1) + Affected.MaxRed["[DeltaRed]"]-- + else + Affected.MaxRed.Remove("[DeltaRed]") + if(!Affected.MaxRed.len) + del Affected.MaxRed - Affected.MaxRed -= LuminosityRed - Affected.MaxGreen -= LuminosityGreen - Affected.MaxBlue -= LuminosityBlue + if(DeltaGreen > 0) + if(Affected.MaxGreen) + if(Affected.MaxGreen["[DeltaGreen]"] > 1) + Affected.MaxGreen["[DeltaGreen]"]-- + else + Affected.MaxGreen.Remove("[DeltaGreen]") + if(!Affected.MaxGreen.len) + del Affected.MaxGreen + + if(DeltaBlue > 0) + if(Affected.MaxBlue) + if(Affected.MaxBlue["[DeltaBlue]"] > 1) + Affected.MaxBlue["[DeltaBlue]"]-- + else + Affected.MaxBlue.Remove("[DeltaBlue]") + if(!Affected.MaxBlue.len) + del Affected.MaxBlue Affected.ul_UpdateLight() @@ -151,10 +177,17 @@ atom/proc/ul_FalloffAmount(var/atom/ref) if (ul_FalloffStyle == UL_I_FALLOFF_ROUND) var/x = (ref.x - src.x) var/y = (ref.y - src.y) - if ((x*x + y*y) > ul_FastRoot.len) - for(var/i = ul_FastRoot.len, i <= x*x+y*y, i++) - ul_FastRoot += round(sqrt(x*x+y*y)) - return round(ul_LightingResolution * ul_FastRoot[x*x + y*y + 1], 1) + if(ul_LightingResolution != 1) + if (round((x*x + y*y)*ul_LightingResolutionSqrt,1) > ul_FastRoot.len) + for(var/i = ul_FastRoot.len, i <= round(x*x+y*y*ul_LightingResolutionSqrt,1), i++) + ul_FastRoot += round(sqrt(i)) + return ul_FastRoot[round((x*x + y*y)*ul_LightingResolutionSqrt, 1) + 1]/ul_LightingResolution + + else + if ((x*x + y*y) > ul_FastRoot.len) + for(var/i = ul_FastRoot.len, i <= x*x+y*y, i++) + ul_FastRoot += round(sqrt(i)) + return ul_FastRoot[x*x + y*y + 1]/ul_LightingResolution else if (ul_FalloffStyle == UL_I_FALLOFF_SQUARE) return get_dist(src, ref) @@ -165,17 +198,9 @@ atom/proc/ul_SetOpacity(var/NewOpacity) if(opacity != NewOpacity) var/list/Blanked = ul_BlankLocal() - var/atom/T = src - while(T && !isturf(T)) - T = T.loc opacity = NewOpacity - if(T) - T:LightLevelRed = 0 - T:LightLevelGreen = 0 - T:LightLevelBlue = 0 - ul_UnblankLocal(Blanked) return @@ -222,49 +247,43 @@ atom/proc/ul_LightLevelChanged() atom/New() ..() - if(UL_setup) - if(ul_IsLuminous()) + if(ul_IsLuminous()) + spawn(1) ul_Illuminate() - else - light_to_instantiate |= src + return atom/Del() if(ul_IsLuminous()) ul_Extinguish() - ..() - return - -// formerly atom/proc/movable/Move(), this now overwrites other shit causing random inexplicable problems. -// need to find a way to plug it in to the root without overriding, might just do the snowflake treatment -/*atom/proc/Move() - ul_Extinguish() - ..() - ul_Illuminate() - return*/ - -turf - var - LightLevelRed = 0 - LightLevelGreen = 0 - LightLevelBlue = 0 - - list/MaxRed = list( ) - list/MaxGreen = list( ) - list/MaxBlue = list( ) +atom/movable/Move() + if(ul_IsLuminous()) + ul_Extinguish() + ..() + ul_Illuminate() + else + ..() +turf/var/list/MaxRed +turf/var/list/MaxGreen +turf/var/list/MaxBlue turf/proc/ul_GetRed() - return ul_Clamp(min(LightLevelRed, max(MaxRed))) + if(MaxRed) + return ul_Clamp(text2num(max(MaxRed))) + return 0 turf/proc/ul_GetGreen() - return ul_Clamp(min(LightLevelGreen, max(MaxGreen))) + if(MaxGreen) + return ul_Clamp(text2num(max(MaxGreen))) + return 0 turf/proc/ul_GetBlue() - return ul_Clamp(min(LightLevelBlue, max(MaxBlue))) + if(MaxBlue) + return ul_Clamp(text2num(max(MaxBlue))) + return 0 turf/proc/ul_UpdateLight() - var/area/CurrentArea = loc if(!isarea(CurrentArea) || !CurrentArea.ul_Lighting) @@ -298,25 +317,19 @@ turf/proc/ul_Recalculate() var/list/Lights = ul_BlankLocal() - LightLevelRed = 0 - LightLevelGreen = 0 - LightLevelBlue = 0 - ul_UnblankLocal(Lights) ul_SuppressLightLevelChanges-- return -area - var - ul_Overlay = null - ul_Lighting = 1 - - LightLevelRed = 0 - LightLevelGreen = 0 - LightLevelBlue = 0 +area/var/ul_Overlay = null +area/var/ul_Lighting = 1 +area/var/LightLevelRed = 0 +area/var/LightLevelGreen = 0 +area/var/LightLevelBlue = 0 +area/var/list/LightLevels area/proc/ul_Light(var/Red = LightLevelRed, var/Green = LightLevelGreen, var/Blue = LightLevelBlue) @@ -324,6 +337,13 @@ area/proc/ul_Light(var/Red = LightLevelRed, var/Green = LightLevelGreen, var/Blu return overlays -= ul_Overlay + if(LightLevels) + if(Red < LightLevels["Red"]) + Red = LightLevels["Red"] + if(Green < LightLevels["Green"]) + Green = LightLevels["Green"] + if(Blue < LightLevels["Blue"]) + Blue = LightLevels["Blue"] LightLevelRed = Red LightLevelGreen = Green diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index be430d58e2a..5b2f48cdd31 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -124,11 +124,18 @@ obj if(flow.oxygen > 0.3 && (flow.toxins || fuel || liquid)) //Change icon depending on the fuel, and thus temperature. - icon_state = "1" - if(firelevel > 2.5) - icon_state = "2" if(firelevel > 6) icon_state = "3" + if(LuminosityRed != 7) + ul_SetLuminosity(7,5,0) + else if(firelevel > 2.5) + icon_state = "2" + if(LuminosityRed != 5) + ul_SetLuminosity(5,4,0) + else + icon_state = "1" + if(LuminosityRed != 3) + ul_SetLuminosity(3,2,0) //Ensure flow temperature is higher than minimum fire temperatures. flow.temperature = max(PLASMA_MINIMUM_BURN_TEMPERATURE+0.1,flow.temperature) @@ -157,7 +164,7 @@ obj New(newLoc,fl) ..() dir = pick(cardinal) - ul_SetLuminosity(3) + ul_SetLuminosity(3,2,0) firelevel = fl for(var/mob/living/carbon/human/M in loc) M.FireBurn(min(max(0.1,firelevel / 20),10)) //Burn the humans! @@ -187,7 +194,6 @@ obj/liquid_fuel other.amount += src.amount spawn other.Spread() del src - return Spread() . = ..() @@ -201,8 +207,9 @@ obj/liquid_fuel if(S.air_check_directions & d) if(rand(25)) var/turf/simulated/O = get_step(src,d) - new/obj/liquid_fuel(O,amount*0.25) - amount *= 0.75 + if(!locate(/obj/liquid_fuel) in O) + new/obj/liquid_fuel(O,amount*0.25) + amount *= 0.75 flamethrower_fuel icon_state = "mustard" diff --git a/code/defines/area/Space Station 13 areas.dm b/code/defines/area/Space Station 13 areas.dm index 03517f28075..d142c42a213 100755 --- a/code/defines/area/Space Station 13 areas.dm +++ b/code/defines/area/Space Station 13 areas.dm @@ -957,6 +957,7 @@ proc/process_ghost_teleport_locs() //Solars /area/solar + LightLevels = list("Red" = 2, "Green" = 2, "Blue" = 3) requires_power = 0 auxport diff --git a/code/defines/atom.dm b/code/defines/atom.dm index 2deb510cea0..1a1a79b94f8 100644 --- a/code/defines/atom.dm +++ b/code/defines/atom.dm @@ -47,14 +47,6 @@ return flags & INSERT_CONTAINER */ - Del() - var/F = file("del_log.txt") - var/coords = "" - if(src) - coords = "[src.x],[src.y],[src.z]" - F << "[time2text(world.timeofday, "hh:mm.ss")]: [src] - [src.loc] [coords] - [usr]" - ..() - obj assume_air(datum/gas_mixture/giver) if(loc) diff --git a/code/defines/turf.dm b/code/defines/turf.dm index 84ee94551e9..0c30c4dac16 100644 --- a/code/defines/turf.dm +++ b/code/defines/turf.dm @@ -45,8 +45,6 @@ thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT heat_capacity = 700000 - LightLevelBlue = 5 - transit var/pushdirection // push things that get caught in the transit tile this direction @@ -127,7 +125,6 @@ /turf/space/New() -// icon = 'space.dmi' if(!istype(src, /turf/space/transit)) ..() icon_state = "[rand(1,25)]" diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 03330d9fbd4..c24ac9e2f71 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -27,21 +27,23 @@ if(name == "Space") // override defaults for space requires_power = 1 always_unpowered = 1 - ul_SetLuminosity(1) + LightLevels = list("Red" = 2, "Green" = 2, "Blue" = 3) power_light = 0 power_equip = 0 power_environ = 0 //has_gravity = 0 // Space has gravity. Because.. because. - if(!requires_power) + else if(!requires_power) power_light = 0//rastaf0 power_equip = 0//rastaf0 power_environ = 0//rastaf0 - luminosity = 1 - ul_Lighting = 0 // *DAL* + if(!ul_Lighting) + luminosity = 1 else luminosity = 0 - area_lights_luminosity = rand(6,9) + area_lights_luminosity = rand(5,7) + if(LightLevels) + ul_Light() //ul_SetLuminosity(0) // *DAL* @@ -401,7 +403,7 @@ other_related -= other_master var/list/total_contents = list() for(var/area/RA in other_related) - RA.sd_lighting = 0 +// RA.ul_lighting = 0 total_contents |= RA.contents del RA.contents del RA.related diff --git a/code/game/master_controller.dm b/code/game/master_controller.dm index 76882780fe7..00736c3b67d 100644 --- a/code/game/master_controller.dm +++ b/code/game/master_controller.dm @@ -55,12 +55,10 @@ datum/controller/game_controller // Now that the game is world is fully initialized, pause server until a user connects. world.sleep_offline = 1 - setupgenetics() - - setupdooralarms() - setup_objects() + setupgenetics() + // for(var/i = 0, i < max_secret_rooms, i++) // make_mining_asteroid_secret() // Because energy cutlasses, facehuggers, and empty rooms are silly. FOR NOW. - Erthilo @@ -104,7 +102,7 @@ datum/controller/game_controller new /obj/structure/closet/emcloset(loc) emclosetcount-- - setup_UL() + setupdooralarms() world << "\red \b Initializations complete." diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 6975e37730d..357956b92df 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -83,7 +83,7 @@ var/area/A = src.loc.loc brightness = A.area_lights_luminosity else - brightness = rand(6,9) + brightness = rand(5,7) if(prob(10)) broken(1) if("bulb") @@ -123,7 +123,7 @@ var/oldlum = luminosity //luminosity = on * brightness - ul_SetLuminosity(on * brightness, on * brightness, ( fitting == "tube" ? on * brightness : 0 ) ) // *DAL* + ul_SetLuminosity(on * brightness, on * brightness, ( fitting != "bulb" ? on * brightness : on ) ) // *DAL* // if the state changed, inc the switching counter if(oldlum != luminosity) diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 39bbf9e3cb5..348ea33a7f8 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ