This commit is contained in:
entar 2025-05-26 22:51:52 +07:00
parent 859fd960f0
commit 0cb94d47f8
22 changed files with 42279 additions and 11 deletions

188
characters/bf.json Normal file
View File

@ -0,0 +1,188 @@
{
"animations": [
{
"loop": false,
"offsets": [
-15,
-54
],
"anim": "singDOWN",
"fps": 24,
"name": "BF NOTE DOWN",
"indices": []
},
{
"loop": false,
"offsets": [
7,
19
],
"anim": "singLEFTmiss",
"fps": 24,
"name": "BF NOTE LEFT MISS",
"indices": []
},
{
"loop": false,
"offsets": [
-15,
-19
],
"anim": "singDOWNmiss",
"fps": 24,
"name": "BF NOTE DOWN MISS",
"indices": []
},
{
"loop": false,
"offsets": [
-46,
27
],
"anim": "singUPmiss",
"fps": 24,
"name": "BF NOTE UP MISS",
"indices": []
},
{
"loop": false,
"offsets": [
-44,
22
],
"anim": "singRIGHTmiss",
"fps": 24,
"name": "BF NOTE RIGHT MISS",
"indices": []
},
{
"loop": false,
"offsets": [
11,
10
],
"anim": "firstDeath",
"fps": 24,
"name": "BF dies",
"indices": []
},
{
"loop": true,
"offsets": [
11,
4
],
"anim": "deathLoop",
"fps": 24,
"name": "BF Dead Loop",
"indices": []
},
{
"loop": false,
"offsets": [
11,
68
],
"anim": "deathConfirm",
"fps": 24,
"name": "BF Dead confirm",
"indices": []
},
{
"offsets": [
7,
-8
],
"loop": false,
"fps": 24,
"anim": "singLEFT",
"indices": [],
"name": "BF NOTE LEFT"
},
{
"offsets": [
-50,
-6
],
"loop": false,
"fps": 24,
"anim": "singRIGHT",
"indices": [],
"name": "BF NOTE RIGHT"
},
{
"loop": false,
"offsets": [
-43,
28
],
"anim": "singUP",
"fps": 24,
"name": "BF NOTE UP",
"indices": []
},
{
"loop": false,
"offsets": [
-2,
6
],
"anim": "hey",
"fps": 24,
"name": "BF HEY",
"indices": []
},
{
"loop": true,
"offsets": [
-5,
1
],
"anim": "scared",
"fps": 24,
"name": "BF idle shaking",
"indices": []
},
{
"loop": false,
"offsets": [
-5,
0
],
"anim": "idle",
"fps": 24,
"name": "BF idle dance",
"indices": []
},
{
"offsets": [
-4,
7
],
"loop": false,
"fps": 24,
"anim": "Laugh",
"indices": [],
"name": "BF Laugh"
}
],
"no_antialiasing": false,
"image": "sprites/BOYFRIEND",
"position": [
0,
350
],
"healthicon": "bf",
"flip_x": true,
"healthbar_colors": [
49,
176,
209
],
"camera_position": [
80,
-40
],
"sing_duration": 4,
"scale": 1
}

1621
charts/stress/events.json Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

4287
charts/stress/stress.json Normal file

File diff suppressed because it is too large Load Diff

BIN
images/eventArrow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

130
main.lua
View File

