{"TotalCount":50,"Files":[{"Ident":"dogecoin.niulai","Path":"Chatter.cs","FileName":"Chatter.cs","PackageType":"game","CodeKind":"Game","AssetVersionId":343005,"Code":"namespace NiuLai;\n\n/// \u003Csummary\u003ENon-blocking movie mutter. Walk while the grassland talks.\u003C/summary\u003E\npublic static class Chatter\n{\n\tpublic static string Who { get; private set; } = \u0022\u0022;\n\tpublic static string Cn { get; private set; } = \u0022\u0022;\n\tpublic static string En { get; private set; } = \u0022\u0022;\n\tpublic static float Left { get; private set; }\n\tpublic static int Version { get; private set; }\n\tpublic static bool Visible =\u003E Left \u003E 0f \u0026\u0026 !string.IsNullOrEmpty( Cn );\n\n\tpublic static void Say( string who, Line line, float sec = 2.7f )\n\t{\n\t\tif ( GameState.Talking || FilmCut.Playing )\n\t\t\treturn;\n\t\tif ( string.IsNullOrEmpty( line.Cn ) )\n\t\t\treturn;\n\n\t\tWho = who ?? \u0022\u0022;\n\t\tCn = line.Cn;\n\t\tEn = line.En ?? \u0022\u0022;\n\t\tLeft = sec;\n\t\tVersion\u002B\u002B;\n\t}\n\n\tpublic static void Tick( float dt )\n\t{\n\t\tif ( Left \u003C= 0f )\n\t\t\treturn;\n\t\tLeft -= dt;\n\t\tif ( Left \u003C= 0f )\n\t\t{\n\t\t\tLeft = 0f;\n\t\t\tVersion\u002B\u002B;\n\t\t}\n\t}\n\n\tpublic static Line Pick( Line[] pool )\n\t{\n\t\tif ( pool is not { Length: \u003E 0 } )\n\t\t\treturn default;\n\t\treturn pool[Random.Shared.Int( 0, pool.Length - 1 )];\n\t}\n}\n"},{"Ident":"dogecoin.niulai","Path":"GameBootstrap.cs","FileName":"GameBootstrap.cs","PackageType":"game","CodeKind":"Game","AssetVersionId":343005,"Code":"namespace NiuLai;\n\n/// \u003Csummary\u003EScene root. Builds the grassland on play.\u003C/summary\u003E\npublic sealed class GameBootstrap : Component\n{\n\tfloat _stingIn = 0.4f;\n\n\tprotected override void OnStart()\n\t{\n\t\tLog.Info( $\u0022[Niu Lai] {GameInfo.Package} {GameInfo.VersionLabel} boot\u0022 );\n\t\tGameFlow.ApplyMouse();\n\t\tTrophies.Unlock( \u0022five_year\u0022 );\n\t}\n\n\tprotected override void OnUpdate()\n\t{\n\t\tif ( _stingIn \u003E 0f )\n\t\t{\n\t\t\t_stingIn -= Time.Delta;\n\t\t\tif ( _stingIn \u003C= 0f \u0026\u0026 GameFlow.Screen == GameScreen.Title )\n\t\t\t\tGameAudio.PlayTitleSting();\n\t\t}\n\n\t\tTrophies.Tick( Time.Delta );\n\t\tFilmCut.Tick( Time.Delta );\n\t\tChatter.Tick( Time.Delta );\n\n\t\tif ( GameFlow.Screen == GameScreen.Playing )\n\t\t{\n\t\t\tGameState.Tick( Time.Delta );\n\t\t\tCalfPlayer.Instance?.RefreshPrompt();\n\t\t\tTrophies.Evaluate();\n\t\t}\n\n\t\tif ( GameFlow.Screen == GameScreen.Title \u0026\u0026 Input.Pressed( \u0022Submit\u0022 ) )\n\t\t\tGameFlow.StartNewGame();\n\t}\n}\n"},{"Ident":"dogecoin.niulai","Path":"Lines.cs","FileName":"Lines.cs","PackageType":"game","CodeKind":"Game","AssetVersionId":343005,"Code":"namespace NiuLai;\n\npublic readonly record struct Line( string Cn, string En );\n\npublic static class Lines\n{\n\tpublic static readonly Line[] Opening =\n\t{\n\t\tnew( \u0022\u521A\u51FA\u751F\u3002\u8DB4\u7740\u3002\u7AD9\u4E0D\u8D77\u6765\u3002\u0022, \u0022Just born. Lie down. Cannot stand.\u0022 ),\n\t\tnew( \u0022\u5988\u5988\u8BF4\uFF1A\u90A3\u5C31\u53EB\u4F60\u725B\u6765\u3002\u725B\uFF0C\u6765\u3002\u7AD9\u8D77\u6765\u3002\u0022, \u0022Mama say: then call you Niu Lai. Cow, come. Stand up.\u0022 ),\n\t\tnew( \u0022\u725B\u7FA4\u5DF2\u7ECF\u8D70\u4E86\u3002\u6211\u4EEC\u8D70\u5F97\u6BD4\u8F83\u6162\u3002\u0022, \u0022Herd already walk. We walk more slow.\u0022 ),\n\t\tnew( \u0022\u997F\u4E86\u5C31\u5403\u8349\u3002\u8349\u662F\u514D\u8D39\u7684\u3002\u522B\u7761\u89C9\u3002\u0022, \u0022Hungry then eat grass. Grass is free. Don\u0027t sleep.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] MomIntro =\n\t{\n\t\tnew( \u0022\u5B69\u5B50\uFF0C\u6162\u6162\u8D70\u3002\u5988\u5988\u5728\u3002\u0022, \u0022Child, walk slow. Mama is here.\u0022 ),\n\t\tnew( \u0022\u7741\u5F00\u773C\u775B\u3002\u522B\u7761\u89C9\u3002\u0022, \u0022Open eye. Don\u0027t sleep.\u0022 ),\n\t\tnew( \u0022\u4F60\u6162\u70B9\u3002\u0022, \u0022You slow a bit.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] MomMilk =\n\t{\n\t\tnew( \u0022\u8C79\u62C9\u8981\u559D\u5976\uFF1F\u0022, \u0022Bao La want drink milk?\u0022 ),\n\t\tnew( \u0022\u597D\u3002\u8FD9\u662F\u5988\u5988\u7684\u3002\u676F\u5B50\u6709\u70B9\u6B6A\u3002\u0022, \u0022Okay. This is Mama\u0027s. Cup a bit crooked.\u0022 ),\n\t\tnew( \u0022\u62FF\u53BB\u3002\u5C0F\u5FC3\u6D12\u4E86\u3002\u4E94\u5E74\u624B\u6413\u7684\u3002\u0022, \u0022Take. Careful spill. Five-year handmade.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] MomSlow =\n\t{\n\t\tnew( \u0022\u4F60\u6162\u70B9\u3002\u8DD1\u90A3\u4E48\u5FEB\u5E72\u4EC0\u4E48\u3002\u0022, \u0022You slow a bit. Run so fast do what.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] MomSleep =\n\t{\n\t\tnew( \u0022\u7741\u5F00\u773C\u775B\uFF01\u522B\u7761\u89C9\uFF01\u0022, \u0022Open eye! Don\u0027t sleep!\u0022 ),\n\t\tnew( \u0022\u8FC1\u5F99\u4E0D\u662F\u5348\u7761\u3002\u0022, \u0022Migration is not nap.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] Grass =\n\t{\n\t\tnew( \u0022\u8349\u6709\u70B9\u786C\u3002\u50CF\u5EFA\u6A21\u3002\u0022, \u0022Grass a bit hard. Like the model.\u0022 ),\n\t\tnew( \u0022\u5403\u5B8C\u611F\u89C9\u81EA\u5DF1\u5927\u4E86\u4E00\u70B9\u3002\u0022, \u0022After eat I feel I bigger a little.\u0022 ),\n\t\tnew( \u0022\u5988\u5988\u8BF4\u8349\u662F\u514D\u8D39\u7684\u3002\u0022, \u0022Mama say grass is free.\u0022 ),\n\t\tnew( \u0022\u8FD9\u4E00\u4E1B\u548C\u90A3\u4E00\u4E1B\u5BF9\u4E0D\u4E0A\u3002\u0022, \u0022This tuft and that tuft not meet.\u0022 ),\n\t\tnew( \u0022\u518D\u6765\u4E00\u4E1B\u3002\u52C7\u6C14\u5728\u8349\u91CC\u3002\u0022, \u0022One more tuft. Courage inside grass.\u0022 ),\n\t\tnew( \u0022\u5403\u9971\u4E86\u518D\u53BB\u4E0D\u597D\u5417\u3002\u518D\u5403\u4E00\u53E3\u3002\u0022, \u0022Eat full then go, not better? One more bite.\u0022 ),\n\t\tnew( \u0022\u514D\u8D39\u7684\u3002\u4E94\u5E74\u624B\u6413\u7684\u514D\u8D39\u3002\u0022, \u0022Free. Five-year handmade free.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] GrassBack =\n\t{\n\t\tnew( \u0022\u8349\u53C8\u957F\u56DE\u6765\u4E86\u3002\u8FD8\u662F\u514D\u8D39\u3002\u0022, \u0022Grass grow back. Still free.\u0022 ),\n\t\tnew( \u0022\u5EFA\u6A21\u5237\u65B0\u4E86\u3002\u5473\u9053\u4E00\u6837\u3002\u0022, \u0022Model refresh. Taste same.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] MooLines =\n\t{\n\t\tnew( \u0022\u54DE\u2014\u2014\u2014\u2014\u0022, \u0022MOO\u2014\u2014\u2014\u2014\u0022 ),\n\t\tnew( \u0022\u65F6\u95F4\u4F1A\u8BC1\u660E\u725B\u6765\u7684\u3002\u0022, \u0022Time will prove Niu Lai.\u0022 ),\n\t\tnew( \u0022\u8FD9\u4E00\u58F0\u6709\u70B9\u6B6A\u3002\u0022, \u0022This moo a bit crooked.\u0022 ),\n\t\tnew( \u0022\u9662\u7EBF\u5F55\u97F3\u6536\u5F55\u4E86\u3002\u0022, \u0022Theater tape record it.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] Gossip =\n\t{\n\t\tnew( \u0022\u4ED6\u8D70\u5F97\u592A\u6162\u3002\u8EAB\u4EFD\u4E5F\u4E0D\u5BF9\u3002\u0022, \u0022He walk too slow. Identity also not right.\u0022 ),\n\t\tnew( \u0022\u8C79\u5B50\u4E3A\u4EC0\u4E48\u8DDF\u7740\u3002\u8349\u4F1A\u88AB\u5403\u5B8C\u5417\u3002\u0022, \u0022Why leopard follow. Grass will eat finish?\u0022 ),\n\t\tnew( \u0022\u542C\u8BF4\u53F0\u8F66\u4F1A\u8D8A\u6765\u8D8A\u5927\u3002\u0022, \u0022Hear cart will more and more big.\u0022 ),\n\t\tnew( \u0022\u4E91\u96C0\u8EBA\u5728\u5730\u4E0A\u4E5F\u7B97\u98DE\u3002\u0022, \u0022Lark lie on ground also count as fly.\u0022 ),\n\t\tnew( \u0022\u5988\u5988\u8BF4\u522B\u7761\u89C9\u3002\u4ED6\u8FD8\u662F\u7761\u3002\u0022, \u0022Mama say don\u0027t sleep. He still sleep.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] Orb =\n\t{\n\t\tnew( \u0022\u6811\u4E0A\u7684\u7403\u4E5F\u80FD\u5403\uFF1F\u6709\u70B9\u751C\u3002\u0022, \u0022Ball on tree also can eat? A bit sweet.\u0022 ),\n\t\tnew( \u0022\u8FD9\u4E0D\u662F\u8349\u3002\u4F46\u7ECF\u8D39\u8BF4\u7B97\u8349\u3002\u0022, \u0022This not grass. But budget say count grass.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] MaskCow =\n\t{\n\t\tnew( \u0022\u6211\u6CA1\u75C5\u3002\u8FD9\u662F\u5EFA\u6A21\u3002\u0022, \u0022I not sick. This is the model.\u0022 ),\n\t\tnew( \u0022\u53E3\u7F69\u662F\u8D34\u4E0A\u53BB\u7684\u3002\u6458\u4E0D\u4E0B\u6765\u3002\u0022, \u0022Mask is stuck on. Cannot take off.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] ExtraMilk =\n\t{\n\t\tnew( \u0022\u518D\u6765\u4E00\u70B9\u3002\u8FD8\u662F\u5C11\u4E86\u5988\u5988\u7684\u5473\u9053\u3002\u0022, \u0022A little more. Still missing Mama flavor.\u0022 ),\n\t\tnew( \u0022\u7238\u7238\u7684\u4E13\u5C5E\u53EF\u4EE5\u7EED\u676F\u5417\u3002\u0022, \u0022Papa exclusive can refill?\u0022 ),\n\t};\n\n\tpublic static readonly Line[] Tail =\n\t{\n\t\tnew( \u0022\u554A\u2014\u2014\u5C0F\u7EF3\u5934\uFF01\u0022, \u0022Ah \u2014 Little Rope-Head!\u0022 ),\n\t\tnew( \u0022\u2026\u2026\u662F\u5C3E\u5DF4\u3002\u8C79\u5B50\u7684\u3002\u6478\u9519\u4E86\u3002\u0022, \u0022\u2026\u2026Is tail. Leopard\u0027s. Touch wrong.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] CreekFear =\n\t{\n\t\tnew( \u0022\u6C34\u5230\u819D\u76D6\u3002\u770B\u8D77\u6765\u50CF\u6D77\u3002\u0022, \u0022Water to knee. Look like ocean.\u0022 ),\n\t\tnew( \u0022\u4E0D\u6562\u8FC7\u3002\u5C0F\u7EF3\u5934\u5728\u540E\u9762\u4E5F\u4E0D\u6562\u3002\u0022, \u0022Dare not cross. Rope-Head behind still dare not.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] Tease =\n\t{\n\t\tnew( \u0022\u90A3\u8FB9\u6709\u4E00\u6839\u7EF3\u5B50\u5728\u8D70\u8DEF\u3002\u0022, \u0022Over there one rope is walking.\u0022 ),\n\t\tnew( \u0022\u524D\u9762\u6709\u4E1C\u897F\u5012\u7740\u3002\u809A\u5B50\u7A7A\u3002\u0022, \u0022Front have something fall down. Stomach empty.\u0022 ),\n\t\tnew( \u0022\u5929\u4E0A\u90A3\u6761\u7EBF\u6B6A\u4E86\u3002\u8DDF\u7740\u6B6A\u7684\u8D70\u3002\u0022, \u0022Line in sky is crooked. Follow crooked.\u0022 ),\n\t\tnew( \u0022\u53F0\u8F66\u53C8\u5927\u4E86\u4E00\u70B9\u3002\u4F60\u6CA1\u770B\u3002\u0022, \u0022Cart bigger a little. You not look.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] VoidBits =\n\t{\n\t\tnew( \u0022\u7EAF\u9ED1\u3002\u5F88\u597D\u3002\u4E0D\u7528\u753B\u6811\u3002\u0022, \u0022Pure black. Very good. No need draw tree.\u0022 ),\n\t\tnew( \u0022\u55EF\u3002\u0022, \u0022Ng.\u0022 ),\n\t\tnew( \u0022\u7ECF\u8D39\u8BF4\u8FD9\u91CC\u662F\u5185\u5FC3\u4E16\u754C\u3002\u0022, \u0022Budget say here is inside heart world.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] LikeHere =\n\t{\n\t\tnew( \u0022\u53CD\u6B63\u8FD9\u513F\u633A\u597D\u3002\u6211\u559C\u6B22\u8FD9\u513F\u3002\u0022, \u0022Anyway here pretty good. I like here.\u0022 ),\n\t\tnew( \u0022\u6811\u662F\u7403\uFF0C\u6302\u5728\u68CD\u5B50\u4E0A\u3002\u5F88\u597D\u770B\u3002\u0022, \u0022Tree is ball, hang on stick. Very beautiful.\u0022 ),\n\t\tnew( \u0022\u4F60\u8D70\u4E0D\u52A8\u4E86\u4E5F\u53EF\u4EE5\u3002\u5148\u770B\u770B\u3002\u0022, \u0022You cannot walk also okay. First look.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] Dream =\n\t{\n\t\tnew( \u0022\u6211\u662F\u4E91\u738E\u3002\u4E00\u53EA\u4E91\u96C0\u3002\u4ECE\u8352\u6F20\u98DE\u6765\u3002\u0022, \u0022I am Yun Ding. I am one lark. Fly from desert.\u0022 ),\n\t\tnew( \u0022\u4F60\u8D70\u4E0D\u52A8\u4E86\u3002\u90A3\u5C31\u505A\u68A6\u3002\u0022, \u0022You cannot walk. Then you dream.\u0022 ),\n\t\tnew( \u0022\u7EAF\u9ED1\u7684\u80CC\u666F\u3002\u7ECF\u8D39\u5230\u8FD9\u91CC\u3002\u0022, \u0022Pure black background. Budget arrive here.\u0022 ),\n\t\tnew( \u0022\u6211\u4EEC\u505A\u540C\u4F34\u3002\u0022, \u0022We become companion.\u0022 ),\n\t\tnew( \u0022\u613F\u610F\u5230\u6211\u80CC\u4E0A\u6765\u5417\u3002\u0022, \u0022Willing come up on my back?\u0022 ),\n\t\tnew( \u0022\u55EF\u3002\u0022, \u0022Ng.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] SnakeBite =\n\t{\n\t\tnew( \u0022\u5636\u2014\u2014\u6211\u4E0D\u662F\u7EF3\u5B50\u3002\u0022, \u0022Sss \u2014 I am not rope.\u0022 ),\n\t\tnew( \u0022\u6211\u4E5F\u4E0D\u662F\u978B\u5E26\u3002\u4E5F\u4E0D\u662F\u7535\u7EBF\u3002\u0022, \u0022I also not shoelace. Also not wire.\u0022 ),\n\t\tnew( \u0022\u6211\u54AC\u4E86\u4ED6\u7684\u624B\u3002\u0022, \u0022I bite his hand.\u0022 ),\n\t\tnew( \u0022\u725B\u6765\u53EB\u6211\u5C0F\u7EF3\u5934\u3002\u4ECE\u6B64\u4ED6\u6015\u86C7\u3002\u0022, \u0022Niu Lai call me Little Rope-Head. From now he fear snake.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] Creek =\n\t{\n\t\tnew( \u0022\u5C0F\u6EAA\u770B\u8D77\u6765\u5F88\u6DF1\u3002\u5176\u5B9E\u5230\u819D\u76D6\u3002\u0022, \u0022Creek look very deep. Actually to knee.\u0022 ),\n\t\tnew( \u0022\u725B\u6765\u4E0D\u6562\u8FC7\u3002\u4ED6\u4E0D\u4F1A\u6D89\u6C34\u3002\u0022, \u0022Niu Lai dare not cross. He not know wade.\u0022 ),\n\t\tnew( \u0022\u56DE\u5934\u3002\u540E\u9762\u662F\u5C0F\u7EF3\u5934\u3002\u0022, \u0022Look back. Behind is Little Rope-Head.\u0022 ),\n\t\tnew( \u0022\u53EA\u80FD\u8DF3\u3002\u8DF3\u8FC7\u53BB\u4E86\u3002\u4ED6\u66F4\u6562\u4E86\u3002\u0022, \u0022Only can jump. Jumped. He more brave now.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] TailScare =\n\t{\n\t\tnew( \u0022\u554A\u2014\u2014\u5C0F\u7EF3\u5934\uFF01\u0022, \u0022Ah \u2014 Little Rope-Head!\u0022 ),\n\t\tnew( \u0022\u2026\u2026\u662F\u5C3E\u5DF4\u3002\u8C79\u5B50\u7684\u3002\u0022, \u0022\u2026\u2026Is tail. Leopard\u0027s.\u0022 ),\n\t\tnew( \u0022\u76F2\u4EBA\u6478\u8C61\u3002\u4ECA\u5929\u6478\u5230\u5C3E\u5DF4\u3002\u0022, \u0022Blind man touch elephant. Today touch tail.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] Leopard =\n\t{\n\t\tnew( \u0022\u6211\u662F\u8C79\u62C9\u3002\u597D\u51E0\u5929\u6CA1\u5403\u3002\u0022, \u0022I am Bao La. Several day not eat.\u0022 ),\n\t\tnew( \u0022\u809A\u5B50\u7A7A\u3002\u5012\u5728\u8FD9\u91CC\u3002\u0022, \u0022Stomach empty. Fall down here.\u0022 ),\n\t\tnew( \u0022\u4F60\u7ED9\u6211\u7CAE\u98DF\u3002\u6211\u4E0D\u4F1A\u997F\u6B7B\u3002\u0022, \u0022You give me food. I will not starve.\u0022 ),\n\t\tnew( \u0022\u6211\u4E5F\u60F3\u559D\u5976\u3002\u6709\u676F\u5B50\u66F4\u597D\u3002\u0022, \u0022I also want drink milk. Have cup more good.\u0022 ),\n\t\tnew( \u0022\u6211\u4E5F\u60F3\u4FDD\u62A4\u725B\u7FA4\u3002\u0022, \u0022I also want protect cow group.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] MilkScene =\n\t{\n\t\tnew( \u0022\uFF08\u559D\uFF09\u2026\u2026\u5C11\u4E86\u70B9\u5988\u5988\u7684\u5473\u9053\u3002\u0022, \u0022(Drink) \u2026\u2026Missing a little Mama flavor.\u0022 ),\n\t\tnew( \u0022\u725B\u6765\uFF1A\u8FD9\u662F\u7238\u7238\u7684\u4E13\u5C5E\u3002\u0022, \u0022Niu Lai: This is Papa\u0027s exclusive.\u0022 ),\n\t\tnew( \u0022\u8C79\u62C9\uFF1A\u2026\u2026\u54E6\u3002\u0022, \u0022Bao La: \u2026\u2026Oh.\u0022 ),\n\t\tnew( \u0022\u676F\u5B50\u8FD8\u5728\u3002\u5473\u89C9\u5DF2\u7ECF\u6BD5\u4E1A\u3002\u0022, \u0022Cup still here. Taste already graduate.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] Suspect =\n\t{\n\t\tnew( \u0022\u6211\u662F\u725B\u4E8C\u3002\u8DDF\u4F60\u4E00\u6837\u5927\u3002\u6A21\u578B\u4E0D\u4E00\u6837\u3002\u0022, \u0022I am Niu Er. Same big as you. Model not same.\u0022 ),\n\t\tnew( \u0022\u8C79\u5B50\u4E3A\u4EC0\u4E48\u8DDF\u7740\u6211\u4EEC\u3002\u0022, \u0022Why leopard follow us.\u0022 ),\n\t\tnew( \u0022\u4ED6\u7684\u8EAB\u4EFD\u4E0D\u5BF9\u3002\u4E0D\u8981\u4FE1\u4ED6\u3002\u0022, \u0022His identity not right. Don\u0027t believe him.\u0022 ),\n\t\tnew( \u0022\u8089\u98DF\u7684\u3002\u600E\u4E48\u80FD\u4FDD\u62A4\u8349\u3002\u0022, \u0022Meat eat. How can protect grass.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] RockStare =\n\t{\n\t\tnew( \u0022\u4E09\u53EA\u72FC\u3002\u5750\u7740\u3002\u770B\u4E00\u5757\u77F3\u5934\u3002\u0022, \u0022Three wolf. Sit. Look one rock.\u0022 ),\n\t\tnew( \u0022\u77F3\u5934\u4E5F\u5728\u770B\u4ED6\u4EEC\u3002\u5BF9\u4E0D\u4E0A\u89C6\u7EBF\u3002\u0022, \u0022Rock also look them. Eye-line not meet.\u0022 ),\n\t\tnew( \u0022\u5F88\u4E45\u3002\u5F88\u4E45\u3002\u7ECF\u8D39\u5728\u60F3\u4E0B\u4E00\u53E5\u3002\u0022, \u0022Long time. Long time. Budget thinking next line.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] WolvesSave =\n\t{\n\t\tnew( \u0022\u72FC\u6765\u4E86\u3002\u771F\u7684\u6765\u4E86\u3002\u0022, \u0022Wolf come. Really come.\u0022 ),\n\t\tnew( \u0022\u8C79\u62C9\u4E00\u4E2A\u8D77\u8DF3\u3002\u6293\u4F4F\u6811\u679D\u3002\u0022, \u0022Bao La one jump. Grab branch.\u0022 ),\n\t\tnew( \u0022\u8FDE\u7EED\u4E24\u6B21\u5411\u540E\u5927\u56DE\u73AF\u3002\u4F53\u64CD\u3002\u0022, \u0022Two time back giant circle. Gymnastics.\u0022 ),\n\t\tnew( \u0022\u7528\u6807\u51C6\u52A8\u4F5C\u8DF3\u5230\u4E09\u53EA\u72FC\u9762\u524D\u3002\u0022, \u0022Use standard move jump to three wolf front.\u0022 ),\n\t\tnew( \u0022\u725B\u7FA4\u5374\u8BF4\uFF1A\u4ED6\u662F\u8DDF\u72FC\u4E00\u4F19\u7684\u3002\u0022, \u0022Herd say: he is with the wolf.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] Ban =\n\t{\n\t\tnew( \u0022\u4E0D\u8BB8\u518D\u8DDF\u7740\u3002\u0022, \u0022Not allow follow anymore.\u0022 ),\n\t\tnew( \u0022\u8C79\u62C9\u8FD8\u662F\u6765\u3002\u72FC\u6765\u7684\u65F6\u5019\u4ED6\u8FD8\u6321\u3002\u0022, \u0022Bao La still come. When wolf come he still block.\u0022 ),\n\t\tnew( \u0022\u725B\u6765\u770B\u89C1\u4E86\u3002\u725B\u7FA4\u6CA1\u770B\u89C1\u3002\u0022, \u0022Niu Lai see it. Herd not see.\u0022 ),\n\t\tnew( \u0022\u8EAB\u4EFD\u4E0D\u5BF9\u3002\u6240\u4EE5\u770B\u4E0D\u89C1\u3002\u0022, \u0022Identity not right. So cannot see.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] MomFarewell =\n\t{\n\t\tnew( \u0022\u5CE1\u8C37\u91CC\u672C\u8BE5\u4F11\u606F\u3002\u72FC\u53C8\u6765\u4E86\u3002\u0022, \u0022In canyon should rest. Wolf come again.\u0022 ),\n\t\tnew( \u0022\u8C79\u62C9\u4E0D\u5728\u3002\u4ED6\u88AB\u8D76\u8D70\u4E86\u3002\u0022, \u0022Bao La not here. They drive him away.\u0022 ),\n\t\tnew( \u0022\u5B69\u5B50\uFF0C\u5F80\u524D\u8DD1\u3002\u4E0D\u8981\u56DE\u5934\u3002\u0022, \u0022Child, run forward. Don\u0027t look back.\u0022 ),\n\t\tnew( \u0022\u5988\u5988\u53BB\u6321\u4F4F\u3002\u8FC7\u540E\u4F1A\u5408\u3002\u0022, \u0022Mama go block. Later we meet.\u0022 ),\n\t\tnew( \u0022\u4F60\u8981\u957F\u5927\u3002\u725B\uFF0C\u6765\u3002\u0022, \u0022You must grow up. Cow, come.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] Cart =\n\t{\n\t\tnew( \u0022\u53F0\u8F66\u8D8A\u6765\u8D8A\u5927\u3002\u50CF\u4E00\u5217\u706B\u8F66\u3002\u0022, \u0022The cart become more and more big. Like one train.\u0022 ),\n\t\tnew( \u0022\u4E91\u738E\u8BF4\uFF1A\u522B\u5BF9\u6297\u3002\u0022, \u0022Yun Ding say: don\u0027t fight.\u0022 ),\n\t\tnew( \u0022\u725B\u6765\u4E0D\u542C\u3002\u65F6\u95F4\u4F1A\u8BC1\u660E\u725B\u6765\u7684\u3002\u0022, \u0022Niu Lai no listen. Time will prove Niu Lai.\u0022 ),\n\t\tnew( \u0022\u54DE\u2014\u2014\u2014\u2014\u0022, \u0022MOO\u2014\u2014\u2014\u2014\u0022 ),\n\t\tnew( \u0022\u518D\u54DE\u3002\u518D\u518D\u54DE\u3002\u5B83\u8FD8\u5728\u957F\u3002\u0022, \u0022Moo again. Moo again again. It still grow.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] Farewell =\n\t{\n\t\tnew( \u0022\u53C8\u662F\u7EAF\u9ED1\u7684\u80CC\u666F\u3002\u0022, \u0022Again pure black background.\u0022 ),\n\t\tnew( \u0022\u4E91\u738E\uFF0C\u8C22\u8C22\u4F60\u3002\u4E00\u8DEF\u770B\u7740\u3002\u0022, \u0022Yun Ding, thank you. Whole road watching.\u0022 ),\n\t\tnew( \u0022\u55EF\u3002\u0022, \u0022Ng.\u0022 ),\n\t\tnew( \u0022\u68A6\u8BE5\u9192\u4E86\u3002\u0022, \u0022Dream should wake.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] Wake =\n\t{\n\t\tnew( \u0022\u68A6\u9192\u4E86\u3002\u725B\u6765\u7AD9\u7A33\u4E86\u3002\u0022, \u0022Dream wake. Niu Lai stand stable.\u0022 ),\n\t\tnew( \u0022\u539F\u6765\u4ECE\u76F4\u7ACB\u8D70\u5F00\u59CB\u5C31\u662F\u68A6\u3002\u0022, \u0022Turns out from walk upright already is dream.\u0022 ),\n\t\tnew( \u0022\u62AC\u5934\u3002\u4E91\u96C0\u5728\u5929\u4E0A\u753B\u4E00\u6761\u7EBF\u3002\u0022, \u0022Look up. Lark in sky draw one line.\u0022 ),\n\t\tnew( \u0022\u8DDF\u7740\u5979\u7684\u98DE\u884C\u8F68\u8FF9\u8D70\u3002\u0022, \u0022Follow her fly line walk.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] Dad =\n\t{\n\t\tnew( \u0022\u6211\u662F\u725B\u7238\u7238\u3002\u65CF\u7FA4\u9996\u9886\u3002\u0022, \u0022I am Cow Father. Herd boss.\u0022 ),\n\t\tnew( \u0022\u4F60\u56DE\u6765\u4E86\u3002\u7AD9\u8D77\u6765\u4E86\u3002\u0022, \u0022You come back. You stand up.\u0022 ),\n\t\tnew( \u0022\u8D70\u5427\u3002\u6211\u4EEC\u4E00\u8D77\u8D70\u3002\u0022, \u0022Walk. We walk together.\u0022 ),\n\t\tnew( \u0022\u96E8\u540E\u8F7B\u98CE\u6709\u9999\u3002\u0022, \u0022After rain, light wind have fragrance.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] Ending =\n\t{\n\t\tnew( \u0022\u68A6\u9192\u4E86\u3002\u725B\u6765\u7AD9\u7A33\u4E86\u3002\u0022, \u0022Dream wake. Niu Lai stand stable.\u0022 ),\n\t\tnew( \u0022\u4E91\u96C0\u5728\u5929\u4E0A\u753B\u4E00\u6761\u7EBF\u3002\u0022, \u0022Lark in sky draw one line.\u0022 ),\n\t\tnew( \u0022\u5988\u5988\u7684\u98CE\u8FD8\u5728\u3002\u8C79\u62C9\u4E5F\u8FD8\u5728\u98CE\u91CC\u3002\u0022, \u0022Mama\u0027s wind still here. Bao La also in the wind.\u0022 ),\n\t\tnew( \u0022\u53F0\u8F66\u505C\u4E86\u3002\u77F3\u5934\u8FD8\u5728\u770B\u72FC\u3002\u0022, \u0022Cart stop. Rock still look at wolf.\u0022 ),\n\t\tnew( \u0022\u96E8\u540E\u8F7B\u98CE\u6709\u9999\u3002\u0022, \u0022After rain, light wind have fragrance.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] TimeProve =\n\t{\n\t\tnew( \u0022\u65F6\u95F4\u4F1A\u8BC1\u660E\u725B\u6765\u7684\u3002\u0022, \u0022Time will prove Niu Lai.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] EatFirst =\n\t{\n\t\tnew( \u0022\u5403\u9971\u4E86\u518D\u53BB\u4E0D\u597D\u5417\u3002\u0022, \u0022Eat full then go, not better?\u0022 ),\n\t\tnew( \u0022\u8349\u8FD8\u5728\u3002\u8DEF\u4E5F\u8FD8\u5728\u3002\u0022, \u0022Grass still here. Road also still here.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] TooClose =\n\t{\n\t\tnew( \u0022\u7B2C\u4E00\uFF0C\u4ED6\u4E0D\u80FD\u79BB\u725B\u7FA4\u592A\u8FD1\u3002\u0022, \u0022First, he cannot leave cow group too near.\u0022 ),\n\t\tnew( \u0022\u7B2C\u4E8C\uFF0C\u8EAB\u4EFD\u4E0D\u5BF9\u3002\u0022, \u0022Second, identity not right.\u0022 ),\n\t\tnew( \u0022\u7B2C\u4E09\uFF0C\u6211\u4EEC\u8FD8\u6CA1\u60F3\u597D\u7B2C\u4E09\u3002\u0022, \u0022Third, we not yet think of third.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] Protect =\n\t{\n\t\tnew( \u0022\u6025\u4EC0\u4E48\u3002\u6211\u6765\u4FDD\u62A4\u4F60\u4EEC\u3002\u0022, \u0022Rush what. I come protect you.\u0022 ),\n\t\tnew( \u0022\uFF08\u8138\u8D34\u8FC7\u6765\u3002\u9662\u7EBF\u5728\u7B11\u3002\uFF09\u0022, \u0022(Face come close. Theater is laughing.)\u0022 ),\n\t};\n\n\tpublic static readonly Line[] Headbutt =\n\t{\n\t\tnew( \u0022\u6211\u559C\u6B22\u9876\u8111\u95E8\u513F\u3002\u4F60\u662F\u600E\u4E48\u77E5\u9053\u7684\u3002\u0022, \u0022I like bump forehead. How you know.\u0022 ),\n\t\tnew( \u0022\uFF08\u4E24\u4E2A\u6A21\u578B\u5BF9\u4E0D\u9F50\u3002\u8FD8\u662F\u9876\u4E86\u3002\uFF09\u0022, \u0022(Two model not align. Still bump.)\u0022 ),\n\t};\n\n\tpublic static readonly Line[] NoRoad =\n\t{\n\t\tnew( \u0022\u6CA1\u8DEF\u4E86\u3002\u0022, \u0022No road anymore.\u0022 ),\n\t\tnew( \u0022\u53F0\u8F66\u628A\u8DEF\u5403\u4E86\u3002\u5B83\u8FD8\u5728\u957F\u3002\u0022, \u0022Cart eat the road. It still grow.\u0022 ),\n\t\tnew( \u0022\u4E91\u738E\u8BF4\u522B\u5BF9\u6297\u3002\u725B\u6765\u8BF4\u54DE\u3002\u0022, \u0022Yun Ding say don\u0027t fight. Niu Lai say moo.\u0022 ),\n\t};\n\n\tpublic static readonly Line[] CardOpen =\n\t{\n\t\tnew( \u0022\u7B2C\u4E00\u573A \u00B7 \u7741\u5F00\u773C\u775B\u0022, \u0022Scene 1 \u00B7 Open eye\u0022 ),\n\t};\n\n\tpublic static Line Quest( Beat beat ) =\u003E beat switch\n\t{\n\t\tBeat.Migrate =\u003E new( \u0022\u518D\u5403\u4E00\u4E1B\u3002\u8349\u4F1A\u56DE\u6765\u3002\u7136\u540E\u627E\u4E91\u738E\u3002\u5979\u559C\u6B22\u8FD9\u513F\u3002\u0022, \u0022Eat one more tuft. Grass come back. Then find Yun Ding. She like here.\u0022 ),\n\t\tBeat.Dream =\u003E new( \u0022\u7EAF\u9ED1\u91CC\uFF0C\u542C\u5B8C\u4E91\u738E\u3002\u613F\u610F\u5230\u5979\u80CC\u4E0A\u6765\u5417\u3002\u0022, \u0022In the black, finish listen Yun Ding. Willing come up on back?\u0022 ),\n\t\tBeat.Snake =\u003E new( \u0022\u8349\u539F\u6DF1\u5904\u6709\u4E00\u6761\u5C0F\u7EF3\u5934\u3002\u8D70\u8FD1\u3002\u5B83\u4E0D\u662F\u7EF3\u5B50\u3002\u0022, \u0022Deep grass have one Little Rope-Head. Walk near. It is not rope.\u0022 ),\n\t\tBeat.Creek =\u003E new( \u0022\u6EAA\u6C34\u5F88\u6DF1\uFF08\u5230\u819D\u76D6\uFF09\u3002\u56DE\u5934\u3002\u7136\u540E\u8DF3\u3002\u0022, \u0022Creek very deep (to knee). Look back. Then jump.\u0022 ),\n\t\tBeat.Night =\u003E new( \u0022\u8C79\u62C9\u997F\u4E86\u3002\u5148\u627E\u5988\u5988\u8981\u5976\uFF0C\u518D\u5206\u8349\u7ED9\u4ED6\u3002\u0022, \u0022Bao La hungry. First get milk from Mama, then share grass.\u0022 ),\n\t\tBeat.Suspect =\u003E new( \u0022\u53BB\u542C\u725B\u4E8C\u8BF4\u8C79\u62C9\u8EAB\u4EFD\u4E0D\u5BF9\u3002\u0022, \u0022Go hear Niu Er say Bao La identity not right.\u0022 ),\n\t\tBeat.Wolves =\u003E new( \u0022\u4E09\u53EA\u72FC\u5728\u770B\u77F3\u5934\u3002\u8D70\u8FC7\u53BB\u3002\u8C79\u62C9\u4F1A\u4F53\u64CD\u3002\u0022, \u0022Three wolf look at rock. Walk over. Bao La do gymnastics.\u0022 ),\n\t\tBeat.Ban =\u003E new( \u0022\u725B\u7FA4\u8981\u8D76\u8D70\u8C79\u62C9\u3002\u53BB\u770B\u4E00\u773C\u3002\u0022, \u0022Herd want drive Bao La away. Go look.\u0022 ),\n\t\tBeat.Canyon =\u003E new( \u0022\u5230\u5CE1\u8C37\u3002\u542C\u5988\u5988\u628A\u8BDD\u8BF4\u5B8C\u3002\u4E0D\u8981\u56DE\u5934\u3002\u0022, \u0022Go canyon. Let Mama finish. Don\u0027t look back.\u0022 ),\n\t\tBeat.Cart =\u003E new( \u0022\u53F0\u8F66\u8D8A\u6765\u8D8A\u5927\u3002\u5BF9\u7740\u5B83\u54DE\u3002\u518D\u54DE\u3002\u518D\u54DE\u3002\u0022, \u0022Cart more and more big. Moo at it. Moo again. Moo again.\u0022 ),\n\t\tBeat.Farewell =\u003E new( \u0022\u7EAF\u9ED1\u91CC\uFF0C\u548C\u4E91\u738E\u9053\u522B\u3002\u0022, \u0022In the black, say goodbye to Yun Ding.\u0022 ),\n\t\tBeat.Wake =\u003E new( \u0022\u8DDF\u7740\u5929\u4E0A\u90A3\u6761\u6B6A\u7EBF\uFF0C\u5F80\u5317\u8D70\u3002\u0022, \u0022Follow that crooked line in sky, walk north.\u0022 ),\n\t\tBeat.Reunion =\u003E new( \u0022\u53BB\u627E\u725B\u7238\u7238\u3002\u4E00\u8D77\u8D70\u3002\u0022, \u0022Go find Cow Father. Walk together.\u0022 ),\n\t\t_ =\u003E new( \u0022\u96E8\u540E\u8F7B\u98CE\u6709\u9999\u3002\u0022, \u0022After rain, light wind have fragrance.\u0022 )\n\t};\n}\n"},{"Ident":"dogecoin.niulai","Path":"ui/controls/color/colorpickercontrol.cs.scss","FileName":"colorpickercontrol.cs.scss","PackageType":"game","CodeKind":"Game","AssetVersionId":343005,"Code":"ColorPickerControl\r\n{\r\n\tflex-direction: column;\r\n\tflex-shrink: 0;\r\n\tgap: 0.5rem;\r\n\tmargin: 1rem;\r\n}"},{"Ident":"dogecoin.niulai","Path":"ui/components/packagelist.razor.scss","FileName":"packagelist.razor.scss","PackageType":"game","CodeKind":"Game","AssetVersionId":343005,"Code":".package-list\r\n{\r\n    flex-shrink: 1;\r\n    flex-wrap: wrap;\r\n    flex-grow: 1;\r\n\r\n    h1\r\n    {\r\n        width: 100%;\r\n        margin-top: 50px;\r\n        font-size: 40px;\r\n    }\r\n\r\n    PackageCard\r\n    {\r\n        \u0026:hover\r\n        {\r\n            sound-in: \u0022ui.button.over\u0022;\r\n        }\r\n    }\r\n\r\n    VirtualGrid\r\n    {\r\n        width: 100%;\r\n        height: 100%;\r\n\r\n        .cell\r\n        {\r\n            \r\n        }\r\n    }\r\n}"},{"Ident":"dogecoin.niulai","Path":"ui/components/packagefilters.razor.scss","FileName":"packagefilters.razor.scss","PackageType":"game","CodeKind":"Game","AssetVersionId":343005,"Code":"\r\n@import \u0022/styles/_theme.scss\u0022;\r\n\r\n.packagefilter\r\n{\r\n\twidth: 100%;\r\n\tflex-shrink: 0;\r\n\r\n\t.left\r\n\t{\r\n\t\tflex-grow: 1;\r\n\t\tflex-shrink: 0;\r\n\t\tgap: 16px;\r\n\t}\r\n\r\n\t.right\r\n\t{\r\n\t\tflex-grow: 1;\r\n\t\tflex-shrink: 0;\r\n\t\tgap: 16px;\r\n\t}\r\n}\r\n\r\n.packagefilter textentry\r\n{\r\n\tflex-grow: 1;\r\n\tpadding: 8px 12px;\r\n\tpointer-events: all;\r\n\r\n\tLabel\r\n\t{\r\n\t\tmargin-left: 26px;\r\n\t}\r\n\r\n\ticonpanel\r\n\t{\r\n\t\tposition: absolute;\r\n\t\tleft: 12px;\r\n\t\topacity: 0.3;\r\n\t\tfont-size: $text-large;\r\n\t}\r\n}\r\n\r\n\t.packagefilterfacet, .packagefilter textentry\r\n\t{\r\n\t\tbackground-color: rgba($default-950, 0.3);\r\n\t\tcolor: $default-text;\r\n\t\toutline: 1px solid $default-border;\r\n\t\ttransition: all 150ms $easing;\r\n\t\tborder-radius: $rounding-default;\r\n\t\tpadding: 4px 12px;\r\n\t\tgap: 16px;\r\n\t\tflex-shrink: 0;\r\n\t\tfont-size: 14px;\r\n\t\tcursor: pointer;\r\n\t\talign-items: center;\r\n\r\n\t\t.clear-button\r\n\t\t{\r\n\t\t\theight: 100%;\r\n\t\t\tmargin-right: -8px;\r\n\t\t\talign-items: center;\r\n\t\t\tpadding: 0px 4px;\r\n\r\n\t\t\t\u0026:hover\r\n\t\t\t{\r\n\t\t\t\tcolor: red;\r\n\t\t\t\tborder-radius: 100%;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t\u0026.is-active\r\n\t\t{\r\n\t\t\tbackground-color: $default-700;\r\n\t\t}\r\n\r\n\t\t\u0026:not(.is-active)\r\n\t\t{\r\n\t\t\t\u0026:hover\r\n\t\t\t{\r\n\t\t\t\toutline: 1px solid $default-50;\r\n\t\t\t}\r\n\t\t}\r\n\t}"},{"Ident":"dogecoin.niulai","Path":"FilmCut.cs","FileName":"FilmCut.cs","PackageType":"game","CodeKind":"Game","AssetVersionId":343005,"Code":"namespace NiuLai;\n\n/// \u003Csummary\u003E\n/// Janky in-engine cutscenes. Theater mud \u002B crowd laugh. No film stills.\n/// E skips a shot. Camera slams. Models slide.\n/// \u003C/summary\u003E\npublic enum CutId\n{\n\tNone,\n\tOpenEyes,\n\tLarkBack,\n\tEatFirst,\n\tLeopardFace,\n\tMilkDad,\n\tTooClose,\n\tHeadbutt,\n\tNoRoad,\n\tNg\n}\n\npublic static class FilmCut\n{\n\tpublic static bool Playing { get; private set; }\n\tpublic static CutId Id { get; private set; }\n\tpublic static int Shot { get; private set; }\n\tpublic static int Version { get; private set; }\n\tpublic static string CardCn { get; private set; } = \u0022\u0022;\n\tpublic static string CardEn { get; private set; } = \u0022\u0022;\n\n\tstatic float _t;\n\tstatic float _hold;\n\tstatic int _shots;\n\tstatic Action _done;\n\tstatic Vector3 _camPos;\n\tstatic Rotation _camRot;\n\tstatic GameObject _focus;\n\tstatic bool _tipped;\n\n\tpublic static void Play( CutId id, Action done = null )\n\t{\n\t\tif ( id == CutId.None )\n\t\t\treturn;\n\n\t\tId = id;\n\t\tPlaying = true;\n\t\tShot = 0;\n\t\t_t = 0;\n\t\t_done = done;\n\t\t_tipped = false;\n\t\tCardCn = \u0022\u0022;\n\t\tCardEn = \u0022\u0022;\n\t\t_shots = id switch\n\t\t{\n\t\t\tCutId.OpenEyes =\u003E 3,\n\t\t\tCutId.LarkBack =\u003E 2,\n\t\t\tCutId.EatFirst =\u003E 1,\n\t\t\tCutId.LeopardFace =\u003E 2,\n\t\t\tCutId.MilkDad =\u003E 2,\n\t\t\tCutId.TooClose =\u003E 2,\n\t\t\tCutId.Headbutt =\u003E 2,\n\t\t\tCutId.NoRoad =\u003E 2,\n\t\t\tCutId.Ng =\u003E 2,\n\t\t\t_ =\u003E 1\n\t\t};\n\t\tBeginShot();\n\t\tVersion\u002B\u002B;\n\t}\n\n\tpublic static void Skip()\n\t{\n\t\tif ( !Playing )\n\t\t\treturn;\n\t\tAdvanceShot();\n\t}\n\n\tpublic static void Tick( float dt )\n\t{\n\t\tif ( !Playing )\n\t\t\treturn;\n\n\t\t_t \u002B= dt;\n\t\tAnimate();\n\t\tAimCamera();\n\n\t\tif ( _t \u003E= _hold )\n\t\t\tAdvanceShot();\n\t}\n\n\tstatic void AdvanceShot()\n\t{\n\t\tShot\u002B\u002B;\n\t\tif ( Shot \u003E= _shots )\n\t\t{\n\t\t\tEnd();\n\t\t\treturn;\n\t\t}\n\n\t\t_t = 0;\n\t\tBeginShot();\n\t\tVersion\u002B\u002B;\n\t}\n\n\tstatic void BeginShot()\n\t{\n\t\t_hold = 3.4f;\n\t\t_focus = null;\n\t\tCardCn = \u0022\u0022;\n\t\tCardEn = \u0022\u0022;\n\n\t\tswitch ( Id )\n\t\t{\n\t\t\tcase CutId.OpenEyes:\n\t\t\t\tif ( Shot == 0 )\n\t\t\t\t{\n\t\t\t\t\tCardCn = \u0022\u7B2C\u4E00\u573A \u00B7 \u7741\u5F00\u773C\u775B\u0022;\n\t\t\t\t\tCardEn = \u0022Scene 1 \u00B7 Open your eyes\u0022;\n\t\t\t\t\t_hold = 2.2f;\n\t\t\t\t\tGameAudio.PlayClip( GameAudio.NameNiu, 0.85f );\n\t\t\t\t}\n\t\t\t\telse if ( Shot == 1 )\n\t\t\t\t{\n\t\t\t\t\tTipPlayer( true );\n\t\t\t\t\t_focus = CalfPlayer.Instance?.GameObject;\n\t\t\t\t\t_hold = 4.2f;\n\t\t\t\t\tGameState.Talk( \u0022\u725B\u5988\u5988 / Mama\u0022, Lines.MomSleep );\n\t\t\t\t\tGameAudio.PlayClip( GameAudio.MamaWake );\n\t\t\t\t\tGameAudio.PlayCrowd( GameAudio.CrowdWake );\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tTipPlayer( false );\n\t\t\t\t\t_focus = CalfPlayer.Instance?.GameObject;\n\t\t\t\t\t_hold = 1.6f;\n\t\t\t\t\tGameAudio.PlayClip( GameAudio.Stand, 0.9f );\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase CutId.LarkBack:\n\t\t\t\tif ( Shot == 0 )\n\t\t\t\t{\n\t\t\t\t\tCardCn = \u0022\u613F\u610F\u5230\u6211\u80CC\u4E0A\u6765\u5417\u0022;\n\t\t\t\t\tCardEn = \u0022Willing come up on my back?\u0022;\n\t\t\t\t\t_hold = 2.0f;\n\t\t\t\t}\n\t\t\t\tLieNamed( \u0022lark\u0022, true );\n\t\t\t\t_focus = Named( \u0022lark\u0022 );\n\t\t\t\tif ( Shot == 1 )\n\t\t\t\t{\n\t\t\t\t\t_hold = 4.6f;\n\t\t\t\t\tGameState.Talk( \u0022\u4E91\u738E / Yun Ding\u0022, Lines.Dream );\n\t\t\t\t\tGameAudio.PlayClip( GameAudio.LarkRide );\n\t\t\t\t\tGameAudio.PlayCrowd( GameAudio.CrowdRide );\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase CutId.EatFirst:\n\t\t\t\tCardCn = \u0022\u5403\u9971\u4E86\u518D\u53BB\u4E0D\u597D\u5417\u0022;\n\t\t\t\tCardEn = \u0022Eat full then go, not better?\u0022;\n\t\t\t\t_focus = Named( \u0022mom\u0022 ) ?? CalfPlayer.Instance?.GameObject;\n\t\t\t\t_hold = 3.8f;\n\t\t\t\tGameState.Talk( \u0022\u725B\u5988\u5988 / Mama\u0022, Lines.EatFirst );\n\t\t\t\tGameAudio.PlayClip( GameAudio.SlowDown );\n\t\t\t\tbreak;\n\n\t\t\tcase CutId.LeopardFace:\n\t\t\t\tif ( Shot == 0 )\n\t\t\t\t{\n\t\t\t\t\tCardCn = \u0022\u8C79\u62C9\u7279\u5199 \u00B7 \u9662\u7EBF\u5728\u7B11\u0022;\n\t\t\t\t\tCardEn = \u0022Bao La close-up \u00B7 theater laughing\u0022;\n\t\t\t\t\t_hold = 1.8f;\n\t\t\t\t}\n\t\t\t\t_focus = Named( \u0022leopard\u0022 );\n\t\t\t\tif ( Shot == 1 )\n\t\t\t\t{\n\t\t\t\t\t_hold = 5.0f;\n\t\t\t\t\tGameState.Talk( \u0022\u8C79\u62C9 / Bao La\u0022, Lines.Protect );\n\t\t\t\t\tGameAudio.PlayClip( GameAudio.Leopard );\n\t\t\t\t\tGameAudio.PlayCrowd( GameAudio.CrowdBig );\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase CutId.MilkDad:\n\t\t\t\tif ( Shot == 0 )\n\t\t\t\t{\n\t\t\t\t\tCardCn = \u0022\u5C11\u4E86\u70B9\u5988\u5988\u7684\u5473\u9053\u0022;\n\t\t\t\t\tCardEn = \u0022Missing a little Mama flavor\u0022;\n\t\t\t\t\t_hold = 1.8f;\n\t\t\t\t\tGameAudio.PlayClip( GameAudio.Milk );\n\t\t\t\t}\n\t\t\t\t_focus = Named( \u0022leopard\u0022 );\n\t\t\t\tif ( Shot == 1 )\n\t\t\t\t{\n\t\t\t\t\t_hold = 5.2f;\n\t\t\t\t\tGameState.Talk( \u0022\u8C79\u62C9 / Bao La\u0022, Lines.MilkScene );\n\t\t\t\t\tGameAudio.PlayCrowd( GameAudio.CrowdMilk );\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase CutId.TooClose:\n\t\t\t\tif ( Shot == 0 )\n\t\t\t\t{\n\t\t\t\t\tCardCn = \u0022\u7B2C\u4E00\uFF0C\u4ED6\u4E0D\u80FD\u79BB\u725B\u7FA4\u592A\u8FD1\u0022;\n\t\t\t\t\tCardEn = \u0022First, he cannot leave herd too near\u0022;\n\t\t\t\t\t_hold = 2.0f;\n\t\t\t\t}\n\t\t\t\t_focus = Named( \u0022niuer\u0022 ) ?? Named( \u0022dad\u0022 );\n\t\t\t\tif ( Shot == 1 )\n\t\t\t\t{\n\t\t\t\t\t_hold = 4.4f;\n\t\t\t\t\tGameState.Talk( \u0022\u725B\u4E8C / Niu Er\u0022, Lines.TooClose );\n\t\t\t\t\tGameAudio.PlayClip( GameAudio.SlowDown );\n\t\t\t\t\tGameAudio.PlayCrowd( GameAudio.CrowdMilk );\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase CutId.Headbutt:\n\t\t\t\tCardCn = \u0022\u6211\u559C\u6B22\u9876\u8111\u95E8\u513F\u0022;\n\t\t\t\tCardEn = \u0022I like bump forehead\u0022;\n\t\t\t\t_focus = Named( \u0022leopard\u0022 );\n\t\t\t\t_hold = Shot == 0 ? 1.6f : 4.0f;\n\t\t\t\tif ( Shot == 1 )\n\t\t\t\t{\n\t\t\t\t\tGameState.Talk( \u0022\u8C79\u62C9 / Bao La\u0022, Lines.Headbutt );\n\t\t\t\t\tGameAudio.PlayClip( GameAudio.LikeHere );\n\t\t\t\t\tGameAudio.PlayCrowd( GameAudio.CrowdBig );\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase CutId.NoRoad:\n\t\t\t\tif ( Shot == 0 )\n\t\t\t\t{\n\t\t\t\t\tCardCn = \u0022\u6CA1\u8DEF\u4E86\u0022;\n\t\t\t\t\tCardEn = \u0022No road anymore\u0022;\n\t\t\t\t\t_hold = 2.2f;\n\t\t\t\t\tGameAudio.PlayClip( GameAudio.CartGrow );\n\t\t\t\t}\n\t\t\t\t_focus = Named( \u0022cart\u0022 );\n\t\t\t\tif ( Shot == 1 )\n\t\t\t\t{\n\t\t\t\t\t_hold = 4.6f;\n\t\t\t\t\tGameState.Talk( \u0022\u65C1\u767D / Narrator\u0022, Lines.NoRoad );\n\t\t\t\t\tGameAudio.PlayCrowd( GameAudio.CrowdCart );\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase CutId.Ng:\n\t\t\t\tif ( Shot == 0 )\n\t\t\t\t{\n\t\t\t\t\tCardCn = \u0022\u55EF\u0022;\n\t\t\t\t\tCardEn = \u0022Ng.\u0022;\n\t\t\t\t\t_hold = 1.6f;\n\t\t\t\t}\n\t\t\t\tLieNamed( \u0022lark\u0022, false );\n\t\t\t\t_focus = Named( \u0022lark\u0022 );\n\t\t\t\tif ( Shot == 1 )\n\t\t\t\t{\n\t\t\t\t\t_hold = 4.2f;\n\t\t\t\t\tGameState.Talk( \u0022\u4E91\u738E / Yun Ding\u0022, Lines.Farewell );\n\t\t\t\t\tGameAudio.PlayClip( GameAudio.LarkNg );\n\t\t\t\t\tGameAudio.PlayCrowd( GameAudio.CrowdNg );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tstatic void Animate()\n\t{\n\t\tif ( Id == CutId.Headbutt \u0026\u0026 _focus.IsValid() \u0026\u0026 CalfPlayer.Instance.IsValid() )\n\t\t{\n\t\t\tvar a = CalfPlayer.Instance.WorldPosition;\n\t\t\tvar b = _focus.WorldPosition;\n\t\t\tvar mid = (a \u002B b) * 0.5f;\n\t\t\tvar bump = MathF.Sin( _t * 10f ) * 8f;\n\t\t\tCalfPlayer.Instance.WorldPosition = mid \u002B Vector3.Left * (18f \u002B bump);\n\t\t\t_focus.WorldPosition = mid \u002B Vector3.Right * (18f - bump);\n\t\t}\n\n\t\tif ( Id == CutId.Ng \u0026\u0026 _focus.IsValid() )\n\t\t{\n\t\t\t_focus.WorldPosition = GameState.DreamPos \u002B new Vector3( 0, 0, 40f \u002B MathF.Sin( _t * 2f ) * 8f );\n\t\t\t_focus.WorldRotation = Rotation.FromYaw( _t * 40f ) * Rotation.FromRoll( 18f );\n\t\t}\n\t}\n\n\tstatic void AimCamera()\n\t{\n\t\tvar cam = CalfPlayer.Instance?.Scene?.Camera;\n\t\tif ( cam is null || !cam.IsValid() )\n\t\t\treturn;\n\n\t\tvar target = _focus.IsValid() ? _focus.WorldPosition : (CalfPlayer.Instance?.WorldPosition ?? Vector3.Zero);\n\t\ttarget \u002B= Vector3.Up * (Id == CutId.LeopardFace ? 22f : 28f);\n\n\t\tvar dist = Id switch\n\t\t{\n\t\t\tCutId.LeopardFace =\u003E 38f,\n\t\t\tCutId.OpenEyes =\u003E 42f,\n\t\t\tCutId.LarkBack =\u003E 55f,\n\t\t\tCutId.Ng =\u003E 90f,\n\t\t\tCutId.NoRoad =\u003E 220f,\n\t\t\t_ =\u003E 70f\n\t\t};\n\n\t\tvar side = Id == CutId.LarkBack ? 10f : 16f;\n\t\tvar height = Id == CutId.LarkBack ? 12f : 22f;\n\t\tif ( Id == CutId.Ng )\n\t\t\theight = 8f;\n\n\t\t_camPos = target - Vector3.Forward * dist \u002B Vector3.Right * side \u002B Vector3.Up * height;\n\t\tif ( Id == CutId.NoRoad )\n\t\t\t_camPos = target \u002B new Vector3( -180, -140, 90 );\n\t\tif ( Id == CutId.Ng )\n\t\t\t_camPos = target \u002B new Vector3( 0, -70, 10 );\n\n\t\tvar look = (target - _camPos);\n\t\tif ( look.Length \u003E 1f )\n\t\t\t_camRot = Rotation.LookAt( look, Vector3.Up );\n\n\t\tcam.WorldPosition = _camPos;\n\t\tcam.WorldRotation = _camRot;\n\t\tif ( GameState.InVoid || Id == CutId.Ng )\n\t\t\tcam.BackgroundColor = Color.Black;\n\t}\n\n\tstatic void End()\n\t{\n\t\tPlaying = false;\n\t\tvar done = _done;\n\t\tvar id = Id;\n\t\tId = CutId.None;\n\t\t_done = null;\n\t\tCardCn = \u0022\u0022;\n\t\tCardEn = \u0022\u0022;\n\t\tLieNamed( \u0022lark\u0022, false );\n\t\tTipPlayer( false );\n\t\tVersion\u002B\u002B;\n\t\tdone?.Invoke();\n\n\t\tif ( id == CutId.LarkBack )\n\t\t\tGameState.EnterDreamFromCut();\n\t\telse if ( id == CutId.Ng )\n\t\t\tGameState.FinishFarewellCut();\n\t}\n\n\tstatic void TipPlayer( bool down )\n\t{\n\t\tvar p = CalfPlayer.Instance;\n\t\tif ( !p.IsValid() )\n\t\t\treturn;\n\t\t_tipped = down;\n\t\tp.WorldRotation = down\n\t\t\t? Rotation.FromPitch( 80f )\n\t\t\t: Rotation.FromYaw( p.WorldRotation.Yaw() );\n\t}\n\n\tstatic void LieNamed( string name, bool lie )\n\t{\n\t\tvar go = Named( name );\n\t\tif ( !go.IsValid() )\n\t\t\treturn;\n\t\tgo.WorldRotation = lie\n\t\t\t? Rotation.FromRoll( 90f ) * Rotation.FromPitch( 20f )\n\t\t\t: Rotation.Identity;\n\t}\n\n\tstatic GameObject Named( string name )\n\t{\n\t\tif ( WorldBuilder.Stage.TryGetValue( name, out var go ) \u0026\u0026 go.IsValid() )\n\t\t\treturn go;\n\t\treturn null;\n\t}\n}\n"},{"Ident":"dogecoin.niulai","Path":"Primitives.cs","FileName":"Primitives.cs","PackageType":"game","CodeKind":"Game","AssetVersionId":343005,"Code":"namespace NiuLai;\n\npublic static class Primitives\n{\n\tpublic const string Box = \u0022models/dev/box.vmdl\u0022;\n\tpublic const string Plane = \u0022models/dev/plane.vmdl\u0022;\n\tpublic const string Citizen = \u0022models/citizen/citizen.vmdl\u0022;\n\tpublic const string DefaultMat = \u0022materials/default.vmat\u0022;\n\n\tstatic Model _box;\n\tstatic Model _plane;\n\tstatic Model _citizen;\n\tstatic Material _mat;\n\n\tpublic static Model BoxModel =\u003E _box ??= Model.Load( Box );\n\tpublic static Model PlaneModel =\u003E _plane ??= Model.Load( Plane );\n\tpublic static Model CitizenModel =\u003E _citizen ??= Model.Load( Citizen );\n\tpublic static Material TintMat =\u003E _mat ??= Material.Load( DefaultMat );\n\n\tpublic static GameObject BoxAt( string name, Vector3 pos, Vector3 scale, Color tint, GameObject parent = null, bool collider = true )\n\t{\n\t\tvar go = new GameObject( true, name );\n\t\tif ( parent is not null )\n\t\t\tgo.SetParent( parent, false );\n\t\tgo.LocalPosition = parent is null ? default : pos;\n\t\tif ( parent is null )\n\t\t\tgo.WorldPosition = pos;\n\t\tgo.LocalScale = scale;\n\n\t\tvar mr = go.Components.Create\u003CModelRenderer\u003E();\n\t\tmr.Model = BoxModel;\n\t\tmr.MaterialOverride = TintMat;\n\t\tmr.Tint = tint;\n\n\t\tif ( collider )\n\t\t{\n\t\t\tvar col = go.Components.Create\u003CBoxCollider\u003E();\n\t\t\tcol.Scale = new Vector3( 50, 50, 50 );\n\t\t\tcol.Static = parent is null;\n\t\t}\n\n\t\treturn go;\n\t}\n\n\tpublic static GameObject PlaneAt( string name, Vector3 pos, Vector3 scale, Color tint, bool collider = true )\n\t{\n\t\tvar go = new GameObject( true, name );\n\t\tgo.WorldPosition = pos;\n\t\tgo.LocalScale = scale;\n\n\t\tvar mr = go.Components.Create\u003CModelRenderer\u003E();\n\t\tmr.Model = PlaneModel;\n\t\tmr.MaterialOverride = TintMat;\n\t\tmr.Tint = tint;\n\n\t\tif ( collider )\n\t\t{\n\t\t\tvar col = go.Components.Create\u003CBoxCollider\u003E();\n\t\t\tcol.Center = new Vector3( 0, 0, -4 );\n\t\t\tcol.Scale = new Vector3( 100, 100, 8 );\n\t\t\tcol.Static = true;\n\t\t}\n\n\t\treturn go;\n\t}\n\n\tpublic static GameObject Person( string name, Vector3 pos, Color tint, float scale = 1f )\n\t{\n\t\tvar go = new GameObject( true, name );\n\t\tgo.WorldPosition = pos;\n\t\tgo.LocalScale = scale;\n\n\t\ttry\n\t\t{\n\t\t\tvar skin = go.Components.Create\u003CSkinnedModelRenderer\u003E();\n\t\t\tskin.Model = CitizenModel;\n\t\t\tskin.Tint = tint;\n\t\t\tskin.UseAnimGraph = true;\n\t\t}\n\t\tcatch\n\t\t{\n\t\t\tBoxAt( \u0022body\u0022, Vector3.Up * 36 * scale, new Vector3( 0.4f, 0.25f, 0.9f ) * scale, tint, go, false );\n\t\t}\n\n\t\tvar col = go.Components.Create\u003CBoxCollider\u003E();\n\t\tcol.Center = Vector3.Up * 36 * scale;\n\t\tcol.Scale = new Vector3( 20, 20, 72 ) * scale;\n\t\tcol.Static = true;\n\t\treturn go;\n\t}\n}\n"},{"Ident":"dogecoin.niulai","Path":"ui/menupanel.razor.scss","FileName":"menupanel.razor.scss","PackageType":"game","CodeKind":"Game","AssetVersionId":343005,"Code":"\r\nmenupanel\r\n{\r\n    position: absolute;\r\n    z-index: 1000;\r\n    pointer-events: all;\r\n    font-size: 12px;\r\n    flex-shrink: 0;\r\n\r\n    .background\r\n    {\r\n        position: absolute;\r\n        left: -5000px;\r\n        right: -5000px;\r\n        top: -5000px;\r\n        bottom: -5000px;\r\n    }\r\n\r\n    \u003E .inner\r\n    {\r\n        min-width: 200px;\r\n        min-height: 20px;\r\n        flex-direction: column;\r\n        font-family: Poppins;\r\n        font-weight: bold;\r\n        border-radius: 10px;\r\n        box-shadow: 5px 5px 30px #000e;\r\n        background-color: #2a2a2a;\r\n        flex-shrink: 0;\r\n\r\n        .spacer\r\n        {\r\n            height: 1px;\r\n            background-color: #0005;\r\n        }\r\n\r\n        .option\r\n        {\r\n            color: #fffa;\r\n            padding: 0px 8px;\r\n            cursor: pointer;\r\n            flex-shrink: 0;\r\n            height: 32px;\r\n\r\n            \u0026:first-child\r\n            {\r\n                border-top-left-radius: 10px;\r\n                border-top-right-radius: 10px;\r\n            }\r\n\r\n            \u0026:last-child\r\n            {\r\n                border-bottom-left-radius: 10px;\r\n                border-bottom-right-radius: 10px;\r\n            }\r\n\r\n            .icon\r\n            {\r\n                padding: 8px;\r\n                font-family: Material Icons;\r\n                justify-content: center;\r\n                align-items: center;\r\n                flex-shrink: 0;\r\n            }\r\n\r\n            .text\r\n            {\r\n                padding: 8px;\r\n                flex-shrink: 0;\r\n            }\r\n\r\n            \u0026:hover\r\n            {\r\n                background-color: #3472e6;\r\n                color: #f5f8fe;\r\n            }\r\n        }\r\n    }\r\n}\r\n"},{"Ident":"dogecoin.niulai","Path":"ui/dropdown.cs.scss","FileName":"dropdown.cs.scss","PackageType":"game","CodeKind":"Game","AssetVersionId":343005,"Code":".dropdown\r\n{\r\n\tgap: 2px;\r\n\tflex-grow: 1;\r\n\tcursor: pointer;\r\n\tjustify-content: flex-end;\r\n\talign-items: center;\r\n\tpadding: 0px 12px;\r\n\r\n\t.button-right-column\r\n\t{\r\n\t\tflex-grow: 1;\r\n\t}\r\n}\r\n"},{"Ident":"dogecoin.niulai","Path":"ui/controls/switchcontrol.razor.scss","FileName":"switchcontrol.razor.scss","PackageType":"game","CodeKind":"Game","AssetVersionId":343005,"Code":"\r\n.switchcontrol\r\n{\r\n    flex-direction: row;\r\n    width: 100px;\r\n    min-height: 24px;\r\n    align-items: center;\r\n    cursor: pointer;\r\n\r\n    .switch-frame\r\n    {\r\n        flex-grow: 0;\r\n        flex-shrink: 1;\r\n        width: 48px;\r\n        height: 16px;\r\n        background-color: #fff1;\r\n        margin: 0px 5px;\r\n        align-items: center;\r\n        border-radius: 100px;\r\n        transition: all 0.4s linear;\r\n\r\n        .switch-inner\r\n        {\r\n            position: relative;\r\n            flex-grow: 0;\r\n            flex-shrink: 1;\r\n            background-color: #999;\r\n            width: 25px;\r\n            height: 25px;\r\n            border-radius: 100px;\r\n            left: 20%;\r\n            transform: translateX( -50% );\r\n            transition: all 0.3s ease-out;\r\n        }\r\n    }\r\n\r\n    \u0026.active\r\n    {\r\n        .switch-frame\r\n        {\r\n            background-color: #fffa;\r\n        }\r\n\r\n        .switch-inner\r\n        {\r\n            left: 80%;\r\n            background-color: #fff;\r\n        }\r\n    }\r\n}\r\n"},{"Ident":"dogecoin.niulai","Path":"styles/form/_colorproperty.scss","FileName":"_colorproperty.scss","PackageType":"game","CodeKind":"Game","AssetVersionId":343005,"Code":"\r\n\r\n.colorproperty\r\n{\r\n\talign-items: center;\r\n\tposition: relative;\r\n\r\n\t.colorsquare\r\n\t{\r\n\t\twidth: 20px;\r\n\t\theight: 20px;\r\n\t\tborder-radius: 4px;\r\n\t\tmargin-right: 8px;\r\n\t\tposition: absolute;\r\n\t\tleft: 7px;\r\n\t\tz-index: 1;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t\u003E .textentry:not( .a.b.c )\r\n\t{\r\n\t\tpadding-left: 36px;\r\n\t}\r\n}"},{"Ident":"dogecoin.niulai","Path":"ui/controls/vectorcontrol.cs.scss","FileName":"vectorcontrol.cs.scss","PackageType":"game","CodeKind":"Game","AssetVersionId":343005,"Code":"VectorControl\r\n{\r\n\tgap: 2px;\r\n\tflex-grow: 1;\r\n}\r\n\r\nVectorControl NumberEntry\r\n{\r\n\tflex-basis: 50%;\r\n}"},{"Ident":"dogecoin.niulai","Path":"ui/controls/color/coloralphacontrol.cs.scss","FileName":"coloralphacontrol.cs.scss","PackageType":"game","CodeKind":"Game","AssetVersionId":343005,"Code":"ColorAlphaControl\r\n{\r\n\tgap: 0.5rem;\r\n\tflex-grow: 1;\r\n\tpointer-events: all;\r\n\tbackground: linear-gradient( to right, black, white );\r\n\tborder-radius: 4px;\r\n\tpadding: 2px;\r\n\theight: 12px;\r\n\tposition: relative;\r\n\tcursor: pointer;\r\n\tborder: 1px solid #333;\r\n\r\n\t\u0026:hover\r\n\t{\r\n\t\tborder: 1px solid #08f;\r\n\t}\r\n\r\n\t\u0026:active\r\n\t{\r\n\t\tborder: 1px solid #fff;\r\n\t}\r\n\r\n\t.handle\r\n\t{\r\n\t\ttop: -5px;\r\n\t\tbottom: -5px;\r\n\t\taspect-ratio: 1;\r\n\t\tborder-radius: 100px;\r\n\t\tborder: 2px solid #444;\r\n\t\tposition: absolute;\r\n\t\tbackground-color: white;\r\n\t\tbox-shadow: 2px 2px 16px #000a;\r\n\t\ttransform: translateX( -50% );\r\n\t\tpointer-events: none;\r\n\t}\r\n}\r\n"},{"Ident":"dogecoin.niulai","Path":"ui/controlsheet/controlsheetgroupheader.cs.scss","FileName":"controlsheetgroupheader.cs.scss","PackageType":"game","CodeKind":"Game","AssetVersionId":343005,"Code":"ControlSheetGroupHeader\r\n{\r\n\tfont-size: 1.33rem;\r\n\tcolor: red;\r\n\tgap: 2px;\r\n\talign-items: center;\r\n\r\n\t\u0026.hidden\r\n\t{\r\n\t\tdisplay: none;\r\n\t}\r\n\r\n\t\u003E .title\r\n\t{\r\n\t\tfont-weight: 600;\r\n\t}\r\n\r\n\t\u0026.has-toggle\r\n\t{\r\n\t\tcursor: pointer;\r\n\t\topacity: 0.8;\r\n\r\n\t\t\u0026:before\r\n\t\t{\r\n\t\t\tcontent: \u0027 \u0027;\r\n\t\t\twidth: 22px;\r\n\t\t\theight: 22px;\r\n\t\t\tbackground-color: #000a;\r\n\t\t\talign-items: center;\r\n\t\t\tjustify-content: center;\r\n\t\t\ttext-align: center;\r\n\t\t\tborder-radius: 5px;\r\n\t\t\tborder: 1px solid #555;\r\n\t\t}\r\n\r\n\t\t\u0026:hover\r\n\t\t{\r\n\t\t\topacity: 1;\r\n\r\n\t\t\t\u0026:before\r\n\t\t\t{\r\n\t\t\t\tborder-color: #888;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t\u0026.checked\r\n\t\t{\r\n\t\t\t\u003E .title\r\n\t\t\t{\r\n\t\t\t\tcolor: white;\r\n\t\t\t}\r\n\r\n\t\t\t\u0026:before\r\n\t\t\t{\r\n\t\t\t\tcontent: \u0027\u2713\u0027;\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t\tcolor: #08f;\r\n\t\t\t\tborder-color: #08f;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"},{"Ident":"dogecoin.niulai","Path":"Assembly.cs","FileName":"Assembly.cs","PackageType":"game","CodeKind":"Game","AssetVersionId":343005,"Code":"global using Sandbox;\nglobal using Sandbox.UI;\nglobal using System;\nglobal using System.Collections.Generic;\nglobal using System.Linq;\n"},{"Ident":"dogecoin.niulai","Path":"CalfPlayer.cs","FileName":"CalfPlayer.cs","PackageType":"game","CodeKind":"Game","AssetVersionId":343005,"Code":"namespace NiuLai;\n\npublic sealed class CalfPlayer : Component\n{\n\tpublic static CalfPlayer Instance { get; set; }\n\n\t[Property] public float WalkSpeed { get; set; } = 220f;\n\t[Property] public float RunSpeed { get; set; } = 340f;\n\t[Property] public float JumpSpeed { get; set; } = 340f;\n\n\tfloat _yaw = 180f;\n\tfloat _pitch = 18f;\n\tVector3 _vel;\n\tbool _grounded;\n\tfloat _bob;\n\tfloat _jumpDelay = -1f;\n\tfloat _jankTimer;\n\tfloat _idle;\n\tfloat _nagCool;\n\tGameObject _mesh;\n\n\tprotected override void OnAwake()\n\t{\n\t\tInstance = this;\n\t}\n\n\tprotected override void OnDestroy()\n\t{\n\t\tif ( Instance == this )\n\t\t\tInstance = null;\n\t}\n\n\tprotected override void OnStart()\n\t{\n\t\t_mesh = CowMesh.Build( GameObject, CowMesh.Calf, 1f );\n\t}\n\n\tprotected override void OnUpdate()\n\t{\n\t\tif ( Input.EscapePressed )\n\t\t{\n\t\t\tInput.EscapePressed = false;\n\t\t\tif ( GameState.Talking )\n\t\t\t\tGameState.ClearTalk();\n\t\t\telse\n\t\t\t\tGameFlow.TogglePause();\n\t\t}\n\n\t\tif ( GameFlow.BlocksWorld )\n\t\t\treturn;\n\n\t\tvar look = Input.AnalogLook;\n\t\t_yaw \u002B= look.yaw;\n\t\t_pitch = MathX.Clamp( _pitch \u002B look.pitch, -8f, 42f );\n\n\t\tif ( FilmCut.Playing )\n\t\t{\n\t\t\tif ( PressedUse() )\n\t\t\t{\n\t\t\t\tif ( GameState.Talking )\n\t\t\t\t\tGameState.AdvanceTalk();\n\t\t\t\tFilmCut.Skip();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif ( GameState.Talking )\n\t\t{\n\t\t\tif ( PressedUse() )\n\t\t\t\tGameState.AdvanceTalk();\n\t\t\treturn;\n\t\t}\n\n\t\tif ( PressedUse() )\n\t\t\tTryUse();\n\n\t\tif ( Input.Pressed( \u0022Moo\u0022 ) || Input.Pressed( \u0022moo\u0022 ) )\n\t\t\tMoo();\n\t}\n\n\tprotected override void OnFixedUpdate()\n\t{\n\t\tif ( GameFlow.BlocksWorld || GameState.Talking )\n\t\t{\n\t\t\t_vel = _vel.WithX( 0 ).WithY( 0 );\n\t\t\tApplyGravity( Time.Delta );\n\t\t\tSlide();\n\t\t\treturn;\n\t\t}\n\n\t\tvar dt = Time.Delta;\n\t\tvar analog = Input.AnalogMove.WithZ( 0 );\n\t\tvar cam = Rotation.FromYaw( _yaw );\n\t\tvar wish = cam * analog;\n\t\tif ( wish.Length \u003E 1f )\n\t\t\twish = wish.Normal;\n\n\t\tvar speed = Input.Down( \u0022Run\u0022 ) ? RunSpeed : WalkSpeed;\n\t\tspeed *= GameState.WalkMul;\n\t\tif ( GameState.InVoid )\n\t\t\tspeed *= 0.55f;\n\n\t\t_vel.x = wish.x * speed;\n\t\t_vel.y = wish.y * speed;\n\n\t\tif ( wish.Length \u003E 0.1f )\n\t\t{\n\t\t\tvar face = Rotation.LookAt( wish.WithZ( 0 ), Vector3.Up );\n\t\t\tWorldRotation = Rotation.Slerp( WorldRotation, face, 1f - MathF.Pow( 0.001f, dt ) );\n\t\t\t_bob \u002B= dt * 9f;\n\t\t\t_idle = 0;\n\t\t\tif ( Input.Down( \u0022Run\u0022 ) \u0026\u0026 _nagCool \u003C= 0f \u0026\u0026 GameState.Beat == Beat.Migrate )\n\t\t\t{\n\t\t\t\t_nagCool = 10f;\n\t\t\t\tChatter.Say( \u0022\u725B\u5988\u5988 / Mama\u0022, Chatter.Pick( Lines.MomSlow ) );\n\t\t\t\tGameAudio.PlayClip( GameAudio.SlowDown, 0.7f );\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t_bob = 0;\n\t\t\t_idle \u002B= dt;\n\t\t\tif ( _idle \u003E 7.5f \u0026\u0026 _nagCool \u003C= 0f )\n\t\t\t{\n\t\t\t\t_idle = 0;\n\t\t\t\t_nagCool = 12f;\n\t\t\t\tChatter.Say( \u0022\u725B\u5988\u5988 / Mama\u0022, Chatter.Pick( Lines.MomSleep ) );\n\t\t\t\tGameAudio.PlayClip( GameAudio.MamaWake, 0.75f );\n\t\t\t}\n\t\t}\n\t\t_nagCool -= dt;\n\n\t\tif ( _jumpDelay \u003E= 0f )\n\t\t{\n\t\t\t_jumpDelay -= dt;\n\t\t\tif ( _jumpDelay \u003C= 0f \u0026\u0026 _grounded )\n\t\t\t{\n\t\t\t\t_vel.z = JumpSpeed;\n\t\t\t\t_grounded = false;\n\t\t\t\t_jumpDelay = -1f;\n\t\t\t}\n\t\t}\n\t\telse if ( _grounded \u0026\u0026 Input.Pressed( \u0022Jump\u0022 ) )\n\t\t{\n\t\t\t// Movie jank: the calf thinks about jumping, then hops too hard.\n\t\t\t_jumpDelay = 0.16f;\n\t\t\tTrophies.Unlock( \u0022think_jump\u0022 );\n\t\t}\n\n\t\tApplyGravity( dt );\n\t\tSlide();\n\t\tUpdateMesh();\n\t\tUpdateCamera( dt );\n\t\tWatchBeats();\n\t}\n\n\tvoid WatchBeats()\n\t{\n\t\tif ( GameState.Beat == Beat.Migrate \u0026\u0026 GameState.GrassEaten \u003C 1 \u0026\u0026 WorldPosition.x \u003E 240f )\n\t\t{\n\t\t\tWorldPosition = WorldPosition.WithX( 230f );\n\t\t\tif ( !GameState.DidEatNag )\n\t\t\t{\n\t\t\t\tGameState.MarkEatNag();\n\t\t\t\tFilmCut.Play( CutId.EatFirst );\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tChatter.Say( \u0022\u725B\u5988\u5988 / Mama\u0022, Chatter.Pick( Lines.EatFirst ) );\n\t\t\t}\n\t\t}\n\n\t\tif ( GameState.Beat == Beat.Creek \u0026\u0026 !GameState.CreekJumped \u0026\u0026 WorldPosition.x \u003E 500f )\n\t\t\tGameState.JumpCreek();\n\n\t\tif ( GameState.Beat == Beat.Wake \u0026\u0026 WorldPosition.y \u003E 280f )\n\t\t\tTrophies.Unlock( \u0022fly_line\u0022 );\n\n\t\tif ( !GameState.SawTail \u0026\u0026 GameState.Beat \u003E= Beat.Night \u0026\u0026 GameState.Beat \u003C Beat.Farewell )\n\t\t{\n\t\t\tif ( WorldBuilder.Stage.TryGetValue( \u0022leopard\u0022, out var leo ) \u0026\u0026 leo.IsValid() )\n\t\t\t{\n\t\t\t\tif ( (WorldPosition - leo.WorldPosition).Length \u003C 85f )\n\t\t\t\t{\n\t\t\t\t\tGameState.MarkTail();\n\t\t\t\t\tChatter.Say( \u0022\u725B\u6765 / Niu Lai\u0022, Chatter.Pick( Lines.Tail ), 3.3f );\n\t\t\t\t\tGameAudio.PlayClip( GameAudio.Snake, 0.85f );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( _nagCool \u003C= 0f \u0026\u0026 !GameState.Talking )\n\t\t{\n\t\t\tif ( GameState.Beat == Beat.Snake \u0026\u0026 WorldPosition.x \u003E 220f \u0026\u0026 WorldPosition.x \u003C 300f )\n\t\t\t{\n\t\t\t\t_nagCool = 16f;\n\t\t\t\tChatter.Say( \u0022\u65C1\u767D / Narrator\u0022, Lines.Tease[0] );\n\t\t\t}\n\t\t\telse if ( GameState.Beat == Beat.Night \u0026\u0026 WorldPosition.x \u003E 640f )\n\t\t\t{\n\t\t\t\t_nagCool = 16f;\n\t\t\t\tChatter.Say( \u0022\u65C1\u767D / Narrator\u0022, Lines.Tease[1] );\n\t\t\t}\n\t\t\telse if ( GameState.Beat == Beat.Wake \u0026\u0026 WorldPosition.y \u003E 120f )\n\t\t\t{\n\t\t\t\t_nagCool = 16f;\n\t\t\t\tChatter.Say( \u0022\u4E91\u738E / Yun Ding\u0022, Lines.Tease[2] );\n\t\t\t}\n\t\t\telse if ( GameState.Beat == Beat.Cart \u0026\u0026 WorldPosition.x \u003E 700f )\n\t\t\t{\n\t\t\t\t_nagCool = 16f;\n\t\t\t\tChatter.Say( \u0022\u65C1\u767D / Narrator\u0022, Lines.Tease[3] );\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid ApplyGravity( float dt )\n\t{\n\t\tif ( !_grounded )\n\t\t\t_vel.z -= 900f * dt;\n\t}\n\n\tvoid Slide()\n\t{\n\t\tvar dt = Time.Delta;\n\t\tif ( GameState.WantHop )\n\t\t{\n\t\t\tGameState.WantHop = false;\n\t\t\t_vel.z = 420f;\n\t\t\t_grounded = false;\n\t\t}\n\n\t\tvar next = WorldPosition \u002B _vel * dt;\n\t\tif ( !GameState.CreekJumped \u0026\u0026 next.x \u003E 400f \u0026\u0026 next.x \u003C 480f \u0026\u0026 GameState.Beat is Beat.Creek or Beat.Snake )\n\t\t{\n\t\t\tnext.x = 400f;\n\t\t\t_vel.x = 0;\n\t\t\tif ( _nagCool \u003C= 0f )\n\t\t\t{\n\t\t\t\t_nagCool = 5f;\n\t\t\t\tChatter.Say( \u0022\u725B\u6765 / Niu Lai\u0022, Chatter.Pick( Lines.CreekFear ) );\n\t\t\t}\n\t\t}\n\n\t\tvar wall = Scene.Trace.Ray( WorldPosition \u002B Vector3.Up * 20f, next \u002B Vector3.Up * 20f )\n\t\t\t.IgnoreGameObjectHierarchy( GameObject )\n\t\t\t.Radius( 14f )\n\t\t\t.Run();\n\t\tif ( wall.Hit )\n\t\t\tnext = WorldPosition \u002B (next - WorldPosition) * MathF.Max( wall.Fraction - 0.05f, 0f );\n\n\t\tvar downFrom = next \u002B Vector3.Up * 48f;\n\t\tvar ground = Scene.Trace.Ray( downFrom, next \u002B Vector3.Down * 80f )\n\t\t\t.IgnoreGameObjectHierarchy( GameObject )\n\t\t\t.Run();\n\n\t\tif ( ground.Hit )\n\t\t{\n\t\t\tnext = ground.EndPosition;\n\t\t\t_grounded = _vel.z \u003C= 20f;\n\t\t\tif ( _vel.z \u003C 0f )\n\t\t\t\t_vel.z = 0f;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t_grounded = false;\n\t\t}\n\n\t\tWorldPosition = next;\n\t}\n\n\tvoid UpdateMesh()\n\t{\n\t\tif ( !_mesh.IsValid() )\n\t\t\treturn;\n\n\t\tvar g = GameState.Growth;\n\t\t_mesh.LocalScale = g;\n\t\tvar stiff = MathF.Sin( _bob ) * 8f;\n\t\t_mesh.LocalRotation = new Angles( stiff, 0, MathF.Sin( _bob * 0.5f ) * 3f );\n\t\t_mesh.LocalPosition = Vector3.Up * MathF.Abs( MathF.Sin( _bob ) ) * 3f;\n\t}\n\n\tvoid UpdateCamera( float dt )\n\t{\n\t\tif ( !Scene.Camera.IsValid() )\n\t\t\treturn;\n\n\t\t_jankTimer -= dt;\n\t\tvar hitch = _jankTimer \u003E 0f ? 8f : 0f;\n\t\tif ( Random.Shared.Float() \u003C 0.004f )\n\t\t\t_jankTimer = 0.08f;\n\n\t\tvar rot = Rotation.From( _pitch, _yaw, hitch );\n\t\tvar head = WorldPosition \u002B Vector3.Up * (48f * GameState.Growth \u002B 16f);\n\t\tvar desired = head - rot.Forward * (170f \u002B GameState.Growth * 20f) \u002B rot.Right * 12f;\n\n\t\tvar camHit = Scene.Trace.Ray( head, desired )\n\t\t\t.IgnoreGameObjectHierarchy( GameObject )\n\t\t\t.Run();\n\t\tif ( camHit.Hit )\n\t\t\tdesired = camHit.EndPosition \u002B camHit.Normal * 6f;\n\n\t\tScene.Camera.WorldPosition = desired;\n\t\tScene.Camera.WorldRotation = rot;\n\t}\n\n\tvoid TryUse()\n\t{\n\t\tHotspot best = null;\n\t\tvar bestD = float.MaxValue;\n\t\tforeach ( var hs in Scene.GetAllComponents\u003CHotspot\u003E() )\n\t\t{\n\t\t\tif ( !hs.IsValid() || !hs.InRange( WorldPosition ) )\n\t\t\t\tcontinue;\n\t\t\tvar d = (hs.WorldPosition - WorldPosition).Length;\n\t\t\tif ( d \u003C bestD )\n\t\t\t{\n\t\t\t\tbestD = d;\n\t\t\t\tbest = hs;\n\t\t\t}\n\t\t}\n\n\t\tbest?.Use();\n\t}\n\n\tvoid Moo()\n\t{\n\t\tTrophies.Unlock( \u0022moo\u0022 );\n\t\tHotspot near = null;\n\t\tvar best = float.MaxValue;\n\t\tforeach ( var hs in Scene.GetAllComponents\u003CHotspot\u003E() )\n\t\t{\n\t\t\tif ( !hs.IsValid() )\n\t\t\t\tcontinue;\n\t\t\tvar d = (hs.WorldPosition - WorldPosition).Length;\n\t\t\tif ( d \u003C best \u0026\u0026 d \u003C 110f )\n\t\t\t{\n\t\t\t\tbest = d;\n\t\t\t\tnear = hs;\n\t\t\t}\n\t\t}\n\n\t\tGameState.MooWorld( near?.Id );\n\t}\n\n\tpublic void RefreshPrompt()\n\t{\n\t\tif ( GameFlow.BlocksWorld || GameState.Talking )\n\t\t\treturn;\n\n\t\tHotspot best = null;\n\t\tvar bestD = float.MaxValue;\n\t\tforeach ( var hs in Scene.GetAllComponents\u003CHotspot\u003E() )\n\t\t{\n\t\t\tif ( !hs.IsValid() || !hs.InRange( WorldPosition ) )\n\t\t\t\tcontinue;\n\t\t\tvar d = (hs.WorldPosition - WorldPosition).Length;\n\t\t\tif ( d \u003C bestD )\n\t\t\t{\n\t\t\t\tbestD = d;\n\t\t\t\tbest = hs;\n\t\t\t}\n\t\t}\n\n\t\tif ( best is null )\n\t\t{\n\t\t\tGameState.SetPrompt( \u0022\u0022, \u0022\u0022 );\n\t\t\treturn;\n\t\t}\n\n\t\tGameState.SetPrompt( $\u0022\u6309 E  {best.LabelCn}\u0022, $\u0022E  {best.LabelEn}\u0022 );\n\t}\n\n\tstatic bool PressedUse() =\u003E\n\t\tInput.Pressed( \u0022Use\u0022 ) || Input.Pressed( \u0022use\u0022 ) || Input.Pressed( \u0022Submit\u0022 ) || Input.Pressed( \u0022submit\u0022 );\n}\n"},{"Ident":"dogecoin.niulai","Path":"styles/form/_coloreditor.scss","FileName":"_coloreditor.scss","PackageType":"game","CodeKind":"Game","AssetVersionId":343005,"Code":"\r\n$primary: red !default;\r\n$primary-alt: white !default;\r\n\r\n$switch-padding: 6px !default;\r\n\r\n.coloreditor\r\n{\r\n\tflex-direction: column;\r\n\tmin-width: 250px;\r\n\tmax-width: 250px;\r\n\r\n\t\u003E .canvas\r\n\t{\r\n\t\tborder-top: 1px solid rgba( white, 0.5 );\r\n\t\tflex-grow: 1;\r\n\t\tflex-direction: column;\r\n\t\tpadding: 10px 15px;\r\n\r\n\r\n\t\t\u003E textentry.textentry\r\n\t\t{\r\n\t\t\tflex-grow: 0;\r\n\t\t\tflex-shrink: 0;\r\n\t\t\twidth: auto;\r\n\t\t}\r\n\t}\r\n\r\n\t.slider\r\n\t{\r\n\t\tpadding: 6.5px;\r\n\t}\r\n\r\n\t.slider .track\r\n\t{\r\n\t\theight: 14px;\r\n\t\tborder-radius: 14px;\r\n\t\tleft: 0px;\r\n\t\tright: 0px;\r\n\t\ttransition: all 0.1s ease-out;\r\n\r\n\t\t.inner\r\n\t\t{\r\n\t\t\tdisplay: none;\r\n\t\t}\r\n\t}\r\n\r\n\t.slider:hover, .slider:active\r\n\t{\r\n\t\tpadding: 7px;\r\n\r\n\t\t.track\r\n\t\t{\r\n\t\t\theight: 20px;\r\n\t\t\tborder-radius: 6px;\r\n\t\t}\r\n\r\n\t\t.thumb\r\n\t\t{\r\n\t\t\twidth: 10px;\r\n\t\t\theight: 16px;\r\n\t\t\tmargin-left: 2px;\r\n\t\t}\r\n\t}\r\n\r\n\t.slider .thumb\r\n\t{\r\n\t\twidth: 10px;\r\n\t\theight: 10px;\r\n\t\tbox-shadow: 0px 0px 0px transparent;\r\n\t\tbackground-color: white;\r\n\t\tbackdrop-filter: invert( 1 );\r\n\t\tmargin-left: 1px;\r\n\t\tpointer-events: none;\r\n\t}\r\n\r\n\t.alpha_slider .track\r\n\t{\r\n\t\tbackground-image: linear-gradient( to right, rgba( #ccc, 0.05 ), rgba( #ccc, 0.9 ) );\r\n\t}\r\n\r\n\t.hue .track\r\n\t{\r\n\t\tbackground: linear-gradient(to right, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);\r\n\r\n\t\t.inner\r\n\t\t{\r\n\t\t\tdisplay: none;\r\n\t\t}\r\n\t}\r\n\r\n\t.satval\r\n\t{\r\n\t\tbackground: linear-gradient(to right, white, transparent);\r\n\t\theight: 200px;\r\n\t\tposition: relative;\r\n\r\n\t\t\u0026:active\r\n\t\t{\r\n\t\t\tz-index: 10;\r\n\t\t\tcursor: none;\r\n\t\t}\r\n\r\n\t\t.value_gradient\r\n\t\t{\r\n\t\t\tbackground: linear-gradient(to bottom, black, white);\r\n\t\t\tposition: absolute;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\tright: 0;\r\n\t\t\tbottom: 0;\r\n\t\t\tpointer-events: none;\r\n\t\t\tmix-blend-mode: multiply;\r\n\t\t}\r\n\r\n\t\t.thumb\r\n\t\t{\r\n\t\t\tz-index: 10;\r\n\t\t}\r\n\t}\r\n\r\n\t.presets\r\n\t{\r\n\t\tflex-wrap: wrap;\r\n\t\talign-content: center;\r\n\t\tjustify-content: center;\r\n\t\tpadding: 15px;\r\n\t\tborder-top: 1px solid rgba( white, 0.5 );\r\n\r\n\t\t.preset\r\n\t\t{\r\n\t\t\tbackground-color: white;\r\n\t\t\twidth: 16px;\r\n\t\t\theight: 16px;\r\n\t\t\tmargin: 2px;\r\n\t\t\tborder-radius: 20px;\r\n\t\t\tcursor: pointer;\r\n\t\t\t\r\n\t\t\t\u0026:hover\r\n\t\t\t{\r\n\t\t\t\tbox-shadow: 0px 0px 1px 2px white;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n\r\n.coloreditorrgba\r\n{\r\n\tflex-direction: column;\r\n\r\n\t.slider\r\n\t{\r\n\t\tpadding-right: 16px;\r\n\t}\r\n\r\n\t.slider .track\r\n\t{\r\n\t\tbackground-color: transparent;\r\n\t\theight: 14px;\r\n\t\tborder-radius: 14px;\r\n\t\tleft: 0px;\r\n\t\tright: 0px;\r\n\r\n\t\t.inner\r\n\t\t{\r\n\t\t\tdisplay: none;\r\n\t\t}\r\n\t}\r\n\r\n\t.slider .thumb\r\n\t{\r\n\t\twidth: 12px;\r\n\t\theight: 12px;\r\n\t\tbox-shadow: 0px 0px 0px transparent;\r\n\t\tbackground-color: white;\r\n\t\tmargin-left: 2px;\r\n\t\tbackdrop-filter: invert( 1 );\r\n\t}\r\n\r\n\t.red_slider .track\r\n\t{\r\n\t\tbackground-image: linear-gradient( to right, rgba( #e63439, 0.1 ), rgba( #e63439, 0.9 ) );\r\n\t}\r\n\r\n\t.green_slider .track\r\n\t{\r\n\t\tbackground-image: linear-gradient( to right, rgba( #54be35, 0.1 ), rgba( #54be35, 0.9 ) );\r\n\t}\r\n\r\n\t.blue_slider .track\r\n\t{\r\n\t\tbackground-image: linear-gradient( to right, rgba( #3472e6, 0.1 ), rgba( #3472e6, 0.9 ) );\r\n\t}\r\n\r\n\t.alpha_slider .track\r\n\t{\r\n\t\tbackground-image: linear-gradient( to right, rgba( #ccc, 0.05 ), rgba( #ccc, 0.9 ) );\r\n\t}\r\n}\r\n\r\n\r\n.coloreditorhsva\r\n{\r\n\tflex-direction: column;\r\n\r\n\t.slider\r\n\t{\r\n\t\tpadding-right: 16px;\r\n\t}\r\n\r\n\t.slider .track\r\n\t{\r\n\t\tbackground-color: transparent;\r\n\t\theight: 14px;\r\n\t\tborder-radius: 14px;\r\n\t\tleft: 0px;\r\n\t\tright: 0px;\r\n\r\n\t\t.inner\r\n\t\t{\r\n\t\t\tdisplay: none;\r\n\t\t}\r\n\t}\r\n\r\n\t.slider .thumb\r\n\t{\r\n\t\twidth: 12px;\r\n\t\theight: 12px;\r\n\t\tbox-shadow: 0px 0px 0px transparent;\r\n\t\tbackground-color: white;\r\n\t\tmargin-left: 2px;\r\n\t\tbackdrop-filter: invert( 1 );\r\n\t}\r\n\t\t\r\n\t.hue_slider .track\r\n\t{\r\n\t\tbackground-image: linear-gradient( to right, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00 );\r\n\t}\r\n\r\n\t.alpha_slider .track\r\n\t{\r\n\t\tbackground-image: linear-gradient( to right, rgba( #ccc, 0.05 ), rgba( #ccc, 0.9 ) );\r\n\t}\r\n}"},{"Ident":"dogecoin.niulai","Path":"ui/controls/enumcontrol.cs.scss","FileName":"enumcontrol.cs.scss","PackageType":"game","CodeKind":"Game","AssetVersionId":343005,"Code":"EnumControl\r\n{\r\n\tgap: 2px;\r\n\tflex-grow: 1;\r\n}\r\n\r\nEnumControl DropDown,\r\nEnumControl ButtonGroup\r\n{\r\n\tborder-radius: 8px;\r\n\tbackground-color: #000a;\r\n\tflex-grow: 1;\r\n}\r\n\r\nEnumControl DropDown\r\n{\r\n\tflex-grow: 1;\r\n\tmin-height: 32px;\r\n}\r\n\r\nEnumControl ButtonGroup\r\n{\r\n\tborder-radius: 12px;\r\n\toverflow: hidden;\r\n\tmin-height: 32px;\r\n\r\n\tButton\r\n\t{\r\n\t\tflex-grow: 1;\r\n\t\tjustify-content: center;\r\n\t\talign-items: center;\r\n\t\tgap: 4px;\r\n\t\tcolor: #aaa;\r\n\t\tfont-size: 1rem;\r\n\t\tcursor: pointer;\r\n\r\n\t\t.icon\r\n\t\t{\r\n\t\t\tcolor: #08f;\r\n\t\t}\r\n\r\n\t\t\u0026:hover\r\n\t\t{\r\n\t\t\tcolor: #ddd;\r\n\r\n\t\t\t.icon\r\n\t\t\t{\r\n\t\t\t\tcolor: #3af;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t\u0026:active\r\n\t\t{\r\n\t\t\tbackground-color: #04a;\r\n\t\t\tcolor: white;\r\n\t\t\ttransform: translateX( 1px ) translateY( 1px );\r\n\r\n\t\t\t.icon\r\n\t\t\t{\r\n\t\t\t\tcolor: #fff;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t\u0026.active\r\n\t\t{\r\n\t\t\tbackground-color: #08f;\r\n\t\t\tcolor: white;\r\n\t\t\tpointer-events: none;\r\n\r\n\t\t\t.icon\r\n\t\t\t{\r\n\t\t\t\tcolor: #fff;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}"},{"Ident":"dogecoin.niulai","Path":"Trophies.cs","FileName":"Trophies.cs","PackageType":"game","CodeKind":"Game","AssetVersionId":343005,"Code":"using Sandbox.Services;\n\nnamespace NiuLai;\n\n/// \u003Csummary\u003EOne package trophy. Ident must match the dashboard Manual achievement.\u003C/summary\u003E\npublic sealed class TrophyDef\n{\n\tpublic string Id { get; init; }\n\tpublic string Title { get; init; }\n\tpublic string Description { get; init; }\n\tpublic int Score { get; init; }\n\tpublic bool Hidden { get; init; }\n}\n\n/// \u003Csummary\u003E\n/// 30 film trophies. Local toast \u002B Achievements.Unlock(ident).\n/// Paste Catalog Id / Title / Description onto the package dashboard as Manual.\n/// \u003C/summary\u003E\npublic static class Trophies\n{\n\tpublic static readonly TrophyDef[] Catalog =\n\t{\n\t\tnew() { Id = \u0022walk_slow\u0022, Title = \u0022You Slow A Bit\u0022, Description = \u0022Start the walk. The herd is already ahead of you.\u0022, Score = 5 },\n\t\tnew() { Id = \u0022five_year\u0022, Title = \u0022Five-Year Handmade\u0022, Description = \u0022Open the title. Loading takes five years. Joke is on us.\u0022, Score = 5 },\n\t\tnew() { Id = \u0022open_eye\u0022, Title = \u0022Don\u0027t Sleep\u0022, Description = \u0022Talk to \u725B\u5988\u5988. She says open your eyes.\u0022, Score = 10 },\n\t\tnew() { Id = \u0022grass_free\u0022, Title = \u0022Grass Is Free\u0022, Description = \u0022Eat one tuft. Mama said it does not cost money.\u0022, Score = 5 },\n\t\tnew() { Id = \u0022bigger_little\u0022, Title = \u0022I Bigger A Little\u0022, Description = \u0022Eat 6 tufts and feel the model scale up.\u0022, Score = 10 },\n\t\tnew() { Id = \u0022share_ready\u0022, Title = \u0022Hold Some Grass\u0022, Description = \u0022Carry 3 tufts. Somebody hungry is coming.\u0022, Score = 5 },\n\t\tnew() { Id = \u0022yun_ding\u0022, Title = \u0022Come Up On My Back\u0022, Description = \u0022Meet \u4E91\u738E. Then the world goes black.\u0022, Score = 10 },\n\t\tnew() { Id = \u0022pure_black\u0022, Title = \u0022Pure Black Background\u0022, Description = \u0022Finish the first dream with the lark.\u0022, Score = 10 },\n\t\tnew() { Id = \u0022not_rope\u0022, Title = \u0022I Am Not Rope\u0022, Description = \u0022Let \u5C0F\u7EF3\u5934 bite you. He was never a rope.\u0022, Score = 10 },\n\t\tnew() { Id = \u0022only_jump\u0022, Title = \u0022Only Can Jump\u0022, Description = \u0022Jump the creek because the snake is behind you.\u0022, Score = 10 },\n\t\tnew() { Id = \u0022empty_bag\u0022, Title = \u0022First Go Eat Grass\u0022, Description = \u0022Offer \u8C79\u62C9 an empty bag. He is not impressed.\u0022, Score = 5, Hidden = true },\n\t\tnew() { Id = \u0022bao_la\u0022, Title = \u0022Stomach Empty\u0022, Description = \u0022Find \u8C79\u62C9 at night. His belly is a cave.\u0022, Score = 10 },\n\t\tnew() { Id = \u0022share_grass\u0022, Title = \u0022You Give Me Food\u0022, Description = \u0022Share one tuft with the leopard.\u0022, Score = 10 },\n\t\tnew() { Id = \u0022niu_er\u0022, Title = \u0022Identity Not Right\u0022, Description = \u0022Hear \u725B\u4E8C decide \u8C79\u62C9 is the problem.\u0022, Score = 10 },\n\t\tnew() { Id = \u0022wolf_come\u0022, Title = \u0022Wolf Come. Really Come.\u0022, Description = \u0022Survive the first wolf rush.\u0022, Score = 10 },\n\t\tnew() { Id = \u0022not_allow\u0022, Title = \u0022Not Allow Follow\u0022, Description = \u0022Watch the herd ban \u8C79\u62C9.\u0022, Score = 10 },\n\t\tnew() { Id = \u0022still_here\u0022, Title = \u0022I Still Here\u0022, Description = \u0022Talk to \u8C79\u62C9 after nobody believes him.\u0022, Score = 10 },\n\t\tnew() { Id = \u0022dont_look_back\u0022, Title = \u0022Don\u0027t Look Back\u0022, Description = \u0022Hear \u5988\u5988 stay behind in the canyon.\u0022, Score = 15 },\n\t\tnew() { Id = \u0022cart_big\u0022, Title = \u0022The Cart Become More Big\u0022, Description = \u0022Reach the \u53F0\u8F66 while it is still growing.\u0022, Score = 10 },\n\t\tnew() { Id = \u0022think_jump\u0022, Title = \u0022Think Then Hop\u0022, Description = \u0022Press jump. Wait. Then hop too hard.\u0022, Score = 5, Hidden = true },\n\t\tnew() { Id = \u0022moo\u0022, Title = \u0022\u54DE\u2014\u2014\u2014\u2014\u0022, Description = \u0022Press F. Moo at nothing in particular.\u0022, Score = 5 },\n\t\tnew() { Id = \u0022moo_cart\u0022, Title = \u0022Niu Lai No Listen\u0022, Description = \u0022\u4E91\u738E said don\u0027t fight. You mooed at the cart.\u0022, Score = 15 },\n\t\tnew() { Id = \u0022thank_you\u0022, Title = \u0022Yun Ding, Thank You\u0022, Description = \u0022Say goodbye in the second black dream.\u0022, Score = 10 },\n\t\tnew() { Id = \u0022stand_stable\u0022, Title = \u0022Niu Lai Stand Stable\u0022, Description = \u0022Wake up. Stand still for once.\u0022, Score = 10 },\n\t\tnew() { Id = \u0022fly_line\u0022, Title = \u0022Follow Her Fly Line\u0022, Description = \u0022Follow \u4E91\u738E north after the dream.\u0022, Score = 10 },\n\t\tnew() { Id = \u0022too_early\u0022, Title = \u0022First Finish Your Road\u0022, Description = \u0022Talk to \u725B\u7238\u7238 before you finished the road.\u0022, Score = 5, Hidden = true },\n\t\tnew() { Id = \u0022herd_boss\u0022, Title = \u0022I Am Cow Father\u0022, Description = \u0022Find \u725B\u7238\u7238 at the end of the line.\u0022, Score = 15 },\n\t\tnew() { Id = \u0022we_walk\u0022, Title = \u0022We Walk Together\u0022, Description = \u0022Start the reunion walk with the herd.\u0022, Score = 15 },\n\t\tnew() { Id = \u0022after_rain\u0022, Title = \u0022\u96E8\u540E\u8F7B\u98CE\u6709\u9999\u0022, Description = \u0022Finish the movie. The song plays.\u0022, Score = 25 },\n\t\tnew() { Id = \u0022watch_again\u0022, Title = \u0022\u518D\u770B\u4E00\u904D\u0022, Description = \u0022Start the film a second time.\u0022, Score = 10 },\n\t};\n\n\tconst float ToastSeconds = 4.4f;\n\n\tstatic readonly HashSet\u003Cstring\u003E Got = new( StringComparer.OrdinalIgnoreCase );\n\tstatic readonly Queue\u003Cstring\u003E ToastQ = new();\n\tstatic string _toastId = \u0022\u0022;\n\tstatic float _toastLeft;\n\n\tpublic static bool EverWon { get; private set; }\n\tpublic static int Version { get; private set; }\n\tpublic static bool ToastVisible =\u003E _toastLeft \u003E 0f \u0026\u0026 !string.IsNullOrEmpty( _toastId );\n\tpublic static TrophyDef Toast =\u003E Find( _toastId );\n\n\tpublic static TrophyDef Find( string id )\n\t{\n\t\tif ( string.IsNullOrEmpty( id ) )\n\t\t\treturn null;\n\n\t\tforeach ( var d in Catalog )\n\t\t{\n\t\t\tif ( string.Equals( d.Id, id, StringComparison.OrdinalIgnoreCase ) )\n\t\t\t\treturn d;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tpublic static void Unlock( string id )\n\t{\n\t\tif ( string.IsNullOrEmpty( id ) )\n\t\t\treturn;\n\t\tif ( Find( id ) is null )\n\t\t\treturn;\n\t\tif ( !Got.Add( id ) )\n\t\t\treturn;\n\n\t\ttry\n\t\t{\n\t\t\tAchievements.Unlock( id );\n\t\t}\n\t\tcatch\n\t\t{\n\t\t\t// Dashboard ident missing or services offline \u2014 local toast still pops.\n\t\t}\n\n\t\tToastQ.Enqueue( id );\n\t\tif ( !ToastVisible )\n\t\t\tShowNext();\n\t\tVersion\u002B\u002B;\n\t}\n\n\tpublic static void MarkWon() =\u003E EverWon = true;\n\n\tpublic static void Tick( float dt )\n\t{\n\t\tif ( _toastLeft \u003C= 0f )\n\t\t\treturn;\n\n\t\t_toastLeft -= dt;\n\t\tif ( _toastLeft \u003E 0f )\n\t\t\treturn;\n\n\t\t_toastLeft = 0f;\n\t\t_toastId = \u0022\u0022;\n\t\tVersion\u002B\u002B;\n\t\tShowNext();\n\t}\n\n\tpublic static void Evaluate()\n\t{\n\t\tif ( GameState.GrassEaten \u003E= 1 )\n\t\t\tUnlock( \u0022grass_free\u0022 );\n\t\tif ( GameState.GrassEaten \u003E= 6 )\n\t\t\tUnlock( \u0022bigger_little\u0022 );\n\t\tif ( GameState.GrassBag \u003E= 3 )\n\t\t\tUnlock( \u0022share_ready\u0022 );\n\t\tif ( GameState.Beat \u003E= Beat.Snake )\n\t\t\tUnlock( \u0022pure_black\u0022 );\n\t\tif ( GameState.Bitten )\n\t\t\tUnlock( \u0022not_rope\u0022 );\n\t\tif ( GameState.CreekJumped )\n\t\t\tUnlock( \u0022only_jump\u0022 );\n\t\tif ( GameState.FedLeopard )\n\t\t\tUnlock( \u0022share_grass\u0022 );\n\t\tif ( GameState.HerdSuspects )\n\t\t\tUnlock( \u0022niu_er\u0022 );\n\t\tif ( GameState.Beat \u003E= Beat.Ban )\n\t\t\tUnlock( \u0022wolf_come\u0022 );\n\t\tif ( GameState.BaoLaBanned )\n\t\t\tUnlock( \u0022not_allow\u0022 );\n\t\tif ( GameState.MomGone )\n\t\t\tUnlock( \u0022dont_look_back\u0022 );\n\t\tif ( GameState.Beat \u003E= Beat.Cart )\n\t\t\tUnlock( \u0022cart_big\u0022 );\n\t\tif ( GameState.MooedCart )\n\t\t\tUnlock( \u0022moo_cart\u0022 );\n\t\tif ( GameState.Beat \u003E= Beat.Farewell )\n\t\t\tUnlock( \u0022thank_you\u0022 );\n\t\tif ( GameState.Beat \u003E= Beat.Wake )\n\t\t\tUnlock( \u0022stand_stable\u0022 );\n\t\tif ( GameState.FoundDad )\n\t\t\tUnlock( \u0022herd_boss\u0022 );\n\t\tif ( GameState.SongWalk )\n\t\t\tUnlock( \u0022we_walk\u0022 );\n\t\tif ( GameState.Won )\n\t\t\tUnlock( \u0022after_rain\u0022 );\n\t}\n\n\tpublic static void OnUsed( string id )\n\t{\n\t\tswitch ( id )\n\t\t{\n\t\t\tcase \u0022mom\u0022:\n\t\t\t\tUnlock( \u0022open_eye\u0022 );\n\t\t\t\tbreak;\n\t\t\tcase \u0022lark\u0022:\n\t\t\t\tif ( GameState.Beat == Beat.Migrate )\n\t\t\t\t\tUnlock( \u0022yun_ding\u0022 );\n\t\t\t\tbreak;\n\t\t\tcase \u0022leopard\u0022:\n\t\t\t\tUnlock( \u0022bao_la\u0022 );\n\t\t\t\tif ( GameState.FedLeopard )\n\t\t\t\t\tUnlock( \u0022still_here\u0022 );\n\t\t\t\tbreak;\n\t\t\tcase \u0022dad\u0022:\n\t\t\t\tif ( GameState.Beat is not Beat.Wake and not Beat.Reunion )\n\t\t\t\t\tUnlock( \u0022too_early\u0022 );\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tstatic void ShowNext()\n\t{\n\t\tif ( ToastVisible || ToastQ.Count == 0 )\n\t\t\treturn;\n\n\t\t_toastId = ToastQ.Dequeue();\n\t\t_toastLeft = ToastSeconds;\n\t\tVersion\u002B\u002B;\n\t}\n}\n"}]}