mirror of
https://github.com/ninjamuffin99/Funkin.git
synced 2024-12-26 23:16:46 +00:00
Merge remote-tracking branch 'origin/master' into feature/scripted-modules
This commit is contained in:
commit
0b17f74f48
|
@ -1,8 +1,5 @@
|
||||||
package funkin;
|
package funkin;
|
||||||
|
|
||||||
import funkin.modding.module.ModuleHandler;
|
|
||||||
import funkin.play.stage.StageData;
|
|
||||||
import funkin.charting.ChartingState;
|
|
||||||
import flixel.addons.transition.FlxTransitionSprite.GraphicTransTileDiamond;
|
import flixel.addons.transition.FlxTransitionSprite.GraphicTransTileDiamond;
|
||||||
import flixel.addons.transition.FlxTransitionableState;
|
import flixel.addons.transition.FlxTransitionableState;
|
||||||
import flixel.addons.transition.TransitionData;
|
import flixel.addons.transition.TransitionData;
|
||||||
|
@ -10,12 +7,18 @@ import flixel.graphics.FlxGraphic;
|
||||||
import flixel.math.FlxPoint;
|
import flixel.math.FlxPoint;
|
||||||
import flixel.math.FlxRect;
|
import flixel.math.FlxRect;
|
||||||
import flixel.util.FlxColor;
|
import flixel.util.FlxColor;
|
||||||
import openfl.display.BitmapData;
|
import funkin.charting.ChartingState;
|
||||||
|
import funkin.charting.ChartingState;
|
||||||
|
import funkin.modding.module.ModuleHandler;
|
||||||
import funkin.play.PicoFight;
|
import funkin.play.PicoFight;
|
||||||
|
import funkin.play.PlayState;
|
||||||
|
import funkin.play.stage.StageData;
|
||||||
|
import funkin.play.stage.StageData;
|
||||||
import funkin.ui.PreferencesMenu;
|
import funkin.ui.PreferencesMenu;
|
||||||
|
import funkin.ui.animDebugShit.DebugBoundingState;
|
||||||
import funkin.ui.stageBuildShit.StageBuilderState;
|
import funkin.ui.stageBuildShit.StageBuilderState;
|
||||||
import funkin.util.macro.MacroUtil;
|
import funkin.util.macro.MacroUtil;
|
||||||
import funkin.play.PlayState;
|
import openfl.display.BitmapData;
|
||||||
|
|
||||||
using StringTools;
|
using StringTools;
|
||||||
|
|
||||||
|
@ -176,7 +179,7 @@ class InitState extends FlxTransitionableState
|
||||||
#elseif FIGHT
|
#elseif FIGHT
|
||||||
FlxG.switchState(new PicoFight());
|
FlxG.switchState(new PicoFight());
|
||||||
#elseif ANIMDEBUG
|
#elseif ANIMDEBUG
|
||||||
FlxG.switchState(new ui.animDebugShit.DebugBoundingState());
|
FlxG.switchState(new DebugBoundingState());
|
||||||
#elseif NETTEST
|
#elseif NETTEST
|
||||||
FlxG.switchState(new netTest.NetTest());
|
FlxG.switchState(new netTest.NetTest());
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -80,8 +80,8 @@ class Note extends FlxSprite
|
||||||
public static var RED_NOTE:Int = 3;
|
public static var RED_NOTE:Int = 3;
|
||||||
|
|
||||||
// SCORING STUFF
|
// SCORING STUFF
|
||||||
public static var safeFrames:Int = 10;
|
public static var HIT_WINDOW:Float = (10 / 60) * 1000; // 166.67 ms hit window (10 frames at 60fps)
|
||||||
public static var HIT_WINDOW:Float = (safeFrames / 60) * 1000; // 166.67 ms hit window
|
// thresholds are fractions of HIT_WINDOW ^^
|
||||||
// anything above bad threshold is shit
|
// anything above bad threshold is shit
|
||||||
public static var BAD_THRESHOLD:Float = 0.8; // 125ms , 8 frames
|
public static var BAD_THRESHOLD:Float = 0.8; // 125ms , 8 frames
|
||||||
public static var GOOD_THRESHOLD:Float = 0.55; // 91.67ms , 5.5 frames
|
public static var GOOD_THRESHOLD:Float = 0.55; // 91.67ms , 5.5 frames
|
||||||
|
|
|
@ -22,6 +22,8 @@ class NoteSplash extends FlxSprite
|
||||||
|
|
||||||
setupNoteSplash(x, y, noteData);
|
setupNoteSplash(x, y, noteData);
|
||||||
|
|
||||||
|
antialiasing = true;
|
||||||
|
|
||||||
// alpha = 0.75;
|
// alpha = 0.75;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,9 @@ class PauseSubState extends MusicBeatSubstate
|
||||||
|
|
||||||
menuItems = pauseOG;
|
menuItems = pauseOG;
|
||||||
|
|
||||||
|
if (PlayState.storyWeek == 6) // consistent with logic that decides asset lib!!
|
||||||
|
pauseMusic = new FlxSound().loadEmbedded(Paths.music('breakfast-pixel'), true, true);
|
||||||
|
else
|
||||||
pauseMusic = new FlxSound().loadEmbedded(Paths.music('breakfast'), true, true);
|
pauseMusic = new FlxSound().loadEmbedded(Paths.music('breakfast'), true, true);
|
||||||
pauseMusic.volume = 0;
|
pauseMusic.volume = 0;
|
||||||
pauseMusic.play(false, FlxG.random.int(0, Std.int(pauseMusic.length / 2)));
|
pauseMusic.play(false, FlxG.random.int(0, Std.int(pauseMusic.length / 2)));
|
||||||
|
|
|
@ -38,6 +38,31 @@ class VoicesGroup extends FlxTypedGroup<FlxSound>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds the largest deviation from the desired time inside this VoicesGroup.
|
||||||
|
*
|
||||||
|
* @param targetTime The time to check against.
|
||||||
|
* If none is provided, it checks the time of all members against the first member of this VoicesGroup.
|
||||||
|
* @return The largest deviation from the target time found.
|
||||||
|
*/
|
||||||
|
public function checkSyncError(?targetTime:Float):Float
|
||||||
|
{
|
||||||
|
var error:Float = 0;
|
||||||
|
|
||||||
|
forEachAlive(function(snd)
|
||||||
|
{
|
||||||
|
if (targetTime == null)
|
||||||
|
targetTime = snd.time;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var diff:Float = snd.time - targetTime;
|
||||||
|
if (Math.abs(diff) > Math.abs(error))
|
||||||
|
error = diff;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
// prob a better / cleaner way to do all these forEach stuff?
|
// prob a better / cleaner way to do all these forEach stuff?
|
||||||
public function pause()
|
public function pause()
|
||||||
{
|
{
|
||||||
|
|
|
@ -5,7 +5,6 @@ import flixel.FlxObject;
|
||||||
import flixel.FlxSprite;
|
import flixel.FlxSprite;
|
||||||
import flixel.FlxState;
|
import flixel.FlxState;
|
||||||
import flixel.FlxSubState;
|
import flixel.FlxSubState;
|
||||||
import flixel.addons.effects.FlxTrail;
|
|
||||||
import flixel.addons.transition.FlxTransitionableState;
|
import flixel.addons.transition.FlxTransitionableState;
|
||||||
import flixel.group.FlxGroup;
|
import flixel.group.FlxGroup;
|
||||||
import flixel.math.FlxMath;
|
import flixel.math.FlxMath;
|
||||||
|
@ -541,11 +540,6 @@ class PlayState extends MusicBeatState implements IHook
|
||||||
// REPOSITIONING PER STAGE
|
// REPOSITIONING PER STAGE
|
||||||
switch (currentStageId)
|
switch (currentStageId)
|
||||||
{
|
{
|
||||||
case 'schoolEvil':
|
|
||||||
var evilTrail = new FlxTrail(dad, null, 4, 24, 0.3, 0.069);
|
|
||||||
// Go behind Spirit.
|
|
||||||
evilTrail.zIndex = 190;
|
|
||||||
add(evilTrail);
|
|
||||||
case "tank":
|
case "tank":
|
||||||
gf.y += 10;
|
gf.y += 10;
|
||||||
gf.x -= 30;
|
gf.x -= 30;
|
||||||
|
@ -825,7 +819,7 @@ class PlayState extends MusicBeatState implements IHook
|
||||||
|
|
||||||
var gottaHitNote:Bool = section.mustHitSection;
|
var gottaHitNote:Bool = section.mustHitSection;
|
||||||
|
|
||||||
if (songNotes.highStakes)
|
if (songNotes.highStakes) // noteData > 3
|
||||||
gottaHitNote = !section.mustHitSection;
|
gottaHitNote = !section.mustHitSection;
|
||||||
|
|
||||||
var oldNote:Note;
|
var oldNote:Note;
|
||||||
|
@ -838,6 +832,10 @@ class PlayState extends MusicBeatState implements IHook
|
||||||
// swagNote.data = songNotes;
|
// swagNote.data = songNotes;
|
||||||
swagNote.data.sustainLength = songNotes.sustainLength;
|
swagNote.data.sustainLength = songNotes.sustainLength;
|
||||||
swagNote.data.altNote = songNotes.altNote;
|
swagNote.data.altNote = songNotes.altNote;
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
|
|
||||||
|
>>>>>>> origin/master
|
||||||
swagNote.scrollFactor.set(0, 0);
|
swagNote.scrollFactor.set(0, 0);
|
||||||
|
|
||||||
var susLength:Float = swagNote.data.sustainLength;
|
var susLength:Float = swagNote.data.sustainLength;
|
||||||
|
@ -939,10 +937,15 @@ class PlayState extends MusicBeatState implements IHook
|
||||||
vocals.pause();
|
vocals.pause();
|
||||||
|
|
||||||
FlxG.sound.music.time = 0;
|
FlxG.sound.music.time = 0;
|
||||||
|
|
||||||
regenNoteData(); // loads the note data from start
|
regenNoteData(); // loads the note data from start
|
||||||
health = 1;
|
health = 1;
|
||||||
songScore = 0;
|
songScore = 0;
|
||||||
|
<<<<<<< HEAD
|
||||||
Countdown.performCountdown(currentStageId.startsWith('school'));
|
Countdown.performCountdown(currentStageId.startsWith('school'));
|
||||||
|
=======
|
||||||
|
restartCountdownTimer();
|
||||||
|
>>>>>>> origin/master
|
||||||
|
|
||||||
needsReset = false;
|
needsReset = false;
|
||||||
}
|
}
|
||||||
|
@ -1258,9 +1261,19 @@ class PlayState extends MusicBeatState implements IHook
|
||||||
// TODO: Why the hell is the noteMiss logic in two different places?
|
// TODO: Why the hell is the noteMiss logic in two different places?
|
||||||
if (daNote.tooLate)
|
if (daNote.tooLate)
|
||||||
{
|
{
|
||||||
|
<<<<<<< HEAD
|
||||||
var event:NoteScriptEvent = new NoteScriptEvent(ScriptEvent.NOTE_MISS, daNote, true);
|
var event:NoteScriptEvent = new NoteScriptEvent(ScriptEvent.NOTE_MISS, daNote, true);
|
||||||
dispatchEvent(event);
|
dispatchEvent(event);
|
||||||
health -= 0.0775;
|
health -= 0.0775;
|
||||||
|
=======
|
||||||
|
if (curStage != null)
|
||||||
|
{
|
||||||
|
curStage.onNoteMiss(daNote);
|
||||||
|
}
|
||||||
|
|
||||||
|
// lose less health on sustain notes!
|
||||||
|
health -= 0.0775 * (daNote.isSustainNote ? 0.2 : 1); // if it's sustain, multiply it by 0.2 (not checked for balence yet), else keep it same (multiply by 1)
|
||||||
|
>>>>>>> origin/master
|
||||||
vocals.volume = 0;
|
vocals.volume = 0;
|
||||||
killCombo();
|
killCombo();
|
||||||
}
|
}
|
||||||
|
@ -1528,9 +1541,15 @@ class PlayState extends MusicBeatState implements IHook
|
||||||
switch (currentStageId)
|
switch (currentStageId)
|
||||||
{
|
{
|
||||||
case 'limo':
|
case 'limo':
|
||||||
|
<<<<<<< HEAD
|
||||||
cameraFollowPoint.x = currentStage.getBoyfriend().getMidpoint().x - 300;
|
cameraFollowPoint.x = currentStage.getBoyfriend().getMidpoint().x - 300;
|
||||||
case 'mall':
|
case 'mall':
|
||||||
cameraFollowPoint.y = currentStage.getBoyfriend().getMidpoint().y - 200;
|
cameraFollowPoint.y = currentStage.getBoyfriend().getMidpoint().y - 200;
|
||||||
|
=======
|
||||||
|
camFollow.x = boyfriend.getMidpoint().x - 300;
|
||||||
|
case 'mallXmas':
|
||||||
|
camFollow.y = boyfriend.getMidpoint().y - 200;
|
||||||
|
>>>>>>> origin/master
|
||||||
case 'school' | 'schoolEvil':
|
case 'school' | 'schoolEvil':
|
||||||
cameraFollowPoint.x = currentStage.getBoyfriend().getMidpoint().x - 200;
|
cameraFollowPoint.x = currentStage.getBoyfriend().getMidpoint().x - 200;
|
||||||
cameraFollowPoint.y = currentStage.getBoyfriend().getMidpoint().y - 200;
|
cameraFollowPoint.y = currentStage.getBoyfriend().getMidpoint().y - 200;
|
||||||
|
@ -1723,8 +1742,17 @@ class PlayState extends MusicBeatState implements IHook
|
||||||
if (!super.stepHit())
|
if (!super.stepHit())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
if (Math.abs(FlxG.sound.music.time - (Conductor.songPosition - Conductor.offset)) > 20
|
if (Math.abs(FlxG.sound.music.time - (Conductor.songPosition - Conductor.offset)) > 20
|
||||||
|| (currentSong.needsVoices && Math.abs(vocals.time - (Conductor.songPosition - Conductor.offset)) > 20))
|
|| (currentSong.needsVoices && Math.abs(vocals.time - (Conductor.songPosition - Conductor.offset)) > 20))
|
||||||
|
=======
|
||||||
|
override function stepHit()
|
||||||
|
{
|
||||||
|
super.stepHit();
|
||||||
|
|
||||||
|
if (Math.abs(FlxG.sound.music.time - (Conductor.songPosition - Conductor.offset)) > 20
|
||||||
|
|| Math.abs(vocals.checkSyncError(Conductor.songPosition - Conductor.offset)) > 20)
|
||||||
|
>>>>>>> origin/master
|
||||||
{
|
{
|
||||||
resyncVocals();
|
resyncVocals();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue