(бухай): программируй
148 subscribers
465 photos
96 videos
3 files
65 links
Мысли, дегустация и код
Download Telegram
И наконец-то пивная тематика.

В Туле мы посетили ресторан Петр Петрович, и это похоже самый вкусный и пивной ресторан в городе. И при этом не очень дорогой.
Мало того, что порции приносят гигантских размеров, так и пиво варят тут же. На первом этаже расположена собственная пивоварня.

Пиво я попробовал нескольких сортов: венский эль, темный лагер, светлый лагер, пшеничное.
Мне очень понравился темный лагер с кофейным послевкусием, в меру густой и сладкий. Неплохой и венский эль: первая ассоциация - Хамовники Венское, но с более насыщенным вкусом.
Ну а лагер - это лагер, а пшеничное - это пшеничное. Но за счет того, что все пиво свежее, пьется оно очень легко и приятно.

Ну и за первое, второе, закуски и 10 бокалов пива мы отдали чуть больше 5-ти тысяч рублей, что по московским меркам очень демократично.

А общем, советую)
❤‍🔥2👍2
Решил я тут проверить, как там поживает моя игра для Commodore 64.

Ну та самая, про которую я и забыл почти.

На itch.io все спокойно, иногда играют. Но меня привлекло, что кто-то перешёл по ссылке с YouTube.

И я пошел разбираться...
На Ютубе я наткнулся на это видео. https://youtu.be/XikP1bIK-rs?si=JsFgy4Ydy1VrXjKE

Оказалось, мою игру даже взломали и добавили чит на бесконечные попытки взяток.

Более того, взломанную версию выложили вот здесь:
https://csdb.dk/release/?id=234422
🔥5
И мне стало интересно, насколько это у команды Excess вообще стоит на потоке.
Их логотип я часто вижу, потому что они взламывают большинство коммодоровских игр.
Но я не ожидал, что та же участь постигнет мою не слишком то уж и интересную поделку.
👍5
Взял это пиво только из-за этикетки. Ну Doom же, как я мог пройти мимо.

Тыквенный стаут от пивоварни Selfmade из Солнечногорска, о которой я ни разу не слышал до этого.

Само пиво довольно густое, с ярко выраженным запахом и вкусом, как ни странно, имбирного печенья. Такое мы любим. Единственное, что я не понял - где здесь тыква? Но это ничего, пиво все равно очень вкусное, хоть и крепковатое.
👀3
Нашел тут один проект на Commodore 64 (похоже отмененный), в котором используется классический Вольфенштайновский рейкастер.

https://youtu.be/RLy3v7WHqs0?si=iDBEHpLRx8PH68sT

Но меня заинтересовало даже не то, как это сделано, а то, как в свое время делали движки для Dungeon Crawler. И я не нашел почти никакой информации.
1
Например, вот в этих играх: Might&Magic и Eye of the Beholder.

Первая, и возможно правильная мысль, которая меня посетила - это то, что экран как бы разделен на определенные зоны для отображения стен. И каждая зона закрашивается (или не закрашивается) текстурой в зависимости от того, что видит игрок
👍2
Поэтому я решил опробовать этот способ, но с определёнными ограничениями.
Во-первых, никаких сложных вычислений. Думаю, надо обойтись только базовой арифметикой. Все сложные вещи вычислять заранее.
Во-вторых, текстуры должны храниться в памяти в стандартном виде (например, размером 16*16 пикселей).
В-третьих, никаких чисел с плавающей точкой.
Размер экрана будет 128*128 пикселей. Думаю, этого будет достаточно для быстрой отрисовки, но это я узнаю по ходу)
👍1🔥1
Экспериментировал вчера с растягиванием текстур.
То, что вышло - это левые два блока кирпичной текстуры, растянутые в 2 и 8 раз по высоте.

Получилось не очень презентабельно, да и довольно бесполезно, но зато быстро, так как я растягивал сразу строки, а не отдельные пиксели.

Экранная память Commodore в режиме hi-rez устроена таким образом, что каждые 8 последовательных байт отвечают за отрисовку одного знакоместа 8*8 пикселей, а следующие 8 байт – за отрисовку следующего знакоместа, поэтому расширять текстуру построчно оказалось довольно дешевым с точки зрения процессора занятием.

