From b8643ad1f7693bebaaabb938b2d6ae61723f04e9 Mon Sep 17 00:00:00 2001 From: lunarcleint <88809950+lunarcleint@users.noreply.github.com> Date: Fri, 30 Jun 2023 23:05:51 -0700 Subject: [PATCH] New add strumline button + editing + other charter bug fixes --- .../images/editors/charter/add-strumline.png | Bin 0 -> 652 bytes source/funkin/backend/chart/BaseGameParser.hx | 1 - source/funkin/backend/chart/ChartData.hx | 3 +- source/funkin/backend/system/MainState.hx | 3 + source/funkin/editors/charter/Charter.hx | 71 +++++---- .../editors/charter/CharterEventScreen.hx | 1 + .../editors/charter/CharterStrumline.hx | 32 +--- .../charter/CharterStrumlineAddButton.hx | 50 ++++++ .../editors/charter/CharterStrumlineScreen.hx | 148 ++++++++++++++++++ .../funkin/editors/charter/MetaDataScreen.hx | 5 + source/funkin/game/PlayState.hx | 13 +- source/funkin/game/StrumLine.hx | 13 +- 12 files changed, 279 insertions(+), 61 deletions(-) create mode 100644 assets/images/editors/charter/add-strumline.png create mode 100644 source/funkin/editors/charter/CharterStrumlineAddButton.hx create mode 100644 source/funkin/editors/charter/CharterStrumlineScreen.hx diff --git a/assets/images/editors/charter/add-strumline.png b/assets/images/editors/charter/add-strumline.png new file mode 100644 index 0000000000000000000000000000000000000000..d205c17ef58da963538144b3ad6c0fcf569adb70 GIT binary patch literal 652 zcmeAS@N?(olHy`uVBq!ia0vp^-XP4u1|%)~s$Kyp#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvNA9*$#}XrhE&A8o$cs%*g(Mb@`|LBU9tKM>2B#!p-`q} zo3yX{uK9Q5v+Sw*AQAmVDxZxC=Sr4d6^z_}r?x#Y^xJuBFBy}_xJ61liM}a!?eDf- zw6Tk`Kir|bn!j3VtBa)R`BKi3NXy@6#kXu-vT}{)!R;b$^EW?QJ(=zAhDx5rM(=NL zH~3|H|J$<-{hzOeo{O}c-eoi)*)~J(wZ38`!z5M(!i2-br+1A_B(7UrSt}{t^~AJd zONh+t50$+4q*s6ZuIqBO<*K!b|LPF2*N1|wtS2ty>sQZwCii@e*rI2LUMMb$>zg_C zbkdy;L-oyjP8ge|U4O9tVUVk2&%K8cf6`}8l{>LxzD%wVNzv%Jku!rK^>?<;Qc^d0R8eo^F!h|E9C~Qq*R3 z)8^zZBR?szdpu{mgN?OCk5*l-@mWA>w|Y0_w=2UI2-TGEq61@X?o~p z>BFzyxV$KyCf;M&t#?TfNTyR27yb# PlR=cHtDnm{r-UW|LplaR literal 0 HcmV?d00001 diff --git a/source/funkin/backend/chart/BaseGameParser.hx b/source/funkin/backend/chart/BaseGameParser.hx index e157d186..b8d2d6b9 100644 --- a/source/funkin/backend/chart/BaseGameParser.hx +++ b/source/funkin/backend/chart/BaseGameParser.hx @@ -34,7 +34,6 @@ class BaseGameParser { position: "girlfriend", notes: [], visible: false, - strumLinePos: 0.5 }); } diff --git a/source/funkin/backend/chart/ChartData.hx b/source/funkin/backend/chart/ChartData.hx index e81589e7..b6f0a639 100644 --- a/source/funkin/backend/chart/ChartData.hx +++ b/source/funkin/backend/chart/ChartData.hx @@ -36,8 +36,9 @@ typedef ChartStrumLine = { var type:ChartStrumLineType; var notes:Array; var position:String; - var ?strumLinePos:Float; // 0.25 = default opponent pos, 0.75 = default boyfriend pos var ?visible:Null; + var ?strumPos:Array; + var ?strumScale:Float; } typedef ChartNote = { diff --git a/source/funkin/backend/system/MainState.hx b/source/funkin/backend/system/MainState.hx index 00f69f49..0b7ba58d 100644 --- a/source/funkin/backend/system/MainState.hx +++ b/source/funkin/backend/system/MainState.hx @@ -46,12 +46,15 @@ class MainState extends FlxState { EventsData.reloadEvents(); TitleState.initialized = false; + /* if (betaWarningShown) FlxG.switchState(new TitleState()); else { FlxG.switchState(new BetaWarningState()); betaWarningShown = true; } + */ + FlxG.switchState(new funkin.editors.charter.Charter("ultra field", "ultra-field")); #if sys sys.FileSystem.createDirectory('./.temp/'); diff --git a/source/funkin/editors/charter/Charter.hx b/source/funkin/editors/charter/Charter.hx index 748d0922..ae8da173 100644 --- a/source/funkin/editors/charter/Charter.hx +++ b/source/funkin/editors/charter/Charter.hx @@ -54,6 +54,7 @@ class Charter extends UIState { public var topLimit:FlxSprite; public var strumlineInfoBG:FlxSprite; + public var strumlineAddButton:CharterStrumlineAddButton; public var hitsound:FlxSound; public var metronome:FlxSound; @@ -203,22 +204,6 @@ class Charter extends UIState { } ] }, - { - label: "Strumline", - childs: [ - { - label: "Create Strumline", - onSelect: function (_) { - createStrumline(strumLines.members.length, { - characters: [], - type: ADDITIONAL, - notes: [], - position: "girlfriend" - }); - } - }, - ] - }, { label: "Note", childs: [ @@ -403,6 +388,9 @@ class Charter extends UIState { strumlineInfoBG.y = 23; strumlineInfoBG.scrollFactor.set(); + strumlineAddButton = new CharterStrumlineAddButton(); + + strumlineAddButton.cameras = [charterCamera]; strumlineInfoBG.cameras = [charterCamera]; strumLines.cameras = [charterCamera]; @@ -422,6 +410,7 @@ class Charter extends UIState { add(conductorFollowerSpr); add(selectionBox); add(strumlineInfoBG); + add(strumlineAddButton); add(strumLines); // add the top menu last OUT of the ui group so that it stays on top add(topMenuSpr); @@ -448,13 +437,6 @@ class Charter extends UIState { for(strL in PlayState.SONG.strumLines) createStrumline(strumLines.members.length, strL, false); - trace("sorting notes..."); - notesGroup.sort(function(i, n1, n2) { - if (n1.step == n2.step) - return FlxSort.byValues(FlxSort.ASCENDING, n1.id, n2.id); - return FlxSort.byValues(FlxSort.ASCENDING, n1.step, n2.step); - }); - trace("generating events..."); var __last:CharterEvent = null; var __lastTime:Float = Math.NaN; @@ -695,8 +677,6 @@ class Charter extends UIState { // STRUMLINE DELETION/CREATION public function createStrumline(strumLineID:Int, strL:ChartStrumLine, addToUndo:Bool = true) { - selection = []; // dont fuck with selected notes - var cStr = new CharterStrumline(strL); strumLines.insert(strumLineID, cStr); @@ -719,9 +699,10 @@ class Charter extends UIState { } public function deleteStrumline(strumLineID:Int, addToUndo:Bool = true) { - selection = []; // dont fuck with selected notes + removeStrumlineFromSelection(strumLineID); var strL = strumLines.members[strumLineID].strumLine; + strumLines.members[strumLineID].destroy(); strumLines.members.remove(strumLines.members[strumLineID]); var deletedstrumNotes:Array = []; @@ -769,6 +750,32 @@ class Charter extends UIState { return -1; } + public function createStrumWithUI() { + FlxG.state.openSubState(new CharterStrumlineScreen(strumLines.members.length, null, (_) -> { + createStrumline(strumLines.members.length, _); + })); + } + + public inline function deleteStrumlineFromData(strL:ChartStrumLine) + deleteStrumline(getStrumlineID(strL)); + + public inline function editStrumline(strL:ChartStrumLine) { + var strID = getStrumlineID(strL); + FlxG.state.openSubState(new CharterStrumlineScreen(strID, strL, (_) -> { + strumLines.members[strID].strumLine = _; + })); + } + + public inline function removeStrumlineFromSelection(strumLineID:Int) { + var i = 0; + while(i < selection.length) { + var note = selection[i]; + if (Std.int(note.id / 4) == strumLineID) + selection.remove(note); + else i++; + } + } + // UNDO/REDO LOGIC #if REGION public inline function addToUndo(c:CharterChange) { @@ -779,8 +786,13 @@ class Charter extends UIState { } #end - public inline function sortNotes() - notesGroup.sort((i, c1, c2) -> FlxSort.byValues(i, c1.step, c2.step), FlxSort.ASCENDING); + public inline function sortNotes() { + notesGroup.sort(function(i, n1, n2) { + if (n1.step == n2.step) + return FlxSort.byValues(FlxSort.ASCENDING, n1.id, n2.id); + return FlxSort.byValues(FlxSort.ASCENDING, n1.step, n2.step); + }); + } #end var __crochet:Float; @@ -865,6 +877,9 @@ class Charter extends UIState { str.x = id * 40 * 4; str.y = strumlineInfoBG.y; } + + strumlineAddButton.x = strumLines.members.length * (40 * 4); + strumlineAddButton.y = strumlineInfoBG.y; } var zoom(default, set):Float = 0; diff --git a/source/funkin/editors/charter/CharterEventScreen.hx b/source/funkin/editors/charter/CharterEventScreen.hx index 3ccb6ff0..8859738e 100644 --- a/source/funkin/editors/charter/CharterEventScreen.hx +++ b/source/funkin/editors/charter/CharterEventScreen.hx @@ -34,6 +34,7 @@ class CharterEventScreen extends UISubstateWindow { super.create(); FlxG.sound.music.pause(); // prevent the song from continuing + Charter.instance.vocals.pause(); var bg:FlxSprite = new FlxSprite(windowSpr.x + 1, windowSpr.y + 31, Paths.image('editors/ui/scrollbar-bg')); bg.setGraphicSize(30, windowSpr.bHeight - 32); diff --git a/source/funkin/editors/charter/CharterStrumline.hx b/source/funkin/editors/charter/CharterStrumline.hx index 4ee75ebf..3fa94e77 100644 --- a/source/funkin/editors/charter/CharterStrumline.hx +++ b/source/funkin/editors/charter/CharterStrumline.hx @@ -65,28 +65,6 @@ class CharterStrumlineButton extends UITopMenuButton { public override function openContextMenu() { contextMenu = [ - { - label: "Player", - onSelect: function(_) { - strLine.strumLine.type = PLAYER; - }, - icon: strLine.strumLine.type == PLAYER ? 1 : 0 - }, - { - label: "Opponent", - onSelect: function(_) { - strLine.strumLine.type = OPPONENT; - }, - icon: strLine.strumLine.type == OPPONENT ? 1 : 0 - }, - { - label: "Additional", - onSelect: function(_) { - strLine.strumLine.type = ADDITIONAL; - }, - icon: strLine.strumLine.type == ADDITIONAL ? 1 : 0 - }, - null, { label: "Visible", onSelect: function(_) { @@ -105,9 +83,15 @@ class CharterStrumlineButton extends UITopMenuButton { }, null, { - label: "Delete", + label: "Edit", onSelect: function (_) { - Charter.instance.deleteStrumline(Charter.instance.getStrumlineID(strLine.strumLine)); + Charter.instance.editStrumline(strLine.strumLine); + } + }, + { + label: "Delete", + onSelect: function (_) { + Charter.instance.deleteStrumlineFromData(strLine.strumLine); } } ]; diff --git a/source/funkin/editors/charter/CharterStrumlineAddButton.hx b/source/funkin/editors/charter/CharterStrumlineAddButton.hx new file mode 100644 index 00000000..21271b63 --- /dev/null +++ b/source/funkin/editors/charter/CharterStrumlineAddButton.hx @@ -0,0 +1,50 @@ +package funkin.editors.charter; + +import flixel.math.FlxPoint; + +class CharterStrumlineAddButton extends UISprite { + public var addButton:UISprite; + public var addText:UIText; + + public override function new(?x:Float, ?y:Float) { + super(); + + scrollFactor.set(1, 0); + alpha = 0; + + addButton = new UISprite(); + addButton.loadGraphic(Paths.image("editors/charter/add-strumline")); + addButton.scale.set(0.75,0.75); + addButton.updateHitbox(); + addButton.antialiasing = false; + members.push(addButton); + + addText = new UIText(0,0, 160, "Add New"); + addText.alignment = CENTER; + members.push(addText); + } + + var addButtonScale:FlxPoint = FlxPoint.get(0,0); + + public override function update(elapsed:Float) { + addButton.follow(this, ((40 * 4) - addButton.width) / 2, 18); + addText.follow(this, 0, 84); + + super.update(elapsed); + + addButton.__rect.x = addButton.x; + addButton.__rect.y = addButton.y; + addButton.__rect.width = addButton.width; + addButton.__rect.height = addButton.height; + if(UIState.state.isOverlapping(addButton, addButton.__rect)) { + addButtonScale.set(0.85, 0.85); + if (FlxG.mouse.justReleased) Charter.instance.createStrumWithUI(); + } + else addButtonScale.set(0.75, 0.75); + + addButton.scale.set( + FlxMath.lerp(addButton.scale.x, addButtonScale.x, 1/6), + FlxMath.lerp(addButton.scale.y, addButtonScale.y, 1/6) + ); + } +} \ No newline at end of file diff --git a/source/funkin/editors/charter/CharterStrumlineScreen.hx b/source/funkin/editors/charter/CharterStrumlineScreen.hx new file mode 100644 index 00000000..a60b89c3 --- /dev/null +++ b/source/funkin/editors/charter/CharterStrumlineScreen.hx @@ -0,0 +1,148 @@ +package funkin.editors.charter; + +import flixel.math.FlxPoint; +import funkin.game.Note; +import funkin.game.Character; +import funkin.game.HealthIcon; +import funkin.backend.chart.ChartData.ChartStrumLine; + +class CharterStrumlineScreen extends UISubstateWindow { + public var strumLineID:Int = -1; + public var strumLine:ChartStrumLine; + + public var charactersTextBox:UITextBox; + public var typeDropdown:UIDropDown; + public var stagePositionDropdown:UIDropDown; + public var hudScaleStepper:UINumericStepper; + public var hudXStepper:UINumericStepper; + public var hudYStepper:UINumericStepper; + + public var characterIcons:Array = []; + + public var saveButton:UIButton; + public var closeButton:UIButton; + + private var onSave:ChartStrumLine -> Void = null; + + public function new(strumLineID:Int, strumLine:ChartStrumLine, ?onSave:ChartStrumLine->Void) { + super(); + this.strumLineID = strumLineID; + this.strumLine = strumLine; + if (onSave != null) this.onSave = onSave; + } + + public override function create() { + var creatingStrumLine:Bool = strumLine == null; + + if (creatingStrumLine) + strumLine = { + characters: ["dad"], + type: OPPONENT, + notes: [], + position: "dad", + visible: true + }; + + winTitle = creatingStrumLine ? 'Creating Strumline #$strumLineID' : 'Strumline #$strumLineID properties'; + winWidth = 690; winHeight = 334; + + FlxG.sound.music.pause(); + Charter.instance.vocals.pause(); + + super.create(); + + function addLabelOn(ui:UISprite, text:String) + add(new UIText(ui.x, ui.y - 24, 0, text)); + + var title:UIText; + add(title = new UIText(windowSpr.x + 20, windowSpr.y + 30 + 16, 0, creatingStrumLine ? "Create New Strumline" : "Edit Strumline Properties", 28)); + + charactersTextBox = new UITextBox(title.x, title.y + title.height + 38, strumLine.characters.join(", ")); + charactersTextBox.onChange = (newChars:String) -> { + updateCharacterIcons([for (char in newChars.split(",")) char.trim()]); + }; + add(charactersTextBox); + addLabelOn(charactersTextBox, "Characters"); + + updateCharacterIcons(strumLine.characters); + + typeDropdown = new UIDropDown(charactersTextBox.x, charactersTextBox.y + 32 + 58, 200, 32, ["OPPONENT", "PLAYER", "ADDITIONAL"], strumLine.type); + add(typeDropdown); + addLabelOn(typeDropdown, "Type"); + + var stagePositionI = strumLine.position == null ? strumLine.type : ["DAD", "BOYFRIEND", "GIRLFRIEND"].indexOf(strumLine.position.toUpperCase()); + + stagePositionDropdown = new UIDropDown(typeDropdown.x + 200 - 32 + 26, typeDropdown.y, 200, 32, ["DAD", "BOYFRIEND", "GIRLFRIEND"], stagePositionI); + add(stagePositionDropdown); + addLabelOn(stagePositionDropdown, "Stage Position"); + + hudScaleStepper = new UINumericStepper(stagePositionDropdown.x + 200 - 32 + 26, stagePositionDropdown.y, strumLine.strumScale == null ? 1 : strumLine.strumScale, 0.001, 2, null, null, 74); + add(hudScaleStepper); + addLabelOn(hudScaleStepper, "Scale"); + + var startingPos:FlxPoint = strumLine.strumPos == null ? switch (strumLine.type) { + case 1: FlxPoint.get((FlxG.width * 0.75) - ((Note.swagWidth * (strumLine.strumScale == null ? 1 : strumLine.strumScale)) * 2), 50); + default: FlxPoint.get((FlxG.width * 0.25) - ((Note.swagWidth * (strumLine.strumScale == null ? 1 : strumLine.strumScale)) * 2), 50); + } : FlxPoint.get(strumLine.strumPos[0], strumLine.strumPos[1]); + + hudXStepper = new UINumericStepper(hudScaleStepper.x + 80 - 32 + 26, hudScaleStepper.y, startingPos.x, 0.001, 2, null, null, 84); + add(hudXStepper); + addLabelOn(hudXStepper, "Hud Position (X,Y)"); + + add(new UIText(hudXStepper.x + 84 - 32 + 0, hudXStepper.y + 9, 0, ",", 22)); + + hudYStepper = new UINumericStepper(hudXStepper.x + 84 - 32 + 26, hudXStepper.y, startingPos.y, 0.001, 2, null, null, 84); + add(hudYStepper); + + saveButton = new UIButton(windowSpr.x + windowSpr.bWidth - 20 - 125, windowSpr.y + windowSpr.bHeight - 16 - 32, "Save & Close", function() { + saveStrumline(); + close(); + }, 125); + add(saveButton); + + if (!creatingStrumLine) { + closeButton = new UIButton(saveButton.x - 20, saveButton.y, "Close", function() { + close(); + }, 125); + add(closeButton); + closeButton.x -= closeButton.bWidth; + } + } + + function updateCharacterIcons(characters:Array) { + for (icon in characterIcons) { + remove(icon); + icon.destroy(); + } + characterIcons = []; + + for (i => char in characters) { + var iconSprite = new HealthIcon(Character.getIconFromCharName(char)); + iconSprite.scrollFactor.set(1,1); + iconSprite.scale.set(0.5, 0.5); + iconSprite.updateHitbox(); + + iconSprite.setPosition( + charactersTextBox.x + 320 + 8 + ((iconSprite.width + 4) * i), + (charactersTextBox.y + 16) - (iconSprite.height/2) + ); + add(iconSprite); + } + } + + function saveStrumline() { + for (stepper in [hudXStepper, hudYStepper, hudScaleStepper]) + @:privateAccess stepper.__onChange(stepper.label.text); + + strumLine = { + characters: [for (char in charactersTextBox.label.text.split(",")) char.trim()], + type: typeDropdown.index, + notes: strumLine.notes, + position: ["DAD", "BOYFRIEND", "GIRLFRIEND"][stagePositionDropdown.index].toLowerCase(), + visible: strumLine.visible, + strumPos: [hudXStepper.value, hudYStepper.value], + strumScale: hudScaleStepper.value + }; + if (onSave != null) onSave(strumLine); + } +} \ No newline at end of file diff --git a/source/funkin/editors/charter/MetaDataScreen.hx b/source/funkin/editors/charter/MetaDataScreen.hx index 66004ac5..c13d928e 100644 --- a/source/funkin/editors/charter/MetaDataScreen.hx +++ b/source/funkin/editors/charter/MetaDataScreen.hx @@ -35,7 +35,9 @@ class MetaDataScreen extends UISubstateWindow { winWidth = 748 - 32 + 40; super.create(); + FlxG.sound.music.pause(); + Charter.instance.vocals.pause(); function addLabelOn(ui:UISprite, text:String) add(new UIText(ui.x, ui.y - 24, 0, text)); @@ -132,6 +134,9 @@ class MetaDataScreen extends UISubstateWindow { } public function saveMeta() { + for (stepper in [bpmStepper, stepsPerBeatStepper, beatsPerMesureStepper]) + @:privateAccess stepper.__onChange(stepper.label.text); + PlayState.SONG.meta = { name: songNameTextBox.label.text, bpm: bpmStepper.value, diff --git a/source/funkin/game/PlayState.hx b/source/funkin/game/PlayState.hx index 2e582599..e0e518f3 100644 --- a/source/funkin/game/PlayState.hx +++ b/source/funkin/game/PlayState.hx @@ -622,8 +622,17 @@ class PlayState extends MusicBeatState chars.push(char); } - var strOffset:Float = strumLine.strumLinePos == null ? (strumLine.type == 1 ? 0.75 : 0.25) : strumLine.strumLinePos; - var strLine = new StrumLine(chars, strOffset, strumLine.type == 2 || (!coopMode && !((strumLine.type == 1 && !opponentMode) || (strumLine.type == 0 && opponentMode))), strumLine.type != 1, coopMode ? (strumLine.type == 1 ? controlsP1 : controlsP2) : controls); + var startingPos:FlxPoint = strumLine.strumPos == null ? switch (strumLine.type) { + case 1: FlxPoint.get((FlxG.width * 0.75) - ((Note.swagWidth * (strumLine.strumScale == null ? 1 : strumLine.strumScale)) * 2), this.strumLine.y); + default: FlxPoint.get((FlxG.width * 0.25) - ((Note.swagWidth * (strumLine.strumScale == null ? 1 : strumLine.strumScale)) * 2), this.strumLine.y); + } : FlxPoint.get(strumLine.strumPos[0], strumLine.strumPos[1]); + + var strLine = new StrumLine(chars, + startingPos, + strumLine.strumScale == null ? 1 : strumLine.strumScale, + strumLine.type == 2 || (!coopMode && !((strumLine.type == 1 && !opponentMode) || (strumLine.type == 0 && opponentMode))), + strumLine.type != 1, coopMode ? (strumLine.type == 1 ? controlsP1 : controlsP2) : controls + ); strLine.cameras = [camHUD]; strLine.data = strumLine; strLine.visible = (strumLine.visible != false); diff --git a/source/funkin/game/StrumLine.hx b/source/funkin/game/StrumLine.hx index 6e8c23a6..2f0c6ebd 100644 --- a/source/funkin/game/StrumLine.hx +++ b/source/funkin/game/StrumLine.hx @@ -1,5 +1,6 @@ package funkin.game; +import flixel.math.FlxPoint; import flixel.util.FlxSignal.FlxTypedSignal; import funkin.backend.scripting.events.*; @@ -81,12 +82,14 @@ class StrumLine extends FlxTypedGroup { private inline function set_ghostTapping(b:Bool):Bool return this.ghostTapping = b; - private var strumOffset:Float = 0.25; + private var startingPos:FlxPoint = FlxPoint.get(0,0); + private var strumScale:Float = 1; - public function new(characters:Array, strumOffset:Float = 0.25, cpu:Bool = false, opponentSide:Bool = true, ?controls:Controls) { + public function new(characters:Array, startingPos:FlxPoint, strumScale:Float, cpu:Bool = false, opponentSide:Bool = true, ?controls:Controls) { super(); this.characters = characters; - this.strumOffset = strumOffset; + this.startingPos = startingPos; + this.strumScale = strumScale; this.cpu = cpu; this.opponentSide = opponentSide; this.controls = controls; @@ -253,7 +256,7 @@ class StrumLine extends FlxTypedGroup { public function createStrum(i:Int, ?animPrefix:String) { if (animPrefix == null) animPrefix = strumAnimPrefix[i % strumAnimPrefix.length]; - var babyArrow:Strum = new Strum((FlxG.width * strumOffset) + (Note.swagWidth * (i - 2)), PlayState.instance.strumLine.y); + var babyArrow:Strum = new Strum(startingPos.x + ((Note.swagWidth * strumScale) * i), startingPos.y); babyArrow.ID = i; var event = PlayState.instance.scripts.event("onStrumCreation", EventManager.get(StrumCreationEvent).recycle(babyArrow, PlayState.instance.strumLines.members.indexOf(this), i, animPrefix)); @@ -266,7 +269,7 @@ class StrumLine extends FlxTypedGroup { babyArrow.animation.addByPrefix('red', 'arrowRIGHT'); babyArrow.antialiasing = true; - babyArrow.setGraphicSize(Std.int(babyArrow.width * 0.7)); + babyArrow.setGraphicSize(Std.int((babyArrow.width * 0.7) * strumScale)); babyArrow.animation.addByPrefix('static', 'arrow${event.animPrefix.toUpperCase()}'); babyArrow.animation.addByPrefix('pressed', '${event.animPrefix} press', 24, false);