diff --git a/assets/modules/basegame/items/malicious.groovy b/assets/modules/basegame/items/malicious.groovy new file mode 100644 index 000000000..3832ce475 --- /dev/null +++ b/assets/modules/basegame/items/malicious.groovy @@ -0,0 +1,88 @@ +import net.torvald.terrarum.itemproperties.InventoryItem +import net.torvald.terrarum.itemproperties.Material +import org.jetbrains.annotations.NotNull +import org.jetbrains.annotations.Nullable + +/** + * Created by SKYHi14 on 2017-04-28. + */ + +static InventoryItem invoke(int id) { + + return new InventoryItem() { + @Override + int getDynamicID() { + return 0 + } + + @Override + void setDynamicID(int i) { + + } + + @Override + int getOriginalID() { + return 0 + } + + @Override + boolean isUnique() { + return false + } + + @Override + protected String getOriginalName() { + return null + } + + @Override + double getBaseMass() { + return 0 + } + + @Override + void setBaseMass(double v) { + + } + + @Override + Double getBaseToolSize() { + return null + } + + @Override + void setBaseToolSize(@Nullable Double aDouble) { + + } + + @Override + String getInventoryCategory() { + return null + } + + @Override + void setInventoryCategory(@NotNull String s) { + + } + + @Override + boolean getStackable() { + return false + } + + @Override + void setStackable(boolean b) { + + } + + @Override + boolean isDynamic() { + return false + } + + @Override + Material getMaterial() { + return null + } + } +} \ No newline at end of file diff --git a/lib/groovy-all-2.4.10-indy.jar b/lib/groovy-all-2.4.10-indy.jar new file mode 100644 index 000000000..61223fe9a Binary files /dev/null and b/lib/groovy-all-2.4.10-indy.jar differ diff --git a/src/net/torvald/imagefont/GameFontImpl.kt b/src/net/torvald/imagefont/GameFontImpl.kt index 70a9b5f55..64b0e342a 100644 --- a/src/net/torvald/imagefont/GameFontImpl.kt +++ b/src/net/torvald/imagefont/GameFontImpl.kt @@ -35,7 +35,7 @@ class GameFontImpl(noShadow: Boolean = false) : GameFontBase(noShadow = noShadow GameFontBase.uniPunct = SpriteSheet( "./assets/graphics/fonts/unipunct.tga", GameFontBase.W_LATIN_WIDE, GameFontBase.H) GameFontBase.uniHan = SpriteSheet( - "./assets/graphics/fonts/wenquanyi.tga.gz", 16, 16) + "./assets/graphics/fonts/wenquanyi.tga.gz", 16, 16) // ~32 MB GameFontBase.greekSheet = SpriteSheet( "./assets/graphics/fonts/greek_variable.tga", 15, 19, 1) GameFontBase.thaiSheet = SpriteSheet( diff --git a/src/net/torvald/terrarum/KVHashMap.kt b/src/net/torvald/terrarum/KVHashMap.kt index f6ea73178..d233e0952 100644 --- a/src/net/torvald/terrarum/KVHashMap.kt +++ b/src/net/torvald/terrarum/KVHashMap.kt @@ -1,28 +1,28 @@ package net.torvald.terrarum import com.google.gson.JsonPrimitive +import net.torvald.terrarum.gameactors.Actor import java.util.* import java.util.function.Consumer import kotlin.collections.HashMap -typealias ActorValue = KVHashMap typealias ItemValue = KVHashMap typealias GameConfig = KVHashMap /** * Created by minjaesong on 15-12-30. */ -class KVHashMap { +open class KVHashMap { constructor() { hashMap = HashMap() } - private constructor(newMap: HashMap) { + protected constructor(newMap: HashMap) { hashMap = newMap } - private val hashMap: HashMap + protected var hashMap: HashMap /** * Add key-value pair to the configuration table. @@ -33,7 +33,7 @@ class KVHashMap { * * * @param value */ - operator fun set(key: String, value: Any) { + open operator fun set(key: String, value: Any) { hashMap.put(key.toLowerCase(), value) } @@ -99,12 +99,13 @@ class KVHashMap { val keySet: Set get() = hashMap.keys - fun remove(key: String) { - if (hashMap[key] != null) + open fun remove(key: String) { + if (hashMap[key] != null) { hashMap.remove(key, hashMap[key]!!) + } } - fun clone(): KVHashMap { + open fun clone(): KVHashMap { val cloneOfMap = hashMap.clone() as HashMap return KVHashMap(cloneOfMap) } diff --git a/src/net/torvald/terrarum/StateInGame.kt b/src/net/torvald/terrarum/StateInGame.kt index 389b04e8d..5688f08cc 100644 --- a/src/net/torvald/terrarum/StateInGame.kt +++ b/src/net/torvald/terrarum/StateInGame.kt @@ -269,7 +269,7 @@ class StateInGame : BasicGameState() { //////////////////////////// FeaturesDrawer.update(gc, delta) WorldCamera.update() - BlocksDrawer.update() + /////////////////////////// diff --git a/src/net/torvald/terrarum/StateUITest.kt b/src/net/torvald/terrarum/StateUITest.kt index c048b51d4..2a8374edb 100644 --- a/src/net/torvald/terrarum/StateUITest.kt +++ b/src/net/torvald/terrarum/StateUITest.kt @@ -27,6 +27,9 @@ class StateUITest : BasicGameState() { TODO("not implemented") } + override fun actorValueChanged(key: String, value: Any?) { + } + override var inventory: ActorInventory = ActorInventory(this, 100, ActorInventory.CAPACITY_MODE_WEIGHT) } diff --git a/src/net/torvald/terrarum/Terrarum.kt b/src/net/torvald/terrarum/Terrarum.kt index 1fe3254a0..639582b9e 100644 --- a/src/net/torvald/terrarum/Terrarum.kt +++ b/src/net/torvald/terrarum/Terrarum.kt @@ -50,8 +50,6 @@ object Terrarum : StateBasedGame(GAME_NAME) { val HALFH: Int get() = HEIGHT.ushr(1) - val QUICKSLOT_MAX = 10 - /** * To be used with physics simulator */ diff --git a/src/net/torvald/terrarum/console/AVTracker.kt b/src/net/torvald/terrarum/console/AVTracker.kt index eb0021895..a7dd2bc03 100644 --- a/src/net/torvald/terrarum/console/AVTracker.kt +++ b/src/net/torvald/terrarum/console/AVTracker.kt @@ -7,7 +7,7 @@ import java.util.* /** * Created by minjaesong on 2016-12-29. */ -object AVTracker : ConsoleCommand { +internal object AVTracker : ConsoleCommand { private val jPanelInstances = ArrayList() override fun execute(args: Array) { diff --git a/src/net/torvald/terrarum/console/ActorsList.kt b/src/net/torvald/terrarum/console/ActorsList.kt index 56637ef1e..4bc4630dd 100644 --- a/src/net/torvald/terrarum/console/ActorsList.kt +++ b/src/net/torvald/terrarum/console/ActorsList.kt @@ -7,7 +7,7 @@ import java.util.* /** * Created by minjaesong on 2016-12-29. */ -object ActorsList : ConsoleCommand { +internal object ActorsList : ConsoleCommand { private val jPanelInstances = ArrayList() override fun execute(args: Array) { diff --git a/src/net/torvald/terrarum/console/CommandDict.kt b/src/net/torvald/terrarum/console/CommandDict.kt index 0fe001a00..dcce18f6f 100644 --- a/src/net/torvald/terrarum/console/CommandDict.kt +++ b/src/net/torvald/terrarum/console/CommandDict.kt @@ -1,7 +1,5 @@ package net.torvald.terrarum.console -import net.torvald.terrarum.Terrarum - import java.util.HashMap /** @@ -9,7 +7,7 @@ import java.util.HashMap */ object CommandDict { - internal var dict: HashMap = hashMapOf( + internal val dict: HashMap = hashMapOf( Pair("echo", Echo), Pair("error", EchoError), Pair("setav", SetAV), @@ -60,4 +58,8 @@ object CommandDict { operator fun get(commandName: String): ConsoleCommand { return dict[commandName]!! } + + fun add(name: String, obj: ConsoleCommand) { + dict[name] = obj + } } diff --git a/src/net/torvald/terrarum/console/CommandInterpreter.kt b/src/net/torvald/terrarum/console/CommandInterpreter.kt index da3f2667b..7d4260c0f 100644 --- a/src/net/torvald/terrarum/console/CommandInterpreter.kt +++ b/src/net/torvald/terrarum/console/CommandInterpreter.kt @@ -13,7 +13,7 @@ import java.util.regex.Pattern /** * Created by minjaesong on 16-01-15. */ -object CommandInterpreter { +internal object CommandInterpreter { private val commandsNoAuth = arrayOf( "auth", @@ -31,7 +31,7 @@ object CommandInterpreter { private val ccY = GameFontBase.colToCode["y"] private val ccR = GameFontBase.colToCode["r"] - fun execute(command: String) { + internal fun execute(command: String) { val cmd: Array = parse(command) val error = Error() diff --git a/src/net/torvald/terrarum/console/ConsoleCommand.kt b/src/net/torvald/terrarum/console/ConsoleCommand.kt index ad453add3..ab0d495e4 100644 --- a/src/net/torvald/terrarum/console/ConsoleCommand.kt +++ b/src/net/torvald/terrarum/console/ConsoleCommand.kt @@ -11,7 +11,6 @@ interface ConsoleCommand { * * e.g. in ```setav mass 74```, zeroth args will be ```setav```. */ - @Throws(Exception::class) fun execute(args: Array) fun printUsage() diff --git a/src/net/torvald/terrarum/console/JavaIMTest.kt b/src/net/torvald/terrarum/console/JavaIMTest.kt index dfc1bb95a..26732cfc1 100644 --- a/src/net/torvald/terrarum/console/JavaIMTest.kt +++ b/src/net/torvald/terrarum/console/JavaIMTest.kt @@ -8,7 +8,7 @@ import javax.swing.JFrame * Created by SKYHi14 on 2017-02-05. */ -object JavaIMTest : ConsoleCommand { +internal object JavaIMTest : ConsoleCommand { override fun execute(args: Array) { IMStringReader( diff --git a/src/net/torvald/terrarum/console/KillActor.kt b/src/net/torvald/terrarum/console/KillActor.kt index 20403e658..3aad79d21 100644 --- a/src/net/torvald/terrarum/console/KillActor.kt +++ b/src/net/torvald/terrarum/console/KillActor.kt @@ -6,7 +6,7 @@ import net.torvald.terrarum.langpack.Lang /** * Created by SKYHi14 on 2017-01-31. */ -object KillActor : ConsoleCommand { +internal object KillActor : ConsoleCommand { override fun execute(args: Array) { if (args.size == 2) { try { diff --git a/src/net/torvald/terrarum/console/SetScale.kt b/src/net/torvald/terrarum/console/SetScale.kt index b482b32b1..14be78151 100644 --- a/src/net/torvald/terrarum/console/SetScale.kt +++ b/src/net/torvald/terrarum/console/SetScale.kt @@ -6,7 +6,7 @@ import net.torvald.terrarum.gameactors.ActorWithPhysics /** * Created by minjaesong on 2017-01-20. */ -object SetScale : ConsoleCommand { +internal object SetScale : ConsoleCommand { override fun execute(args: Array) { if (args.size == 2 || args.size == 3) { try { diff --git a/src/net/torvald/terrarum/console/SpawnTapestry.kt b/src/net/torvald/terrarum/console/SpawnTapestry.kt index db4bf0d1d..2c65c227e 100644 --- a/src/net/torvald/terrarum/console/SpawnTapestry.kt +++ b/src/net/torvald/terrarum/console/SpawnTapestry.kt @@ -8,7 +8,7 @@ import java.io.FileInputStream /** * Created by minjaesong on 2017-01-14. */ -object SpawnTapestry : ConsoleCommand { +internal object SpawnTapestry : ConsoleCommand { override fun execute(args: Array) { if (args.size < 2) { printUsage() diff --git a/src/net/torvald/terrarum/console/SpawnTikiTorch.kt b/src/net/torvald/terrarum/console/SpawnTikiTorch.kt index 48e2fb8c8..e37cd4c37 100644 --- a/src/net/torvald/terrarum/console/SpawnTikiTorch.kt +++ b/src/net/torvald/terrarum/console/SpawnTikiTorch.kt @@ -8,7 +8,7 @@ import net.torvald.terrarum.gamecontroller.mouseY /** * Created by minjaesong on 2016-12-17. */ -object SpawnTikiTorch : ConsoleCommand { +internal object SpawnTikiTorch : ConsoleCommand { override fun execute(args: Array) { val torch = FixtureTikiTorch() torch.setPosition(Terrarum.appgc.mouseX, Terrarum.appgc.mouseY) diff --git a/src/net/torvald/terrarum/debuggerapp/ActorValueTracker.kt b/src/net/torvald/terrarum/debuggerapp/ActorValueTracker.kt index c27e066a7..ef2b3f521 100644 --- a/src/net/torvald/terrarum/debuggerapp/ActorValueTracker.kt +++ b/src/net/torvald/terrarum/debuggerapp/ActorValueTracker.kt @@ -1,6 +1,6 @@ package net.torvald.terrarum.debuggerapp -import net.torvald.terrarum.ActorValue +import net.torvald.terrarum.gameactors.ActorValue import net.torvald.terrarum.Terrarum import net.torvald.terrarum.console.Echo import net.torvald.terrarum.console.SetAV diff --git a/src/net/torvald/terrarum/gameactors/Actor.kt b/src/net/torvald/terrarum/gameactors/Actor.kt index 2d74d7f36..032763bdd 100644 --- a/src/net/torvald/terrarum/gameactors/Actor.kt +++ b/src/net/torvald/terrarum/gameactors/Actor.kt @@ -1,7 +1,7 @@ package net.torvald.terrarum.gameactors import net.torvald.random.HQRNG -import net.torvald.terrarum.ActorValue +import net.torvald.terrarum.gameactors.ActorValue import net.torvald.terrarum.Terrarum import net.torvald.terrarum.itemproperties.ItemCodex import net.torvald.terrarum.itemproperties.ItemCodex.ACTORID_MIN @@ -37,7 +37,7 @@ abstract class Actor(val renderOrder: RenderOrder) : Comparable, Runnable * @return Reference ID. (16777216-0x7FFF_FFFF) */ open var referenceID: ActorID = generateUniqueReferenceID() - var actorValue = ActorValue() + var actorValue = ActorValue(this) @Volatile var flagDespawn = false override fun equals(other: Any?) = referenceID == (other as Actor).referenceID @@ -79,4 +79,10 @@ abstract class Actor(val renderOrder: RenderOrder) : Comparable, Runnable return ret } + /** + * ActorValue change event handler + * + * @param value null if the key is deleted + */ + abstract fun actorValueChanged(key: String, value: Any?) } \ No newline at end of file diff --git a/src/net/torvald/terrarum/gameactors/ActorHumanoid.kt b/src/net/torvald/terrarum/gameactors/ActorHumanoid.kt index 2e846f1ff..94fc66d52 100644 --- a/src/net/torvald/terrarum/gameactors/ActorHumanoid.kt +++ b/src/net/torvald/terrarum/gameactors/ActorHumanoid.kt @@ -473,6 +473,21 @@ open class ActorHumanoid(birth: GameDate, death: GameDate? = null) } } + override fun actorValueChanged(key: String, value: Any?) { + // quickslot implementation + if (key == AVKey.__PLAYER_QUICKSLOTSEL && value != null) { + // ONLY FOR HAND_GRIPs!! + val quickBarItem = inventory.getQuickBar(actorValue.getAsInt(key)!!)?.item + + if (quickBarItem == null) { + unequipSlot(InventoryItem.EquipPosition.HAND_GRIP) + } + else if (quickBarItem.equipPosition == InventoryItem.EquipPosition.HAND_GRIP) { + equipItem(quickBarItem) + } + } + } + fun isNoClip(): Boolean { return noClip } diff --git a/src/net/torvald/terrarum/gameactors/ActorValue.kt b/src/net/torvald/terrarum/gameactors/ActorValue.kt new file mode 100644 index 000000000..36b1f11fb --- /dev/null +++ b/src/net/torvald/terrarum/gameactors/ActorValue.kt @@ -0,0 +1,29 @@ +package net.torvald.terrarum.gameactors + +import net.torvald.terrarum.KVHashMap + +/** + * Created by SKYHi14 on 2017-04-28. + */ +class ActorValue(val actor: Actor) : KVHashMap() { + + private constructor(actor: Actor, newMap: HashMap): this(actor) { + hashMap = newMap + } + + override fun set(key: String, value: Any) { + super.set(key, value) + actor.actorValueChanged(key, value) // fire the event handler + } + + override fun remove(key: String) { + if (hashMap[key] != null) { + hashMap.remove(key, hashMap[key]!!) + actor.actorValueChanged(key, null) + } + } + + fun clone(newActor: Actor): ActorValue { + return ActorValue(newActor, hashMap) + } +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/gameactors/ActorWithPhysics.kt b/src/net/torvald/terrarum/gameactors/ActorWithPhysics.kt index 7a516160e..811735a2f 100644 --- a/src/net/torvald/terrarum/gameactors/ActorWithPhysics.kt +++ b/src/net/torvald/terrarum/gameactors/ActorWithPhysics.kt @@ -1124,6 +1124,13 @@ open class ActorWithPhysics(renderOrder: RenderOrder, val immobileBody: Boolean } } + override fun actorValueChanged(key: String, value: Any?) { + // do nothing + } + + + + private fun clampW(x: Double): Double = if (x < TILE_SIZE + nextHitbox.width / 2) { TILE_SIZE + nextHitbox.width / 2 diff --git a/src/net/torvald/terrarum/gameactors/FixtureTikiTorch.kt b/src/net/torvald/terrarum/gameactors/FixtureTikiTorch.kt index 8e867b14a..9cb7f70f5 100644 --- a/src/net/torvald/terrarum/gameactors/FixtureTikiTorch.kt +++ b/src/net/torvald/terrarum/gameactors/FixtureTikiTorch.kt @@ -7,7 +7,7 @@ import java.util.* /** * Created by minjaesong on 16-06-17. */ -class FixtureTikiTorch : FixtureBase(), Luminous { +internal class FixtureTikiTorch : FixtureBase(), Luminous { override var luminosity: Int get() = BlockCodex[Block.TORCH].luminosity diff --git a/src/net/torvald/terrarum/gameactors/InjectCreatureRaw.kt b/src/net/torvald/terrarum/gameactors/InjectCreatureRaw.kt index 288a9edb8..719025125 100644 --- a/src/net/torvald/terrarum/gameactors/InjectCreatureRaw.kt +++ b/src/net/torvald/terrarum/gameactors/InjectCreatureRaw.kt @@ -4,7 +4,7 @@ import net.torvald.JsonFetcher import net.torvald.random.Fudge3 import net.torvald.terrarum.langpack.Lang import com.google.gson.JsonObject -import net.torvald.terrarum.ActorValue +import net.torvald.terrarum.gameactors.ActorValue import net.torvald.terrarum.ModMgr import net.torvald.terrarum.gameactors.ActorHumanoid import org.newdawn.slick.SlickException diff --git a/src/net/torvald/terrarum/gameactors/Player.kt b/src/net/torvald/terrarum/gameactors/Player.kt index 2fd7db639..53c0c6747 100644 --- a/src/net/torvald/terrarum/gameactors/Player.kt +++ b/src/net/torvald/terrarum/gameactors/Player.kt @@ -1,6 +1,5 @@ package net.torvald.terrarum.gameactors -import net.torvald.terrarum.ui.UIQuickBar import org.newdawn.slick.GameContainer /** diff --git a/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt b/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt index 76bff4b69..3ba0d5dca 100644 --- a/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt +++ b/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt @@ -1,6 +1,6 @@ package net.torvald.terrarum.gameactors -import net.torvald.terrarum.ActorValue +import net.torvald.terrarum.gameactors.ActorValue import net.torvald.terrarum.ModMgr import net.torvald.terrarum.gameactors.faction.FactionFactory import net.torvald.terrarum.itemproperties.ItemCodex @@ -28,7 +28,6 @@ object PlayerBuilderSigrid { p.spriteGlow!!.delay = 200 p.spriteGlow!!.setRowsAndFrames(1, 1) - p.actorValue = ActorValue() p.actorValue[AVKey.SCALE] = 1.0 p.actorValue[AVKey.SPEED] = 4.0 p.actorValue[AVKey.SPEEDBUFF] = 1.0 diff --git a/src/net/torvald/terrarum/gameactors/Pocketed.kt b/src/net/torvald/terrarum/gameactors/Pocketed.kt index c033e9f09..0c9d3fca7 100644 --- a/src/net/torvald/terrarum/gameactors/Pocketed.kt +++ b/src/net/torvald/terrarum/gameactors/Pocketed.kt @@ -14,7 +14,9 @@ interface Pocketed { /** * Equips an item. If the item is not in the inventory, an error will be thrown. */ - fun unequipItem(item: InventoryItem) { + fun unequipItem(item: InventoryItem?) { + if (item == null) return + if (item.equipPosition == InventoryItem.EquipPosition.NULL) throw Error("Unequipping the item that cannot be equipped in the first place") @@ -28,6 +30,14 @@ interface Pocketed { item.effectOnUnequip(Terrarum.appgc, Terrarum.delta) } + // no need for equipSlot(Int) + fun unequipSlot(slot: Int) { + if (slot < 0 || slot > InventoryItem.EquipPosition.INDEX_MAX) + throw IllegalArgumentException("Slot index out of range: $slot") + + unequipItem(inventory.itemEquipped[slot]) + } + /** * Equips an item. If the item is not in the inventory, adds the item first. */ diff --git a/src/net/torvald/serialise/ReadGameMapData.kt b/src/net/torvald/terrarum/serialise/ReadGameMapData.kt similarity index 75% rename from src/net/torvald/serialise/ReadGameMapData.kt rename to src/net/torvald/terrarum/serialise/ReadGameMapData.kt index 03ccc6bed..6611df129 100644 --- a/src/net/torvald/serialise/ReadGameMapData.kt +++ b/src/net/torvald/terrarum/serialise/ReadGameMapData.kt @@ -1,4 +1,4 @@ -package net.torvald.serialise +package net.torvald.terrarum.serialise import java.io.IOException import java.io.InputStream @@ -6,9 +6,10 @@ import java.io.InputStream /** * Created by minjaesong on 16-08-24. */ -object ReadGameMapData { +// internal for everything: prevent malicious module from messing up the savedata +internal object ReadGameMapData { - fun InputStream.readRelative(b: ByteArray, off: Int, len: Int): Int { + internal fun InputStream.readRelative(b: ByteArray, off: Int, len: Int): Int { if (b == null) { throw NullPointerException() } else if (off < 0 || len < 0 || len > b.size) { diff --git a/src/net/torvald/serialise/WriteCSV.kt b/src/net/torvald/terrarum/serialise/WriteCSV.kt similarity index 91% rename from src/net/torvald/serialise/WriteCSV.kt rename to src/net/torvald/terrarum/serialise/WriteCSV.kt index dc4f3d677..6d25d04b7 100644 --- a/src/net/torvald/serialise/WriteCSV.kt +++ b/src/net/torvald/terrarum/serialise/WriteCSV.kt @@ -1,4 +1,4 @@ -package net.torvald.serialise +package net.torvald.terrarum.serialise import net.torvald.terrarum.Terrarum import java.io.IOException @@ -9,12 +9,13 @@ import java.nio.file.StandardCopyOption /** * Created by minjaesong on 16-03-18. */ -object WriteCSV { +// internal for everything: prevent malicious module from messing up the savedata +internal object WriteCSV { val META_FILENAME_TILE = "worldinfo2" val META_FILENAME_ITEM = "worldinfo3" val META_FILENAME_MAT = "worldinfo4" - fun write(saveDirectoryName: String): Boolean { + internal fun write(saveDirectoryName: String): Boolean { //val tileCSV = CSVFetcher.readCSVasString(BlockCodex.CSV_PATH) //val itemCSV = CSVFetcher.readCSVasString(ItemCodex.CSV_PATH) //val matCSV = CSVFetcher.readCSVasString(MaterialCodex.CSV_PATH) diff --git a/src/net/torvald/serialise/WriteGameMapData.kt b/src/net/torvald/terrarum/serialise/WriteGameMapData.kt similarity index 91% rename from src/net/torvald/serialise/WriteGameMapData.kt rename to src/net/torvald/terrarum/serialise/WriteGameMapData.kt index 8d8d32194..6409cfcfd 100644 --- a/src/net/torvald/serialise/WriteGameMapData.kt +++ b/src/net/torvald/terrarum/serialise/WriteGameMapData.kt @@ -1,18 +1,18 @@ -package net.torvald.serialise +package net.torvald.terrarum.serialise import net.torvald.terrarum.gameworld.GameWorld import net.torvald.terrarum.Terrarum import java.io.IOException import java.nio.charset.Charset import java.nio.file.Files -import java.nio.file.Path import java.nio.file.Paths import java.nio.file.StandardCopyOption /** * Created by minjaesong on 16-03-18. */ -object WriteGameMapData { +// internal for everything: prevent malicious module from messing up the savedata +internal object WriteGameMapData { val META_FILENAME = "worldinfo1" @@ -21,7 +21,7 @@ object WriteGameMapData { val BYTE_NULL: Byte = 0 - fun write(saveDirectoryName: String): Boolean { + internal fun write(saveDirectoryName: String): Boolean { val path = Paths.get("${Terrarum.defaultSaveDir}" + "/$saveDirectoryName/${WriteMeta.META_FILENAME}") val tempPath = Files.createTempFile(path.toString(), "_temp") diff --git a/src/net/torvald/serialise/WriteMeta.kt b/src/net/torvald/terrarum/serialise/WriteMeta.kt similarity index 90% rename from src/net/torvald/serialise/WriteMeta.kt rename to src/net/torvald/terrarum/serialise/WriteMeta.kt index 69d78a356..19e922fb8 100644 --- a/src/net/torvald/serialise/WriteMeta.kt +++ b/src/net/torvald/terrarum/serialise/WriteMeta.kt @@ -1,4 +1,4 @@ -package net.torvald.serialise +package net.torvald.terrarum.serialise import net.torvald.terrarum.worldgenerator.WorldGenerator import net.torvald.terrarum.worldgenerator.RoguelikeRandomiser @@ -7,7 +7,8 @@ import java.nio.charset.Charset /** * Created by minjaesong on 16-03-15. */ -object WriteMeta { +// internal for everything: prevent malicious module from messing up the savedata +internal object WriteMeta { val META_FILENAME = "world" @@ -24,7 +25,7 @@ object WriteMeta { * @param saveDirectoryName * @param savegameName -- Nullable. If the value is not specified, saveDirectoryName will be used instead. */ - fun write(saveDirectoryName: String, savegameName: String?): Boolean { + internal fun write(saveDirectoryName: String, savegameName: String?): Boolean { /*val hashArray: ArrayList = ArrayList() val savenameAsByteArray: ByteArray = (savegameName ?: saveDirectoryName).toByteArray(Charsets.UTF_8) diff --git a/src/net/torvald/terrarum/ui/UIInventory.kt b/src/net/torvald/terrarum/ui/UIInventory.kt index 172940310..9bda33b16 100644 --- a/src/net/torvald/terrarum/ui/UIInventory.kt +++ b/src/net/torvald/terrarum/ui/UIInventory.kt @@ -1,7 +1,6 @@ package net.torvald.terrarum.ui import net.torvald.terrarum.* -import net.torvald.terrarum.Terrarum.QUICKSLOT_MAX import net.torvald.terrarum.Terrarum.joypadLabelNinA import net.torvald.terrarum.Terrarum.joypadLabelNinY import net.torvald.terrarum.gameactors.* @@ -257,7 +256,7 @@ class UIInventory( items[k].itemImage = ItemCodex.getItemImage(sortListItem.item) // set quickslot number - for (qs in 1..QUICKSLOT_MAX) { + for (qs in 1..UIQuickBar.SLOT_COUNT) { if (sortListItem.item == actor?.inventory?.getQuickBar(qs - 1)?.item) { items[k].quickslot = qs % 10 // 10 -> 0, 1..9 -> 1..9 break diff --git a/src/net/torvald/terrarum/ui/UIQuickBar.kt b/src/net/torvald/terrarum/ui/UIQuickBar.kt index 213978d49..44b409f2b 100644 --- a/src/net/torvald/terrarum/ui/UIQuickBar.kt +++ b/src/net/torvald/terrarum/ui/UIQuickBar.kt @@ -3,6 +3,7 @@ package net.torvald.terrarum.ui import net.torvald.terrarum.Millisec import net.torvald.terrarum.Terrarum import net.torvald.terrarum.gameactors.AVKey +import net.torvald.terrarum.gameworld.fmod import net.torvald.terrarum.itemproperties.ItemCodex import org.newdawn.slick.Color import org.newdawn.slick.GameContainer @@ -28,7 +29,7 @@ class UIQuickBar : UICanvas, MouseControlled { private var selection: Int get() = Terrarum.ingame!!.player?.actorValue?.getAsInt(AVKey.__PLAYER_QUICKSLOTSEL) ?: 0 - set(value) { Terrarum.ingame!!.player?.actorValue?.set(AVKey.__PLAYER_QUICKSLOTSEL, value) } + set(value) { Terrarum.ingame!!.player?.actorValue?.set(AVKey.__PLAYER_QUICKSLOTSEL, value.fmod(SLOT_COUNT)) } override fun update(gc: GameContainer, delta: Int) { @@ -108,8 +109,7 @@ class UIQuickBar : UICanvas, MouseControlled { } override fun mouseWheelMoved(change: Int) { - selection = selection.plus(if (change > 1) 1 else if (change < -1) -1 else 0).rem(SLOT_COUNT) - if (selection < 0) selection += SLOT_COUNT + selection = selection.plus(if (change > 1) 1 else if (change < -1) -1 else 0).fmod(SLOT_COUNT) } companion object { diff --git a/src/net/torvald/terrarum/worlddrawer/BlocksDrawer.kt b/src/net/torvald/terrarum/worlddrawer/BlocksDrawer.kt index 2de4727a3..bbb3e6a01 100644 --- a/src/net/torvald/terrarum/worlddrawer/BlocksDrawer.kt +++ b/src/net/torvald/terrarum/worlddrawer/BlocksDrawer.kt @@ -26,14 +26,11 @@ object BlocksDrawer { private val TILE_SIZEF = FeaturesDrawer.TILE_SIZE.toFloat() // TODO modular - val tilesTerrain = SpriteSheet(ModMgr.getPath("basegame", "blocks/terrain.tga.gz"), TILE_SIZE, TILE_SIZE) - // Slick has some weird quirks with PNG's transparency. I'm using 32-bit targa here. - // -> PNG transparency issue seems to be fixed (look at my customised ImageDataFactory), but - // tga.gz is smaller than png, so I'd rather keep it - val tilesWire = SpriteSheet(ModMgr.getPath("basegame", "blocks/wire.tga.gz"), TILE_SIZE, TILE_SIZE) + val tilesTerrain = SpriteSheet(ModMgr.getPath("basegame", "blocks/terrain.tga.gz"), TILE_SIZE, TILE_SIZE) // 64 MB + val tilesWire = SpriteSheet(ModMgr.getPath("basegame", "blocks/wire.tga.gz"), TILE_SIZE, TILE_SIZE) // 4 MB - val tileItemWall = Image(TILE_SIZE * 16, TILE_SIZE * GameWorld.TILES_SUPPORTED / 16) + val tileItemWall = Image(TILE_SIZE * 16, TILE_SIZE * GameWorld.TILES_SUPPORTED / 16) // 4 MB val wallOverlayColour = Color(2f/3f, 2f/3f, 2f/3f, 1f) @@ -291,9 +288,8 @@ object BlocksDrawer { return TILES_BLEND_MUL.add(blockID) } - fun update() { - val player = Terrarum.ingame!!.player - } + + fun renderWall(g: Graphics) { /**