diff --git a/src/net/torvald/terrarum/StateInGame.kt b/src/net/torvald/terrarum/StateInGame.kt index c235f171c..4b099087a 100644 --- a/src/net/torvald/terrarum/StateInGame.kt +++ b/src/net/torvald/terrarum/StateInGame.kt @@ -641,3 +641,4 @@ constructor() : BasicGameState() { } fun Color.toInt() = redByte.shl(16) or greenByte.shl(8) or blueByte +fun Color.to10bit() = redByte.shl(20) or greenByte.shl(10) or blueByte diff --git a/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt b/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt index 8ab97c626..e0053eaff 100644 --- a/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt +++ b/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt @@ -9,6 +9,9 @@ import net.torvald.terrarum.gameactors.faction.FactionFactory import net.torvald.terrarum.gameitem.EquipPosition import net.torvald.terrarum.itemproperties.ItemCodex import net.torvald.terrarum.mapdrawer.MapDrawer +import net.torvald.terrarum.to10bit +import net.torvald.terrarum.toInt +import org.newdawn.slick.Color import org.newdawn.slick.SlickException import java.io.IOException @@ -57,7 +60,7 @@ object PlayerBuilderSigrid { p.actorValue[AVKey.INTELLIGENT] = true - p.actorValue[AVKey.LUMINOSITY] = 95487100 + p.actorValue[AVKey.LUMINOSITY] = Color(0x434aff).to10bit() p.actorValue[AVKey.BASEDEFENCE] = 141 diff --git a/src/net/torvald/terrarum/mapdrawer/LightmapRenderer.kt b/src/net/torvald/terrarum/mapdrawer/LightmapRenderer.kt index 5287b514b..c41543bf5 100644 --- a/src/net/torvald/terrarum/mapdrawer/LightmapRenderer.kt +++ b/src/net/torvald/terrarum/mapdrawer/LightmapRenderer.kt @@ -337,8 +337,10 @@ object LightmapRenderer { // loop x var x = this_x_start while (x < this_x_end) { - // smoothing enabled - if (Terrarum.gameConfig.getAsBoolean("smoothlighting") ?: false) { + // smoothing enabled and zoom is 0.75 or greater + // (zoom of 0.5 should not smoothed, for performance) + if (Terrarum.gameConfig.getAsBoolean("smoothlighting") ?: false && + Terrarum.ingame.screenZoom >= 0.75) { val thisLightLevel = getLight(x, y) ?: 0 @@ -453,12 +455,20 @@ object LightmapRenderer { * @return darkened data (0-255) per channel */ fun darkenColoured(data: Int, darken: Int): Int { - if (darken.toInt() < 0 || darken.toInt() >= COLOUR_RANGE_SIZE) + if (darken < 0 || darken >= COLOUR_RANGE_SIZE) throw IllegalArgumentException("darken: out of range ($darken)") - val r = data.r() * (1f - darken.r() * 4f) - val g = data.g() * (1f - darken.g() * 4f) - val b = data.b() * (1f - darken.b() * 4f) + // use equation with magic number 6.5: + // =>> val r = data.r() * (1f + brighten.r() * 6.5f) <<= + // gives 8-visible-tile penetration of sunlight, fairly smooth, + // DOES NOT GO BELOW (2,2,2) + + val r = data.r() * (1f - darken.r() * 6.5f) + val g = data.g() * (1f - darken.g() * 6.5f) + val b = data.b() * (1f - darken.b() * 6.5f) + //val r = data.r() - darken.r() + //val g = data.g() - darken.g() + //val b = data.b() - darken.b() return constructRGBFromFloat(r.clampZero(), g.clampZero(), b.clampZero()) } @@ -471,12 +481,15 @@ object LightmapRenderer { * @return brightened data (0-255) per channel */ fun brightenColoured(data: Int, brighten: Int): Int { - if (brighten.toInt() < 0 || brighten.toInt() >= COLOUR_RANGE_SIZE) + if (brighten < 0 || brighten >= COLOUR_RANGE_SIZE) throw IllegalArgumentException("brighten: out of range ($brighten)") - val r = data.r() * (1f + brighten.r() * 4f) - val g = data.g() * (1f + brighten.g() * 4f) - val b = data.b() * (1f + brighten.b() * 4f) + val r = data.r() * (1f + brighten.r() * 6.5f) + val g = data.g() * (1f + brighten.g() * 6.5f) + val b = data.b() * (1f + brighten.b() * 6.5f) + //val r = data.r() + brighten.r() + //val g = data.g() + brighten.g() + //val b = data.b() + brighten.b() return constructRGBFromFloat(r.clampChannel(), g.clampChannel(), b.clampChannel()) }