Tile -> Block && Map -> World

This commit is contained in:
Song Minjae
2017-04-27 01:57:45 +09:00
parent 49d3c9f55b
commit b4b2c0d85b
80 changed files with 1075 additions and 1645 deletions

View File

@@ -0,0 +1,100 @@
{
"BLOCK_STONE": "Stone",
"BLOCK_STONE_PLURAL": "Stones",
"BLOCK_DIRT": "Dirt",
"BLOCK_DIRT_PLURAL": "Dirts",
"BLOCK_GRASS": "Grass",
"BLOCK_GRAS_PLURALS": "Grasses",
"BLOCK_PLANK_NORMAL": "Wooden planks",
"BLOCK_PLANK_NORMAL_PLURAL": "Wooden planks",
"BLOCK_PLANK_EBONY": "Ebony planks",
"BLOCK_PLANK_EBONY_PLURAL": "Ebony planks",
"BLOCK_PLANK_BIRCH": "Birch planks",
"BLOCK_PLANK_BIRCH_PLURAL": "Birch planks",
"BLOCK_PLANK_BLOODROSE": "Rosewood planks",
"BLOCK_PLANK_BLOODROSE_PLURAL": "Rosewood planks",
"BLOCK_TRUNK_NORMAL": "Oak log",
"BLOCK_TRUNK_NORMAL_PLURAL": "Oak logs",
"BLOCK_TRUNK_EBONY": "Ebony log",
"BLOCK_TRUNK_EBONY_PLURAL": "Ebony logs",
"BLOCK_TRUNK_BIRCH": "Birch log",
"BLOCK_TRUNK_BIRCH_PLURAL": "Birch logs",
"BLOCK_TRUNK_BLOODROSE": "Rosewood log",
"BLOCK_TRUNK_BLOODROSE_PLURAL": "Rosewood logs",
"BLOCK_STONE_QUARRIED": "Quarried stone",
"BLOCK_STONE_QUARRIED_PLURAL": "Quarried stones",
"BLOCK_SAND": "Sand",
"BLOCK_SAND_PLURAL": "Sands",
"BLOCK_SAND_WHITE": "White sand",
"BLOCK_SAND_WHITE_PLURAL": "White sands",
"BLOCK_SAND_RED": "Red sand",
"BLOCK_SAND_RED_PLURAL": "Red sands",
"BLOCK_SAND_DESERT": "Sand",
"BLOCK_SAND_DESERT_PLURAL": "Sands",
"BLOCK_SAND_BLACK": "Black sand",
"BLOCK_SAND_BLACK_PLURAL": "Black sands",
"BLOCK_SAND_GREEN": "Green sand",
"BLOCK_SAND_GREEN_PLURAL": "Green sands",
"BLOCK_GRAVEL": "Gravel",
"BLOCK_GRAVEL_PLURAL": "Gravels",
"BLOCK_ORE_MALACHITE": "Malachite",
"BLOCK_ORE_MALACHITES": "Malachites",
"BLOCK_ORE_HEMATITE": "Hematite",
"BLOCK_ORE_HEMATITE_PLURAL": "Hematites",
"BLOCK_ORE_NATURAL_GOLD": "Natural gold",
"BLOCK_ORE_NATERAL_GOLD_PLURAL": "Natural golds",
"BLOCK_ORE_NATURAL_SILVER": "Natural silver",
"BLOCK_ORE_NATURAL_SILVER_PLURAL": "Natural silvers",
"BLOCK_ORE_RUTILE": "Rutile",
"BLOCK_ORE_RUTILE_PLURAL": "Rutiles",
"BLOCK_ORE_AURICHALCUMITE": "Aurichalcumite",
"BLOCK_ORE_AURICHALCUMITE_PLURAL": "Aurichalcumites",
"BLOCK_GEM_RUBY": "Raw ruby",
"BLOCK_GEM_RUBY_PLURAL": "Raw rubies",
"BLOCK_GEM_EMERALD": "Raw emerald",
"BLOCK_GEM_EMERALD_PLURAL": "Raw emeralds",
"BLOCK_GEM_SAPPHIRE": "Raw sapphire",
"BLOCK_GEM_SAPPHIRE_PLURAL": "Raw sapphires",
"BLOCK_GEM_TOPAZ": "Raw topaz",
"BLOCK_GEM_TOPAZ_PLURAL": "Raw topazes",
"BLOCK_GEM_DIAMOND": "Raw diamond",
"BLOCK_GEM_DIAMOND_PLURAL": "Raw diamonds",
"BLOCK_GEM_AMETHYST": "Raw amethyst",
"BLOCK_GEM_AMETHYST_PLURAL": "Raw amethysts",
"BLOCK_SNOW": "Snow",
"BLOCK_SNOW_PLURAL": "Snows",
"BLOCK_ICE_FRAGILE": "Thin ice",
"BLOCK_ICE_FRAGILE_PLURAL": "Thin ices",
"BLOCK_ICE_NATURAL": "Ice",
"BLOCK_ICE_NATURAL_PLURAL": "Ices",
"BLOCK_ICE_CLEAR_MAGICAL": "Clear ice",
"BLOCK_ICE_CLEAR_MAGICAL_PLURAL": "Clear ices",
"BLOCK_PLATFORM_STONE": "Stone platform",
"BLOCK_PLATFORM_STONE_PLURAL": "Stone platforms",
"BLOCK_PLATFORM_WOODEN": "Wooden platform",
"BLOCK_PLATFORM_WOODEN_PLURAL": "Wooden platforms",
"BLOCK_PLATFORM_EBONY": "Ebony platform",
"BLOCK_PLATFORM_EBONY_PLURAL": "Ebony platforms",
"BLOCK_PLATFORM_BIRCH": "Birch platform",
"BLOCK_PLATFORM_BIRCH_PLURAL": "Birch platforms",
"BLOCK_PLATFORM_BLOODROSE": "Rosewood platform",
"BLOCK_PLATFORM_BLOODROSE_PLURAL": "Rosewood platforms",
"BLOCK_TORCH": "Torch",
"BLOCK_TORCH_PLURAL": "Torches",
"BLOCK_SANDSTONE": "Sandstone",
"BLOCK_SANDSTONE_PLURAL": "Sandstones",
"BLOCK_SANDSTONE_WHITE": "White sandstone",
"BLOCK_SANDSTONE_WHITE_PLURAL": "White sandstones",
"BLOCK_SANDSTONE_RED": "Red sandstone",
"BLOCK_SANDSTONE_RED_PLURAL": "Red sandstones",
"BLOCK_SANDSTONE_DESERT": "Sandstone",
"BLOCK_SANDSTONE_DESERT_PLURAL": "Sandstones",
"BLOCK_SANDSTONE_BLACK": "Black sandstone",
"BLOCK_SANDSTONE_BLACK_PLURAL": "Black sandstones",
"BLOCK_SANDSTONE_GREEN": "Green sandstone",
"BLOCK_SANDSTONE_GREEN_PLURAL": "Green sandstones",
"BLOCK_WATER": "Water",
"BLOCK_WATER_PLURAL": "Waters",
"BLOCK_LAVA": "Lava",
"BLOCK_LAVA_PLURAL": "Lavas"
}

View File

@@ -1,100 +0,0 @@
{
"TILE_STONE": "Stone",
"TILE_STONE_PLURAL": "Stones",
"TILE_DIRT": "Dirt",
"TILE_DIRT_PLURAL": "Dirts",
"TILE_GRASS": "Grass",
"TILE_GRAS_PLURALS": "Grasses",
"TILE_PLANK_NORMAL": "Wooden planks",
"TILE_PLANK_NORMAL_PLURAL": "Wooden planks",
"TILE_PLANK_EBONY": "Ebony planks",
"TILE_PLANK_EBONY_PLURAL": "Ebony planks",
"TILE_PLANK_BIRCH": "Birch planks",
"TILE_PLANK_BIRCH_PLURAL": "Birch planks",
"TILE_PLANK_BLOODROSE": "Rosewood planks",
"TILE_PLANK_BLOODROSE_PLURAL": "Rosewood planks",
"TILE_TRUNK_NORMAL": "Oak log",
"TILE_TRUNK_NORMAL_PLURAL": "Oak logs",
"TILE_TRUNK_EBONY": "Ebony log",
"TILE_TRUNK_EBONY_PLURAL": "Ebony logs",
"TILE_TRUNK_BIRCH": "Birch log",
"TILE_TRUNK_BIRCH_PLURAL": "Birch logs",
"TILE_TRUNK_BLOODROSE": "Rosewood log",
"TILE_TRUNK_BLOODROSE_PLURAL": "Rosewood logs",
"TILE_STONE_QUARRIED": "Quarried stone",
"TILE_STONE_QUARRIED_PLURAL": "Quarried stones",
"TILE_SAND": "Sand",
"TILE_SAND_PLURAL": "Sands",
"TILE_SAND_WHITE": "White sand",
"TILE_SAND_WHITE_PLURAL": "White sands",
"TILE_SAND_RED": "Red sand",
"TILE_SAND_RED_PLURAL": "Red sands",
"TILE_SAND_DESERT": "Sand",
"TILE_SAND_DESERT_PLURAL": "Sands",
"TILE_SAND_BLACK": "Black sand",
"TILE_SAND_BLACK_PLURAL": "Black sands",
"TILE_SAND_GREEN": "Green sand",
"TILE_SAND_GREEN_PLURAL": "Green sands",
"TILE_GRAVEL": "Gravel",
"TILE_GRAVEL_PLURAL": "Gravels",
"TILE_ORE_MALACHITE": "Malachite",
"TILE_ORE_MALACHITES": "Malachites",
"TILE_ORE_HEMATITE": "Hematite",
"TILE_ORE_HEMATITE_PLURAL": "Hematites",
"TILE_ORE_NATURAL_GOLD": "Natural gold",
"TILE_ORE_NATERAL_GOLD_PLURAL": "Natural golds",
"TILE_ORE_NATURAL_SILVER": "Natural silver",
"TILE_ORE_NATURAL_SILVER_PLURAL": "Natural silvers",
"TILE_ORE_RUTILE": "Rutile",
"TILE_ORE_RUTILE_PLURAL": "Rutiles",
"TILE_ORE_AURICHALCUMITE": "Aurichalcumite",
"TILE_ORE_AURICHALCUMITE_PLURAL": "Aurichalcumites",
"TILE_GEM_RUBY": "Raw ruby",
"TILE_GEM_RUBY_PLURAL": "Raw rubies",
"TILE_GEM_EMERALD": "Raw emerald",
"TILE_GEM_EMERALD_PLURAL": "Raw emeralds",
"TILE_GEM_SAPPHIRE": "Raw sapphire",
"TILE_GEM_SAPPHIRE_PLURAL": "Raw sapphires",
"TILE_GEM_TOPAZ": "Raw topaz",
"TILE_GEM_TOPAZ_PLURAL": "Raw topazes",
"TILE_GEM_DIAMOND": "Raw diamond",
"TILE_GEM_DIAMOND_PLURAL": "Raw diamonds",
"TILE_GEM_AMETHYST": "Raw amethyst",
"TILE_GEM_AMETHYST_PLURAL": "Raw amethysts",
"TILE_SNOW": "Snow",
"TILE_SNOW_PLURAL": "Snows",
"TILE_ICE_FRAGILE": "Thin ice",
"TILE_ICE_FRAGILE_PLURAL": "Thin ices",
"TILE_ICE_NATURAL": "Ice",
"TILE_ICE_NATURAL_PLURAL": "Ices",
"TILE_ICE_CLEAR_MAGICAL": "Clear ice",
"TILE_ICE_CLEAR_MAGICAL_PLURAL": "Clear ices",
"TILE_PLATFORM_STONE": "Stone platform",
"TILE_PLATFORM_STONE_PLURAL": "Stone platforms",
"TILE_PLATFORM_WOODEN": "Wooden platform",
"TILE_PLATFORM_WOODEN_PLURAL": "Wooden platforms",
"TILE_PLATFORM_EBONY": "Ebony platform",
"TILE_PLATFORM_EBONY_PLURAL": "Ebony platforms",
"TILE_PLATFORM_BIRCH": "Birch platform",
"TILE_PLATFORM_BIRCH_PLURAL": "Birch platforms",
"TILE_PLATFORM_BLOODROSE": "Rosewood platform",
"TILE_PLATFORM_BLOODROSE_PLURAL": "Rosewood platforms",
"TILE_TORCH": "Torch",
"TILE_TORCH_PLURAL": "Torches",
"TILE_SANDSTONE": "Sandstone",
"TILE_SANDSTONE_PLURAL": "Sandstones",
"TILE_SANDSTONE_WHITE": "White sandstone",
"TILE_SANDSTONE_WHITE_PLURAL": "White sandstones",
"TILE_SANDSTONE_RED": "Red sandstone",
"TILE_SANDSTONE_RED_PLURAL": "Red sandstones",
"TILE_SANDSTONE_DESERT": "Sandstone",
"TILE_SANDSTONE_DESERT_PLURAL": "Sandstones",
"TILE_SANDSTONE_BLACK": "Black sandstone",
"TILE_SANDSTONE_BLACK_PLURAL": "Black sandstones",
"TILE_SANDSTONE_GREEN": "Green sandstone",
"TILE_SANDSTONE_GREEN_PLURAL": "Green sandstones",
"TILE_WATER": "Water",
"TILE_WATER_PLURAL": "Waters",
"TILE_LAVA": "Lava",
"TILE_LAVA_PLURAL": "Lavas"
}

View File

@@ -0,0 +1,78 @@
{
"BLOCK_STONE": "돌",
"BLOCK_STONE_PLURAL": "돌",
"BLOCK_DIRT": "흙",
"BLOCK_DIRT_PLURAL": "흙",
"BLOCK_GRASS": "잔디",
"BLOCK_GRAS_PLURALS": "잔디",
"BLOCK_PLANK_NORMAL": "나무판자",
"BLOCK_PLANK_NORMAL_PLURAL": "나무판자",
"BLOCK_PLANK_EBONY": "검정 나무판자",
"BLOCK_PLANK_EBONY_PLURAL": "검정 나무판자",
"BLOCK_PLANK_BIRCH": "하양 나무판자",
"BLOCK_PLANK_BIRCH_PLURAL": "하양 나무판자",
"BLOCK_PLANK_BLOODROSE": "빨강 나무판자",
"BLOCK_PLANK_BLOODROSE_PLURAL": "빨강 나무판자",
"BLOCK_TRUNK_NORMAL": "통나무",
"BLOCK_TRUNK_NORMAL_PLURAL": "통나무",
"BLOCK_TRUNK_EBONY": "흑단나무",
"BLOCK_TRUNK_EBONY_PLURAL": "흑단나무",
"BLOCK_TRUNK_BIRCH": "자작나무",
"BLOCK_TRUNK_BIRCH_PLURAL": "자작나무",
"BLOCK_TRUNK_BLOODROSE": "자단나무",
"BLOCK_TRUNK_BLOODROSE_PLURAL": "자단나무",
"BLOCK_STONE_QUARRIED": "석재",
"BLOCK_STONE_QUARRIED_PLURAL": "석재",
"BLOCK_SAND": "모래",
"BLOCK_SAND_PLURAL": "모래",
"BLOCK_GRAVEL": "자갈",
"BLOCK_GRAVEL_PLURAL": "자갈",
"BLOCK_ORE_MALACHITE": "공작석",
"BLOCK_ORE_MALACHITES": "공작석",
"BLOCK_ORE_HEMATITE": "적철석",
"BLOCK_ORE_HEMATITE_PLURAL": "적철석",
"BLOCK_ORE_NATURAL_GOLD": "자연금",
"BLOCK_ORE_NATERAL_GOLD_PLURAL": "자연금",
"BLOCK_ORE_NATURAL_SILVER": "자연은",
"BLOCK_ORE_NATURAL_SILVER_PLURAL": "자연은",
"BLOCK_ORE_RUTILE": "금홍석",
"BLOCK_ORE_RUTILE_PLURAL": "금홍석",
"BLOCK_ORE_AURICHALCUMITE": "진금석",
"BLOCK_ORE_AURICHALCUMITE_PLURAL": "진금석",
"BLOCK_GEM_RUBY": "홍옥석",
"BLOCK_GEM_RUBY_PLURAL": "홍옥석",
"BLOCK_GEM_EMERALD": "취옥석",
"BLOCK_GEM_EMERALD_PLURAL": "취옥석",
"BLOCK_GEM_SAPPHIRE": "청옥석",
"BLOCK_GEM_SAPPHIRE_PLURAL": "청옥석",
"BLOCK_GEM_TOPAZ": "황옥석",
"BLOCK_GEM_TOPAZ_PLURAL": "황옥석",
"BLOCK_GEM_DIAMOND": "금강석",
"BLOCK_GEM_DIAMOND_PLURAL": "금강석",
"BLOCK_GEM_AMETHYST": "자수정석",
"BLOCK_GEM_AMETHYST_PLURAL": "자수정석",
"BLOCK_SNOW": "눈",
"BLOCK_SNOW_PLURAL": "눈",
"BLOCK_ICE_FRAGILE": "살얼음",
"BLOCK_ICE_FRAGILE_PLURAL": "살얼음",
"BLOCK_ICE_NATURAL": "얼음",
"BLOCK_ICE_NATURAL_PLURAL": "얼음",
"BLOCK_ICE_CLEAR_MAGICAL": "깨끗한 얼음",
"BLOCK_ICE_CLEAR_MAGICAL_PLURAL": "깨끗한 얼음",
"BLOCK_PLATFORM_STONE": "돌 발판",
"BLOCK_PLATFORM_STONE_PLURAL": "돌 발판",
"BLOCK_PLATFORM_WOODEN": "나무 발판",
"BLOCK_PLATFORM_WOODEN_PLURAL": "나무 발판",
"BLOCK_PLATFORM_EBONY": "흑단 발판",
"BLOCK_PLATFORM_EBONY_PLURAL": "흑단 발판",
"BLOCK_PLATFORM_BIRCH": "백단 발판",
"BLOCK_PLATFORM_BIRCH_PLURAL": "백단 발판",
"BLOCK_PLATFORM_BLOODROSE": "적단 발판",
"BLOCK_PLATFORM_BLOODROSE_PLURAL": "적단 발판",
"BLOCK_TORCH": "횃불",
"BLOCK_TORCH_PLURAL": "횃불",
"BLOCK_WATER": "물",
"BLOCK_WATER_PLURAL": "물",
"BLOCK_LAVA": "용암",
"BLOCK_LAVA_PLURAL": "용암"
}

View File

@@ -1,78 +0,0 @@
{
"TILE_STONE": "돌",
"TILE_STONE_PLURAL": "돌",
"TILE_DIRT": "흙",
"TILE_DIRT_PLURAL": "흙",
"TILE_GRASS": "잔디",
"TILE_GRAS_PLURALS": "잔디",
"TILE_PLANK_NORMAL": "나무판자",
"TILE_PLANK_NORMAL_PLURAL": "나무판자",
"TILE_PLANK_EBONY": "검정 나무판자",
"TILE_PLANK_EBONY_PLURAL": "검정 나무판자",
"TILE_PLANK_BIRCH": "하양 나무판자",
"TILE_PLANK_BIRCH_PLURAL": "하양 나무판자",
"TILE_PLANK_BLOODROSE": "빨강 나무판자",
"TILE_PLANK_BLOODROSE_PLURAL": "빨강 나무판자",
"TILE_TRUNK_NORMAL": "통나무",
"TILE_TRUNK_NORMAL_PLURAL": "통나무",
"TILE_TRUNK_EBONY": "흑단나무",
"TILE_TRUNK_EBONY_PLURAL": "흑단나무",
"TILE_TRUNK_BIRCH": "자작나무",
"TILE_TRUNK_BIRCH_PLURAL": "자작나무",
"TILE_TRUNK_BLOODROSE": "자단나무",
"TILE_TRUNK_BLOODROSE_PLURAL": "자단나무",
"TILE_STONE_QUARRIED": "석재",
"TILE_STONE_QUARRIED_PLURAL": "석재",
"TILE_SAND": "모래",
"TILE_SAND_PLURAL": "모래",
"TILE_GRAVEL": "자갈",
"TILE_GRAVEL_PLURAL": "자갈",
"TILE_ORE_MALACHITE": "공작석",
"TILE_ORE_MALACHITES": "공작석",
"TILE_ORE_HEMATITE": "적철석",
"TILE_ORE_HEMATITE_PLURAL": "적철석",
"TILE_ORE_NATURAL_GOLD": "자연금",
"TILE_ORE_NATERAL_GOLD_PLURAL": "자연금",
"TILE_ORE_NATURAL_SILVER": "자연은",
"TILE_ORE_NATURAL_SILVER_PLURAL": "자연은",
"TILE_ORE_RUTILE": "금홍석",
"TILE_ORE_RUTILE_PLURAL": "금홍석",
"TILE_ORE_AURICHALCUMITE": "진금석",
"TILE_ORE_AURICHALCUMITE_PLURAL": "진금석",
"TILE_GEM_RUBY": "홍옥석",
"TILE_GEM_RUBY_PLURAL": "홍옥석",
"TILE_GEM_EMERALD": "취옥석",
"TILE_GEM_EMERALD_PLURAL": "취옥석",
"TILE_GEM_SAPPHIRE": "청옥석",
"TILE_GEM_SAPPHIRE_PLURAL": "청옥석",
"TILE_GEM_TOPAZ": "황옥석",
"TILE_GEM_TOPAZ_PLURAL": "황옥석",
"TILE_GEM_DIAMOND": "금강석",
"TILE_GEM_DIAMOND_PLURAL": "금강석",
"TILE_GEM_AMETHYST": "자수정석",
"TILE_GEM_AMETHYST_PLURAL": "자수정석",
"TILE_SNOW": "눈",
"TILE_SNOW_PLURAL": "눈",
"TILE_ICE_FRAGILE": "살얼음",
"TILE_ICE_FRAGILE_PLURAL": "살얼음",
"TILE_ICE_NATURAL": "얼음",
"TILE_ICE_NATURAL_PLURAL": "얼음",
"TILE_ICE_CLEAR_MAGICAL": "깨끗한 얼음",
"TILE_ICE_CLEAR_MAGICAL_PLURAL": "깨끗한 얼음",
"TILE_PLATFORM_STONE": "돌 발판",
"TILE_PLATFORM_STONE_PLURAL": "돌 발판",
"TILE_PLATFORM_WOODEN": "나무 발판",
"TILE_PLATFORM_WOODEN_PLURAL": "나무 발판",
"TILE_PLATFORM_EBONY": "흑단 발판",
"TILE_PLATFORM_EBONY_PLURAL": "흑단 발판",
"TILE_PLATFORM_BIRCH": "백단 발판",
"TILE_PLATFORM_BIRCH_PLURAL": "백단 발판",
"TILE_PLATFORM_BLOODROSE": "적단 발판",
"TILE_PLATFORM_BLOODROSE_PLURAL": "적단 발판",
"TILE_TORCH": "횃불",
"TILE_TORCH_PLURAL": "횃불",
"TILE_WATER": "물",
"TILE_WATER_PLURAL": "물",
"TILE_LAVA": "용암",
"TILE_LAVA_PLURAL": "용암"
}

View File

@@ -5,5 +5,6 @@ import net.torvald.terrarum.ModMgr
*/ */
static void invoke(String module) { static void invoke(String module) {
ModMgr.GameBlockLoader.invoke(module)
ModMgr.GameItemLoader.invoke(module) ModMgr.GameItemLoader.invoke(module)
} }

View File

@@ -0,0 +1,171 @@
"id";"sid";"name" ; "opacity";"strength";"dsty";"mate";"fluid";"solid";"wall"; "lumcolor";"drop";"ddmg";"fall";"dlfn";"vscs";"fv";"friction"
"0"; "0";"BLOCK_AIR" ; "8396808"; "1"; "1";"null"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "N/A"; "0";"4"
"1"; "0";"BLOCK_STONE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "1"; "0"; "1"; "0"; "0"; "0"; "N/A"; "0";"16"
"1"; "1";"BLOCK_STONE_QUARRIED" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "1"; "0"; "1"; "1"; "0"; "0"; "N/A"; "0";"16"
"1"; "2";"BLOCK_STONE_TILE_WHITE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "1"; "0"; "1"; "2"; "0"; "0"; "N/A"; "0";"16"
"1"; "3";"BLOCK_STONE_BRICKS" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "1"; "0"; "1"; "3"; "0"; "0"; "N/A"; "0";"16"
"2"; "0";"BLOCK_DIRT" ; "33587232"; "24";"1400";"dirt"; "0"; "1"; "1"; "0"; "2"; "0"; "0"; "0"; "N/A"; "0";"16"
"2"; "1";"BLOCK_GRASS" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "2"; "1"; "0"; "0"; "N/A"; "0";"16"
"2"; "2";"BLOCK_FOLIAGE_GREEN" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "2"; "2"; "0"; "0"; "N/A"; "0";"16"
"2"; "3";"BLOCK_FOLIAGE_LIME" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "2"; "3"; "0"; "0"; "N/A"; "0";"16"
"2"; "4";"BLOCK_FOLIAGE_GOLD" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "2"; "4"; "0"; "0"; "N/A"; "0";"16"
"2"; "5";"BLOCK_FOLIAGE_RED" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "2"; "5"; "0"; "0"; "N/A"; "0";"16"
"2"; "6";"BLOCK_FOLIAGE_ICEBLUE" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "2"; "6"; "0"; "0"; "N/A"; "0";"16"
"2"; "7";"BLOCK_FOLIAGE_PURPLE" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "2"; "7"; "0"; "0"; "N/A"; "0";"16"
"3"; "0";"BLOCK_PLANK_NORMAL" ; "33587232"; "16"; "740";"wood"; "0"; "1"; "1"; "0"; "3"; "0"; "0"; "0"; "N/A"; "0";"16"
"3"; "1";"BLOCK_PLANK_EBONY" ; "33587232"; "19";"1200";"wood"; "0"; "1"; "1"; "0"; "3"; "1"; "0"; "0"; "N/A"; "0";"16"
"3"; "2";"BLOCK_PLANK_BIRCH" ; "33587232"; "15"; "670";"wood"; "0"; "1"; "1"; "0"; "3"; "2"; "0"; "0"; "N/A"; "0";"16"
"3"; "3";"BLOCK_PLANK_BLOODROSE" ; "33587232"; "17"; "900";"wood"; "0"; "1"; "1"; "0"; "3"; "3"; "0"; "0"; "N/A"; "0";"16"
"4"; "0";"BLOCK_TRUNK_NORMAL" ; "33587232"; "16"; "740";"wood"; "0"; "1"; "0"; "0"; "3"; "0"; "0"; "0"; "N/A"; "0";"16"
"4"; "1";"BLOCK_TRUNK_EBONY" ; "33587232"; "19";"1200";"wood"; "0"; "1"; "0"; "0"; "3"; "1"; "0"; "0"; "N/A"; "0";"16"
"4"; "2";"BLOCK_TRUNK_BIRCH" ; "33587232"; "15"; "670";"wood"; "0"; "1"; "0"; "0"; "3"; "2"; "0"; "0"; "N/A"; "0";"16"
"4"; "3";"BLOCK_TRUNK_BLOODROSE" ; "33587232"; "17"; "900";"wood"; "0"; "1"; "0"; "0"; "3"; "3"; "0"; "0"; "N/A"; "0";"16"
"5"; "0";"BLOCK_SAND" ; "33587232"; "24";"2400";"sand"; "0"; "1"; "0"; "0"; "5"; "0"; "1"; "0"; "N/A"; "0";"16"
"5"; "1";"BLOCK_SAND_WHITE" ; "33587232"; "24";"2400";"sand"; "0"; "1"; "0"; "0"; "5"; "1"; "1"; "0"; "N/A"; "0";"16"
"5"; "2";"BLOCK_SAND_RED" ; "33587232"; "24";"2400";"sand"; "0"; "1"; "0"; "0"; "5"; "2"; "1"; "0"; "N/A"; "0";"16"
"5"; "3";"BLOCK_SAND_DESERT" ; "33587232"; "24";"2400";"sand"; "0"; "1"; "0"; "0"; "5"; "3"; "1"; "0"; "N/A"; "0";"16"
"5"; "4";"BLOCK_SAND_BLACK" ; "33587232"; "24";"2400";"sand"; "0"; "1"; "0"; "0"; "5"; "4"; "1"; "0"; "N/A"; "0";"16"
"5"; "5";"BLOCK_SAND_GREEN" ; "33587232"; "24";"2400";"sand"; "0"; "1"; "0"; "0"; "5"; "5"; "1"; "0"; "N/A"; "0";"16"
"6"; "0";"BLOCK_GRAVEL" ; "33587232"; "24";"2400";"grvl"; "0"; "1"; "0"; "0"; "6"; "0"; "1"; "0"; "N/A"; "0";"16"
"6"; "1";"BLOCK_GRAVEL_GREY" ; "33587232"; "24";"2400";"grvl"; "0"; "1"; "0"; "0"; "6"; "1"; "1"; "0"; "N/A"; "0";"16"
"7"; "0";"BLOCK_ORE_MALACHITE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "7"; "0"; "0"; "0"; "N/A"; "0";"16"
"7"; "1";"BLOCK_ORE_HEMATITE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "7"; "1"; "0"; "0"; "N/A"; "0";"16"
"7"; "2";"BLOCK_ORE_NATURAL_GOLD" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "7"; "2"; "0"; "0"; "N/A"; "0";"16"
"7"; "3";"BLOCK_ORE_NATURAL_SILVER" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "7"; "3"; "0"; "0"; "N/A"; "0";"16"
"7"; "4";"BLOCK_ORE_RUTILE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "7"; "4"; "0"; "0"; "N/A"; "0";"16"
"7"; "5";"BLOCK_ORE_AURICHALCUMITE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "7"; "5"; "0"; "0"; "N/A"; "0";"16"
"8"; "0";"BLOCK_GEM_RUBY" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "8"; "0"; "0"; "0"; "N/A"; "0";"16"
"8"; "1";"BLOCK_GEM_EMERALD" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "8"; "1"; "0"; "0"; "N/A"; "0";"16"
"8"; "2";"BLOCK_GEM_SAPPHIRE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "8"; "2"; "0"; "0"; "N/A"; "0";"16"
"8"; "3";"BLOCK_GEM_TOPAZ" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "8"; "3"; "0"; "0"; "N/A"; "0";"16"
"8"; "4";"BLOCK_GEM_DIAMOND" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "8"; "4"; "0"; "0"; "N/A"; "0";"16"
"8"; "5";"BLOCK_GEM_AMETHYST" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "8"; "5"; "0"; "0"; "N/A"; "0";"16"
"9"; "0";"BLOCK_SNOW" ; "33587232"; "24"; "500";"snow"; "0"; "1"; "1"; "0"; "9"; "0"; "0"; "0"; "N/A"; "0";"16"
"9"; "1";"BLOCK_ICE_FRAGILE" ; "13644813"; "5"; "930";"icei"; "0"; "1"; "0"; "0"; "9"; "1"; "0"; "0"; "N/A"; "0"; "4"
"9"; "2";"BLOCK_ICE_NATURAL" ; "27289626"; "35"; "930";"icei"; "0"; "1"; "1"; "0"; "9"; "2"; "0"; "0"; "N/A"; "0"; "4"
"9"; "3";"BLOCK_ICE_CLEAR_MAGICAL" ; "33587232"; "48";"3720";"icex"; "0"; "1"; "1"; "19955770"; "9"; "3"; "0"; "0"; "N/A"; "0"; "4"
"9"; "4";"BLOCK_GLASS_CRUDE" ; "3146755"; "5";"2500";"glas"; "0"; "1"; "1"; "0"; "9"; "4"; "0"; "0"; "N/A"; "0";"16"
"9"; "5";"BLOCK_GLASS_CLEAN" ; "1049601"; "5";"2203";"glas"; "0"; "1"; "1"; "0"; "9"; "5"; "0"; "0"; "N/A"; "0";"16"
"10"; "0";"BLOCK_PLATFORM_STONE" ; "8396808"; "5"; "N/A";"rock"; "0"; "0"; "0"; "0"; "10"; "0"; "0"; "0"; "N/A"; "0";"16"
"10"; "1";"BLOCK_PLATFORM_WOODEN" ; "8396808"; "5"; "N/A";"wood"; "0"; "0"; "0"; "0"; "10"; "1"; "0"; "0"; "N/A"; "0";"16"
"10"; "2";"BLOCK_PLATFORM_EBONY" ; "8396808"; "5"; "N/A";"wood"; "0"; "0"; "0"; "0"; "10"; "2"; "0"; "0"; "N/A"; "0";"16"
"10"; "3";"BLOCK_PLATFORM_BIRCH" ; "8396808"; "5"; "N/A";"wood"; "0"; "0"; "0"; "0"; "10"; "3"; "0"; "0"; "N/A"; "0";"16"
"10"; "4";"BLOCK_PLATFORM_BLOODROSE" ; "8396808"; "5"; "N/A";"wood"; "0"; "0"; "0"; "0"; "10"; "4"; "0"; "0"; "N/A"; "0";"16"
"11"; "0";"BLOCK_TORCH" ; "8396808"; "1"; "N/A";"fxtr"; "0"; "0"; "0"; "267553792"; "11"; "0"; "0"; "1"; "N/A"; "0";"16"
"11"; "1";"BLOCK_TORCH_FROST" ; "8396808"; "1"; "N/A";"fxtr"; "0"; "0"; "0"; "81916159"; "11"; "1"; "0"; "1"; "N/A"; "0";"16"
"12"; "0";"BLOCK_TORCH" ; "8396808"; "1"; "N/A";"fxtr"; "0"; "0"; "0"; "0"; "11"; "0"; "0"; "0"; "N/A"; "0";"16"
"12"; "1";"BLOCK_TORCH_FROST" ; "8396808"; "1"; "N/A";"fxtr"; "0"; "0"; "0"; "0"; "11"; "1"; "0"; "0"; "N/A"; "0";"16"
"13"; "0";"BLOCK_ILLUMINATOR_WHITE" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "239319274"; "13"; "0"; "0"; "0"; "N/A"; "0";"16"
"13"; "1";"BLOCK_ILLUMINATOR_YELLOW" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "267607040"; "13"; "1"; "0"; "0"; "N/A"; "0";"16"
"13"; "2";"BLOCK_ILLUMINATOR_ORANGE" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "267546624"; "13"; "2"; "0"; "0"; "N/A"; "0";"16"
"13"; "3";"BLOCK_ILLUMINATOR_RED" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "246415360"; "13"; "3"; "0"; "0"; "N/A"; "0";"16"
"13"; "4";"BLOCK_ILLUMINATOR_FUCHSIA" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "246415543"; "13"; "4"; "0"; "0"; "N/A"; "0";"16"
"13"; "5";"BLOCK_ILLUMINATOR_PURPLE" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "191889643"; "13"; "5"; "0"; "0"; "N/A"; "0";"16"
"13"; "6";"BLOCK_ILLUMINATOR_BLUE" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "52479"; "13"; "6"; "0"; "0"; "N/A"; "0";"16"
"13"; "7";"BLOCK_ILLUMINATOR_CYAN" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "219391"; "13"; "7"; "0"; "0"; "N/A"; "0";"16"
"13"; "8";"BLOCK_ILLUMINATOR_GREEN" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "56884224"; "13"; "8"; "0"; "0"; "N/A"; "0";"16"
"13"; "9";"BLOCK_ILLUMINATOR_GREEN_DARK";"8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "33660928"; "13"; "9"; "0"; "0"; "N/A"; "0";"16"
"13"; "10";"BLOCK_ILLUMINATOR_BROWN" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "89161728"; "13"; "10"; "0"; "0"; "N/A"; "0";"16"
"13"; "11";"BLOCK_ILLUMINATOR_TAN" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "157392948"; "13"; "11"; "0"; "0"; "N/A"; "0";"16"
"13"; "12";"BLOCK_ILLUMINATOR_GREY_LIGHT";"8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "198374589"; "13"; "12"; "0"; "0"; "N/A"; "0";"16"
"13"; "13";"BLOCK_ILLUMINATOR_GREY_MED"; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "122803317"; "13"; "13"; "0"; "0"; "N/A"; "0";"16"
"13"; "14";"BLOCK_ILLUMINATOR_GREY_DARK"; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "68224065"; "13"; "14"; "0"; "0"; "N/A"; "0";"16"
"13"; "15";"BLOCK_ILLUMINATOR_BLACK" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "116392191"; "13"; "15"; "0"; "0"; "N/A"; "0";"16"
"14"; "0";"BLOCK_ILLUMINATOR_WHITE" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "0"; "0"; "0"; "N/A"; "0";"16"
"14"; "1";"BLOCK_ILLUMINATOR_YELLOW" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "1"; "0"; "0"; "N/A"; "0";"16"
"14"; "2";"BLOCK_ILLUMINATOR_ORANGE" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "2"; "0"; "0"; "N/A"; "0";"16"
"14"; "3";"BLOCK_ILLUMINATOR_RED" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "3"; "0"; "0"; "N/A"; "0";"16"
"14"; "4";"BLOCK_ILLUMINATOR_FUCHSIA" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "4"; "0"; "0"; "N/A"; "0";"16"
"14"; "5";"BLOCK_ILLUMINATOR_PURPLE" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "5"; "0"; "0"; "N/A"; "0";"16"
"14"; "6";"BLOCK_ILLUMINATOR_BLUE" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "6"; "0"; "0"; "N/A"; "0";"16"
"14"; "7";"BLOCK_ILLUMINATOR_CYAN" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "7"; "0"; "0"; "N/A"; "0";"16"
"14"; "8";"BLOCK_ILLUMINATOR_GREEN" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "8"; "0"; "0"; "N/A"; "0";"16"
"14"; "9";"BLOCK_ILLUMINATOR_GREEN_DARK";"33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "9"; "0"; "0"; "N/A"; "0";"16"
"14"; "10";"BLOCK_ILLUMINATOR_BROWN" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "10"; "0"; "0"; "N/A"; "0";"16"
"14"; "11";"BLOCK_ILLUMINATOR_TAN" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "11"; "0"; "0"; "N/A"; "0";"16"
"14"; "12";"BLOCK_ILLUMINATOR_GREY_LIGHT";"33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "12"; "0"; "0"; "N/A"; "0";"16"
"14"; "13";"BLOCK_ILLUMINATOR_GREY_MED"; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "13"; "0"; "0"; "N/A"; "0";"16"
"14"; "14";"BLOCK_ILLUMINATOR_GREY_DARK";"33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "14"; "0"; "0"; "N/A"; "0";"16"
"14"; "15";"BLOCK_ILLUMINATOR_BLACK" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "15"; "0"; "0"; "N/A"; "0";"16"
"15"; "0";"BLOCK_SANDSTONE" ; "33587232"; "48";"1900";"rock"; "0"; "1"; "1"; "0"; "15"; "0"; "0"; "0"; "N/A"; "0";"16"
"15"; "1";"BLOCK_SANDSTONE_WHITE" ; "33587232"; "48";"1900";"rock"; "0"; "1"; "1"; "0"; "15"; "1"; "0"; "0"; "N/A"; "0";"16"
"15"; "2";"BLOCK_SANDSTONE_RED" ; "33587232"; "48";"1900";"rock"; "0"; "1"; "1"; "0"; "15"; "2"; "0"; "0"; "N/A"; "0";"16"
"15"; "3";"BLOCK_SANDSTONE_DESERT" ; "33587232"; "48";"1900";"rock"; "0"; "1"; "1"; "0"; "15"; "3"; "0"; "0"; "N/A"; "0";"16"
"15"; "4";"BLOCK_SANDSTONE_BLACK" ; "33587232"; "48";"1900";"rock"; "0"; "1"; "1"; "0"; "15"; "4"; "0"; "0"; "N/A"; "0";"16"
"15"; "5";"BLOCK_SANDSTONE_GREEN" ; "33587232"; "48";"1900";"rock"; "0"; "1"; "1"; "0"; "15"; "5"; "0"; "0"; "N/A"; "0";"16"
"16"; "0";"BLOCK_LANTERN_IRON_REGULAR"; "8396808"; "1"; "N/A";"fxtr"; "0"; "0"; "0"; "267553792"; "16"; "0"; "0"; "0"; "N/A"; "0";"16"
"16"; "1";"BLOCK_SUNSTONE" ; "33587232"; "1"; "N/A";"rock"; "0"; "1"; "0"; "0"; "16"; "1"; "0"; "2"; "N/A"; "0";"16"
"16"; "2";"BLOCK_DAYLIGHT_CAPACITOR" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "0"; "0"; "16"; "2"; "0"; "3"; "N/A"; "0";"16"
"254"; "0";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "1";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "2";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "3";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "4";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "5";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "6";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "7";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "8";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "9";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "10";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "11";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "12";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "13";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "14";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "15";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"255"; "0";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "1";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "2";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "3";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "4";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "5";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "6";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "7";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "8";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "9";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "10";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "11";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "12";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "13";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "14";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "15";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"0"; "-1";"BLOCK_NULL" ;"1073741823"; "-1";"2600";"null"; "0"; "0"; "1"; "0"; "N/A"; "N/A"; "0"; "0"; "N/A"; "0";"16"
## Notes ##
# Friction: 0: frictionless, <16: slippery, 16: regular, >16: sticky
# Opacity/Lumcolor: 30-bit RGB. Only the light diffusers have a opacity value of ZERO.
# Solid: whether the tile has full collision
# vscs: viscosity, (velocity) / (1 + (n/16)), 16 halves movement speed, can be used to non-fluid tiles (sticky hazard, tarmac road in Terraria)
# dsty: density. As we are putting water an 1000, it is identical to specific gravity. [g/l]
# dlfn: dynamic luminosity function.
# 0-static, 1-torch flicker, 2-current global light (sun, star, moon), 3-daylight at noon,
# 4-slow breath, 5-pulsate
# mate: material, four-letter code
# fv: vertical friction (boolean)
## Illuminators ##
# Illuminator white: RGB(228,238,234), simulation of a halophosphate FL lamp (If you want high CRI lamp, collect a daylight!)
# Defalut torch : Y 64 x 0.55183 y 0.40966 (Planckian ~1 770 K); real candlelight colour taken from Spyder5 colorimeter (for I couldn't afford i1DisplayPro/Colormunki)
# Sunstone: Artificial sunlight, change colour over time in sync with sunlight. The light is set by game's code.
# Sunlight capacitor: daylight at noon. Set by game's code.
## Tiles ##
# 16 colour palette : games's 16-colour palette
# Magical ice: theoretical __metallic__ ice that might form under super-high pressure (> 5 TPa). Its density is a wild guess.
## 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

