mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 20:31:51 +09:00
codices serialised into the savegame
This commit is contained in:
@@ -9,4 +9,5 @@ const val CURRENCY = 0xA4.toChar()
|
||||
const val MIDDOT = 0xB7.toChar()
|
||||
|
||||
const val ENDASH = 0x2013.toChar()
|
||||
const val EMDASH = 0x2014.toChar()
|
||||
const val EMDASH = 0x2014.toChar()
|
||||
const val ELLIPSIS = 0x2026.toChar()
|
||||
|
||||
@@ -243,8 +243,8 @@ object ModMgr {
|
||||
|
||||
object GameBlockLoader {
|
||||
@JvmStatic operator fun invoke(module: String) {
|
||||
Terrarum.BlockCodex = BlockCodex(module, "blocks/blocks.csv")
|
||||
Terrarum.WireCodex = WireCodex(module, "wires/")
|
||||
Terrarum.blockCodex = BlockCodex(module, "blocks/blocks.csv")
|
||||
Terrarum.wireCodex = WireCodex(module, "wires/")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -266,7 +266,7 @@ object ModMgr {
|
||||
}
|
||||
|
||||
private fun register(module: String, csv: List<CSVRecord>) {
|
||||
Terrarum.ItemCodex = ItemCodex()
|
||||
Terrarum.itemCodex = ItemCodex()
|
||||
|
||||
csv.forEach {
|
||||
val className: String = it["classname"].toString()
|
||||
@@ -296,7 +296,7 @@ object ModMgr {
|
||||
val matePath = "materials/"
|
||||
|
||||
@JvmStatic operator fun invoke(module: String) {
|
||||
Terrarum.MaterialCodex = MaterialCodex(module, matePath + "materials.csv")
|
||||
Terrarum.materialCodex = MaterialCodex(module, matePath + "materials.csv")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -56,12 +56,12 @@ object Terrarum : Disposable {
|
||||
}
|
||||
|
||||
|
||||
open lateinit var BlockCodex: BlockCodex
|
||||
open lateinit var ItemCodex: ItemCodex
|
||||
open lateinit var WireCodex: WireCodex
|
||||
open lateinit var MaterialCodex: MaterialCodex
|
||||
open lateinit var FactionCodex: FactionCodex
|
||||
open var Apocryphas = HashMap<String, Any>()
|
||||
var blockCodex = BlockCodex()
|
||||
var itemCodex = ItemCodex()
|
||||
var wireCodex = WireCodex()
|
||||
var materialCodex = MaterialCodex()
|
||||
var factionCodex = FactionCodex()
|
||||
var apocryphas = HashMap<String, Any>()
|
||||
|
||||
|
||||
//////////////////////////////
|
||||
@@ -644,14 +644,14 @@ fun <T> List<T>.tail() = this.subList(1, this.size)
|
||||
fun <T> List<T>.init() = this.subList(0, this.lastIndex)
|
||||
|
||||
val BlockCodex: BlockCodex
|
||||
get() = Terrarum.BlockCodex
|
||||
get() = Terrarum.blockCodex
|
||||
val ItemCodex: ItemCodex
|
||||
get() = Terrarum.ItemCodex
|
||||
get() = Terrarum.itemCodex
|
||||
val WireCodex: WireCodex
|
||||
get() = Terrarum.WireCodex
|
||||
get() = Terrarum.wireCodex
|
||||
val MaterialCodex: MaterialCodex
|
||||
get() = Terrarum.MaterialCodex
|
||||
get() = Terrarum.materialCodex
|
||||
val FactionCodex: FactionCodex
|
||||
get() = Terrarum.FactionCodex
|
||||
get() = Terrarum.factionCodex
|
||||
val Apocryphas: HashMap<String, Any>
|
||||
get() = Terrarum.Apocryphas
|
||||
get() = Terrarum.apocryphas
|
||||
@@ -55,7 +55,7 @@ class BlockCodex {
|
||||
virtualToTile.clear()
|
||||
}
|
||||
|
||||
private constructor()
|
||||
internal constructor()
|
||||
|
||||
/**
|
||||
* Later entry (possible from other modules) will replace older ones
|
||||
|
||||
@@ -23,9 +23,9 @@ class WireCodex {
|
||||
wireProps.clear()
|
||||
}
|
||||
|
||||
private constructor() {
|
||||
internal constructor() {
|
||||
try {
|
||||
Terrarum.ItemCodex["testtesttest"]
|
||||
Terrarum.itemCodex["testtesttest"]
|
||||
}
|
||||
catch (e: UninitializedPropertyAccessException) {
|
||||
throw UninitializedPropertyAccessException("ItemCodex not initialised!")
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
package net.torvald.terrarum.itemproperties
|
||||
|
||||
import net.torvald.terrarum.AppLoader.printmsg
|
||||
import net.torvald.terrarum.ModMgr
|
||||
import net.torvald.terrarum.blockproperties.floatVal
|
||||
import net.torvald.terrarum.blockproperties.intVal
|
||||
import net.torvald.terrarum.utils.CSVFetcher
|
||||
import org.apache.commons.csv.CSVRecord
|
||||
import java.io.IOException
|
||||
|
||||
/**
|
||||
* To be used with items AND TILES (electricity resistance, thermal conductivity)
|
||||
@@ -33,7 +31,7 @@ class MaterialCodex {
|
||||
val materialProps = HashMap<String, Material>()
|
||||
@Transient private val nullMaterial = Material()
|
||||
|
||||
private constructor()
|
||||
internal constructor()
|
||||
|
||||
internal constructor(module: String, path: String) : this() {
|
||||
register(CSVFetcher.readFromModule(module, path))
|
||||
|
||||
@@ -9,7 +9,7 @@ import net.torvald.terrarum.serialise.Common
|
||||
*/
|
||||
object ExportCodices : ConsoleCommand {
|
||||
override fun execute(args: Array<String>) {
|
||||
println(Common.jsoner.toJson(Terrarum.BlockCodex))
|
||||
println(Common.jsoner.toJson(Terrarum.blockCodex))
|
||||
}
|
||||
|
||||
override fun printUsage() {
|
||||
|
||||
@@ -1,17 +1,16 @@
|
||||
package net.torvald.terrarum.modulebasegame.console
|
||||
|
||||
import com.badlogic.gdx.Gdx
|
||||
import net.torvald.terrarum.AppLoader
|
||||
import net.torvald.terrarum.CommonResourcePool
|
||||
import net.torvald.terrarum.ReferencingRanges
|
||||
import net.torvald.terrarum.Terrarum
|
||||
import net.torvald.terrarum.*
|
||||
import net.torvald.terrarum.console.ConsoleCommand
|
||||
import net.torvald.terrarum.console.Echo
|
||||
import net.torvald.terrarum.gameactors.Actor
|
||||
import net.torvald.terrarum.gameactors.BlockMarkerActor
|
||||
import net.torvald.terrarum.modulebasegame.TerrarumIngame
|
||||
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.*
|
||||
import net.torvald.terrarum.serialise.*
|
||||
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.DiskEntry
|
||||
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.VDUtil
|
||||
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.VirtualDisk
|
||||
import net.torvald.terrarum.serialise.Common
|
||||
import net.torvald.terrarum.serialise.WriteSavegame
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
|
||||
@@ -42,6 +41,7 @@ object Save : ConsoleCommand {
|
||||
|
||||
|
||||
WriteSavegame(disk, file, ingame)
|
||||
Echo ("${ccW}Saved with size of $ccG${file.length()}$ccW bytes")
|
||||
}
|
||||
catch (e: IOException) {
|
||||
Echo("Save: IOException raised.")
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package net.torvald.terrarum.serialise
|
||||
|
||||
import net.torvald.terrarum.AppLoader
|
||||
import net.torvald.terrarum.SanicLoadScreen
|
||||
import net.torvald.terrarum.Terrarum
|
||||
import net.torvald.terrarum.*
|
||||
import net.torvald.terrarum.modulebasegame.TerrarumIngame
|
||||
import net.torvald.terrarum.modulebasegame.gameactors.IngamePlayer
|
||||
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.*
|
||||
@@ -38,24 +36,34 @@ object WriteSavegame {
|
||||
addFile(disk, meta)
|
||||
|
||||
// Write BlockCodex//
|
||||
/*val blockCodexContent = EntryFile(ByteArray64.fromByteArray(Common.jsoner.toJson(BlockCodex, BlockCodex.javaClass).toByteArray(Common.CHARSET)))
|
||||
val blockCodexContent = EntryFile(ByteArray64.fromByteArray(Common.jsoner.toJson(BlockCodex).toByteArray(Common.CHARSET)))
|
||||
val blocks = DiskEntry(-16, 0, "blocks".toByteArray(), creation_t, time_t, blockCodexContent)
|
||||
addFile(disk, blocks)
|
||||
|
||||
// Write ItemCodex//
|
||||
val itemCodexContent = EntryFile(ByteArray64.fromByteArray(Common.jsoner.toJson(ItemCodex, ItemCodex.javaClass).toByteArray(Common.CHARSET)))
|
||||
val itemCodexContent = EntryFile(ByteArray64.fromByteArray(Common.jsoner.toJson(ItemCodex).toByteArray(Common.CHARSET)))
|
||||
val items = DiskEntry(-17, 0, "items".toByteArray(), creation_t, time_t, itemCodexContent)
|
||||
addFile(disk, items)
|
||||
|
||||
// Write WireCodex//
|
||||
val wireCodexContent = EntryFile(ByteArray64.fromByteArray(Common.jsoner.toJson(WireCodex, WireCodex.javaClass).toByteArray(Common.CHARSET)))
|
||||
val wireCodexContent = EntryFile(ByteArray64.fromByteArray(Common.jsoner.toJson(WireCodex).toByteArray(Common.CHARSET)))
|
||||
val wires = DiskEntry(-18, 0, "wires".toByteArray(), creation_t, time_t, wireCodexContent)
|
||||
addFile(disk, wires)
|
||||
|
||||
// Write MaterialCodex//
|
||||
val materialCodexContent = EntryFile(ByteArray64.fromByteArray(Common.jsoner.toJson(MaterialCodex, MaterialCodex.javaClass).toByteArray(Common.CHARSET)))
|
||||
val materialCodexContent = EntryFile(ByteArray64.fromByteArray(Common.jsoner.toJson(MaterialCodex).toByteArray(Common.CHARSET)))
|
||||
val materials = DiskEntry(-19, 0, "materials".toByteArray(), creation_t, time_t, materialCodexContent)
|
||||
addFile(disk, materials)*/
|
||||
addFile(disk, materials)
|
||||
|
||||
// Write FactionCodex//
|
||||
val factionCodexContent = EntryFile(ByteArray64.fromByteArray(Common.jsoner.toJson(FactionCodex).toByteArray(Common.CHARSET)))
|
||||
val factions = DiskEntry(-20, 0, "factions".toByteArray(), creation_t, time_t, factionCodexContent)
|
||||
addFile(disk, factions)
|
||||
|
||||
// Write Apocryphas//
|
||||
val apocryphasContent = EntryFile(ByteArray64.fromByteArray(Common.jsoner.toJson(Apocryphas).toByteArray(Common.CHARSET)))
|
||||
val apocryphas = DiskEntry(-1024, 0, "modprops".toByteArray(), creation_t, time_t, apocryphasContent)
|
||||
addFile(disk, apocryphas)
|
||||
|
||||
// Write World //
|
||||
val worldNum = ingame.world.worldIndex
|
||||
|
||||
@@ -16,6 +16,12 @@ Each file on the Savegame has following convention:
|
||||
|Type|Filename|ID|
|
||||
|--|--|--|
|
||||
|Metadata|savegame|-1|
|
||||
|Blocks Properties|blocks|-16|
|
||||
|Items Properties|items|-17|
|
||||
|Wires Properties|wires|-18|
|
||||
|Materials Properties|materials|-19|
|
||||
|Factions Properties|factions|-20|
|
||||
|Other Properties used by modules|modprops|-1024|
|
||||
|Worlds|world$n ($n is a world index)|$n|
|
||||
|Actors|actor$n ($n is an Actor ID)|$n|
|
||||
|
||||
@@ -46,13 +52,6 @@ Following code is an example Savegame JSON files.
|
||||
lastplay_t: <last play time in real-world unix time>,
|
||||
playtime_t: <total play time in real-world unix time>,
|
||||
thumb: <Ascii85-encoded gzipped thumbnail image in TGA>,
|
||||
|
||||
blocks: <BlockCodex serialised>,
|
||||
items: <ItemCodex serialised>,
|
||||
itemd: <DynamicItems serialised>,
|
||||
wires: <WireCodex serialised>,
|
||||
fluids: <FluidCodex serialised>,
|
||||
materials: <MaterialCodex serialised>,
|
||||
loadorder: <LoadOrder serialised>,
|
||||
worlds: [1,2,6,7]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user