Etterna 0.74.4
Loading...
Searching...
No Matches
PlayerOptions.h
1#ifndef PLAYER_OPTIONS_H
2#define PLAYER_OPTIONS_H
3
4class Song;
5class Steps;
6struct lua_State;
7
8#define ONE(arr) \
9 { \
10 for (unsigned Z = 0; Z < ARRAYLEN(arr); ++Z) \
11 (arr)[Z] = 1.0f; \
12 }
13
14#include "GameConstantsAndTypes.h"
15#include "PlayerNumber.h"
16#include "Etterna/Singletons/PrefsManager.h"
17
18enum LifeType
19{
20 LifeType_Bar,
21 LifeType_Battery,
22 LifeType_Time,
23 NUM_LifeType,
24 LifeType_Invalid
25};
26auto
27LifeTypeToString(LifeType cat) -> const std::string&;
28auto
29LifeTypeToLocalizedString(LifeType cat) -> const std::string&;
30LuaDeclareType(LifeType);
31
32enum DrainType
33{
34 DrainType_Normal,
35 DrainType_NoRecover,
36 DrainType_SuddenDeath,
37 NUM_DrainType,
38 DrainType_Invalid
39};
40auto
41DrainTypeToString(DrainType cat) -> const std::string&;
42auto
43DrainTypeToLocalizedString(DrainType cat) -> const std::string&;
44LuaDeclareType(DrainType);
45
48{
49 public:
55 : m_MinTNSToHideNotes(PREFSMAN->m_MinTNSToHideNotes)
56 {
57 m_sNoteSkin = "";
58 ZERO(m_fAccels);
59 ONE(m_SpeedfAccels);
60 ZERO(m_fEffects);
61 ONE(m_SpeedfEffects);
62 ZERO(m_fAppearances);
63 ONE(m_SpeedfAppearances);
64 ZERO(m_fScrolls);
65 ONE(m_SpeedfScrolls);
66 ZERO(m_bTurns);
67 ZERO(m_bTransforms);
68 };
69 void Init();
70 void Approach(const PlayerOptions& other, float fDeltaSeconds);
71 [[nodiscard]] auto GetString(bool bForceNoteSkin = false) const
72 -> std::string;
73 [[nodiscard]] auto GetSavedPrefsString() const
74 -> std::string; // only the basic options that players would want for
75 // every song
76 enum ResetPrefsType
77 {
78 saved_prefs,
79 };
80 void ResetPrefs(ResetPrefsType type);
81 void ResetSavedPrefs() { ResetPrefs(saved_prefs); };
82 void GetMods(std::vector<std::string>& AddTo,
83 bool bForceNoteSkin = false) const;
84 void GetTurnMods(std::vector<std::string>& AddTo);
85 void ResetModsToStringVector(std::vector<std::string> mods);
86 void ResetToggleableMods();
87 void GetLocalizedMods(std::vector<std::string>& AddTo) const;
88 void FromString(const std::string& sMultipleMods);
89 void SetForReplay(bool b) { forReplay = b; }
90 bool GetForReplay() const { return forReplay; }
91 auto FromOneModString(const std::string& sOneMod,
92 std::string& sErrorDetailOut)
93 -> bool; // On error, return
94 // false and optionally
95 // set sErrorDetailOut
96 void ChooseRandomModifiers();
97 // Returns true for modifiers that should invalidate a score or otherwise
98 // make it impossible to calculate Replay info
99 [[nodiscard]] auto ContainsTransformOrTurn() const -> bool;
100
101 [[nodiscard]] auto GetInvalidatingModifiers() const
102 -> std::vector<std::string>;
103
104 // Lua
105 void PushSelf(lua_State* L);
106
107 auto operator==(const PlayerOptions& other) const -> bool;
108 auto operator!=(const PlayerOptions& other) const -> bool
109 {
110 return !operator==(other);
111 }
112 auto operator=(PlayerOptions const& other) -> PlayerOptions&;
113
115 enum Accel
116 {
121 ACCEL_WAVE,
122 ACCEL_EXPAND,
125 NUM_ACCELS
126 };
127 enum Effect
128 {
129 EFFECT_DRUNK,
130 EFFECT_DIZZY,
131 EFFECT_CONFUSION,
132 EFFECT_MINI,
133 EFFECT_TINY,
134 EFFECT_FLIP,
135 EFFECT_INVERT,
136 EFFECT_TORNADO,
137 EFFECT_TIPSY,
138 EFFECT_BUMPY,
139 EFFECT_BEAT,
140 EFFECT_XMODE,
141 EFFECT_TWIRL,
142 EFFECT_ROLL,
143 NUM_EFFECTS
144 };
161 enum Turn
162 {
174 TURN_HRAN_SHUFFLE, // super shuffle but always avoid jacks when possible
175 NUM_TURNS
176 };
177 enum Transform
178 {
179 TRANSFORM_NOHOLDS,
180 TRANSFORM_NOROLLS,
181 TRANSFORM_NOMINES,
182 TRANSFORM_LITTLE,
183 TRANSFORM_WIDE,
184 TRANSFORM_BIG,
185 TRANSFORM_QUICK,
186 TRANSFORM_BMRIZE,
187 TRANSFORM_SKIPPY,
188 TRANSFORM_MINES,
189 TRANSFORM_ATTACKMINES,
190 TRANSFORM_ECHO,
191 TRANSFORM_STOMP,
192 TRANSFORM_JACKJS,
193 TRANSFORM_ANCHORJS,
194 TRANSFORM_ICYWORLD,
195 TRANSFORM_PLANTED,
196 TRANSFORM_FLOORED,
197 TRANSFORM_TWISTER,
198 TRANSFORM_HOLDROLLS,
199 TRANSFORM_NOJUMPS,
200 TRANSFORM_NOHANDS,
201 TRANSFORM_NOLIFTS,
202 TRANSFORM_NOFAKES,
203 TRANSFORM_NOQUADS,
204 TRANSFORM_NOSTRETCH,
205 NUM_TRANSFORMS
206 };
207 enum Scroll
208 {
209 SCROLL_REVERSE = 0,
210 SCROLL_SPLIT,
211 SCROLL_ALTERNATE,
212 SCROLL_CROSS,
213 SCROLL_CENTERED,
214 NUM_SCROLLS
215 };
216
217 [[nodiscard]] auto GetReversePercentForColumn(int iCol) const
218 -> float; // accounts for all Directions
219
220 PlayerNumber m_pn{ PLAYER_1 }; // Needed for fetching the style.
221
222 LifeType m_LifeType{ LifeType_Bar };
223 DrainType m_DrainType{ DrainType_Normal }; // only used with LifeBar
224 int m_BatteryLives{ 4 };
225 /* All floats have a corresponding speed setting, which determines how fast
226 * PlayerOptions::Approach approaches. */
227 bool m_bSetScrollSpeed{
228 false
229 }; // true if the scroll speed was set by FromString
230 float m_fTimeSpacing{ 0 },
231 m_SpeedfTimeSpacing{ 1.0F }; // instead of Beat spacing (CMods, mMods)
232 float m_fMaxScrollBPM{ 0 }, m_SpeedfMaxScrollBPM{ 1.0F };
233 float m_fScrollSpeed{ 1.0F },
234 m_SpeedfScrollSpeed{ 1.0F }; // used if !m_bTimeSpacing (xMods)
235 float m_fScrollBPM{ 200 },
236 m_SpeedfScrollBPM{ 1.0F }; // used if m_bTimeSpacing (CMod)
237 float m_fAccels[NUM_ACCELS]{}, m_SpeedfAccels[NUM_ACCELS]{};
238 float m_fEffects[NUM_EFFECTS]{}, m_SpeedfEffects[NUM_EFFECTS]{};
239 float m_fAppearances[NUM_APPEARANCES]{},
240 m_SpeedfAppearances[NUM_APPEARANCES]{};
241 float m_fScrolls[NUM_SCROLLS]{}, m_SpeedfScrolls[NUM_SCROLLS]{};
242 float m_fDark{ 0 }, m_SpeedfDark{ 1.0F };
243 float m_fBlind{ 0 }, m_SpeedfBlind{ 1.0F };
244 float m_fCover{ 0 }, m_SpeedfCover{
245 1.0F
246 }; // hide the background per-player--can't think of a good name
247 float m_fRandAttack{ 0 }, m_SpeedfRandAttack{ 1.0F };
248 float m_fNoAttack{ 0 }, m_SpeedfNoAttack{ 1.0F };
249 float m_fPlayerAutoPlay{ 0 }, m_SpeedfPlayerAutoPlay{ 1.0F };
250 float m_fPerspectiveTilt{ 0 },
251 m_SpeedfPerspectiveTilt{ 1.0F }; // -1 = near, 0 = overhead, +1 = space
252 float m_fSkew{ 0 }, m_SpeedfSkew{ 1.0F }; // 0 = vanish point is in center
253 // of player, 1 = vanish point is
254 // in center of screen
255
256 /* If this is > 0, then the player must have life above this value at the
257 * end of the song to pass. This is independent of SongOptions::m_FailType.
258 */
259 float m_fPassmark{ 0 }, m_SpeedfPassmark{ 1.0F };
260
261 float m_fRandomSpeed{ 0 }, m_SpeedfRandomSpeed{ 1.0F };
262
263 bool m_bTurns[NUM_TURNS]{};
264 bool m_bTransforms[NUM_TRANSFORMS]{};
265 bool m_bMuteOnError{ false };
266 bool m_bPractice{ false };
268 FailType m_FailType{ FailType_Immediate };
269 TapNoteScore m_MinTNSToHideNotes;
270
275 std::string m_sNoteSkin{};
276 bool forReplay{ false };
277
278 void NextAccel();
279 void NextEffect();
280 void NextAppearance();
281 void NextTurn();
282 void NextTransform();
283 void NextPerspective();
284 void NextScroll();
285
286 auto GetFirstAccel() -> Accel;
287 auto GetFirstEffect() -> Effect;
288 auto GetFirstAppearance() -> Appearance;
289 auto GetFirstScroll() -> Scroll;
290
291 void SetOneAccel(Accel a);
292 void SetOneEffect(Effect e);
293 void SetOneAppearance(Appearance a);
294 void SetOneScroll(Scroll s);
295 void ToggleOneTurn(Turn t);
296
297 // return true if any mods being used will make the song(s) easier
298 auto IsEasierForSongAndSteps(Song* pSong,
299 Steps* pSteps,
300 PlayerNumber pn) const -> bool;
301};
302
303#endif
Per-player options that are not saved between sessions.
Definition PlayerOptions.h:48
Appearance
The various appearance mods.
Definition PlayerOptions.h:147
@ APPEARANCE_SUDDEN_OFFSET
Definition PlayerOptions.h:152
@ APPEARANCE_SUDDEN
Definition PlayerOptions.h:151
@ APPEARANCE_RANDOMVANISH
Definition PlayerOptions.h:156
@ APPEARANCE_BLINK
Definition PlayerOptions.h:155
@ APPEARANCE_STEALTH
Definition PlayerOptions.h:154
@ APPEARANCE_HIDDEN_OFFSET
Definition PlayerOptions.h:149
@ APPEARANCE_HIDDEN
Definition PlayerOptions.h:148
FailType m_FailType
The method for which a player can fail a song.
Definition PlayerOptions.h:268
Accel
The various acceleration mods.
Definition PlayerOptions.h:116
@ ACCEL_BOOMERANG
Definition PlayerOptions.h:123
@ ACCEL_BRAKE
Definition PlayerOptions.h:119
@ ACCEL_BOOST
Definition PlayerOptions.h:117
Turn
The various turn mods.
Definition PlayerOptions.h:162
@ TURN_LEFT
Definition PlayerOptions.h:167
@ TURN_MIRROR
Definition PlayerOptions.h:164
@ TURN_SOFT_SHUFFLE
Definition PlayerOptions.h:171
@ TURN_RIGHT
Definition PlayerOptions.h:168
@ TURN_SHUFFLE
Definition PlayerOptions.h:169
@ TURN_NONE
Definition PlayerOptions.h:163
@ TURN_BACKWARDS
Definition PlayerOptions.h:165
@ TURN_SUPER_SHUFFLE
Definition PlayerOptions.h:173
PlayerOptions()
Set up the PlayerOptions with some reasonable defaults.
Definition PlayerOptions.h:54
std::string m_sNoteSkin
The Noteskin to use.
Definition PlayerOptions.h:275
Holds all music metadata and steps for one song.
Definition Song.h:65
Holds note information for a Song.
Definition Steps.h:42