LINUX.ORG.RU

Aquaria уже Open Source!

 , , , ,


0

0

Bit Blot наконец-то выложили исходный код своей игры Aquaria.

Aquaria - это indie-игра в жанре двухмерного скроллера. Главная героиня игры - русалка Найя (англ. Naija), исследующая огромный подводный мир Акварии. Путешествуя, она узнает и об истории мира, и о собственном прошлом. Хищные чудовища поджидают беззащитную жертву, проклятые боги притаились в заброшенных храмах, а покинутые подводные города ждут возвращения своих обитателей.

Напомню, что почти месяц назад, в рамках акции Humble Indie Bundle было объявлено об открытии исходников таких игр как Aquaria, Gish, Lugaru HD и Penumbra: Overture. Таким образом, Aquaria - это последняя игра из набора, исходники которой стали доступными под GPL v2+. Тем не менее, игровые данные остаются закрытыми, и их необходимо купить.

Wolfire Games, организаторы акции, благодарят всех разработчиков за содействие, а также Ryan Gordon за то, что сделал все это возможным. Также, они благодарят сообщество за то, что мгновенно отозвались о событии, и надеются в скором будущем включить многие из уже присланных патчей.

>>> Подробности

★★

Проверено: isden ()
Последнее исправление: onix_N (всего исправлений: 4)

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

А они и не обещали, так что глупо их в чем-то обвинять.

По теме: хорошо, что все игры теперь выложили в DVCS (Aquaria, Gish и Lugaru HD в Mercurial на Icculus и Penumbra в Git на GitHub'е), а то тарбол Gish'а огорчал кроме всего прочего, тем, что было не понятно как его будет возможно обновить.

X-Pilot ★★★★★
()

На кладбище опен сурс игр пополнение !

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

Ну, это как аргумент против Jabber'а у некоторых личностей: «в ICQ можно искать людей, поэтому Jabber - хуже» ;) Это же DVCS все-таки (надеюсь, расшифровывать букву «D» не нужно? ;) )!

X-Pilot ★★★★★
()
Ответ на: комментарий от ChALkeR

Пруф?

В хг нашел только вот:

http://hg.icculus.org/icculus/aquaria/raw-file/75924df9cbe8/CONTENT-LICENSE.txt

Aquaria's game data are not under the same license as the source code.

Redistribution of the game data is forbidden. Please buy a copy of the game to obtain the data files.

The game can be legally obtained in several ways at the time of this writing, including Steam, the Humble Indie Bundle, Ambrosia Software, etc.

http://www.bit-blot.com/aquaria/buy.html

The source code to the game is licensed under the GNU GPL2.

По идее должно быть:

GNU GPL version 2 or any later version

Хотя... в сорцах:

Aquaria is free software; you can redistribute it and/or

modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

Странно. Что-то они сеют диссонанс...

Короче, fixed. + добавлена ссылка на офблог Холовки.

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

У ридми приоритет ниже, чем у шапки каждого файла.

В шапках — GPLv2+.

А ридми это только описание. Точно так же, они не обязаны прикладывать все варианты GPL, так что в COPYING.txt GPLv2.

ChALkeR ★★★★★
()

> Главная героиня игры - русалка Найя

Дальше не читал.

anonymous
()

icculus - мой новый герой, ага. :)

cruxish ★★★★
()

Либо там у них ЛОР-эффект, либо они блочат китай. Фошисты

ArtemZ
()

Посмотрел ролик так и не понял в чем смысл данной игры

daemontux
()

>что мгновенно отозвались о событии

Может «что мгновенно отозвались НА событие?!

GladAlex ★★★★★
()

хм, а ничего так игруля.
Да, новость тоже радует.

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

> Может «что мгновенно отозвались НА событие?!

Слово „отзываться“ имеет несколько значений, если чо.

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

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

X-Pilot ★★★★★
()

Русалочка, русалочка вернулась!
/me счастливо улыбается

darkshvein ☆☆
()

аркады не нужны

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

>Читайте http://hg.icculus.org/icculus/aquaria/file/95890e70f28e/Aquaria/Avatar.cpp затем хороните. Очередной криворукий высер.

Расскажи нам, что там не так.

Кстати если там что-то не так, то это пример сторонникам проприетарщины, которые верят что там то всегда идеальный код.

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

Глобальные переменные, при том что Avatar это вроде как бы класс, обилие комментариев, дохрена магических чисел, разброд в форматировании кода,

Rudcozt
()

> Aquaria

Что это было, Скалли?!

Открыли бы мне бы Operation Flashpoint,без остального можно обойтись.

Dimka-Bo
()

