sfw
nsfw

Результаты поиска по запросу

Дополнительные фильтры
Теги:
новый тег
Автор поста
Рейтинг поста:
-∞050100200300400+
Найдено: 61
Сортировка:

История видеоигр, часть 14: Pong (1973)

,Игры,старые игры,обзор

Последняя серия приключений Atari закончилась драматично: Н. Бушнел, тряся воздетыми кулаками, кричал "Шакалы!" в адрес подражателей, заполнивших рынок клонами сверхуспешного Pong. Методом борьбы с недобросовестной конкуренцией было выбрано повышение планки качества и оригинальности собственных продуктов. Затемнение, титры, новый эпизод.

,Игры,старые игры,обзор
Финальный вариант корпуса автомата.

Gotcha стала четвёртой игрой молодой компании, и на этот раз разработчики решили, что хороши все средства. Наверху можно увидеть флаер игры, где некий весёлый молодой человек держит за талию девушку. Должно быть, свою подругу? Разберёмся.

,Игры,старые игры,обзор

Преследователь, обозначенный квадратом, должен настигнуть Преследуемого (Преследуемую!), представленного как знак плюс. Погоня происходит в меняющемся лабиринте, который, если пофантазировать, вполне может изображать движение равнодушной толпы, спешащей по своим делам и игнорирующей драму, которая происходит прямо на её глазах. Усиливает ощущение загнанности и звуковое сопровождение: ритмичный писк, издаваемый игрой, учащается, когда преследователь приближается к жертве: несомненно, это бешено колотящееся сердце девушки, понимающей, что она не сможет уйти от нежеланного ухажёра. Звучит как бред, достойный РенТВ? А что вы скажете, когда узнаете, что в первом прототипе джойстики были скрыты в розовых резиновых куполах, изображающих женскую грудь? Вскоре после релиза их заменили на обычные. Возможно, это как-то связано с основанием в США Ассоциации Либертарианских Феминисток в 1973 году. Десять симуляторов сталкинга из десяти!

,Игры,старые игры,обзор

Ладно, шутки в сторону. Игра выполнена вполне добротно для своего времени, а меняющий конфигурацию лабиринт - неплохая идея. Контакт со стенами заставляет игроков рикошетить, затрудняя передвижение. Единственный существенный недостаток, который я заметил - это то, что игра не всегда фиксирует столкновения при движении по диагонали. Таким образом игроки иногда проходят сквозь стены и даже могут выйти за пределы игрового поля! При этом, что интересно, цифры таймера и счёта игра также считает элементами лабиринта. На скриншоте выше видно, что Преследуемый находится за границами лабиринта, рядом с цифрой ноль.

Игра ведётся определённое время (от 30 секунд до 2 минут), после чего переходит в режим демонстрации. За это время Преследователь должен как можно больше раз поймать свою жертву, зарабатывая очки. Каждый раз после поимки лабиринт на секунду исчезает, а Преследователь перемещается в случайную точку. Немного обидно за Преследуемого, у которого нет своего счёта и который может только снизить число очков, полученных Преследователем.

История видеоигр, часть 27: Guided Missile (1977)

Ах, это славное, наивное время! Время, когда по названию игры можно было точно сказать, о чём она будет: Canyon BomberNight Driver. Вот и у Guided Missile название настолько говорящее, что и писать про неё в общем-то уже нечего.
L-PLAYER Ж ÜTTuri Я R'PLfiYER SCORE Щ l iTIMEi П SCORE,Игры,старые игры,игровой автомат
Guided Missile -- выпущенная Midway игра, где два игрока соревнуются, кто набьёт больше очков за отведённый промежуток времени, пуская управляемые ракеты по проезжающим по экрану целям.
Ракеты запускаются из двух стационарных пусковых установок, и до достижения ими верхней точки траектории неуправляемы. Во время снижения курс можно отклонять влево или вправо.
L-PLAYER SCORE
TIME
JD.
R-PLAYER SCORE,Игры,старые игры,игровой автомат
Обратите внимание на разнообразие военной техники, которая присутствует на экране. Тут грузовики, танки, вертолёт, даже подводные лодки! Цели перемещаются с разной скоростью и стоят разное количество очков. Самые медленные, грузовики -- 30; самые быстрые, подводные лодки -- 190.
,Игры,старые игры,игровой автомат
Звук и графика в игре средние. Анимации почти нет, но и раздражающих мерцания и артефактов тоже. Звук неназойлив. Управление отзывчивое, но есть ощущение, что если бы авторы дали игроку менять курс ракеты сильнее, играть было бы более интересно. Технически игра поддерживает синглплеер, но смысла в нём нет, потому что автомат не ведёт таблицы рекордов.

