- Billiards: add native Russian Pyramid & American Eight-Ball pool with physics prediction, controls, and regression tests - Scratch Tickets: add dedicated counter, mat presentation, elliptical coin scraping, 4 ticket types, and payout effects - First-Person Dice: add native dice scene, hand anchor frames, throwing animation, and table perspective - City Wake & Weather: add arrival cutscene, alley geometry, weather/rain effects, and lighter/rocker animation - World Dressing: add hall paintings, furniture packs, hall lighting, and scene regression tests - Build & Tooling: update build.bat for modern MSVC toolchain, update launcher hash, and refresh shipping binaries
65 lines
2.3 KiB
C#
65 lines
2.3 KiB
C#
using System;
|
||
using System.Diagnostics;
|
||
using System.IO;
|
||
using System.Security.Cryptography;
|
||
using System.Windows.Forms;
|
||
|
||
namespace AssemblerCasinoLauncher
|
||
{
|
||
static class Program
|
||
{
|
||
const string ExpectedPokerSha256 = "3CE946233ABE1D9139501EB56A75B2BE0D9A99714048C5F0A56A150D35F2295C";
|
||
|
||
[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;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|