Кіріспе

Twin Kingdom Valley – BBC Micro, Acorn Electron, Commodore 64, Commodore 16 және ZX Spectrum платформалары үшін анимациялық суреттері бар (көптеген форматтарда) мәтіндік квест ойыны. Ол 1983 жылы Bug Byte компаниясымен шығарылды.

Ойын процесі

Твин Корольдік аңғары – ойыншы командалық қабылдауда "құмыраны ал" сияқты командаларды енгізіп, олардың әрекетінің нәтижесін ("Енді ол менде") көретін интерактивті әңгіме. Әрбір команда бір уақыт бірлігін пайдаланады, осы уақытта ойыншы емес кейіпкерлер де қозғалып, әрекет етеді. Бұл ойыншы емес кейіпкерлердің белсенді болған алғашқы мәтіндік ойындардың бірі. Кейіпкерлермен өзара әрекеттесуге болады және олардың әрқайсысының жеке мінезі бар: кейбіреулері достық, ойыншыны іздейді және қорғайды, ал енді біреулері жауырысқан. Сиқыршылар мен патшалар күрделі кейіпкерлер, ал гориллалар мен тролльдер – қарапайым. Шайқас кезеңдерінде қару-жарақтар да бар, оларды жаулар тастап, сындырып, лақтырып немесе алып кетуі мүмкін.

Сюжет

Ойынның басты кейіпкері – қазына іздеуші, ойын механизмі оны "сен" деп атайды. Ойыншы ойынды орман патшалығының оңтүстік шетінен, аз мүлікпен бастайды. "Қылыш тавернасының" (The Sword Inn) мейманханашысымен ерте кездесу ойыншыны одан кішкентай ағаш үйді жалға алуға көндіруі мүмкін. Үйде қарапайым құмыра сияқты өте шала мүліктер бар. Ойынды жалғастыру үшін ойыншы қай кейіпкерлерді дос, ал қайларын жау деп санау керектігін анықтауы керек. Кейбір кейіпкерлер, мысалы, ойыншыға ағаш таяқпен шабуыл жасайтын горилла, анық жау ретінде көрсетілген, ал басқалары түсініксіз. Екі патшалық бар – орман және шөл – оларды терең каньон бөліп тұр. Әр патшалықты бір патша билейді, және патшалар бір-бірімен жараспайды. Ойыншыға жағдайдың соңғы кезде нашарлағаны және орман патшалығынан бір патшаның жоғалып кеткені айтылады, бұл қылмыс шөл патшасына таңылған. Екі бай патшалық соғысқанда, ойыншы осы мүмкіндікті пайдаланып, екі жақтан да қазына тонауға болады. Ойын дамыған сайын, ойыншы олжаны ағаш үйге тасымалдау қиынға соғады және кейде қазынаны немесе қаруды алып жүруді таңдауға мәжбүр болады, егер олжа күзетілмесе, ұрлану қаупі бар. Сюжет уақыт өте дамиды. BBC Micro ойынының түпнұсқасында шектеулі орындар мен графика болды. Кейбір қосымшалар C64 нұсқасында пайда болды, бірақ сюжет көбінесе бірдей. Ойынның қазіргі смартфондық нұсқасында одан да көп орындар мен жаңа сюжеттік бұрылыстар бар.

Тұжырымдама

Ойын Уилл Кроутердің түпнұсқа "Adventure" ойынынан шабыттанды. Ойынның бастапқы қозғалтқышы 6502 ассемблер тілінде жазылған. Ойын кейін Spectrum үшін Z80-ге порталданды. Жаңа нұсқаларында (Commodore 64 және Spectrum үшін) ойын кеңейтілген. Ойын суреттер мен күрделі кейіпкерлерді қосу арқылы реализм деңгейін арттыруды мақсат етті. Ойынның бастауы коммерциялық кәсіптен гөрі, әріптестердің ықпалымен туындады. Сол кезде түпнұсқа оқиғаны іске қосуға қажетті "үлкен машиналарға" (сол кездегі стандарттар бойынша) қол жеткізу шектеулі болды. Сонда "мұны үй компьютерінде де жасауға болады" деген ой келді. Үй жүйелеріндегі жоғары деңгейдегі тіл кодтарының (Basic) баяу жұмысы осы бағытты мүмкін етпеді, ал сол кезде FORTRAN компиляторы қолжетімді болған жоқ. Сондықтан ассемблер таңдалды. Аз ғана адам түпнұсқаны ойнаған, ал ойынды іске қоса алатын университет жабдықтарына қол жеткізген студенттер (бітіргеннен кейін) бұл мүмкіндікті жоғалтты. Сондықтан еске алынған элементтер (әзілдеп айтқанда) түпнұсқаға ұқсас, жол, ғимарат (кілттер мен шам сияқты пайдалы заттар бар) қайталанады. Ғимарат орманның ішінде, жанында бұлақ бар. Дегенмен, бұл оның бір түрі екенін айтқаннан кейін ұқсастық аяқталады. Жоспар "неге көшіруге тырысамыз, жақсырақ жасауға болады" деп өзгерді. Үңгірді модельдеудің орнына, үлкен әлемді модельдеу міндеті туды, онда көптеген жер үсті, жер асты, ішкі және сыртқы локациялар бар. Twin Kingdom Valley 175 бөлмеден тұрады. Ойынға орта ғасырлық дәуір таңдалды, бұл мистикалық элементтерге мүмкіндік берді. Барлық айқастар қарапайым қолға түйіскен стильде жасалған, ойыншы мен басқа кейіпкерлер кезегімен соққы алады. Ойыншы айқастан қашуға тырысса, қарсылас ойыншының қозғалуына бұрын бір шабуыл жасауға рұқсат етіледі. Ойыншының мінез-құлқы кейіпкерлердің мінез-құлқымен бірдей. Ұқсас ойындар сияқты, кейіпкерлердің де әртүрлі шектеулері бар, мысалы, олардың максималды денсаулығы мен жазылу жылдамдығы және тасымалдау қабілеті.

