Inital Kade Engine Commit

This commit is contained in:
KadeDev 2021-03-09 11:51:15 -08:00
parent d3cd2e21c8
commit 6ce80b1c5b
10 changed files with 1088 additions and 525 deletions

View File

@ -498,22 +498,21 @@ class Controls extends FlxActionSet
switch (scheme) switch (scheme)
{ {
case Solo: case Solo:
inline bindKeys(Control.UP, [W, FlxKey.UP]); inline bindKeys(Control.UP, [J, FlxKey.UP]);
inline bindKeys(Control.DOWN, [S, FlxKey.DOWN]); inline bindKeys(Control.DOWN, [F, FlxKey.DOWN]);
inline bindKeys(Control.LEFT, [A, FlxKey.LEFT]); inline bindKeys(Control.LEFT, [D, FlxKey.LEFT]);
inline bindKeys(Control.RIGHT, [D, FlxKey.RIGHT]); inline bindKeys(Control.RIGHT, [K, FlxKey.RIGHT]);
inline bindKeys(Control.ACCEPT, [Z, SPACE, ENTER]); inline bindKeys(Control.ACCEPT, [Z, SPACE, ENTER]);
inline bindKeys(Control.BACK, [BACKSPACE, ESCAPE]); inline bindKeys(Control.BACK, [BACKSPACE, ESCAPE]);
inline bindKeys(Control.PAUSE, [P, ENTER, ESCAPE]); inline bindKeys(Control.PAUSE, [P, ENTER, ESCAPE]);
inline bindKeys(Control.RESET, [R]); inline bindKeys(Control.RESET, [R]);
case Duo(true): case Duo(true):
inline bindKeys(Control.UP, [W]); inline bindKeys(Control.UP, [W, FlxKey.UP]);
inline bindKeys(Control.DOWN, [S]); inline bindKeys(Control.DOWN, [S, FlxKey.DOWN]);
inline bindKeys(Control.LEFT, [A]); inline bindKeys(Control.LEFT, [A, FlxKey.LEFT]);
inline bindKeys(Control.RIGHT, [D]); inline bindKeys(Control.RIGHT, [D, FlxKey.RIGHT]);
inline bindKeys(Control.ACCEPT, [G, Z]); inline bindKeys(Control.ACCEPT, [G, Z, SPACE, ENTER]);
inline bindKeys(Control.BACK, [H, X]); inline bindKeys(Control.BACK, [BACKSPACE, ESCAPE]);
inline bindKeys(Control.PAUSE, [ONE]);
inline bindKeys(Control.RESET, [R]); inline bindKeys(Control.RESET, [R]);
case Duo(false): case Duo(false):
inline bindKeys(Control.UP, [FlxKey.UP]); inline bindKeys(Control.UP, [FlxKey.UP]);

View File

@ -25,6 +25,18 @@ class CoolUtil
return daList; return daList;
} }
public static function coolStringFile(path:String):Array<String>
{
var daList:Array<String> = path.trim().split('\n');
for (i in 0...daList.length)
{
daList[i] = daList[i].trim();
}
return daList;
}
public static function numberArray(max:Int, ?min = 0):Array<Int> public static function numberArray(max:Int, ?min = 0):Array<Int>
{ {
var dumbArray:Array<Int> = []; var dumbArray:Array<Int> = [];

View File

@ -53,22 +53,13 @@ class FreeplayState extends MusicBeatState
isDebug = true; isDebug = true;
#end #end
if (StoryMenuState.weekUnlocked[2] || isDebug)
addWeek(['Bopeebo', 'Fresh', 'Dadbattle'], 1, ['dad']); addWeek(['Bopeebo', 'Fresh', 'Dadbattle'], 1, ['dad']);
if (StoryMenuState.weekUnlocked[2] || isDebug)
addWeek(['Spookeez', 'South', 'Monster'], 2, ['spooky']); addWeek(['Spookeez', 'South', 'Monster'], 2, ['spooky']);
if (StoryMenuState.weekUnlocked[3] || isDebug)
addWeek(['Pico', 'Philly', 'Blammed'], 3, ['pico']); addWeek(['Pico', 'Philly', 'Blammed'], 3, ['pico']);
if (StoryMenuState.weekUnlocked[4] || isDebug)
addWeek(['Satin-Panties', 'High', 'Milf'], 4, ['mom']); addWeek(['Satin-Panties', 'High', 'Milf'], 4, ['mom']);
if (StoryMenuState.weekUnlocked[5] || isDebug)
addWeek(['Cocoa', 'Eggnog', 'Winter-Horrorland'], 5, ['parents-christmas', 'parents-christmas', 'monster-christmas']); addWeek(['Cocoa', 'Eggnog', 'Winter-Horrorland'], 5, ['parents-christmas', 'parents-christmas', 'monster-christmas']);
if (StoryMenuState.weekUnlocked[6] || isDebug)
addWeek(['Senpai', 'Roses', 'Thorns'], 6, ['senpai', 'senpai', 'spirit']); addWeek(['Senpai', 'Roses', 'Thorns'], 6, ['senpai', 'senpai', 'spirit']);
// LOAD MUSIC // LOAD MUSIC
@ -250,7 +241,7 @@ class FreeplayState extends MusicBeatState
function changeSelection(change:Int = 0) function changeSelection(change:Int = 0)
{ {
#if !switch #if !switch
NGio.logEvent('Fresh'); // NGio.logEvent('Fresh');
#end #end
// NGio.logEvent('Fresh'); // NGio.logEvent('Fresh');

201
source/LoadReplayState.hx Normal file
View File

@ -0,0 +1,201 @@
package;
import Controls.KeyboardScheme;
import Controls.Control;
import flash.text.TextField;
import flixel.FlxG;
import flixel.FlxSprite;
import flixel.addons.display.FlxGridOverlay;
import flixel.group.FlxGroup.FlxTypedGroup;
import flixel.input.keyboard.FlxKey;
import flixel.math.FlxMath;
import flixel.text.FlxText;
import flixel.util.FlxColor;
import lime.utils.Assets;
#if sys
import sys.io.File;
#end
class LoadReplayState extends MusicBeatState
{
var selector:FlxText;
var curSelected:Int = 0;
var songs:Array<FreeplayState.SongMetadata> = [];
var controlsStrings:Array<String> = [];
var actualNames:Array<String> = [];
private var grpControls:FlxTypedGroup<Alphabet>;
var versionShit:FlxText;
var poggerDetails:FlxText;
override function create()
{
var menuBG:FlxSprite = new FlxSprite().loadGraphic(Paths.image('menuDesat'));
#if sys
controlsStrings = sys.FileSystem.readDirectory(Sys.getCwd() + "\\assets\\replays\\");
#end
trace(controlsStrings);
controlsStrings.sort(Reflect.compare);
addWeek(['Bopeebo', 'Fresh', 'Dadbattle'], 1, ['dad']);
addWeek(['Spookeez', 'South', 'Monster'], 2, ['spooky']);
addWeek(['Pico', 'Philly', 'Blammed'], 3, ['pico']);
addWeek(['Satin-Panties', 'High', 'Milf'], 4, ['mom']);
addWeek(['Cocoa', 'Eggnog', 'Winter-Horrorland'], 5, ['parents-christmas', 'parents-christmas', 'monster-christmas']);
addWeek(['Senpai', 'Roses', 'Thorns'], 6, ['senpai', 'senpai', 'spirit']);
for(i in 0...controlsStrings.length)
{
var string:String = controlsStrings[i];
actualNames[i] = string;
var rep:Replay = Replay.LoadReplay(string);
controlsStrings[i] = string.split("time")[0] + " " + (rep.replay.songDiff == 2 ? "HARD" : rep.replay.songDiff == 1 ? "EASY" : "NORMAL");
}
if (controlsStrings.length == 0)
controlsStrings.push("No Replays...");
menuBG.color = 0xFFea71fd;
menuBG.setGraphicSize(Std.int(menuBG.width * 1.1));
menuBG.updateHitbox();
menuBG.screenCenter();
menuBG.antialiasing = true;
add(menuBG);
grpControls = new FlxTypedGroup<Alphabet>();
add(grpControls);
for (i in 0...controlsStrings.length)
{
var controlLabel:Alphabet = new Alphabet(0, (70 * i) + 30, controlsStrings[i], true, false);
controlLabel.isMenuItem = true;
controlLabel.targetY = i;
grpControls.add(controlLabel);
// DONT PUT X IN THE FIRST PARAMETER OF new ALPHABET() !!
}
versionShit = new FlxText(5, FlxG.height - 34, 0, "Replay Loader (ESCAPE TO GO BACK)\nNOTICE!!!! Replays are in a beta stage, and they are probably not 100% correct. expect misses and other stuff that isn't there!", 12);
versionShit.scrollFactor.set();
versionShit.setFormat("VCR OSD Mono", 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
add(versionShit);
poggerDetails = new FlxText(5, 34, 0, "Replay Details - \nnone", 12);
poggerDetails.scrollFactor.set();
poggerDetails.setFormat("VCR OSD Mono", 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
add(poggerDetails);
changeSelection(0);
super.create();
}
public function getWeekNumbFromSong(songName:String):Int
{
var week:Int = 0;
for (i in 0...songs.length)
{
var pog:FreeplayState.SongMetadata = songs[i];
if (pog.songName.toLowerCase() == songName)
week = pog.week;
}
return week;
}
public function addSong(songName:String, weekNum:Int, songCharacter:String)
{
songs.push(new FreeplayState.SongMetadata(songName, weekNum, songCharacter));
}
public function addWeek(songs:Array<String>, weekNum:Int, ?songCharacters:Array<String>)
{
if (songCharacters == null)
songCharacters = ['bf'];
var num:Int = 0;
for (song in songs)
{
addSong(song, weekNum, songCharacters[num]);
if (songCharacters.length != 1)
num++;
}
}
override function update(elapsed:Float)
{
super.update(elapsed);
if (controls.BACK)
FlxG.switchState(new OptionsMenu());
if (controls.UP_P)
changeSelection(-1);
if (controls.DOWN_P)
changeSelection(1);
if (controls.ACCEPT && grpControls.members[curSelected].text != "No Replays...")
{
trace('loading ' + actualNames[curSelected]);
PlayState.rep = Replay.LoadReplay(actualNames[curSelected]);
PlayState.loadRep = true;
var poop:String = Highscore.formatSong(PlayState.rep.replay.songName.toLowerCase(), PlayState.rep.replay.songDiff);
PlayState.SONG = Song.loadFromJson(poop, PlayState.rep.replay.songName.toLowerCase());
PlayState.isStoryMode = false;
PlayState.storyDifficulty = PlayState.rep.replay.songDiff;
PlayState.storyWeek = getWeekNumbFromSong(PlayState.rep.replay.songName);
LoadingState.loadAndSwitchState(new PlayState());
}
}
var isSettingControl:Bool = false;
function changeSelection(change:Int = 0)
{
#if !switch
// NGio.logEvent('Fresh');
#end
FlxG.sound.play(Paths.sound('scrollMenu'), 0.4);
curSelected += change;
if (curSelected < 0)
curSelected = grpControls.length - 1;
if (curSelected >= grpControls.length)
curSelected = 0;
var rep:Replay = Replay.LoadReplay(actualNames[curSelected]);
poggerDetails.text = "Replay Details - \nDate Created: " + rep.replay.timestamp + "\nSong: " + rep.replay.songName + "\nReplay Version: " + (rep.replay.replayGameVer != Replay.version ? "OUTDATED" : "Latest");
// selector.y = (70 * curSelected) + 30;
var bullShit:Int = 0;
for (item in grpControls.members)
{
item.targetY = bullShit - curSelected;
bullShit++;
item.alpha = 0.6;
// item.setGraphicSize(Std.int(item.width * 0.8));
if (item.targetY == 0)
{
item.alpha = 1;
// item.setGraphicSize(Std.int(item.width));
}
}
}
}

View File

@ -14,7 +14,7 @@ class Main extends Sprite
var gameHeight:Int = 720; // Height of the game in pixels (might be less / more in actual pixels depending on your zoom). var gameHeight:Int = 720; // Height of the game in pixels (might be less / more in actual pixels depending on your zoom).
var initialState:Class<FlxState> = TitleState; // The FlxState the game starts with. var initialState:Class<FlxState> = TitleState; // The FlxState the game starts with.
var zoom:Float = -1; // If -1, zoom is automatically calculated to fit the window dimensions. var zoom:Float = -1; // If -1, zoom is automatically calculated to fit the window dimensions.
var framerate:Int = 60; // How many frames per second the game should run at. var framerate:Int = 120; // How many frames per second the game should run at.
var skipSplash:Bool = true; // Whether to skip the flixel splash screen that appears in release mode. var skipSplash:Bool = true; // Whether to skip the flixel splash screen that appears in release mode.
var startFullscreen:Bool = false; // Whether to start the game in fullscreen on desktop targets var startFullscreen:Bool = false; // Whether to start the game in fullscreen on desktop targets

View File

@ -3,7 +3,6 @@ package;
import flixel.FlxG; import flixel.FlxG;
import flixel.FlxObject; import flixel.FlxObject;
import flixel.FlxSprite; import flixel.FlxSprite;
import flixel.addons.transition.FlxTransitionableState;
import flixel.effects.FlxFlicker; import flixel.effects.FlxFlicker;
import flixel.graphics.frames.FlxAtlasFrames; import flixel.graphics.frames.FlxAtlasFrames;
import flixel.group.FlxGroup.FlxTypedGroup; import flixel.group.FlxGroup.FlxTypedGroup;
@ -28,14 +27,18 @@ class MainMenuState extends MusicBeatState
var optionShit:Array<String> = ['story mode', 'freeplay']; var optionShit:Array<String> = ['story mode', 'freeplay'];
#end #end
var newGaming:FlxText;
var newGaming2:FlxText;
var newInput:Bool = true;
public static var kadeEngineVer:String = "1.0";
public static var gameVer:String = "0.2.7.1";
var magenta:FlxSprite; var magenta:FlxSprite;
var camFollow:FlxObject; var camFollow:FlxObject;
override function create() override function create()
{ {
transIn = FlxTransitionableState.defaultTransIn;
transOut = FlxTransitionableState.defaultTransOut;
if (!FlxG.sound.music.playing) if (!FlxG.sound.music.playing)
{ {
FlxG.sound.playMusic(Paths.music('freakyMenu')); FlxG.sound.playMusic(Paths.music('freakyMenu'));
@ -88,13 +91,14 @@ class MainMenuState extends MusicBeatState
FlxG.camera.follow(camFollow, null, 0.06); FlxG.camera.follow(camFollow, null, 0.06);
var versionShit:FlxText = new FlxText(5, FlxG.height - 18, 0, "v" + Application.current.meta.get('version'), 12); var versionShit:FlxText = new FlxText(5, FlxG.height - 18, 0, gameVer + " FNF - " + kadeEngineVer + " Kade Engine", 12);
versionShit.scrollFactor.set(); versionShit.scrollFactor.set();
versionShit.setFormat("VCR OSD Mono", 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK); versionShit.setFormat("VCR OSD Mono", 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
add(versionShit); add(versionShit);
// NG.core.calls.event.logEvent('swag').send(); // NG.core.calls.event.logEvent('swag').send();
changeItem(); changeItem();
super.create(); super.create();
@ -149,7 +153,7 @@ class MainMenuState extends MusicBeatState
{ {
if (curSelected != spr.ID) if (curSelected != spr.ID)
{ {
FlxTween.tween(spr, {alpha: 0}, 0.4, { FlxTween.tween(spr, {alpha: 0}, 1.3, {
ease: FlxEase.quadOut, ease: FlxEase.quadOut,
onComplete: function(twn:FlxTween) onComplete: function(twn:FlxTween)
{ {
@ -174,8 +178,6 @@ class MainMenuState extends MusicBeatState
trace("Freeplay Menu Selected"); trace("Freeplay Menu Selected");
case 'options': case 'options':
FlxTransitionableState.skipNextTransIn = true;
FlxTransitionableState.skipNextTransOut = true;
FlxG.switchState(new OptionsMenu()); FlxG.switchState(new OptionsMenu());
} }
}); });

View File

@ -1,5 +1,6 @@
package; package;
import Controls.KeyboardScheme;
import Controls.Control; import Controls.Control;
import flash.text.TextField; import flash.text.TextField;
import flixel.FlxG; import flixel.FlxG;
@ -20,11 +21,23 @@ class OptionsMenu extends MusicBeatState
var controlsStrings:Array<String> = []; var controlsStrings:Array<String> = [];
private var grpControls:FlxTypedGroup<Alphabet>; private var grpControls:FlxTypedGroup<Alphabet>;
var versionShit:FlxText;
override function create() override function create()
{ {
if (FlxG.save.data.newInput == null)
FlxG.save.data.newInput = true;
if (FlxG.save.data.downscroll == null)
FlxG.save.data.downscroll = false;
if (FlxG.save.data.dfjk == null)
FlxG.save.data.dfjk = false;
var menuBG:FlxSprite = new FlxSprite().loadGraphic(Paths.image('menuDesat')); var menuBG:FlxSprite = new FlxSprite().loadGraphic(Paths.image('menuDesat'));
controlsStrings = CoolUtil.coolTextFile(Paths.txt('controls')); controlsStrings = CoolUtil.coolStringFile((FlxG.save.data.dfjk ? 'DFJK' : 'WASD') + "\n" + (FlxG.save.data.newInput ? "New input" : "Old Input") + "\n" + (FlxG.save.data.downscroll ? 'Downscroll' : 'Upscroll') + "\nLoad replays");
trace(controlsStrings);
menuBG.color = 0xFFea71fd; menuBG.color = 0xFFea71fd;
menuBG.setGraphicSize(Std.int(menuBG.width * 1.1)); menuBG.setGraphicSize(Std.int(menuBG.width * 1.1));
menuBG.updateHitbox(); menuBG.updateHitbox();
@ -32,75 +45,93 @@ class OptionsMenu extends MusicBeatState
menuBG.antialiasing = true; menuBG.antialiasing = true;
add(menuBG); add(menuBG);
/*
grpControls = new FlxTypedGroup<Alphabet>(); grpControls = new FlxTypedGroup<Alphabet>();
add(grpControls); add(grpControls);
for (i in 0...controlsStrings.length) for (i in 0...controlsStrings.length)
{ {
if (controlsStrings[i].indexOf('set') != -1) var controlLabel:Alphabet = new Alphabet(0, (70 * i) + 30, controlsStrings[i], true, false);
{
var controlLabel:Alphabet = new Alphabet(0, (70 * i) + 30, controlsStrings[i].substring(3) + ': ' + controlsStrings[i + 1], true, false);
controlLabel.isMenuItem = true; controlLabel.isMenuItem = true;
controlLabel.targetY = i; controlLabel.targetY = i;
grpControls.add(controlLabel); grpControls.add(controlLabel);
}
// DONT PUT X IN THE FIRST PARAMETER OF new ALPHABET() !! // DONT PUT X IN THE FIRST PARAMETER OF new ALPHABET() !!
} }
*/
versionShit = new FlxText(5, FlxG.height - 18, 0, "Offset (Left, Right): " + FlxG.save.data.offset, 12);
versionShit.scrollFactor.set();
versionShit.setFormat("VCR OSD Mono", 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
add(versionShit);
super.create(); super.create();
openSubState(new OptionsSubState());
} }
override function update(elapsed:Float) override function update(elapsed:Float)
{ {
super.update(elapsed); super.update(elapsed);
/*
if (controls.ACCEPT)
{
changeBinding();
}
if (isSettingControl)
waitingInput();
else
{
if (controls.BACK) if (controls.BACK)
FlxG.switchState(new MainMenuState()); FlxG.switchState(new MainMenuState());
if (controls.UP_P) if (controls.UP_P)
changeSelection(-1); changeSelection(-1);
if (controls.DOWN_P) if (controls.DOWN_P)
changeSelection(1); changeSelection(1);
}
*/ if (controls.RIGHT_R)
{
FlxG.save.data.offset++;
versionShit.text = "Offset (Left, Right): " + FlxG.save.data.offset;
} }
function waitingInput():Void if (controls.LEFT_R)
{ {
if (FlxG.keys.getIsDown().length > 0) FlxG.save.data.offset--;
{ versionShit.text = "Offset (Left, Right): " + FlxG.save.data.offset;
PlayerSettings.player1.controls.replaceBinding(Control.LEFT, Keys, FlxG.keys.getIsDown()[0].ID, null); }
if (controls.ACCEPT)
{
if (curSelected != 3)
grpControls.remove(grpControls.members[curSelected]);
switch(curSelected)
{
case 0:
FlxG.save.data.dfjk = !FlxG.save.data.dfjk;
var ctrl:Alphabet = new Alphabet(0, (70 * curSelected) + 30, (FlxG.save.data.dfjk ? 'DFJK' : 'WASD'), true, false);
ctrl.isMenuItem = true;
ctrl.targetY = curSelected;
grpControls.add(ctrl);
if (FlxG.save.data.dfjk)
controls.setKeyboardScheme(KeyboardScheme.Solo, true);
else
controls.setKeyboardScheme(KeyboardScheme.Duo(true), true);
case 1:
FlxG.save.data.newInput = !FlxG.save.data.newInput;
var ctrl:Alphabet = new Alphabet(0, (70 * curSelected) + 30, (FlxG.save.data.newInput ? "New input" : "Old Input"), true, false);
ctrl.isMenuItem = true;
ctrl.targetY = curSelected - 1;
grpControls.add(ctrl);
case 2:
FlxG.save.data.downscroll = !FlxG.save.data.downscroll;
var ctrl:Alphabet = new Alphabet(0, (70 * curSelected) + 30, (FlxG.save.data.downscroll ? 'Downscroll' : 'Upscroll'), true, false);
ctrl.isMenuItem = true;
ctrl.targetY = curSelected - 2;
grpControls.add(ctrl);
case 3:
trace('switch');
FlxG.switchState(new LoadReplayState());
}
} }
// PlayerSettings.player1.controls.replaceBinding(Control)
} }
var isSettingControl:Bool = false; var isSettingControl:Bool = false;
function changeBinding():Void
{
if (!isSettingControl)
{
isSettingControl = true;
}
}
function changeSelection(change:Int = 0) function changeSelection(change:Int = 0)
{ {
#if !switch #if !switch
NGio.logEvent('Fresh'); // NGio.logEvent('Fresh');
#end #end
FlxG.sound.play(Paths.sound('scrollMenu'), 0.4); FlxG.sound.play(Paths.sound('scrollMenu'), 0.4);

View File

@ -49,6 +49,14 @@ class PlayState extends MusicBeatState
public static var storyWeek:Int = 0; public static var storyWeek:Int = 0;
public static var storyPlaylist:Array<String> = []; public static var storyPlaylist:Array<String> = [];
public static var storyDifficulty:Int = 1; public static var storyDifficulty:Int = 1;
public static var weekSong:Int = 0;
public static var shits:Int = 0;
public static var bads:Int = 0;
public static var goods:Int = 0;
public static var sicks:Int = 0;
public static var rep:Replay;
public static var loadRep:Bool = false;
var halloweenLevel:Bool = false; var halloweenLevel:Bool = false;
@ -77,6 +85,12 @@ class PlayState extends MusicBeatState
private var gfSpeed:Int = 1; private var gfSpeed:Int = 1;
private var health:Float = 1; private var health:Float = 1;
private var combo:Int = 0; private var combo:Int = 0;
public static var misses:Int = 0;
private var accuracy:Float = 0.00;
private var totalNotesHit:Float = 0;
private var totalPlayed:Int = 0;
private var ss:Bool = false;
private var healthBarBG:FlxSprite; private var healthBarBG:FlxSprite;
private var healthBar:FlxBar; private var healthBar:FlxBar;
@ -106,28 +120,44 @@ class PlayState extends MusicBeatState
var bottomBoppers:FlxSprite; var bottomBoppers:FlxSprite;
var santa:FlxSprite; var santa:FlxSprite;
var fc:Bool = true;
var bgGirls:BackgroundGirls; var bgGirls:BackgroundGirls;
var wiggleShit:WiggleEffect = new WiggleEffect(); var wiggleShit:WiggleEffect = new WiggleEffect();
var talking:Bool = true; var talking:Bool = true;
var songScore:Int = 0; var songScore:Int = 0;
var scoreTxt:FlxText; var scoreTxt:FlxText;
var replayTxt:FlxText;
public static var campaignScore:Int = 0; public static var campaignScore:Int = 0;
var defaultCamZoom:Float = 1.05; var defaultCamZoom:Float = 1.05;
// how big to stretch the pixel art assets
public static var daPixelZoom:Float = 6; public static var daPixelZoom:Float = 6;
public static var theFunne:Bool = true;
var funneEffect:FlxSprite;
var inCutscene:Bool = false; var inCutscene:Bool = false;
public static var repPresses:Int = 0;
public static var repReleases:Int = 0;
public static var timeCurrently:Float = 0;
public static var timeCurrentlyR:Float = 0;
override public function create() override public function create()
{ {
theFunne = FlxG.save.data.newInput;
if (FlxG.sound.music != null) if (FlxG.sound.music != null)
FlxG.sound.music.stop(); FlxG.sound.music.stop();
sicks = 0;
bads = 0;
shits = 0;
goods = 0;
// var gameCam:FlxCamera = FlxG.camera; // var gameCam:FlxCamera = FlxG.camera;
camGame = new FlxCamera(); camGame = new FlxCamera();
camHUD = new FlxCamera(); camHUD = new FlxCamera();
@ -575,6 +605,8 @@ class PlayState extends MusicBeatState
camPos.set(dad.getGraphicMidpoint().x + 300, dad.getGraphicMidpoint().y); camPos.set(dad.getGraphicMidpoint().x + 300, dad.getGraphicMidpoint().y);
} }
boyfriend = new Boyfriend(770, 450, SONG.player1); boyfriend = new Boyfriend(770, 450, SONG.player1);
// REPOSITIONING PER STAGE // REPOSITIONING PER STAGE
@ -677,11 +709,25 @@ class PlayState extends MusicBeatState
// healthBar // healthBar
add(healthBar); add(healthBar);
scoreTxt = new FlxText(healthBarBG.x + healthBarBG.width - 190, healthBarBG.y + 30, 0, "", 20); // Add Kade Engine watermark
scoreTxt.setFormat(Paths.font("vcr.ttf"), 16, FlxColor.WHITE, RIGHT); var kadeEngineWatermark = new FlxText(4,FlxG.height - 4,0,SONG.song + " " + (storyDifficulty == 2 ? "Hard" : storyDifficulty == 1 ? "Normal" : "Easy") + " - KE " + MainMenuState.kadeEngineVer, 16);
kadeEngineWatermark.setFormat(Paths.font("vcr.ttf"), 16, FlxColor.WHITE, RIGHT, FlxTextBorderStyle.OUTLINE,FlxColor.BLACK);
kadeEngineWatermark.scrollFactor.set();
add(kadeEngineWatermark);
scoreTxt = new FlxText(healthBarBG.x + healthBarBG.width / 2 - 150, healthBarBG.y + 50, 0, "", 20);
scoreTxt.setFormat(Paths.font("vcr.ttf"), 16, FlxColor.WHITE, RIGHT, FlxTextBorderStyle.OUTLINE,FlxColor.BLACK);
scoreTxt.scrollFactor.set(); scoreTxt.scrollFactor.set();
add(scoreTxt); add(scoreTxt);
replayTxt = new FlxText(healthBarBG.x + healthBarBG.width / 2 - 75, healthBarBG.y + (FlxG.save.data.downscroll ? 100 : -100), 0, "REPLAY", 20);
replayTxt.setFormat(Paths.font("vcr.ttf"), 42, FlxColor.WHITE, RIGHT, FlxTextBorderStyle.OUTLINE,FlxColor.BLACK);
replayTxt.scrollFactor.set();
if (loadRep)
{
add(replayTxt);
}
iconP1 = new HealthIcon(SONG.player1, true); iconP1 = new HealthIcon(SONG.player1, true);
iconP1.y = healthBar.y - (iconP1.height / 2); iconP1.y = healthBar.y - (iconP1.height / 2);
add(iconP1); add(iconP1);
@ -758,6 +804,9 @@ class PlayState extends MusicBeatState
} }
} }
if (!loadRep)
rep = new Replay("na");
super.create(); super.create();
} }
@ -1236,6 +1285,13 @@ class PlayState extends MusicBeatState
var startedCountdown:Bool = false; var startedCountdown:Bool = false;
var canPause:Bool = true; var canPause:Bool = true;
function truncateFloat( number : Float, precision : Int): Float {
var num = number;
num = num * Math.pow(10, precision);
num = Math.round( num ) / Math.pow(10, precision);
return num;
}
override public function update(elapsed:Float) override public function update(elapsed:Float)
{ {
#if !debug #if !debug
@ -1268,7 +1324,7 @@ class PlayState extends MusicBeatState
super.update(elapsed); super.update(elapsed);
scoreTxt.text = "Score:" + songScore; scoreTxt.text = "Score:" + songScore + " | Misses:" + misses + " | Accuracy:" + truncateFloat(accuracy, 2) + "% " + (fc ? "| FC" : misses == 0 ? "| A" : accuracy <= 75 ? "| BAD" : "");
if (FlxG.keys.justPressed.ENTER && startedCountdown && canPause) if (FlxG.keys.justPressed.ENTER && startedCountdown && canPause)
{ {
@ -1513,20 +1569,6 @@ class PlayState extends MusicBeatState
daNote.active = true; daNote.active = true;
} }
daNote.y = (strumLine.y - (Conductor.songPosition - daNote.strumTime) * (0.45 * FlxMath.roundDecimal(SONG.speed, 2)));
// i am so fucking sorry for this if condition
if (daNote.isSustainNote
&& daNote.y + daNote.offset.y <= strumLine.y + Note.swagWidth / 2
&& (!daNote.mustPress || (daNote.wasGoodHit || (daNote.prevNote.wasGoodHit && !daNote.canBeHit))))
{
var swagRect = new FlxRect(0, strumLine.y + Note.swagWidth / 2 - daNote.y, daNote.width * 2, daNote.height * 2);
swagRect.y /= daNote.scale.y;
swagRect.height -= swagRect.y;
daNote.clipRect = swagRect;
}
if (!daNote.mustPress && daNote.wasGoodHit) if (!daNote.mustPress && daNote.wasGoodHit)
{ {
if (SONG.song != 'Tutorial') if (SONG.song != 'Tutorial')
@ -1542,14 +1584,14 @@ class PlayState extends MusicBeatState
switch (Math.abs(daNote.noteData)) switch (Math.abs(daNote.noteData))
{ {
case 0:
dad.playAnim('singLEFT' + altAnim, true);
case 1:
dad.playAnim('singDOWN' + altAnim, true);
case 2: case 2:
dad.playAnim('singUP' + altAnim, true); dad.playAnim('singUP' + altAnim, true);
case 3: case 3:
dad.playAnim('singRIGHT' + altAnim, true); dad.playAnim('singRIGHT' + altAnim, true);
case 1:
dad.playAnim('singDOWN' + altAnim, true);
case 0:
dad.playAnim('singLEFT' + altAnim, true);
} }
dad.holdTimer = 0; dad.holdTimer = 0;
@ -1562,15 +1604,28 @@ class PlayState extends MusicBeatState
daNote.destroy(); daNote.destroy();
} }
if (FlxG.save.data.downscroll)
daNote.y = (strumLine.y - (Conductor.songPosition - daNote.strumTime) * (-0.45 * FlxMath.roundDecimal(SONG.speed, 2)));
else
daNote.y = (strumLine.y - (Conductor.songPosition - daNote.strumTime) * (0.45 * FlxMath.roundDecimal(SONG.speed, 2)));
//trace(daNote.y);
// WIP interpolation shit? Need to fix the pause issue // WIP interpolation shit? Need to fix the pause issue
// daNote.y = (strumLine.y - (songTime - daNote.strumTime) * (0.45 * PlayState.SONG.speed)); // daNote.y = (strumLine.y - (songTime - daNote.strumTime) * (0.45 * PlayState.SONG.speed));
if (daNote.y < -daNote.height) if (daNote.y < -daNote.height && !FlxG.save.data.downscroll || daNote.y >= strumLine.y + 106 && FlxG.save.data.downscroll)
{ {
if (daNote.tooLate || !daNote.wasGoodHit) if (daNote.isSustainNote && daNote.wasGoodHit)
{ {
health -= 0.0475; daNote.kill();
notes.remove(daNote, true);
daNote.destroy();
}
else
{
health -= 0.075;
vocals.volume = 0; vocals.volume = 0;
if (theFunne)
noteMiss(daNote.noteData);
} }
daNote.active = false; daNote.active = false;
@ -1583,6 +1638,7 @@ class PlayState extends MusicBeatState
}); });
} }
if (!inCutscene) if (!inCutscene)
keyShit(); keyShit();
@ -1594,6 +1650,9 @@ class PlayState extends MusicBeatState
function endSong():Void function endSong():Void
{ {
if (!loadRep)
rep.SaveReplay();
canPause = false; canPause = false;
FlxG.sound.music.volume = 0; FlxG.sound.music.volume = 0;
vocals.volume = 0; vocals.volume = 0;
@ -1692,21 +1751,50 @@ class PlayState extends MusicBeatState
var daRating:String = "sick"; var daRating:String = "sick";
if (noteDiff > Conductor.safeZoneOffset * 0.9) if (noteDiff > Conductor.safeZoneOffset * 2)
{ {
daRating = 'shit'; daRating = 'shit';
score = 50; totalNotesHit -= 2;
noteMiss(0);
score = -3000;
ss = false;
shits++;
} }
else if (noteDiff > Conductor.safeZoneOffset * 0.75) else if (noteDiff < Conductor.safeZoneOffset * -2)
{
daRating = 'shit';
totalNotesHit -= 2;
noteMiss(0);
score = -3000;
ss = false;
shits++;
}
else if (noteDiff > Conductor.safeZoneOffset * 0.45)
{ {
daRating = 'bad'; daRating = 'bad';
score = 100; score = -1000;
totalNotesHit += 0.2;
ss = false;
bads++;
} }
else if (noteDiff > Conductor.safeZoneOffset * 0.2) else if (noteDiff > Conductor.safeZoneOffset * 0.25)
{ {
daRating = 'good'; daRating = 'good';
totalNotesHit += 0.65;
score = 200; score = 200;
ss = false;
goods++;
} }
if (daRating == 'sick')
{
totalNotesHit += 1;
sicks++;
}
if (daRating != 'shit' || daRating != 'bad')
{
songScore += score; songScore += score;
@ -1827,6 +1915,17 @@ class PlayState extends MusicBeatState
curSection += 1; curSection += 1;
} }
}
public function NearlyEquals(value1:Float, value2:Float, unimportantDifference:Float = 10):Bool
{
return Math.abs(FlxMath.roundDecimal(value1, 1) - FlxMath.roundDecimal(value2, 1)) < unimportantDifference;
}
var upHold:Bool = false;
var downHold:Bool = false;
var rightHold:Bool = false;
var leftHold:Bool = false;
private function keyShit():Void private function keyShit():Void
{ {
@ -1846,11 +1945,68 @@ class PlayState extends MusicBeatState
var downR = controls.DOWN_R; var downR = controls.DOWN_R;
var leftR = controls.LEFT_R; var leftR = controls.LEFT_R;
if (loadRep) // replay code
{
// disable input
up = false;
down = false;
right = false;
left = false;
// new input
//if (rep.replay.keys[repPresses].time == Conductor.songPosition)
// trace('DO IT!!!!!');
//timeCurrently = Math.abs(rep.replay.keyPresses[repPresses].time - Conductor.songPosition);
//timeCurrentlyR = Math.abs(rep.replay.keyReleases[repReleases].time - Conductor.songPosition);
if (repPresses < rep.replay.keyPresses.length && repReleases < rep.replay.keyReleases.length)
{
upP = NearlyEquals(rep.replay.keyPresses[repPresses].time, Conductor.songPosition) && rep.replay.keyPresses[repPresses].key == "up";
rightP = NearlyEquals(rep.replay.keyPresses[repPresses].time, Conductor.songPosition) && rep.replay.keyPresses[repPresses].key == "right";
downP = NearlyEquals(rep.replay.keyPresses[repPresses].time, Conductor.songPosition) && rep.replay.keyPresses[repPresses].key == "down";
leftP = NearlyEquals(rep.replay.keyPresses[repPresses].time, Conductor.songPosition) && rep.replay.keyPresses[repPresses].key == "left";
upR = NearlyEquals(rep.replay.keyReleases[repReleases].time, Conductor.songPosition) && rep.replay.keyReleases[repReleases].key == "up";
rightR = NearlyEquals(rep.replay.keyReleases[repReleases].time, Conductor.songPosition) && rep.replay.keyReleases[repReleases].key == "right";
downR = NearlyEquals(rep.replay.keyReleases[repReleases].time, Conductor.songPosition) && rep.replay.keyReleases[repReleases].key == "down";
leftR = NearlyEquals(rep.replay.keyReleases[repReleases].time, Conductor.songPosition) && rep.replay.keyReleases[repReleases].key == "left";
upHold = upP ? true : upR ? false : true;
rightHold = rightP ? true : rightR ? false : true;
downHold = downP ? true : downR ? false : true;
leftHold = leftP ? true : leftR ? false : true;
}
}
else if (!loadRep) // record replay code
{
if (upP)
rep.replay.keyPresses.push({time: Conductor.songPosition, key: "up"});
if (rightP)
rep.replay.keyPresses.push({time: Conductor.songPosition, key: "right"});
if (downP)
rep.replay.keyPresses.push({time: Conductor.songPosition, key: "down"});
if (leftP)
rep.replay.keyPresses.push({time: Conductor.songPosition, key: "left"});
if (upR)
rep.replay.keyReleases.push({time: Conductor.songPosition, key: "up"});
if (rightR)
rep.replay.keyReleases.push({time: Conductor.songPosition, key: "right"});
if (downR)
rep.replay.keyReleases.push({time: Conductor.songPosition, key: "down"});
if (leftR)
rep.replay.keyReleases.push({time: Conductor.songPosition, key: "left"});
}
var controlArray:Array<Bool> = [leftP, downP, upP, rightP]; var controlArray:Array<Bool> = [leftP, downP, upP, rightP];
// FlxG.watch.addQuick('asdfa', upP); // FlxG.watch.addQuick('asdfa', upP);
if ((upP || rightP || downP || leftP) && !boyfriend.stunned && generatedMusic) if ((upP || rightP || downP || leftP) && !boyfriend.stunned && generatedMusic)
{ {
repPresses++;
boyfriend.holdTimer = 0; boyfriend.holdTimer = 0;
var possibleNotes:Array<Note> = []; var possibleNotes:Array<Note> = [];
@ -1859,7 +2015,7 @@ class PlayState extends MusicBeatState
notes.forEachAlive(function(daNote:Note) notes.forEachAlive(function(daNote:Note)
{ {
if (daNote.canBeHit && daNote.mustPress && !daNote.tooLate && !daNote.wasGoodHit) if (daNote.canBeHit && daNote.mustPress && !daNote.tooLate)
{ {
// the sorting probably doesn't need to be in here? who cares lol // the sorting probably doesn't need to be in here? who cares lol
possibleNotes.push(daNote); possibleNotes.push(daNote);
@ -1869,6 +2025,7 @@ class PlayState extends MusicBeatState
} }
}); });
if (possibleNotes.length > 0) if (possibleNotes.length > 0)
{ {
var daNote = possibleNotes[0]; var daNote = possibleNotes[0];
@ -1893,25 +2050,58 @@ class PlayState extends MusicBeatState
if (controlArray[ignoreList[shit]]) if (controlArray[ignoreList[shit]])
inIgnoreList = true; inIgnoreList = true;
} }
if (!inIgnoreList) if (!inIgnoreList && !theFunne)
badNoteCheck(); badNoteCheck();
} }
} }
} }
else if (possibleNotes[0].noteData == possibleNotes[1].noteData) else if (possibleNotes[0].noteData == possibleNotes[1].noteData)
{ {
if (loadRep)
{
if (NearlyEquals(daNote.strumTime,rep.replay.keyPresses[repPresses].time, 30))
{
goodNoteHit(daNote);
trace('force note hit');
}
else
noteCheck(controlArray[daNote.noteData], daNote);
}
else
noteCheck(controlArray[daNote.noteData], daNote); noteCheck(controlArray[daNote.noteData], daNote);
} }
else else
{ {
for (coolNote in possibleNotes) for (coolNote in possibleNotes)
{ {
if (loadRep)
{
if (NearlyEquals(coolNote.strumTime,rep.replay.keyPresses[repPresses].time, 30))
{
goodNoteHit(coolNote);
trace('force note hit');
}
else
noteCheck(controlArray[daNote.noteData], daNote);
}
else
noteCheck(controlArray[coolNote.noteData], coolNote); noteCheck(controlArray[coolNote.noteData], coolNote);
} }
} }
} }
else // regular notes? else // regular notes?
{ {
if (loadRep)
{
if (NearlyEquals(daNote.strumTime,rep.replay.keyPresses[repPresses].time, 30))
{
goodNoteHit(daNote);
trace('force note hit');
}
else
noteCheck(controlArray[daNote.noteData], daNote);
}
else
noteCheck(controlArray[daNote.noteData], daNote); noteCheck(controlArray[daNote.noteData], daNote);
} }
/* /*
@ -1935,23 +2125,21 @@ class PlayState extends MusicBeatState
if (upP || rightP || downP || leftP) if (upP || rightP || downP || leftP)
noteCheck(leftP, daNote); noteCheck(leftP, daNote);
} }
*/
//this is already done in noteCheck / goodNoteHit
if (daNote.wasGoodHit) if (daNote.wasGoodHit)
{ {
daNote.kill(); daNote.kill();
notes.remove(daNote, true); notes.remove(daNote, true);
daNote.destroy(); daNote.destroy();
} }
*/
} }
else else if (!theFunne)
{ {
badNoteCheck(); badNoteCheck();
} }
} }
if ((up || right || down || left) && !boyfriend.stunned && generatedMusic) if ((up || right || down || left) && generatedMusic || (upHold || downHold || leftHold || rightHold) && loadRep && generatedMusic)
{ {
notes.forEachAlive(function(daNote:Note) notes.forEachAlive(function(daNote:Note)
{ {
@ -1960,17 +2148,17 @@ class PlayState extends MusicBeatState
switch (daNote.noteData) switch (daNote.noteData)
{ {
// NOTES YOU ARE HOLDING // NOTES YOU ARE HOLDING
case 0:
if (left)
goodNoteHit(daNote);
case 1:
if (down)
goodNoteHit(daNote);
case 2: case 2:
if (up) if (up || upHold)
goodNoteHit(daNote); goodNoteHit(daNote);
case 3: case 3:
if (right) if (right || rightHold)
goodNoteHit(daNote);
case 1:
if (down || downHold)
goodNoteHit(daNote);
case 0:
if (left || leftHold)
goodNoteHit(daNote); goodNoteHit(daNote);
} }
} }
@ -1989,26 +2177,41 @@ class PlayState extends MusicBeatState
{ {
switch (spr.ID) switch (spr.ID)
{ {
case 0:
if (leftP && spr.animation.curAnim.name != 'confirm')
spr.animation.play('pressed');
if (leftR)
spr.animation.play('static');
case 1:
if (downP && spr.animation.curAnim.name != 'confirm')
spr.animation.play('pressed');
if (downR)
spr.animation.play('static');
case 2: case 2:
if (upP && spr.animation.curAnim.name != 'confirm') if (upP && spr.animation.curAnim.name != 'confirm')
{
spr.animation.play('pressed'); spr.animation.play('pressed');
trace('play');
}
if (upR) if (upR)
{
spr.animation.play('static'); spr.animation.play('static');
repReleases++;
}
case 3: case 3:
if (rightP && spr.animation.curAnim.name != 'confirm') if (rightP && spr.animation.curAnim.name != 'confirm')
spr.animation.play('pressed'); spr.animation.play('pressed');
if (rightR) if (rightR)
{
spr.animation.play('static'); spr.animation.play('static');
repReleases++;
}
case 1:
if (downP && spr.animation.curAnim.name != 'confirm')
spr.animation.play('pressed');
if (downR)
{
spr.animation.play('static');
repReleases++;
}
case 0:
if (leftP && spr.animation.curAnim.name != 'confirm')
spr.animation.play('pressed');
if (leftR)
{
spr.animation.play('static');
repReleases++;
}
} }
if (spr.animation.curAnim.name == 'confirm' && !curStage.startsWith('school')) if (spr.animation.curAnim.name == 'confirm' && !curStage.startsWith('school'))
@ -2039,14 +2242,6 @@ class PlayState extends MusicBeatState
// FlxG.sound.play(Paths.sound('missnote1'), 1, false); // FlxG.sound.play(Paths.sound('missnote1'), 1, false);
// FlxG.log.add('played imss note'); // FlxG.log.add('played imss note');
boyfriend.stunned = true;
// get stunned for 5 seconds
new FlxTimer().start(5 / 60, function(tmr:FlxTimer)
{
boyfriend.stunned = false;
});
switch (direction) switch (direction)
{ {
case 0: case 0:
@ -2072,19 +2267,49 @@ class PlayState extends MusicBeatState
if (leftP) if (leftP)
noteMiss(0); noteMiss(0);
if (downP)
noteMiss(1);
if (upP) if (upP)
noteMiss(2); noteMiss(2);
if (rightP) if (rightP)
noteMiss(3); noteMiss(3);
if (downP)
noteMiss(1);
updateAccuracy();
} }
function noteCheck(keyP:Bool, note:Note):Void function updateAccuracy()
{
if (misses > 0 || accuracy < 96)
fc = false;
else
fc = true;
totalPlayed += 1;
accuracy = totalNotesHit / totalPlayed * 100;
}
function noteCheck(keyP:Bool, note:Note):Void // sorry lol
{
if (loadRep)
{ {
if (keyP) if (keyP)
goodNoteHit(note); goodNoteHit(note);
else else if (!theFunne)
badNoteCheck();
else if (rep.replay.keyPresses.length > repPresses && !keyP)
{
if (NearlyEquals(note.strumTime,rep.replay.keyPresses[repPresses].time, 4))
{
goodNoteHit(note);
}
else if (!theFunne)
badNoteCheck();
}
}
else if (keyP)
{
goodNoteHit(note);
}
else if (!theFunne)
{ {
badNoteCheck(); badNoteCheck();
} }
@ -2099,6 +2324,8 @@ class PlayState extends MusicBeatState
popUpScore(note.strumTime); popUpScore(note.strumTime);
combo += 1; combo += 1;
} }
else
totalNotesHit += 1;
if (note.noteData >= 0) if (note.noteData >= 0)
health += 0.023; health += 0.023;
@ -2107,14 +2334,14 @@ class PlayState extends MusicBeatState
switch (note.noteData) switch (note.noteData)
{ {
case 0:
boyfriend.playAnim('singLEFT', true);
case 1:
boyfriend.playAnim('singDOWN', true);
case 2: case 2:
boyfriend.playAnim('singUP', true); boyfriend.playAnim('singUP', true);
case 3: case 3:
boyfriend.playAnim('singRIGHT', true); boyfriend.playAnim('singRIGHT', true);
case 1:
boyfriend.playAnim('singDOWN', true);
case 0:
boyfriend.playAnim('singLEFT', true);
} }
playerStrums.forEach(function(spr:FlxSprite) playerStrums.forEach(function(spr:FlxSprite)
@ -2128,14 +2355,14 @@ class PlayState extends MusicBeatState
note.wasGoodHit = true; note.wasGoodHit = true;
vocals.volume = 1; vocals.volume = 1;
if (!note.isSustainNote)
{
note.kill(); note.kill();
notes.remove(note, true); notes.remove(note, true);
note.destroy(); note.destroy();
updateAccuracy();
} }
} }
}
var fastCarCanDrive:Bool = true; var fastCarCanDrive:Bool = true;

101
source/Replay.hx Normal file
View File

@ -0,0 +1,101 @@
#if sys
import sys.io.File;
#end
import Controls.Control;
import flixel.FlxG;
import openfl.events.IOErrorEvent;
import openfl.events.Event;
import openfl.net.FileReference;
import lime.utils.Assets;
import haxe.Json;
import flixel.input.keyboard.FlxKey;
import openfl.utils.Dictionary;
typedef KeyPress =
{
public var time:Float;
public var key:String;
}
typedef KeyRelease =
{
public var time:Float;
public var key:String;
}
typedef ReplayJSON =
{
public var replayGameVer:String;
public var timestamp:Date;
public var songName:String;
public var songDiff:Int;
public var keyPresses:Array<KeyPress>;
public var keyReleases:Array<KeyRelease>;
}
class Replay
{
public static var version:String = "1.0"; // replay file version
public var path:String = "";
public var replay:ReplayJSON;
public function new(path:String)
{
this.path = path;
replay = {
songName: "Tutorial",
songDiff: 1,
keyPresses: [],
keyReleases: [],
replayGameVer: version,
timestamp: Date.now()
};
}
public static function LoadReplay(path:String):Replay
{
var rep:Replay = new Replay(path);
rep.LoadFromJSON();
trace('basic replay data:\nSong Name: ' + rep.replay.songName + '\nSong Diff: ' + rep.replay.songDiff + '\nKeys Length: ' + rep.replay.keyPresses.length);
return rep;
}
public function SaveReplay()
{
var json = {
"songName": PlayState.SONG.song.toLowerCase(),
"songDiff": PlayState.storyDifficulty,
"keyPresses": replay.keyPresses,
"keyReleases": replay.keyReleases,
"timestamp": Date.now(),
"replayGameVer": version
};
var data:String = Json.stringify(json);
#if sys
File.saveContent("assets/replays/replay-" + PlayState.SONG.song + "-time" + Date.now().getTime() + ".kadeReplay", data);
#end
}
public function LoadFromJSON()
{
#if sys
trace('loading ' + Sys.getCwd() + 'assets\\replays\\' + path + ' replay...');
try
{
var repl:ReplayJSON = cast Json.parse(File.getContent(Sys.getCwd() + "assets\\replays\\" + path));
replay = repl;
}
catch(e)
{
trace('failed!\n' + e.message);
}
#end
}
}

View File

@ -54,7 +54,7 @@ class TitleState extends MusicBeatState
super.create(); super.create();
NGio.noLogin(APIStuff.API); // NGio.noLogin(APIStuff.API);
#if ng #if ng
var ng:NGio = new NGio(APIStuff.API, APIStuff.EncKey); var ng:NGio = new NGio(APIStuff.API, APIStuff.EncKey);
@ -364,10 +364,9 @@ class TitleState extends MusicBeatState
// credTextShit.text = 'In association \nwith'; // credTextShit.text = 'In association \nwith';
// credTextShit.screenCenter(); // credTextShit.screenCenter();
case 5: case 5:
createCoolText(['In association', 'with']); createCoolText(['Kade Engine', 'by']);
case 7: case 7:
addMoreText('newgrounds'); addMoreText('KadeDeveloper');
ngSpr.visible = true;
// credTextShit.text += '\nNewgrounds'; // credTextShit.text += '\nNewgrounds';
case 8: case 8:
deleteCoolText(); deleteCoolText();