From 12cb18a78ebb005f4b3d2feb6862208b95da166f Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 21 Oct 2026 22:21:43 -0400 Subject: [PATCH] Add Dark Star. --- Analyser/Static/ZXSpectrum/StaticAnalyser.cpp | 39 ++++++++++++------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/Analyser/Static/ZXSpectrum/StaticAnalyser.cpp b/Analyser/Static/ZXSpectrum/StaticAnalyser.cpp index d5ea22e10..c97a3e085 100644 --- a/Analyser/Static/ZXSpectrum/StaticAnalyser.cpp +++ b/Analyser/Static/ZXSpectrum/StaticAnalyser.cpp @@ -21,10 +21,11 @@ namespace { enum class KnownGame { Aquaplane, - FantasyWorldDizzy, BCsQuestForTyres, // The real game is spelt the American way, but I can't bring myself to type it. - SabreWulf, + DarkStar, + FantasyWorldDizzy, MatchDayII, + SabreWulf, }; namespace Signatures { @@ -32,6 +33,13 @@ namespace Signatures { // Text used on Aquaplane's title screen. static constexpr std::string_view aquaplane = "A Q U A P L A N E"; +// The status line. +static constexpr std::string_view bcs_quest_for_tyres = "WHEELS SPEED SCORE HIGH SCOREP1 00P2 00GAMEOVER"; + +// Part of the instructions. +static constexpr std::string_view dark_star = + "If it moves shoot it\r\rIf it doesn't shoot it anyway\r\rIf it's square fly through it !"; + // Dialogue revealing that Daisy has been eggnapped. static constexpr std::array fantasy_world_dizzy{ 0x44, 0x41, 0x49, 0x53, 0x59, 0x3b, 0x53, 0x3a, 0x42, 0x45, 0x45, 0x4e, @@ -42,8 +50,15 @@ static constexpr std::array fantasy_world_dizzy{ 0x4c, 0x4f, 0x55, 0x44, 0x3a, 0x43, 0x41, 0x53, 0x54, 0x4c, 0x45, 0x3c, }; -// The status line. -static constexpr std::string_view bcs_quest_for_tyres = "WHEELS SPEED SCORE HIGH SCOREP1 00P2 00GAMEOVER"; +// Text (with specialised control characters) including the author's names and some football-related words. +static constexpr std::array match_day_ii{ + 0x82, 0x86, 0x1a, 0x00, 0x42, 0x45, 0x52, 0x4e, 0x49, 0x45, 0x06, 0x18, + 0x02, 0x44, 0x52, 0x55, 0x4d, 0x4d, 0x4f, 0x4e, 0x44, 0x06, 0x00, 0x00, + 0x4a, 0x4f, 0x4e, 0x06, 0x00, 0x02, 0x52, 0x49, 0x54, 0x4d, 0x41, 0x4e, + 0xff, 0x20, 0x48, 0x41, 0x4c, 0x46, 0xff, 0x54, 0x49, 0x4d, 0x45, 0xff, + 0x20, 0x45, 0x58, 0x54, 0x52, 0x41, 0x20, 0xff, 0x46, 0x49, 0x52, 0x53, + 0x54, 0xa3, 0xff, 0x53, 0x45, 0x43, 0x4f, 0x4e, 0x44, +}; // Likely to be part of the graphics. static constexpr std::array sabre_wulf{ @@ -57,16 +72,6 @@ static constexpr std::array sabre_wulf{ 0x52, 0x2f, 0x52, 0x2f, 0x52, 0x2f, 0x52, 0x2f, }; -// Text (with specialised control characters) including the author's names and some football-related words. -static constexpr std::array match_day_ii{ - 0x82, 0x86, 0x1a, 0x00, 0x42, 0x45, 0x52, 0x4e, 0x49, 0x45, 0x06, 0x18, - 0x02, 0x44, 0x52, 0x55, 0x4d, 0x4d, 0x4f, 0x4e, 0x44, 0x06, 0x00, 0x00, - 0x4a, 0x4f, 0x4e, 0x06, 0x00, 0x02, 0x52, 0x49, 0x54, 0x4d, 0x41, 0x4e, - 0xff, 0x20, 0x48, 0x41, 0x4c, 0x46, 0xff, 0x54, 0x49, 0x4d, 0x45, 0xff, - 0x20, 0x45, 0x58, 0x54, 0x52, 0x41, 0x20, 0xff, 0x46, 0x49, 0x52, 0x53, - 0x54, 0xa3, 0xff, 0x53, 0x45, 0x43, 0x4f, 0x4e, 0x44, -}; - } std::optional known_game(const std::vector &code) { @@ -89,6 +94,9 @@ std::optional known_game(const std::vector &code) { if(contains(Signatures::match_day_ii)) { return KnownGame::MatchDayII; } + if(contains(Signatures::dark_star)) { + return KnownGame::DarkStar; + } return std::nullopt; } @@ -234,8 +242,9 @@ Analyser::Static::TargetList Analyser::Static::ZXSpectrum::GetTargets( using enum KnownGame; case Aquaplane: case BCsQuestForTyres: - case SabreWulf: + case DarkStar: case MatchDayII: + case SabreWulf: target->model = Target::Model::FortyEightK; break;