1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
|
//#define SHADER_FEATURES
using SharpPluginLoader.Core.Configuration;
namespace WorldTuningTool
{
using static Plugin;
public enum StageExt : uint
{
Global = 0,
InfinityOfNothingHandler = 100,
AncientForest = 101,
WildspireWaste = 102,
CoralHighlands = 103,
RottenVale = 104,
ElderRecess = 105,
GreatRavine = 106,
GreatRavineStory = 107,
HoarfrostReach = 108,
GuidingLands = 109,
InfinityOfNothing = 200,
SpecialArena = 201,
ChallengeArena = 202,
Astera = 301,
AsteraHub = 302,
ResearchBase = 303,
Seliana = 305,
SelianaHub = 306,
Opening = 401,
Everstream = 403,
ConfluenceOfFates = 405,
AncientForestOpening = 406,
CharacterCreation = 407,
DebugMap = 408,
ElDorado = 409,
SelianaSupplyCache = 411,
OriginIsleNergigante = 412,
OriginIsleSharaIshvalda = 413,
SecludedValley = 415,
AlatreonStage = 416,
CastleSchrade = 417,
LivingQuarters = 501,
PrivateQuarters = 502,
PrivateSuite = 503,
TrainingCamp = 504,
ChamberOfFive = 505,
SelianaRoom = 506
}
public class Config : IConfig
{
public String Name => "WorldTuningTool";
public String Version => "1.0";
public static string StageToString(StageExt stage)
{
switch (stage)
{
case StageExt.Global:
return "Global";
case StageExt.InfinityOfNothingHandler:
return "Infinity Of Nothing Handler";
case StageExt.AncientForest:
return "Ancient Forest";
case StageExt.WildspireWaste:
return "Wildspire Waste";
case StageExt.CoralHighlands:
return "Coral Highlands";
case StageExt.RottenVale:
return "Rotten Vale";
case StageExt.ElderRecess:
return "Elder Recess";
case StageExt.GreatRavine:
return "Great Ravine";
case StageExt.GreatRavineStory:
return "Great Ravine Story";
case StageExt.HoarfrostReach:
return "Hoarfrost Reach";
case StageExt.GuidingLands:
return "Guiding Lands";
case StageExt.InfinityOfNothing:
return "Infinity Of Nothing";
case StageExt.SpecialArena:
return "Special Arena";
case StageExt.ChallengeArena:
return "Challenge Arena";
case StageExt.Astera:
return "Astera";
case StageExt.AsteraHub:
return "Astera Hub";
case StageExt.ResearchBase:
return "Research Base";
case StageExt.Seliana:
return "Seliana";
case StageExt.SelianaHub:
return "Seliana Hub";
case StageExt.Opening:
return "Opening";
case StageExt.Everstream:
return "Everstream";
case StageExt.ConfluenceOfFates:
return "Confluence Of Fates";
case StageExt.AncientForestOpening:
return "Ancient Forest (Opening)";
case StageExt.CharacterCreation:
return "Character Creation";
case StageExt.DebugMap:
return "Debug Map";
case StageExt.ElDorado:
return "El Dorado";
case StageExt.SelianaSupplyCache:
return "Seliana Supply Cache";
case StageExt.OriginIsleNergigante:
return "Origin Isle Nergigante";
case StageExt.OriginIsleSharaIshvalda:
return "Origin Isle Shara Ishvalda";
case StageExt.SecludedValley:
return "Secluded Valley";
case StageExt.AlatreonStage:
return "Alatreon Stage";
case StageExt.CastleSchrade:
return "Castle Schrade";
case StageExt.LivingQuarters:
return "Living Quarters";
case StageExt.PrivateQuarters:
return "Private Quarters";
case StageExt.PrivateSuite:
return "Private Suite";
case StageExt.TrainingCamp:
return "Training Camp";
case StageExt.ChamberOfFive:
return "Chamber Of Five";
case StageExt.SelianaRoom:
return "Seliana Room";
}
return $"(Error: {stage})";
}
public static readonly StageExt[] OrderedStages =
{
StageExt.Global,
StageExt.Astera,
StageExt.AsteraHub,
StageExt.ResearchBase,
StageExt.Seliana,
StageExt.SelianaHub,
StageExt.LivingQuarters,
StageExt.PrivateQuarters,
StageExt.PrivateSuite,
StageExt.SelianaRoom,
StageExt.TrainingCamp,
StageExt.AncientForest,
StageExt.WildspireWaste,
StageExt.CoralHighlands,
StageExt.RottenVale,
StageExt.ElderRecess,
StageExt.GreatRavine,
StageExt.GreatRavineStory,
StageExt.HoarfrostReach,
StageExt.GuidingLands,
StageExt.SpecialArena,
StageExt.ChallengeArena,
StageExt.Everstream,
StageExt.ConfluenceOfFates,
StageExt.ElDorado,
StageExt.SelianaSupplyCache,
StageExt.OriginIsleNergigante,
StageExt.OriginIsleSharaIshvalda,
StageExt.SecludedValley,
StageExt.AlatreonStage,
StageExt.CastleSchrade,
StageExt.ChamberOfFive,
StageExt.Opening,
StageExt.AncientForestOpening,
StageExt.CharacterCreation,
StageExt.InfinityOfNothing,
StageExt.InfinityOfNothingHandler,
StageExt.DebugMap
};
public struct PatchConfig
{
#if SHADER_FEATURES
public bool FullResolutionSSLR { get; set; } = false;
public bool VolumeUpsampleNoLinear { get; set; } = false;
public bool FXAAMaxQualityPreset { get; set; } = false;
public bool SkinAllowNegativeWetness { get; set; } = false;
#endif
public bool FullResolutionVolumeBlur { get; set; } = false;
public bool HigherThanHighestVolumeRendering { get; set; } = false;
public bool DisableLODLimits { get; set; } = false;
public bool CharacterCreatorFaceRendering { get; set; } = false;
public bool LargerFoliageSwayRange { get; set; } = false;
public bool DisableReducedRateAnimations { get; set; } = false;
public PatchConfig() {}
}
public static Dictionary<string, string> OldParameterNames = new Dictionary<string, string>()
{
{ "Sunlight Group", "Primary Light Group" },
{ "Sunlight Direction", "Primary Light Direction" },
{ "Sunlight Color", "Primary Light Color" },
{ "Sunlight Intensity", "Primary Light Intensity" },
{ "Sunlight Is Primary", "Primary Light Is Primary" },
{ "Projection Scale", "Primary Light Projection Scale" },
{ "Projection Offset Speed", "Primary Light Projection Offset Speed" },
{ "Projection Up", "Primary Light Projection Up" },
{ "Do Volumetric", "Primary Light Do Volumetric" },
{ "Shadow Cast", "Primary Shadow Cast" },
{ "Shadow Map Size", "Primary Shadow Map Size" },
{ "Shadow Near Clip Distance", "Primary Shadow Near Clip Distance" },
{ "Shadow Cascade Mode", "Primary Shadow Cascade Mode" },
{ "Shadow Cascade 2Way Bias", "Primary Shadow Cascade 2Way Bias" },
{ "Shadow Distance", "Primary Shadow Cascade Distance" },
{ "Shadow Backforward Distance", "Primary Shadow Cascade Backforward Distance" },
{ "Shadow Is Fixed Fov Mode", "Primary Shadow Is Fixed Fov Mode" },
{ "Shadow Fov", "Primary Shadow Fov" },
{ "Shadow Is Discretization Fov Mode", "Primary Shadow Is Discretization Fov Mode" },
{ "Shadow Discretization Angle", "Primary Shadow Discretization Angle" },
{ "Shadow Distribution", "Primary Shadow Cascade Distribution" },
{ "Cascade Manual Split", "Primary Shadow Cascade Manual Split" },
{ "Cascade Manual Split Distance[0]", "Primary Shadow Cascade Manual Split Distance[0]" },
{ "Cascade Manual Split Distance[1]", "Primary Shadow Cascade Manual Split Distance[1]" },
{ "Cascade Manual Split Distance[2]", "Primary Shadow Cascade Manual Split Distance[2]" },
{ "Shadow Sloped Depth Bias", "Primary Shadow Sloped Depth Bias" },
{ "Shadow Depth Bias", "Primary Shadow Depth Bias" },
{ "Shadow Max Depth Bias", "Primary Shadow Max Depth Bias" },
{ "Cascade Individual Shadow Bias", "Primary Shadow Cascade Individual Shadow Bias" },
{ "Cascade Depth Bias[0]", "Primary Shadow Cascade Depth Bias[0]" },
{ "Cascade Sloped Depth Bias[0]", "Primary Shadow Cascade Sloped Depth Bias[0]" },
{ "Cascade Max Depth Bias[0]", "Primary Shadow Cascade Max Depth Bias[0]" },
{ "Cascade Depth Bias[1]", "Primary Shadow Cascade Depth Bias[1]" },
{ "Cascade Sloped Depth Bias[1]", "Primary Shadow Cascade Sloped Depth Bias[1]" },
{ "Cascade Max Depth Bias[1]", "Primary Shadow Cascade Max Depth Bias[1]" },
{ "Cascade Depth Bias[2]", "Primary Shadow Cascade Depth Bias[2]" },
{ "Cascade Sloped Depth Bias[2]", "Primary Shadow Cascade Sloped Depth Bias[2]" },
{ "Cascade Max Depth Bias[2]", "Primary Shadow Cascade Max Depth Bias[2]" },
{ "Light Tone Map Type", "Tone Map Type" },
{ "Light Compute Luminance", "Tone Map Compute Luminance" },
{ "Light Luminance Version", "Tone Map Luminance Version" },
{ "Light Shoulder Strength", "Tone Map Shoulder Strength" },
{ "Light Linear Strength", "Tone Map Linear Strength" },
{ "Light Linear Angle", "Tone Map Linear Angle" },
{ "Light Toe Strength", "Tone Map Toe Strength" },
{ "Light Toe Num", "Tone Map Toe Num" },
{ "Light Toe Denum", "Tone Map Toe Denum" },
{ "Light White Point", "Tone Map White Point" },
{ "Light LUT Blend", "Color Grading LUT Blend" },
{ "Light Vfx LUT Blend", "Color Grading Vfx LUT Blend" },
{ "Light Enable Color Grading", "Color Grading Enable" },
{ "Light Is Linear To PQ", "Color Grading Is Linear To PQ" },
{ "Light Is PQ To Linear", "Color Grading Is PQ To Linear" }
};
public bool DisableLightsFeature { get; set; } = false;
public PatchConfig Patches { get; set; } = new PatchConfig();
public Dictionary<string, List<Override>> Globals { get; set; } = new Dictionary<string, List<Override>>();
public string SelectedGlobal { get; set; } = "";
public Dictionary<StageExt, List<Override>> Overrides { get; set; } = new Dictionary<StageExt, List<Override>>();
public Dictionary<string, List<Override>> Sets { get; set; } = new Dictionary<string, List<Override>>();
}
}
|