diff --git a/assets/mods/basegame/blocks/blocks.csv b/assets/mods/basegame/blocks/blocks.csv index 4adfc7a80..cf77cbf8b 100644 --- a/assets/mods/basegame/blocks/blocks.csv +++ b/assets/mods/basegame/blocks/blocks.csv @@ -1,106 +1,106 @@ -"id";"drop";"name";"shdr";"shdg";"shdb";"shduv";"str";"dsty";"mate";"solid";"plat";"wall";"fall";"dlfn";"fv";"fr";"lumr";"lumg";"lumb";"lumuv";"colour" -"0";"0";"BLOCK_AIR";"0.0312";"0.0312";"0.0312";"0.0312";"1";"1";"NULL";"0";"0";"1";"0";"0";"0";"4";"0.0000";"0.0000";"0.0000";"0.0000";"" -"1";"1";"BLOCK_MIASMA";"0.0312";"0.0312";"0.0312";"0.0312";"1";"1";"NULL";"0";"0";"1";"0";"0";"0";"4";"0.0000";"0.0000";"0.0000";"0.0000";"" -"16";"17";"BLOCK_STONE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"1";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"17";"17";"BLOCK_STONE_QUARRIED";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"1";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"18";"18";"BLOCK_STONE_TILE_WHITE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"1";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"19";"19";"BLOCK_STONE_BRICKS";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"1";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"32";"32";"BLOCK_DIRT";"0.1252";"0.1252";"0.1252";"0.1252";"24";"1400";"DIRT";"1";"0";"1";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"33";"32";"BLOCK_GRASS";"0.1252";"0.1252";"0.1252";"0.1252";"24";"1400";"GRSS";"1";"0";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"34";"34";"BLOCK_GRASSWALL";"0.1252";"0.1252";"0.1252";"0.1252";"24";"1400";"GRSS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"35";"35";"BLOCK_FOLIAGE_GREEN";"0.1252";"0.1252";"0.1252";"0.1252";"24";"1400";"GRSS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"36";"36";"BLOCK_FOLIAGE_LIME";"0.1252";"0.1252";"0.1252";"0.1252";"24";"1400";"GRSS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"37";"37";"BLOCK_FOLIAGE_GOLD";"0.1252";"0.1252";"0.1252";"0.1252";"24";"1400";"GRSS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"38";"38";"BLOCK_FOLIAGE_RED";"0.1252";"0.1252";"0.1252";"0.1252";"24";"1400";"GRSS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"39";"39";"BLOCK_FOLIAGE_ICEBLUE";"0.1252";"0.1252";"0.1252";"0.1252";"24";"1400";"GRSS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"40";"40";"BLOCK_FOLIAGE_PURPLE";"0.1252";"0.1252";"0.1252";"0.1252";"24";"1400";"GRSS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"48";"48";"BLOCK_PLANK_NORMAL";"0.1252";"0.1252";"0.1252";"0.1252";"16";"740";"WOOD";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"49";"49";"BLOCK_PLANK_EBONY";"0.1252";"0.1252";"0.1252";"0.1252";"19";"1200";"WOOD";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"50";"50";"BLOCK_PLANK_BIRCH";"0.1252";"0.1252";"0.1252";"0.1252";"15";"670";"WOOD";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"51";"51";"BLOCK_PLANK_BLOODROSE";"0.1252";"0.1252";"0.1252";"0.1252";"17";"900";"WOOD";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"64";"64";"BLOCK_TRUNK_NORMAL";"0.1252";"0.1252";"0.1252";"0.1252";"16";"740";"WOOD";"1";"0";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"65";"65";"BLOCK_TRUNK_EBONY";"0.1252";"0.1252";"0.1252";"0.1252";"19";"1200";"WOOD";"1";"0";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"66";"66";"BLOCK_TRUNK_BIRCH";"0.1252";"0.1252";"0.1252";"0.1252";"15";"670";"WOOD";"1";"0";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"67";"67";"BLOCK_TRUNK_BLOODROSE";"0.1252";"0.1252";"0.1252";"0.1252";"17";"900";"WOOD";"1";"0";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"80";"80";"BLOCK_SAND";"0.1252";"0.1252";"0.1252";"0.1252";"24";"2400";"SAND";"1";"0";"0";"1";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"81";"81";"BLOCK_SAND_WHITE";"0.1252";"0.1252";"0.1252";"0.1252";"24";"2400";"SAND";"1";"0";"0";"1";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"82";"82";"BLOCK_SAND_RED";"0.1252";"0.1252";"0.1252";"0.1252";"24";"2400";"SAND";"1";"0";"0";"1";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"83";"83";"BLOCK_SAND_DESERT";"0.1252";"0.1252";"0.1252";"0.1252";"24";"2400";"SAND";"1";"0";"0";"1";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"84";"84";"BLOCK_SAND_BLACK";"0.1252";"0.1252";"0.1252";"0.1252";"24";"2400";"SAND";"1";"0";"0";"1";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"85";"85";"BLOCK_SAND_GREEN";"0.1252";"0.1252";"0.1252";"0.1252";"24";"2400";"SAND";"1";"0";"0";"1";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"96";"96";"BLOCK_GRAVEL";"0.1252";"0.1252";"0.1252";"0.1252";"24";"2400";"GRVL";"1";"0";"0";"1";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"97";"97";"BLOCK_GRAVEL_GREY";"0.1252";"0.1252";"0.1252";"0.1252";"24";"2400";"GRVL";"1";"0";"0";"1";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"112";"112";"BLOCK_ORE_MALACHITE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"113";"113";"BLOCK_ORE_HEMATITE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"114";"114";"BLOCK_ORE_NATURAL_GOLD";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"115";"115";"BLOCK_ORE_NATURAL_SILVER";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"116";"116";"BLOCK_ORE_RUTILE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"117";"117";"BLOCK_ORE_AURICHALCUMITE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"128";"128";"BLOCK_GEM_RUBY";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"129";"129";"BLOCK_GEM_EMERALD";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"130";"130";"BLOCK_GEM_SAPPHIRE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"131";"131";"BLOCK_GEM_TOPAZ";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"132";"132";"BLOCK_GEM_DIAMOND";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"133";"133";"BLOCK_GEM_AMETHYST";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"144";"144";"BLOCK_SNOW";"0.1252";"0.1252";"0.1252";"0.1252";"24";"500";"SNOW";"1";"0";"1";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"145";"0";"BLOCK_ICE_FRAGILE";"0.0508";"0.0508";"0.0508";"0.0508";"5";"930";"ICEI";"1";"0";"0";"0";"0";"0";"4";"0.0000";"0.0000";"0.0000";"0.0000";"" -"146";"146";"BLOCK_ICE_NATURAL";"0.1016";"0.1016";"0.1016";"0.1016";"35";"930";"ICEI";"1";"0";"1";"0";"0";"0";"4";"0.0000";"0.0000";"0.0000";"0.0000";"" -"147";"147";"BLOCK_ICE_CLEAR_MAGICAL";"0.1252";"0.1252";"0.1252";"0.1252";"48";"3720";"ICEX";"1";"0";"1";"0";"0";"0";"4";"0.0744";"0.1252";"0.2268";"0.0000";"" -"148";"148";"BLOCK_GLASS_CRUDE";"0.0876";"0.0424";"0.0876";"0.1252";"5";"2500";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"149";"149";"BLOCK_GLASS_CLEAN";"0.0424";"0.0424";"0.0424";"0.0636";"5";"2203";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"160";"160";"BLOCK_PLATFORM_STONE";"0.0312";"0.0312";"0.0312";"0.0312";"5";"N/A";"ROCK";"0";"1";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"161";"161";"BLOCK_PLATFORM_WOODEN";"0.0312";"0.0312";"0.0312";"0.0312";"5";"N/A";"WOOD";"0";"1";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"162";"162";"BLOCK_PLATFORM_EBONY";"0.0312";"0.0312";"0.0312";"0.0312";"5";"N/A";"WOOD";"0";"1";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"163";"163";"BLOCK_PLATFORM_BIRCH";"0.0312";"0.0312";"0.0312";"0.0312";"5";"N/A";"WOOD";"0";"1";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"164";"164";"BLOCK_PLATFORM_BLOODROSE";"0.0312";"0.0312";"0.0312";"0.0312";"5";"N/A";"WOOD";"0";"1";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"176";"176";"BLOCK_TORCH";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"FXTR";"0";"0";"0";"0";"1";"0";"16";"1.0000";"0.6372";"0.0000";"0.0000";"" -"177";"177";"BLOCK_TORCH_FROST";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"FXTR";"0";"0";"0";"0";"1";"0";"16";"0.3048";"0.4848";"1.0000";"0.0000";"" -"192";"176";"BLOCK_TORCH";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"FXTR";"0";"0";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"193";"177";"BLOCK_TORCH_FROST";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"FXTR";"0";"0";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"208";"208";"BLOCK_ILLUMINATOR_WHITE";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.9270";"0.9414";"0.8519";"0.0000";"" -"209";"209";"BLOCK_ILLUMINATOR_YELLOW";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"1.0000";"0.8408";"0.0000";"0.0000";"" -"210";"210";"BLOCK_ILLUMINATOR_ORANGE";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"1.0000";"0.5294";"0.0000";"0.0000";"" -"211";"211";"BLOCK_ILLUMINATOR_RED";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.9188";"0.0000";"0.0000";"0.0000";"" -"212";"212";"BLOCK_ILLUMINATOR_FUCHSIA";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.9188";"0.0000";"0.7156";"0.0000";"" -"213";"213";"BLOCK_ILLUMINATOR_PURPLE";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.7156";"0.0000";"0.9188";"0.0000";"" -"214";"214";"BLOCK_ILLUMINATOR_BLUE";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.1996";"0.9188";"0.0000";"" -"215";"215";"BLOCK_ILLUMINATOR_CYAN";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.4621";"1.4188";"1.2368";"0.0000";"" -"216";"216";"BLOCK_ILLUMINATOR_GREEN";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.2112";"1.0000";"0.0000";"0.0000";"" -"217";"217";"BLOCK_ILLUMINATOR_GREEN_DARK";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.1252";"0.4068";"0.0000";"0.0000";"" -"218";"218";"BLOCK_ILLUMINATOR_BROWN";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.3324";"0.1252";"0.0000";"0.0000";"" -"219";"219";"BLOCK_ILLUMINATOR_TAN";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.5864";"0.4068";"0.2032";"0.0000";"" -"220";"220";"BLOCK_ILLUMINATOR_GREY_LIGHT";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.7392";"0.7392";"0.7392";"0.0000";"" -"221";"221";"BLOCK_ILLUMINATOR_GREY_MED";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.4576";"0.4576";"0.4576";"0.0000";"" -"222";"222";"BLOCK_ILLUMINATOR_GREY_DARK";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.2540";"0.2540";"0.2540";"0.0000";"" -"223";"223";"BLOCK_ILLUMINATOR_BLACK";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.2140";"0.0000";"0.4932";"3.7499";"" -"224";"208";"BLOCK_ILLUMINATOR_WHITE";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"225";"209";"BLOCK_ILLUMINATOR_YELLOW";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"226";"210";"BLOCK_ILLUMINATOR_ORANGE";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"227";"211";"BLOCK_ILLUMINATOR_RED";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"228";"212";"BLOCK_ILLUMINATOR_FUCHSIA";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"229";"213";"BLOCK_ILLUMINATOR_PURPLE";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"230";"214";"BLOCK_ILLUMINATOR_BLUE";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"231";"215";"BLOCK_ILLUMINATOR_CYAN";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"232";"216";"BLOCK_ILLUMINATOR_GREEN";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"233";"217";"BLOCK_ILLUMINATOR_GREEN_DARK";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"234";"218";"BLOCK_ILLUMINATOR_BROWN";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"235";"219";"BLOCK_ILLUMINATOR_TAN";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"236";"220";"BLOCK_ILLUMINATOR_GREY_LIGHT";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"237";"221";"BLOCK_ILLUMINATOR_GREY_MED";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"238";"222";"BLOCK_ILLUMINATOR_GREY_DARK";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"239";"223";"BLOCK_ILLUMINATOR_BLACK";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"240";"240";"BLOCK_SANDSTONE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"1900";"ROCK";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"241";"241";"BLOCK_SANDSTONE_WHITE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"1900";"ROCK";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"242";"242";"BLOCK_SANDSTONE_RED";"0.1252";"0.1252";"0.1252";"0.1252";"48";"1900";"ROCK";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"243";"243";"BLOCK_SANDSTONE_DESERT";"0.1252";"0.1252";"0.1252";"0.1252";"48";"1900";"ROCK";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"244";"244";"BLOCK_SANDSTONE_BLACK";"0.1252";"0.1252";"0.1252";"0.1252";"48";"1900";"ROCK";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"245";"245";"BLOCK_SANDSTONE_GREEN";"0.1252";"0.1252";"0.1252";"0.1252";"48";"1900";"ROCK";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"256";"256";"BLOCK_LANTERN_IRON_REGULAR";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"FXTR";"0";"0";"0";"0";"0";"0";"16";"1.0000";"0.6372";"0.0000";"0.0000";"" -"257";"257";"BLOCK_SUNSTONE";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"ROCK";"1";"0";"0";"0";"2";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"258";"258";"BLOCK_DAYLIGHT_CAPACITOR";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"0";"0";"3";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" -"4096";"0";"BLOCK_WATER";"0.1016";"0.0744";"0.0508";"0.0826";"100";"1000";"WATR";"0";"0";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"005599A6" -"4097";"0";"BLOCK_LAVA";"0.9696";"0.9696";"0.9696";"0.9696";"100";"2600";"ROCK";"0";"0";"0";"0";"0";"0";"16";"0.7664";"0.2032";"0.0000";"0.0000";"FF4600E6" -"-1";"0";"BLOCK_NULL";"4.0000";"4.0000";"4.0000";"4.0000";"-1";"2600";"NULL";"0";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"" +"id";"drop";"name";"shdr";"shdg";"shdb";"shduv";"str";"dsty";"mate";"solid";"plat";"wall";"fall";"dlfn";"fv";"fr";"lumr";"lumg";"lumb";"lumuv";"colour";"vscs" +"0";"0";"BLOCK_AIR";"0.0312";"0.0312";"0.0312";"0.0312";"1";"1";"NULL";"0";"0";"1";"0";"0";"0";"4";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"1";"1";"BLOCK_MIASMA";"0.0312";"0.0312";"0.0312";"0.0312";"1";"1";"NULL";"0";"0";"1";"0";"0";"0";"4";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"16";"17";"BLOCK_STONE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"1";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"17";"17";"BLOCK_STONE_QUARRIED";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"1";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"18";"18";"BLOCK_STONE_TILE_WHITE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"1";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"19";"19";"BLOCK_STONE_BRICKS";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"1";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"32";"32";"BLOCK_DIRT";"0.1252";"0.1252";"0.1252";"0.1252";"24";"1400";"DIRT";"1";"0";"1";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"33";"32";"BLOCK_GRASS";"0.1252";"0.1252";"0.1252";"0.1252";"24";"1400";"GRSS";"1";"0";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"34";"34";"BLOCK_GRASSWALL";"0.1252";"0.1252";"0.1252";"0.1252";"24";"1400";"GRSS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"35";"35";"BLOCK_FOLIAGE_GREEN";"0.1252";"0.1252";"0.1252";"0.1252";"24";"1400";"GRSS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"36";"36";"BLOCK_FOLIAGE_LIME";"0.1252";"0.1252";"0.1252";"0.1252";"24";"1400";"GRSS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"37";"37";"BLOCK_FOLIAGE_GOLD";"0.1252";"0.1252";"0.1252";"0.1252";"24";"1400";"GRSS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"38";"38";"BLOCK_FOLIAGE_RED";"0.1252";"0.1252";"0.1252";"0.1252";"24";"1400";"GRSS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"39";"39";"BLOCK_FOLIAGE_ICEBLUE";"0.1252";"0.1252";"0.1252";"0.1252";"24";"1400";"GRSS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"40";"40";"BLOCK_FOLIAGE_PURPLE";"0.1252";"0.1252";"0.1252";"0.1252";"24";"1400";"GRSS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"48";"48";"BLOCK_PLANK_NORMAL";"0.1252";"0.1252";"0.1252";"0.1252";"16";"740";"WOOD";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"49";"49";"BLOCK_PLANK_EBONY";"0.1252";"0.1252";"0.1252";"0.1252";"19";"1200";"WOOD";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"50";"50";"BLOCK_PLANK_BIRCH";"0.1252";"0.1252";"0.1252";"0.1252";"15";"670";"WOOD";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"51";"51";"BLOCK_PLANK_BLOODROSE";"0.1252";"0.1252";"0.1252";"0.1252";"17";"900";"WOOD";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"64";"64";"BLOCK_TRUNK_NORMAL";"0.1252";"0.1252";"0.1252";"0.1252";"16";"740";"WOOD";"1";"0";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"65";"65";"BLOCK_TRUNK_EBONY";"0.1252";"0.1252";"0.1252";"0.1252";"19";"1200";"WOOD";"1";"0";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"66";"66";"BLOCK_TRUNK_BIRCH";"0.1252";"0.1252";"0.1252";"0.1252";"15";"670";"WOOD";"1";"0";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"67";"67";"BLOCK_TRUNK_BLOODROSE";"0.1252";"0.1252";"0.1252";"0.1252";"17";"900";"WOOD";"1";"0";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"80";"80";"BLOCK_SAND";"0.1252";"0.1252";"0.1252";"0.1252";"24";"2400";"SAND";"1";"0";"0";"1";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"81";"81";"BLOCK_SAND_WHITE";"0.1252";"0.1252";"0.1252";"0.1252";"24";"2400";"SAND";"1";"0";"0";"1";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"82";"82";"BLOCK_SAND_RED";"0.1252";"0.1252";"0.1252";"0.1252";"24";"2400";"SAND";"1";"0";"0";"1";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"83";"83";"BLOCK_SAND_DESERT";"0.1252";"0.1252";"0.1252";"0.1252";"24";"2400";"SAND";"1";"0";"0";"1";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"84";"84";"BLOCK_SAND_BLACK";"0.1252";"0.1252";"0.1252";"0.1252";"24";"2400";"SAND";"1";"0";"0";"1";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"85";"85";"BLOCK_SAND_GREEN";"0.1252";"0.1252";"0.1252";"0.1252";"24";"2400";"SAND";"1";"0";"0";"1";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"96";"96";"BLOCK_GRAVEL";"0.1252";"0.1252";"0.1252";"0.1252";"24";"2400";"GRVL";"1";"0";"0";"1";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"97";"97";"BLOCK_GRAVEL_GREY";"0.1252";"0.1252";"0.1252";"0.1252";"24";"2400";"GRVL";"1";"0";"0";"1";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"112";"112";"BLOCK_ORE_MALACHITE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"113";"113";"BLOCK_ORE_HEMATITE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"114";"114";"BLOCK_ORE_NATURAL_GOLD";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"115";"115";"BLOCK_ORE_NATURAL_SILVER";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"116";"116";"BLOCK_ORE_RUTILE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"117";"117";"BLOCK_ORE_AURICHALCUMITE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"128";"128";"BLOCK_GEM_RUBY";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"129";"129";"BLOCK_GEM_EMERALD";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"130";"130";"BLOCK_GEM_SAPPHIRE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"131";"131";"BLOCK_GEM_TOPAZ";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"132";"132";"BLOCK_GEM_DIAMOND";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"133";"133";"BLOCK_GEM_AMETHYST";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"0";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"144";"144";"BLOCK_SNOW";"0.1252";"0.1252";"0.1252";"0.1252";"24";"500";"SNOW";"1";"0";"1";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"145";"0";"BLOCK_ICE_FRAGILE";"0.0508";"0.0508";"0.0508";"0.0508";"5";"930";"ICEI";"1";"0";"0";"0";"0";"0";"4";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"146";"146";"BLOCK_ICE_NATURAL";"0.1016";"0.1016";"0.1016";"0.1016";"35";"930";"ICEI";"1";"0";"1";"0";"0";"0";"4";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"147";"147";"BLOCK_ICE_CLEAR_MAGICAL";"0.1252";"0.1252";"0.1252";"0.1252";"48";"3720";"ICEX";"1";"0";"1";"0";"0";"0";"4";"0.0744";"0.1252";"0.2268";"0.0000";"N/A";"N/A" +"148";"148";"BLOCK_GLASS_CRUDE";"0.0876";"0.0424";"0.0876";"0.1252";"5";"2500";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"149";"149";"BLOCK_GLASS_CLEAN";"0.0424";"0.0424";"0.0424";"0.0636";"5";"2203";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"160";"160";"BLOCK_PLATFORM_STONE";"0.0312";"0.0312";"0.0312";"0.0312";"5";"N/A";"ROCK";"0";"1";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"161";"161";"BLOCK_PLATFORM_WOODEN";"0.0312";"0.0312";"0.0312";"0.0312";"5";"N/A";"WOOD";"0";"1";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"162";"162";"BLOCK_PLATFORM_EBONY";"0.0312";"0.0312";"0.0312";"0.0312";"5";"N/A";"WOOD";"0";"1";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"163";"163";"BLOCK_PLATFORM_BIRCH";"0.0312";"0.0312";"0.0312";"0.0312";"5";"N/A";"WOOD";"0";"1";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"164";"164";"BLOCK_PLATFORM_BLOODROSE";"0.0312";"0.0312";"0.0312";"0.0312";"5";"N/A";"WOOD";"0";"1";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"176";"176";"BLOCK_TORCH";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"FXTR";"0";"0";"0";"0";"1";"0";"16";"1.0000";"0.6372";"0.0000";"0.0000";"N/A";"N/A" +"177";"177";"BLOCK_TORCH_FROST";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"FXTR";"0";"0";"0";"0";"1";"0";"16";"0.3048";"0.4848";"1.0000";"0.0000";"N/A";"N/A" +"192";"176";"BLOCK_TORCH";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"FXTR";"0";"0";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"193";"177";"BLOCK_TORCH_FROST";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"FXTR";"0";"0";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"208";"208";"BLOCK_ILLUMINATOR_WHITE";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.9270";"0.9414";"0.8519";"0.0000";"N/A";"N/A" +"209";"209";"BLOCK_ILLUMINATOR_YELLOW";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"1.0000";"0.8408";"0.0000";"0.0000";"N/A";"N/A" +"210";"210";"BLOCK_ILLUMINATOR_ORANGE";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"1.0000";"0.5294";"0.0000";"0.0000";"N/A";"N/A" +"211";"211";"BLOCK_ILLUMINATOR_RED";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.9188";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"212";"212";"BLOCK_ILLUMINATOR_FUCHSIA";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.9188";"0.0000";"0.7156";"0.0000";"N/A";"N/A" +"213";"213";"BLOCK_ILLUMINATOR_PURPLE";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.7156";"0.0000";"0.9188";"0.0000";"N/A";"N/A" +"214";"214";"BLOCK_ILLUMINATOR_BLUE";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.1996";"0.9188";"0.0000";"N/A";"N/A" +"215";"215";"BLOCK_ILLUMINATOR_CYAN";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.4621";"1.4188";"1.2368";"0.0000";"N/A";"N/A" +"216";"216";"BLOCK_ILLUMINATOR_GREEN";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.2112";"1.0000";"0.0000";"0.0000";"N/A";"N/A" +"217";"217";"BLOCK_ILLUMINATOR_GREEN_DARK";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.1252";"0.4068";"0.0000";"0.0000";"N/A";"N/A" +"218";"218";"BLOCK_ILLUMINATOR_BROWN";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.3324";"0.1252";"0.0000";"0.0000";"N/A";"N/A" +"219";"219";"BLOCK_ILLUMINATOR_TAN";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.5864";"0.4068";"0.2032";"0.0000";"N/A";"N/A" +"220";"220";"BLOCK_ILLUMINATOR_GREY_LIGHT";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.7392";"0.7392";"0.7392";"0.0000";"N/A";"N/A" +"221";"221";"BLOCK_ILLUMINATOR_GREY_MED";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.4576";"0.4576";"0.4576";"0.0000";"N/A";"N/A" +"222";"222";"BLOCK_ILLUMINATOR_GREY_DARK";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.2540";"0.2540";"0.2540";"0.0000";"N/A";"N/A" +"223";"223";"BLOCK_ILLUMINATOR_BLACK";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.2140";"0.0000";"0.4932";"3.7499";"N/A";"N/A" +"224";"208";"BLOCK_ILLUMINATOR_WHITE";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"225";"209";"BLOCK_ILLUMINATOR_YELLOW";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"226";"210";"BLOCK_ILLUMINATOR_ORANGE";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"227";"211";"BLOCK_ILLUMINATOR_RED";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"228";"212";"BLOCK_ILLUMINATOR_FUCHSIA";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"229";"213";"BLOCK_ILLUMINATOR_PURPLE";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"230";"214";"BLOCK_ILLUMINATOR_BLUE";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"231";"215";"BLOCK_ILLUMINATOR_CYAN";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"232";"216";"BLOCK_ILLUMINATOR_GREEN";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"233";"217";"BLOCK_ILLUMINATOR_GREEN_DARK";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"234";"218";"BLOCK_ILLUMINATOR_BROWN";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"235";"219";"BLOCK_ILLUMINATOR_TAN";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"236";"220";"BLOCK_ILLUMINATOR_GREY_LIGHT";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"237";"221";"BLOCK_ILLUMINATOR_GREY_MED";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"238";"222";"BLOCK_ILLUMINATOR_GREY_DARK";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"239";"223";"BLOCK_ILLUMINATOR_BLACK";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"240";"240";"BLOCK_SANDSTONE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"1900";"ROCK";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"241";"241";"BLOCK_SANDSTONE_WHITE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"1900";"ROCK";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"242";"242";"BLOCK_SANDSTONE_RED";"0.1252";"0.1252";"0.1252";"0.1252";"48";"1900";"ROCK";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"243";"243";"BLOCK_SANDSTONE_DESERT";"0.1252";"0.1252";"0.1252";"0.1252";"48";"1900";"ROCK";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"244";"244";"BLOCK_SANDSTONE_BLACK";"0.1252";"0.1252";"0.1252";"0.1252";"48";"1900";"ROCK";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"245";"245";"BLOCK_SANDSTONE_GREEN";"0.1252";"0.1252";"0.1252";"0.1252";"48";"1900";"ROCK";"1";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"256";"256";"BLOCK_LANTERN_IRON_REGULAR";"0.0312";"0.0312";"0.0312";"0.0312";"1";"N/A";"FXTR";"0";"0";"0";"0";"0";"0";"16";"1.0000";"0.6372";"0.0000";"0.0000";"N/A";"N/A" +"257";"257";"BLOCK_SUNSTONE";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"ROCK";"1";"0";"0";"0";"2";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"258";"258";"BLOCK_DAYLIGHT_CAPACITOR";"0.1252";"0.1252";"0.1252";"0.1252";"1";"N/A";"GLAS";"1";"0";"0";"0";"3";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" +"4096";"0";"BLOCK_WATER";"0.1016";"0.0744";"0.0508";"0.0826";"100";"1000";"WATR";"0";"0";"0";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"005599A6";"16" +"4097";"0";"BLOCK_LAVA";"0.9696";"0.9696";"0.9696";"0.9696";"100";"2600";"ROCK";"0";"0";"0";"0";"0";"0";"16";"0.7664";"0.2032";"0.0000";"0.0000";"FF4600E6";"32" +"-1";"0";"BLOCK_NULL";"4.0000";"4.0000";"4.0000";"4.0000";"-1";"2600";"NULL";"0";"0";"1";"0";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A" ## Notes ## diff --git a/src/net/torvald/terrarum/blockproperties/BlockCodex.kt b/src/net/torvald/terrarum/blockproperties/BlockCodex.kt index c83f71830..36a70313f 100644 --- a/src/net/torvald/terrarum/blockproperties/BlockCodex.kt +++ b/src/net/torvald/terrarum/blockproperties/BlockCodex.kt @@ -16,15 +16,15 @@ import java.io.IOException */ object BlockCodex { - private var blockProps: Array + private var blockProps = HashMap() + /** 4096 */ const val MAX_TERRAIN_TILES = MapLayer.RANGE * PairedMapLayer.RANGE private val nullProp = BlockProp() - init { - blockProps = Array(MAX_TERRAIN_TILES * 2, { BlockProp() }) - } + var highestNumber = -1 + private set /** * Later entry (possible from other modules) will replace older ones @@ -36,12 +36,18 @@ object BlockCodex { AppLoader.printdbg(this, "Building block properties table") records.forEach { - if (intVal(it, "id") == -1) { + /*if (intVal(it, "id") == -1) { setProp(nullProp, it) } else { setProp(blockProps[intVal(it, "id")], it) - } + }*/ + + val id = intVal(it, "id") + setProp(id, it) + + if (id > highestNumber) + highestNumber = id } } catch (e: IOException) { @@ -68,7 +74,7 @@ object BlockCodex { } try { - return blockProps[rawIndex] + return blockProps[rawIndex]!! } catch (e: NullPointerException) { throw NullPointerException("Blockprop with raw id $rawIndex does not exist.") @@ -77,11 +83,11 @@ object BlockCodex { operator fun get(fluidType: FluidType?): BlockProp { if (fluidType == null || fluidType.value == 0) { - return blockProps[Block.AIR] + return blockProps[Block.AIR]!! } try { - return blockProps[fluidType.abs() + GameWorld.TILES_SUPPORTED - 1] + return blockProps[fluidType.abs() + GameWorld.TILES_SUPPORTED - 1]!! } catch (e: NullPointerException) { throw NullPointerException("Blockprop with raw id $fluidType does not exist.") @@ -89,22 +95,14 @@ object BlockCodex { } fun getOrNull(rawIndex: Int?): BlockProp? { - if (rawIndex == null || rawIndex == Block.NULL) { - return null - } - - try { - return blockProps[rawIndex] - } - catch (e: NullPointerException) { - throw NullPointerException("Blockprop with raw id $rawIndex does not exist.") - } + return blockProps[rawIndex] } - private fun setProp(prop: BlockProp, record: CSVRecord) { + private fun setProp(key: Int, record: CSVRecord) { + val prop = BlockProp() prop.nameKey = record.get("name") - prop.id = intVal(record, "id") + prop.id = if (key == -1) 0 else intVal(record, "id") prop.drop = intVal(record, "drop") prop.shadeColR = floatVal(record, "shdr") / LightmapRenderer.MUL_FLOAT @@ -124,6 +122,7 @@ object BlockCodex { prop.friction = intVal(record, "fr") prop.viscosity = intVal(record, "vscs") + prop.colour = str16ToInt(record, "colour") //prop.isFluid = boolVal(record, "fluid") prop.isSolid = boolVal(record, "solid") @@ -135,10 +134,25 @@ object BlockCodex { prop.dynamicLuminosityFunction = intVal(record, "dlfn") + blockProps[key] = prop + print("${intVal(record, "id")}") println("\t" + prop.nameKey) } + private fun str16ToInt(rec: CSVRecord, s: String): Int { + var ret = 0 + try { + ret = rec.get(s).toLong(16).toInt() + } + catch (e: NumberFormatException) { + } + catch (e1: IllegalStateException) { + } + + return ret + } + private fun intVal(rec: CSVRecord, s: String): Int { var ret = -1 try { diff --git a/src/net/torvald/terrarum/blockproperties/BlockProp.kt b/src/net/torvald/terrarum/blockproperties/BlockProp.kt index 6d3b7e82f..8bca216e8 100644 --- a/src/net/torvald/terrarum/blockproperties/BlockProp.kt +++ b/src/net/torvald/terrarum/blockproperties/BlockProp.kt @@ -22,6 +22,7 @@ class BlockProp { var strength: Int = 0 var density: Int = 0 var viscosity: Int = 0 + var colour: Int = 0 var isSolid: Boolean = false //var isClear: Boolean = false diff --git a/src/net/torvald/terrarum/debuggerapp/CSVEditor.java b/src/net/torvald/terrarum/debuggerapp/CSVEditor.java index e850b2670..41d019a76 100644 --- a/src/net/torvald/terrarum/debuggerapp/CSVEditor.java +++ b/src/net/torvald/terrarum/debuggerapp/CSVEditor.java @@ -28,12 +28,12 @@ import java.util.Properties; public class CSVEditor extends JFrame { /** Default columns. When you open existing csv, it should overwrite this. */ - private String[] columns = new String[]{"id", "drop", "name", "shdr", "shdg", "shdb", "shduv", "str", "dsty", "mate", "solid", "plat", "wall", "fall", "dlfn", "fv", "fr", "lumr", "lumg", "lumb", "lumuv", "colour"}; + private String[] columns = new String[]{"id", "drop", "name", "shdr", "shdg", "shdb", "shduv", "str", "dsty", "mate", "solid", "plat", "wall", "fall", "dlfn", "fv", "fr", "lumr", "lumg", "lumb", "lumuv", "colour", "vscs"}; private final int FOUR_DIGIT = 42; private final int SIX_DIGIT = 50; private final int TWO_DIGIT = 30; private final int ARBITRARY = 240; - private int[] colWidth = new int[]{FOUR_DIGIT, FOUR_DIGIT, ARBITRARY, SIX_DIGIT, SIX_DIGIT, SIX_DIGIT, SIX_DIGIT, TWO_DIGIT, FOUR_DIGIT, FOUR_DIGIT, TWO_DIGIT, TWO_DIGIT, TWO_DIGIT, TWO_DIGIT, TWO_DIGIT, TWO_DIGIT, TWO_DIGIT, SIX_DIGIT, SIX_DIGIT, SIX_DIGIT, SIX_DIGIT, FOUR_DIGIT * 2}; + private int[] colWidth = new int[]{FOUR_DIGIT, FOUR_DIGIT, ARBITRARY, SIX_DIGIT, SIX_DIGIT, SIX_DIGIT, SIX_DIGIT, TWO_DIGIT, FOUR_DIGIT, FOUR_DIGIT, TWO_DIGIT, TWO_DIGIT, TWO_DIGIT, TWO_DIGIT, TWO_DIGIT, TWO_DIGIT, TWO_DIGIT, SIX_DIGIT, SIX_DIGIT, SIX_DIGIT, SIX_DIGIT, FOUR_DIGIT * 2, TWO_DIGIT}; private final int UNDO_BUFFER_SIZE = 10; @@ -500,7 +500,8 @@ public class CSVEditor extends JFrame { "dlfn=Dynamic Light Function. 0=Static. Please see notes\n" + "fv=Vertical friction when player slide on the cliff. 0 means not slide-able\n" + "fr=Horizontal friction. <16:slippery 16:regular >16:sticky\n" + - "colour=Colour of the block in hexadecimal RGBA. Only makes sense for fluids (id >= 4096)\n"; + "colour=[Fluids] Colour of the block in hexadecimal RGBA.\n" + + "vscs=[Fluids] Viscocity of the block. 16 for water.\n"; /** * ยค is used as a \n marker diff --git a/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt b/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt index 1379703bf..fb81af92d 100644 --- a/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt +++ b/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt @@ -36,66 +36,70 @@ class EntryPoint : ModuleEntryPoint() { // blocks.csvs are loaded by ModMgr beforehand // block items (blocks and walls are the same thing basically) for (i in ItemCodex.ITEM_TILES + ItemCodex.ITEM_WALLS) { - ItemCodex.itemCodex[i] = object : GameItem() { - override val originalID = i - override var dynamicID = i - override val isUnique: Boolean = false - override var baseMass: Double = BlockCodex[i].density / 1000.0 - override var baseToolSize: Double? = null - override val originalName = BlockCodex[i % ItemCodex.ITEM_WALLS.first].nameKey - override var stackable = true - override var inventoryCategory = if (i in ItemCodex.ITEM_TILES) Category.BLOCK else Category.WALL - override var isDynamic = false - override val material = Material(0,0,0,0,0,0,0,0,0,0.0) + val blockProp = BlockCodex.getOrNull(i % ItemCodex.ITEM_WALLS.first) - init { - equipPosition = EquipPosition.HAND_GRIP + if (blockProp != null) { + ItemCodex.itemCodex[i] = object : GameItem() { + override val originalID = i + override var dynamicID = i + override val isUnique: Boolean = false + override var baseMass: Double = blockProp.density / 1000.0 + override var baseToolSize: Double? = null + override val originalName = blockProp.nameKey + override var stackable = true + override var inventoryCategory = if (i in ItemCodex.ITEM_TILES) Category.BLOCK else Category.WALL + override var isDynamic = false + override val material = Material(0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0) - if (IS_DEVELOPMENT_BUILD) - print("$originalID ") - } + init { + equipPosition = EquipPosition.HAND_GRIP - override fun startPrimaryUse(delta: Float): Boolean { - val ingame = Terrarum.ingame!! as Ingame + if (IS_DEVELOPMENT_BUILD) + print("$originalID ") + } - val mousePoint = Point2d(Terrarum.mouseTileX.toDouble(), Terrarum.mouseTileY.toDouble()) + override fun startPrimaryUse(delta: Float): Boolean { + val ingame = Terrarum.ingame!! as Ingame - // check for collision with actors (BLOCK only) - if (this.inventoryCategory == Category.BLOCK) { - ingame.actorContainerActive.forEach { - if (it is ActorWBMovable && it.hIntTilewiseHitbox.intersects(mousePoint)) - return false + val mousePoint = Point2d(Terrarum.mouseTileX.toDouble(), Terrarum.mouseTileY.toDouble()) + + // check for collision with actors (BLOCK only) + if (this.inventoryCategory == Category.BLOCK) { + ingame.actorContainerActive.forEach { + if (it is ActorWBMovable && it.hIntTilewiseHitbox.intersects(mousePoint)) + return false + } } - } - // return false if the tile is already there - if (this.inventoryCategory == Category.BLOCK && - this.dynamicID == ingame.world.getTileFromTerrain(Terrarum.mouseTileX, Terrarum.mouseTileY) || - this.inventoryCategory == Category.WALL && - this.dynamicID - ItemCodex.ITEM_WALLS.start == ingame.world.getTileFromWall(Terrarum.mouseTileX, Terrarum.mouseTileY) || - this.inventoryCategory == Category.WIRE && - this.dynamicID - ItemCodex.ITEM_WIRES.start == ingame.world.getTileFromWire(Terrarum.mouseTileX, Terrarum.mouseTileY) - ) - return false - - // filter passed, do the job - // FIXME this is only useful for Player - if (i in ItemCodex.ITEM_TILES) { - ingame.world.setTileTerrain( - Terrarum.mouseTileX, - Terrarum.mouseTileY, - i + // return false if the tile is already there + if (this.inventoryCategory == Category.BLOCK && + this.dynamicID == ingame.world.getTileFromTerrain(Terrarum.mouseTileX, Terrarum.mouseTileY) || + this.inventoryCategory == Category.WALL && + this.dynamicID - ItemCodex.ITEM_WALLS.start == ingame.world.getTileFromWall(Terrarum.mouseTileX, Terrarum.mouseTileY) || + this.inventoryCategory == Category.WIRE && + this.dynamicID - ItemCodex.ITEM_WIRES.start == ingame.world.getTileFromWire(Terrarum.mouseTileX, Terrarum.mouseTileY) ) - } - else { - ingame.world.setTileWall( - Terrarum.mouseTileX, - Terrarum.mouseTileY, - i - ) - } + return false - return true + // filter passed, do the job + // FIXME this is only useful for Player + if (i in ItemCodex.ITEM_TILES) { + ingame.world.setTileTerrain( + Terrarum.mouseTileX, + Terrarum.mouseTileY, + i + ) + } + else { + ingame.world.setTileWall( + Terrarum.mouseTileX, + Terrarum.mouseTileY, + i + ) + } + + return true + } } } } diff --git a/src/net/torvald/terrarum/worlddrawer/BlocksDrawerNew.kt b/src/net/torvald/terrarum/worlddrawer/BlocksDrawerNew.kt index 63623e83b..638223fb4 100644 --- a/src/net/torvald/terrarum/worlddrawer/BlocksDrawerNew.kt +++ b/src/net/torvald/terrarum/worlddrawer/BlocksDrawerNew.kt @@ -107,6 +107,8 @@ internal object BlocksDrawer { //PixmapIO2.writeTGA(Gdx.files.absolute("${AppLoader.defaultDir}/atlasWinter.tga"), CreateTileAtlas.atlasWinter, false) //printdbg(this, "Writing pixmap as tga: atlasSpring.tga") //PixmapIO2.writeTGA(Gdx.files.absolute("${AppLoader.defaultDir}/atlasSpring.tga"), CreateTileAtlas.atlasSpring, false) + //printdbg(this, "Writing pixmap as tga: atlasFluid.tga") + //PixmapIO2.writeTGA(Gdx.files.absolute("${AppLoader.defaultDir}/atlasFluid.tga"), CreateTileAtlas.atlasFluid, false) @@ -139,7 +141,7 @@ internal object BlocksDrawer { val itemWallPixmap = Pixmap(16 * TILE_SIZE, TILES_IN_X * TILE_SIZE, Pixmap.Format.RGBA8888) CreateTileAtlas.tags.toMap().forEach { t, u -> - val tilePosFromAtlas = u.atlasStartingPosition + maskTypetoTileIDForItemImage(u.maskType) + val tilePosFromAtlas = u.tileNumber + maskTypetoTileIDForItemImage(u.maskType) val srcX = (tilePosFromAtlas % TILES_IN_X) * TILE_SIZE val srcY = (tilePosFromAtlas / TILES_IN_X) * TILE_SIZE val destX = (t % 16) * TILE_SIZE @@ -347,7 +349,7 @@ internal object BlocksDrawer { } val renderTag = CreateTileAtlas.getRenderTag(thisTile) - val tileNumberBase = renderTag.atlasStartingPosition + val tileNumberBase = renderTag.tileNumber val tileNumber = tileNumberBase + when (renderTag.maskType) { CreateTileAtlas.RenderTag.MASK_NA -> 0 CreateTileAtlas.RenderTag.MASK_16 -> connectLut16[nearbyTilesInfo] diff --git a/src/net/torvald/terrarum/worlddrawer/CreateTileAtlas.kt b/src/net/torvald/terrarum/worlddrawer/CreateTileAtlas.kt index 5dabcbc3e..1e60887c6 100644 --- a/src/net/torvald/terrarum/worlddrawer/CreateTileAtlas.kt +++ b/src/net/torvald/terrarum/worlddrawer/CreateTileAtlas.kt @@ -2,12 +2,16 @@ package net.torvald.terrarum.worlddrawer import com.badlogic.gdx.Gdx import com.badlogic.gdx.files.FileHandle +import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.Pixmap import com.badlogic.gdx.utils.GdxRuntimeException -import net.torvald.terrarum.AppLoader.printdbg import net.torvald.terrarum.ModMgr +import net.torvald.terrarum.blockproperties.BlockCodex +import net.torvald.terrarum.blockproperties.Fluid +import net.torvald.terrarum.gameworld.GameWorld import net.torvald.terrarum.toInt import net.torvald.terrarum.worlddrawer.FeaturesDrawer.TILE_SIZE +import kotlin.math.roundToInt /** * This class implements work_files/dynamic_shape_2_0.psd @@ -22,6 +26,7 @@ object CreateTileAtlas { lateinit var atlasAutumn: Pixmap lateinit var atlasWinter: Pixmap lateinit var atlasSpring: Pixmap + lateinit var atlasFluid: Pixmap internal lateinit var tags: HashMap private set private val defaultRenderTag = RenderTag(3, RenderTag.CONNECT_SELF, RenderTag.MASK_NA) // 'update' block @@ -31,6 +36,7 @@ object CreateTileAtlas { /** 0000.tga, 1.tga.gz, 3242423.tga, 000033.tga.gz */ // for right now, TGA file only, no gzip private val validTerrainTilesFilename = Regex("""[0-9]+\.tga""")//Regex("""[0-9]+\.tga(.gz)?""") + private val validFluidTilesFilename = Regex("""fluid_[0-9]+\.tga""") // 16 tiles are reserved for internal use: solid black, solid white, breakage stages. // 0th tile is complete transparent tile and is also a BlockID of zero: air. @@ -38,7 +44,7 @@ object CreateTileAtlas { private val atlasInit = "./assets/graphics/blocks/init.tga" /** - * Must be called AFTER mods' loading + * Must be called AFTER mods' loading so that all the block props are loaded */ operator fun invoke(updateExisting: Boolean = false) { if (updateExisting || !initialised) { @@ -49,6 +55,7 @@ object CreateTileAtlas { atlasAutumn = Pixmap(TILES_IN_X * TILE_SIZE, TILES_IN_X * TILE_SIZE, Pixmap.Format.RGBA8888) atlasWinter = Pixmap(TILES_IN_X * TILE_SIZE, TILES_IN_X * TILE_SIZE, Pixmap.Format.RGBA8888) atlasSpring = Pixmap(TILES_IN_X * TILE_SIZE, TILES_IN_X * TILE_SIZE, Pixmap.Format.RGBA8888) + atlasFluid = Pixmap(TILES_IN_X * TILE_SIZE, TILES_IN_X * TILE_SIZE, Pixmap.Format.RGBA8888) val initMap = Pixmap(Gdx.files.internal(atlasInit)) @@ -57,21 +64,20 @@ object CreateTileAtlas { // get all the files applicable - // first, get all the '/blocks' directory + // first, get all the '/blocks' directory, and add all the files, regardless of their extension, to the list val tgaList = ArrayList() ModMgr.getGdxFilesFromEveryMod("blocks").forEach { if (!it.isDirectory) { throw Error("Path '${it.path()}' is not a directory") } - // then, filter the file such that its name matches the regex - it.list { _, name -> name.matches(validTerrainTilesFilename) }.forEach { tgaFile -> - tgaList.add(tgaFile) + it.list().forEach { tgaFile -> + if (!tgaFile.isDirectory) tgaList.add(tgaFile) } } - // Sift through the file list, but TGA format first - tgaList.filter { it.extension().toUpperCase() == "TGA" }.forEach { + // Sift through the file list for blocks, but TGA format first + tgaList.filter { it.name().matches(validTerrainTilesFilename) && it.extension().toUpperCase() == "TGA" }.forEach { try { fileToAtlantes(it) } @@ -91,6 +97,72 @@ object CreateTileAtlas { }*/ + // Sift through the file list for fluids, but TGA format first + val fluidMasterPixmap = Pixmap(TILE_SIZE * 47, TILE_SIZE * 8, Pixmap.Format.RGBA8888) + tgaList.filter { it.name().matches(validFluidTilesFilename) && it.extension().toUpperCase() == "TGA" }.forEachIndexed { fluidLevel, it -> + val pixmap = Pixmap(it) + // dirty manual copy + repeat(5) { + fluidMasterPixmap.drawPixmap(pixmap, + it * TILE_SIZE * 7, fluidLevel * TILE_SIZE, + 0, TILE_SIZE * it, + TILE_SIZE * 7, TILE_SIZE + ) + } + repeat(2) { + fluidMasterPixmap.drawPixmap(pixmap, + (35 + it * 6) * TILE_SIZE, fluidLevel * TILE_SIZE, + 0, TILE_SIZE * (5 + it), + TILE_SIZE * 6, TILE_SIZE + ) + } + + pixmap.dispose() + } + // test print + //PixmapIO2.writeTGA(Gdx.files.absolute("${AppLoader.defaultDir}/fluidpixmapmaster.tga"), fluidMasterPixmap, false) + + // occupy the fluid pixmap with software rendering + for (i in BlockCodex.MAX_TERRAIN_TILES..BlockCodex.highestNumber) { + val fluid = Color(BlockCodex[i].colour) + + // pixmap <- (color SCREEN fluidMasterPixmap) + // then occupy the atlasFluid + val pixmap = Pixmap(fluidMasterPixmap.width, fluidMasterPixmap.height, Pixmap.Format.RGBA8888) + + for (y in 0 until pixmap.height) { + for (x in 0 until pixmap.width) { + val inColour = Color(fluidMasterPixmap.getPixel(x, y)) + // SCREEN for RGB, MUL for A. + inColour.r = 1f - (1f - fluid.r) * (1f - inColour.r) + inColour.g = 1f - (1f - fluid.g) * (1f - inColour.g) + inColour.b = 1f - (1f - fluid.b) * (1f - inColour.b) + inColour.a = fluid.a * inColour.a + + pixmap.drawPixel(x, y, inColour.toRGBA()) + } + } + + // test print + //PixmapIO2.writeTGA(Gdx.files.absolute("${AppLoader.defaultDir}/$i.tga"), pixmap, false) + // using the test print, I figured out that the output is alpha premultiplied. + + // to the atlas + val atlasTargetPos = 1 + 47 * 8 * (i - BlockCodex.MAX_TERRAIN_TILES) + for (k in 0 until 47 * 8) { + val srcX = (k % 47) * TILE_SIZE + val srcY = (k / 47) * TILE_SIZE + val destX = ((atlasTargetPos + k) % TILES_IN_X) * TILE_SIZE + val destY = ((atlasTargetPos + k) / TILES_IN_X) * TILE_SIZE + atlasFluid.drawPixmap(pixmap, srcX, srcY, TILE_SIZE, TILE_SIZE, destX, destY, TILE_SIZE, TILE_SIZE) + } + + pixmap.dispose() + } + + + fluidMasterPixmap.dispose() + initialised = true } } @@ -98,6 +170,12 @@ object CreateTileAtlas { return tags.getOrDefault(blockID, defaultRenderTag) } + fun fluidToTileNumber(fluid: GameWorld.FluidInfo): Int { + val fluidLevel = fluid.amount.coerceIn(0f, 1f).times(9).roundToInt() + return if (fluid.type == Fluid.NULL || fluidLevel == 0) 0 else + 47 * 8 * (fluid.type.abs() - 1) + 47 * (fluidLevel - 1) + } + private fun fileToAtlantes(it: FileHandle) { val tilesPixmap = Pixmap(it) val blockID = it.nameWithoutExtension().toInt() @@ -160,7 +238,7 @@ object CreateTileAtlas { val txOfPixmap = pixmap.width / TILE_SIZE val tyOfPixmap = pixmap.height / TILE_SIZE for (i in 0 until tilesCount) { - printdbg(this, "Rendering to atlas, tile# $atlasCursor") + //printdbg(this, "Rendering to atlas, tile# $atlasCursor") // different texture for different seasons (224x224) if (seasonal) { @@ -200,11 +278,12 @@ object CreateTileAtlas { 2 -> atlasAutumn.drawPixmap(pixmap, sourceX, sourceY, TILE_SIZE, TILE_SIZE, atlasX, atlasY, TILE_SIZE, TILE_SIZE) 3 -> atlasWinter.drawPixmap(pixmap, sourceX, sourceY, TILE_SIZE, TILE_SIZE, atlasX, atlasY, TILE_SIZE, TILE_SIZE) 4 -> atlasSpring.drawPixmap(pixmap, sourceX, sourceY, TILE_SIZE, TILE_SIZE, atlasX, atlasY, TILE_SIZE, TILE_SIZE) + 5 -> atlasFluid.drawPixmap(pixmap, sourceX, sourceY, TILE_SIZE, TILE_SIZE, atlasX, atlasY, TILE_SIZE, TILE_SIZE) } } } - data class RenderTag(val atlasStartingPosition: Int, val connectionType: Int, val maskType: Int) { + data class RenderTag(val tileNumber: Int, val connectionType: Int, val maskType: Int) { companion object { const val CONNECT_MUTUAL = 0 const val CONNECT_SELF = 1 @@ -233,6 +312,6 @@ object CreateTileAtlas { atlasAutumn.dispose() atlasWinter.dispose() atlasSpring.dispose() + atlasFluid.dispose() } - } \ No newline at end of file