@ -6,41 +6,102 @@ local myTypes = require("source.modules.types")
local conductor = require("source.modules.conductor")
local json = require("source.modules.json")
local files = require("source.modules.files")
local logger = require("source.modules.logging")
local socket = require("socket")
local logging= require("source.modules.logging")
local newVector2 = myTypes.Vector2(10, 10)
local startTime = socket.gettime()
local startTime = 0
local songName = "high"
local songDifficulty = "erect"
local songName = "stress"
local songDifficulty = "hard"
local chartString = files.read_file(string.format("charts/%s/%s-%s.json", songName, songName, songDifficulty))
if not chartString then
error("Chart couldn't be loaded!")
end
print(chartString)
local chart = json.parse(chartString).song
local inst = love.audio.newSource(string.format("songs/%s/Inst.ogg", chart.song), "stream")
local voices = love.audio.newSource(string.format("songs/%s/Voices.ogg", chart.song), "stream")
local miss = love.audio.newSource("sounds/missnote1.ogg", "static")
conductor:setBpm(chart.bpm)
conductor:mapBpmChanges(chart)
inst:play()
voices:play()
local step = 0
local beat = 0
local graphics = {
}
function loadGraphic(graphic)
if graphic.graphics == love.graphics.newImage then
graphic.loaded = love.graphics.newImage(graphic.path)
end
if graphic.children then
for index, graphicChild in next, graphic.children do
loadGraphic(graphicChild)
end
end
end
local playing = false
local bf
local notes = {}
local directions = {
"singLEFT",
"singDOWN",
"singUP",
"singRIGHT"
}
function love.load()
bf = myTypes.character("bf")
for index, section in next, chart.notes do
for index, note in next, section.sectionNotes do
local newNote = myTypes.note(note, section.mustHitSection)
table.insert(notes, newNote)
end
end
inst:play()
voices:play()
startTime = socket.gettime()
playing = true
end
local function checkNote(dir)
for index, note in next, notes do
if note.position - conductor.songPosition < 200 then
if note.mustPress and not note.pressed and note.direction == dir then
bf:PlayAnimation(directions[note.direction])
note.pressed = true
table.remove(notes, index)
end
end
end
end
function love.update(dt)
if not playing then return end
function love.draw()
local currentTime = socket.gettime()
local elapsed = math.floor((currentTime - startTime) * 1000)
conductor.songPosition = elapsed
local oldStep = step
local oldBeat = beat
@ -53,5 +114,54 @@ function love.draw()
if beat ~= oldBeat then
print("Beat", beat)
if beat % 2 == 0 then
-- gf:PlayAnimation("BF NOTE LEFT", 30, false)
end
end
end
myTypes.updateSprites(dt)
if love.keyboard.isDown("a") then
checkNote(1)
end
if love.keyboard.isDown("s") then
checkNote(2)
end
if love.keyboard.isDown("w") then
checkNote(3)
end
if love.keyboard.isDown("d") then
checkNote(4)
end
for index, note in next, notes do
if note.position - conductor.songPosition < 0 then
if note.mustPress then
miss:stop()
miss:play()
bf:PlayAnimation(directions[note.direction].."miss")
table.remove(notes, index)
end
end
end
end
local mainCanvas = love.graphics.newCanvas(1920, 1080)
function love.draw()
love.graphics.setCanvas(mainCanvas)
love.graphics.clear()
myTypes.drawSprites()
love.graphics.setCanvas()
love.graphics.circle("fill", 960, 59, 50000)
love.graphics.draw(mainCanvas, 0, 0, 0, (love.graphics:getHeight() / 1080) * (4/3), love.graphics:getHeight() / 1080)
end
love.window.setMode(1280, 720, { fullscreen = true , resizable = true})

BIN
songs/Stress/Inst.ogg Normal file

Binary file not shown.

BIN
songs/Stress/Voices.ogg Normal file

Binary file not shown.

BIN
sounds/missnote1.ogg Normal file

Binary file not shown.

View File

@ -65,7 +65,6 @@ function conductor:getSectionBeats(song, section)
end
function conductor:mapBpmChanges(song)
print(logging.dump(song))
local curBPM = song["bpm"]
local totalSteps = 0

View File