@@ -8,10 +8,12 @@ import net.torvald.point.Point2d
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.gameactors.AVKey
import net.torvald.terrarum.gameactors.ActorWithPhysics import net.torvald.terrarum.gameactors.ActorWithPhysics
import net.torvald.terrarum.itemproperties.Calculate
import net.torvald.terrarum.itemproperties.InventoryItem import net.torvald.terrarum.itemproperties.InventoryItem
import net.torvald.terrarum.itemproperties.Material import net.torvald.terrarum.itemproperties.Material
import net.torvald.terrarum.tileproperties.Tile import net.torvald.terrarum.blockproperties.Block
// following two are NOT UNUSED!
import net.torvald.terrarum.itemproperties.InventoryItem.EquipPosition
import net.torvald.terrarum.itemproperties.InventoryItem.Category
import org.jetbrains.annotations.NotNull import org.jetbrains.annotations.NotNull
import org.newdawn.slick.GameContainer import org.newdawn.slick.GameContainer
@@ -32,8 +34,8 @@ class TestPick extends InventoryItem {
boolean stackable = true boolean stackable = true
int maxDurability = 147 int maxDurability = 147
float durability = maxDurability float durability = maxDurability
int equipPosition = 9 //EquipPosition.HAND_GRIP int equipPosition = EquipPosition.HAND_GRIP
String inventoryCategory = "tool" //Category.TOOL String inventoryCategory = Category.TOOL
// !! TEST MATERIAL !! // !! TEST MATERIAL !!
Material material = new Material(0,0,0,0,0,0,0,0,1,0.0) Material material = new Material(0,0,0,0,0,0,0,0,1,0.0)
@@ -72,7 +74,7 @@ class TestPick extends InventoryItem {
}) })
// return false if here's no tile // return false if here's no tile
if (Tile.AIR == Terrarum.ingame.world.getTileFromTerrain(mouseTileX, mouseTileY)) if (Block.AIR == Terrarum.ingame.world.getTileFromTerrain(mouseTileX, mouseTileY))
return false return false
// filter passed, do the job // filter passed, do the job

View File

@@ -1,171 +0,0 @@
"id";"sid";"name" ; "opacity";"strength";"dsty";"mate";"fluid";"solid";"wall"; "lumcolor";"drop";"ddmg";"fall";"dlfn";"vscs";"fv";"friction"
"0"; "0";"TILE_AIR" ; "8396808"; "1"; "1";"null"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "N/A"; "0";"4"
"1"; "0";"TILE_STONE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "1"; "0"; "1"; "0"; "0"; "0"; "N/A"; "0";"16"
"1"; "1";"TILE_STONE_QUARRIED" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "1"; "0"; "1"; "1"; "0"; "0"; "N/A"; "0";"16"
"1"; "2";"TILE_STONE_TILE_WHITE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "1"; "0"; "1"; "2"; "0"; "0"; "N/A"; "0";"16"
"1"; "3";"TILE_STONE_BRICKS" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "1"; "0"; "1"; "3"; "0"; "0"; "N/A"; "0";"16"
"2"; "0";"TILE_DIRT" ; "33587232"; "24";"1400";"dirt"; "0"; "1"; "1"; "0"; "2"; "0"; "0"; "0"; "N/A"; "0";"16"
"2"; "1";"TILE_GRASS" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "2"; "1"; "0"; "0"; "N/A"; "0";"16"
"2"; "2";"TILE_FOLIAGE_GREEN" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "2"; "2"; "0"; "0"; "N/A"; "0";"16"
"2"; "3";"TILE_FOLIAGE_LIME" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "2"; "3"; "0"; "0"; "N/A"; "0";"16"
"2"; "4";"TILE_FOLIAGE_GOLD" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "2"; "4"; "0"; "0"; "N/A"; "0";"16"
"2"; "5";"TILE_FOLIAGE_RED" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "2"; "5"; "0"; "0"; "N/A"; "0";"16"
"2"; "6";"TILE_FOLIAGE_ICEBLUE" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "2"; "6"; "0"; "0"; "N/A"; "0";"16"
"2"; "7";"TILE_FOLIAGE_PURPLE" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "2"; "7"; "0"; "0"; "N/A"; "0";"16"
"3"; "0";"TILE_PLANK_NORMAL" ; "33587232"; "16"; "740";"wood"; "0"; "1"; "1"; "0"; "3"; "0"; "0"; "0"; "N/A"; "0";"16"
"3"; "1";"TILE_PLANK_EBONY" ; "33587232"; "19";"1200";"wood"; "0"; "1"; "1"; "0"; "3"; "1"; "0"; "0"; "N/A"; "0";"16"
"3"; "2";"TILE_PLANK_BIRCH" ; "33587232"; "15"; "670";"wood"; "0"; "1"; "1"; "0"; "3"; "2"; "0"; "0"; "N/A"; "0";"16"
"3"; "3";"TILE_PLANK_BLOODROSE" ; "33587232"; "17"; "900";"wood"; "0"; "1"; "1"; "0"; "3"; "3"; "0"; "0"; "N/A"; "0";"16"
"4"; "0";"TILE_TRUNK_NORMAL" ; "33587232"; "16"; "740";"wood"; "0"; "1"; "0"; "0"; "3"; "0"; "0"; "0"; "N/A"; "0";"16"
"4"; "1";"TILE_TRUNK_EBONY" ; "33587232"; "19";"1200";"wood"; "0"; "1"; "0"; "0"; "3"; "1"; "0"; "0"; "N/A"; "0";"16"
"4"; "2";"TILE_TRUNK_BIRCH" ; "33587232"; "15"; "670";"wood"; "0"; "1"; "0"; "0"; "3"; "2"; "0"; "0"; "N/A"; "0";"16"
"4"; "3";"TILE_TRUNK_BLOODROSE" ; "33587232"; "17"; "900";"wood"; "0"; "1"; "0"; "0"; "3"; "3"; "0"; "0"; "N/A"; "0";"16"
"5"; "0";"TILE_SAND" ; "33587232"; "24";"2400";"sand"; "0"; "1"; "0"; "0"; "5"; "0"; "1"; "0"; "N/A"; "0";"16"
"5"; "1";"TILE_SAND_WHITE" ; "33587232"; "24";"2400";"sand"; "0"; "1"; "0"; "0"; "5"; "1"; "1"; "0"; "N/A"; "0";"16"
"5"; "2";"TILE_SAND_RED" ; "33587232"; "24";"2400";"sand"; "0"; "1"; "0"; "0"; "5"; "2"; "1"; "0"; "N/A"; "0";"16"
"5"; "3";"TILE_SAND_DESERT" ; "33587232"; "24";"2400";"sand"; "0"; "1"; "0"; "0"; "5"; "3"; "1"; "0"; "N/A"; "0";"16"
"5"; "4";"TILE_SAND_BLACK" ; "33587232"; "24";"2400";"sand"; "0"; "1"; "0"; "0"; "5"; "4"; "1"; "0"; "N/A"; "0";"16"
"5"; "5";"TILE_SAND_GREEN" ; "33587232"; "24";"2400";"sand"; "0"; "1"; "0"; "0"; "5"; "5"; "1"; "0"; "N/A"; "0";"16"
"6"; "0";"TILE_GRAVEL" ; "33587232"; "24";"2400";"grvl"; "0"; "1"; "0"; "0"; "6"; "0"; "1"; "0"; "N/A"; "0";"16"
"6"; "1";"TILE_GRAVEL_GREY" ; "33587232"; "24";"2400";"grvl"; "0"; "1"; "0"; "0"; "6"; "1"; "1"; "0"; "N/A"; "0";"16"
"7"; "0";"TILE_ORE_MALACHITE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "7"; "0"; "0"; "0"; "N/A"; "0";"16"
"7"; "1";"TILE_ORE_HEMATITE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "7"; "1"; "0"; "0"; "N/A"; "0";"16"
"7"; "2";"TILE_ORE_NATURAL_GOLD" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "7"; "2"; "0"; "0"; "N/A"; "0";"16"
"7"; "3";"TILE_ORE_NATURAL_SILVER" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "7"; "3"; "0"; "0"; "N/A"; "0";"16"
"7"; "4";"TILE_ORE_RUTILE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "7"; "4"; "0"; "0"; "N/A"; "0";"16"
"7"; "5";"TILE_ORE_AURICHALCUMITE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "7"; "5"; "0"; "0"; "N/A"; "0";"16"
"8"; "0";"TILE_GEM_RUBY" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "8"; "0"; "0"; "0"; "N/A"; "0";"16"
"8"; "1";"TILE_GEM_EMERALD" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "8"; "1"; "0"; "0"; "N/A"; "0";"16"
"8"; "2";"TILE_GEM_SAPPHIRE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "8"; "2"; "0"; "0"; "N/A"; "0";"16"
"8"; "3";"TILE_GEM_TOPAZ" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "8"; "3"; "0"; "0"; "N/A"; "0";"16"
"8"; "4";"TILE_GEM_DIAMOND" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "8"; "4"; "0"; "0"; "N/A"; "0";"16"
"8"; "5";"TILE_GEM_AMETHYST" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "8"; "5"; "0"; "0"; "N/A"; "0";"16"
"9"; "0";"TILE_SNOW" ; "33587232"; "24"; "500";"snow"; "0"; "1"; "1"; "0"; "9"; "0"; "0"; "0"; "N/A"; "0";"16"
"9"; "1";"TILE_ICE_FRAGILE" ; "13644813"; "5"; "930";"icei"; "0"; "1"; "0"; "0"; "9"; "1"; "0"; "0"; "N/A"; "0"; "4"
"9"; "2";"TILE_ICE_NATURAL" ; "27289626"; "35"; "930";"icei"; "0"; "1"; "1"; "0"; "9"; "2"; "0"; "0"; "N/A"; "0"; "4"
"9"; "3";"TILE_ICE_CLEAR_MAGICAL" ; "33587232"; "48";"3720";"icex"; "0"; "1"; "1"; "19955770"; "9"; "3"; "0"; "0"; "N/A"; "0"; "4"
"9"; "4";"TILE_GLASS_CRUDE" ; "3146755"; "5";"2500";"glas"; "0"; "1"; "1"; "0"; "9"; "4"; "0"; "0"; "N/A"; "0";"16"
"9"; "5";"TILE_GLASS_CLEAN" ; "1049601"; "5";"2203";"glas"; "0"; "1"; "1"; "0"; "9"; "5"; "0"; "0"; "N/A"; "0";"16"
"10"; "0";"TILE_PLATFORM_STONE" ; "8396808"; "5"; "N/A";"rock"; "0"; "0"; "0"; "0"; "10"; "0"; "0"; "0"; "N/A"; "0";"16"
"10"; "1";"TILE_PLATFORM_WOODEN" ; "8396808"; "5"; "N/A";"wood"; "0"; "0"; "0"; "0"; "10"; "1"; "0"; "0"; "N/A"; "0";"16"
"10"; "2";"TILE_PLATFORM_EBONY" ; "8396808"; "5"; "N/A";"wood"; "0"; "0"; "0"; "0"; "10"; "2"; "0"; "0"; "N/A"; "0";"16"
"10"; "3";"TILE_PLATFORM_BIRCH" ; "8396808"; "5"; "N/A";"wood"; "0"; "0"; "0"; "0"; "10"; "3"; "0"; "0"; "N/A"; "0";"16"
"10"; "4";"TILE_PLATFORM_BLOODROSE" ; "8396808"; "5"; "N/A";"wood"; "0"; "0"; "0"; "0"; "10"; "4"; "0"; "0"; "N/A"; "0";"16"
"11"; "0";"TILE_TORCH" ; "8396808"; "1"; "N/A";"fxtr"; "0"; "0"; "0"; "267553792"; "11"; "0"; "0"; "1"; "N/A"; "0";"16"
"11"; "1";"TILE_TORCH_FROST" ; "8396808"; "1"; "N/A";"fxtr"; "0"; "0"; "0"; "81916159"; "11"; "1"; "0"; "1"; "N/A"; "0";"16"
"12"; "0";"TILE_TORCH" ; "8396808"; "1"; "N/A";"fxtr"; "0"; "0"; "0"; "0"; "11"; "0"; "0"; "0"; "N/A"; "0";"16"
"12"; "1";"TILE_TORCH_FROST" ; "8396808"; "1"; "N/A";"fxtr"; "0"; "0"; "0"; "0"; "11"; "1"; "0"; "0"; "N/A"; "0";"16"
"13"; "0";"TILE_ILLUMINATOR_WHITE" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "239319274"; "13"; "0"; "0"; "0"; "N/A"; "0";"16"
"13"; "1";"TILE_ILLUMINATOR_YELLOW" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "267607040"; "13"; "1"; "0"; "0"; "N/A"; "0";"16"
"13"; "2";"TILE_ILLUMINATOR_ORANGE" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "267546624"; "13"; "2"; "0"; "0"; "N/A"; "0";"16"
"13"; "3";"TILE_ILLUMINATOR_RED" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "246415360"; "13"; "3"; "0"; "0"; "N/A"; "0";"16"
"13"; "4";"TILE_ILLUMINATOR_FUCHSIA" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "246415543"; "13"; "4"; "0"; "0"; "N/A"; "0";"16"
"13"; "5";"TILE_ILLUMINATOR_PURPLE" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "191889643"; "13"; "5"; "0"; "0"; "N/A"; "0";"16"
"13"; "6";"TILE_ILLUMINATOR_BLUE" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "52479"; "13"; "6"; "0"; "0"; "N/A"; "0";"16"
"13"; "7";"TILE_ILLUMINATOR_CYAN" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "219391"; "13"; "7"; "0"; "0"; "N/A"; "0";"16"
"13"; "8";"TILE_ILLUMINATOR_GREEN" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "56884224"; "13"; "8"; "0"; "0"; "N/A"; "0";"16"
"13"; "9";"TILE_ILLUMINATOR_GREEN_DARK";"8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "33660928"; "13"; "9"; "0"; "0"; "N/A"; "0";"16"
"13"; "10";"TILE_ILLUMINATOR_BROWN" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "89161728"; "13"; "10"; "0"; "0"; "N/A"; "0";"16"
"13"; "11";"TILE_ILLUMINATOR_TAN" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "157392948"; "13"; "11"; "0"; "0"; "N/A"; "0";"16"
"13"; "12";"TILE_ILLUMINATOR_GREY_LIGHT";"8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "198374589"; "13"; "12"; "0"; "0"; "N/A"; "0";"16"
"13"; "13";"TILE_ILLUMINATOR_GREY_MED"; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "122803317"; "13"; "13"; "0"; "0"; "N/A"; "0";"16"
"13"; "14";"TILE_ILLUMINATOR_GREY_DARK"; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "68224065"; "13"; "14"; "0"; "0"; "N/A"; "0";"16"
"13"; "15";"TILE_ILLUMINATOR_BLACK" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "116392191"; "13"; "15"; "0"; "0"; "N/A"; "0";"16"
"14"; "0";"TILE_ILLUMINATOR_WHITE" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "0"; "0"; "0"; "N/A"; "0";"16"
"14"; "1";"TILE_ILLUMINATOR_YELLOW" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "1"; "0"; "0"; "N/A"; "0";"16"
"14"; "2";"TILE_ILLUMINATOR_ORANGE" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "2"; "0"; "0"; "N/A"; "0";"16"
"14"; "3";"TILE_ILLUMINATOR_RED" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "3"; "0"; "0"; "N/A"; "0";"16"
"14"; "4";"TILE_ILLUMINATOR_FUCHSIA" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "4"; "0"; "0"; "N/A"; "0";"16"
"14"; "5";"TILE_ILLUMINATOR_PURPLE" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "5"; "0"; "0"; "N/A"; "0";"16"
"14"; "6";"TILE_ILLUMINATOR_BLUE" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "6"; "0"; "0"; "N/A"; "0";"16"
"14"; "7";"TILE_ILLUMINATOR_CYAN" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "7"; "0"; "0"; "N/A"; "0";"16"
"14"; "8";"TILE_ILLUMINATOR_GREEN" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "8"; "0"; "0"; "N/A"; "0";"16"
"14"; "9";"TILE_ILLUMINATOR_GREEN_DARK";"33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "9"; "0"; "0"; "N/A"; "0";"16"
"14"; "10";"TILE_ILLUMINATOR_BROWN" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "10"; "0"; "0"; "N/A"; "0";"16"
"14"; "11";"TILE_ILLUMINATOR_TAN" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "11"; "0"; "0"; "N/A"; "0";"16"
"14"; "12";"TILE_ILLUMINATOR_GREY_LIGHT";"33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "12"; "0"; "0"; "N/A"; "0";"16"
"14"; "13";"TILE_ILLUMINATOR_GREY_MED"; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "13"; "0"; "0"; "N/A"; "0";"16"
"14"; "14";"TILE_ILLUMINATOR_GREY_DARK";"33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "14"; "0"; "0"; "N/A"; "0";"16"
"14"; "15";"TILE_ILLUMINATOR_BLACK" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "15"; "0"; "0"; "N/A"; "0";"16"
"15"; "0";"TILE_SANDSTONE" ; "33587232"; "48";"1900";"rock"; "0"; "1"; "1"; "0"; "15"; "0"; "0"; "0"; "N/A"; "0";"16"
"15"; "1";"TILE_SANDSTONE_WHITE" ; "33587232"; "48";"1900";"rock"; "0"; "1"; "1"; "0"; "15"; "1"; "0"; "0"; "N/A"; "0";"16"
"15"; "2";"TILE_SANDSTONE_RED" ; "33587232"; "48";"1900";"rock"; "0"; "1"; "1"; "0"; "15"; "2"; "0"; "0"; "N/A"; "0";"16"
"15"; "3";"TILE_SANDSTONE_DESERT" ; "33587232"; "48";"1900";"rock"; "0"; "1"; "1"; "0"; "15"; "3"; "0"; "0"; "N/A"; "0";"16"
"15"; "4";"TILE_SANDSTONE_BLACK" ; "33587232"; "48";"1900";"rock"; "0"; "1"; "1"; "0"; "15"; "4"; "0"; "0"; "N/A"; "0";"16"
"15"; "5";"TILE_SANDSTONE_GREEN" ; "33587232"; "48";"1900";"rock"; "0"; "1"; "1"; "0"; "15"; "5"; "0"; "0"; "N/A"; "0";"16"
"16"; "0";"TILE_LANTERN_IRON_REGULAR"; "8396808"; "1"; "N/A";"fxtr"; "0"; "0"; "0"; "267553792"; "16"; "0"; "0"; "0"; "N/A"; "0";"16"
"16"; "1";"TILE_SUNSTONE" ; "33587232"; "1"; "N/A";"rock"; "0"; "1"; "0"; "0"; "16"; "1"; "0"; "2"; "N/A"; "0";"16"
"16"; "2";"TILE_DAYLIGHT_CAPACITOR" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "0"; "0"; "16"; "2"; "0"; "3"; "N/A"; "0";"16"
"254"; "0";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "1";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "2";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "3";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "4";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "5";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "6";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "7";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "8";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "9";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "10";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "11";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "12";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "13";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "14";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "15";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"255"; "0";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "1";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "2";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "3";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "4";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "5";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "6";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "7";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "8";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "9";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "10";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "11";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "12";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "13";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "14";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "15";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"0"; "-1";"TILE_NULL" ;"1073741823"; "-1";"2600";"null"; "0"; "0"; "1"; "0"; "N/A"; "N/A"; "0"; "0"; "N/A"; "0";"16"
## Notes ##
# Friction: 0: frictionless, <16: slippery, 16: regular, >16: sticky
# Opacity/Lumcolor: 30-bit RGB. Only the light diffusers have a opacity value of ZERO.
# Solid: whether the tile has full collision
# vscs: viscosity, (velocity) / (1 + (n/16)), 16 halves movement speed, can be used to non-fluid tiles (sticky hazard, tarmac road in Terraria)
# dsty: density. As we are putting water an 1000, it is identical to specific gravity. [g/l]
# dlfn: dynamic luminosity function.
# 0-static, 1-torch flicker, 2-current global light (sun, star, moon), 3-daylight at noon,
# 4-slow breath, 5-pulsate
# mate: material, four-letter code
# fv: vertical friction (boolean)
## Illuminators ##
# Illuminator white: RGB(228,238,234), simulation of a halophosphate FL lamp (If you want high CRI lamp, collect a daylight!)
# Defalut torch : Y 64 x 0.55183 y 0.40966 (Planckian ~1 770 K); real candlelight colour taken from Spyder5 colorimeter (for I couldn't afford i1DisplayPro/Colormunki)
# Sunstone: Artificial sunlight, change colour over time in sync with sunlight. The light is set by game's code.
# Sunlight capacitor: daylight at noon. Set by game's code.
## Tiles ##
# 16 colour palette : games's 16-colour palette
# Magical ice: theoretical __metallic__ ice that might form under super-high pressure (> 5 TPa). Its density is a wild guess.
## 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