Beneath the Citadel v.0.18

Опоздал на целых три недели, прошу прощения. Рад бы сказать, что всё это время был активно занят разработкой и теперь выкачу вагон фич, но нет, виновники - работа и личная жизнь. Тем не менее, готова важная механика - события. Использована она пока не на полную катушку, но попробовать на зуб можно. Неуникальные события происходят на первом этаже с вероятностью 7% на комнату.
Кроме этого - пара новых монстров и видов оружия. Полный список изменений (на этот раз скромный) как всегда будет в комментах.
^te snapshot » a Reset suspeno Power-
i Ш M û ù Ф
Toadmen patrol
You see three toad like humanoids arguing about something in this room. They are armed with spears and wield light wicker shields. You remember their description from one of your lectures: they are waqiri, swamp-dwelling savages.
Куда двигаться дальше? Выбор возможных направлений всё ещё огромен: крафт, доработка магии, стелс, дополнительные боевые умения и перки, лор. Думаю, для следующей версии я сосредоточусь на свойствах предметов и дополнительных умениях игрока и существ. Это позволит сделать сразу большую пачку контента, который будет приятно пощупать.
^te snapshot » a Reset suspeno Power-
i Ш M û ù Ф
Husk
ft thin human figure shambles across the room. It is dressed in worn and dirty clothes and wears a common leather cap. Even in such dim illumination you can see that this is a husk - a dead and withered body animated by sorcery.
The figure
Ссыль на bochs:
Ссыль на дискету:
^te snapshot » a Reset suspeno Power-
i Ш M û ù Ф
jagged sword
Crude sword with jagged blade and leather-wrapped grip. Type: weapon Durability: 32/32 Physical damage: 16
iq? Bochs for Windows - Display
CTRL + 3rd button enables mouse	IPS: 91,325M	A:	NUM	CAPS	SCRL,gamedev,Игры,Roguelike

Олдфажного геймдева пост номер 6

Самоизоляция, COVID-19, - отличное время, чтобы поработать над своим рогаликом. В конце как всегда ссыль для желающиx.

Archive
An archive room with hundreds of old books, parchments, and scrolls. Writings of long-dead heretics, doings of ancient kings, arcane knowledge - everything is destroyed by time and mold.
You see rotten beast.
You hear nothing but your own footsteps.
There are hostile creatures in this


Для теx, кто не в курсе, продублирую часть вступления из прошлого поста:

Итак, что такое Citadel? Одскульная текстовая RPG/roguelike. И, говоря "олдскульная", я имею в виду рили олд. Вспоминайте не эти ваши новомодные Wizardry I, а Eamon и всякое такое из второй половины семидесятых. При этом я, конечно, не ставлю себе цели мучить игрока и стараюсь сделать интерфейс и управление максимально простыми и понятными. Нужные подсказки и требующая внимания информация всегда отображаются в нижней части экрана, так что Citadel можно просто запустить и начать играть, не вникая в многостраничный мануал, как это бывало со старыми играми.

Что появилось в новой версии 0.14?

- Начал работу над магической системой. К сожалению, для игрока это пока выражается только в появлении нового типа комнат, арxива. В ниx можно будет обучаться спеллам, когда все заработает.
- Новый враг, automaton, умеющий ломать снаряжение.
- По одному новому типу сундуков, дверей и замков.
- Меxаника звука теперь работает: по команде Listen игрок получает аудиальную информацию из соседниx комнат и может на ее основании принять решение, стоит ли туда идти. Соответственно, существа теперь издают звуки. Комнаты, из которыx герой услышал какой-либо звук, помечаются на карте.
- Самое главное: на 1 и 2 этаже готовы этапы основного квеста для некоторыx концовок. Значит, теперь в игре есть цель! Пусть, она пока заключается всего лишь в том, чтобы спуститься на 3 уровень.

ROUND RESULTS
automaton does a crushing blow
you take 9 points of physical damage
cloth armor damaged
With a lion's roar you attack an empty space,gamedev,Игры,игрострой,дневники разработчиков,Roguelike



Как и в прошлый раз, предлагаю желающим скачать и пощупать игру. Напоминаю, что для запуска нужен будет эмулятор bochs. И игра и эмулятор лежат по ссылкам выше. За инструкциями  по запуску обращайтесь в личку или в комментаx.

ritual dagger
Intricately decorated dagger with curved blade made of obsidian-1 ike material. It looks menacing but is hardly useful as a weapon.
Type: weapon Durability: 44/45 Physical damage: 6,gamedev,Игры,игрострой,дневники разработчиков,Roguelike

История видеоигр, часть 8: Space Travel (1969)

,Игры,старые игры,обзор

     Немного странно писать об игре, которую невозможно найти даже в виде java-реплики, но не упомянуть Space Travel нельзя. Заранее прошу прощения, но большая часть этой статьи будет содрана со странички игры в Википедии.

Итак, в 1969 году Кен Томпсон, работая в Bell Labs над ОС Multics, написал игру Space Travel. Это был двухмерный космический симулятор, где игрок на корабле путешествовал по солнечной системе. Путешествовал без особой цели - занять себя можно было только маневрированием в гравитационных полях небесных тел и посадкой на планеты. Относительные размеры планет были переданы правильно, а вот орбиты упрощены до правильных окружностей - гравитация планет действовала только на корабль игрока, но не на другие тела.

,Игры,старые игры,обзор

Когда Bell Labs прекратили участвовать в проекте Multics, Томпсон, не желая забрасывать своё детище, переписал Space Travel на фортране, чтобы запускать под GECOS. Эта ОС была на компьютере GE 635. Оказалось, однако, что GECOS нуждам Томпсона не удовлетворяла - работала программа медленно, с перерывами на выполнение нескольких стоящих в очереди задач. К тому же, команды приходилось вбивать в виде текста, что сильно усложняло управление кораблём (под Multics можно было использовать отдельные клавиши для разворота, ускорения и замедления). Но Кен Томпсон не впал в уныние. Он взялся запустить Space Travel на голом железе, без посредничества ОС. Для этого ему пришлось писать с нуля все графические и математические процедуры, а затем и файловую систему. К моменту, когда Space Travel была перенесена на PDP-7, у Томпсона было уже практически готовое ядро операционной системы, которое спустя некоторое время легло в основу известной сегодня всем (ну почти всем) Unix. Сама игра за пределы Bell Labs не вышла и никакого влияния на развитие индустрии не оказала.

История видеоигр, часть 5: Tennis for Two (1958)

SClfCTOÍ,Игры,старые игры,обзор

Вот мы и добрались до первого спортивного симулятора. В 1958 году американский физик Вильям Хигинботам (да, тот самый, который участвовал в создании первой ядерной бомбы) сконструировал на основе аналогового компьютера Donner Model 30 игровой аппарат, на котором все желающие могли погонять в виртуальный теннис. Как это часто (читай: всегда) происходило в пятидесятые, игровой автомат был собран не для продажи, а ради показа на выставке. На этот раз дело происходило в Национальной Лаборатории Брукхейвен, куда ежегодный смотр научных достижений привлекал большое количество посетителей. Для выставки 58-го года Хигинботам решил сделать некий интерактивный экспонат, с которым посетители могли бы взаимодействовать. За несколько часов он выдумал концепцию игры, а его коллега по лаборатории Роберт Дворак в течение трёх недель воплотил её в жизнь.


Tennis for Two представляла из себя осциллограф с присоединённым к нему компьютером и двумя контроллерами. Экран осциллографа использовался для отображения графики (видимого сбоку теннисного корта и мяча), а компьютер рассчитывал траекторию полёта и инвертировал её, если снаряд ударялся о землю или сетку. Контроллеры использовались для задания направления и "удара" по мячу. Я пишу "удар" в кавычках, потому что никаких ракеток в игре предусмотрено не было - соответственно, и промахнуться по мячу игроки не могли. Как только один из них нажимал кнопку, мяч просто менял направление полёта. Разумеется, такой примитивный игровой процесс позволял продолжать партию до бесконечности (или превращал её в состязание по скоростному нажатию на кнопку). Неизбалованная публика тех лет, однако, была в восторге. Студенты выстраивались в очередь, чтобы сыграть в Tennis for Two.

,Игры,старые игры,обзор

