Fixes and song fixes

This commit is contained in:
entar 2025-06-07 07:31:24 +07:00
parent 87dbbfc4ad
commit 2c2398041e
63 changed files with 2621 additions and 37292 deletions

View File

@ -1,6 +1,7 @@
{
"Lua.diagnostics.disable": [
"different-requires",
"need-check-nil"
"need-check-nil",
"cast-local-type"
]
}

View File

@ -1,97 +0,0 @@
-- RANK ONLY UP TILL 20, 0 MINIMUM, CHANGE THIS TO SUGGEST HOW HARD THE SONG IS, BY MARKEDAMAN
function onCreate()
if difficulty == 0 then -- easy
rank = 0
elseif difficulty == 1 then -- normal
rank = 1
elseif difficulty == 2 then -- hard
rank = 1
elseif difficulty == 3 then -- erect
rank = 8
elseif difficulty == 4 then -- nightmare
rank = 9
end
end
function onCreatePost()
if not hideHud then
if rank > 10 then
makeLuaSprite('star', 'star2', 1070, 590)
makeAnimatedLuaSprite('starFlame', 'starFlame', 1030, 440)
addAnimationByPrefix('starFlame', 'starFlame', 'fire loop full instance', 24, true)
setProperty('starFlame.alpha', 0)
scaleObject('starFlame', 1.5, 1.5)
setObjectCamera('starFlame', 'hud')
addLuaSprite('starFlame', true)
elseif rank <= 10 then
makeLuaSprite('star', 'star1', 1070, 590)
end
scaleObject('star', 0.9, 0.9)
setObjectCamera('star', 'hud')
setObjectOrder('star', getObjectOrder('starFlame') + 1)
setProperty('star.alpha', 0)
addLuaSprite('star')
makeLuaText('difficulty', ''.. rank ..'', 2230 , 0, 620)
setTextSize('difficulty', 37)
setTextFont('difficulty', 'combo.ttf')
setProperty('difficulty.alpha', 0)
addLuaText('difficulty', false)
setObjectOrder('difficulty', getObjectOrder('star') + 1)
if downscroll then
setProperty('difficulty.y', 70)
setProperty('star.y', 40)
setProperty('starFlame.y', -5)
setProperty('starFlame.angle', 190)
end
if rank > 10 then
setTextColor('difficulty', 'ffffff')
setTextBorder('difficulty', 2, '00AEFF')
elseif rank <= 10 then
setTextColor('difficulty', '000000')
setTextBorder('difficulty', 3, 'FFFFFF')
end
runTimer('ready', 0.5) -- star fade in
runTimer('wait', 8) -- star fade out
runTimer('wait2', 7.5) -- difficulty fade out
if rank > 10 then
runTimer('pausefire', 2) -- difficulty fade in
elseif rank <=10 then
runTimer('pause', 2)
end
end
end
function onTimerCompleted(tag)
if not hideHud then
if tag == 'ready' then
doTweenAlpha('hi', 'star', 1, 0.5,'linear')
end
if tag == 'wait' then
doTweenAlpha('gone', 'star', 0, 0.5,'linear')
doTweenAlpha('fireout', 'starFlame', 0, 0.5,'linear')
end
if tag == 'wait2' then
doTweenAlpha('bye', 'difficulty', 0, 0.5,'linear')
end
if tag == 'pause' then
doTweenAlpha('hi2', 'difficulty', 1, 0.5,'linear')
end
if tag == 'pausefire' then
setProperty('difficulty.alpha', 1)
setProperty('starFlame.alpha', 1)
playSound('light', 0.7)
end
end
end

View File

@ -1 +0,0 @@
{"song":{"song":"Bopeebo","bpm":100.0,"needsVoices":true,"player1":"bf","player2":"dad","speed":1.3,"notes":[{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[0.0,2,0.0],[600.0,3,600.0],[1200.0,3,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[2400.0,2,0.0],[3000.0,3,600.0],[3600.0,3,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[4800.0,1,300.0],[5400.0,0,300.0],[6000.0,3,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[7200.0,1,300.0],[7800.0,0,300.0],[8400.0,3,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[9600.0,1,300.0],[10200.0,3,0.0],[10500.0,0,0.0],[10800.0,1,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[12000.0,1,300.0],[12600.0,3,0.0],[12900.0,0,0.0],[13200.0,1,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[14400.0,3,0.0],[14700.0,1,0.0],[15300.0,0,0.0],[15600.0,2,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[16800.0,3,0.0],[17100.0,1,0.0],[17700.0,0,0.0],[18000.0,2,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[19200.0,0,0.0],[19500.0,3,0.0],[19800.0,1,900.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[21600.0,0,0.0],[21900.0,3,0.0],[22200.0,1,900.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[24000.0,1,0.0],[24300.0,3,0.0],[24600.0,0,900.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[26400.0,1,0.0],[26700.0,3,0.0],[27000.0,0,900.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[28800.0,2,0.0],[29100.0,3,0.0],[29400.0,0,1200.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[31200.0,2,0.0],[31500.0,3,0.0],[31800.0,0,1200.0],[33300.0,6,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[33600.0,0,0.0],[33900.0,3,0.0],[34500.0,2,0.0],[34575.0,0,0.0],[34800.0,1,600.0],[35700.0,6,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[36000.0,0,0.0],[36300.0,3,0.0],[36900.0,2,0.0],[36975.0,0,0.0],[37200.0,1,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[38400.0,2,450.0],[39000.0,3,300.0],[39600.0,0,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[40800.0,2,450.0],[41400.0,3,300.0],[42000.0,0,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[43200.0,1,0.0],[43800.0,2,0.0],[44400.0,1,0.0],[44550.0,1,0.0],[44700.0,1,0.0],[45000.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[45600.0,1,0.0],[46200.0,2,0.0],[46800.0,1,0.0],[46950.0,1,0.0],[47100.0,1,0.0],[47400.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[48000.0,2,450.0],[48600.0,3,300.0],[49200.0,0,450.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[50400.0,2,450.0],[51000.0,3,300.0],[51600.0,0,450.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[52800.0,3,1800.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[55200.0,3,1800.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[57600.0,2,0.0],[57900.0,3,0.0],[58200.0,0,1200.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[60000.0,2,0.0],[60300.0,3,0.0],[60600.0,0,1200.0],[62100.0,6,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[62400.0,0,0.0],[62700.0,3,0.0],[63300.0,2,0.0],[63375.0,0,0.0],[63600.0,1,600.0],[64500.0,6,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[64800.0,0,0.0],[65100.0,3,0.0],[65700.0,2,0.0],[65775.0,0,0.0],[66000.0,1,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[67200.0,2,0.0],[67500.0,3,0.0],[67800.0,0,0.0],[68100.0,2,0.0],[68400.0,1,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[69600.0,2,0.0],[69900.0,3,0.0],[70200.0,0,0.0],[70500.0,2,0.0],[70800.0,1,600.0],[71700.0,6,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[72000.0,0,0.0],[72300.0,3,0.0],[72900.0,2,0.0],[72975.0,0,0.0],[73200.0,1,600.0],[74100.0,6,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[74400.0,0,0.0],[74700.0,3,0.0],[75300.0,2,0.0],[75375.0,0,0.0],[75600.0,1,600.0]]}]},"generatedBy":"SNIFF ver.6"}

View File

@ -3824,7 +3824,7 @@
"needsVoices": true,
"arrowSkin": "",
"validScore": true,
"stage": "stage",
"stage": "stageErect",
"bpm": 123,
"speed": 2.3
}

File diff suppressed because it is too large Load Diff

View File

@ -1,850 +0,0 @@
{
"song": {
"player1": "bf",
"player2": "dad",
"notes": [
{
"lengthInSteps": 16,
"sectionNotes": [
[
0,
2,
0
],
[
600,
3,
600
],
[
1200,
3,
525
]
],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
2400,
2,
0
],
[
3000,
3,
600
],
[
3600,
3,
525
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
4800,
1,
300
],
[
5400,
0,
300
],
[
6000,
3,
525
]
],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
7200,
1,
300
],
[
7800,
0,
300
],
[
8400,
3,
525
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
9600,
1,
300
],
[
10200,
3,
0
],
[
10500,
0,
0
],
[
10800,
1,
525
]
],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
12000,
1,
300
],
[
12600,
3,
0
],
[
12900,
0,
0
],
[
13200,
1,
525
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
14400,
3,
0
],
[
14700,
1,
0
],
[
15300,
0,
0
],
[
15600,
2,
525
]
],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
16800,
3,
0
],
[
17100,
1,
0
],
[
17700,
0,
0
],
[
18000,
2,
525
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
19200,
0,
0
],
[
19500,
3,
0
],
[
19800,
1,
900
]
],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
21600,
0,
0
],
[
21900,
3,
0
],
[
22200,
1,
900
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
24000,
1,
0
],
[
24300,
3,
0
],
[
24600,
0,
900
]
],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
26400,
1,
0
],
[
26700,
3,
0
],
[
27000,
0,
900
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
28800,
2,
0
],
[
29100,
3,
0
],
[
29400,
0,
1125
]
],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
31200,
2,
0
],
[
31500,
3,
0
],
[
31800,
0,
1125
],
[
33300,
6,
0
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
33600,
0,
0
],
[
33900,
3,
0
],
[
34500,
2,
0
],
[
34800,
1,
525
],
[
35700,
6,
0
]
],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
36000,
0,
0
],
[
36300,
3,
0
],
[
36900,
2,
0
],
[
37200,
1,
525
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
38400,
2,
450
],
[
39000,
3,
300
],
[
39600,
0,
525
]
],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
40800,
2,
450
],
[
41400,
3,
300
],
[
42000,
0,
525
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
43200,
1,
0
],
[
43800,
2,
0
],
[
44400,
1,
0
],
[
44550,
1,
0
],
[
44700,
1,
0
],
[
45000,
2,
0
]
],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
45600,
1,
0
],
[
46200,
2,
0
],
[
46800,
1,
0
],
[
46950,
1,
0
],
[
47100,
1,
0
],
[
47400,
2,
0
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
48000,
2,
450
],
[
48600,
3,
300
],
[
49200,
0,
375
]
],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
50400,
2,
450
],
[
51000,
3,
300
],
[
51600,
0,
375
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
52800,
3,
1725
]
],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
55200,
3,
1725
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
57600,
2,
0
],
[
57900,
3,
0
],
[
58200,
0,
1125
]
],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
60000,
2,
0
],
[
60300,
3,
0
],
[
60600,
0,
1125
],
[
62100,
6,
0
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
62400,
0,
0
],
[
62700,
3,
0
],
[
63300,
2,
0
],
[
63600,
1,
525
],
[
64500,
6,
0
]
],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
64800,
0,
0
],
[
65100,
3,
0
],
[
65700,
2,
0
],
[
66000,
1,
525
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
67200,
2,
0
],
[
67500,
3,
0
],
[
67800,
0,
0
],
[
68100,
2,
0
],
[
68400,
1,
525
]
],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
69600,
2,
0
],
[
69900,
3,
0
],
[
70200,
0,
0
],
[
70500,
2,
0
],
[
70800,
1,
525
],
[
71700,
6,
0
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
72000,
0,
0
],
[
72300,
3,
0
],
[
72900,
2,
0
],
[
73200,
1,
525
],
[
74100,
6,
0
]
],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
74400,
0,
0
],
[
74700,
3,
0
],
[
75300,
2,
0
],
[
75600,
1,
525
]
],
"mustHitSection": true
},
{
"sectionNotes": [],
"typeOfSection": 0,
"lengthInSteps": 16,
"altAnim": false,
"mustHitSection": true,
"changeBPM": false,
"bpm": 100
},
{
"sectionNotes": [],
"typeOfSection": 0,
"lengthInSteps": 16,
"altAnim": false,
"mustHitSection": true,
"changeBPM": false,
"bpm": 100
},
{
"sectionNotes": [],
"typeOfSection": 0,
"lengthInSteps": 16,
"altAnim": false,
"mustHitSection": true,
"changeBPM": false,
"bpm": 100
},
{
"lengthInSteps": 16,
"altAnim": false,
"typeOfSection": 0,
"sectionNotes": [],
"bpm": 100,
"changeBPM": false,
"mustHitSection": true
},
{
"lengthInSteps": 16,
"altAnim": false,
"typeOfSection": 0,
"sectionNotes": [],
"bpm": 100,
"changeBPM": false,
"mustHitSection": true
},
{
"lengthInSteps": 16,
"altAnim": false,
"typeOfSection": 0,
"sectionNotes": [],
"bpm": 100,
"changeBPM": false,
"mustHitSection": true
}
],
"player3": "gf",
"song": "Bopeebo",
"needsVoices": true,
"validScore": true,
"speed": 1,
"bpm": 100
}
}

View File

@ -1,4 +0,0 @@
function onCreate()
setTextFont('scoreTxt', 'vcr.ttf')
setTextFont('timeTxt','timer.ttf')
end

View File

@ -1,346 +0,0 @@
{
"song": {
"player1": "bf",
"song": "Bopeebo",
"player2": "dad",
"notes": [
{
"lengthInSteps": 16,
"sectionNotes": [],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
4290,
-1,
"Hey!",
"0",
""
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
9090,
-1,
"Hey!",
"0",
""
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
13890,
-1,
"Hey!",
"0",
""
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
18690,
-1,
"Hey!",
"0",
""
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
23490,
-1,
"Hey!",
"0",
""
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
28290,
-1,
"Hey!",
"0",
""
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
33090,
-1,
"Hey!",
"0",
""
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
37890,
-1,
"Hey!",
"0",
""
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
42690,
-1,
"Hey!",
"0",
""
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
47490,
-1,
"Hey!",
"0",
""
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
52290,
-1,
"Hey!",
"0",
""
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
57090,
-1,
"Hey!",
"0",
""
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
61890,
-1,
"Hey!",
"0",
""
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
66690,
-1,
"Hey!",
"0",
""
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
71490,
-1,
"Hey!",
"0",
""
]
],
"mustHitSection": true
},
{
"lengthInSteps": 16,
"sectionNotes": [],
"mustHitSection": false
},
{
"lengthInSteps": 16,
"sectionNotes": [
[
76290,
-1,
"Hey!",
"0",
""
]
],
"mustHitSection": true
},
{
"sectionNotes": [],
"typeOfSection": 0,
"lengthInSteps": 16,
"altAnim": false,
"mustHitSection": true,
"changeBPM": false,
"bpm": 100
},
{
"sectionNotes": [],
"typeOfSection": 0,
"lengthInSteps": 16,
"altAnim": false,
"mustHitSection": true,
"changeBPM": false,
"bpm": 100
},
{
"sectionNotes": [],
"typeOfSection": 0,
"lengthInSteps": 16,
"altAnim": false,
"mustHitSection": true,
"changeBPM": false,
"bpm": 100
},
{
"sectionNotes": [],
"typeOfSection": 0,
"lengthInSteps": 16,
"altAnim": false,
"mustHitSection": true,
"changeBPM": false,
"bpm": 100
},
{
"lengthInSteps": 16,
"altAnim": false,
"typeOfSection": 0,
"sectionNotes": [],
"bpm": 100,
"changeBPM": false,
"mustHitSection": true
}
],
"needsVoices": true,
"validScore": true,
"bpm": 100,
"speed": 1.3
}
}

View File

@ -1,113 +0,0 @@
-- Script made by Washo789, please, if you use it or modify it, I would like you to give me credits.
local xx = 520; -- Code to change the position of the camera to the left or right for your opponent, Less = Left (They can be negative numbers), More = Right
local yy = 350; -- Code to change the position of the camera up or down for the enemy Less = Down (They can be negative numbers), More = Up
local xx2 = 820; -- Same code as above, but for boyfriend left, right
local yy2 = 550; -- Same code as above, but for boyfriend up, down
local xx3 = 520; -- Same code as above, but for girlfriend left, right
local yy3 = 450; -- Same code as above, but for girlfriend, up, down
local ofs = 35; -- Code to adjust the intensity with which the camera moves, the more numbers, the more intense, and the fewer numbers, less intense
local followchars = true; -- This code is necessary for the script to work, don't even think about deleting it!
local del = 0;
local del2 = 0;
function onUpdate() -- The Main Code
if del > 0 then
del = del - 1
end
if del2 > 0 then
del2 = del2 - 1
end
if followchars == true then
if mustHitSection == false then -- Code for the camera to follow the poses of your opponent
if getProperty('dad.animation.curAnim.name') == 'singLEFT' then
triggerEvent('Camera Follow Pos',xx-ofs,yy)
end
if getProperty('dad.animation.curAnim.name') == 'singRIGHT' then
triggerEvent('Camera Follow Pos',xx+ofs,yy)
end
if getProperty('dad.animation.curAnim.name') == 'singUP' then
triggerEvent('Camera Follow Pos',xx,yy-ofs)
end
if getProperty('dad.animation.curAnim.name') == 'singDOWN' then
triggerEvent('Camera Follow Pos',xx,yy+ofs)
end
if getProperty('dad.animation.curAnim.name') == 'singLEFT-alt' then
triggerEvent('Camera Follow Pos',xx-ofs,yy)
end
if getProperty('dad.animation.curAnim.name') == 'singRIGHT-alt' then
triggerEvent('Camera Follow Pos',xx+ofs,yy)
end
if getProperty('dad.animation.curAnim.name') == 'singUP-alt' then
triggerEvent('Camera Follow Pos',xx,yy-ofs)
end
if getProperty('dad.animation.curAnim.name') == 'singDOWN-alt' then
triggerEvent('Camera Follow Pos',xx,yy+ofs)
end
if getProperty('dad.animation.curAnim.name') == 'idle-alt' then
triggerEvent('Camera Follow Pos',xx,yy)
end
if getProperty('dad.animation.curAnim.name') == 'idle' then
triggerEvent('Camera Follow Pos',xx,yy)
end
if gfSection == true then -- The camera follows GF when she sings, only when the "GF Section" option in the chart editor is activated.
if getProperty('gf.animation.curAnim.name') == 'singLEFT' then -- Credits to Serebeat and company for their Slaybells mod,
triggerEvent('Camera Follow Pos',xx3-ofs,yy3) -- That's where I got the gf code from.
end
if getProperty('gf.animation.curAnim.name') == 'singRIGHT' then
triggerEvent('Camera Follow Pos',xx3+ofs,yy3)
end
if getProperty('gf.animation.curAnim.name') == 'singUP' then
triggerEvent('Camera Follow Pos',xx3,yy3-ofs)
end
if getProperty('gf.animation.curAnim.name') == 'singDOWN' then
triggerEvent('Camera Follow Pos',xx3,yy3+ofs)
end
if getProperty('gf.animation.curAnim.name') == 'idle-alt' then
triggerEvent('Camera Follow Pos',xx3,yy3)
end
if getProperty('gf.animation.curAnim.name') == 'singRIGHT-alt' then
triggerEvent('Camera Follow Pos',xx3+ofs,yy3)
end
if getProperty('gf.animation.curAnim.name') == 'singUP-alt' then
triggerEvent('Camera Follow Pos',xx3,yy3-ofs)
end
if getProperty('gf.animation.curAnim.name') == 'singDOWN-alt' then
triggerEvent('Camera Follow Pos',xx3,yy3+ofs)
end
if getProperty('gf.animation.curAnim.name') == 'idle-alt' then
triggerEvent('Camera Follow Pos',xx3,yy3)
end
end
else
-- Code for the camera to follow the poses of boyfriend
if getProperty('boyfriend.animation.curAnim.name') == 'singLEFT' then
triggerEvent('Camera Follow Pos',xx2-ofs,yy2)
end
if getProperty('boyfriend.animation.curAnim.name') == 'singRIGHT' then
triggerEvent('Camera Follow Pos',xx2+ofs,yy2)
end
if getProperty('boyfriend.animation.curAnim.name') == 'singUP' then
triggerEvent('Camera Follow Pos',xx2,yy2-ofs)
end
if getProperty('boyfriend.animation.curAnim.name') == 'singDOWN' then
triggerEvent('Camera Follow Pos',xx2,yy2+ofs)
end
if getProperty('boyfriend.animation.curAnim.name') == 'singRIGHT-alt' then
triggerEvent('Camera Follow Pos',xx2+ofs,yy2)
end
if getProperty('boyfriend.animation.curAnim.name') == 'singUP-alt' then
triggerEvent('Camera Follow Pos',xx2,yy2-ofs)
end
if getProperty('boyfriend.animation.curAnim.name') == 'singDOWN-alt' then
triggerEvent('Camera Follow Pos',xx2,yy2+ofs)
end
if getProperty('boyfriend.animation.curAnim.name') == 'idle-alt' then
triggerEvent('Camera Follow Pos',xx2,yy2)
end
end
else
triggerEvent('Camera Follow Pos','','') -- Self explanatory
end
end

File diff suppressed because one or more lines are too long

View File

@ -6511,7 +6511,7 @@
"song": "Dad Battle Erect",
"validScore": true,
"needsVoices": true,
"stage": "stage",
"stage": "stageErect",
"speed": 2.6,
"bpm": 190
}

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 one or more lines are too long

View File

@ -1,97 +0,0 @@
-- RANK ONLY UP TILL 20, 0 MINIMUM, CHANGE THIS TO SUGGEST HOW HARD THE SONG IS, BY MARKEDAMAN
function onCreate()
if difficulty == 0 then -- easy
rank = 1
elseif difficulty == 1 then -- normal
rank = 1
elseif difficulty == 2 then -- hard
rank = 2
elseif difficulty == 3 then -- erect
rank = 6
elseif difficulty == 4 then -- nightmare
rank = 7
end
end
function onCreatePost()
if not hideHud then
if rank > 10 then
makeLuaSprite('star', 'star2', 1070, 590)
makeAnimatedLuaSprite('starFlame', 'starFlame', 1030, 440)
addAnimationByPrefix('starFlame', 'starFlame', 'fire loop full instance', 24, true)
setProperty('starFlame.alpha', 0)
scaleObject('starFlame', 1.5, 1.5)
setObjectCamera('starFlame', 'hud')
addLuaSprite('starFlame', true)
elseif rank <= 10 then
makeLuaSprite('star', 'star1', 1070, 590)
end
scaleObject('star', 0.9, 0.9)
setObjectCamera('star', 'hud')
setObjectOrder('star', getObjectOrder('starFlame') + 1)
setProperty('star.alpha', 0)
addLuaSprite('star')
makeLuaText('difficulty', ''.. rank ..'', 2230 , 0, 620)
setTextSize('difficulty', 37)
setTextFont('difficulty', 'combo.ttf')
setProperty('difficulty.alpha', 0)
addLuaText('difficulty', false)
setObjectOrder('difficulty', getObjectOrder('star') + 1)
if downscroll then
setProperty('difficulty.y', 70)
setProperty('star.y', 40)
setProperty('starFlame.y', -5)
setProperty('starFlame.angle', 190)
end
if rank > 10 then
setTextColor('difficulty', 'ffffff')
setTextBorder('difficulty', 2, '00AEFF')
elseif rank <= 10 then
setTextColor('difficulty', '000000')
setTextBorder('difficulty', 3, 'FFFFFF')
end
runTimer('ready', 0.5) -- star fade in
runTimer('wait', 8) -- star fade out
runTimer('wait2', 7.5) -- difficulty fade out
if rank > 10 then
runTimer('pausefire', 2) -- difficulty fade in
elseif rank <=10 then
runTimer('pause', 2)
end
end
end
function onTimerCompleted(tag)
if not hideHud then
if tag == 'ready' then
doTweenAlpha('hi', 'star', 1, 0.5,'linear')
end
if tag == 'wait' then
doTweenAlpha('gone', 'star', 0, 0.5,'linear')
doTweenAlpha('fireout', 'starFlame', 0, 0.5,'linear')
end
if tag == 'wait2' then
doTweenAlpha('bye', 'difficulty', 0, 0.5,'linear')
end
if tag == 'pause' then
doTweenAlpha('hi2', 'difficulty', 1, 0.5,'linear')
end
if tag == 'pausefire' then
setProperty('difficulty.alpha', 1)
setProperty('starFlame.alpha', 1)
playSound('light', 0.7)
end
end
end

View File

@ -1,4 +0,0 @@
function onCreate()
setTextFont('scoreTxt', 'vcr.ttf')
setTextFont('timeTxt','timer.ttf')
end

View File