@@ -21,7 +21,7 @@ object CSVFetcher {
csvString = StringBuffer() // reset buffer every time it called csvString = StringBuffer() // reset buffer every time it called
readCSVasString(csvFilePath) readCSVasString(csvFilePath)
println("Reading CSV $csvFilePath") println("[CSVFetcher] Reading CSV $csvFilePath")
val csvParser = CSVParser.parse( val csvParser = CSVParser.parse(
csvString!!.toString(), csvString!!.toString(),

View File

@@ -22,7 +22,7 @@ object JsonFetcher {
jsonString = StringBuffer() // reset buffer every time it called jsonString = StringBuffer() // reset buffer every time it called
readJsonFileAsString(jsonFilePath) readJsonFileAsString(jsonFilePath)
println("Reading JSON $jsonFilePath") println("[JsonFetcher] Reading JSON $jsonFilePath")
val jsonParser = JsonParser() val jsonParser = JsonParser()
val jsonObj = jsonParser.parse(jsonString!!.toString()).asJsonObject val jsonObj = jsonParser.parse(jsonString!!.toString()).asJsonObject
@@ -35,7 +35,7 @@ object JsonFetcher {
jsonString = StringBuffer() // reset buffer every time it called jsonString = StringBuffer() // reset buffer every time it called
readJsonFileAsString(jsonFile.canonicalPath) readJsonFileAsString(jsonFile.canonicalPath)
println("Reading JSON ${jsonFile.path}") println("[JsonFetcher] Reading JSON ${jsonFile.path}")
val jsonParser = JsonParser() val jsonParser = JsonParser()
val jsonObj = jsonParser.parse(jsonString!!.toString()).asJsonObject val jsonObj = jsonParser.parse(jsonString!!.toString()).asJsonObject

View File

@@ -1,13 +1,8 @@
package net.torvald.serialise package net.torvald.serialise
import net.torvald.CSVFetcher
import net.torvald.terrarum.itemproperties.ItemCodex
import net.torvald.terrarum.itemproperties.MaterialCodex
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.tileproperties.TileCodex
import java.io.IOException import java.io.IOException
import java.nio.file.Files import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths import java.nio.file.Paths
import java.nio.file.StandardCopyOption import java.nio.file.StandardCopyOption
@@ -20,7 +15,7 @@ object WriteCSV {
val META_FILENAME_MAT = "worldinfo4" val META_FILENAME_MAT = "worldinfo4"
fun write(saveDirectoryName: String): Boolean { fun write(saveDirectoryName: String): Boolean {
//val tileCSV = CSVFetcher.readCSVasString(TileCodex.CSV_PATH) //val tileCSV = CSVFetcher.readCSVasString(BlockCodex.CSV_PATH)
//val itemCSV = CSVFetcher.readCSVasString(ItemCodex.CSV_PATH) //val itemCSV = CSVFetcher.readCSVasString(ItemCodex.CSV_PATH)
//val matCSV = CSVFetcher.readCSVasString(MaterialCodex.CSV_PATH) //val matCSV = CSVFetcher.readCSVasString(MaterialCodex.CSV_PATH)

View File

@@ -1,18 +1,8 @@
package net.torvald.serialise package net.torvald.serialise
import net.torvald.terrarum.mapgenerator.WorldGenerator import net.torvald.terrarum.worldgenerator.WorldGenerator
import net.torvald.terrarum.mapgenerator.RoguelikeRandomiser import net.torvald.terrarum.worldgenerator.RoguelikeRandomiser
import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.itemproperties.ItemCodex
import net.torvald.terrarum.itemproperties.MaterialCodex
import net.torvald.terrarum.tileproperties.TileCodex
import org.apache.commons.codec.digest.DigestUtils
import java.io.FileInputStream
import java.io.File
import java.io.IOException
import java.nio.charset.Charset import java.nio.charset.Charset
import java.nio.file.*
import java.util.*
/** /**
* Created by minjaesong on 16-03-15. * Created by minjaesong on 16-03-15.

View File

@@ -3,6 +3,7 @@ package net.torvald.terrarum
import net.torvald.CSVFetcher import net.torvald.CSVFetcher
import net.torvald.terrarum.itemproperties.InventoryItem import net.torvald.terrarum.itemproperties.InventoryItem
import net.torvald.terrarum.itemproperties.ItemCodex import net.torvald.terrarum.itemproperties.ItemCodex
import net.torvald.terrarum.blockproperties.BlockCodex
import org.apache.commons.csv.CSVFormat import org.apache.commons.csv.CSVFormat
import org.apache.commons.csv.CSVParser import org.apache.commons.csv.CSVParser
import java.io.File import java.io.File
@@ -26,6 +27,10 @@ import javax.script.Invocable
*/ */
object ModMgr { object ModMgr {
val groovyEngine = ScriptEngineManager().getEngineByExtension("groovy")!!
val groovyInvocable = groovyEngine as Invocable
data class ModuleMetadata( data class ModuleMetadata(
val order: Int, val order: Int,
val isDir: Boolean, val isDir: Boolean,
@@ -80,6 +85,7 @@ object ModMgr {
} }
// lists available engines
/*val manager = ScriptEngineManager() /*val manager = ScriptEngineManager()
val factories = manager.engineFactories val factories = manager.engineFactories
for (f in factories) { for (f in factories) {
@@ -131,24 +137,27 @@ object ModMgr {
object GameItemLoader { object GameBlockLoader {
val blockPath = "blocks/"
@JvmStatic operator fun invoke(module: String) {
BlockCodex(module, blockPath + "blocks.csv")
}
}
object GameItemLoader {
val itemPath = "items/" val itemPath = "items/"
@JvmStatic operator fun invoke(module: String) { @JvmStatic operator fun invoke(module: String) {
val engine = ScriptEngineManager().getEngineByExtension("groovy")!!
val invocable = engine as Invocable
val csv = CSVFetcher.readFromModule(module, itemPath + "itemid.csv") val csv = CSVFetcher.readFromModule(module, itemPath + "itemid.csv")
csv.forEach { csv.forEach {
val filename = it["filename"].toString() val filename = it["filename"].toString()
val script = getFile(module, itemPath + filename).readText() val script = getFile(module, itemPath + filename).readText()
val itemID = it["id"].toInt() val itemID = it["id"].toInt()
engine.eval(script) groovyEngine.eval(script)
ItemCodex[itemID] = invocable.invokeFunction("invoke", itemID) as InventoryItem ItemCodex[itemID] = groovyInvocable.invokeFunction("invoke", itemID) as InventoryItem
} }
} }
} }
} }

View File

@@ -4,7 +4,6 @@ import net.torvald.dataclass.CircularArray
import net.torvald.imagefont.GameFontBase import net.torvald.imagefont.GameFontBase
import net.torvald.random.HQRNG import net.torvald.random.HQRNG
import net.torvald.terrarum.Terrarum.delta import net.torvald.terrarum.Terrarum.delta
import net.torvald.terrarum.audio.AudioResourceLibrary
import net.torvald.terrarum.concurrent.ThreadParallel import net.torvald.terrarum.concurrent.ThreadParallel
import net.torvald.terrarum.console.* import net.torvald.terrarum.console.*
import net.torvald.terrarum.gameactors.ActorHumanoid import net.torvald.terrarum.gameactors.ActorHumanoid
@@ -13,36 +12,27 @@ import net.torvald.terrarum.gameactors.physicssolver.CollisionSolver
import net.torvald.terrarum.gamecontroller.GameController import net.torvald.terrarum.gamecontroller.GameController
import net.torvald.terrarum.gamecontroller.Key import net.torvald.terrarum.gamecontroller.Key
import net.torvald.terrarum.gamecontroller.KeyToggler import net.torvald.terrarum.gamecontroller.KeyToggler
import net.torvald.terrarum.itemproperties.InventoryItem
import net.torvald.terrarum.gameworld.GameWorld import net.torvald.terrarum.gameworld.GameWorld
import net.torvald.terrarum.gameworld.WorldSimulator import net.torvald.terrarum.gameworld.WorldSimulator
import net.torvald.terrarum.gameworld.WorldTime import net.torvald.terrarum.worlddrawer.LightmapRenderer
import net.torvald.terrarum.mapdrawer.LightmapRenderer import net.torvald.terrarum.worlddrawer.LightmapRenderer.constructRGBFromInt
import net.torvald.terrarum.mapdrawer.LightmapRenderer.constructRGBFromInt import net.torvald.terrarum.worlddrawer.BlocksDrawer
import net.torvald.terrarum.mapdrawer.TilesDrawer import net.torvald.terrarum.worlddrawer.FeaturesDrawer
import net.torvald.terrarum.mapdrawer.FeaturesDrawer import net.torvald.terrarum.worlddrawer.FeaturesDrawer.TILE_SIZE
import net.torvald.terrarum.mapdrawer.FeaturesDrawer.TILE_SIZE import net.torvald.terrarum.worlddrawer.WorldCamera
import net.torvald.terrarum.mapdrawer.MapCamera import net.torvald.terrarum.worldgenerator.WorldGenerator
import net.torvald.terrarum.mapgenerator.WorldGenerator import net.torvald.terrarum.worldgenerator.RoguelikeRandomiser
import net.torvald.terrarum.mapgenerator.RoguelikeRandomiser import net.torvald.terrarum.blockproperties.BlockPropUtil
import net.torvald.terrarum.tileproperties.TileCodex import net.torvald.terrarum.blockstats.BlockStats
import net.torvald.terrarum.tileproperties.TilePropUtil
import net.torvald.terrarum.tilestats.TileStats
import net.torvald.terrarum.ui.* import net.torvald.terrarum.ui.*
import net.torvald.terrarum.weather.WeatherMixer import net.torvald.terrarum.weather.WeatherMixer
import org.lwjgl.opengl.GL11
import org.newdawn.slick.* import org.newdawn.slick.*
import org.newdawn.slick.fills.GradientFill
import org.newdawn.slick.geom.Rectangle
import org.newdawn.slick.state.BasicGameState import org.newdawn.slick.state.BasicGameState
import org.newdawn.slick.state.StateBasedGame import org.newdawn.slick.state.StateBasedGame
import shader.Shader
import java.lang.management.ManagementFactory
import java.util.* import java.util.*
import java.util.concurrent.locks.Lock import java.util.concurrent.locks.Lock
import java.util.concurrent.locks.ReentrantLock import java.util.concurrent.locks.ReentrantLock
import javax.swing.JOptionPane import javax.swing.JOptionPane
import kotlin.collections.HashMap
/** /**
* Created by minjaesong on 15-12-30. * Created by minjaesong on 15-12-30.
@@ -256,11 +246,11 @@ class StateInGame : BasicGameState() {
/////////////////////////// ///////////////////////////
// world-related updates // // world-related updates //
/////////////////////////// ///////////////////////////
TilePropUtil.dynamicLumFuncTickClock() BlockPropUtil.dynamicLumFuncTickClock()
world.updateWorldTime(delta) world.updateWorldTime(delta)
//WorldSimulator(player, delta) //WorldSimulator(player, delta)
WeatherMixer.update(gc, delta) WeatherMixer.update(gc, delta)
TileStats.update() BlockStats.update()
if (!(CommandDict["setgl"] as SetGlobalLightOverride).lightOverride) if (!(CommandDict["setgl"] as SetGlobalLightOverride).lightOverride)
world.globalLight = constructRGBFromInt( world.globalLight = constructRGBFromInt(
WeatherMixer.globalLightNow.redByte, WeatherMixer.globalLightNow.redByte,
@@ -279,8 +269,8 @@ class StateInGame : BasicGameState() {
// camera-related updates // // camera-related updates //
//////////////////////////// ////////////////////////////
FeaturesDrawer.update(gc, delta) FeaturesDrawer.update(gc, delta)
MapCamera.update() WorldCamera.update()
TilesDrawer.update() BlocksDrawer.update()
/////////////////////////// ///////////////////////////
@@ -380,7 +370,7 @@ class StateInGame : BasicGameState() {
// make camara work // make camara work
worldG.translate(-MapCamera.x.toFloat(), -MapCamera.y.toFloat()) worldG.translate(-WorldCamera.x.toFloat(), -WorldCamera.y.toFloat())
blendNormal() blendNormal()
@@ -388,12 +378,12 @@ class StateInGame : BasicGameState() {
///////////////////////////// /////////////////////////////
// draw map related stuffs // // draw map related stuffs //
///////////////////////////// /////////////////////////////
TilesDrawer.renderWall(worldG) BlocksDrawer.renderWall(worldG)
actorsRenderBehind.forEach { it.drawBody(worldG) } actorsRenderBehind.forEach { it.drawBody(worldG) }
actorsRenderBehind.forEach { it.drawGlow(worldG) } actorsRenderBehind.forEach { it.drawGlow(worldG) }
particlesContainer.forEach { it.drawBody(worldG) } particlesContainer.forEach { it.drawBody(worldG) }
particlesContainer.forEach { it.drawGlow(worldG) } particlesContainer.forEach { it.drawGlow(worldG) }
TilesDrawer.renderTerrain(worldG) BlocksDrawer.renderTerrain(worldG)
///////////////// /////////////////
// draw actors // // draw actors //
@@ -410,8 +400,8 @@ class StateInGame : BasicGameState() {
///////////////////////////// /////////////////////////////
LightmapRenderer.renderLightMap() LightmapRenderer.renderLightMap()
TilesDrawer.renderFront(worldG, false) BlocksDrawer.renderFront(worldG, false)
// --> blendNormal() <-- by TilesDrawer.renderFront // --> blendNormal() <-- by BlocksDrawer.renderFront
FeaturesDrawer.render(gc, worldG) FeaturesDrawer.render(gc, worldG)
@@ -648,12 +638,12 @@ class StateInGame : BasicGameState() {
) )
private fun distToCameraSqr(a: ActorVisible) = private fun distToCameraSqr(a: ActorVisible) =
min( min(
(a.hitbox.posX - MapCamera.x).sqr() + (a.hitbox.posX - WorldCamera.x).sqr() +
(a.hitbox.posY - MapCamera.y).sqr(), (a.hitbox.posY - WorldCamera.y).sqr(),
(a.hitbox.posX - MapCamera.x + world.width * TILE_SIZE).sqr() + (a.hitbox.posX - WorldCamera.x + world.width * TILE_SIZE).sqr() +
(a.hitbox.posY - MapCamera.y).sqr(), (a.hitbox.posY - WorldCamera.y).sqr(),
(a.hitbox.posX - MapCamera.x - world.width * TILE_SIZE).sqr() + (a.hitbox.posX - WorldCamera.x - world.width * TILE_SIZE).sqr() +
(a.hitbox.posY - MapCamera.y).sqr() (a.hitbox.posY - WorldCamera.y).sqr()
) )
/** whether the actor is within screen */ /** whether the actor is within screen */

View File

@@ -5,7 +5,7 @@ import net.torvald.terrarum.itemproperties.IVKey
import net.torvald.terrarum.itemproperties.InventoryItem import net.torvald.terrarum.itemproperties.InventoryItem
import net.torvald.terrarum.itemproperties.ItemCodex import net.torvald.terrarum.itemproperties.ItemCodex
import net.torvald.terrarum.itemproperties.Material import net.torvald.terrarum.itemproperties.Material
import net.torvald.terrarum.tileproperties.Tile import net.torvald.terrarum.blockproperties.Block
import net.torvald.terrarum.ui.* import net.torvald.terrarum.ui.*
import org.newdawn.slick.* import org.newdawn.slick.*
import org.newdawn.slick.state.BasicGameState import org.newdawn.slick.state.BasicGameState
@@ -42,7 +42,7 @@ class StateUITest : BasicGameState() {
// these are the test codes. // these are the test codes.
// Item properties must be pre-composed using CSV/JSON, and read and made into the item instance // Item properties must be pre-composed using CSV/JSON, and read and made into the item instance
// using factory/builder pattern. @see ItemCodex // using factory/builder pattern. @see ItemCodex
actor.actorValue[AVKey.__PLAYER_QSPREFIX + "3"] = Tile.STONE actor.actorValue[AVKey.__PLAYER_QSPREFIX + "3"] = Block.STONE
actor.inventory.add(object : InventoryItem() { actor.inventory.add(object : InventoryItem() {
init { init {
@@ -81,7 +81,7 @@ class StateUITest : BasicGameState() {
actor.inventory.add(ItemCodex[16], 543) actor.inventory.add(ItemCodex[16], 543)
actor.inventory.getByDynamicID(Tile.STONE)!!.item equipTo actor actor.inventory.getByDynamicID(Block.STONE)!!.item equipTo actor
} }
override fun init(container: GameContainer?, game: StateBasedGame?) { override fun init(container: GameContainer?, game: StateBasedGame?) {

View File

@@ -0,0 +1,152 @@
package net.torvald.terrarum.blockproperties
/**
* Created by minjaesong on 16-02-21.
*/
object Block {
val AIR = 0 // hard coded; this is the standard
val STONE = BlockCodex.idDamageToIndex(1, 0)
val STONE_QUARRIED = BlockCodex.idDamageToIndex(1, 1)
val STONE_TILE_WHITE = BlockCodex.idDamageToIndex(1, 2)
val STONE_BRICKS = BlockCodex.idDamageToIndex(1, 3)
val DIRT = BlockCodex.idDamageToIndex(2, 0)
val GRASS = BlockCodex.idDamageToIndex(2, 1)
val PLANK_NORMAL = BlockCodex.idDamageToIndex(3, 0)
val PLANK_EBONY = BlockCodex.idDamageToIndex(3, 1)
val PLANK_BIRCH = BlockCodex.idDamageToIndex(3, 2)
val PLANK_BLOODROSE = BlockCodex.idDamageToIndex(3, 3)
val TRUNK_NORMAL = BlockCodex.idDamageToIndex(4, 0)
val TRUNK_EBONY = BlockCodex.idDamageToIndex(4, 1)
val TRUNK_BIRCH = BlockCodex.idDamageToIndex(4, 2)
val TRUNK_BLOODROSE = BlockCodex.idDamageToIndex(4, 3)
val SAND = BlockCodex.idDamageToIndex(5, 0)
val SAND_WHITE = BlockCodex.idDamageToIndex(5, 1)
val SAND_RED = BlockCodex.idDamageToIndex(5, 2)
val SAND_DESERT = BlockCodex.idDamageToIndex(5, 3)
val SAND_BLACK = BlockCodex.idDamageToIndex(5, 4)
val SAND_GREEN = BlockCodex.idDamageToIndex(5, 5)
val GRAVEL = BlockCodex.idDamageToIndex(6, 0)
val GRAVEL_GREY = BlockCodex.idDamageToIndex(6, 1)
val ORE_COPPER = BlockCodex.idDamageToIndex(7, 0)
val ORE_IRON = BlockCodex.idDamageToIndex(7, 1)
val ORE_GOLD = BlockCodex.idDamageToIndex(7, 2)
val ORE_SILVER = BlockCodex.idDamageToIndex(7, 3)
val ORE_ILMENITE = BlockCodex.idDamageToIndex(7, 4)
val ORE_AURICHALCUM = BlockCodex.idDamageToIndex(7, 5)
val RAW_RUBY = BlockCodex.idDamageToIndex(8, 0)
val RAW_EMERALD = BlockCodex.idDamageToIndex(8, 1)
val RAW_SAPPHIRE = BlockCodex.idDamageToIndex(8, 2)
val RAW_TOPAZ = BlockCodex.idDamageToIndex(8, 3)
val RAW_DIAMOND = BlockCodex.idDamageToIndex(8, 4)
val RAW_AMETHYST = BlockCodex.idDamageToIndex(8, 5)
val SNOW = BlockCodex.idDamageToIndex(9, 0)
val ICE_FRAGILE = BlockCodex.idDamageToIndex(9, 1)
val ICE_NATURAL = BlockCodex.idDamageToIndex(9, 2)
val ICE_MAGICAL = BlockCodex.idDamageToIndex(9, 3)
val GLASS_CRUDE = BlockCodex.idDamageToIndex(9, 4)
val GLASS_CLEAN = BlockCodex.idDamageToIndex(9, 5)
val PLATFORM_STONE = BlockCodex.idDamageToIndex(10, 0)
val PLATFORM_WOODEN = BlockCodex.idDamageToIndex(10, 1)
val PLATFORM_EBONY = BlockCodex.idDamageToIndex(10, 2)
val PLATFORM_BIRCH = BlockCodex.idDamageToIndex(10, 3)
val PLATFORM_BLOODROSE = BlockCodex.idDamageToIndex(10, 4)
val TORCH = BlockCodex.idDamageToIndex(11, 0)
val TORCH_FROST = BlockCodex.idDamageToIndex(11, 1)
val TORCH_OFF = BlockCodex.idDamageToIndex(12, 0)
val TORCH_FROST_OFF = BlockCodex.idDamageToIndex(12, 1)
val ILLUMINATOR_WHITE = BlockCodex.idDamageToIndex(13, 0)
val ILLUMINATOR_YELLOW = BlockCodex.idDamageToIndex(13, 1)
val ILLUMINATOR_ORANGE = BlockCodex.idDamageToIndex(13, 2)
val ILLUMINATOR_RED = BlockCodex.idDamageToIndex(13, 3)
val ILLUMINATOR_FUCHSIA = BlockCodex.idDamageToIndex(13, 4)
val ILLUMINATOR_PURPLE = BlockCodex.idDamageToIndex(13, 5)
val ILLUMINATOR_BLUE = BlockCodex.idDamageToIndex(13, 6)
val ILLUMINATOR_CYAN = BlockCodex.idDamageToIndex(13, 7)
val ILLUMINATOR_GREEN = BlockCodex.idDamageToIndex(13, 8)
val ILLUMINATOR_GREEN_DARK = BlockCodex.idDamageToIndex(13, 9)
val ILLUMINATOR_BROWN = BlockCodex.idDamageToIndex(13, 10)
val ILLUMINATOR_TAN = BlockCodex.idDamageToIndex(13, 11)
val ILLUMINATOR_GREY_LIGHT = BlockCodex.idDamageToIndex(13, 12)
val ILLUMINATOR_GREY_MED = BlockCodex.idDamageToIndex(13, 13)
val ILLUMINATOR_GREY_DARK = BlockCodex.idDamageToIndex(13, 14)
val ILLUMINATOR_BLACK = BlockCodex.idDamageToIndex(13, 15)
val ILLUMINATOR_WHITE_OFF = BlockCodex.idDamageToIndex(14, 0)
val ILLUMINATOR_YELLOW_OFF = BlockCodex.idDamageToIndex(14, 1)
val ILLUMINATOR_ORANGE_OFF = BlockCodex.idDamageToIndex(14, 2)
val ILLUMINATOR_RED_OFF = BlockCodex.idDamageToIndex(14, 3)
val ILLUMINATOR_FUCHSIA_OFF = BlockCodex.idDamageToIndex(14, 4)
val ILLUMINATOR_PURPLE_OFF = BlockCodex.idDamageToIndex(14, 5)
val ILLUMINATOR_BLUE_OFF = BlockCodex.idDamageToIndex(14, 6)
val ILLUMINATOR_CYAN_OFF = BlockCodex.idDamageToIndex(14, 7)
val ILLUMINATOR_GREEN_OFF = BlockCodex.idDamageToIndex(14, 8)
val ILLUMINATOR_GREEN_DARK_OFF = BlockCodex.idDamageToIndex(14, 9)
val ILLUMINATOR_BROWN_OFF = BlockCodex.idDamageToIndex(14, 10)
val ILLUMINATOR_TAN_OFF = BlockCodex.idDamageToIndex(14, 11)
val ILLUMINATOR_GREY_LIGHT_OFF = BlockCodex.idDamageToIndex(14, 12)
val ILLUMINATOR_GREY_MED_OFF = BlockCodex.idDamageToIndex(14, 13)
val ILLUMINATOR_GREY_DARK_OFF = BlockCodex.idDamageToIndex(14, 14)
val ILLUMINATOR_BLACK_OFF = BlockCodex.idDamageToIndex(14, 15)
val SANDSTONE = BlockCodex.idDamageToIndex(15, 0)
val SANDSTONE_WHITE = BlockCodex.idDamageToIndex(15, 1)
val SANDSTONE_RED = BlockCodex.idDamageToIndex(15, 2)
val SANDSTONE_DESERT = BlockCodex.idDamageToIndex(15, 3)
val SANDSTONE_BLACK = BlockCodex.idDamageToIndex(15, 4)
val SANDSTONE_GREEN = BlockCodex.idDamageToIndex(15, 5)
val LANTERN = BlockCodex.idDamageToIndex(16, 0)
val SUNSTONE = BlockCodex.idDamageToIndex(16, 1)
val DAYLIGHT_CAPACITOR = BlockCodex.idDamageToIndex(16, 2)
val WATER_1 = BlockCodex.idDamageToIndex(255, 0)
val WATER_2 = BlockCodex.idDamageToIndex(255, 1)
val WATER_3 = BlockCodex.idDamageToIndex(255, 2)
val WATER_4 = BlockCodex.idDamageToIndex(255, 3)
val WATER_5 = BlockCodex.idDamageToIndex(255, 4)
val WATER_6 = BlockCodex.idDamageToIndex(255, 5)
val WATER_7 = BlockCodex.idDamageToIndex(255, 6)
val WATER_8 = BlockCodex.idDamageToIndex(255, 7)
val WATER_9 = BlockCodex.idDamageToIndex(255, 8)
val WATER_10 = BlockCodex.idDamageToIndex(255, 9)
val WATER_11 = BlockCodex.idDamageToIndex(255, 10)
val WATER_12 = BlockCodex.idDamageToIndex(255, 11)
val WATER_13 = BlockCodex.idDamageToIndex(255, 12)
val WATER_14 = BlockCodex.idDamageToIndex(255, 13)
val WATER_15 = BlockCodex.idDamageToIndex(255, 14)
val WATER = BlockCodex.idDamageToIndex(255, 15)
val LAVA_1 = BlockCodex.idDamageToIndex(254, 0)
val LAVA_2 = BlockCodex.idDamageToIndex(254, 1)
val LAVA_3 = BlockCodex.idDamageToIndex(254, 2)
val LAVA_4 = BlockCodex.idDamageToIndex(254, 3)
val LAVA_5 = BlockCodex.idDamageToIndex(254, 4)
val LAVA_6 = BlockCodex.idDamageToIndex(254, 5)
val LAVA_7 = BlockCodex.idDamageToIndex(254, 6)
val LAVA_8 = BlockCodex.idDamageToIndex(254, 7)
val LAVA_9 = BlockCodex.idDamageToIndex(254, 8)
val LAVA_10 = BlockCodex.idDamageToIndex(254, 9)
val LAVA_11 = BlockCodex.idDamageToIndex(254, 10)
val LAVA_12 = BlockCodex.idDamageToIndex(254, 11)
val LAVA_13 = BlockCodex.idDamageToIndex(254, 12)
val LAVA_14 = BlockCodex.idDamageToIndex(254, 13)
val LAVA_15 = BlockCodex.idDamageToIndex(254, 14)
val LAVA = BlockCodex.idDamageToIndex(254, 15)
val NULL = -1
}

View File

@@ -1,7 +1,6 @@
package net.torvald.terrarum.tileproperties package net.torvald.terrarum.blockproperties
import net.torvald.CSVFetcher import net.torvald.CSVFetcher
import net.torvald.terrarum.ModMgr
import net.torvald.terrarum.gameworld.MapLayer import net.torvald.terrarum.gameworld.MapLayer
import net.torvald.terrarum.gameworld.PairedMapLayer import net.torvald.terrarum.gameworld.PairedMapLayer
import org.apache.commons.csv.CSVRecord import org.apache.commons.csv.CSVRecord
@@ -11,26 +10,23 @@ import java.io.IOException
/** /**
* Created by minjaesong on 16-02-16. * Created by minjaesong on 16-02-16.
*/ */
object TileCodex { object BlockCodex {
private var tileProps: Array<TileProp> private var blockProps: Array<BlockProp>
const val TILE_UNIQUE_MAX = MapLayer.RANGE * PairedMapLayer.RANGE const val TILE_UNIQUE_MAX = MapLayer.RANGE * PairedMapLayer.RANGE
private val nullProp = TileProp() private val nullProp = BlockProp()
init { init {
tileProps = Array<TileProp>(TILE_UNIQUE_MAX * 2, { TileProp() }) blockProps = Array<BlockProp>(TILE_UNIQUE_MAX * 2, { BlockProp() })
}
for (i in tileProps.indices) {
tileProps[i] = TileProp()
}
operator fun invoke(module: String, path: String) {
try { try {
// todo verify CSV using pre-calculated SHA256 hash val records = CSVFetcher.readFromModule(module, path)
val records = CSVFetcher.readFromModule("basegame", "tiles/tileprop.csv")
println("[TileCodex] Building tile properties table") println("[BlockCodex] Building block properties table")
records.forEach { records.forEach {
if (intVal(it, "sid") == -1) { if (intVal(it, "sid") == -1) {
@@ -38,7 +34,7 @@ object TileCodex {
} }
else { else {
setProp( setProp(
tileProps[idDamageToIndex(intVal(it, "id"), intVal(it, "sid"))], it blockProps[idDamageToIndex(intVal(it, "id"), intVal(it, "sid"))], it
) )
} }
} }
@@ -46,34 +42,33 @@ object TileCodex {
catch (e: IOException) { catch (e: IOException) {
e.printStackTrace() e.printStackTrace()
} }
} }
fun get(index: Int, subID: Int): TileProp { fun get(index: Int, subID: Int): BlockProp {
try { try {
tileProps[idDamageToIndex(index, subID)].id blockProps[idDamageToIndex(index, subID)].id
} }
catch (e: NullPointerException) { catch (e: NullPointerException) {
throw NullPointerException("Tile prop with id $index and subID $subID does not exist.") throw NullPointerException("Blockprop with id $index and subID $subID does not exist.")
} }
return tileProps[idDamageToIndex(index, subID)] return blockProps[idDamageToIndex(index, subID)]
} }
operator fun get(rawIndex: Int?): TileProp { operator fun get(rawIndex: Int?): BlockProp {
if (rawIndex == null || rawIndex == Tile.NULL) { if (rawIndex == null || rawIndex == Block.NULL) {
return nullProp return nullProp
} }
try { try {
return tileProps[rawIndex] return blockProps[rawIndex]
} }
catch (e: NullPointerException) { catch (e: NullPointerException) {
throw NullPointerException("Tile prop with raw id $rawIndex does not exist.") throw NullPointerException("Blockprop with raw id $rawIndex does not exist.")
} }
} }
private fun setProp(prop: TileProp, record: CSVRecord) { private fun setProp(prop: BlockProp, record: CSVRecord) {
prop.nameKey = record.get("name") prop.nameKey = record.get("name")
prop.id = idDamageToIndex(intVal(record, "id"), intVal(record, "sid")) prop.id = idDamageToIndex(intVal(record, "id"), intVal(record, "sid"))

View File

@@ -1,12 +1,9 @@
package net.torvald.terrarum.tileproperties package net.torvald.terrarum.blockproperties
import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.gameworld.WorldTime
/** /**
* Created by minjaesong on 16-02-16. * Created by minjaesong on 16-02-16.
*/ */
class TileProp { class BlockProp {
var id: Int = 0 var id: Int = 0
@@ -33,7 +30,7 @@ class TileProp {
set(value) { set(value) {
field = value field = value
} }
get() = TilePropUtil.getDynamicLumFunc(field, dynamicLuminosityFunction) get() = BlockPropUtil.getDynamicLumFunc(field, dynamicLuminosityFunction)
var drop: Int = 0 var drop: Int = 0
var dropDamage: Int = 0 var dropDamage: Int = 0

View File

@@ -1,19 +1,18 @@
package net.torvald.terrarum.tileproperties package net.torvald.terrarum.blockproperties
import com.jme3.math.FastMath import com.jme3.math.FastMath
import net.torvald.random.HQRNG import net.torvald.random.HQRNG
import net.torvald.terrarum.Millisec import net.torvald.terrarum.Millisec
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.gameworld.WorldTime import net.torvald.terrarum.gameworld.WorldTime
import net.torvald.terrarum.mapdrawer.LightmapRenderer import net.torvald.terrarum.worlddrawer.LightmapRenderer
import net.torvald.terrarum.toInt import net.torvald.terrarum.toInt
import net.torvald.terrarum.weather.WeatherMixer import net.torvald.terrarum.weather.WeatherMixer
import org.newdawn.slick.Color
/** /**
* Created by minjaesong on 16-06-16. * Created by minjaesong on 16-06-16.
*/ */
object TilePropUtil { object BlockPropUtil {
var flickerFuncX: Millisec = 0 // in milliseconds; saves current status (time) of func var flickerFuncX: Millisec = 0 // in milliseconds; saves current status (time) of func
val flickerFuncDomain: Millisec = 100 // time between two noise sample, in milliseconds val flickerFuncDomain: Millisec = 100 // time between two noise sample, in milliseconds
val flickerFuncRange = 0.012f // intensity [0, 1] val flickerFuncRange = 0.012f // intensity [0, 1]

View File

@@ -1,10 +1,9 @@
package net.torvald.terrarum.tilestats package net.torvald.terrarum.blockstats
import net.torvald.terrarum.gameactors.Player
import net.torvald.terrarum.gameworld.GameWorld import net.torvald.terrarum.gameworld.GameWorld
import net.torvald.terrarum.gameworld.MapLayer import net.torvald.terrarum.gameworld.MapLayer
import net.torvald.terrarum.mapdrawer.TilesDrawer import net.torvald.terrarum.worlddrawer.BlocksDrawer
import net.torvald.terrarum.mapdrawer.FeaturesDrawer import net.torvald.terrarum.worlddrawer.FeaturesDrawer
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import com.jme3.math.FastMath import com.jme3.math.FastMath
@@ -13,7 +12,7 @@ import java.util.Arrays
/** /**
* Created by minjaesong on 16-02-01. * Created by minjaesong on 16-02-01.
*/ */
object TileStats { object BlockStats {
private val tilestat = ShortArray(GameWorld.TILES_SUPPORTED) private val tilestat = ShortArray(GameWorld.TILES_SUPPORTED)
@@ -40,8 +39,8 @@ object TileStats {
val for_x_start = noZoomCameraX / TSIZE val for_x_start = noZoomCameraX / TSIZE
val for_y_start = noZoomCameraY / TSIZE val for_y_start = noZoomCameraY / TSIZE
val for_y_end = TilesDrawer.clampHTile(for_y_start + (renderHeight / TSIZE) + 2) val for_y_end = BlocksDrawer.clampHTile(for_y_start + (renderHeight / TSIZE) + 2)
val for_x_end = TilesDrawer.clampWTile(for_x_start + (renderWidth / TSIZE) + 2) val for_x_end = BlocksDrawer.clampWTile(for_x_start + (renderWidth / TSIZE) + 2)
for (y in for_y_start..for_y_end - 1) { for (y in for_y_start..for_y_end - 1) {
for (x in for_x_start..for_x_end - 1) { for (x in for_x_start..for_x_end - 1) {

View File

@@ -3,7 +3,7 @@ package net.torvald.terrarum.console
import net.torvald.colourutil.Col4096 import net.torvald.colourutil.Col4096
import net.torvald.RasterWriter import net.torvald.RasterWriter
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.tileproperties.Tile import net.torvald.terrarum.blockproperties.Block
import java.io.* import java.io.*
import java.util.HashMap import java.util.HashMap
@@ -19,42 +19,42 @@ internal object ExportMap : ConsoleCommand {
private val colorTable = HashMap<Int, Col4096>() private val colorTable = HashMap<Int, Col4096>()
init { init {
colorTable.put(Tile.AIR, Col4096(0xCEF)) colorTable.put(Block.AIR, Col4096(0xCEF))
colorTable.put(Tile.STONE, Col4096(0x888)) colorTable.put(Block.STONE, Col4096(0x888))
colorTable.put(Tile.DIRT, Col4096(0x753)) colorTable.put(Block.DIRT, Col4096(0x753))
colorTable.put(Tile.GRASS, Col4096(0x472)) colorTable.put(Block.GRASS, Col4096(0x472))
colorTable.put(Tile.ORE_COPPER, Col4096(0x6A8)) colorTable.put(Block.ORE_COPPER, Col4096(0x6A8))
colorTable.put(Tile.ORE_IRON, Col4096(0xC75)) colorTable.put(Block.ORE_IRON, Col4096(0xC75))
colorTable.put(Tile.ORE_GOLD, Col4096(0xA87)) colorTable.put(Block.ORE_GOLD, Col4096(0xA87))
colorTable.put(Tile.ORE_ILMENITE, Col4096(0x8AB)) colorTable.put(Block.ORE_ILMENITE, Col4096(0x8AB))
colorTable.put(Tile.ORE_AURICHALCUM, Col4096(0xD92)) colorTable.put(Block.ORE_AURICHALCUM, Col4096(0xD92))
colorTable.put(Tile.ORE_SILVER, Col4096(0xDDD)) colorTable.put(Block.ORE_SILVER, Col4096(0xDDD))
colorTable.put(Tile.RAW_DIAMOND, Col4096(0x2BF)) colorTable.put(Block.RAW_DIAMOND, Col4096(0x2BF))
colorTable.put(Tile.RAW_RUBY, Col4096(0xB10)) colorTable.put(Block.RAW_RUBY, Col4096(0xB10))
colorTable.put(Tile.RAW_EMERALD, Col4096(0x0B1)) colorTable.put(Block.RAW_EMERALD, Col4096(0x0B1))
colorTable.put(Tile.RAW_SAPPHIRE, Col4096(0x01B)) colorTable.put(Block.RAW_SAPPHIRE, Col4096(0x01B))
colorTable.put(Tile.RAW_TOPAZ, Col4096(0xC70)) colorTable.put(Block.RAW_TOPAZ, Col4096(0xC70))
colorTable.put(Tile.RAW_AMETHYST, Col4096(0x70C)) colorTable.put(Block.RAW_AMETHYST, Col4096(0x70C))
colorTable.put(Tile.WATER, Col4096(0x038)) colorTable.put(Block.WATER, Col4096(0x038))
colorTable.put(Tile.LAVA, Col4096(0xF50)) colorTable.put(Block.LAVA, Col4096(0xF50))
colorTable.put(Tile.SAND, Col4096(0xDDB)) colorTable.put(Block.SAND, Col4096(0xDDB))
colorTable.put(Tile.SAND_WHITE, Col4096(0xFFD)) colorTable.put(Block.SAND_WHITE, Col4096(0xFFD))
colorTable.put(Tile.SAND_RED, Col4096(0xA32)) colorTable.put(Block.SAND_RED, Col4096(0xA32))
colorTable.put(Tile.SAND_DESERT, Col4096(0xEDB)) colorTable.put(Block.SAND_DESERT, Col4096(0xEDB))
colorTable.put(Tile.SAND_BLACK, Col4096(0x444)) colorTable.put(Block.SAND_BLACK, Col4096(0x444))
colorTable.put(Tile.SAND_GREEN, Col4096(0x9A6)) colorTable.put(Block.SAND_GREEN, Col4096(0x9A6))
colorTable.put(Tile.GRAVEL, Col4096(0x664)) colorTable.put(Block.GRAVEL, Col4096(0x664))
colorTable.put(Tile.GRAVEL_GREY, Col4096(0x999)) colorTable.put(Block.GRAVEL_GREY, Col4096(0x999))
colorTable.put(Tile.ICE_NATURAL, Col4096(0x9AB)) colorTable.put(Block.ICE_NATURAL, Col4096(0x9AB))
colorTable.put(Tile.ICE_MAGICAL, Col4096(0x7AC)) colorTable.put(Block.ICE_MAGICAL, Col4096(0x7AC))
colorTable.put(Tile.ICE_FRAGILE, Col4096(0x6AF)) colorTable.put(Block.ICE_FRAGILE, Col4096(0x6AF))
colorTable.put(Tile.SNOW, Col4096(0xCDE)) colorTable.put(Block.SNOW, Col4096(0xCDE))
} }
override fun execute(args: Array<String>) { override fun execute(args: Array<String>) {

View File

@@ -1,6 +1,6 @@
package net.torvald.terrarum.console package net.torvald.terrarum.console
import net.torvald.terrarum.mapdrawer.LightmapRenderer import net.torvald.terrarum.worlddrawer.LightmapRenderer
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
/** /**

View File

@@ -1,11 +1,8 @@
package net.torvald.terrarum.console package net.torvald.terrarum.console
import net.torvald.terrarum.gameactors.Actor
import net.torvald.terrarum.gameactors.ActorWithPhysics
import net.torvald.terrarum.gameactors.PhysTestBall import net.torvald.terrarum.gameactors.PhysTestBall
import net.torvald.terrarum.mapdrawer.TilesDrawer
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.mapdrawer.MapCamera import net.torvald.terrarum.worlddrawer.WorldCamera
import org.dyn4j.geometry.Vector2 import org.dyn4j.geometry.Vector2
/** /**
@@ -25,8 +22,8 @@ internal object SpawnPhysTestBall : ConsoleCommand {
val ball = PhysTestBall() val ball = PhysTestBall()
ball.setPosition( ball.setPosition(
(mouseX + MapCamera.x).toDouble(), (mouseX + WorldCamera.x).toDouble(),
(mouseY + MapCamera.y).toDouble() (mouseY + WorldCamera.y).toDouble()
) )
ball.elasticity = elasticity ball.elasticity = elasticity
ball.applyForce(Vector2(xvel, yvel)) ball.applyForce(Vector2(xvel, yvel))
@@ -38,8 +35,8 @@ internal object SpawnPhysTestBall : ConsoleCommand {
val ball = PhysTestBall() val ball = PhysTestBall()
ball.setPosition( ball.setPosition(
(mouseX + MapCamera.x).toDouble(), (mouseX + WorldCamera.x).toDouble(),
(mouseY + MapCamera.y).toDouble() (mouseY + WorldCamera.y).toDouble()
) )
ball.elasticity = elasticity ball.elasticity = elasticity

View File

@@ -1,7 +1,6 @@
package net.torvald.terrarum.console package net.torvald.terrarum.console
import net.torvald.terrarum.StateInGame import net.torvald.terrarum.worlddrawer.FeaturesDrawer
import net.torvald.terrarum.mapdrawer.FeaturesDrawer
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.gameactors.ActorWithPhysics import net.torvald.terrarum.gameactors.ActorWithPhysics

View File

@@ -1,6 +1,6 @@
package net.torvald.terrarum.console package net.torvald.terrarum.console
import net.torvald.terrarum.mapdrawer.LightmapRenderer import net.torvald.terrarum.worlddrawer.LightmapRenderer
/** /**
* Created by minjaesong on 16-09-07. * Created by minjaesong on 16-09-07.

View File

@@ -6,12 +6,11 @@ import net.torvald.terrarum.console.Echo
import net.torvald.terrarum.console.SetAV import net.torvald.terrarum.console.SetAV
import net.torvald.terrarum.gameactors.Actor import net.torvald.terrarum.gameactors.Actor
import net.torvald.terrarum.gameactors.ActorWithPhysics import net.torvald.terrarum.gameactors.ActorWithPhysics
import net.torvald.terrarum.mapdrawer.FeaturesDrawer import net.torvald.terrarum.worlddrawer.FeaturesDrawer
import java.awt.BorderLayout import java.awt.BorderLayout
import java.awt.GridLayout import java.awt.GridLayout
import java.awt.event.MouseAdapter import java.awt.event.MouseAdapter
import java.awt.event.MouseEvent import java.awt.event.MouseEvent
import java.awt.event.MouseListener
import javax.swing.* import javax.swing.*
/** /**

View File

@@ -1,10 +1,8 @@
package net.torvald.terrarum.gameactors package net.torvald.terrarum.gameactors
import com.jme3.math.FastMath import com.jme3.math.FastMath
import net.torvald.terrarum.Millisec
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.gameactors.faction.Faction import net.torvald.terrarum.gameactors.faction.Faction
import net.torvald.terrarum.gamecontroller.EnumKeyFunc
import net.torvald.terrarum.itemproperties.InventoryItem import net.torvald.terrarum.itemproperties.InventoryItem
import net.torvald.terrarum.itemproperties.Material import net.torvald.terrarum.itemproperties.Material
import net.torvald.terrarum.realestate.LandUtil import net.torvald.terrarum.realestate.LandUtil
@@ -38,11 +36,11 @@ open class ActorHumanoid(birth: GameDate, death: GameDate? = null)
override var houseDesignation: ArrayList<Long>? = ArrayList() override var houseDesignation: ArrayList<Long>? = ArrayList()
override fun addHouseTile(x: Int, y: Int) { override fun addHouseTile(x: Int, y: Int) {
if (houseDesignation != null) houseDesignation!!.add(LandUtil.getTileAddr(x, y)) if (houseDesignation != null) houseDesignation!!.add(LandUtil.getBlockAddr(x, y))
} }
override fun removeHouseTile(x: Int, y: Int) { override fun removeHouseTile(x: Int, y: Int) {
if (houseDesignation != null) houseDesignation!!.remove(LandUtil.getTileAddr(x, y)) if (houseDesignation != null) houseDesignation!!.remove(LandUtil.getBlockAddr(x, y))
} }
override fun clearHouseDesignation() { override fun clearHouseDesignation() {

View File

@@ -4,12 +4,12 @@ import com.jme3.math.FastMath
import net.torvald.point.Point2d import net.torvald.point.Point2d
import net.torvald.terrarum.* import net.torvald.terrarum.*
import net.torvald.terrarum.gameworld.GameWorld import net.torvald.terrarum.gameworld.GameWorld
import net.torvald.terrarum.mapdrawer.FeaturesDrawer import net.torvald.terrarum.worlddrawer.FeaturesDrawer
import net.torvald.terrarum.tileproperties.TileCodex import net.torvald.terrarum.blockproperties.BlockCodex
import net.torvald.spriteanimation.SpriteAnimation import net.torvald.spriteanimation.SpriteAnimation
import net.torvald.terrarum.mapdrawer.MapCamera import net.torvald.terrarum.worlddrawer.WorldCamera
import net.torvald.terrarum.tileproperties.Tile import net.torvald.terrarum.blockproperties.Block
import net.torvald.terrarum.tileproperties.TileProp import net.torvald.terrarum.blockproperties.BlockProp
import org.dyn4j.geometry.Vector2 import org.dyn4j.geometry.Vector2
import org.newdawn.slick.GameContainer import org.newdawn.slick.GameContainer
import org.newdawn.slick.Graphics import org.newdawn.slick.Graphics
@@ -763,7 +763,7 @@ open class ActorWithPhysics(renderOrder: RenderOrder, val immobileBody: Boolean
for (y in tyStart..tyEnd) { for (y in tyStart..tyEnd) {
for (x in txStart..txEnd) { for (x in txStart..txEnd) {
val tile = world.getTileFromTerrain(x, y) val tile = world.getTileFromTerrain(x, y)
if (TileCodex[tile].isSolid) if (BlockCodex[tile].isSolid)
return true return true
} }
} }
@@ -805,7 +805,7 @@ open class ActorWithPhysics(renderOrder: RenderOrder, val immobileBody: Boolean
} }
// evaluate // evaluate
if (TileCodex[world.getTileFromTerrain(tileX, tileY)].isFluid) { if (BlockCodex[world.getTileFromTerrain(tileX, tileY)].isFluid) {
contactAreaCounter += 1 contactAreaCounter += 1
} }
} }
@@ -814,17 +814,17 @@ open class ActorWithPhysics(renderOrder: RenderOrder, val immobileBody: Boolean
} }
private fun getTileFriction(tile: Int) = private fun getTileFriction(tile: Int) =
if (immobileBody && tile == Tile.AIR) if (immobileBody && tile == Block.AIR)
TileCodex[Tile.AIR].friction.frictionToMult().div(1000) BlockCodex[Block.AIR].friction.frictionToMult().div(1000)
.times(if (!grounded) elasticity else 1.0) .times(if (!grounded) elasticity else 1.0)
else else
TileCodex[tile].friction.frictionToMult() BlockCodex[tile].friction.frictionToMult()
/** about stopping /** about stopping
* for about get moving, see updateMovementControl */ * for about get moving, see updateMovementControl */
private fun setHorizontalFriction() { private fun setHorizontalFriction() {
val friction = if (isPlayerNoClip) val friction = if (isPlayerNoClip)
BASE_FRICTION * TileCodex[Tile.STONE].friction.frictionToMult() BASE_FRICTION * BlockCodex[Block.STONE].friction.frictionToMult()
else { else {
// TODO status quo if !submerged else linearBlend(feetFriction, bodyFriction, submergedRatio) // TODO status quo if !submerged else linearBlend(feetFriction, bodyFriction, submergedRatio)
BASE_FRICTION * if (grounded) feetFriction else bodyFriction BASE_FRICTION * if (grounded) feetFriction else bodyFriction
@@ -853,7 +853,7 @@ open class ActorWithPhysics(renderOrder: RenderOrder, val immobileBody: Boolean
private fun setVerticalFriction() { private fun setVerticalFriction() {
val friction = if (isPlayerNoClip) val friction = if (isPlayerNoClip)
BASE_FRICTION * TileCodex[Tile.STONE].friction.frictionToMult() BASE_FRICTION * BlockCodex[Block.STONE].friction.frictionToMult()
else else
BASE_FRICTION * bodyFriction BASE_FRICTION * bodyFriction
@@ -913,8 +913,8 @@ open class ActorWithPhysics(renderOrder: RenderOrder, val immobileBody: Boolean
var friction = 0.0 var friction = 0.0
forEachOccupyingTileNum { forEachOccupyingTileNum {
// get max friction // get max friction
if (getTileFriction(it ?: Tile.AIR) > friction) if (getTileFriction(it ?: Block.AIR) > friction)
friction = getTileFriction(it ?: Tile.AIR) friction = getTileFriction(it ?: Block.AIR)
} }
return friction return friction
@@ -924,8 +924,8 @@ open class ActorWithPhysics(renderOrder: RenderOrder, val immobileBody: Boolean
var friction = 0.0 var friction = 0.0
forEachFeetTileNum { forEachFeetTileNum {
// get max friction // get max friction
if (getTileFriction(it ?: Tile.AIR) > friction) if (getTileFriction(it ?: Block.AIR) > friction)
friction = getTileFriction(it ?: Tile.AIR) friction = getTileFriction(it ?: Block.AIR)
} }
return friction return friction
@@ -1056,7 +1056,7 @@ open class ActorWithPhysics(renderOrder: RenderOrder, val immobileBody: Boolean
val offsetY = spriteGlow!!.cellHeight * scale - hitbox.height - hitboxTranslateY * scale - 2 val offsetY = spriteGlow!!.cellHeight * scale - hitbox.height - hitboxTranslateY * scale - 2
if (MapCamera.xCentre > leftsidePadding && centrePosPoint.x <= rightsidePadding) { if (WorldCamera.xCentre > leftsidePadding && centrePosPoint.x <= rightsidePadding) {
// camera center neg, actor center pos // camera center neg, actor center pos
spriteGlow!!.render(g, spriteGlow!!.render(g,
(hitbox.posX - offsetX).toFloat() + world.width * TILE_SIZE, (hitbox.posX - offsetX).toFloat() + world.width * TILE_SIZE,
@@ -1064,7 +1064,7 @@ open class ActorWithPhysics(renderOrder: RenderOrder, val immobileBody: Boolean
(scale).toFloat() (scale).toFloat()
) )
} }
else if (MapCamera.xCentre < rightsidePadding && centrePosPoint.x >= leftsidePadding) { else if (WorldCamera.xCentre < rightsidePadding && centrePosPoint.x >= leftsidePadding) {
// camera center pos, actor center neg // camera center pos, actor center neg
spriteGlow!!.render(g, spriteGlow!!.render(g,
(hitbox.posX - offsetX).toFloat() - world.width * TILE_SIZE, (hitbox.posX - offsetX).toFloat() - world.width * TILE_SIZE,
@@ -1082,8 +1082,8 @@ open class ActorWithPhysics(renderOrder: RenderOrder, val immobileBody: Boolean
} }
} }
val leftsidePadding = world.width.times(TILE_SIZE) - MapCamera.width.ushr(1) val leftsidePadding = world.width.times(TILE_SIZE) - WorldCamera.width.ushr(1)
val rightsidePadding = MapCamera.width.ushr(1) val rightsidePadding = WorldCamera.width.ushr(1)
override fun drawBody(g: Graphics) { override fun drawBody(g: Graphics) {
if (isVisible && sprite != null) { if (isVisible && sprite != null) {
@@ -1097,7 +1097,7 @@ open class ActorWithPhysics(renderOrder: RenderOrder, val immobileBody: Boolean
val offsetY = sprite!!.cellHeight * scale - hitbox.height - hitboxTranslateY * scale - 2 val offsetY = sprite!!.cellHeight * scale - hitbox.height - hitboxTranslateY * scale - 2
if (MapCamera.xCentre > leftsidePadding && centrePosPoint.x <= rightsidePadding) { if (WorldCamera.xCentre > leftsidePadding && centrePosPoint.x <= rightsidePadding) {
// camera center neg, actor center pos // camera center neg, actor center pos
sprite!!.render(g, sprite!!.render(g,
(hitbox.posX - offsetX).toFloat() + world.width * TILE_SIZE, (hitbox.posX - offsetX).toFloat() + world.width * TILE_SIZE,
@@ -1105,7 +1105,7 @@ open class ActorWithPhysics(renderOrder: RenderOrder, val immobileBody: Boolean
(scale).toFloat() (scale).toFloat()
) )
} }
else if (MapCamera.xCentre < rightsidePadding && centrePosPoint.x >= leftsidePadding) { else if (WorldCamera.xCentre < rightsidePadding && centrePosPoint.x >= leftsidePadding) {
// camera center pos, actor center neg // camera center pos, actor center neg
sprite!!.render(g, sprite!!.render(g,
(hitbox.posX - offsetX).toFloat() - world.width * TILE_SIZE, (hitbox.posX - offsetX).toFloat() - world.width * TILE_SIZE,
@@ -1188,11 +1188,11 @@ open class ActorWithPhysics(renderOrder: RenderOrder, val immobileBody: Boolean
return tiles.forEach(consumer) return tiles.forEach(consumer)
} }
private fun forEachOccupyingTile(consumer: (TileProp?) -> Unit) { private fun forEachOccupyingTile(consumer: (BlockProp?) -> Unit) {
val tileProps = ArrayList<TileProp?>() val tileProps = ArrayList<BlockProp?>()
for (y in tilewiseHitbox.posY.toInt()..tilewiseHitbox.endPointY.toInt()) { for (y in tilewiseHitbox.posY.toInt()..tilewiseHitbox.endPointY.toInt()) {
for (x in tilewiseHitbox.posX.toInt()..tilewiseHitbox.endPointX.toInt()) { for (x in tilewiseHitbox.posX.toInt()..tilewiseHitbox.endPointX.toInt()) {
tileProps.add(TileCodex[world.getTileFromTerrain(x, y)]) tileProps.add(BlockCodex[world.getTileFromTerrain(x, y)])
} }
} }
@@ -1212,14 +1212,14 @@ open class ActorWithPhysics(renderOrder: RenderOrder, val immobileBody: Boolean
return tiles.forEach(consumer) return tiles.forEach(consumer)
} }
private fun forEachFeetTile(consumer: (TileProp?) -> Unit) { private fun forEachFeetTile(consumer: (BlockProp?) -> Unit) {
val tileProps = ArrayList<TileProp?>() val tileProps = ArrayList<BlockProp?>()
// offset 1 pixel to the down so that friction would work // offset 1 pixel to the down so that friction would work
val y = nextHitbox.endPointY.plus(1.0).div(TILE_SIZE).floorInt() val y = nextHitbox.endPointY.plus(1.0).div(TILE_SIZE).floorInt()
for (x in tilewiseHitbox.posX.toInt()..tilewiseHitbox.endPointX.toInt()) { for (x in tilewiseHitbox.posX.toInt()..tilewiseHitbox.endPointX.toInt()) {
tileProps.add(TileCodex[world.getTileFromTerrain(x, y)]) tileProps.add(BlockCodex[world.getTileFromTerrain(x, y)])
} }
return tileProps.forEach(consumer) return tileProps.forEach(consumer)

View File

@@ -2,7 +2,7 @@ package net.torvald.terrarum.gameactors
import net.torvald.terrarum.itemproperties.InventoryItem import net.torvald.terrarum.itemproperties.InventoryItem
import net.torvald.terrarum.itemproperties.ItemCodex import net.torvald.terrarum.itemproperties.ItemCodex
import net.torvald.terrarum.tileproperties.TileCodex import net.torvald.terrarum.blockproperties.BlockCodex
import org.newdawn.slick.GameContainer import org.newdawn.slick.GameContainer
import org.newdawn.slick.Graphics import org.newdawn.slick.Graphics
@@ -17,8 +17,8 @@ class DroppedItem(private val item: InventoryItem) : ActorWithPhysics(Actor.Rend
isVisible = true isVisible = true
avBaseMass = if (item.dynamicID < TileCodex.TILE_UNIQUE_MAX) avBaseMass = if (item.dynamicID < BlockCodex.TILE_UNIQUE_MAX)
TileCodex[item.dynamicID].density / 1000.0 BlockCodex[item.dynamicID].density / 1000.0
else else
ItemCodex[item.dynamicID].mass ItemCodex[item.dynamicID].mass

View File

@@ -1,8 +1,7 @@
package net.torvald.terrarum.gameactors package net.torvald.terrarum.gameactors
import net.torvald.spriteanimation.SpriteAnimation import net.torvald.terrarum.blockproperties.Block
import net.torvald.terrarum.tileproperties.Tile import net.torvald.terrarum.blockproperties.BlockCodex
import net.torvald.terrarum.tileproperties.TileCodex
import java.util.* import java.util.*
/** /**
@@ -11,7 +10,7 @@ import java.util.*
class FixtureTikiTorch : FixtureBase(), Luminous { class FixtureTikiTorch : FixtureBase(), Luminous {
override var luminosity: Int override var luminosity: Int
get() = TileCodex[Tile.TORCH].luminosity get() = BlockCodex[Block.TORCH].luminosity
set(value) { set(value) {
throw UnsupportedOperationException() throw UnsupportedOperationException()
} }

View File

@@ -1,6 +1,5 @@
package net.torvald.terrarum.gameactors package net.torvald.terrarum.gameactors
import net.torvald.terrarum.mapgenerator.RoguelikeRandomiser
import java.util.* import java.util.*
/** /**

View File

@@ -2,9 +2,9 @@ package net.torvald.terrarum.gameactors
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.gameactors.ActorWithPhysics.Companion.SI_TO_GAME_ACC import net.torvald.terrarum.gameactors.ActorWithPhysics.Companion.SI_TO_GAME_ACC
import net.torvald.terrarum.mapdrawer.FeaturesDrawer.TILE_SIZE import net.torvald.terrarum.worlddrawer.FeaturesDrawer.TILE_SIZE
import net.torvald.terrarum.tileproperties.Tile import net.torvald.terrarum.blockproperties.Block
import net.torvald.terrarum.tileproperties.TileCodex import net.torvald.terrarum.blockproperties.BlockCodex
import org.dyn4j.geometry.Vector2 import org.dyn4j.geometry.Vector2
import org.newdawn.slick.GameContainer import org.newdawn.slick.GameContainer
import org.newdawn.slick.Graphics import org.newdawn.slick.Graphics
@@ -43,10 +43,10 @@ open class ParticleBase(renderOrder: Actor.RenderOrder, maxLifeTime: Int? = null
lifetimeCounter += delta lifetimeCounter += delta
if (velocity.isZero || lifetimeCounter >= lifetimeMax || if (velocity.isZero || lifetimeCounter >= lifetimeMax ||
// simple stuck check // simple stuck check
TileCodex[Terrarum.ingame!!.world.getTileFromTerrain( BlockCodex[Terrarum.ingame!!.world.getTileFromTerrain(
hitbox.pointedX.div(TILE_SIZE).floorInt(), hitbox.pointedX.div(TILE_SIZE).floorInt(),
hitbox.pointedY.div(TILE_SIZE).floorInt() hitbox.pointedY.div(TILE_SIZE).floorInt()
) ?: Tile.STONE].isSolid) { ) ?: Block.STONE].isSolid) {
flagDespawn = true flagDespawn = true
} }

View File

@@ -1,10 +1,9 @@
package net.torvald.terrarum.gameactors package net.torvald.terrarum.gameactors
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.mapdrawer.FeaturesDrawer.TILE_SIZE import net.torvald.terrarum.worlddrawer.FeaturesDrawer.TILE_SIZE
import net.torvald.terrarum.mapgenerator.RoguelikeRandomiser import net.torvald.terrarum.worldgenerator.RoguelikeRandomiser
import org.newdawn.slick.Color import org.newdawn.slick.Color
import org.newdawn.slick.GameContainer
import org.newdawn.slick.Graphics import org.newdawn.slick.Graphics
/** /**

View File

@@ -1,10 +1,8 @@
package net.torvald.terrarum.gameactors package net.torvald.terrarum.gameactors
import net.torvald.spriteanimation.SpriteAnimation
import net.torvald.terrarum.ModMgr import net.torvald.terrarum.ModMgr
import net.torvald.terrarum.gameactors.ActorHumanoid
import net.torvald.terrarum.gameactors.ai.LuaAIWrapper import net.torvald.terrarum.gameactors.ai.LuaAIWrapper
import net.torvald.terrarum.mapdrawer.FeaturesDrawer import net.torvald.terrarum.worlddrawer.FeaturesDrawer
/** /**
* Created by minjaesong on 16-03-25. * Created by minjaesong on 16-03-25.

View File

@@ -1,21 +1,13 @@
package net.torvald.terrarum.gameactors package net.torvald.terrarum.gameactors
import net.torvald.JsonFetcher
import net.torvald.terrarum.gameactors.faction.Faction
import net.torvald.spriteanimation.SpriteAnimation
import com.google.gson.JsonObject
import net.torvald.terrarum.ActorValue import net.torvald.terrarum.ActorValue
import net.torvald.terrarum.ModMgr import net.torvald.terrarum.ModMgr
import net.torvald.terrarum.gameactors.ActorHumanoid
import net.torvald.terrarum.gameactors.faction.FactionFactory import net.torvald.terrarum.gameactors.faction.FactionFactory
import net.torvald.terrarum.itemproperties.ItemCodex import net.torvald.terrarum.itemproperties.ItemCodex
import net.torvald.terrarum.mapdrawer.FeaturesDrawer import net.torvald.terrarum.worlddrawer.FeaturesDrawer
import net.torvald.terrarum.tileproperties.Tile import net.torvald.terrarum.blockproperties.Block
import net.torvald.terrarum.to10bit import net.torvald.terrarum.to10bit
import net.torvald.terrarum.toInt
import org.newdawn.slick.Color import org.newdawn.slick.Color
import org.newdawn.slick.SlickException
import java.io.IOException
/** /**
* Created by minjaesong on 16-02-03. * Created by minjaesong on 16-02-03.
@@ -80,12 +72,12 @@ object PlayerBuilderSigrid {
// Test fill up inventory // Test fill up inventory
val tiles = arrayOf( val tiles = arrayOf(
Tile.AIR, Tile.DIRT, Tile.GLASS_CRUDE, Block.AIR, Block.DIRT, Block.GLASS_CRUDE,
Tile.GRASS, Tile.GRAVEL, Tile.ICE_MAGICAL, Tile.LANTERN, Block.GRASS, Block.GRAVEL, Block.ICE_MAGICAL, Block.LANTERN,
Tile.PLANK_BIRCH, Tile.PLANK_BLOODROSE, Tile.PLANK_EBONY, Tile.PLANK_NORMAL, Block.PLANK_BIRCH, Block.PLANK_BLOODROSE, Block.PLANK_EBONY, Block.PLANK_NORMAL,
Tile.SANDSTONE, Tile.SANDSTONE_BLACK, Tile.SANDSTONE_GREEN, Block.SANDSTONE, Block.SANDSTONE_BLACK, Block.SANDSTONE_GREEN,
Tile.SANDSTONE_RED, Tile.STONE, Tile.STONE_BRICKS, Block.SANDSTONE_RED, Block.STONE, Block.STONE_BRICKS,
Tile.STONE_QUARRIED, Tile.STONE_TILE_WHITE, Tile.TORCH Block.STONE_QUARRIED, Block.STONE_TILE_WHITE, Block.TORCH
) )
tiles.forEach { p.addItem(it, 999) } tiles.forEach { p.addItem(it, 999) }
p.inventory.add(ItemCodex.ITEM_STATIC.first) p.inventory.add(ItemCodex.ITEM_STATIC.first)

View File

@@ -1,8 +1,7 @@
package net.torvald.terrarum.gameactors package net.torvald.terrarum.gameactors
import net.torvald.terrarum.ModMgr import net.torvald.terrarum.ModMgr
import net.torvald.terrarum.gameactors.ai.LuaAIWrapper import net.torvald.terrarum.worlddrawer.FeaturesDrawer
import net.torvald.terrarum.mapdrawer.FeaturesDrawer
/** /**
* Created by SKYHi14 on 2017-02-10. * Created by SKYHi14 on 2017-02-10.

View File

@@ -1,11 +1,9 @@
package net.torvald.terrarum.gameactors package net.torvald.terrarum.gameactors
import net.torvald.colourutil.CIELabUtil.darkerLab
import net.torvald.point.Point2d import net.torvald.point.Point2d
import net.torvald.spriteanimation.SpriteAnimation
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.tileproperties.Tile import net.torvald.terrarum.blockproperties.Block
import net.torvald.terrarum.tileproperties.TileCodex import net.torvald.terrarum.blockproperties.BlockCodex
import org.dyn4j.geometry.Vector2 import org.dyn4j.geometry.Vector2
import org.newdawn.slick.Color import org.newdawn.slick.Color
import org.newdawn.slick.GameContainer import org.newdawn.slick.GameContainer
@@ -75,7 +73,7 @@ open class ProjectileSimple(
lifetimeCounter += delta lifetimeCounter += delta
if (ccdCollided || grounded || lifetimeCounter >= lifetimeMax || if (ccdCollided || grounded || lifetimeCounter >= lifetimeMax ||
// stuck check // stuck check
TileCodex[Terrarum.ingame!!.world.getTileFromTerrain(feetPosTile[0], feetPosTile[1]) ?: Tile.STONE].isSolid BlockCodex[Terrarum.ingame!!.world.getTileFromTerrain(feetPosTile[0], feetPosTile[1]) ?: Block.STONE].isSolid
) { ) {
flagDespawn() flagDespawn()
} }

View File

@@ -4,9 +4,9 @@ import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.gameactors.AIControlled import net.torvald.terrarum.gameactors.AIControlled
import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.gameactors.AVKey
import net.torvald.terrarum.gameactors.ActorWithPhysics import net.torvald.terrarum.gameactors.ActorWithPhysics
import net.torvald.terrarum.mapdrawer.LightmapRenderer import net.torvald.terrarum.worlddrawer.LightmapRenderer
import net.torvald.terrarum.tileproperties.Tile import net.torvald.terrarum.blockproperties.Block
import net.torvald.terrarum.tileproperties.TileCodex import net.torvald.terrarum.blockproperties.BlockCodex
import org.luaj.vm2.* import org.luaj.vm2.*
import org.luaj.vm2.lib.OneArgFunction import org.luaj.vm2.lib.OneArgFunction
import org.luaj.vm2.lib.ZeroArgFunction import org.luaj.vm2.lib.ZeroArgFunction
@@ -239,7 +239,7 @@ internal class AILuaAPI(g: Globals, actor: ActorWithPhysics) {
luatable[y - feetTilePos[1]] = LuaTable() luatable[y - feetTilePos[1]] = LuaTable()
for (x in feetTilePos[0] - radius..feetTilePos[0] + radius) { for (x in feetTilePos[0] - radius..feetTilePos[0] + radius) {
val tile = TileCodex[Terrarum.ingame!!.world.getTileFromTerrain(x, y) ?: Tile.NULL] val tile = BlockCodex[Terrarum.ingame!!.world.getTileFromTerrain(x, y) ?: Block.NULL]
val solidity = tile.isSolid.toInt() val solidity = tile.isSolid.toInt()
val liquidity = tile.isFluid.toInt() val liquidity = tile.isFluid.toInt()
val gravity = tile.isFallable.toInt() val gravity = tile.isFallable.toInt()
@@ -283,8 +283,8 @@ internal class AILuaAPI(g: Globals, actor: ActorWithPhysics) {
// search down // search down
var searchDownCounter = 0 var searchDownCounter = 0
while (true) { while (true) {
val tile = Terrarum.ingame!!.world.getTileFromTerrain(x, feetTilePos[1] + searchDownCounter) ?: Tile.STONE val tile = Terrarum.ingame!!.world.getTileFromTerrain(x, feetTilePos[1] + searchDownCounter) ?: Block.STONE
if (TileCodex[tile].isSolid || searchDownCounter >= searchDownLimit) { if (BlockCodex[tile].isSolid || searchDownCounter >= searchDownLimit) {
luatable[x - feetTilePos[0]] = searchDownCounter luatable[x - feetTilePos[0]] = searchDownCounter
break break
} }
@@ -326,8 +326,8 @@ internal class AILuaAPI(g: Globals, actor: ActorWithPhysics) {
// search up // search up
var searchUpCounter = 0 var searchUpCounter = 0
while (true) { while (true) {
val tile = Terrarum.ingame!!.world.getTileFromTerrain(x, feetTilePos[1] - searchUpCounter) ?: Tile.STONE val tile = Terrarum.ingame!!.world.getTileFromTerrain(x, feetTilePos[1] - searchUpCounter) ?: Block.STONE
if (TileCodex[tile].isSolid || searchUpCounter >= searchUpLimit) { if (BlockCodex[tile].isSolid || searchUpCounter >= searchUpLimit) {
luatable[x - feetTilePos[0]] = searchUpCounter luatable[x - feetTilePos[0]] = searchUpCounter
break break
} }
@@ -368,8 +368,8 @@ internal class AILuaAPI(g: Globals, actor: ActorWithPhysics) {
// search up // search up
var searchUpCounter = 0 var searchUpCounter = 0
while (true) { while (true) {
val tile = Terrarum.ingame!!.world.getTileFromTerrain(x, feetTilePos[1] - searchUpCounter) ?: Tile.STONE val tile = Terrarum.ingame!!.world.getTileFromTerrain(x, feetTilePos[1] - searchUpCounter) ?: Block.STONE
if (!TileCodex[tile].isSolid || searchUpCounter >= searchUpLimit) { if (!BlockCodex[tile].isSolid || searchUpCounter >= searchUpLimit) {
luatable[x - feetTilePos[0]] = searchUpCounter luatable[x - feetTilePos[0]] = searchUpCounter
break break
} }

View File

@@ -1,15 +1,10 @@
package net.torvald.terrarum.gamecontroller package net.torvald.terrarum.gamecontroller
import net.torvald.terrarum.mapdrawer.TilesDrawer import net.torvald.terrarum.worlddrawer.FeaturesDrawer
import net.torvald.terrarum.mapdrawer.FeaturesDrawer
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.gameactors.* import net.torvald.terrarum.gameactors.*
import net.torvald.terrarum.itemproperties.InventoryItem import net.torvald.terrarum.itemproperties.InventoryItem
import net.torvald.terrarum.mapdrawer.MapCamera import net.torvald.terrarum.worlddrawer.WorldCamera
import net.torvald.terrarum.tileproperties.Tile
import net.torvald.terrarum.tileproperties.TileCodex
import net.torvald.terrarum.ui.UIHandler
import org.dyn4j.geometry.Vector2
import org.newdawn.slick.GameContainer import org.newdawn.slick.GameContainer
import org.newdawn.slick.Input import org.newdawn.slick.Input
@@ -25,10 +20,10 @@ object GameController {
/** position of the mouse (pixelwise) relative to the world (also, currently pointing world-wise coordinate, if the world coordinate is pixel-wise) */ /** position of the mouse (pixelwise) relative to the world (also, currently pointing world-wise coordinate, if the world coordinate is pixel-wise) */
val mouseX: Float val mouseX: Float
get() = (MapCamera.x + Terrarum.appgc.input.mouseX / (ingame.screenZoom ?: 1f)) get() = (WorldCamera.x + Terrarum.appgc.input.mouseX / (ingame.screenZoom ?: 1f))
/** position of the mouse (pixelwise) relative to the world (also, currently pointing world-wise coordinate, if the world coordinate is pixel-wise)*/ /** position of the mouse (pixelwise) relative to the world (also, currently pointing world-wise coordinate, if the world coordinate is pixel-wise)*/
val mouseY: Float val mouseY: Float
get() = (MapCamera.y + Terrarum.appgc.input.mouseY / (ingame.screenZoom ?: 1f)) get() = (WorldCamera.y + Terrarum.appgc.input.mouseY / (ingame.screenZoom ?: 1f))
/** currently pointing tile coordinate */ /** currently pointing tile coordinate */
val mouseTileX: Int val mouseTileX: Int
get() = (mouseX / FeaturesDrawer.TILE_SIZE).floorInt() get() = (mouseX / FeaturesDrawer.TILE_SIZE).floorInt()

View File

@@ -2,12 +2,11 @@
package net.torvald.terrarum.gameworld package net.torvald.terrarum.gameworld
import net.torvald.terrarum.realestate.LandUtil import net.torvald.terrarum.realestate.LandUtil
import net.torvald.terrarum.tileproperties.TileCodex import net.torvald.terrarum.blockproperties.BlockCodex
import org.dyn4j.geometry.Vector2 import org.dyn4j.geometry.Vector2
import org.newdawn.slick.SlickException
typealias TileAddress = Long typealias BlockAddress = Long
typealias TileDamage = Float typealias BlockDamage = Float
class GameWorld(val width: Int, val height: Int) { class GameWorld(val width: Int, val height: Int) {
@@ -25,8 +24,8 @@ class GameWorld(val width: Int, val height: Int) {
val spawnX: Int val spawnX: Int
val spawnY: Int val spawnY: Int
val wallDamages = HashMap<TileAddress, TileDamage>() val wallDamages = HashMap<BlockAddress, BlockDamage>()
val terrainDamages = HashMap<TileAddress, TileDamage>() val terrainDamages = HashMap<BlockAddress, BlockDamage>()
//public World physWorld = new World( new Vec2(0, -TerrarumMain.game.gravitationalAccel) ); //public World physWorld = new World( new Vec2(0, -TerrarumMain.game.gravitationalAccel) );
//physics //physics
@@ -155,13 +154,13 @@ class GameWorld(val width: Int, val height: Int) {
fun setTileWall(x: Int, y: Int, tile: Byte, damage: Int) { fun setTileWall(x: Int, y: Int, tile: Byte, damage: Int) {
layerWall.setTile(x fmod width, y, tile) layerWall.setTile(x fmod width, y, tile)
layerWallLowBits.setData(x fmod width, y, damage) layerWallLowBits.setData(x fmod width, y, damage)
wallDamages.remove(LandUtil.getTileAddr(x, y)) wallDamages.remove(LandUtil.getBlockAddr(x, y))
} }
fun setTileTerrain(x: Int, y: Int, tile: Byte, damage: Int) { fun setTileTerrain(x: Int, y: Int, tile: Byte, damage: Int) {
layerTerrain.setTile(x fmod width, y, tile) layerTerrain.setTile(x fmod width, y, tile)
layerTerrainLowBits.setData(x fmod width, y, damage) layerTerrainLowBits.setData(x fmod width, y, damage)
terrainDamages.remove(LandUtil.getTileAddr(x, y)) terrainDamages.remove(LandUtil.getBlockAddr(x, y))
} }
fun setTileWire(x: Int, y: Int, tile: Byte) { fun setTileWire(x: Int, y: Int, tile: Byte) {
@@ -232,7 +231,7 @@ class GameWorld(val width: Int, val height: Int) {
*/ */
fun inflictTerrainDamage(x: Int, y: Int, damage: Double): Boolean { fun inflictTerrainDamage(x: Int, y: Int, damage: Double): Boolean {
val damage = damage.toFloat() val damage = damage.toFloat()
val addr = LandUtil.getTileAddr(x, y) val addr = LandUtil.getBlockAddr(x, y)
//println("[GameWorld] ($x, $y) Damage: $damage") //println("[GameWorld] ($x, $y) Damage: $damage")
@@ -249,7 +248,7 @@ class GameWorld(val width: Int, val height: Int) {
//println("[GameWorld] accumulated damage: ${terrainDamages[addr]}") //println("[GameWorld] accumulated damage: ${terrainDamages[addr]}")
// remove tile from the world // remove tile from the world
if (terrainDamages[addr] ?: 0f >= TileCodex[getTileFromTerrain(x, y)].strength) { if (terrainDamages[addr] ?: 0f >= BlockCodex[getTileFromTerrain(x, y)].strength) {
setTileTerrain(x, y, 0) setTileTerrain(x, y, 0)
return true return true
} }
@@ -257,14 +256,14 @@ class GameWorld(val width: Int, val height: Int) {
return false return false
} }
fun getTerrainDamage(x: Int, y: Int): Float = fun getTerrainDamage(x: Int, y: Int): Float =
terrainDamages[LandUtil.getTileAddr(x, y)] ?: 0f terrainDamages[LandUtil.getBlockAddr(x, y)] ?: 0f
/** /**
* @return true if block is broken * @return true if block is broken
*/ */
fun inflictWallDamage(x: Int, y: Int, damage: Double): Boolean { fun inflictWallDamage(x: Int, y: Int, damage: Double): Boolean {
val damage = damage.toFloat() val damage = damage.toFloat()
val addr = LandUtil.getTileAddr(x, y) val addr = LandUtil.getBlockAddr(x, y)
if (wallDamages[addr] == null) { // add new if (wallDamages[addr] == null) { // add new
wallDamages[addr] = damage wallDamages[addr] = damage
@@ -277,7 +276,7 @@ class GameWorld(val width: Int, val height: Int) {
} }
// remove tile from the world // remove tile from the world
if (wallDamages[addr]!! >= TileCodex[getTileFromWall(x, y)].strength) { if (wallDamages[addr]!! >= BlockCodex[getTileFromWall(x, y)].strength) {
setTileWall(x, y, 0) setTileWall(x, y, 0)
return true return true
} }
@@ -285,7 +284,7 @@ class GameWorld(val width: Int, val height: Int) {
return false return false
} }
fun getWallDamage(x: Int, y: Int): Float = fun getWallDamage(x: Int, y: Int): Float =
wallDamages[LandUtil.getTileAddr(x, y)] ?: 0f wallDamages[LandUtil.getBlockAddr(x, y)] ?: 0f
companion object { companion object {

View File

@@ -1,16 +1,12 @@
package net.torvald.terrarum.gameworld package net.torvald.terrarum.gameworld
import net.torvald.random.HQRNG
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.gameactors.AnyPlayer import net.torvald.terrarum.gameactors.AnyPlayer
import net.torvald.terrarum.gameactors.HistoricalFigure
import net.torvald.terrarum.gameactors.Player
import net.torvald.terrarum.gameactors.roundInt import net.torvald.terrarum.gameactors.roundInt
import net.torvald.terrarum.gameworld.WorldSimulator.isSolid import net.torvald.terrarum.worlddrawer.BlocksDrawer
import net.torvald.terrarum.mapdrawer.TilesDrawer import net.torvald.terrarum.worlddrawer.FeaturesDrawer
import net.torvald.terrarum.mapdrawer.FeaturesDrawer import net.torvald.terrarum.blockproperties.Block
import net.torvald.terrarum.tileproperties.Tile import net.torvald.terrarum.blockproperties.BlockCodex
import net.torvald.terrarum.tileproperties.TileCodex
import org.newdawn.slick.Color import org.newdawn.slick.Color
import org.newdawn.slick.Graphics import org.newdawn.slick.Graphics
@@ -74,10 +70,10 @@ object WorldSimulator {
///////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////
for (y in updateYFrom..updateYTo) { for (y in updateYFrom..updateYTo) {
for (x in updateXFrom..updateXTo) { for (x in updateXFrom..updateXTo) {
val tile = world.getTileFromTerrain(x, y) ?: Tile.STONE val tile = world.getTileFromTerrain(x, y) ?: Block.STONE
val tileBottom = world.getTileFromTerrain(x, y + 1) ?: Tile.STONE val tileBottom = world.getTileFromTerrain(x, y + 1) ?: Block.STONE
val tileLeft = world.getTileFromTerrain(x - 1, y) ?: Tile.STONE val tileLeft = world.getTileFromTerrain(x - 1, y) ?: Block.STONE
val tileRight = world.getTileFromTerrain(x + 1, y) ?: Tile.STONE val tileRight = world.getTileFromTerrain(x + 1, y) ?: Block.STONE
if (tile.isFluid()) { if (tile.isFluid()) {
// move down if not obstructed // move down if not obstructed
@@ -137,21 +133,21 @@ object WorldSimulator {
fun displaceFallables(delta: Int) { fun displaceFallables(delta: Int) {
for (y in updateYFrom..updateYTo) { for (y in updateYFrom..updateYTo) {
for (x in updateXFrom..updateXTo) { for (x in updateXFrom..updateXTo) {
val tile = world.getTileFromTerrain(x, y) ?: Tile.STONE val tile = world.getTileFromTerrain(x, y) ?: Block.STONE
val tileBelow = world.getTileFromTerrain(x, y + 1) ?: Tile.STONE val tileBelow = world.getTileFromTerrain(x, y + 1) ?: Block.STONE
if (tile.isFallable()) { if (tile.isFallable()) {
// displace fluid. This statement must precede isSolid() // displace fluid. This statement must precede isSolid()
if (tileBelow.isFluid()) { if (tileBelow.isFluid()) {
// remove tileThis to create air pocket // remove tileThis to create air pocket
world.setTileTerrain(x, y, Tile.AIR) world.setTileTerrain(x, y, Block.AIR)
pour(x, y, drain(x, y, tileBelow.fluidLevel().toInt())) pour(x, y, drain(x, y, tileBelow.fluidLevel().toInt()))
// place our tile // place our tile
world.setTileTerrain(x, y + 1, tile) world.setTileTerrain(x, y + 1, tile)
} }
else if (!tileBelow.isSolid()) { else if (!tileBelow.isSolid()) {
world.setTileTerrain(x, y, Tile.AIR) world.setTileTerrain(x, y, Block.AIR)
world.setTileTerrain(x, y + 1, tile) world.setTileTerrain(x, y + 1, tile)
} }
} }
@@ -166,7 +162,7 @@ object WorldSimulator {
for (y in 0..fluidMap.size - 1) { for (y in 0..fluidMap.size - 1) {
for (x in 0..fluidMap[0].size - 1) { for (x in 0..fluidMap[0].size - 1) {
val data = fluidMap[y][x] val data = fluidMap[y][x]
if (TilesDrawer.tileInCamera(x + updateXFrom, y + updateYFrom)) { if (BlocksDrawer.tileInCamera(x + updateXFrom, y + updateYFrom)) {
if (data == 0.toByte()) if (data == 0.toByte())
g.color = colourNone g.color = colourNone
else else
@@ -197,7 +193,7 @@ object WorldSimulator {
private fun worldToFluidMap(world: GameWorld) { private fun worldToFluidMap(world: GameWorld) {
for (y in updateYFrom..updateYTo) { for (y in updateYFrom..updateYTo) {
for (x in updateXFrom..updateXTo) { for (x in updateXFrom..updateXTo) {
val tile = world.getTileFromTerrain(x, y) ?: Tile.STONE val tile = world.getTileFromTerrain(x, y) ?: Block.STONE
if (tile.isFluid()) { if (tile.isFluid()) {
fluidMap[y - updateYFrom][x - updateXFrom] = tile.fluidLevel().toByte() fluidMap[y - updateYFrom][x - updateXFrom] = tile.fluidLevel().toByte()
fluidTypeMap[y - updateYFrom][x - updateXFrom] = tile.fluidType().toByte() fluidTypeMap[y - updateYFrom][x - updateXFrom] = tile.fluidType().toByte()
@@ -217,13 +213,13 @@ object WorldSimulator {
} }
} }
fun Int.isFluid() = TileCodex[this].isFluid fun Int.isFluid() = BlockCodex[this].isFluid
fun Int.isSolid() = this.fluidLevel() == FLUID_MAX || TileCodex[this].isSolid fun Int.isSolid() = this.fluidLevel() == FLUID_MAX || BlockCodex[this].isSolid
//fun Int.viscosity() = TileCodex[this]. //fun Int.viscosity() = BlockCodex[this].
fun Int.fluidLevel() = if (!this.isFluid()) 0 else (this % FLUID_MAX).plus(1) fun Int.fluidLevel() = if (!this.isFluid()) 0 else (this % FLUID_MAX).plus(1)
fun Int.fluidType() = (this / 16) // 0 - 255, 255 being water, 254 being lava fun Int.fluidType() = (this / 16) // 0 - 255, 255 being water, 254 being lava
fun Int.isEven() = (this and 0x01) == 0 fun Int.isEven() = (this and 0x01) == 0
fun Int.isFallable() = TileCodex[this].isFallable fun Int.isFallable() = BlockCodex[this].isFallable
private fun placeFluid(world: GameWorld, x: Int, y: Int, fluidType: Byte, amount: Int) { private fun placeFluid(world: GameWorld, x: Int, y: Int, fluidType: Byte, amount: Int) {
if (world.layerTerrain.isInBound(x, y)) { if (world.layerTerrain.isInBound(x, y)) {
@@ -231,7 +227,7 @@ object WorldSimulator {
world.setTileTerrain(x, y, fluidType, amount - 1) world.setTileTerrain(x, y, fluidType, amount - 1)
} }
else if (amount == 0 && world.getTileFromTerrain(x, y)!!.isFluid()) { else if (amount == 0 && world.getTileFromTerrain(x, y)!!.isFluid()) {
world.setTileTerrain(x, y, Tile.AIR) world.setTileTerrain(x, y, Block.AIR)
} }
} }
} }

View File

@@ -202,42 +202,42 @@ abstract class InventoryItem : Comparable<InventoryItem>, Cloneable {
} }
object EquipPosition { object EquipPosition {
const val NULL = -1 @JvmStatic val NULL = -1
const val ARMOUR = 0 @JvmStatic val ARMOUR = 0
// you can add alias to address something like LEGGINGS, BREASTPLATE, RINGS, NECKLACES, etc. // you can add alias to address something like LEGGINGS, BREASTPLATE, RINGS, NECKLACES, etc.
const val BODY_BACK = 1 // wings, jetpacks, etc. @JvmStatic val BODY_BACK = 1 // wings, jetpacks, etc.
const val BODY_BUFF2 = 2 @JvmStatic val BODY_BUFF2 = 2
const val BODY_BUFF3 = 3 @JvmStatic val BODY_BUFF3 = 3
const val BODY_BUFF4 = 4 @JvmStatic val BODY_BUFF4 = 4
const val BODY_BUFF5 = 5 @JvmStatic val BODY_BUFF5 = 5
const val BODY_BUFF6 = 6 @JvmStatic val BODY_BUFF6 = 6
const val BODY_BUFF7 = 7 @JvmStatic val BODY_BUFF7 = 7
const val BODY_BUFF8 = 8 @JvmStatic val BODY_BUFF8 = 8
const val HAND_GRIP = 9 @JvmStatic val HAND_GRIP = 9
const val HAND_GAUNTLET = 10 @JvmStatic val HAND_GAUNTLET = 10
const val HAND_BUFF2 = 11 @JvmStatic val HAND_BUFF2 = 11
const val HAND_BUFF3 = 12 @JvmStatic val HAND_BUFF3 = 12
const val HAND_BUFF4 = 13 @JvmStatic val HAND_BUFF4 = 13
const val FOOTWEAR = 14 @JvmStatic val FOOTWEAR = 14
const val HEADGEAR = 15 @JvmStatic val HEADGEAR = 15
const val INDEX_MAX = 15 @JvmStatic val INDEX_MAX = 15
} }
object Category { object Category {
const val WEAPON = "weapon" @JvmStatic val WEAPON = "weapon"
const val TOOL = "tool" @JvmStatic val TOOL = "tool"
const val ARMOUR = "armour" @JvmStatic val ARMOUR = "armour"
const val GENERIC = "generic" @JvmStatic val GENERIC = "generic"
const val POTION = "potion" @JvmStatic val POTION = "potion"
const val MAGIC = "magic" @JvmStatic val MAGIC = "magic"
const val BLOCK = "block" @JvmStatic val BLOCK = "block"
const val WALL = "wall" @JvmStatic val WALL = "wall"
const val MISC = "misc" @JvmStatic val MISC = "misc"
} }
override public fun clone(): InventoryItem { override public fun clone(): InventoryItem {

View File

@@ -4,15 +4,13 @@ import net.torvald.point.Point2d
import net.torvald.terrarum.KVHashMap import net.torvald.terrarum.KVHashMap
import net.torvald.terrarum.gameactors.CanBeAnItem import net.torvald.terrarum.gameactors.CanBeAnItem
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.gameactors.AVKey
import net.torvald.terrarum.gameactors.ActorWithPhysics import net.torvald.terrarum.gameactors.ActorWithPhysics
import net.torvald.terrarum.gamecontroller.mouseTileX import net.torvald.terrarum.gamecontroller.mouseTileX
import net.torvald.terrarum.gamecontroller.mouseTileY import net.torvald.terrarum.gamecontroller.mouseTileY
import net.torvald.terrarum.gameworld.GameWorld import net.torvald.terrarum.gameworld.GameWorld
import net.torvald.terrarum.mapdrawer.TilesDrawer import net.torvald.terrarum.worlddrawer.BlocksDrawer
import net.torvald.terrarum.mapdrawer.TilesDrawer.wallOverlayColour import net.torvald.terrarum.worlddrawer.BlocksDrawer.wallOverlayColour
import net.torvald.terrarum.tileproperties.Tile import net.torvald.terrarum.blockproperties.BlockCodex
import net.torvald.terrarum.tileproperties.TileCodex
import org.newdawn.slick.GameContainer import org.newdawn.slick.GameContainer
import org.newdawn.slick.Image import org.newdawn.slick.Image
import java.util.* import java.util.*
@@ -41,16 +39,17 @@ object ItemCodex {
init { init {
// tile items (blocks and walls are the same thing basically) // blocks.csvs are loaded by ModMgr beforehand
// block items (blocks and walls are the same thing basically)
for (i in ITEM_TILES + ITEM_WALLS) { for (i in ITEM_TILES + ITEM_WALLS) {
itemCodex[i] = object : InventoryItem() { itemCodex[i] = object : InventoryItem() {
override val originalID = i override val originalID = i
override var dynamicID = i override var dynamicID = i
override val isUnique: Boolean = false override val isUnique: Boolean = false
override var baseMass: Double = TileCodex[i].density / 1000.0 override var baseMass: Double = BlockCodex[i].density / 1000.0
override var baseToolSize: Double? = null override var baseToolSize: Double? = null
override var equipPosition = EquipPosition.HAND_GRIP override var equipPosition = EquipPosition.HAND_GRIP
override val originalName = TileCodex[i % ITEM_WALLS.first].nameKey override val originalName = BlockCodex[i % ITEM_WALLS.first].nameKey
override var stackable = true override var stackable = true
override var inventoryCategory = Category.BLOCK override var inventoryCategory = Category.BLOCK
override var isDynamic = false override var isDynamic = false
@@ -138,7 +137,7 @@ object ItemCodex {
} }
// return false if there's no tile // return false if there's no tile
if (Tile.AIR == Terrarum.ingame!!.world.getTileFromTerrain(gc.mouseTileX, gc.mouseTileY)) if (Block.AIR == Terrarum.ingame!!.world.getTileFromTerrain(gc.mouseTileX, gc.mouseTileY))
return false return false
@@ -192,17 +191,17 @@ object ItemCodex {
fun getItemImage(item: InventoryItem): Image { fun getItemImage(item: InventoryItem): Image {
// terrain // terrain
if (item.originalID in ITEM_TILES) { if (item.originalID in ITEM_TILES) {
return TilesDrawer.tilesTerrain.getSubImage((item.dynamicID % 16) * 16, item.originalID / 16) return BlocksDrawer.tilesTerrain.getSubImage((item.dynamicID % 16) * 16, item.originalID / 16)
} }
// wall // wall
else if (item.originalID in ITEM_WALLS) { else if (item.originalID in ITEM_WALLS) {
val img = TilesDrawer.tilesTerrain.getSubImage((item.originalID % 16) * 16, item.originalID / 16) val img = BlocksDrawer.tilesTerrain.getSubImage((item.originalID % 16) * 16, item.originalID / 16)
img.setImageColor(wallOverlayColour.r, wallOverlayColour.g, wallOverlayColour.b) img.setImageColor(wallOverlayColour.r, wallOverlayColour.g, wallOverlayColour.b)
return img return img
} }
// wire // wire
else if (item.originalID in ITEM_WIRES) { else if (item.originalID in ITEM_WIRES) {
return TilesDrawer.tilesWire.getSubImage((item.originalID % 16) * 16, item.originalID / 16) return BlocksDrawer.tilesWire.getSubImage((item.originalID % 16) * 16, item.originalID / 16)
} }
else else
return itemImagePlaceholder return itemImagePlaceholder

View File

@@ -2,16 +2,16 @@ package net.torvald.terrarum.realestate
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.gameactors.faction.FactionCodex import net.torvald.terrarum.gameactors.faction.FactionCodex
import net.torvald.terrarum.gameworld.TileAddress import net.torvald.terrarum.gameworld.BlockAddress
/** /**
* Created by minjaesong on 16-03-27. * Created by minjaesong on 16-03-27.
*/ */
object LandUtil { object LandUtil {
fun getTileAddr(x: Int, y: Int): TileAddress = fun getBlockAddr(x: Int, y: Int): BlockAddress =
(Terrarum.ingame!!.world.width * y).toLong() + x (Terrarum.ingame!!.world.width * y).toLong() + x
fun resolveAbsoluteTileNumber(t: TileAddress): Pair<Int, Int> = fun resolveAbsoluteBlockNumber(t: BlockAddress): Pair<Int, Int> =
Pair((t % Terrarum.ingame!!.world.width).toInt(), (t / Terrarum.ingame!!.world.width).toInt()) Pair((t % Terrarum.ingame!!.world.width).toInt(), (t / Terrarum.ingame!!.world.width).toInt())
/** /**

View File

@@ -1,6 +1,5 @@
package net.torvald.terrarum.realestate package net.torvald.terrarum.realestate
import java.io.Serializable
import java.util.* import java.util.*
/** /**
@@ -8,20 +7,20 @@ import java.util.*
*/ */
object RealEstateCodex { object RealEstateCodex {
/** /**
* HashMap<Absolute tile number, Actor/Faction ID> * HashMap<Absolute block number, Actor/Faction ID>
* *
* Note that a tile can have only ONE owner (as an Actor or Faction ID) * Note that a block can have only ONE owner (as an Actor or Faction ID)
*/ */
private var ownershipRegistry: HashMap<Long, Int> = HashMap() private var ownershipRegistry: HashMap<Long, Int> = HashMap()
fun setOwner(tileX: Int, tileY: Int, refID: Int) { fun setOwner(tileX: Int, tileY: Int, refID: Int) {
ownershipRegistry[LandUtil.getTileAddr(tileX, tileY)] = refID ownershipRegistry[LandUtil.getBlockAddr(tileX, tileY)] = refID
} }
fun removeOwner(tileX: Int, tileY: Int) { fun removeOwner(tileX: Int, tileY: Int) {
ownershipRegistry.remove(LandUtil.getTileAddr(tileX, tileY)) ownershipRegistry.remove(LandUtil.getBlockAddr(tileX, tileY))
} }
fun getOwner(tileX: Int, tileY: Int): Int? = fun getOwner(tileX: Int, tileY: Int): Int? =
ownershipRegistry[LandUtil.getTileAddr(tileX, tileY)] ownershipRegistry[LandUtil.getBlockAddr(tileX, tileY)]
} }

View File

@@ -1,154 +0,0 @@
package net.torvald.terrarum.tileproperties
import net.torvald.terrarum.Terrarum
/**
* Created by minjaesong on 16-02-21.
*/
object Tile {
val AIR = 0 // hard coded; this is the standard
val STONE = TileCodex.idDamageToIndex(1, 0)
val STONE_QUARRIED = TileCodex.idDamageToIndex(1, 1)
val STONE_TILE_WHITE = TileCodex.idDamageToIndex(1, 2)
val STONE_BRICKS = TileCodex.idDamageToIndex(1, 3)
val DIRT = TileCodex.idDamageToIndex(2, 0)
val GRASS = TileCodex.idDamageToIndex(2, 1)
val PLANK_NORMAL = TileCodex.idDamageToIndex(3, 0)
val PLANK_EBONY = TileCodex.idDamageToIndex(3, 1)
val PLANK_BIRCH = TileCodex.idDamageToIndex(3, 2)
val PLANK_BLOODROSE = TileCodex.idDamageToIndex(3, 3)
val TRUNK_NORMAL = TileCodex.idDamageToIndex(4, 0)
val TRUNK_EBONY = TileCodex.idDamageToIndex(4, 1)
val TRUNK_BIRCH = TileCodex.idDamageToIndex(4, 2)
val TRUNK_BLOODROSE = TileCodex.idDamageToIndex(4, 3)
val SAND = TileCodex.idDamageToIndex(5, 0)
val SAND_WHITE = TileCodex.idDamageToIndex(5, 1)
val SAND_RED = TileCodex.idDamageToIndex(5, 2)
val SAND_DESERT = TileCodex.idDamageToIndex(5, 3)
val SAND_BLACK = TileCodex.idDamageToIndex(5, 4)
val SAND_GREEN = TileCodex.idDamageToIndex(5, 5)
val GRAVEL = TileCodex.idDamageToIndex(6, 0)
val GRAVEL_GREY = TileCodex.idDamageToIndex(6, 1)
val ORE_COPPER = TileCodex.idDamageToIndex(7, 0)
val ORE_IRON = TileCodex.idDamageToIndex(7, 1)
val ORE_GOLD = TileCodex.idDamageToIndex(7, 2)
val ORE_SILVER = TileCodex.idDamageToIndex(7, 3)
val ORE_ILMENITE = TileCodex.idDamageToIndex(7, 4)
val ORE_AURICHALCUM = TileCodex.idDamageToIndex(7, 5)
val RAW_RUBY = TileCodex.idDamageToIndex(8, 0)
val RAW_EMERALD = TileCodex.idDamageToIndex(8, 1)
val RAW_SAPPHIRE = TileCodex.idDamageToIndex(8, 2)
val RAW_TOPAZ = TileCodex.idDamageToIndex(8, 3)
val RAW_DIAMOND = TileCodex.idDamageToIndex(8, 4)
val RAW_AMETHYST = TileCodex.idDamageToIndex(8, 5)
val SNOW = TileCodex.idDamageToIndex(9, 0)
val ICE_FRAGILE = TileCodex.idDamageToIndex(9, 1)
val ICE_NATURAL = TileCodex.idDamageToIndex(9, 2)
val ICE_MAGICAL = TileCodex.idDamageToIndex(9, 3)
val GLASS_CRUDE = TileCodex.idDamageToIndex(9, 4)
val GLASS_CLEAN = TileCodex.idDamageToIndex(9, 5)
val PLATFORM_STONE = TileCodex.idDamageToIndex(10, 0)
val PLATFORM_WOODEN = TileCodex.idDamageToIndex(10, 1)
val PLATFORM_EBONY = TileCodex.idDamageToIndex(10, 2)
val PLATFORM_BIRCH = TileCodex.idDamageToIndex(10, 3)
val PLATFORM_BLOODROSE = TileCodex.idDamageToIndex(10, 4)
val TORCH = TileCodex.idDamageToIndex(11, 0)
val TORCH_FROST = TileCodex.idDamageToIndex(11, 1)
val TORCH_OFF = TileCodex.idDamageToIndex(12, 0)
val TORCH_FROST_OFF = TileCodex.idDamageToIndex(12, 1)
val ILLUMINATOR_WHITE = TileCodex.idDamageToIndex(13, 0)
val ILLUMINATOR_YELLOW = TileCodex.idDamageToIndex(13, 1)
val ILLUMINATOR_ORANGE = TileCodex.idDamageToIndex(13, 2)
val ILLUMINATOR_RED = TileCodex.idDamageToIndex(13, 3)
val ILLUMINATOR_FUCHSIA = TileCodex.idDamageToIndex(13, 4)
val ILLUMINATOR_PURPLE = TileCodex.idDamageToIndex(13, 5)
val ILLUMINATOR_BLUE = TileCodex.idDamageToIndex(13, 6)
val ILLUMINATOR_CYAN = TileCodex.idDamageToIndex(13, 7)
val ILLUMINATOR_GREEN = TileCodex.idDamageToIndex(13, 8)
val ILLUMINATOR_GREEN_DARK = TileCodex.idDamageToIndex(13, 9)
val ILLUMINATOR_BROWN = TileCodex.idDamageToIndex(13, 10)
val ILLUMINATOR_TAN = TileCodex.idDamageToIndex(13, 11)
val ILLUMINATOR_GREY_LIGHT = TileCodex.idDamageToIndex(13, 12)
val ILLUMINATOR_GREY_MED = TileCodex.idDamageToIndex(13, 13)
val ILLUMINATOR_GREY_DARK = TileCodex.idDamageToIndex(13, 14)
val ILLUMINATOR_BLACK = TileCodex.idDamageToIndex(13, 15)
val ILLUMINATOR_WHITE_OFF = TileCodex.idDamageToIndex(14, 0)
val ILLUMINATOR_YELLOW_OFF = TileCodex.idDamageToIndex(14, 1)
val ILLUMINATOR_ORANGE_OFF = TileCodex.idDamageToIndex(14, 2)
val ILLUMINATOR_RED_OFF = TileCodex.idDamageToIndex(14, 3)
val ILLUMINATOR_FUCHSIA_OFF = TileCodex.idDamageToIndex(14, 4)
val ILLUMINATOR_PURPLE_OFF = TileCodex.idDamageToIndex(14, 5)
val ILLUMINATOR_BLUE_OFF = TileCodex.idDamageToIndex(14, 6)
val ILLUMINATOR_CYAN_OFF = TileCodex.idDamageToIndex(14, 7)
val ILLUMINATOR_GREEN_OFF = TileCodex.idDamageToIndex(14, 8)
val ILLUMINATOR_GREEN_DARK_OFF = TileCodex.idDamageToIndex(14, 9)
val ILLUMINATOR_BROWN_OFF = TileCodex.idDamageToIndex(14, 10)
val ILLUMINATOR_TAN_OFF = TileCodex.idDamageToIndex(14, 11)
val ILLUMINATOR_GREY_LIGHT_OFF = TileCodex.idDamageToIndex(14, 12)
val ILLUMINATOR_GREY_MED_OFF = TileCodex.idDamageToIndex(14, 13)
val ILLUMINATOR_GREY_DARK_OFF = TileCodex.idDamageToIndex(14, 14)
val ILLUMINATOR_BLACK_OFF = TileCodex.idDamageToIndex(14, 15)
val SANDSTONE = TileCodex.idDamageToIndex(15, 0)
val SANDSTONE_WHITE = TileCodex.idDamageToIndex(15, 1)
val SANDSTONE_RED = TileCodex.idDamageToIndex(15, 2)
val SANDSTONE_DESERT = TileCodex.idDamageToIndex(15, 3)
val SANDSTONE_BLACK = TileCodex.idDamageToIndex(15, 4)
val SANDSTONE_GREEN = TileCodex.idDamageToIndex(15, 5)
val LANTERN = TileCodex.idDamageToIndex(16, 0)
val SUNSTONE = TileCodex.idDamageToIndex(16, 1)
val DAYLIGHT_CAPACITOR = TileCodex.idDamageToIndex(16, 2)
val WATER_1 = TileCodex.idDamageToIndex(255, 0)
val WATER_2 = TileCodex.idDamageToIndex(255, 1)
val WATER_3 = TileCodex.idDamageToIndex(255, 2)
val WATER_4 = TileCodex.idDamageToIndex(255, 3)
val WATER_5 = TileCodex.idDamageToIndex(255, 4)
val WATER_6 = TileCodex.idDamageToIndex(255, 5)
val WATER_7 = TileCodex.idDamageToIndex(255, 6)
val WATER_8 = TileCodex.idDamageToIndex(255, 7)
val WATER_9 = TileCodex.idDamageToIndex(255, 8)
val WATER_10 = TileCodex.idDamageToIndex(255, 9)
val WATER_11 = TileCodex.idDamageToIndex(255, 10)
val WATER_12 = TileCodex.idDamageToIndex(255, 11)
val WATER_13 = TileCodex.idDamageToIndex(255, 12)
val WATER_14 = TileCodex.idDamageToIndex(255, 13)
val WATER_15 = TileCodex.idDamageToIndex(255, 14)
val WATER = TileCodex.idDamageToIndex(255, 15)
val LAVA_1 = TileCodex.idDamageToIndex(254, 0)
val LAVA_2 = TileCodex.idDamageToIndex(254, 1)
val LAVA_3 = TileCodex.idDamageToIndex(254, 2)
val LAVA_4 = TileCodex.idDamageToIndex(254, 3)
val LAVA_5 = TileCodex.idDamageToIndex(254, 4)
val LAVA_6 = TileCodex.idDamageToIndex(254, 5)
val LAVA_7 = TileCodex.idDamageToIndex(254, 6)
val LAVA_8 = TileCodex.idDamageToIndex(254, 7)
val LAVA_9 = TileCodex.idDamageToIndex(254, 8)
val LAVA_10 = TileCodex.idDamageToIndex(254, 9)
val LAVA_11 = TileCodex.idDamageToIndex(254, 10)
val LAVA_12 = TileCodex.idDamageToIndex(254, 11)
val LAVA_13 = TileCodex.idDamageToIndex(254, 12)
val LAVA_14 = TileCodex.idDamageToIndex(254, 13)
val LAVA_15 = TileCodex.idDamageToIndex(254, 14)
val LAVA = TileCodex.idDamageToIndex(254, 15)
val NULL = -1
}

View File

@@ -1,180 +0,0 @@
package net.torvald.terrarum.tileproperties
/**
* Created by minjaesong on 16-09-11.
*/
object TilePropCSVFUfufufufufufffnufuuufufu {
operator fun invoke() = """
"id";"sid";"name" ; "opacity";"strength";"dsty";"mate";"fluid";"solid";"wall"; "lumcolor";"drop";"ddmg";"fall";"dlfn";"vscs";"fv";"friction"
"0"; "0";"TILE_AIR" ; "8396808"; "1"; "1";"null"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "N/A"; "0";"4"
"1"; "0";"TILE_STONE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "1"; "0"; "1"; "0"; "0"; "0"; "N/A"; "0";"16"
"1"; "1";"TILE_STONE_QUARRIED" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "1"; "0"; "1"; "1"; "0"; "0"; "N/A"; "0";"16"
"1"; "2";"TILE_STONE_TILE_WHITE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "1"; "0"; "1"; "2"; "0"; "0"; "N/A"; "0";"16"
"1"; "3";"TILE_STONE_BRICKS" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "1"; "0"; "1"; "3"; "0"; "0"; "N/A"; "0";"16"
"2"; "0";"TILE_DIRT" ; "33587232"; "24";"1400";"dirt"; "0"; "1"; "1"; "0"; "2"; "0"; "0"; "0"; "N/A"; "0";"16"
"2"; "1";"TILE_GRASS" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "2"; "1"; "0"; "0"; "N/A"; "0";"16"
"2"; "2";"TILE_FOLIAGE_GREEN" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "2"; "2"; "0"; "0"; "N/A"; "0";"16"
"2"; "3";"TILE_FOLIAGE_LIME" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "2"; "3"; "0"; "0"; "N/A"; "0";"16"
"2"; "4";"TILE_FOLIAGE_GOLD" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "2"; "4"; "0"; "0"; "N/A"; "0";"16"
"2"; "5";"TILE_FOLIAGE_RED" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "2"; "5"; "0"; "0"; "N/A"; "0";"16"
"2"; "6";"TILE_FOLIAGE_ICEBLUE" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "2"; "6"; "0"; "0"; "N/A"; "0";"16"
"2"; "7";"TILE_FOLIAGE_PURPLE" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "2"; "7"; "0"; "0"; "N/A"; "0";"16"
"3"; "0";"TILE_PLANK_NORMAL" ; "33587232"; "16"; "740";"wood"; "0"; "1"; "1"; "0"; "3"; "0"; "0"; "0"; "N/A"; "0";"16"
"3"; "1";"TILE_PLANK_EBONY" ; "33587232"; "19";"1200";"wood"; "0"; "1"; "1"; "0"; "3"; "1"; "0"; "0"; "N/A"; "0";"16"
"3"; "2";"TILE_PLANK_BIRCH" ; "33587232"; "15"; "670";"wood"; "0"; "1"; "1"; "0"; "3"; "2"; "0"; "0"; "N/A"; "0";"16"
"3"; "3";"TILE_PLANK_BLOODROSE" ; "33587232"; "17"; "900";"wood"; "0"; "1"; "1"; "0"; "3"; "3"; "0"; "0"; "N/A"; "0";"16"
"4"; "0";"TILE_TRUNK_NORMAL" ; "33587232"; "16"; "740";"wood"; "0"; "1"; "0"; "0"; "3"; "0"; "0"; "0"; "N/A"; "0";"16"
"4"; "1";"TILE_TRUNK_EBONY" ; "33587232"; "19";"1200";"wood"; "0"; "1"; "0"; "0"; "3"; "1"; "0"; "0"; "N/A"; "0";"16"
"4"; "2";"TILE_TRUNK_BIRCH" ; "33587232"; "15"; "670";"wood"; "0"; "1"; "0"; "0"; "3"; "2"; "0"; "0"; "N/A"; "0";"16"
"4"; "3";"TILE_TRUNK_BLOODROSE" ; "33587232"; "17"; "900";"wood"; "0"; "1"; "0"; "0"; "3"; "3"; "0"; "0"; "N/A"; "0";"16"
"5"; "0";"TILE_SAND" ; "33587232"; "24";"2400";"sand"; "0"; "1"; "0"; "0"; "5"; "0"; "1"; "0"; "N/A"; "0";"16"
"5"; "1";"TILE_SAND_WHITE" ; "33587232"; "24";"2400";"sand"; "0"; "1"; "0"; "0"; "5"; "1"; "1"; "0"; "N/A"; "0";"16"
"5"; "2";"TILE_SAND_RED" ; "33587232"; "24";"2400";"sand"; "0"; "1"; "0"; "0"; "5"; "2"; "1"; "0"; "N/A"; "0";"16"
"5"; "3";"TILE_SAND_DESERT" ; "33587232"; "24";"2400";"sand"; "0"; "1"; "0"; "0"; "5"; "3"; "1"; "0"; "N/A"; "0";"16"
"5"; "4";"TILE_SAND_BLACK" ; "33587232"; "24";"2400";"sand"; "0"; "1"; "0"; "0"; "5"; "4"; "1"; "0"; "N/A"; "0";"16"
"5"; "5";"TILE_SAND_GREEN" ; "33587232"; "24";"2400";"sand"; "0"; "1"; "0"; "0"; "5"; "5"; "1"; "0"; "N/A"; "0";"16"
"6"; "0";"TILE_GRAVEL" ; "33587232"; "24";"2400";"grvl"; "0"; "1"; "0"; "0"; "6"; "0"; "1"; "0"; "N/A"; "0";"16"
"6"; "1";"TILE_GRAVEL_GREY" ; "33587232"; "24";"2400";"grvl"; "0"; "1"; "0"; "0"; "6"; "1"; "1"; "0"; "N/A"; "0";"16"
"7"; "0";"TILE_ORE_MALACHITE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "7"; "0"; "0"; "0"; "N/A"; "0";"16"
"7"; "1";"TILE_ORE_HEMATITE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "7"; "1"; "0"; "0"; "N/A"; "0";"16"
"7"; "2";"TILE_ORE_NATURAL_GOLD" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "7"; "2"; "0"; "0"; "N/A"; "0";"16"
"7"; "3";"TILE_ORE_NATURAL_SILVER" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "7"; "3"; "0"; "0"; "N/A"; "0";"16"
"7"; "4";"TILE_ORE_RUTILE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "7"; "4"; "0"; "0"; "N/A"; "0";"16"
"7"; "5";"TILE_ORE_AURICHALCUMITE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "7"; "5"; "0"; "0"; "N/A"; "0";"16"
"8"; "0";"TILE_GEM_RUBY" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "8"; "0"; "0"; "0"; "N/A"; "0";"16"
"8"; "1";"TILE_GEM_EMERALD" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "8"; "1"; "0"; "0"; "N/A"; "0";"16"
"8"; "2";"TILE_GEM_SAPPHIRE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "8"; "2"; "0"; "0"; "N/A"; "0";"16"
"8"; "3";"TILE_GEM_TOPAZ" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "8"; "3"; "0"; "0"; "N/A"; "0";"16"
"8"; "4";"TILE_GEM_DIAMOND" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "8"; "4"; "0"; "0"; "N/A"; "0";"16"
"8"; "5";"TILE_GEM_AMETHYST" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "8"; "5"; "0"; "0"; "N/A"; "0";"16"
"9"; "0";"TILE_SNOW" ; "33587232"; "24"; "500";"snow"; "0"; "1"; "1"; "0"; "9"; "0"; "0"; "0"; "N/A"; "0";"16"
"9"; "1";"TILE_ICE_FRAGILE" ; "13644813"; "5"; "930";"icei"; "0"; "1"; "0"; "0"; "9"; "1"; "0"; "0"; "N/A"; "0"; "4"
"9"; "2";"TILE_ICE_NATURAL" ; "27289626"; "35"; "930";"icei"; "0"; "1"; "1"; "0"; "9"; "2"; "0"; "0"; "N/A"; "0"; "4"
"9"; "3";"TILE_ICE_CLEAR_MAGICAL" ; "33587232"; "48";"3720";"icex"; "0"; "1"; "1"; "19955770"; "9"; "3"; "0"; "0"; "N/A"; "0"; "4"
"9"; "4";"TILE_GLASS_CRUDE" ; "3146755"; "5";"2500";"glas"; "0"; "1"; "1"; "0"; "9"; "4"; "0"; "0"; "N/A"; "0";"16"
"9"; "5";"TILE_GLASS_CLEAN" ; "1049601"; "5";"2203";"glas"; "0"; "1"; "1"; "0"; "9"; "5"; "0"; "0"; "N/A"; "0";"16"
"10"; "0";"TILE_PLATFORM_STONE" ; "8396808"; "5"; "N/A";"rock"; "0"; "0"; "0"; "0"; "10"; "0"; "0"; "0"; "N/A"; "0";"16"
"10"; "1";"TILE_PLATFORM_WOODEN" ; "8396808"; "5"; "N/A";"wood"; "0"; "0"; "0"; "0"; "10"; "1"; "0"; "0"; "N/A"; "0";"16"
"10"; "2";"TILE_PLATFORM_EBONY" ; "8396808"; "5"; "N/A";"wood"; "0"; "0"; "0"; "0"; "10"; "2"; "0"; "0"; "N/A"; "0";"16"
"10"; "3";"TILE_PLATFORM_BIRCH" ; "8396808"; "5"; "N/A";"wood"; "0"; "0"; "0"; "0"; "10"; "3"; "0"; "0"; "N/A"; "0";"16"
"10"; "4";"TILE_PLATFORM_BLOODROSE" ; "8396808"; "5"; "N/A";"wood"; "0"; "0"; "0"; "0"; "10"; "4"; "0"; "0"; "N/A"; "0";"16"
"11"; "0";"TILE_TORCH" ; "8396808"; "1"; "N/A";"fxtr"; "0"; "0"; "0"; "267553792"; "11"; "0"; "0"; "1"; "N/A"; "0";"16"
"11"; "1";"TILE_TORCH_FROST" ; "8396808"; "1"; "N/A";"fxtr"; "0"; "0"; "0"; "81916159"; "11"; "1"; "0"; "1"; "N/A"; "0";"16"
"12"; "0";"TILE_TORCH" ; "8396808"; "1"; "N/A";"fxtr"; "0"; "0"; "0"; "0"; "11"; "0"; "0"; "0"; "N/A"; "0";"16"
"12"; "1";"TILE_TORCH_FROST" ; "8396808"; "1"; "N/A";"fxtr"; "0"; "0"; "0"; "0"; "11"; "1"; "0"; "0"; "N/A"; "0";"16"
"13"; "0";"TILE_ILLUMINATOR_WHITE" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "239319274"; "13"; "0"; "0"; "0"; "N/A"; "0";"16"
"13"; "1";"TILE_ILLUMINATOR_YELLOW" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "267607040"; "13"; "1"; "0"; "0"; "N/A"; "0";"16"
"13"; "2";"TILE_ILLUMINATOR_ORANGE" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "267546624"; "13"; "2"; "0"; "0"; "N/A"; "0";"16"
"13"; "3";"TILE_ILLUMINATOR_RED" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "246415360"; "13"; "3"; "0"; "0"; "N/A"; "0";"16"
"13"; "4";"TILE_ILLUMINATOR_FUCHSIA" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "246415543"; "13"; "4"; "0"; "0"; "N/A"; "0";"16"
"13"; "5";"TILE_ILLUMINATOR_PURPLE" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "191889643"; "13"; "5"; "0"; "0"; "N/A"; "0";"16"
"13"; "6";"TILE_ILLUMINATOR_BLUE" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "52479"; "13"; "6"; "0"; "0"; "N/A"; "0";"16"
"13"; "7";"TILE_ILLUMINATOR_CYAN" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "219391"; "13"; "7"; "0"; "0"; "N/A"; "0";"16"
"13"; "8";"TILE_ILLUMINATOR_GREEN" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "56884224"; "13"; "8"; "0"; "0"; "N/A"; "0";"16"
"13"; "9";"TILE_ILLUMINATOR_GREEN_DARK";"8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "33660928"; "13"; "9"; "0"; "0"; "N/A"; "0";"16"
"13"; "10";"TILE_ILLUMINATOR_BROWN" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "89161728"; "13"; "10"; "0"; "0"; "N/A"; "0";"16"
"13"; "11";"TILE_ILLUMINATOR_TAN" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "157392948"; "13"; "11"; "0"; "0"; "N/A"; "0";"16"
"13"; "12";"TILE_ILLUMINATOR_GREY_LIGHT";"8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "198374589"; "13"; "12"; "0"; "0"; "N/A"; "0";"16"
"13"; "13";"TILE_ILLUMINATOR_GREY_MED"; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "122803317"; "13"; "13"; "0"; "0"; "N/A"; "0";"16"
"13"; "14";"TILE_ILLUMINATOR_GREY_DARK"; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "68224065"; "13"; "14"; "0"; "0"; "N/A"; "0";"16"
"13"; "15";"TILE_ILLUMINATOR_BLACK" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "116392191"; "13"; "15"; "0"; "0"; "N/A"; "0";"16"
"14"; "0";"TILE_ILLUMINATOR_WHITE" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "0"; "0"; "0"; "N/A"; "0";"16"
"14"; "1";"TILE_ILLUMINATOR_YELLOW" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "1"; "0"; "0"; "N/A"; "0";"16"
"14"; "2";"TILE_ILLUMINATOR_ORANGE" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "2"; "0"; "0"; "N/A"; "0";"16"
"14"; "3";"TILE_ILLUMINATOR_RED" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "3"; "0"; "0"; "N/A"; "0";"16"
"14"; "4";"TILE_ILLUMINATOR_FUCHSIA" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "4"; "0"; "0"; "N/A"; "0";"16"
"14"; "5";"TILE_ILLUMINATOR_PURPLE" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "5"; "0"; "0"; "N/A"; "0";"16"
"14"; "6";"TILE_ILLUMINATOR_BLUE" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "6"; "0"; "0"; "N/A"; "0";"16"
"14"; "7";"TILE_ILLUMINATOR_CYAN" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "7"; "0"; "0"; "N/A"; "0";"16"
"14"; "8";"TILE_ILLUMINATOR_GREEN" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "8"; "0"; "0"; "N/A"; "0";"16"
"14"; "9";"TILE_ILLUMINATOR_GREEN_DARK";"33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "9"; "0"; "0"; "N/A"; "0";"16"
"14"; "10";"TILE_ILLUMINATOR_BROWN" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "10"; "0"; "0"; "N/A"; "0";"16"
"14"; "11";"TILE_ILLUMINATOR_TAN" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "11"; "0"; "0"; "N/A"; "0";"16"
"14"; "12";"TILE_ILLUMINATOR_GREY_LIGHT";"33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "12"; "0"; "0"; "N/A"; "0";"16"
"14"; "13";"TILE_ILLUMINATOR_GREY_MED"; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "13"; "0"; "0"; "N/A"; "0";"16"
"14"; "14";"TILE_ILLUMINATOR_GREY_DARK";"33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "14"; "0"; "0"; "N/A"; "0";"16"
"14"; "15";"TILE_ILLUMINATOR_BLACK" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "13"; "15"; "0"; "0"; "N/A"; "0";"16"
"15"; "0";"TILE_SANDSTONE" ; "33587232"; "48";"1900";"rock"; "0"; "1"; "1"; "0"; "15"; "0"; "0"; "0"; "N/A"; "0";"16"
"15"; "1";"TILE_SANDSTONE_WHITE" ; "33587232"; "48";"1900";"rock"; "0"; "1"; "1"; "0"; "15"; "1"; "0"; "0"; "N/A"; "0";"16"
"15"; "2";"TILE_SANDSTONE_RED" ; "33587232"; "48";"1900";"rock"; "0"; "1"; "1"; "0"; "15"; "2"; "0"; "0"; "N/A"; "0";"16"
"15"; "3";"TILE_SANDSTONE_DESERT" ; "33587232"; "48";"1900";"rock"; "0"; "1"; "1"; "0"; "15"; "3"; "0"; "0"; "N/A"; "0";"16"
"15"; "4";"TILE_SANDSTONE_BLACK" ; "33587232"; "48";"1900";"rock"; "0"; "1"; "1"; "0"; "15"; "4"; "0"; "0"; "N/A"; "0";"16"
"15"; "5";"TILE_SANDSTONE_GREEN" ; "33587232"; "48";"1900";"rock"; "0"; "1"; "1"; "0"; "15"; "5"; "0"; "0"; "N/A"; "0";"16"
"16"; "0";"TILE_LANTERN_IRON_REGULAR"; "8396808"; "1"; "N/A";"fxtr"; "0"; "0"; "0"; "267553792"; "16"; "0"; "0"; "0"; "N/A"; "0";"16"
"16"; "1";"TILE_SUNSTONE" ; "33587232"; "1"; "N/A";"rock"; "0"; "1"; "0"; "0"; "16"; "1"; "0"; "2"; "N/A"; "0";"16"
"16"; "2";"TILE_DAYLIGHT_CAPACITOR" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "0"; "0"; "16"; "2"; "0"; "3"; "N/A"; "0";"16"
"254"; "0";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "1";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "2";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "3";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "4";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "5";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "6";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "7";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "8";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "9";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "10";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "11";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "12";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "13";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "14";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"254"; "15";"TILE_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0"; "32"; "0";"16"
"255"; "0";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "1";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "2";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "3";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "4";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "5";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "6";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "7";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "8";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "9";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "10";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "11";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "12";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "13";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "14";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"255"; "15";"TILE_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0"; "16"; "0";"16"
"0"; "-1";"TILE_NULL" ;"1073741823"; "-1";"2600";"null"; "0"; "0"; "1"; "0"; "N/A"; "N/A"; "0"; "0"; "N/A"; "0";"16"
## Notes ##
# Friction: 0: frictionless, <16: slippery, 16: regular, >16: sticky
# Opacity/Lumcolor: 30-bit RGB. Only the light diffusers have a opacity value of ZERO.
# Solid: whether the tile has full collision
# vscs: viscosity, (velocity) / (1 + (n/16)), 16 halves movement speed, can be used to non-fluid tiles (sticky hazard, tarmac road in Terraria)
# dsty: density. As we are putting water an 1000, it is identical to specific gravity. [g/l]
# dlfn: dynamic luminosity function.
# 0-static, 1-torch flicker, 2-current global light (sun, star, moon), 3-daylight at noon,
# 4-slow breath, 5-pulsate
# mate: material, four-letter code
# fv: vertical friction (boolean)
## Illuminators ##
# Illuminator white: RGB(228,238,234), simulation of a halophosphate FL lamp (If you want high CRI lamp, collect a daylight!)
# Defalut torch : Y 64 x 0.55183 y 0.40966 (Planckian ~1 770 K); real candlelight colour taken from Spyder5 colorimeter (for I couldn't afford i1DisplayPro/Colormunki)
# Sunstone: Artificial sunlight, change colour over time in sync with sunlight. The light is set by game's code.
# Sunlight capacitor: daylight at noon. Set by game's code.
## Tiles ##
# 16 colour palette : games's 16-colour palette
# Magical ice: theoretical __metallic__ ice that might form under super-high pressure (> 5 TPa). Its density is a wild guess.
## 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
"""
}

View File

@@ -1,156 +0,0 @@
"id";"dmg";"name" ; "opacity";"strength";"dsty";"fluid";"solid";"wall"; "lumcolor";"drop";"ddmg";"fall";"dlfn";"friction"
"0"; "0";"TILE_AIR" ; "8396808"; "0"; "1"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0";"4"
"1"; "0";"TILE_STONE" ; "33587232"; "25";"2400"; "0"; "1"; "1"; "0"; "1"; "0"; "0"; "0";"16"
"1"; "1";"TILE_STONE_QUARRIED" ; "33587232"; "25";"2400"; "0"; "1"; "1"; "0"; "1"; "1"; "0"; "0";"16"
"1"; "2";"TILE_STONE_TILE_WHITE" ; "33587232"; "25";"2400"; "0"; "1"; "1"; "0"; "1"; "2"; "0"; "0";"16"
"1"; "3";"TILE_STONE_BRICKS" ; "33587232"; "25";"2400"; "0"; "1"; "1"; "0"; "1"; "3"; "0"; "0";"16"
"2"; "0";"TILE_DIRT" ; "33587232"; "6";"1400"; "0"; "1"; "1"; "0"; "2"; "0"; "0"; "0";"16"
"2"; "1";"TILE_GRASS" ; "33587232"; "6";"1400"; "0"; "1"; "1"; "0"; "2"; "1"; "0"; "0";"16"
"3"; "0";"TILE_PLANK_NORMAL" ; "33587232"; "12"; "740"; "0"; "1"; "1"; "0"; "3"; "0"; "0"; "0";"16"
"3"; "1";"TILE_PLANK_EBONY" ; "33587232"; "12";"1200"; "0"; "1"; "1"; "0"; "3"; "1"; "0"; "0";"16"
"3"; "2";"TILE_PLANK_BIRCH" ; "33587232"; "12"; "670"; "0"; "1"; "1"; "0"; "3"; "2"; "0"; "0";"16"
"3"; "3";"TILE_PLANK_BLOODROSE" ; "33587232"; "12"; "900"; "0"; "1"; "1"; "0"; "3"; "3"; "0"; "0";"16"
"4"; "0";"TILE_TRUNK_NORMAL" ; "33587232"; "12"; "740"; "0"; "1"; "0"; "0"; "3"; "0"; "0"; "0";"16"
"4"; "1";"TILE_TRUNK_EBONY" ; "33587232"; "12";"1200"; "0"; "1"; "0"; "0"; "3"; "1"; "0"; "0";"16"
"4"; "2";"TILE_TRUNK_BIRCH" ; "33587232"; "12"; "670"; "0"; "1"; "0"; "0"; "3"; "2"; "0"; "0";"16"
"4"; "3";"TILE_TRUNK_BLOODROSE" ; "33587232"; "12"; "900"; "0"; "1"; "0"; "0"; "3"; "3"; "0"; "0";"16"
"5"; "0";"TILE_SAND" ; "33587232"; "6";"2400"; "0"; "1"; "0"; "0"; "5"; "0"; "1"; "0";"16"
"5"; "1";"TILE_SAND_WHITE" ; "33587232"; "6";"2400"; "0"; "1"; "0"; "0"; "5"; "1"; "1"; "0";"16"
"5"; "2";"TILE_SAND_RED" ; "33587232"; "6";"2400"; "0"; "1"; "0"; "0"; "5"; "2"; "1"; "0";"16"
"5"; "3";"TILE_SAND_DESERT" ; "33587232"; "6";"2400"; "0"; "1"; "0"; "0"; "5"; "3"; "1"; "0";"16"
"5"; "4";"TILE_SAND_BLACK" ; "33587232"; "6";"2400"; "0"; "1"; "0"; "0"; "5"; "4"; "1"; "0";"16"
"5"; "5";"TILE_SAND_GREEN" ; "33587232"; "6";"2400"; "0"; "1"; "0"; "0"; "5"; "5"; "1"; "0";"16"
"6"; "0";"TILE_GRAVEL" ; "33587232"; "6";"2400"; "0"; "1"; "0"; "0"; "6"; "0"; "1"; "0";"16"
"6"; "1";"TILE_GRAVEL_GREY" ; "33587232"; "6";"2400"; "0"; "1"; "0"; "0"; "6"; "1"; "1"; "0";"16"
"7"; "0";"TILE_ORE_MALACHITE" ; "33587232"; "25";"2400"; "0"; "1"; "0"; "0"; "7"; "0"; "0"; "0";"16"
"7"; "1";"TILE_ORE_HEMATITE" ; "33587232"; "25";"2400"; "0"; "1"; "0"; "0"; "7"; "1"; "0"; "0";"16"
"7"; "2";"TILE_ORE_NATURAL_GOLD" ; "33587232"; "25";"2400"; "0"; "1"; "0"; "0"; "7"; "2"; "0"; "0";"16"
"7"; "3";"TILE_ORE_NATURAL_SILVER" ; "33587232"; "25";"2400"; "0"; "1"; "0"; "0"; "7"; "3"; "0"; "0";"16"
"7"; "4";"TILE_ORE_RUTILE" ; "33587232"; "25";"2400"; "0"; "1"; "0"; "0"; "7"; "4"; "0"; "0";"16"
"7"; "5";"TILE_ORE_AURICHALCUMITE" ; "33587232"; "25";"2400"; "0"; "1"; "0"; "0"; "7"; "5"; "0"; "0";"16"
"8"; "0";"TILE_GEM_RUBY" ; "33587232"; "25";"2400"; "0"; "1"; "0"; "0"; "8"; "0"; "0"; "0";"16"
"8"; "1";"TILE_GEM_EMERALD" ; "33587232"; "25";"2400"; "0"; "1"; "0"; "0"; "8"; "1"; "0"; "0";"16"
"8"; "2";"TILE_GEM_SAPPHIRE" ; "33587232"; "25";"2400"; "0"; "1"; "0"; "0"; "8"; "2"; "0"; "0";"16"
"8"; "3";"TILE_GEM_TOPAZ" ; "33587232"; "25";"2400"; "0"; "1"; "0"; "0"; "8"; "3"; "0"; "0";"16"
"8"; "4";"TILE_GEM_DIAMOND" ; "33587232"; "25";"2400"; "0"; "1"; "0"; "0"; "8"; "4"; "0"; "0";"16"
"8"; "5";"TILE_GEM_AMETHYST" ; "33587232"; "25";"2400"; "0"; "1"; "0"; "0"; "8"; "5"; "0"; "0";"16"
"9"; "0";"TILE_SNOW" ; "33587232"; "6"; "500"; "0"; "1"; "1"; "0"; "9"; "0"; "0"; "0";"16"
"9"; "1";"TILE_ICE_FRAGILE" ; "13644813"; "1"; "930"; "0"; "1"; "0"; "0"; "9"; "1"; "0"; "0";"16"
"9"; "2";"TILE_ICE_NATURAL" ; "27289626"; "25"; "930"; "0"; "1"; "1"; "0"; "9"; "2"; "0"; "0"; "8"
"9"; "3";"TILE_ICE_CLEAR_MAGICAL" ; "33587232"; "25";"3720"; "0"; "1"; "1"; "19955770"; "9"; "3"; "0"; "0"; "8"
"9"; "4";"TILE_GLASS_CRUDE" ; "3146755"; "1";"2500"; "0"; "1"; "1"; "0"; "9"; "4"; "0"; "0";"16"
"9"; "5";"TILE_GLASS_CLEAN" ; "1049601"; "1";"2203"; "0"; "1"; "1"; "0"; "9"; "5"; "0"; "0";"16"
"10"; "0";"TILE_PLATFORM_STONE" ; "8396808"; "1"; "N/A"; "0"; "0"; "0"; "0"; "10"; "0"; "0"; "0";"16"
"10"; "1";"TILE_PLATFORM_WOODEN" ; "8396808"; "1"; "N/A"; "0"; "0"; "0"; "0"; "10"; "1"; "0"; "0";"16"
"10"; "2";"TILE_PLATFORM_EBONY" ; "8396808"; "1"; "N/A"; "0"; "0"; "0"; "0"; "10"; "2"; "0"; "0";"16"
"10"; "3";"TILE_PLATFORM_BIRCH" ; "8396808"; "1"; "N/A"; "0"; "0"; "0"; "0"; "10"; "3"; "0"; "0";"16"
"10"; "4";"TILE_PLATFORM_BLOODROSE" ; "8396808"; "1"; "N/A"; "0"; "0"; "0"; "0"; "10"; "4"; "0"; "0";"16"
"11"; "0";"TILE_TORCH" ; "8396808"; "0"; "N/A"; "0"; "0"; "0"; "266453040"; "11"; "0"; "0"; "1";"16"
"11"; "1";"TILE_TORCH_FROST" ; "8396808"; "0"; "N/A"; "0"; "0"; "0"; "81916159"; "11"; "1"; "0"; "1";"16"
"12"; "0";"TILE_TORCH" ; "8396808"; "0"; "N/A"; "0"; "0"; "0"; "0"; "11"; "0"; "0"; "0";"16"
"12"; "1";"TILE_TORCH_FROST" ; "8396808"; "0"; "N/A"; "0"; "0"; "0"; "0"; "11"; "1"; "0"; "0";"16"
"13"; "0";"TILE_ILLUMINATOR_WHITE" ; "8396808"; "0"; "N/A"; "0"; "1"; "1"; "239319274"; "13"; "0"; "0"; "0";"16"
"13"; "1";"TILE_ILLUMINATOR_YELLOW" ; "8396808"; "0"; "N/A"; "0"; "1"; "1"; "267607040"; "13"; "1"; "0"; "0";"16"
"13"; "2";"TILE_ILLUMINATOR_ORANGE" ; "8396808"; "0"; "N/A"; "0"; "1"; "1"; "267546624"; "13"; "2"; "0"; "0";"16"
"13"; "3";"TILE_ILLUMINATOR_RED" ; "8396808"; "0"; "N/A"; "0"; "1"; "1"; "246415360"; "13"; "3"; "0"; "0";"16"
"13"; "4";"TILE_ILLUMINATOR_FUCHSIA" ; "8396808"; "0"; "N/A"; "0"; "1"; "1"; "246415543"; "13"; "4"; "0"; "0";"16"
"13"; "5";"TILE_ILLUMINATOR_PURPLE" ; "8396808"; "0"; "N/A"; "0"; "1"; "1"; "191889643"; "13"; "5"; "0"; "0";"16"
"13"; "6";"TILE_ILLUMINATOR_BLUE" ; "8396808"; "0"; "N/A"; "0"; "1"; "1"; "52479"; "13"; "6"; "0"; "0";"16"
"13"; "7";"TILE_ILLUMINATOR_CYAN" ; "8396808"; "0"; "N/A"; "0"; "1"; "1"; "219391"; "13"; "7"; "0"; "0";"16"
"13"; "8";"TILE_ILLUMINATOR_GREEN" ; "8396808"; "0"; "N/A"; "0"; "1"; "1"; "56884224"; "13"; "8"; "0"; "0";"16"
"13"; "9";"TILE_ILLUMINATOR_GREEN_DARK";"8396808"; "0"; "N/A"; "0"; "1"; "1"; "33660928"; "13"; "9"; "0"; "0";"16"
"13"; "10";"TILE_ILLUMINATOR_BROWN" ; "8396808"; "0"; "N/A"; "0"; "1"; "1"; "89161728"; "13"; "10"; "0"; "0";"16"
"13"; "11";"TILE_ILLUMINATOR_TAN" ; "8396808"; "0"; "N/A"; "0"; "1"; "1"; "157392948"; "13"; "11"; "0"; "0";"16"
"13"; "12";"TILE_ILLUMINATOR_GREY_LIGHT";"8396808"; "0"; "N/A"; "0"; "1"; "1"; "198374589"; "13"; "12"; "0"; "0";"16"
"13"; "13";"TILE_ILLUMINATOR_GREY_MED"; "8396808"; "0"; "N/A"; "0"; "1"; "1"; "122803317"; "13"; "13"; "0"; "0";"16"
"13"; "14";"TILE_ILLUMINATOR_GREY_DARK"; "8396808"; "0"; "N/A"; "0"; "1"; "1"; "68224065"; "13"; "14"; "0"; "0";"16"
"13"; "15";"TILE_ILLUMINATOR_BLACK" ; "8396808"; "0"; "N/A"; "0"; "1"; "1"; "116392191"; "13"; "15"; "0"; "0";"16"
"14"; "0";"TILE_ILLUMINATOR_WHITE" ; "33587232"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "0"; "0"; "0";"16"
"14"; "1";"TILE_ILLUMINATOR_YELLOW" ; "33587232"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "1"; "0"; "0";"16"
"14"; "2";"TILE_ILLUMINATOR_ORANGE" ; "33587232"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "2"; "0"; "0";"16"
"14"; "3";"TILE_ILLUMINATOR_RED" ; "33587232"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "3"; "0"; "0";"16"
"14"; "4";"TILE_ILLUMINATOR_FUCHSIA" ; "33587232"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "4"; "0"; "0";"16"
"14"; "5";"TILE_ILLUMINATOR_PURPLE" ; "33587232"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "5"; "0"; "0";"16"
"14"; "6";"TILE_ILLUMINATOR_BLUE" ; "33587232"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "6"; "0"; "0";"16"
"14"; "7";"TILE_ILLUMINATOR_CYAN" ; "33587232"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "7"; "0"; "0";"16"
"14"; "8";"TILE_ILLUMINATOR_GREEN" ; "33587232"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "8"; "0"; "0";"16"
"14"; "9";"TILE_ILLUMINATOR_GREEN_DARK";"33587232"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "9"; "0"; "0";"16"
"14"; "10";"TILE_ILLUMINATOR_BROWN" ; "33587232"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "10"; "0"; "0";"16"
"14"; "11";"TILE_ILLUMINATOR_TAN" ; "33587232"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "11"; "0"; "0";"16"
"14"; "12";"TILE_ILLUMINATOR_GREY_LIGHT";"33587232"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "12"; "0"; "0";"16"
"14"; "13";"TILE_ILLUMINATOR_GREY_MED"; "33587232"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "13"; "0"; "0";"16"
"14"; "14";"TILE_ILLUMINATOR_GREY_DARK";"33587232"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "14"; "0"; "0";"16"
"14"; "15";"TILE_ILLUMINATOR_BLACK" ; "33587232"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "15"; "0"; "0";"16"
"15"; "0";"TILE_SANDSTONE" ; "33587232"; "25";"1900"; "0"; "1"; "1"; "0"; "15"; "0"; "0"; "0";"16"
"15"; "1";"TILE_SANDSTONE_WHITE" ; "33587232"; "25";"1900"; "0"; "1"; "1"; "0"; "15"; "1"; "0"; "0";"16"
"15"; "2";"TILE_SANDSTONE_RED" ; "33587232"; "25";"1900"; "0"; "1"; "1"; "0"; "15"; "2"; "0"; "0";"16"
"15"; "3";"TILE_SANDSTONE_DESERT" ; "33587232"; "25";"1900"; "0"; "1"; "1"; "0"; "15"; "3"; "0"; "0";"16"
"15"; "4";"TILE_SANDSTONE_BLACK" ; "33587232"; "25";"1900"; "0"; "1"; "1"; "0"; "15"; "4"; "0"; "0";"16"
"15"; "5";"TILE_SANDSTONE_BLACK" ; "33587232"; "25";"1900"; "0"; "1"; "1"; "0"; "15"; "5"; "0"; "0";"16"
"16"; "0";"TILE_LANTERN_IRON_REGULAR"; "8396808"; "0"; "N/A"; "0"; "0"; "0"; "266453040"; "16"; "0"; "0"; "0";"16"
"16"; "1";"TILE_SUNSTONE" ; "33587232"; "0"; "N/A"; "0"; "1"; "0"; "0"; "16"; "1"; "0"; "2";"16"
"16"; "2";"TILE_DAYLIGHT_CAPACITOR" ; "33587232"; "0"; "N/A"; "0"; "1"; "0"; "0"; "16"; "2"; "0"; "3";"16"
"254"; "0";"TILE_LAVA" ;"260301048"; "100";"2600"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "1";"TILE_LAVA" ;"260301048"; "100";"2600"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "2";"TILE_LAVA" ;"260301048"; "100";"2600"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "3";"TILE_LAVA" ;"260301048"; "100";"2600"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "4";"TILE_LAVA" ;"260301048"; "100";"2600"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "5";"TILE_LAVA" ;"260301048"; "100";"2600"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "6";"TILE_LAVA" ;"260301048"; "100";"2600"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "7";"TILE_LAVA" ;"260301048"; "100";"2600"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "8";"TILE_LAVA" ;"260301048"; "100";"2600"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "9";"TILE_LAVA" ;"260301048"; "100";"2600"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "10";"TILE_LAVA" ;"260301048"; "100";"2600"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "11";"TILE_LAVA" ;"260301048"; "100";"2600"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "12";"TILE_LAVA" ;"260301048"; "100";"2600"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "13";"TILE_LAVA" ;"260301048"; "100";"2600"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "14";"TILE_LAVA" ;"260301048"; "100";"2600"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "15";"TILE_LAVA" ;"260301048"; "100";"2600"; "1"; "0"; "0"; "205574144"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "0";"TILE_WATER" ; "27282445"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "1";"TILE_WATER" ; "27282445"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "2";"TILE_WATER" ; "27282445"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "3";"TILE_WATER" ; "27282445"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "4";"TILE_WATER" ; "27282445"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "5";"TILE_WATER" ; "27282445"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "6";"TILE_WATER" ; "27282445"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "7";"TILE_WATER" ; "27282445"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "8";"TILE_WATER" ; "27282445"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "9";"TILE_WATER" ; "27282445"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "10";"TILE_WATER" ; "27282445"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "11";"TILE_WATER" ; "27282445"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "12";"TILE_WATER" ; "27282445"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "13";"TILE_WATER" ; "27282445"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "14";"TILE_WATER" ; "27282445"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "15";"TILE_WATER" ; "27282445"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"256"; "0";"TILE_NULL" ; "0"; "-1";"2600"; "0"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
## Notes ##
# Friction: 0: frictionless, <16: slippery, 16: regular, >16: sticky
# Opacity/Lumcolor: 30-bit RGB. Only the light diffusers have a opacity value of ZERO.
# Solid: whether the tile has full collision
# movr: Movement resistance, (walkspeedmax) / (1 + (n/16)), 16 halves movement speed
# dsty: density. As we are putting water an 1000, it is identical to specific gravity. [g/l]
# dlfn: dynamic luminosity function.
# 0-static, 1-torch flicker, 2-current global light (sun, star, moon), 3-daylight at noon,
# 4-slow breath, 5-pulsate
## Illuminators ##
# Illuminator white: RGB(228,238,234), simulation of a halophosphate FL lamp (If you want high CRI lamp, collect a daylight!)
# Defalut torch : L 64 a 51 b 59; real candlelight colour taken from properly configured camera.
# Sunstone: Artificial sunlight, change colour over time in sync with sunlight. The light is set by game's code.
# Sunlight capacitor: daylight at noon. Set by game's code.
## Tiles ##
# 16 colour palette : Old Apple Macintosh 16-colour palette
# Magical ice: theoretical __metallic__ ice that might form under super-high pressure (> 5 TPa). Its density is a wild guess.
## 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

View File

@@ -1,156 +0,0 @@
"id";"dmg";"name" ; "opacity";"strength";"dsty";"fluid";"solid";"wall";"lumcolor";"drop";"ddmg";"fall";"dlfn";"friction"
"0"; "0";"TILE_AIR" ; "526344"; "0"; "1"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0";"4"
"1"; "0";"TILE_STONE" ; "2105376"; "25";"2400"; "0"; "1"; "1"; "0"; "1"; "0"; "0"; "0";"16"
"1"; "1";"TILE_STONE_QUARRIED" ; "2105376"; "25";"2400"; "0"; "1"; "1"; "0"; "1"; "1"; "0"; "0";"16"
"1"; "2";"TILE_STONE_TILE_WHITE" ; "2105376"; "25";"2400"; "0"; "1"; "1"; "0"; "1"; "2"; "0"; "0";"16"
"1"; "3";"TILE_STONE_BRICKS" ; "2105376"; "25";"2400"; "0"; "1"; "1"; "0"; "1"; "3"; "0"; "0";"16"
"2"; "0";"TILE_DIRT" ; "2105376"; "6";"1400"; "0"; "1"; "1"; "0"; "2"; "0"; "0"; "0";"16"
"2"; "1";"TILE_GRASS" ; "2105376"; "6";"1400"; "0"; "1"; "1"; "0"; "2"; "1"; "0"; "0";"16"
"3"; "0";"TILE_PLANK_NORMAL" ; "2105376"; "12"; "740"; "0"; "1"; "1"; "0"; "3"; "0"; "0"; "0";"16"
"3"; "1";"TILE_PLANK_EBONY" ; "2105376"; "12";"1200"; "0"; "1"; "1"; "0"; "3"; "1"; "0"; "0";"16"
"3"; "2";"TILE_PLANK_BIRCH" ; "2105376"; "12"; "670"; "0"; "1"; "1"; "0"; "3"; "2"; "0"; "0";"16"
"3"; "3";"TILE_PLANK_BLOODROSE" ; "2105376"; "12"; "900"; "0"; "1"; "1"; "0"; "3"; "3"; "0"; "0";"16"
"4"; "0";"TILE_TRUNK_NORMAL" ; "2105376"; "12"; "740"; "0"; "1"; "0"; "0"; "3"; "0"; "0"; "0";"16"
"4"; "1";"TILE_TRUNK_EBONY" ; "2105376"; "12";"1200"; "0"; "1"; "0"; "0"; "3"; "1"; "0"; "0";"16"
"4"; "2";"TILE_TRUNK_BIRCH" ; "2105376"; "12"; "670"; "0"; "1"; "0"; "0"; "3"; "2"; "0"; "0";"16"
"4"; "3";"TILE_TRUNK_BLOODROSE" ; "2105376"; "12"; "900"; "0"; "1"; "0"; "0"; "3"; "3"; "0"; "0";"16"
"5"; "0";"TILE_SAND" ; "2105376"; "6";"2400"; "0"; "1"; "0"; "0"; "5"; "0"; "1"; "0";"16"
"5"; "1";"TILE_SAND_WHITE" ; "2105376"; "6";"2400"; "0"; "1"; "0"; "0"; "5"; "1"; "1"; "0";"16"
"5"; "2";"TILE_SAND_RED" ; "2105376"; "6";"2400"; "0"; "1"; "0"; "0"; "5"; "2"; "1"; "0";"16"
"5"; "3";"TILE_SAND_DESERT" ; "2105376"; "6";"2400"; "0"; "1"; "0"; "0"; "5"; "3"; "1"; "0";"16"
"5"; "4";"TILE_SAND_BLACK" ; "2105376"; "6";"2400"; "0"; "1"; "0"; "0"; "5"; "4"; "1"; "0";"16"
"5"; "5";"TILE_SAND_GREEN" ; "2105376"; "6";"2400"; "0"; "1"; "0"; "0"; "5"; "5"; "1"; "0";"16"
"6"; "0";"TILE_GRAVEL" ; "2105376"; "6";"2400"; "0"; "1"; "0"; "0"; "6"; "0"; "1"; "0";"16"
"6"; "1";"TILE_GRAVEL_GREY" ; "2105376"; "6";"2400"; "0"; "1"; "0"; "0"; "6"; "1"; "1"; "0";"16"
"7"; "0";"TILE_ORE_MALACHITE" ; "2105376"; "25";"2400"; "0"; "1"; "0"; "0"; "7"; "0"; "0"; "0";"16"
"7"; "1";"TILE_ORE_HEMATITE" ; "2105376"; "25";"2400"; "0"; "1"; "0"; "0"; "7"; "1"; "0"; "0";"16"
"7"; "2";"TILE_ORE_NATURAL_GOLD" ; "2105376"; "25";"2400"; "0"; "1"; "0"; "0"; "7"; "2"; "0"; "0";"16"
"7"; "3";"TILE_ORE_NATURAL_SILVER" ; "2105376"; "25";"2400"; "0"; "1"; "0"; "0"; "7"; "3"; "0"; "0";"16"
"7"; "4";"TILE_ORE_RUTILE" ; "2105376"; "25";"2400"; "0"; "1"; "0"; "0"; "7"; "4"; "0"; "0";"16"
"7"; "5";"TILE_ORE_AURICHALCUMITE" ; "2105376"; "25";"2400"; "0"; "1"; "0"; "0"; "7"; "5"; "0"; "0";"16"
"8"; "0";"TILE_GEM_RUBY" ; "2105376"; "25";"2400"; "0"; "1"; "0"; "0"; "8"; "0"; "0"; "0";"16"
"8"; "1";"TILE_GEM_EMERALD" ; "2105376"; "25";"2400"; "0"; "1"; "0"; "0"; "8"; "1"; "0"; "0";"16"
"8"; "2";"TILE_GEM_SAPPHIRE" ; "2105376"; "25";"2400"; "0"; "1"; "0"; "0"; "8"; "2"; "0"; "0";"16"
"8"; "3";"TILE_GEM_TOPAZ" ; "2105376"; "25";"2400"; "0"; "1"; "0"; "0"; "8"; "3"; "0"; "0";"16"
"8"; "4";"TILE_GEM_DIAMOND" ; "2105376"; "25";"2400"; "0"; "1"; "0"; "0"; "8"; "4"; "0"; "0";"16"
"8"; "5";"TILE_GEM_AMETHYST" ; "2105376"; "25";"2400"; "0"; "1"; "0"; "0"; "8"; "5"; "0"; "0";"16"
"9"; "0";"TILE_SNOW" ; "2105376"; "6"; "500"; "0"; "1"; "1"; "0"; "9"; "0"; "0"; "0";"16"
"9"; "1";"TILE_ICE_FRAGILE" ; "855309"; "1"; "930"; "0"; "1"; "0"; "0"; "9"; "1"; "0"; "0";"16"
"9"; "2";"TILE_ICE_NATURAL" ; "1710618"; "25"; "930"; "0"; "1"; "1"; "0"; "9"; "2"; "0"; "0"; "8"
"9"; "3";"TILE_ICE_CLEAR_MAGICAL" ; "2105376"; "25";"3720"; "0"; "1"; "1"; "1253434"; "9"; "3"; "0"; "0"; "8"
"9"; "4";"TILE_GLASS_CRUDE" ; "196867"; "1";"2500"; "0"; "1"; "1"; "0"; "9"; "4"; "0"; "0";"16"
"9"; "5";"TILE_GLASS_CLEAN" ; "65793"; "1";"2203"; "0"; "1"; "1"; "0"; "9"; "5"; "0"; "0";"16"
"10"; "0";"TILE_PLATFORM_STONE" ; "526344"; "1"; "N/A"; "0"; "0"; "0"; "0"; "10"; "0"; "0"; "0";"16"
"10"; "1";"TILE_PLATFORM_WOODEN" ; "526344"; "1"; "N/A"; "0"; "0"; "0"; "0"; "10"; "1"; "0"; "0";"16"
"10"; "2";"TILE_PLATFORM_EBONY" ; "526344"; "1"; "N/A"; "0"; "0"; "0"; "0"; "10"; "2"; "0"; "0";"16"
"10"; "3";"TILE_PLATFORM_BIRCH" ; "526344"; "1"; "N/A"; "0"; "0"; "0"; "0"; "10"; "3"; "0"; "0";"16"
"10"; "4";"TILE_PLATFORM_BLOODROSE" ; "526344"; "1"; "N/A"; "0"; "0"; "0"; "0"; "10"; "4"; "0"; "0";"16"
"11"; "0";"TILE_TORCH" ; "526344"; "0"; "N/A"; "0"; "0"; "0";"16674864"; "11"; "0"; "0"; "1";"16"
"11"; "1";"TILE_TORCH_FROST" ; "526344"; "0"; "N/A"; "0"; "0"; "0"; "5143807"; "11"; "1"; "0"; "1";"16"
"12"; "0";"TILE_TORCH" ; "526344"; "0"; "N/A"; "0"; "0"; "0"; "0"; "11"; "0"; "0"; "0";"16"
"12"; "1";"TILE_TORCH_FROST" ; "526344"; "0"; "N/A"; "0"; "0"; "0"; "0"; "11"; "1"; "0"; "0";"16"
"13"; "0";"TILE_ILLUMINATOR_WHITE" ; "526344"; "0"; "N/A"; "0"; "1"; "1";"15003370"; "13"; "0"; "0"; "0";"16"
"13"; "1";"TILE_ILLUMINATOR_YELLOW" ; "526344"; "0"; "N/A"; "0"; "1"; "1";"16766720"; "13"; "1"; "0"; "0";"16"
"13"; "2";"TILE_ILLUMINATOR_ORANGE" ; "526344"; "0"; "N/A"; "0"; "1"; "1";"16751616"; "13"; "2"; "0"; "0";"16"
"13"; "3";"TILE_ILLUMINATOR_RED" ; "526344"; "0"; "N/A"; "0"; "1"; "1";"15400960"; "13"; "3"; "0"; "0";"16"
"13"; "4";"TILE_ILLUMINATOR_FUCHSIA" ; "526344"; "0"; "N/A"; "0"; "1"; "1";"15401143"; "13"; "4"; "0"; "0";"16"
"13"; "5";"TILE_ILLUMINATOR_PURPLE" ; "526344"; "0"; "N/A"; "0"; "1"; "1";"11993323"; "13"; "5"; "0"; "0";"16"
"13"; "6";"TILE_ILLUMINATOR_BLUE" ; "526344"; "0"; "N/A"; "0"; "1"; "1"; "13311"; "13"; "6"; "0"; "0";"16"
"13"; "7";"TILE_ILLUMINATOR_CYAN" ; "526344"; "0"; "N/A"; "0"; "1"; "1"; "55039"; "13"; "7"; "0"; "0";"16"
"13"; "8";"TILE_ILLUMINATOR_GREEN" ; "526344"; "0"; "N/A"; "0"; "1"; "1"; "3604224"; "13"; "8"; "0"; "0";"16"
"13"; "9";"TILE_ILLUMINATOR_GREEN_DARK"; "526344"; "0"; "N/A"; "0"; "1"; "1"; "2123776"; "13"; "9"; "0"; "0";"16"
"13"; "10";"TILE_ILLUMINATOR_BROWN" ; "526344"; "0"; "N/A"; "0"; "1"; "1"; "5578752"; "13"; "10"; "0"; "0";"16"
"13"; "11";"TILE_ILLUMINATOR_TAN" ; "526344"; "0"; "N/A"; "0"; "1"; "1"; "9857076"; "13"; "11"; "0"; "0";"16"
"13"; "12";"TILE_ILLUMINATOR_GREY_LIGHT"; "526344"; "0"; "N/A"; "0"; "1"; "1";"12434877"; "13"; "12"; "0"; "0";"16"
"13"; "13";"TILE_ILLUMINATOR_GREY_MED" ; "526344"; "0"; "N/A"; "0"; "1"; "1"; "7697781"; "13"; "13"; "0"; "0";"16"
"13"; "14";"TILE_ILLUMINATOR_GREY_DARK" ; "526344"; "0"; "N/A"; "0"; "1"; "1"; "4276545"; "13"; "14"; "0"; "0";"16"
"13"; "15";"TILE_ILLUMINATOR_BLACK" ; "526344"; "0"; "N/A"; "0"; "1"; "1"; "7274751"; "13"; "15"; "0"; "0";"16"
"14"; "0";"TILE_ILLUMINATOR_WHITE" ; "2105376"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "0"; "0"; "0";"16"
"14"; "1";"TILE_ILLUMINATOR_YELLOW" ; "2105376"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "1"; "0"; "0";"16"
"14"; "2";"TILE_ILLUMINATOR_ORANGE" ; "2105376"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "2"; "0"; "0";"16"
"14"; "3";"TILE_ILLUMINATOR_RED" ; "2105376"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "3"; "0"; "0";"16"
"14"; "4";"TILE_ILLUMINATOR_FUCHSIA" ; "2105376"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "4"; "0"; "0";"16"
"14"; "5";"TILE_ILLUMINATOR_PURPLE" ; "2105376"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "5"; "0"; "0";"16"
"14"; "6";"TILE_ILLUMINATOR_BLUE" ; "2105376"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "6"; "0"; "0";"16"
"14"; "7";"TILE_ILLUMINATOR_CYAN" ; "2105376"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "7"; "0"; "0";"16"
"14"; "8";"TILE_ILLUMINATOR_GREEN" ; "2105376"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "8"; "0"; "0";"16"
"14"; "9";"TILE_ILLUMINATOR_GREEN_DARK"; "2105376"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "9"; "0"; "0";"16"
"14"; "10";"TILE_ILLUMINATOR_BROWN" ; "2105376"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "10"; "0"; "0";"16"
"14"; "11";"TILE_ILLUMINATOR_TAN" ; "2105376"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "11"; "0"; "0";"16"
"14"; "12";"TILE_ILLUMINATOR_GREY_LIGHT"; "2105376"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "12"; "0"; "0";"16"
"14"; "13";"TILE_ILLUMINATOR_GREY_MED" ; "2105376"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "13"; "0"; "0";"16"
"14"; "14";"TILE_ILLUMINATOR_GREY_DARK" ; "2105376"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "14"; "0"; "0";"16"
"14"; "15";"TILE_ILLUMINATOR_BLACK" ; "2105376"; "0"; "N/A"; "0"; "1"; "1"; "0"; "13"; "15"; "0"; "0";"16"
"15"; "0";"TILE_SANDSTONE" ; "2105376"; "25";"1900"; "0"; "1"; "1"; "0"; "15"; "0"; "0"; "0";"16"
"15"; "1";"TILE_SANDSTONE_WHITE" ; "2105376"; "25";"1900"; "0"; "1"; "1"; "0"; "15"; "1"; "0"; "0";"16"
"15"; "2";"TILE_SANDSTONE_RED" ; "2105376"; "25";"1900"; "0"; "1"; "1"; "0"; "15"; "2"; "0"; "0";"16"
"15"; "3";"TILE_SANDSTONE_DESERT" ; "2105376"; "25";"1900"; "0"; "1"; "1"; "0"; "15"; "3"; "0"; "0";"16"
"15"; "4";"TILE_SANDSTONE_BLACK" ; "2105376"; "25";"1900"; "0"; "1"; "1"; "0"; "15"; "4"; "0"; "0";"16"
"15"; "5";"TILE_SANDSTONE_BLACK" ; "2105376"; "25";"1900"; "0"; "1"; "1"; "0"; "15"; "5"; "0"; "0";"16"
"16"; "0";"TILE_LANTERN_IRON_REGULAR" ; "526344"; "0"; "N/A"; "0"; "0"; "0";"16674864"; "16"; "0"; "0"; "0";"16"
"16"; "1";"TILE_SUNSTONE" ; "2105376"; "0"; "N/A"; "0"; "1"; "0"; "0"; "16"; "1"; "0"; "2";"16"
"16"; "2";"TILE_DAYLIGHT_CAPACITOR" ; "2105376"; "0"; "N/A"; "0"; "1"; "0"; "0"; "16"; "2"; "0"; "3";"16"
"254"; "0";"TILE_LAVA" ;"16316664"; "100";"2600"; "1"; "0"; "0";"12858368"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "1";"TILE_LAVA" ;"16316664"; "100";"2600"; "1"; "0"; "0";"12858368"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "2";"TILE_LAVA" ;"16316664"; "100";"2600"; "1"; "0"; "0";"12858368"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "3";"TILE_LAVA" ;"16316664"; "100";"2600"; "1"; "0"; "0";"12858368"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "4";"TILE_LAVA" ;"16316664"; "100";"2600"; "1"; "0"; "0";"12858368"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "5";"TILE_LAVA" ;"16316664"; "100";"2600"; "1"; "0"; "0";"12858368"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "6";"TILE_LAVA" ;"16316664"; "100";"2600"; "1"; "0"; "0";"12858368"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "7";"TILE_LAVA" ;"16316664"; "100";"2600"; "1"; "0"; "0";"12858368"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "8";"TILE_LAVA" ;"16316664"; "100";"2600"; "1"; "0"; "0";"12858368"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "9";"TILE_LAVA" ;"16316664"; "100";"2600"; "1"; "0"; "0";"12858368"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "10";"TILE_LAVA" ;"16316664"; "100";"2600"; "1"; "0"; "0";"12858368"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "11";"TILE_LAVA" ;"16316664"; "100";"2600"; "1"; "0"; "0";"12858368"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "12";"TILE_LAVA" ;"16316664"; "100";"2600"; "1"; "0"; "0";"12858368"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "13";"TILE_LAVA" ;"16316664"; "100";"2600"; "1"; "0"; "0";"12858368"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "14";"TILE_LAVA" ;"16316664"; "100";"2600"; "1"; "0"; "0";"12858368"; "N/A"; "N/A"; "0"; "0";"16"
"254"; "15";"TILE_LAVA" ;"16316664"; "100";"2600"; "1"; "0"; "0";"12858368"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "0";"TILE_WATER" ; "1708813"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "1";"TILE_WATER" ; "1708813"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "2";"TILE_WATER" ; "1708813"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "3";"TILE_WATER" ; "1708813"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "4";"TILE_WATER" ; "1708813"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "5";"TILE_WATER" ; "1708813"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "6";"TILE_WATER" ; "1708813"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "7";"TILE_WATER" ; "1708813"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "8";"TILE_WATER" ; "1708813"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "9";"TILE_WATER" ; "1708813"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "10";"TILE_WATER" ; "1708813"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "11";"TILE_WATER" ; "1708813"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "12";"TILE_WATER" ; "1708813"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "13";"TILE_WATER" ; "1708813"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "14";"TILE_WATER" ; "1708813"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"255"; "15";"TILE_WATER" ; "1708813"; "100";"1000"; "1"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
"256"; "0";"TILE_NULL" ; "0"; "-1";"2600"; "0"; "0"; "0"; "0"; "N/A"; "N/A"; "0"; "0";"16"
## Notes ##
# Friction: 0: frictionless, <16: slippery, 16: regular, >16: sticky
# Opacity/Lumcolor: 24-bit RGB. Only the light diffusers have a opacity value of ZERO.
# Solid: whether the tile has full collision
# movr: Movement resistance, (walkspeedmax) / (1 + (n/16)), 16 halves movement speed
# dsty: density. As we are putting water an 1000, it is identical to specific gravity. [g/l]
# dlfn: dynamic luminosity function.
# 0-static, 1-torch flicker, 2-current global light (sun, star, moon), 3-daylight at noon,
# 4-slow breath, 5-pulsate
## Illuminators ##
# Illuminator white: RGB(228,238,234), simulation of a halophosphate FL lamp (If you want high CRI lamp, collect a daylight!)
# Defalut torch : L 64 a 51 b 59; real candlelight colour taken from properly configured camera.
# Sunstone: Artificial sunlight, change colour over time in sync with sunlight. The light is set by game's code.
# Sunlight capacitor: daylight at noon. Set by game's code.
## Tiles ##
# 16 colour palette : Old Apple Macintosh 16-colour palette
# Magical ice: theoretical __metallic__ ice that might form under super-high pressure (> 5 TPa). Its density is a wild guess.
## 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

View File

@@ -3,13 +3,12 @@ package net.torvald.terrarum.ui
import com.jme3.math.FastMath import com.jme3.math.FastMath
import net.torvald.imagefont.GameFontBase import net.torvald.imagefont.GameFontBase
import net.torvald.terrarum.gameworld.PairedMapLayer import net.torvald.terrarum.gameworld.PairedMapLayer
import net.torvald.terrarum.mapdrawer.LightmapRenderer import net.torvald.terrarum.worlddrawer.LightmapRenderer
import net.torvald.terrarum.mapdrawer.TilesDrawer import net.torvald.terrarum.worlddrawer.FeaturesDrawer
import net.torvald.terrarum.mapdrawer.FeaturesDrawer
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.blendNormal import net.torvald.terrarum.blendNormal
import net.torvald.terrarum.blendScreen import net.torvald.terrarum.blendScreen
import net.torvald.terrarum.mapdrawer.MapCamera import net.torvald.terrarum.worlddrawer.WorldCamera
import org.newdawn.slick.Color import org.newdawn.slick.Color
import org.newdawn.slick.GameContainer import org.newdawn.slick.GameContainer
import org.newdawn.slick.Graphics import org.newdawn.slick.Graphics
@@ -61,8 +60,8 @@ class BasicDebugInfoWindow : UICanvas {
val player = Terrarum.ingame!!.player val player = Terrarum.ingame!!.player
val mouseTileX = ((MapCamera.x + gc.input.mouseX / Terrarum.ingame!!.screenZoom) / FeaturesDrawer.TILE_SIZE).toInt() val mouseTileX = ((WorldCamera.x + gc.input.mouseX / Terrarum.ingame!!.screenZoom) / FeaturesDrawer.TILE_SIZE).toInt()
val mouseTileY = ((MapCamera.y + gc.input.mouseY / Terrarum.ingame!!.screenZoom) / FeaturesDrawer.TILE_SIZE).toInt() val mouseTileY = ((WorldCamera.y + gc.input.mouseY / Terrarum.ingame!!.screenZoom) / FeaturesDrawer.TILE_SIZE).toInt()
g.font = Terrarum.fontSmallNumbers g.font = Terrarum.fontSmallNumbers
g.color = GameFontBase.codeToCol["y"] g.color = GameFontBase.codeToCol["y"]

View File

@@ -1,10 +1,7 @@
package net.torvald.terrarum.ui package net.torvald.terrarum.ui
import net.torvald.terrarum.mapdrawer.TilesDrawer
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import com.jme3.math.FastMath
import net.torvald.terrarum.gamecontroller.KeyToggler import net.torvald.terrarum.gamecontroller.KeyToggler
import org.lwjgl.opengl.GL11
import org.newdawn.slick.* import org.newdawn.slick.*
import org.newdawn.slick.state.StateBasedGame import org.newdawn.slick.state.StateBasedGame

View File

@@ -4,9 +4,7 @@ import com.jme3.math.FastMath
import net.torvald.colourutil.CIELabUtil.darkerLab import net.torvald.colourutil.CIELabUtil.darkerLab
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.gameactors.ActorHumanoid import net.torvald.terrarum.gameactors.ActorHumanoid
import net.torvald.terrarum.gameactors.floorInt import net.torvald.terrarum.worlddrawer.WorldCamera
import net.torvald.terrarum.gameactors.roundInt
import net.torvald.terrarum.mapdrawer.MapCamera
import org.newdawn.slick.Color import org.newdawn.slick.Color
import org.newdawn.slick.GameContainer import org.newdawn.slick.GameContainer
import org.newdawn.slick.Graphics import org.newdawn.slick.Graphics
@@ -71,8 +69,8 @@ class UIVitalMetre(
override fun render(gc: GameContainer, g: Graphics) { override fun render(gc: GameContainer, g: Graphics) {
if (vitalGetterVal() != null && vitalGetterMax() != null && player != null) { if (vitalGetterVal() != null && vitalGetterMax() != null && player != null) {
g.translate( g.translate(
Terrarum.ingame!!.screenZoom * (player!!.centrePosPoint.x.toFloat() - (MapCamera.x)), Terrarum.ingame!!.screenZoom * (player!!.centrePosPoint.x.toFloat() - (WorldCamera.x)),
Terrarum.ingame!!.screenZoom * (player!!.centrePosPoint.y.toFloat() - (MapCamera.y)) Terrarum.ingame!!.screenZoom * (player!!.centrePosPoint.y.toFloat() - (WorldCamera.y))
) )

View File

@@ -1,20 +1,16 @@
package net.torvald.terrarum.mapdrawer package net.torvald.terrarum.worlddrawer
import net.torvald.terrarum.gameworld.GameWorld import net.torvald.terrarum.gameworld.GameWorld
import net.torvald.terrarum.gameworld.PairedMapLayer import net.torvald.terrarum.gameworld.PairedMapLayer
import net.torvald.terrarum.tileproperties.Tile import net.torvald.terrarum.blockproperties.Block
import net.torvald.terrarum.tileproperties.TileCodex import net.torvald.terrarum.blockproperties.BlockCodex
import com.jme3.math.FastMath import com.jme3.math.FastMath
import net.torvald.terrarum.* import net.torvald.terrarum.*
import net.torvald.terrarum.concurrent.ThreadParallel
import net.torvald.terrarum.gameactors.roundInt import net.torvald.terrarum.gameactors.roundInt
import net.torvald.terrarum.gameworld.toUint import net.torvald.terrarum.worlddrawer.WorldCamera.x
import net.torvald.terrarum.mapdrawer.FeaturesDrawer.TILE_SIZE import net.torvald.terrarum.worlddrawer.WorldCamera.y
import net.torvald.terrarum.mapdrawer.LightmapRenderer.normaliseToColour import net.torvald.terrarum.worlddrawer.WorldCamera.height
import net.torvald.terrarum.mapdrawer.MapCamera.x import net.torvald.terrarum.worlddrawer.WorldCamera.width
import net.torvald.terrarum.mapdrawer.MapCamera.y
import net.torvald.terrarum.mapdrawer.MapCamera.height
import net.torvald.terrarum.mapdrawer.MapCamera.width
import org.lwjgl.opengl.GL11 import org.lwjgl.opengl.GL11
import org.newdawn.slick.* import org.newdawn.slick.*
@@ -22,16 +18,17 @@ import org.newdawn.slick.*
/** /**
* Created by minjaesong on 16-01-19. * Created by minjaesong on 16-01-19.
*/ */
object TilesDrawer { object BlocksDrawer {
private val world: GameWorld = Terrarum.ingame!!.world private val world: GameWorld = Terrarum.ingame!!.world
private val TILE_SIZE = FeaturesDrawer.TILE_SIZE private val TILE_SIZE = FeaturesDrawer.TILE_SIZE
private val TILE_SIZEF = FeaturesDrawer.TILE_SIZE.toFloat() private val TILE_SIZEF = FeaturesDrawer.TILE_SIZE.toFloat()
val tilesTerrain = SpriteSheet(ModMgr.getPath("basegame", "tiles/terrain.tga.gz"), TILE_SIZE, TILE_SIZE) // TODO modular
val tilesTerrain = SpriteSheet(ModMgr.getPath("basegame", "blocks/terrain.tga.gz"), TILE_SIZE, TILE_SIZE)
// Slick has some weird quirks with PNG's transparency. I'm using 32-bit targa here. // Slick has some weird quirks with PNG's transparency. I'm using 32-bit targa here.
// -> PNG transparency issue seems to be fixed (look at my customised ImageDataFactory), but // -> PNG transparency issue seems to be fixed (look at my customised ImageDataFactory), but
// tga.gz is smaller than png, so I'd rather keep it // tga.gz is smaller than png, so I'd rather keep it
val tilesWire = SpriteSheet(ModMgr.getPath("basegame", "tiles/wire.tga.gz"), TILE_SIZE, TILE_SIZE) val tilesWire = SpriteSheet(ModMgr.getPath("basegame", "blocks/wire.tga.gz"), TILE_SIZE, TILE_SIZE)
val breakAnimSteps = 10 val breakAnimSteps = 10
@@ -56,48 +53,48 @@ object TilesDrawer {
* These are the tiles that only connects to itself, will not connect to colour variants * These are the tiles that only connects to itself, will not connect to colour variants
*/ */
val TILES_CONNECT_SELF = arrayListOf( val TILES_CONNECT_SELF = arrayListOf(
Tile.ICE_MAGICAL, Block.ICE_MAGICAL,
Tile.GLASS_CRUDE, Block.GLASS_CRUDE,
Tile.GLASS_CLEAN, Block.GLASS_CLEAN,
Tile.ILLUMINATOR_BLACK, Block.ILLUMINATOR_BLACK,
Tile.ILLUMINATOR_BLUE, Block.ILLUMINATOR_BLUE,
Tile.ILLUMINATOR_BROWN, Block.ILLUMINATOR_BROWN,
Tile.ILLUMINATOR_CYAN, Block.ILLUMINATOR_CYAN,
Tile.ILLUMINATOR_FUCHSIA, Block.ILLUMINATOR_FUCHSIA,
Tile.ILLUMINATOR_GREEN, Block.ILLUMINATOR_GREEN,
Tile.ILLUMINATOR_GREEN_DARK, Block.ILLUMINATOR_GREEN_DARK,
Tile.ILLUMINATOR_GREY_DARK, Block.ILLUMINATOR_GREY_DARK,
Tile.ILLUMINATOR_GREY_LIGHT, Block.ILLUMINATOR_GREY_LIGHT,
Tile.ILLUMINATOR_GREY_MED, Block.ILLUMINATOR_GREY_MED,
Tile.ILLUMINATOR_ORANGE, Block.ILLUMINATOR_ORANGE,
Tile.ILLUMINATOR_PURPLE, Block.ILLUMINATOR_PURPLE,
Tile.ILLUMINATOR_RED, Block.ILLUMINATOR_RED,
Tile.ILLUMINATOR_TAN, Block.ILLUMINATOR_TAN,
Tile.ILLUMINATOR_WHITE, Block.ILLUMINATOR_WHITE,
Tile.ILLUMINATOR_YELLOW, Block.ILLUMINATOR_YELLOW,
Tile.ILLUMINATOR_BLACK_OFF, Block.ILLUMINATOR_BLACK_OFF,
Tile.ILLUMINATOR_BLUE_OFF, Block.ILLUMINATOR_BLUE_OFF,
Tile.ILLUMINATOR_BROWN_OFF, Block.ILLUMINATOR_BROWN_OFF,
Tile.ILLUMINATOR_CYAN_OFF, Block.ILLUMINATOR_CYAN_OFF,
Tile.ILLUMINATOR_FUCHSIA_OFF, Block.ILLUMINATOR_FUCHSIA_OFF,
Tile.ILLUMINATOR_GREEN_OFF, Block.ILLUMINATOR_GREEN_OFF,
Tile.ILLUMINATOR_GREEN_DARK_OFF, Block.ILLUMINATOR_GREEN_DARK_OFF,
Tile.ILLUMINATOR_GREY_DARK_OFF, Block.ILLUMINATOR_GREY_DARK_OFF,
Tile.ILLUMINATOR_GREY_LIGHT_OFF, Block.ILLUMINATOR_GREY_LIGHT_OFF,
Tile.ILLUMINATOR_GREY_MED_OFF, Block.ILLUMINATOR_GREY_MED_OFF,
Tile.ILLUMINATOR_ORANGE_OFF, Block.ILLUMINATOR_ORANGE_OFF,
Tile.ILLUMINATOR_PURPLE_OFF, Block.ILLUMINATOR_PURPLE_OFF,
Tile.ILLUMINATOR_RED_OFF, Block.ILLUMINATOR_RED_OFF,
Tile.ILLUMINATOR_TAN_OFF, Block.ILLUMINATOR_TAN_OFF,
Tile.ILLUMINATOR_WHITE_OFF, Block.ILLUMINATOR_WHITE_OFF,
Tile.ILLUMINATOR_YELLOW, Block.ILLUMINATOR_YELLOW,
Tile.SANDSTONE, Block.SANDSTONE,
Tile.SANDSTONE_BLACK, Block.SANDSTONE_BLACK,
Tile.SANDSTONE_DESERT, Block.SANDSTONE_DESERT,
Tile.SANDSTONE_RED, Block.SANDSTONE_RED,
Tile.SANDSTONE_WHITE, Block.SANDSTONE_WHITE,
Tile.SANDSTONE_GREEN, Block.SANDSTONE_GREEN,
Tile.DAYLIGHT_CAPACITOR Block.DAYLIGHT_CAPACITOR
) )
/** /**
@@ -105,86 +102,86 @@ object TilesDrawer {
* It holds different shading rule to discriminate with group 01, index 0 is middle tile. * It holds different shading rule to discriminate with group 01, index 0 is middle tile.
*/ */
val TILES_CONNECT_MUTUAL = arrayListOf( val TILES_CONNECT_MUTUAL = arrayListOf(
Tile.STONE, Block.STONE,
Tile.STONE_QUARRIED, Block.STONE_QUARRIED,
Tile.STONE_TILE_WHITE, Block.STONE_TILE_WHITE,
Tile.STONE_BRICKS, Block.STONE_BRICKS,
Tile.DIRT, Block.DIRT,
Tile.GRASS, Block.GRASS,
Tile.PLANK_BIRCH, Block.PLANK_BIRCH,
Tile.PLANK_BLOODROSE, Block.PLANK_BLOODROSE,
Tile.PLANK_EBONY, Block.PLANK_EBONY,
Tile.PLANK_NORMAL, Block.PLANK_NORMAL,
Tile.SAND, Block.SAND,
Tile.SAND_WHITE, Block.SAND_WHITE,
Tile.SAND_RED, Block.SAND_RED,
Tile.SAND_DESERT, Block.SAND_DESERT,
Tile.SAND_BLACK, Block.SAND_BLACK,
Tile.SAND_GREEN, Block.SAND_GREEN,
Tile.GRAVEL, Block.GRAVEL,
Tile.GRAVEL_GREY, Block.GRAVEL_GREY,
Tile.SNOW, Block.SNOW,
Tile.ICE_NATURAL, Block.ICE_NATURAL,
Tile.ORE_COPPER, Block.ORE_COPPER,
Tile.ORE_IRON, Block.ORE_IRON,
Tile.ORE_GOLD, Block.ORE_GOLD,
Tile.ORE_SILVER, Block.ORE_SILVER,
Tile.ORE_ILMENITE, Block.ORE_ILMENITE,
Tile.ORE_AURICHALCUM, Block.ORE_AURICHALCUM,
Tile.WATER, Block.WATER,
Tile.WATER_1, Block.WATER_1,
Tile.WATER_2, Block.WATER_2,
Tile.WATER_3, Block.WATER_3,
Tile.WATER_4, Block.WATER_4,
Tile.WATER_5, Block.WATER_5,
Tile.WATER_6, Block.WATER_6,
Tile.WATER_7, Block.WATER_7,
Tile.WATER_8, Block.WATER_8,
Tile.WATER_9, Block.WATER_9,
Tile.WATER_10, Block.WATER_10,
Tile.WATER_11, Block.WATER_11,
Tile.WATER_12, Block.WATER_12,
Tile.WATER_13, Block.WATER_13,
Tile.WATER_14, Block.WATER_14,
Tile.WATER_15, Block.WATER_15,
Tile.LAVA, Block.LAVA,
Tile.LAVA_1, Block.LAVA_1,
Tile.LAVA_2, Block.LAVA_2,
Tile.LAVA_3, Block.LAVA_3,
Tile.LAVA_4, Block.LAVA_4,
Tile.LAVA_5, Block.LAVA_5,
Tile.LAVA_6, Block.LAVA_6,
Tile.LAVA_7, Block.LAVA_7,
Tile.LAVA_8, Block.LAVA_8,
Tile.LAVA_9, Block.LAVA_9,
Tile.LAVA_10, Block.LAVA_10,
Tile.LAVA_11, Block.LAVA_11,
Tile.LAVA_12, Block.LAVA_12,
Tile.LAVA_13, Block.LAVA_13,
Tile.LAVA_14, Block.LAVA_14,
Tile.LAVA_15 Block.LAVA_15
) )
/** /**
* Torches, levers, switches, ... * Torches, levers, switches, ...
*/ */
val TILES_WALL_STICKER = arrayListOf( val TILES_WALL_STICKER = arrayListOf(
Tile.TORCH, Block.TORCH,
Tile.TORCH_FROST, Block.TORCH_FROST,
Tile.TORCH_OFF, Block.TORCH_OFF,
Tile.TORCH_FROST_OFF Block.TORCH_FROST_OFF
) )
/** /**
* platforms, ... * platforms, ...
*/ */
val TILES_WALL_STICKER_CONNECT_SELF = arrayListOf( val TILES_WALL_STICKER_CONNECT_SELF = arrayListOf(
Tile.PLATFORM_BIRCH, Block.PLATFORM_BIRCH,
Tile.PLATFORM_BLOODROSE, Block.PLATFORM_BLOODROSE,
Tile.PLATFORM_EBONY, Block.PLATFORM_EBONY,
Tile.PLATFORM_STONE, Block.PLATFORM_STONE,
Tile.PLATFORM_WOODEN Block.PLATFORM_WOODEN
) )
/** /**
@@ -193,38 +190,38 @@ object TilesDrawer {
* i.e. red hues get lost if you dive into the water * i.e. red hues get lost if you dive into the water
*/ */
val TILES_BLEND_MUL = arrayListOf( val TILES_BLEND_MUL = arrayListOf(
Tile.WATER, Block.WATER,
Tile.WATER_1, Block.WATER_1,
Tile.WATER_2, Block.WATER_2,
Tile.WATER_3, Block.WATER_3,
Tile.WATER_4, Block.WATER_4,
Tile.WATER_5, Block.WATER_5,
Tile.WATER_6, Block.WATER_6,
Tile.WATER_7, Block.WATER_7,
Tile.WATER_8, Block.WATER_8,
Tile.WATER_9, Block.WATER_9,
Tile.WATER_10, Block.WATER_10,
Tile.WATER_11, Block.WATER_11,
Tile.WATER_12, Block.WATER_12,
Tile.WATER_13, Block.WATER_13,
Tile.WATER_14, Block.WATER_14,
Tile.WATER_15, Block.WATER_15,
Tile.LAVA, Block.LAVA,
Tile.LAVA_1, Block.LAVA_1,
Tile.LAVA_2, Block.LAVA_2,
Tile.LAVA_3, Block.LAVA_3,
Tile.LAVA_4, Block.LAVA_4,
Tile.LAVA_5, Block.LAVA_5,
Tile.LAVA_6, Block.LAVA_6,
Tile.LAVA_7, Block.LAVA_7,
Tile.LAVA_8, Block.LAVA_8,
Tile.LAVA_9, Block.LAVA_9,
Tile.LAVA_10, Block.LAVA_10,
Tile.LAVA_11, Block.LAVA_11,
Tile.LAVA_12, Block.LAVA_12,
Tile.LAVA_13, Block.LAVA_13,
Tile.LAVA_14, Block.LAVA_14,
Tile.LAVA_15 Block.LAVA_15
) )
fun update() { fun update() {
@@ -246,8 +243,8 @@ object TilesDrawer {
blendMul() blendMul()
g.color = wallOverlayColour g.color = wallOverlayColour
g.fillRect(MapCamera.x.toFloat(), MapCamera.y.toFloat(), g.fillRect(WorldCamera.x.toFloat(), WorldCamera.y.toFloat(),
MapCamera.width.toFloat() + 1, MapCamera.height.toFloat() + 1 WorldCamera.width.toFloat() + 1, WorldCamera.height.toFloat() + 1
) )
blendNormal() blendNormal()
@@ -287,7 +284,7 @@ object TilesDrawer {
private fun drawTiles(g: Graphics, mode: Int, drawModeTilesBlendMul: Boolean) { private fun drawTiles(g: Graphics, mode: Int, drawModeTilesBlendMul: Boolean) {
val for_y_start = y / TILE_SIZE val for_y_start = y / TILE_SIZE
val for_y_end = TilesDrawer.clampHTile(for_y_start + (height / TILE_SIZE) + 2) val for_y_end = BlocksDrawer.clampHTile(for_y_start + (height / TILE_SIZE) + 2)
val for_x_start = x / TILE_SIZE - 1 val for_x_start = x / TILE_SIZE - 1
val for_x_end = for_x_start + (width / TILE_SIZE) + 3 val for_x_end = for_x_start + (width / TILE_SIZE) + 3
@@ -313,7 +310,7 @@ object TilesDrawer {
// draw a tile, but only when illuminated // draw a tile, but only when illuminated
try { try {
if ((mode == WALL || mode == TERRAIN) && // not an air tile if ((mode == WALL || mode == TERRAIN) && // not an air tile
(thisTile ?: 0) != Tile.AIR) { (thisTile ?: 0) != Block.AIR) {
// check if light level of nearby or this tile is illuminated // check if light level of nearby or this tile is illuminated
if ( LightmapRenderer.getHighestRGB(x, y) ?: 0 >= tileDrawLightThreshold || if ( LightmapRenderer.getHighestRGB(x, y) ?: 0 >= tileDrawLightThreshold ||
LightmapRenderer.getHighestRGB(x - 1, y) ?: 0 >= tileDrawLightThreshold || LightmapRenderer.getHighestRGB(x - 1, y) ?: 0 >= tileDrawLightThreshold ||
@@ -360,7 +357,7 @@ object TilesDrawer {
// draw a tile // draw a tile
if (drawModeTilesBlendMul) { if (drawModeTilesBlendMul) {
if (TilesDrawer.isBlendMul(thisTile)) { if (BlocksDrawer.isBlendMul(thisTile)) {
drawTile(mode, x, y, thisTileX, thisTileY) drawTile(mode, x, y, thisTileX, thisTileY)
} }
} }
@@ -373,7 +370,7 @@ object TilesDrawer {
// draw a breakage // draw a breakage
if (mode == TERRAIN || mode == WALL) { if (mode == TERRAIN || mode == WALL) {
val breakage = if (mode == TERRAIN) world.getTerrainDamage(x, y) else world.getWallDamage(x, y) val breakage = if (mode == TERRAIN) world.getTerrainDamage(x, y) else world.getWallDamage(x, y)
val maxHealth = TileCodex[world.getTileFromTerrain(x, y)].strength val maxHealth = BlockCodex[world.getTileFromTerrain(x, y)].strength
val stage = (breakage / maxHealth).times(breakAnimSteps).roundInt() val stage = (breakage / maxHealth).times(breakAnimSteps).roundInt()
// actual drawing // actual drawing
if (stage > 0) { if (stage > 0) {
@@ -420,10 +417,10 @@ object TilesDrawer {
*/ */
fun getNearbyTilesInfo(x: Int, y: Int, mode: Int, mark: Int?): Int { fun getNearbyTilesInfo(x: Int, y: Int, mode: Int, mark: Int?): Int {
val nearbyTiles = IntArray(4) val nearbyTiles = IntArray(4)
nearbyTiles[NEARBY_TILE_KEY_LEFT] = world.getTileFrom(mode, x - 1, y) ?: Tile.NULL nearbyTiles[NEARBY_TILE_KEY_LEFT] = world.getTileFrom(mode, x - 1, y) ?: Block.NULL
nearbyTiles[NEARBY_TILE_KEY_RIGHT] = world.getTileFrom(mode, x + 1, y) ?: Tile.NULL nearbyTiles[NEARBY_TILE_KEY_RIGHT] = world.getTileFrom(mode, x + 1, y) ?: Block.NULL
nearbyTiles[NEARBY_TILE_KEY_UP] = world.getTileFrom(mode, x , y - 1) ?: 4906 nearbyTiles[NEARBY_TILE_KEY_UP] = world.getTileFrom(mode, x , y - 1) ?: 4906
nearbyTiles[NEARBY_TILE_KEY_DOWN] = world.getTileFrom(mode, x , y + 1) ?: Tile.NULL nearbyTiles[NEARBY_TILE_KEY_DOWN] = world.getTileFrom(mode, x , y + 1) ?: Block.NULL
// try for // try for
var ret = 0 var ret = 0
@@ -438,17 +435,17 @@ object TilesDrawer {
fun getNearbyTilesInfoNonSolid(x: Int, y: Int, mode: Int): Int { fun getNearbyTilesInfoNonSolid(x: Int, y: Int, mode: Int): Int {
val nearbyTiles = IntArray(4) val nearbyTiles = IntArray(4)
nearbyTiles[NEARBY_TILE_KEY_LEFT] = world.getTileFrom(mode, x - 1, y) ?: Tile.NULL nearbyTiles[NEARBY_TILE_KEY_LEFT] = world.getTileFrom(mode, x - 1, y) ?: Block.NULL
nearbyTiles[NEARBY_TILE_KEY_RIGHT] = world.getTileFrom(mode, x + 1, y) ?: Tile.NULL nearbyTiles[NEARBY_TILE_KEY_RIGHT] = world.getTileFrom(mode, x + 1, y) ?: Block.NULL
nearbyTiles[NEARBY_TILE_KEY_UP] = world.getTileFrom(mode, x , y - 1) ?: 4906 nearbyTiles[NEARBY_TILE_KEY_UP] = world.getTileFrom(mode, x , y - 1) ?: 4906
nearbyTiles[NEARBY_TILE_KEY_DOWN] = world.getTileFrom(mode, x , y + 1) ?: Tile.NULL nearbyTiles[NEARBY_TILE_KEY_DOWN] = world.getTileFrom(mode, x , y + 1) ?: Block.NULL
// try for // try for
var ret = 0 var ret = 0
for (i in 0..3) { for (i in 0..3) {
try { try {
if (!TileCodex[nearbyTiles[i]].isSolid && if (!BlockCodex[nearbyTiles[i]].isSolid &&
!TileCodex[nearbyTiles[i]].isFluid) { !BlockCodex[nearbyTiles[i]].isFluid) {
ret += (1 shl i) // add 1, 2, 4, 8 for i = 0, 1, 2, 3 ret += (1 shl i) // add 1, 2, 4, 8 for i = 0, 1, 2, 3
} }
} catch (e: ArrayIndexOutOfBoundsException) { } catch (e: ArrayIndexOutOfBoundsException) {
@@ -462,32 +459,32 @@ object TilesDrawer {
fun getNearbyTilesInfoWallSticker(x: Int, y: Int): Int { fun getNearbyTilesInfoWallSticker(x: Int, y: Int): Int {
val nearbyTiles = IntArray(4) val nearbyTiles = IntArray(4)
val NEARBY_TILE_KEY_BACK = NEARBY_TILE_KEY_UP val NEARBY_TILE_KEY_BACK = NEARBY_TILE_KEY_UP
nearbyTiles[NEARBY_TILE_KEY_LEFT] = world.getTileFrom(TERRAIN, x - 1, y) ?: Tile.NULL nearbyTiles[NEARBY_TILE_KEY_LEFT] = world.getTileFrom(TERRAIN, x - 1, y) ?: Block.NULL
nearbyTiles[NEARBY_TILE_KEY_RIGHT] = world.getTileFrom(TERRAIN, x + 1, y) ?: Tile.NULL nearbyTiles[NEARBY_TILE_KEY_RIGHT] = world.getTileFrom(TERRAIN, x + 1, y) ?: Block.NULL
nearbyTiles[NEARBY_TILE_KEY_DOWN] = world.getTileFrom(TERRAIN, x , y + 1) ?: Tile.NULL nearbyTiles[NEARBY_TILE_KEY_DOWN] = world.getTileFrom(TERRAIN, x , y + 1) ?: Block.NULL
nearbyTiles[NEARBY_TILE_KEY_BACK] = world.getTileFrom(WALL, x , y) ?: Tile.NULL nearbyTiles[NEARBY_TILE_KEY_BACK] = world.getTileFrom(WALL, x , y) ?: Block.NULL
try { try {
if (TileCodex[nearbyTiles[NEARBY_TILE_KEY_DOWN]].isSolid) if (BlockCodex[nearbyTiles[NEARBY_TILE_KEY_DOWN]].isSolid)
// has tile on the bottom // has tile on the bottom
return 3 return 3
else if (TileCodex[nearbyTiles[NEARBY_TILE_KEY_RIGHT]].isSolid else if (BlockCodex[nearbyTiles[NEARBY_TILE_KEY_RIGHT]].isSolid
&& TileCodex[nearbyTiles[NEARBY_TILE_KEY_LEFT]].isSolid) && BlockCodex[nearbyTiles[NEARBY_TILE_KEY_LEFT]].isSolid)
// has tile on both sides // has tile on both sides
return 0 return 0
else if (TileCodex[nearbyTiles[NEARBY_TILE_KEY_RIGHT]].isSolid) else if (BlockCodex[nearbyTiles[NEARBY_TILE_KEY_RIGHT]].isSolid)
// has tile on the right // has tile on the right
return 2 return 2
else if (TileCodex[nearbyTiles[NEARBY_TILE_KEY_LEFT]].isSolid) else if (BlockCodex[nearbyTiles[NEARBY_TILE_KEY_LEFT]].isSolid)
// has tile on the left // has tile on the left
return 1 return 1
else if (TileCodex[nearbyTiles[NEARBY_TILE_KEY_BACK]].isSolid) else if (BlockCodex[nearbyTiles[NEARBY_TILE_KEY_BACK]].isSolid)
// has tile on the back // has tile on the back
return 0 return 0
else else
return 3 return 3
} catch (e: ArrayIndexOutOfBoundsException) { } catch (e: ArrayIndexOutOfBoundsException) {
return if (TileCodex[nearbyTiles[NEARBY_TILE_KEY_DOWN]].isSolid) return if (BlockCodex[nearbyTiles[NEARBY_TILE_KEY_DOWN]].isSolid)
// has tile on the bottom // has tile on the bottom
3 else 0 3 else 0
} }
@@ -495,38 +492,38 @@ object TilesDrawer {
fun getNearbyTilesInfoPlatform(x: Int, y: Int): Int { fun getNearbyTilesInfoPlatform(x: Int, y: Int): Int {
val nearbyTiles = IntArray(4) val nearbyTiles = IntArray(4)
nearbyTiles[NEARBY_TILE_KEY_LEFT] = world.getTileFrom(TERRAIN, x - 1, y) ?: Tile.NULL nearbyTiles[NEARBY_TILE_KEY_LEFT] = world.getTileFrom(TERRAIN, x - 1, y) ?: Block.NULL
nearbyTiles[NEARBY_TILE_KEY_RIGHT] = world.getTileFrom(TERRAIN, x + 1, y) ?: Tile.NULL nearbyTiles[NEARBY_TILE_KEY_RIGHT] = world.getTileFrom(TERRAIN, x + 1, y) ?: Block.NULL
if ((TileCodex[nearbyTiles[NEARBY_TILE_KEY_LEFT]].isSolid && if ((BlockCodex[nearbyTiles[NEARBY_TILE_KEY_LEFT]].isSolid &&
TileCodex[nearbyTiles[NEARBY_TILE_KEY_RIGHT]].isSolid) || BlockCodex[nearbyTiles[NEARBY_TILE_KEY_RIGHT]].isSolid) ||
isPlatform(nearbyTiles[NEARBY_TILE_KEY_LEFT]) && isPlatform(nearbyTiles[NEARBY_TILE_KEY_LEFT]) &&
isPlatform(nearbyTiles[NEARBY_TILE_KEY_RIGHT])) // LR solid || LR platform isPlatform(nearbyTiles[NEARBY_TILE_KEY_RIGHT])) // LR solid || LR platform
return 0 return 0
else if (TileCodex[nearbyTiles[NEARBY_TILE_KEY_LEFT]].isSolid && else if (BlockCodex[nearbyTiles[NEARBY_TILE_KEY_LEFT]].isSolid &&
!isPlatform(nearbyTiles[NEARBY_TILE_KEY_LEFT]) && !isPlatform(nearbyTiles[NEARBY_TILE_KEY_LEFT]) &&
!TileCodex[nearbyTiles[NEARBY_TILE_KEY_RIGHT]].isSolid && !BlockCodex[nearbyTiles[NEARBY_TILE_KEY_RIGHT]].isSolid &&
!isPlatform(nearbyTiles[NEARBY_TILE_KEY_RIGHT])) // L solid and not platform && R not solid and not platform !isPlatform(nearbyTiles[NEARBY_TILE_KEY_RIGHT])) // L solid and not platform && R not solid and not platform
return 4 return 4
else if (TileCodex[nearbyTiles[NEARBY_TILE_KEY_RIGHT]].isSolid && else if (BlockCodex[nearbyTiles[NEARBY_TILE_KEY_RIGHT]].isSolid &&
!isPlatform(nearbyTiles[NEARBY_TILE_KEY_RIGHT]) && !isPlatform(nearbyTiles[NEARBY_TILE_KEY_RIGHT]) &&
!TileCodex[nearbyTiles[NEARBY_TILE_KEY_LEFT]].isSolid && !BlockCodex[nearbyTiles[NEARBY_TILE_KEY_LEFT]].isSolid &&
!isPlatform(nearbyTiles[NEARBY_TILE_KEY_LEFT])) // R solid and not platform && L not solid and nto platform !isPlatform(nearbyTiles[NEARBY_TILE_KEY_LEFT])) // R solid and not platform && L not solid and nto platform
return 6 return 6
else if (TileCodex[nearbyTiles[NEARBY_TILE_KEY_LEFT]].isSolid && else if (BlockCodex[nearbyTiles[NEARBY_TILE_KEY_LEFT]].isSolid &&
!isPlatform(nearbyTiles[NEARBY_TILE_KEY_LEFT])) // L solid && L not platform !isPlatform(nearbyTiles[NEARBY_TILE_KEY_LEFT])) // L solid && L not platform
return 3 return 3
else if (TileCodex[nearbyTiles[NEARBY_TILE_KEY_RIGHT]].isSolid && else if (BlockCodex[nearbyTiles[NEARBY_TILE_KEY_RIGHT]].isSolid &&
!isPlatform(nearbyTiles[NEARBY_TILE_KEY_RIGHT])) // R solid && R not platform !isPlatform(nearbyTiles[NEARBY_TILE_KEY_RIGHT])) // R solid && R not platform
return 5 return 5
else if ((TileCodex[nearbyTiles[NEARBY_TILE_KEY_LEFT]].isSolid || else if ((BlockCodex[nearbyTiles[NEARBY_TILE_KEY_LEFT]].isSolid ||
isPlatform(nearbyTiles[NEARBY_TILE_KEY_LEFT])) && isPlatform(nearbyTiles[NEARBY_TILE_KEY_LEFT])) &&
!TileCodex[nearbyTiles[NEARBY_TILE_KEY_RIGHT]].isSolid && !BlockCodex[nearbyTiles[NEARBY_TILE_KEY_RIGHT]].isSolid &&
!isPlatform(nearbyTiles[NEARBY_TILE_KEY_RIGHT])) // L solid or platform && R not solid and not platform !isPlatform(nearbyTiles[NEARBY_TILE_KEY_RIGHT])) // L solid or platform && R not solid and not platform
return 1 return 1
else if ((TileCodex[nearbyTiles[NEARBY_TILE_KEY_RIGHT]].isSolid || else if ((BlockCodex[nearbyTiles[NEARBY_TILE_KEY_RIGHT]].isSolid ||
isPlatform(nearbyTiles[NEARBY_TILE_KEY_RIGHT])) && isPlatform(nearbyTiles[NEARBY_TILE_KEY_RIGHT])) &&
!TileCodex[nearbyTiles[NEARBY_TILE_KEY_LEFT]].isSolid && !BlockCodex[nearbyTiles[NEARBY_TILE_KEY_LEFT]].isSolid &&
!isPlatform(nearbyTiles[NEARBY_TILE_KEY_LEFT])) // R solid or platform && L not solid and not platform !isPlatform(nearbyTiles[NEARBY_TILE_KEY_LEFT])) // R solid or platform && L not solid and not platform
return 2 return 2
else else
@@ -593,6 +590,6 @@ object TilesDrawer {
fun isBlendMul(b: Int?): Boolean = TILES_BLEND_MUL.contains(b) fun isBlendMul(b: Int?): Boolean = TILES_BLEND_MUL.contains(b)
fun tileInCamera(x: Int, y: Int) = fun tileInCamera(x: Int, y: Int) =
x >= MapCamera.x.div(TILE_SIZE) && y >= MapCamera.y.div(TILE_SIZE) && x >= WorldCamera.x.div(TILE_SIZE) && y >= WorldCamera.y.div(TILE_SIZE) &&
x <= MapCamera.x.plus(width).div(TILE_SIZE) && y <= MapCamera.y.plus(width).div(TILE_SIZE) x <= WorldCamera.x.plus(width).div(TILE_SIZE) && y <= WorldCamera.y.plus(width).div(TILE_SIZE)
} }

View File

@@ -1,9 +1,8 @@
package net.torvald.terrarum.mapdrawer package net.torvald.terrarum.worlddrawer
import net.torvald.terrarum.gameworld.GameWorld
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.tileproperties.Tile import net.torvald.terrarum.blockproperties.Block
import net.torvald.terrarum.tilestats.TileStats import net.torvald.terrarum.blockstats.BlockStats
import com.jme3.math.FastMath import com.jme3.math.FastMath
import net.torvald.colourutil.ColourTemp import net.torvald.colourutil.ColourTemp
import net.torvald.terrarum.blendMul import net.torvald.terrarum.blendMul
@@ -24,14 +23,14 @@ object FeaturesDrawer {
private set private set
private val TILES_COLD = intArrayOf( private val TILES_COLD = intArrayOf(
Tile.ICE_MAGICAL Block.ICE_MAGICAL
, Tile.ICE_FRAGILE , Block.ICE_FRAGILE
, Tile.ICE_NATURAL , Block.ICE_NATURAL
, Tile.SNOW) , Block.SNOW)
private val TILES_WARM = intArrayOf( private val TILES_WARM = intArrayOf(
Tile.SAND_DESERT Block.SAND_DESERT
, Tile.SAND_RED) , Block.SAND_RED)
fun update(gc: GameContainer, delta_t: Int) { fun update(gc: GameContainer, delta_t: Int) {
} }
@@ -46,8 +45,8 @@ object FeaturesDrawer {
fun drawEnvOverlay(g: Graphics) { fun drawEnvOverlay(g: Graphics) {
val onscreen_tiles_max = FastMath.ceil(Terrarum.HEIGHT * Terrarum.WIDTH / FastMath.sqr(TILE_SIZE.toFloat())) * 2 val onscreen_tiles_max = FastMath.ceil(Terrarum.HEIGHT * Terrarum.WIDTH / FastMath.sqr(TILE_SIZE.toFloat())) * 2
val onscreen_tiles_cap = onscreen_tiles_max / 4f val onscreen_tiles_cap = onscreen_tiles_max / 4f
val onscreen_cold_tiles = TileStats.getCount(*TILES_COLD).toFloat() val onscreen_cold_tiles = BlockStats.getCount(*TILES_COLD).toFloat()
val onscreen_warm_tiles = TileStats.getCount(*TILES_WARM).toFloat() val onscreen_warm_tiles = BlockStats.getCount(*TILES_WARM).toFloat()
val colTemp_cold = colTempLinearFunc(onscreen_cold_tiles / onscreen_tiles_cap) val colTemp_cold = colTempLinearFunc(onscreen_cold_tiles / onscreen_tiles_cap)
val colTemp_warm = colTempLinearFunc(-(onscreen_warm_tiles / onscreen_tiles_cap)) val colTemp_warm = colTempLinearFunc(-(onscreen_warm_tiles / onscreen_tiles_cap))
@@ -58,8 +57,8 @@ object FeaturesDrawer {
g.color = ColourTemp(colTemp) g.color = ColourTemp(colTemp)
g.fillRect( g.fillRect(
MapCamera.x * zoom, WorldCamera.x * zoom,
MapCamera.y * zoom, WorldCamera.y * zoom,
Terrarum.WIDTH * if (zoom < 1) 1f / zoom else zoom, Terrarum.WIDTH * if (zoom < 1) 1f / zoom else zoom,
Terrarum.HEIGHT * if (zoom < 1) 1f / zoom else zoom Terrarum.HEIGHT * if (zoom < 1) 1f / zoom else zoom
) )

View File

@@ -1,22 +1,15 @@
package net.torvald.terrarum.mapdrawer package net.torvald.terrarum.worlddrawer
import net.torvald.terrarum.gameactors.Luminous import net.torvald.terrarum.gameactors.Luminous
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.tileproperties.TileCodex import net.torvald.terrarum.blockproperties.BlockCodex
import com.jme3.math.FastMath import com.jme3.math.FastMath
import net.torvald.colourutil.RGB
import net.torvald.colourutil.CIELuvUtil.additiveLuv
import net.torvald.terrarum.concurrent.ThreadParallel
import net.torvald.terrarum.gameactors.ActorWithPhysics import net.torvald.terrarum.gameactors.ActorWithPhysics
import net.torvald.terrarum.gameactors.abs
import net.torvald.terrarum.gameactors.roundInt
import net.torvald.terrarum.gameworld.GameWorld import net.torvald.terrarum.gameworld.GameWorld
import net.torvald.terrarum.tileproperties.Tile import net.torvald.terrarum.blockproperties.Block
import net.torvald.terrarum.tileproperties.TilePropUtil
import org.newdawn.slick.Color import org.newdawn.slick.Color
import org.newdawn.slick.Graphics import org.newdawn.slick.Graphics
import java.util.* import java.util.*
import java.util.concurrent.locks.ReentrantLock
/** /**
* Created by minjaesong on 16-01-25. * Created by minjaesong on 16-01-25.
@@ -25,8 +18,8 @@ import java.util.concurrent.locks.ReentrantLock
object LightmapRenderer { object LightmapRenderer {
private val world: GameWorld = Terrarum.ingame!!.world private val world: GameWorld = Terrarum.ingame!!.world
val overscan_open: Int = Math.min(32, 256f.div(TileCodex[Tile.AIR].opacity and 0xFF).ceil()) val overscan_open: Int = Math.min(32, 256f.div(BlockCodex[Block.AIR].opacity and 0xFF).ceil())
val overscan_opaque: Int = Math.min(8, 256f.div(TileCodex[Tile.STONE].opacity and 0xFF).ceil()) val overscan_opaque: Int = Math.min(8, 256f.div(BlockCodex[Block.STONE].opacity and 0xFF).ceil())
private val LIGHTMAP_WIDTH = Terrarum.ingame!!.ZOOM_MIN.inv().times(Terrarum.WIDTH) private val LIGHTMAP_WIDTH = Terrarum.ingame!!.ZOOM_MIN.inv().times(Terrarum.WIDTH)
.div(FeaturesDrawer.TILE_SIZE).ceil() + overscan_open * 2 + 3 .div(FeaturesDrawer.TILE_SIZE).ceil() + overscan_open * 2 + 3
@@ -39,7 +32,7 @@ object LightmapRenderer {
private val lightmap: Array<IntArray> = Array(LIGHTMAP_HEIGHT) { IntArray(LIGHTMAP_WIDTH) } private val lightmap: Array<IntArray> = Array(LIGHTMAP_HEIGHT) { IntArray(LIGHTMAP_WIDTH) }
private val lanternMap = ArrayList<Lantern>(Terrarum.ingame!!.ACTORCONTAINER_INITIAL_SIZE * 4) private val lanternMap = ArrayList<Lantern>(Terrarum.ingame!!.ACTORCONTAINER_INITIAL_SIZE * 4)
private val AIR = Tile.AIR private val AIR = Block.AIR
private val OFFSET_R = 2 private val OFFSET_R = 2
private val OFFSET_G = 1 private val OFFSET_G = 1
@@ -87,11 +80,11 @@ object LightmapRenderer {
} }
fun renderLightMap() { fun renderLightMap() {
for_x_start = MapCamera.x / TILE_SIZE - 1 // fix for premature lightmap rendering for_x_start = WorldCamera.x / TILE_SIZE - 1 // fix for premature lightmap rendering
for_y_start = MapCamera.y / TILE_SIZE - 1 // on topmost/leftmost side for_y_start = WorldCamera.y / TILE_SIZE - 1 // on topmost/leftmost side
for_x_end = for_x_start + MapCamera.width / TILE_SIZE + 3 for_x_end = for_x_start + WorldCamera.width / TILE_SIZE + 3
for_y_end = for_y_start + MapCamera.height / TILE_SIZE + 2 // same fix as above for_y_end = for_y_start + WorldCamera.height / TILE_SIZE + 2 // same fix as above
/** /**
* * true: overscanning is limited to 8 tiles in width (overscan_opaque) * * true: overscanning is limited to 8 tiles in width (overscan_opaque)
@@ -159,8 +152,8 @@ object LightmapRenderer {
// build noop map // build noop map
for (i in 0..rect_size) { for (i in 0..rect_size) {
val point = edgeToMaskNum(i) val point = edgeToMaskNum(i)
val tile = Terrarum.ingame!!.world.getTileFromTerrain(point.first, point.second) ?: Tile.NULL val tile = Terrarum.ingame!!.world.getTileFromTerrain(point.first, point.second) ?: Block.NULL
val isSolid = TileCodex[tile].isSolid val isSolid = BlockCodex[tile].isSolid
noop_mask.set(i, isSolid) noop_mask.set(i, isSolid)
} }
@@ -248,8 +241,8 @@ object LightmapRenderer {
var lightLevelThis: Int = 0 var lightLevelThis: Int = 0
val thisTerrain = Terrarum.ingame!!.world.getTileFromTerrain(x, y) val thisTerrain = Terrarum.ingame!!.world.getTileFromTerrain(x, y)
val thisWall = Terrarum.ingame!!.world.getTileFromWall(x, y) val thisWall = Terrarum.ingame!!.world.getTileFromWall(x, y)
val thisTileLuminosity = TileCodex[thisTerrain].luminosity val thisTileLuminosity = BlockCodex[thisTerrain].luminosity
val thisTileOpacity = TileCodex[thisTerrain].opacity val thisTileOpacity = BlockCodex[thisTerrain].opacity
val sunLight = Terrarum.ingame!!.world.globalLight val sunLight = Terrarum.ingame!!.world.globalLight
// MIX TILE // MIX TILE

View File

@@ -1,4 +1,4 @@
package net.torvald.terrarum.mapdrawer package net.torvald.terrarum.worlddrawer
import com.jme3.math.FastMath import com.jme3.math.FastMath
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
@@ -7,7 +7,7 @@ import net.torvald.terrarum.gameworld.GameWorld
/** /**
* Created by minjaesong on 2016-12-30. * Created by minjaesong on 2016-12-30.
*/ */
object MapCamera { object WorldCamera {
private val world: GameWorld? = Terrarum.ingame?.world private val world: GameWorld? = Terrarum.ingame?.world
private val TILE_SIZE = FeaturesDrawer.TILE_SIZE private val TILE_SIZE = FeaturesDrawer.TILE_SIZE

View File

@@ -1,4 +1,4 @@
package net.torvald.terrarum.mapgenerator package net.torvald.terrarum.worldgenerator
import net.torvald.random.HQRNG import net.torvald.random.HQRNG

View File

@@ -1,4 +1,4 @@
package net.torvald.terrarum.mapgenerator package net.torvald.terrarum.worldgenerator
internal object FloatingIslePreset01 { internal object FloatingIslePreset01 {
var w = 100 var w = 100

View File

@@ -1,4 +1,4 @@
package net.torvald.terrarum.mapgenerator package net.torvald.terrarum.worldgenerator
internal object FloatingIslePreset02 { internal object FloatingIslePreset02 {
var w = 80 var w = 80

View File

@@ -1,4 +1,4 @@
package net.torvald.terrarum.mapgenerator package net.torvald.terrarum.worldgenerator
internal object FloatingIslePreset03 { internal object FloatingIslePreset03 {
var w = 66 var w = 66

View File

@@ -1,4 +1,4 @@
package net.torvald.terrarum.mapgenerator package net.torvald.terrarum.worldgenerator
internal object FloatingIslePreset04 { internal object FloatingIslePreset04 {
var w = 88 var w = 88

View File

@@ -1,4 +1,4 @@
package net.torvald.terrarum.mapgenerator package net.torvald.terrarum.worldgenerator
internal object FloatingIslePreset05 { internal object FloatingIslePreset05 {
var w = 74 var w = 74

View File

@@ -1,4 +1,4 @@
package net.torvald.terrarum.mapgenerator package net.torvald.terrarum.worldgenerator
/** /**
* Created by minjaesong on 16-03-31. * Created by minjaesong on 16-03-31.

View File

@@ -1,4 +1,4 @@
package net.torvald.terrarum.mapgenerator package net.torvald.terrarum.worldgenerator
import com.jme3.math.FastMath import com.jme3.math.FastMath

View File

@@ -1,4 +1,4 @@
package net.torvald.terrarum.mapgenerator package net.torvald.terrarum.worldgenerator
import com.jme3.math.FastMath import com.jme3.math.FastMath

View File

@@ -1,4 +1,4 @@
package net.torvald.terrarum.mapgenerator package net.torvald.terrarum.worldgenerator
import com.jme3.math.FastMath import com.jme3.math.FastMath

View File

@@ -1,4 +1,4 @@
package net.torvald.terrarum.mapgenerator package net.torvald.terrarum.worldgenerator
import com.jme3.math.FastMath import com.jme3.math.FastMath

View File

@@ -1,4 +1,4 @@
package net.torvald.terrarum.mapgenerator package net.torvald.terrarum.worldgenerator
/** /**
* Created by minjaesong on 16-03-31. * Created by minjaesong on 16-03-31.

View File

@@ -1,4 +1,4 @@
package net.torvald.terrarum.mapgenerator package net.torvald.terrarum.worldgenerator
import net.torvald.dataclass.IntArrayStack import net.torvald.dataclass.IntArrayStack
import net.torvald.colourutil.Col4096 import net.torvald.colourutil.Col4096

View File

@@ -1,4 +1,4 @@
package net.torvald.terrarum.mapgenerator package net.torvald.terrarum.worldgenerator
import net.torvald.random.HQRNG import net.torvald.random.HQRNG
import com.jme3.math.FastMath import com.jme3.math.FastMath

View File

@@ -1,4 +1,4 @@
package net.torvald.terrarum.mapgenerator package net.torvald.terrarum.worldgenerator
/* /*
* A speed-improved simplex noise algorithm for 2D, 3D and 4D in Java. * A speed-improved simplex noise algorithm for 2D, 3D and 4D in Java.

View File

@@ -1,4 +1,4 @@
package net.torvald.terrarum.mapgenerator package net.torvald.terrarum.worldgenerator
/** /**
* Created by minjaesong on 16-06-13. * Created by minjaesong on 16-06-13.

View File

@@ -1,14 +1,13 @@
package net.torvald.terrarum.mapgenerator package net.torvald.terrarum.worldgenerator
import net.torvald.random.HQRNG import net.torvald.random.HQRNG
import net.torvald.terrarum.gameworld.GameWorld import net.torvald.terrarum.gameworld.GameWorld
import net.torvald.terrarum.tileproperties.Tile import net.torvald.terrarum.blockproperties.Block
import com.jme3.math.FastMath import com.jme3.math.FastMath
import com.sudoplay.joise.Joise import com.sudoplay.joise.Joise
import com.sudoplay.joise.module.* import com.sudoplay.joise.module.*
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.concurrent.ThreadParallel import net.torvald.terrarum.concurrent.ThreadParallel
import net.torvald.terrarum.gameactors.ThreadActorUpdate
import net.torvald.terrarum.gameactors.roundInt import net.torvald.terrarum.gameactors.roundInt
import java.util.* import java.util.*
@@ -117,32 +116,32 @@ object WorldGenerator {
*/ */
val noiseArray = arrayOf( val noiseArray = arrayOf(
// TODO cave one featured in http://accidentalnoise.sourceforge.net/minecraftworlds.html // TODO cave one featured in http://accidentalnoise.sourceforge.net/minecraftworlds.html
TaggedJoise("Carving caves", noiseCave(), 1.0, TILE_MACRO_ALL, TILE_MACRO_ALL, Tile.AIR, NoiseFilterSqrt, CAVEGEN_THRE_START, CAVEGEN_THRE_END) TaggedJoise("Carving caves", noiseCave(), 1.0, TILE_MACRO_ALL, TILE_MACRO_ALL, Block.AIR, NoiseFilterSqrt, CAVEGEN_THRE_START, CAVEGEN_THRE_END)
// , TaggedJoise("Collapsing caves", noiseBlobs(0.5), 0.3, Tile.AIR, Tile.STONE, Tile.STONE, NoiseFilterUniform) // , TaggedJoise("Collapsing caves", noiseBlobs(0.5), 0.3, Block.AIR, Block.STONE, Block.STONE, NoiseFilterUniform)
// //
//, TaggedJoise("Putting stone patches on the ground", noiseBlobs(0.8), 1.02f, intArrayOf(Tile.DIRT, Tile.GRASS), Tile.DIRT, Tile.STONE, NoiseFilterQuadratic, NOISE_GRAD_END, NOISE_GRAD_START) //, TaggedJoise("Putting stone patches on the ground", noiseBlobs(0.8), 1.02f, intArrayOf(Block.DIRT, Block.GRASS), Block.DIRT, Block.STONE, NoiseFilterQuadratic, NOISE_GRAD_END, NOISE_GRAD_START)
//, TaggedJoise("Placing dirt spots in the cave", noiseBlobs(0.5), 0.98f, Tile.STONE, Tile.STONE, Tile.DIRT, NoiseFilterQuadratic, NOISE_GRAD_END, NOISE_GRAD_START) //, TaggedJoise("Placing dirt spots in the cave", noiseBlobs(0.5), 0.98f, Block.STONE, Block.STONE, Block.DIRT, NoiseFilterQuadratic, NOISE_GRAD_END, NOISE_GRAD_START)
//, TaggedJoise("Quarrying some stone into gravels", noiseBlobs(0.5), 0.98f, Tile.STONE, Tile.STONE, Tile.GRAVEL, NoiseFilterQuadratic, NOISE_GRAD_END, NOISE_GRAD_START) //, TaggedJoise("Quarrying some stone into gravels", noiseBlobs(0.5), 0.98f, Block.STONE, Block.STONE, Block.GRAVEL, NoiseFilterQuadratic, NOISE_GRAD_END, NOISE_GRAD_START)
// //
//, TaggedJoise("Growing copper veins", noiseRidged(1.7f, 1.7f), 1.68f, Tile.STONE, Tile.STONE, Tile.ORE_COPPER) //, TaggedJoise("Growing copper veins", noiseRidged(1.7f, 1.7f), 1.68f, Block.STONE, Block.STONE, Block.ORE_COPPER)
//, TaggedJoise("Cutting copper veins", noiseBlobs(0.4f, 0.4f), 0.26f, Tile.ORE_COPPER, Tile.STONE, Tile.STONE) //, TaggedJoise("Cutting copper veins", noiseBlobs(0.4f, 0.4f), 0.26f, Block.ORE_COPPER, Block.STONE, Block.STONE)
// //
//, TaggedJoise("Growing iron veins", noiseRidged(1.7f, 1.7f), 1.68f, Tile.STONE, Tile.STONE, Tile.ORE_IRON) //, TaggedJoise("Growing iron veins", noiseRidged(1.7f, 1.7f), 1.68f, Block.STONE, Block.STONE, Block.ORE_IRON)
//, TaggedJoise("Cutting iron veins", noiseBlobs(0.7f, 0.7f), 0.26f, Tile.ORE_IRON, Tile.STONE, Tile.STONE) //, TaggedJoise("Cutting iron veins", noiseBlobs(0.7f, 0.7f), 0.26f, Block.ORE_IRON, Block.STONE, Block.STONE)
// //
//, TaggedJoise("Growing silver veins", noiseRidged(1.7f, 1.7f), 1.71f, Tile.STONE, Tile.STONE, Tile.ORE_SILVER) //, TaggedJoise("Growing silver veins", noiseRidged(1.7f, 1.7f), 1.71f, Block.STONE, Block.STONE, Block.ORE_SILVER)
//, TaggedJoise("Cutting silver veins", noiseBlobs(0.7f, 0.7f), 0.26f, Tile.ORE_SILVER, Tile.STONE, Tile.STONE) //, TaggedJoise("Cutting silver veins", noiseBlobs(0.7f, 0.7f), 0.26f, Block.ORE_SILVER, Block.STONE, Block.STONE)
// //
//, TaggedJoise("Growing gold veins", noiseRidged(1.7f, 1.7f), 1.73f, Tile.STONE, Tile.STONE, Tile.ORE_GOLD) //, TaggedJoise("Growing gold veins", noiseRidged(1.7f, 1.7f), 1.73f, Block.STONE, Block.STONE, Block.ORE_GOLD)
//, TaggedJoise("Cutting gold veins", noiseBlobs(0.7f, 0.7f), 0.26f, Tile.ORE_GOLD, Tile.STONE, Tile.STONE) //, TaggedJoise("Cutting gold veins", noiseBlobs(0.7f, 0.7f), 0.26f, Block.ORE_GOLD, Block.STONE, Block.STONE)
// // FIXME gem clusters are too large // // FIXME gem clusters are too large
//, TaggedJoise("Growing topaz clusters", noiseBlobs(0.9f, 0.9f), 2f, Tile.STONE, Tile.STONE, Tile.RAW_TOPAZ) //, TaggedJoise("Growing topaz clusters", noiseBlobs(0.9f, 0.9f), 2f, Block.STONE, Block.STONE, Block.RAW_TOPAZ)
//, TaggedJoise("Growing aluminium oxide clusters", noiseBlobs(0.9f, 0.9f), 1.7f, Tile.STONE, Tile.STONE, intArrayOf(Tile.RAW_RUBY, Tile.RAW_SAPPHIRE)) //, TaggedJoise("Growing aluminium oxide clusters", noiseBlobs(0.9f, 0.9f), 1.7f, Block.STONE, Block.STONE, intArrayOf(Block.RAW_RUBY, Block.RAW_SAPPHIRE))
//, TaggedJoise("Growing emerald clusters", noiseBlobs(0.9f, 0.9f), 1.7f, Tile.STONE, Tile.STONE, Tile.RAW_EMERALD) //, TaggedJoise("Growing emerald clusters", noiseBlobs(0.9f, 0.9f), 1.7f, Block.STONE, Block.STONE, Block.RAW_EMERALD)
//, TaggedJoise("Growing hearts of white", noiseBlobs(0.9f, 0.9f), 1.83f, Tile.STONE, Tile.STONE, Tile.RAW_DIAMOND) //, TaggedJoise("Growing hearts of white", noiseBlobs(0.9f, 0.9f), 1.83f, Block.STONE, Block.STONE, Block.RAW_DIAMOND)
//, TaggedJoise("Growing hearts of violet", noiseRidged(2.5f, 2.5f), 1.75f, Tile.STONE, Tile.STONE, Tile.RAW_AMETHYST) //, TaggedJoise("Growing hearts of violet", noiseRidged(2.5f, 2.5f), 1.75f, Block.STONE, Block.STONE, Block.RAW_AMETHYST)
// //
//, TaggedJoise("Cutting over-grown hearts", noiseBlobs(0.7f, 0.7f), 0.17f, Tile.RAW_AMETHYST, Tile.STONE, Tile.STONE) //, TaggedJoise("Cutting over-grown hearts", noiseBlobs(0.7f, 0.7f), 0.17f, Block.RAW_AMETHYST, Block.STONE, Block.STONE)
) )
processNoiseLayers(noiseArray) processNoiseLayers(noiseArray)
@@ -564,11 +563,11 @@ object WorldGenerator {
for (i in 0..HEIGHT - pillarOffset - 1) { for (i in 0..HEIGHT - pillarOffset - 1) {
if (i < DIRT_LAYER_DEPTH) { if (i < DIRT_LAYER_DEPTH) {
world.setTileTerrain(x, i + pillarOffset, Tile.DIRT) world.setTileTerrain(x, i + pillarOffset, Block.DIRT)
world.setTileWall(x, i + pillarOffset, Tile.DIRT) world.setTileWall(x, i + pillarOffset, Block.DIRT)
} else { } else {
world.setTileTerrain(x, i + pillarOffset, Tile.STONE) world.setTileTerrain(x, i + pillarOffset, Block.STONE)
world.setTileWall(x, i + pillarOffset, Tile.STONE) world.setTileWall(x, i + pillarOffset, Block.STONE)
} }
} }
@@ -633,11 +632,11 @@ object WorldGenerator {
for (x in 0..WIDTH - 1) { for (x in 0..WIDTH - 1) {
for (y in 0..HEIGHT - 1) { for (y in 0..HEIGHT - 1) {
if (terrainMap[clamp(y + DIRT_LAYER_DEPTH, 0, HEIGHT - 1)].get(x)) { if (terrainMap[clamp(y + DIRT_LAYER_DEPTH, 0, HEIGHT - 1)].get(x)) {
// map.setTileTerrain(x, y, Tile.DIRT) // map.setTileTerrain(x, y, Block.DIRT)
// map.setTileWall(x, y, Tile.DIRT) // map.setTileWall(x, y, Block.DIRT)
val tile = val tile =
if (y < dirtStoneLine[x]) Tile.DIRT if (y < dirtStoneLine[x]) Block.DIRT
else Tile.STONE else Block.STONE
world.setTileTerrain(x, y, tile) world.setTileTerrain(x, y, tile)
world.setTileWall(x, y, tile) world.setTileWall(x, y, tile)
} }
@@ -780,7 +779,7 @@ object WorldGenerator {
val nIslands = random.nextInt(Math.max(1, nIslandsMax - nIslandsMin)) + nIslandsMin val nIslands = random.nextInt(Math.max(1, nIslandsMax - nIslandsMin)) + nIslandsMin
val prevIndex = -1 val prevIndex = -1
val tiles = intArrayOf(Tile.AIR, Tile.STONE, Tile.DIRT, Tile.GRASS) val tiles = intArrayOf(Block.AIR, Block.STONE, Block.DIRT, Block.GRASS)
for (i in 0..nIslands - 1) { for (i in 0..nIslands - 1) {
var currentIndex = random.nextInt(FloatingIslandsPreset.PRESETS) var currentIndex = random.nextInt(FloatingIslandsPreset.PRESETS)
@@ -809,7 +808,7 @@ object WorldGenerator {
for (i in HEIGHT * 14 / 15..HEIGHT - 1) { for (i in HEIGHT * 14 / 15..HEIGHT - 1) {
for (j in 0..WIDTH - 1) { for (j in 0..WIDTH - 1) {
if (world.terrainArray[i][j].toInt() == 0) { if (world.terrainArray[i][j].toInt() == 0) {
world.setTileTerrain(j, i, Tile.LAVA) world.setTileTerrain(j, i, Block.LAVA)
} }
} }
} }
@@ -837,8 +836,8 @@ object WorldGenerator {
if (nearbyWallTile == null) break; if (nearbyWallTile == null) break;
if (i != 4 && thisTile == Tile.DIRT && nearbyWallTile == Tile.AIR) { if (i != 4 && thisTile == Block.DIRT && nearbyWallTile == Block.AIR) {
world.setTileTerrain(x, y, Tile.GRASS) world.setTileTerrain(x, y, Block.GRASS)
break break
} }
} }
@@ -848,7 +847,7 @@ object WorldGenerator {
} }
private fun isGrassOrDirt(x: Int, y: Int): Boolean { private fun isGrassOrDirt(x: Int, y: Int): Boolean {
return world.getTileFromTerrain(x, y) == Tile.GRASS || world.getTileFromTerrain(x, y) == Tile.DIRT return world.getTileFromTerrain(x, y) == Block.GRASS || world.getTileFromTerrain(x, y) == Block.DIRT
} }
private fun replaceIfTerrain(ifTileRaw: Int, x: Int, y: Int, replaceTileRaw: Int) { private fun replaceIfTerrain(ifTileRaw: Int, x: Int, y: Int, replaceTileRaw: Int) {
@@ -867,19 +866,19 @@ object WorldGenerator {
private fun fillOcean() { private fun fillOcean() {
val thisSandList = intArrayOf( val thisSandList = intArrayOf(
Tile.SAND, Tile.SAND, Tile.SAND, Tile.SAND, Block.SAND, Block.SAND, Block.SAND, Block.SAND,
Tile.SAND_WHITE, Tile.SAND_WHITE, Tile.SAND_WHITE, Block.SAND_WHITE, Block.SAND_WHITE, Block.SAND_WHITE,
Tile.SAND_BLACK, Tile.SAND_BLACK, Tile.SAND_GREEN Block.SAND_BLACK, Block.SAND_BLACK, Block.SAND_GREEN
) )
val thisRand = HQRNG(SEED xor random.nextLong()) val thisRand = HQRNG(SEED xor random.nextLong())
val thisSand = thisSandList[thisRand.nextInt(thisSandList.size)] val thisSand = thisSandList[thisRand.nextInt(thisSandList.size)]
// val thisSand = Tile.SAND_GREEN // val thisSand = Block.SAND_GREEN
val thisSandStr = if (thisSand == Tile.SAND_BLACK) val thisSandStr = if (thisSand == Block.SAND_BLACK)
"black" "black"
else if (thisSand == Tile.SAND_GREEN) else if (thisSand == Block.SAND_GREEN)
"green" "green"
else if (thisSand == Tile.SAND) else if (thisSand == Block.SAND)
"yellow" "yellow"
else else
"white" "white"
@@ -891,11 +890,11 @@ object WorldGenerator {
if (ix < OCEAN_WIDTH) { if (ix < OCEAN_WIDTH) {
if (worldOceanPosition == TYPE_OCEAN_LEFT) { if (worldOceanPosition == TYPE_OCEAN_LEFT) {
for (y in getTerrainHeightFromHeightMap(OCEAN_WIDTH)..getTerrainHeightFromHeightMap(ix) - 1) { for (y in getTerrainHeightFromHeightMap(OCEAN_WIDTH)..getTerrainHeightFromHeightMap(ix) - 1) {
world.setTileTerrain(ix, y, Tile.WATER) world.setTileTerrain(ix, y, Block.WATER)
} }
} else if (worldOceanPosition == TYPE_OCEAN_RIGHT) { } else if (worldOceanPosition == TYPE_OCEAN_RIGHT) {
for (y in getTerrainHeightFromHeightMap(world.width - 1 - OCEAN_WIDTH)..getTerrainHeightFromHeightMap(world.width - 1 - ix) - 1) { for (y in getTerrainHeightFromHeightMap(world.width - 1 - OCEAN_WIDTH)..getTerrainHeightFromHeightMap(world.width - 1 - ix) - 1) {
world.setTileTerrain(world.width - 1 - ix, y, Tile.WATER) world.setTileTerrain(world.width - 1 - ix, y, Block.WATER)
} }
} }
} }
@@ -925,17 +924,17 @@ object WorldGenerator {
for (y in 0..world.height - 1 - 1) { for (y in 0..world.height - 1 - 1) {
for (x in 0..getFrozenAreaWidth(y) - 1) { for (x in 0..getFrozenAreaWidth(y) - 1) {
if (worldOceanPosition == TYPE_OCEAN_RIGHT) { if (worldOceanPosition == TYPE_OCEAN_RIGHT) {
replaceIfTerrain(Tile.DIRT, x, y, Tile.SNOW) replaceIfTerrain(Block.DIRT, x, y, Block.SNOW)
replaceIfTerrain(Tile.STONE, x, y, Tile.ICE_NATURAL) replaceIfTerrain(Block.STONE, x, y, Block.ICE_NATURAL)
replaceIfWall(Tile.DIRT, x, y, Tile.SNOW) replaceIfWall(Block.DIRT, x, y, Block.SNOW)
replaceIfWall(Tile.STONE, x, y, Tile.ICE_NATURAL) replaceIfWall(Block.STONE, x, y, Block.ICE_NATURAL)
} else { } else {
replaceIfTerrain(Tile.DIRT, world.width - 1 - x, y, Tile.SNOW) replaceIfTerrain(Block.DIRT, world.width - 1 - x, y, Block.SNOW)
replaceIfTerrain(Tile.STONE, world.width - 1 - x, y, Tile.ICE_NATURAL) replaceIfTerrain(Block.STONE, world.width - 1 - x, y, Block.ICE_NATURAL)
replaceIfWall(Tile.DIRT, world.width - 1 - x, y, Tile.SNOW) replaceIfWall(Block.DIRT, world.width - 1 - x, y, Block.SNOW)
replaceIfWall(Tile.STONE, world.width - 1 - x, y, Tile.ICE_NATURAL) replaceIfWall(Block.STONE, world.width - 1 - x, y, Block.ICE_NATURAL)
} }
} }
} }

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB