LINUX.ORG.RU — Русская информация об ОС Linux

[#]  
onix_N

Aquaria уже Open Source!

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

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

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

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

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

Метки: gpl, indie, opensource, игры, история успеха

onix_N * (03.06.2010 16:40:20)
Проверено: isden (04.06.2010 13:38:47)
Juick

[#]  
Viglim

А 2dBoy WorldOfGoo за#опили. Печально.

Viglim * (03.06.2010 16:52:33)
[#] Ответ на: комментарий от Viglim 03.06.2010 16:52:33  

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

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

X-Pilot **** (03.06.2010 17:34:46)
[#]  

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

gamecoder (03.06.2010 17:48:49)
[#] Ответ на: комментарий от X-Pilot 03.06.2010 17:34:46  

Гиш же тоже на гитхабе выложили. Правда не авторы.

iSage ** (03.06.2010 17:49:19)
[#] Ответ на: комментарий от iSage 03.06.2010 17:49:19  

Да, я видел, но хочется, чтобы именно этот был "центральным" и хотя бы изредка обновлялся.

X-Pilot **** (03.06.2010 17:56:29)
[#] Ответ на: комментарий от X-Pilot 03.06.2010 17:56:29  

На гитхабе зато удобней, сразу видно форки всякие.

iSage ** (03.06.2010 18:23:38)
[#] Ответ на: комментарий от iSage 03.06.2010 18:23:38  

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

X-Pilot **** (03.06.2010 20:03:40)
[#]  
ChALkeR

>под GPL v2.

Там GPLv2+, я проверял. Исправь, пожалуйста.

ChALkeR **** (03.06.2010 20:21:36)
[#]  
runtime

Отличная новость !

runtime ** (03.06.2010 20:54:33)
[#] Ответ на: комментарий от ChALkeR 03.06.2010 20:21:36  
onix_N

Пруф?

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

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 * (03.06.2010 21:01:39)
[#] Ответ на: комментарий от onix_N 03.06.2010 21:01:39  
ChALkeR

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

В шапках — GPLv2+.

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

ChALkeR **** (03.06.2010 21:20:54)
[#]  
trueshell

Эх, был бы я помоложе

trueshell ** (04.06.2010 13:41:47)
[#]  

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

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

anonymous (04.06.2010 13:43:43)
[#]  
cruxish

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

cruxish ** (04.06.2010 13:51:14)
[#]  
ArtemZ

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

ArtemZ * (04.06.2010 13:54:57)
[#]  

Aquaria уже Open Source!

Free Software же!

Alan_Steel ** (04.06.2010 13:55:44)
[#]  
pevzi

Ура, чо!

pevzi **** (04.06.2010 13:57:14)
[#]  

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

daemontux (04.06.2010 13:57:54)
[#] Ответ на: комментарий от X-Pilot 03.06.2010 17:34:46  
pevzi

> А они и не обещали

Ну он так и сказал, зажопили (:

pevzi **** (04.06.2010 13:58:30)
[#]  
GladAlex

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

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

GladAlex ***** (04.06.2010 14:02:42)
[#]  
o4kareg

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

o4kareg * (04.06.2010 14:02:44)
[#] Ответ на: комментарий от GladAlex 04.06.2010 14:02:42  
pevzi

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

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

pevzi **** (04.06.2010 14:04:39)
[#] Ответ на: комментарий от pevzi 04.06.2010 13:58:30  

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

X-Pilot **** (04.06.2010 14:11:23)
[#]  

а по ссылке купить, кстати, нет линуксового пакета.

awesome * (04.06.2010 14:31:56)
[#]  
darkshvein

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

darkshvein *# (04.06.2010 14:41:50)
[#] Ответ на: комментарий от awesome 04.06.2010 14:31:56  
darkshvein

Какой ещё пакет? сырцы же, читайте внимательнее

darkshvein *# (04.06.2010 14:42:42)
[#]  

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

anonymous (04.06.2010 14:58:05)
[#]  

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

anonymous (04.06.2010 15:01:10)
[#] Ответ на: комментарий от anonymous 04.06.2010 14:58:05  

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

И что там криворукого? Вполне нормальный код.

anonymous (04.06.2010 15:35:00)
[#] Ответ на: комментарий от anonymous 04.06.2010 14:58:05  

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

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

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

anonymous (04.06.2010 15:36:15)
[#] Ответ на: комментарий от anonymous 04.06.2010 15:35:00  

Функция длиной >2000 строк это нормальный код, да.

7194 - 9440

Rudcozt (04.06.2010 15:39:10)
[#] Ответ на: комментарий от Rudcozt 04.06.2010 15:39:10  

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

Rudcozt (04.06.2010 15:44:00)
[#] Ответ на: комментарий от Rudcozt 04.06.2010 15:39:10  
EvilBlueBeaver

> Функция длиной >2000 строк это нормальный код, да.

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

EvilBlueBeaver * (04.06.2010 15:47:36)
[#]  
Dimka-Bo

> Aquaria

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

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

Dimka-Bo * (04.06.2010 15:53:13)
[#]  
jcd

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

jcd *** (04.06.2010 16:07:41)
[#] Ответ на: комментарий от EvilBlueBeaver 04.06.2010 15:47:36  
halturin

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

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

halturin ***** (04.06.2010 16:16:01)
[#] Ответ на: комментарий от Rudcozt 04.06.2010 15:44:00  

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

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

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

anonymous (04.06.2010 16:20:29)
[#]  
gh0stwizard

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

gh0stwizard **** (04.06.2010 16:27:31)
[#] Ответ на: комментарий от anonymous 04.06.2010 14:58:05  
queen3

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

queen3 ** (04.06.2010 16:30:03)
[#] Ответ на: комментарий от anonymous 04.06.2010 16:20:29  
queen3

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

queen3 ** (04.06.2010 16:31:46)
[#]  
queen3

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

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

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

queen3 ** (04.06.2010 16:39:16)
[#] Ответ на: комментарий от Rudcozt 04.06.2010 15:39:10  
true_admin

вы ещё просто исходники Python-to-C не видели http://www.linux.org.ru/forum/development/4959204?lastmod=1275579250647

true_admin ***** (04.06.2010 16:42:42)
[#] Ответ на: комментарий от queen3 04.06.2010 16:39:16  

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

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

anonymous (04.06.2010 16:45:02)
[#] Ответ на: комментарий от anonymous 04.06.2010 16:45:02  

Перепроектировать архитектуру приложения.

Rudcozt (04.06.2010 16:51:09)
[#] Ответ на: комментарий от anonymous 04.06.2010 14:58:05  
cruxish

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

Хм, а где именно читать? Там over 9000 строк кода, но то, что я увидел - вполне нормально, вроде.

cruxish ** (04.06.2010 16:51:26)
[#] Ответ на: комментарий от anonymous 04.06.2010 16:45:02  
queen3

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

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

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

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

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

queen3 ** (04.06.2010 16:54:34)
[#] Ответ на: комментарий от cruxish 04.06.2010 16:51:26  
cruxish

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

cruxish ** (04.06.2010 16:56:07)
[#] Ответ на: комментарий от queen3 04.06.2010 16:54:34  

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

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

Zhid (04.06.2010 17:30:20)
[#] Ответ на: комментарий от queen3 04.06.2010 16:54:34  

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

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

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

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

anonymous (04.06.2010 17:39:37)
[#] Ответ на: комментарий от anonymous 04.06.2010 16:45:02  
queen3

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

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 ** (04.06.2010 17:40:40)

О Сервере - Правила форума
http://www.linux.org.ru/

Rambler's Top100 Рейтинг@Mail.ru