Made Nail Carpenter Half-Time! (#845)
* changed cues, added legacy support * Added Legacy Scroll Speed
This commit is contained in:
parent
800832134d
commit
d60c8b921c
|
@ -635,13 +635,55 @@ MonoBehaviour:
|
||||||
SoundSequences: []
|
SoundSequences: []
|
||||||
scheduledInputs: []
|
scheduledInputs: []
|
||||||
puddingPattern:
|
puddingPattern:
|
||||||
|
- beat: 0
|
||||||
|
type: 2
|
||||||
|
- beat: 1
|
||||||
|
type: 0
|
||||||
|
- beat: 2
|
||||||
|
type: 8
|
||||||
|
cherryPattern:
|
||||||
|
- beat: 0
|
||||||
|
type: 2
|
||||||
|
- beat: 1
|
||||||
|
type: 0
|
||||||
|
- beat: 2
|
||||||
|
type: 0
|
||||||
|
- beat: 3
|
||||||
|
type: 0
|
||||||
|
- beat: 4
|
||||||
|
type: 8
|
||||||
|
cakePattern:
|
||||||
|
- beat: 0
|
||||||
|
type: 2
|
||||||
|
- beat: 1
|
||||||
|
type: 0
|
||||||
|
- beat: 2
|
||||||
|
type: 3
|
||||||
|
- beat: 2.5
|
||||||
|
type: 0
|
||||||
|
- beat: 3.5
|
||||||
|
type: 0
|
||||||
|
- beat: 4
|
||||||
|
type: 8
|
||||||
|
cakeLongPattern:
|
||||||
|
- beat: 0
|
||||||
|
type: 2
|
||||||
|
- beat: 1
|
||||||
|
type: 0
|
||||||
|
- beat: 2
|
||||||
|
type: 9
|
||||||
|
- beat: 3
|
||||||
|
type: 1
|
||||||
|
- beat: 4
|
||||||
|
type: 8
|
||||||
|
puddingPatternOld:
|
||||||
- beat: 0
|
- beat: 0
|
||||||
type: 2
|
type: 2
|
||||||
- beat: 0.5
|
- beat: 0.5
|
||||||
type: 0
|
type: 0
|
||||||
- beat: 1
|
- beat: 1
|
||||||
type: 8
|
type: 8
|
||||||
cherryPattern:
|
cherryPatternOld:
|
||||||
- beat: 0
|
- beat: 0
|
||||||
type: 2
|
type: 2
|
||||||
- beat: 0.5
|
- beat: 0.5
|
||||||
|
@ -652,7 +694,7 @@ MonoBehaviour:
|
||||||
type: 0
|
type: 0
|
||||||
- beat: 2
|
- beat: 2
|
||||||
type: 8
|
type: 8
|
||||||
cakePattern:
|
cakePatternOld:
|
||||||
- beat: 0
|
- beat: 0
|
||||||
type: 2
|
type: 2
|
||||||
- beat: 0.5
|
- beat: 0.5
|
||||||
|
@ -665,7 +707,7 @@ MonoBehaviour:
|
||||||
type: 0
|
type: 0
|
||||||
- beat: 2
|
- beat: 2
|
||||||
type: 8
|
type: 8
|
||||||
cakeLongPattern:
|
cakeLongPatternOld:
|
||||||
- beat: 0
|
- beat: 0
|
||||||
type: 2
|
type: 2
|
||||||
- beat: 0.5
|
- beat: 0.5
|
||||||
|
@ -676,7 +718,7 @@ MonoBehaviour:
|
||||||
type: 1
|
type: 1
|
||||||
- beat: 2
|
- beat: 2
|
||||||
type: 8
|
type: 8
|
||||||
scrollMetresPerBeat: -4.5
|
scrollMetresPerBeat: -2.25
|
||||||
boardWidth: 19.2
|
boardWidth: 19.2
|
||||||
baseNail: {fileID: 7504610799131467556}
|
baseNail: {fileID: 7504610799131467556}
|
||||||
baseLongNail: {fileID: 4122843866948130824}
|
baseLongNail: {fileID: 4122843866948130824}
|
||||||
|
|
|
@ -14,26 +14,31 @@ namespace HeavenStudio.Games.Loaders
|
||||||
{
|
{
|
||||||
return new Minigame("nailCarpenter", "Nail Carpenter", "fab96e", false, false, new List<GameAction>()
|
return new Minigame("nailCarpenter", "Nail Carpenter", "fab96e", false, false, new List<GameAction>()
|
||||||
{
|
{
|
||||||
new GameAction("puddingNail", "Pudding Nail")
|
|
||||||
|
new GameAction("puddingNailNew", "Pudding Nail")
|
||||||
{
|
{
|
||||||
defaultLength = 8f,
|
defaultLength = 8f,
|
||||||
resizable = true
|
resizable = true
|
||||||
},
|
},
|
||||||
new GameAction("cherryNail", "Cherry Nail")
|
|
||||||
|
new GameAction("cherryNailNew", "Cherry Nail")
|
||||||
{
|
{
|
||||||
defaultLength = 4f,
|
defaultLength = 4f,
|
||||||
resizable = true
|
resizable = true
|
||||||
},
|
},
|
||||||
new GameAction("cakeNail", "Cake Nail")
|
|
||||||
|
new GameAction("cakeNailNew", "Cake Nail")
|
||||||
{
|
{
|
||||||
defaultLength = 4f,
|
defaultLength = 4f,
|
||||||
resizable = true
|
resizable = true
|
||||||
},
|
},
|
||||||
new GameAction("cakeLongNail", "Cake Long Nail")
|
new GameAction("cakeLongNailNew", "Cake Long Nail")
|
||||||
{
|
{
|
||||||
defaultLength = 4f,
|
defaultLength = 4f,
|
||||||
resizable = true
|
resizable = true
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
new GameAction("slideFusuma", "Slide Shoji")
|
new GameAction("slideFusuma", "Slide Shoji")
|
||||||
{
|
{
|
||||||
function = delegate {
|
function = delegate {
|
||||||
|
@ -49,6 +54,29 @@ namespace HeavenStudio.Games.Loaders
|
||||||
new Param("mute", false, "Mute", "Toggle if the cue should be muted.")
|
new Param("mute", false, "Mute", "Toggle if the cue should be muted.")
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
new GameAction("puddingNail", "Pudding Nail (Legacy)")
|
||||||
|
{
|
||||||
|
defaultLength = 8f,
|
||||||
|
resizable = true,
|
||||||
|
hidden = true,
|
||||||
|
},
|
||||||
|
|
||||||
|
new GameAction("cherryNail", "Cherry Nail (Legacy)")
|
||||||
|
{
|
||||||
|
defaultLength = 4f,
|
||||||
|
resizable = true,
|
||||||
|
hidden = true,
|
||||||
|
},
|
||||||
|
new GameAction("cakeNail", "Cake Nail (Legacy)")
|
||||||
|
{
|
||||||
|
defaultLength = 4f,
|
||||||
|
resizable = true, hidden = true,
|
||||||
|
},
|
||||||
|
new GameAction("cakeLongNail", "Cake Long Nail (Legacy)")
|
||||||
|
{
|
||||||
|
defaultLength = 4f,
|
||||||
|
resizable = true, hidden = true,
|
||||||
|
},
|
||||||
|
|
||||||
},
|
},
|
||||||
new List<string>() { "pco", "normal" },
|
new List<string>() { "pco", "normal" },
|
||||||
|
@ -102,6 +130,10 @@ namespace HeavenStudio.Games
|
||||||
Cherry,
|
Cherry,
|
||||||
Cake,
|
Cake,
|
||||||
CakeLong,
|
CakeLong,
|
||||||
|
PuddingOld,
|
||||||
|
CherryOld,
|
||||||
|
CakeOld,
|
||||||
|
CakeLongOld,
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,7 +141,12 @@ namespace HeavenStudio.Games
|
||||||
[SerializeField] ObjectPatternItem[] cherryPattern;
|
[SerializeField] ObjectPatternItem[] cherryPattern;
|
||||||
[SerializeField] ObjectPatternItem[] cakePattern;
|
[SerializeField] ObjectPatternItem[] cakePattern;
|
||||||
[SerializeField] ObjectPatternItem[] cakeLongPattern;
|
[SerializeField] ObjectPatternItem[] cakeLongPattern;
|
||||||
|
[SerializeField] ObjectPatternItem[] puddingPatternOld;
|
||||||
|
[SerializeField] ObjectPatternItem[] cherryPatternOld;
|
||||||
|
[SerializeField] ObjectPatternItem[] cakePatternOld;
|
||||||
|
[SerializeField] ObjectPatternItem[] cakeLongPatternOld;
|
||||||
[SerializeField] float scrollMetresPerBeat = 4f;
|
[SerializeField] float scrollMetresPerBeat = 4f;
|
||||||
|
[SerializeField] float legacyScrollMultiplier = 2;
|
||||||
[SerializeField] float boardWidth = 19.2f;
|
[SerializeField] float boardWidth = 19.2f;
|
||||||
|
|
||||||
public GameObject baseNail;
|
public GameObject baseNail;
|
||||||
|
@ -195,6 +232,7 @@ namespace HeavenStudio.Games
|
||||||
double slideBeat = double.MaxValue;
|
double slideBeat = double.MaxValue;
|
||||||
double slideLength;
|
double slideLength;
|
||||||
double cachedPatternLengthPudding, cachedPatternLengthCherry, cachedPatternLengthCake, cachedPatternLengthCakeLong;
|
double cachedPatternLengthPudding, cachedPatternLengthCherry, cachedPatternLengthCake, cachedPatternLengthCakeLong;
|
||||||
|
double cachedPatternLengthPuddingOld, cachedPatternLengthCherryOld, cachedPatternLengthCakeOld, cachedPatternLengthCakeLongOld;
|
||||||
Util.EasingFunction.Ease slideEase;
|
Util.EasingFunction.Ease slideEase;
|
||||||
float slideRatioLast = 0, slideRatioNext = 0;
|
float slideRatioLast = 0, slideRatioNext = 0;
|
||||||
|
|
||||||
|
@ -249,6 +287,11 @@ namespace HeavenStudio.Games
|
||||||
cachedPatternLengthCherry = cherryPattern[^1].beat;
|
cachedPatternLengthCherry = cherryPattern[^1].beat;
|
||||||
cachedPatternLengthCake = cakePattern[^1].beat;
|
cachedPatternLengthCake = cakePattern[^1].beat;
|
||||||
cachedPatternLengthCakeLong = cakeLongPattern[^1].beat;
|
cachedPatternLengthCakeLong = cakeLongPattern[^1].beat;
|
||||||
|
cachedPatternLengthPuddingOld = puddingPatternOld[^1].beat;
|
||||||
|
cachedPatternLengthCherryOld = cherryPatternOld[^1].beat;
|
||||||
|
cachedPatternLengthCakeOld = cakePatternOld[^1].beat;
|
||||||
|
cachedPatternLengthCakeLongOld = cakeLongPatternOld[^1].beat;
|
||||||
|
float legacyScrollSpeed = (scrollMetresPerBeat*legacyScrollMultiplier);
|
||||||
|
|
||||||
double endBeat = double.MaxValue;
|
double endBeat = double.MaxValue;
|
||||||
var entities = gameManager.Beatmap.Entities;
|
var entities = gameManager.Beatmap.Entities;
|
||||||
|
@ -259,19 +302,27 @@ namespace HeavenStudio.Games
|
||||||
RiqEntity firstEnd = entities.Find(c => (c.datamodel.StartsWith("gameManager/switchGame") || c.datamodel.Equals("gameManager/end")) && c.beat > gameStartBeat);
|
RiqEntity firstEnd = entities.Find(c => (c.datamodel.StartsWith("gameManager/switchGame") || c.datamodel.Equals("gameManager/end")) && c.beat > gameStartBeat);
|
||||||
endBeat = firstEnd?.beat ?? endBeat;
|
endBeat = firstEnd?.beat ?? endBeat;
|
||||||
|
|
||||||
List<RiqEntity> events = entities.FindAll(v => (v.datamodel is "nailCarpenter/puddingNail" or "nailCarpenter/cherryNail" or "nailCarpenter/cakeNail" or "nailCarpenter/cakeLongNail") && v.beat >= gameStartBeat && v.beat < endBeat);
|
List<RiqEntity> events = entities.FindAll(v => (v.datamodel is "nailCarpenter/puddingNail" or "nailCarpenter/cherryNail" or "nailCarpenter/cakeNail" or "nailCarpenter/cakeLongNail" or "nailCarpenter/puddingNailNew" or "nailCarpenter/cherryNailNew" or "nailCarpenter/cakeNailNew" or "nailCarpenter/cakeLongNailNew") && v.beat >= gameStartBeat && v.beat < endBeat);
|
||||||
|
|
||||||
scheduledPatterns.Clear();
|
scheduledPatterns.Clear();
|
||||||
patternIndex = 0;
|
patternIndex = 0;
|
||||||
|
bool hasChecked = false;
|
||||||
|
|
||||||
|
|
||||||
foreach (var evt in events)
|
foreach (var evt in events)
|
||||||
{
|
{
|
||||||
if (evt.length == 0) continue;
|
if (evt.length == 0) continue;
|
||||||
int patternDivisions = (int)Math.Ceiling(evt.length / PATTERN_SEEK_TIME);
|
int patternDivisions = (int)Math.Ceiling(evt.length / PATTERN_SEEK_TIME);
|
||||||
PatternType patternType = evt.datamodel switch
|
PatternType patternType = evt.datamodel switch
|
||||||
{
|
{
|
||||||
"nailCarpenter/puddingNail" => PatternType.Pudding,
|
"nailCarpenter/puddingNail" => PatternType.PuddingOld,
|
||||||
"nailCarpenter/cherryNail" => PatternType.Cherry,
|
"nailCarpenter/cherryNail" => PatternType.CherryOld,
|
||||||
"nailCarpenter/cakeNail" => PatternType.Cake,
|
"nailCarpenter/cakeNail" => PatternType.CakeOld,
|
||||||
"nailCarpenter/cakeLongNail" => PatternType.CakeLong,
|
"nailCarpenter/cakeLongNail" => PatternType.CakeLongOld,
|
||||||
|
"nailCarpenter/puddingNailNew" => PatternType.Pudding,
|
||||||
|
"nailCarpenter/cherryNailNew" => PatternType.Cherry,
|
||||||
|
"nailCarpenter/cakeNailNew" => PatternType.Cake,
|
||||||
|
"nailCarpenter/cakeLongNailNew" => PatternType.CakeLong,
|
||||||
_ => throw new NotImplementedException()
|
_ => throw new NotImplementedException()
|
||||||
};
|
};
|
||||||
for (int i = 0; i < patternDivisions; i++)
|
for (int i = 0; i < patternDivisions; i++)
|
||||||
|
@ -284,7 +335,19 @@ namespace HeavenStudio.Games
|
||||||
};
|
};
|
||||||
scheduledPatterns.Add(pattern);
|
scheduledPatterns.Add(pattern);
|
||||||
}
|
}
|
||||||
|
if (evt.datamodel is "nailCarpenter/puddingNail" or "nailCarpenter/cherryNail" or "nailCarpenter/cakeNail" or "nailCarpenter/cakeLongNail")
|
||||||
|
{
|
||||||
|
if (hasChecked == false)
|
||||||
|
{
|
||||||
|
scrollMetresPerBeat = legacyScrollSpeed;
|
||||||
|
hasChecked = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnPlay(double beat)
|
public override void OnPlay(double beat)
|
||||||
|
@ -355,6 +418,10 @@ namespace HeavenStudio.Games
|
||||||
PatternType.Cherry => cachedPatternLengthCherry,
|
PatternType.Cherry => cachedPatternLengthCherry,
|
||||||
PatternType.Cake => cachedPatternLengthCake,
|
PatternType.Cake => cachedPatternLengthCake,
|
||||||
PatternType.CakeLong => cachedPatternLengthCakeLong,
|
PatternType.CakeLong => cachedPatternLengthCakeLong,
|
||||||
|
PatternType.PuddingOld => cachedPatternLengthPuddingOld,
|
||||||
|
PatternType.CherryOld => cachedPatternLengthCherryOld,
|
||||||
|
PatternType.CakeOld => cachedPatternLengthCakeOld,
|
||||||
|
PatternType.CakeLongOld => cachedPatternLengthCakeLongOld,
|
||||||
_ => throw new NotImplementedException()
|
_ => throw new NotImplementedException()
|
||||||
};
|
};
|
||||||
patternType = pattern;
|
patternType = pattern;
|
||||||
|
@ -367,6 +434,11 @@ namespace HeavenStudio.Games
|
||||||
PatternType.Cherry => cherryPattern,
|
PatternType.Cherry => cherryPattern,
|
||||||
PatternType.Cake => cakePattern,
|
PatternType.Cake => cakePattern,
|
||||||
PatternType.CakeLong => cakeLongPattern,
|
PatternType.CakeLong => cakeLongPattern,
|
||||||
|
PatternType.PuddingOld => puddingPatternOld,
|
||||||
|
PatternType.CherryOld => cherryPatternOld,
|
||||||
|
PatternType.CakeOld => cakePatternOld,
|
||||||
|
PatternType.CakeLongOld => cakeLongPatternOld,
|
||||||
|
|
||||||
_ => throw new NotImplementedException()
|
_ => throw new NotImplementedException()
|
||||||
});
|
});
|
||||||
lastPatternType = patternType;
|
lastPatternType = patternType;
|
||||||
|
@ -405,10 +477,18 @@ namespace HeavenStudio.Games
|
||||||
SoundByte.PlayOneShotGame("nailCarpenter/one", itemBeat, forcePlay: true);
|
SoundByte.PlayOneShotGame("nailCarpenter/one", itemBeat, forcePlay: true);
|
||||||
sweetType = Sweet.sweetsType.Pudding;
|
sweetType = Sweet.sweetsType.Pudding;
|
||||||
break;
|
break;
|
||||||
|
case PatternType.PuddingOld:
|
||||||
|
SoundByte.PlayOneShotGame("nailCarpenter/one", itemBeat, forcePlay: true);
|
||||||
|
sweetType = Sweet.sweetsType.Pudding;
|
||||||
|
break;
|
||||||
case PatternType.Cherry:
|
case PatternType.Cherry:
|
||||||
SoundByte.PlayOneShotGame("nailCarpenter/three", itemBeat, forcePlay: true);
|
SoundByte.PlayOneShotGame("nailCarpenter/three", itemBeat, forcePlay: true);
|
||||||
sweetType = Sweet.sweetsType.CherryPudding;
|
sweetType = Sweet.sweetsType.CherryPudding;
|
||||||
break;
|
break;
|
||||||
|
case PatternType.CherryOld:
|
||||||
|
SoundByte.PlayOneShotGame("nailCarpenter/three", itemBeat, forcePlay: true);
|
||||||
|
sweetType = Sweet.sweetsType.CherryPudding;
|
||||||
|
break;
|
||||||
case PatternType.Cake:
|
case PatternType.Cake:
|
||||||
SoundByte.PlayOneShotGame("nailCarpenter/alarm", itemBeat, forcePlay: true);
|
SoundByte.PlayOneShotGame("nailCarpenter/alarm", itemBeat, forcePlay: true);
|
||||||
sweetType = Sweet.sweetsType.ShortCake;
|
sweetType = Sweet.sweetsType.ShortCake;
|
||||||
|
@ -420,6 +500,17 @@ namespace HeavenStudio.Games
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
case PatternType.CakeOld:
|
||||||
|
SoundByte.PlayOneShotGame("nailCarpenter/alarm", itemBeat, forcePlay: true);
|
||||||
|
sweetType = Sweet.sweetsType.ShortCake;
|
||||||
|
BeatAction.New(instance, new List<BeatAction.Action>()
|
||||||
|
{
|
||||||
|
new BeatAction.Action(itemBeat, delegate
|
||||||
|
{
|
||||||
|
EffectExclamRed.DoScaledAnimationAsync("exclamAppear", 0.25f);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
break;
|
||||||
case PatternType.CakeLong:
|
case PatternType.CakeLong:
|
||||||
SoundByte.PlayOneShotGame("nailCarpenter/signal1", itemBeat, forcePlay: true);
|
SoundByte.PlayOneShotGame("nailCarpenter/signal1", itemBeat, forcePlay: true);
|
||||||
sweetType = Sweet.sweetsType.LayerCake;
|
sweetType = Sweet.sweetsType.LayerCake;
|
||||||
|
@ -431,6 +522,17 @@ namespace HeavenStudio.Games
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
case PatternType.CakeLongOld:
|
||||||
|
SoundByte.PlayOneShotGame("nailCarpenter/signal1", itemBeat, forcePlay: true);
|
||||||
|
sweetType = Sweet.sweetsType.LayerCake;
|
||||||
|
BeatAction.New(instance, new List<BeatAction.Action>()
|
||||||
|
{
|
||||||
|
new BeatAction.Action(itemBeat, delegate
|
||||||
|
{
|
||||||
|
EffectExclamBlue.DoScaledAnimationAsync("exclamAppear", 0.25f);
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -438,6 +540,10 @@ namespace HeavenStudio.Games
|
||||||
{
|
{
|
||||||
SpawnSweet(itemBeat, startbeat, Sweet.sweetsType.Cherry);
|
SpawnSweet(itemBeat, startbeat, Sweet.sweetsType.Cherry);
|
||||||
}
|
}
|
||||||
|
else if (lastPatternType == PatternType.CakeOld)
|
||||||
|
{
|
||||||
|
SpawnSweet(itemBeat, startbeat, Sweet.sweetsType.Cherry);
|
||||||
|
}
|
||||||
else if (sweetType != Sweet.sweetsType.None)
|
else if (sweetType != Sweet.sweetsType.None)
|
||||||
{
|
{
|
||||||
SpawnSweet(itemBeat, startbeat, sweetType);
|
SpawnSweet(itemBeat, startbeat, sweetType);
|
||||||
|
|
Loading…
Reference in a new issue