Графика

Бағдарламалық жасақтаманың маңызды бөлігі – бұл ертедегі масштабталатын векторлық графика форматы болып табылатын арнайы графикалық тіл. Ойын ішінде осы құралды пайдаланып, жүздеген нысандар мен орындар салынған. Шектелген перспективаны бір суреттің ішіне екінші суретті кішірейтіп салу арқылы қол жеткізуге болады. Мысалы, қамалдың моделі жақыннан көру үшін жасалған, бірақ ол шөлдегі алыс қамалдың кіші программасы ретінде де пайдаланылуы мүмкін. Графикалық жылдамдық секундына шамамен 10 полигонды құрады, сондықтан ойын фондық полигондарды салуға және оларды толықтыруға мұқтаж болмады. Суреттер тек бояу арқылы жасалады, яғни әрбір экран пикселі бір рет қана боялады. Кәдімгі компьютер (эмуляторды қолдана отырып) осы суреттерді бірден бояп шығара алады, бірақ ойынның алғашқы иелері экранның боялуын күтуге үш-төрт секунд уақыт жұмсауы керек еді. Жады кеңістігінің шектеулі болуына байланысты графикалық командалар күшті қысыммен сақталуы тиіс болды. Мысалы, сызық салу командасын қарастырайық, ол ағымдағы позициядан түс пен жаңа x, y координаттарымен «салады». Егер 6502 процессорын қолдансаңыз: x координатын x регистріне, y координатын y регистріне жүктеңіз, түсті аккумуляторға жүктеңіз, содан кейін «Сызық салу» функциясын шақырыңыз, онда 9 байт жұмсалады. Егер ойындағы барлық суреттерде 1000 мұндай сызық болса, онда 9 килобайт жад кетіп қалады. Ал шын мәнінде, ойын үшін сызық салу командасына 2 байт жад ғана қажет. Сызықты салу және бояу үшін 3 негізгі команда қажет: Қозғалу, Салу, Бояу. Пішіннің басталуына қозғалу, содан кейін пішін жабылып, іші боялғанша контурдың әрбір нүктесіне сызық салу. Салу және бояу үшін түс қажет. Қозғалу, Салу және Бояу командаларының барлығына координаталар керек. Бұл мәліметтерді тиімді түрде өңдеу үшін, құрастыру тілінде «Қозғалу, Салу, Бояу, басқа командалар» командаларын анықтау үшін 2 бит жеткілікті. Тағы бір бит команданың абсолютті экрандық координаттарды немесе салыстырмалы позицияны пайдаланатынын анықтайды. 3 бит 8 түстің бірін таңдауға мүмкіндік береді, ал 10 бит екі 5 биттік x, y координатын анықтайды. Басқа командалар (координаттарды қажет етпейтін) мыналарды қамтиды: кіші программаны шақыру, кіші программаны аяқтау, дөңгелек доғасын салу (соңғы қозғалған координатаның ортасынан) және т.б. Көптеген бөліктерден тұратын кабина сияқты күрделі суреттерде C тіліндегі for циклына ұқсас циклдық команда қолданылады, оның циклдің белгілі бір саны бар. Ассемблер тілінде айнымалылар туралы түсінік жоқ және тармақталу командалары да жоқ.

Ойын тетігі