Забавно, но Tennis for Two фигурирует в разных источниках как первая видеоигра. Если вы читали предыдущие статьи в моём блоге, то знаете, что это неверно: она опоздала на целых 11 лет. Как водится, по окончании выставки агрегат был разобран и забыт. Позднее, в 1997 году, он был воссоздан и несколько раз выставлялся в той же лаборатории Брукхейвен во время публичных мероприятий. Сам же создатель скромно посчитал свой проект просто небольшой надстройкой над программой расчёта траектории Donner Model 30, недостойной патентования.

Симулятор игры за авторством человека под ником ApM можно взять на сайте журнала The Gamer's Quarter.

,Игры,старые игры,обзор

История видеоигр, часть 4: OXO (1952)

,Игры,старые игры,обзор

Надо сказать, ведение блога заставляет меня напрягать воображение. Делать второй обзор на крестики-нолики всего через одну статью - непростая задача. К несчастью для меня, пройдёт ещё много времени, прежде чем игроделы начнут заморачиваться такими вещами, как графическое оформление, сюжет, персонажи, сеттинг и прочее. Сейчас же 1952 год, и Александер С. Дуглас разрабатывает программу для EDSAC, которая позволит схлестнуться в крестики-нолики с искусственным интеллектом. Обратите внимание, что это первая игра, для которой не создавалось специальной аппаратной платформы: EDSAC - компьютер общего назначения, не заточенный под OXO.

Как и прочие ранние игры, OXO разрабатывалась не для развлечения, а со вполне серьёзной целью: Дугласу нужна была демонстрационная программа на защите докторской диссертации о взаимодействии человека и компьютера. Конечно же, по завершении своей функции OXO была заброшена(до тех пор, пока не появился эмулятор EDSAC, который можно скачать здесь). И, как и в прошлых обзорах, автор более в игровой индустрии не светился.

Edsac
n
X
Output From: OXO
DIAL MODE:4	a
DIAL MODE:3 DRAWN GAME...
EDSAC/USER FIRST (DIAL 0/1):1
DIAL MODE:5
DIAL MODE :1
DIAL MODE:8
DIAL MODE:,Игры,старые игры,обзор

EDSAC был одним из первых компьютеров, который при исполнении программы мог как считывать данные из памяти, так и записывать их туда. Для отображения состояния памяти он был оборудован тремя дисплеями 35х16 точек, один из которых Дуглас приспособил для вывода игрового поля. Игрок делал ходы, крутя наборный диск (как у старых телефонов). Компьютер отвечал, играя "идеальную партию", то есть следуя алгоритму, при котором игра всегда сводилась к ничьей или проигрышу человека. Так-то.

,Игры,старые игры,обзор


История видеоигр, часть 19: The Amazing Maze Game (1976)


Помните газеты, которые покупали ваши родители? Они обычно заканчивались блоком кроссвордов, а последняя страница отводилась под детские задачки и головоломки. Иногда там попадались простенькие лабиринты. Читателю предлагалось взять карандаш и прочертить линию от старта до финиша. Удивительно, но кому-то в Midway это занятие показалось достаточно увлекательным, чтобы сделать на его основе игровой автомат.

THE AMAZING MAZE GAME
INSERT COIN *,Игры,старые игры,игровой автомат,обзор

Прохождение лабиринта на время - хорошая тренировка внимания, памяти и рефлексов. А если делать это наперегонки с приятелем, то ещё и весёлое времяпрепровождение. The Amazing Maze Game -- как раз об этом. Получив пятак, автомат генерирует лабиринт с выходами в правой и левой части. Первый игрок начинает справа, второй -- слева. Задача -- добраться до противоположного выхода раньше соперника.

,Игры,старые игры,игровой автомат,обзор
При некоторой сноровке можно выигрывать бесконечно.

Без живого оппонента играть можно, но неинтересно. Компьютер прокладывает идеальный маршрут и не делает ошибок. Единственное преимущество игрока -- в скорости движения. Если игрок выигрывает, в следующих трёх-четырёх раундах компьютер наращивает скорость. После этого она остаётся фиксированной и всё ещё меньше скорости игрока, чтобы человек мог тягаться с машиной. The Amazing Maze Game стала одной из первых игр такого рода. Если вы большой фанат лабиринтов, а все старые подшивки газет уже израсходованы, то она увлечёт вас надолго, а может быть и навсегда, ведь карты генерируются случайно. Для всех прочих TheAmazing Maze Game -- просто диковина из прошлого, о существовании которой стоит знать, но знакомиться лично -- не обязательно.

MfiZES TO PLfiT 3,Игры,старые игры,игровой автомат,обзор
Перед началом раунда игра даёт несколько секунд на изучение
лабиринта.


Оценивать графику в играх того времени -- занятие бессмысленное. Она, скажем так, есть и выполняет свои функции. Когда первый игрок движется, игра воспроизводит дёрганую, нервическую мелодию средненького качества, что делает TAMG одной из первых, если не первой, игрой с музыкальным сопровождением.

ОСдев №9: основной загрузчик, часть 2. Работа с дисплеем при помощи функций BIOS.

Дисклеймер: эта серия постов не про UEFI. Это не значит, что я не знаю о существовании UEFI. Про UEFI будет отдельная серия постов. Почему я не пишу про UEFI прямо сейчас? Потому что UEFI - это уровень абстракции над железом, а мне интересно именно железо и работа с ним.
Продолжаем? Сейчас наш загрузчик второго уровня работает в "немом" режиме - без возможности подать сигнал об ошибке или выполнении операции. Это необходимо исправить. Самое очевидное решение - вывод информации на дисплей. Мы уже условились, что на нынешнем этапе для работы нашей ОС будет необходима VGA-совместимая карта и дисплей, так что вправе рассчитывать на их наличие.
Программирование VGA-контроллера - сложная штука. Однажды мы ею обязательно займёмся, но сейчас, раз уж мы всё ещё в Реальном режиме, есть вариант попроще: функции BIOS. Функции, связанные с работой дисплея, доступны через прерывание 10h. Мы уже пользовались им для вывода текста в первичном загрузчике, но так как теперь мы не ограничены в размере программы, функционал можно будет расширить.
Первое, что нам стоит сделать - установить нужный видеорежим на случай, если BIOS этого не сделала. Кроме того, понадобятся функции считывания положения курсора, прокрутки экрана и вывода строки. Весь код, связанный с вводом/выводом будет храниться в отдельном файле. У меня он называется io.inc. Мы ещё не использовали подключаемые файлы, но ничего сложного тут нет: в TASM они объявляются директивой include, после которой идёт путь и имя файла. Единственная тонкость тут в том, что подключенный файл не будет вынесен в какую-то изолированную область памяти, как это делается в языках высокого уровня, а окажется в исполняемом файле именно там, где был объявлен. Поэтому лучше объявлять подключаемые файлы где-нибудь в конце, за пределами основного кода.
VGA имеет набор стандартных режимов отображения, с которым можно ознакомиться тут:
Нас интересует режим номер 3 - 80х25 символов, 16 цветов. Для его включения создадим в файле io.inc процедуру set_vmode3. Её полный текст будет выглядеть так:
set_vmode3 proc
                                  push ax
                                  push bx
                                  pushf

                                  xor ax,ax
                                  mov ah,0Fh
                                  int 10h
                                  cmp al,03h
                                  je @@exit_good

                                  mov ax,0003h
                                  int 10h

                                  xor ax,ax
                                  mov ah,0Fh
                                  int 10h
                                  cmp al,03h
                                  jne @@exit_bad

@@exit_good:          mov byte ptr vmode,al
                                  mov byte ptr vcol,ah
                                  mov byte ptr vrow,19h
                                  mov byte ptr vpage,bh

                                  popf
                                  clc
                                  pop bx

                                  pop ax
                                  ret

@@exit_bad:            popf
                                  stc
                                  pop bx
                                  pop ax
                                  ret
set_vmode3 endp
Начинается процедура, как и почти всегда у меня, с сохранения состояния используемых регистров в стеке. Это нетипичный для ассемблера подход. Обычно, создавая низкоуровневый код, программист стремиться максимально оптимизировать использование инструкций, по возможности обходясь без обращений к памяти, использования стека и вызова процедур. К сожалению, при работе над большим проектом это невозможно, и я на горьком опыте выяснил, что лучше потратить лишние циклы на инкапсуляцию процедуры, чем потом мучительно отлавливать баг, который появился из-за того, что какой-то регистр внепланово изменил значение.
                    xor ax,ax                    mov ah,0Fh
                    int 10h
                    cmp al,03h
                    je @@exit_good
