KAZIK/build/AssemblerCasinoLauncher.cs
Artvasil09 3150d217b5 feat: add playable bowling match mode and calibrate rooftop character scaling
- Add playable ten-frame bowling against bot with two timing gates (direction/power) and fixed-step physics

- Add lane match interaction, shaded ball surface, pin collisions, bonus balls, and live score sheet

- Scale rooftop terrace visitor sprites to eye level according to the taller rooftop standing eye height

- Resolve mode and interaction ID conflicts with Hell FPS (MODE_BOWLING=30, INTERACT_BOWL_PLAY=56)

- Update launcher hash, installer package, and expansion regression test suites
2026-11-01 22:50:33 +03:00

65 lines
2.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Diagnostics;
using System.IO;
using System.Security.Cryptography;
using System.Windows.Forms;
namespace AssemblerCasinoLauncher
{
static class Program
{
const string ExpectedPokerSha256 = "2357F5876DA47FD6CD7FAE7216C71FCEDE6CCA79C1591E2BA6CFD2F3DB61694E";
[STAThread]
static void Main()
{
var root = AppDomain.CurrentDomain.BaseDirectory;
// The installed launcher is at the root; developer builds live in dist.
if (!File.Exists(Path.Combine(root, "bin", "poker.exe")))
{
var parent = Directory.GetParent(root.TrimEnd(Path.DirectorySeparatorChar));
if (parent != null && Directory.Exists(Path.Combine(parent.FullName, "assets")) &&
File.Exists(Path.Combine(parent.FullName, "bin", "poker.exe")))
root = parent.FullName;
}
var game = Path.Combine(root, "bin", "poker.exe");
if (!File.Exists(game))
{
MessageBox.Show("bin\\poker.exe не найден рядом с лаунчером.", "Assembler Casino", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (!VerifyGame(game))
{
MessageBox.Show("bin\\poker.exe был изменен или поврежден. Запуск остановлен.", "Assembler Casino", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
Process.Start(new ProcessStartInfo
{
FileName = game,
WorkingDirectory = root,
UseShellExecute = false
});
}
static bool VerifyGame(string gamePath)
{
try
{
using (var sha = SHA256.Create())
using (var stream = File.OpenRead(gamePath))
{
var actual = BitConverter.ToString(sha.ComputeHash(stream)).Replace("-", "");
return actual.Equals(ExpectedPokerSha256, StringComparison.OrdinalIgnoreCase);
}
}
catch
{
return false;
}
}
}
}