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