Ойынның бірнеше микро-деректер базасы бар, олар орналасқан жерлерді, қолдануға болатын объектілерді, түрлі жандарды және басқа да деректерді ұсынады. Ойын двигуні осы элементтер үшін симуляциялық әлемді іске қосады. Шағын жасанды интеллект модулі ойын емес кейіпкерлерге шешімдер қабылдауға мүмкіндік береді. Орналасқан жерлерді жүйелендіру құралында жадты үнемдеуге бағытталған кейбір мүмкіндіктер бар. Көптеген орналасқан жерлерде тек бірнеше сөз болады, бірақ толыққанды (биттермен жиналған) «шығу деректер қоры» ұзақ сипаттамалар жасау үшін интерпретацияланады. Бұл сипаттамалар біттердің құлыпталған және ашық есіктер үшін орнатылуына және тазалануына байланысты өзгеріп отыруы мүмкін. Сипаттамасы шамамен сегіз жолдан тұратын орналасқан жер 30 байттан кем дерек көлемін алады. Ойынның орналасқан жерлер деректер қорында қолданылатын сөздер әрқайсысы бір байттан сақталады, олар 256 сөзден тұратын тізімге сілтеме жасайды, нәтижесінде көптеген сөздер бірнеше рет қайта қолданылады. Мысалы: «Сіз шуылдаған бұлақтың жанындасыз, солтүстікке қарай ағын көрінеді, оңтүстікке қарай жол көрінеді, солтүстік-батыста терең өзен бар». «Сіз» деген сөздерді ойын двигуні қосады. «Шуылдаған бұлақтың жанында» дегені 4 байт дерек, ал 5-ші байт хабардың ұзындығын (4 сөз) көрсетеді. Орналасқан жерде 3 шығу бар, олар әрқайсысы 2 немесе 3 байттан кодталған. 1-ші байтта компастың бағыты және жоғары немесе төмен (N, S, E, W, U, D үшін 6 бит) көрсетіледі. Қосымша бит арнайы шығуларды, мысалы, құлыпталған есіктерді белгілейді. Келесі байт құлыпталған/ашық немесе «көруге болады, көруге болмайды» сияқты түрлі биттерді анықтайды. Соңында, бағытты көрсететін байт. Мысалы, егер солтүстік «Ағынның жанында» дегенге әкелсе, «жанында» деген сөз алынып тасталады және «көресіз» деген сөздер қосылады, нәтижесінде «Солтүстікке қарай сіз ағынның жанындасыз» деген сөздер тек 2 байтты пайдаланады. Ойынды түпнұсқалық BBC Micro жүйесінің 32 килобайт шегіне сыйдыру үшін осы сығудың бәрі қажет болды. 10 килобайт экран буфері ретінде жоғалады, сондықтан ойын жады бастапқыда 22 килобайтқа дейін төмендейді. Айнымалы орын немесе стек үшін жадтың бір бөлігі қажет болғандықтан, қол жетімді кодты қамтитын жүйе шамамен 20 килобайтқа жақын. Егер ойында 30 байттан тұратын 200 орналасқан жер болса, бұл 6 килобайтты құрайды. Бұл тіпті ойын кодына, әсіресе графикаға орын қалдырмайды. Осы себепті ойынның бастапқы нұсқаларында 200-ден аз бірегей орналасқан жер болған. Ертедегі басылымдарда (мысалы, BBC Micro) шамамен 180 орналасқан жер болса, ал кейінгі басылымдарда (мысалы, Commodore 64 нұсқасы) 190 орналасқан жер болды. Басқа ойын кестелері (мысалы, жандар немесе объектілер үшін) әлдеқайда кішкентай. Ойынның кішкентай деректерді қалпына келтіру блогы бар, ол ойыншы жаңа ойынды бастағанда есіктерді және басқа да объектілерді қайта құлыптайды. Кейінгі нұсқаларда (мысалы, C64) арнайы ойын оқиғалары мен жұмбақтар үшін қарапайым мәтіндегі бірнеше ұзын хабарламаларға рұқсат беру үшін қосымша жад болды. Жандар объектілерді ұстай алатындықтан, ойын двигуні барлық жандарды ерекше орналасқан жерлер ретінде қарастырады. Объектінің бір байттық орны бар, ол бөлме немесе жан болуы мүмкін, ал 200-ден жоғары барлық орналасқан жерлер жандар немесе басқа арнайы орналасу кодтары үшін («бұзылған» сияқты) резервтелген.

Дамудың жалғасы

Ойын 2006 жылы жаңа платформалардың пайда болуына байланысты қайтадан белсенді даму сатысына көшті. Ойынның қозғалтқышы бастапқы 6502-ден Java тіліне ауыстырылды, ал ойын дизайны құралдарының бір бөлігі C# тілінде жасалды.