138 _gameType = gameType.ToLower()
switch
140 "endless" => M_Gamemode.GameType.endlessPlaylist,
141 "standard" => M_Gamemode.GameType.standard,
142 "playlist" => M_Gamemode.GameType.playlist,
143 "playlist-shuffle" => M_Gamemode.GameType.shuffledPlaylist,
144 "single" => M_Gamemode.GameType.single,
157 var gm = ScriptableObject.CreateInstance<M_Gamemode>();
160 gm.allowAchievements =
false;
161 gm.allowCheatedScores =
false;
162 gm.allowCheats =
true;
163 gm.allowLeaderboardScoring =
true;
164 gm.steamLeaderboardName =
"";
165 gm.allowHeightAchievements =
false;
166 gm.baseGamemode =
true;
167 gm.modeType = _isEndless
168 ? M_Gamemode.GameType.endlessPlaylist
169 : M_Gamemode.GameType.playlist;
171 gm.capsuleName = _modeName;
172 gm.gamemodeName = _modeName;
173 gm.introText = _introText;
174 gm.isEndless = _isEndless;
175 gm.hasPerks = _hasPerks;
176 gm.hasRevives = _hasRevives;
177 gm.gamemodeScene =
"Game-Main";
178 gm.roachBankID = $
"custom-{_modeName}";
179 gm.gamemodePanel = Resources.FindObjectsOfTypeAll<UI_GamemodeScreen_Panel>().FirstOrDefault(x => x.name ==
"Gamemode_Panel_Base");
180 gm.loseScreen = Resources.FindObjectsOfTypeAll<UI_ScoreScreen>().FirstOrDefault(x => x.name ==
"ScorePanel_Standard_Death");
181 gm.winScreen = Resources.FindObjectsOfTypeAll<UI_ScoreScreen>().FirstOrDefault(x => x.name ==
"ScorePanel_Standard_Win");
183 gm.unlockAchievement =
"";
186 var gmStandard =
new GamemodeModule_Standard
188 winScoreMultiplier = 1f
190 gm.gamemodeModule = gmStandard;
192 var numLevelsToLoad = 0;
194 _regions.ForEach(reg => reg.subregionGroups.ForEach(subRegGroup =>
195 subRegGroup.subregions.ForEach(subReg => numLevelsToLoad += subReg.levelReferences.Count)));
197 WKLog.Debug($
"[Gamemode Builder] Will load {numLevelsToLoad} levels for {_modeName}");
199 switch (numLevelsToLoad)
202 gm.modeType = M_Gamemode.GameType.single;
203 gm.playlistLevelAssets = [_regions[0].subregionGroups[0].subregions[0].levelReferences[0]];
204 WKLog.Debug($
"[Gamemode Builder] Loading one singular level");
206 case > 1 when _gameType == M_Gamemode.GameType.single:
207 gm.modeType = M_Gamemode.GameType.playlist;
208 _regions.ForEach(reg => reg.subregionGroups.ForEach(subRegGroup =>
209 subRegGroup.subregions.ForEach(subReg => gm.playlistLevelAssets.AddRange(subReg.levelReferences))));
212 gm.modeType = _gameType;
213 List<M_Level.LevelAssetHolder> levels = [];
214 var loadedLevels = 0;
216 foreach (var level
in from region
in _regions
217 from subRegionGroup
in region.subregionGroups
218 from subRegion in subRegionGroup.subregions
219 from level in subRegion.levelReferences
229 WKLog.Error($
"[Gamemode Builder] Failed to load: {e.Message}");
232 WKLog.Debug($
"[Gamemode Builder] Loaded {loadedLevels}/{numLevelsToLoad} levels");
234 _regions.ForEach(reg => reg.subregionGroups.ForEach(subRegGroup =>
235 subRegGroup.subregions.ForEach(subReg => gm.playlistLevelAssets.AddRange(subReg.levelReferences))));
239 gm.levelsToGenerate = numLevelsToLoad;
243 if (_capsuleSprite is not
null)
244 gm.capsuleArt = _capsuleSprite;
246 if (_screenArtSprite is not
null)
247 gm.screenArt = _screenArtSprite;
250 gm.regions = _regions;
253 var worldRoot = Resources.FindObjectsOfTypeAll<GameObject>()
254 .FirstOrDefault(go => go.name ==
"World_Root");
255 gm.gamemodeObjects = worldRoot is not
null
260 var hammerItem =
new M_Gamemode.SpawnItem { itemid =
"Item_Hammer" };
261 gm.startItems = _spawnItems ?? [hammerItem];