From 5e014300068af5605519576a354e417abef45f62 Mon Sep 17 00:00:00 2001 From: Yoshman29 <81191621+YoshiCrafter29@users.noreply.github.com> Date: Sat, 5 Nov 2022 22:40:52 +0100 Subject: [PATCH] accuracy pt1 --- assets/data/freeplaySonglist.json | 4 + assets/data/scripts/pixel.hx | 30 ++- assets/sounds/menu/volume.mp3 | Bin 0 -> 17762 bytes assets/sounds/menu/volume.ogg | Bin 0 -> 9103 bytes buildnumber.txt | 2 +- source/funkin/game/PlayState.hx | 250 ++++++++---------- source/funkin/menus/FreeplayState.hx | 12 +- source/funkin/options/Options.hx | 3 + .../funkin/scripting/events/NoteHitEvent.hx | 52 +++- 9 files changed, 191 insertions(+), 162 deletions(-) create mode 100644 assets/sounds/menu/volume.mp3 create mode 100644 assets/sounds/menu/volume.ogg diff --git a/assets/data/freeplaySonglist.json b/assets/data/freeplaySonglist.json index cf387481..ca58af47 100644 --- a/assets/data/freeplaySonglist.json +++ b/assets/data/freeplaySonglist.json @@ -1,6 +1,10 @@ { "addOGSongs": false, "songs": [ + { + "name": "test", + "icon": "bf" + }, { "name": "Tutorial", "icon": "gf", diff --git a/assets/data/scripts/pixel.hx b/assets/data/scripts/pixel.hx index c21c2bf0..cef420ee 100644 --- a/assets/data/scripts/pixel.hx +++ b/assets/data/scripts/pixel.hx @@ -1,10 +1,12 @@ +import funkin.scripting.events.NoteHitEvent; + public var pixelNotesForBF = true; public var pixelNotesForDad = true; public var enablePixelUI = true; public var enableCameraHacks = true; public var enablePauseMenu = true; -var daPixelZoom = 6; +static var daPixelZoom = 6; /** * UI @@ -49,7 +51,7 @@ function onCountdown(event) { if (event.soundPath != null) event.soundPath = 'pixel/' + event.soundPath; event.antialiasing = false; - event.scale = 6; + event.scale = daPixelZoom; event.spritePath = switch(event.swagCounter) { case 0: null; case 1: 'stages/school/ui/ready'; @@ -58,6 +60,16 @@ function onCountdown(event) { }; } +function onPlayerHit(event:NoteHitEvent) { + if (!enablePixelUI) return; + event.ratingPrefix = "stages/school/ui/"; + event.ratingScale = daPixelZoom * 0.7; + event.ratingAntialiasing = false; + + event.numScale = daPixelZoom; + event.numAntialiasing = false; +} + /** * CAMERA HACKS!! */ @@ -74,14 +86,14 @@ function createPost() { newNoteCamera.bgColor = 0; // transparent FlxG.cameras.add(newNoteCamera, false); - var pixelSwagWidth = Note.swagWidth + (6 - (Note.swagWidth % 6)); + var pixelSwagWidth = Note.swagWidth + (daPixelZoom - (Note.swagWidth % daPixelZoom)); // TODO: multikey support?? for(s in 0...4) { var i = 0; for(str in [cpuStrums.members[s], playerStrums.members[s]]) { // TODO: middlescroll??? str.x = (FlxG.width * (0.25 + (0.5 * i))) + (pixelSwagWidth * (s - 2)); - str.x -= str.x % 6; + str.x -= str.x % daPixelZoom; str.cameras = [newNoteCamera]; i++; } @@ -92,6 +104,7 @@ function createPost() { makeCameraPixely(camGame); makeCameraPixely(newNoteCamera); + defaultCamZoom /= daPixelZoom; } } @@ -100,8 +113,7 @@ function createPost() { */ public function makeCameraPixely(cam) { cam.pixelPerfectRender = true; - cam.zoom /= Math.min(FlxG.scaleMode.scale.x, FlxG.scaleMode.scale.y) * 6; - defaultCamZoom /= 6; + cam.zoom /= Math.min(FlxG.scaleMode.scale.x, FlxG.scaleMode.scale.y) * daPixelZoom; var shad = new CustomShader('pixelZoomShader'); cam.addShader(shad); @@ -120,15 +132,15 @@ var pixellyShaders = []; function updatePost(elapsed) { for(e in pixellyCameras) { if (!e.exists) continue; - e.zoom = 1 / 6 / Math.min(FlxG.scaleMode.scale.x, FlxG.scaleMode.scale.y); + e.zoom = 1 / daPixelZoom / Math.min(FlxG.scaleMode.scale.x, FlxG.scaleMode.scale.y); } for(e in pixellyShaders) { - e.pixelZoom = 1 / 6 / Math.min(FlxG.scaleMode.scale.x, FlxG.scaleMode.scale.y); + e.pixelZoom = 1 / daPixelZoom / Math.min(FlxG.scaleMode.scale.x, FlxG.scaleMode.scale.y); } if (enableCameraHacks) { notes.forEach(function(n) { - n.y -= n.y % 6; + n.y -= n.y % daPixelZoom; }); } } \ No newline at end of file diff --git a/assets/sounds/menu/volume.mp3 b/assets/sounds/menu/volume.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..8a5e866457ca621933d4098527cd300c7314eb2a GIT binary patch literal 17762 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 literal 0 HcmV?d00001 diff --git a/buildnumber.txt b/buildnumber.txt index a899ac6c..c659825d 100644 --- a/buildnumber.txt +++ b/buildnumber.txt @@ -1 +1 @@ -1160 \ No newline at end of file +1163 \ No newline at end of file diff --git a/source/funkin/game/PlayState.hx b/source/funkin/game/PlayState.hx index 6b55e7f4..fa5b4a4c 100644 --- a/source/funkin/game/PlayState.hx +++ b/source/funkin/game/PlayState.hx @@ -93,7 +93,7 @@ class PlayState extends MusicBeatState public var notes:NoteGroup; public var strumLine:FlxSprite; - public var curSection:Int = 0; + public var ratingNum:Int = 0; public var camFollow:FlxObject; @@ -1073,144 +1073,6 @@ class PlayState extends MusicBeatState public var comboGroup:FlxSpriteGroup; - private function popUpScore(strumtime:Float, score:Int = 350):Void - { - var noteDiff:Float = Math.abs(strumtime - Conductor.songPosition); - vocals.volume = 1; - - var placement:String = Std.string(combo); - // - - var rating:FlxSprite = new FlxSprite(-40, -60); - - var daRating:String = "sick"; - - if (noteDiff > Conductor.safeZoneOffset * 0.9) - { - daRating = 'shit'; - score = 50; - } - else if (noteDiff > Conductor.safeZoneOffset * 0.75) - { - daRating = 'bad'; - score = 100; - } - else if (noteDiff > Conductor.safeZoneOffset * 0.2) - { - daRating = 'good'; - score = 200; - } - - songScore += score; - - /* if (combo > 60) - daRating = 'sick'; - else if (combo > 12) - daRating = 'good' - else if (combo > 4) - daRating = 'bad'; - */ - - var prefix:String = ""; - var suffix:String = ''; - - if (curStage.startsWith('school')) - { - prefix = 'weeb/pixelUI/'; - suffix = '-pixel'; - } - - rating.loadGraphic(Paths.image('game/score/$prefix$daRating$suffix')); - rating.acceleration.y = 550; - rating.velocity.y -= FlxG.random.int(140, 175); - rating.velocity.x -= FlxG.random.int(0, 10); - - var comboSpr:FlxSprite = new FlxSprite().loadGraphic(Paths.image('game/score/${prefix}combo$suffix')); - comboSpr.acceleration.y = 600; - comboSpr.velocity.y -= 150; - comboSpr.velocity.x += FlxG.random.int(1, 10); - - comboGroup.add(comboSpr); - comboGroup.add(rating); - - if (!curStage.startsWith('school')) - { - rating.scale.set(0.7, 0.7); - rating.antialiasing = true; - comboSpr.scale.set(0.7, 0.7); - comboSpr.antialiasing = true; - } - else - { - rating.setGraphicSize(Std.int(rating.width * daPixelZoom * 0.7)); - comboSpr.setGraphicSize(Std.int(comboSpr.width * daPixelZoom * 0.7)); - } - - comboSpr.updateHitbox(); - rating.updateHitbox(); - - var separatedScore:String = Std.string(combo).addZeros(3); - - - for (i in 0...separatedScore.length) - { - if (combo < 10 && combo != 0) - break; - - var e = separatedScore.charAt(i); - - var numScore:FlxSprite = new FlxSprite((43 * i) - 90, 80).loadGraphic(Paths.image('game/${prefix}score/num$e$suffix')); - - if (!curStage.startsWith('school')) - { - numScore.antialiasing = true; - numScore.setGraphicSize(Std.int(numScore.width * 0.5)); - } - else - { - numScore.setGraphicSize(Std.int(numScore.width * daPixelZoom)); - } - numScore.updateHitbox(); - - numScore.acceleration.y = FlxG.random.int(200, 300); - numScore.velocity.y -= FlxG.random.int(140, 160); - numScore.velocity.x = FlxG.random.float(-5, 5); - - comboGroup.add(numScore); - - FlxTween.tween(numScore, {alpha: 0}, 0.2, { - onComplete: function(tween:FlxTween) - { - comboGroup.remove(numScore, true); - numScore.destroy(); - }, - startDelay: Conductor.crochet * 0.002 - }); - } - /* - trace(combo); - trace(separatedScore); - */ - - FlxTween.tween(rating, {alpha: 0}, 0.2, { - startDelay: Conductor.crochet * 0.001 - }); - - FlxTween.tween(comboSpr, {alpha: 0}, 0.2, { - onComplete: function(tween:FlxTween) - { - comboGroup.remove(comboSpr, true); - comboGroup.remove(rating, true); - comboSpr.destroy(); - - rating.destroy(); - }, - startDelay: Conductor.crochet * 0.001 - }); - - curSection += 1; - } - private function keyShit():Void { var pressed = [controls.NOTE_LEFT, controls.NOTE_DOWN, controls.NOTE_UP, controls.NOTE_RIGHT]; @@ -1307,18 +1169,118 @@ class PlayState extends MusicBeatState if (!note.wasGoodHit) { note.wasGoodHit = true; + + /** + * CALCULATES RATING + */ + var noteDiff = Math.abs(Conductor.songPosition - note.strumTime); + var daRating:String = "sick"; + var score:Int = 300; + var accuracy:Float = 1; + + if (noteDiff > Conductor.safeZoneOffset * 0.9) + { + daRating = 'shit'; + score = 50; + accuracy = 0.25; + } + else if (noteDiff > Conductor.safeZoneOffset * 0.75) + { + daRating = 'bad'; + score = 100; + accuracy = 0.45; + } + else if (noteDiff > Conductor.safeZoneOffset * 0.2) + { + daRating = 'good'; + score = 200; + accuracy = 0.75; + } var event:NoteHitEvent; if (note.mustPress) - event = scripts.event("onPlayerHit", new NoteHitEvent(note, boyfriend, true, note.noteType, note.strumID, note.noteData > 0 ? 0.023 : 0.004, note.animSuffix)); + event = scripts.event("onPlayerHit", new NoteHitEvent(note, boyfriend, true, note.noteType, note.strumID, note.noteData > 0 ? 0.023 : 0.004, score, note.animSuffix, daRating, accuracy, "game/score/", '')); else - event = scripts.event("onDadHit", new NoteHitEvent(note, dad, false, note.noteType, note.strumID, 0, note.animSuffix)); + event = scripts.event("onDadHit", new NoteHitEvent(note, dad, false, note.noteType, note.strumID, 0, 0, note.animSuffix, daRating, null, "game/score/", '')); if (!event.cancelled) { - if (event.player && !note.isSustainNote) + if (event.countAsCombo) combo++; + + if (event.showRating || (event.showRating == null && event.player && !note.isSustainNote)) { - combo++; - popUpScore(note.strumTime, event.score); + var rating:FlxSprite = new FlxSprite(-40, -60); + + songScore += score; + + rating.loadGraphic(Paths.image('${event.ratingPrefix}$daRating${event.ratingSuffix}')); + rating.acceleration.y = 550; + rating.velocity.y -= FlxG.random.int(140, 175); + rating.velocity.x -= FlxG.random.int(0, 10); + + var comboSpr:FlxSprite = new FlxSprite().loadGraphic(Paths.image('${event.ratingPrefix}combo${event.ratingSuffix}')); + comboSpr.acceleration.y = 600; + comboSpr.velocity.y -= 150; + comboSpr.velocity.x += FlxG.random.int(1, 10); + + comboGroup.add(comboSpr); + comboGroup.add(rating); + + rating.scale.set(event.ratingScale, event.ratingScale); + rating.antialiasing = event.ratingAntialiasing; + comboSpr.scale.set(event.ratingScale, event.ratingScale); + comboSpr.antialiasing = event.ratingAntialiasing; + + comboSpr.updateHitbox(); + rating.updateHitbox(); + + var separatedScore:String = Std.string(combo).addZeros(3); + + + for (i in 0...separatedScore.length) + { + if (combo < 10 && combo != 0) + break; + + var e = separatedScore.charAt(i); + + var numScore:FlxSprite = new FlxSprite((43 * i) - 90, 80).loadGraphic(Paths.image('${event.ratingPrefix}num$e${event.ratingSuffix}')); + numScore.antialiasing = event.numAntialiasing; + numScore.scale.set(event.numScale, event.numScale); + numScore.updateHitbox(); + + numScore.acceleration.y = FlxG.random.int(200, 300); + numScore.velocity.y -= FlxG.random.int(140, 160); + numScore.velocity.x = FlxG.random.float(-5, 5); + + comboGroup.add(numScore); + + FlxTween.tween(numScore, {alpha: 0}, 0.2, { + onComplete: function(tween:FlxTween) + { + comboGroup.remove(numScore, true); + numScore.destroy(); + }, + startDelay: Conductor.crochet * 0.002 + }); + } + + FlxTween.tween(rating, {alpha: 0}, 0.2, { + startDelay: Conductor.crochet * 0.001 + }); + + FlxTween.tween(comboSpr, {alpha: 0}, 0.2, { + onComplete: function(tween:FlxTween) + { + comboGroup.remove(comboSpr, true); + comboGroup.remove(rating, true); + comboSpr.destroy(); + + rating.destroy(); + }, + startDelay: Conductor.crochet * 0.001 + }); + + ratingNum += 1; } health += event.healthGain; diff --git a/source/funkin/menus/FreeplayState.hx b/source/funkin/menus/FreeplayState.hx index 8bfe19d2..bedbd543 100644 --- a/source/funkin/menus/FreeplayState.hx +++ b/source/funkin/menus/FreeplayState.hx @@ -273,7 +273,7 @@ class FreeplaySonglist { } - private function _addJSONSongs(songs:Array) { + private function _addJSONSongs(songs:Array, source:Bool = false) { if (songs != null && songs is Array) { for(e in songs) { if (e is Dynamic) { @@ -283,7 +283,7 @@ class FreeplaySonglist { this.songs.push(new SongMetadata(e.name, e.icon.getDefault("bf"), - CoolUtil.getColorFromDynamic(e.color).getDefault(FreeplayState.defaultColor), e.difficulties)); + CoolUtil.getColorFromDynamic(e.color).getDefault(FreeplayState.defaultColor), e.difficulties, source)); } } } @@ -298,10 +298,10 @@ class FreeplaySonglist { try { var json:FreeplayJSON = Json.parse(Assets.getText(jsonPath)); var addOGSongs = CoolUtil.getDefault(json.addOGSongs, true); - songList._addJSONSongs(json.songs); + songList._addJSONSongs(json.songs, jsonPath == baseJsonPath); if (addOGSongs && (jsonPath != baseJsonPath)) { var json:FreeplayJSON = Json.parse(Assets.getText(baseJsonPath)); - songList._addJSONSongs(json.songs); + songList._addJSONSongs(json.songs, true); } } @@ -328,7 +328,7 @@ class SongMetadata public var songCharacter:String = ""; public var difficulties:Array = ["EASY", "NORMAL", "HARD"]; - public function new(song:String, songCharacter:String, color:FlxColor, ?difficulties:Array) + public function new(song:String, songCharacter:String, color:FlxColor, ?difficulties:Array, fromSource:Bool = false) { this.songName = song; this.color = color; @@ -336,7 +336,7 @@ class SongMetadata if (difficulties != null && difficulties.length > 0) { this.difficulties = difficulties; } else { - this.difficulties = difficulties = [for(f in Paths.getFolderContent('data/charts/${song}/', false)) if (Path.extension(f = f.toUpperCase()) == "JSON") Path.withoutExtension(f)]; + this.difficulties = difficulties = [for(f in Paths.getFolderContent('data/charts/${song}/', false, false, fromSource)) if (Path.extension(f = f.toUpperCase()) == "JSON") Path.withoutExtension(f)]; if (difficulties.length == 3) { var hasHard = false, hasNormal = false, hasEasy = false; for(d in difficulties) { diff --git a/source/funkin/options/Options.hx b/source/funkin/options/Options.hx index 6cf0d14d..45b269a8 100644 --- a/source/funkin/options/Options.hx +++ b/source/funkin/options/Options.hx @@ -21,6 +21,7 @@ class Options public static var fpsCounter:Bool = true; public static var autoPause:Bool = true; public static var antialiasing:Bool = true; + public static var volume:Float = 1; /** * PLAYER 1 CONTROLS @@ -167,9 +168,11 @@ class Options PlayerSettings.player1.setKeyboardScheme(Solo); FlxG.forceNoAntialiasing = !antialiasing; FlxG.autoPause = autoPause; + FlxG.sound.volume = volume; } public static function save() { + volume = FlxG.sound.volume; for(field in Type.getClassFields(Options)) { var obj = Reflect.field(Options, field); if (Reflect.isFunction(obj) || obj is FlxSave) continue; diff --git a/source/funkin/scripting/events/NoteHitEvent.hx b/source/funkin/scripting/events/NoteHitEvent.hx index 858b38c9..7790d2bd 100644 --- a/source/funkin/scripting/events/NoteHitEvent.hx +++ b/source/funkin/scripting/events/NoteHitEvent.hx @@ -14,6 +14,14 @@ class NoteHitEvent extends CancellableEvent { Whenever a miss should be added. **/ public var misses:Bool = true; + /** + Whenever a miss should be added. + **/ + public var countAsCombo:Bool = true; + /** + Whenever ratings should be shown or not. + **/ + public var showRating:Null = null; /** * Note that has been pressed */ @@ -23,7 +31,7 @@ class NoteHitEvent extends CancellableEvent { */ public var character:Character; /** - * Whenever the Character is the player + * Whenever the Character is a player */ public var player:Bool; /** @@ -34,6 +42,14 @@ class NoteHitEvent extends CancellableEvent { * Suffix of the animation. "-alt" for alt notes, "" for normal ones. */ public var animSuffix:String; + /** + * Prefix of the rating sprite path. Defaults to "game/score/" + */ + public var ratingPrefix:String; + /** + * Suffix of the rating sprite path. + */ + public var ratingSuffix:String; /** * Direction of the press (0 = Left, 1 = Down, 2 = Up, 3 = Right) */ @@ -42,15 +58,42 @@ class NoteHitEvent extends CancellableEvent { * Score gained after note press. */ public var score:Int; + /** + * Accuracy gained from pressing this note. From 0 to 1. null means no accuracy is gained. + */ + public var accuracy:Null; /** * The amount of health that'll be gained from pressing that note. If called from `onNoteMiss`, the value will be negative. */ public var healthGain:Float; + /** + * Rating name. Defaults to "sick", "good", "bad" and "shit". Customisable. + */ + public var rating:String = "sick"; + /** + * Scale of ratings. + */ + public var ratingScale:Float = 0.7; + /** + * Whenever antialiasing should be enabled on ratings. + */ + public var ratingAntialiasing:Bool = true; + /** + * Scale of combo numbers. + */ + public var numScale:Float = 0.5; + /** + * Whenever antialiasing should be enabled on combo number. + */ + public var numAntialiasing:Bool = true; /** * Creates a new NoteHitEvent. */ - public function new(note:Note, character:Character, player:Bool, noteType:String, direction:Int, healthGain:Float, unmuteVocals:Bool = true, score:Int = 350, animSuffix:String = "") { + public function new(note:Note, character:Character, player:Bool, noteType:String, + direction:Int, healthGain:Float, unmuteVocals:Bool = true, score:Int = 350, + animSuffix:String = "", rating:String = "sick", accuracy:Null = 1, ratingPrefix:String = "", + ratingSuffix:String = "") { super(); this.note = note; @@ -62,6 +105,11 @@ class NoteHitEvent extends CancellableEvent { this.unmuteVocals = unmuteVocals; this.score = score; this.animSuffix = animSuffix; + this.countAsCombo = !note.isSustainNote && note.mustPress; + this.rating = rating; + this.accuracy = accuracy; + this.ratingPrefix = ratingPrefix; + this.ratingSuffix = ratingSuffix; } /**