Закрити старий гештальт. Як я почав робити гру, про яку мріяв ще у 90-х
Це була середина
В кабінеті інформатики в нас стояли Електроніка МС-0511 УКНЦ. Можливо в когось в
Програмування дійсно захопило мене, і я потроху переходив від простих задач до спроб створити свою гру. І обов’язково з графікою, як GARDEN, LAND3 чи Кіт-Рибалка.
Гра Land, сплагіачений Lode Runner
І тут мене спіткав облом. Засобами Бейсіка графіка малювалася надзвичайно довго. CIRCLE, LINE та DRAW навіть поодинці виконувалися нешвидко, а в простенькій сцені гри їх мало бути більше сотні!
(Мені подобалося робити програму, яка малює в центрі екрану круги все більшого і більшого радіуса. Це було схоже на торнадо).
Я вже змирився з тим, що ніколи не зроблю своєї гри з графікою і намагався зробити аналог першої Цивілізації в текстовому режимі. Справа йшла не дуже, частину часу я грав в щось. Раптом в одній грі сталася помилка. Я поклацав по клавішам і раптом помітив, що замість кирилічних літер друкуються шматочки зображень.
Це було цікаво. Вивід в текстовому режимі набагато швидший, і саме так можна зробити свою гру! Коли я спитав вчителя інформатики, як це зробити, у відповідь він подивився втомленим поглядом і промовчав.
Але в Бейсіку була команда POKE! Вона дозволяла писати щось довільне у довільне місце пам’яті.
«Якщо шрифти є, значить вони десь у пам’яті!» — подумав я. І вирішив писати в різні місця пам’яті, доки шрифт не зміниться. Старанна дитина.
Процес був довгим. Я перезавантажував комп’ютера після кожної помилки, і знову перезавантажував, і знову. А потім зламався єдиний в кабінеті інформатики дисковод, що підключався до вчительського компа.
Через багато років я вирішив закрити цей гештальт. В мене був емулятор УКНЦ і сучасні засоби програмування, які мали б спростити задачу.
Першим я спробував зробити те, що мені прийшло в голову вже після поламки дисковода: вивести на екран бітову мапу пам’яті. Таким чином я відразу побачу, де саме зберігається шрифт, і це набагато легше того способу, яким я шукав шрифта в училищі.
Виправивши безліч документованих помилок і спіймавші ще деякі недокументовані я зрозумів: малювання бітової мапи засобами Бейсік-Вільнюс займе надто багато часу. Лише замалювати екрана через PSET займає більше години, якщо задіяні ще якісь операції.А це треба буде робити багато разів! Нє, я нє.
І я вирішив просто зберегти пам’ять у файл.
10 open «mmmm.txt» for output
15 REM відкрили файл для запису
20 a=0
25 REM адреса, з якою починаю читати пам’ять
50 print a
55 REM пишу, щоби було понятно, що прога не зависла, а працює
60 print# m=peek(a)
65 REM пишемо в файл те, що зчитали з пам’яті
70 a=a+1
75 REM тут все пінятно
80 goto 50
85 REM зациклили, бо все одно як дійде до кінця, так з помилкою відвалиться
Далі почався мій перший досвід на Пітоні: я зробив з дампа бітову мапу пам’яті.
І... не знайшов на ній літер.
Ок, гугл, з якої адреси в пам’яті знаходяться шрифти?
А замість вигляду шрифтів, виходить, я отримую нулі. Ось, тут, в червоній зоні мають бути літери, а їх нема.
Облом.
І тут мені прийшов до голови ПЛАН Б. Я багато разів бачив, як в УКНЦ якоюсь програмою міняли шрифти і сам навіть так робив. А що, коли той файл шрифту можна модифікувати?
І я написав програму, що переводить шрифтовий файл в графічний формат.
Бінго! Шрифт легко читається, він записаний в побітовому форматі. На радощах я передивився всі шрифти, що знайшов. Деякі з них, можливо, будуть цікаві тим, хто займається піксель-артом.
Я швидко написав програму на пітоні, яка розбирала шрифт на окремі літери у форматі PNG. Зі збиранням трохи забарився: пітон кодує строку в байти не один до одного, а беручи за основу якусь кодову сторінку. Основа UTF-8 додає зайві байти в неочікуваних місцях, а koi8-r чи ascii відвалюються з помилкою, якщо байта нема в кодовій сторінці.
Я вже збирався додавати пітонові нову кодову сторінку, але .encode(‘raw_unicode_escape’) спрацювало, як слід.
То не глюки, то тестові спрайти замість літер
Перше тестування відбулося успішно.
Це тест спрайтів.
А це як виглядала програма для тесту. (Перша строка була під номером 10, але я перейменував, щоби... а, вже не важливо).
Ну... все готово, аби починати робити гру «Стугна».
До речі, я спочатку хотів зробити клон гри «Марс». Але то було би цинізмом робити гру про бомбардування, коли росіяни бомблять українські міста, тому — «Стугна».
О, до речі, ви можете зробити донат, аби гра «Стугна» вийшла швидче і я точно її не закинув.Способ донату раз: www.paypal.com/...d_button_id=YSVG74K2BR3LA
Способ донату два: 4731 1856 2945 5376 (приват)Способ донату три:
0×63d85EFB8FC4a1e7Eb4341F78e9471697a34B04B (Етеріум)
ypub6XcKHVT5RjVLfsMF3Gj3EuYLcEmyfqc1y68Vi45rgkAdS6Mvj7m5CpEzaeWQYxVaQFz6VetGnGJ1TreKyAMt5ytfnHATmHjrCwBMsSvfwLm (Біткоїн BIP49)
zpub6rSabA7zaR2pXAYMsdWfSzdqnCvRcTbWtCeiVSyk4kYWVCB9ymvdpsu8brTzYs9Vou6uF8UqEveZM9FtgrmttDaGecrtMCZLUfF1FwAGTnk (Біткоїн BIP84)
Ltub2ZoddKHBpN7Y3HSycBrVXf4xJJFijSC3E6jdJT93312Xgrj5jt9ZVj9EX9kmNVGzkRu2yMswKPYUGSMaCBm2DmmHxJBWhiYnSmPSQfqGAr9 (Лайткоїн)
4 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарів