-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathConfig.cs
341 lines (253 loc) · 13.6 KB
/
Config.cs
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
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
namespace DaLion.Overhaul.Modules.Combat;
#region using directives
using System.Collections.Generic;
using DaLion.Overhaul.Modules.Combat.Enums;
using Microsoft.Xna.Framework;
using Newtonsoft.Json;
using StardewModdingAPI.Utilities;
#endregion using directives
/// <summary>The user-configurable settings for CMBT.</summary>
public sealed class Config : Shared.Configs.Config
{
#region dropdown enums
/// <summary>The style used to draw forged gemstones.</summary>
public enum ForgeSocketStyle
{
/// <summary>A diamond-shaped icon.</summary>
Diamond,
/// <summary>A more rounded icon.</summary>
Round,
/// <summary>Shaped like an iridium ore.</summary>
Iridium,
}
/// <summary>The position of the forged gemstones.</summary>
public enum ForgeSocketPosition
{
/// <summary>The normal position, immediately above the item's description.</summary>
Standard,
/// <summary>Above the horizontal separator, immediately below the item's name and level.</summary>
AboveSeparator,
}
/// <summary>The style used to display stat bonuses in weapon tooltips.</summary>
public enum TooltipStyle
{
/// <summary>Display the absolute value of the stat, minus it's default value for the weapon type.</summary>
Absolute,
/// <summary>Display the relative value of the stat, with respect to the default value for the weapon type.</summary>
Relative,
/// <summary>The vanilla confusing nonsense.</summary>
Vanilla,
}
/// <summary>The difficulty level of the proven conditions for the virtue trials.</summary>
public enum Difficulty
{
/// <summary>Easy.</summary>
Easy,
/// <summary>Medium.</summary>
Medium,
/// <summary>Hard.</summary>
Hard,
}
/// <summary>The texture that should be used as the resonance light source.</summary>
public enum LightsourceTexture
{
/// <summary>The default, Vanilla sconce light texture.</summary>
Sconce = 4,
/// <summary>A more opaque sconce light texture.</summary>
Stronger = 100,
/// <summary>A floral-patterned light texture.</summary>
Patterned = 101,
}
#endregion dropdown enums
#region general combat
/// <summary>Gets a value indicating whether to enable status conditions like Bleed and Stun on enemies.</summary>
[JsonProperty]
public bool EnableStatusConditions { get; internal set; } = true;
/// <summary>Gets a value indicating whether to overhaul the knockback stat adding collision damage.</summary>
[JsonProperty]
public bool EnableKnockbackDamage { get; internal set; } = true;
/// <summary>Gets a value indicating whether back attacks gain double crit. chance.</summary>
[JsonProperty]
public bool CriticalBackAttacks { get; internal set; } = true;
/// <summary>Gets a value indicating whether to overhaul the defense stat with better scaling and other features.</summary>
[JsonProperty]
public bool NewResistanceFormula { get; internal set; } = true;
#endregion general combat
#region items
/// <summary>Gets a value indicating whether to apply all features relating to the weapon and slingshot re-balance, including weapon tiers, shops, Mine chests and monster drops.</summary>
[JsonProperty]
public bool EnableWeaponOverhaul { get; internal set; } = true;
#region melee
/// <summary>Gets a value indicating whether to replace vanilla weapon spam with a more strategic combo system.</summary>
[JsonProperty]
public bool EnableComboHits { get; internal set; } = true;
/// <summary>Gets the number of hits in each weapon type's combo.</summary>
[JsonProperty]
public Dictionary<WeaponType, int> ComboHitsPerWeapon { get; internal set; } = new()
{
{ WeaponType.StabbingSword, 4 }, { WeaponType.DefenseSword, 4 }, { WeaponType.Club, 2 },
};
/// <summary>Gets a value indicating whether to keep swiping while the "use tool" key is held.</summary>
[JsonProperty]
public bool SwipeHold { get; internal set; } = true;
/// <summary>Gets a value indicating whether replace the defensive special move of some swords with an offensive lunge move.</summary>
[JsonProperty]
public bool EnableStabbingSwords { get; internal set; } = true;
/// <summary>Gets a set of user-defined modded swords which should be treated as Stabby swords.</summary>
[JsonProperty]
public string[] StabbingSwords { get; internal set; } =
{
"Bone Sword",
"Steel Smallsword",
"Cutlass",
"Rapier",
"Steel Falchion",
"Pirate's Sword",
"Lava Katana",
"Dragontooth Cutlass",
"Blade of Ruin",
"Galaxy Sword",
"Infinity Blade",
"Strawblaster",
};
/// <summary>Gets a value indicating whether defense should improve parry damage.</summary>
[JsonProperty]
public bool DefenseImprovesParry { get; internal set; } = true;
/// <summary>Gets a value indicating whether to guarantee smash crit on Duggies and guarantee miss on gliders.</summary>
[JsonProperty]
public bool GroundedClubSmash { get; internal set; } = true;
#endregion melee
#region ranged
/// <summary>Gets a value indicating whether to allow slingshots to deal critical damage and be affected by critical modifiers.</summary>
[JsonProperty]
public bool EnableRangedCriticalHits { get; internal set; } = true;
/// <summary>Gets a value indicating whether to enable the custom slingshot stun smack special move.</summary>
[JsonProperty]
public bool EnableSlingshotSpecialMove { get; internal set; } = true;
/// <summary>Gets a value indicating whether to allow forging the Infinity Slingshot.</summary>
[JsonProperty]
public bool EnableInfinitySlingshot { get; internal set; } = true;
/// <summary>Gets a value indicating whether projectiles should not be useless for the first 100ms.</summary>
[JsonProperty]
public bool RemoveSlingshotGracePeriod { get; internal set; } = true;
#endregion ranged
#region rings
/// <summary>Gets a value indicating whether to improve certain underwhelming rings.</summary>
[JsonProperty]
public bool RebalancedRings { get; internal set; } = true;
/// <summary>Gets a value indicating whether to add new combat recipes for crafting gemstone rings.</summary>
[JsonProperty]
public bool CraftableGemstoneRings { get; internal set; } = true;
/// <summary>Gets a value indicating whether to replace the Iridium Band recipe and effect.</summary>
[JsonProperty]
public bool EnableInfinityBand { get; internal set; } = true;
/// <summary>Gets a value indicating whether to allow gemstone resonance to take place.</summary>
[JsonProperty]
public bool EnableResonances { get; internal set; } = true;
/// <summary>Gets a value indicating whether the resonance glow should inherit the root note's color.</summary>
[JsonProperty]
public bool ColorfulResonances { get; internal set; } = true;
/// <summary>Gets a value indicating the texture that should be used as the resonance light source.</summary>
[JsonProperty]
public LightsourceTexture ResonanceLightsourceTexture { get; internal set; } = LightsourceTexture.Sconce;
#endregion rings
/// <summary>Gets a value indicating whether to improve certain underwhelming gemstone effects.</summary>
[JsonProperty]
public bool RebalancedGemstones { get; internal set; } = true;
/// <summary>Gets a value indicating whether to replace vanilla weapon enchantments with all-new melee and ranged enchantments.</summary>
[JsonProperty]
public bool NewPrismaticEnchantments { get; internal set; } = true;
#endregion items
#region quests
/// <summary>Gets a value indicating whether replace the starting Rusty Sword with a Wooden Blade.</summary>
[JsonProperty]
public bool WoodyReplacesRusty { get; internal set; } = true;
/// <summary>Gets a value indicating whether to enable Clint's forging mechanic for Masterwork weapons.</summary>
[JsonProperty]
public bool DwarvenLegacy { get; internal set; } = true;
/// <summary>Gets a value indicating whether replace lame Galaxy and Infinity weapons with something truly legendary.</summary>
[JsonProperty]
public bool EnableHeroQuest { get; internal set; } = true;
/// <summary>Gets a value indicating the number of Iridium Bars required to receive a Galaxy weapon.</summary>
[JsonProperty]
public int IridiumBarsPerGalaxyWeapon { get; internal set; } = 10;
/// <summary>Gets a factor that can be used to reduce the Ruined Blade's damage-over-time effect.</summary>
[JsonProperty]
public float RuinBladeDotMultiplier { get; internal set; } = 1f;
/// <summary>Gets a value indicating whether the Blade of Ruin can be deposited in chests.</summary>
[JsonProperty]
public bool CanStoreRuinBlade { get; internal set; } = false;
/// <summary>Gets a value indicating the difficulty of the proven conditions for each virtue trial.</summary>
[JsonProperty]
public Difficulty HeroQuestDifficulty { get; internal set; } = Difficulty.Medium;
#endregion quests
#region enemies
/// <summary>Gets a summand which is added to the resistance of all monsters (before the multiplier).</summary>
[JsonProperty]
public int MonsterHealthSummand { get; internal set; } = 0;
/// <summary>Gets a summand which is added to the resistance of all monsters (before the multiplier).</summary>
[JsonProperty]
public int MonsterDamageSummand { get; internal set; } = 0;
/// <summary>Gets a summand which is added to the resistance of all monsters (before the multiplier).</summary>
[JsonProperty]
public int MonsterDefenseSummand { get; internal set; } = 1;
/// <summary>Gets a multiplier which allows scaling the health of all monsters.</summary>
[JsonProperty]
public float MonsterHealthMultiplier { get; internal set; } = 1.5f;
/// <summary>Gets a multiplier which allows scaling the damage dealt by all monsters.</summary>
[JsonProperty]
public float MonsterDamageMultiplier { get; internal set; } = 1f;
/// <summary>Gets a multiplier which allows scaling the resistance of all monsters.</summary>
[JsonProperty]
public float MonsterDefenseMultiplier { get; internal set; } = 2f;
/// <summary>Gets a value indicating whether randomizes monster stats to add variability to monster encounters.</summary>
[JsonProperty]
public bool VariedEncounters { get; internal set; } = true;
#endregion enemies
#region controls
/// <summary>Gets a value indicating whether face the current cursor position before swinging your weapon.</summary>
[JsonProperty]
public bool FaceMouseCursor { get; internal set; } = true;
/// <summary>Gets a value indicating whether to allow drifting in the movement direction when swinging weapons.</summary>
[JsonProperty]
public bool SlickMoves { get; internal set; } = true;
/// <summary>Gets a value indicating whether to allow auto-selecting a weapon or slingshot.</summary>
[JsonProperty]
public bool EnableAutoSelection { get; internal set; } = true;
/// <summary>Gets a value indicating how close an enemy must be to auto-select a weapon, in tiles.</summary>
[JsonProperty]
public uint MeleeAutoSelectionRange { get; internal set; } = 2;
/// <summary>Gets a value indicating how close an enemy must be to auto-select a slingshot, in tiles.</summary>
[JsonProperty]
public uint RangedAutoSelectionRange { get; internal set; } = 4;
/// <summary>Gets the chosen key(s) for toggling auto-selection.</summary>
[JsonProperty]
public KeybindList SelectionKey { get; internal set; } = KeybindList.Parse("LeftShift, LeftShoulder");
/// <summary>Gets the <see cref="Color"/> used to indicate tools enabled or auto-selection.</summary>
[JsonProperty]
public Color SelectionBorderColor { get; internal set; } = Color.Magenta;
#endregion controls
#region interface
/// <summary>Gets a value indicating whether to color-code tool names, <see href="https://tvtropes.org/pmwiki/pmwiki.php/Main/ColourCodedForYourConvenience"> for your convenience</see>.</summary>
[JsonProperty]
public bool ColorCodedForYourConvenience { get; internal set; } = true;
/// <summary>Gets a value indicating whether to replace generic Forge text with specific gemstone icons and empty sockets.</summary>
[JsonProperty]
public bool DrawForgeSockets { get; internal set; } = true;
/// <summary>Gets the style of the sprite used to represent gemstone forges in tooltips.</summary>
[JsonProperty]
public ForgeSocketStyle SocketStyle { get; internal set; } = ForgeSocketStyle.Diamond;
/// <summary>Gets the relative position where forge gemstones should be drawn.</summary>
[JsonProperty]
public ForgeSocketPosition SocketPosition { get; internal set; } = ForgeSocketPosition.AboveSeparator;
/// <summary>Gets the style of the tooltips for displaying stat bonuses for weapons.</summary>
[JsonProperty]
public TooltipStyle WeaponTooltipStyle { get; internal set; } = TooltipStyle.Relative;
/// <summary>Gets a value indicating whether to override the draw method to include the currently-equipped ammo.</summary>
[JsonProperty]
public bool DrawCurrentAmmo { get; internal set; } = true;
/// <summary>Gets a value indicating whether to replace the mouse cursor with a bulls-eye while firing.</summary>
[JsonProperty]
public bool BullseyeReplacesCursor { get; internal set; } = true;
#endregion interface
}