Skip to content

Commit ce33e8d

Browse files
committed
Merge branch 'Archipelago' of https://github.com/Z11Coding/Mixtape-Engine-Rework into Archipelago
2 parents d4a348a + a2a2642 commit ce33e8d

File tree

2 files changed

+159
-17
lines changed

2 files changed

+159
-17
lines changed

source/states/freeplay/OsuFreeplayState.hx

Lines changed: 152 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ class OsuFreeplayState extends MusicBeatState
4848
private var textGrp:FlxTypedGroup<FlxText>;
4949

5050
private static var curSelected:Int = 0;
51+
private static var curDiff:Int = 0;
52+
private static var curDiffName:String = '';
5153
private static var maxSelected:Int = 0;
5254

5355
var inSub:Bool = false;
@@ -223,17 +225,17 @@ class OsuFreeplayState extends MusicBeatState
223225

224226
if (FlxG.keys.justPressed.L && APEntryState.inArchipelagoMode && !isTyping) {
225227
try { //Because this menu has no actual difficulty select, just assume it's the first difficulty
226-
var songLowercase:String = Paths.formatToSongPath(FreeplayManager.songList[curSelected].songName);
228+
var songLowercase:String = Paths.formatToSongPath(FreeplayManager.songList[songBox.members[curSelected].songID].songName);
227229
var poop:String = Highscore.formatSong(songLowercase, 0);
228-
Mods.currentModDirectory = FreeplayManager.songList[curSelected].folder;
230+
Mods.currentModDirectory = FreeplayManager.songList[songBox.members[curSelected].songID].folder;
229231
Song.loadFromJson(poop, songLowercase);
230232
PlayState.isStoryMode = false;
231233
PlayState.storyDifficulty = 0;
232234
} catch (e:Dynamic) {
233235
trace('Error loading song: ' + e);
234236
}
235237
try {
236-
FreeplayManager.forceUnlockCheck(FreeplayManager.songList[curSelected].songName, WeekData.getCurrentWeek().folder);
238+
FreeplayManager.forceUnlockCheck(FreeplayManager.songList[songBox.members[curSelected].songID].songName, WeekData.getCurrentWeek().folder);
237239
} catch (e:Dynamic) {
238240
trace("You can't check nothing, silly!");
239241
}
@@ -242,7 +244,7 @@ class OsuFreeplayState extends MusicBeatState
242244

243245
if (FlxG.keys.justPressed.H && APEntryState.inArchipelagoMode && !isTyping) {
244246
try {
245-
var SongInfo = APEntryState.apGame.getSongAndMod(FreeplayManager.songList[curSelected].songName + (FreeplayManager.songList[curSelected].folder != "" ? " (" + FreeplayManager.songList[curSelected].folder + ")" : ""));
247+
var SongInfo = APEntryState.apGame.getSongAndMod(FreeplayManager.songList[songBox.members[curSelected].songID].songName + (FreeplayManager.songList[songBox.members[curSelected].songID].folder != "" ? " (" + FreeplayManager.songList[songBox.members[curSelected].songID].folder + ")" : ""));
246248
if (APEntryState.ap != null) {
247249
APEntryState.ap.Say("!hint " + SongInfo.song + ((SongInfo.mod != "" && SongInfo.mod != null) ? " (" + SongInfo.mod + ")" : ""));
248250
archipelago.console.SideUI.instance.active = true;
@@ -351,10 +353,10 @@ class OsuFreeplayState extends MusicBeatState
351353

352354
if(controls.ACCEPT)
353355
{
354-
var vicCheck:Bool = FreeplayManager.isVictorySong(FreeplayManager.songList[curSelected].songName, FreeplayManager.songList[curSelected].folder) && APInfo.ticketCount >= APInfo.ticketWinCount;
356+
var vicCheck:Bool = FreeplayManager.isVictorySong(FreeplayManager.songList[songBox.members[curSelected].songID].songName, FreeplayManager.songList[songBox.members[curSelected].songID].folder) && APInfo.ticketCount >= APInfo.ticketWinCount;
355357
//You need the song AND the tickets.
356358
trace('can play victory song: ${vicCheck}');
357-
if (FreeplayManager.isVictorySong(FreeplayManager.songList[curSelected].songName, FreeplayManager.songList[curSelected].folder) && !vicCheck) {
359+
if (FreeplayManager.isVictorySong(FreeplayManager.songList[songBox.members[curSelected].songID].songName, FreeplayManager.songList[songBox.members[curSelected].songID].folder) && !vicCheck) {
358360
FlxG.camera.shake(0.005, 0.5);
359361
FlxG.sound.play(Paths.sound("badnoise"+FlxG.random.int(1,3)), 1);
360362
var ogColor = songBox.members[curSelected].color;
@@ -366,7 +368,7 @@ class OsuFreeplayState extends MusicBeatState
366368
return;
367369
}
368370

369-
if (FreeplayManager.trueMissing.contains(FreeplayManager.songList[curSelected].songName) && !FreeplayManager.unplayedList.contains(FreeplayManager.songList[curSelected].songName)) {
371+
if (FreeplayManager.trueMissing.contains(FreeplayManager.songList[songBox.members[curSelected].songID].songName) && !FreeplayManager.unplayedList.contains(FreeplayManager.songList[songBox.members[curSelected].songID].songName)) {
370372
FlxG.camera.shake(0.005, 0.5);
371373
FlxG.sound.play(Paths.sound("badnoise"+FlxG.random.int(1,3)), 1);
372374
var ogColor = songBox.members[curSelected].color;
@@ -376,6 +378,125 @@ class OsuFreeplayState extends MusicBeatState
376378
});
377379
return;
378380
}
381+
382+
if (songBox.members[curSelected] is DiffBox) {
383+
// Get the song, and the difficulty, and play it.
384+
var missingText:FlxText = new FlxText(0, 0, FlxG.width, '', 20);
385+
var songLowercase:String = Paths.formatToSongPath(FreeplayManager.songList[songBox.members[curSelected].songID].songName);
386+
var poop:String = Highscore.formatSong(songLowercase, curDiff);
387+
trace(poop);
388+
{
389+
// selected = true;
390+
var mismatched:String = "";
391+
//I'll make it look pretty later
392+
if(ClientPrefs.getGameplaySetting('bothMode', false) && (ClientPrefs.getGameplaySetting('opponentplay', false) || ClientPrefs.getGameplaySetting('gfMode', false)))
393+
mismatched = "you can't have \"Play Both Sides\" and \"GF Mode\" or \"Opponent Mode\" on at the same time!";
394+
else mismatched = "";
395+
if(ClientPrefs.getGameplaySetting('opponentplay', false) && ClientPrefs.getGameplaySetting('gfMode', false))
396+
mismatched = "you can't have \"GF Mode\" and \"Opponent Mode\" on at the same time!";
397+
else mismatched = "";
398+
if(ClientPrefs.getGameplaySetting('loopMode', false) && ClientPrefs.getGameplaySetting('loopModeC', false))
399+
mismatched = "you can't have \"Loop Mode\" and \"Loop Challenge Mode\" on at the same time!";
400+
else mismatched = "";
401+
try
402+
{
403+
if (songLowercase == "song-not-found")
404+
{
405+
var h = yutautil.ChanceSelector.selectOption(hh, false, true, true);
406+
if (APEntryState.inArchipelagoMode) {
407+
h = "normal error";
408+
}
409+
switch (h)
410+
{
411+
case "small argument":
412+
Song.loadFromJson('small-argument-hard', 'small-argument');
413+
FlxG.save.data.gotIntoAnArgument = true;
414+
FlxG.save.flush();
415+
case "beat battle":
416+
Song.loadFromJson('beat-battle-reasonable', 'beat-battle');
417+
FlxG.save.data.gotbeatbattle = true;
418+
FlxG.save.flush();
419+
case "beat battle 2":
420+
Song.loadFromJson('beat-battle-2-hard', 'beat-battle-2');
421+
FlxG.save.data.gotbeatbattle2 = true;
422+
FlxG.save.flush();
423+
case "normal error":
424+
trace('ERROR! NO SONGS FOUND!');
425+
426+
missingText.text = 'ERROR! NO SONGS FOUND!';
427+
missingText.screenCenter(Y);
428+
missingText.visible = true;
429+
missingTextBG.visible = true;
430+
FlxG.sound.play(Paths.sound('cancelMenu'));
431+
432+
// updateTexts(elapsed);
433+
super.update(elapsed);
434+
return;
435+
}
436+
PlayState.isStoryMode = false;
437+
PlayState.storyDifficulty = curDiff;
438+
}
439+
else if (mismatched != "")
440+
{
441+
trace('ERROR! Modifiers are on that shouldn\'t be!');
442+
443+
missingText.text = 'ERROR! '+mismatched.toUpperCase();
444+
missingText.screenCenter(Y);
445+
missingText.visible = true;
446+
missingTextBG.visible = true;
447+
FlxG.sound.play(Paths.sound('cancelMenu'));
448+
449+
updateTexts(elapsed);
450+
super.update(elapsed);
451+
return;
452+
}
453+
else
454+
{
455+
456+
Song.loadFromJson(poop, songLowercase);
457+
PlayState.isStoryMode = false;
458+
PlayState.storyDifficulty = curDiff;
459+
460+
trace('CURRENT WEEK: ' + WeekData.getWeekFileName());
461+
}
462+
}
463+
catch(e:Dynamic)
464+
{
465+
trace('ERROR! $e');
466+
467+
var errorStr:String = e.toString();
468+
if(errorStr.startsWith('[file_contents,assets/data/')) errorStr = 'Missing file: ' + errorStr.substring(34, errorStr.length-1); //Missing chart
469+
missingText.text = 'ERROR WHILE LOADING CHART:\n$errorStr';
470+
missingText.screenCenter(Y);
471+
missingText.visible = true;
472+
missingTextBG.visible = true;
473+
FlxG.sound.play(Paths.sound('cancelMenu'));
474+
475+
updateTexts(elapsed);
476+
super.update(elapsed);
477+
return;
478+
}
479+
480+
if (FlxG.keys.pressed.SHIFT){
481+
ClientPrefs.openChartEditor();
482+
} else{
483+
if (!alreadyClicked)
484+
{
485+
alreadyClicked = true;
486+
MusicBeatState.reopen = false; //Fix a sticker bug
487+
LoadingState.prepareToSong();
488+
LoadingState.loadAndSwitchState(APEntryState.inArchipelagoMode ? new archipelago.APPlayState() : new states.PlayState());
489+
}
490+
#if !SHOW_LOADING_SCREEN FlxG.sound.music.stop(); #end
491+
stopMusicPlay = true;
492+
}
493+
else {
494+
substates.DiffSubState.songChoices = songChoices;
495+
substates.DiffSubState.listChoices = listChoices;
496+
openSubState(new substates.DiffSubState());
497+
}
498+
}
499+
}
379500

380501
//reloadSongArray();
381502
inSub = true;
@@ -456,6 +577,16 @@ class OsuFreeplayState extends MusicBeatState
456577
function changeSong(change:Int = 0, playSound:Bool = true)
457578
{
458579
curSelected += change;
580+
try {
581+
curDiff = cast(songBox.members[curSelected]:DiffBox).difID;
582+
} catch (e:Dynamic) {
583+
curDiff = -1;
584+
}
585+
try {
586+
curDiffName = cast(songBox.members[curSelected]:DiffBox).difName;
587+
} catch (e:Dynamic) {
588+
curDiffName = 'None';
589+
}
459590

460591
if(curSelected > maxSelected - 1)
461592
curSelected = 0;
@@ -466,13 +597,13 @@ class OsuFreeplayState extends MusicBeatState
466597
for(item in songBox)
467598
item.posY = i++ - curSelected;
468599

469-
if (FreeplayManager.songList[curSelected] != null)
600+
if (FreeplayManager.songList[songBox.members[curSelected].songID] != null)
470601
{
471602
WeekData.setDirectoryFromWeek();
472-
Mods.currentModDirectory = FreeplayManager.songList[curSelected].folder;
473-
PlayState.storyWeek = FreeplayManager.songList[curSelected].week;
603+
Mods.currentModDirectory = FreeplayManager.songList[songBox.members[curSelected].songID].folder;
604+
PlayState.storyWeek = FreeplayManager.songList[songBox.members[curSelected].songID].week;
474605
try {
475-
switch (FreeplayManager.songList[curSelected].songName)
606+
switch (FreeplayManager.songList[songBox.members[curSelected].songID].songName)
476607
{
477608
case 'Small Argument' | 'Beat Battle 2':
478609
Difficulty.list = ['Hard'];
@@ -482,7 +613,7 @@ class OsuFreeplayState extends MusicBeatState
482613
Difficulty.loadFromWeek();
483614
}
484615
} catch(e:Dynamic) {}
485-
try {metadata = FreeplayManager.metadata.get(FreeplayManager.songList[curSelected].songName.toLowerCase());}
616+
try {metadata = FreeplayManager.metadata.get(FreeplayManager.songList[songBox.members[curSelected].songID].songName.toLowerCase());}
486617
catch(e) {metadata = null;}
487618

488619
if (metadata != null && metadata.freeplay != null) {
@@ -545,16 +676,19 @@ class OsuFreeplayState extends MusicBeatState
545676
}
546677

547678
function loadDiffs(song:Dynamic) {
548-
var week:WeekData = WeekData.weeksLoaded.get(WeekData.weeksList[FreeplayManager.songList[curSelected].week]);
679+
var week:WeekData = WeekData.weeksLoaded.get(WeekData.weeksList[FreeplayManager.songList[songBox.members[curSelected].songID].week]);
549680
Difficulty.loadFromWeek(week);
550681

551682
var diffInt:Int = 0;
552683
for (j in 0...Difficulty.list.length)
553684
{
554-
var songBox:SongBox = new SongBox(320, 100);
685+
var songBox:DiffBox = new DiffBox(320, 100);
686+
687+
songBox.difID = j;
688+
songBox.difName = Difficulty.list[j];
555689
songBox.loadGraphic(Paths.image('OSUState/bars/background2'));
556690
songBox.setGraphicSize(650, 50);
557-
songBox.setColorTransform(-1, -1, -1, 1, FreeplayManager.songList[curSelected].color[0][0], FreeplayManager.songList[curSelected].color[0][1], FreeplayManager.songList[curSelected].color[0][2], 1);
691+
songBox.setColorTransform(-1, -1, -1, 1, FreeplayManager.songList[songBox.members[curSelected].songID].color[0][0], FreeplayManager.songList[songBox.members[curSelected].songID].color[0][1], FreeplayManager.songList[songBox.members[curSelected].songID].color[0][2], 1);
558692
songBox.ID = song.ID + diffInt;
559693
this.songBox.add(songBox);
560694

@@ -604,6 +738,7 @@ class OsuFreeplayState extends MusicBeatState
604738
var songBox:SongBox = new SongBox(320, 100);
605739
songBox.loadGraphic(Paths.image('OSUState/bars/background2'));
606740
songBox.setGraphicSize(650, 100);
741+
songBox.songID = i;
607742

608743
if (APEntryState.inArchipelagoMode) {
609744
var isBronze:Bool = FlxG.random.bool(50); // Randomly decide between orange and bronze
@@ -719,7 +854,7 @@ class OsuFreeplayState extends MusicBeatState
719854
var week:WeekData = WeekData.weeksLoaded.get(WeekData.weeksList[FreeplayManager.songList[i].week]);
720855
Difficulty.loadFromWeek(week);
721856

722-
if (FreeplayManager.songList[i].songName == FreeplayManager.songList[curSelected].songName) {
857+
if (FreeplayManager.songList[i].songName == FreeplayManager.songList[songBox.members[curSelected].songID].songName) {
723858
trace(songName);
724859
trueInt = i+1;
725860
for (j in 0...Difficulty.list.length)
@@ -730,6 +865,7 @@ class OsuFreeplayState extends MusicBeatState
730865
songBox.setGraphicSize(650, 100);
731866
songBox.setColorTransform(-1, -1, -1, 1, FreeplayManager.songList[i].color[0][0], FreeplayManager.songList[i].color[0][1], FreeplayManager.songList[i].color[0][2], 1);
732867
songBox.ID = trueInt;
868+
songBox.songID = i;
733869
this.songBox.add(songBox);
734870

735871
var icon:HealthIcon = new HealthIcon(FreeplayManager.songList[i].songCharacter, false);

source/states/freeplay/osu/SongBox.hx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,10 @@ class SongBox extends FlxSprite
1010
y = targetY;
1111
}
1212

13-
}
13+
}
14+
15+
class DiffBox extends SongBox
16+
{
17+
public var difID:Int = 0;
18+
public var difName:String = '';
19+
}

0 commit comments

Comments
 (0)