Пользователь
76,0
карма
0,0
рейтинг
18 апреля 2013 в 14:07

Как я Quake в браузере делал


2 месяца назад я выложил на GitHub первую бета-сборку WebQuake — порта первого Quake, работающего в браузере через WebGL.

В этом посте я бы хотел вам рассказать о подробностях разработки и реализации движка: как сделана графика, как работает звук, и так далее.

Как всё началось


Разработку WebQuake в текущем его виде я начал в сентябре 2012 года. Но идея у меня зародилась задолго до этого.

Первый раз я решил сделать что-то подобное летом 2011 года, когда я ничего не соображал в JavaScript. Тогда я делал порт «на глаз», не глядя на код Quake, и сделал только небольшой кусок меню игры. В той версии я работал с двоичными данными через строки (а в парсере чисел с плавающей запятой вообще использовал Math.pow и биты хранил в строке из символов 0 и 1). Очень хорошо, что непонимание сути работы с буферами и шейдерами в WebGL уберегло мир от такой струи блевотины.

Затем ради прямого доступа к файлам я хотел сделать WebQuake десктопным приложением. Стал выбирать между HTA и XUL. Но ни один из них не поддерживает WebGL. Поэтому от этой идеи я тоже отказался.

В итоге я перешел на чистый HTML5.

Разработка


От начала до первой беты прошло 6 месяцев. Если мне не изменяет память, на создание GWT Quake 2 у Google ушло 2 месяца, но Google делали свой порт втроём, и у них была база в виде Jake2, а я переписывал весь код вручную.

Переписывание вручную было выбрано из-за того, что так мне проще подгонять код под общий принцип работы всего движка, делать движок независимым от размера окна браузера, а некоторые области (как графика) в браузере работают совсем не так, как в оригинальном Quake.

Но у такого подхода есть и недостатки. Иногда получались опечатки, а из-за неправильного оператора мне дважды (в первый раз скользил по стенам с бешеной скоростью из-за && вместо ||, а во второй были ужасные дергания в сетевой игре из-за !== вместо ===), пришлось потратить 3 недели на перекапывание всей системы.

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

Подсистемы


А теперь перейдем к деталям самого движка.

Графика


Отрисовка графики, естественно, реализована через WebGL.

Но WebQuake портом GLQuake назвать нельзя. Практически вся графическая подсистема была переписана с нуля.

Главным отличием WebQuake от GLQuake является использование шейдеров и буферов вместо фиксированного набора функций OpenGL. В WebQuake шейдеры используются везде, для каждого типа объектов: BSP-модель, полигональная модель, игрок, спрайт, частица, небо — написан свой шейдер.

Через шейдеры были возвращены эффекты, присутствующие в DOS Quake/WinQuake, но убранные из GLQuake из-за ограничений старых версий OpenGL, например, текстуры с освещенными участками и яркий свет.


Начало E1M1 в GLQuake. Лампочки не горят.


То же место в WebQuake.

Некоторые особенности движка Quake позволили мне повысить производительность графики. Например, так как полигон может освещаться одновременно только 4 динамическими источниками света, а карты освещения черно-белые, удалось отрисовку мира векторизовать через цветовые каналы одной текстуры. Пиксельный шейдер мира в порте выглядит вот так:
precision mediump float;
uniform float uGamma;
uniform sampler2D tTexture;
uniform sampler2D tLightmap;
uniform sampler2D tDlight;
uniform sampler2D tLightStyle;
varying vec4 vTexCoord;
varying vec4 vLightStyle;
void main(void)
{
	vec4 texture = texture2D(tTexture, vTexCoord.xy);
	gl_FragColor = vec4(texture.rgb *
		mix(1.0, dot(texture2D(tLightmap, vTexCoord.zw), vec4(
			texture2D(tLightStyle, vec2(vLightStyle.x, 0.0)).a,
			texture2D(tLightStyle, vec2(vLightStyle.y, 0.0)).a,
			texture2D(tLightStyle, vec2(vLightStyle.z, 0.0)).a,
			texture2D(tLightStyle, vec2(vLightStyle.w, 0.0)).a)
		* 43.828125) + texture2D(tDlight, vTexCoord.zw).a, texture.a), 1.0);
	gl_FragColor.r = pow(gl_FragColor.r, uGamma);
	gl_FragColor.g = pow(gl_FragColor.g, uGamma);
	gl_FragColor.b = pow(gl_FragColor.b, uGamma);
}


