diff --git a/out/production/Terrarum_renewed/com/Torvald/Terrarum/Actors/ActorWithBody.class b/out/production/Terrarum_renewed/com/Torvald/Terrarum/Actors/ActorWithBody.class index 44c56cd2c..1ba4a221d 100644 Binary files a/out/production/Terrarum_renewed/com/Torvald/Terrarum/Actors/ActorWithBody.class and b/out/production/Terrarum_renewed/com/Torvald/Terrarum/Actors/ActorWithBody.class differ diff --git a/out/production/Terrarum_renewed/com/Torvald/Terrarum/Actors/ItemProperties/Material.class b/out/production/Terrarum_renewed/com/Torvald/Terrarum/Actors/ItemProperties/Material.class new file mode 100644 index 000000000..1b8e13775 Binary files /dev/null and b/out/production/Terrarum_renewed/com/Torvald/Terrarum/Actors/ItemProperties/Material.class differ diff --git a/out/production/Terrarum_renewed/com/Torvald/Terrarum/Actors/ItemProperties/MaterialFactory.class b/out/production/Terrarum_renewed/com/Torvald/Terrarum/Actors/ItemProperties/MaterialFactory.class new file mode 100644 index 000000000..988c20c65 Binary files /dev/null and b/out/production/Terrarum_renewed/com/Torvald/Terrarum/Actors/ItemProperties/MaterialFactory.class differ diff --git a/out/production/Terrarum_renewed/com/Torvald/Terrarum/Actors/Player.class b/out/production/Terrarum_renewed/com/Torvald/Terrarum/Actors/Player.class index 14b6d945e..ee24d1984 100644 Binary files a/out/production/Terrarum_renewed/com/Torvald/Terrarum/Actors/Player.class and b/out/production/Terrarum_renewed/com/Torvald/Terrarum/Actors/Player.class differ diff --git a/out/production/Terrarum_renewed/com/Torvald/Terrarum/MECHNANICS b/out/production/Terrarum_renewed/com/Torvald/Terrarum/MECHNANICS index 29f9f4fbf..87969412c 100644 --- a/out/production/Terrarum_renewed/com/Torvald/Terrarum/MECHNANICS +++ b/out/production/Terrarum_renewed/com/Torvald/Terrarum/MECHNANICS @@ -93,4 +93,10 @@ == Custom pattern making == - Players can create their own décors (hang on wall), dresses. - - Two looms (216 colour mode, 4096 colour mode) \ No newline at end of file + - Two looms (216 colour mode, 4096 colour mode) + + +== Food/Potion dose == + + Scale ^ 3 ^ (3/4) + = (ThisWgt / TargetWgt) ^ (3/4) diff --git a/out/production/Terrarum_renewed/com/Torvald/Terrarum/MapDrawer/MapCamera.class b/out/production/Terrarum_renewed/com/Torvald/Terrarum/MapDrawer/MapCamera.class index 6be81442b..7de878be7 100644 Binary files a/out/production/Terrarum_renewed/com/Torvald/Terrarum/MapDrawer/MapCamera.class and b/out/production/Terrarum_renewed/com/Torvald/Terrarum/MapDrawer/MapCamera.class differ diff --git a/out/production/Terrarum_renewed/com/Torvald/Terrarum/TileProperties/TileProp.class b/out/production/Terrarum_renewed/com/Torvald/Terrarum/TileProperties/TileProp.class index 6859500e0..5fe549ac1 100644 Binary files a/out/production/Terrarum_renewed/com/Torvald/Terrarum/TileProperties/TileProp.class and b/out/production/Terrarum_renewed/com/Torvald/Terrarum/TileProperties/TileProp.class differ diff --git a/out/production/Terrarum_renewed/com/Torvald/Terrarum/TileProperties/TilePropCodex.class b/out/production/Terrarum_renewed/com/Torvald/Terrarum/TileProperties/TilePropCodex.class index a6f7bdfa8..7c72dbd9f 100644 Binary files a/out/production/Terrarum_renewed/com/Torvald/Terrarum/TileProperties/TilePropCodex.class and b/out/production/Terrarum_renewed/com/Torvald/Terrarum/TileProperties/TilePropCodex.class differ diff --git a/out/production/Terrarum_renewed/com/Torvald/Terrarum/TileProperties/propdata.csv b/out/production/Terrarum_renewed/com/Torvald/Terrarum/TileProperties/propdata.csv index cfdcc704d..e9cf2b356 100644 --- a/out/production/Terrarum_renewed/com/Torvald/Terrarum/TileProperties/propdata.csv +++ b/out/production/Terrarum_renewed/com/Torvald/Terrarum/TileProperties/propdata.csv @@ -1,60 +1,56 @@ - "id";"dmg";"name" ;"opacity";"strength";"fluid";"viscosity";"solid";"wall";"lumcolor";"opaque";"drop";"ddmg";"fall";"friction" - "0"; "0";"TILE_AIR" ; "1641"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0";"16" - "1"; "0";"TILE_STONE" ; "8205"; "25"; "0"; "0"; "1"; "1"; "0"; "1"; "1"; "0"; "0";"16" - "1"; "1";"TILE_STONE_QUARRIED" ; "8205"; "25"; "0"; "0"; "1"; "1"; "0"; "1"; "1"; "1"; "0";"16" - "2"; "0";"TILE_DIRT" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "2"; "0"; "0";"16" - "2"; "1";"TILE_GRASS" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "2"; "1"; "0";"16" - - "3"; "0";"TILE_PLANK_NORMAL" ; "8205"; "12"; "0"; "0"; "1"; "1"; "0"; "1"; "3"; "0"; "0";"16" - "3"; "1";"TILE_PLANK_EBONY" ; "8205"; "12"; "0"; "0"; "1"; "1"; "0"; "1"; "3"; "1"; "0";"16" - "3"; "2";"TILE_PLANK_BIRCH" ; "8205"; "12"; "0"; "0"; "1"; "1"; "0"; "1"; "3"; "2"; "0";"16" - "3"; "3";"TILE_PLANK_BLOODROSE" ; "8205"; "12"; "0"; "0"; "1"; "1"; "0"; "1"; "3"; "3"; "0";"16" - - "4"; "0";"TILE_TRUNK_NORMAL" ; "8205"; "12"; "0"; "0"; "1"; "0"; "0"; "1"; "3"; "0"; "0";"16" - "4"; "1";"TILE_TRUNK_EBONY" ; "8205"; "12"; "0"; "0"; "1"; "0"; "0"; "1"; "3"; "1"; "0";"16" - "4"; "2";"TILE_TRUNK_BIRCH" ; "8205"; "12"; "0"; "0"; "1"; "0"; "0"; "1"; "3"; "2"; "0";"16" - "4"; "3";"TILE_TRUNK_BLOODROSE" ; "8205"; "12"; "0"; "0"; "1"; "0"; "0"; "1"; "3"; "3"; "0";"16" - - "5"; "0";"TILE_SAND" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "0"; "1";"16" - "5"; "1";"TILE_SAND_WHITE" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "1"; "1";"16" - "5"; "2";"TILE_SAND_RED" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "2"; "1";"16" - "5"; "3";"TILE_SAND" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "3"; "1";"16" - "5"; "4";"TILE_SAND_BLACK" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "4"; "1";"16" - - "6"; "0";"TILE_GRAVEL" ; "8205"; "6"; "0"; "0"; "1"; "0"; "0"; "1"; "6"; "0"; "1";"16" - "6"; "1";"TILE_GRAVEL_GREY" ; "8205"; "6"; "0"; "0"; "1"; "0"; "0"; "1"; "6"; "1"; "1";"16" - - "7"; "0";"TILE_ORE_MALACHITE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "0"; "0";"16" - "7"; "1";"TILE_ORE_HEMATITE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "1"; "0";"16" - "7"; "2";"TILE_ORE_NATURAL_GOLD" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "2"; "0";"16" - "7"; "3";"TILE_ORE_NATURAL_SILVER" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "3"; "0";"16" - "7"; "4";"TILE_ORE_RUTILE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "4"; "0";"16" - "7"; "5";"TILE_ORE_AURICHALCUMITE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "5"; "0";"16" - - "8"; "0";"TILE_GEM_RUBY" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "0"; "0";"16" - "8"; "1";"TILE_GEM_EMERALD" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "1"; "0";"16" - "8"; "2";"TILE_GEM_SAPPHIRE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "2"; "0";"16" - "8"; "3";"TILE_GEM_TOPAZ" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "3"; "0";"16" - "8"; "4";"TILE_GEM_DIAMOND" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "4"; "0";"16" - "8"; "5";"TILE_GEM_AMETHYST" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "5"; "0";"16" - - "9"; "0";"TILE_SNOW" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "9"; "0"; "0";"16" - "9"; "1";"TILE_ICE_FRAGILE" ; "3282"; "1"; "0"; "0"; "1"; "0"; "0"; "0"; "9"; "1"; "0";"16" - "9"; "2";"TILE_ICE_NATURAL" ; "6564"; "25"; "0"; "0"; "1"; "1"; "0"; "1"; "9"; "2"; "0"; "8" - "9"; "3";"TILE_ICE_CLEAR_MAGICAL" ; "8205"; "25"; "0"; "0"; "1"; "1"; "5009"; "0"; "9"; "3"; "0"; "8" - - "10"; "0";"TILE_PLATFORM_STONE" ; "0"; "1"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "0"; "0";"16" - "10"; "1";"TILE_PLATFORM_WOODEN" ; "0"; "1"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "1"; "0";"16" - "10"; "2";"TILE_PLATFORM_EBONY" ; "0"; "1"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "2"; "0";"16" - "10"; "3";"TILE_PLATFORM_BIRCH" ; "0"; "1"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "3"; "0";"16" - "10"; "4";"TILE_PLATFORM_BLOODROSE" ; "0"; "1"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "4"; "0";"16" - - "11"; "0";"TILE_TORCH" ; "0"; "0"; "0"; "0"; "0"; "0"; "63412"; "0"; "11"; "0"; "0";"16" -# 63412 (ffa44e) : real candlelight colour taken from properly configured camera. -"254"; "15";"TILE_WATER" ; "6522"; "100"; "1"; "16"; "0"; "0"; "0"; "0"; "-1"; "-1"; "0";"16" -"255"; "15";"TILE_LAVA" ; "62358"; "100"; "1"; "16"; "0"; "0"; "48320"; "0"; "-1"; "-1"; "0";"16" + "id";"dmg";"name" ;"opacity";"strength";"spcg";"fluid";"movr";"solid";"wall";"lumcolor";"opaque";"drop";"ddmg";"fall";"friction" + "0"; "0";"TILE_AIR" ; "1641"; "0"; "1"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0";"16" + "1"; "0";"TILE_STONE" ; "8205"; "25";"2400"; "0"; "0"; "1"; "1"; "0"; "1"; "1"; "0"; "0";"16" + "1"; "1";"TILE_STONE_QUARRIED" ; "8205"; "25";"2400"; "0"; "0"; "1"; "1"; "0"; "1"; "1"; "1"; "0";"16" + "2"; "0";"TILE_DIRT" ; "8205"; "6";"1400"; "0"; "0"; "1"; "1"; "0"; "1"; "2"; "0"; "0";"16" + "2"; "1";"TILE_GRASS" ; "8205"; "6";"1400"; "0"; "0"; "1"; "1"; "0"; "1"; "2"; "1"; "0";"16" + "3"; "0";"TILE_PLANK_NORMAL" ; "8205"; "12"; "740"; "0"; "0"; "1"; "1"; "0"; "1"; "3"; "0"; "0";"16" + "3"; "1";"TILE_PLANK_EBONY" ; "8205"; "12";"1200"; "0"; "0"; "1"; "1"; "0"; "1"; "3"; "1"; "0";"16" + "3"; "2";"TILE_PLANK_BIRCH" ; "8205"; "12"; "670"; "0"; "0"; "1"; "1"; "0"; "1"; "3"; "2"; "0";"16" + "3"; "3";"TILE_PLANK_BLOODROSE" ; "8205"; "12"; "900"; "0"; "0"; "1"; "1"; "0"; "1"; "3"; "3"; "0";"16" + "4"; "0";"TILE_TRUNK_NORMAL" ; "8205"; "12"; "740"; "0"; "0"; "1"; "0"; "0"; "1"; "3"; "0"; "0";"16" + "4"; "1";"TILE_TRUNK_EBONY" ; "8205"; "12";"1200"; "0"; "0"; "1"; "0"; "0"; "1"; "3"; "1"; "0";"16" + "4"; "2";"TILE_TRUNK_BIRCH" ; "8205"; "12"; "670"; "0"; "0"; "1"; "0"; "0"; "1"; "3"; "2"; "0";"16" + "4"; "3";"TILE_TRUNK_BLOODROSE" ; "8205"; "12"; "900"; "0"; "0"; "1"; "0"; "0"; "1"; "3"; "3"; "0";"16" + "5"; "0";"TILE_SAND" ; "8205"; "6";"2400"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "0"; "1";"16" + "5"; "1";"TILE_SAND_WHITE" ; "8205"; "6";"2400"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "1"; "1";"16" + "5"; "2";"TILE_SAND_RED" ; "8205"; "6";"2400"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "2"; "1";"16" + "5"; "3";"TILE_SAND" ; "8205"; "6";"2400"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "3"; "1";"16" + "5"; "4";"TILE_SAND_BLACK" ; "8205"; "6";"2400"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "4"; "1";"16" + "6"; "0";"TILE_GRAVEL" ; "8205"; "6";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "6"; "0"; "1";"16" + "6"; "1";"TILE_GRAVEL_GREY" ; "8205"; "6";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "6"; "1"; "1";"16" + "7"; "0";"TILE_ORE_MALACHITE" ; "8205"; "25";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "0"; "0";"16" + "7"; "1";"TILE_ORE_HEMATITE" ; "8205"; "25";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "1"; "0";"16" + "7"; "2";"TILE_ORE_NATURAL_GOLD" ; "8205"; "25";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "2"; "0";"16" + "7"; "3";"TILE_ORE_NATURAL_SILVER" ; "8205"; "25";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "3"; "0";"16" + "7"; "4";"TILE_ORE_RUTILE" ; "8205"; "25";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "4"; "0";"16" + "7"; "5";"TILE_ORE_AURICHALCUMITE" ; "8205"; "25";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "5"; "0";"16" + "8"; "0";"TILE_GEM_RUBY" ; "8205"; "25";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "0"; "0";"16" + "8"; "1";"TILE_GEM_EMERALD" ; "8205"; "25";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "1"; "0";"16" + "8"; "2";"TILE_GEM_SAPPHIRE" ; "8205"; "25";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "2"; "0";"16" + "8"; "3";"TILE_GEM_TOPAZ" ; "8205"; "25";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "3"; "0";"16" + "8"; "4";"TILE_GEM_DIAMOND" ; "8205"; "25";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "4"; "0";"16" + "8"; "5";"TILE_GEM_AMETHYST" ; "8205"; "25";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "5"; "0";"16" + "9"; "0";"TILE_SNOW" ; "8205"; "6"; "500"; "0"; "0"; "1"; "1"; "0"; "1"; "9"; "0"; "0";"16" + "9"; "1";"TILE_ICE_FRAGILE" ; "3282"; "1"; "930"; "0"; "0"; "1"; "0"; "0"; "0"; "9"; "1"; "0";"16" + "9"; "2";"TILE_ICE_NATURAL" ; "6564"; "25"; "930"; "0"; "0"; "1"; "1"; "0"; "1"; "9"; "2"; "0"; "8" + "9"; "3";"TILE_ICE_CLEAR_MAGICAL" ; "8205"; "25";"2785"; "0"; "0"; "1"; "1"; "5009"; "0"; "9"; "3"; "0"; "8" + "10"; "0";"TILE_PLATFORM_STONE" ; "0"; "1"; "N/A"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "0"; "0";"16" + "10"; "1";"TILE_PLATFORM_WOODEN" ; "0"; "1"; "N/A"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "1"; "0";"16" + "10"; "2";"TILE_PLATFORM_EBONY" ; "0"; "1"; "N/A"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "2"; "0";"16" + "10"; "3";"TILE_PLATFORM_BIRCH" ; "0"; "1"; "N/A"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "3"; "0";"16" + "10"; "4";"TILE_PLATFORM_BLOODROSE" ; "0"; "1"; "N/A"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "4"; "0";"16" + "11"; "0";"TILE_TORCH" ; "0"; "0"; "N/A"; "0"; "0"; "0"; "0"; "63412"; "0"; "11"; "0"; "0";"16" +"254"; "15";"TILE_WATER" ; "6522"; "100";"1000"; "1"; "16"; "0"; "0"; "0"; "0"; "N/A"; "N/A"; "0";"16" +"255"; "15";"TILE_LAVA" ; "62358"; "100";"2600"; "1"; "48"; "0"; "0"; "48320"; "0"; "N/A"; "N/A"; "0";"16" # Friction: 0: frictionless, <16: slippery, 16: regular, >16: sticky # Opacity/Lumcolor: 40-step RGB # Opaque: whether the tile completely hides wall behind -# Solid: whether the tile has collision -# Viscosity: (walkspeedmax) * (1 + (n/16)) \ No newline at end of file +# Solid: whether the tile has full collision +# movr: Movement resistance, (walkspeedmax) / (1 + (n/16)), 16 halves movement speed +# spcg: specific gravity, aka density. [g/l] +# Defalut torch should have a colour of 63412 (ffa44e) : real candlelight colour taken from properly configured camera. +# Assume magical ice as Ice-X. +# References: +# * Density of various woods : http://www.engineeringtoolbox.com/wood-density-d_40.html +# * Density of various phases of ice : http://www1.lsbu.ac.uk/water/ice_phases.html \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/Actors/ActorWithBody.java b/src/com/Torvald/Terrarum/Actors/ActorWithBody.java index 4d3c0ed17..822905eba 100644 --- a/src/com/Torvald/Terrarum/Actors/ActorWithBody.java +++ b/src/com/Torvald/Terrarum/Actors/ActorWithBody.java @@ -2,6 +2,7 @@ package com.Torvald.Terrarum.Actors; import com.Torvald.Rand.HQRNG; import com.Torvald.Terrarum.*; +import com.Torvald.Terrarum.GameMap.GameMap; import com.Torvald.Terrarum.MapDrawer.MapDrawer; import com.Torvald.Terrarum.TileProperties.TilePropCodex; import com.Torvald.spriteAnimation.SpriteAnimation; @@ -47,6 +48,7 @@ public class ActorWithBody implements Actor, Visible, Glowing { private boolean noSubjectToGrav = false; private boolean noCollideWorld = false; + private boolean noSubjectToFluidResistance = false; int baseSpriteWidth, baseSpriteHeight; @@ -58,15 +60,13 @@ public class ActorWithBody implements Actor, Visible, Glowing { /** * Physical properties */ - @NonZero - private volatile float scale = 1; + @NonZero private volatile float scale = 1; @NonZero private volatile float mass = 2f; private final float MASS_LOWEST = 2f; /** Valid range: [0, 1] */ private float elasticity = 0; private final float ELASTICITY_MAX = 0.993f; - @NoNegative - private float buoyancy = 0; + @NoNegative private float density = 1000; private static final int TSIZE = MapDrawer.TILE_SIZE; private static int AUTO_CLIMB_RATE = TSIZE / 8; @@ -119,12 +119,15 @@ public class ActorWithBody implements Actor, Visible, Glowing { */ public final int INVINCIBILITY_TIME = 500; + private GameMap map; + /** * Give new random ReferenceID and initialise ActorValue */ public ActorWithBody() { referenceID = new HQRNG().nextLong(); actorValue = new ActorValue(); + map = Terrarum.game.map; } /** @@ -176,6 +179,7 @@ public class ActorWithBody implements Actor, Visible, Glowing { if (this instanceof Player) { noSubjectToGrav = isPlayerNoClip(); noCollideWorld = isPlayerNoClip(); + noSubjectToFluidResistance = isPlayerNoClip(); } if (mass < MASS_LOWEST) mass = MASS_LOWEST; // clamp to minimum possible mass @@ -183,16 +187,24 @@ public class ActorWithBody implements Actor, Visible, Glowing { baseSpriteHeight = sprite.getHeight(); baseSpriteWidth = sprite.getWidth(); } - gravitation = Terrarum.game.map.getGravitation(); + gravitation = map.getGravitation(); AUTO_CLIMB_RATE = (int) Math.min(TSIZE / 8 * FastMath.sqrt(scale), TSIZE); if (!isNoSubjectToGrav()) { applyGravitation(); + applyBuoyancy(); } // hard limit velocity if (veloX > VELO_HARD_LIMIT) veloX = VELO_HARD_LIMIT; if (veloY > VELO_HARD_LIMIT) veloY = VELO_HARD_LIMIT; + // limit velocity by fluid resistance + //int tilePropResistance = getTileMvmtRstc(); + //if (!noSubjectToFluidResistance) { + // veloX *= mvmtRstcToMultiplier(tilePropResistance); + // veloY *= mvmtRstcToMultiplier(tilePropResistance); + //} + // Set 'next' positions to fiddle with updateNextHitboxFromVelo(); @@ -207,6 +219,8 @@ public class ActorWithBody implements Actor, Visible, Glowing { updateHorizontalPos(); updateVerticalPos(); } + + updateHitboxX(); updateHitboxY(); @@ -237,7 +251,11 @@ public class ActorWithBody implements Actor, Visible, Glowing { float A = scale * scale; float D = DRAG_COEFF * 0.5f * 1.292f * veloY * veloY * A; - veloY += clampCeil(((W - D) / mass) * SI_TO_GAME_ACC * G_MUL_PLAYABLE_CONST + int fluidResistance = getTileMvmtRstc(); + + veloY += clampCeil( + ((W - D) / mass) * SI_TO_GAME_ACC * G_MUL_PLAYABLE_CONST + * mvmtRstcToMultiplier(fluidResistance) // eliminate shoot-up from fluids , VELO_HARD_LIMIT ); } @@ -453,7 +471,7 @@ public class ActorWithBody implements Actor, Visible, Glowing { } // evaluate - if (TilePropCodex.getProp(Terrarum.game.map.getTileFromTerrain(tileX, tileY)).isSolid()) { + if (TilePropCodex.getProp(map.getTileFromTerrain(tileX, tileY)).isSolid()) { contactAreaCounter += 1; } } @@ -461,6 +479,146 @@ public class ActorWithBody implements Actor, Visible, Glowing { return contactAreaCounter; } + /** + * [N] = [kg * m / s^2] + * F(bo) = density * submerged_volume * gravitational_acceleration [N] + */ + private void applyBuoyancy() { + int fluidDensity = getTileDensity(); + int fluidResistance = getTileMvmtRstc(); + float submergedVolume = getSubmergedVolume(); + + if (!isPlayerNoClip() && !grounded) { + // System.out.println("density: "+density); + veloY -= ((fluidDensity - this.density) + * map.getGravitation() * submergedVolume + * Math.pow(mass, -1) + * mvmtRstcToMultiplier(fluidResistance) // eliminate shoot-up + * SI_TO_GAME_ACC); + } + } + + private float getSubmergedVolume(){ + float GAME_TO_SI_VOL = FastMath.pow((1f/METER), 3); + + if( density > 0 ){ + return FastMath.clamp( + (nextHitbox.getPointedY() - getFluidLevel()) // submerged height + * nextHitbox.getWidth() * nextHitbox.getWidth() + * GAME_TO_SI_VOL + , 0 + , nextHitbox.getHeight() + * nextHitbox.getWidth() * nextHitbox.getWidth() + * GAME_TO_SI_VOL + ); + //System.out.println("fluidHeight: "+fluidHeight+", submerged: "+submergedVolume); + //submergedHeight / TILE_SIZE * 1^2 (pixel to meter) + } + else{ + return 0; + } + } + + private int getFluidLevel(){ + int tilePosXStart = Math.round(nextHitbox.getPosX() / TSIZE); + int tilePosXEnd = Math.round(nextHitbox.getHitboxEnd().getX() / TSIZE); + int tilePosY = Math.round(nextHitbox.getPosY() / TSIZE); + + int fluidHeight = 2147483647; + + for (int x = tilePosXStart; x <= tilePosXEnd; x++) { + int tile = map.getTileFromTerrain(x, tilePosY); + if ( TilePropCodex.getProp(tile).isFluid() + && tilePosY * TSIZE < fluidHeight ){ + fluidHeight = tilePosY * TSIZE; + } + } + + return fluidHeight; + } + + /** + * Get highest friction value from feet tiles. + * @return + */ + private int getTileFriction(){ + int friction = 0; + + int tilePosXStart = Math.round(nextHitbox.getPosX() / TSIZE); + int tilePosXEnd = Math.round(nextHitbox.getHitboxEnd().getX() / TSIZE); + int tilePosY = Math.round(nextHitbox.getPointedY() / TSIZE); + + //get density + for (int x = tilePosXStart; x <= tilePosXEnd; x++) { + int tile = map.getTileFromTerrain(x, tilePosY); + if (TilePropCodex.getProp(tile).isFluid()) { + int thisFluidDensity = TilePropCodex.getProp(tile).getFriction(); + + if (thisFluidDensity > friction) friction = thisFluidDensity; + } + } + + return friction; + } + + /** + * Get highest movement resistance value from tiles that the body occupies. + * @return + */ + private int getTileMvmtRstc(){ + int resistance = 0; + + int tilePosXStart = Math.round(nextHitbox.getPosX() / TSIZE); + int tilePosYStart = Math.round(nextHitbox.getPosY() / TSIZE); + int tilePosXEnd = Math.round(nextHitbox.getHitboxEnd().getX() / TSIZE); + int tilePosYEnd = Math.round(nextHitbox.getHitboxEnd().getY() / TSIZE); + + //get density + for (int y = tilePosYStart; y <= tilePosYEnd; y++) { + for (int x = tilePosXStart; x <= tilePosXEnd; x++) { + int tile = map.getTileFromTerrain(x, y); + if (TilePropCodex.getProp(tile).isFluid()) { + int thisFluidDensity = TilePropCodex.getProp(tile).getMovementResistance(); + + if (thisFluidDensity > resistance) resistance = thisFluidDensity; + } + } + } + + return resistance; + } + + /** + * Get highest density (specific gravity) value from tiles that the body occupies. + * @return + */ + private int getTileDensity() { + int density = 0; + + int tilePosXStart = Math.round(nextHitbox.getPosX() / TSIZE); + int tilePosYStart = Math.round(nextHitbox.getPosY() / TSIZE); + int tilePosXEnd = Math.round(nextHitbox.getHitboxEnd().getX() / TSIZE); + int tilePosYEnd = Math.round(nextHitbox.getHitboxEnd().getY() / TSIZE); + + //get density + for (int y = tilePosYStart; y <= tilePosYEnd; y++) { + for (int x = tilePosXStart; x <= tilePosXEnd; x++) { + int tile = map.getTileFromTerrain(x, y); + if (TilePropCodex.getProp(tile).isFluid()) { + int thisFluidDensity = TilePropCodex.getProp(tile).getDensity(); + + if (thisFluidDensity > density) density = thisFluidDensity; + } + } + } + + return density; + } + + private float mvmtRstcToMultiplier(int viscosity) { + return 1f / (1 + (viscosity / 16f)); + } + private void clampHitbox() { hitbox.setPositionFromPoint( clampW(hitbox.getPointedX()) @@ -575,8 +733,8 @@ public class ActorWithBody implements Actor, Visible, Glowing { if (x < TSIZE + nextHitbox.getWidth() / 2) { return TSIZE + nextHitbox.getWidth() / 2; } - else if (x >= Terrarum.game.map.width * TSIZE - TSIZE - nextHitbox.getWidth() / 2) { - return Terrarum.game.map.width * TSIZE - 1 - TSIZE - nextHitbox.getWidth() / 2; + else if (x >= map.width * TSIZE - TSIZE - nextHitbox.getWidth() / 2) { + return map.width * TSIZE - 1 - TSIZE - nextHitbox.getWidth() / 2; } else { return x; @@ -587,8 +745,8 @@ public class ActorWithBody implements Actor, Visible, Glowing { if (y < TSIZE + nextHitbox.getHeight()) { return TSIZE + nextHitbox.getHeight(); } - else if (y >= Terrarum.game.map.height * TSIZE - TSIZE - nextHitbox.getHeight()) { - return Terrarum.game.map.height * TSIZE - 1 - TSIZE - nextHitbox.getHeight(); + else if (y >= map.height * TSIZE - TSIZE - nextHitbox.getHeight()) { + return map.height * TSIZE - 1 - TSIZE - nextHitbox.getHeight(); } else { return y; @@ -599,8 +757,8 @@ public class ActorWithBody implements Actor, Visible, Glowing { if (x < 0) { return 0; } - else if (x >= Terrarum.game.map.width) { - return Terrarum.game.map.width - 1; + else if (x >= map.width) { + return map.width - 1; } else { return x; @@ -611,8 +769,8 @@ public class ActorWithBody implements Actor, Visible, Glowing { if (x < 0) { return 0; } - else if (x >= Terrarum.game.map.height) { - return Terrarum.game.map.height - 1; + else if (x >= map.height) { + return map.height - 1; } else { return x; @@ -747,10 +905,18 @@ public class ActorWithBody implements Actor, Visible, Glowing { return noCollideWorld; } + public boolean isNoSubjectToFluidResistance() { + return noSubjectToFluidResistance; + } + public void setNoCollideWorld(boolean noCollideWorld) { this.noCollideWorld = noCollideWorld; } + public void setNoSubjectToFluidResistance(boolean noSubjectToFluidResistance) { + this.noSubjectToFluidResistance = noSubjectToFluidResistance; + } + public void setElasticity(float elasticity) { if (elasticity < 0) throw new IllegalArgumentException("[ActorWithBody] " + elasticity + ": valid elasticity value is [0, 1]."); @@ -762,11 +928,11 @@ public class ActorWithBody implements Actor, Visible, Glowing { else this.elasticity = elasticity * ELASTICITY_MAX; } - public void setBuoyancy(float buoyancy) { - if (buoyancy < 0) - throw new IllegalArgumentException("[ActorWithBody] " + buoyancy + ": buoyancy cannot be negative."); + public void setDensity(int density) { + if (density < 0) + throw new IllegalArgumentException("[ActorWithBody] " + density + ": density cannot be negative."); - this.buoyancy = buoyancy; + this.density = density; } } diff --git a/src/com/Torvald/Terrarum/Actors/ItemProperties/Material.java b/src/com/Torvald/Terrarum/Actors/ItemProperties/Material.java new file mode 100644 index 000000000..9c74cf3ea --- /dev/null +++ b/src/com/Torvald/Terrarum/Actors/ItemProperties/Material.java @@ -0,0 +1,41 @@ +package com.Torvald.Terrarum.Actors.ItemProperties; + +/** + * Created by minjaesong on 16-03-06. + */ +public class Material { + + /** How sharp the material is. Default to 1000.*/ + int maxEdge; + /** Self-explanatory. [kPa in Vickers hardness]*/ + int hardness; + /** Self-explanatory. [g/l]*/ + int density; + + public Material() { + } + + public int getMaxEdge() { + return maxEdge; + } + + void setMaxEdge(int maxEdge) { + this.maxEdge = maxEdge; + } + + public int getHardness() { + return hardness; + } + + void setHardness(int hardness) { + this.hardness = hardness; + } + + public int getDensity() { + return density; + } + + void setDensity(int density) { + this.density = density; + } +} diff --git a/src/com/Torvald/Terrarum/Actors/ItemProperties/MaterialFactory.java b/src/com/Torvald/Terrarum/Actors/ItemProperties/MaterialFactory.java new file mode 100644 index 000000000..1eb09d4d7 --- /dev/null +++ b/src/com/Torvald/Terrarum/Actors/ItemProperties/MaterialFactory.java @@ -0,0 +1,12 @@ +package com.Torvald.Terrarum.Actors.ItemProperties; + +/** + * Created by minjaesong on 16-03-06. + */ +public class MaterialFactory { + + /** + * Load from CSV + */ + +} diff --git a/src/com/Torvald/Terrarum/Actors/Player.java b/src/com/Torvald/Terrarum/Actors/Player.java index b27f7bfc7..5a1ad88b1 100644 --- a/src/com/Torvald/Terrarum/Actors/Player.java +++ b/src/com/Torvald/Terrarum/Actors/Player.java @@ -1,6 +1,5 @@ package com.Torvald.Terrarum.Actors; -import com.Torvald.Rand.Fudge3; import com.Torvald.Terrarum.Actors.Faction.Faction; import com.Torvald.Terrarum.GameControl.EnumKeyFunc; import com.Torvald.Terrarum.GameControl.KeyMap; @@ -61,7 +60,7 @@ public class Player extends ActorWithBody implements Controllable, Pocketed, Fac private HashSet factionSet = new HashSet<>(); - private final float BASE_BUOYANCY = 0.98f; + private final int BASE_DENSITY = 1020; /** @@ -75,7 +74,7 @@ public class Player extends ActorWithBody implements Controllable, Pocketed, Fac super(); referenceID = PLAYER_REF_ID; setVisible(true); - super.setBuoyancy(BASE_BUOYANCY); + super.setDensity(BASE_DENSITY); } @Override diff --git a/src/com/Torvald/Terrarum/MECHNANICS b/src/com/Torvald/Terrarum/MECHNANICS index 29f9f4fbf..87969412c 100644 --- a/src/com/Torvald/Terrarum/MECHNANICS +++ b/src/com/Torvald/Terrarum/MECHNANICS @@ -93,4 +93,10 @@ == Custom pattern making == - Players can create their own décors (hang on wall), dresses. - - Two looms (216 colour mode, 4096 colour mode) \ No newline at end of file + - Two looms (216 colour mode, 4096 colour mode) + + +== Food/Potion dose == + + Scale ^ 3 ^ (3/4) + = (ThisWgt / TargetWgt) ^ (3/4) diff --git a/src/com/Torvald/Terrarum/MapDrawer/MapCamera.java b/src/com/Torvald/Terrarum/MapDrawer/MapCamera.java index 582a3336d..5e5c6dae3 100644 --- a/src/com/Torvald/Terrarum/MapDrawer/MapCamera.java +++ b/src/com/Torvald/Terrarum/MapDrawer/MapCamera.java @@ -81,11 +81,9 @@ public class MapCamera { * will blend colour using colour multiplication * i.e. red hues get lost if you dive into the water */ - private static Byte[] TILES_BLEND_MUL = { - (byte)224, (byte)225, (byte)226, (byte)227, (byte)228, (byte)229, (byte)230, (byte)231 - , (byte)232, (byte)233, (byte)234, (byte)235, (byte)236, (byte)237, (byte)238, (byte)239 - , (byte)240, (byte)241, (byte)242, (byte)243, (byte)244, (byte)245, (byte)246, (byte)247 - , (byte)248, (byte)249, (byte)250, (byte)251, (byte)252, (byte)253, (byte)254, (byte)255 + private static Integer[] TILES_BLEND_MUL = { + TileNameCode.WATER + , TileNameCode.LAVA }; /** @@ -225,7 +223,9 @@ public class MapCamera { // on top of the previously drawn tile // TODO check wether it works as intended when skybox is dark // add instruction "if (!isBlendMul((byte) thisTile))" - drawTile(mode, x, y, thisTileX, thisTileY); + if (!isBlendMul(thisTile)) { + drawTile(mode, x, y, thisTileX, thisTileY); + } } } } diff --git a/src/com/Torvald/Terrarum/TileProperties/TileProp.java b/src/com/Torvald/Terrarum/TileProperties/TileProp.java index 44d6b521a..6d4476568 100644 --- a/src/com/Torvald/Terrarum/TileProperties/TileProp.java +++ b/src/com/Torvald/Terrarum/TileProperties/TileProp.java @@ -13,8 +13,10 @@ public class TileProp { private int strength; + private int density; + private boolean fluid; - private int viscocity; + private int movementResistance; private boolean solid; // transparent or not @@ -79,12 +81,12 @@ public class TileProp { this.fluid = fluid; } - public int getViscocity() { - return viscocity; + public int getMovementResistance() { + return movementResistance; } - void setViscocity(int viscocity) { - this.viscocity = viscocity; + void setMovementResistance(int movementResistance) { + this.movementResistance = movementResistance; } public boolean isSolid() { @@ -158,4 +160,12 @@ public class TileProp { public void setOpaque(boolean opaque) { this.opaque = opaque; } + + public int getDensity() { + return density; + } + + public void setDensity(int density) { + this.density = density; + } } diff --git a/src/com/Torvald/Terrarum/TileProperties/TilePropCodex.java b/src/com/Torvald/Terrarum/TileProperties/TilePropCodex.java index b2fe47d9a..d42335797 100644 --- a/src/com/Torvald/Terrarum/TileProperties/TilePropCodex.java +++ b/src/com/Torvald/Terrarum/TileProperties/TilePropCodex.java @@ -75,6 +75,7 @@ public class TilePropCodex { prop.setOpacity((char) intVal(record, "opacity")); prop.setStrength(intVal(record, "strength")); + prop.setDensity(intVal(record, "spcg")); prop.setLuminosity((char) intVal(record, "lumcolor")); prop.setDrop(intVal(record, "drop")); prop.setDropDamage(intVal(record, "ddmg")); @@ -86,14 +87,17 @@ public class TilePropCodex { prop.setFallable(boolVal(record, "fall")); prop.setOpaque(boolVal(record, "opaque")); - if (prop.isFluid()) prop.setViscocity(intVal(record, "viscosity")); + if (prop.isFluid()) prop.setMovementResistance(intVal(record, "movr")); - System.out.print(prop.getId()); + System.out.print(formatNum3(prop.getId()) + ":" + formatNum2(prop.getDamage())); System.out.println("\t" + prop.getName()); } private static int intVal(CSVRecord rec, String s) { - return Integer.decode(rec.get(s)); + int ret = -1; + try { ret = Integer.decode(rec.get(s)); } + catch (NullPointerException e) {} + return ret; } private static boolean boolVal(CSVRecord rec, String s) { @@ -103,4 +107,15 @@ public class TilePropCodex { public static int indexDamageToArrayAddr(int index, int damage) { return (index * (PairedMapLayer.RANGE) + damage); } + + private static String formatNum3(int i) { + if (i < 10) return "00" + i; + else if (i < 100) return "0" + i; + else return String.valueOf(i); + } + + private static String formatNum2(int i) { + if (i < 10) return "0" + i; + else return String.valueOf(i); + } } diff --git a/src/com/Torvald/Terrarum/TileProperties/propdata.csv b/src/com/Torvald/Terrarum/TileProperties/propdata.csv index cfdcc704d..e9cf2b356 100644 --- a/src/com/Torvald/Terrarum/TileProperties/propdata.csv +++ b/src/com/Torvald/Terrarum/TileProperties/propdata.csv @@ -1,60 +1,56 @@ - "id";"dmg";"name" ;"opacity";"strength";"fluid";"viscosity";"solid";"wall";"lumcolor";"opaque";"drop";"ddmg";"fall";"friction" - "0"; "0";"TILE_AIR" ; "1641"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0";"16" - "1"; "0";"TILE_STONE" ; "8205"; "25"; "0"; "0"; "1"; "1"; "0"; "1"; "1"; "0"; "0";"16" - "1"; "1";"TILE_STONE_QUARRIED" ; "8205"; "25"; "0"; "0"; "1"; "1"; "0"; "1"; "1"; "1"; "0";"16" - "2"; "0";"TILE_DIRT" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "2"; "0"; "0";"16" - "2"; "1";"TILE_GRASS" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "2"; "1"; "0";"16" - - "3"; "0";"TILE_PLANK_NORMAL" ; "8205"; "12"; "0"; "0"; "1"; "1"; "0"; "1"; "3"; "0"; "0";"16" - "3"; "1";"TILE_PLANK_EBONY" ; "8205"; "12"; "0"; "0"; "1"; "1"; "0"; "1"; "3"; "1"; "0";"16" - "3"; "2";"TILE_PLANK_BIRCH" ; "8205"; "12"; "0"; "0"; "1"; "1"; "0"; "1"; "3"; "2"; "0";"16" - "3"; "3";"TILE_PLANK_BLOODROSE" ; "8205"; "12"; "0"; "0"; "1"; "1"; "0"; "1"; "3"; "3"; "0";"16" - - "4"; "0";"TILE_TRUNK_NORMAL" ; "8205"; "12"; "0"; "0"; "1"; "0"; "0"; "1"; "3"; "0"; "0";"16" - "4"; "1";"TILE_TRUNK_EBONY" ; "8205"; "12"; "0"; "0"; "1"; "0"; "0"; "1"; "3"; "1"; "0";"16" - "4"; "2";"TILE_TRUNK_BIRCH" ; "8205"; "12"; "0"; "0"; "1"; "0"; "0"; "1"; "3"; "2"; "0";"16" - "4"; "3";"TILE_TRUNK_BLOODROSE" ; "8205"; "12"; "0"; "0"; "1"; "0"; "0"; "1"; "3"; "3"; "0";"16" - - "5"; "0";"TILE_SAND" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "0"; "1";"16" - "5"; "1";"TILE_SAND_WHITE" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "1"; "1";"16" - "5"; "2";"TILE_SAND_RED" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "2"; "1";"16" - "5"; "3";"TILE_SAND" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "3"; "1";"16" - "5"; "4";"TILE_SAND_BLACK" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "4"; "1";"16" - - "6"; "0";"TILE_GRAVEL" ; "8205"; "6"; "0"; "0"; "1"; "0"; "0"; "1"; "6"; "0"; "1";"16" - "6"; "1";"TILE_GRAVEL_GREY" ; "8205"; "6"; "0"; "0"; "1"; "0"; "0"; "1"; "6"; "1"; "1";"16" - - "7"; "0";"TILE_ORE_MALACHITE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "0"; "0";"16" - "7"; "1";"TILE_ORE_HEMATITE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "1"; "0";"16" - "7"; "2";"TILE_ORE_NATURAL_GOLD" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "2"; "0";"16" - "7"; "3";"TILE_ORE_NATURAL_SILVER" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "3"; "0";"16" - "7"; "4";"TILE_ORE_RUTILE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "4"; "0";"16" - "7"; "5";"TILE_ORE_AURICHALCUMITE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "5"; "0";"16" - - "8"; "0";"TILE_GEM_RUBY" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "0"; "0";"16" - "8"; "1";"TILE_GEM_EMERALD" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "1"; "0";"16" - "8"; "2";"TILE_GEM_SAPPHIRE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "2"; "0";"16" - "8"; "3";"TILE_GEM_TOPAZ" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "3"; "0";"16" - "8"; "4";"TILE_GEM_DIAMOND" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "4"; "0";"16" - "8"; "5";"TILE_GEM_AMETHYST" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "5"; "0";"16" - - "9"; "0";"TILE_SNOW" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "9"; "0"; "0";"16" - "9"; "1";"TILE_ICE_FRAGILE" ; "3282"; "1"; "0"; "0"; "1"; "0"; "0"; "0"; "9"; "1"; "0";"16" - "9"; "2";"TILE_ICE_NATURAL" ; "6564"; "25"; "0"; "0"; "1"; "1"; "0"; "1"; "9"; "2"; "0"; "8" - "9"; "3";"TILE_ICE_CLEAR_MAGICAL" ; "8205"; "25"; "0"; "0"; "1"; "1"; "5009"; "0"; "9"; "3"; "0"; "8" - - "10"; "0";"TILE_PLATFORM_STONE" ; "0"; "1"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "0"; "0";"16" - "10"; "1";"TILE_PLATFORM_WOODEN" ; "0"; "1"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "1"; "0";"16" - "10"; "2";"TILE_PLATFORM_EBONY" ; "0"; "1"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "2"; "0";"16" - "10"; "3";"TILE_PLATFORM_BIRCH" ; "0"; "1"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "3"; "0";"16" - "10"; "4";"TILE_PLATFORM_BLOODROSE" ; "0"; "1"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "4"; "0";"16" - - "11"; "0";"TILE_TORCH" ; "0"; "0"; "0"; "0"; "0"; "0"; "63412"; "0"; "11"; "0"; "0";"16" -# 63412 (ffa44e) : real candlelight colour taken from properly configured camera. -"254"; "15";"TILE_WATER" ; "6522"; "100"; "1"; "16"; "0"; "0"; "0"; "0"; "-1"; "-1"; "0";"16" -"255"; "15";"TILE_LAVA" ; "62358"; "100"; "1"; "16"; "0"; "0"; "48320"; "0"; "-1"; "-1"; "0";"16" + "id";"dmg";"name" ;"opacity";"strength";"spcg";"fluid";"movr";"solid";"wall";"lumcolor";"opaque";"drop";"ddmg";"fall";"friction" + "0"; "0";"TILE_AIR" ; "1641"; "0"; "1"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0";"16" + "1"; "0";"TILE_STONE" ; "8205"; "25";"2400"; "0"; "0"; "1"; "1"; "0"; "1"; "1"; "0"; "0";"16" + "1"; "1";"TILE_STONE_QUARRIED" ; "8205"; "25";"2400"; "0"; "0"; "1"; "1"; "0"; "1"; "1"; "1"; "0";"16" + "2"; "0";"TILE_DIRT" ; "8205"; "6";"1400"; "0"; "0"; "1"; "1"; "0"; "1"; "2"; "0"; "0";"16" + "2"; "1";"TILE_GRASS" ; "8205"; "6";"1400"; "0"; "0"; "1"; "1"; "0"; "1"; "2"; "1"; "0";"16" + "3"; "0";"TILE_PLANK_NORMAL" ; "8205"; "12"; "740"; "0"; "0"; "1"; "1"; "0"; "1"; "3"; "0"; "0";"16" + "3"; "1";"TILE_PLANK_EBONY" ; "8205"; "12";"1200"; "0"; "0"; "1"; "1"; "0"; "1"; "3"; "1"; "0";"16" + "3"; "2";"TILE_PLANK_BIRCH" ; "8205"; "12"; "670"; "0"; "0"; "1"; "1"; "0"; "1"; "3"; "2"; "0";"16" + "3"; "3";"TILE_PLANK_BLOODROSE" ; "8205"; "12"; "900"; "0"; "0"; "1"; "1"; "0"; "1"; "3"; "3"; "0";"16" + "4"; "0";"TILE_TRUNK_NORMAL" ; "8205"; "12"; "740"; "0"; "0"; "1"; "0"; "0"; "1"; "3"; "0"; "0";"16" + "4"; "1";"TILE_TRUNK_EBONY" ; "8205"; "12";"1200"; "0"; "0"; "1"; "0"; "0"; "1"; "3"; "1"; "0";"16" + "4"; "2";"TILE_TRUNK_BIRCH" ; "8205"; "12"; "670"; "0"; "0"; "1"; "0"; "0"; "1"; "3"; "2"; "0";"16" + "4"; "3";"TILE_TRUNK_BLOODROSE" ; "8205"; "12"; "900"; "0"; "0"; "1"; "0"; "0"; "1"; "3"; "3"; "0";"16" + "5"; "0";"TILE_SAND" ; "8205"; "6";"2400"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "0"; "1";"16" + "5"; "1";"TILE_SAND_WHITE" ; "8205"; "6";"2400"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "1"; "1";"16" + "5"; "2";"TILE_SAND_RED" ; "8205"; "6";"2400"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "2"; "1";"16" + "5"; "3";"TILE_SAND" ; "8205"; "6";"2400"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "3"; "1";"16" + "5"; "4";"TILE_SAND_BLACK" ; "8205"; "6";"2400"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "4"; "1";"16" + "6"; "0";"TILE_GRAVEL" ; "8205"; "6";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "6"; "0"; "1";"16" + "6"; "1";"TILE_GRAVEL_GREY" ; "8205"; "6";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "6"; "1"; "1";"16" + "7"; "0";"TILE_ORE_MALACHITE" ; "8205"; "25";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "0"; "0";"16" + "7"; "1";"TILE_ORE_HEMATITE" ; "8205"; "25";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "1"; "0";"16" + "7"; "2";"TILE_ORE_NATURAL_GOLD" ; "8205"; "25";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "2"; "0";"16" + "7"; "3";"TILE_ORE_NATURAL_SILVER" ; "8205"; "25";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "3"; "0";"16" + "7"; "4";"TILE_ORE_RUTILE" ; "8205"; "25";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "4"; "0";"16" + "7"; "5";"TILE_ORE_AURICHALCUMITE" ; "8205"; "25";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "5"; "0";"16" + "8"; "0";"TILE_GEM_RUBY" ; "8205"; "25";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "0"; "0";"16" + "8"; "1";"TILE_GEM_EMERALD" ; "8205"; "25";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "1"; "0";"16" + "8"; "2";"TILE_GEM_SAPPHIRE" ; "8205"; "25";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "2"; "0";"16" + "8"; "3";"TILE_GEM_TOPAZ" ; "8205"; "25";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "3"; "0";"16" + "8"; "4";"TILE_GEM_DIAMOND" ; "8205"; "25";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "4"; "0";"16" + "8"; "5";"TILE_GEM_AMETHYST" ; "8205"; "25";"2400"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "5"; "0";"16" + "9"; "0";"TILE_SNOW" ; "8205"; "6"; "500"; "0"; "0"; "1"; "1"; "0"; "1"; "9"; "0"; "0";"16" + "9"; "1";"TILE_ICE_FRAGILE" ; "3282"; "1"; "930"; "0"; "0"; "1"; "0"; "0"; "0"; "9"; "1"; "0";"16" + "9"; "2";"TILE_ICE_NATURAL" ; "6564"; "25"; "930"; "0"; "0"; "1"; "1"; "0"; "1"; "9"; "2"; "0"; "8" + "9"; "3";"TILE_ICE_CLEAR_MAGICAL" ; "8205"; "25";"2785"; "0"; "0"; "1"; "1"; "5009"; "0"; "9"; "3"; "0"; "8" + "10"; "0";"TILE_PLATFORM_STONE" ; "0"; "1"; "N/A"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "0"; "0";"16" + "10"; "1";"TILE_PLATFORM_WOODEN" ; "0"; "1"; "N/A"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "1"; "0";"16" + "10"; "2";"TILE_PLATFORM_EBONY" ; "0"; "1"; "N/A"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "2"; "0";"16" + "10"; "3";"TILE_PLATFORM_BIRCH" ; "0"; "1"; "N/A"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "3"; "0";"16" + "10"; "4";"TILE_PLATFORM_BLOODROSE" ; "0"; "1"; "N/A"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "4"; "0";"16" + "11"; "0";"TILE_TORCH" ; "0"; "0"; "N/A"; "0"; "0"; "0"; "0"; "63412"; "0"; "11"; "0"; "0";"16" +"254"; "15";"TILE_WATER" ; "6522"; "100";"1000"; "1"; "16"; "0"; "0"; "0"; "0"; "N/A"; "N/A"; "0";"16" +"255"; "15";"TILE_LAVA" ; "62358"; "100";"2600"; "1"; "48"; "0"; "0"; "48320"; "0"; "N/A"; "N/A"; "0";"16" # Friction: 0: frictionless, <16: slippery, 16: regular, >16: sticky # Opacity/Lumcolor: 40-step RGB # Opaque: whether the tile completely hides wall behind -# Solid: whether the tile has collision -# Viscosity: (walkspeedmax) * (1 + (n/16)) \ No newline at end of file +# Solid: whether the tile has full collision +# movr: Movement resistance, (walkspeedmax) / (1 + (n/16)), 16 halves movement speed +# spcg: specific gravity, aka density. [g/l] +# Defalut torch should have a colour of 63412 (ffa44e) : real candlelight colour taken from properly configured camera. +# Assume magical ice as Ice-X. +# References: +# * Density of various woods : http://www.engineeringtoolbox.com/wood-density-d_40.html +# * Density of various phases of ice : http://www1.lsbu.ac.uk/water/ice_phases.html \ No newline at end of file