From 833d8814a7795ac0dc695bb89aa8280f67248d7b Mon Sep 17 00:00:00 2001 From: minjaesong Date: Sun, 10 Mar 2019 17:46:48 +0900 Subject: [PATCH] game item to load its own image if needed; common resource pool to assist that --- assets/mods/basegame/items/items.tga | 4 +- lib/TerrarumSansBitmap.jar | Bin 81841 -> 82206 bytes src/net/torvald/terrarum/AppLoader.java | 13 ++-- .../torvald/terrarum/CommonResourcePool.kt | 64 ++++++++++++++++++ src/net/torvald/terrarum/ModMgr.kt | 2 + src/net/torvald/terrarum/Terrarum.kt | 13 ---- .../torvald/terrarum/gameworld/GameWorld.kt | 42 +++++++----- .../terrarum/itemproperties/GameItem.kt | 13 +++- .../terrarum/itemproperties/ItemCodex.kt | 12 ++-- .../terrarum/modulebasegame/EntryPoint.kt | 20 ++++-- .../terrarum/modulebasegame/IngameRenderer.kt | 7 +- .../modulebasegame/items/PickaxeGeneric.kt | 9 ++- .../items/WirePieceSignalWire.kt | 39 +++++++++++ .../worldgenerator/WorldGenerator.kt | 3 - .../terrarum/serialise/ReadLayerData.kt | 3 - .../terrarum/serialise/WriteLayerData.kt | 1 - .../terrarum/serialise/WriteLayerDataLzma.kt | 4 +- .../terrarum/serialise/WriteLayerDataZip.kt | 4 +- .../terrarum/worlddrawer/BlocksDrawerNew.kt | 2 +- work_files/DataFormats/Map data format.txt | 4 ++ work_files/graphics/items/items.psd | 4 +- 21 files changed, 197 insertions(+), 66 deletions(-) create mode 100644 src/net/torvald/terrarum/CommonResourcePool.kt create mode 100644 src/net/torvald/terrarum/modulebasegame/items/WirePieceSignalWire.kt diff --git a/assets/mods/basegame/items/items.tga b/assets/mods/basegame/items/items.tga index f5cb5cd33..6c8587c80 100644 --- a/assets/mods/basegame/items/items.tga +++ b/assets/mods/basegame/items/items.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:adf46bc674fc016c4dcaf4219b8b3b9de49bbd2c94acdf64d89b9145ee1fbe19 -size 262162 +oid sha256:9c2e1dcaf92714d8a42b4a481f1b867218f35ab0544f02a94116c18b4877adbb +size 262188 diff --git a/lib/TerrarumSansBitmap.jar b/lib/TerrarumSansBitmap.jar index dea449acccface051db589531a1fc16a9663c2c7..7fab080306371ae4aa7b28bf26cc2f46ab4b2943 100644 GIT binary patch delta 52235 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 delta 51850 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, () -> Disposable>>() + private val pool = HashMap() + //private val typesMap = HashMap>() + private var loadCounter = -1 // using counters so that the loading can be done on separate thread (gg if the asset requires GL context to be loaded) + val loaded: Boolean + get() = loadCounter == 0 + + fun addToLoadingList(identifier: String, type: Class, loadFunction: () -> Disposable) { + loadingList.addFirst(identifier to type to loadFunction) + + if (loadCounter == -1) + loadCounter = 1 + else + loadCounter += 1 + } + + /** + * You are supposed to call this function only once. + */ + fun loadAll() { + if (loaded) throw IllegalStateException("Assets are already loaded and shipped out :p") + + while (!loadingList.isEmpty) { + val (k, loadfun) = loadingList.removeFirst() + val (name, type) = k + + if (pool.containsKey(name)) { + throw IllegalArgumentException("Assets with identifier '$name' already exists.") + } + + //typesMap[name] = type + pool[name] = loadfun.invoke() + + loadCounter -= 1 + } + } + + operator fun get(identifier: String): Disposable { + val obj = pool[identifier]!! + + return obj + } + + fun dispose() { + pool.forEach { _, u -> + try { + u.dispose() + } + catch (e: Throwable) { + e.printStackTrace() + } + } + } +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/ModMgr.kt b/src/net/torvald/terrarum/ModMgr.kt index 3d4454d35..c434405f7 100644 --- a/src/net/torvald/terrarum/ModMgr.kt +++ b/src/net/torvald/terrarum/ModMgr.kt @@ -140,6 +140,8 @@ object ModMgr { }*/ } + operator fun invoke() { } + private fun checkExistence(module: String) { if (!moduleInfo.containsKey(module)) throw FileNotFoundException("No such module: $module") diff --git a/src/net/torvald/terrarum/Terrarum.kt b/src/net/torvald/terrarum/Terrarum.kt index 9a5c8af0e..3746fe656 100644 --- a/src/net/torvald/terrarum/Terrarum.kt +++ b/src/net/torvald/terrarum/Terrarum.kt @@ -2,7 +2,6 @@ package net.torvald.terrarum import com.badlogic.gdx.Gdx import com.badlogic.gdx.Screen -import com.badlogic.gdx.assets.AssetManager import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.GL20 import com.badlogic.gdx.graphics.OrthographicCamera @@ -195,9 +194,6 @@ object Terrarum : Screen { - lateinit var assetManager: AssetManager // TODO - - init { println("$NAME version ${AppLoader.getVERSION_STRING()}") println("Java Runtime version ${System.getProperty("java.version")}") @@ -302,8 +298,6 @@ object Terrarum : Screen { val MINIMAL_GL_MAX_TEXTURE_SIZE = 4096 override fun show() { - assetManager = AssetManager() - testTexture = Texture(Gdx.files.internal("./assets/test_texture.tga")) @@ -388,13 +382,6 @@ object Terrarum : Screen { - ModMgr // invoke Module Manager - - - - printdbg(this, "all modules loaded successfully") - - // jump straight into the ingame /*val ingame = Ingame(batch) diff --git a/src/net/torvald/terrarum/gameworld/GameWorld.kt b/src/net/torvald/terrarum/gameworld/GameWorld.kt index c78e217e2..1658dc4dc 100644 --- a/src/net/torvald/terrarum/gameworld/GameWorld.kt +++ b/src/net/torvald/terrarum/gameworld/GameWorld.kt @@ -46,7 +46,7 @@ open class GameWorld { //layers val layerWall: MapLayer val layerTerrain: MapLayer - val layerWire: MapLayer + //val layerWire: MapLayer val layerWallLowBits: PairedMapLayer val layerTerrainLowBits: PairedMapLayer @@ -63,6 +63,12 @@ open class GameWorld { val terrainDamages: HashMap val fluidTypes: HashMap val fluidFills: HashMap + val conduitTypes: HashMap // 1 bit = 1 conduit (pipe/wire) type + val conduitFills: Array> + val conduitFills0: HashMap // size of liquid packet on the block + get() = conduitFills[0] + val conduitFills1: HashMap // size of gas packet on the block + get() = conduitFills[1] //public World physWorld = new World( new Vec2(0, -Terrarum.game.gravitationalAccel) ); //physics @@ -89,7 +95,7 @@ open class GameWorld { layerTerrain = MapLayer(width, height) layerWall = MapLayer(width, height) - layerWire = MapLayer(width, height) + //layerWire = MapLayer(width, height) layerTerrainLowBits = PairedMapLayer(width, height) layerWallLowBits = PairedMapLayer(width, height) @@ -98,6 +104,9 @@ open class GameWorld { fluidTypes = HashMap() fluidFills = HashMap() + conduitTypes = HashMap() + conduitFills = Array(16) { HashMap() } + // temperature layer: 2x2 is one cell //layerThermal = MapLayerHalfFloat(width, height, averageTemperature) @@ -115,7 +124,7 @@ open class GameWorld { layerTerrain = layerData.layerTerrain layerWall = layerData.layerWall - layerWire = layerData.layerWire + //layerWire = layerData.layerWire layerTerrainLowBits = layerData.layerTerrainLowBits layerWallLowBits = layerData.layerWallLowBits @@ -124,6 +133,9 @@ open class GameWorld { fluidTypes = layerData.fluidTypes fluidFills = layerData.fluidFills + conduitTypes = HashMap() + conduitFills = Array(16) { HashMap() } + spawnX = layerData.spawnX spawnY = layerData.spawnY @@ -158,16 +170,8 @@ open class GameWorld { * @return byte[][] wire layer */ - val wireArray: ByteArray - get() = layerWire.data - - /** - * Get paired array data of damage codes. - * Format: 0baaaabbbb, aaaa for x = 0, 2, 4, ..., bbbb for x = 1, 3, 5, ... - * @return byte[][] damage code pair - */ - val damageDataArray: ByteArray - get() = layerTerrainLowBits.data + //val wireArray: ByteArray + // get() = layerWire.data private fun coerceXY(x: Int, y: Int) = (x fmod width) to (y.coerceWorld()) @@ -191,9 +195,13 @@ open class GameWorld { terrain * PairedMapLayer.RANGE + terrainDamage } - fun getTileFromWire(x: Int, y: Int): Int? { + /*fun getTileFromWire(x: Int, y: Int): Int? { val (x, y) = coerceXY(x, y) return layerWire.getTile(x, y) + }*/ + + fun getWires(x: Int, y: Int): Int? { + return conduitTypes.getOrDefault(LandUtil.getBlockAddr(this, x, y), 0) } fun getWallLowBits(x: Int, y: Int): Int? { @@ -264,14 +272,14 @@ open class GameWorld { Terrarum.ingame?.queueTerrainChangedEvent(oldTerrain, tile.toUint() * PairedMapLayer.RANGE + damage, LandUtil.getBlockAddr(this, x, y)) } - fun setTileWire(x: Int, y: Int, tile: Byte) { + /*fun setTileWire(x: Int, y: Int, tile: Byte) { val (x, y) = coerceXY(x, y) val oldWire = getTileFromWire(x, y) layerWire.setTile(x, y, tile) if (oldWire != null) Terrarum.ingame?.queueWireChangedEvent(oldWire, tile.toUint(), LandUtil.getBlockAddr(this, x, y)) - } + }*/ fun getTileFrom(mode: Int, x: Int, y: Int): Int? { if (mode == TERRAIN) { @@ -281,7 +289,7 @@ open class GameWorld { return getTileFromWall(x, y) } else if (mode == WIRE) { - return getTileFromWire(x, y) + return getWires(x, y) } else throw IllegalArgumentException("illegal mode input: " + mode.toString()) diff --git a/src/net/torvald/terrarum/itemproperties/GameItem.kt b/src/net/torvald/terrarum/itemproperties/GameItem.kt index 69b5bc7da..1d0b49be1 100644 --- a/src/net/torvald/terrarum/itemproperties/GameItem.kt +++ b/src/net/torvald/terrarum/itemproperties/GameItem.kt @@ -1,6 +1,7 @@ package net.torvald.terrarum.itemproperties import com.badlogic.gdx.graphics.Color +import com.badlogic.gdx.graphics.g2d.TextureRegion import net.torvald.random.HQRNG import net.torvald.terrarum.ItemValue import net.torvald.terrarum.itemproperties.ItemCodex.ITEM_DYNAMIC @@ -82,6 +83,12 @@ abstract class GameItem : Comparable, Cloneable { abstract val material: Material + /** + * Don't assign! Create getter -- there's inevitable execution order fuckup on ModMgr, + * where it simultaneously wanted to be called before and after the Mod's EntryPoint if you assign value to it on init block. + */ + @Transient open val itemImage: TextureRegion? = null + /** * Apparent mass of the item. (basemass * scale^3) */ @@ -168,12 +175,12 @@ abstract class GameItem : Comparable, Cloneable { open fun endSecondaryUse(delta: Float): Boolean = false /** - * Effects applied immediately only once if thrown from pocket + * Effects applied immediately only once if thrown (discarded) from pocket */ open fun effectWhenThrown(delta: Float) { } /** - * Effects applied (continuously or not) when equipped (drawn) + * Effects applied (continuously or not) when equipped (drawn/pulled out) */ open fun effectWhenEquipped(delta: Float) { } @@ -291,6 +298,8 @@ abstract class GameItem : Comparable, Cloneable { return ret } + + val NULL_MATERIAL = Material(0,0,0,0,0,0,0,0,1,0.0) } } diff --git a/src/net/torvald/terrarum/itemproperties/ItemCodex.kt b/src/net/torvald/terrarum/itemproperties/ItemCodex.kt index 250278da8..af8d993f7 100644 --- a/src/net/torvald/terrarum/itemproperties/ItemCodex.kt +++ b/src/net/torvald/terrarum/itemproperties/ItemCodex.kt @@ -1,6 +1,5 @@ package net.torvald.terrarum.itemproperties -import com.badlogic.gdx.graphics.Texture import com.badlogic.gdx.graphics.g2d.TextureRegion import net.torvald.terrarum.AppLoader import net.torvald.terrarum.AppLoader.printdbg @@ -10,6 +9,7 @@ import net.torvald.terrarum.gameworld.GameWorld import net.torvald.terrarum.modulebasegame.Ingame import net.torvald.terrarum.modulebasegame.gameactors.CanBeAnItem import net.torvald.terrarum.worlddrawer.BlocksDrawer +import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack import java.util.* /** @@ -31,7 +31,8 @@ object ItemCodex { val ITEM_DYNAMIC = 0x10_0000..0x0FFF_FFFF val ACTORID_MIN = ITEM_DYNAMIC.endInclusive + 1 - private val itemImagePlaceholder = TextureRegion(Texture("./assets/item_kari_24.tga")) + private val itemImagePlaceholder: TextureRegion + get() = (AppLoader.resourcePool["basegame.items24"] as TextureRegionPack).get(0,0) // copper pickaxe //private val ingame = Terrarum.ingame!! as Ingame // WARNING you can't put this here, ExceptionInInitializerError @@ -294,12 +295,11 @@ object ItemCodex { ) } // wire - else if (itemOriginalID in ITEM_WIRES) { + /*else if (itemOriginalID in ITEM_WIRES) { return BlocksDrawer.tilesWire.get((itemOriginalID % 16) * 16, itemOriginalID / 16) - } - // TODO get it real, using originalID...? + }*/ else - return itemImagePlaceholder + return itemCodex[itemOriginalID]?.itemImage ?: itemImagePlaceholder } fun hasItem(itemID: Int): Boolean = dynamicItemDescription.containsKey(itemID) diff --git a/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt b/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt index fb81af92d..2f4b53f43 100644 --- a/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt +++ b/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt @@ -1,17 +1,15 @@ package net.torvald.terrarum.modulebasegame +import net.torvald.terrarum.* import net.torvald.terrarum.AppLoader.IS_DEVELOPMENT_BUILD import net.torvald.terrarum.AppLoader.printdbg -import net.torvald.terrarum.ModMgr -import net.torvald.terrarum.ModuleEntryPoint -import net.torvald.terrarum.Point2d -import net.torvald.terrarum.Terrarum import net.torvald.terrarum.blockproperties.BlockCodex import net.torvald.terrarum.gameactors.ActorWBMovable import net.torvald.terrarum.itemproperties.GameItem import net.torvald.terrarum.itemproperties.ItemCodex import net.torvald.terrarum.itemproperties.Material import net.torvald.terrarum.modulebasegame.imagefont.WatchFont +import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack /** * The entry point for the module "Basegame" @@ -27,6 +25,18 @@ class EntryPoint : ModuleEntryPoint() { ModMgr.GameLanguageLoader.invoke("basegame") + // load common resources to the AssetsManager + AppLoader.resourcePool.addToLoadingList("basegame.items16", TextureRegionPack.javaClass) { + TextureRegionPack(ModMgr.getGdxFile("basegame", "items/items.tga"), 16, 16) + } + AppLoader.resourcePool.addToLoadingList("basegame.items24", TextureRegionPack.javaClass) { + TextureRegionPack(ModMgr.getGdxFile("basegame", "items/items24.tga"), 24, 24) + } + AppLoader.resourcePool.addToLoadingList("basegame.items48", TextureRegionPack.javaClass) { + TextureRegionPack(ModMgr.getGdxFile("basegame", "items/items48.tga"), 48, 48) + } + + ///////////////////////////////// // load customised item loader // ///////////////////////////////// @@ -77,7 +87,7 @@ class EntryPoint : ModuleEntryPoint() { this.inventoryCategory == Category.WALL && this.dynamicID - ItemCodex.ITEM_WALLS.start == ingame.world.getTileFromWall(Terrarum.mouseTileX, Terrarum.mouseTileY) || this.inventoryCategory == Category.WIRE && - this.dynamicID - ItemCodex.ITEM_WIRES.start == ingame.world.getTileFromWire(Terrarum.mouseTileX, Terrarum.mouseTileY) + 1.shl(this.dynamicID - ItemCodex.ITEM_WIRES.start) and (ingame.world.getWires(Terrarum.mouseTileX, Terrarum.mouseTileY) ?: 0) != 0 ) return false diff --git a/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt b/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt index 8f51827fa..adc46a7a7 100644 --- a/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt +++ b/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt @@ -214,6 +214,9 @@ object IngameRenderer { // works but some UI elements have wrong transparency -> should be fixed with Terrarum.gdxCleanAndSetBlend -- Torvald 2019-01-12 blendNormal(batch) batch.color = Color.WHITE + + + drawWires = false } @@ -232,6 +235,8 @@ object IngameRenderer { internal var fboRGBexportRequested = false + var drawWires = false + private fun drawToRGB( actorsRenderBehind: List?, actorsRenderMiddle: List?, @@ -274,7 +279,7 @@ object IngameRenderer { } setCameraPosition(0f, 0f) - BlocksDrawer.drawFront(batch.projectionMatrix, false) // blue coloured filter of water, etc. + BlocksDrawer.drawFront(batch.projectionMatrix, drawWires) // blue coloured filter of water, etc. batch.inUse { FeaturesDrawer.drawEnvOverlay(batch) diff --git a/src/net/torvald/terrarum/modulebasegame/items/PickaxeGeneric.kt b/src/net/torvald/terrarum/modulebasegame/items/PickaxeGeneric.kt index 53fbc140f..9929a571c 100644 --- a/src/net/torvald/terrarum/modulebasegame/items/PickaxeGeneric.kt +++ b/src/net/torvald/terrarum/modulebasegame/items/PickaxeGeneric.kt @@ -1,5 +1,7 @@ package net.torvald.terrarum.modulebasegame.items +import com.badlogic.gdx.graphics.g2d.TextureRegion +import net.torvald.terrarum.AppLoader import net.torvald.terrarum.Point2d import net.torvald.terrarum.Terrarum import net.torvald.terrarum.blockproperties.Block @@ -10,6 +12,7 @@ import net.torvald.terrarum.itemproperties.GameItem import net.torvald.terrarum.itemproperties.ItemID import net.torvald.terrarum.itemproperties.Material import net.torvald.terrarum.modulebasegame.Ingame +import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack /** * Created by minjaesong on 2017-07-17. @@ -22,9 +25,11 @@ class PickaxeGeneric(override val originalID: ItemID) : GameItem() { override var baseToolSize: Double? = 10.0 override var stackable = true override var inventoryCategory = Category.TOOL - override var isUnique = false - override var isDynamic = true + override val isUnique = false + override val isDynamic = true override var material = Material(0,0,0,0,0,0,0,0,1,0.0) + override val itemImage: TextureRegion? + get() = (AppLoader.resourcePool["basegame.items24"] as TextureRegionPack).get(2,0) init { super.equipPosition = GameItem.EquipPosition.HAND_GRIP diff --git a/src/net/torvald/terrarum/modulebasegame/items/WirePieceSignalWire.kt b/src/net/torvald/terrarum/modulebasegame/items/WirePieceSignalWire.kt new file mode 100644 index 000000000..44c9eb676 --- /dev/null +++ b/src/net/torvald/terrarum/modulebasegame/items/WirePieceSignalWire.kt @@ -0,0 +1,39 @@ +package net.torvald.terrarum.modulebasegame.items + +import com.badlogic.gdx.graphics.g2d.TextureRegion +import net.torvald.terrarum.AppLoader +import net.torvald.terrarum.itemproperties.GameItem +import net.torvald.terrarum.itemproperties.ItemID +import net.torvald.terrarum.modulebasegame.IngameRenderer +import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack + +/** + * Created by minjaesong on 2019-03-10. + */ +class WirePieceSignalWire(override val originalID: ItemID) : GameItem() { + + override var dynamicID: ItemID = originalID + override val originalName = "ITEM_WIRE" + override var baseMass = 0.001 + override var baseToolSize: Double? = null + override var stackable = true + override var inventoryCategory = Category.WIRE + override val isUnique = false + override val isDynamic = false + override val material = GameItem.NULL_MATERIAL + override val itemImage: TextureRegion? + get() = (AppLoader.resourcePool["basegame.items16"] as TextureRegionPack).get(1,9) + + init { + super.equipPosition = GameItem.EquipPosition.HAND_GRIP + + } + + override fun startPrimaryUse(delta: Float): Boolean { + return super.startPrimaryUse(delta) + } + + override fun effectWhenEquipped(delta: Float) { + IngameRenderer.drawWires = true + } +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/worldgenerator/WorldGenerator.kt b/src/net/torvald/terrarum/modulebasegame/worldgenerator/WorldGenerator.kt index 41dc173b2..12ce6567e 100644 --- a/src/net/torvald/terrarum/modulebasegame/worldgenerator/WorldGenerator.kt +++ b/src/net/torvald/terrarum/modulebasegame/worldgenerator/WorldGenerator.kt @@ -176,9 +176,6 @@ object WorldGenerator { //post-process generateFloatingIslands() - //wire layer - Arrays.fill(world.wireArray, 0.toByte()) - // determine spawn position world.spawnY = getSpawnHeight(world.spawnX) diff --git a/src/net/torvald/terrarum/serialise/ReadLayerData.kt b/src/net/torvald/terrarum/serialise/ReadLayerData.kt index 5ab358e0b..c0d3b58d0 100644 --- a/src/net/torvald/terrarum/serialise/ReadLayerData.kt +++ b/src/net/torvald/terrarum/serialise/ReadLayerData.kt @@ -71,9 +71,6 @@ internal object ReadLayerData { retWorld.layerTerrainLowBits.data = terrainLayerLSB retWorld.layerWallLowBits.data = wallLayerLSB - if (wireLayer != null) { - retWorld.layerWire.data = wireLayer - } retWorld.spawnX = spawnCoordXBytes.toLittleInt() retWorld.spawnY = spawnCoordYBytes.toLittleInt() diff --git a/src/net/torvald/terrarum/serialise/WriteLayerData.kt b/src/net/torvald/terrarum/serialise/WriteLayerData.kt index 1c4b758f6..73dadf13a 100644 --- a/src/net/torvald/terrarum/serialise/WriteLayerData.kt +++ b/src/net/torvald/terrarum/serialise/WriteLayerData.kt @@ -62,7 +62,6 @@ internal object WriteLayerData { outputStream.write(map.layerWall.data) outputStream.write(map.layerTerrainLowBits.data) outputStream.write(map.layerWallLowBits.data) - outputStream.write(map.layerWire.data) // replace savemeta with tempfile try { diff --git a/src/net/torvald/terrarum/serialise/WriteLayerDataLzma.kt b/src/net/torvald/terrarum/serialise/WriteLayerDataLzma.kt index a0aa4c467..7bfcbcad7 100644 --- a/src/net/torvald/terrarum/serialise/WriteLayerDataLzma.kt +++ b/src/net/torvald/terrarum/serialise/WriteLayerDataLzma.kt @@ -113,10 +113,10 @@ internal object WriteLayerDataLzma { wb(PAYLOAD_FOOTER) // WIRE payload - wb(PAYLOAD_HEADER); wb("WIRE".toByteArray()) + /*wb(PAYLOAD_HEADER); wb("WIRE".toByteArray()) wi48(world.width * world.height.toLong()) Lzma.compress(ByteArrayInputStream(world.wireArray), outputStream) - wb(PAYLOAD_FOOTER) + wb(PAYLOAD_FOOTER)*/ // TdMG payload wb(PAYLOAD_HEADER); wb("TdMG".toByteArray()) diff --git a/src/net/torvald/terrarum/serialise/WriteLayerDataZip.kt b/src/net/torvald/terrarum/serialise/WriteLayerDataZip.kt index 016075245..9a3875808 100644 --- a/src/net/torvald/terrarum/serialise/WriteLayerDataZip.kt +++ b/src/net/torvald/terrarum/serialise/WriteLayerDataZip.kt @@ -123,12 +123,12 @@ internal object WriteLayerDataZip { wb(PAYLOAD_FOOTER) // WIRE payload - wb(PAYLOAD_HEADER); wb("WIRE".toByteArray()) + /*wb(PAYLOAD_HEADER); wb("WIRE".toByteArray()) wi48(world.width * world.height.toLong()) deflater = DeflaterOutputStream(outputStream, Deflater(Deflater.BEST_COMPRESSION, true), false) deflater.write(world.wireArray) deflater.flush(); deflater.finish() - wb(PAYLOAD_FOOTER) + wb(PAYLOAD_FOOTER)*/ // TdMG payload wb(PAYLOAD_HEADER); wb("TdMG".toByteArray()) diff --git a/src/net/torvald/terrarum/worlddrawer/BlocksDrawerNew.kt b/src/net/torvald/terrarum/worlddrawer/BlocksDrawerNew.kt index f8a0aa903..b99dc375b 100644 --- a/src/net/torvald/terrarum/worlddrawer/BlocksDrawerNew.kt +++ b/src/net/torvald/terrarum/worlddrawer/BlocksDrawerNew.kt @@ -291,7 +291,7 @@ internal object BlocksDrawer { val thisTile = when (mode) { WALL -> world.getTileFromWall(x, y) TERRAIN -> world.getTileFromTerrain(x, y) - WIRE -> world.getTileFromWire(x, y) + WIRE -> world.getWires(x, y) FLUID -> world.getFluid(x, y).type.abs() else -> throw IllegalArgumentException() } diff --git a/work_files/DataFormats/Map data format.txt b/work_files/DataFormats/Map data format.txt index 54c162966..11e123cd2 100644 --- a/work_files/DataFormats/Map data format.txt +++ b/work_files/DataFormats/Map data format.txt @@ -71,6 +71,10 @@ Payload "FlTP" -- world fluid types, array of: (Int48 tileAddress, Signed Int16 Payload "FlFL" -- world fluid fills, array of: (Int48 tileAddress, Float32 amount) Uncompressed size will be arbitrary (multiple of tens) If the 'amount' < 0.0001f (WorldSimulator.FLUID_MIN_MASS), the entry must be discarded +Payload "CtYP" -- conduit types, array of: (Int48 tileAddress, Uint32 bitarray) + can hold 32 different wires simultaneously +Payload "CfL0" -- conduit fills, aka size of liquid/gas packet, array of: (Int48 tileAddress, Float32 fill) + CfL0..CfL9, CfLa..CfLf are available to store values for 16 different things. EOF 45 E EOF 6E n diff --git a/work_files/graphics/items/items.psd b/work_files/graphics/items/items.psd index c0a1f4f46..5203630fa 100755 --- a/work_files/graphics/items/items.psd +++ b/work_files/graphics/items/items.psd @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6b20c79b5b800d7e216b267483c51d51f58e48ffc6eefafe1ce4103feabe8085 -size 582712 +oid sha256:5f88daac2886df89b319564ee4284d503d6710000fac01d6fefb73c0f45744d6 +size 720942