sp614x / optifine

1.81k stars 418 forks source link

[1.16] Colourmap Inconsistencies in 1.16+ #5471

Open SkaliberWasTaken opened 3 years ago

SkaliberWasTaken commented 3 years ago

Nether and End Inconsistencies image OptiFine currently uses set values to control the colour of the fog in the Nether and End, however, the overworld uses a colourmap, which actually includes columns for the biomes from the Nether and End in it in the first place (see below image).

fog0 Now that the Nether has multiple distinct biomes (and with the end having had multiple biomes for some time now) it'd make more sense for "fog.x=" to be removed entirely, and for the biomes in the dimensions other than the overworld to also use a fog colourmap. Given the naming convention of fog0.png, these colourmaps would presumably be fog1.png and fog-1.png.

Impossible Datapack Biomes It's also worth noting that the new system introduced in datapacks in 1.16 that allows creators to introduce additional dimensions and biomes completely breaks OptiFine's colourmap system.

Additional biomes introduce a seemingly random biome ID, and therefore a random column within a typical OptiFine grid colourmap. I propose a new system, in which we can specify individual biomes by name using a .properties file, so that we can include datapack (and even modded) biomes within our resource packs. The current system means that it's impossible to predict which column of a grid colourmap a datapack or modded biome will use, as the game assigns them seemingly randomly based on the number of mods or datapacks installed.

The new colourmaps would function much like the current ones, however, instead of the column of the grid representing the biomes numerical ID (from 0 to 255) it would simply be a single pixel wide, with the accompanying .properties file having the name of the datapack, and custom biome ID. An example can be seen below: image

1.17 Changes Required On a final note, the changes to world height in 1.17 will mean that colourmaps will have to be 384x256.

ghost commented 3 years ago

384x256 value has to be customizable. The world height has a theoretical 4096 height limit. Not that I would ever go that high but I do plan to use 512.

SkaliberWasTaken commented 3 years ago

I completely agree, I honestly think that a new system should be implemented allowing for custom heights, and custom namespace IDs in the .properties file.

ghost commented 3 years ago

And actually, it would be better to have the ability to expand horizontally as well if for example you have a pack that changes more than 256 biomes (not that anyone would.. but a safety net in the end)

ewanhowell5195 commented 3 years ago

please note that with datapacks you can make worlds over 4k blocks tall, so that would mean a 4k tall image????

ghost commented 3 years ago

Yes.

FoonyFoxacoon commented 2 years ago

On the topic of custom biomes, given that each biome has a set namespaced ID (unlike the numerical IDs, which are randomised every time you open the game), I suggest maybe adding two lines for each biome in the .properties file to assign a namespaced ID to a column number. It could work something like this:

biome.1=<biome id>
column.1=<column #>

biome.2=<biome id>
column.2=<column #>

Biomes that are not specified would default to the column based on their numerical ID, how it currently works.

This could also allow vanilla biomes to be moved around on the grid, as well as allow multiple biomes to use the same column.

ewanhowell5195 commented 2 years ago

numerical ids are not randomised each time you open the game. here is a list of the mappings

       Biome                               ID

minecraft:the void              0
minecraft:plains                1
minecraft:sunflower_plains          2
minecraft:snowy_plains              3
minecraft:ice_spikes                4
minecraft:desert                5
minecraft:swamp                 6
minecraft:forest                7
minecraft:flower_forest             8
minecraft:birch_forest              9
minecraft:dark_forest               10
minecraft:old_growth_birch_forest       11
minecraft:old_growth_pine_taiga         12
minecraft:old_growth_spruce_taiga       13
minecraft:taiga                 14
minecraft:snowy_taiga               15
minecraft:savanna               16
minecraft:savanna_plateau           17
minecraft:windswept_hills           18
minecraft:windswept_gravelly_hills      19
minecraft:windswept_forest          20
minecraft:windswept_savanna         21
minecraft:jungle                22
minecraft:sparse_jungle             23
minecraft:bamboo_jungle             24
minecraft:badlands              25
minecraft:eroded_badlands           26
minecraft:wooded_balands            27
minecraft:maedow                28
minecraft:grove                 29
minecraft:snowy_slopes              30
minecraft:frozen_peaks              31
minecraft:jagged_peaks              32
minecraft:stoney_peaks              33
minecraft:river                 34
minecraft:frozen_river              35
minecraft:beach                 36
minecraft:snowy_beach               37
minecraft:stony_shore               38
minecraft:warm_ocean                39
minecraft:lukewarm_ocean            40
minecraft:deep_lukewarm_ocean           41
minecraft:ocean                 42
minecraft:deep_ocean                43
minecraft:cold_ocean                44
minecraft:deep_cold_ocean           45
minecraft:frozen_ocean              46
minecraft:deep_frozen_ocean         47
minecraft:mushroom_fields           48
minecraft:dripstone_caves           49
minecraft:lush_caves                50
minecraft:nether_wastes             51
minecraft:warped_forest             52
minecraft:crimson_forest            53
minecraft:soul_sand_valley          54
minecraft:basalt_deltas             55
minecraft:the_end               56
minecraft:end_highlands             57
minecraft:end_midlands              58
minecraft:small_end_island          59
minecraft:end_barrens               60
SkaliberWasTaken commented 2 years ago

You should know I am very much aware of the vanilla biome IDs, and if you read the post, it clearly states that this issue only comes into play when datapacks (and mods) add new biomes to the game. They don't use this fixed numerical ID system which optifine is reliant on, but a named system in the format of "datapack:biome_name".

FoonyFoxacoon commented 2 years ago

Yep, I was referring strictly to non-vanilla biomes when I said that the numerical IDs are randomised.