diff --git a/Assets/Resources/Games/frogHop.prefab b/Assets/Resources/Games/frogHop.prefab
index ba5c4de4f..9e796fe51 100644
--- a/Assets/Resources/Games/frogHop.prefab
+++ b/Assets/Resources/Games/frogHop.prefab
@@ -173,6 +173,90 @@ SpriteRenderer:
m_WasSpriteAssigned: 1
m_MaskInteraction: 2
m_SpriteSortPoint: 0
+--- !u!1 &3311129963093537471
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 5184237192129329593}
+ - component: {fileID: 8827201684015420044}
+ m_Layer: 0
+ m_Name: SpotlightsBackColor
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &5184237192129329593
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3311129963093537471}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 3672416108430647415}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &8827201684015420044
+SpriteRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3311129963093537471}
+ m_Enabled: 1
+ m_CastShadows: 0
+ m_ReceiveShadows: 0
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 0
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 0
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 1
+ m_Sprite: {fileID: 1119035408, guid: 3c49c0fa809689d448ee90b3c1143d9f, type: 3}
+ m_Color: {r: 1, g: 1, b: 1, a: 0.5019608}
+ m_FlipX: 0
+ m_FlipY: 0
+ m_DrawMode: 0
+ m_Size: {x: 16.9, y: 20.04}
+ m_AdaptiveModeThreshold: 0.5
+ m_SpriteTileMode: 0
+ m_WasSpriteAssigned: 1
+ m_MaskInteraction: 0
+ m_SpriteSortPoint: 0
--- !u!1 &3446676100132537491
GameObject:
m_ObjectHideFlags: 0
@@ -359,6 +443,90 @@ SpriteRenderer:
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
+--- !u!1 &4233280143836799923
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 5600193726614857350}
+ - component: {fileID: 3731523235594691501}
+ m_Layer: 0
+ m_Name: SpotlightsFrontColor
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &5600193726614857350
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4233280143836799923}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 665267706566016202}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &3731523235594691501
+SpriteRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4233280143836799923}
+ m_Enabled: 1
+ m_CastShadows: 0
+ m_ReceiveShadows: 0
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 0
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 0
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 14
+ m_Sprite: {fileID: 1188383036, guid: 3c49c0fa809689d448ee90b3c1143d9f, type: 3}
+ m_Color: {r: 1, g: 1, b: 1, a: 0.5019608}
+ m_FlipX: 0
+ m_FlipY: 0
+ m_DrawMode: 0
+ m_Size: {x: 11.88, y: 16.82}
+ m_AdaptiveModeThreshold: 0.5
+ m_SpriteTileMode: 0
+ m_WasSpriteAssigned: 1
+ m_MaskInteraction: 0
+ m_SpriteSortPoint: 0
--- !u!1 &6247206099220596406
GameObject:
m_ObjectHideFlags: 0
@@ -471,7 +639,8 @@ Transform:
m_LocalPosition: {x: 0, y: 4.33, z: 0}
m_LocalScale: {x: 0.48, y: 0.48, z: 1}
m_ConstrainProportionsScale: 0
- m_Children: []
+ m_Children:
+ - {fileID: 5184237192129329593}
m_Father: {fileID: 6749747454758802588}
m_RootOrder: 9
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -517,7 +686,7 @@ SpriteMask:
m_SortingLayer: 0
m_SortingOrder: 0
m_Sprite: {fileID: 1119035408, guid: 3c49c0fa809689d448ee90b3c1143d9f, type: 3}
- m_MaskAlphaCutoff: 0.106
+ m_MaskAlphaCutoff: 0.5
m_FrontSortingLayerID: 0
m_BackSortingLayerID: 0
m_FrontSortingLayer: 0
@@ -638,7 +807,8 @@ Transform:
m_LocalPosition: {x: 0, y: 1.34, z: 0}
m_LocalScale: {x: 0.5, y: 0.5, z: 1}
m_ConstrainProportionsScale: 0
- m_Children: []
+ m_Children:
+ - {fileID: 5600193726614857350}
m_Father: {fileID: 6749747454758802588}
m_RootOrder: 8
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -684,7 +854,7 @@ SpriteMask:
m_SortingLayer: 0
m_SortingOrder: 0
m_Sprite: {fileID: 1188383036, guid: 3c49c0fa809689d448ee90b3c1143d9f, type: 3}
- m_MaskAlphaCutoff: 0.106
+ m_MaskAlphaCutoff: 0.5
m_FrontSortingLayerID: 0
m_BackSortingLayerID: 0
m_FrontSortingLayer: 0
diff --git a/Assets/Scripts/Games/FrogHop/FrogHop.cs b/Assets/Scripts/Games/FrogHop/FrogHop.cs
index 2afab143c..351667eb9 100644
--- a/Assets/Scripts/Games/FrogHop/FrogHop.cs
+++ b/Assets/Scripts/Games/FrogHop/FrogHop.cs
@@ -36,12 +36,17 @@ namespace HeavenStudio.Games.Loaders
},
new GameAction("count", "Count In")
{
- preFunction = delegate {
+ function = delegate {
var e = eventCaller.currentEntity;
if (eventCaller.gameManager.minigameObj.TryGetComponent(out FrogHop instance)) {
instance.Count(e.beat, e["start"]);
}
},
+ preFunction = delegate {
+ var e = eventCaller.currentEntity;
+ FrogHop.CountVox(e.beat);
+ },
+ preFunctionLength = 0,
parameters = new List()
{
new Param("start", true, "Start Shaking", "Start shaking after the count in."),
@@ -75,8 +80,14 @@ namespace HeavenStudio.Games.Loaders
instance.TwoHop(e.beat, e["spotlights"], e["jazz"]);
}
},
+ preFunction = delegate {
+ var e = eventCaller.currentEntity;
+ FrogHop.TwoHopVox(e.beat, e["enabled"]);
+ },
+ preFunctionLength = 0,
parameters = new List()
{
+ new Param("enabled", true, "Cue Sound", "Choose whether to play the cue sound for this event."),
new Param("spotlights", true, "Automatic Spotlights", "Handles spotlight switching automatically."),
new Param("jazz", false, "Jumpin' Jazz", "Mouth animations will be based on Frog Hop 2."),
},
@@ -90,8 +101,14 @@ namespace HeavenStudio.Games.Loaders
instance.ThreeHop(e.beat, e["spotlights"], e["jazz"]);
}
},
+ preFunction = delegate {
+ var e = eventCaller.currentEntity;
+ FrogHop.ThreeHopVox(e.beat, e["enabled"]);
+ },
+ preFunctionLength = 0,
parameters = new List()
{
+ new Param("enabled", true, "Cue Sound", "Choose whether to play the cue sound for this event."),
new Param("spotlights", true, "Automatic Spotlights", "Handles spotlight switching automatically."),
new Param("jazz", false, "Jumpin' Jazz", "Mouth animations will be based on Frog Hop 2."),
},
@@ -105,13 +122,33 @@ namespace HeavenStudio.Games.Loaders
instance.SpinItBoys(e.beat, e["spotlights"], e["jazz"]);
}
},
+ preFunction = delegate {
+ var e = eventCaller.currentEntity;
+ FrogHop.SpinItBoysVox(e.beat, e["enabled"]);
+ },
+ preFunctionLength = 0,
parameters = new List()
{
+ new Param("enabled", true, "Cue Sound", "Choose whether to play the cue sound for this event."),
new Param("spotlights", true, "Automatic Spotlights", "Handles spotlight switching automatically."),
new Param("jazz", false, "Jumpin' Jazz", "Mouth animations will be based on Frog Hop 2."),
},
defaultLength = 4.0f,
},
+ new GameAction("thankyou", "Thank you... verrry much-a!")
+ {
+ preFunction = delegate {
+ var e = eventCaller.currentEntity;
+ if (eventCaller.gameManager.minigameObj.TryGetComponent(out FrogHop instance)) {
+ instance.ThankYou(e.beat, e["pitched"]);
+ }
+ },
+ parameters = new List()
+ {
+ new Param("pitched", false, "Enable Pitching", "Makes the frog voices pitch up and down based on the song's tempo."),
+ },
+ defaultLength = 6.0f,
+ },
new GameAction("mouthwide", "Open Mouth (Wide)")
{
function = delegate {
@@ -213,7 +250,7 @@ namespace HeavenStudio.Games
double startNoHop = double.MinValue;
double startRegularHop = double.MinValue;
- float globalPitch = 1;
+ static float globalPitch = 1;
bool usesGlobalePitch = false; //oops i spelled global wrong lmao
const int IAAltDownCat = IAMAXCAT;
@@ -254,6 +291,10 @@ namespace HeavenStudio.Games
public void Awake()
{
+ globalPitch = (float)Conductor.instance.GetBpmAtBeat(Conductor.instance.songPositionInBeatsAsDouble) / 156;
+
+ PersistThings(Conductor.instance.songPositionInBeatsAsDouble);
+
AllFrogs.Add(PlayerFrog);
AllFrogs.AddRange(OtherFrogs);
AllFrogs.Add(LeaderFrog);
@@ -268,6 +309,52 @@ namespace HeavenStudio.Games
whoToInputKTB = AllFrogs;
}
+ public override void OnGameSwitch(double beat)
+ {
+ foreach (var entity in GameManager.instance.Beatmap.Entities)
+ {
+ if (entity.beat >= beat && entity.beat <= beat + 1)
+ {
+ if (entity.datamodel == "frogHop/hop")
+ Hop(entity.beat);
+ continue;
+ }
+
+ if (entity.beat >= beat || entity.beat < beat - 4) continue;
+
+ if (entity.datamodel == "frogHop/count")
+ {
+ var e = entity;
+ Count(e.beat, e["start"]);
+ continue;
+ }
+
+ if (entity.beat < beat - 2) continue;
+
+ switch (entity.datamodel)
+ {
+ case "frogHop/twoshake":
+ {
+ var e = entity;
+ TwoHop(e.beat, e["spotlights"], e["jazz"], beat - e.beat);
+ continue;
+ }
+ case "frogHop/threeshake":
+ {
+ var e = entity;
+ ThreeHop(e.beat, e["spotlights"], e["jazz"], beat - e.beat);
+ continue;
+ }
+ case "frogHop/spinitboys":
+ {
+ var e = entity;
+ SpinItBoys(e.beat, e["spotlights"], e["jazz"], beat - e.beat);
+ continue;
+ }
+ }
+ }
+ }
+
public void Update()
{
//voice pitch stuff below
@@ -369,26 +456,32 @@ namespace HeavenStudio.Games
public void Count(double beat, bool start)
{
var actions = new List();
- var sounds = new List();
actions.Add(new(beat + 0.0, delegate { Talk(new List() { LeaderFrog }, "Wide", beat); }));
- sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_COUNT1", beat + 0.0, usesGlobalePitch ? globalPitch : 1));
-
actions.Add(new(beat + 1.0, delegate { Talk(new List() { LeaderFrog }, "Wide", beat); }));
- sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_COUNT2", beat + 1.0, usesGlobalePitch ? globalPitch : 1));
-
actions.Add(new(beat + 2.0, delegate { Talk(new List() { LeaderFrog }, "Wide", beat); }));
- sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_COUNT3", beat + 2.0, usesGlobalePitch ? globalPitch : 1));
-
actions.Add(new(beat + 3.0, delegate { Talk(new List() { LeaderFrog }, "Wide", beat); }));
- sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_COUNT4", beat + 3.0, usesGlobalePitch ? globalPitch : 1));
BeatAction.New(this, actions);
- MultiSound.Play(sounds);
if (start) Hop(beat + 4.0);
}
+ public static void CountVox(double beat)
+ {
+ globalPitch = (float)Conductor.instance.GetBpmAtBeat(Conductor.instance.songPositionInBeatsAsDouble) / 156;
+ bool usesGlobalePitch = GetPitched(Conductor.instance.songPositionInBeatsAsDouble);
+
+ var sounds = new List();
+
+ sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_COUNT1", beat + 0.0, usesGlobalePitch ? globalPitch : 1));
+ sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_COUNT2", beat + 1.0, usesGlobalePitch ? globalPitch : 1));
+ sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_COUNT3", beat + 2.0, usesGlobalePitch ? globalPitch : 1));
+ sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_COUNT4", beat + 3.0, usesGlobalePitch ? globalPitch : 1));
+
+ MultiSound.Play(sounds, forcePlay: true);
+ }
+
public void Hop (double beat)
{
wantHop = beat - 1;
@@ -404,7 +497,7 @@ namespace HeavenStudio.Games
usesGlobalePitch = enabled;
}
- public void TwoHop (double beat, bool spotlights, bool jumpinJazz)
+ public void TwoHop (double beat, bool spotlights, bool jumpinJazz, double start = 0)
{
CueCommon(beat, spotlights);
@@ -412,12 +505,8 @@ namespace HeavenStudio.Games
var sounds = new List();
//call
- actions.Add(new(beat + 0.0, delegate { NPCHop(FrontFrogs); Talk(new List() { LeaderFrog }, "Wide", beat); }));
- actions.Add(new(beat + 0.5, delegate { NPCHop(FrontFrogs, true); Talk(new List() { LeaderFrog }, "Narrow", jumpinJazz ? beat + 2.5 : beat + 1.5); }));
- sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_T_HA", beat, usesGlobalePitch ? globalPitch : 1));
- sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_POP_DEFAULT", beat));
- sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_T_HAAI", beat + 0.5, usesGlobalePitch ? globalPitch : 1));
- sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_POP_HAAI", beat + 0.5));
+ if (start <= 0.0) actions.Add(new(beat + 0.0, delegate { NPCHop(FrontFrogs); Talk(new List() { LeaderFrog }, "Wide", beat); }));
+ if (start <= 0.5) actions.Add(new(beat + 0.5, delegate { NPCHop(FrontFrogs, true); Talk(new List() { LeaderFrog }, "Narrow", jumpinJazz ? beat + 2.5 : beat + 1.5); }));
//response
actions.Add(new(beat + 2.0, delegate { NPCHop(BackFrogs); Talk(BackFrogs, "Wide", beat); }));
@@ -433,7 +522,23 @@ namespace HeavenStudio.Games
MultiSound.Play(sounds);
}
- public void ThreeHop (double beat, bool spotlights, bool jumpinJazz)
+ public static void TwoHopVox(double beat, bool enabled)
+ {
+ if (!enabled) return;
+ globalPitch = (float)Conductor.instance.GetBpmAtBeat(Conductor.instance.songPositionInBeatsAsDouble) / 156;
+ bool usesGlobalePitch = GetPitched(Conductor.instance.songPositionInBeatsAsDouble);
+
+ var sounds = new List();
+
+ sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_T_HA", beat, usesGlobalePitch ? globalPitch : 1));
+ sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_POP_DEFAULT", beat));
+ sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_T_HAAI", beat + 0.5, usesGlobalePitch ? globalPitch : 1));
+ sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_POP_HAAI", beat + 0.5));
+
+ MultiSound.Play(sounds, forcePlay: true);
+ }
+
+ public void ThreeHop (double beat, bool spotlights, bool jumpinJazz, double start = 0)
{
CueCommon(beat, spotlights);
@@ -441,15 +546,9 @@ namespace HeavenStudio.Games
var sounds = new List();
//call
- actions.Add(new(beat + 0.0, delegate { NPCHop(FrontFrogs); Talk(new List() { LeaderFrog }, "Narrow", jumpinJazz ? beat + 2.5 : beat); }));
- actions.Add(new(beat + 0.5, delegate { NPCHop(FrontFrogs); if (!jumpinJazz) Talk(new List() { LeaderFrog }, "Narrow", beat); }));
- actions.Add(new(beat + 1.0, delegate { NPCHop(FrontFrogs, true); if (!jumpinJazz) Talk(new List() { LeaderFrog }, "Narrow", beat); }));
- sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_T_HAI", beat, usesGlobalePitch ? globalPitch : 1));
- sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_POP_DEFAULT", beat));
- sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_T_HAI", beat + 0.5, usesGlobalePitch ? globalPitch : 1));
- sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_POP_DEFAULT", beat + 0.5));
- sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_T_HAI", beat + 1.0, usesGlobalePitch ? globalPitch : 1));
- sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_POP_DEFAULT", beat + 1.0));
+ if (start <= 0.0) actions.Add(new(beat + 0.0, delegate { NPCHop(FrontFrogs); Talk(new List() { LeaderFrog }, "Narrow", jumpinJazz ? beat + 2.5 : beat); }));
+ if (start <= 0.5) actions.Add(new(beat + 0.5, delegate { NPCHop(FrontFrogs); if (!jumpinJazz) Talk(new List() { LeaderFrog }, "Narrow", beat); }));
+ if (start <= 1.0) actions.Add(new(beat + 1.0, delegate { NPCHop(FrontFrogs, true); if (!jumpinJazz) Talk(new List() { LeaderFrog }, "Narrow", beat); }));
//response
actions.Add(new(beat + 2.0, delegate { NPCHop(BackFrogs); Talk(BackFrogs, "Narrow", jumpinJazz ? beat + 4.5 : beat); }));
@@ -468,7 +567,25 @@ namespace HeavenStudio.Games
MultiSound.Play(sounds);
}
- public void SpinItBoys (double beat, bool spotlights, bool jumpinJazz)
+ public static void ThreeHopVox(double beat, bool enabled)
+ {
+ if (!enabled) return;
+ globalPitch = (float)Conductor.instance.GetBpmAtBeat(Conductor.instance.songPositionInBeatsAsDouble) / 156;
+ bool usesGlobalePitch = GetPitched(Conductor.instance.songPositionInBeatsAsDouble);
+
+ var sounds = new List();
+
+ sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_T_HAI", beat, usesGlobalePitch ? globalPitch : 1));
+ sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_POP_DEFAULT", beat));
+ sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_T_HAI", beat + 0.5, usesGlobalePitch ? globalPitch : 1));
+ sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_POP_DEFAULT", beat + 0.5));
+ sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_T_HAI", beat + 1.0, usesGlobalePitch ? globalPitch : 1));
+ sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_POP_DEFAULT", beat + 1.0));
+
+ MultiSound.Play(sounds, forcePlay: true);
+ }
+
+ public void SpinItBoys (double beat, bool spotlights, bool jumpinJazz, double start = 0)
{
CueCommon(beat, spotlights);
@@ -476,12 +593,8 @@ namespace HeavenStudio.Games
var sounds = new List();
//call
- actions.Add(new(beat + 0.0, delegate { NPCCharge(FrontFrogs); Talk(new List() { LeaderFrog }, "Narrow", beat); }));
- actions.Add(new(beat + 1.0, delegate { NPCSpin(FrontFrogs); Talk(new List() { LeaderFrog }, "Wide", beat); }));
- sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_T_KURU_1", beat, usesGlobalePitch ? globalPitch : 1));
- sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_T_KURU_2", beat + 0.5, usesGlobalePitch ? globalPitch : 1));
- sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_T_LIN", beat + 1.0, usesGlobalePitch ? globalPitch : 1));
- sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_T_SPIN", beat + 1.0));
+ if (start <= 0.0) actions.Add(new(beat + 0.0, delegate { NPCCharge(FrontFrogs); Talk(new List() { LeaderFrog }, "Narrow", beat); }));
+ if (start <= 1.0) actions.Add(new(beat + 1.0, delegate { NPCSpin(FrontFrogs); Talk(new List() { LeaderFrog }, "Wide", beat); }));
//response
actions.Add(new(beat + 2.0, delegate { NPCCharge(BackFrogs); Talk(BackFrogs, "Narrow", jumpinJazz ? beat + 3.0 : beat); }));
@@ -499,6 +612,22 @@ namespace HeavenStudio.Games
MultiSound.Play(sounds);
}
+ public static void SpinItBoysVox(double beat, bool enabled)
+ {
+ if (!enabled) return;
+ globalPitch = (float)Conductor.instance.GetBpmAtBeat(Conductor.instance.songPositionInBeatsAsDouble) / 156;
+ bool usesGlobalePitch = GetPitched(Conductor.instance.songPositionInBeatsAsDouble);
+
+ var sounds = new List();
+
+ sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_T_KURU_1", beat, usesGlobalePitch ? globalPitch : 1));
+ sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_T_KURU_2", beat + 0.5, usesGlobalePitch ? globalPitch : 1));
+ sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_T_LIN", beat + 1.0, usesGlobalePitch ? globalPitch : 1));
+ sounds.Add(new MultiSound.Sound("frogHop/SE_NTR_FROG_EN_T_SPIN", beat + 1.0));
+
+ MultiSound.Play(sounds, forcePlay: true);
+ }
+
public void CueCommon(double beat, bool spotlights = true)
{
startBackHop = beat;
@@ -527,6 +656,31 @@ namespace HeavenStudio.Games
SpotlightBack.SetActive(back);
}
+ public void ThankYou(double beat, bool stretchToTempo)
+ {
+ float pitch = stretchToTempo ? globalPitch * Conductor.instance.TimelinePitch : 1;
+ double offset = stretchToTempo ? (0.17 / (Conductor.instance.GetBpmAtBeat(beat) / 98)) : 0.17;
+
+ MultiSound.Play(new MultiSound.Sound[]
+ {
+ new MultiSound.Sound("frogHop/thankYou", beat, pitch: pitch, offset: offset),
+ });
+
+ var actions = new List();
+ var BlueFrog = new List() { SingerFrog };
+ double stretch = stretchToTempo ? 1 : 1 / (globalPitch * Conductor.instance.TimelinePitch);
+
+ actions.Add(new(beat, delegate { BopAnimation(BlueFrog); }));
+
+ actions.Add(new(beat + (0.00 / stretch), delegate { Talk(BlueFrog, "Narrow", beat); })); //"thank"
+ actions.Add(new(beat + (0.50 / stretch), delegate { Talk(BlueFrog, "Narrow", beat); })); //"you"
+ actions.Add(new(beat + (2.00 / stretch), delegate { Talk(BlueFrog, "Wide", beat + (3.75 / stretch)); })); //"verrry"
+ actions.Add(new(beat + (4.25 / stretch), delegate { Talk(BlueFrog, "Narrow", beat); })); //"much"
+ actions.Add(new(beat + (5.00 / stretch), delegate { Talk(BlueFrog, "Narrow", beat); })); //"-a!"
+
+ BeatAction.New(this, actions);
+ }
+
public void Talk(List FrogsToTalk, string syllable, double animEnd)
{
foreach (var a in FrogsToTalk) { a.Talk(syllable, animEnd); }
@@ -643,11 +797,41 @@ namespace HeavenStudio.Games
{
if (whiff) ScoreMiss(0.5f);
if (sweat) PlayerFrog.Sweat();
- foreach (var a in OtherFrogs) { a.Glare(); }
+ else { foreach (var a in OtherFrogs) { a.Glare(); } }
}
public void Nothing(PlayerActionEvent caller) { }
+ private void PersistThings(double beat)
+ {
+ var allEvents = GameManager.instance.Beatmap.Entities.FindAll(e => e.datamodel.Split('/')[0] is "frogHop");
+ var eventsBefore = allEvents.FindAll(e => e.beat < beat);
+
+ var lastPersistEvent = eventsBefore.FindLast(e => e.datamodel == "frogHop/pitching");
+ if (lastPersistEvent != null)
+ {
+ var e = lastPersistEvent;
+ Pitching(e["enabled"]);
+ }
+ }
+
+ public static bool GetPitched(double beat)
+ {
+ var allEvents = GameManager.instance.Beatmap.Entities.FindAll(e => e.datamodel.Split('/')[0] is "frogHop");
+ var eventsBefore = allEvents.FindAll(e => e.beat < beat);
+
+ bool isPitched = false;
+
+ var lastPersistEvent = eventsBefore.FindLast(e => e.datamodel == "frogHop/pitching");
+ if (lastPersistEvent != null)
+ {
+ var e = lastPersistEvent;
+ isPitched = e["enabled"];
+ }
+
+ return isPitched;
+ }
+
#endregion
}
}
\ No newline at end of file