From d00cc849a0329dcc988e51416bb8ac19f29e6f01 Mon Sep 17 00:00:00 2001 From: AstrlJelly Date: Mon, 18 Sep 2023 23:31:10 -0400 Subject: [PATCH] unconvert karateman from karateMan, bg finally works well. bg ALMOST finally works i'll be doing the fx stuff after, and ill combine it with the flow block --- Assets/Resources/Games/karateman.prefab | 9 +- .../karateMan/offbeatLightbulbNtrOut.ogg | Bin 0 -> 36190 bytes .../karateMan/offbeatLightbulbNtrOut.ogg.meta | 22 + Assets/Scripts/Games/KarateMan/KarateMan.cs | 408 +++++++++--------- .../Scripts/Games/KarateMan/KarateManJoe.cs | 32 +- .../KarateMan/KarateManNoriController.cs | 6 +- .../Scripts/Games/KarateMan/KarateManPot.cs | 103 +++-- 7 files changed, 289 insertions(+), 291 deletions(-) create mode 100644 Assets/Resources/Sfx/games/karateMan/offbeatLightbulbNtrOut.ogg create mode 100644 Assets/Resources/Sfx/games/karateMan/offbeatLightbulbNtrOut.ogg.meta diff --git a/Assets/Resources/Games/karateman.prefab b/Assets/Resources/Games/karateman.prefab index 81a327cff..cd7073306 100644 --- a/Assets/Resources/Games/karateman.prefab +++ b/Assets/Resources/Games/karateman.prefab @@ -62121,6 +62121,7 @@ MonoBehaviour: startBeat: 0 type: 0 path: 1 + hitSfxOverride: Shadow: {fileID: 2136808730019920255} ShadowInstance: {fileID: 0} HitMark: {fileID: 5218911297968347512} @@ -62160,6 +62161,7 @@ MonoBehaviour: - {r: 1, g: 1, b: 1, a: 0} - {r: 0, g: 0, b: 0, a: 0} KickBarrelContent: 0 + ShouldGlow: 0 OnHitExpression: 0 comboId: -1 HitPosition: @@ -97616,13 +97618,6 @@ MonoBehaviour: BGRadial: {fileID: 8238140095837895901} Wind: {fileID: 9003203273337395302} Effects: [] - EffectsGO: [] - SnowEffect: {fileID: 6887086164110906535} - SnowEffectGO: {fileID: 1216083719847348373} - FireEffect: {fileID: 5127881687583584282} - FireEffectGO: {fileID: 3592020714774141813} - RainEffect: {fileID: 2673878087330023132} - RainEffectGO: {fileID: 3977551198845255891} --- !u!1 &6574514768376321096 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Resources/Sfx/games/karateMan/offbeatLightbulbNtrOut.ogg b/Assets/Resources/Sfx/games/karateMan/offbeatLightbulbNtrOut.ogg new file mode 100644 index 0000000000000000000000000000000000000000..257073da7043b15d9c0c0b8533eb13df37917a05 GIT binary patch literal 36190 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 !a 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­=Ye5wf4YszzGCnI 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 literal 0 HcmV?d00001 diff --git a/Assets/Resources/Sfx/games/karateMan/offbeatLightbulbNtrOut.ogg.meta b/Assets/Resources/Sfx/games/karateMan/offbeatLightbulbNtrOut.ogg.meta new file mode 100644 index 000000000..c597a3126 --- /dev/null +++ b/Assets/Resources/Sfx/games/karateMan/offbeatLightbulbNtrOut.ogg.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 5e6b77f98971e73459639530f1524456 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Games/KarateMan/KarateMan.cs b/Assets/Scripts/Games/KarateMan/KarateMan.cs index f73f57073..f3e7852b3 100644 --- a/Assets/Scripts/Games/KarateMan/KarateMan.cs +++ b/Assets/Scripts/Games/KarateMan/KarateMan.cs @@ -14,45 +14,6 @@ namespace HeavenStudio.Games.Loaders { public static Minigame AddGame(EventCaller eventCaller) { - /* what the fuck - RiqEntity NameUpdater(string datamodel, RiqEntity entity) - { - if (entity.datamodel.Split('/')[0] == "karateMan") - { - Debug.Log(datamodel); - // this was the only way i could figure out how to convert from that freaky format into an actual color :( - // if (entity.dynamicData.ContainsKey("colorA")) { - // for (int i = 0; i < (entity.dynamicData.ContainsKey("colorB") ? 4 : 1); i++) - // { - // string whichColor = i switch { - // 0 => "colorA", - // 1 => "colorB", - // 2 => "colorC", - // _ => "colorD", - // }; - // string[] tempValues = entity[whichColor].ToString().Split(": "); - // List values = new(); - // foreach (string value in tempValues) - // { - // string temp = string.Join("", value.Where(x => x == '.' || char.IsDigit(x))); - // if (temp != string.Empty) values.Add(float.Parse(temp)); - // } - - // entity[whichColor] = new Color(values[0], values[1], values[2]); - // } - // } - - entity.datamodel = entity.datamodel.Remove(0, 9); - entity.datamodel = "karateMan" + entity.datamodel; - return entity; - } else if (entity.datamodel == "gameManager/switchGame/karateMan") { - entity.datamodel = "gameManager/switchGame/karateMan"; - } - return null; - } - RiqBeatmap.OnUpdateEntity += NameUpdater; - */ - RiqEntity WarningUpdater(string datamodel, RiqEntity entity) { if (datamodel == "karateman/hitX") @@ -70,50 +31,53 @@ namespace HeavenStudio.Games.Loaders entity.dynamicData.Remove("type"); - entity.datamodel = "karateMan/warnings"; + entity.datamodel = "karateman/warnings"; return entity; } return null; } RiqBeatmap.OnUpdateEntity += WarningUpdater; - RiqEntity BackgroundUpdater(string datamodel, RiqEntity entity) - { - if (datamodel == "karateman/set background effects") - { + // future astrl (when she's done with the new background stuff) : + // MAKE THIS WORK! it's just a matter of transferring over the old values to the new + // RiqEntity BackgroundUpdater(string datamodel, RiqEntity entity) + // { + // if (datamodel == "karateman/set background effects") + // { - return entity; - } - return null; - } - //RiqBeatmap.OnUpdateEntity += BackgroundUpdater; + // return entity; + // } + // return null; + // } + // RiqBeatmap.OnUpdateEntity += BackgroundUpdater; - RiqEntity GameCapitalizer(string datamodel, RiqEntity entity) - { - if (datamodel.Split('/')[0] == "karateman") - { - string name = datamodel.Split('/')[1]; - entity.datamodel = "karateMan/" + name; - var tempData = entity.dynamicData.ToDictionary(x => x.Key); - foreach ((string key, dynamic item) in tempData) - { - if (item.GetType() == typeof(Newtonsoft.Json.Linq.JObject)) { - entity.dynamicData[key] = new Color((float)item["r"], (float)item["g"], (float)item["b"]); - } - Debug.Log(key + ", " + item); - } - entity.version = 1; - return entity; - } else if (datamodel == "gameManager/switchGame/karateman") { - entity.datamodel = "gameManager/switchGame/karateMan"; - return entity; - } - return null; - } - RiqBeatmap.OnUpdateEntity += GameCapitalizer; + // RiqEntity GameCapitalizer(string datamodel, RiqEntity entity) + // { + // if (datamodel.Split('/')[0] == "karateman") + // { + // string name = datamodel.Split('/')[1]; + // entity.datamodel = "karateman/" + name; + // var tempData = entity.dynamicData.ToDictionary(x => x.Key); + // foreach ((string key, dynamic item) in tempData) + // { + // if (item.GetType() == typeof(Newtonsoft.Json.Linq.JObject)) { + // entity.dynamicData[key] = new Color((float)item["r"], (float)item["g"], (float)item["b"]); + // } + // Debug.Log(key + ", " + item); + // } + // entity.version = 1; - return new Minigame("karateMan", "Karate Man", "fbca3e", false, false, new List() + // return entity; + // } else if (datamodel == "gameManager/switchGame/karateman") { + // entity.datamodel = "gameManager/switchGame/karateman"; + // return entity; + // } + // return null; + // } + // RiqBeatmap.OnUpdateEntity += GameCapitalizer; + + return new Minigame("karateman", "Karate Man", "fbca3e", false, false, new List() { new GameAction("bop", "Bop") { @@ -172,18 +136,19 @@ namespace HeavenStudio.Games.Loaders { function = delegate { var e = eventCaller.currentEntity; - KarateMan.instance.Kick(e.beat, e["toggle"], e["type"], e["pitchVoice"], e["forcePitch"], e["cutOut"], e["disableVoice"]); + KarateMan.instance.Kick(e.beat, e["toggle"], e["shouldGlow"], e["type"], e["pitchVoice"], e["forcePitch"], e["cutOut"], e["disableVoice"]); KarateMan.KickSFX(); }, inactiveFunction = delegate { var e = eventCaller.currentEntity; - KarateMan.QueueKick(e.beat, e["toggle"], e["type"], e["pitchVoice"], e["forcePitch"], e["cutOut"], e["disableVoice"]); + KarateMan.QueueKick(e.beat, e["toggle"], e["shouldGlow"], e["type"], e["pitchVoice"], e["forcePitch"], e["cutOut"], e["disableVoice"]); KarateMan.KickSFX(); }, defaultLength = 4f, parameters = new List() { new Param("toggle", false, "Contains Ball", "Barrel contains a ball instead of a bomb?"), + new Param("shouldGlow", true, "Bomb Glow", "Should Joe be lit up by the bomb in the barrel?"), new Param("type", KarateMan.KarateManFaces.Smirk, "Success Expression", "The facial expression to set Joe to on hit"), new Param("pitchVoice", false, "Pitch Voice", "Pitch the voice of this cue?", new List() { @@ -265,17 +230,22 @@ namespace HeavenStudio.Games.Loaders defaultLength = 0.5f, parameters = new List() { + new Param("fxType", KarateMan.BackgroundFXType.None, "FX Type", "The background effect to be displayed"), new Param("type", KarateMan.NoriMode.None, "Flow Bar type", "The type of Flow bar to use"), new Param("toggle", true, "Enable Combos", "Allow the player to combo? (Contextual combos will still be allowed even when off)"), - new Param("toggle2", true, "Enable Kicks", "Allow the player to kick? (Contextual kicks will still be allowed even when off)"), + new Param("toggle2", true, "Enable Kicks (INIT ONLY )", "Allow the player to kick? (Contextual kicks will still be allowed even when off)"), }, }, new GameAction("background appearance", "Background Appearance") { function = delegate { var e = eventCaller.currentEntity; - KarateMan.instance.BackgroundColor(e.beat, e.length, e["presetBg"], e["startColor"], e["endColor"], e["bgEase"], e["shadowType"], e["shadowStart"], e["shadowEnd"]); - KarateMan.instance.SetBgFx(e.beat, e.length, e["fxType"], e["textureType"], e["autoColor"], e["startTexture"], e["endTexture"], e["textureEase"]); + KarateMan.instance.BackgroundColor( + e.beat, e.length, + e["presetBg"], e["startColor"], e["endColor"], e["bgEase"], + e["shadowType"], e["shadowStart"], e["shadowEnd"], + e["textureType"], e["autoColor"], e["startTexture"], e["endTexture"] + ); }, defaultLength = 0.5f, resizable = true, @@ -285,31 +255,29 @@ namespace HeavenStudio.Games.Loaders { new Param.CollapseParam(x => (int)x == (int)KarateMan.BackgroundType.Custom, new string[] { "startColor", "endColor" }) }), - new Param("startColor", new Color(0.985f, 0.79f, 0.243f), "Start BG Color", "The background color to use when background type is set to Custom"), - new Param("endColor", new Color(0.985f, 0.79f, 0.243f), "End BG Color", "When using the Fade background effect, make filter colour fade to this colour"), + new Param("startColor", new Color(0.985f, 0.79f, 0.243f), "Start BG Color", "The background color to start with"), + new Param("endColor", new Color(0.985f, 0.79f, 0.243f), "End BG Color", "The background color to end with"), new Param("bgEase", Util.EasingFunction.Ease.Instant, "BG Color Ease", "Ease to use when fading color", new List() { //new Param.CollapseParam(x => (int)x != (int)Util.EasingFunction.Ease.Instant, new string[] { "startColor" }) }), - new Param("shadowType", KarateMan.ShadowType.Tinted, "Shadow Type", "The shadow type. If Tinted doesn't work with your background color try Custom"), - new Param("shadowStart", new Color(), "Start Shadow Color", "The shadow color to use when shadow type is set to Custom. When fading the background colour shadows fade to this color"), - new Param("shadowEnd", new Color(), "End Shadow Color", "The shadow color to use when shadow type is set to Custom. When fading the background colour shadows fade to this color"), + new Param("shadowType", KarateMan.ShadowType.Tinted, "Shadow Type", "The shadow type. If Tinted doesn't work with your background color try Custom", new List() + { + new Param.CollapseParam(x => (int)x == (int)KarateMan.ShadowType.Custom, new string[] { "shadowStart", "shadowEnd" }), + }), + new Param("shadowStart", new Color(), "Start Shadow Color", "The shadow color to start with"), + new Param("shadowEnd", new Color(), "End Shadow Color", "The shadow color to end with"), - new Param("fxType", KarateMan.BackgroundFXType.None, "FX Type", "The background effect to be displayed"), new Param("textureType", KarateMan.BackgroundTextureType.Plain, "Texture", "The type of background texture to use", new List() { new Param.CollapseParam(x => (int)x != (int)KarateMan.BackgroundTextureType.Plain, new string[] { "startTexture", "endTexture" }) }), - new Param("autoColor", true, "Use BG Color For Texture", "Use a tint of the background color for the ", new List() + new Param("autoColor", true, "Use BG Color For Texture", "Use a tint of the background color for the texture?", new List() { //new Param.CollapseParam(x => (int)x != (int)KarateMan.ShadowType.Tinted, new string[] { "startTexture", "endTexture" }) }), - new Param("startTexture", new Color(), "Start Filter Color", "The filter color to use when color filter type is set to Custom"), - new Param("endTexture", new Color(), "End Filter Color", "When using the Fade background effect, make filter colour fade to this colour"), - new Param("textureEase", Util.EasingFunction.Ease.Instant, "Texture Color Ease", "Ease to use when fading color", new List() - { - //new Param.CollapseParam(x => (int)x != (int)Util.EasingFunction.Ease.Instant, new string[] { "startTexture" }) - }), + new Param("startTexture", new Color(), "Start Texture Color", "The texture color to start with"), + new Param("endTexture", new Color(), "End Texture Color", "The texture color to end with"), }, }, // new GameAction("set background effects", "Background Appearance (OLD)") @@ -352,12 +320,13 @@ namespace HeavenStudio.Games.Loaders { function = delegate { var e = eventCaller.currentEntity; - KarateMan.instance.SetParticleEffect(e.beat, e["type"], e["valA"], e["valB"]); + KarateMan.instance.SetParticleEffect(e.beat, e["type"], e["instant"], e["valA"], e["valB"]); }, defaultLength = 0.5f, parameters = new List() { new Param("type", KarateMan.ParticleType.None, "Particle Type", "The type of particle effect to spawn. Using \"None\" will stop all effects"), + new Param("instant", false, "Instant", "Start/Stop particles instantly"), new Param("valA", new EntityTypes.Float(0f, 64f, 1f), "Wind Strength", "The strength of the particle wind"), new Param("valB", new EntityTypes.Float(1f, 16f, 1f), "Particle Intensity", "The intensity of the particle effect") }, @@ -372,6 +341,15 @@ namespace HeavenStudio.Games.Loaders new Param("type", KarateMan.KarateManFaces.Normal, "Facial Expression", "The facial expression to force Joe to. Special moves may override this") } }, + + // blah blah blah compatibility + new GameAction("hitX", "Old Warning (you shouldn't see this.)") + { + parameters = new List(){ + new Param("whichWarning", KarateMan.HitThree.HitThree, "Which Warning", "The warning text to show and the sfx to play"), + }, + hidden = true, + } }, new List() {"agb", "ntr", "rvl", "ctr", "pco", "normal"}, "karate", "en", @@ -386,6 +364,7 @@ namespace HeavenStudio.Games using Scripts_KarateMan; public class KarateMan : Minigame { + #region Queued Objects static List queuedObjects = new(); static List queuedBulbs = new(); struct QueuedObject @@ -407,10 +386,11 @@ namespace HeavenStudio.Games public bool cutOut; public bool noVoice; public bool ball; + public bool glow; } + #endregion - public static KarateMan instance; - + #region Enums public enum HitType { Pot = 0, @@ -458,8 +438,7 @@ namespace HeavenStudio.Games { None, Sunburst, - Rings, - Fade + Rings } public enum BackgroundTextureType @@ -510,6 +489,7 @@ namespace HeavenStudio.Games Mania, ManiaHorizontal, } + #endregion public static bool IsComboEnable = true; //only stops Out combo inputs, this basically makes combo contextual public bool IsNoriActive { get { return Nori.MaxNori > 0; } } @@ -523,6 +503,7 @@ namespace HeavenStudio.Games [Header("Camera Positions")] public Transform[] CameraPosition; Vector3 cameraPosition; + // for future astrl : make these not static (use a RiqEntity check on game switch) static double startCamSpecial = double.MinValue; static double wantsReturn = double.MinValue; static float cameraReturnLength = 0f; @@ -548,15 +529,15 @@ namespace HeavenStudio.Games const float hitVoiceOffset = 0.042f; [Header("Backgrounds")] - // new bg fading + // 0 = bg color, 1 = shadow color, 2 = filter color private double[] colorStartBeats = new double[3] { -1, -1, -1 }; private float[] colorLengths = new float[3]; - private Color[] colorStarts = new Color[3]; - private Color[] colorEnds = new Color[3]; // 0 = bg color, 1 = shadow color, 2 = filter color + private Color[] colorStarts; + private Color[] colorEnds; private Util.EasingFunction.Ease[] colorEases = new Util.EasingFunction.Ease[3]; public int currentBgEffect = (int) BackgroundFXType.None; @@ -569,30 +550,20 @@ namespace HeavenStudio.Games SpriteRenderer bgBloodRenderer; public GameObject BGRadial; SpriteRenderer bgRadialRenderer; - SpriteRenderer[] bgFxRenderers; Animator bgEffectAnimator; SpriteRenderer bgEffectSpriteRenderer; [Header("Particles")] //wind public WindZone Wind; - public ParticleSystem[] Effects; - public GameObject[] EffectsGO; - //snow - public ParticleSystem SnowEffect; - public GameObject SnowEffectGO; - //fire - public ParticleSystem FireEffect; - public GameObject FireEffectGO; - //rain - public ParticleSystem RainEffect; - public GameObject RainEffectGO; [Header("Unloaded Game Calls")] public List voiceEntities = new(); public List hitVoiceEntities = new(); + public static KarateMan instance; + private void Awake() { instance = this; @@ -602,6 +573,17 @@ namespace HeavenStudio.Games bgGradientRenderer = BGGradient.GetComponent(); bgBloodRenderer = BGBlood.GetComponent(); bgRadialRenderer = BGRadial.GetComponent(); + + colorEnds = + colorStarts = new Color[] { + BackgroundColors[0], + ShadowColors[0], + new(), + }; + + if (!Conductor.instance.NotStopped()) { + OnGameSwitch(Conductor.instance.songPositionInBeatsAsDouble); + } } public override void OnGameSwitch(double beat) @@ -618,7 +600,7 @@ namespace HeavenStudio.Games } if (queuedKicks.Count > 0) { - foreach (var qObj in queuedKicks) { Kick(qObj.beat, qObj.ball, qObj.expression, qObj.pitchVoice, qObj.forcePitch, qObj.cutOut, qObj.noVoice); } + foreach (var qObj in queuedKicks) { Kick(qObj.beat, qObj.ball, qObj.glow, qObj.expression, qObj.pitchVoice, qObj.forcePitch, qObj.cutOut, qObj.noVoice); } queuedKicks.Clear(); } @@ -627,7 +609,7 @@ namespace HeavenStudio.Games queuedCombos.Clear(); } - List prevEntities = GameManager.instance.Beatmap.Entities.FindAll(c => c.datamodel.Split(0) == "karateMan"); + List prevEntities = GameManager.instance.Beatmap.Entities.FindAll(c => c.datamodel.Split(0) == "karateman"); RiqEntity voice = prevEntities.FindLast(c => c.beat < beat && c.datamodel.Split(1) == "warnings"); if (wordClearTime > beat && voice != null) { @@ -636,12 +618,19 @@ namespace HeavenStudio.Games } // init colors - RiqEntity bg = prevEntities.FindLast(c => c.beat < beat && c.datamodel.Split(1) == "set background effects"); + RiqEntity bg = prevEntities.FindLast(c => c.beat < beat && c.datamodel.Split(1) == "background appearance"); RiqEntity obj = prevEntities.FindLast(c => c.beat < beat && c.datamodel.Split(1) == "set object colors"); if (bg != null) { - BackgroundColor(bg.beat, bg.length, bg["presetBg"], bg["startColor"], bg["endColor"], bg["bgEase"], bg["shadowType"], bg["shadowStart"], bg["shadowEnd"]); - SetBgFx(bg.beat, bg.length, bg["fxType"], bg["textureType"], bg["autoColor"], bg["startTexture"], bg["endTexture"], bg["textureEase"]); + BackgroundColor( + bg.beat, bg.length, + bg["presetBg"], bg["startColor"], bg["endColor"], bg["bgEase"], + bg["shadowType"], bg["shadowStart"], bg["shadowEnd"], + bg["textureType"], bg["autoColor"], bg["startTexture"], bg["endTexture"] + ); + } else { + var c = new Color(); + BackgroundColor(0, 0, 0, c, c, (int)Util.EasingFunction.Ease.Instant, 0, c, c, 0, true, c, c); } if (obj != null) { @@ -660,6 +649,11 @@ namespace HeavenStudio.Games hitVoiceEntities = prevEntities.FindAll(c => c.beat > beat && (c.datamodel.Split(1) is "warnings" && c["whichWarning"] <= (int)HitThree.HitFour)); } + public override void OnStop(double beat) + { + OnGameSwitch(beat); + } + public override void OnPlay(double beat) { OnGameSwitch(beat); @@ -679,7 +673,7 @@ namespace HeavenStudio.Games private void Update() { var cond = Conductor.instance; - + switch (currentBgEffect) { case (int) BackgroundFXType.Sunburst: @@ -693,8 +687,7 @@ namespace HeavenStudio.Games break; } - if (cond.songPositionInBeatsAsDouble >= wordClearTime) - { + if (cond.songPositionInBeatsAsDouble >= wordClearTime) { Word.Play("NoPose"); } @@ -731,7 +724,8 @@ namespace HeavenStudio.Games cameraPosition = CameraPosition[0].position; } - //BackgroundColorUpdate(); + BackgroundColorUpdate(); + Debug.Log(colorEnds[0]); GameCamera.additionalPosition = cameraPosition - GameCamera.defaultPosition; BGEffect.transform.position = new Vector3(GameCamera.instance.transform.position.x, GameCamera.instance.transform.position.y, 0); @@ -744,14 +738,20 @@ namespace HeavenStudio.Games if (queuedBulbs.Count > 0) queuedBulbs.Clear(); if (queuedKicks.Count > 0) queuedKicks.Clear(); if (queuedCombos.Count > 0) queuedCombos.Clear(); + startCamSpecial = double.MinValue; + wantsReturn = double.MinValue; + cameraReturnLength = 0f; + cameraAngle = CameraAngle.Normal; } } + private Color TintColor(Color color) => Color.LerpUnclamped(color, new Color(195 / 255f, 48 / 255f, 2 / 255f), 0.45f); + static List allHits = new List(); static List allEnds = new List(); public static int CountHitsToEnd(double fromBeat) { - allHits = EventCaller.GetAllInGameManagerList("karateMan", new string[] { "hit", "bulb", "kick", "combo" }); + allHits = EventCaller.GetAllInGameManagerList("karateman", new string[] { "hit", "bulb", "kick", "combo" }); allEnds = EventCaller.GetAllInGameManagerList("gameManager", new string[] { "switchGame", "end" }); allHits.Sort((x, y) => x.beat.CompareTo(y.beat)); @@ -823,8 +823,8 @@ namespace HeavenStudio.Games string number = ((HitThree)type).ToString()[3..]; number = char.ToLower(number[0]).ToString() + number[1..]; var sounds = new MultiSound.Sound[] { - new MultiSound.Sound($"karateMan/{(type == (int)HitThree.HitThreeAlt ? "hitAlt" : "hit")}", beat + 0.5f, offset: hitVoiceOffset), - new MultiSound.Sound($"karateMan/{number}", beat + 1f), + new MultiSound.Sound($"karateman/{(type == (int)HitThree.HitThreeAlt ? "hitAlt" : "hit")}", beat + 0.5f, offset: hitVoiceOffset), + new MultiSound.Sound($"karateman/{number}", beat + 1f), }; if (pitchVoice) { foreach (var sound in sounds) { @@ -843,7 +843,7 @@ namespace HeavenStudio.Games public static void CreateItemSFX(double beat, int type, bool muteSound = false) { - if (!muteSound) SoundByte.PlayOneShotGame($"karateMan/{(beat % 1.0 == 0.5 ? $"offbeatObject" : "object")}Out", forcePlay: true); + if (!muteSound) SoundByte.PlayOneShotGame($"karateman/{(beat % 1.0 == 0.5 ? $"offbeatObject" : "object")}Out", forcePlay: true); } public static void CreateBulbSFX(double beat, int type, bool muteSound = false) @@ -853,8 +853,7 @@ namespace HeavenStudio.Games (int)LightBulbType.Yellow => "LightbulbNtr", _ => "Lightbulb", }; - Debug.Log(obj); - if (!muteSound) SoundByte.PlayOneShotGame($"karateMan/{(beat % 1.0 == 0.5 ? $"offbeat{obj}" : obj.ToLower())}Out", forcePlay: true); + if (!muteSound) SoundByte.PlayOneShotGame($"karateman/{(beat % 1.0 == 0.5 ? $"offbeat{obj}" : obj.ToLower())}Out", forcePlay: true); } public static void QueueItem(double beat, int type, int expression) @@ -918,7 +917,7 @@ namespace HeavenStudio.Games (int)LightBulbType.Yellow => "LightbulbNtr", _ => "Lightbulb", }; - var mobj = CreateItemInstance(beat, "Item01", expression, KarateManPot.ItemType.Bulb, hitSfxOverride: $"karateMan/{obj}Hit"); + var mobj = CreateItemInstance(beat, "Item01", expression, KarateManPot.ItemType.Bulb, hitSfxOverride: $"karateman/{obj}Hit"); if (type == (int) LightBulbType.Custom) { mobj.GetComponent().SetBulbColor(c); @@ -929,7 +928,7 @@ namespace HeavenStudio.Games public static void ComboSFX() { - SoundByte.PlayOneShotGame("karateMan/barrelOutCombos", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/barrelOutCombos", forcePlay: true); } public static void QueueCombo(double beat, int expression, bool pitchVoice, float forcePitch, bool cutOut, bool noVoice) @@ -961,12 +960,12 @@ namespace HeavenStudio.Games if (noVoice) return; List sounds = new() { - new MultiSound.Sound("karateMan/punchy1", beat + 1f), - new MultiSound.Sound("karateMan/punchy2", beat + 1.25f), - new MultiSound.Sound("karateMan/punchy3", beat + 1.5f), - new MultiSound.Sound("karateMan/punchy4", beat + 1.75f), - new MultiSound.Sound("karateMan/ko", beat + 2f), - new MultiSound.Sound("karateMan/pow", beat + 2.5f) + new MultiSound.Sound("karateman/punchy1", beat + 1f), + new MultiSound.Sound("karateman/punchy2", beat + 1.25f), + new MultiSound.Sound("karateman/punchy3", beat + 1.5f), + new MultiSound.Sound("karateman/punchy4", beat + 1.75f), + new MultiSound.Sound("karateman/ko", beat + 2f), + new MultiSound.Sound("karateman/pow", beat + 2.5f) }; if (pitchVoice) { @@ -988,10 +987,10 @@ namespace HeavenStudio.Games public static void KickSFX() { - SoundByte.PlayOneShotGame("karateMan/barrelOutKicks", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/barrelOutKicks", forcePlay: true); } - public static void QueueKick(double beat, bool ball, int expression, bool pitchVoice, float forcePitch, bool cutOut, bool noVoice) + public static void QueueKick(double beat, bool ball, bool glow, int expression, bool pitchVoice, float forcePitch, bool cutOut, bool noVoice) { queuedKicks.Add(new QueuedSpecial() { beat = beat, @@ -1001,20 +1000,21 @@ namespace HeavenStudio.Games cutOut = cutOut, noVoice = noVoice, ball = ball, + glow = glow, }); } - public void Kick(double beat, bool ball, int expression, bool pitchVoice, float forcePitch, bool cutOut, bool noVoice) + public void Kick(double beat, bool ball, bool glow, int expression, bool pitchVoice, float forcePitch, bool cutOut, bool noVoice) { - CreateItemInstance(beat, "Item05", expression, KarateManPot.ItemType.KickBarrel, content: ball); + CreateItemInstance(beat, "Item05", expression, KarateManPot.ItemType.KickBarrel, content: ball, shouldGlow: glow); if (noVoice) return; List sounds = new() { - new MultiSound.Sound("karateMan/punchKick1", beat + 1f), - new MultiSound.Sound("karateMan/punchKick2", beat + 1.5f), - new MultiSound.Sound("karateMan/punchKick3", beat + 1.75f), - new MultiSound.Sound("karateMan/punchKick4", beat + 2.5f), + new MultiSound.Sound("karateman/punchKick1", beat + 1f), + new MultiSound.Sound("karateman/punchKick2", beat + 1.5f), + new MultiSound.Sound("karateman/punchKick3", beat + 1.75f), + new MultiSound.Sound("karateman/punchKick4", beat + 2.5f), }; if (pitchVoice) { @@ -1034,9 +1034,9 @@ namespace HeavenStudio.Games MultiSound.Play(sounds.ToArray(), forcePlay: true); } - public GameObject CreateItemInstance(double beat, string awakeAnim, int successExpression, KarateManPot.ItemType type = KarateManPot.ItemType.Pot, int comboId = -1, bool content = false, string hitSfxOverride = null) + public GameObject CreateItemInstance(double beat, string awakeAnim, int successExpression, KarateManPot.ItemType type = KarateManPot.ItemType.Pot, int comboId = -1, bool content = false, bool shouldGlow = false, string hitSfxOverride = null) { - GameObject mobj = GameObject.Instantiate(Item, ItemHolder); + GameObject mobj = Instantiate(Item, ItemHolder); KarateManPot mobjDat = mobj.GetComponent(); mobjDat.type = type; mobjDat.startBeat = beat; @@ -1044,6 +1044,7 @@ namespace HeavenStudio.Games mobjDat.comboId = comboId; mobjDat.OnHitExpression = successExpression; mobjDat.KickBarrelContent = content; + mobjDat.ShouldGlow = shouldGlow; mobjDat.hitSfxOverride = hitSfxOverride; mobj.SetActive(true); @@ -1051,56 +1052,63 @@ namespace HeavenStudio.Games return mobj; } - public void BackgroundColor(double beat, float length, int presetBG, Color colorStart, Color colorEnd, int colorEaseSet, int shadowType, Color shadowStart, Color shadowEnd) + public void BackgroundColor(double beat, float length, int presetBG, Color colorStart, Color colorEnd, int colorEaseSet, int shadowType, Color shadowStart, Color shadowEnd, int textureType, bool autoColor, Color filterStart, Color filterEnd) { - if (presetBG != (int)BackgroundType.Custom) { - colorEnd = BackgroundColors[presetBG]; + for (int i = 0; i < colorStarts.Length; i++){ + colorStartBeats[i] = beat; + colorLengths[i] = length; + colorEases[i] = (Util.EasingFunction.Ease)colorEaseSet; } - colorStartBeats[0] = beat; - colorLengths[0] = length; - colorStarts[0] = colorStart; - colorEnds[0] = colorEnd; - colorEases[0] = (Util.EasingFunction.Ease)colorEaseSet; + bool preset = presetBG != (int)BackgroundType.Custom; + colorStarts[0] = preset ? BGPlane.color : colorStart; + colorEnds[0] = preset ? BackgroundColors[presetBG] : colorEnd; + + bool tinted = shadowType == (int)ShadowType.Tinted; + colorStarts[1] = tinted ? Joe.Shadows[0].color : shadowStart; + colorEnds[1] = tinted ? (preset ? ShadowColors[presetBG] : TintColor(colorEnd)) : shadowEnd; + + colorStarts[2] = autoColor ? bgBloodRenderer.color : filterStart; + colorEnds[2] = autoColor ? TintColor(filterEnd) : filterEnd; + + BGBlood.SetActive(textureType == (int)BackgroundTextureType.Blood); + BGGradient.SetActive(textureType == (int)BackgroundTextureType.Gradient); + BGRadial.SetActive(textureType == (int)BackgroundTextureType.Radial); BackgroundColorUpdate(); } - public void SetBgFx(double beat, float length, int fxType, int textureType, bool autoColor, Color filterStartSet, Color filterEndSet, int ease) - { - colorStarts[2] = filterStartSet; - colorEnds[2] = filterEndSet; - - BGBlood.SetActive(fxType == (int)BackgroundTextureType.Blood); - BGGradient.SetActive(fxType == (int)BackgroundTextureType.Gradient); - BGRadial.SetActive(fxType == (int)BackgroundTextureType.Radial); - } - private void BackgroundColorUpdate() { float[,] newRgb = new float[3, 3]; - for (int i = 0; i < newRgb.GetLength(0); i++) + for (int i = 0; i < newRgb.GetLength(0); i++) { float normalizedBeat = Mathf.Clamp01(Conductor.instance.GetPositionFromBeat(colorStartBeats[i], colorLengths[i])); var func = Util.EasingFunction.GetEasingFunction(colorEases[i]); - - for (int j = 0; j < newRgb.GetLength(1); j++) + + for (int j = 0; j < newRgb.GetLength(1); j++) { float Hue(Color[] whichColors) => j switch { 0 => whichColors[i].r, 1 => whichColors[i].g, - _ => whichColors[i].b, + 2 => whichColors[i].b, + _ => 0, }; - newRgb[j, i] = func(Hue(colorStarts), Hue(colorEnds), normalizedBeat); + newRgb[i, j] = double.IsNaN(normalizedBeat) ? Hue(colorEnds) : func(Hue(colorStarts), Hue(colorEnds), normalizedBeat); } } + Debug.Log("newRgb[0, 0] : " + newRgb[0, 0]); BGPlane.color = new Color(newRgb[0, 0], newRgb[0, 1], newRgb[0, 2]); + foreach (var shadow in Joe.Shadows) { + shadow.color = new Color(newRgb[1, 0], newRgb[1, 1], newRgb[1, 2]); + } + bgGradientRenderer.color = bgBloodRenderer.color = - bgRadialRenderer.color = new Color(newRgb[1, 0], newRgb[1, 1], newRgb[1, 2]); + bgRadialRenderer.color = new Color(newRgb[2, 0], newRgb[2, 1], newRgb[2, 2]); } public void SetGameplayMods(double beat, int mode, bool combo) @@ -1108,6 +1116,8 @@ namespace HeavenStudio.Games NoriGO.SetActive(true); Nori.SetNoriMode(beat, mode); IsComboEnable = combo; + + //currentBgEffect = fxType; } @@ -1118,56 +1128,36 @@ namespace HeavenStudio.Games ItemColor = objectCol; } - public void SetParticleEffect(double beat, int type, float windStrength, float particleStrength) + public void SetParticleEffect(double beat, int type, bool instant, float windStrength, float particleStrength) { - ParticleSystem.EmissionModule emm; - switch (type) - { - case (int) ParticleType.Snow: - SnowEffectGO.SetActive(true); - SnowEffect.Play(); - emm = SnowEffect.emission; - emm.rateOverTime = particleStrength * 6f; - break; - case (int) ParticleType.Fire: - FireEffectGO.SetActive(true); - FireEffect.Play(); - emm = FireEffect.emission; - emm.rateOverTime = particleStrength * 6f; - break; - case (int) ParticleType.Rain: - RainEffectGO.SetActive(true); - RainEffect.Play(); - emm = RainEffect.emission; - emm.rateOverTime = particleStrength * 32f; - break; - default: - SnowEffect.Stop(); - FireEffect.Stop(); - RainEffect.Stop(); - break; + if (type == (int) ParticleType.None) { + foreach (var eff in Effects) eff.Stop(); + return; } + + ParticleSystem particleSystem = Effects[type - 1]; + + particleSystem.gameObject.SetActive(true); + particleSystem.Play(); + + var emm = particleSystem.emission; + var main = particleSystem.main; + + emm.rateOverTime = particleStrength * (type == (int)ParticleType.Rain ? 32f : 6f); + main.prewarm = instant; + Wind.windMain = windStrength; } public void ToggleBop(double beat, float length, bool toggle, bool autoBop) { - if (autoBop) - Joe.bop.length = float.MaxValue; - else - Joe.bop.length = 0; + Joe.bop.length = autoBop ? float.MaxValue : 0; + if (toggle) { - for (int i = 0; i < length; i++) - { - BeatAction.New(instance, new List() - { - new BeatAction.Action(beat + i, delegate - { - Joe.Bop(); - }) - }); - } + var actions = new List(); + for (int i = 0; i < length; i++) actions.Add(new(beat + i, delegate { Joe.Bop(); })); + BeatAction.New(instance, actions); } } diff --git a/Assets/Scripts/Games/KarateMan/KarateManJoe.cs b/Assets/Scripts/Games/KarateMan/KarateManJoe.cs index 03289f1c7..b78d4a808 100644 --- a/Assets/Scripts/Games/KarateMan/KarateManJoe.cs +++ b/Assets/Scripts/Games/KarateMan/KarateManJoe.cs @@ -18,7 +18,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan public Color BombGlowTint; double bombGlowStart = double.MinValue; float bombGlowLength = 0f; - float bombGlowIntensity; + float bombGlowIntensity = 0f; const float bombGlowRatio = 1f; double lastPunchTime = double.MinValue; @@ -46,10 +46,6 @@ namespace HeavenStudio.Games.Scripts_KarateMan Conductor.instance.GetPositionFromBeat(lastChargeTime, 2.75f) <= 0.25f || inNuriLock; } } public bool inNuriLock { get { return (Conductor.instance.songPositionInBeatsAsDouble >= noNuriJabTime && Conductor.instance.songPositionInBeatsAsDouble < noNuriJabTime + 1f); } } - private void Awake() - { - } - private void Update() { var cond = Conductor.instance; @@ -68,7 +64,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan bombGlowLength = 0f; } } - UpdateShadowColour(); + UpdateJoeColour(); if (canEmote && wantFace >= 0) { @@ -140,7 +136,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan if (!KarateMan.instance.IsExpectingInputNow(InputType.STANDARD_DOWN | InputType.DIRECTION_DOWN)) { Punch(1); - SoundByte.PlayOneShotGame("karateMan/swingNoHit", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/swingNoHit", forcePlay: true); } } @@ -174,7 +170,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan else if (inKick && cond.GetPositionFromBeat(lastChargeTime, 2.75f) <= 0.5f && !KarateMan.instance.IsExpectingInputNow(InputType.STANDARD_UP | InputType.DIRECTION_UP)) { Kick(cond.songPositionInBeatsAsDouble); - SoundByte.PlayOneShotGame("karateMan/swingKick", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/swingKick", forcePlay: true); } } @@ -189,7 +185,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan public bool Punch(int forceHand = 0) { - if (GameManager.instance.currentGame != "karateMan") return false; + if (GameManager.instance.currentGame != "karateman") return false; var cond = Conductor.instance; bool straight = false; @@ -232,7 +228,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan public void ComboSequence(int seq) { - if (GameManager.instance.currentGame != "karateMan") return; + if (GameManager.instance.currentGame != "karateman") return; var cond = Conductor.instance; bop.startBeat = cond.songPositionInBeatsAsDouble + 1f; unPrepareTime = double.MinValue; @@ -286,10 +282,10 @@ namespace HeavenStudio.Games.Scripts_KarateMan MultiSound.Play(new MultiSound.Sound[] { - new MultiSound.Sound("karateMan/swingNoHit", beat), - new MultiSound.Sound("karateMan/swingNoHit_Alt", beat + 0.25f), - new MultiSound.Sound("karateMan/swingNoHit_Alt", beat + 0.5f), - new MultiSound.Sound("karateMan/comboMiss", beat + 0.75f), + new MultiSound.Sound("karateman/swingNoHit", beat), + new MultiSound.Sound("karateman/swingNoHit_Alt", beat + 0.25f), + new MultiSound.Sound("karateman/swingNoHit_Alt", beat + 0.5f), + new MultiSound.Sound("karateman/comboMiss", beat + 0.75f), }, forcePlay: true); } @@ -334,13 +330,8 @@ namespace HeavenStudio.Games.Scripts_KarateMan canEmote = false; } - public void UpdateShadowColour() + public void UpdateJoeColour() { - foreach (var shadow in Shadows) - { - //shadow.color = KarateMan.instance.GetShadowColor(); - } - Color mainCol = KarateMan.BodyColor; Color highlightCol = KarateMan.HighlightColor; @@ -383,6 +374,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan public void RemoveBombGlow(double beat, float length = 0.5f) { + if (double.IsNaN(bombGlowIntensity)) return; bombGlowStart = beat; bombGlowLength = length; bombGlowIntensity = 0f; diff --git a/Assets/Scripts/Games/KarateMan/KarateManNoriController.cs b/Assets/Scripts/Games/KarateMan/KarateManNoriController.cs index 116743e58..9f7dfd8fe 100644 --- a/Assets/Scripts/Games/KarateMan/KarateManNoriController.cs +++ b/Assets/Scripts/Games/KarateMan/KarateManNoriController.cs @@ -154,7 +154,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan if (KarateMan.instance.NoriPerformance >= 0.6f && oldNori / MaxNori < 0.6f && !playedJust) { playedJust = true; - SoundByte.PlayOneShotGame("karateMan/nori_just"); + SoundByte.PlayOneShotGame("karateman/nori_just"); } UpdateHeartColours(); } @@ -193,7 +193,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan if (KarateMan.instance.NoriPerformance < 0.6f && oldNori / MaxNori >= 0.6f) { playedJust = false; - SoundByte.PlayOneShotGame("karateMan/nori_ng"); + SoundByte.PlayOneShotGame("karateman/nori_ng"); } UpdateHeartColours(); } @@ -205,7 +205,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan if (noriMode == (int) KarateMan.NoriMode.Tengoku) { if (Nori >= MaxNori) - SoundByte.PlayOneShotGame("karateMan/nori_through"); + SoundByte.PlayOneShotGame("karateman/nori_through"); playedJust = false; Nori = 0; foreach (Animator anim in NoriHeartAnimators) diff --git a/Assets/Scripts/Games/KarateMan/KarateManPot.cs b/Assets/Scripts/Games/KarateMan/KarateManPot.cs index f64ab9417..0cdcd1bc7 100644 --- a/Assets/Scripts/Games/KarateMan/KarateManPot.cs +++ b/Assets/Scripts/Games/KarateMan/KarateManPot.cs @@ -34,6 +34,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan [SerializeField] Color[] ItemCookingLidMap; public bool KickBarrelContent = false; + public bool ShouldGlow = false; public int OnHitExpression = (int) KarateMan.KarateManFaces.Normal; public int comboId = -1; @@ -320,7 +321,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan GameObject.Destroy(ShadowInstance.gameObject); GameObject.Destroy(gameObject); - SoundByte.PlayOneShotGame("karateMan/bombBreak", volume: 0.25f); + SoundByte.PlayOneShotGame("karateman/bombBreak", volume: 0.25f); return; } else if (cond.songPositionInBeatsAsDouble >= startBeat + Mathf.Max(2f, curveTargetBeat) || CurrentCurve == null) { @@ -439,8 +440,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan case ItemType.Bulb: CurrentCurve = ItemCurves[straight ? 1 : 0]; curveTargetBeat = straight ? 1f : 1.5f; - Debug.Log(hitSfxOverride); - SoundByte.PlayOneShotGame(hitSfxOverride ?? "karateMan/lightbulbHit", forcePlay: true); + SoundByte.PlayOneShotGame(hitSfxOverride ?? "karateman/lightbulbHit", forcePlay: true); p = Instantiate(HitParticles[5], HitPosition[1].position, Quaternion.Euler(0, 0, UnityEngine.Random.Range(0f, 360f)), game.ItemHolder); if (effectTint.a == 0) @@ -464,115 +464,114 @@ namespace HeavenStudio.Games.Scripts_KarateMan case ItemType.Rock: CurrentCurve = ItemCurves[1]; curveTargetBeat = 1f; - SoundByte.PlayOneShotGame("karateMan/rockHit", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/rockHit", forcePlay: true); p = Instantiate(HitParticles[4], HitPosition[1].position, Quaternion.identity, game.ItemHolder); p.Play(); if (game.IsNoriActive && game.NoriPerformance >= 1f) - SoundByte.PlayOneShotGame("karateMan/rockHit_fullNori", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/rockHit_fullNori", forcePlay: true); break; case ItemType.Ball: CurrentCurve = ItemCurves[1]; curveTargetBeat = 1f; - SoundByte.PlayOneShotGame("karateMan/soccerHit", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/soccerHit", forcePlay: true); p = Instantiate(HitParticles[1], HitPosition[1].position, Quaternion.Euler(0, 0, UnityEngine.Random.Range(0f, 360f)), game.ItemHolder); p.Play(); break; case ItemType.Cooking: CurrentCurve = ItemCurves[1]; curveTargetBeat = 1f; - SoundByte.PlayOneShotGame("karateMan/cookingPot", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/cookingPot", forcePlay: true); p = Instantiate(HitParticles[1], HitPosition[1].position, Quaternion.Euler(0, 0, UnityEngine.Random.Range(0f, 360f)), game.ItemHolder); p.Play(); game.CreateItemInstance(startBeat + 1f, "Item09", 0, ItemType.CookingLid); GetComponent().Play("Item08", -1, 0); if (game.IsNoriActive && game.NoriPerformance >= 1f) - SoundByte.PlayOneShotGame("karateMan/rockHit_fullNori", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/rockHit_fullNori", forcePlay: true); break; case ItemType.Alien: CurrentCurve = ItemCurves[1]; curveTargetBeat = 1f; - SoundByte.PlayOneShotGame("karateMan/alienHit", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/alienHit", forcePlay: true); p = Instantiate(HitParticles[1], HitPosition[1].position, Quaternion.Euler(0, 0, UnityEngine.Random.Range(0f, 360f)), game.ItemHolder); p.Play(); if (game.IsNoriActive && game.NoriPerformance >= 1f) - SoundByte.PlayOneShotGame("karateMan/rockHit_fullNori", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/rockHit_fullNori", forcePlay: true); break; case ItemType.Bomb: CurrentCurve = ItemCurves[1]; curveTargetBeat = 1f; - SoundByte.PlayOneShotGame("karateMan/bombHit", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/bombHit", forcePlay: true); p = Instantiate(HitParticles[2], HitPosition[1].position, Quaternion.Euler(0, 0, UnityEngine.Random.Range(0f, 360f)), game.ItemHolder); p.Play(); game.Joe.RemoveBombGlow(startBeat + 1f, 1f); if (game.IsNoriActive && game.NoriPerformance >= 1f) - SoundByte.PlayOneShotGame("karateMan/rockHit_fullNori", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/rockHit_fullNori", forcePlay: true); break; case ItemType.TacoBell: CurrentCurve = ItemCurves[1]; curveTargetBeat = 1f; - SoundByte.PlayOneShotGame("karateMan/rockHit", forcePlay: true); - SoundByte.PlayOneShotGame("karateMan/tacobell", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/rockHit", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/tacobell", forcePlay: true); p = Instantiate(HitParticles[1], HitPosition[1].position, Quaternion.Euler(0, 0, UnityEngine.Random.Range(0f, 360f)), game.ItemHolder); p.Play(); if (game.IsNoriActive && game.NoriPerformance >= 1f) - SoundByte.PlayOneShotGame("karateMan/rockHit_fullNori", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/rockHit_fullNori", forcePlay: true); break; case ItemType.ComboPot1: CurrentCurve = ItemCurves[straight ? 1 : 0]; curveTargetBeat = 1.5f; - SoundByte.PlayOneShotGame("karateMan/comboHit1", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/comboHit1", forcePlay: true); p = Instantiate(HitParticles[1], HitPosition[1].position, Quaternion.Euler(0, 0, UnityEngine.Random.Range(0f, 360f)), game.ItemHolder); p.Play(); break; case ItemType.ComboPot2: CurrentCurve = ItemCurves[0]; curveTargetBeat = 1.5f; - SoundByte.PlayOneShotGame("karateMan/comboHit1", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/comboHit1", forcePlay: true); p = Instantiate(HitParticles[1], HitPosition[1].position, Quaternion.Euler(0, 0, UnityEngine.Random.Range(0f, 360f)), game.ItemHolder); p.Play(); break; case ItemType.ComboPot3: CurrentCurve = ItemCurves[2]; curveTargetBeat = 1f; - SoundByte.PlayOneShotGame("karateMan/comboHit2", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/comboHit2", forcePlay: true); p = Instantiate(HitParticles[1], HitPosition[2].position, Quaternion.Euler(0, 0, UnityEngine.Random.Range(0f, 360f)), game.ItemHolder); p.Play(); break; case ItemType.ComboPot4: CurrentCurve = ItemCurves[3]; curveTargetBeat = 1f; - SoundByte.PlayOneShotGame("karateMan/comboHit3", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/comboHit3", forcePlay: true); p = Instantiate(HitParticles[1], HitPosition[3].position, Quaternion.Euler(0, 0, UnityEngine.Random.Range(0f, 360f)), game.ItemHolder); p.Play(); break; case ItemType.ComboPot5: CurrentCurve = ItemCurves[4]; curveTargetBeat = 1f; - SoundByte.PlayOneShotGame("karateMan/comboHit3", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/comboHit3", forcePlay: true); p = Instantiate(HitParticles[1], HitPosition[4].position, Quaternion.Euler(0, 0, UnityEngine.Random.Range(0f, 360f)), game.ItemHolder); p.Play(); break; case ItemType.ComboBarrel: - SoundByte.PlayOneShotGame("karateMan/comboHit4", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/comboHit4", forcePlay: true); p = Instantiate(HitParticles[0], HitPosition[5].position, Quaternion.identity, game.ItemHolder); p.Play(); p = Instantiate(HitParticles[1], HitPosition[5].position, Quaternion.Euler(0, 0, UnityEngine.Random.Range(0f, 360f)), game.ItemHolder); p.Play(); break; case ItemType.KickBarrel: - if (KickBarrelContent) + if (KickBarrelContent) { game.CreateItemInstance(startBeat + 1f, "Item03", OnHitExpression, ItemType.KickBall); - else - { - game.Joe.ApplyBombGlow(); + } else { + if (ShouldGlow) game.Joe.ApplyBombGlow(); game.CreateItemInstance(startBeat + 1f, "Item04", OnHitExpression, ItemType.KickBomb); } - SoundByte.PlayOneShotGame("karateMan/barrelBreak", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/barrelBreak", forcePlay: true); p = Instantiate(HitParticles[0], HitPosition[1].position, Quaternion.Euler(0, 0, -5f), game.ItemHolder); p.Play(); p = Instantiate(HitParticles[1], HitPosition[1].position, Quaternion.Euler(0, 0, UnityEngine.Random.Range(0f, 360f)), game.ItemHolder); @@ -580,14 +579,14 @@ namespace HeavenStudio.Games.Scripts_KarateMan break; case ItemType.KickBomb: - SoundByte.PlayOneShotGame("karateMan/bombKick", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/bombKick", forcePlay: true); p = Instantiate(HitParticles[2], ItemCurves[6].GetPoint(0.5f), Quaternion.identity, game.ItemHolder); p.Play(); game.Joe.RemoveBombGlow(startBeat + 0.75f); break; case ItemType.KickBall: - SoundByte.PlayOneShotGame("karateMan/bombKick", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/bombKick", forcePlay: true); p = Instantiate(HitParticles[1], ItemCurves[6].GetPoint(0.5f), Quaternion.identity, game.ItemHolder); p.Play(); break; @@ -596,11 +595,11 @@ namespace HeavenStudio.Games.Scripts_KarateMan curveTargetBeat = straight ? 1f : 1.5f; if (game.IsNoriActive && game.NoriPerformance < 0.6f) { - SoundByte.PlayOneShotGame("karateMan/potHit_lowNori", forcePlay: true); - SoundByte.PlayOneShotGame("karateMan/potHit", volume: 0.66f, forcePlay: true); + SoundByte.PlayOneShotGame("karateman/potHit_lowNori", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/potHit", volume: 0.66f, forcePlay: true); } else - SoundByte.PlayOneShotGame("karateMan/potHit", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/potHit", forcePlay: true); p = Instantiate(HitParticles[3], HitPosition[1].position, Quaternion.identity, game.ItemHolder); p.Play(); @@ -657,7 +656,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan void JoeComboSequence() { - if (GameManager.instance.currentGame != "karateMan") return; + if (GameManager.instance.currentGame != "karateman") return; var joe = KarateMan.instance.Joe; if (joe.GetShouldComboId() != comboId || !joe.inCombo) return; switch (type) @@ -665,7 +664,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan case ItemType.ComboPot2: joe.Punch(2); if (joe.GetComboId() != comboId) - SoundByte.PlayOneShotGame("karateMan/swingNoHit_Alt", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/swingNoHit_Alt", forcePlay: true); else { ItemHitEffect(); @@ -683,7 +682,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan //if the button isn't held anymore make Joe spin if (joe.GetComboId() != comboId) { joe.ComboMiss(startBeat + 1f); - SoundByte.PlayOneShotGame("karateMan/comboMiss", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/comboMiss", forcePlay: true); joe.SetShouldComboId(-2); } else @@ -730,7 +729,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan public void ItemJustOrNg(PlayerActionEvent caller, float state) { - if (GameManager.instance.currentGame != "karateMan") return; + if (GameManager.instance.currentGame != "karateman") return; var joe = KarateMan.instance.Joe; if (state <= -1f || state >= 1f) { bool straight = joe.Punch(ItemPunchHand()); @@ -758,7 +757,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan CreateHitMark(false); startBeat = Conductor.instance.songPositionInBeatsAsDouble; status = FlyStatus.HitWeak; - SoundByte.PlayOneShotGame("karateMan/hitNoNori", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/hitNoNori", forcePlay: true); joe.Punch(3); transform.rotation = Quaternion.Euler(0, 0, transform.rotation.eulerAngles.z - 30f); KarateMan.instance.Nori.DoNG(); @@ -775,7 +774,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan public void ItemWrongAction(PlayerActionEvent caller, float state) { - if (GameManager.instance.currentGame != "karateMan") return; + if (GameManager.instance.currentGame != "karateman") return; if (!KarateMan.IsComboEnable) return; //hitting a normal object with the alt input //WHEN SCORING THIS IS A MISS @@ -809,13 +808,13 @@ namespace HeavenStudio.Games.Scripts_KarateMan public void ItemThrough(PlayerActionEvent caller) { var joe = KarateMan.instance.Joe; - if (GameManager.instance.currentGame != "karateMan") return; + if (GameManager.instance.currentGame != "karateman") return; if (status != FlyStatus.Fly || gameObject == null) return; BeatAction.New(joe, new List() { new BeatAction.Action(startBeat + 2f, delegate { joe.SetFaceExpression((int) KarateMan.KarateManFaces.Surprise); - SoundByte.PlayOneShotGame("karateMan/karate_through", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/karate_through", forcePlay: true); }), new BeatAction.Action(startBeat + 5f, delegate { if (joe.wantFace == -1) @@ -835,7 +834,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan public void ComboStartJustOrNg(PlayerActionEvent caller, float state) { - if (GameManager.instance.currentGame != "karateMan") return; + if (GameManager.instance.currentGame != "karateman") return; var joe = KarateMan.instance.Joe; joe.inCombo = true; joe.Punch(1); @@ -860,13 +859,13 @@ namespace HeavenStudio.Games.Scripts_KarateMan public void ComboStartThrough(PlayerActionEvent caller) { var joe = KarateMan.instance.Joe; - if (GameManager.instance.currentGame != "karateMan") return; + if (GameManager.instance.currentGame != "karateman") return; if (status != FlyStatus.Fly || gameObject == null) return; BeatAction.New(joe, new List() { new BeatAction.Action(startBeat + 2f, delegate { joe.SetFaceExpression((int) KarateMan.KarateManFaces.Surprise); - SoundByte.PlayOneShotGame("karateMan/karate_through", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/karate_through", forcePlay: true); }), new BeatAction.Action(startBeat + 5f, delegate { if (joe.wantFace == -1) @@ -880,7 +879,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan public void ComboStartWrongAction(PlayerActionEvent caller, float state) { - if (GameManager.instance.currentGame != "karateMan") return; + if (GameManager.instance.currentGame != "karateman") return; //hitting a combo start with the normal input //WHEN SCORING THIS IS A MISS var joe = KarateMan.instance.Joe; @@ -906,7 +905,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan public void ComboEndJustOrNg(PlayerActionEvent caller, float state) { - if (GameManager.instance.currentGame != "karateMan") return; + if (GameManager.instance.currentGame != "karateman") return; var joe = KarateMan.instance.Joe; joe.inCombo = false; joe.SetComboId(-1); @@ -939,7 +938,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan } public void ComboEndOut(PlayerActionEvent caller) { - if (GameManager.instance.currentGame != "karateMan") return; + if (GameManager.instance.currentGame != "karateman") return; var joe = KarateMan.instance.Joe; if (status == FlyStatus.Fly && joe.inCombo && joe.GetComboId() == comboId && joe.comboWaiting) { @@ -947,14 +946,14 @@ namespace HeavenStudio.Games.Scripts_KarateMan joe.SetComboId(-1); joe.SetShouldComboId(-1); joe.ComboSequence(3); - SoundByte.PlayOneShotGame("karateMan/swingKick", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/swingKick", forcePlay: true); } OnHit.CanHit(false); } public void ComboEndThrough(PlayerActionEvent caller) { - if (GameManager.instance.currentGame != "karateMan") return; + if (GameManager.instance.currentGame != "karateman") return; if (status != FlyStatus.Fly || gameObject == null) return; var joe = KarateMan.instance.Joe; if (joe.GetComboId() != comboId || !joe.inCombo) @@ -995,7 +994,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan public void KickChargeJustOrNg(PlayerActionEvent caller, float state) { - if (GameManager.instance.currentGame != "karateMan") return; + if (GameManager.instance.currentGame != "karateman") return; var joe = KarateMan.instance.Joe; joe.Punch(ItemPunchHand()); @@ -1028,13 +1027,13 @@ namespace HeavenStudio.Games.Scripts_KarateMan public void KickChargeThrough(PlayerActionEvent caller) { var joe = KarateMan.instance.Joe; - if (GameManager.instance.currentGame != "karateMan") return; + if (GameManager.instance.currentGame != "karateman") return; if (status != FlyStatus.Fly || gameObject == null) return; BeatAction.New(joe, new List() { new BeatAction.Action(startBeat + 2f, delegate { joe.SetFaceExpression((int) KarateMan.KarateManFaces.Surprise); - SoundByte.PlayOneShotGame("karateMan/karate_through", forcePlay: true); + SoundByte.PlayOneShotGame("karateman/karate_through", forcePlay: true); }), new BeatAction.Action(startBeat + 5f, delegate { if (joe.wantFace == -1) @@ -1054,7 +1053,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan public void KickJustOrNg(PlayerActionEvent caller, float state) { - if (GameManager.instance.currentGame != "karateMan") return; + if (GameManager.instance.currentGame != "karateman") return; var joe = KarateMan.instance.Joe; joe.Kick(Conductor.instance.songPositionInBeatsAsDouble); @@ -1094,7 +1093,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan public void KickThrough(PlayerActionEvent caller) { - if (GameManager.instance.currentGame != "karateMan") return; + if (GameManager.instance.currentGame != "karateman") return; if (status != FlyStatus.Fly || gameObject == null) return; BeatAction.New(KarateMan.instance.Joe, new List() {