Merge branch 'master' into botplay-light-strums
This commit is contained in:
commit
7ce5049481
@ -345,7 +345,7 @@ class Character extends FlxSprite
|
|||||||
antialiasing = false;
|
antialiasing = false;
|
||||||
|
|
||||||
case 'spirit':
|
case 'spirit':
|
||||||
frames = Paths.getPackerAtlas('spirit','shared');
|
frames = Paths.getPackerAtlas('spirit','shared',true);
|
||||||
animation.addByPrefix('idle', "idle spirit_", 24, false);
|
animation.addByPrefix('idle', "idle spirit_", 24, false);
|
||||||
animation.addByPrefix('singUP', "up_", 24, false);
|
animation.addByPrefix('singUP', "up_", 24, false);
|
||||||
animation.addByPrefix('singRIGHT', "right_", 24, false);
|
animation.addByPrefix('singRIGHT', "right_", 24, false);
|
||||||
|
@ -131,6 +131,8 @@ class ChartingState extends MusicBeatState
|
|||||||
|
|
||||||
var camFollow:FlxObject;
|
var camFollow:FlxObject;
|
||||||
|
|
||||||
|
public var waveform:Waveform;
|
||||||
|
|
||||||
public static var latestChartVersion = "2";
|
public static var latestChartVersion = "2";
|
||||||
|
|
||||||
override function create()
|
override function create()
|
||||||
@ -315,6 +317,7 @@ class ChartingState extends MusicBeatState
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
trace(height);
|
trace(height);
|
||||||
|
|
||||||
gridBlackLine = new FlxSprite(gridBG.width / 2).makeGraphic(2, height, FlxColor.BLACK);
|
gridBlackLine = new FlxSprite(gridBG.width / 2).makeGraphic(2, height, FlxColor.BLACK);
|
||||||
@ -385,6 +388,23 @@ class ChartingState extends MusicBeatState
|
|||||||
|
|
||||||
|
|
||||||
add(sectionRenderes);
|
add(sectionRenderes);
|
||||||
|
|
||||||
|
// fuckin stupid ass bitch ass fucking waveform
|
||||||
|
/*if (PlayState.isSM)
|
||||||
|
{
|
||||||
|
waveform = new Waveform(0,0,PlayState.pathToSm + "/" + PlayState.sm.header.MUSIC,height);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (_song.needsVoices)
|
||||||
|
waveform = new Waveform(0,0,Paths.voices(_song.song),height);
|
||||||
|
else
|
||||||
|
waveform = new Waveform(0,0,Paths.inst(_song.song),height);
|
||||||
|
}
|
||||||
|
|
||||||
|
waveform.drawWaveform();
|
||||||
|
add(waveform);
|
||||||
|
*/
|
||||||
add(dummyArrow);
|
add(dummyArrow);
|
||||||
add(strumLine);
|
add(strumLine);
|
||||||
add(lines);
|
add(lines);
|
||||||
@ -1236,7 +1256,17 @@ class ChartingState extends MusicBeatState
|
|||||||
check_altAnim.checked = section.altAnim;
|
check_altAnim.checked = section.altAnim;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var startSection:FlxButton = new FlxButton(10, 85, "Play Here", function() {
|
||||||
|
PlayState.SONG = _song;
|
||||||
|
FlxG.sound.music.stop();
|
||||||
|
if (!PlayState.isSM)
|
||||||
|
vocals.stop();
|
||||||
|
PlayState.startTime = lastUpdatedSection.startTime;
|
||||||
|
LoadingState.loadAndSwitchState(new PlayState());
|
||||||
|
});
|
||||||
|
|
||||||
tab_group_section.add(refresh);
|
tab_group_section.add(refresh);
|
||||||
|
tab_group_section.add(startSection);
|
||||||
tab_group_section.add(stepperCopy);
|
tab_group_section.add(stepperCopy);
|
||||||
tab_group_section.add(stepperCopyLabel);
|
tab_group_section.add(stepperCopyLabel);
|
||||||
tab_group_section.add(check_mustHitSection);
|
tab_group_section.add(check_mustHitSection);
|
||||||
|
@ -476,6 +476,7 @@ class FreeplayState extends MusicBeatState
|
|||||||
#end
|
#end
|
||||||
|
|
||||||
diffCalcText.text = 'RATING: ${DiffCalc.CalculateDiff(songData.get(songs[curSelected].songName)[curDifficulty])}';
|
diffCalcText.text = 'RATING: ${DiffCalc.CalculateDiff(songData.get(songs[curSelected].songName)[curDifficulty])}';
|
||||||
|
diffText.text = CoolUtil.difficultyFromInt(curDifficulty).toUpperCase();
|
||||||
|
|
||||||
#if PRELOAD_ALL
|
#if PRELOAD_ALL
|
||||||
if (songs[curSelected].songCharacter == "sm")
|
if (songs[curSelected].songCharacter == "sm")
|
||||||
|
@ -65,6 +65,8 @@ class GameplayCustomizeState extends MusicBeatState
|
|||||||
camHUD.bgColor.alpha = 0;
|
camHUD.bgColor.alpha = 0;
|
||||||
FlxG.cameras.add(camHUD);
|
FlxG.cameras.add(camHUD);
|
||||||
|
|
||||||
|
camHUD.zoom = FlxG.save.data.zoom;
|
||||||
|
|
||||||
background.scrollFactor.set(0.9,0.9);
|
background.scrollFactor.set(0.9,0.9);
|
||||||
curt.scrollFactor.set(0.9,0.9);
|
curt.scrollFactor.set(0.9,0.9);
|
||||||
front.scrollFactor.set(0.9,0.9);
|
front.scrollFactor.set(0.9,0.9);
|
||||||
@ -120,7 +122,7 @@ class GameplayCustomizeState extends MusicBeatState
|
|||||||
generateStaticArrows(0);
|
generateStaticArrows(0);
|
||||||
generateStaticArrows(1);
|
generateStaticArrows(1);
|
||||||
|
|
||||||
text = new FlxText(5, FlxG.height + 40, 0, "Click and drag around gameplay elements to customize their positions.\nPress R to reset.\nPress Escape to go back.", 12);
|
text = new FlxText(5, FlxG.height + 40, 0, "Click and drag around gameplay elements to customize their positions.\nPress R to reset. +/- to change zoom.\nPress Escape to go back.", 12);
|
||||||
text.scrollFactor.set();
|
text.scrollFactor.set();
|
||||||
text.setFormat("VCR OSD Mono", 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
|
text.setFormat("VCR OSD Mono", 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
|
||||||
|
|
||||||
@ -168,6 +170,18 @@ class GameplayCustomizeState extends MusicBeatState
|
|||||||
for (i in strumLineNotes)
|
for (i in strumLineNotes)
|
||||||
i.y = strumLine.y;
|
i.y = strumLine.y;
|
||||||
|
|
||||||
|
if (FlxG.keys.pressed.PLUS)
|
||||||
|
{
|
||||||
|
FlxG.save.data.zoom += 0.1;
|
||||||
|
camHUD.zoom = FlxG.save.data.zoom;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (FlxG.keys.pressed.MINUS)
|
||||||
|
{
|
||||||
|
FlxG.save.data.zoom -= 0.1;
|
||||||
|
camHUD.zoom = FlxG.save.data.zoom;
|
||||||
|
}
|
||||||
|
|
||||||
if (FlxG.mouse.overlaps(sick) && FlxG.mouse.justReleased)
|
if (FlxG.mouse.overlaps(sick) && FlxG.mouse.justReleased)
|
||||||
{
|
{
|
||||||
FlxG.save.data.changedHitX = sick.x;
|
FlxG.save.data.changedHitX = sick.x;
|
||||||
|
@ -112,6 +112,9 @@ class KadeEngineData
|
|||||||
if (FlxG.save.data.editor == null)
|
if (FlxG.save.data.editor == null)
|
||||||
FlxG.save.data.editor = true;
|
FlxG.save.data.editor = true;
|
||||||
|
|
||||||
|
if (FlxG.save.data.zoom == null)
|
||||||
|
FlxG.save.data.zoom = 1;
|
||||||
|
|
||||||
var gamepad:FlxGamepad = FlxG.gamepads.lastActive;
|
var gamepad:FlxGamepad = FlxG.gamepads.lastActive;
|
||||||
|
|
||||||
KeyBinds.gamepad = gamepad != null;
|
KeyBinds.gamepad = gamepad != null;
|
||||||
|
@ -83,12 +83,15 @@ class Note extends FlxSprite
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
this.strumTime = strumTime;
|
this.strumTime = strumTime;
|
||||||
rStrumTime = strumTime - (FlxG.save.data.offset + PlayState.songOffset);
|
|
||||||
#if sys
|
#if sys
|
||||||
if (PlayState.isSM)
|
if (PlayState.isSM)
|
||||||
{
|
{
|
||||||
rStrumTime = Math.round(rStrumTime + Std.parseFloat(PlayState.sm.header.OFFSET));
|
rStrumTime = strumTime;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
rStrumTime = (strumTime - FlxG.save.data.offset + PlayState.songOffset);
|
||||||
|
#else
|
||||||
|
rStrumTime = (strumTime - FlxG.save.data.offset + PlayState.songOffset);
|
||||||
#end
|
#end
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -240,25 +243,23 @@ class Note extends FlxSprite
|
|||||||
|
|
||||||
if (mustPress)
|
if (mustPress)
|
||||||
{
|
{
|
||||||
// ass
|
|
||||||
if (isSustainNote)
|
if (isSustainNote)
|
||||||
{
|
{
|
||||||
if (strumTime > Conductor.songPosition - (Conductor.safeZoneOffset * 1.5)
|
if (strumTime - Conductor.songPosition <= ((166 * Conductor.timeScale) * 0.5)
|
||||||
&& strumTime < Conductor.songPosition + (Conductor.safeZoneOffset * 0.5))
|
&& strumTime - Conductor.songPosition >= (-166 * Conductor.timeScale))
|
||||||
canBeHit = true;
|
canBeHit = true;
|
||||||
else
|
else
|
||||||
canBeHit = false;
|
canBeHit = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (strumTime > Conductor.songPosition - Conductor.safeZoneOffset
|
if (strumTime - Conductor.songPosition <= (166 * Conductor.timeScale)
|
||||||
&& strumTime < Conductor.songPosition + Conductor.safeZoneOffset)
|
&& strumTime - Conductor.songPosition >= (-166 * Conductor.timeScale))
|
||||||
canBeHit = true;
|
canBeHit = true;
|
||||||
else
|
else
|
||||||
canBeHit = false;
|
canBeHit = false;
|
||||||
}
|
}
|
||||||
|
if (strumTime - Conductor.songPosition < -166 && !wasGoodHit)
|
||||||
if (strumTime < Conductor.songPosition - Conductor.safeZoneOffset * Conductor.timeScale && !wasGoodHit)
|
|
||||||
tooLate = true;
|
tooLate = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -159,7 +159,10 @@ class PlayState extends MusicBeatState
|
|||||||
|
|
||||||
public static var misses:Int = 0;
|
public static var misses:Int = 0;
|
||||||
public static var campaignMisses:Int = 0;
|
public static var campaignMisses:Int = 0;
|
||||||
|
public static var campaignSicks:Int = 0;
|
||||||
|
public static var campaignGoods:Int = 0;
|
||||||
|
public static var campaignBads:Int = 0;
|
||||||
|
public static var campaignShits:Int = 0;
|
||||||
|
|
||||||
public var accuracy:Float = 0.00;
|
public var accuracy:Float = 0.00;
|
||||||
|
|
||||||
@ -292,13 +295,11 @@ class PlayState extends MusicBeatState
|
|||||||
if (FlxG.sound.music != null)
|
if (FlxG.sound.music != null)
|
||||||
FlxG.sound.music.stop();
|
FlxG.sound.music.stop();
|
||||||
|
|
||||||
if (!isStoryMode)
|
|
||||||
{
|
|
||||||
sicks = 0;
|
sicks = 0;
|
||||||
bads = 0;
|
bads = 0;
|
||||||
shits = 0;
|
shits = 0;
|
||||||
goods = 0;
|
goods = 0;
|
||||||
}
|
|
||||||
misses = 0;
|
misses = 0;
|
||||||
|
|
||||||
highestCombo = 0;
|
highestCombo = 0;
|
||||||
@ -311,6 +312,7 @@ class PlayState extends MusicBeatState
|
|||||||
PlayStateChangeables.scrollSpeed = FlxG.save.data.scrollSpeed;
|
PlayStateChangeables.scrollSpeed = FlxG.save.data.scrollSpeed;
|
||||||
PlayStateChangeables.botPlay = FlxG.save.data.botplay;
|
PlayStateChangeables.botPlay = FlxG.save.data.botplay;
|
||||||
PlayStateChangeables.Optimize = FlxG.save.data.optimize;
|
PlayStateChangeables.Optimize = FlxG.save.data.optimize;
|
||||||
|
PlayStateChangeables.zoom = FlxG.save.data.zoom;
|
||||||
|
|
||||||
// pre lowercasing the song name (create)
|
// pre lowercasing the song name (create)
|
||||||
var songLowercase = StringTools.replace(PlayState.SONG.song, " ", "-").toLowerCase();
|
var songLowercase = StringTools.replace(PlayState.SONG.song, " ", "-").toLowerCase();
|
||||||
@ -397,6 +399,8 @@ class PlayState extends MusicBeatState
|
|||||||
FlxG.cameras.add(camSustains);
|
FlxG.cameras.add(camSustains);
|
||||||
FlxG.cameras.add(camNotes);
|
FlxG.cameras.add(camNotes);
|
||||||
|
|
||||||
|
camHUD.zoom = PlayStateChangeables.zoom;
|
||||||
|
|
||||||
FlxCamera.defaultCameras = [camGame];
|
FlxCamera.defaultCameras = [camGame];
|
||||||
|
|
||||||
persistentUpdate = true;
|
persistentUpdate = true;
|
||||||
@ -1568,6 +1572,9 @@ class PlayState extends MusicBeatState
|
|||||||
keys[data] = false;
|
keys[data] = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public var closestNotes:Array<Note> = [];
|
||||||
|
|
||||||
|
|
||||||
private function handleInput(evt:KeyboardEvent):Void
|
private function handleInput(evt:KeyboardEvent):Void
|
||||||
{ // this actually handles press inputs
|
{ // this actually handles press inputs
|
||||||
|
|
||||||
@ -1623,13 +1630,9 @@ class PlayState extends MusicBeatState
|
|||||||
var ana = new Ana(Conductor.songPosition, null, false, "miss", data);
|
var ana = new Ana(Conductor.songPosition, null, false, "miss", data);
|
||||||
|
|
||||||
var dataNotes = [];
|
var dataNotes = [];
|
||||||
notes.forEachAlive(function(daNote:Note)
|
for(i in closestNotes)
|
||||||
{
|
if (i.noteData == data)
|
||||||
if (daNote.canBeHit && daNote.mustPress && !daNote.tooLate && !daNote.wasGoodHit && daNote.noteData == data)
|
dataNotes.push(i);
|
||||||
dataNotes.push(daNote);
|
|
||||||
}); // Collect notes that can be hit
|
|
||||||
|
|
||||||
dataNotes.sort((a, b) -> Std.int(a.strumTime - b.strumTime)); // sort by the earliest note
|
|
||||||
|
|
||||||
if (dataNotes.length != 0)
|
if (dataNotes.length != 0)
|
||||||
{
|
{
|
||||||
@ -1679,7 +1682,7 @@ class PlayState extends MusicBeatState
|
|||||||
ana.hit = false;
|
ana.hit = false;
|
||||||
ana.hitJudge = "shit";
|
ana.hitJudge = "shit";
|
||||||
ana.nearestNote = [];
|
ana.nearestNote = [];
|
||||||
health -= 0.10;
|
health -= 0.30;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2207,6 +2210,8 @@ class PlayState extends MusicBeatState
|
|||||||
perfectMode = false;
|
perfectMode = false;
|
||||||
#end
|
#end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (updateFrame == 4)
|
if (updateFrame == 4)
|
||||||
{
|
{
|
||||||
TimingStruct.clearTimings();
|
TimingStruct.clearTimings();
|
||||||
@ -2335,6 +2340,15 @@ class PlayState extends MusicBeatState
|
|||||||
if (i <= playerStrums.length)
|
if (i <= playerStrums.length)
|
||||||
playerStrums.members[i].visible = p2;
|
playerStrums.members[i].visible = p2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
camNotes.zoom = camHUD.zoom;
|
||||||
|
camNotes.x = camHUD.x;
|
||||||
|
camNotes.y = camHUD.y;
|
||||||
|
camNotes.angle = camHUD.angle;
|
||||||
|
camSustains.zoom = camHUD.zoom;
|
||||||
|
camSustains.x = camHUD.x;
|
||||||
|
camSustains.y = camHUD.y;
|
||||||
|
camSustains.angle = camHUD.angle;
|
||||||
}
|
}
|
||||||
#end
|
#end
|
||||||
|
|
||||||
@ -2574,6 +2588,20 @@ class PlayState extends MusicBeatState
|
|||||||
|
|
||||||
if (generatedMusic && PlayState.SONG.notes[Std.int(curStep / 16)] != null)
|
if (generatedMusic && PlayState.SONG.notes[Std.int(curStep / 16)] != null)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
closestNotes = [];
|
||||||
|
|
||||||
|
notes.forEachAlive(function(daNote:Note)
|
||||||
|
{
|
||||||
|
if (daNote.canBeHit && daNote.mustPress && !daNote.tooLate && !daNote.wasGoodHit)
|
||||||
|
closestNotes.push(daNote);
|
||||||
|
}); // Collect notes that can be hit
|
||||||
|
|
||||||
|
closestNotes.sort((a, b) -> Std.int(a.strumTime - b.strumTime));
|
||||||
|
|
||||||
|
if (closestNotes.length != 0)
|
||||||
|
FlxG.watch.addQuick("Current Note",closestNotes[0].strumTime - Conductor.songPosition);
|
||||||
|
|
||||||
// Make sure Girlfriend cheers only for certain songs
|
// Make sure Girlfriend cheers only for certain songs
|
||||||
if (allowedToHeadbang)
|
if (allowedToHeadbang)
|
||||||
{
|
{
|
||||||
@ -3002,6 +3030,10 @@ class PlayState extends MusicBeatState
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Accessing the animation name directly to play it
|
// Accessing the animation name directly to play it
|
||||||
|
if (!daNote.isParent && daNote.parent != null)
|
||||||
|
{
|
||||||
|
if (daNote.spotInLine != daNote.parent.children.length - 1)
|
||||||
|
{
|
||||||
var singData:Int = Std.int(Math.abs(daNote.noteData));
|
var singData:Int = Std.int(Math.abs(daNote.noteData));
|
||||||
dad.playAnim('sing' + dataSuffix[singData] + altAnim, true);
|
dad.playAnim('sing' + dataSuffix[singData] + altAnim, true);
|
||||||
|
|
||||||
@ -3033,7 +3065,42 @@ class PlayState extends MusicBeatState
|
|||||||
|
|
||||||
if (SONG.needsVoices)
|
if (SONG.needsVoices)
|
||||||
vocals.volume = 1;
|
vocals.volume = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var singData:Int = Std.int(Math.abs(daNote.noteData));
|
||||||
|
dad.playAnim('sing' + dataSuffix[singData] + altAnim, true);
|
||||||
|
|
||||||
|
if (FlxG.save.data.cpuStrums)
|
||||||
|
{
|
||||||
|
cpuStrums.forEach(function(spr:FlxSprite)
|
||||||
|
{
|
||||||
|
if (Math.abs(daNote.noteData) == spr.ID)
|
||||||
|
{
|
||||||
|
spr.animation.play('confirm', true);
|
||||||
|
}
|
||||||
|
if (spr.animation.curAnim.name == 'confirm' && !curStage.startsWith('school'))
|
||||||
|
{
|
||||||
|
spr.centerOffsets();
|
||||||
|
spr.offset.x -= 13;
|
||||||
|
spr.offset.y -= 13;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
spr.centerOffsets();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#if windows
|
||||||
|
if (luaModchart != null)
|
||||||
|
luaModchart.executeState('playerTwoSing', [Math.abs(daNote.noteData), Conductor.songPosition]);
|
||||||
|
#end
|
||||||
|
|
||||||
|
dad.holdTimer = 0;
|
||||||
|
|
||||||
|
if (SONG.needsVoices)
|
||||||
|
vocals.volume = 1;
|
||||||
|
}
|
||||||
daNote.active = false;
|
daNote.active = false;
|
||||||
|
|
||||||
daNote.kill();
|
daNote.kill();
|
||||||
@ -3098,13 +3165,13 @@ class PlayState extends MusicBeatState
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!daNote.isSustainNote)
|
if (!daNote.isSustainNote)
|
||||||
health -= 0.10;
|
health -= 0.20;
|
||||||
vocals.volume = 0;
|
vocals.volume = 0;
|
||||||
if (theFunne && !daNote.isSustainNote)
|
if (theFunne && !daNote.isSustainNote)
|
||||||
noteMiss(daNote.noteData, daNote);
|
noteMiss(daNote.noteData, daNote);
|
||||||
if (daNote.isParent)
|
if (daNote.isParent)
|
||||||
{
|
{
|
||||||
health -= 0.20; // give a health punishment for failing a LN
|
health -= 0.30; // give a health punishment for failing a LN
|
||||||
trace("hold fell over at the start");
|
trace("hold fell over at the start");
|
||||||
for (i in daNote.children)
|
for (i in daNote.children)
|
||||||
{
|
{
|
||||||
@ -3119,7 +3186,7 @@ class PlayState extends MusicBeatState
|
|||||||
&& daNote.sustainActive
|
&& daNote.sustainActive
|
||||||
&& daNote.spotInLine != daNote.parent.children.length)
|
&& daNote.spotInLine != daNote.parent.children.length)
|
||||||
{
|
{
|
||||||
health -= 0.20; // give a health punishment for failing a LN
|
health -= 0.30; // give a health punishment for failing a LN
|
||||||
trace("hold fell over at " + daNote.spotInLine);
|
trace("hold fell over at " + daNote.spotInLine);
|
||||||
for (i in daNote.parent.children)
|
for (i in daNote.parent.children)
|
||||||
{
|
{
|
||||||
@ -3136,14 +3203,14 @@ class PlayState extends MusicBeatState
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!daNote.isSustainNote)
|
if (!daNote.isSustainNote)
|
||||||
health -= 0.10;
|
health -= 0.20;
|
||||||
vocals.volume = 0;
|
vocals.volume = 0;
|
||||||
if (theFunne && !daNote.isSustainNote)
|
if (theFunne && !daNote.isSustainNote)
|
||||||
noteMiss(daNote.noteData, daNote);
|
noteMiss(daNote.noteData, daNote);
|
||||||
|
|
||||||
if (daNote.isParent)
|
if (daNote.isParent)
|
||||||
{
|
{
|
||||||
health -= 0.20; // give a health punishment for failing a LN
|
health -= 0.30; // give a health punishment for failing a LN
|
||||||
trace("hold fell over at the start");
|
trace("hold fell over at the start");
|
||||||
for (i in daNote.children)
|
for (i in daNote.children)
|
||||||
{
|
{
|
||||||
@ -3159,7 +3226,7 @@ class PlayState extends MusicBeatState
|
|||||||
&& daNote.sustainActive
|
&& daNote.sustainActive
|
||||||
&& daNote.spotInLine != daNote.parent.children.length)
|
&& daNote.spotInLine != daNote.parent.children.length)
|
||||||
{
|
{
|
||||||
health -= 0.20; // give a health punishment for failing a LN
|
health -= 0.40; // give a health punishment for failing a LN
|
||||||
trace("hold fell over at " + daNote.spotInLine);
|
trace("hold fell over at " + daNote.spotInLine);
|
||||||
for (i in daNote.parent.children)
|
for (i in daNote.parent.children)
|
||||||
{
|
{
|
||||||
@ -3216,6 +3283,7 @@ class PlayState extends MusicBeatState
|
|||||||
|
|
||||||
function endSong():Void
|
function endSong():Void
|
||||||
{
|
{
|
||||||
|
endingSong = true;
|
||||||
FlxG.stage.removeEventListener(KeyboardEvent.KEY_DOWN, handleInput);
|
FlxG.stage.removeEventListener(KeyboardEvent.KEY_DOWN, handleInput);
|
||||||
FlxG.stage.removeEventListener(KeyboardEvent.KEY_UP, releaseInput);
|
FlxG.stage.removeEventListener(KeyboardEvent.KEY_UP, releaseInput);
|
||||||
if (useVideo)
|
if (useVideo)
|
||||||
@ -3226,8 +3294,6 @@ class PlayState extends MusicBeatState
|
|||||||
PlayState.instance.remove(PlayState.instance.videoSprite);
|
PlayState.instance.remove(PlayState.instance.videoSprite);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isStoryMode)
|
|
||||||
campaignMisses = misses;
|
|
||||||
|
|
||||||
if (!loadRep)
|
if (!loadRep)
|
||||||
rep.SaveReplay(saveNotes, saveJudge, replayAna);
|
rep.SaveReplay(saveNotes, saveJudge, replayAna);
|
||||||
@ -3285,6 +3351,11 @@ class PlayState extends MusicBeatState
|
|||||||
if (isStoryMode)
|
if (isStoryMode)
|
||||||
{
|
{
|
||||||
campaignScore += Math.round(songScore);
|
campaignScore += Math.round(songScore);
|
||||||
|
campaignMisses += misses;
|
||||||
|
campaignSicks += sicks;
|
||||||
|
campaignGoods += goods;
|
||||||
|
campaignBads += bads;
|
||||||
|
campaignShits += shits;
|
||||||
|
|
||||||
storyPlaylist.remove(storyPlaylist[0]);
|
storyPlaylist.remove(storyPlaylist[0]);
|
||||||
|
|
||||||
@ -3426,7 +3497,7 @@ class PlayState extends MusicBeatState
|
|||||||
score = -300;
|
score = -300;
|
||||||
combo = 0;
|
combo = 0;
|
||||||
misses++;
|
misses++;
|
||||||
health -= 0.06;
|
health -= 0.1;
|
||||||
ss = false;
|
ss = false;
|
||||||
shits++;
|
shits++;
|
||||||
if (FlxG.save.data.accuracyMod == 0)
|
if (FlxG.save.data.accuracyMod == 0)
|
||||||
@ -3434,7 +3505,7 @@ class PlayState extends MusicBeatState
|
|||||||
case 'bad':
|
case 'bad':
|
||||||
daRating = 'bad';
|
daRating = 'bad';
|
||||||
score = 0;
|
score = 0;
|
||||||
health -= 0.03;
|
health -= 0.06;
|
||||||
ss = false;
|
ss = false;
|
||||||
bads++;
|
bads++;
|
||||||
if (FlxG.save.data.accuracyMod == 0)
|
if (FlxG.save.data.accuracyMod == 0)
|
||||||
@ -4448,7 +4519,7 @@ class PlayState extends MusicBeatState
|
|||||||
}
|
}
|
||||||
#end
|
#end
|
||||||
|
|
||||||
if (curSong == 'Tutorial' && dad.curCharacter == 'gf')
|
if (curSong == 'Tutorial' && dad.curCharacter == 'gf' && SONG.notes[Math.floor(curStep / 16)] != null)
|
||||||
{
|
{
|
||||||
if (SONG.notes[Math.floor(curStep / 16)].mustHitSection)
|
if (SONG.notes[Math.floor(curStep / 16)].mustHitSection)
|
||||||
dad.dance();
|
dad.dance();
|
||||||
|
@ -5,4 +5,5 @@ class PlayStateChangeables
|
|||||||
public static var scrollSpeed:Float;
|
public static var scrollSpeed:Float;
|
||||||
public static var botPlay:Bool;
|
public static var botPlay:Bool;
|
||||||
public static var Optimize:Bool;
|
public static var Optimize:Bool;
|
||||||
|
public static var zoom:Float;
|
||||||
}
|
}
|
@ -119,7 +119,7 @@ class Ratings
|
|||||||
|
|
||||||
public static function checkRating(ms:Float, ts:Float)
|
public static function checkRating(ms:Float, ts:Float)
|
||||||
{
|
{
|
||||||
var rating = "sick";
|
var rating = "shit";
|
||||||
if (ms <= 166 * ts && ms >= 135 * ts)
|
if (ms <= 166 * ts && ms >= 135 * ts)
|
||||||
rating = "shit";
|
rating = "shit";
|
||||||
if (ms < 135 * ts && ms >= 90 * ts)
|
if (ms < 135 * ts && ms >= 90 * ts)
|
||||||
|
@ -83,7 +83,12 @@ class ResultsScreen extends FlxSubState
|
|||||||
text.text = "Week Cleared!";
|
text.text = "Week Cleared!";
|
||||||
}
|
}
|
||||||
|
|
||||||
comboText = new FlxText(20,-75,0,'Judgements:\nSicks - ${PlayState.sicks}\nGoods - ${PlayState.goods}\nBads - ${PlayState.bads}\n\nCombo Breaks: ${(PlayState.isStoryMode ? PlayState.campaignMisses : PlayState.misses)}\nHighest Combo: ${PlayState.highestCombo + 1}\nScore: ${PlayState.instance.songScore}\nAccuracy: ${HelperFunctions.truncateFloat(PlayState.instance.accuracy,2)}%\n\n${Ratings.GenerateLetterRank(PlayState.instance.accuracy)}\n\n${!PlayState.loadRep ? "F1 - View replay\nF2 - Replay song" : ""}
|
var sicks = PlayState.isStoryMode ? PlayState.campaignSicks : PlayState.sicks;
|
||||||
|
var goods = PlayState.isStoryMode ? PlayState.campaignGoods : PlayState.goods;
|
||||||
|
var bads = PlayState.isStoryMode ? PlayState.campaignBads : PlayState.bads;
|
||||||
|
var shits = PlayState.isStoryMode ? PlayState.campaignShits : PlayState.shits;
|
||||||
|
|
||||||
|
comboText = new FlxText(20,-75,0,'Judgements:\nSicks - ${PlayState.sicks}\nGoods - ${sicks}\nBads - ${bads}\n\nCombo Breaks: ${(PlayState.isStoryMode ? PlayState.campaignMisses : PlayState.misses)}\nHighest Combo: ${PlayState.highestCombo + 1}\nScore: ${PlayState.instance.songScore}\nAccuracy: ${HelperFunctions.truncateFloat(PlayState.instance.accuracy,2)}%\n\n${Ratings.GenerateLetterRank(PlayState.instance.accuracy)}\n\n${!PlayState.loadRep ? "F1 - View replay\nF2 - Replay song" : ""}
|
||||||
');
|
');
|
||||||
comboText.size = 28;
|
comboText.size = 28;
|
||||||
comboText.setBorderStyle(FlxTextBorderStyle.OUTLINE,FlxColor.BLACK,4,1);
|
comboText.setBorderStyle(FlxTextBorderStyle.OUTLINE,FlxColor.BLACK,4,1);
|
||||||
@ -145,6 +150,11 @@ class ResultsScreen extends FlxSubState
|
|||||||
graph.addToHistory(diff, judge, obj3);
|
graph.addToHistory(diff, judge, obj3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sicks == Math.POSITIVE_INFINITY || sicks == Math.NaN)
|
||||||
|
sicks = 0;
|
||||||
|
if (goods == Math.POSITIVE_INFINITY || goods == Math.NaN)
|
||||||
|
goods = 0;
|
||||||
|
|
||||||
graph.update();
|
graph.update();
|
||||||
|
|
||||||
mean = HelperFunctions.truncateFloat(mean / PlayState.rep.replay.songNotes.length,2);
|
mean = HelperFunctions.truncateFloat(mean / PlayState.rep.replay.songNotes.length,2);
|
||||||
|
88
source/Waveform.hx
Normal file
88
source/Waveform.hx
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
import flixel.util.FlxColor;
|
||||||
|
import flixel.FlxG;
|
||||||
|
import openfl.geom.Rectangle;
|
||||||
|
import haxe.io.Bytes;
|
||||||
|
import lime.media.AudioBuffer;
|
||||||
|
import flixel.FlxSprite;
|
||||||
|
|
||||||
|
class Waveform extends FlxSprite
|
||||||
|
{
|
||||||
|
|
||||||
|
/// referenced from https://github.com/gedehari/HaxeFlixel-Waveform-Rendering/blob/master/source/PlayState.hx
|
||||||
|
/// by gedehari
|
||||||
|
|
||||||
|
public var buffer:AudioBuffer;
|
||||||
|
public var data:Bytes;
|
||||||
|
|
||||||
|
public function new(x:Int,y:Int, audioPath:String, height:Int)
|
||||||
|
{
|
||||||
|
super(x,y);
|
||||||
|
|
||||||
|
var path = StringTools.replace(audioPath, "songs:","");
|
||||||
|
|
||||||
|
trace("loading " + path);
|
||||||
|
|
||||||
|
buffer = AudioBuffer.fromFile(path);
|
||||||
|
|
||||||
|
trace("BPS: " + buffer.bitsPerSample + " - Channels: " + buffer.channels);
|
||||||
|
|
||||||
|
makeGraphic(height,350,FlxColor.TRANSPARENT);
|
||||||
|
|
||||||
|
angle = 90;
|
||||||
|
|
||||||
|
data = buffer.data.toBytes();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function drawWaveform()
|
||||||
|
{
|
||||||
|
var index:Int = 0;
|
||||||
|
var drawIndex:Int = 0;
|
||||||
|
var samplesPerCollumn:Int = 600;
|
||||||
|
|
||||||
|
var min:Float = 0;
|
||||||
|
var max:Float = 0;
|
||||||
|
|
||||||
|
while ((index * 4) < (data.length - 1))
|
||||||
|
{
|
||||||
|
var byte:Int = data.getUInt16(index * 4);
|
||||||
|
|
||||||
|
if (byte > 65535 / 2)
|
||||||
|
byte -= 65535;
|
||||||
|
|
||||||
|
var sample:Float = (byte / 65535);
|
||||||
|
|
||||||
|
if (sample > 0)
|
||||||
|
{
|
||||||
|
if (sample > max)
|
||||||
|
max = sample;
|
||||||
|
}
|
||||||
|
else if (sample < 0)
|
||||||
|
{
|
||||||
|
if (sample < min)
|
||||||
|
min = sample;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((index % samplesPerCollumn) == 0)
|
||||||
|
{
|
||||||
|
// trace("min: " + min + ", max: " + max);
|
||||||
|
|
||||||
|
if (drawIndex > 350)
|
||||||
|
{
|
||||||
|
drawIndex = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
var pixelsMin:Float = Math.abs(min * 300);
|
||||||
|
var pixelsMax:Float = max * 300;
|
||||||
|
|
||||||
|
pixels.fillRect(new Rectangle(drawIndex, x, 1, height), 0xFF000000);
|
||||||
|
pixels.fillRect(new Rectangle(drawIndex, y - pixelsMin, 1, pixelsMin + pixelsMax), FlxColor.WHITE);
|
||||||
|
drawIndex += 1;
|
||||||
|
|
||||||
|
min = 0;
|
||||||
|
max = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
index += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user