Как стать автором
Обновить

Комментарии 52

Видео понравилось, надеюсь игра также не разочарует, люблю иногда поиграть в Mahjong. Интересует также вопрос технологий, которые использовались, игра писалась на питоне, плюс я так понимаю использовался Blender, очень интересно было бы почитать статью на эту тему.
Игра писалась на C++ с использованием OGRE 3D. Подробности можно найти в статье, которая упомянута в конце. А более полный рассказ о том как игра сделана, как к этому шли и на какие грабли наступали, планируем ближе к релизу.

А Blender использовался только для того чтобы смоделить и затекстурить фишки.
Ох, а я думал, что самый приятный маджонг — это тот, что в составе кед.
Но ваш, судя по видео, намного лучше.
Скачаю, попробую.
Спасибо :)
Рано обрадовался.

./mj: line 21: 5561 Segmentation fault LD_LIBRARY_PATH=./lib ./lib/mj-bin ./lib ./res

Aptosid (Debian sid) x64
Если лог интересен, могу выслать.
Правда он выглядит оборвавшимся (буфер не сброшен из-за сегфолта видимо).
Лог очень интересен. Мы тестировали игру на нескольких машинах и нескольких операционках, включая Debian (правда Squeeze, не Sid). Но не все комбинации железа/софта удалось проверить, есть сообщения о падениях. Будем разбираться.
Если подскажете, как собрать dev-версию и gdb-ом поймать сегфолт — смогу сказать, где именно крашится.
Я просто gdb к сожалению редко юзаю, мало опыта, не помню почти ничего. Но если поможете — буду рад дать больше информации.
Ссылку на лог сейчас в личку скину.
Посмотрел лог. Ругается на отсутствие файла GLX_icon.png в каталоге res.
Игра запускалась shell-скриптом mj из каталога mj-0.7-linux64?
Совершенно верно.
Я тоже обратил внимание на эту строку, и проверил наличие файла. Он там лежит.
(«Совершенно верно» — это я про то, что запускал игру именно этим шелл скриптом именно из этого каталога).
Интересная ситуация… Что-то сходу не могу придумать возможной причины.
Ждем утра и появления хабраюзера kornerr в обсуждении.
Эта ошибка ни на что не влияет. Она ожидаемая.
Скачайте версию для отладки:
sourceforge.net/projects/osrpgcreation/files/Mahjong/dev/mj-0.7-linux64-debug.7z/download
Она без папки ресурсов идёт, поэтому возьмите её из исходного арива, называется res.
Далее из директории отладочной игры выполните:
LD_LIBRARY_PATH=./lib gdb --args ./lib/mj-bin ./lib ./res
Далее «run» для запуска.
После падение наберите «bt».
Полученную информацию давайте мне.
#0 0x00007fffef950644 in ?? () from /usr/lib/libnvidia-glcore.so.270.41.06
#1 0x00007fffef952bc8 in ?? () from /usr/lib/libnvidia-glcore.so.270.41.06
#2 0x00007ffff0b665e7 in ?? () from /usr/lib/libGL.so.1
#3 0x00007fffef7d7980 in ?? () from /usr/lib/libnvidia-glcore.so.270.41.06
#4 0x00007fffef815064 in ?? () from /usr/lib/libnvidia-glcore.so.270.41.06
#5 0x00007fffef7da1c9 in ?? () from /usr/lib/libnvidia-glcore.so.270.41.06
#6 0x00007ffff10b18a4 in Ogre::GLFBOManager::detectFBOFormats (this=0x87bf00)
at /root/build/ogre/src/RenderSystems/GL/src/OgreGLFBORenderTexture.cpp:367
#7 0x00007ffff10b1fba in Ogre::GLFBOManager::GLFBOManager (this=0x87bf00, atimode=112)
at /root/build/ogre/src/RenderSystems/GL/src/OgreGLFBORenderTexture.cpp:121
#8 0x00007ffff10ccb3a in Ogre::GLRenderSystem::initialiseFromRenderSystemCapabilities (this=0x781ad0,
caps=0x875a30, primary=0x7b54a0) at /root/build/ogre/src/RenderSystems/GL/src/OgreGLRenderSystem.cpp:841
#9 0x00007ffff10d05a1 in Ogre::GLRenderSystem::_createRenderWindow (this=0x781ad0, name=..., width=1, height=1,
fullScreen=false, miscParams=0x7fffffffd860)
at /root/build/ogre/src/RenderSystems/GL/src/OgreGLRenderSystem.cpp:1051
#10 0x00007ffff7072d01 in Ogre::Root::createRenderWindow (this=0x76a9e0, name=..., width=8902256, height=4019534584,
fullScreen=, miscParams=0x1) at /root/build/ogre/src/OgreMain/src/OgreRoot.cpp:1192
#11 0x00007ffff6af31e2 in mjin::Application::Application (this=0x76a270, dirPlugins=...)
at /media/sf_root/home/kornerr/cpp/mjin/src/mjin/Application.cpp:25
#12 0x00000000004b8d3e in mj::Application::Application (this=0x7fffffffde80, dirPlugins=..., dirResources=...)
at /media/sf_root/home/kornerr/cpp/mj/src/mj/Application.cpp:31
#13 0x00000000004bb814 in main (argc=3, argv=0x7fffffffe2a8) at /media/sf_root/home/kornerr/cpp/mj/src/main.cpp:26
Легче дрова обновить.
Игру собирать надо, как описано здесь: code.google.com/p/ogstudio/wiki/InstallMJIN
Там скачивается и компилится нужный огр с нужными параметрами.
Дрова последние же?
Собрать так и не осилил к сожалению, ругается при сборке OIS, CEGUI, и не может установить alure из-за нехватки прав. Ну нехватка прав понятна, я ж не из под рута ./install запускаю.
Однако света на то, как это должно быть собрано, оно не проливает.
Может, тогда downgrade дров попробовать?
Запускать надо из-под root.
Сначала надо выполнить ./download, а потом ./install, как сказано в документе.
При построении OIS:

libtool: link: g++ -g -O2 -o .libs/ConsoleApp OISConsole.o -L../src /root/build/ois-1.2.0/ois/src/.libs/libOIS.so
/usr/bin/ld: OISConsole.o: undefined reference to symbol 'XNextEvent'
/usr/bin/ld: note: 'XNextEvent' is defined in DSO /usr/lib64/libX11.so.6 so try adding it to the linker command line
/usr/lib64/libX11.so.6: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
make[1]: *** [ConsoleApp] Error 1
make[1]: Leaving directory `/root/build/ois-1.2.0/ois/demos'
make: *** [install-recursive] Error 1


При построении ogre:

In file included from /root/build/ogre/src/OgreMain/src/OgreEdgeListBuilder.cpp:34:0:
/root/build/ogre/src/OgreMain/include/OgreOptimisedUtil.h:212:52: error: ‘ptrdiff_t’ has not been declared
/root/build/ogre/src/OgreMain/include/OgreOptimisedUtil.h:222:56: error: ‘ptrdiff_t’ has not been declared
make[2]: *** [OgreMain/CMakeFiles/OgreMain.dir/src/OgreEdgeListBuilder.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs…
In file included from /root/build/ogre/src/OgreMain/src/OgreEntity.cpp:51:0:
/root/build/ogre/src/OgreMain/include/OgreOptimisedUtil.h:212:52: error: ‘ptrdiff_t’ has not been declared
/root/build/ogre/src/OgreMain/include/OgreOptimisedUtil.h:222:56: error: ‘ptrdiff_t’ has not been declared
make[2]: *** [OgreMain/CMakeFiles/OgreMain.dir/src/OgreEntity.cpp.o] Error 1
make[1]: *** [OgreMain/CMakeFiles/OgreMain.dir/all] Error 2
make: *** [all] Error 2
[ 1%] Building CXX object OgreMain/CMakeFiles/OgreMain.dir/src/OgreEdgeListBuilder.cpp.o
In file included from /root/build/ogre/src/OgreMain/src/OgreEdgeListBuilder.cpp:34:0:
/root/build/ogre/src/OgreMain/include/OgreOptimisedUtil.h:212:52: error: ‘ptrdiff_t’ has not been declared
/root/build/ogre/src/OgreMain/include/OgreOptimisedUtil.h:222:56: error: ‘ptrdiff_t’ has not been declared
make[2]: *** [OgreMain/CMakeFiles/OgreMain.dir/src/OgreEdgeListBuilder.cpp.o] Error 1
make[1]: *** [OgreMain/CMakeFiles/OgreMain.dir/all] Error 2
make: *** [all] Error 2


При построении CEGUI:

In file included from ../../cegui/include/CEGUIEvent.h:31:0,
from ../../cegui/include/CEGUIAnimationInstance.h:34,
from CEGUIAnimationInstance.cpp:30:
../../cegui/include/CEGUIString.h:65:11: error: 'ptrdiff_t' does not name a type
In file included from ../../cegui/include/CEGUIAffector.h:33:0,
from CEGUIAffector.cpp:30:
../../cegui/include/CEGUIString.h:65:11: error: 'ptrdiff_t' does not name a type
In file included from ../../cegui/include/CEGUIAnimation.h:33:0,
from CEGUIAnimation.cpp:30:
../../cegui/include/CEGUIString.h:65:11: error: 'ptrdiff_t' does not name a type
make[3]: *** [libCEGUIBase_la-CEGUIAnimationInstance.lo] Error 1
make[3]: *** Waiting for unfinished jobs…
make[3]: *** [libCEGUIBase_la-CEGUIAnimation.lo] Error 1
make[3]: *** [libCEGUIBase_la-CEGUIAffector.lo] Error 1
make[3]: Leaving directory `/root/build/cegui/cegui/src'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/root/build/cegui/cegui/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/root/build/cegui/cegui'
make: *** [all-recursive] Error 1
Making install in.
make[1]: Entering directory `/root/build/cegui'
make[2]: Entering directory `/root/build/cegui'
make[2]: Nothing to be done for `install-exec-am'.
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/root/build/cegui'
make[1]: Leaving directory `/root/build/cegui'
Making install in cegui
make[1]: Entering directory `/root/build/cegui/cegui'
Making install in.
make[2]: Entering directory `/root/build/cegui/cegui'
make[3]: Entering directory `/root/build/cegui/cegui'
make[3]: Nothing to be done for `install-exec-am'.
test -z "/usr/local/lib/pkgconfig" || /bin/mkdir -p "/usr/local/lib/pkgconfig"
/usr/bin/install -c -m 644 CEGUI.pc CEGUI-OPENGL.pc '/usr/local/lib/pkgconfig'
make[3]: Leaving directory `/root/build/cegui/cegui'
make[2]: Leaving directory `/root/build/cegui/cegui'
Making install in src
make[2]: Entering directory `/root/build/cegui/cegui/src'
Making install in.
make[3]: Entering directory `/root/build/cegui/cegui/src'
/bin/bash ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../cegui/include -I../../cegui/include -I/usr/include/freetype2 -g -O2 -MT libCEGUIBase_la-CEGUIAffector.lo -MD -MP -MF .deps/libCEGUIBase_la-CEGUIAffector.Tpo -c -o libCEGUIBase_la-CEGUIAffector.lo `test -f 'CEGUIAffector.cpp' || echo './'`CEGUIAffector.cpp
libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../cegui/include -I../../cegui/include -I/usr/include/freetype2 -g -O2 -MT libCEGUIBase_la-CEGUIAffector.lo -MD -MP -MF .deps/libCEGUIBase_la-CEGUIAffector.Tpo -c CEGUIAffector.cpp -fPIC -DPIC -o .libs/libCEGUIBase_la-CEGUIAffector.o
In file included from ../../cegui/include/CEGUIAffector.h:33:0,
from CEGUIAffector.cpp:30:
../../cegui/include/CEGUIString.h:65:11: error: 'ptrdiff_t' does not name a type
make[3]: *** [libCEGUIBase_la-CEGUIAffector.lo] Error 1
make[3]: Leaving directory `/root/build/cegui/cegui/src'
make[2]: *** [install-recursive] Error 1
make[2]: Leaving directory `/root/build/cegui/cegui/src'
make[1]: *** [install-recursive] Error 1
make[1]: Leaving directory `/root/build/cegui/cegui'
make: *** [install-recursive] Error 1


После всего этого закономерно не собирается MJIN, ругаясь на отсутствие OGRE и CEGUI (ois-dev я установил аптом)
З.Ы. Огр, скачанный из репов, в дефолтной конфигурации компилится без проблем.
Могу только порекомендовать поставить Virtual Box, туда Debian 5 и собрать без проблем. Нужно установить полностью DVD1.
А у вас нет возможности собрать версию с закомментированной строкой в исходниках огра? Если у вас уже есть готовый build environment, это бы не заняло много времени.

Просто боюсь, что не смогу потратить несколько часов на все это :(

Если у вас тоже нет времени, то ничего страшного, придется подождать выхода новых дров, может пофиксят)
Закомментировать строку:

346 //glDeleteFramebuffersEXT(1, &fb);

Да?
угу.
Только в используемой в игре версии огра она — №367.
Хорошо. Сделаю и выложу новую RenderSystem_GL.so
Вы наверное не тот файл выслали(
Файлы идентичны, результат выполнения, само собой, тоже.
Извините. Скрипт обновлял исходники, обхитрил сам себя :)
Попробуйте этот: dl.dropbox.com/u/12634473/RenderSystem_GL.so
Все работает.
Спасибо.
Спасибо вам за стойкость :)
Да не за что :)
Буду рад, если вам результат наших «исследований» пригодится :)
Обязательно. А если вы ещё нас порекомендуете знакомым игрокам, то для нас это будет очень благотворно :)
Вот это врядли, у меня нет знакомых, которые увлекаются))
А мне нравится.
В любом случае, спасибо за проект :)
Пожалуйста. Вам спасибо за интерес :)
у меня дрова NVIDIA-Linux-x86_64-256.35.run
откатывать дрова не хотелось бы, они автоматически обновляются (установлены через apt)
Красиво. Ее бы на Альтернативе или Unity портировать и запустить в социалочки — бешеным бы успехом пользовалась
Пока не думали об этом, но идея неплоха. Только портировать — это на самом деле еще раз переписать с нуля.
Подумаем об этом после того как доберемся до версии 1.0.
ну логика и графика остается, а благодаря повальному увлечению социалками на вашем увлечении можно будет неплохо заработать)
Приятная игрушка. Картинка, музыка приятные. Продолжайте развивать
Спасибо. Продолжим.
Что меня всегда поражало что люди не имеющие представления о предмете разработки так громко называют свои творения. Правильней бы было назвать игру OGS Mahjong Solitaire потому как она не имеет ничего общего с маджонгом. Как игроку в эту игру просто обидно честное слово.
Там же есть справка. В ней сказано, что это Mahjong Solitaire.
Мы решили не публиковать её тут на хабре.
Мы вполне в курсе отличий между маджонгом и пасьянсом маджонг. Выбор названия делался с оглядкой на то как называются десятки других аналогичных игр. Однако, чтобы не вводить тех кто понимает разницу в состояние когнитивного диссонанса, мы учтем это в следующих версиях.
Обидно..? Да какая разница?
По моему, это не принципиально.
Ну как какая? Говоришь кому-нибудь что ты играешь в маджонг, при чем не один а с компанией и засевший стереотип мышления человеку рисует картинку: сидят несколько балбесов за столами, разложили кости пирамидками и наперегонки разбирают пары. Как вы думаете после такого на тебя смотрят? Минимум с непониманием…
Приятная, простая, красивая игрушка. Продолжайте в том же духе.
сильно напоминает kyodai mahjong
Лестное сравнение. Спасибо.
Фон бы еще улучшить, а так молодцы, хороший проект!
Мы над этим работаем. Спасибо.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.