buoyancy partially implemented (jump gets higher in water), fluidal movement resistance was failed to implement

Former-commit-id: 9a5275809b11c8597cdcc59bc8845f80eeb6bb56
Former-commit-id: 4946a70b3a0bab66fd6817859bf03517d3a1152e
This commit is contained in:
Song Minjae
2016-03-07 01:14:50 +09:00
parent 217db0a4ea
commit fd058e9004
18 changed files with 399 additions and 152 deletions

View File

@@ -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)
- Two looms (216 colour mode, 4096 colour mode)
== Food/Potion dose ==
Scale ^ 3 ^ (3/4)
= (ThisWgt / TargetWgt) ^ (3/4)

View File

@@ -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))
# 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
Can't render this file because it contains an unexpected character in line 1 and column 18.

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -0,0 +1,12 @@
package com.Torvald.Terrarum.Actors.ItemProperties;
/**
* Created by minjaesong on 16-03-06.
*/
public class MaterialFactory {
/**
* Load from CSV
*/
}

View File

@@ -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<Faction> 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

View File

@@ -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)
- Two looms (216 colour mode, 4096 colour mode)
== Food/Potion dose ==
Scale ^ 3 ^ (3/4)
= (ThisWgt / TargetWgt) ^ (3/4)

View File

@@ -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);
}
}
}
}

View File

@@ -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;
}
}

View File

@@ -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);
}
}

View File

@@ -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))
# 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
Can't render this file because it contains an unexpected character in line 1 and column 18.