LINUX.ORG.RU

покритикуйте самописный рогалик

 , ,


24

10

На старости лет собрался что-нить игровое написать. Получился рогалик :)

онлайн-версия (бесплатно, без смс, хехе): http://www.wessense.org/

Есть бинарники для линуха, мака и винды, пакованные node-webkit. Короче, критикуйте, предлагайте фичи, тыкайте в баги и прочее.

Ответ на: комментарий от Shadow_Walker

Ну, тогда ясно, почему он 1гб через 30 минут работы отъел.

crutch_master ★★★★★ ()

Вот вам VIP релиз 0.90.1a, специально для L.O.R., больше нигде не публиковался:

1. Добавлены звуки - стрельбы, смертей и денег/бутылок.
2. Добавлена частичная поддержка i18n, то есть перевода на русский. См. переключатель в верхнем правом углу начального экрана. Пока переведено только вступление, квесты и настройки, остальное позже.

http://wessense.org/release/0.90.1a/
Если FF зависает на загрузке, обновите страницу еще несколько раз пока всё не закешируется. Я пока не понял, как сделать чтобы оно ~200 файлов без стопора закачивало. Chrome вроде нормально загружает, без остановок.

Ну и «бинарники», само собой непроверенные ни разу:
http://wessense.org/binaries/wessense-0.90.1a-linux32.tar.gz
http://wessense.org/binaries/wessense-0.90.1a-linux64.tar.gz

Кстати, посмотрел я расходы памяти в онлайн версии. FF 0.5 гига сразу резервирует при загрузке, и больше не просит. Chrome берет 0.8 гига, и еще потом зачем-то до полного гига памяти добирает. Так как в «бинарную» версию встроен хромиум, то он по идее ведет себя как хром. На самом деле больше нескольких десятков мегабайт оно не должно использовать.

Shadow_Walker ()
Ответ на: комментарий от Shadow_Walker

FF 0.5 гига сразу резервирует при загрузке, и больше не просит. Chrome берет 0.8 гига, и еще потом зачем-то до полного гига памяти добирает.

Охренеть приплыли. Простенькая игра - 1 гб оперативы. Оказывается это - нормально, а я думал, что течёт.

crutch_master ★★★★★ ()
Ответ на: комментарий от crutch_master

Так это ж браузер. Ему столько памяти вроде и не надо, но если есть - чего ж не отожрать, ради пары процентов прироста скорости :)

Shadow_Walker ()

планируется ли в перспективе огробление корованов и создание команды персонажей?

anonymous ()
Ответ на: комментарий от anonymous

создание команды персонажей

Гоп команду уже можно набрать в местной тошниловке (поставив им пива).

огробление корованов

И за одно эльфов, стражу дворца, да и собственно сам дворец.

crutch_master ★★★★★ ()
Ответ на: комментарий от crutch_master

Дворец какбэ уже есть, со стражей из Андедов. Эльфы тож есть.

Корованов пока нет, но спрайт с гномьей повозкой я где-то в Весноте видел. Действительно, что-й то я, без огробления корованов на лор сунулся.. Надо срочно исправляться :)

Shadow_Walker ()
Ответ на: комментарий от Shadow_Walker

./wessense: error while loading shared libraries: libudev.so.0: cannot open shared object file: No such file or directory

и в фаерфоксе перезагрузка страницы не помогает с кешированием

bnw ()

Иногда при разворачивании окна на весь экран возникает ошибка

Uncaught node.js Error 

TypeError: Cannot call method 'GetRangedRange' of undefined
    at Object.GAME.Display.UpdateDayNightLayer (file:///tmp/.org.chromium.Chromium.ZhTsiT/js/GAME.Display.js:52:54)
    at Object.GAME.Display.UpdateScreenResolution (file:///tmp/.org.chromium.Chromium.ZhTsiT/js/GAME.Display.js:788:8)
    at eval (file:///tmp/.org.chromium.Chromium.ZhTsiT/js/GAME.Display.js:108:22)
    at m.event.dispatch (file:///tmp/.org.chromium.Chromium.ZhTsiT/js/external/jquery/jquery-1.11.1.min.js:3:8436)
    at r.handle (file:///tmp/.org.chromium.Chromium.ZhTsiT/js/external/jquery/jquery-1.11.1.min.js:3:5139)

Версия wessense-0.90a-bf-linux64.

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

P.S. А сохранений действительно не хватает.

anonymous ()
Ответ на: комментарий от bnw

В файрфоксе перезагрузку делать надо не через F5, а через строку адреса (нажать еще раз), чтобы кеш не сбросился.. По крайней мере у меня в 31м ффоксе сработало. А хром вроде не затыкается, загружает без остановок.

Shadow_Walker ()

Было бы удобно, если бы zoom in/out был на мышином scroll-е.

Manhunt ★★★★★ ()

good work.
Понравилось сразу. Допили до уровня третьих героев - будут как танки. :)

hbars ★★★★ ()
Ответ на: комментарий от anonymous

Поправил вроде все обозначенные ошибки кроме курсора с тапками. И убрал прелоад звуков, потому как зависает, а браузер один черт ничего не буферизует похоже.

Последняя версия:
http://wessense.org/release/0.91a/

Расширил русскую локализацию, но пока не на 100%. Корованы тоже еще не сделаны :(

Shadow_Walker ()

У меня был нестреляющий рыцарь 25 уровня. Кастанул инферно на босса из «secondary objective». При каждом клике мышкой босс стал подгорать огнём, но бой по сути завис, ход перестал передеваться. Жалею, что не догадался заскриншотить.

Manhunt ★★★★★ ()
Последнее исправление: Manhunt (всего исправлений: 3)

10/10 Господи, на самом деле http://vk.cc/319Tsb . Поиграл минут 15, вроде на нетбуке нормально запускается, почему бы и не поиграть. Читать тред в падлу, с десурой что?

PavelRyzhov ()

Обновил до v0.92а:
http://wessense.org/release/0.92a/

Оффлайн-версии скачать можно по ссылкам на indiedb:
http://wessense.org/

Заклинания Дождь и Метеор вроде должны быть исправлены (кстати, они никогда до смерти не убивают, один хит у врага всегда остается). Текст всплывающих подсказок типа «+Х золота» теперь не должен накладываться друг на друга. Улучшен и расширен русский перевод.

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

http://wessense.org/release/0.92a/js/external/i18n/translations/wessense-en.json

http://wessense.org/release/0.92a/js/external/i18n/translations/wessense-ru.json

Присылайте переведенные и исправленные варианты на developer@wessense.org

Shadow_Walker ()
Ответ на: комментарий от Shadow_Walker

Релиз 0.93а, последний. Пора переписывать начисто с нуля, чтобы сделать нормальные кампании и сценарии как в Весноте.

http://wessense.org/release/0.93a/

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

SAVE/LOAD - либо через [OPTIONS] либо Ctrl+S / Ctrl+W / Ctrl+Q (quicksave)

Бинарники для Lin32/Lin64/Mac/Win берите с indiedb (без регистрации):

http://www.indiedb.com/games/wessense/downloads

Shadow_Walker ()
Ответ на: комментарий от crutch_master

А смысл в переписывании? Уже есть Battle for Wesnoth на С++/SDL2, его можно расширять и переписывать как нравится.

Shadow_Walker ()
Ответ на: комментарий от Shadow_Walker

Добавлен перевод на португальский.
http://wessense.org/release/0.93a/

Если есть желающие перевести на украинский или немецкий (я ж вижу что вы есть, и приходите отсюда) - присылайте переводы на developer@wessense.org

Шаблон для перевода:
http://wessense.org/release/0.93a/js/external/i18n/translations/wessense-en.json

Shadow_Walker ()
Ответ на: комментарий от Shadow_Walker

В игрушке есть встроенные читы. Жмем CTRL+C, появится окно ввода читов, в котором можно ввести следующие коды:

abracadabra
(+25 всей магии)

payday
(+500 монет)

power
(9x99 атака)

health
(999 хитов)

level N
(даст сразу уровень N. число подставить по желанию, но выше 30 уровня уже совсем неинтересно)

aura M
(даст ауру M - попробуйте heal или reflect)

god
(всего и сразу)

go X Y
( перенос в точку карты с координатами X Y, X=[0,1023], Y=[0,512] )

Shadow_Walker ()
Ответ на: комментарий от Shadow_Walker

По достижении 39 уровня thief-ом вездеходом на максимальной карте, все оставшиеся монстры щёлкаются как школота. Бутылочной магией практически не пользовался, собирал исключительно для продажи фарцовщику. Под конец только Fly использовал, чтобы заглядывать в изолированные подземелья.

Чё-то как-то баланс сил слабоват - нет врагов всех достижимых на карте уровней.

blexey ★★★★ ()

Баг

Монстр встаёт на стартовое место игрока. Игрок погибает. Пытаешься продолжить игру. Игра падает.

Виндовая версия wessense-0.93a-win.zip. Съела примерно 200 мегабайт.

anonymous ()

А можешь сделать анимашку более гладкой? Ну хотябы на CSS3 типа так:

#map {
    /* ... */
    -webkit-transition top ease-in-out 0.3s;
    transition top ease-in-out 0.3s;
    -webkit-transition left ease-in-out 0.3s;
    transition left ease-in-out 0.3s;
}
Не знаю через какие св-ва ты карту двигаешь, это только пример. Ну а те браузеры которые не понимают - пусть так и дергаются дальше.

deep-purple ★★★★★ ()

Почему карта не гексагональная?

O02eg ★★★★★ ()
Ответ на: комментарий от deep-purple

Хмм.. карта и монстры на отдельных зафикисированных канвасах отрисованы, их вот так запросто не подвигаешь через цсс. Карту можно попиксельно из невидимого буфера копировать со сдвигом для имитации плавного скроллинга, но пока руки не дошли. Да и монстров придется как-то синхронизировать с движением карты.

Shadow_Walker ()
Ответ на: комментарий от O02eg

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

Shadow_Walker ()
Ответ на: комментарий от Shadow_Walker

А, так там канвасы.. Они да - жрут прилично если перерендеривать попиксельно. С таким графоном можно было бы и на дивах сделать - меньше бы хавало ресурсов, ну и как я сказал выше - анимация была бы плавная на CSS3 доступна. Ну типа так:

<div id="map-wrapper" style="position: absolute;">
    <div id="map" style="position: relative;">
        // тут все объекты абсолютно позиционированые,
        // сначала ячейки карты и после них без всяких z-index все персы.
        // а двигать анимацией сам #map-wrapper, где герой всегда по центру,
        // в таком случае все вложения будут двигаться вместе с картой автоматом,
        // и синхрить ничего не придется руками
    </div>
</div>
Ну раз уже запилил на канвасах то чо уж теперь..

deep-purple ★★★★★ ()

не нужен. по ссылке не ходил, тред не читал.

t184256 ★★★★★ ()
Ответ на: комментарий от Shadow_Walker

Да фигня это - гекса только визуально можно изобразить. Единственное что - высота минимальной ячейки будет меньше её ширины. Для простоты можно взять пропорцию 2:1 например.

deep-purple ★★★★★ ()
Ответ на: комментарий от deep-purple

Пробовал уже отдельными дивами..
Ну давай считать обьекты на экране:

1. Тайлы (т.е. песок, вода, трава) - в среднем, видимых 20x10 тайлов, которые нужно рендерить раз за ход (игрок может их поменять магией). Если скроллить карту, то еще +2 тайла с каждого края. Целиковая карта - 1024 х 512 тайлов, в один слой сразу не влезет.

2. Террайн - горы, леса, домики разные - отдельный слой, потому как на домиках флаги развеваться должны (гифками делать, или таки рендером как сейчас?), да и лес-горы тоже могут быть изменены магией. Где-то 30% от количества тайлов = террайн.

3. Вражеские юниты и герой - около десятка-двух видимых на экране, и еще полторы-две тыщи невидимых (полная карта). Замучаешься создавать и убивать дивы, да и мерцать будет при создании. Да и с размерами этих дивов трудно, ведь некоторые юниты могут быть больше чем 72х72 пикселя. И zindex тоже менять на ходу придется чтобы юниты друг-друга заслоняли правильно.. С канвасом этих проблем просто нет.

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

Или я чего-то не понимаю и всё гораздо проще? Где посмотреть образец?

Shadow_Walker ()
Ответ на: комментарий от Shadow_Walker

1) видимых 20х10 - копейки, «рендерить» можно сразу все 1024х512. Как? Задать каждому типу тайла свой класс, типа water, sand, adobs, etc. в стилях прописать это бекраундами тайла. Скроллить карту - я бы перемещал её по top/left CSS по сетке соразмерной (кратной) ячейкам(тайлам). А видимой была бы только часть карты.

2) Какие нафик гифки? Вот в этих кусочках ты можешь впиливать маленькие канвасики, т.к. маленькие канвасики это дешевле по ресурсам чем один огроменный, где ты вынужден перерендеривать его ВЕСЬ даже если поменял только один объектик на нем. 30% не 100% ))

3) Любого перса или другой объект нужно делать в виде релативной (невидимой) обертки, где внутри уже размещать канвасики если нужна анимашка или просто дивы которые типа выпирают из ширины обертки, в том числе и тупо png картинки. Те персы и объекты которые не видны в данный момент на экране (ну или не находятся в области досягаемости героя, типа дальность стрельбы и все такое) тупо не обрабатывать - няхай стоят зафризеные, ждут когда игрок переместится в то место карты. Координаты пересечения взаимодействия - ты же не «визуально» обсчитываешь надеюсь? И самое главное - z-index === зло! Используй его только когда совсем припрёт. А так без него совершенно легко можно обходиться - элементы которые должны быть слоем ниже просто вставь в DOM раньше тех, которые должны быть выше. «Убитые» дивы можно использовать повторно, например через некоторое время кровь пропадает и див остается не при делах - но это уже микрооптимизация.

4) Спецэффекты - зависимые канвасы/дивы от объектов, которые их «генерируют». Ну типа, перс стреляет или нож кидает и все такое. Просто траекторию и/или область действия рассчитывать не абсолютно от угла карты, а релативно от положения перса/объекта, и все.

Не, я понимаю что не все так просто. Тем не менее, такие дела, да..

Нет, живой пример не приведу, просто есть некоторый опыт.

deep-purple ★★★★★ ()
Ответ на: комментарий от Shadow_Walker

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

У меня знакомый ради прикола брал большую картинку, раскладывал её по пикселям и генерил каждый пиксель как див вот так:

<div style="position: absolute;
            top: вертикальная позиция пикселя;
            left: горизонтальная позиция пикселя;
            background: цвет пикселя;"></div>
И нормально все было, браузер это тянет. Тут понятно конечно, что от мощи машинки многое зависит, тем не менее можно сказать что эксперимент удался - ведь это огромное кол-во объектов в DOM'е.

deep-purple ★★★★★ ()
Ответ на: комментарий от deep-purple

Хе, бэкграундами прописать. Там же сглаживания тайловые есть - скругления. Это посчитанные накладки соседнего тайла поверх текущего, с учетом соседей соседа. В одном тайле может быть восемь перехлестов с соседями. Без сглаживаний получатся четкие рубленые квадраты, что не очень здорово выглядит. Я ж всё перерисовываю именно поэтому - если поменялся один тайл, его соседи (и иногда их соседи) обязаны быть перерисованы тоже из-за сглаживаний.

Тупо пнг картинки для анимации - это как? Файербол меняет шесть картинок в секунду - будет очень заметное мерцание если картинке сорс менять. Статичные использовать вообще не вариант.

«zindex = зло», да? Представь, что в центре экрана - дракон, который сильно больше одного нормального тайла по размеру. Вокруг него бегает юнит, который должен быть перекрыт драконом когда он сверху, и сам немножко закрывает дракона когда он в ряду снизу. Вынимать див с юнитом, и вставлять его в нужную часть ДОМа на каждый шаг? Или «переиспользовать» дивы сетки, перевставляя картинки и стили с бекграундами (меняя размеры, потому что юниты больше или меньше тайлов)? И таких юнитов до двух десятков на экране. Вот это будет знатный геморрой..

Shadow_Walker ()
Ответ на: комментарий от deep-purple

«И нормально все было, браузер это тянет» - ого не угу. Еще раз посчитаем мой случай: 1024 x 512 (карта) x 72 x 72 (размер тайла) x 4 байта (цвет) = 10,871,635,968 байт или 10 гигабайт памяти только под игровое поле, без всего остального. В дивах или без дивов, но если создать полмиллиона дивов с таким количеством графики то браузер сдохнет в момент, попытавшись это в буфере удержать. У кого столько памяти есть в ноутбуке? Мощность - ерунда, память наше всё :)

Shadow_Walker ()
Ответ на: комментарий от Shadow_Walker

Там же сглаживания тайловые есть - скругления

Т.е. наложения, например переход трва-песок. А какая разница? Ты всеравно жи перерисовываешь. Ну заготовить комбинированные бекграунды. Один хрен это паттерны заливки. Я понимаю что комбинаций много. И что с того? Тут только подход иной.

пнг картинки для анимации - это как?

Не так, а: канвас, див или пнг. Запятые ж расставил. А ты думаешь анимация в канвасе отличается от анимации в диве? Нисколько. Кстати вместо замены src или background-image надо брать спрайт и двигать его background-position с нужной скоростью. А еще и большинство картинок хранить можно сразу в стилях в base64.

«zindex = зло», да?

Да, но я ж не говорил совсем его не использовать.

«переиспользовать» дивы сетки, перевставляя картинки и стили с бекграундами

Ну конечно - сначала нужно описать нормально в стилях так, чтобы диву было достаточно указать пару-тройку нужных классов. Это очень быстро:

el.className = 'a b c d';
И все за тебя посчитают, какие бекграунды подтянуть и все такое.

посчитаем мой случай: 1024 x 512 (карта) x 72 x 72 (размер тайла) x 4 байта (цвет) = 10,871,635,968 байт или 10 гигабайт

Для канваса можно применить те же расчеты, работает же как-то )) А, ну да - ты же отрисовываешь только кусок карты. А что мешает сделать так на дивах? А-ля кольцевой буфер - ведь кол-во видимых тайлов всегда одинаковое.

deep-purple ★★★★★ ()

Хорошая же была игра. Что случилось и где можно скачать последнюю версию?

anonymous ()
Ответ на: комментарий от peregrine

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

anonymous ()

Рогалики надо писать на C/ncurses.

saahriktu ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.