diff --git a/.idea/codeStyleSettings.xml b/.idea/codeStyleSettings.xml index ccc68eda1..ae39d99ac 100644 --- a/.idea/codeStyleSettings.xml +++ b/.idea/codeStyleSettings.xml @@ -7,6 +7,9 @@ + + diff --git a/README.md b/README.md index 1ed84f123..1f60ff60e 100644 --- a/README.md +++ b/README.md @@ -6,13 +6,12 @@ This project mainly uses Kotlin and Java, Python/Lua/etc. for tools. Documentations and resources for work (such as .psd) are also included in the repo. You will need Mac computer to read and edit documentations in .gcx and .numbers. -Any contribution in this project is sorely in English, so be sure to use English in codes, comments, etc. +Any contribution in this project must be made sorely in English, so be sure to use English in codes, comments, etc. ## Setup ## * Configuration -Just make sure you have Java version 8 or higher -* Dependencies -JRE 1.8 +Just make sure you have JDK 8 or higher +* Required libraries are included in the repository. ## Contribution guidelines ## diff --git a/Terrarum_renewed.iml b/Terrarum_renewed.iml index 07e3eebf9..0069b3d80 100644 --- a/Terrarum_renewed.iml +++ b/Terrarum_renewed.iml @@ -4,10 +4,11 @@ + - + \ No newline at end of file diff --git a/lib/kotlin-reflect.jar b/lib/kotlin-reflect.jar index 2e4228f33..888ad15d9 100755 Binary files a/lib/kotlin-reflect.jar and b/lib/kotlin-reflect.jar differ diff --git a/lib/kotlin-runtime-sources.jar b/lib/kotlin-runtime-sources.jar index f00a854e7..1dde29845 100755 Binary files a/lib/kotlin-runtime-sources.jar and b/lib/kotlin-runtime-sources.jar differ diff --git a/lib/kotlin-runtime.jar b/lib/kotlin-runtime.jar index 5c27d0b90..e55a92b6c 100755 Binary files a/lib/kotlin-runtime.jar and b/lib/kotlin-runtime.jar differ diff --git a/res/graphics/backgroundGradientColour.png b/res/graphics/backgroundGradientColour.png deleted file mode 100755 index 9b1677fba..000000000 Binary files a/res/graphics/backgroundGradientColour.png and /dev/null differ diff --git a/res/graphics/sky_colour.png b/res/graphics/sky_colour.png new file mode 100644 index 000000000..906d5de7b Binary files /dev/null and b/res/graphics/sky_colour.png differ diff --git a/res/graphics/sprites/test_player.png b/res/graphics/sprites/test_player.png index 7f9149df1..e77017d25 100644 Binary files a/res/graphics/sprites/test_player.png and b/res/graphics/sprites/test_player.png differ diff --git a/res/graphics/terrain/wire.png b/res/graphics/terrain/wire.png index bbaba80b9..1194e27de 100755 Binary files a/res/graphics/terrain/wire.png and b/res/graphics/terrain/wire.png differ diff --git a/src/com/Torvald/Serialise/WriteMeta.kt b/src/com/Torvald/Serialise/WriteMeta.kt new file mode 100644 index 000000000..c44c3f045 --- /dev/null +++ b/src/com/Torvald/Serialise/WriteMeta.kt @@ -0,0 +1,43 @@ +package com.Torvald.Serialise + +import com.Torvald.Terrarum.MapGenerator.MapGenerator +import com.Torvald.Terrarum.MapGenerator.RoguelikeRandomiser +import com.Torvald.Terrarum.TileProperties.TilePropCodex +import org.apache.commons.codec.digest.DigestUtils +import java.io.FileInputStream +import java.io.File +import java.util.* + +/** + * Created by minjaesong on 16-03-15. + */ +object WriteMeta { + + val MAGIC: Array = arrayOf( + 'T'.toByte() + , 'E'.toByte() + , 'S'.toByte() + , 'V'.toByte() + ) + + val terraseed: Long = MapGenerator.getGeneratorSeed() + val rogueseed: Long = RoguelikeRandomiser.getGeneratorSeed() + + fun write() { + var hashArray: ArrayList = ArrayList() + + val fileArray: Array = arrayOf( + File(TilePropCodex.CSV_PATH) + //, File(ItemPropCodex.CSV_PATH) + //, File(MaterialPropCodex.CSV_PATH) + //, + ) + + for (file in fileArray) { + val inputStream = FileInputStream(file) + val hash = DigestUtils.sha256(inputStream) + + hashArray.add(hash) + } + } +} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/Actors/Actor.kt b/src/com/Torvald/Terrarum/Actors/Actor.kt index 5e2b2325c..af99e0f4e 100644 --- a/src/com/Torvald/Terrarum/Actors/Actor.kt +++ b/src/com/Torvald/Terrarum/Actors/Actor.kt @@ -13,5 +13,5 @@ interface Actor { * Valid RefID is equal to or greater than 32768. * @return Reference ID. (32768-0x7FFF_FFFF_FFFF_FFFF) */ - var referenceID: Long? + var referenceID: Long } \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/Actors/ActorInventory.kt b/src/com/Torvald/Terrarum/Actors/ActorInventory.kt index 7d84ea7a6..889b364e1 100644 --- a/src/com/Torvald/Terrarum/Actors/ActorInventory.kt +++ b/src/com/Torvald/Terrarum/Actors/ActorInventory.kt @@ -1,20 +1,21 @@ package com.Torvald.Terrarum.Actors import com.Torvald.Terrarum.GameItem.InventoryItem -import com.Torvald.Terrarum.GameItem.ItemCodex +import com.Torvald.Terrarum.GameItem.ItemPropCodex import java.util.* /** * Created by minjaesong on 16-03-15. */ -@Transient const val CAPACITY_MAX = 0x7FFFFFFF -@Transient const val CAPACITY_MODE_NO_ENCUMBER = 0 -@Transient const val CAPACITY_MODE_COUNT = 1 -@Transient const val CAPACITY_MODE_WEIGHT = 2 - class ActorInventory { + @Transient val CAPACITY_MAX = 0x7FFFFFFF + @Transient val CAPACITY_MODE_NO_ENCUMBER = 0 + @Transient val CAPACITY_MODE_COUNT = 1 + @Transient val CAPACITY_MODE_WEIGHT = 2 + + private var capacityByCount: Int = 0 private var capacityByWeight: Int = 0 private var capacityMode: Int = 0 @@ -80,7 +81,7 @@ class ActorInventory { var weight = 0f for (item in itemList.entries) { - weight += ItemCodex.getItem(item.key).weight * item.value + weight += ItemPropCodex.getItem(item.key).weight * item.value } return weight diff --git a/src/com/Torvald/Terrarum/Actors/ActorWithBody.kt b/src/com/Torvald/Terrarum/Actors/ActorWithBody.kt index 04dcf149b..c80d20a51 100644 --- a/src/com/Torvald/Terrarum/Actors/ActorWithBody.kt +++ b/src/com/Torvald/Terrarum/Actors/ActorWithBody.kt @@ -50,7 +50,7 @@ open class ActorWithBody constructor() : Actor, Visible, Glowing { internal var baseSpriteWidth: Int = 0 internal var baseSpriteHeight: Int = 0 - override var referenceID: Long? = null + override var referenceID: Long = HQRNG().nextLong() /** * Positions: top-left point */ @@ -133,7 +133,7 @@ open class ActorWithBody constructor() : Actor, Visible, Glowing { @Transient private val map: GameMap init { - referenceID = HQRNG().nextLong() + // referenceID = HQRNG().nextLong() // renew ID just in case actorValue = ActorValue() map = Terrarum.game.map } diff --git a/src/com/Torvald/Terrarum/Actors/CanBeStoredAsItem.kt b/src/com/Torvald/Terrarum/Actors/CanBeStoredAsItem.kt index e6897cfbe..2a50926bf 100644 --- a/src/com/Torvald/Terrarum/Actors/CanBeStoredAsItem.kt +++ b/src/com/Torvald/Terrarum/Actors/CanBeStoredAsItem.kt @@ -15,6 +15,6 @@ interface CanBeStoredAsItem { fun resumeUpdateAndDraw() - var itemData: InventoryItem? + var itemData: InventoryItem } \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/Actors/CreatureFactory.kt b/src/com/Torvald/Terrarum/Actors/CreatureFactory.kt index 85aa55abb..8b56b40e7 100644 --- a/src/com/Torvald/Terrarum/Actors/CreatureFactory.kt +++ b/src/com/Torvald/Terrarum/Actors/CreatureFactory.kt @@ -12,10 +12,10 @@ import java.io.IOException * Created by minjaesong on 16-03-14. */ -private const val JSONPATH = "./res/raw/" - object CreatureFactory { + private val JSONPATH = "./res/raw/" + @JvmStatic @Throws(IOException::class, SlickException::class) fun build(jsonFileName: String): ActorWithBody { diff --git a/src/com/Torvald/Terrarum/Actors/NPCIntelligentBase.kt b/src/com/Torvald/Terrarum/Actors/NPCIntelligentBase.kt index 786484590..b9eda19a9 100644 --- a/src/com/Torvald/Terrarum/Actors/NPCIntelligentBase.kt +++ b/src/com/Torvald/Terrarum/Actors/NPCIntelligentBase.kt @@ -14,14 +14,38 @@ import java.util.* open class NPCIntelligentBase : ActorWithBody() , AIControlled, Pocketed, CanBeStoredAsItem, Factionable, LandHolder { - override var itemData: InventoryItem? = null + override var itemData: InventoryItem = object : InventoryItem { + override var itemID = HQRNG().nextLong() + + override var weight = 0f + + override fun effectWhileInPocket(gc: GameContainer, delta_t: Int) { + + } + + override fun effectWhenPickedUp(gc: GameContainer, delta_t: Int) { + + } + + override fun primaryUse(gc: GameContainer, delta_t: Int) { + + } + + override fun secondaryUse(gc: GameContainer, delta_t: Int) { + + } + + override fun effectWhenThrownAway(gc: GameContainer, delta_t: Int) { + + } + } @Transient private var ai: ActorAI? = null override var inventory: ActorInventory? = null private val factionSet = HashSet() - override var referenceID: Long? = null + override var referenceID: Long = HQRNG().nextLong() override var faction: HashSet? = null @@ -41,33 +65,7 @@ open class NPCIntelligentBase : ActorWithBody() } override fun attachItemData() { - val random: Random = HQRNG() - itemData = object : InventoryItem { - override var itemID = random.nextLong() - - override var weight = 0f - - override fun effectWhileInPocket(gc: GameContainer, delta_t: Int) { - - } - - override fun effectWhenPickedUp(gc: GameContainer, delta_t: Int) { - - } - - override fun primaryUse(gc: GameContainer, delta_t: Int) { - - } - - override fun secondaryUse(gc: GameContainer, delta_t: Int) { - - } - - override fun effectWhenThrownAway(gc: GameContainer, delta_t: Int) { - - } - } } override fun getItemWeight(): Float { diff --git a/src/com/Torvald/Terrarum/Actors/Player.kt b/src/com/Torvald/Terrarum/Actors/Player.kt index 167e6a097..9f8e9f9b2 100644 --- a/src/com/Torvald/Terrarum/Actors/Player.kt +++ b/src/com/Torvald/Terrarum/Actors/Player.kt @@ -18,20 +18,21 @@ import java.util.* * Created by minjaesong on 16-03-14. */ -/** - * empirical value. - */ -// private transient final float JUMP_ACCELERATION_MOD = ???f / 10000f; //quadratic mode -@Transient private const val JUMP_ACCELERATION_MOD = 170f / 10000f //linear mode -@Transient private const val WALK_FRAMES_TO_MAX_ACCEL = 6 - -@Transient private const val LEFT = 1 -@Transient private const val RIGHT = 2 - -@Transient private const val KEY_NULL = -1 - class Player : ActorWithBody, Controllable, Pocketed, Factionable, Luminous, LandHolder { + /** + * empirical value. + */ + // private transient final float JUMP_ACCELERATION_MOD = ???f / 10000f; //quadratic mode + @Transient private val JUMP_ACCELERATION_MOD = 170f / 10000f //linear mode + @Transient private val WALK_FRAMES_TO_MAX_ACCEL = 6 + + @Transient private val LEFT = 1 + @Transient private val RIGHT = 2 + + @Transient private val KEY_NULL = -1 + + var vehicleRiding: Controllable? = null internal var jumpCounter = 0 diff --git a/src/com/Torvald/Terrarum/Game.java b/src/com/Torvald/Terrarum/Game.java index 8873e08be..1552f29f0 100644 --- a/src/com/Torvald/Terrarum/Game.java +++ b/src/com/Torvald/Terrarum/Game.java @@ -1,5 +1,6 @@ package com.Torvald.Terrarum; +import com.Torvald.Rand.HQRNG; import com.Torvald.Terrarum.Actors.*; import com.Torvald.Terrarum.ConsoleCommand.Authenticator; import com.Torvald.Terrarum.ConsoleCommand.CommandDict; @@ -11,9 +12,11 @@ import com.Torvald.Terrarum.MapDrawer.LightmapRenderer; import com.Torvald.Terrarum.MapDrawer.MapCamera; import com.Torvald.Terrarum.MapDrawer.MapDrawer; import com.Torvald.Terrarum.MapGenerator.MapGenerator; +import com.Torvald.Terrarum.MapGenerator.RoguelikeRandomiser; import com.Torvald.Terrarum.TileProperties.TilePropCodex; import com.Torvald.Terrarum.TileStat.TileStat; import com.Torvald.Terrarum.UserInterface.*; +import com.jme3.math.FastMath; import org.lwjgl.opengl.ARBShaderObjects; import org.lwjgl.opengl.GL11; import org.newdawn.slick.*; @@ -70,6 +73,10 @@ public class Game extends BasicGameState { private int shaderProgram = 0; + private final int ENV_COLTEMP_SUNRISE = 2500; + private final int ENV_SUNLIGHT_DELTA = MapDrawer.getENV_COLTEMP_NOON() - ENV_COLTEMP_SUNRISE; + + @Override public void init(GameContainer gameContainer, StateBasedGame stateBasedGame) throws SlickException { @@ -83,11 +90,12 @@ public class Game extends BasicGameState { shaderBlurV = Shader.makeShader("./res/blurV.vrt", "./res/blur.frg"); - GRADIENT_IMAGE = new Image("res/graphics/backgroundGradientColour.png"); + GRADIENT_IMAGE = new Image("res/graphics/sky_colour.png"); skyBox = new Rectangle(0, 0, Terrarum.WIDTH, Terrarum.HEIGHT); new WorldTime(); new TilePropCodex(); + // new ItemPropCodex() -- This is kotlin object and already initialised. map = new GameMap(8192, 2048); map.setGravitation(9.8f); @@ -97,6 +105,10 @@ public class Game extends BasicGameState { //MapGenerator.setSeed(new HQRNG().nextLong()); MapGenerator.generateMap(); + RoguelikeRandomiser.setSeed(0x540198); + //RoguelikeRandomiser.setSeed(new HQRNG().nextLong()); + + new CommandDict(); // add new player and put it to actorContainer @@ -128,6 +140,9 @@ public class Game extends BasicGameState { public void update(GameContainer gc, StateBasedGame sbg, int delta_t) { setAppTitle(); + // GL at after_sunrise-noon_before_sunset + //map.setGlobalLight(); + GameController.processInput(gc.getInput()); TileStat.update(); @@ -376,4 +391,13 @@ public class Game extends BasicGameState { public long getTotalVMMem() { return totalVMMem; } + + private int getSunlightColtemp() { + int half_today = WorldTime.DAY_LENGTH / 2; + int timeToday = WorldTime.elapsedSeconds(); + float sunAlt = (timeToday < half_today) ? + timeToday / half_today * FastMath.PI + : 0f; + return Math.round(ENV_COLTEMP_SUNRISE + (ENV_SUNLIGHT_DELTA * FastMath.sin(sunAlt))); + } } diff --git a/src/com/Torvald/Terrarum/GameItem/ItemCodex.kt b/src/com/Torvald/Terrarum/GameItem/ItemCodex.kt deleted file mode 100644 index 726e6800c..000000000 --- a/src/com/Torvald/Terrarum/GameItem/ItemCodex.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.Torvald.Terrarum.GameItem - -import java.util.* - -/** - * Created by minjaesong on 16-03-15. - */ -object ItemCodex { - /** - * <ItemID or RefID for Actor, TheItem> - * Will return corresponding Actor if ID >= 32768 - */ - private val itemCodex: HashMap = HashMap( - // hashmap init here - ) - - - fun getItem(code: Long): InventoryItem { - return itemCodex[code]!! - } -} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/GameItem/ItemPropCodex.kt b/src/com/Torvald/Terrarum/GameItem/ItemPropCodex.kt new file mode 100644 index 000000000..eeb38bd34 --- /dev/null +++ b/src/com/Torvald/Terrarum/GameItem/ItemPropCodex.kt @@ -0,0 +1,43 @@ +package com.Torvald.Terrarum.GameItem + +import com.Torvald.Terrarum.Actors.CanBeStoredAsItem +import com.Torvald.Terrarum.Terrarum +import org.newdawn.slick.GameContainer +import java.util.* + +/** + * Created by minjaesong on 16-03-15. + */ +object ItemPropCodex { + + val CSV_PATH = "./src/com/Torvald/Terrarum/ItemProperties/itemprop.csv" + + /** + * <ItemID or RefID for Actor, TheItem> + * Will return corresponding Actor if ID >= 32768 + */ + private lateinit var itemCodex: Array + + @JvmStatic val ITEM_UNIQUE_MAX = 32768 + + @JvmStatic + fun buildItemProp() { + itemCodex = arrayOf() + + // read prop in csv + + } + + fun getItem(code: Long): InventoryItem { + if (code < ITEM_UNIQUE_MAX) + return itemCodex[code as Int]!! + else { + for (actor in Terrarum.game.actorContainer) { + if (actor is CanBeStoredAsItem && actor.referenceID!!.equals(code)) + return actor.itemData + } + + throw NullPointerException() + } + } +} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/GameItem/TileAsItem.kt b/src/com/Torvald/Terrarum/GameItem/TileAsItem.kt new file mode 100644 index 000000000..dd79b2229 --- /dev/null +++ b/src/com/Torvald/Terrarum/GameItem/TileAsItem.kt @@ -0,0 +1,38 @@ +package com.Torvald.Terrarum.GameItem + +import com.Torvald.Terrarum.TileProperties.TilePropCodex +import org.newdawn.slick.GameContainer + +/** + * Created by minjaesong on 16-03-15. + */ +class TileAsItem(tileNum: Int) : InventoryItem { + + override var itemID: Long = -1 + override var weight: Float = 0f + + init { + itemID = tileNum as Long + weight = TilePropCodex.getProp(tileNum).density / 1000f + } + + override fun effectWhileInPocket(gc: GameContainer, delta_t: Int) { + throw UnsupportedOperationException() + } + + override fun effectWhenPickedUp(gc: GameContainer, delta_t: Int) { + throw UnsupportedOperationException() + } + + override fun primaryUse(gc: GameContainer, delta_t: Int) { + throw UnsupportedOperationException() + } + + override fun secondaryUse(gc: GameContainer, delta_t: Int) { + throw UnsupportedOperationException() + } + + override fun effectWhenThrownAway(gc: GameContainer, delta_t: Int) { + throw UnsupportedOperationException() + } +} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/GameMap/WorldTime.java b/src/com/Torvald/Terrarum/GameMap/WorldTime.java index 0962fd507..444d87266 100644 --- a/src/com/Torvald/Terrarum/GameMap/WorldTime.java +++ b/src/com/Torvald/Terrarum/GameMap/WorldTime.java @@ -7,25 +7,28 @@ import java.io.Serializable; */ public class WorldTime { - private int seconds = 0; - private int minutes = 0; - private int hours = 0; + private static int seconds = 0; + private static int minutes = 0; + private static int hours = 0; - private int daysCount = 0; //NOT a calendar day + private static int daysCount = 0; //NOT a calendar day - private int days = 1; - private int months = 1; - private int years = 1; + private static int days = 1; + private static int months = 1; + private static int years = 1; - private int dayOfWeek = 0; //0: Mondag-The first day of weekday + private static int dayOfWeek = 0; //0: Mondag-The first day of weekday + /** + * 22h + */ public static transient final int DAY_LENGTH = 79200; //must be the multiple of 3600 - private int timeDelta = 1; + private static int timeDelta = 1; private static transient final int HOUR_SEC = 3600; private static transient final int MINUTE_SEC = 60; - public final String[] DAYNAMES = { //daynames are taken from Nynorsk (å -> o) + public static final String[] DAYNAMES = { //daynames are taken from Nynorsk (å -> o) "Mondag" ,"Tysdag" ,"Midtedag" //From Islenska Miðvikudagur @@ -35,7 +38,7 @@ public class WorldTime { ,"Sundag" ,"Verdag" //From Norsk word 'verd' }; - public final String[] DAYNAMES_SHORT = { + public static final String[] DAYNAMES_SHORT = { "Mon" ,"Tys" ,"Mid" @@ -52,7 +55,7 @@ public class WorldTime { /** * Note: Target FPS must be 60. */ - public void update(){ + public static void update(){ //time seconds += timeDelta; @@ -87,10 +90,11 @@ public class WorldTime { } /** - * How much time has passed today, in seconds. + * How much time has passed today, in seconds.
+ * 0 == 6 AM * @return */ - public int elapsedSeconds(){ + public static int elapsedSeconds(){ return (HOUR_SEC * hours + MINUTE_SEC * minutes + seconds) % DAY_LENGTH; } @@ -98,34 +102,34 @@ public class WorldTime { * How much time has passed since the beginning, in seconds. * @return */ - public long totalSeconds(){ + public static long totalSeconds(){ return (long)(DAY_LENGTH) * daysCount + HOUR_SEC * hours + MINUTE_SEC * minutes + seconds; } - public boolean isLeapYear(){ + public static boolean isLeapYear(){ return ((years % 4 == 0) && (years % 100 != 0)) || (years % 400 == 0); } - public void setTime(int t){ + public static void setTime(int t){ days += t / DAY_LENGTH; hours = t / HOUR_SEC; minutes = (t - HOUR_SEC * hours) / MINUTE_SEC; seconds = t - minutes * MINUTE_SEC; } - public void addTime(int t){ + public static void addTime(int t){ setTime(elapsedSeconds() + t); } - public void setTimeDelta(int d){ + public static void setTimeDelta(int d){ timeDelta = (d == 0) ? 1 : d; } - public String getDayName(){ + public static String getDayName(){ return DAYNAMES[dayOfWeek]; } - private void kickVariables() { + private static void kickVariables() { if (seconds >= 60){ seconds = 0; minutes++; diff --git a/src/com/Torvald/Terrarum/MapDrawer/LightmapLantern.kt b/src/com/Torvald/Terrarum/MapDrawer/LightmapLantern.kt new file mode 100644 index 000000000..e6a9a7ab5 --- /dev/null +++ b/src/com/Torvald/Terrarum/MapDrawer/LightmapLantern.kt @@ -0,0 +1,6 @@ +package com.Torvald.Terrarum.MapDrawer + +/** + * Created by minjaesong on 16-03-15. + */ +internal data class LightmapLantern(var x: Int, var y: Int, var intensity: Char) \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/MapDrawer/LightmapRenderer.kt b/src/com/Torvald/Terrarum/MapDrawer/LightmapRenderer.kt index f8c1fd276..d59b79968 100644 --- a/src/com/Torvald/Terrarum/MapDrawer/LightmapRenderer.kt +++ b/src/com/Torvald/Terrarum/MapDrawer/LightmapRenderer.kt @@ -3,6 +3,7 @@ package com.Torvald.Terrarum.MapDrawer import com.Torvald.ColourUtil.Col40 import com.Torvald.Terrarum.Actors.ActorWithBody import com.Torvald.Terrarum.Actors.Luminous +import com.Torvald.Terrarum.GameMap.WorldTime import com.Torvald.Terrarum.Terrarum import com.Torvald.Terrarum.TileProperties.TilePropCodex import com.jme3.math.FastMath @@ -714,5 +715,3 @@ object LightmapRenderer { return Col40().createSlickColor(raw.toInt()) } } - -internal data class LightmapLantern(var x: Int, var y: Int, var intensity: Char) diff --git a/src/com/Torvald/Terrarum/MapDrawer/MapDrawer.kt b/src/com/Torvald/Terrarum/MapDrawer/MapDrawer.kt index de9598ffc..9dc3592f1 100644 --- a/src/com/Torvald/Terrarum/MapDrawer/MapDrawer.kt +++ b/src/com/Torvald/Terrarum/MapDrawer/MapDrawer.kt @@ -18,8 +18,7 @@ object MapDrawer { @JvmStatic private val ENV_COLTEMP_LOWEST = 5500 @JvmStatic private val ENV_COLTEMP_HIGHEST = 7500 - @JvmStatic private val ENV_COLTEMP_GOLDEN_HOUR = 5000 - @JvmStatic private val ENV_COLTEMP_NOON = 6500 + @JvmStatic val ENV_COLTEMP_NOON = 6500 private var colTemp: Int = 0 @@ -54,9 +53,8 @@ object MapDrawer { val zoom = Terrarum.game.screenZoom g.color = getColourFromMap(colTemp) + //g.color = getColourFromMap(3022) g.fillRect(MapCamera.getCameraX() * zoom, MapCamera.getCameraY() * zoom, Terrarum.WIDTH * if (zoom < 1) 1f / zoom else zoom, Terrarum.HEIGHT * if (zoom < 1) 1f / zoom else zoom) - - // TODO colour overlay by sun position (5000-morning -> 6500-noon -> 5000-twilight) } /** @@ -71,7 +69,8 @@ object MapDrawer { return Math.round((ENV_COLTEMP_HIGHEST - ENV_COLTEMP_LOWEST) / 2 * FastMath.clamp(x, -1f, 1f) + colTempMedian) } - private fun getColourFromMap(K: Int): Color { + @JvmStatic + fun getColourFromMap(K: Int): Color { return envOverlayColourmap.getColor(colTempToImagePos(K), 0) } diff --git a/src/com/Torvald/Terrarum/MapGenerator/MapGenerator.kt b/src/com/Torvald/Terrarum/MapGenerator/MapGenerator.kt index 85974d3e3..913068c29 100644 --- a/src/com/Torvald/Terrarum/MapGenerator/MapGenerator.kt +++ b/src/com/Torvald/Terrarum/MapGenerator/MapGenerator.kt @@ -15,7 +15,7 @@ object MapGenerator { private lateinit var map: GameMap private lateinit var random: Random //private static float[] noiseArray; - private var seed: Long = 0 + private var seed: Long? = null private var width: Int = 0 private var height: Int = 0 @@ -90,7 +90,7 @@ object MapGenerator { */ @JvmStatic fun generateMap() { - random = HQRNG(seed) + random = HQRNG(seed!!) println("[MapGenerator] Seed: " + seed) worldOceanPosition = if (random.nextBoolean()) TYPE_OCEAN_LEFT else TYPE_OCEAN_RIGHT @@ -216,8 +216,8 @@ object MapGenerator { private fun caveGen(xStretch: Float, yStretch: Float): Array { val noiseMap = Array(height) { FloatArray(width) } - val simplexNoise = SimplexNoise(CAVEGEN_LARGEST_FEATURE, CAVEGEN_PERTURB_RATE, seed) - val simplexNoisePerturbMap = SimplexNoise(CAVEGEN_LARGEST_FEATURE_PERTURB, 0.5f, seed xor random.nextLong()) + val simplexNoise = SimplexNoise(CAVEGEN_LARGEST_FEATURE, CAVEGEN_PERTURB_RATE, seed!!) + val simplexNoisePerturbMap = SimplexNoise(CAVEGEN_LARGEST_FEATURE_PERTURB, 0.5f, seed!! xor random.nextLong()) val xEnd = width * yStretch val yEnd = height * xStretch @@ -283,7 +283,7 @@ object MapGenerator { * @return matrix in ![x][y]! */ private fun generate2DSimplexNoise(sizeX: Int, sizeY: Int, xStretch: Float, yStretch: Float): Array { - val simplexNoise = SimplexNoise(CAVE_LARGEST_FEATURE, 0.1f, seed xor random.nextLong()) + val simplexNoise = SimplexNoise(CAVE_LARGEST_FEATURE, 0.1f, seed!! xor random.nextLong()) val xStart = 0f val yStart = 0f @@ -524,7 +524,7 @@ object MapGenerator { } private fun perturbTerrain() { - val perturbGen = SimplexNoise(TERRAIN_PERTURB_LARGESTFEATURE, TERRAIN_PERTURB_RATE, seed xor random.nextLong()) + val perturbGen = SimplexNoise(TERRAIN_PERTURB_LARGESTFEATURE, TERRAIN_PERTURB_RATE, seed!! xor random.nextLong()) val perturbMap = Array(height) { FloatArray(width) } @@ -960,7 +960,7 @@ object MapGenerator { private fun fillOcean() { val thisSandList = intArrayOf(TileNameCode.SAND_BEACH, TileNameCode.SAND_BLACK, TileNameCode.SAND_GREEN, TileNameCode.SAND_BEACH, TileNameCode.SAND_BEACH, TileNameCode.SAND_BLACK) - val thisRand = HQRNG(seed xor random.nextLong()) + val thisRand = HQRNG(seed!! xor random.nextLong()) val thisSand = thisSandList[thisRand.nextInt(thisSandList.size)] val thisSandStr = if (thisSand == TileNameCode.SAND_BLACK) @@ -1063,6 +1063,11 @@ object MapGenerator { return TERRAIN_AVERAGE_HEIGHT - heightMap!![x] } + @JvmStatic + fun getGeneratorSeed(): Long { + return seed!! + } + /* Utility */ private fun clampN(clampNumber: Int, num: Int): Int { diff --git a/src/com/Torvald/Terrarum/MapGenerator/RoguelikeRandomiser.kt b/src/com/Torvald/Terrarum/MapGenerator/RoguelikeRandomiser.kt new file mode 100644 index 000000000..95d441fe5 --- /dev/null +++ b/src/com/Torvald/Terrarum/MapGenerator/RoguelikeRandomiser.kt @@ -0,0 +1,44 @@ +package com.Torvald.Terrarum.MapGenerator + +import com.Torvald.ColourUtil.Col4096 +import com.Torvald.Rand.HQRNG +import java.util.* + +/** + * Created by minjaesong on 16-03-15. + */ +object RoguelikeRandomiser { + + private val POTION_PRIMARY_COLSET = intArrayOf(15, 15, 7, 7, 0, 0) + + private var potionColours: HashMap = HashMap() + private var coloursDiscovered: HashMap = HashMap() + + val coloursTaken: ArrayList = ArrayList() + + private var seed: Long? = null + private val random: Random = HQRNG() + + private val POTION_HEAL_TIER1 = 0x00 + private val POTION_HEAL_TIRE2 = 0x01 + + private val POTION_MAGIC_REGEN_TIER1 = 0x10 + + private val POTION_BERSERK_TIER1 = 0x20 + + + @JvmStatic + fun setSeed(seed: Long) { + this.seed = seed + } + + @JvmStatic + fun setupColours() { + + } + + + fun getGeneratorSeed(): Long { + return seed!! + } +} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/RoguelikeRandomiser.java b/src/com/Torvald/Terrarum/RoguelikeRandomiser.java deleted file mode 100644 index 0f29e95d2..000000000 --- a/src/com/Torvald/Terrarum/RoguelikeRandomiser.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.Torvald.Terrarum; - -import com.Torvald.ColourUtil.Col4096; - -import java.util.ArrayList; -import java.util.HashMap; - -/** - * Created by minjaesong on 16-02-23. - */ -public class RoguelikeRandomiser { - - private static transient final int[] POTION_PRIMARY_COLSET = {15, 15, 8, 8, 0, 0}; - - private static HashMap potionColours; - private static HashMap coloursDiscovered; - - private static ArrayList coloursTaken; - - - private static transient final int POTION_HEAL_TIER1 = 0x00; - private static transient final int POTION_HEAL_TIRE2 = 0x01; - - private static transient final int POTION_MAGIC_REGEN_TIER1 = 0x10; - - private static transient final int POTION_BERSERK_TIER1 = 0x20; - - public RoguelikeRandomiser() { - potionColours = new HashMap<>(); - coloursTaken = new ArrayList<>(); - } - - - -} diff --git a/src/com/Torvald/Terrarum/SAVE_FORMAT b/src/com/Torvald/Terrarum/SAVE_FORMAT index ba15602a5..5c51e7748 100644 --- a/src/com/Torvald/Terrarum/SAVE_FORMAT +++ b/src/com/Torvald/Terrarum/SAVE_FORMAT @@ -6,12 +6,13 @@ Byte[4] TESV Magic Byte[n] name Savegame name, UTF-8 - Byte null String terminator + Byte NULL String terminator Byte[8] terraseed Terrain seed Byte[8] rogueseed Randomiser seed Byte[32] hash1 SHA-256 hash of worldinfo1 being stored Byte[32] hash2 SHA-256 hash of worldinfo2 being stored - Byte[32] hash4 SHA-256 hash of worldinfo3 beihg stored (TEMD data) [32, 214, 42, 3, 76, ...] + Byte[32] hash3 SHA-256 hash of worldinfo3 being stored + Byte[32] hash4 SHA-256 hash of worldinfo4 being stored (TEMD data) [32, 214, 42, 3, 76, ...] * Actor data @@ -22,7 +23,9 @@ * Prop data - GZip'd CSV - Filename : worldinfo1 -- tileprop.csv - worldinfo2 -- itemprop.csv (with no extension) + worldinfo2 -- itemprop.csv + worldinfo3 -- materialprop.csv + (with no extension) * Roguelike randomiser data @@ -33,6 +36,7 @@ * Human-readable - Tiles_list.txt -- list of tiles in csv - Items_list.txt -- list of items in csv + - Materials_list.txt -- list of materials in csv @@ -50,4 +54,5 @@ --- world save meta --- worldinfo1 tileprop --- worldinfo2 itemprop - --- worldinfo3 TEMD binary + --- worldinfo3 materialprop + --- worldinfo4 TEMD binary diff --git a/src/com/Torvald/Terrarum/TileProperties/TilePropCodex.java b/src/com/Torvald/Terrarum/TileProperties/TilePropCodex.java index be6ac974c..86647c591 100644 --- a/src/com/Torvald/Terrarum/TileProperties/TilePropCodex.java +++ b/src/com/Torvald/Terrarum/TileProperties/TilePropCodex.java @@ -15,6 +15,8 @@ public class TilePropCodex { private static TileProp[] tileProps; + public static final String CSV_PATH = "./src/com/Torvald/Terrarum/TileProperties/tileprop.csv"; + public TilePropCodex() { tileProps = new TileProp[MapLayer.RANGE * (PairedMapLayer.RANGE)]; @@ -24,8 +26,7 @@ public class TilePropCodex { try { // todo verify CSV using pre-calculated SHA256 hash - List records = CSVFetcher.readCSV("" + - "./src/com/Torvald/Terrarum/TileProperties/tileprop.csv"); + List records = CSVFetcher.readCSV(CSV_PATH); System.out.println("[TilePropCodex] Building tile properties table"); diff --git a/src/com/Torvald/Terrarum/UserInterface/UICanvas b/src/com/Torvald/Terrarum/UserInterface/UICanvas deleted file mode 100644 index 8e296a46e..000000000 --- a/src/com/Torvald/Terrarum/UserInterface/UICanvas +++ /dev/null @@ -1,24 +0,0 @@ -package com.Torvald.Terrarum.UserInterface; - -import org.newdawn.slick.GameContainer; -import org.newdawn.slick.Graphics; -import org.newdawn.slick.Input; - -import java.util.LinkedList; - -/** - * Created by minjaesong on 15-12-31.
- */ -public interface UICanvas { - - int getWidth(); - - int getHeight(); - - void update(GameContainer gc, int delta_t); - - void render(GameContainer gc, Graphics g); - - void processInput(Input input); - -} diff --git a/src/com/Torvald/Terrarum/UserInterface/UIClickable b/src/com/Torvald/Terrarum/UserInterface/UIClickable deleted file mode 100644 index b4ef9a84e..000000000 --- a/src/com/Torvald/Terrarum/UserInterface/UIClickable +++ /dev/null @@ -1,22 +0,0 @@ -package com.Torvald.Terrarum.UserInterface; - -/** - * Created by minjaesong on 16-03-06. - */ -public interface UIClickable { - - void mouseMoved(int oldx, int oldy, int newx, int newy); - - void mouseDragged(int oldx, int oldy, int newx, int newy); - - void mousePressed(int button, int x, int y); - - void mouseReleased(int button, int x, int y); - - void mouseWheelMoved(int change); - - void controllerButtonPressed(int controller, int button); - - void controllerButtonReleased(int controller, int button); - -} diff --git a/src/com/Torvald/Terrarum/UserInterface/UITypable b/src/com/Torvald/Terrarum/UserInterface/UITypable deleted file mode 100644 index 9766ea95a..000000000 --- a/src/com/Torvald/Terrarum/UserInterface/UITypable +++ /dev/null @@ -1,12 +0,0 @@ -package com.Torvald.Terrarum.UserInterface; - -/** - * Created by minjaesong on 16-03-06. - */ -public interface UITypable { - - void keyPressed(int key, char c); - - void keyReleased(int key, char c); - -} diff --git a/work_files/sky colour.numbers b/work_files/sky colour.numbers new file mode 100644 index 000000000..12c19978e Binary files /dev/null and b/work_files/sky colour.numbers differ