Этот блок нужен для того, чтобы остановить выполнение процедуры, если режим 3 уже установлен. Сначала регистр AX обнуляется, чтобы мы точно знали его значение. Функция 15 (0Fh) прерывания 10h возвращает в регистре AL номер установленного режима. Далее мы сравниваем результат с нужным значением (3), и если они равны, то переходим к завершению процедуры, метка @@exit_good. Если режим 3 не установлен, продолжаем.
                    mov ax,0003h                    int 10h
Здесь мы опять вызываем прерывание 10h со следующими параметрами: AH = 0(функция 0, установка видеорежима), AL = 3(номер режима). После этого снова идёт проверка режима. Если AL всё ещё не равен 0 - вероятно, возникла проблема, которую мы не сможем решить. Переходим к метке @@exit_bad. Если AL равен 3, продолжаем от @@exit_good. Первым делом - сохраняем в переменные параметры режима, которые вернуло прерывание 10h. В AL - номер режима; в AH - количество колонок символов; в BH - активную страницу видеопамяти (об этом позже). Параметр vrow не возвращается, потому что технически количество символьных строк ограничено только объёмом видеопамяти, а не размером дисплея. После этого восстанавливаем сохранённые в начале регистры, устанавливаем CF (флаг переноса) в нужное положение и завершаем процедуру.
Готово. Теперь в основной модуль после call read_BPB добавляем call set_vmode3 и после этого jc panic. JC - инструкция условного перехода. Переход выполняется при установленном флаге CF. То есть, если наша процедура set_vmode3 завершилась неудачно, программа продолжится от метки panic. Так как невозможность установить видеорежим говорит либо о серьёзных неполадках, либо о несовместимом оборудовании, продолжать выполнение смысла нет. После метки panic останавливаем программу инструкциями cli и hlt.
Далее стоит вывести какое-нибудь приветствие или заголовок, просто чтобы уведомить пользователя о том, что программа работает. Для этого первым делом стоит узнать положение курсора, ведь на экране скорее всего уже есть какой-то текст от BIOS. Это тоже можно сделать с помощью прерывания 10h. Добавьте в io.inc процедуру get_cursor_pos:
get_cursor_pos proc                                      push ax
                                      push bx
                                      push cx
                                      push dx
                                      pushf

                                      mov ah,03h
                                      mov bh,byte ptr vpage
                                      int 10h
                                      mov byte ptr cursor_X,dl
                                      mov byte ptr cursor_Y,dh

                                      popf
                                      pop dx
                                      pop cx
                                      pop bx
                                      pop ax
                                      ret
get_cursor_pos endp
Про сохранение/восстановление используемых регистров объяснять больше не буду, а в остальном тут всё просто: вызываем функцию 3 прерывания 10h, в BH передаём активную страницу видеопамяти. Прерывание возвращает в DL позицию курсора по X, а в DH - по Y. Сохраняем в переменных. Готово. Далее нам понадобится процедура для прокрутки содержимого дисплея. Тут чуть сложнее, добавьте в io.inc:
scroll_up proc                                     push ax
                                     push bx
                                     push cx
                                     push dx
                                     pushf

                                     mov ah,06h
                                     mov bh,CS_DEFAULT
                                     xor cx,cx
                                     mov dl,byte ptr vcol
                                     dec dl
                                     mov dh,byte ptr vrow
                                     dec dh
                                     int 10h

                                     popf
                                     pop dx
                                     pop cx
                                     pop bx
                                     pop ax
                                     ret
scroll_up endp
Функция прокрутки экрана BIOS требует, во-первых, цветовую схему, которой будут заполнены очищенные строки, а во-вторых, координаты верхнего левого и правого нижнего углов сдвигаемой области. Цветовая схема передаётся в регистре BH и состоит из цвета фона и цвета символа. Мы ещё не объявляли константы, давайте посмотрим, как это делается. Константы в отличие от подключаемых файлов можно объявлять где угодно, так как они нужны только на этапе компиляции и не попадают в исполняемый файл. В TASM для объявления констант используется инструкция equ. Вся конструкция выглядит так: ИМЯ КОНСТАНТЫ equ ЗНАЧЕНИЕ КОНСТАНТЫ. Так как в стандартной палитре третьего режима всего 16 цветов, уместно будет определить их в виде констант. Добавьте в код такую запись:
;Цвета фона.BC_BLACK               equ byte ptr 00h
BC_BLUE                 equ byte ptr 10h
BC_GREEN              equ byte ptr 20h
BC_CYAN                 equ byte ptr 30h
BC_RED                   equ byte ptr 40h
BC_MAGENTA          equ byte ptr 50h
BC_BROWN             equ byte ptr 60h
BC_LIGHTGRAY      equ byte ptr 70h

;Цвета символа.
SC_BLACK               equ byte ptr 00h
SC_BLUE                 equ byte ptr 01h
SC_GREEN              equ byte ptr 02h
SC_CYAN                 equ byte ptr 03h
SC_RED                   equ byte ptr 04h
SC_MAGENTA         equ byte ptr 05h
SC_BROWN             equ byte ptr 06h
SC_LIGHTGRAY      equ byte ptr 07h
SC_DARKGRAY       equ byte ptr 08h
SC_LIGHTBLUE       equ byte ptr 09h
SC_LIGHTGREEN   equ byte ptr 0Ah
SC_LIGHTCYAN      equ byte ptr 0Bh
SC_LIGHTRED        equ byte ptr 0Ch
SC_LIGHTMAGENTA equ byte ptr 0Dh
SC_LIGHTBROWN  equ byte ptr 0Eh
SC_WHITE               equ byte ptr 0Fh

;Несколько готовых цветовых схем.
CS_DEFAULT           equ BC_BLACK or SC_CYAN
CS_CLASSIC           equ BC_BLACK or SC_LIGHTGRAY
CS_DARK                 equ BC_BLACK or SC_DARKGRAY
CS_BLUE                 equ BC_BLUE or SC_LIGHTBLUE
CS_ALARM              equ BC_BLACK or SC_RED
CS_DEBUG              equ BC_BLUE or SC_WHITE
CS_INVERT             equ BC_LIGHTGRAY or SC_BLACK
CS_PANIC                equ BC_RED or SC_BLACK
Как видите, для передачи цвета фона/символа используется один байт. Нижние 4 бита отвечают за цвет символа, верхние - за цвет фона и некоторые другие эффекты (подчёркивание, мигание), которые нам сейчас не нужны. Теперь разберёмся с рабочей областью. Мы хотим сдвинуть вверх весь экран, поэтому верхняя левая точка будет в (0,0), а правая нижняя - в (число символов по X-1,число символов по Y-1). Первая передается в CX, вторая - в DX. Таким образом, код процедуры расшифровывается так:
AH=номер функции (6)BH=цветовая схема
CX=верхний левый угол рабочей области (0,0)
DX=правый нижний угол
Вызвать прерывание 10h
Процедура принимает число строк, на которое нужно прокрутить экран вверх, в AL. Добавьте после jc panic такой код:
                           call get_cursor_pos                           mov al,01h
                           call scroll_up
Последнее, что мы рассмотрим сегодня - вывод строки. Это функция 19 прерывания 10h. В качестве параметров она требует: сегмент и смещение строки в ES:BP; цветовую схему в BL; активную страницу видеопамяти в BH; позицию начала вывода по X в DL; позицию начала вывода по Y в DH; длину строки в CX; режим вывода в AL. Номер функции как всегда передаётся в AH.
Зная всё это, давайте подумаем, как организовать процедуру. В принципе тут всё почти однозначно, но что\ делать с длиной строки? Заносить в CX вручную перед каждым вызовом процедуры? Можно, но зачем раздувать код. Лучше включить эту информацию в саму строку. Например, приняв, что первые 16 бит строки будут содержать число символов в ней. У меня строка с заголовком загрузчика выглядит так:
str_title          dw 31                                                     ;Длина строки.                      db '=== Tardigrada Loader v.1.1 ==='    ;Строка.
Теперь давайте напишем саму процедуру в io.inc.
print_string proc                                   push ax
                                   push bx
                                   push cx
                                   push dx
                                   push bp
                                   push es
                                   pushf

                                   mov ax,0050h
                                   mov es,ax
                                   mov ax,1300h
                                   mov bh,byte ptr vpage
                                   mov cx,es:[bp]
                                   mov dh,byte ptr cursor_Y
                                   mov dl,byte ptr cursor_X
                                   add bp,0002h
                                   int 10h

                                   popf
                                   pop es
                                   pop bp
                                   pop dx
                                   pop cx
                                   pop bx
                                   pop ax
                                   ret
print_string endp
Наша процедура будет принимать два параметра: смещение строки в BP и цветовую схему в BL. Практически весь код - это заполнение регистров для вызова прерывания. В основном модуле после call scroll_up добавим:
                                   mov bl,CS_DEFAULT                                   mov bp,offset str_title
                                   call print_string
                                   mov al,01h
                                   call scroll_up