лучше бы world of goo открыли :(

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

>А файл длиной добрых 10 тысяч строк уже никого не удивляет?

лично у меня претензия к коду только именно по этому вопросу. сам код - черт с ним, не вникал. просто первое, что прикидываешь на оценку объема погружения это как раз-таки размер файла. я в свое время также проблевался на Tora: 600килобайт один файл - это какой-то пи**ец.

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

>Глобальные переменные, при том что Avatar это вроде как бы класс

Ну у них там вроде бы константы, так что их можно и глобально держать, хотя и некрасиво.

А что 2к строк - ну это же OnUpdate, там все основные действия. Если бы они его разбили на кучу мелких функций, вышло бы 2к строк, но ещё менее понятно.

anonymous
()

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

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

Я сначала подумал, что это С, увидев два рулона глобальных переменных. Затем я увидел классы и понял, что, наверное, так и надо писать игры. Не, ну я игры никогда не писал, может, там так принято? Но там ещё и посреди кода между методами - глобальные переменные, так, по-моему, нигде не принято.

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

Во-первых, не только константы, а во-вторых, они ещё и посреди файла там и сям раскиданы. Дабы подперчить.

queen3 ★★★★★
()

> if (!(state.lockedToWall || state.dodgeEffectTimer.isActive()) && _isUnderWater && dsq->continuity.getWorldType() == WT_NORMAL && canMove)

Я думал, в наше время такие вещи в играх пишутся на скриптовых языках / DSL либо как-нибудь таблично/декларативно. Ну, там, state machine, и прочая.

Я на самой первой своей работе писал эмулятор работы железа с сотнями тумблеров и лампочек, включая аналоговые вещи типа электродвигателя, плюс эмуляция различных неисправностей. Тоже на С++ с кучей С-шных условий. До сих пор немного стыдно. ИЧСХ, через два года этот код превратися в такое УГ, что любое новое требование (скажем, тумблер) вызывало непреодолимое желание съездить в отпуск, ибо разбираться, как что там работает, было уже решительно невозможно.

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

>Я думал, в наше время такие вещи в играх пишутся на скриптовых языках / DSL либо как-нибудь таблично/декларативно. Ну, там, state machine, и прочая.

А как ты предлагаешь написать процитированное тобой условие на скриптовых языках?

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

Процитированное - не знаю, зависит от компонентов игры. Могу сказать за свой случай. Я вижу два выбора:

1. Разбитие оборудования на блоки и обмен событиями между ними. Это решило бы и проблему, которая стоила больших нервов и времени - переход на эмуляцию похожего, но другого оборудования. Скажем, разных типов электродвигателей, когда его реакции не зашиты в 50 С-шных функций по всему коду.

2. Эмуляция не реакий оборудования, а реальных схем, по типу эмуляторов электроцепей. Т.е. ниже уровнем, и затем слушать Switch on/off. Тоже можно было бы применять разные двигатели, более того, можно было бы отображать схему на экране, записывать/replay-ить для студентов, и т.п.

В принципе, обычная плагиновая архитектура. Основная проблема - не «заменить процитированное условие», а выделить максимально слабосвязанные блоки и формализовать интерфейсы между ними. Как дополнительный вариант - подумать об эмуляции реальной физики (у меня - токи, в игре - потоки ;-).

А то, что я там вижу - это, конечно, работает, но напоминает исходники MSHTML (по сравнению, наверное, с Gecko, хотя их я и не видел, но результат налицо). Куча условий, хаков, никакой гибкости.

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

Вообще, насколько я понял, icculus будет заниматься кодом, так что в ближайшее время ситуация должна измениться к лучшему.

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

>Разбитие оборудования на блоки и обмен событиями между ними. Это решило бы и проблему, которая стоила больших нервов и времени - переход на эмуляцию похожего, но другого оборудования. Скажем, разных типов электродвигателей, когда его реакции не зашиты в 50 С-шных функций по всему коду.

Еще немного, еще немного, и вы изобретете ООП, с наследованием и инкапсуляцией.

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

Это ты предложил очень сложную вещь.

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

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

Видимо создатели акварии торопились, и потому писали как получается.

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

Например, было у меня типа такого (псевдокод):

function check_lamp2()
{
  if (switch1 && switch2 && !IsError(45) && time_from_switch2_on > 5000) 
    lamp2 = red;
}

А надо бы было

lamp2:
  red: switch1 switch2 !error(45) 
switch0:
  cascade: switch1
switch1:
  if: switch0
  cascade: lamp2
switch2:
  if: switch0
  cascade: relay_for_switch2
relay_for_switch2:
  if: switch2
  delay: 5000
  cascade: lamp2

Ну, типа такого. С-шный вариант выглядит короче, но это заблуждение, когда таких проверок тысячи, и в каждой взаимоперекрещивающиеся условия (скажем, по десятку зависимых if, и десятку cascade, на каждый из пары сотен акторов).

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

Но я не специалист по играм, может, и в самом деле все они так и пишутся. Может, для игр это нормально.

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