@ -1,10 +1,20 @@
local module = {}
local myMath = require("source.modules.math")
local files = require("source.modules.files")
local logging = require("source.modules.logging")
local json = require("source.modules.json")
local noteclass = require("source.modules.types.note")
local characterclass = require("source.modules.types.character")
local Vector2 = {}
Vector2.__index = Vector2
local Sprite = {}
Sprite.__index = Sprite
local Sprites = {}
function Vector2:Lerp(newVector2, position)
return module.Vector2(myMath.lerp(self.x, newVector2.x, position), myMath.lerp(self.x, newVector2.x, position))
end
@ -17,4 +27,109 @@ function module.Vector2(x, y)
return setmetatable({x = x, y = y}, Vector2)
end
function module.Sprite(image, sheet)
local sheetString = files.read_file(sheet)
if not sheetString then
error("Failed to load", sheet)
end
local atlas = json.parse(sheetString).TextureAtlas.SubTexture
local animations = {}
local quads = {}
local newSprite = setmetatable({
animations = animations,
image = love.graphics.newImage(image),
quads = quads,
elapsed = 0,
fps = 10,
animation = nil,
frame = 1,
position = module.Vector2(200, 100), -- changeable
looping = false,
extraOffset = module.Vector2(0,0)
}, Sprite)
for index, sprite in next, atlas do
local x = sprite._x
local y = sprite._y
local width = sprite._width
local height = sprite._height
local frameX = sprite._frameX
local frameY = sprite._frameY
local frameW = sprite._frameWidth
local frameH = sprite._frameHeight
local name = sprite._name
local num = tonumber(string.sub(name, name:len() - 3, name:len()))
if not quads[name:sub(0, name:len() - 4)] then
quads[name:sub(0, name:len() - 4)] = {}
end
quads[name:sub(0, name:len() - 4)][num] = {quad = love.graphics.newQuad(x, y, width, height, newSprite.image), offset = module.Vector2(frameX or 0, frameY or 0), resize = module.Vector2(.8,1)}
end
newSprite.quads = quads
print(logging.dump(quads))
table.insert(Sprites, newSprite)
return newSprite
end
function Sprite:PlayAnimation(name, fps, loop)
self.animation = name
self.fps = fps
self.looping = loop
self.frame = 1
self.ended = false
end
function module.updateSprites(dt)
for index, sprite in next, Sprites do
if not sprite.animation then goto continue end
sprite.elapsed = sprite.elapsed + dt
if sprite.elapsed > 1 / sprite.fps then
sprite.frame = sprite.quads[sprite.animation][sprite.frame + 1] and sprite.frame + 1 or sprite.looping and 1 or sprite.frame
if not sprite.quads[sprite.animation][sprite.frame + 1] and not sprite.looping then
sprite.ended = true
end
sprite.elapsed = 0
end
-- sprite.quads[sprite.animation][sprite.frame].resize = module.Vector2(love.graphics.getWidth() / 1920, love.graphics.getHeight() / 1080)
::continue:: -- At the end. always.
end
end
module.draws = {}
function module.drawSprites()
for index, sprite in next, Sprites do
if not sprite.animation then goto continue end -- For some reason OG LUA doesnt have continue
-- So im forced to use goto ::continue:: since it goes straight to the last point of the cycle
local quad = sprite.quads[sprite.animation][sprite.frame]
love.graphics.draw(sprite.image, quad.quad, (sprite.position.x + (sprite.position.x - quad.offset.x - sprite.extraOffset.x)), (sprite.position.y + (sprite.position.y - quad.offset.y - sprite.extraOffset.y)), 0, quad.resize.x, quad.resize.y)
::continue:: -- Point itself
end
end
module.note = noteclass.note
characterclass.myTypes = module
module.character = characterclass.character
return module

View File

@ -0,0 +1,48 @@
local module = {}
-- local myTypes = require("source.modules.types")
local files = require("source.modules.files")
local json = require("source.modules.json")
local CharacterClass = {}
CharacterClass.__index = CharacterClass
function CharacterClass:PlayAnimation(name)
local animName = self.animations[name]
self.sprite:PlayAnimation(animName, self.animInfo[name].fps)
self.sprite.extraOffset = module.myTypes.Vector2(self.animInfo[name].offsets[1], self.animInfo[name].offsets[2])
end
function module.character(name)
local charFile = files.read_file(string.format("characters/%s.json", name))
if not charFile then
error("Failed to load character "..name)
end
local parsed = json.parse(charFile)
local image = parsed.image..".png"
local sheet = parsed.image..".json"
local sprite = module.myTypes.Sprite(image, sheet)
sprite.position = module.myTypes.Vector2(parsed.position[1], parsed.position[2])
local newCharacter = setmetatable({
scale = parsed.scale,
animations = {},
animInfo = {},
sprite = sprite,
singing = false
}, CharacterClass)
for index, alias in next, parsed.animations do
newCharacter.animations[alias.anim] = alias.name
newCharacter.animInfo[alias.anim] = alias
end
newCharacter:PlayAnimation("idle")
return newCharacter
end
return module

