Fix SM replays

This commit is contained in:
KadeDeveloper 2021-07-20 02:08:39 -07:00
parent 6c1372a5fb
commit 7512c87425
4 changed files with 116 additions and 9 deletions

View File

@ -1,5 +1,12 @@
package;
import haxe.Exception;
import lime.app.Application;
#if sys
import smTools.SMFile;
import sys.FileSystem;
#end
import Controls.KeyboardScheme;
import Controls.Control;
import flash.text.TextField;
@ -164,9 +171,55 @@ class LoadReplayState extends MusicBeatState
case 'philly-nice': songFormat = 'Philly';
}
var poop:String = Highscore.formatSong(songFormat, PlayState.rep.replay.songDiff);
var poop = "";
#if sys
if (PlayState.rep.replay.sm)
if (!FileSystem.exists(StringTools.replace(PlayState.rep.replay.chartPath,"converted.json","")))
{
Application.current.window.alert("The SM file in this replay does not exist!","SM Replays");
return;
}
#end
PlayState.isSM = PlayState.rep.replay.sm;
#if sys
if (PlayState.isSM)
PlayState.pathToSm = StringTools.replace(PlayState.rep.replay.chartPath,"converted.json","");
#end
#if sys
if (PlayState.isSM)
{
poop = File.getContent(PlayState.rep.replay.chartPath);
try
{
PlayState.sm = SMFile.loadFile(PlayState.pathToSm + "/" + StringTools.replace(PlayState.rep.replay.songName," ", "_") + ".sm");
}
catch(e:Exception)
{
Application.current.window.alert("Make sure that the SM file is called " + PlayState.pathToSm + "/" + StringTools.replace(PlayState.rep.replay.songName," ", "_") + ".sm!\nAs I couldn't read it.","SM Replays");
return;
}
}
else
poop = Highscore.formatSong(songFormat, PlayState.rep.replay.songDiff);
#else
poop = Highscore.formatSong(songFormat, PlayState.rep.replay.songDiff);
#end
try
{
if (PlayState.isSM)
PlayState.SONG = Song.loadFromJsonRAW(poop);
else
PlayState.SONG = Song.loadFromJson(poop, PlayState.rep.replay.songName);
}
catch(e:Exception)
{
Application.current.window.alert("Failed to load the song! Does the JSON exist?","Replays");
return;
}
PlayState.isStoryMode = false;
PlayState.storyDifficulty = PlayState.rep.replay.songDiff;
PlayState.storyWeek = getWeekNumbFromSong(PlayState.rep.replay.songName);

View File

@ -84,6 +84,10 @@ class Note extends FlxSprite
{
this.strumTime = strumTime;
rStrumTime = strumTime - (FlxG.save.data.offset + PlayState.songOffset);
#if sys
if (PlayState.isSM)
rStrumTime = rStrumTime - Std.parseFloat(PlayState.sm.header.OFFSET);
#end
}

View File

@ -45,8 +45,10 @@ typedef ReplayJSON =
public var songNotes:Array<Dynamic>;
public var songJudgements:Array<String>;
public var noteSpeed:Float;
public var chartPath:String;
public var isDownscroll:Bool;
public var sf:Int;
public var sm:Bool;
public var ana:Analysis;
}
@ -66,6 +68,8 @@ class Replay
isDownscroll: false,
songNotes: [],
replayGameVer: version,
chartPath: "",
sm: false,
timestamp: Date.now(),
sf: Conductor.safeFrames,
ana: new Analysis(),
@ -86,20 +90,28 @@ class Replay
public function SaveReplay(notearray:Array<Dynamic>, judge:Array<String>, ana:Analysis)
{
#if sys
var chartPath = PlayState.isSM ? PlayState.pathToSm + "/converted.json" : "";
#else
var chartPath = "";
#end
var json = {
"songName": PlayState.SONG.song,
"songDiff": PlayState.storyDifficulty,
"chartPath": chartPath,
"sm": PlayState.isSM,
"timestamp": Date.now(),
"replayGameVer": version,
"sf": Conductor.safeFrames,
"noteSpeed": (FlxG.save.data.scrollSpeed > 1 ? FlxG.save.data.scrollSpeed : PlayState.SONG.speed),
"isDownscroll": FlxG.save.data.downscroll,
"songNotes": notearray,
"songJudgements": judge,
"timestamp": Date.now(),
"replayGameVer": version,
"sf": Conductor.safeFrames,
"ana": ana
};
var data:String = Json.stringify(json);
var data:String = Json.stringify(json, null, "");
var time = Date.now().getTime();

View File

@ -1,5 +1,10 @@
package;
import haxe.Exception;
#if sys
import smTools.SMFile;
import sys.FileSystem;
import sys.io.File;
#end
import openfl.geom.Matrix;
import openfl.display.BitmapData;
import flixel.system.FlxSound;
@ -210,6 +215,7 @@ class ResultsScreen extends FlxSubState
PlayState.rep = Replay.LoadReplay(PlayState.rep.path);
PlayState.loadRep = true;
PlayState.isSM = PlayState.rep.replay.sm;
var songFormat = StringTools.replace(PlayState.rep.replay.songName, " ", "-");
switch (songFormat) {
@ -231,10 +237,42 @@ class ResultsScreen extends FlxSubState
Highscore.saveCombo(songHighscore, Ratings.GenerateLetterRank(PlayState.instance.accuracy),PlayState.storyDifficulty);
#end
var poop:String = Highscore.formatSong(songFormat, PlayState.rep.replay.songDiff);
#if sys
if (PlayState.rep.replay.sm)
if (!FileSystem.exists(StringTools.replace(PlayState.rep.replay.chartPath,"converted.json","")))
{
Application.current.window.alert("The SM file in this replay does not exist!","SM Replays");
return;
}
#end
var poop = "";
#if sys
if (PlayState.isSM)
{
poop = File.getContent(PlayState.rep.replay.chartPath);
try
{
PlayState.sm = SMFile.loadFile(PlayState.pathToSm + "/" + StringTools.replace(PlayState.rep.replay.songName," ", "_") + ".sm");
}
catch(e:Exception)
{
Application.current.window.alert("Make sure that the SM file is called " + PlayState.pathToSm + "/" + StringTools.replace(PlayState.rep.replay.songName," ", "_") + ".sm!\nAs I couldn't read it.","SM Replays");
return;
}
}
else
poop = Highscore.formatSong(songFormat, PlayState.rep.replay.songDiff);
#else
poop = Highscore.formatSong(PlayState.rep.replay.songName, PlayState.rep.replay.songDiff);
#end
music.fadeOut(0.3);
if (PlayState.isSM)
PlayState.SONG = Song.loadFromJsonRAW(poop);
else
PlayState.SONG = Song.loadFromJson(poop, PlayState.rep.replay.songName);
PlayState.isStoryMode = false;
PlayState.storyDifficulty = PlayState.rep.replay.songDiff;