Jak vše začalo
Zpět nahoru △Vše začalo, když jsem náhodou narazil na web BBC Elite od Marka Moxona, kde je do nejmenších podrobností rozebráno a popsáno, jak původní Elite funguje. Doslova zlatý poklad pro fanouška původní hry.
Našel jsem tam i odkaz na GitHub se zdrojovým kódem C64 verze Elite a vytvořil si fork repozitáře na svém GitHubu. Po čase, když se mi podařilo zprovoznit nástroje pro sestavení hry, jsem se pustil do prvních úprav.
První úpravou byla jednoduchá oprava: doplnění chybějící mezery za pomlčkou mezi textem a názvem planety ve zprávě při hyperskoku. Z HYPERSPACE -LAVE se stalo HYPERSPACE - LAVE. Malý krok pro programátora her v assembleru z osmdesátých let, velký skok pro mě osobně. ;)
Následovalo několik složitějších úprav. Napsal jsem také editor bitmapy přístrojového panelu a v Art Studiu na Spectru znovu vytvořil font ze ZX Spectrum 48K verze Elite.
Projekt jsem na chvíli odložil. Jednou večer mě pak napadlo zeptat se ChatGPT, zda by do kódu šlo přenést létání v různých lodích z Elite-A. Zdrojový kód této verze byl také na Markově GitHubu.
K mému překvapení ChatGPT po chvíli přemýšlení dodal spustitelný kód úpravy. Nebylo to dokonalé, ale fungovalo to a létalo to. S pomocí ChatGPT jsem postupně vylepšoval kód i samotnou funkci a vyvažoval herní mechanismy.
Přidával jsem další a další nápady a Elite: Unbound začalo dostávat konkrétní obrysy.
Kde vzít a nekrást?
Zpět nahoru △Aby se vše vešlo do už tak téměř plné paměti o velikosti 64 KB, musely ze hry pryč některé méně důležité části původního kódu.
| Úprava | Ušetřené bajty |
|---|---|
| Odstranění úvodní hudby (Elite Theme) | 2 931 |
| Odstranění dokovací hudby (Na krásném modrém Dunaji) | 2 615 |
| Odstranění hudebního přehrávače a podpůrného kódu | 720 |
| Odstranění kontrolních součtů uloženého velitele a soutěžního kódu | 132 |
| Odstranění textu „COMPETITION NUMBER:“ | 14 |
| Komprese přístrojového panelu pomocí PackBits RLE | 1 049 |
| Režie kódu pro rozbalení přístrojového panelu | −85 |
| Mezisoučet | 7 376 |
| Další nepoužívaný kód a nadbytečné instrukce | 71 |
| Celková čistá úspora paměti | 7 447 bajtů (7,27 KiB) |
Těchto uvolněných sedm kilobajtů poskytlo prostor pro rozšíření, ze kterých vzniklo Elite: Unbound.
Dnes už je využitý téměř každý bajt. Tolik místa zbývá po sestavení kazetové PAL verze se všemi volbami Elite: Unbound:
| Větev | Konec LOCODE | Volno | Konec HICODE | Volno | Volno v RLE |
|---|---|---|---|---|---|
| main | $3FA2 | 93 B | $CD88 | 119 B | 4 B |
| flicker-free | $3FF2 | 13 B | $CDEC | 19 B | 4 B |
Uvedené volné bajty lze skutečně přidat při dodržení limitů assembleru a loaderu. LOCODE, HICODE a oblast RLE jsou samostatné oblasti; 4 B v oblasti RLE tvoří dvě oddělené mezery po 2 bajtech.
Na další vylepšení a nápady už tedy téměř nezbývá místo. Budu rád, když těch posledních pár bajtů vystačí na případné opravy.
Vesmírný autobazar
Zpět nahoru △O tomhle jsem při hraní původního Elite snil nejvíc: moci létat i v jiných lodích než v Cobře Mk III. Neberte mě špatně, Cobra Mk III je skvělá univerzální loď pro obchodníky. Ale proletět se v malém obratném pirátském Sidewinderu nebo rychlém Aspu Mk II? Tenhle sen se mi splnil až s příchodem hry Frontier: Elite II na šestnáctibitové počítače.
Teprve když jsem objevil Elite-A, upravenou verzi původního BBC Elite, zjistil jsem, že to jde i v původní hře. Tady je výsledek mé implementace pro C64 verzi.
Nabídka lodí závisí na ekonomice planety a na tom, zda má vládu Anarchy. Technologická úroveň ji přímo neovlivňuje.
| Ekonomika planety | Běžná nabídka | Navíc v Anarchy |
|---|---|---|
| Rich Industrial | 10 lodí | Sidewinder, Krait, Mamba |
| Average Industrial | 8 lodí | Sidewinder, Krait, Mamba |
| Poor Industrial | 6 lodí | Sidewinder, Krait, Mamba |
| Mainly Industrial | 5 lodí | Sidewinder, Krait |
| Mainly Agricultural | 4 lodě | Sidewinder, Krait |
| Rich Agricultural | 4 lodě | Sidewinder, Krait |
| Average Agricultural | 3 lodě | Sidewinder |
| Poor Agricultural | 1 loď | Nic |
Běžná nabídka vždy obsahuje prvních N lodí z tohoto pořadí:
Adder → Gecko → Moray → Cobra Mk I → Cobra Mk III → Fer-de-Lance → Python → Boa → Anaconda → Asp Mk II.
Například v systému Poor Agricultural koupíte pouze Adder. Systém Rich Industrial Anarchy nabízí všech 13 typů.
Nabídka není náhodná a čekáním ani opakovaným zadokováním se nemění. Peníze, náklad a vybavení ovlivňují možnost nákup dokončit, nikoli seznam nabízených lodí.
Pod kapotou
Zpět nahoru △Následující parametry platí pro hráčské lodě v Elite: Unbound. Lodě jsou seřazené podle pořizovací ceny. Sidewinder, Krait a Mamba jsou dostupné pouze v systémech Anarchy podle ekonomických omezení uvedených výše.
| Loď | Cena (Cr) | Rychlost | Dolet (ly) | Náklad (t) | Rakety | Laserové pozice | Štíty | Dobíjení | Obratnost |
|---|---|---|---|---|---|---|---|---|---|
| Sidewinder | 20 500 | 56 (0,47 LM) | 5 | 4 / 5 | 1 | 1 | 2 (28,6 %) | 1/2/3 | 245 (102,5 %) |
| Adder | 27 000 | 36 (0,30 LM) | 6 | 8 / 12 | 1 | 2 | 4 (57,1 %) | 1/2/3 | 223 (93,3 %) |
| Krait | 30 500 | 45 (0,38 LM) | 6 | 10 / 12 | 0 | 1 | 3 (42,9 %) | 1/2/3 | 223 (93,3 %) |
| Gecko | 32 500 | 45 (0,38 LM) | 7 | 9 / 11 | 2 | 4 | 5 (71,4 %) | 1/2/3 | 239 (100 %) |
| Moray | 36 000 | 38 (0,32 LM) | 8 | 11 / 15 | 2 | 4 | 6 (85,7 %) | 1/2/3 | 239 (100 %) |
| Mamba | 37 500 | 48 (0,40 LM) | 6 | 10 / 12 | 2 | 1 | 4 (57,1 %) | 1/2/3 | 241 (100,8 %) |
| Cobra Mk I | 39 500 | 39 (0,33 LM) | 6 | 14 / 20 | 3 | 4 | 5 (71,4 %) | 1/2/3 | 207 (86,6 %) |
| Cobra Mk III | 100 000 | 42 (0,35 LM) | 7 | 25 / 35 | 4 | 4 | 7 (100 %) | 1/2/3 | 239 (100 %) |
| Fer-de-Lance | 143 500 | 45 (0,38 LM) | 8,5 | 9 / 11 | 3 | 4 | 8 (114,3 %) | 2/3/4 | 223 (93,3 %) |
| Python | 205 000 | 30 (0,25 LM) | 8 | 106 / 125 | 4 | 4 | 11 (157,1 %) | 1/2/3 | 175 (73,2 %) |
| Boa | 240 000 | 36 (0,30 LM) | 9 | 132 / 155 | 6 | 2 | 10 (142,9 %) | 1/2/3 | 191 (79,9 %) |
| Anaconda | 400 000 | 21 (0,18 LM) | 10 | 215 / 253 | 16 | 4 | 13 (185,7 %) | 1/2/3 | 175 (73,2 %) |
| Asp Mk II | 895 000 | 60 (0,50 LM) | 12,5 | 6 / 9 | 1 | 1 | 10 (142,9 %) | 1/2/3 | 223 (93,3 %) |
- Rychlost: přímá hodnota maximální rychlosti ze hry, za ní přepočet na LM. Přepočet vychází z hodnoty Cobry Mk III: 42 = 0,35 LM a je zaokrouhlený na dvě desetinná místa.
- Štíty: přímá hodnota síly štítů ze hry, za ní procentní porovnání s Cobrou Mk III: 7 = 100 %. Procenta jsou zaokrouhlená na jedno desetinné místo; například Sidewinder má 2 (28,6 %). Hodnoty vyjadřují relativní odolnost vůči poškození, nikoli délku ukazatelů štítů.
- Náklad: základní prostor / celková kapacita s Large Cargo Bay. Část kapacity zabírá instalované vybavení; rakety mají samostatné pozice v trupu.
- Laserové pozice: 1 = pouze vpředu; 2 = vpředu a vzadu; 4 = vpředu, vzadu, vlevo a vpravo. Jde o počet podporovaných pozic, nikoli osazených laserů.
- Dobíjení: počet bodů energie obnovených při jednom kroku dobíjení, v pořadí: bez energetické jednotky / s Extra Energy Unit / s Naval Energy Unit. Například 1/2/3 znamená 1 bod bez vylepšení, 2 s Extra Energy Unit a 3 s Naval Energy Unit. Fer-de-Lance má vyšší základní rychlost dobíjení, proto má hodnoty 2/3/4.
- Obratnost: přímá hodnota limitu ovládání z herních dat lodě, za ní procentní porovnání s Cobrou Mk III: 239 = 100 %. Procenta jsou zaokrouhlená na jedno desetinné místo a porovnávají parametr ovládání, nikoli výslednou rychlost otáčení. Vyšší herní hodnota znamená větší obratnost.
- Cena: plná pořizovací cena trupu před odečtením 60% výkupní hodnoty současné lodě.
Pokud loď nese více než čtyři řízené rakety, kokpit zobrazuje pouze poslední čtyři.
Vytuň si loď
Zpět nahoru △Ceny vybavení závisejí na typu lodě. Lodě jsou rozdělené do pěti kategorií a každá kategorie má své ceny vybavení.
| Kategorie | Lodě |
|---|---|
| 0 | Cobra Mk III |
| 1 | Adder, Gecko, Cobra Mk I |
| 2 | Fer-de-Lance, Asp Mk II |
| 3 | Python, Boa, Anaconda |
| 4 | Moray, Sidewinder, Krait, Mamba |
| Vybavení | Kategorie 0 | Kategorie 1 | Kategorie 2 | Kategorie 3 | Kategorie 4 |
|---|---|---|---|---|---|
| Fuel - za 1 ly | 2 | 2 | 2 | 2 | 2 |
| Missile | 25 | 25 | 25 | 25 | 25 |
| Large Cargo Bay | 600 | 500 | 2 000 | 6 000 | 400 |
| E.C.M. System | 600 | 400 | 500 | 800 | 300 |
| Pulse Laser | 400 | 400 | 400 | 400 | 400 |
| Beam Laser | 1 000 | 1 000 | 1 000 | 1 000 | 1 000 |
| Fuel Scoops | 525 | 375 | 700 | 650 | 450 |
| Escape Pod | 300 | 200 | 600 | 450 | 250 |
| I.F.F. Unit | 2 500 | 1 250 | 2 500 | 1 875 | 938 |
| Extra Energy Unit | 1 500 | 900 | 2 500 | 1 900 | 700 |
| Docking Computer | 1 500 | 800 | 1 000 | 2 000 | 700 |
| Galactic Hyperdrive | 5 000 | 3 000 | 4 000 | 6 000 | 3 000 |
| Military Laser | 6 000 | 6 000 | 6 000 | 6 000 | 6 000 |
| Mining Laser | 800 | 800 | 800 | 800 | 800 |
Cena laseru platí pro jednu pozici. Krait nemůže nést rakety, přestože jeho cenová kategorie obsahuje jejich cenu.
Na velikosti záleží
Zpět nahoru △Nyní už nelze maličkou lodí jako Sidewinder nárazem zničit obrovskou Anacondu bez následků. Malá loď bude při takové srážce nejspíš zničena. Tabulky ukazují výsledek srážky všech hráčských lodí proti všem AI lodím.
| Velikostní třída | Hráčské lodě | AI lodě a objekty |
|---|---|---|
| Trosky | Žádné | Raketa, Kovový plát, Nákladový kontejner, Úlomek |
| Velmi malé | Sidewinder | Únikový modul, Sidewinder, Thargon |
| Malé | Adder, Krait, Gecko, Mamba | Balvan, Shuttle, Mamba, Krait, Adder, Gecko, Worm |
| Střední | Moray, Cobra Mk I, Cobra Mk III, Fer-de-Lance, Asp Mk II | Transporter, Cobra Mk III, Viper, Cobra Mk I, Cobra Mk III (pirátská), Asp Mk II, Fer-de-Lance, Moray, Constrictor, Cougar |
| Velké | Python, Boa, Anaconda | Stanice Coriolis, Asteroid, Python, Boa, Anaconda, Rock Hermit (asteroid), Python (pirátská), Thargoid, Stanice Dodecahedron |
První sloupec obsahuje hráčské lodě, další sloupce lodě řízené AI. Každý výsledek platí pro jednu čelní srážku, plný přední štít (255 bodů), plnou energii hráče (255 bodů) a nepoškozenou AI loď s maximální energií podle jejího modelu. Nabírání pomocí Fuel Scoops je vypnuté. Matice zahrnuje i únikové moduly a samostatné pirátské varianty Cobry Mk III a Pythonu.
Číslo znamená, že hráč přežije, a udává počet ztracených bodů štítu. Odečtením od 255 zjistíte zbývající štít; energie hráče zůstává na 255. X znamená okamžité zničení hráče.
Pro zobrazení všech AI lodí posouvejte matici vodorovně. Sloupec hráčských lodí a záhlaví zůstávají při posouvání viditelné.
| Hráčská loď / AI loď | Únikový modul | Shuttle | Transporter | Cobra Mk III | Python | Boa | Anaconda | Viper | Sidewinder | Mamba | Krait | Adder | Gecko | Cobra Mk I | Worm | Cobra Mk III (pirátská) | Asp Mk II | Python (pirátská) | Fer-de-Lance | Moray | Thargoid | Thargon | Constrictor | Cougar |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Sidewinder | 136 | 208 | X | X | X | X | X | X | 163 | 237 | 232 | 234 | 227 | X | 207 | X | X | X | X | X | X | 138 | X | X |
| Adder | 68 | 144 | 208 | 255 | X | X | X | 255 | 81 | 173 | 168 | 170 | 163 | 237 | 143 | 255 | 255 | X | 255 | 242 | X | 69 | 255 | 255 |
| Krait | 68 | 144 | 208 | 255 | X | X | X | 255 | 81 | 173 | 168 | 170 | 163 | 237 | 143 | 255 | 255 | X | 255 | 242 | X | 69 | 255 | 255 |
| Gecko | 68 | 144 | 208 | 255 | X | X | X | 255 | 81 | 173 | 168 | 170 | 163 | 237 | 143 | 255 | 255 | X | 255 | 242 | X | 69 | 255 | 255 |
| Moray | 34 | 72 | 144 | 203 | 255 | 255 | 255 | 198 | 40 | 86 | 84 | 85 | 81 | 173 | 71 | 203 | 203 | 255 | 208 | 178 | 255 | 34 | 254 | 254 |
| Mamba | 68 | 144 | 208 | 255 | X | X | X | 255 | 81 | 173 | 168 | 170 | 163 | 237 | 143 | 255 | 255 | X | 255 | 242 | X | 69 | 255 | 255 |
| Cobra Mk I | 34 | 72 | 144 | 203 | 255 | 255 | 255 | 198 | 40 | 86 | 84 | 85 | 81 | 173 | 71 | 203 | 203 | 255 | 208 | 178 | 255 | 34 | 254 | 254 |
| Cobra Mk III | 34 | 72 | 144 | 203 | 255 | 255 | 255 | 198 | 40 | 86 | 84 | 85 | 81 | 173 | 71 | 203 | 203 | 255 | 208 | 178 | 255 | 34 | 254 | 254 |
| Fer-de-Lance | 34 | 72 | 144 | 203 | 255 | 255 | 255 | 198 | 40 | 86 | 84 | 85 | 81 | 173 | 71 | 203 | 203 | 255 | 208 | 178 | 255 | 34 | 254 | 254 |
| Python | 34 | 36 | 72 | 101 | 253 | 253 | 254 | 99 | 40 | 43 | 42 | 42 | 40 | 86 | 35 | 101 | 101 | 253 | 104 | 89 | 248 | 34 | 127 | 127 |
| Boa | 34 | 36 | 72 | 101 | 253 | 253 | 254 | 99 | 40 | 43 | 42 | 42 | 40 | 86 | 35 | 101 | 101 | 253 | 104 | 89 | 248 | 34 | 127 | 127 |
| Anaconda | 34 | 36 | 72 | 101 | 253 | 253 | 254 | 99 | 40 | 43 | 42 | 42 | 40 | 86 | 35 | 101 | 101 | 253 | 104 | 89 | 248 | 34 | 127 | 127 |
| Asp Mk II | 34 | 72 | 144 | 203 | 255 | 255 | 255 | 198 | 40 | 86 | 84 | 85 | 81 | 173 | 71 | 203 | 203 | 255 | 208 | 178 | 255 | 34 | 254 | 254 |
Například Cobra Mk III s plnými štíty přežije srážku s nepoškozenou Anacondou, ale ztratí všech 255 bodů předního štítu. Anaconda při nárazu do Sidewinderu ztratí jen 40 bodů štítu.
Při stejné velikostní třídě je poškození 128 plus polovina aktuální energie AI lodě, zaokrouhlená dolů. Loď o jednu třídu menší způsobí polovinu tohoto poškození, o dvě či více tříd menší čtvrtinu, opět zaokrouhlenou dolů. Loď o jednu třídu větší přidá 64 bodů, nejvýše však do celkových 255. Loď o dvě či více tříd větší hráče okamžitě zničí.
Výsledky popisují srážku hráče s AI, nikoli souměrnou simulaci dvou hráčských lodí. Kolidující AI objekt je označen k odstranění. Běžné kolizní poškození se odečítá přímo ze zasaženého štítu bez přepočtu podle síly štítů daného trupu. S oslabenými štíty nebo energií může být smrtelná i srážka, kterou zde hráč přežije. Stanice a rakety mají vlastní kolizní rutiny; trosky a asteroidy jsou výše zařazené podle velikosti, ale netvoří lodní sloupce této matice.
Registrační značky
Zpět nahoru △Hráčova loď i AI lodě mají ve světě Elite: Unbound vlastní registrační ID. Registrace hráčovy lodě se zobrazuje na obrazovce Status, zatímco registraci zaměřené AI lodě lze přečíst pomocí I.F.F. Unit. Stejná ID označují odesílatele a příjemce v rádiových zprávách.
Scramble Ship ID
V systémech se zřízením Anarchy nabízejí piráti speciální službu Scramble Ship ID na obrazovce Equip Ship za 5 000 Cr. Po zakoupení služba z nabídky vybavení zmizí a znovu se nenabízí, dokud máte registraci skrytou. Samotné zakoupení služby právní status hráče nemění.
Nečitelná registrace se může hodit při pirátské kariéře. Pokud máte scrambled ID a zároveň právní status Fugitive, má každý nově vytvořený lidský pirát 50% šanci, že k vám bude neutrální. Podmínka se vyhodnocuje zvlášť i pro jednotlivé členy pirátského roje. Neutrální pirát se může při napadení bránit; pravidlo se nevztahuje na Thargoidy ani na lodě spojené s misemi.
Scrambling skryje stávající registraci jako ??-??? na obrazovce Status i v rádiových zprávách. Své registrace skrývají také pirátské AI lodě.
Přiblížení ke stanici
V systémech se zřízením Multi-Government, Communist, Confederacy, Democracy a Corporate State zvýší vstup do bezpečné zóny stanice se skrytým ID interní hodnotu trestního záznamu nejméně na 100, což znamená status Fugitive. Pokud je hodnota už vyšší, zůstane zachována.
Velitel se statusem Clean nebo Offender se tak okamžitě stane Fugitive, i když nespáchá žádný další přestupek. Pokud už je Fugitive, status zůstane stejný, ale hodnota záznamu nižší než 100 se zvýší na 100. Pro představu: Clean odpovídá hodnotě 0, Offender hodnotám 1 až 49 a Fugitive hodnotě 50 nebo více.
Když tato kontrola zvýší trestní záznam, stanice odešle rádiové varování adresované registraci ??-???: SCRAM PIRATE!, RUN PIRATE! nebo DIE PIRATE! Pokud už má záznam hodnotu 100 nebo více, tato kontrola další varování neodešle.
Systémy se zřízením Anarchy, Feudal a Dictatorship skryté registrace ignorují. Vstup do bezpečné zóny jejich stanice proto nezpůsobí tento postih ani varování. Výjimka se vztahuje pouze na nečitelnou registraci a nemaže už existující trestní záznam.
Registrace hráčovy lodě
Registrace lodě se skládá ze dvou písmen A až Z a čísla 001 až 255. Příkladem je JS-042, výchozí registrace velitele Jamesona. Nové registrace vznikají pomocí běžného herního generátoru náhodných čísel.
Obě písmena i číslo jsou součástí uloženého commandera, takže platná registrace zůstává stejná i po uložení a načtení hry. Pokud načtená registrace obsahuje neplatné písmeno nebo číslo 000, hra ji nahradí nově vygenerovanou.
Obnovení čitelné registrace
- Nákup jiné lodě: při každém úspěšném nákupu dostane nová loď nově vygenerovanou, čitelnou registraci. Stávající trestní záznam zůstává zachovaný.
- Použití Escape Pod: náhradní loď dostane nově vygenerovanou, čitelnou registraci. Escape Pod zároveň vymaže trestní záznam a obnoví status Clean.
- Pokračování po smrti: hra obnoví posledního uloženého commandera včetně registrace a jejího skrytí. Pokud byla registrace v uložené pozici čitelná, bude znovu čitelná; pokud byla uložená jako scrambled, zůstane skrytá. Samotná smrt tedy obnovení čitelného ID nezaručuje.
- Default JAMESON: nový začátek s výchozím commanderem obnoví čitelnou registraci JS-042.
Registrace AI lodí v místní bublině
Místní bublina je oblast vesmíru, kterou hra právě simuluje kolem hráčovy lodě. Registrace AI používají samostatný osmibitový generátor označovaný jako LFSR. Jeho počáteční stav kombinuje souřadnice aktuálního systému, číslo galaxie a náhodnou hodnotu trhu pro danou návštěvu. Běžný generátor náhodných čísel přitom neposouvá, takže přidělování registrací neovlivňuje ostatní herní události.
Každá nově vytvořená loď nebo objekt dostane další nenulovou hodnotu z posloupnosti. Generátor projde všech 255 hodnot, než se začne opakovat, takže v rámci těchto prvních 255 přidělení je číselná část pokaždé jiná. Dvě písmena se odvozují z tohoto čísla, souřadnic systému, galaxie a náhodné hodnoty trhu.
Přidělené číslo zůstává AI lodi po celou dobu jejího pobytu v bublině, i když hra přeskládá interní sloty lodí. Při vyprázdnění bubliny se smaže tabulka AI registrací a generátor začne znovu.
Jde o místní identifikační systém, nikoli o galaktický registr trvale jedinečných ID. Po 255 přiděleních se posloupnost opakuje a hra nekontroluje, zda je předchozí držitel stále přítomen. Při úplné shodě s hráčovou registrací se ID AI lodě zobrazí jako ??-???; samotná shoda číselné části registraci neskryje.
Vesmír není skládka!
Zpět nahoru △Nepotřebný nebo nechtěný náklad lze nyní vyhodit z lodě do vesmíru. Odhazování v blízkosti stanice vás ale může stát čistý trestní rejstřík.
Obrazovku Jettison otevřete za letu stisknutím Ctrl + 2. Každá potvrzená volba odhodí jeden nákladní kontejner o hmotnosti 1t. Ovládání je popsané v části Odhazování nákladu za letu.
Každý skutečně odhozený kontejner v bezpečné zóně stanice přidá 15 bodů k interní hodnotě trestního záznamu. Postih mění právní status hráče, kredity se neodečítají. Opakované přestupky se sčítají až do maximální hodnoty 255.
Pokud začínáte se statusem Clean, první postih zvýší záznam z 0 na 15 a změní status na Offender. Čtyři taková odhození znamenají hodnotu 60 a status Fugitive, pokud se mezitím záznam nezmění jiným způsobem.
Následky se mohou projevit ještě před dosažením statusu Fugitive: lovci odměn se stávají nepřátelskými už při hodnotě trestního záznamu 40 nebo více. Tři taková odhození z čistého záznamu ho zvýší na 45.
Systémy se zřízením Anarchy odhazování tolerují i v bezpečné zóně stanice. Všechna ostatní zřízení postih uplatňují, včetně Feudal a Dictatorship. Mimo bezpečnou zónu stanice odhazování nákladu nepřidává body do trestního záznamu v žádném systému. Otevřený vesmír je obrovský.
Okruh je plný
Zpět nahoru △Stanice dostaly příletový koridor a jednoduché řízení letového provozu (ATC) včetně rádiových zpráv. Pokud koridor obsadí hráč nebo AI loď, stanice pozastaví běžné starty, aby zachovala volný prostor pro přiblížení k dokovacímu otvoru.
Příletový koridor
Kontrolovanou oblast tvoří válec vedený od dokovací stěny směrem k planetě podél dokovací osy stanice. Má poloměr 200 herních jednotek a délku 2 240 jednotek, tedy sedm průměrů stanice Coriolis. Začíná 160 jednotek od středu stanice a končí ve vzdálenosti 2 400 jednotek. Kruhový průřez zajišťuje, že otáčení stanice nemění výsledek kontroly.
Hra kontroluje polohu středu každé lodě. Loď koridor blokuje, pokud její střed leží uvnitř válce, bez ohledu na velikost, směr letu nebo to, zda právě dokuje. Nejdříve se kontroluje hráč, potom AI lodě v místní bublině. Rakety, nákladní kontejnery, únikové moduly, trosky, kameny a asteroidy včetně úkrytů rock hermitů starty neblokují.
Pozastavení startů
Před vypuštěním lodě Shuttle nebo Transporter stanice ověří, zda je koridor volný. Pokud v něm najde překážející loď, daný pokus o start zruší. Stanice neudržuje frontu čekajících startů: po uvolnění koridoru může uspět některý další běžný náhodný pokus o vypuštění lodě.
Policejní Vipery mají přednost a mohou startovat i při obsazeném koridoru. Lodí vypouštěných z Anacond nebo od rock hermitů se toto řízení provozu stanice netýká.
Rádiová komunikace
Při zablokovaném pokusu o start odešle stanice první nalezené překážející lodi zprávu DOCK OR LEAVE. Například ve zprávě C1-007:AB-123, DOCK OR LEAVE označuje C1-007 stanici a AB-123 loď, která obsadila koridor.
Registrace stanice vyjadřuje její typ a polohu. První písmeno je C pro stanici Coriolis nebo D pro stanici Dodecahedron. Následující číslice označuje galaxii od 1 do 8. Trojčíslí za pomlčkou udává interní index systému od 000 do 255. Registrace C1-007 tedy označuje stanici Coriolis v galaxii 1, v systému s indexem 7.
Hra tento index zjistí postupným generováním systémů aktuální galaxie od začátku, dokud nenajde současný systém. Pořadí přitom počítá od nuly. Stejná stanice si proto zachovává stejné ID i při dalších návštěvách. Registrace stanic jsou vždy čitelné.
Příjemcem může být hráč i AI loď. Skryté registrace se zobrazují jako ??-??? podle stejných pravidel jako v ostatních rádiových zprávách. Pokyn je jednoduchý: dokončete dokování nebo opusťte koridor, aby mohly pokračovat běžné starty.
Někdo poslouchá
Zpět nahoru △Rádiová komunikace dává okolním lodím a stanicím hlas. V Elite: Unbound jde o krátké, předem napsané hlášky, které spouštějí konkrétní herní události. Hra vyhodnotí situaci a roli zúčastněné lodě a podle toho vybere zprávu z příslušné skupiny.
Kdo vysílá a kdy
Obchodníci, nepřátelští piráti, nepřátelští lovci odměn a nepřátelská policie mají nyní 50% šanci vysílat po vytvoření lodě, která splňuje příslušné podmínky. Každá skupina má ve zdrojovém kódu vlastní nastavení pravděpodobnosti. Pokud pokus uspěje, hra se stejnou šancí vybere jednu ze tří hlášek dané skupiny. Staniční zprávy spouští přímo odpovídající událost a tento 50% test se na ně nevztahuje.
| Odesílatel | Spouštěcí událost | Možné zprávy |
|---|---|---|
| Pirát | Úspěšně vznikne nepřátelský pirát, samostatně nebo jako člen roje. | YOU ARE DEAD! PREPARE DIE! SCUMBAG! |
| Obchodník | Rutina pro vytváření obchodníků úspěšně přidá loď Cobra Mk III, Python, Boa nebo Anaconda. | HAVE NICE TRIP HELLO JUST PASSING |
| Lovec odměn | Samostatně vytvořená loď má současně příznak lovce odměn a nepřátelský příznak. | WRONG PLACE! HERE WE GO! MY BOUNTY! |
| Policie | Z nepřátelské stanice odstartuje Viper, nebo vznikne náhodná policejní Viper při hráčově trestním záznamu 40 či více. | STOP NOW! WE FOUND YOU! SURRENDER! |
| Řízení provozu stanice | Loď v příletovém koridoru zablokuje běžný start ze stanice. | DOCK OR LEAVE |
| Kontrola registrace u stanice | Kontrola skrytého ID v bezpečné zóně stanice zvýší hráčův trestní záznam na 100. | SCRAM PIRATE! RUN PIRATE! DIE PIRATE! |
Pirátský roj má jeden pokus o vysílání až po zpracování všech svých členů. Odesílatelem se stane první úspěšně vytvořený pirát, který zůstal nepřátelský. Celý roj tak pošle nejvýše jednu zprávu; pokud nemá žádného nepřátelského člena, nepošle nic. Samostatně vytvořený pirát má vlastní jediný pokus.
Adresování a příjem
Zprávy mají formát ODESÍLATEL:PŘÍJEMCE, ZPRÁVA. Vysílání AI lodí je adresované hráči, zatímco řízení provozu stanice může oslovit hráče nebo AI loď blokující koridor. Registrace se řídí pravidly z části Registrační značky, včetně zobrazení ??-??? u skrytých identit. Příjem rádiových zpráv je automatický.
Každou přijatou zprávu oznámí jedno krátké pípnutí. Ve 3D pohledu do vesmíru se text zobrazí okamžitě. Na mapě, obrazovce Status nebo jiné informační obrazovce za letu počká na návrat do pohledu z kokpitu a pak se zobrazí bez druhého pípnutí.
V paměti je místo pro jedinou čekající rádiovou zprávu. Novější zpráva nahradí starší čekající zprávu bez ohledu na odesílatele. Historie komunikace se neukládá. Čekající zpráva se zahodí při resetu letového stavu, například při zadokování, startu, hyperskoku, použití Escape Pod nebo smrti.
Jak se rádio vešlo do paměti
Implementace využívá původní rutinu Elite pro centrované letové hlášky a vlastní rádiový token s číslem 2. Jeho čítač zobrazení začíná na hodnotě 100 místo běžných 20, aby na delší zprávy zůstalo více času. Jde o interní hodnoty čítače, nikoli o sekundy.
Vybraná hláška i obě registrační ID se pro zobrazení uchovávají beze změny. U čekající zprávy se ID zkopírují už při příjmu, takže odesílatel může mezitím opustit místní bublinu, aniž by se změnil výsledný text. To je důležité také při mazání zobrazené zprávy: Elite vykreslí stejný text znovu operací XOR, která ho odstraní bez poškození pozadí.
Texty hlášek jsou uložené pouze jednou a vybírají se pomocí úsporných tabulek relativních posunů. Společná interpunkce se doplní až při výpisu. Aby se šetřil prostor HICODE, část obslužného kódu a texty využívají místo v původním bufferu palubního panelu, které uvolnila RLE komprese.
Poslíček
Zpět nahoru △Special Cargo přináší do Elite: Unbound kurýrní zakázky z Elite-A. Malé zásilky mohou obsahovat urgentní dokumenty, zdravotnický materiál nebo méně počestné balíčky. Současně můžete vézt pouze jednu aktivní zakázku. Nezabírá běžný nákladový prostor a nelze ji prodat ani odhodit přes obrazovky komodit.
Přijetí zakázky
Po zadokování stiskněte Ctrl + 1. Zobrazí se dostupné cíle a jejich vstupní poplatky. Zakázku přijmete zadáním čísla a stisknutím Return. Poplatek se odečte okamžitě; bez dostatku kreditů se zakázka nepřijme. Prázdnou nabídku označuje hláška NO CONTRACTS.
Po přijetí ukazuje údaj VALUE zbývající odměnu za doručení. Opětovné otevření obrazovky zobrazí aktivní zakázku bez další platby. Cíl a hodnotu ukazuje také Inventory. Klávesou W na kterékoli mapě vyberete cíl a zobrazíte jeho název a vzdálenost; ovládání popisuje část Speciální přepravní zakázky.
Doručení bez ztráty hodnoty
Zakázka nemá časový odpočet. Její hodnota se mění při zadokování, takže záleží především na počtu mezizastávek u stanic, nikoli na počtu hyperskoků.
| Událost | Vliv na zakázku |
|---|---|
| Zadokování v cíli | Zbývající hodnota se automaticky jednou vyplatí a zakázka skončí. |
| Zadokování u jiné stanice | Zbývající hodnota se rozpůlí se zaokrouhlením dolů na desetinu kreditu. Počítá se i návrat na výchozí stanici. |
| Běžný hyperskok | Hodnota zůstane stejná až do zadokování. |
| Galaktický hyperskok | Zakázka se zruší bez vyplacení odměny. |
Pokud půlení sníží hodnotu na nulu, zakázka zanikne. Vstupní poplatek se nevrací, takže čistý výdělek tvoří konečná odměna po odečtení poplatku a nákladů na cestu. Cíl může vyžadovat několik skoků: generátor nabídek nekontroluje dolet vaší lodě ani dostupnost celé trasy.
Jak vznikají nabídky
Seznam se vypočítává z aktuálního herního stavu: náhodného bajtu trhu, souřadnic současného systému, trestního záznamu, spodního bajtu počítadla bojových sestřelů, čísla galaxie, typu hráčovy lodě a souřadnic předchozí zásilky. Kód tyto hodnoty kombinuje pomocí XOR a osmibitového sčítání a odčítání.
Výsledek určuje požadovaný počet od 0 do 15 nabídek a rozestupy, s nimiž hra vybírá kandidáty při průchodu posloupností systémů galaxie. Současná poloha je z výběru vyloučena. Hledání skončí po nalezení požadovaného počtu nabídek nebo po jednom průchodu galaxií, takže skutečný seznam může být kratší.
Generování nabídek nečerpá nová čísla z letového generátoru náhody. Pokud se vstupy nezmění, opětovné otevření menu zobrazí stejný seznam. Po dokončení, zániku nebo zrušení zakázky zůstávají staré cílové souřadnice v paměti a vstupují do výpočtu dalších nabídek.
Poplatky, odměny a legalita
Výpočet ceny vezme větší ze dvou hodnot: vzdálenost cíle v interních mapových jednotkách a číslo od 0 do 31 odvozené z dat cílového systému a stavu nabídky. Bitovým OR s přírůstkem trestního záznamu za zakázku vznikne cenový bajt V. Z něj se původními celočíselnými posuny Elite-A sestaví vstupní poplatek a počáteční odměna.
Přesný výpočet je F = floor(257 × V / 8), kde floor znamená zaokrouhlení dolů. Vstupní poplatek je F / 10 Cr a počáteční odměna (256 × V + (F mod 256)) / 10 Cr; mod označuje zbytek po dělení. Například V = 40 znamená poplatek 128,5 Cr a počáteční odměnu 1 024,5 Cr.
U velitele se statusem Clean je přírůstek trestního záznamu vždy nulový. Pokud už velitel záznam má, generátor z dat cílového systému a stavu nabídky odvodí možný přírůstek. Použije ho pouze tehdy, když je menší než současný záznam; jinak je přírůstek nulový. Přijetí zakázky výslednou hodnotu přičte k trestnímu záznamu.
Sčítání zachovává původní osmibitové přetečení Elite-A: hodnoty nad 255 se přetočí přes nulu. Výsledek se nezastropuje na 255, takže přijetí zakázky může dostatečně vysoký záznam přetečením také snížit.
Uložení zásilky
Trvale stačí uložit čtyři bajty: dva pro zbývající odměnu v desetinách kreditu a po jednom pro obě cílové souřadnice. Nulová odměna znamená, že není aktivní žádná zakázka. Uložení a načtení hry tyto hodnoty zachovává; starší uložené pozice bez nich začínají bez zásilky. Nový commander a Default JAMESON vynulují všechny čtyři bajty.
Seznam nabídek se podle potřeby znovu sestaví. Jeho šest dočasných tabulek využívá 96 bajtů pracovního prostoru pro ukládání a načítání, dokud je otevřené dokované menu. Stav zásilky je oddělený od příznaků původních příběhových misí, takže odměnu lze vyplatit i při zadokování, které zároveň spustí zadání mise.
Chyť mě, když to dokážeš
Zpět nahoru △Lovec odměn ve Fer-de-Lance by měl mít důvod vás lovit. Původní způsob vytváření lodí ho mohl nastavit jako nepřátelského i vůči veliteli se statusem Clean. Oprava umožňuje, aby nově vytvořený lovec ve Fer-de-Lance začínal neutrálně, pokud je váš trestní záznam nižší než 40.
| Trestní záznam | Status hráče | Běžně vytvořený lovec odměn |
|---|---|---|
| 0 | Clean | Neutrální |
| 1-39 | Offender | Neutrální |
| 40-49 | Offender | Nepřátelský |
| 50-255 | Fugitive | Nepřátelský |
Rutina pro vytvoření lodě nejdřív spojí příznaky jejího modelu s příznaky konkrétního setkání. Oprava pak ověří typ Fer-de-Lance i roli lovce odměn. Při záznamu pod 40 vymaže pouze nepřátelský příznak, přičemž zachová roli lodě, agresivitu AI i registraci. Při hodnotě 40 nebo více zůstane běžný nepřátelský lovec nepřátelský.
Původní taktická rutina dál sleduje váš trestní záznam. Pokud dosáhne 40 v době, kdy už je neutrální lovec přítomen, lovec se stane nepřátelským. Útok na něj také vyvolá odvetu, i když máte status Clean. Jakmile je loď nepřátelská, snížení záznamu ji samo nevrátí do neutrálního stavu.
Neutrální lovec při příchodu neposílá výhrůžné hlášky lovců odměn. Rádiová kontrola vyžaduje současně příznak lovce a nepřátelský příznak. Pozdější přechod do nepřátelského stavu neopakuje komunikační pokus prováděný při vytvoření lodě.
Opravu zapíná volba bountyhunterfix=yes. Uplatňuje se při vytváření nových lovců ve Fer-de-Lance; zpětně nemění lodě, které už jsou přítomné v uloženém snímku emulátoru.
Jedna nestačí!
Zpět nahoru △Jediná řízená raketa dříve zničila AI loď okamžitě, bez ohledu na její zbývající energii. V Elite: Unbound místo toho zásah rakety odečte 81 bodů energie. Na malý Sidewinder stále stačí jediný zásah, ale větší nepoškozená loď jich vydrží několik.
Poškození se odečítá od aktuální energie cíle. Pokud má před zásahem méně než 81 bodů, hra jej označí ke zničení. Při 81 a více bodech odečte 81 a loď přežije. Odečítání má jednu zvláštnost: loď s přesně 81 body přežije s nulovou energií. Samotná raketa se po zásahu v obou případech zničí.
| AI loď | Plná energie | Po jednom zásahu | Zásahů ke zničení |
|---|---|---|---|
| Sidewinder | 70 | Zničena | 1 |
| Mamba | 90 | 9 | 2 |
| Cobra Mk III | 150 | 69 | 2 |
| Thargoid | 240 | 159 | 3 |
| Python, Boa | 250 | 169 | 4 |
| Anaconda | 252 | 171 | 4 |
Příklady používají hodnoty energie AI lodí a počítají s plnou počáteční energií, úspěšnými zásahy raket, bez regenerace a dalšího poškození mezi zásahy. Nepopisují štíty ani energetické banky hráčovy lodě.
Anacondě tak po prvním zásahu zbývá 171, po druhém 90 a po třetím 9 bodů energie; čtvrtý ji zničí. V boji může předchozí poškození laserem potřebný počet raket snížit, zatímco regenerace energie AI mezi zásahy jej může zvýšit. Rakety tak slouží k těžkému poškození nebo doražení oslabeného cíle, aniž by zaručovaly okamžité zničení každé lodě.
Úpravu zapíná volba realmissiledamage=yes, nezávisle na unbound. Stanice zůstávají vůči raketám imunní. Tato volba mění poškození AI cílů raketami; dosavadní účinek výbuchu rakety poblíž hráče zůstává beze změny.
Jsou všude kolem!
Zpět nahoru △Lodě se v původní hře mohou objevovat na nápadně se opakujících místech. Inicializace nepřátelské lodě používá pevné vyšší bajty vzdálenosti ve všech třech osách a některé souřadnice přebírají náhodnou hodnotu z rozhodnutí, které setkání vyvolalo. Obchodníci a volně plující objekty mají vlastní omezený vzor rozmístění.
Rutina rand_posn z Elite-A dává setkáním větší prostorový rozptyl. Vynuluje pracovní data lodě, zvolí náhodná znaménka a odchylky ve vodorovné i svislé ose a z nich vypočítá vzdálenost před hráčem. Používá ji společná inicializace nepřátelských lodí i rutina pro umístění obchodníků a volně plujících objektů.
V zápisu souřadnic mají x_hi a y_hi hodnoty od 0 do 31, doplněné náhodnými nižšími bajty a znaménky. Vzdálenost před hráčem se odvozuje z těchto odchylek a zůstává kladná. Tato setkání jsou tedy rozptýlena v prostoru před hráčem, nikoli po celé kouli v rozsahu 360 stupňů.
Původní pravidla setkání dál určují, kdy se hra pokusí loď vytvořit a které typy připadají v úvahu. Odlety ze stanice používají vlastní startovní pozice. V Elite: Unbound navíc každý člen pirátského roje dostane vlastní nižší bajty souřadnic v rámci společné pozice skupiny. Roj tak zůstává pohromadě, aniž by všechny lodě zabíraly přesně stejný bod.
Rozmístění podle Elite-A zapíná volba randomspawns=yes. Dodatečný rozptyl členů pirátského roje je součástí unbound=yes.
Funguje to! Funguje to!
Zpět nahoru △Řízení nebo střelba joystickem by neměly vyřadit klávesnici. V původní obsluze vstupu aktivita joysticku pošle program do jeho obslužného kódu a odtud rovnou ven, bez skenování klávesnice. Při drženém směru nebo tlačítku střelby tak může klávesový příkaz zdánlivě nereagovat.
Oprava vychází z Elite 128: po načtení směrů joysticku, střelby a nastaveného obrácení os pokračuje RDKEY do scanmatrix. Záznamy ovládání joystickem zůstanou v tabulce vstupů a ve stejném průchodu se doplní stisknuté klávesy.
Můžete tedy dál řídit joystickem a současně klávesnicí měnit rychlost, ovládat rakety či E.C.M., otevírat mapy a zadávat další příkazy. Platí přitom dosavadní přiřazení kláves i nastavení os joysticku.
Režim joysticku se vybírá obvyklým způsobem: stiskem tlačítka střelby na titulní obrazovce s rotující lodí. Oprava pak umožní oběma zdrojům vstupu pracovat společně při každém čtení.
Zapíná se volbou inputfix=yes, nezávisle na unbound. Změna přidává po zpracování joysticku skok do existujícího skenování klávesnice.
Koho to zajímá?
Zpět nahoru △Některá vylepšení jsou tak drobná, že při běžném hraní snadno zaniknou. Volně plující trosky by měly po skoku zůstat za vámi a popis planety by měl zůstat na obrazovce dost dlouho na přečtení.
Odpad zůstává za námi
Skok uvnitř soustavy na klávese J funguje posunutím planety a slunce vůči hráči. Původní kód nechává ostatní objekty v místní bublině na jejich pozicích, takže kontejnery s nákladem, asteroidy i záchranné kapsle zdánlivě cestují s vámi.
S volbou warpjunk=yes povolený skok nejdříve odstraní objekty započítávané mezi odpad. Patří sem záchranné kapsle, kovové pláty, kontejnery s nákladem, balvany, asteroidy, úlomky, Shuttle, Transporter i skalní poustevníci. Před odstraněním jejich slotů se smažou značky ze skeneru, včetně správných značek I.F.F., takže po nich nezůstanou nehybné stopy.
Úklid proběhne až po splnění všech podmínek skoku. Zamítnutý pokus, například při letu směrem k příliš blízké planetě nebo slunci, ponechá objekty na místě. Obvyklá omezení kvůli ostatním lodím, stanici nebo pobytu ve witchspace dál platí.
Chvilka na čtení
Dlouhý popis na obrazovce Data on System může přesáhnout spodní okraj. Původní textová rutina okamžitě smaže obrazovku a vypíše zbytek, takže první stránka zmizí dřív, než ji stihnete přečíst.
S volbou planetdatafix=yes zůstane první stránka viditelná a přetékající text se uloží do dočasné paměti. Uvolněte klávesu, kterou jste stránku otevřeli, a potom stiskněte a uvolněte herní klávesu pro zobrazení pokračování. Stisk i uvolnění zpracuje obsluha stránkování, takže držená otevírací klávesa nemůže první stránku přeskočit.
Stránkování obsluhuje běžná herní smyčka. Během čtení pokračuje let i odpočet hyperskoku a dočasné letové zprávy nemohou čekající stránku přepsat. Poslední stránka se chová jako obyčejná obrazovka Data on System a zůstane otevřená, dokud nezvolíte jiný pohled. Krátké popisy žádný další stisk nepotřebují.
Pokračování využívá existující 256bajtovou pracovní oblast pro ukládání a načítání v době, kdy je nečinná. Její velikost kontroluje assembler a kontrola mezí za běhu brání textu zasáhnout do modelů lodí, které v paměti následují.
Je to... kulaté!
Zpět nahoru △Vykreslit kružnici znamená spočítat řadu bodů a spojit je úsečkami. Původní rutina opakovaně násobí poloměr hodnotami sinu, aby získala vodorovnou a svislou odchylku každého bodu od středu. Na procesoru rodiny 6502 tato násobení zabírají čas, který by mohl využít zbytek hry.
Optimalizace využívá symetrii kružnice. Před kreslením rutina BuildCircleSinCache spočítá potřebné součiny pro první čtvrtinu kružnice a zrcadlí je do 32bajtové cache. Kreslicí smyčka pak čte uložené hodnoty pro obě souřadnice a doplní původní znaménka i posun vůči středu.
| Úhlový krok (STP) | Původní počet výpočtů | S cache |
|---|---|---|
| 8 | 18 | 3 |
| 4 | 34 | 5 |
| 2 | 66 | 9 |
Čísla udávají počet volání rutiny pro součin se sinem FMLTU2 na jednu kružnici, včetně uzavíracího bodu. Hra dělí celý kruh na 64 úhlových kroků, takže menší STP vytváří více úseček. Jde o počty výpočtů, nikoli naměřené zvýšení FPS.
Pořadí bodů, ořezávání úseček i uložené souřadnice čar zůstávají stejné. Čtení z cache obnovuje také příznak přenosu procesoru stejně jako původní výpočet, aby přesně zachovalo změny znamének. Kružnice si tak zachovává původní tvar i podrobnost.
Společná rutina CIRCLE2 kreslí obrys planety, kružnice na mapách i prstence tunelu při startu a hyperskoku, takže z úpravy těží všechny tyto efekty. Cache se znovu naplní pro poloměr a krok každé kružnice.
Zapíná se volbou renderspeedups=yes, nezávisle na unbound.
Příliš rychle!
Zpět nahoru △V jednoduché scéně nebo na zrychleném procesoru může původní hra procházet letovou smyčkou mnohem rychleji. Tím se zrychlí i pohyb a další herní logika navázaná na její průchody. Omezovač snímkové frekvence převzatý z Elite 128 vyhrazuje každému průchodu nejméně čtyři videosnímky.
Rastrové přerušení jednou za celý videosnímek zvýší počítadlo. Rutina FrameLimit počká, dokud nedosáhne čtyř, a potom jej vynuluje. Pokud předchozí průchod už zabral alespoň čtyři snímky, hra pokračuje okamžitě.
| Obrazová norma | Nominální frekvence obrazu | Maximum herní smyčky |
|---|---|---|
| PAL | 50 Hz | 12,5 FPS |
| NTSC | 60 Hz | 15 FPS |
Jde o přibližné horní meze počtu aktualizací herní smyčky. Obraz se dál obnovuje běžnou frekvencí. Náročná scéna může běžet pomaleji; omezovač čeká pouze tehdy, když zbývá čas.
Stejný omezovač řídí také otáčení lodě na titulní obrazovce. Zvuk dál aktualizuje rastrové přerušení jednou za snímek. Výsledkem je vyrovnanější tempo v rychlých scénách i na zrychleném hardwaru, včetně níže popsaného turba C128 v okrajích obrazu.
Zapíná se při sestavení volbou fpslimiter=yes. Je nezávislý na unbound a nemá přepínač přímo ve hře.
Turbo
Zpět nahoru △Na Commodore 128 spuštěném v režimu C64 využívá Elite: Unbound režim procesoru 2 MHz během vykreslování okrajů obrazu. Při zobrazování bitmapy a palubního panelu se vrací na 1 MHz, aby VIC-IIe mohl správně načítat grafická data.
Přepínání rychlosti podle rastru
Rastr označuje aktuální řádek obrazu vykreslovaný grafickým čipem. Obsluha rastrového přerušení má v každém snímku tři fáze. Zápisem 0 nebo 1 do řídicího registru C128 $D030 vybírá takt 1 nebo 2 MHz.
| Řádek rastru | Akce | Následný takt procesoru |
|---|---|---|
| 40 | Nastaví horní část obrazu a obnoví běžný takt před načítáním viditelné bitmapy a spritů. | 1 MHz |
| 194 | Přepne zobrazení na palubní panel a aktualizuje zvuk i počítadlo snímků. | 1 MHz |
| 250 | Zapne turbo ve spodním okraji a naplánuje další přerušení na řádek 40 následujícího snímku. | 2 MHz |
Interval 2 MHz pokračuje přes spodní okraj a začátek dalšího snímku. Interní stav rastru se střídá v pořadí 0 → 1 → $FF → 0. Přidané přerušení v okraji pouze přepne rychlost a naplánuje další fázi; zvuk i počítadlo snímků se dál aktualizují jednou za snímek při přerušení palubního panelu.
Kolik času navíc je k dispozici?
U PAL pokrývá nominální interval turba 102 z celkových 312 řádků, přibližně 32,7 % snímku. NTSC používá stejné přepínací řádky, ale má kratší interval v okrajích. Přínos závisí na právě prováděné práci a zapnutý omezovač snímkové frekvence dál omezuje hlavní herní smyčku. Podíl okrajů není naměřené zvýšení FPS.
Stabilní obraz a načítání
Přerušení horní části obrazu a panelu nejdříve provedou časově citlivé zápisy do grafických registrů a teprve potom zavolají pomocnou rutinu pro návrat na 1 MHz. Samostatnou cestou turba prochází pouze přerušení v okraji. Přechod mezi bitmapou a panelem tak zůstává sladěný s načítáním dat grafickým čipem.
Před načítáním či ukládáním přes KERNAL, kdy se rastrová přerušení vypínají, hra výslovně nastaví 1 MHz. Totéž udělá při restartu před čekáním na rastr. Návrat k běžné rychlosti proto v těchto situacích nezávisí na vypnutém přerušení.
Funkce je automaticky součástí unbound=yes. Stejná binárka zapisuje do řídicího registru na obou počítačích: standardní C64 tyto zápisy rychlosti ignoruje a zachová běžný takt. Na C128 není potřeba žádné další nastavení hráčem. Pomocný kód využívá volné místo kolem RLE dat panelu a jeho umístění i paměťové meze kontroluje assembler.