View File

@ -0,0 +1,22 @@
local module = {}
local NoteClass = {}
NoteClass.__index = NoteClass
function NoteClass:destroy()
end
function module.note(raw, mustHitSection)
print(mustHitSection and raw[2] <= 3 or not mustHitSection and raw[2] > 3)
local newNote = setmetatable({
position = raw[1],
character = nil,
mustPress = mustHitSection and raw[2] <= 3 or not mustHitSection and raw[2] > 3,
direction = raw[2] <= 3 and raw[2] + 1 or raw[2] - 3
}, NoteClass)
return newNote
end
return module

4073
sprites/BOYFRIEND.json Normal file

File diff suppressed because it is too large Load Diff

BIN
sprites/BOYFRIEND.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

BIN
sprites/GF_assets.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 MiB

254
sprites/GF_assets.xml Normal file
View File

@ -0,0 +1,254 @@
<TextureAtlas imagePath="GF_assets.png">
<SubTexture name="GF Cheer0000" x="0" y="0" width="699" height="657" frameX="-2" frameY="0" frameWidth="703" frameHeight="657"/>
<SubTexture name="GF Cheer0001" x="709" y="0" width="703" height="657"/>
<SubTexture name="GF Cheer0002" x="1422" y="0" width="703" height="654" frameX="0" frameY="-3" frameWidth="703" frameHeight="657"/>
<SubTexture name="GF Cheer0003" x="2135" y="0" width="699" height="654" frameX="-2" frameY="-3" frameWidth="703" frameHeight="657"/>
<SubTexture name="GF Cheer0004" x="2844" y="0" width="699" height="654" frameX="-2" frameY="-3" frameWidth="703" frameHeight="657"/>
<SubTexture name="GF Cheer0005" x="2844" y="0" width="699" height="654" frameX="-2" frameY="-3" frameWidth="703" frameHeight="657"/>
<SubTexture name="GF Cheer0006" x="2844" y="0" width="699" height="654" frameX="-2" frameY="-3" frameWidth="703" frameHeight="657"/>
<SubTexture name="GF Cheer0007" x="2844" y="0" width="699" height="654" frameX="-2" frameY="-3" frameWidth="703" frameHeight="657"/>
<SubTexture name="GF Cheer0008" x="2844" y="0" width="699" height="654" frameX="-2" frameY="-3" frameWidth="703" frameHeight="657"/>
<SubTexture name="GF Cheer0009" x="2844" y="0" width="699" height="654" frameX="-2" frameY="-3" frameWidth="703" frameHeight="657"/>
<SubTexture name="GF Cheer0010" x="2844" y="0" width="699" height="654" frameX="-2" frameY="-3" frameWidth="703" frameHeight="657"/>
<SubTexture name="GF Cheer0011" x="2844" y="0" width="699" height="654" frameX="-2" frameY="-3" frameWidth="703" frameHeight="657"/>
<SubTexture name="GF Cheer0012" x="2844" y="0" width="699" height="654" frameX="-2" frameY="-3" frameWidth="703" frameHeight="657"/>
<SubTexture name="GF Cheer0013" x="2844" y="0" width="699" height="654" frameX="-2" frameY="-3" frameWidth="703" frameHeight="657"/>
<SubTexture name="GF Cheer0014" x="2844" y="0" width="699" height="654" frameX="-2" frameY="-3" frameWidth="703" frameHeight="657"/>
<SubTexture name="GF Cheer0015" x="2844" y="0" width="699" height="654" frameX="-2" frameY="-3" frameWidth="703" frameHeight="657"/>
<SubTexture name="GF Cheer0016" x="2844" y="0" width="699" height="654" frameX="-2" frameY="-3" frameWidth="703" frameHeight="657"/>
<SubTexture name="GF Cheer0017" x="2844" y="0" width="699" height="654" frameX="-2" frameY="-3" frameWidth="703" frameHeight="657"/>
<SubTexture name="GF Cheer0018" x="2844" y="0" width="699" height="654" frameX="-2" frameY="-3" frameWidth="703" frameHeight="657"/>
<SubTexture name="GF Cheer0019" x="2844" y="0" width="699" height="654" frameX="-2" frameY="-3" frameWidth="703" frameHeight="657"/>
<SubTexture name="GF Cheer0020" x="2844" y="0" width="699" height="654" frameX="-2" frameY="-3" frameWidth="703" frameHeight="657"/>
<SubTexture name="GF Dancing Beat0000" x="3553" y="0" width="699" height="634" frameX="-2" frameY="-14" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0001" x="4262" y="0" width="703" height="634" frameX="0" frameY="-14" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0002" x="4975" y="0" width="703" height="632" frameX="0" frameY="-16" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0003" x="5688" y="0" width="699" height="632" frameX="-2" frameY="-16" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0004" x="6397" y="0" width="699" height="635" frameX="-2" frameY="-13" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0005" x="7106" y="0" width="699" height="635" frameX="-2" frameY="-13" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0006" x="0" y="667" width="699" height="637" frameX="-2" frameY="-11" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0007" x="709" y="667" width="699" height="648" frameX="-2" frameY="0" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0008" x="709" y="667" width="699" height="648" frameX="-2" frameY="0" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0009" x="709" y="667" width="699" height="648" frameX="-2" frameY="0" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0010" x="1418" y="667" width="699" height="648" frameX="-2" frameY="0" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0011" x="1418" y="667" width="699" height="648" frameX="-2" frameY="0" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0012" x="1418" y="667" width="699" height="648" frameX="-2" frameY="0" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0013" x="2127" y="667" width="699" height="648" frameX="-2" frameY="0" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0014" x="2127" y="667" width="699" height="648" frameX="-2" frameY="0" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0015" x="2836" y="667" width="699" height="636" frameX="-2" frameY="-12" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0016" x="3545" y="667" width="703" height="636" frameX="0" frameY="-12" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0017" x="4258" y="667" width="703" height="636" frameX="0" frameY="-12" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0018" x="4971" y="667" width="699" height="636" frameX="-2" frameY="-12" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0019" x="5680" y="667" width="699" height="637" frameX="-2" frameY="-11" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0020" x="6389" y="667" width="699" height="637" frameX="-2" frameY="-11" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0021" x="7098" y="667" width="699" height="638" frameX="-2" frameY="-10" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0022" x="0" y="1325" width="699" height="643" frameX="-2" frameY="-5" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0023" x="0" y="1325" width="699" height="643" frameX="-2" frameY="-5" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0024" x="0" y="1325" width="699" height="643" frameX="-2" frameY="-5" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0025" x="709" y="1325" width="699" height="642" frameX="-2" frameY="-6" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0026" x="709" y="1325" width="699" height="642" frameX="-2" frameY="-6" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0027" x="709" y="1325" width="699" height="642" frameX="-2" frameY="-6" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0028" x="1418" y="1325" width="699" height="642" frameX="-2" frameY="-6" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat0029" x="1418" y="1325" width="699" height="642" frameX="-2" frameY="-6" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0000" x="2127" y="1325" width="699" height="635" frameX="-2" frameY="-13" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0001" x="2836" y="1325" width="703" height="635" frameX="0" frameY="-13" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0002" x="3549" y="1325" width="703" height="619" frameX="0" frameY="-29" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0003" x="4262" y="1325" width="699" height="619" frameX="-2" frameY="-29" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0004" x="4971" y="1325" width="699" height="607" frameX="-2" frameY="-41" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0005" x="5680" y="1325" width="699" height="607" frameX="-2" frameY="-41" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0006" x="6389" y="1325" width="699" height="626" frameX="-2" frameY="-22" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0007" x="709" y="667" width="699" height="648" frameX="-2" frameY="0" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0008" x="709" y="667" width="699" height="648" frameX="-2" frameY="0" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0009" x="709" y="667" width="699" height="648" frameX="-2" frameY="0" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0010" x="1418" y="667" width="699" height="648" frameX="-2" frameY="0" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0011" x="1418" y="667" width="699" height="648" frameX="-2" frameY="0" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0012" x="1418" y="667" width="699" height="648" frameX="-2" frameY="0" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0013" x="2127" y="667" width="699" height="648" frameX="-2" frameY="0" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0014" x="2127" y="667" width="699" height="648" frameX="-2" frameY="0" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0015" x="2836" y="667" width="699" height="636" frameX="-2" frameY="-12" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0016" x="3545" y="667" width="703" height="636" frameX="0" frameY="-12" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0017" x="4258" y="667" width="703" height="636" frameX="0" frameY="-12" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0018" x="4971" y="667" width="699" height="636" frameX="-2" frameY="-12" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0019" x="5680" y="667" width="699" height="637" frameX="-2" frameY="-11" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0020" x="6389" y="667" width="699" height="637" frameX="-2" frameY="-11" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0021" x="7098" y="667" width="699" height="638" frameX="-2" frameY="-10" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0022" x="0" y="1325" width="699" height="643" frameX="-2" frameY="-5" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0023" x="0" y="1325" width="699" height="643" frameX="-2" frameY="-5" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0024" x="0" y="1325" width="699" height="643" frameX="-2" frameY="-5" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0025" x="709" y="1325" width="699" height="642" frameX="-2" frameY="-6" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0026" x="709" y="1325" width="699" height="642" frameX="-2" frameY="-6" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0027" x="709" y="1325" width="699" height="642" frameX="-2" frameY="-6" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0028" x="1418" y="1325" width="699" height="642" frameX="-2" frameY="-6" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair Landing0029" x="1418" y="1325" width="699" height="642" frameX="-2" frameY="-6" frameWidth="703" frameHeight="648"/>
<SubTexture name="GF Dancing Beat Hair blowing0000" x="7098" y="1325" width="701" height="636" frameX="-45" frameY="-13" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0001" x="0" y="1978" width="703" height="636" frameX="-45" frameY="-13" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0002" x="713" y="1978" width="748" height="628" frameX="0" frameY="-21" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0003" x="1471" y="1978" width="699" height="627" frameX="-47" frameY="-22" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0004" x="2180" y="1978" width="701" height="638" frameX="-45" frameY="-11" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0005" x="2891" y="1978" width="701" height="638" frameX="-45" frameY="-11" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0006" x="3602" y="1978" width="739" height="636" frameX="-7" frameY="-13" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0007" x="4351" y="1978" width="699" height="647" frameX="-47" frameY="-2" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0008" x="5060" y="1978" width="728" height="639" frameX="-18" frameY="-10" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0009" x="5798" y="1978" width="699" height="638" frameX="-47" frameY="-11" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0010" x="6507" y="1978" width="699" height="649" frameX="-47" frameY="0" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0011" x="6507" y="1978" width="699" height="649" frameX="-47" frameY="0" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0012" x="7216" y="1978" width="726" height="641" frameX="-20" frameY="-8" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0013" x="0" y="2637" width="699" height="648" frameX="-47" frameY="-1" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0014" x="709" y="2637" width="725" height="640" frameX="-21" frameY="-9" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0015" x="1444" y="2637" width="699" height="625" frameX="-47" frameY="-24" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0016" x="2153" y="2637" width="703" height="634" frameX="-45" frameY="-15" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0017" x="2866" y="2637" width="703" height="631" frameX="-45" frameY="-18" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0018" x="3579" y="2637" width="709" height="623" frameX="-37" frameY="-26" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0019" x="4298" y="2637" width="699" height="634" frameX="-47" frameY="-15" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0020" x="5007" y="2637" width="710" height="626" frameX="-36" frameY="-23" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0021" x="5727" y="2637" width="699" height="630" frameX="-47" frameY="-19" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0022" x="6436" y="2637" width="699" height="646" frameX="-47" frameY="-3" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0023" x="6436" y="2637" width="699" height="646" frameX="-47" frameY="-3" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0024" x="7145" y="2637" width="715" height="638" frameX="-31" frameY="-11" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0025" x="0" y="3295" width="699" height="647" frameX="-47" frameY="-2" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0026" x="709" y="3295" width="716" height="639" frameX="-30" frameY="-10" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0027" x="1435" y="3295" width="699" height="638" frameX="-47" frameY="-11" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0028" x="2144" y="3295" width="699" height="646" frameX="-47" frameY="-3" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Dancing Beat Hair blowing0029" x="2144" y="3295" width="699" height="646" frameX="-47" frameY="-3" frameWidth="748" frameHeight="649"/>
<SubTexture name="GF Down Note0000" x="2853" y="3295" width="699" height="631" frameX="-2" frameY="-6" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Down Note0001" x="3562" y="3295" width="703" height="631" frameX="0" frameY="-6" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Down Note0002" x="4275" y="3295" width="703" height="636" frameX="0" frameY="-1" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Down Note0003" x="4988" y="3295" width="699" height="636" frameX="-2" frameY="-1" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Down Note0004" x="5697" y="3295" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Down Note0005" x="5697" y="3295" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Down Note0006" x="5697" y="3295" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Down Note0007" x="5697" y="3295" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Down Note0008" x="5697" y="3295" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Down Note0009" x="5697" y="3295" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Down Note0010" x="5697" y="3295" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Down Note0011" x="5697" y="3295" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Down Note0012" x="5697" y="3295" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Down Note0013" x="5697" y="3295" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Down Note0014" x="5697" y="3295" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Down Note0015" x="5697" y="3295" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Down Note0016" x="5697" y="3295" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Down Note0017" x="5697" y="3295" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Down Note0018" x="5697" y="3295" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Down Note0019" x="5697" y="3295" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF FEAR 0000" x="6406" y="3295" width="699" height="640"/>
<SubTexture name="GF FEAR 0001" x="7115" y="3295" width="699" height="640"/>
<SubTexture name="GF FEAR 0002" x="0" y="3952" width="699" height="638" frameX="0" frameY="-2" frameWidth="699" frameHeight="640"/>
<SubTexture name="GF FEAR 0003" x="709" y="3952" width="699" height="640"/>
<SubTexture name="GF Right Note0000" x="1418" y="3952" width="699" height="632" frameX="-2" frameY="-5" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Right Note0001" x="2127" y="3952" width="703" height="632" frameX="0" frameY="-5" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Right Note0002" x="2840" y="3952" width="703" height="637"/>
<SubTexture name="GF Right Note0003" x="3553" y="3952" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Right Note0004" x="4262" y="3952" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Right Note0005" x="4971" y="3952" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Right Note0006" x="5680" y="3952" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Right Note0007" x="5680" y="3952" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Right Note0008" x="6389" y="3952" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Right Note0009" x="6389" y="3952" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Right Note0010" x="6389" y="3952" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Right Note0011" x="6389" y="3952" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Right Note0012" x="6389" y="3952" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Right Note0013" x="6389" y="3952" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Right Note0014" x="6389" y="3952" width="699" height="637" frameX="-2" frameY="0" frameWidth="703" frameHeight="637"/>
<SubTexture name="GF Up Note0000" x="7098" y="3952" width="699" height="661" frameX="-2" frameY="0" frameWidth="703" frameHeight="661"/>
<SubTexture name="GF Up Note0001" x="0" y="4623" width="703" height="661"/>
<SubTexture name="GF Up Note0002" x="713" y="4623" width="703" height="661"/>
<SubTexture name="GF Up Note0003" x="1426" y="4623" width="699" height="661" frameX="-2" frameY="0" frameWidth="703" frameHeight="661"/>
<SubTexture name="GF Up Note0004" x="2135" y="4623" width="699" height="661" frameX="-2" frameY="0" frameWidth="703" frameHeight="661"/>
<SubTexture name="GF Up Note0005" x="2135" y="4623" width="699" height="661" frameX="-2" frameY="0" frameWidth="703" frameHeight="661"/>
<SubTexture name="GF Up Note0006" x="2135" y="4623" width="699" height="661" frameX="-2" frameY="0" frameWidth="703" frameHeight="661"/>
<SubTexture name="GF left note0000" x="2844" y="4623" width="699" height="633" frameX="-2" frameY="-5" frameWidth="703" frameHeight="638"/>
<SubTexture name="GF left note0001" x="3553" y="4623" width="703" height="631" frameX="0" frameY="-7" frameWidth="703" frameHeight="638"/>
<SubTexture name="GF left note0002" x="4266" y="4623" width="703" height="638"/>
<SubTexture name="GF left note0003" x="4979" y="4623" width="699" height="638" frameX="-2" frameY="0" frameWidth="703" frameHeight="638"/>
<SubTexture name="GF left note0004" x="5688" y="4623" width="699" height="638" frameX="-2" frameY="0" frameWidth="703" frameHeight="638"/>
<SubTexture name="GF left note0005" x="6397" y="4623" width="699" height="638" frameX="-2" frameY="0" frameWidth="703" frameHeight="638"/>
<SubTexture name="GF left note0006" x="7106" y="4623" width="699" height="637" frameX="-2" frameY="-1" frameWidth="703" frameHeight="638"/>
<SubTexture name="GF left note0007" x="7106" y="4623" width="699" height="637" frameX="-2" frameY="-1" frameWidth="703" frameHeight="638"/>
<SubTexture name="GF left note0008" x="0" y="5294" width="699" height="637" frameX="-2" frameY="-1" frameWidth="703" frameHeight="638"/>
<SubTexture name="GF left note0009" x="0" y="5294" width="699" height="637" frameX="-2" frameY="-1" frameWidth="703" frameHeight="638"/>
<SubTexture name="GF left note0010" x="0" y="5294" width="699" height="637" frameX="-2" frameY="-1" frameWidth="703" frameHeight="638"/>
<SubTexture name="GF left note0011" x="0" y="5294" width="699" height="637" frameX="-2" frameY="-1" frameWidth="703" frameHeight="638"/>
<SubTexture name="GF left note0012" x="0" y="5294" width="699" height="637" frameX="-2" frameY="-1" frameWidth="703" frameHeight="638"/>
<SubTexture name="GF left note0013" x="0" y="5294" width="699" height="637" frameX="-2" frameY="-1" frameWidth="703" frameHeight="638"/>
<SubTexture name="GF left note0014" x="0" y="5294" width="699" height="637" frameX="-2" frameY="-1" frameWidth="703" frameHeight="638"/>
<SubTexture name="gf sad0000" x="709" y="5294" width="699" height="633" frameX="0" frameY="-3" frameWidth="699" frameHeight="636"/>
<SubTexture name="gf sad0001" x="709" y="5294" width="699" height="633" frameX="0" frameY="-3" frameWidth="699" frameHeight="636"/>
<SubTexture name="gf sad0002" x="1418" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0003" x="1418" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0004" x="2127" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0005" x="2127" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0006" x="2836" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0007" x="2836" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0008" x="3545" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0009" x="3545" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0010" x="1418" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0011" x="1418" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0012" x="2127" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0013" x="2127" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0014" x="2836" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0015" x="2836" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0016" x="3545" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0017" x="3545" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0018" x="1418" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0019" x="1418" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0020" x="2127" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0021" x="2127" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0022" x="2836" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0023" x="2836" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0024" x="3545" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0025" x="3545" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0026" x="1418" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0027" x="1418" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0028" x="2127" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0029" x="2127" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0030" x="2836" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0031" x="2836" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0032" x="3545" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0033" x="3545" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0034" x="1418" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0035" x="1418" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0036" x="2127" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0037" x="2127" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0038" x="2836" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0039" x="2836" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0040" x="3545" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0041" x="3545" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0042" x="1418" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0043" x="1418" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0044" x="2127" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0045" x="2127" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0046" x="2836" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0047" x="2836" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0048" x="3545" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0049" x="3545" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0050" x="1418" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0051" x="1418" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0052" x="2127" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0053" x="2127" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0054" x="2836" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0055" x="2836" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0056" x="3545" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0057" x="3545" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0058" x="1418" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0059" x="1418" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0060" x="2127" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0061" x="2127" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0062" x="2836" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0063" x="2836" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0064" x="3545" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0065" x="3545" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0066" x="1418" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0067" x="1418" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0068" x="2127" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0069" x="2127" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0070" x="2836" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0071" x="2836" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0072" x="3545" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0073" x="3545" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0074" x="1418" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0075" x="1418" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0076" x="2127" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0077" x="2127" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0078" x="2836" y="5294" width="699" height="636"/>
<SubTexture name="gf sad0079" x="2836" y="5294" width="699" height="636"/>
</TextureAtlas>