Но что, если я хочу расширить текстуру не только по высоте, но и по ширине? Тогда придется работать с каждым пикселем, что, думаю, будет довольно затратно, потому что придется обращаться уже не к байтам, а к каждому биту (или паре бит в случае четырехцветного режима).

Буду пробовать
🤯1
Наконец-то раздобыл себе второй стол и поставил все, что хотел )

Правда это все равно временное решение, потому что NEC не очень хорошо влез
2👍2
Как год встретишь...

А вообще я давно хотел написать об отсутствии успехов в разработке dungeon crawler под Commodore, но раз успехов нет, то и писать почти не о чем, кроме того, что я никак не могу решить проблему наложения текстур на стены. Попозже постараюсь объяснить, в чем дело.
👍1💩1
Допустим, есть текстура 16*16. И я хочу ее расширить до 34 в высоту, но каждый последующий столбец меньше на два пикселя (для перспективы). Делается это по столбцам.
Для каждого столбца надо пройтись по индексам новой высоты (от 0 до 33), умножить на 16 (старая высота) и поделить на 34 (новая высота).
Получается что-то вроде y = i*16/34

Умножение на 16 не проблема. Надо использовать 4 битовых сдвига влево (1 сдвиг - умножение на 2). А вот деление - довольно тяжелая операция, а с учетом, что делать это придется практически для каждого пикселя в зоне 128*128 - то, думаю, неподъемная.
Поэтому можно заняться сравнениями.
Если i*16 < 34, то берем 0 индекс исходной текстуры.
Если i*16 < 34*2, то берем 1 индекс, и так далее.

Я посчитал, и понял, что мне для этого надо умножить все возможные высоты текстур (четные числа от 32 до 128) на числа от 1 до 16. Все это можно поместить в таблицу, которая займет где-то полтора килобайта. Но можно и меньше, если умножения на 2,4,8,16 производить налету с помощью тех же битовых сдвигов.

В одном случае нагружается процессор, в другом заполняется память, а оптимальное решение я так и не нашел=(
Обожаю разработку под Commodore.
Два дня пытался понять, в чем проблема. Я пытался написать функцию, которая растягивает столбец текстуры до нужной высоты. И вроде бы все хорошо, но видите эту прерывистую линию внизу столбца?

Оказалось, что в одном месте я использовал не ту команду.
Мне надо было 4 раза сдвинуть биты в одном байте вправо. Для этого есть две команды: ROR и LSR.
Но они отличаются.
ROR в седьмой бит помещает значение из Carry.
Carry - это флаг переноса в старший разряд. Допустим, если прибавить 1 к 255, то 1 отправится в Carry. Так, например, работает сложение чисел, если результат больше 255.

А LSR в седьмой бит помещает 0.

И я использовал конечно же ROR, и в определенные моменты у меня число, которое должно выглядеть как 00001111 (15), превращалось в 00011111 (31) и ломало мне всю функцию. Когда я поменял ROR на LSR, то все стало нормально
👍1
Но настоящая новость в том, что я наконец-то спустя миллион лет прошел Prince of Persia: Warrior Within.
Первый раз я поиграл в нее на PSP лет в 12 наверное. И она показалась мне такой сложной, но в то же время такой крутой (чего только Godsmack стоят, когда убегаешь от Дахаки). И для двенадцатилетнего меня все это "кровь-кишки-распидорасило" смотрелось ну очень впечатляюще.
И вот наконец, спустя столько лет, я наконец-то её осилил.
Даже статью захотелось написать про историю серии
👍4🔥1
Наконец-то дело сдвинулось с мертвой точки.
Написал основную функцию для увеличения столбцов текстуры и еще одну функцию, которая уменьшает следующие столбы для перспективы.

Конечно, это все еще оптимизировать и оптимизировать, потому что пока что работает оно довольно неторопливо, но по крайней мере, работает=)

Что до памяти, то тут все неплохо. Таблицы деления я ужал с 6Кб аж до двух (но за счет лишних операций, которые с ними надо производить), а сам код программы занимает пока что всего 373 байта.

Теперь надо написать две функции:
— первая увеличивает следующие столбцы (для стен в правой части экрана)
— вторая рисует текстуру прямо (для стен перед глазами)