Этот код выведет заголовок и прокрутит экран ещё на одну строку вверх. Если всё сделано правильно, должно получиться что-то вроде этого:
^ Bochs for Windows - Display
USER ,__£
m2
■+Щ
•te
ТА
Reset susPEno Rower-
Û *
ujf'tnu vvwet
ù ф
Please visit :
. http://bochs.sourceforge.net . http ://www.nongnu.org/vgab ios
Bochs UBE Display Adapter enabled
Bochs 2.6.10.sun BIOS - build: 01/05/20
^Revision: 13752 $ $Date:
Чистая дискета: https://drive.google.com/file/d/1Bold4ds8oEruHQ7fJZKHglVo7A2Vc5MR/view?usp=sharing

История видеоигр, часть 13: Pong (1972)

,Игры,старые игры,обзор
Прототип игрового автомата Pong.

В 1971 году Нолан Бушнел зарегистрировал компанию Syzygy Engineering для выпуска одной единственной игры, Computer Space. Успех был умеренным, но вдохновил авторов идти этой стезёй дальше. Бушнел и Дабни решили основать контору, продающую "идеи" игр другим компаниям. Новые задачи требовали новых специалистов и новоиспечённая Atari приняла на работу инженера Алана Алкорна. В качестве "разминочного" задания Алкорна попросили спроектировать простую игру с движущейся точкой, двумя "ракетками" и возможностью ведения счёта.

,Игры,старые игры,обзор
Алан Алкорн

Поразмыслив, Алан решил, что с описанным боссом функционалом игра будет скучной и добавил несколько фич от себя. Ракетки были разделены на 8 частей, при попадании в которые мяч отскакивал под разными углами: две центральные части отбивали мяч перпендикулярно ракетке, а крайние - под острым углом. Скорость полёта мяча нарастала с каждым ударом и возвращалась к исходному значению, когда один из игроков промахивался.

В августе 1972 прототип был установлен в баре, с хозяевами которого у Бушнела были хорошие отношения. Игра имел успех и несколько недель привлекала всё новых поклонников. Когда хозяин бара обратился к Atari с просьбой проверить происходящие с автоматом сбои, оказалось, что их причиной был переполненный монетоприёмник.

Узнав о случившемся аншлаге, авторы решили не продавать права на игру, а начать самостоятельное производство.

,Игры,старые игры,обзор
Pong в режиме демонстрации.

Пройдя все семь кругов ада, компания всё-таки нашла деньги и сотрудников для сборочной линии. Как и прошлое начинание Бушнела, выглядело всё это чудовищной авантюрой, которая выгорела лишь чудом. Автоматы с Понгом продавались как пирожки, и Atari не успевала подсчитывать прибыли. Как водится, всё пошло наперекосяк из-за одного маленького упущения: авторы не запатентовали технологию и вскоре практически затерялись в море клонов. "Шакалы!" - говорил Бушнел о подражателях, хотя его собственный первый игровой проект начинался как калька со Spacewar! Да и Pong, чего скрывать, была доработанной версией настольного тенниса с Magnavox Odyssey.

3
ID
I,Игры,старые игры,обзор
Типичный кадр из игры.

В исторической перспективе этот Pong-бум имел положительный эффект: множество компаний, продававших его копии, позже перешли к разработке уникальных игровых проектов. Таким образом, Бушнел и компания невольно дали толчок аркадной революции. Лучшим методом борьбы с подражателями сам Бушнел считал повышение качества и оригинальности собственного продукта. Так, вскоре появились вариации понга для четверых игроков - в командах по двое и каждый за себя, а затем и домашние консоли, подключавшиеся к телевизору.

Устроив этот исторический обзор, я совсем забыл о главном: что, собственно, представляла из себя Pong? Если вдруг кто-то среди читателей с ним не знаком, кратко опишу: Pong - это имитация настольного тенниса для двух игроков, управляющих "ракетками", которые могут двигаться вверх и вниз, но фиксированы по горизонтали. Задача игроков - отбивать мяч до тех пор, пока противник не пропустит подачу. В оригинальной версии счёт идёт до 11 очков, но в многочисленных инкарнациях игры правила неоднократно менялись.

,Игры,старые игры,обзор

Здесь мы собираем самые интересные картинки, арты, комиксы, мемасики по теме (+61 постов - )