@ -3119,7 +3119,7 @@
"player3": null,
"song": "Fresh Erect",
"needsVoices": true,
"stage": "stage",
"stage": "stageErect",
"validScore": true,
"speed": 2.4,
"bpm": 125

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -1,113 +0,0 @@
-- Script made by Washo789, please, if you use it or modify it, I would like you to give me credits.
local xx = 520; -- Code to change the position of the camera to the left or right for your opponent, Less = Left (They can be negative numbers), More = Right
local yy = 350; -- Code to change the position of the camera up or down for the enemy Less = Down (They can be negative numbers), More = Up
local xx2 = 820; -- Same code as above, but for boyfriend left, right
local yy2 = 550; -- Same code as above, but for boyfriend up, down
local xx3 = 520; -- Same code as above, but for girlfriend left, right
local yy3 = 450; -- Same code as above, but for girlfriend, up, down
local ofs = 35; -- Code to adjust the intensity with which the camera moves, the more numbers, the more intense, and the fewer numbers, less intense
local followchars = true; -- This code is necessary for the script to work, don't even think about deleting it!
local del = 0;
local del2 = 0;
function onUpdate() -- The Main Code
if del > 0 then
del = del - 1
end
if del2 > 0 then
del2 = del2 - 1
end
if followchars == true then
if mustHitSection == false then -- Code for the camera to follow the poses of your opponent
if getProperty('dad.animation.curAnim.name') == 'singLEFT' then
triggerEvent('Camera Follow Pos',xx-ofs,yy)
end
if getProperty('dad.animation.curAnim.name') == 'singRIGHT' then
triggerEvent('Camera Follow Pos',xx+ofs,yy)
end
if getProperty('dad.animation.curAnim.name') == 'singUP' then
triggerEvent('Camera Follow Pos',xx,yy-ofs)
end
if getProperty('dad.animation.curAnim.name') == 'singDOWN' then
triggerEvent('Camera Follow Pos',xx,yy+ofs)
end
if getProperty('dad.animation.curAnim.name') == 'singLEFT-alt' then
triggerEvent('Camera Follow Pos',xx-ofs,yy)
end
if getProperty('dad.animation.curAnim.name') == 'singRIGHT-alt' then
triggerEvent('Camera Follow Pos',xx+ofs,yy)
end
if getProperty('dad.animation.curAnim.name') == 'singUP-alt' then
triggerEvent('Camera Follow Pos',xx,yy-ofs)
end
if getProperty('dad.animation.curAnim.name') == 'singDOWN-alt' then
triggerEvent('Camera Follow Pos',xx,yy+ofs)
end
if getProperty('dad.animation.curAnim.name') == 'idle-alt' then
triggerEvent('Camera Follow Pos',xx,yy)
end
if getProperty('dad.animation.curAnim.name') == 'idle' then
triggerEvent('Camera Follow Pos',xx,yy)
end
if gfSection == true then -- The camera follows GF when she sings, only when the "GF Section" option in the chart editor is activated.
if getProperty('gf.animation.curAnim.name') == 'singLEFT' then -- Credits to Serebeat and company for their Slaybells mod,
triggerEvent('Camera Follow Pos',xx3-ofs,yy3) -- That's where I got the gf code from.
end
if getProperty('gf.animation.curAnim.name') == 'singRIGHT' then
triggerEvent('Camera Follow Pos',xx3+ofs,yy3)
end
if getProperty('gf.animation.curAnim.name') == 'singUP' then
triggerEvent('Camera Follow Pos',xx3,yy3-ofs)
end
if getProperty('gf.animation.curAnim.name') == 'singDOWN' then
triggerEvent('Camera Follow Pos',xx3,yy3+ofs)
end
if getProperty('gf.animation.curAnim.name') == 'idle-alt' then
triggerEvent('Camera Follow Pos',xx3,yy3)
end
if getProperty('gf.animation.curAnim.name') == 'singRIGHT-alt' then
triggerEvent('Camera Follow Pos',xx3+ofs,yy3)
end
if getProperty('gf.animation.curAnim.name') == 'singUP-alt' then
triggerEvent('Camera Follow Pos',xx3,yy3-ofs)
end
if getProperty('gf.animation.curAnim.name') == 'singDOWN-alt' then
triggerEvent('Camera Follow Pos',xx3,yy3+ofs)
end
if getProperty('gf.animation.curAnim.name') == 'idle-alt' then
triggerEvent('Camera Follow Pos',xx3,yy3)
end
end
else
-- Code for the camera to follow the poses of boyfriend
if getProperty('boyfriend.animation.curAnim.name') == 'singLEFT' then
triggerEvent('Camera Follow Pos',xx2-ofs,yy2)
end
if getProperty('boyfriend.animation.curAnim.name') == 'singRIGHT' then
triggerEvent('Camera Follow Pos',xx2+ofs,yy2)
end
if getProperty('boyfriend.animation.curAnim.name') == 'singUP' then
triggerEvent('Camera Follow Pos',xx2,yy2-ofs)
end
if getProperty('boyfriend.animation.curAnim.name') == 'singDOWN' then
triggerEvent('Camera Follow Pos',xx2,yy2+ofs)
end
if getProperty('boyfriend.animation.curAnim.name') == 'singRIGHT-alt' then
triggerEvent('Camera Follow Pos',xx2+ofs,yy2)
end
if getProperty('boyfriend.animation.curAnim.name') == 'singUP-alt' then
triggerEvent('Camera Follow Pos',xx2,yy2-ofs)
end
if getProperty('boyfriend.animation.curAnim.name') == 'singDOWN-alt' then
triggerEvent('Camera Follow Pos',xx2,yy2+ofs)
end
if getProperty('boyfriend.animation.curAnim.name') == 'idle-alt' then
triggerEvent('Camera Follow Pos',xx2,yy2)
end
end
else
triggerEvent('Camera Follow Pos','','') -- Self explanatory
end
end

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 one or more lines are too long

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 one or more lines are too long

View File

@ -1,4 +0,0 @@
function onCreate()
setTextFont('scoreTxt', 'vcr.ttf')
setTextFont('timeTxt','timer.ttf')
end

File diff suppressed because it is too large Load Diff

View File

