Давайте напишем ... MMO! Часть 8: Строительство мира

Опубликовано NowhereMan - пн, 05/11/2020 - 22:53

В шестой части я решил, что хочу, чтобы игровой "мир" состоял из поля астероидов, чтобы у игроков был повод собраться в кучу. Я не хочу, чтобы люди расползались во всех направлениях и никогда не встречались друг с другом.

Итак, следующий вопрос - насколько большим должен быть астероид? В данных Minecraft, с которыми я играл, я импортировал блок 128 на 128 на 128. Это достаточно много материала для одного человека, чтобы строить (это более двух миллионов кубов). Если я хочу поддержать 500 человек на астероиде, каждый с таким количеством кубов для игры, есть два способа вычислить размер астероида.

Если делать это по площади, то 128 на 128 на 500 человек - это 8 192 000 кубиков. Сфера с такой площадью поверхности имеет радиус 807 единиц. Но я предполагаю, что люди будут закапываться в астероид и строить подземные города, или выдолбить центр и заполнить его городом, оставив поверхность как парк и т.д. Если делать расчет по объему, то куб 128 на 128 на 128 для 500 человек - это 1 048 576 000 кубов, но сфера с таким объемом имеет радиус всего 630 единиц.

Давайте напишем ... MMO! Часть 7: Производство видео

Опубликовано NowhereMan - пн, 05/11/2020 - 21:26

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

Как я уже упоминал в конце последней части, у меня есть набор утилит для написания AVI файлов, которые я нашел тут. Они пришли с небольшой тестовой программой, которую я скомпилировал и запустил, так что я знал, что AVI код в основном работает. Я не беспокоился об этой части.

Я интегрировал это в мой (медленный) трассировщик лучей. Затем мне нужно было расположить камеру и лететь в поисках фильма. Для этого я добавил функцию в демо-версию моего кубического мира. Я могу летать в этом мире, и с помощью функциональной клавиши записывать текущее положение и углы камеры в файл. Это дает мне возможность легко проложить путь камере. Затем трассировщик лучей считывает этот файл и создает отдельные кадры, 30 в секунду, вдоль пути камеры. Достаточно просто.

Давайте напишем ... MMO! Часть 6: Форма мира

Опубликовано NowhereMan - пн, 05/11/2020 - 20:16

С тех пор, как я написал последнюю часть, говоря о будущих направлениях, я читал комментарии и много размышлял над этой темой. С одной стороны, я хочу интересный мир, который приглашает людей присоединиться и сделать что-то. С другой стороны, я боюсь, сколько графического программирования требуется для того, чтобы этот мир был реализован. Я считаю, что графику намного сложнее писать и отлаживать, чем другие виды программ. Есть также огромные области, о которых я ничего не знаю.

Однако мне также не очень нравится просто махать рукой и говорить "мир расширяется пользователями - он может выглядеть так, как вы хотите. Там можно писать программы. Это будет здорово". Это никого не убедит, и не даст мне ни тестеров, ни предложений. Это просто большая пустая доска. Так что мне нужно построить что-то, на что люди смогут отреагировать.

Давайте напишем ... MMO! Часть 5: Планы и направления

Опубликовано NowhereMan - пн, 05/11/2020 - 17:30

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

Мне не нужен централизованно управляемый мир, где дизайнер решает все о стиле игры. Кроме того, я не могу позволить себе управлять серверной фермой и поддерживать миллион пользователей. И у меня все равно нет ни художественных, ни дизайнерских талантов, чтобы построить игру мирового уровня. Поэтому моя идея заключается в том, чтобы сделать мир равноправным и позволить программирование и дизайн в мире. Тогда он сможет расширяться и меняться, основываясь на том, что люди хотят там делать. Подумайте о peer to peer Lego Universe, с редактором для создания новых блочных типов и языком программирования, который позволит вам добавлять игры или приложения в мир.

Давайте напишем ... MMO! Часть 4: Прозрачность

Опубликовано NowhereMan - пн, 05/11/2020 - 14:13

Текстуры, которые мы используем, задаются в красном, зеленом и синем каналах. Дисплей также поддерживает четвертый "альфа" канал, который может быть использован для реализации прозрачности. Библиотеки DirectX (и OpenGL) на самом деле поддерживают всевозможные правила для комбинирования новой текстуры с тем, что уже есть на экране, но, наиболее распространенным является линейное комбинирование умножением на альфа-значение.

Например, если бы альфа была 0.0, вы бы получили весь существующий пиксел экрана, и ничего из новой текстуры. Это можно использовать для маскировки нежелательных частей текстуры и превращения ее в полностью прозрачную. В другой крайности, значение 1.0 не будет использовать ни один из существующих пикселей экрана, зато возьмет всю новую текстуру, что сделает ее непрозрачной. Значения посередине дадут вам полупрозрачный эффект.

Давайте напишем ... MMO! Часть 3: Старая добрая 2D графика

Опубликовано NowhereMan - вс, 05/10/2020 - 19:59

Если вы загружали демо-версию, вы знаете, что текущий вид - это просто мир, выглядящий как на рисунке 1. Очевидно, что он как-то отличается от коммерческой игры... Я знаю! Нет ни здоровья, ни маны, ни состояния оружия, ни выбранной цели, ни мини-карты, ни текста квеста, ни текста в чате, ни сообщений о "входе в бой", ни открытых мешков, ни палитры заклинаний, ни окон помощи ... ни хлама по всему экрану! (см. Рисунок 2) Чтобы добавить это, нам нужна 2D-графика.

Давайте напишем ... MMO! Часть 2: Гуляем

Опубликовано NowhereMan - вс, 05/10/2020 - 18:25

В первой части я, возможно, создал два вводящих в заблуждение впечатления. Во-первых, вы могли подумать, что я опытный программист, показывающий вам лучший способ реализации простого мира блоков. Отнюдь не так! У меня большой опыт программирования систем, но мой опыт работы с 3d графикой во многом ограничен тем, что Вы уже видели. А мой опыт программирования игр состоит из личных проектов, сделанных более 30 лет назад. На этом проекте я буду учиться по ходу дела.

Во-вторых, вы могли подумать, что я просто хочу создать Minecraft с некоторыми незначительными вариациями. Это тоже неправда. Как написано на главной странице, я хочу создать "виртуальный мир от равного к равному, поддерживающий реальную среду программирования". Я выбрал кубический мир для реализации в качестве первого прохода, потому что это легко, и потому что Minecraft так популярен. Это также самый простой модифицируемый пользователем мир, который я могу придумать. Как только вы сможете добавлять и удалять блоки, вы сможете создавать всевозможные вещи. Минимальное количество кода, чтобы сделать это с любым другим миром (например, Second Life) было бы огромным.

Давайте напишем ... MMO! Часть 1

Опубликовано NowhereMan - вс, 05/10/2020 - 14:50

Меня зовут Майкл Гудфеллоу. Первый раз я дотронулся до компьютера где-то в 1971, и мне сразу захотелось знать как его программировать. Я работал в индустрии ПО с 1975 по 2005, когда вышел на пенсию по инвалидности. И да, я все еще пишу код. Кто знает зачем?

Я учился программировать, создавая компьютерные игры (в которые мы играли на похожих на печатные машинки терминалах, подключенных к большим мейнфреймам), но я не написал ни одной профессионально. Я много лет хотел написать игру. Я много раз застревал с этим. Но, перед тем, как мне удалось найти на это время, игры стали слишком хорошо выглядеть. Для человека без художественных способностей, это выглядит слишком сложно. Half-Life2 (или даже Half-Life) – это не то, что вы делаете в свободное время, днем занимаясь работой. Мои друзья, корпоративные программисты как и я, согласились. Когда я упомянул о написании игры (даже MMO!) они долго смеялись.

Но теперь вышел и стал хитом Minecraft - и это проект одного человека. Очевидно, для игр, которые не выглядят на миллион (или 20 миллионов) долларов все еще есть ниша. Так что я попробую.

Offline восстановление windows (кратко)

Опубликовано NowhereMan - пн, 01/27/2020 - 11:59

Из коммандной строки, загрузившись в recovery:

bcdedit

В разделе "Windows boot loader" находим букву диска и каталог windows. Дальше просто:

sfc /scannow /offbootdir=<Windows_Drive_Letter>:\ /offwindir=<Windows_Drive_Letter>:\windows

 

Dism /Image:C:\offline /Cleanup-Image /RestoreHealth /Source:e:\sources\install.esd

Dism /Image:C:\offline /Cleanup-Image /CheckHealth

Ошибка 0x800f081f означает несовпадение версии текущего образа и источника.

Дополнительно - очистка места, занятого WinSxS и прочим:

Теги

/usr/sbin/grub-probe:error:failed to get canonical path of /cow.

Опубликовано jeord - пт, 10/04/2019 - 11:49
mkdir /mnt/chrootdir
mount /dev/sda1 /mnt/chrootdir
for dir in proc dev sys etc bin sbin var usr lib lib64 tmp; do
    mkdir /mnt/chrootdir/$dir && mount --bind /$dir /mnt/chrootdir/$dir
done
chroot /mnt/chrootdir

Теги