the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#include "stdafx.h"
2#include "net.minecraft.world.level.newbiome.layer.h"
3#include "net.minecraft.world.level.h"
4#include "BiomeOverrideLayer.h"
5
6#ifdef __PSVITA__
7// AP - this is used to perform fast 64bit divides of known values
8#include "..\Minecraft.Client\PSVita\PSVitaExtras\libdivide.h"
9
10libdivide::divider<long long> fast_d2(2);
11libdivide::divider<long long> fast_d3(3);
12libdivide::divider<long long> fast_d4(4);
13libdivide::divider<long long> fast_d5(5);
14libdivide::divider<long long> fast_d6(6);
15libdivide::divider<long long> fast_d7(7);
16libdivide::divider<long long> fast_d10(10);
17#endif
18
19LayerArray Layer::getDefaultLayers(__int64 seed, LevelType *levelType)
20{
21 // 4J - Some changes moved here from 1.2.3. Temperature & downfall layers are no longer created & returned, and a debug layer is isn't.
22 // For reference with regard to future merging, things NOT brought forward from the 1.2.3 version are new layer types that we
23 // don't have yet (shores, swamprivers, region hills etc.)
24 shared_ptr<Layer>islandLayer = shared_ptr<Layer>(new IslandLayer(1));
25 islandLayer = shared_ptr<Layer>(new FuzzyZoomLayer(2000, islandLayer));
26 islandLayer = shared_ptr<Layer>(new AddIslandLayer(1, islandLayer));
27 islandLayer = shared_ptr<Layer>(new ZoomLayer(2001, islandLayer));
28 islandLayer = shared_ptr<Layer>(new AddIslandLayer(2, islandLayer));
29 islandLayer = shared_ptr<Layer>(new AddSnowLayer(2, islandLayer));
30 islandLayer = shared_ptr<Layer>(new ZoomLayer(2002, islandLayer));
31 islandLayer = shared_ptr<Layer>(new AddIslandLayer(3, islandLayer));
32 islandLayer = shared_ptr<Layer>(new ZoomLayer(2003, islandLayer));
33 islandLayer = shared_ptr<Layer>(new AddIslandLayer(4, islandLayer));
34// islandLayer = shared_ptr<Layer>(new AddMushroomIslandLayer(5, islandLayer)); // 4J - old position of mushroom island layer
35
36 int zoomLevel = 4;
37 if (levelType == LevelType::lvl_largeBiomes)
38 {
39 zoomLevel = 6;
40 }
41
42 shared_ptr<Layer> riverLayer = islandLayer;
43 riverLayer = ZoomLayer::zoom(1000, riverLayer, 0);
44 riverLayer = shared_ptr<Layer>(new RiverInitLayer(100, riverLayer));
45 riverLayer = ZoomLayer::zoom(1000, riverLayer, zoomLevel + 2);
46 riverLayer = shared_ptr<Layer>(new RiverLayer(1, riverLayer));
47 riverLayer = shared_ptr<Layer>(new SmoothLayer(1000, riverLayer));
48
49 shared_ptr<Layer> biomeLayer = islandLayer;
50 biomeLayer = ZoomLayer::zoom(1000, biomeLayer, 0);
51 biomeLayer = shared_ptr<Layer>(new BiomeInitLayer(200, biomeLayer, levelType));
52
53 biomeLayer = ZoomLayer::zoom(1000, biomeLayer, 2);
54 biomeLayer = shared_ptr<Layer>(new RegionHillsLayer(1000, biomeLayer));
55
56 for (int i = 0; i < zoomLevel; i++)
57 {
58 biomeLayer = shared_ptr<Layer>(new ZoomLayer(1000 + i, biomeLayer));
59
60 if (i == 0) biomeLayer = shared_ptr<Layer>(new AddIslandLayer(3, biomeLayer));
61
62 if (i == 0)
63 {
64 // 4J - moved mushroom islands to here. This skips 3 zooms that the old location of the add was, making them about 1/8 of the original size. Adding
65 // them at this scale actually lets us place them near enough other land, if we add them at the same scale as java then they have to be too far out to see for
66 // the scale of our maps
67 biomeLayer = shared_ptr<Layer>(new AddMushroomIslandLayer(5, biomeLayer));
68 }
69
70 if (i == 1 )
71 {
72 // 4J - now expand mushroom islands up again. This does a simple region grow to add a new mushroom island element when any of the neighbours are also mushroom islands.
73 // This helps make the islands into nice compact shapes of the type that are actually likely to be able to make an island out of the sea in a small space. Also
74 // helps the shore layer from doing too much damage in shrinking the islands we are making
75 biomeLayer = shared_ptr<Layer>(new GrowMushroomIslandLayer(5, biomeLayer));
76 // Note - this reduces the size of mushroom islands by turning their edges into shores. We are doing this at i == 1 rather than i == 0 as the original does
77 biomeLayer = shared_ptr<Layer>(new ShoreLayer(1000, biomeLayer));
78
79 biomeLayer = shared_ptr<Layer>(new SwampRiversLayer(1000, biomeLayer));
80 }
81 }
82
83 biomeLayer = shared_ptr<Layer>(new SmoothLayer(1000, biomeLayer));
84
85 biomeLayer = shared_ptr<Layer>(new RiverMixerLayer(100, biomeLayer, riverLayer));
86
87#ifndef _CONTENT_PACKAGE
88#ifdef _BIOME_OVERRIDE
89 if(app.DebugSettingsOn() && app.GetGameSettingsDebugMask(ProfileManager.GetPrimaryPad())&(1L<<eDebugSetting_EnableBiomeOverride))
90 {
91 biomeLayer = shared_ptr<BiomeOverrideLayer>(new BiomeOverrideLayer(1));
92 }
93#endif
94#endif
95
96 shared_ptr<Layer> debugLayer = biomeLayer;
97
98 shared_ptr<Layer>zoomedLayer = shared_ptr<Layer>(new VoronoiZoom(10, biomeLayer));
99
100 biomeLayer->init(seed);
101 zoomedLayer->init(seed);
102
103 LayerArray result(3);
104 result[0] = biomeLayer;
105 result[1] = zoomedLayer;
106 result[2] = debugLayer;
107 return result;
108}
109
110Layer::Layer(__int64 seedMixup)
111{
112 parent = nullptr;
113
114 this->seedMixup = seedMixup;
115 this->seedMixup *= this->seedMixup * 6364136223846793005l + 1442695040888963407l;
116 this->seedMixup += seedMixup;
117 this->seedMixup *= this->seedMixup * 6364136223846793005l + 1442695040888963407l;
118 this->seedMixup += seedMixup;
119 this->seedMixup *= this->seedMixup * 6364136223846793005l + 1442695040888963407l;
120 this->seedMixup += seedMixup;
121}
122
123void Layer::init(__int64 seed)
124{
125 this->seed = seed;
126 if (parent != NULL) parent->init(seed);
127 this->seed *= this->seed * 6364136223846793005l + 1442695040888963407l;
128 this->seed += seedMixup;
129 this->seed *= this->seed * 6364136223846793005l + 1442695040888963407l;
130 this->seed += seedMixup;
131 this->seed *= this->seed * 6364136223846793005l + 1442695040888963407l;
132 this->seed += seedMixup;
133}
134
135void Layer::initRandom(__int64 x, __int64 y)
136{
137 rval = seed;
138 rval *= rval * 6364136223846793005l + 1442695040888963407l;
139 rval += x;
140 rval *= rval * 6364136223846793005l + 1442695040888963407l;
141 rval += y;
142 rval *= rval * 6364136223846793005l + 1442695040888963407l;
143 rval += x;
144 rval *= rval * 6364136223846793005l + 1442695040888963407l;
145 rval += y;
146}
147
148int Layer::nextRandom(int max)
149{
150#ifdef __PSVITA__
151 // AP - 64bit mods are very slow on Vita. Replaced with a divide/mult for general case and a fast divide library for specific numbers
152 // todo - this can sometimes yield a different number to the original. There's a strange bug sometimes with Vita where if the line
153 // "result = (int) ((rval >> 24) % max);" is done twice in a row 'result' will not be the same. Need to speak to Sony about that
154 // Also need to compare level against a different platform using the same seed
155 int result;
156 long long temp = rval;
157 temp >>= 24;
158 if( max == 2 )
159 {
160 result = temp-(temp/fast_d2)*2;
161 }
162 else if( max == 3 )
163 {
164 result = temp-(temp/fast_d3)*3;
165 }
166 else if( max == 4 )
167 {
168 result = temp-(temp/fast_d4)*4;
169 }
170 else if( max == 5 )
171 {
172 result = temp-(temp/fast_d5)*5;
173 }
174 else if( max == 6 )
175 {
176 result = temp-(temp/fast_d6)*6;
177 }
178 else if( max == 7 )
179 {
180 result = temp-(temp/fast_d7)*7;
181 }
182 else if( max == 10 )
183 {
184 result = temp-(temp/fast_d10)*10;
185 }
186 else
187 {
188 result = temp-(temp/max)*max;
189 }
190#else
191
192 int result = (int) ((rval >> 24) % max);
193#endif
194
195 if (result < 0) result += max;
196 rval *= rval * 6364136223846793005l + 1442695040888963407l;
197 rval += seed;
198 return result;
199}