diff --git a/assets/modules/basegame/blocks/blocks.csv b/assets/modules/basegame/blocks/blocks.csv index 2cbacca3c..d2c425863 100644 --- a/assets/modules/basegame/blocks/blocks.csv +++ b/assets/modules/basegame/blocks/blocks.csv @@ -1,145 +1,146 @@ -"blid";"drid";"name" ; "opacity";"strength";"dsty";"mate";"fluid";"solid";"wall"; "lumcolor";"fall";"dlfn";"vscs";"fv";"friction" - "0"; "0";"BLOCK_AIR" ; "8396808"; "1"; "1";"null"; "0"; "0"; "1"; "0"; "0"; "0"; "N/A"; "0";"4" - "16"; "17";"BLOCK_STONE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "17"; "17";"BLOCK_STONE_QUARRIED" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "18"; "18";"BLOCK_STONE_TILE_WHITE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "19"; "19";"BLOCK_STONE_BRICKS" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "32"; "32";"BLOCK_DIRT" ; "33587232"; "24";"1400";"dirt"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "33"; "32";"BLOCK_GRASS" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "0"; "0"; "0"; "0"; "N/A"; "0";"16" - "34"; "34";"BLOCK_GRASSWALL" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "35"; "35";"BLOCK_FOLIAGE_GREEN" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "36"; "36";"BLOCK_FOLIAGE_LIME" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "37"; "37";"BLOCK_FOLIAGE_GOLD" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "38"; "38";"BLOCK_FOLIAGE_RED" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "39"; "39";"BLOCK_FOLIAGE_ICEBLUE" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "40"; "40";"BLOCK_FOLIAGE_PURPLE" ; "33587232"; "24";"1400";"grss"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "48"; "48";"BLOCK_PLANK_NORMAL" ; "33587232"; "16"; "740";"wood"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "49"; "49";"BLOCK_PLANK_EBONY" ; "33587232"; "19";"1200";"wood"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "50"; "50";"BLOCK_PLANK_BIRCH" ; "33587232"; "15"; "670";"wood"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "51"; "51";"BLOCK_PLANK_BLOODROSE" ; "33587232"; "17"; "900";"wood"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "64"; "64";"BLOCK_TRUNK_NORMAL" ; "33587232"; "16"; "740";"wood"; "0"; "1"; "0"; "0"; "0"; "0"; "N/A"; "0";"16" - "65"; "65";"BLOCK_TRUNK_EBONY" ; "33587232"; "19";"1200";"wood"; "0"; "1"; "0"; "0"; "0"; "0"; "N/A"; "0";"16" - "66"; "66";"BLOCK_TRUNK_BIRCH" ; "33587232"; "15"; "670";"wood"; "0"; "1"; "0"; "0"; "0"; "0"; "N/A"; "0";"16" - "67"; "67";"BLOCK_TRUNK_BLOODROSE" ; "33587232"; "17"; "900";"wood"; "0"; "1"; "0"; "0"; "0"; "0"; "N/A"; "0";"16" - "80"; "80";"BLOCK_SAND" ; "33587232"; "24";"2400";"sand"; "0"; "1"; "0"; "0"; "1"; "0"; "N/A"; "0";"16" - "81"; "81";"BLOCK_SAND_WHITE" ; "33587232"; "24";"2400";"sand"; "0"; "1"; "0"; "0"; "1"; "0"; "N/A"; "0";"16" - "82"; "82";"BLOCK_SAND_RED" ; "33587232"; "24";"2400";"sand"; "0"; "1"; "0"; "0"; "1"; "0"; "N/A"; "0";"16" - "83"; "83";"BLOCK_SAND_DESERT" ; "33587232"; "24";"2400";"sand"; "0"; "1"; "0"; "0"; "1"; "0"; "N/A"; "0";"16" - "84"; "84";"BLOCK_SAND_BLACK" ; "33587232"; "24";"2400";"sand"; "0"; "1"; "0"; "0"; "1"; "0"; "N/A"; "0";"16" - "85"; "85";"BLOCK_SAND_GREEN" ; "33587232"; "24";"2400";"sand"; "0"; "1"; "0"; "0"; "1"; "0"; "N/A"; "0";"16" - "96"; "96";"BLOCK_GRAVEL" ; "33587232"; "24";"2400";"grvl"; "0"; "1"; "0"; "0"; "1"; "0"; "N/A"; "0";"16" - "97"; "97";"BLOCK_GRAVEL_GREY" ; "33587232"; "24";"2400";"grvl"; "0"; "1"; "0"; "0"; "1"; "0"; "N/A"; "0";"16" - "112"; "112";"BLOCK_ORE_MALACHITE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "0"; "0"; "N/A"; "0";"16" - "113"; "113";"BLOCK_ORE_HEMATITE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "0"; "0"; "N/A"; "0";"16" - "114"; "114";"BLOCK_ORE_NATURAL_GOLD" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "0"; "0"; "N/A"; "0";"16" - "115"; "115";"BLOCK_ORE_NATURAL_SILVER" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "0"; "0"; "N/A"; "0";"16" - "116"; "116";"BLOCK_ORE_RUTILE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "0"; "0"; "N/A"; "0";"16" - "117"; "117";"BLOCK_ORE_AURICHALCUMITE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "0"; "0"; "N/A"; "0";"16" - "128"; "128";"BLOCK_GEM_RUBY" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "0"; "0"; "N/A"; "0";"16" - "129"; "129";"BLOCK_GEM_EMERALD" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "0"; "0"; "N/A"; "0";"16" - "130"; "130";"BLOCK_GEM_SAPPHIRE" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "0"; "0"; "N/A"; "0";"16" - "131"; "131";"BLOCK_GEM_TOPAZ" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "0"; "0"; "N/A"; "0";"16" - "132"; "132";"BLOCK_GEM_DIAMOND" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "0"; "0"; "N/A"; "0";"16" - "133"; "133";"BLOCK_GEM_AMETHYST" ; "33587232"; "48";"2400";"rock"; "0"; "1"; "0"; "0"; "0"; "0"; "N/A"; "0";"16" - "144"; "144";"BLOCK_SNOW" ; "33587232"; "24"; "500";"snow"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "145"; "0";"BLOCK_ICE_FRAGILE" ; "13644813"; "5"; "930";"icei"; "0"; "1"; "0"; "0"; "0"; "0"; "N/A"; "0"; "4" - "146"; "146";"BLOCK_ICE_NATURAL" ; "27289626"; "35"; "930";"icei"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0"; "4" - "147"; "147";"BLOCK_ICE_CLEAR_MAGICAL" ; "33587232"; "48";"3720";"icex"; "0"; "1"; "1"; "19955770"; "0"; "0"; "N/A"; "0"; "4" - "148"; "148";"BLOCK_GLASS_CRUDE" ; "3146755"; "5";"2500";"glas"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "149"; "149";"BLOCK_GLASS_CLEAN" ; "1049601"; "5";"2203";"glas"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "160"; "160";"BLOCK_PLATFORM_STONE" ; "8396808"; "5"; "N/A";"rock"; "0"; "0"; "0"; "0"; "0"; "0"; "N/A"; "0";"16" - "161"; "161";"BLOCK_PLATFORM_WOODEN" ; "8396808"; "5"; "N/A";"wood"; "0"; "0"; "0"; "0"; "0"; "0"; "N/A"; "0";"16" - "162"; "162";"BLOCK_PLATFORM_EBONY" ; "8396808"; "5"; "N/A";"wood"; "0"; "0"; "0"; "0"; "0"; "0"; "N/A"; "0";"16" - "163"; "163";"BLOCK_PLATFORM_BIRCH" ; "8396808"; "5"; "N/A";"wood"; "0"; "0"; "0"; "0"; "0"; "0"; "N/A"; "0";"16" - "164"; "164";"BLOCK_PLATFORM_BLOODROSE" ; "8396808"; "5"; "N/A";"wood"; "0"; "0"; "0"; "0"; "0"; "0"; "N/A"; "0";"16" - "176"; "176";"BLOCK_TORCH" ; "8396808"; "1"; "N/A";"fxtr"; "0"; "0"; "0"; "267553792"; "0"; "1"; "N/A"; "0";"16" - "177"; "177";"BLOCK_TORCH_FROST" ; "8396808"; "1"; "N/A";"fxtr"; "0"; "0"; "0"; "81916159"; "0"; "1"; "N/A"; "0";"16" - "192"; "176";"BLOCK_TORCH" ; "8396808"; "1"; "N/A";"fxtr"; "0"; "0"; "0"; "0"; "0"; "0"; "N/A"; "0";"16" - "193"; "177";"BLOCK_TORCH_FROST" ; "8396808"; "1"; "N/A";"fxtr"; "0"; "0"; "0"; "0"; "0"; "0"; "N/A"; "0";"16" - "208"; "208";"BLOCK_ILLUMINATOR_WHITE" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "239319274"; "0"; "0"; "N/A"; "0";"16" - "209"; "209";"BLOCK_ILLUMINATOR_YELLOW" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "267607040"; "0"; "0"; "N/A"; "0";"16" - "210"; "210";"BLOCK_ILLUMINATOR_ORANGE" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "267546624"; "0"; "0"; "N/A"; "0";"16" - "211"; "211";"BLOCK_ILLUMINATOR_RED" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "246415360"; "0"; "0"; "N/A"; "0";"16" - "212"; "212";"BLOCK_ILLUMINATOR_FUCHSIA" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "246415543"; "0"; "0"; "N/A"; "0";"16" - "213"; "213";"BLOCK_ILLUMINATOR_PURPLE" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "191889643"; "0"; "0"; "N/A"; "0";"16" - "214"; "214";"BLOCK_ILLUMINATOR_BLUE" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "52479"; "0"; "0"; "N/A"; "0";"16" - "215"; "215";"BLOCK_ILLUMINATOR_CYAN" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "219391"; "0"; "0"; "N/A"; "0";"16" - "216"; "216";"BLOCK_ILLUMINATOR_GREEN" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "56884224"; "0"; "0"; "N/A"; "0";"16" - "217"; "217";"BLOCK_ILLUMINATOR_GREEN_DARK";"8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "33660928"; "0"; "0"; "N/A"; "0";"16" - "218"; "218";"BLOCK_ILLUMINATOR_BROWN" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "89161728"; "0"; "0"; "N/A"; "0";"16" - "219"; "219";"BLOCK_ILLUMINATOR_TAN" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "157392948"; "0"; "0"; "N/A"; "0";"16" - "220"; "220";"BLOCK_ILLUMINATOR_GREY_LIGHT";"8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "198374589"; "0"; "0"; "N/A"; "0";"16" - "221"; "221";"BLOCK_ILLUMINATOR_GREY_MED"; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "122803317"; "0"; "0"; "N/A"; "0";"16" - "222"; "222";"BLOCK_ILLUMINATOR_GREY_DARK"; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "68224065"; "0"; "0"; "N/A"; "0";"16" - "223"; "223";"BLOCK_ILLUMINATOR_BLACK" ; "8396808"; "1"; "N/A";"glas"; "0"; "1"; "1"; "116392191"; "0"; "0"; "N/A"; "0";"16" - "224"; "208";"BLOCK_ILLUMINATOR_WHITE" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "225"; "209";"BLOCK_ILLUMINATOR_YELLOW" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "226"; "210";"BLOCK_ILLUMINATOR_ORANGE" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "227"; "211";"BLOCK_ILLUMINATOR_RED" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "228"; "212";"BLOCK_ILLUMINATOR_FUCHSIA" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "229"; "213";"BLOCK_ILLUMINATOR_PURPLE" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "230"; "214";"BLOCK_ILLUMINATOR_BLUE" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "231"; "215";"BLOCK_ILLUMINATOR_CYAN" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "232"; "216";"BLOCK_ILLUMINATOR_GREEN" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "233"; "217";"BLOCK_ILLUMINATOR_GREEN_DARK";"33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "234"; "218";"BLOCK_ILLUMINATOR_BROWN" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "235"; "219";"BLOCK_ILLUMINATOR_TAN" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "236"; "220";"BLOCK_ILLUMINATOR_GREY_LIGHT";"33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "237"; "221";"BLOCK_ILLUMINATOR_GREY_MED"; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "238"; "222";"BLOCK_ILLUMINATOR_GREY_DARK";"33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "239"; "223";"BLOCK_ILLUMINATOR_BLACK" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "240"; "240";"BLOCK_SANDSTONE" ; "33587232"; "48";"1900";"rock"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "241"; "241";"BLOCK_SANDSTONE_WHITE" ; "33587232"; "48";"1900";"rock"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "242"; "242";"BLOCK_SANDSTONE_RED" ; "33587232"; "48";"1900";"rock"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "243"; "243";"BLOCK_SANDSTONE_DESERT" ; "33587232"; "48";"1900";"rock"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "244"; "244";"BLOCK_SANDSTONE_BLACK" ; "33587232"; "48";"1900";"rock"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "245"; "245";"BLOCK_SANDSTONE_GREEN" ; "33587232"; "48";"1900";"rock"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" - "256"; "256";"BLOCK_LANTERN_IRON_REGULAR"; "8396808"; "1"; "N/A";"fxtr"; "0"; "0"; "0"; "267553792"; "0"; "0"; "N/A"; "0";"16" - "257"; "257";"BLOCK_SUNSTONE" ; "33587232"; "1"; "N/A";"rock"; "0"; "1"; "0"; "0"; "0"; "2"; "N/A"; "0";"16" - "258"; "258";"BLOCK_DAYLIGHT_CAPACITOR" ; "33587232"; "1"; "N/A";"glas"; "0"; "1"; "0"; "0"; "0"; "3"; "N/A"; "0";"16" -"4064"; "0";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "0"; "0"; "32"; "0";"16" -"4065"; "0";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "0"; "0"; "32"; "0";"16" -"4066"; "0";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "0"; "0"; "32"; "0";"16" -"4067"; "0";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "0"; "0"; "32"; "0";"16" -"4068"; "0";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "0"; "0"; "32"; "0";"16" -"4069"; "0";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "0"; "0"; "32"; "0";"16" -"4070"; "0";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "0"; "0"; "32"; "0";"16" -"4071"; "0";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "0"; "0"; "32"; "0";"16" -"4072"; "0";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "0"; "0"; "32"; "0";"16" -"4073"; "0";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "0"; "0"; "32"; "0";"16" -"4074"; "0";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "0"; "0"; "32"; "0";"16" -"4075"; "0";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "0"; "0"; "32"; "0";"16" -"4076"; "0";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "0"; "0"; "32"; "0";"16" -"4077"; "0";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "0"; "0"; "32"; "0";"16" -"4078"; "0";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "0"; "0"; "32"; "0";"16" -"4079"; "0";"BLOCK_LAVA" ;"260301048"; "100";"2600";"rock"; "1"; "0"; "0"; "205574144"; "0"; "0"; "32"; "0";"16" -"4080"; "0";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "0"; "0"; "16"; "0";"16" -"4081"; "0";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "0"; "0"; "16"; "0";"16" -"4082"; "0";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "0"; "0"; "16"; "0";"16" -"4083"; "0";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "0"; "0"; "16"; "0";"16" -"4084"; "0";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "0"; "0"; "16"; "0";"16" -"4085"; "0";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "0"; "0"; "16"; "0";"16" -"4086"; "0";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "0"; "0"; "16"; "0";"16" -"4087"; "0";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "0"; "0"; "16"; "0";"16" -"4088"; "0";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "0"; "0"; "16"; "0";"16" -"4089"; "0";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "0"; "0"; "16"; "0";"16" -"4090"; "0";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "0"; "0"; "16"; "0";"16" -"4091"; "0";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "0"; "0"; "16"; "0";"16" -"4092"; "0";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "0"; "0"; "16"; "0";"16" -"4093"; "0";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "0"; "0"; "16"; "0";"16" -"4094"; "0";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "0"; "0"; "16"; "0";"16" -"4095"; "0";"BLOCK_WATER" ; "27282445"; "100";"1000";"watr"; "1"; "0"; "0"; "0"; "0"; "0"; "16"; "0";"16" - "-1"; "0";"BLOCK_NULL" ;"1073741823"; "-1";"2600";"null"; "0"; "0"; "1"; "0"; "0"; "0"; "N/A"; "0";"16" + "id";"drop";"name" ; "shdr"; "shdg"; "shdb";"strength";"dsty";"mate";"fluid";"solid";"wall"; "lumr"; "lumg"; "lumb";"fall";"dlfn";"vscs";"fv";"friction" + "0"; "0";"BLOCK_AIR" ;"0.0312";"0.0312";"0.0312"; "1"; "1";"null"; "0"; "0"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"4" + "16"; "17";"BLOCK_STONE" ;"0.1252";"0.1252";"0.1252"; "48";"2400";"rock"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "17"; "17";"BLOCK_STONE_QUARRIED" ;"0.1252";"0.1252";"0.1252"; "48";"2400";"rock"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "18"; "18";"BLOCK_STONE_TILE_WHITE" ;"0.1252";"0.1252";"0.1252"; "48";"2400";"rock"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "19"; "19";"BLOCK_STONE_BRICKS" ;"0.1252";"0.1252";"0.1252"; "48";"2400";"rock"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "32"; "32";"BLOCK_DIRT" ;"0.1252";"0.1252";"0.1252"; "24";"1400";"dirt"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "33"; "32";"BLOCK_GRASS" ;"0.1252";"0.1252";"0.1252"; "24";"1400";"grss"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "34"; "34";"BLOCK_GRASSWALL" ;"0.1252";"0.1252";"0.1252"; "24";"1400";"grss"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "35"; "35";"BLOCK_FOLIAGE_GREEN" ;"0.1252";"0.1252";"0.1252"; "24";"1400";"grss"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "36"; "36";"BLOCK_FOLIAGE_LIME" ;"0.1252";"0.1252";"0.1252"; "24";"1400";"grss"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "37"; "37";"BLOCK_FOLIAGE_GOLD" ;"0.1252";"0.1252";"0.1252"; "24";"1400";"grss"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "38"; "38";"BLOCK_FOLIAGE_RED" ;"0.1252";"0.1252";"0.1252"; "24";"1400";"grss"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "39"; "39";"BLOCK_FOLIAGE_ICEBLUE" ;"0.1252";"0.1252";"0.1252"; "24";"1400";"grss"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "40"; "40";"BLOCK_FOLIAGE_PURPLE" ;"0.1252";"0.1252";"0.1252"; "24";"1400";"grss"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "48"; "48";"BLOCK_PLANK_NORMAL" ;"0.1252";"0.1252";"0.1252"; "16"; "740";"wood"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "49"; "49";"BLOCK_PLANK_EBONY" ;"0.1252";"0.1252";"0.1252"; "19";"1200";"wood"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "50"; "50";"BLOCK_PLANK_BIRCH" ;"0.1252";"0.1252";"0.1252"; "15"; "670";"wood"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "51"; "51";"BLOCK_PLANK_BLOODROSE" ;"0.1252";"0.1252";"0.1252"; "17"; "900";"wood"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "64"; "64";"BLOCK_TRUNK_NORMAL" ;"0.1252";"0.1252";"0.1252"; "16"; "740";"wood"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "65"; "65";"BLOCK_TRUNK_EBONY" ;"0.1252";"0.1252";"0.1252"; "19";"1200";"wood"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "66"; "66";"BLOCK_TRUNK_BIRCH" ;"0.1252";"0.1252";"0.1252"; "15"; "670";"wood"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "67"; "67";"BLOCK_TRUNK_BLOODROSE" ;"0.1252";"0.1252";"0.1252"; "17"; "900";"wood"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "80"; "80";"BLOCK_SAND" ;"0.1252";"0.1252";"0.1252"; "24";"2400";"sand"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "1"; "0"; "N/A"; "0";"16" + "81"; "81";"BLOCK_SAND_WHITE" ;"0.1252";"0.1252";"0.1252"; "24";"2400";"sand"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "1"; "0"; "N/A"; "0";"16" + "82"; "82";"BLOCK_SAND_RED" ;"0.1252";"0.1252";"0.1252"; "24";"2400";"sand"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "1"; "0"; "N/A"; "0";"16" + "83"; "83";"BLOCK_SAND_DESERT" ;"0.1252";"0.1252";"0.1252"; "24";"2400";"sand"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "1"; "0"; "N/A"; "0";"16" + "84"; "84";"BLOCK_SAND_BLACK" ;"0.1252";"0.1252";"0.1252"; "24";"2400";"sand"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "1"; "0"; "N/A"; "0";"16" + "85"; "85";"BLOCK_SAND_GREEN" ;"0.1252";"0.1252";"0.1252"; "24";"2400";"sand"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "1"; "0"; "N/A"; "0";"16" + "96"; "96";"BLOCK_GRAVEL" ;"0.1252";"0.1252";"0.1252"; "24";"2400";"grvl"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "1"; "0"; "N/A"; "0";"16" + "97"; "97";"BLOCK_GRAVEL_GREY" ;"0.1252";"0.1252";"0.1252"; "24";"2400";"grvl"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "1"; "0"; "N/A"; "0";"16" + "112"; "112";"BLOCK_ORE_MALACHITE" ;"0.1252";"0.1252";"0.1252"; "48";"2400";"rock"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "113"; "113";"BLOCK_ORE_HEMATITE" ;"0.1252";"0.1252";"0.1252"; "48";"2400";"rock"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "114"; "114";"BLOCK_ORE_NATURAL_GOLD" ;"0.1252";"0.1252";"0.1252"; "48";"2400";"rock"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "115"; "115";"BLOCK_ORE_NATURAL_SILVER" ;"0.1252";"0.1252";"0.1252"; "48";"2400";"rock"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "116"; "116";"BLOCK_ORE_RUTILE" ;"0.1252";"0.1252";"0.1252"; "48";"2400";"rock"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "117"; "117";"BLOCK_ORE_AURICHALCUMITE" ;"0.1252";"0.1252";"0.1252"; "48";"2400";"rock"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "128"; "128";"BLOCK_GEM_RUBY" ;"0.1252";"0.1252";"0.1252"; "48";"2400";"rock"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "129"; "129";"BLOCK_GEM_EMERALD" ;"0.1252";"0.1252";"0.1252"; "48";"2400";"rock"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "130"; "130";"BLOCK_GEM_SAPPHIRE" ;"0.1252";"0.1252";"0.1252"; "48";"2400";"rock"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "131"; "131";"BLOCK_GEM_TOPAZ" ;"0.1252";"0.1252";"0.1252"; "48";"2400";"rock"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "132"; "132";"BLOCK_GEM_DIAMOND" ;"0.1252";"0.1252";"0.1252"; "48";"2400";"rock"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "133"; "133";"BLOCK_GEM_AMETHYST" ;"0.1252";"0.1252";"0.1252"; "48";"2400";"rock"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "144"; "144";"BLOCK_SNOW" ;"0.1252";"0.1252";"0.1252"; "24"; "500";"snow"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "145"; "0";"BLOCK_ICE_FRAGILE" ;"0.0508";"0.0508";"0.0508"; "5"; "930";"icei"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0"; "4" + "146"; "146";"BLOCK_ICE_NATURAL" ;"0.1016";"0.1016";"0.1016"; "35"; "930";"icei"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0"; "4" + "147"; "147";"BLOCK_ICE_CLEAR_MAGICAL" ;"0.1252";"0.1252";"0.1252"; "48";"3720";"icex"; "0"; "1"; "1";"0.0744";"0.1252";"0.2268"; "0"; "0"; "N/A"; "0"; "4" + "148"; "148";"BLOCK_GLASS_CRUDE" ;"0.0120";"0.0040";"0.0120"; "5";"2500";"glas"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "149"; "149";"BLOCK_GLASS_CLEAN" ;"0.0040";"0.0040";"0.0040"; "5";"2203";"glas"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "160"; "160";"BLOCK_PLATFORM_STONE" ;"0.0312";"0.0312";"0.0312"; "5"; "N/A";"rock"; "0"; "0"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "161"; "161";"BLOCK_PLATFORM_WOODEN" ;"0.0312";"0.0312";"0.0312"; "5"; "N/A";"wood"; "0"; "0"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "162"; "162";"BLOCK_PLATFORM_EBONY" ;"0.0312";"0.0312";"0.0312"; "5"; "N/A";"wood"; "0"; "0"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "163"; "163";"BLOCK_PLATFORM_BIRCH" ;"0.0312";"0.0312";"0.0312"; "5"; "N/A";"wood"; "0"; "0"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "164"; "164";"BLOCK_PLATFORM_BLOODROSE" ;"0.0312";"0.0312";"0.0312"; "5"; "N/A";"wood"; "0"; "0"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "176"; "176";"BLOCK_TORCH" ;"0.0312";"0.0312";"0.0312"; "1"; "N/A";"fxtr"; "0"; "0"; "0";"1.0000";"0.6372";"0.0000"; "0"; "1"; "N/A"; "0";"16" + "177"; "177";"BLOCK_TORCH_FROST" ;"0.0312";"0.0312";"0.0312"; "1"; "N/A";"fxtr"; "0"; "0"; "0";"0.3048";"0.4848";"1.0000"; "0"; "1"; "N/A"; "0";"16" + "192"; "176";"BLOCK_TORCH" ;"0.0312";"0.0312";"0.0312"; "1"; "N/A";"fxtr"; "0"; "0"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "193"; "177";"BLOCK_TORCH_FROST" ;"0.0312";"0.0312";"0.0312"; "1"; "N/A";"fxtr"; "0"; "0"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "208"; "208";"BLOCK_ILLUMINATOR_WHITE" ;"0.0312";"0.0312";"0.0312"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.8916";"0.9304";"0.9148"; "0"; "0"; "N/A"; "0";"16" + "209"; "209";"BLOCK_ILLUMINATOR_YELLOW" ;"0.0312";"0.0312";"0.0312"; "1"; "N/A";"glas"; "0"; "1"; "1";"1.0000";"0.8408";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "210"; "210";"BLOCK_ILLUMINATOR_ORANGE" ;"0.0312";"0.0312";"0.0312"; "1"; "N/A";"glas"; "0"; "1"; "1";"1.0000";"0.6100";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "211"; "211";"BLOCK_ILLUMINATOR_RED" ;"0.0312";"0.0312";"0.0312"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.9188";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "212"; "212";"BLOCK_ILLUMINATOR_FUCHSIA" ;"0.0312";"0.0312";"0.0312"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.9188";"0.0000";"0.7156"; "0"; "0"; "N/A"; "0";"16" + "213"; "213";"BLOCK_ILLUMINATOR_PURPLE" ;"0.0312";"0.0312";"0.0312"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.7156";"0.0000";"0.9188"; "0"; "0"; "N/A"; "0";"16" + "214"; "214";"BLOCK_ILLUMINATOR_BLUE" ;"0.0312";"0.0312";"0.0312"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.0000";"0.1996";"0.9188"; "0"; "0"; "N/A"; "0";"16" + "215"; "215";"BLOCK_ILLUMINATOR_CYAN" ;"0.0312";"0.0312";"0.0312"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.0000";"0.8368";"0.9188"; "0"; "0"; "N/A"; "0";"16" + "216"; "216";"BLOCK_ILLUMINATOR_GREEN" ;"0.0312";"0.0312";"0.0312"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.2112";"1.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "217"; "217";"BLOCK_ILLUMINATOR_GREEN_DARK";"0.0312";"0.0312";"0.0312"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.1252";"0.4068";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "218"; "218";"BLOCK_ILLUMINATOR_BROWN" ;"0.0312";"0.0312";"0.0312"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.3324";"0.1252";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "219"; "219";"BLOCK_ILLUMINATOR_TAN" ;"0.0312";"0.0312";"0.0312"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.5864";"0.4068";"0.2032"; "0"; "0"; "N/A"; "0";"16" + "220"; "220";"BLOCK_ILLUMINATOR_GREY_LIGHT";"0.0312";"0.0312";"0.0312"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.7392";"0.7392";"0.7392"; "0"; "0"; "N/A"; "0";"16" + "221"; "221";"BLOCK_ILLUMINATOR_GREY_MED" ;"0.0312";"0.0312";"0.0312"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.4576";"0.4576";"0.4576"; "0"; "0"; "N/A"; "0";"16" + "222"; "222";"BLOCK_ILLUMINATOR_GREY_DARK" ;"0.0312";"0.0312";"0.0312"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.2540";"0.2540";"0.2540"; "0"; "0"; "N/A"; "0";"16" + "223"; "223";"BLOCK_ILLUMINATOR_BLACK" ;"0.0312";"0.0312";"0.0312"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.4340";"0.0000";"0.9972"; "0"; "0"; "N/A"; "0";"16" + "224"; "208";"BLOCK_ILLUMINATOR_WHITE" ;"0.1252";"0.1252";"0.1252"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "225"; "209";"BLOCK_ILLUMINATOR_YELLOW" ;"0.1252";"0.1252";"0.1252"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "226"; "210";"BLOCK_ILLUMINATOR_ORANGE" ;"0.1252";"0.1252";"0.1252"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "227"; "211";"BLOCK_ILLUMINATOR_RED" ;"0.1252";"0.1252";"0.1252"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "228"; "212";"BLOCK_ILLUMINATOR_FUCHSIA" ;"0.1252";"0.1252";"0.1252"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "229"; "213";"BLOCK_ILLUMINATOR_PURPLE" ;"0.1252";"0.1252";"0.1252"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "230"; "214";"BLOCK_ILLUMINATOR_BLUE" ;"0.1252";"0.1252";"0.1252"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "231"; "215";"BLOCK_ILLUMINATOR_CYAN" ;"0.1252";"0.1252";"0.1252"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "232"; "216";"BLOCK_ILLUMINATOR_GREEN" ;"0.1252";"0.1252";"0.1252"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "233"; "217";"BLOCK_ILLUMINATOR_GREEN_DARK";"0.1252";"0.1252";"0.1252"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "234"; "218";"BLOCK_ILLUMINATOR_BROWN" ;"0.1252";"0.1252";"0.1252"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "235"; "219";"BLOCK_ILLUMINATOR_TAN" ;"0.1252";"0.1252";"0.1252"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "236"; "220";"BLOCK_ILLUMINATOR_GREY_LIGHT";"0.1252";"0.1252";"0.1252"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "237"; "221";"BLOCK_ILLUMINATOR_GREY_MED" ;"0.1252";"0.1252";"0.1252"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "238"; "222";"BLOCK_ILLUMINATOR_GREY_DARK" ;"0.1252";"0.1252";"0.1252"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "239"; "223";"BLOCK_ILLUMINATOR_BLACK" ;"0.1252";"0.1252";"0.1252"; "1"; "N/A";"glas"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "240"; "240";"BLOCK_SANDSTONE" ;"0.1252";"0.1252";"0.1252"; "48";"1900";"rock"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "241"; "241";"BLOCK_SANDSTONE_WHITE" ;"0.1252";"0.1252";"0.1252"; "48";"1900";"rock"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "242"; "242";"BLOCK_SANDSTONE_RED" ;"0.1252";"0.1252";"0.1252"; "48";"1900";"rock"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "243"; "243";"BLOCK_SANDSTONE_DESERT" ;"0.1252";"0.1252";"0.1252"; "48";"1900";"rock"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "244"; "244";"BLOCK_SANDSTONE_BLACK" ;"0.1252";"0.1252";"0.1252"; "48";"1900";"rock"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "245"; "245";"BLOCK_SANDSTONE_GREEN" ;"0.1252";"0.1252";"0.1252"; "48";"1900";"rock"; "0"; "1"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "256"; "256";"BLOCK_LANTERN_IRON_REGULAR" ;"0.0312";"0.0312";"0.0312"; "1"; "N/A";"fxtr"; "0"; "0"; "0";"1.0000";"0.6372";"0.0000"; "0"; "0"; "N/A"; "0";"16" + "257"; "257";"BLOCK_SUNSTONE" ;"0.1252";"0.1252";"0.1252"; "1"; "N/A";"rock"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "0"; "2"; "N/A"; "0";"16" + "258"; "258";"BLOCK_DAYLIGHT_CAPACITOR" ;"0.1252";"0.1252";"0.1252"; "1"; "N/A";"glas"; "0"; "1"; "0";"0.0000";"0.0000";"0.0000"; "0"; "3"; "N/A"; "0";"16" +"4064"; "0";"BLOCK_LAVA" ;"0.9696";"0.9696";"0.9696"; "100";"2600";"rock"; "1"; "0"; "0";"0.7664";"0.2032";"0.0000"; "0"; "0"; "32"; "0";"16" +"4065"; "0";"BLOCK_LAVA" ;"0.9696";"0.9696";"0.9696"; "100";"2600";"rock"; "1"; "0"; "0";"0.7664";"0.2032";"0.0000"; "0"; "0"; "32"; "0";"16" +"4066"; "0";"BLOCK_LAVA" ;"0.9696";"0.9696";"0.9696"; "100";"2600";"rock"; "1"; "0"; "0";"0.7664";"0.2032";"0.0000"; "0"; "0"; "32"; "0";"16" +"4067"; "0";"BLOCK_LAVA" ;"0.9696";"0.9696";"0.9696"; "100";"2600";"rock"; "1"; "0"; "0";"0.7664";"0.2032";"0.0000"; "0"; "0"; "32"; "0";"16" +"4068"; "0";"BLOCK_LAVA" ;"0.9696";"0.9696";"0.9696"; "100";"2600";"rock"; "1"; "0"; "0";"0.7664";"0.2032";"0.0000"; "0"; "0"; "32"; "0";"16" +"4069"; "0";"BLOCK_LAVA" ;"0.9696";"0.9696";"0.9696"; "100";"2600";"rock"; "1"; "0"; "0";"0.7664";"0.2032";"0.0000"; "0"; "0"; "32"; "0";"16" +"4070"; "0";"BLOCK_LAVA" ;"0.9696";"0.9696";"0.9696"; "100";"2600";"rock"; "1"; "0"; "0";"0.7664";"0.2032";"0.0000"; "0"; "0"; "32"; "0";"16" +"4071"; "0";"BLOCK_LAVA" ;"0.9696";"0.9696";"0.9696"; "100";"2600";"rock"; "1"; "0"; "0";"0.7664";"0.2032";"0.0000"; "0"; "0"; "32"; "0";"16" +"4072"; "0";"BLOCK_LAVA" ;"0.9696";"0.9696";"0.9696"; "100";"2600";"rock"; "1"; "0"; "0";"0.7664";"0.2032";"0.0000"; "0"; "0"; "32"; "0";"16" +"4073"; "0";"BLOCK_LAVA" ;"0.9696";"0.9696";"0.9696"; "100";"2600";"rock"; "1"; "0"; "0";"0.7664";"0.2032";"0.0000"; "0"; "0"; "32"; "0";"16" +"4074"; "0";"BLOCK_LAVA" ;"0.9696";"0.9696";"0.9696"; "100";"2600";"rock"; "1"; "0"; "0";"0.7664";"0.2032";"0.0000"; "0"; "0"; "32"; "0";"16" +"4075"; "0";"BLOCK_LAVA" ;"0.9696";"0.9696";"0.9696"; "100";"2600";"rock"; "1"; "0"; "0";"0.7664";"0.2032";"0.0000"; "0"; "0"; "32"; "0";"16" +"4076"; "0";"BLOCK_LAVA" ;"0.9696";"0.9696";"0.9696"; "100";"2600";"rock"; "1"; "0"; "0";"0.7664";"0.2032";"0.0000"; "0"; "0"; "32"; "0";"16" +"4077"; "0";"BLOCK_LAVA" ;"0.9696";"0.9696";"0.9696"; "100";"2600";"rock"; "1"; "0"; "0";"0.7664";"0.2032";"0.0000"; "0"; "0"; "32"; "0";"16" +"4078"; "0";"BLOCK_LAVA" ;"0.9696";"0.9696";"0.9696"; "100";"2600";"rock"; "1"; "0"; "0";"0.7664";"0.2032";"0.0000"; "0"; "0"; "32"; "0";"16" +"4079"; "0";"BLOCK_LAVA" ;"0.9696";"0.9696";"0.9696"; "100";"2600";"rock"; "1"; "0"; "0";"0.7664";"0.2032";"0.0000"; "0"; "0"; "32"; "0";"16" +"4080"; "0";"BLOCK_WATER" ;"0.1016";"0.0744";"0.0508"; "100";"1000";"watr"; "1"; "0"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "16"; "0";"16" +"4081"; "0";"BLOCK_WATER" ;"0.1016";"0.0744";"0.0508"; "100";"1000";"watr"; "1"; "0"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "16"; "0";"16" +"4082"; "0";"BLOCK_WATER" ;"0.1016";"0.0744";"0.0508"; "100";"1000";"watr"; "1"; "0"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "16"; "0";"16" +"4083"; "0";"BLOCK_WATER" ;"0.1016";"0.0744";"0.0508"; "100";"1000";"watr"; "1"; "0"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "16"; "0";"16" +"4084"; "0";"BLOCK_WATER" ;"0.1016";"0.0744";"0.0508"; "100";"1000";"watr"; "1"; "0"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "16"; "0";"16" +"4085"; "0";"BLOCK_WATER" ;"0.1016";"0.0744";"0.0508"; "100";"1000";"watr"; "1"; "0"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "16"; "0";"16" +"4086"; "0";"BLOCK_WATER" ;"0.1016";"0.0744";"0.0508"; "100";"1000";"watr"; "1"; "0"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "16"; "0";"16" +"4087"; "0";"BLOCK_WATER" ;"0.1016";"0.0744";"0.0508"; "100";"1000";"watr"; "1"; "0"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "16"; "0";"16" +"4088"; "0";"BLOCK_WATER" ;"0.1016";"0.0744";"0.0508"; "100";"1000";"watr"; "1"; "0"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "16"; "0";"16" +"4089"; "0";"BLOCK_WATER" ;"0.1016";"0.0744";"0.0508"; "100";"1000";"watr"; "1"; "0"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "16"; "0";"16" +"4090"; "0";"BLOCK_WATER" ;"0.1016";"0.0744";"0.0508"; "100";"1000";"watr"; "1"; "0"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "16"; "0";"16" +"4091"; "0";"BLOCK_WATER" ;"0.1016";"0.0744";"0.0508"; "100";"1000";"watr"; "1"; "0"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "16"; "0";"16" +"4092"; "0";"BLOCK_WATER" ;"0.1016";"0.0744";"0.0508"; "100";"1000";"watr"; "1"; "0"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "16"; "0";"16" +"4093"; "0";"BLOCK_WATER" ;"0.1016";"0.0744";"0.0508"; "100";"1000";"watr"; "1"; "0"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "16"; "0";"16" +"4094"; "0";"BLOCK_WATER" ;"0.1016";"0.0744";"0.0508"; "100";"1000";"watr"; "1"; "0"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "16"; "0";"16" +"4095"; "0";"BLOCK_WATER" ;"0.1016";"0.0744";"0.0508"; "100";"1000";"watr"; "1"; "0"; "0";"0.0000";"0.0000";"0.0000"; "0"; "0"; "16"; "0";"16" + "-1"; "0";"BLOCK_NULL" ;"4.0000";"4.0000";"4.0000"; "-1";"2600";"null"; "0"; "0"; "1";"0.0000";"0.0000";"0.0000"; "0"; "0"; "N/A"; "0";"16" ## Notes ## -# blid: Block ID -# drid: Drop ID +# id: Block ID +# drop: Drop ID + +# shdr/g/b, lumr/g/b: Shade RGB/ Lum RGB. +# valid range: float of 0..4; 1.0 for 255 # 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) diff --git a/src/net/torvald/terrarum/Ingame.kt b/src/net/torvald/terrarum/Ingame.kt index 41e866d29..239f414e4 100644 --- a/src/net/torvald/terrarum/Ingame.kt +++ b/src/net/torvald/terrarum/Ingame.kt @@ -398,7 +398,7 @@ class Ingame(val batch: SpriteBatch) : Screen { WeatherMixer.update(delta) BlockStats.update() if (!(CommandDict["setgl"] as SetGlobalLightOverride).lightOverride) - world.globalLight = WeatherMixer.globalLightNow.toRGB10() + world.globalLight = WeatherMixer.globalLightNow /////////////////////////// diff --git a/src/net/torvald/terrarum/KVHashMap.kt b/src/net/torvald/terrarum/KVHashMap.kt index d233e0952..e7a202a81 100644 --- a/src/net/torvald/terrarum/KVHashMap.kt +++ b/src/net/torvald/terrarum/KVHashMap.kt @@ -72,6 +72,10 @@ open class KVHashMap { return value as Double } + fun getAsFloat(key: String): Float? { + return getAsDouble(key)?.toFloat() + } + fun getAsString(key: String): String? { val value = get(key) diff --git a/src/net/torvald/terrarum/Terrarum.kt b/src/net/torvald/terrarum/Terrarum.kt index 888046ae2..51212faea 100644 --- a/src/net/torvald/terrarum/Terrarum.kt +++ b/src/net/torvald/terrarum/Terrarum.kt @@ -20,7 +20,6 @@ import net.torvald.terrarum.imagefont.TinyAlphNum import net.torvald.terrarum.itemproperties.ItemCodex import net.torvald.terrarum.utils.JsonFetcher import net.torvald.terrarum.utils.JsonWriter -import net.torvald.terrarum.worlddrawer.RGB10 import net.torvald.terrarumsansbitmap.gdx.GameFontBase import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack import org.lwjgl.input.Controllers @@ -562,12 +561,12 @@ infix fun Color.mul(other: Color): Color = this.cpy().mul(other) -inline fun Color.toRGB10(): RGB10 { +/*inline fun Color.toRGB10(): RGB10 { val bits = this.toIntBits() // ABGR // 0bxxRRRRRRRRRRGGGGGGGGGGBBBBBBBBBB // 0bAAAAAAAABBBBBBBBGGGGGGGGRRRRRRRR return bits.and(0x0000FF).shl(20) or bits.and(0x00FF00).shl(2) or bits.and(0xFF0000).ushr(16) -} +}*/ diff --git a/src/net/torvald/terrarum/blockproperties/BlockCodex.kt b/src/net/torvald/terrarum/blockproperties/BlockCodex.kt index 48364d141..7db483dc1 100644 --- a/src/net/torvald/terrarum/blockproperties/BlockCodex.kt +++ b/src/net/torvald/terrarum/blockproperties/BlockCodex.kt @@ -3,6 +3,7 @@ package net.torvald.terrarum.blockproperties import net.torvald.terrarum.utils.CSVFetcher import net.torvald.terrarum.gameworld.MapLayer import net.torvald.terrarum.gameworld.PairedMapLayer +import net.torvald.terrarum.worlddrawer.LightmapRenderer import org.apache.commons.csv.CSVRecord import java.io.IOException @@ -29,11 +30,11 @@ object BlockCodex { println("[BlockCodex] Building block properties table") records.forEach { - if (intVal(it, "blid") == -1) { + if (intVal(it, "id") == -1) { setProp(nullProp, it) } else { - setProp(blockProps[intVal(it, "blid")], it) + setProp(blockProps[intVal(it, "id")], it) } } } @@ -84,13 +85,20 @@ object BlockCodex { private fun setProp(prop: BlockProp, record: CSVRecord) { prop.nameKey = record.get("name") - prop.id = intVal(record, "blid") - prop.drop = intVal(record, "drid") + prop.id = intVal(record, "id") + prop.drop = intVal(record, "drop") + + prop.shadeColR = floatVal(record, "shdr") / LightmapRenderer.MUL_FLOAT + prop.shadeColG = floatVal(record, "shdg") / LightmapRenderer.MUL_FLOAT + prop.shadeColB = floatVal(record, "shdb") / LightmapRenderer.MUL_FLOAT - prop.opacity = intVal(record, "opacity") prop.strength = intVal(record, "strength") prop.density = intVal(record, "dsty") - prop.luminosity = intVal(record, "lumcolor") + + prop.lumColR = floatVal(record, "lumr") / LightmapRenderer.MUL_FLOAT + prop.lumColG = floatVal(record, "lumg") / LightmapRenderer.MUL_FLOAT + prop.lumColB = floatVal(record, "lumb") / LightmapRenderer.MUL_FLOAT + prop.friction = intVal(record, "friction") prop.viscosity = intVal(record, "vscs") @@ -102,22 +110,31 @@ object BlockCodex { prop.dynamicLuminosityFunction = intVal(record, "dlfn") - print("${intVal(record, "blid")}") + print("${intVal(record, "id")}") println("\t" + prop.nameKey) } private fun intVal(rec: CSVRecord, s: String): Int { var ret = -1 try { - ret = Integer.decode(rec.get(s))!! + ret = rec.get(s).toInt() } - catch (e: NullPointerException) { + catch (e: NumberFormatException) { + } + + return ret + } + + private fun floatVal(rec: CSVRecord, s: String): Float { + var ret = -1f + try { + ret = rec.get(s).toFloat() + } + catch (e: NumberFormatException) { } return ret } private fun boolVal(rec: CSVRecord, s: String) = intVal(rec, s) != 0 - - private fun formatNum2(i: Int) = if (i < 10) "0" + i else i.toString() } diff --git a/src/net/torvald/terrarum/blockproperties/BlockProp.kt b/src/net/torvald/terrarum/blockproperties/BlockProp.kt index d58aea8ea..3c576b00d 100644 --- a/src/net/torvald/terrarum/blockproperties/BlockProp.kt +++ b/src/net/torvald/terrarum/blockproperties/BlockProp.kt @@ -1,5 +1,7 @@ package net.torvald.terrarum.blockproperties +import com.badlogic.gdx.graphics.Color + /** * Created by minjaesong on 16-02-16. */ @@ -9,10 +11,16 @@ class BlockProp { var nameKey: String = "" + + var shadeColR = 0f + var shadeColG = 0f + var shadeColB = 0f + /** * @param opacity Raw RGB value, without alpha */ - var opacity: Int = 0 // colour attenuation + inline val opacity: Color + get() = Color(shadeColR, shadeColG, shadeColB, 1f) var strength: Int = 0 var density: Int = 0 @@ -23,14 +31,16 @@ class BlockProp { var isWallable: Boolean = false var isVertFriction: Boolean = false + + var lumColR = 0f + var lumColG = 0f + var lumColB = 0f + /** * @param luminosity Raw RGB value, without alpha */ - var luminosity: Int = 0 - set(value) { - field = value - } - get() = BlockPropUtil.getDynamicLumFunc(field, dynamicLuminosityFunction) + inline val luminosity: Color + get() = BlockPropUtil.getDynamicLumFunc(Color(lumColR, lumColG, lumColB, 1f), dynamicLuminosityFunction) var drop: Int = 0 diff --git a/src/net/torvald/terrarum/blockproperties/BlockPropUtil.kt b/src/net/torvald/terrarum/blockproperties/BlockPropUtil.kt index 66e15ed10..8281dc392 100644 --- a/src/net/torvald/terrarum/blockproperties/BlockPropUtil.kt +++ b/src/net/torvald/terrarum/blockproperties/BlockPropUtil.kt @@ -1,15 +1,14 @@ package net.torvald.terrarum.blockproperties import com.badlogic.gdx.Gdx +import com.badlogic.gdx.graphics.Color import com.jme3.math.FastMath import net.torvald.random.HQRNG import net.torvald.terrarum.Terrarum import net.torvald.terrarum.gameactors.Second import net.torvald.terrarum.gameworld.WorldTime import net.torvald.terrarum.worlddrawer.LightmapRenderer -import net.torvald.terrarum.toRGB10 import net.torvald.terrarum.weather.WeatherMixer -import net.torvald.terrarum.worlddrawer.RGB10 /** * Created by minjaesong on 16-06-16. @@ -38,21 +37,21 @@ object BlockPropUtil { } - private fun getTorchFlicker(baseLum: Int): RGB10 { - val funcY = FastMath.interpolateCatmullRom(0.0f, flickerFuncX.toFloat() / flickerFuncDomain, + private fun getTorchFlicker(baseLum: Color): Color { + val funcY = FastMath.interpolateCatmullRom(0.0f, flickerFuncX / flickerFuncDomain, flickerP0, flickerP1, flickerP2, flickerP3 ) return LightmapRenderer.alterBrightnessUniform(baseLum, funcY) } - private fun getSlowBreath(baseLum: Int): RGB10 { + private fun getSlowBreath(baseLum: Color): Color { val funcY = FastMath.sin(FastMath.PI * breathFuncX / breathCycleDuration) * breathRange return LightmapRenderer.alterBrightnessUniform(baseLum, funcY) } - private fun getPulsate(baseLum: Int): RGB10 { + private fun getPulsate(baseLum: Color): Color { val funcY = FastMath.sin(FastMath.PI * pulsateFuncX / pulsateCycleDuration) * pulsateRange return LightmapRenderer.alterBrightnessUniform(baseLum, funcY) @@ -92,11 +91,11 @@ object BlockPropUtil { private fun linearInterpolation1D(a: Float, b: Float, x: Float) = a * (1 - x) + b * x - fun getDynamicLumFunc(baseLum: Int, type: Int): Int { + fun getDynamicLumFunc(baseLum: Color, type: Int): Color { return when (type) { 1 -> getTorchFlicker(baseLum) 2 -> Terrarum.ingame!!.world.globalLight // current global light - 3 -> WeatherMixer.getGlobalLightOfTime(WorldTime.DAY_LENGTH / 2).toRGB10() // daylight at noon + 3 -> WeatherMixer.getGlobalLightOfTime(WorldTime.DAY_LENGTH / 2) // daylight at noon 4 -> getSlowBreath(baseLum) 5 -> getPulsate(baseLum) else -> baseLum diff --git a/src/net/torvald/terrarum/console/SetGlobalLightOverride.kt b/src/net/torvald/terrarum/console/SetGlobalLightOverride.kt index 45b599ee0..9dbf98c1a 100644 --- a/src/net/torvald/terrarum/console/SetGlobalLightOverride.kt +++ b/src/net/torvald/terrarum/console/SetGlobalLightOverride.kt @@ -1,5 +1,6 @@ package net.torvald.terrarum.console +import com.badlogic.gdx.graphics.Color import net.torvald.terrarum.worlddrawer.LightmapRenderer import net.torvald.terrarum.Terrarum @@ -14,10 +15,10 @@ internal object SetGlobalLightOverride : ConsoleCommand { override fun execute(args: Array) { if (args.size == 4) { try { - val r = args[1].toInt() - val g = args[2].toInt() - val b = args[3].toInt() - val GL = LightmapRenderer.constructRGBFromInt(r, g, b) + val r = args[1].toFloat() + val g = args[2].toFloat() + val b = args[3].toFloat() + val GL = Color(r, g, b, 1f) lightOverride = true Terrarum.ingame!!.world.globalLight = GL @@ -29,25 +30,6 @@ internal object SetGlobalLightOverride : ConsoleCommand { Echo("Range: 0-" + LightmapRenderer.CHANNEL_MAX + " per channel") } - } - else if (args.size == 2) { - try { - val GL = args[1].toInt() - - if (GL.toInt() < 0 || GL.toInt() >= LightmapRenderer.COLOUR_RANGE_SIZE) { - Echo("Range: 0-" + (LightmapRenderer.COLOUR_RANGE_SIZE - 1)) - } - else { - Terrarum.ingame!!.world.globalLight = GL - } - } - catch (e: NumberFormatException) { - if (args[1].toLowerCase() == "none") - lightOverride = false - else - Echo("Wrong number input.") - } - } else { printUsage() diff --git a/src/net/torvald/terrarum/gameactors/AVKey.kt b/src/net/torvald/terrarum/gameactors/AVKey.kt index a2efd8951..573675a3e 100644 --- a/src/net/torvald/terrarum/gameactors/AVKey.kt +++ b/src/net/torvald/terrarum/gameactors/AVKey.kt @@ -39,7 +39,9 @@ object AVKey { * 0000 0010000000 0010000000 0010000000 * ^ Red ^ Green ^ Blue */ - const val LUMINOSITY = "luminosity" + const val LUMR = "luminosityred" + const val LUMG = "luminositygreen" + const val LUMB = "luminosityblue" const val DRAGCOEFF = "dragcoeff" const val FALLDAMPENMULT = "falldampenmult" diff --git a/src/net/torvald/terrarum/gameactors/ActorHumanoid.kt b/src/net/torvald/terrarum/gameactors/ActorHumanoid.kt index c429250c3..ee42ea5ca 100644 --- a/src/net/torvald/terrarum/gameactors/ActorHumanoid.kt +++ b/src/net/torvald/terrarum/gameactors/ActorHumanoid.kt @@ -1,6 +1,7 @@ package net.torvald.terrarum.gameactors import com.badlogic.gdx.Gdx +import com.badlogic.gdx.graphics.Color import com.jme3.math.FastMath import net.torvald.terrarum.Terrarum import net.torvald.terrarum.gameactors.faction.Faction @@ -8,6 +9,7 @@ import net.torvald.terrarum.itemproperties.GameItem import net.torvald.terrarum.itemproperties.Material import net.torvald.terrarum.realestate.LandUtil import net.torvald.terrarum.ui.UIInventory +import net.torvald.terrarum.worlddrawer.LightmapRenderer import java.util.* /** @@ -47,19 +49,17 @@ open class ActorHumanoid(birth: GameDate, death: GameDate? = null) if (houseDesignation != null) houseDesignation!!.clear() } - /** - * Recommended implementation: - * - override var luminosity: Int - get() = actorValue.getAsInt(AVKey.LUMINOSITY) ?: 0 - set(value) { - actorValue[AVKey.LUMINOSITY] = value - } - */ - override var luminosity: Int - get() = actorValue.getAsInt(AVKey.LUMINOSITY) ?: 0 + override var luminosity: Color + get() = Color( + (actorValue.getAsFloat(AVKey.LUMR) ?: 0f) / LightmapRenderer.MUL_FLOAT, + (actorValue.getAsFloat(AVKey.LUMG) ?: 0f) / LightmapRenderer.MUL_FLOAT, + (actorValue.getAsFloat(AVKey.LUMB) ?: 0f) / LightmapRenderer.MUL_FLOAT, + 1f + ) set(value) { - actorValue[AVKey.LUMINOSITY] = value + actorValue[AVKey.LUMR] = value.r * LightmapRenderer.MUL_FLOAT + actorValue[AVKey.LUMG] = value.g * LightmapRenderer.MUL_FLOAT + actorValue[AVKey.LUMB] = value.b * LightmapRenderer.MUL_FLOAT } /** diff --git a/src/net/torvald/terrarum/gameactors/ActorWithPhysics.kt b/src/net/torvald/terrarum/gameactors/ActorWithPhysics.kt index 923785e9b..8c9e01810 100644 --- a/src/net/torvald/terrarum/gameactors/ActorWithPhysics.kt +++ b/src/net/torvald/terrarum/gameactors/ActorWithPhysics.kt @@ -31,7 +31,8 @@ typealias Second = Float * * Created by minjaesong on 16-01-13. */ -open class ActorWithPhysics(renderOrder: RenderOrder, val immobileBody: Boolean = false, physics: Boolean = true) : ActorWithBody(renderOrder) { +open class ActorWithPhysics(renderOrder: RenderOrder, val immobileBody: Boolean = false, physics: Boolean = true) : + ActorWithBody(renderOrder) { val COLLISION_TEST_MODE = false diff --git a/src/net/torvald/terrarum/gameactors/FixtureTikiTorch.kt b/src/net/torvald/terrarum/gameactors/FixtureTikiTorch.kt index 7ae619ddc..5deef0c3a 100644 --- a/src/net/torvald/terrarum/gameactors/FixtureTikiTorch.kt +++ b/src/net/torvald/terrarum/gameactors/FixtureTikiTorch.kt @@ -1,5 +1,6 @@ package net.torvald.terrarum.gameactors +import com.badlogic.gdx.graphics.Color import net.torvald.terrarum.ModMgr import net.torvald.terrarum.blockproperties.Block import net.torvald.terrarum.blockproperties.BlockCodex @@ -11,11 +12,12 @@ import java.util.* */ internal class FixtureTikiTorch : FixtureBase(), Luminous { - override var luminosity: Int + override var luminosity: Color get() = BlockCodex[Block.TORCH].luminosity set(value) { throw UnsupportedOperationException() } + override val lightBoxList: ArrayList init { diff --git a/src/net/torvald/terrarum/gameactors/Luminous.kt b/src/net/torvald/terrarum/gameactors/Luminous.kt index f1ffd251b..bf7c767fb 100644 --- a/src/net/torvald/terrarum/gameactors/Luminous.kt +++ b/src/net/torvald/terrarum/gameactors/Luminous.kt @@ -1,5 +1,7 @@ package net.torvald.terrarum.gameactors +import com.badlogic.gdx.graphics.Color + /** * Created by minjaesong on 16-02-19. */ @@ -8,13 +10,20 @@ interface Luminous { /** * Recommended implementation: * - override var luminosity: Int - get() = actorValue.getAsInt(AVKey.LUMINOSITY) ?: 0 + override var luminosity: Color + get() = Color( + (actorValue.getAsFloat(AVKey.LUMR) ?: 0f) / LightmapRenderer.MUL_FLOAT, + (actorValue.getAsFloat(AVKey.LUMG) ?: 0f) / LightmapRenderer.MUL_FLOAT, + (actorValue.getAsFloat(AVKey.LUMB) ?: 0f) / LightmapRenderer.MUL_FLOAT, + 1f + ) set(value) { - actorValue[AVKey.LUMINOSITY] = value + actorValue[AVKey.LUMR] = value.r * LightmapRenderer.MUL_FLOAT + actorValue[AVKey.LUMG] = value.g * LightmapRenderer.MUL_FLOAT + actorValue[AVKey.LUMB] = value.b * LightmapRenderer.MUL_FLOAT } */ - var luminosity: Int + var luminosity: Color /** * Arguments: diff --git a/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt b/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt index e5ea95e68..c67cfc1c4 100644 --- a/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt +++ b/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt @@ -49,8 +49,9 @@ object PlayerBuilderSigrid { p.actorValue[AVKey.INTELLIGENT] = true - //p.actorValue[AVKey.LUMINOSITY] = Color(0x434aff).to10bit() - //p.actorValue[AVKey.LUMINOSITY] = 214127943 // bright purple + //p.actorValue[AVKey.LUMR] = 0.84f + //p.actorValue[AVKey.LUMR] = 0.93f + //p.actorValue[AVKey.LUMR] = 1.37f p.actorValue[AVKey.BASEDEFENCE] = 141 diff --git a/src/net/torvald/terrarum/gameactors/ProjectileSimple.kt b/src/net/torvald/terrarum/gameactors/ProjectileSimple.kt index befed8df8..b50b6a536 100644 --- a/src/net/torvald/terrarum/gameactors/ProjectileSimple.kt +++ b/src/net/torvald/terrarum/gameactors/ProjectileSimple.kt @@ -28,8 +28,8 @@ open class ProjectileSimple( val speed: Int - override var luminosity: Int - get() = bulletDatabase[type][OFFSET_LUMINOSITY] as Int + override var luminosity: Color + get() = (bulletDatabase[type][OFFSET_LUMINOSITY] as Color).cpy() set(value) { } /** @@ -115,8 +115,8 @@ open class ProjectileSimple( val OFFSET_LUMINOSITY = 4 val bulletDatabase = arrayOf( // damage, display colour, no gravity, speed - arrayOf(7, Color(0xFF5429), true, 40, 32), - arrayOf(8, Color(0xFF5429), true, 20, 0) + arrayOf(7, Color(0xFF5429_FF.toInt()), true, 40, 32), + arrayOf(8, Color(0xFF5429_FF.toInt()), true, 20, 0) // ... ) } diff --git a/src/net/torvald/terrarum/gameactors/WeaponSwung.kt b/src/net/torvald/terrarum/gameactors/WeaponSwung.kt index 6faa0f13c..bf58456af 100644 --- a/src/net/torvald/terrarum/gameactors/WeaponSwung.kt +++ b/src/net/torvald/terrarum/gameactors/WeaponSwung.kt @@ -1,5 +1,7 @@ package net.torvald.terrarum.gameactors +import com.badlogic.gdx.graphics.Color + /** * Created by minjaesong on 16-04-26. */ @@ -15,7 +17,7 @@ class WeaponSwung(val itemID: Int) : ActorWithPhysics(Actor.RenderOrder.MIDTOP), actorValue[AVKey.LUMINOSITY] = value } */ - override var luminosity: Int + override var luminosity: Color get() = throw UnsupportedOperationException() set(value) { } diff --git a/src/net/torvald/terrarum/gameactors/ai/AILuaAPI.kt b/src/net/torvald/terrarum/gameactors/ai/AILuaAPI.kt index 6abb1d3ac..11a1bbc7c 100644 --- a/src/net/torvald/terrarum/gameactors/ai/AILuaAPI.kt +++ b/src/net/torvald/terrarum/gameactors/ai/AILuaAPI.kt @@ -73,14 +73,6 @@ internal class AILuaAPI(g: Globals, actor: ActorWithPhysics) { t["strength"] = actor.avStrength.toLua() - val lumrgb: Int = actor.actorValue.getAsInt(AVKey.LUMINOSITY) ?: 0 - val MUL_2 = LightmapRenderer.MUL_2 - val MUL = LightmapRenderer.MUL - val CHMAX = LightmapRenderer.CHANNEL_MAX - t["luminosityRGB"] = lumrgb.toLua() - t["luminosity"] = (lumrgb.div(MUL_2).and(CHMAX).times(3) + - lumrgb.div(MUL).and(CHMAX).times(4) + - lumrgb.and(1023)).div(8.0).toLua() // quick luminosity calculation return t } diff --git a/src/net/torvald/terrarum/gameworld/GameWorld.kt b/src/net/torvald/terrarum/gameworld/GameWorld.kt index fb25e8c35..dfa46f891 100644 --- a/src/net/torvald/terrarum/gameworld/GameWorld.kt +++ b/src/net/torvald/terrarum/gameworld/GameWorld.kt @@ -1,9 +1,9 @@ package net.torvald.terrarum.gameworld +import com.badlogic.gdx.graphics.Color import net.torvald.terrarum.realestate.LandUtil import net.torvald.terrarum.blockproperties.BlockCodex -import net.torvald.terrarum.worlddrawer.RGB10 import org.dyn4j.geometry.Vector2 typealias BlockAddress = Long @@ -32,8 +32,8 @@ class GameWorld(val width: Int, val height: Int) { //physics /** Meter per second squared. Currently only the downward gravity is supported. No reverse gravity :p */ var gravitation: Vector2 = Vector2(0.0, 9.8) - /** RGB in Integer */ - var globalLight: RGB10 = 0 + /** 0.0..1.0+ */ + var globalLight = Color(0f,0f,0f,1f) diff --git a/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt b/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt index f6144afeb..03793fdcd 100644 --- a/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt +++ b/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt @@ -107,7 +107,7 @@ class BasicDebugInfoWindow : UICanvas { val lightVal: String val mtX = mouseTileX.toString() val mtY = mouseTileY.toString() - val valRaw = LightmapRenderer.getValueFromMap(mouseTileX, mouseTileY) + val valRaw = LightmapRenderer.getLight(mouseTileX, mouseTileY) val rawR = valRaw?.r?.times(100f)?.round()?.div(100f) val rawG = valRaw?.g?.times(100f)?.round()?.div(100f) val rawB = valRaw?.b?.times(100f)?.round()?.div(100f) diff --git a/src/net/torvald/terrarum/ui/UIBasicNotifier.kt b/src/net/torvald/terrarum/ui/UIBasicNotifier.kt index d6311a157..cbfe92a95 100644 --- a/src/net/torvald/terrarum/ui/UIBasicNotifier.kt +++ b/src/net/torvald/terrarum/ui/UIBasicNotifier.kt @@ -9,7 +9,6 @@ import net.torvald.terrarum.gameactors.Second import net.torvald.terrarum.gameactors.abs import net.torvald.terrarum.imagefont.Watch7SegSmall import net.torvald.terrarum.worlddrawer.LightmapRenderer -import net.torvald.terrarum.worlddrawer.toColor import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack /** @@ -94,11 +93,11 @@ class UIBasicNotifier(private val player: ActorHumanoid?) : UICanvas { if (player != null) { val playerPos = player.tilewiseHitbox lightLevel = (LightmapRenderer.getLight(playerPos.centeredX.toInt(), playerPos.centeredY.toInt()) ?: - Terrarum.ingame!!.world.globalLight.toColor() + Terrarum.ingame!!.world.globalLight ) } else { - lightLevel = Terrarum.ingame!!.world.globalLight.toColor() + lightLevel = Terrarum.ingame!!.world.globalLight } diff --git a/src/net/torvald/terrarum/ui/UITierOneWatch.kt b/src/net/torvald/terrarum/ui/UITierOneWatch.kt index 6538a5265..88bc66127 100644 --- a/src/net/torvald/terrarum/ui/UITierOneWatch.kt +++ b/src/net/torvald/terrarum/ui/UITierOneWatch.kt @@ -12,7 +12,6 @@ import net.torvald.terrarum.imagefont.Watch7SegMain import net.torvald.terrarum.imagefont.Watch7SegSmall import net.torvald.terrarum.imagefont.WatchDotAlph import net.torvald.terrarum.worlddrawer.LightmapRenderer -import net.torvald.terrarum.worlddrawer.toColor import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack /** @@ -69,11 +68,11 @@ class UITierOneWatch(private val player: ActorHumanoid?) : UICanvas { if (player != null) { val playerPos = player.tilewiseHitbox lightLevel = (LightmapRenderer.getLight(playerPos.centeredX.toInt(), playerPos.centeredY.toInt()) ?: - Terrarum.ingame!!.world.globalLight.toColor() + Terrarum.ingame!!.world.globalLight ) } else { - lightLevel = Terrarum.ingame!!.world.globalLight.toColor() + lightLevel = Terrarum.ingame!!.world.globalLight } // backplate diff --git a/src/net/torvald/terrarum/weather/WeatherMixer.kt b/src/net/torvald/terrarum/weather/WeatherMixer.kt index b8d1902c9..2a7585c0a 100644 --- a/src/net/torvald/terrarum/weather/WeatherMixer.kt +++ b/src/net/torvald/terrarum/weather/WeatherMixer.kt @@ -11,6 +11,7 @@ import net.torvald.terrarum.* import net.torvald.terrarum.gameactors.ParticleTestRain import net.torvald.terrarum.gamecontroller.KeyToggler import net.torvald.terrarum.gameworld.WorldTime +import net.torvald.terrarum.worlddrawer.LightmapRenderer import java.io.File import java.util.* diff --git a/src/net/torvald/terrarum/worlddrawer/LightmapRenderer.kt b/src/net/torvald/terrarum/worlddrawer/LightmapRenderer.kt index 20c764bb5..c759624f9 100644 --- a/src/net/torvald/terrarum/worlddrawer/LightmapRenderer.kt +++ b/src/net/torvald/terrarum/worlddrawer/LightmapRenderer.kt @@ -10,10 +10,6 @@ import net.torvald.terrarum.gameworld.GameWorld import net.torvald.terrarum.blockproperties.Block import net.torvald.terrarum.fillRect import net.torvald.terrarum.gameactors.* -import net.torvald.terrarum.toRGB10 -import net.torvald.terrarum.worlddrawer.LightmapRenderer.b -import net.torvald.terrarum.worlddrawer.LightmapRenderer.g -import net.torvald.terrarum.worlddrawer.LightmapRenderer.r import java.util.* /** @@ -22,7 +18,7 @@ import java.util.* * Created by minjaesong on 16-01-25. */ -typealias RGB10 = Int +//typealias RGB10 = Int object LightmapRenderer { private val world: GameWorld = Terrarum.ingame!!.world @@ -30,8 +26,8 @@ object LightmapRenderer { // TODO if (VBO works on BlocksDrawer) THEN overscan of 256, utilise same technique in here - 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(BlockCodex[Block.STONE].opacity and 0xFF).ceil()) + val overscan_open: Int = 32 + val overscan_opaque: Int = 8 init { println("[LightmapRenderer] Overscan open: $overscan_open; opaque: $overscan_opaque") @@ -45,7 +41,7 @@ object LightmapRenderer { .div(FeaturesDrawer.TILE_SIZE).ceil() + overscan_open * 2 + 3 /** - * 8-Bit RGB values + * Float value, 1.0 for 1023 */ private val lightmap: Array> = Array(LIGHTMAP_HEIGHT) { Array(LIGHTMAP_WIDTH, { Color(0f,0f,0f,1f) }) } // TODO framebuffer? private val lanternMap = ArrayList(Terrarum.ingame!!.ACTORCONTAINER_INITIAL_SIZE * 4) @@ -63,6 +59,7 @@ object LightmapRenderer { const val CHANNEL_MAX_FLOAT = CHANNEL_MAX.toFloat() const val COLOUR_RANGE_SIZE = MUL * MUL_2 const val MUL_FLOAT = MUL / 256f + const val DIV_FLOAT = 256f / MUL internal var for_x_start: Int = 0 internal var for_y_start: Int = 0 @@ -72,7 +69,21 @@ object LightmapRenderer { //inline fun getLightRawPos(x: Int, y: Int) = lightmap[y][x] + + /** + * Conventional level (multiplied by four) + */ fun getLight(x: Int, y: Int): Color? { + val col = getLightInternal(x, y) + if (col == null) { + return null + } + else { + return Color(col.r * MUL_FLOAT, col.g * MUL_FLOAT, col.b * MUL_FLOAT, 1f) + } + } + + private fun getLightInternal(x: Int, y: Int): Color? { if (y - for_y_start + overscan_open in 0..lightmap.lastIndex && x - for_x_start + overscan_open in 0..lightmap[0].lastIndex) { @@ -82,7 +93,7 @@ object LightmapRenderer { return null } - fun setLight(x: Int, y: Int, colour: Color) { + private fun setLight(x: Int, y: Int, colour: Color) { if (y - for_y_start + overscan_open in 0..lightmap.lastIndex && x - for_x_start + overscan_open in 0..lightmap[0].lastIndex) { @@ -254,9 +265,9 @@ object LightmapRenderer { var lightLevelThis: Color = Color(0f,0f,0f,1f) val thisTerrain = Terrarum.ingame!!.world.getTileFromTerrain(x, y) val thisWall = Terrarum.ingame!!.world.getTileFromWall(x, y) - val thisTileLuminosity = BlockCodex[thisTerrain].luminosity.toColor() - val thisTileOpacity = BlockCodex[thisTerrain].opacity.toColor() - val sunLight = Terrarum.ingame!!.world.globalLight.toColor() + val thisTileLuminosity = BlockCodex[thisTerrain].luminosity // already been div by four + val thisTileOpacity = BlockCodex[thisTerrain].opacity // already been div by four + val sunLight = Terrarum.ingame!!.world.globalLight.cpy().mul(DIV_FLOAT, DIV_FLOAT, DIV_FLOAT, 1f) // MIX TILE // open air @@ -276,7 +287,7 @@ object LightmapRenderer { for (i in 0..lanternMap.size - 1) { val lmap = lanternMap[i] if (lmap.posX == x && lmap.posY == y) - lightLevelThis = lightLevelThis maxBlend lmap.luminosity.toColor() // maximise to not exceed 1.0 with normal (<= 1.0) light + lightLevelThis = lightLevelThis maxBlend lmap.luminosity // maximise to not exceed 1.0 with normal (<= 1.0) light } @@ -288,15 +299,15 @@ object LightmapRenderer { * sample ambient for eight points and apply attenuation for those * maxblend eight values and use it */ - /* + */ambientAccumulator = ambientAccumulator maxBlend darkenColoured(getLight(x - 1, y - 1) ?: Color(0f,0f,0f,1f), scaleSqrt2(thisTileOpacity)) - /* + */ambientAccumulator = ambientAccumulator maxBlend darkenColoured(getLight(x + 1, y - 1) ?: Color(0f,0f,0f,1f), scaleSqrt2(thisTileOpacity)) - /* + */ambientAccumulator = ambientAccumulator maxBlend darkenColoured(getLight(x - 1, y + 1) ?: Color(0f,0f,0f,1f), scaleSqrt2(thisTileOpacity)) - /* + */ambientAccumulator = ambientAccumulator maxBlend darkenColoured(getLight(x + 1, y + 1) ?: Color(0f,0f,0f,1f), scaleSqrt2(thisTileOpacity)) + /* + */ambientAccumulator = ambientAccumulator maxBlend darkenColoured(getLightInternal(x - 1, y - 1) ?: Color(0f,0f,0f,1f), scaleSqrt2(thisTileOpacity)) + /* + */ambientAccumulator = ambientAccumulator maxBlend darkenColoured(getLightInternal(x + 1, y - 1) ?: Color(0f,0f,0f,1f), scaleSqrt2(thisTileOpacity)) + /* + */ambientAccumulator = ambientAccumulator maxBlend darkenColoured(getLightInternal(x - 1, y + 1) ?: Color(0f,0f,0f,1f), scaleSqrt2(thisTileOpacity)) + /* + */ambientAccumulator = ambientAccumulator maxBlend darkenColoured(getLightInternal(x + 1, y + 1) ?: Color(0f,0f,0f,1f), scaleSqrt2(thisTileOpacity)) - /* * */ambientAccumulator = ambientAccumulator maxBlend darkenColoured(getLight(x , y - 1) ?: Color(0f,0f,0f,1f), thisTileOpacity) - /* * */ambientAccumulator = ambientAccumulator maxBlend darkenColoured(getLight(x , y + 1) ?: Color(0f,0f,0f,1f), thisTileOpacity) - /* * */ambientAccumulator = ambientAccumulator maxBlend darkenColoured(getLight(x - 1, y ) ?: Color(0f,0f,0f,1f), thisTileOpacity) - /* * */ambientAccumulator = ambientAccumulator maxBlend darkenColoured(getLight(x + 1, y ) ?: Color(0f,0f,0f,1f), thisTileOpacity) + /* * */ambientAccumulator = ambientAccumulator maxBlend darkenColoured(getLightInternal(x , y - 1) ?: Color(0f,0f,0f,1f), thisTileOpacity) + /* * */ambientAccumulator = ambientAccumulator maxBlend darkenColoured(getLightInternal(x , y + 1) ?: Color(0f,0f,0f,1f), thisTileOpacity) + /* * */ambientAccumulator = ambientAccumulator maxBlend darkenColoured(getLightInternal(x - 1, y ) ?: Color(0f,0f,0f,1f), thisTileOpacity) + /* * */ambientAccumulator = ambientAccumulator maxBlend darkenColoured(getLightInternal(x + 1, y ) ?: Color(0f,0f,0f,1f), thisTileOpacity) return lightLevelThis maxBlend ambientAccumulator } @@ -306,7 +317,7 @@ object LightmapRenderer { } private fun getLightForOpaque(x: Int, y: Int): Color? { // ...so that they wouldn't appear too dark - val l = getLight(x, y) + val l = getLightInternal(x, y) if (l == null) return null if (BlockCodex[world.getTileFromTerrain(x, y)].isSolid) { @@ -396,12 +407,6 @@ object LightmapRenderer { 1f) } - fun scaleColour(data: Int, scale: Float): RGB10 { - return ((data.r() * scale).clampOne() * CHANNEL_MAX).round().shl(20) or - ((data.g() * scale).clampOne() * CHANNEL_MAX).round().shl(10) or - ((data.b() * scale).clampOne() * CHANNEL_MAX).round() - } - private fun scaleSqrt2(data: Color): Color { return Color( data.r * 1.41421356f, @@ -410,8 +415,6 @@ object LightmapRenderer { 1f) } - private val scaleSqrt2Lookup = IntArray(MUL, { it -> minOf(MUL - 1, (it * 1.41421356).roundInt()) }) - /** * Add each channel's RGB value. * @@ -450,13 +453,13 @@ object LightmapRenderer { * @param brighten (-1.0 - 1.0) negative means darkening * @return processed colour */ - fun alterBrightnessUniform(data: RGB10, brighten: Float): RGB10 { + fun alterBrightnessUniform(data: Color, brighten: Float): Color { return Color( - data.r() + brighten, - data.g() + brighten, - data.b() + brighten, + data.r + brighten, + data.g + brighten, + data.b + brighten, 1f - ).toRGB10() + ) } /** Get each channel from two RGB values, return new RGB that has max value of each channel @@ -473,17 +476,17 @@ object LightmapRenderer { } - inline fun RGB10.rawR() = this.ushr(20) and 1023 + /*inline fun RGB10.rawR() = this.ushr(20) and 1023 inline fun RGB10.rawG() = this.ushr(10) and 1023 inline fun RGB10.rawB() = this and 1023 /** 0.0 - 1.0 for 0-1023 (0.0 - 0.25 for 0-255) */ inline fun RGB10.r(): Float = this.rawR() / CHANNEL_MAX_FLOAT inline fun RGB10.g(): Float = this.rawG() / CHANNEL_MAX_FLOAT - inline fun RGB10.b(): Float = this.rawB() / CHANNEL_MAX_FLOAT + inline fun RGB10.b(): Float = this.rawB() / CHANNEL_MAX_FLOAT*/ - inline fun constructRGBFromInt(r: Int, g: Int, b: Int): RGB10 { + /*inline fun constructRGBFromInt(r: Int, g: Int, b: Int): RGB10 { //if (r !in 0..CHANNEL_MAX) throw IllegalArgumentException("Red: out of range ($r)") //if (g !in 0..CHANNEL_MAX) throw IllegalArgumentException("Green: out of range ($g)") //if (b !in 0..CHANNEL_MAX) throw IllegalArgumentException("Blue: out of range ($b)") @@ -491,7 +494,7 @@ object LightmapRenderer { return r.shl(20) or g.shl(10) or b - } + }*/ /*inline fun constructRGBFromFloat(r: Float, g: Float, b: Float): RGB10 { //if (r < 0 || r > CHANNEL_MAX_DECIMAL) throw IllegalArgumentException("Red: out of range ($r)") @@ -509,9 +512,8 @@ object LightmapRenderer { fun Float.clampOne() = if (this < 0) 0f else if (this > 1) 1f else this fun Float.clampChannel() = if (this > CHANNEL_MAX_DECIMAL) CHANNEL_MAX_DECIMAL else this - inline fun getValueFromMap(x: Int, y: Int): Color? = getLight(x, y) fun getHighestRGB(x: Int, y: Int): Float? { - val value = getLight(x, y) + val value = getLightInternal(x, y) if (value == null) return null else @@ -636,7 +638,7 @@ object LightmapRenderer { 1f ) - data class Lantern(val posX: Int, val posY: Int, val luminosity: Int) + data class Lantern(val posX: Int, val posY: Int, val luminosity: Color) private fun Color.nonZero() = this.r != 0f || this.g != 0f || this.b != 0f @@ -650,9 +652,9 @@ object LightmapRenderer { // excluiding overscans; only reckon echo lights for (y in overscan_open..render_height + overscan_open + 1) { for (x in overscan_open..render_width + overscan_open + 1) { - reds[lightmap[y][x].r.times(MUL).floorInt()] += 1 - greens[lightmap[y][x].g.times(MUL).floorInt()] += 1 - blues[lightmap[y][x].b.times(MUL).floorInt()] += 1 + reds [minOf(CHANNEL_MAX, lightmap[y][x].r.times(MUL).floorInt())] += 1 + greens[minOf(CHANNEL_MAX, lightmap[y][x].g.times(MUL).floorInt())] += 1 + blues [minOf(CHANNEL_MAX, lightmap[y][x].b.times(MUL).floorInt())] += 1 } } return Histogram(reds, greens, blues) @@ -714,8 +716,3 @@ object LightmapRenderer { return (1f - scale) * startValue + scale * endValue } } - - -fun RGB10.toColor(): Color { - return Color(this.r(), this.g(), this.b(), 1f) -}