Как вы видите, dot здесь используется для слегка необычной для него задачи — перемножение 4 карт освещения на их текущую яркость для данного источника освещения, которая находится в текстуре 64x1 как значения от 0 до 25 или от 0.0 до 0.0980392.

Небо, ужасно заломанное в GLQuake, здесь сделано в виде приплюснутой сферы, рисующейся вокруг всего уровня через хаки с depth testing'ом, в отличие от GLQuake, который разбивает полигоны с текстурой неба на множество маленьких и искажает их странными способами, приводя к нехорошим эффектам и волнам при перемещении.


Небо в GLQuake.

Двухмерные изображения тоже рисуются через WebGL (через quad с длиной 1, умножающийся в вершинном шейдере). Изначально планировалось использовать для этого 2D Canvas, но при высоком разрешении FPS падало до 15.

Также, в отличие от оригинального Quake (и GWT Quake 2), WebQuake никак не зависит от размера окна браузера. Для этого также используется и так называемый Hor+vert+ FOV, о котором я писал ранее на Хабрахабре.

Звук


Звук реализован сразу двумя способами.

По умолчанию используется Web Audio API, поддерживающий стереозвук и плавный повтор звука.

Если браузер не поддерживает Web Audio API, включается HTML5 Audio, но звук в таком случае одноканальный и повторяется с некоторой задержкой.

В ранних бета-релизах использовался только HTML5 Audio, но из-за этого вылетал Chrome сначала на Android, Linux и Mac, а затем и на Windows, поэтому была добавлена поддержка Web Audio.

Музыка тоже присутствует, но проигрывается не с диска, а из OGG-файлов на сервере через HTML5.

Сетевая игра


Так как браузер не может быть сервером WebSocket, сделать listen-сервер было невозможно.

Выделенный сервер работает через Node.js и использует крупную часть кода WebQuake.

В выделенном сервере поддерживаются одновременно и WebSockets, и UDP, поэтому на серверах WebQuake можно играть через обычный клиент Quake (не QuakeWorld). Возможно, в будущем я напишу прокси для подключения к уже существующим серверам обычного Quake.

Информацию о сервере можно запросить как HTTP-запросами на тот же адрес и порт, на котором запущен сервер (данные возвращаются в формате JSON), так и уже существующими способами через UDP.

Управление


Поддержка мыши на данный момент работает только в Chrome. Несмотря на то, что в Firefox pointer lock тоже есть, там он требует полноэкранного режима для самого canvas, что создает некоторые неудобства для игрока и для разработчика.

Файловая система


Доступ к файлам сделан через синхронный XMLHttpRequest.

Да, синхронный XHR — это, может быть, «не модно», но это реализуется гораздо проще, не приводя к callback hell'у, и возможно, даже приятнее для пользователя, чем видеть повсюду временные текстуры наподобие тех, что используются в GWT Quake 2.

Во время загрузки появляется (по крайней мере в Firefox) картинка «loading» посередине экрана, поэтому игрок понимает, что идет загрузка.

Записываются сохранения, настройки и демки в Local Storage. Сохранения, находящиеся в Local Storage, можно удалить кнопкой Delete в меню загрузки/сохранения.

В отличие от GWT Quake 2, WebQuake не требует конвертирования файлов и может загружать файлы прямо из .pak'ов (через HTTP 1.1 Range), а значит, присутствует полная поддержка модов.

Производительность


Тестировал я WebQuake на разных устройствах и браузерах.

Что было несколько удивительно, так это то, что приемлемой производительности (не знаю, сколько FPS, но не меньше 30) можно было добиться даже на телефоне (LG Optimus L9) через бета-версию Chrome, хоть стены и черные (не знаю точную причину этого, к тому же работает динамическое освещение).

На моем предыдущем компьютере WebQuake работал на максимальных 60 FPS, в отличие от 5-10 FPS в GWT Quake 2. При разработке я неявно учел ошибки GWT Quake 2, например, использовал ArrayBuffer/Typed Arrays/DataView где мог, и возможно это помогло добиться высокой скорости.

На чём были огромные тормоза, так это на старом компьютере с NVIDIA GeForce 5200 и на нетбуке Samsung N130. На ASUS Transformer Pad TF300T работает довольно гладко.
Виталий Кузьмин @SiPlus
карма 76,0
рейтинг 0,0
Реклама

Комментарии (116)

bsideup
+29
у браузера сейчас достаточно мощности для запуска серьёзных 3D-игр


Quake: Release date(s) MS-DOS NA June 22, 1996

Я не оспариваю процитированную фразу, но она не к месту по-моему:)
SiPlus
+4
Ну хотя да, зря написал, удалил.
logan
+12
Вы уж не обижайтесь, но данный проект сам по себе очень похож на реализацию анекдота о том, что какой бы мощный компьютер не был выпущен — программист всегда найдет, чем его занять.
TheShock
+9
А где поиграть?)
SiPlus
+2
webquake.quaddicted.com
На странице на GitHub же есть ссылка на online demo.
BOOMik
+1
Через гитхаб вышел на ссылку webquake.quaddicted.com
Через релиз хрома на андроид не стартует-жалуется на отсутствие WebGL
SiPlus
+1
Через бету Chrome (com.chrome.beta ищите в Google, на Play бета скрыта) надо с флажком в chrome://flags. Ну или через бету Firefox, но там 12 FPS.
BOOMik
–1
Оказывается уже в релизе можно включить WebGL и просмотр FPS.
Но игра выдает ошибку «id1/pak0.pak is not pak file»
BOOMik
–1
Все запустилось, но дальше меню и видеодемки игры по тапу в любое место уйти не удалось.
Планшет Nexus7 выдает около 20фпс, судя по показаниям хрома. Картинка плавная, черных стен нет.
SiPlus
0
Нужна Windows-совместимая клавиатура.
BOOMik
0
А не планируется адаптация к сенсорным устройствам?
SiPlus
0
Нет, я не хочу добавлять отсебятины, хватит меню по центру (хотя это не совсем отсебятина — было в Q2) и круглых частиц.
Даже схему наименования файлов музыки и строку, появляющуюся при удалении сохранения, я взял из Half-Life.
SiPlus
+1
Кнопки «назад» и «вперед» желательно не нажимать, они кеширование с заголовком Range в браузере ломают, из-за этого возникает «is not a pack file».
SiPlus
0
И ещё не советую играть без USB-клавиатуры, так как на клавиатуре Transformer нет Esc и F1-F12, всё через консоль надо делать.
sc_raptor
0
Вот тут демо есть — webquake.quaddicted.com/
XPyCT
0
Веб-страница недоступна
karazyabko
+2
5 минут грузится, кроме надписи Starting Quake… ничего не происходит, видимо все ломанулись вспоминать детство
bolk
0
По первой же ссылке в статье.
s0lar
+3
Подключайтесь, я создал! :)
silvansky
+4
Офигенно! Правда, меня быстро убили (сноровку потерял много лет назад)…

И вот это тоже круто.
SiPlus
0
А что у вас за ОС и браузер? У меня на Windows и Android таких полосок между строками нет.
silvansky
+1
OS X 10.8.3, FF 20
Но я не про полоски, я про саму картинку, ностальгия…
Moor
+22
Классика жанра:
— У тебя менюха поехала
— Какой браузер?
— FF
— Я же пофиксил там все!
— Под Макосью…
silvansky
–1
Кстати, на iPad (iOS 5.0.1) не запускается почему-то. «Starting Quake...» и всё.
SiPlus
0
В iOS'овском Safari не поддерживается WebGL. Ну он есть, но только для рекламы. По идее должен alert об ошибке выскочить, но значит там ещё другая ошибка появилась.
Michael134096
–4
Мсье SiPlus, что-то на данной картинке, которая мне тоже встретилась при выходе из игры, я не вижу ваших инициалов Виталий Кузьмин. Разъясните пожалуйста ситуацию. Где указано, что вы имеете какое-то отношение к квейку в браузере? Наличие у вас в гитхабе файлов ничего не доказывает — вы могли взять их в открытом доступе.
SiPlus
+1
Во-первых, это титры первого Quake, а не порта. Я старался добавлять как можно меньше отсебятины, чтобы сделать близкий к оригиналу порт. В DarkPlaces, например, LordHavoc упоминается только в комментариях к шейдерам.
Во-вторых, воровать просто нагло и неэтично, и программирование, как и большинству людей на этом сайте, интересно как процесс.
Если вы уж совсем не верите, могу скинуть бекап какой-нибудь стадии разработки.
SiPlus
0
мне интересно как процесс *

И вы где-нибудь видели эти файлы в открытом доступе до того, как я их опубликовал у себя на GitHub?

И вот ещё скриншоты разработки: steamcommunity.com/id/SiPlus/screenshots/?appid=sc_171572&sort=newestfirst&browsefilter=myfiles&view=grid
Michael134096
–3
Воровать нагло и неэтично, согласен с Вами. Но все же воров немало.
К сожалению, у меня не хватит квалификации разобраться в бэкапе. К тому же, бэкапы тоже могут быть в открытом доступе. Файлов в открытом доступе я не видел. Но это, конечно, не доказывает, что они принадлежат Вам.
Впрочем, если общество верит, что это сделали Вы, значит Вы действительно очень толковый человек. Поверю вам на слово и я. Удачи Вам.
...
Не верится, что вам 16 лет. У меня в 16 лет интернета даже не было, а вашей квалификации и подавно.
gigimon
+17
Круто! Всегда поражался людям, которые ничего не понимают в какой-то технологии берутся за серьезную разработку и доводят ее до конца, причем с великолепным результатом!
MuLLtiQ
+17
Особенно если учесть что этому товарищу всего 16 лет. Я в 16 лет в Кваку ИГРАЛ и на Паскале программки писал.
qbique
+2
Круто! А как включить m_look и прицел? ;)
SiPlus
+2
Прицел — crosshair 1 в консоли.
Мышь работает в Chrome. Чтобы смотреть вверх-вниз, либо зажмите колесо, либо введите +mlook (именно с плюсом) в консоли.
koshak
+1
в линуксе мышь работать не хочет…
weirdan
0
В Chrome 26.0.1410.63 — работает.
Infernal
+3
Так как браузер не может быть сервером WebSocket, сделать listen-сервер было невозможно.


Не рассматривали WebRTC data channels для этих целей? Пока что работает только в Chrome Canary/Firefox Nightly, но вещь весьма перспективная для мультиплеера в реальном времени
Alexufo
0
WebRTC на сколько мне известно всего лишь 640 на 480 способен выжать.
Infernal
+1
Нет, я не передачу видео имел ввиду, а передачу данных. Короткий туториал.
SiPlus
0
Возможно и прикручу, но при переходе на другую вкладку снижается частота цикла событий (до 5 или 10 выполнений в секунду, как я понял), а сервер Quake по умолчанию работает на 20 кадрах в секунду. Я на 10 пробовал играть (sys_ticrate 0.1), подлагивает, а на 5 — слайдшоу.
mwizard
+2


:(
SiPlus
0
Всё нормально, на сервере файлы распакованы для кеширования, вот и нет .pak'ов.
Сервер не мой, мне админ сказал, что надо распаковывать.
Suvitruf
0
Поностальгировал, спасибо)

p.s. иногда подвисает скрипт при загрузке и вываливается диалог на прекращение выполнения скрипта =/
SiPlus
0
Виновата реализация синхронного XMLHttpRequest в Firefox. В Chrome такого нет, если не ошибаюсь.
Suvitruf
0
Проверял в FireFox последнем, да и зависло всего один раз. Если нажать «ждать выполнения скрипта», то он выполнится, и всё в порядке)

PSNet
0
Ох, помню времена были. Долгие дни геймлея и атмосфера кваки…
Когда я играл десмач по сети (на ком портах), за этим наблюдал младший брат и когда я брал Quad Damage (синенький пак, который увеличивал повреждения), младший брат говорил «о, квач-дамач» тем самым выдавая меня противнику по десмачу по голосовой связи.
Противник, услышав комментарий брата (микрофон был весьма чувствительный), прятался по тёмным углам от меня, пока я «светился».
</Минутка ностальгии>

И вопрос — а как вам удалось переписать из Си на ЖС столько кода?
SiPlus
0
Долгим, иногда нудным переписыванием кода из одной колонки в другую.
Но прямо переписывал я чуть больше половины. Многое (отрисовка, звук, консоль, сеть) написано по-своему.
Mithgol
+7
Спасибо за подробный и познавательный рассказ, за впечатляющий и плодотворный труд.
Cord
+3
Спасибо!

Ваще супер!
SiPlus
0
У вас webquake.quaddicted.com открывается?
SiPlus
0
Уже ожил вроде.
kay
0
W.LoadWadFile: couldn't load gfx.wad

GET pak0.pak 403 Forbidden webquake.quaddicted.com 185 B 85.13.140.204:80 65ms GET pop.lmp 403 Forbidden webquake.quaddicted.com 186 B 85.13.140.204:80 48ms GET gfx.wad 403 Forbidden webquake.quaddicted.com 184 B 85.13.140.204:80 65ms
CyberAP
0
Такая же проблема. Неужели Zenimax так быстро реагируют?
SiPlus
+1
Хабраэффект. Походу хост заблокировал WebQuake. Я не могу на FTP зайти даже.
Cord
+7
Автору — выведите ДЕМО ссылкой жирно!

Этот пост должен войти в лучшие месяца
SiPlus
+1
Вы убили демо. =(
Suvitruf
+1
Я только начал входить во вкус )=
SiPlus
+1
Поставьте на локалхост, это не трудно, просто файлы порта и игры на веб-сервер с поддержкой HTTP/1.1 закиньте. Тут ничего конвертировать, как в GWT Quake 2, не надо.
TheShock
+1
А почему бы на GitHub pages не залить? Для сингла самое то, а сервер свой разгрузите.
SiPlus
0
GitHub по DMCA-запросам закрывает репозитории.
TheShock
0
Открыть фейковый реп на момент хабраэффекта?)
Lexi
0
Да, так работает, спасибо (пробовал на сто-килобайтном shttps).
SiPlus
0
А никто похостить дезматч или кооп не желает? Я не могу, у меня NAT.
SLY_G
+1
У всех nat!
SiPlus
0
А еще у меня DIR-632 (типа IPv6 Ready) с корявой прошивкой без IPv6…
Кстати, ставить американскую прошивку на русский роутер через emergency recovery не опасно?
cyber_ua
+2
Хм, у меня не может загрузить файлы.
SiPlus
+2
У всех так. Хабраэффект, а сервер не мой.
cyber_ua
0
Понятно, бывает))
Lexi
0
А в Firefox Nightly похоже не работает:
Error: TypeError: Not enough arguments to AudioContext.createBuffer.
Source File: localhost/WebQuake/S.js
Line: 809
SiPlus
0
Видимо еще не добавили createBuffer(ArrayBuffer, bool).
Lexi
0
Да, действительно. Отключил media.webaudio.enabled и заработало.

// В 20 фоксе у меня немного подлагивало, но там открыта пара десятков страниц, а вот в найтли всё нормально.
// Прошёл три уровня :)
Aleks_ja
0
В инструкции по установке написано:
Get Quake resource files. The demo version containing only the first episode is enough.

А где их взять эти «resource files».
Lexi
0
Демку на www.idsoftware.com/games/quake/quake
Полную на old-games.ru или торрентах.
SiPlus
0
На 64-битной Windows демка не устанавливается (установщик для DOS), так что гуглите
"pak0.pak" 17m "index of"
и кидайте в папку id1.

Полная, как и DLC, есть в Steam.
Lexi
+1
> демка не устанавливается
WinRar, Total Commander и т.п. распаковывают файл resource.1. (это sfx lzh архив)
Aleks_ja
+6
Залил демо себе на сервер:

вкусноиполезно.com/quake/
BupycNet
0
GET pak2.pak

404 Not Found
поправьте.
Anonym
0
Скачал 3 версии quake. pak2.pak ни в одной нет.
SiPlus
+1
Его и не должно быть. Quake загружает pak-и от нулевого, пока не дойдет до несуществующего.
Aleks_ja
0
Уже 2ой уровень проходите? :)

А вообще у меня в хроме не ругается и работает. Попробую ещё поискать ресурсных файлов.
SiPlus
0
Ругается в Файрбаге. Это ошибочный код ответа на HTTP-запрос, а не ошибка в коде.
BupycNet
0
мм у меня просто не загружается почему то. Скорее это опять бага. Почему то у меня в винде 8 часто страницы не догружаются, в любом браузере. В линуксе все ок. Потом в нем попробую.
SiPlus
0
HUD не вписывается.
kriokamera
0
В настройках «размер экрана» как раз для исправления таких неприятностей.
SiPlus
+1
Я имею в виду, что HUD, нарисованный в Paint, не вписывается в общую тематику.
Anonym
+4
Вот еще демо Mission pack присутствует
НЛО прилетело и опубликовало эту надпись здесь
iago
+18
Апплодирую стоя, вы — явный гений. Буду давать ссылку на этот пост всем, кто плохо отзывается о молодом поколении в стиле «при Сталине трава была зеленее»
НЛО прилетело и опубликовало эту надпись здесь
SiPlus
+1
А смысл? К тому же, в вебе Web Audio API уже есть, а биндинг для OpenAL никто добавлять не планирует.
havelock
0
Молодец! Привет от бывших форумчан с cs-mapping.com.ua ;)
Alexsey
+1
А я лет 5-6 назад по его постам на форуме нашалайф (потом как-то и не видел его, да и сам я оттуда ушел) и не сказал бы что до такого человек дойдет. Действительно молодец. :)
Antares19
0
Очень круто! Респект и уважуха! :)

Какой у вас опыт программирования до WebQuake?

Кодили рилтайм 3D?
SiPlus
0
Начал со скриптов для Garry's Mod. Возможно, вы когда-нибудь видели мои Valkyrie Rockets на Toybox. Потом попробовал на Си сделать унылую игру (с текстурами не больше 256x256, чтобы на Voodoo 2 работала) про разноцветные кубы, к которой даже внутриигровой редактор сделал, но забросил из-за того, что под такую идею (переключение между белым «слоем» и черным «слоем») было невозможно придумать нормальные уровни, и это был OpenGL Immediate Mode. Потом решил сделать WebQuake.
not_ice
+1
Восхитительно! Для меня в 16 лет был предел — кривой wolfenstein-подобный движок на паскале )
Поностальгировал, даже сразу вспомнил +mlook )
SiPlus
+1
Так как сервер вы убили, хост теперь перенаправляет с webquake.quaddicted.com на старое расположение, но там немного нестандартные config.cfg и progs.dat, поэтому желательно в консоли написать unbindall и exec default.cfg. «Player exited the level» — это делает модифицированный progs.dat. Я ничего не могу с этим поделать.
SiPlus
0
И читы там на некоторых кнопках стоят.
ruFog
0
Очень круто!
dezconnect
0
Серьезно. Я в 16 ковырял ядра всяких nix-like систем… до 3д руки так и не дошли =)
Demir0
0
Я просто позавидую тут. Надеюсь, когда нибудь и я так смогу…
thunderspb
0
Супер, что тут еще говорить! Ждем адаптации для всех браузеров :)
Xikell
+1
Все прекрасно, замечательно и круто, прям как в детстве, НО(!) — у меня у одного в четвертом эпизоде 4й уровень не проходится?
т.е. пройти то его можно, показывается время уровня, скольких убито, сколько секретов… А дальше, нажимаем что-нибудь, чтобы грузить следующий уровень, и все, пустота :(
SiPlus
0
Да, на e4m5 двери пересекаются. Буду код ещё раз проверять.
Xikell
0
спасибо. но плюсануть не могу, уж извините :)
SiPlus
0
Там, оказывается, не только двери пересекаются, ещё и мультиплеерная перегородка у выхода, видимо там ещё какая-то мультиплеерная дверь есть. Буду искать.
Xikell
0
не знал этого. когда я в кваку играл у меня был 100й пентиум, и никакого намека даже на интернет :)
но в целом, очень понравилась игра, прошел с удовольствием еще раз!)
SiPlus
0
Исправил. Я вместо >= 2 по ошибке написал === 2 в коде удаления энтитей по spawnflags, из-за этого энтити с флагом not in hard не удалялись на nightmare.

Спасибо за то, что заметили.
Xikell
0
аа… черт, да, я даже не догадался попробовать другую сложность.

Абсолютно не за что, Вам спасибо за такой порт!
Xikell
0
блин, все равно никак(
или старое сохранение безвозвратно запорото и надо заново проверять?
у меня сейв прям перед выходом, загружаюсь, вхожу в дверь — все тоже самое. (кеш браузера почистил раза 3 уже).

консоль говорит —
Uncaught Error: Host.abortserver Host.js:27
Host.Error Host.js:27
PF.objerror PF.js:22
PR.ExecuteProgram PR.js:810
SV.Physics_Pusher SV.js:1402
SV.Physics SV.js:1722
SV.SpawnServer SV.js:783
Host.Changelevel_f Host.js:542
Cmd.ExecuteString Cmd.js:207
Cmd.Execute Cmd.js:29
Host._Frame Host.js:210
Host.Frame
SiPlus
0
Старое сохранение не запорото, но E4M4 в этом сохранении будет выглядеть, как в сетевой игре, пока не перейдете на нём на другой уровень. А вы скачали обновленные файлы и Ctrl+F5 нажимали? В консоли build должен быть 41.

А Host.abortserver — не ошибка, а остановка выполнения скрипта до следующего кадра.
Xikell
0
на вкладке network, где должны быть имена файлов ПКМ -> Clear browser cache.

Ctrl+F5 не всегда адекватно чистит кеш почему-то. Да и конкретно в той вкладке работать не будет, откроет настройки мультиплеера.

Ни в консоли браузера, ни в консоли игры не нашел build, но надел его при начальной загрузке — (webQuake build 38). Открыл в другом браузере, в котором раньше не открывал, там тоже 38.
SiPlus
0
38 — это ооооочень старая версия.

Вот здесь на данный момент последняя версия — quaddicted.com/stuff/WebQuake/Client/WebQuake.htm (но конфиг слегка нестандартный). Увы, у меня нет доступа ни к одному из имеющихся серверов, на которых расположен WebQuake, поэтому обновлять версии на сайтах вовремя я не могу, но на Quaddicted админ обновляет довольно часто.

А Ctrl+F5, как и другие горячие клавиши браузера, надо нажимать в строке адреса, так как там нажатия не перехватываются.
Xikell
0
да, я там и играл. теперь обновилось, 41я, и на том же сейве все загрузилось.

Про строку браузера не подумал, в теле нажимал))
SiPlus
0
Добавил про строку адреса в readme.md.
Xikell
0
да, MAP E4M4 не находится на серве просто. MAP E4M5 уже на месте, но все равно не приятно, пришлось перепроходить с 5го уровня 4го эпизода, т.е. с последней руны начинать. А дальше, когда все руны собраны, в полу открывается проход, но он закрыт стеной. Не помню, чтобы такое раньше было.
Стену прошел noclip'ом конечно, но все равно, без читов в данный момент игру не пройти :(
SiPlus
0
Пройти можно было, но не на nightmare. Как я выше написал, уже можно и на nightmare пройти.
SiPlus
0
Открыл сервер на 16 игроков (больше не могу), не знаю, долго ли протянет.
quaddicted.com/stuff/WebQuake/Client/WebQuake.htm?+connect%20ws://webquakedm-7637.onmodulus.net
В Петербурге лагает, пинг 130.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Интересные публикации

Вакансии

Заказы