@ -2,19 +2,27 @@ return {
{
name = "tutorial",
difficulties = {
"hard"
"easy",
"normal",
"hard",
},
},
{
name = "bopeebo",
difficulties = {
"hard"
"easy",
"normal",
"hard",
"erect"
},
},
{
name = "fresh",
difficulties = {
"hard"
"easy",
"normal",
"hard",
"erect"
},
},
{
@ -29,14 +37,19 @@ return {
{
name = "south",
difficulties = {
"hard"
"easy",
"normal",
"hard",
"erect"
},
},
{
name = "high",
difficulties = {
"easy",
"normal",
"hard",
"erect",
"nightmare"
},
},
{

View File

@ -1,97 +0,0 @@
-- RANK ONLY UP TILL 20, 0 MINIMUM, CHANGE THIS TO SUGGEST HOW HARD THE SONG IS, BY MARKEDAMAN
function onCreate()
if difficulty == 0 then -- easy
rank = 2
elseif difficulty == 1 then -- normal
rank = 2
elseif difficulty == 2 then -- hard
rank = 3
elseif difficulty == 3 then -- erect
rank = 10
elseif difficulty == 4 then -- nightmare
rank = 11
end
end
function onCreatePost()
if not hideHud then
if rank > 10 then
makeLuaSprite('star', 'star2', 1070, 590)
makeAnimatedLuaSprite('starFlame', 'starFlame', 1030, 440)
addAnimationByPrefix('starFlame', 'starFlame', 'fire loop full instance', 24, true)
setProperty('starFlame.alpha', 0)
scaleObject('starFlame', 1.5, 1.5)
setObjectCamera('starFlame', 'hud')
addLuaSprite('starFlame', true)
elseif rank <= 10 then
makeLuaSprite('star', 'star1', 1070, 590)
end
scaleObject('star', 0.9, 0.9)
setObjectCamera('star', 'hud')
setObjectOrder('star', getObjectOrder('starFlame') + 1)
setProperty('star.alpha', 0)
addLuaSprite('star')
makeLuaText('difficulty', ''.. rank ..'', 2230 , 0, 620)
setTextSize('difficulty', 37)
setTextFont('difficulty', 'combo.ttf')
setProperty('difficulty.alpha', 0)
addLuaText('difficulty', false)
setObjectOrder('difficulty', getObjectOrder('star') + 1)
if downscroll then
setProperty('difficulty.y', 70)
setProperty('star.y', 40)
setProperty('starFlame.y', -5)
setProperty('starFlame.angle', 190)
end
if rank > 10 then
setTextColor('difficulty', 'ffffff')
setTextBorder('difficulty', 2, '00AEFF')
elseif rank <= 10 then
setTextColor('difficulty', '000000')
setTextBorder('difficulty', 3, 'FFFFFF')
end
runTimer('ready', 0.5) -- star fade in
runTimer('wait', 8) -- star fade out
runTimer('wait2', 7.5) -- difficulty fade out
if rank > 10 then
runTimer('pausefire', 2) -- difficulty fade in
elseif rank <=10 then
runTimer('pause', 2)
end
end
end
function onTimerCompleted(tag)
if not hideHud then
if tag == 'ready' then
doTweenAlpha('hi', 'star', 1, 0.5,'linear')
end
if tag == 'wait' then
doTweenAlpha('gone', 'star', 0, 0.5,'linear')
doTweenAlpha('fireout', 'starFlame', 0, 0.5,'linear')
end
if tag == 'wait2' then
doTweenAlpha('bye', 'difficulty', 0, 0.5,'linear')
end
if tag == 'pause' then
doTweenAlpha('hi2', 'difficulty', 1, 0.5,'linear')
end
if tag == 'pausefire' then
setProperty('difficulty.alpha', 1)
setProperty('starFlame.alpha', 1)
playSound('light', 0.7)
end
end
end

View File

@ -1,4 +0,0 @@
function onCreate()
setTextFont('scoreTxt', 'vcr.ttf')
setTextFont('timeTxt','timer.ttf')
end

View File

@ -1,113 +0,0 @@
-- Script made by Washo789, please, if you use it or modify it, I would like you to give me credits.
local xx = 520; -- Code to change the position of the camera to the left or right for your opponent, Less = Left (They can be negative numbers), More = Right
local yy = 480; -- Code to change the position of the camera up or down for the enemy Less = Down (They can be negative numbers), More = Up
local xx2 = 820; -- Same code as above, but for boyfriend left, right
local yy2 = 550; -- Same code as above, but for boyfriend up, down
local xx3 = 520; -- Same code as above, but for girlfriend left, right
local yy3 = 450; -- Same code as above, but for girlfriend, up, down
local ofs = 35; -- Code to adjust the intensity with which the camera moves, the more numbers, the more intense, and the fewer numbers, less intense
local followchars = true; -- This code is necessary for the script to work, don't even think about deleting it!
local del = 0;
local del2 = 0;
function onUpdate() -- The Main Code
if del > 0 then
del = del - 1
end
if del2 > 0 then
del2 = del2 - 1
end
if followchars == true then
if mustHitSection == false then -- Code for the camera to follow the poses of your opponent
if getProperty('dad.animation.curAnim.name') == 'singLEFT' then
triggerEvent('Camera Follow Pos',xx-ofs,yy)
end
if getProperty('dad.animation.curAnim.name') == 'singRIGHT' then
triggerEvent('Camera Follow Pos',xx+ofs,yy)
end
if getProperty('dad.animation.curAnim.name') == 'singUP' then
triggerEvent('Camera Follow Pos',xx,yy-ofs)
end
if getProperty('dad.animation.curAnim.name') == 'singDOWN' then
triggerEvent('Camera Follow Pos',xx,yy+ofs)
end
if getProperty('dad.animation.curAnim.name') == 'singLEFT-alt' then
triggerEvent('Camera Follow Pos',xx-ofs,yy)
end
if getProperty('dad.animation.curAnim.name') == 'singRIGHT-alt' then
triggerEvent('Camera Follow Pos',xx+ofs,yy)
end
if getProperty('dad.animation.curAnim.name') == 'singUP-alt' then
triggerEvent('Camera Follow Pos',xx,yy-ofs)
end
if getProperty('dad.animation.curAnim.name') == 'singDOWN-alt' then
triggerEvent('Camera Follow Pos',xx,yy+ofs)
end
if getProperty('dad.animation.curAnim.name') == 'idle-alt' then
triggerEvent('Camera Follow Pos',xx,yy)
end
if getProperty('dad.animation.curAnim.name') == 'idle' then
triggerEvent('Camera Follow Pos',xx,yy)
end
if gfSection == true then -- The camera follows GF when she sings, only when the "GF Section" option in the chart editor is activated.
if getProperty('gf.animation.curAnim.name') == 'singLEFT' then -- Credits to Serebeat and company for their Slaybells mod,
triggerEvent('Camera Follow Pos',xx3-ofs,yy3) -- That's where I got the gf code from.
end
if getProperty('gf.animation.curAnim.name') == 'singRIGHT' then
triggerEvent('Camera Follow Pos',xx3+ofs,yy3)
end
if getProperty('gf.animation.curAnim.name') == 'singUP' then
triggerEvent('Camera Follow Pos',xx3,yy3-ofs)
end
if getProperty('gf.animation.curAnim.name') == 'singDOWN' then
triggerEvent('Camera Follow Pos',xx3,yy3+ofs)
end
if getProperty('gf.animation.curAnim.name') == 'idle-alt' then
triggerEvent('Camera Follow Pos',xx3,yy3)
end
if getProperty('gf.animation.curAnim.name') == 'singRIGHT-alt' then
triggerEvent('Camera Follow Pos',xx3+ofs,yy3)
end
if getProperty('gf.animation.curAnim.name') == 'singUP-alt' then
triggerEvent('Camera Follow Pos',xx3,yy3-ofs)
end
if getProperty('gf.animation.curAnim.name') == 'singDOWN-alt' then
triggerEvent('Camera Follow Pos',xx3,yy3+ofs)
end
if getProperty('gf.animation.curAnim.name') == 'idle-alt' then
triggerEvent('Camera Follow Pos',xx3,yy3)
end
end
else
-- Code for the camera to follow the poses of boyfriend
if getProperty('boyfriend.animation.curAnim.name') == 'singLEFT' then
triggerEvent('Camera Follow Pos',xx2-ofs,yy2)
end
if getProperty('boyfriend.animation.curAnim.name') == 'singRIGHT' then
triggerEvent('Camera Follow Pos',xx2+ofs,yy2)
end
if getProperty('boyfriend.animation.curAnim.name') == 'singUP' then
triggerEvent('Camera Follow Pos',xx2,yy2-ofs)
end
if getProperty('boyfriend.animation.curAnim.name') == 'singDOWN' then
triggerEvent('Camera Follow Pos',xx2,yy2+ofs)
end
if getProperty('boyfriend.animation.curAnim.name') == 'singRIGHT-alt' then
triggerEvent('Camera Follow Pos',xx2+ofs,yy2)
end
if getProperty('boyfriend.animation.curAnim.name') == 'singUP-alt' then
triggerEvent('Camera Follow Pos',xx2,yy2-ofs)
end
if getProperty('boyfriend.animation.curAnim.name') == 'singDOWN-alt' then
triggerEvent('Camera Follow Pos',xx2,yy2+ofs)
end
if getProperty('boyfriend.animation.curAnim.name') == 'idle-alt' then
triggerEvent('Camera Follow Pos',xx2,yy2)
end
end
else
triggerEvent('Camera Follow Pos','','') -- Self explanatory
end
end

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 one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,97 +0,0 @@
-- RANK ONLY UP TILL 20, 0 MINIMUM, CHANGE THIS TO SUGGEST HOW HARD THE SONG IS, BY MARKEDAMAN
function onCreate()
if difficulty == 0 then -- easy
rank = 0
elseif difficulty == 1 then -- normal
rank = 0
elseif difficulty == 2 then -- hard
rank = 0
elseif difficulty == 3 then -- erect
rank = 8
elseif difficulty == 4 then -- nightmare
rank = 9
end
end
function onCreatePost()
if not hideHud then
if rank > 10 then
makeLuaSprite('star', 'star2', 1070, 590)
makeAnimatedLuaSprite('starFlame', 'starFlame', 1030, 440)
addAnimationByPrefix('starFlame', 'starFlame', 'fire loop full instance', 24, true)
setProperty('starFlame.alpha', 0)
scaleObject('starFlame', 1.5, 1.5)
setObjectCamera('starFlame', 'hud')
addLuaSprite('starFlame', true)
elseif rank <= 10 then
makeLuaSprite('star', 'star1', 1070, 590)
end
scaleObject('star', 0.9, 0.9)
setObjectCamera('star', 'hud')
setObjectOrder('star', getObjectOrder('starFlame') + 1)
setProperty('star.alpha', 0)
addLuaSprite('star')
makeLuaText('difficulty', ''.. rank ..'', 2230 , 0, 620)
setTextSize('difficulty', 37)
setTextFont('difficulty', 'combo.ttf')
setProperty('difficulty.alpha', 0)
addLuaText('difficulty', false)
setObjectOrder('difficulty', getObjectOrder('star') + 1)
if downscroll then
setProperty('difficulty.y', 70)
setProperty('star.y', 40)
setProperty('starFlame.y', -5)
setProperty('starFlame.angle', 190)
end
if rank > 10 then
setTextColor('difficulty', 'ffffff')
setTextBorder('difficulty', 2, '00AEFF')
elseif rank <= 10 then
setTextColor('difficulty', '000000')
setTextBorder('difficulty', 3, 'FFFFFF')
end
runTimer('ready', 0.5) -- star fade in
runTimer('wait', 8) -- star fade out
runTimer('wait2', 7.5) -- difficulty fade out
if rank > 10 then
runTimer('pausefire', 2) -- difficulty fade in
elseif rank <=10 then
runTimer('pause', 2)
end
end
end
function onTimerCompleted(tag)
if not hideHud then
if tag == 'ready' then
doTweenAlpha('hi', 'star', 1, 0.5,'linear')
end
if tag == 'wait' then
doTweenAlpha('gone', 'star', 0, 0.5,'linear')
doTweenAlpha('fireout', 'starFlame', 0, 0.5,'linear')
end
if tag == 'wait2' then
doTweenAlpha('bye', 'difficulty', 0, 0.5,'linear')
end
if tag == 'pause' then
doTweenAlpha('hi2', 'difficulty', 1, 0.5,'linear')
end
if tag == 'pausefire' then
setProperty('difficulty.alpha', 1)
setProperty('starFlame.alpha', 1)
playSound('light', 0.7)
end
end
end

View File

@ -1,4 +0,0 @@
function onCreate()
setTextFont('scoreTxt', 'vcr.ttf')
setTextFont('timeTxt','timer.ttf')
end

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 one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
images/stage/erect/bg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

View File

@ -65,7 +65,7 @@ function love.update(dt)
curState.finish()
end
elseif not curState then
myTypes.cameraTarget = myTypes.Vector2(0,0)
myTypes.render.cameraTarget = myTypes.Vector2(0,0)
myTypes.updateSprites(dt)
end
end

View File

@ -76,22 +76,26 @@ local function state(songName, songDifficulty)
{
rating = "sick",
hitWindow = 45,
spawnSplash = true
spawnSplash = true,
score = 300
},
{
rating = "good",
hitWindow = 90,
spawnSplash = false
spawnSplash = false,
score = 200
},
{
rating = "bad",
hitWindow = 135,
spawnSplash = false
spawnSplash = false,
score = 100
},
{
rating = "shit",
hitWindow = 300,
spawnSplash = false
spawnSplash = false,
score = 50
}
}
@ -241,7 +245,7 @@ local function state(songName, songDifficulty)
function state.update(dt)
if not playing then
if dead then
myTypes.cameraTarget = deadBF.stageCamera
myTypes.render.cameraTarget = deadBF.stageCamera
if not restart then
if deadBF and deadBF.sprite.ended then
deadBF:PlayAnimation("deathLoop")
@ -314,16 +318,16 @@ local function state(songName, songDifficulty)
if not section.gfSection then
if section.mustHitSection then
local currentSingVector = singVectors[characters.bf.animation] or myTypes.Vector2()
myTypes.cameraTarget = myTypes.Vector2(-stage.camera_boyfriend[1], -stage.camera_boyfriend[2]):Add(characters.bf.stageCamera:Negate()):Add(myTypes.Vector2(0, -200)):Add(currentSingVector)
myTypes.render.cameraTarget = myTypes.Vector2(-stage.camera_boyfriend[1], -stage.camera_boyfriend[2]):Add(characters.bf.stageCamera:Negate()):Add(myTypes.Vector2(0, -200)):Add(currentSingVector)
else
if characters.dad then
local currentSingVector = singVectors[characters.dad.animation] or myTypes.Vector2()
myTypes.cameraTarget = myTypes.Vector2(stage.camera_opponent[1], stage.camera_opponent[2]):Add(characters.dad.stageCamera:Negate()):Add(myTypes.Vector2(0, -200)):Add(currentSingVector)
myTypes.render.cameraTarget = myTypes.Vector2(stage.camera_opponent[1], stage.camera_opponent[2]):Add(characters.dad.stageCamera:Negate()):Add(myTypes.Vector2(0, -200)):Add(currentSingVector)
end
end
else
local currentSingVector = singVectors[characters.gf.animation] or myTypes.Vector2()
myTypes.cameraTarget = myTypes.Vector2(stage.camera_girlfriend[1], stage.camera_ocamera_girlfriendponent[2]):Add(characters.gf.stageCamera:Negate()):Add(myTypes.Vector2(0, -200)):Add(currentSingVector)
myTypes.render.cameraTarget = myTypes.Vector2(stage.camera_girlfriend[1], stage.camera_ocamera_girlfriendponent[2]):Add(characters.gf.stageCamera:Negate()):Add(myTypes.Vector2(0, -200)):Add(currentSingVector)
end
end
@ -589,14 +593,14 @@ local function state(songName, songDifficulty)
unspawnedNotes[#unspawnedNotes+1] = newNote
if note[3] > 0 then
local length = note[3] / conductor.stepCrochet
local length = math.floor(note[3] / conductor.stepCrochet)
for i = 0, length - .1, .1 do
local newHold = myTypes.note({note[1] + i * conductor.stepCrochet, note[2], note[3], note[4]}, section.mustHitSection, true)
unspawnedHoldNotes[#unspawnedHoldNotes+1] = newHold
unspawnedHoldNotes[#unspawnedHoldNotes+1] = newHold
end
local newHold = myTypes.note({note[1] + math.floor(length) * conductor.stepCrochet, note[2], note[3], note[4]}, section.mustHitSection, true, true)
local newHold = myTypes.note({note[1] + length * conductor.stepCrochet, note[2], note[3], note[4]}, section.mustHitSection, true, true)
unspawnedHoldNotes[#unspawnedHoldNotes+1] = newHold
newHold.holdEnd = true
if settings.Downscroll then
@ -607,7 +611,7 @@ local function state(songName, songDifficulty)
end
end
myTypes.cameraTarget = myTypes.Vector2()
myTypes.render.cameraTarget = myTypes.Vector2()
keyBinds = settings.Keybinds

View File

@ -1,337 +1,9 @@
local module = {}
local myMath = require("modules.math")
local files = require("modules.files")
local logging = require("modules.logging")
local json = require("modules.json")
local noteclass = require("modules.types.note")
local characterclass = require("modules.types.character")
local Vector2 = {}
Vector2.__index = Vector2
local Sprite = {}
Sprite.__index = Sprite
local Image = {}
Image.__index = Image
local cachedQuads = {}
local Sprites = {}
local Rects = {}
local Images = {}
function Vector2:Lerp(newVector2, position)
return module.Vector2(myMath.lerp(self.x, newVector2.x, position), myMath.lerp(self.y, newVector2.y, position))
end
function Vector2:Get()
return self.x, self.y
end
function Vector2:Negate()
return module.Vector2(-self.x, -self.y)
end
function Vector2:Add(addVector2)
return module.Vector2(self.x + addVector2.x, self.y + addVector2.y)
end
function Vector2:Mul(num)
return module.Vector2(self.x * num, self.y * num)
end
function module.Vector2(x, y)
return setmetatable({x = x or 0, y = y or 0}, Vector2)
end
function module.Sprite(image, sheet)
if not cachedQuads[sheet] then
local sheetString = files.read_file(sheet)
if not sheetString then
error("Failed to load ".. sheet)
end
local atlas = json.parse(sheetString).TextureAtlas.SubTexture
local quads = {}
local newSprite = setmetatable({
image = love.graphics.newImage(image),
quads = quads,
elapsed = 0,
fps = 10,
animation = nil,
frame = 0,
position = module.Vector2(200, 100), -- changeable
looping = false,
extraOffset = module.Vector2(0,0),
rect = false,
modifier = 1
}, 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(1,1)}
end
newSprite.quads = quads
cachedQuads[sheet] = {quads = quads, image = newSprite.image}
Sprites[#Sprites+1] = newSprite
return newSprite
else
local newSprite = setmetatable({
image = cachedQuads[sheet].image,
quads = cachedQuads[sheet].quads,
elapsed = 0,
fps = 10,
animation = nil,
frame = 0,
position = module.Vector2(200, 100), -- changeable
looping = false,
extraOffset = module.Vector2(0,0),
rect = false,
modifier = 1,
allowedFrame = 0
}, Sprite)
Sprites[#Sprites+1] = newSprite
return newSprite
end
end
function Sprite:PlayAnimation(name, fps, loop)
self.animation = name
self.fps = fps
self.looping = loop
self.frame = 1
self.ended = false
end
function Sprite:Destroy()
if self.rect then
for index, rect in next, Rects do
if rect == self then
Rects[index] = nil
-- for name, animation in next, rect.quads do
-- for index, quad in next, animation do
-- quad:release()
-- end
-- end
end
end
self = nil
else
for index, sprite in next, Sprites do
if sprite == self then
Sprites[index] = nil
-- for name, animation in next, sprite.quads do
-- for index, quad in next, animation do
-- quad:release()
-- end
-- end
end
end
self = nil
end
end
function Image:Destroy()
for index, image in next, Images do
if image == self then
Images[index] = nil
end
end
self = nil
end
function module.updateSprites(dt)
for index, sprite in next, Sprites do
if not sprite.animation or not sprite.quads[sprite.animation] then goto continue end
sprite.elapsed = sprite.elapsed + dt
if sprite.elapsed > 1 / sprite.fps then
if sprite.allowedFrames then
sprite.frame = sprite.quads[sprite.animation][sprite.allowedFrames[sprite.allowedFrame + 1]] and sprite.allowedFrames[sprite.allowedFrame + 1] or sprite.looping and sprite.allowedFrames[1] or sprite.allowedFrames[sprite.allowedFrame]
sprite.allowedFrame = sprite.allowedFrames[sprite.allowedFrame + 1] and sprite.allowedFrame + 1 or sprite.looping and 1 or #sprite.allowedFrames
else
sprite.frame = sprite.quads[sprite.animation][sprite.frame + 1] and sprite.frame + 1 or sprite.looping and 1 or sprite.frame
end
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
if not module.cameraPosition then
module.cameraPosition = module.Vector2()
end
module.cameraPosition = module.cameraPosition:Lerp(module.cameraTarget or module.Vector2(0,0), .2)
end
function module.drawSprites()
for index, image in next, Images do
if not image.ui then
local cameraOffset = module.cameraPosition
love.graphics.draw(image.image, image.position.x + cameraOffset.x * image.modifier , image.position.y + cameraOffset.y * image.modifier, image.rotation, image.resize.x * (image.flipX and -1 or 1), image.resize.y * (image.flipY and -1 or 1))
end
end
for index, sprite in next, Sprites do
if sprite.animation and sprite.quads and sprite.quads[sprite.animation] then
local quad = sprite.quads[sprite.animation][sprite.frame] or sprite.quads[sprite.animation][0]
if quad then
if quad.offset.x == 0 and quad.offset.y == 0 and sprite.quads[sprite.animation][0].offset.x ~= 0 then
quad.offset.x = sprite.quads[sprite.animation][0].offset.x
quad.offset.y = sprite.quads[sprite.animation][0].offset.y
end
if sprite.flipX and not quad.flipped then
quad.flipped = true
quad.offset.x = -quad.offset.x
end
local cameraOffset = sprite.ui and module.Vector2() or module.cameraPosition or module.Vector2()
love.graphics.draw(sprite.image, quad.quad, (sprite.position.x + (sprite.position.x - quad.offset.x - sprite.extraOffset.x) + cameraOffset.x * sprite.modifier), (sprite.position.y + (sprite.position.y - quad.offset.y - sprite.extraOffset.y) + cameraOffset.y * sprite.modifier), 0, quad.resize.x * (sprite.flipX and -1 or 1), quad.resize.y* (sprite.flipY and -1 or 1))
end
end
end
for index, rect in next, Rects do
if rect.animation then
local quad = rect.quads[rect.animation][0]
if rect.flipX and not quad.flipped then
quad.flipped = true
quad.offset.x = -quad.offset.x
end
local cameraOffset = rect.ui and module.Vector2() or module.cameraPosition or module.Vector2()
love.graphics.draw(rect.image, quad.quad, (rect.position.x + (rect.position.x - quad.offset.x - rect.extraOffset.x) + cameraOffset.x * rect.modifier), (rect.position.y + (rect.position.y - quad.offset.y - rect.extraOffset.y) + cameraOffset.y * rect.modifier), 0, quad.resize.x * (rect.flipX and -1 or 1), quad.resize.y* (rect.flipY and -1 or 1))
end
end
for index, image in next, Images do
if image.ui then
local cameraOffset = image.ui and module.Vector2()
love.graphics.draw(image.image, (image.position.x) + cameraOffset.x, image.position.y + cameraOffset.y, image.rotation, image.resize.x * (image.flipX and -1 or 1), image.resize.y)
end
end
end
function module.Rect(image, sheet)
if not cachedQuads[sheet] then
local sheetString = files.read_file(sheet)
if not sheetString then
error("Failed to load", sheet)
end
local atlas = json.parse(sheetString).TextureAtlas.SubTexture
local quads = {}
local newSprite = setmetatable({
image = love.graphics.newImage(image),
quads = quads,
elapsed = 0,
fps = 10,
animation = nil,
frame = 0,
position = module.Vector2(200, 100), -- changeable
looping = false,
extraOffset = module.Vector2(0,0),
rect = false,
modifier = 1
}, 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(1,1)}
end
newSprite.quads = quads
cachedQuads[sheet] = {quads = quads, image = newSprite.image}
Rects[#Rects+1] = newSprite
return newSprite
else
local newSprite = setmetatable({
image = cachedQuads[sheet].image,
quads = cachedQuads[sheet].quads,
elapsed = 0,
fps = 10,
animation = nil,
frame = 0,
position = module.Vector2(200, 100), -- changeable
looping = false,
extraOffset = module.Vector2(0,0),
rect = false,
modifier = 1
}, Sprite)
Sprites[#Sprites+1] = newSprite
return newSprite
end
end
function Sprite:Frame(name, frame)
self.animation = name
self.frame = frame
end
function Sprite:StopAnimation()
self.animation = nil
self.frame = 0
end
local renderClasses = require("modules.types.render")
local vectorClass = require("modules.types.vector")
noteclass.types = module
module.note = noteclass.note
@ -339,59 +11,17 @@ module.note = noteclass.note
characterclass.myTypes = module
module.character = characterclass.character
function module.destroyAllSprites()
Sprites = {}
Rects = {}
Images = {}
end
renderClasses.myTypes = module
module.Sprite = renderClasses.Sprite
module.Rect = renderClasses.Rect
module.Image = renderClasses.Image
module.destroyAllSprites = renderClasses.destroyAllSprites
module.drawSprites = renderClasses.drawSprites
module.updateSprites = renderClasses.updateSprites
function module.Image(path, scrollFactor)
local newImage = setmetatable({
image = love.graphics.newImage(path),
resize = module.Vector2(1,1),
position = module.Vector2(),
modifier = scrollFactor or 1,
rotation = 0
}, Image)
module.Vector2 = vectorClass.Vector2
Images[#Images+1] = newImage
module.render = renderClasses
return newImage
end
function module.preLoad(imagePath, sheetPath)
local sheetString = files.read_file(sheetPath)
if not sheetString then
error("Failed to load", sheetPath)
end
local atlas = json.parse(sheetString).TextureAtlas.SubTexture
local quads = {}
local image = love.graphics.newImage(imagePath)
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, image), offset = module.Vector2(frameX or 0, frameY or 0), resize = module.Vector2(1,1)}
end
cachedQuads[sheetPath] = {quads = quads, image = image}
end
return module

359
modules/types/render.lua Normal file
View File

@ -0,0 +1,359 @@
local json = require("modules.json")
local files = require("modules.files")
local module = {}
local Sprite = {}
Sprite.__index = Sprite
local Image = {}
Image.__index = Image
local cachedQuads = {}
local Sprites, Rects, Images = {}, {}, {}
function module.Sprite(image, sheet)
if not cachedQuads[sheet] then
local sheetString = files.read_file(sheet)
if not sheetString then
error("Failed to load ".. sheet)
end
local atlas = json.parse(sheetString).TextureAtlas.SubTexture
local quads = {}
local newSprite = setmetatable({
image = love.graphics.newImage(image),
quads = quads,
elapsed = 0,
fps = 10,
animation = nil,
frame = 0,
position = module.myTypes.Vector2(200, 100), -- changeable
looping = false,
extraOffset = module.myTypes.Vector2(0,0),
rect = false,
modifier = 1
}, 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.myTypes.Vector2(frameX or 0, frameY or 0), resize = module.myTypes.Vector2(1,1)}
end
newSprite.quads = quads
cachedQuads[sheet] = {quads = quads, image = newSprite.image}
Sprites[#Sprites+1] = newSprite
return newSprite
else
local newSprite = setmetatable({
image = cachedQuads[sheet].image,
quads = cachedQuads[sheet].quads,
elapsed = 0,
fps = 10,
animation = nil,
frame = 0,
position = module.myTypes.Vector2(200, 100), -- changeable
looping = false,
extraOffset = module.myTypes.Vector2(0,0),
rect = false,
modifier = 1,
allowedFrame = 0
}, Sprite)
Sprites[#Sprites+1] = newSprite
return newSprite
end
end
function Sprite:PlayAnimation(name, fps, loop)
self.animation = name
self.fps = fps
self.looping = loop
self.frame = 1
self.ended = false
end
function Sprite:Destroy()
if self.rect then
for index, rect in next, Rects do
if rect == self then
Rects[index] = nil
-- for name, animation in next, rect.quads do
-- for index, quad in next, animation do
-- quad:release()
-- end
-- end
end
end
self = nil
else
for index, sprite in next, Sprites do
if sprite == self then
Sprites[index] = nil
-- for name, animation in next, sprite.quads do
-- for index, quad in next, animation do
-- quad:release()
-- end
-- end
end
end
self = nil
end
end
function Image:Destroy()
for index, image in next, Images do
if image == self then
Images[index] = nil
end
end
self = nil
end
function module.updateSprites(dt)
for index, sprite in next, Sprites do
if not sprite.animation or not sprite.quads[sprite.animation] then goto continue end
sprite.elapsed = sprite.elapsed + dt
if sprite.elapsed > 1 / sprite.fps then
if sprite.allowedFrames then
sprite.frame = sprite.quads[sprite.animation][sprite.allowedFrames[sprite.allowedFrame + 1]] and sprite.allowedFrames[sprite.allowedFrame + 1] or sprite.looping and sprite.allowedFrames[1] or sprite.allowedFrames[sprite.allowedFrame]
sprite.allowedFrame = sprite.allowedFrames[sprite.allowedFrame + 1] and sprite.allowedFrame + 1 or sprite.looping and 1 or #sprite.allowedFrames
else
sprite.frame = sprite.quads[sprite.animation][sprite.frame + 1] and sprite.frame + 1 or sprite.looping and 1 or sprite.frame
end
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.myTypes.Vector2(love.graphics.getWidth() / 1920, love.graphics.getHeight() / 1080)
::continue:: -- At the end. always.
end
if not module.cameraPosition then
module.cameraPosition = module.myTypes.Vector2()
end
module.cameraPosition = module.cameraPosition:Lerp(module.cameraTarget or module.myTypes.Vector2(0,0), .2)
end
function module.drawSprites()
for index, image in next, Images do
if not image.ui then
local cameraOffset = module.cameraPosition
love.graphics.draw(image.image, image.position.x + cameraOffset.x * image.modifier , image.position.y + cameraOffset.y * image.modifier, image.rotation, image.resize.x * (image.flipX and -1 or 1), image.resize.y * (image.flipY and -1 or 1))
end
end
for index, sprite in next, Sprites do
if sprite.animation and sprite.quads and sprite.quads[sprite.animation] then
local quad = sprite.quads[sprite.animation][sprite.frame] or sprite.quads[sprite.animation][0]
if quad then
if quad.offset.x == 0 and quad.offset.y == 0 and sprite.quads[sprite.animation][0].offset.x ~= 0 then
quad.offset.x = sprite.quads[sprite.animation][0].offset.x
quad.offset.y = sprite.quads[sprite.animation][0].offset.y
end
if sprite.flipX and not quad.flipped then
quad.flipped = true
quad.offset.x = -quad.offset.x
end
local cameraOffset = sprite.ui and module.myTypes.Vector2() or module.cameraPosition or module.myTypes.Vector2()
love.graphics.draw(sprite.image, quad.quad, (sprite.position.x + (sprite.position.x - quad.offset.x - sprite.extraOffset.x) + cameraOffset.x * sprite.modifier), (sprite.position.y + (sprite.position.y - quad.offset.y - sprite.extraOffset.y) + cameraOffset.y * sprite.modifier), 0, quad.resize.x * (sprite.flipX and -1 or 1), quad.resize.y* (sprite.flipY and -1 or 1))
end
end
end
for index, rect in next, Rects do
if rect.animation then
local quad = rect.quads[rect.animation][0]
if rect.flipX and not quad.flipped then
quad.flipped = true
quad.offset.x = -quad.offset.x
end
local cameraOffset = rect.ui and module.myTypes.Vector2() or module.cameraPosition or module.myTypes.Vector2()
love.graphics.draw(rect.image, quad.quad, (rect.position.x + (rect.position.x - quad.offset.x - rect.extraOffset.x) + cameraOffset.x * rect.modifier), (rect.position.y + (rect.position.y - quad.offset.y - rect.extraOffset.y) + cameraOffset.y * rect.modifier), 0, quad.resize.x * (rect.flipX and -1 or 1), quad.resize.y* (rect.flipY and -1 or 1))
end
end
for index, image in next, Images do
if image.ui then
local cameraOffset = image.ui and module.myTypes.Vector2()
love.graphics.draw(image.image, (image.position.x) + cameraOffset.x, image.position.y + cameraOffset.y, image.rotation, image.resize.x * (image.flipX and -1 or 1), image.resize.y)
end
end
end
function module.Rect(image, sheet)
if not cachedQuads[sheet] then
local sheetString = files.read_file(sheet)
if not sheetString then
error("Failed to load", sheet)
end
local atlas = json.parse(sheetString).TextureAtlas.SubTexture
local quads = {}
local newSprite = setmetatable({
image = love.graphics.newImage(image),
quads = quads,
elapsed = 0,
fps = 10,
animation = nil,
frame = 0,
position = module.myTypes.Vector2(200, 100), -- changeable
looping = false,
extraOffset = module.myTypes.Vector2(0,0),
rect = false,
modifier = 1
}, 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.myTypes.Vector2(frameX or 0, frameY or 0), resize = module.myTypes.Vector2(1,1)}
end
newSprite.quads = quads
cachedQuads[sheet] = {quads = quads, image = newSprite.image}
Rects[#Rects+1] = newSprite
return newSprite
else
local newSprite = setmetatable({
image = cachedQuads[sheet].image,
quads = cachedQuads[sheet].quads,
elapsed = 0,
fps = 10,
animation = nil,
frame = 0,
position = module.myTypes.Vector2(200, 100), -- changeable
looping = false,
extraOffset = module.myTypes.Vector2(0,0),
rect = false,
modifier = 1
}, Sprite)
Sprites[#Sprites+1] = newSprite
return newSprite
end
end
function Sprite:Frame(name, frame)
self.animation = name
self.frame = frame
end
function Sprite:StopAnimation()
self.animation = nil
self.frame = 0
end
function module.destroyAllSprites()
Sprites = {}
Rects = {}
Images = {}
end
function module.Image(path, scrollFactor)
local newImage = setmetatable({
image = love.graphics.newImage(path),
resize = module.myTypes.Vector2(1,1),
position = module.myTypes.Vector2(),
modifier = scrollFactor or 1,
rotation = 0
}, Image)
Images[#Images+1] = newImage
return newImage
end
function module.preLoad(imagePath, sheetPath)
local sheetString = files.read_file(sheetPath)
if not sheetString then
error("Failed to load", sheetPath)
end
local atlas = json.parse(sheetString).TextureAtlas.SubTexture
local quads = {}
local image = love.graphics.newImage(imagePath)
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, image), offset = module.myTypes.Vector2(frameX or 0, frameY or 0), resize = module.myTypes.Vector2(1,1)}
end
cachedQuads[sheetPath] = {quads = quads, image = image}
end
return module

32
modules/types/vector.lua Normal file
View File

@ -0,0 +1,32 @@
local myMath = require("modules.math")
local module = {}
local Vector2 = {}
Vector2.__index = Vector2
function Vector2:Lerp(newVector2, position)
return module.Vector2(myMath.lerp(self.x, newVector2.x, position), myMath.lerp(self.y, newVector2.y, position))
end
function Vector2:Get()
return self.x, self.y
end
function Vector2:Negate()
return module.Vector2(-self.x, -self.y)
end
function Vector2:Add(addVector2)
return module.Vector2(self.x + addVector2.x, self.y + addVector2.y)
end
function Vector2:Mul(num)
return module.Vector2(self.x * num, self.y * num)
end
function module.Vector2(x, y)
return setmetatable({x = x or 0, y = y or 0}, Vector2)
end
return module

View File

@ -1 +1 @@
{"Downscroll":true, "Keybinds":["a", "s", "up", "right"]}
{"Downscroll":false, "Keybinds":["a", "s", "up", "right"]}

View File

@ -0,0 +1,95 @@
{
"TextureAtlas": {
"SubTexture": [
{
"_name": "Symbol 2 instance 10000",
"_x": "0",
"_y": "0",
"_width": "1330",
"_height": "395",
"_frameX": "0",
"_frameY": "-3",
"_frameWidth": "1334",
"_frameHeight": "401"
},
{
"_name": "Symbol 2 instance 10001",
"_x": "1335",
"_y": "0",
"_width": "1320",
"_height": "389",
"_frameX": "-10",
"_frameY": "-9",
"_frameWidth": "1334",
"_frameHeight": "401"
},
{
"_name": "Symbol 2 instance 10002",
"_x": "2660",
"_y": "0",
"_width": "1321",
"_height": "390",
"_frameX": "-10",
"_frameY": "-9",
"_frameWidth": "1334",
"_frameHeight": "401"
},
{
"_name": "Symbol 2 instance 10003",
"_x": "0",
"_y": "400",
"_width": "1329",
"_height": "384",
"_frameX": "-2",
"_frameY": "-15",
"_frameWidth": "1334",
"_frameHeight": "401"
},
{
"_name": "Symbol 2 instance 10004",
"_x": "1334",
"_y": "400",
"_width": "1326",
"_height": "384",
"_frameX": "-2",
"_frameY": "-15",
"_frameWidth": "1334",
"_frameHeight": "401"
},
{
"_name": "Symbol 2 instance 10005",
"_x": "2665",
"_y": "400",
"_width": "1324",
"_height": "399",
"_frameX": "-4",
"_frameY": "0",
"_frameWidth": "1334",
"_frameHeight": "401"
},
{
"_name": "Symbol 2 instance 10006",
"_x": "0",
"_y": "804",
"_width": "1330",
"_height": "401",
"_frameX": "-4",
"_frameY": "0",
"_frameWidth": "1334",
"_frameHeight": "401"
},
{
"_name": "Symbol 2 instance 10007",
"_x": "1335",
"_y": "804",
"_width": "1334",
"_height": "398",
"_frameX": "0",
"_frameY": "-3",
"_frameWidth": "1334",
"_frameHeight": "401"
}
],
"_imagePath": "crowd.png"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 401 KiB

15
stages/stageErect.json Normal file
View File

@ -0,0 +1,15 @@
{
"directory": "",
"defaultZoom": 0.85,
"isPixelStage": false,
"boyfriend": [977, -160],
"girlfriend": [501, -200],
"opponent": [200, -175],
"hide_girlfriend": false,
"camera_boyfriend": [150, -300],
"camera_opponent": [-300, 300],
"camera_girlfriend": [0, 0],
"camera_speed": 1
}

39
stages/stageErect.lua Normal file
View File

@ -0,0 +1,39 @@
local myTypes = require("modules.types")
return {
onCreate = function(song)
local backDark = myTypes.Image("images/stage/erect/backDark.png")
backDark.position = myTypes.Vector2(729, -170)
local crowd = myTypes.Sprite("sprites/stage/erect/crowd.png", "sprites/stage/erect/crowd.json")
crowd:PlayAnimation("Symbol 2 instance 1", 24, true)
crowd.position = myTypes.Vector2(560, 150)
crowd.modifier = 0.8
local brightLightSmall = myTypes.Image("images/stage/erect/brightLightSmall.png")
brightLightSmall.position = myTypes.Vector2(967, -103)
brightLightSmall.modifier = 1.2
local bg = myTypes.Image("images/stage/erect/bg.png")
bg.position = myTypes.Vector2(-603, -187)
local server = myTypes.Image("images/stage/erect/server.png")
server.position = myTypes.Vector2(-361, 205)
local lightGreen = myTypes.Image("images/stage/erect/lightgreen.png")
lightGreen.position = myTypes.Vector2(-171, 242)
local lightRed = myTypes.Image("images/stage/erect/lightred.png")
lightRed.position = myTypes.Vector2(-101, 560)
local lightOrange = myTypes.Image("images/stage/erect/orangeLight.png")
lightOrange.position = myTypes.Vector2(189, -195)
local lights = myTypes.Image("images/stage/erect/lights.png")
lights.position = myTypes.Vector2(-601, -147)
lights.modifier = 1.2
local lightAbove = myTypes.Image("images/stage/erect/lightAbove.png")
lights.position = myTypes.Vector2(804, -117)
end
}