Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

DF2 :: ФОРУМЫ _ Heroes II _ Free Heroes II

Автор: SandySandy 02 Feb 2009, 07:25

проект лежит здесь:
https://sourceforge.net/projects/fheroes2

Есть все утилиты для распаковки ресурсов.
Играет на любых разрешениях экрана (максимум как позволит карта), на ноутбуках 1280х800 например без проблем.
Играет оригинальная музыка midi.
В режиме боя много ошибок с отрисовкой, но обещаем поправить (пишется новый алгоритм battle).
Есть AI, но пока не нападает а только развивается.
Есть возможность грузить альтернативные спрайты png.
И для разнообразия можно грузить в hotsit, работает.

закачать win32 версию можно здесь:
http://sourceforge.net/project/showfiles.php?group_id=96859

для любителей альтернативных систем там же можно закачать исходники, и собрать самостоятельно.

Все пожелания высказываем здесь.

Автор: Mugais 02 Feb 2009, 14:49

Объясните для тугих что это вообще такое

Автор: Shihad 10 Feb 2009, 07:47

Свободный движок Heroes 2. Пока бета - без ИИ и с плохой прорисовкой боя. Для работы нужно скопировать оригинальные файлы из Героев 2.

2SandySandy. Спасибо. Не пробовал объединяться с ОпенХероуз или Ремэйком?

Автор: tolich 07 Mar 2009, 19:52

Во-первых, не бета, а преальфа.

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

http://ipicture.ru/Gallery/Viewfull/25021579.html
Когда крестоносцы атакуют свинок, они почему-то, перед тем, как ответить, делают шаг вперед. Что примечательно, перед СВОЕЙ атакой они возвращаются обратно.

http://ipicture.ru/Gallery/Viewfull/25021655.html
Крестьяне наносят 0 урона. Насколько я помню (хотя я могу и ошибаться), минимальный урон 1, к тому же в PoL в аналогичной ситуации идет урон 2-3.

http://ipicture.ru/Gallery/Viewfull/25021703.html
Перманентный "Полет"? wink.gif

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

Когда я попытался сбежать на первом ходу от стека мумий, это произошло только после того, как они все походили. blink.gif

Герой, заезжая в город, пропадает с карты.

Герой, закодированный на карте вообще без армии, почему-то получает базовый состав.

Не устанавливаются закодированные для неотстраиваемой деревни здания.

Не срабатывают события.

Ну и не работает магия.

Да, еще: предлагаю скриншоты складывать в подпапку игры scrrenshots, причем без префикса screenshot_, и сразу кодировать в png.

13/10/2009: перенес все скриншоты на айпикчу, ибо сайт свой надо чистить. crazy.gif

Автор: SandySandy 24 Apr 2009, 09:05

спасибо tolich!
давно не заглядывал сюда, все ваши пожелания будут учтены.
вышла новая версия.



> Не пробовал объединяться с ОпенХероуз или Ремэйком?
2Shihad есть ссылки на проекты?

Автор: Qwertyus 24 Apr 2009, 09:57

http://openheroes.draghost.ru/index.php?PHPSESSID=4fc59962ea0350fdea108a400a423e73&/ или тема на форуме DF2 http://forum.df2.ru/index.php?showtopic=7188
http://hippocamus.forum24.ru/ (в закрытом подфоруме).
Похожий проект: http://antypika.aplus.pl/vcmi/forum/portal.php

Автор: tolich 25 Apr 2009, 19:13

Советую посмотреть мои карты http://forum.df2.ru/index.php?showtopic=12386. Они, конечно, жуткие извращения, crazy.gif но, думаю движок на них тоже должен работать.

Hopeless Battle - просто не дружит.

Avalon - крестоносец еле справляется с крестьянами (да, их почему-то 57 вместо 50 - видимо, приросли в начале первой недели, чего быть не должно), все остальные его выносят с ноги. Вы уверены, что битва точно по руководству? laugh.gif

Knights - не работают свитки, заложенное заклинание в книге отсутствует.

Doom Forever - герои имеют армию.

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

Автор: SandySandy 26 Apr 2009, 09:45

Hopeless Battle
из условий победы / поражения - реализовано только пока убить всех, и в вашей карте оно сработало т.к. противника нет.

Knights - не работают свитки, заложенное заклинание в книге отсутствует.
как то совсем упустил про такую андурановскую возможность, это мой баг, вполне возможно что пропущены еще некоторые возможности.

Doom Forever - герои имеют армию.
не совсем понял, а что возможно что герои могу без армии?

насчет событий есть пара багов открытых, буду их фиксить.

по поводу проекта VCMI знаю про него, это же герои3, и они обещались в январе 2009 выложить типа исходники но чего то испугались, да и кросплатформенностью, по их словам, там и не пахнет unsure.gif
опенгерои тоже нацелены на оригинал третьих героев, желаю им конечно успехов, но наработок и оригинальных идей и них нет еще, вот VCMI я бы пощупал сетевой код у них заявлена поддержка), так как сейчас занимаюсь этим и неохота велосипеды изобретать.

Автор: tolich 26 Apr 2009, 10:38

Цитата(SandySandy @ 26 Apr 2009, 09:45)
Hopeless Battle
из условий победы / поражения - реализовано только пока убить всех, и в вашей карте оно сработало т.к. противника нет.

Программа игры сразу - нет, не вылетает - просто завершается, судя по stdout.

Цитата(SandySandy @ 26 Apr 2009, 09:45)
Doom Forever - герои имеют армию.
не совсем понял, а что возможно что герои могу без армии?

Могут. Основной прикол карты - герои не имеют начальной армии. В редакторе установлена галочка "Указать армию", но все слоты пусты. Просто цель карты - демонстрация сведенного к абсурду тезиза "быть синим - круто". Правильное решение за синего - захватить все лодки, и уничтожить героев возле своего замка. (Кстати, когда в H2:PoL AI-герои без армии дерутся друг с другом, обычно один побеждает, что, вообще говоря, странно.)

Автор: Shihad 26 Apr 2009, 12:42

Цитата(SandySandy @ 26 Apr 2009, 12:45)
по поводу проекта VCMI знаю про него, это же герои3, и они обещались в январе 2009 выложить типа исходники но чего то испугались, да и кросплатформенностью, по их словам, там и не пахнет  unsure.gif
опенгерои тоже нацелены на оригинал третьих героев, желаю им конечно успехов, но наработок и оригинальных идей и них нет еще, вот VCMI я бы пощупал сетевой код у них заявлена поддержка), так как сейчас занимаюсь этим и неохота велосипеды изобретать.


Странно. В репозитории у ВЦМИ лежат загадочные .cpp и makefile. Вот что написано у них на форуме
We are working on *nix version of VCMI, but it's still more stable on Windows. We are not going to release build for Mac OS X soon but you can always download sources and build VCMI on your own (automated build configuration files are included).

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

Автор: SandySandy 27 Apr 2009, 01:58

Цитата
Странно. В репозитории у ВЦМИ лежат загадочные .cpp и makefile. Вот что написано у них на форуме
We are working on *nix version of VCMI, but it's still more stable on Windows. We are not going to release build for Mac OS X soon but you can always download sources and build VCMI on your own (automated build configuration files are included).

да все верно, сам вчера заметил, действительно открылись. значит у проекта опенгероев тогда совсем нет шансов.

Автор: Shihad 27 Apr 2009, 06:41

Не знаю... CrackedMind и его команда работают заметно быстрее. Через год надо смотреть.

В общем, зависит от того, чем пользуешься. У опенгероев - КуТ, у ВЦМИ - СДЛ.

Автор: SandySandy 27 Apr 2009, 10:00

если только не нравится engine, так и нужно было в первую очередь попробовать своими силами wrapper свой написать на Qt для проекта vcmi, потестировать да отправить им.
опять же кому там нужна заявленная поддержка OpenGL, если вдуматься то старые проекты интересны в первую очередь комьюнити, "маньякам других платформ", всякие налодонники и т.д., где эта игрушка не доступна и ее рады видеть, других заинтересовать трудно: на мощных системах в родной windows есть оригинальный проект и vcmi, для linux freebsd есть версия от loki а также заявлена поддержка в vcmi.
опять же телефоны всякие смартфоны на арм процессорах, с разрешением экрана 640х480 эта вся аудитория будет проекта vcmi.
у меня у самого есть побольше железка с 4Мб видео (1024х768), OpenGL там не работает а вот SDL прекрасно себя чувствует.

ну да ладно, небуду спорить, время покажет, знаю только (по совему опыту) что начинать такие проекты это ответственность большая, бросить легко а вот довести до середины хотя бы и заинтересовать других это трудно.

Автор: SandySandy 02 May 2009, 08:04

Всем Привет!
Через пару недель выйдет новая версия. Много багфиксов. Доделал все условия выигрыша и поражения.
Кстати для любителей моддинга предусмотрен механизм альтернативной загрузки спрайтов из папки cache в формате png, для этого нужно знать ICN файл - какой и для чего и номер спрайта в нем (достаточно распаковать его утилитой icn2img).
Так же работать должна локализация, параметр unicode = on. Только локализация немного кривовата, нужно перевод по фиксить.

Какие есть соображения по АИ?
сейчас например механизм простой, в начале хода королевства, сканируется карта на предмет наличия экшен объектов, потом этот список сортируется по дальности пути от героя и выбираются первые два с 50% шансом, если в списке есть вражеский герой или вражеский замок они имеют приоритет на уничтожение (если расчет силы показал что армия слабее).
В замках строительство просто по списку с небольшими отличиями для расы.
Вроде просто но это работает smile.gif

Автор: CrackedMind 07 May 2009, 20:32

Сорри за оффтоп.

Ну, кстати говоря, будет не только OpenGL render и другие. И вообще в моих планах, когда выйдет релиз Qt for S60, поглядеть насколько это будет шустро работать и при возможности портировать туда. Правда тут проблема будет с графикой.
Я просто не любитель на всяких налодониках и экзотических платформах работать, в основном хотелось более быстрой разработки smile.gif
Постараемся побыстрее следующую версию выпустить.

И удачи вам ребят, Герои 2 тоже отличная игрушка, постояно слежу за ходом вашей работы wink.gif

Автор: SandySandy 17 Sep 2009, 11:31

давно я сюда не заходил, порадую любителей этой игры.
вышла новая версия, из нововведений, появился новый интерфейс, где интерфейса нету как такового, радар, кнопки, иконы, статус все можно включать выключать и передвигать по желанию.
в связи с этим вышла тестовая сборка под pocket pc (переделываются основные диалоги под 320х240).

хотел вставит пару скриншотов но не понял как shok.gif

Автор: Ghost#13 17 Sep 2009, 12:31

SandySandy залей на ipicture.ru или radikal.ru. и через [IMG][/IMG] вставь smile.gif

Автор: Vade Parvis 17 Sep 2009, 12:52

Угу. На форуме просто заливка файлов не функционирует.

Автор: Ogion Stranniy 17 Sep 2009, 18:17

А инструкция к потреблению есть? rolleyes.gif

Автор: SandySandy 19 Sep 2009, 14:14

> А инструкция к потреблению есть?
да все есть там же biggrin.gif

Автор: DRONыч 19 Sep 2009, 18:12

Объясните, пожалуйста, чем это отличается от обычной двойки.

Автор: tolich 19 Sep 2009, 18:44

Пока только тем, что 1) свободный движок и 2) практически не работает. Надеюсь, что второе отличие устранят, а первое оставят. laugh.gif

Автор: SandySandy 08 Feb 2010, 12:36

зарелизил новую версию, теперь работает и на КПК тоже.
переписал всю битву, поправил всю логику битвы по ФАКу.
В игре отсутствует только adventure магия, сетевая игра и кампании.
Над этими позициями сейчас работаю тоже.

Автор: DRONыч 08 Feb 2010, 14:07

А что такое свободный движок?

Автор: Leency 08 Feb 2010, 22:58

SandySandy
Спасибо за огромный труд! Если бы ещё под KolibriOS код портировал было бы ваще замечательно)))))
Кстати, уже давно узнал об этой разработке, время от времени поглядывал на саурсфорж не остановился ли процесс.

Цитата(dronblch @ 08 Feb 2010, 14:07)
А что такое свободный движок?

Вот герои ты запускаешь по H3WOG.exe или HEROES3.ехе. Это программы, так называемые "движки" которые обрабатывают и выводят графику и общаются с пользователем (реагируют на нажатия клавиш).
Откуда взялись эти программы H3WOG.exe или HEROES3.ехе? Их кто-то написал. Изначально они были кучей файлов с исходным кодом, такого вида:
Код
void main(){    
    dword id;
    loop(){
 SWITCH(WaitEvent()) {
     CASE evButton:
   id=GetButtonID();
   IF (id==1)|| (id==500) ExitProcess();
   BREAK;
     CASE evKey:
   BREAK;
     CASE evReDraw:
   draw_window();
   BREAK;
 }
    }
}

void draw_window(){
    WindowRedrawStatus(1);
    DefineAndDrawWindow(300,176,300,223,0x34,0x10B2B4BF,0,0,"Example Program in C--");
    //
    DrawBar(0,0,170,35,0xE4DFE1);
    DefineButton(40,82,84,19,500,0xE4DFE1);
    WriteText(120,150,0x80,0,"Press F2 to see FlatButton",0);
    //
    WindowRedrawStatus(2);
}

stop:

Так вот у большинства программ исходный код движка закрытый и не доступен общественности. У героев 1,2,3,4,5 именно такой. Потому если у пользователя возникнет проблема, он не сможет её исправить. Придёться ждать заплатки от автора/компании которая выпускает программу. На некоторые программы их автора уже забили. Например, Герои 2 и 3. В их движок практически никак нельзя внести изменения, или уочччень сложно.
Но если написать свой, открытый движок - в него можно будет потом вносить изменения любой желающий.

Автор: etoprostoya 08 Feb 2010, 23:12

И чтоб тоже на дискету всё умещалось! crazy.gif

Добавлено ([mergetime]1265659958[/mergetime]):
Это я ответил на уже удалённоё сообщение (развелось тут параноиков... gigi.gif ), в котором предлагалось портировать код на КолибриОС.

Автор: Leency 10 Feb 2010, 02:39

Сообщение не удалено, а перенесено в начало поста. При чём сдесь параноя - Quake, Doom 1-2, DosBox, FCE Ultra (эмулятор денди) успешно портированы.

Автор: etoprostoya 10 Feb 2010, 09:13

Цитата(Leency @ 10 Feb 2010, 02:39)
Сообщение не удалено, а перенесено в начало поста.

Теперь заметил. Сорри.

Автор: fireman 10 Feb 2010, 19:09

Только что поигрался, хорошее впечатление, но подтормаживает графика, и остаются полупрозрачно наложенные кадры

Автор: SandySandy 16 Feb 2010, 11:50

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

в конце недели выложу релиз уже с поддержкой этих фич.

Автор: AZK 16 Feb 2010, 16:03

Хочу спросить одну вещь: автор(или кто-то другой, кто обладает программерскими навыками на уровне эксперта-мастера) может портировать игру на apple-устройства(iphone,itouch)? В плане управления можно было бы скопировать алгоритм управления scummvm - аналогично ПК-тачпаду.

Если что сильно не бейте, просто интересно smile.gif Тем более что можно не просто выклаывать, а вообще говоря продавать если не в app, то в cydia store точно...

Автор: fireman 17 Feb 2010, 18:49

AZK, продавать нельзя. Что бы продавать придётся переделать графику и убрать привязку к героям 2.

Автор: SandySandy 18 Feb 2010, 14:14

Цитата(AZK @ 16 Feb 2010, 16:03)
Хочу спросить одну вещь: автор(или кто-то другой, кто обладает программерскими навыками на уровне эксперта-мастера) может портировать игру на apple-устройства(iphone,itouch)? В плане управления можно было бы скопировать алгоритм управления scummvm - аналогично ПК-тачпаду.

проект кроссплатформенный, я собираю его для WinCE, Win32, Linux. Мне присылали письмо с скриншотами где один энтузиаст также успешно собирал его и запускал на iPhone. Так же знаю что запускали на BeOs, AmigaOs и гаджете GP2X Pandora. Так же есть интересующиеся для Maelmo/Android. проблем не вижу, нужен всего лишь SDK + по минимуму библиотека SDL + немного терпения чтобы настроить различные костыли сертификации от производителей и для настройки окружения сборки.
по поводу продаж, я не распространяю оригинальную графику и музыку (так же есть возможность загрузки альтернативных спрайтов и музыки), так что продавать именно движок можно, но я его распространяю бесплатно, (доволен зарплатой и вообще just for fan).
конкретно заниматься сборкой под iPhone не собираюсь, нет времени и устройства нет, и покупать буду не его biggrin.gif

Автор: fireman 18 Feb 2010, 15:39

А на нокиа с60 ос 9.х?

Автор: AZK 18 Feb 2010, 21:38

SandySandy, а кто присылал? может он со мной поделится smile.gif

Если всё же передумаешь и будешь делать - я буду первым же тестером smile.gif Как-никак любимая игра(после 3-ки)

Автор: SandySandy 19 Feb 2010, 07:47

> А на нокиа с60 ос 9.х?
тоже есть контакты, могу отправить емайл в личку если нужно.

> SandySandy, а кто присылал? может он со мной поделится smile.gif
эта информация открытая, вот на форуме он писал под ником JANWAR
http://sourceforge.net/projects/fheroes2/forums/forum/335991/topic/3401851

Автор: fireman 20 Feb 2010, 17:48

SandySandy, давай(он русский знает?)

Автор: SandySandy 10 Mar 2010, 14:31

Цитата(fireman @ 20 Feb 2010, 17:48)
SandySandy, давай(он русский знает?)

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

Автор: fireman 10 Mar 2010, 17:02

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

Автор: SandySandy 10 Mar 2010, 17:51

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

Автор: fireman 11 Mar 2010, 15:27

Я ещё со старых версий играл. Развитие весьма успешное.


Добавлено
Эмулятора вроде не существует для симбиана, хотя они могли и под свою игру спец сделать, не знаю. А работает и под платформу UIQ3 .

Автор: fireman 12 Mar 2010, 17:46

http://www.smart-se.ru/forums/index.php?showtopic=9539 - Способ, что бы ставить на UIQ3 . Я попробую так же с симбиан 9.3 .

Автор: fireman 12 Mar 2010, 19:19

К сожалению, тот, кто собирал и упаковывал файл для запуска игры под смартфон, не русскоязычный. У меня имеется его сайт http://anotherguest.se/ , там же есть и его мыло.

Думаю, что надо написать ему письмо. Мне нужен человек, который понятно переведёт.

"Здравствуйте, мы узнали про то, что вы умеете собирать sis файлы для работы free heroes II под смартфонами UIQ3 и Symbian (9.x). У нас имеется только старый sisx файл для UIQ3, но выходят новые версии игры и хочется всегда играть в последнее. Можете ли вы научить делать sis файлы-установщики для free heroes или создать для нас на основе последней версии. "

Автор: FCst1 12 Mar 2010, 22:33

Праверыти ниграмотнага?

Цитата
Hello, we have learnt about that you are able to create "sis files" for work "free heroes II" under smart phones UIQ3 and Symbian (9.x). For us is available only old sisx file for UIQ3, but there are new versions of game and it would be desirable to play the last updates of game. Whether you can learn to do "sis files-installers" for "free heroes II" or to create for us on the basis of last version?

Автор: Baklajan 12 Mar 2010, 23:01

Hello, we just learnt you can compile sis files for Free Heroes II to run on UIQ3 and Symbian 9.X smartphones. We only have an outdated UIQ3 sisx file, so we’ve been long looking for an update. Could you explain how to build Heroes II sis installation packages for the said platforms, or even make us one based off the latest game version?

Автор: Shihad 13 Mar 2010, 08:45

Еще добавьте "Hello, %username,.." и в конце - "заранее спасибо, искренне ваши, FH2 fans"

Автор: fireman 13 Mar 2010, 09:46

Отослал письмо Бака, спасибо за помощь. FCst1 тебе тоже спасибо.

Автор: fireman 15 Mar 2010, 17:05

Цитата(Anotherguest)
Hi! The build is rather patchy, and each svn update imght need more manual patches to compile properly.

I'm attaching my latest build which is from 3/3/2010 (svn that date).

Cheers
AG


Присланные файлы :
1) http://remake-heroes.ucoz.ru/FHeroes2_s60v3.sisx
2) http://remake-heroes.ucoz.ru/FHeroes2_uiq3.sisx

PS: Я смысл не очень понял, кроме того, что это последние версии.

Автор: SandySandy 16 Mar 2010, 05:06

> PS: Я смысл не очень понял, кроме того, что это последние версии.
смысл такой, что он скорей всего не хочет прислать свои патчи разработчику

Автор: Shihad 16 Mar 2010, 05:54

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

Автор: SandySandy 16 Mar 2010, 10:59

> По-моему, он говорит, что каждую новую версию надо долго и муторно патчить
> вручную. И посылает последний билд.
да я понял я это, я про другое, зачем каждый раз патчить когда можно один раз отправить патч разработчику... не понимаю я этого smile.gif)

Автор: fireman 16 Mar 2010, 17:35

Хорошо, тогда давайте составим ответ на его сообщение. Предлагаю так:

"Большое спасибо за ответ и присланные билды. Создатель free heroes 2 спрашивает, зачем каждый раз патчить когда можно один раз отправить патч ему?"



PS: Если надо ещё что-то отправить, то давайте пишите, потом надеюсь нам опять помогут с переводом и я отправлю.

Автор: SandySandy 17 Mar 2010, 03:03

да, пусть пришлет на адрес fheroes2@gmail.com
я обязательно добавлю в основную ветку проекта, и не нужно будет тратить время в дальнейшем..

Автор: Shihad 17 Mar 2010, 06:50

"Thank you for your answer and builds. SandySandy, Fheroes2 developer, asks you for your patch to use it in main project branch"
Примерно так, пусть Бак поправит. Подозреваю, что патчил он некрасиво и теперь стесняется кода. smile.gif

Автор: fireman 17 Mar 2010, 18:58

И последний пост SandySandy тоже можно перевести.

Автор: fireman 18 Mar 2010, 19:14

"SandySandy сказал, что бы вы отослали ему на адрес fheroes2@gmail.com
патч для создания builds, которые он обязательно добавит в основную ветку проекта, и не нужно будет тратить время в дальнейшем. В любом случае, лучше сконтактируйте с ним."

Переведите и это, завтра в любом случае отправлю ответ.

Автор: fireman 18 Mar 2010, 19:44

SandySandy, а как менять разрешение во фрихероес? а то он в оконом режиме.

Автор: SandySandy 19 Mar 2010, 03:32

> а как менять разрешение во фрихероес? а то он в оконом режиме.
выставь параметр fullscreen = on

Автор: fireman 19 Mar 2010, 16:46

SandySandy, извини - это я ступил файл конфигурации поменял. Но, что странно настройки его не передались, более того, если его удалить, то игра спокойно играет с настройками.

Заметил баг. В героях 2, если отключить музыку, то в начале боя не будет паузы для неё, но во фри хероес она есть. Я бы вообще убрал эту паузу.

PS: На нокию н79 порт встал, играется, огромнейшее спасибо за фрихмм2.

Автор: SandySandy 20 Mar 2010, 07:05

> более того, если его удалить, то игра спокойно играет с настройками.
с настройками по умолчанию

> В героях 2, если отключить музыку, то в начале боя не будет паузы для неё,
> но во фри хероес она есть. Я бы вообще убрал эту паузу.
проверю, там скорей всего пауза не от музыки а от загрузки спрайтов

Автор: fireman 21 Mar 2010, 13:48

SandySandy , пришли мне версию фрихероес от 3марта, я хочу именно, её посмотреть на компе, так как именно она портируется.

Вообще, что замеченно при игре на телефоне.

1) Сначало вся анимация очень медленная, потом ускоряется. Как мне объяснил Фанатик, это загружаются ресурсы. По скольку таких проблем нету в том же аом. Я думаю всё дело в том, что грузится полный ресурс с графикой под нормальное разрешение экрана, или конвертируется сразу в маленький под выбранное в конфигурации, что и приводит к тормозу. Можно ли, как-то переделать все грфические ресурсы в папке "дата" имеенно под нужное разрешение? Тогда по идее и вес папки меньше и скороть больше.
2) При подводе указателя к краям карты для скролла он залипает там, и вывести его оттуда получается не сразу, из-за чего нормальный сколл карты невозможен. Я потестировал на послдней, вчерашней версии фрихероес на компе с конфигурацией под qvga от фанатика, так там при подводе к краю ничего не происходит, пока не нажать на левый клик, что естественно удобнее.(я не знаю, это могло появтся после 3марта).
3) Долгая загрузка карты, я не знаю с чем это свзязанно, но процессор вроде не на 100% в этот момент грузится. Ещё можно сделать полосу выполнения сохранения, если это не будет кушать русурсы.
4) Ход врага не долгий, что радует.
5) Сохранение очень долгое(1-1.5минуты), при чём, если свернуть возможны вылеты, что уничтожает автосейв. Поэтой причине, да и не только, я предлагаю делать не перезапись автосейва, а новый автосейв, название, которого автосейв_число_время или автосейв_карта_ месяц_день .
6) Не плохой возможностью было б реализовать реплей хода врага, как в героях 3. Учитывая, что автосейв долгий, отвлекаюсь на другие дела и соответственно не вижу хода сопрника.
7) В конфигурации есть выбор автосейв он или офф, но это не так уж и опционально, вылазить из игры, что бы это настроить. Я предлагаю перед концом хода спрашивать сохранять или нет, а в конфигурации на этот запрос он или офф.
8) Мне понравилась фича, что при покупке войск уже сразу выбранно на максимуме, ещё можно сделать, чтобы указатель был сразу на окей(или при зажатие какой-нибудь клавиши сразу выкупались все).
9) Я не знаю, есть ли где файл с настройкой хоткеев. И вообще, кто делал для версии под смартами работу с телефонными клавишами? Сейчас, что бы указатель подчинялся надо нажать на зеленую клавшу(трубка), зажать ноль и опять на зеленую клавишу. В итоге нас слушается указатель, софт клавиши работают, как левый или правый клик мыши. Это удобно, и правильно, но например в том же аом были удобные хоткеи, как # = след ход,3 = миникарты и т.п. Это ускоряет процесс игры на телефоне рызы.
10) Можно создать кнопку в городе "спустить всю армию вниз" Такая кнопка сделают удобнее игру, что на компе, что на телефоне.

Автор: fireman 21 Mar 2010, 18:11

Можно сделать кнопку переиграть сценарий, как в героях 3.

Автор: SandySandy 22 Mar 2010, 09:55

Цитата(fireman @ 21 Mar 2010, 13:48)
SandySandy , пришли мне версию фрихероес от 3марта, я хочу именно, её посмотреть на компе, так как именно она портируется.

а какие проблемы портированием на последней версии из svn?
поставьте клиента svn, и вы сможете скачать любую версию, вплоть до версии 1 biggrin.gif

Цитата(fireman @ 21 Mar 2010, 13:48)
1) Сначало вся анимация очень медленная, потом ускоряется. Как мне объяснил Фанатик, это загружаются ресурсы. По скольку таких проблем нету в том же аом. Я думаю всё дело в том, что грузится полный ресурс с графикой под нормальное разрешение экрана, или конвертируется сразу  в маленький под выбранное в конфигурации, что и приводит к тормозу. Можно ли, как-то переделать все грфические ресурсы в папке "дата" имеенно под нужное разрешение? Тогда по идее и вес папки меньше и скороть больше.

можно, это будет работать через механизм загрузки альтернативных ресурсов, это реализовано, включите alt resource = on и в папке images создавайте ресурсы (чтобы знать какие именно нужно знать названия оригинальных для этого нужно распаковать heroes2.agg и дальше по списку, у меня в проекте есть все утилиты, можно скачать там же), подготовка же самих ресурсов возложена на вас самих biggrin.gif, так же движок должен быть собран с библиотекой SDL_image + (libpng или libjpg).

Цитата(fireman @ 21 Mar 2010, 13:48)
2) При подводе указателя к краям карты для скролла он залипает там, и вывести его оттуда получается не сразу, из-за чего нормальный сколл карты невозможен. Я потестировал на послдней, вчерашней версии фрихероес на компе с конфигурацией под qvga от фанатика, так там при подводе к краю ничего не происходит, пока не нажать на левый клик, что естественно удобнее.(я не знаю, это могло появтся после 3марта).

я не знаю о каких версиях вы говорите, последние вчерашние и т.п. это не версии, версия там в игре в инфо есть например сегодня последняя 0.5.1686 последние цифры это ревизия svn. biggrin.gif

Цитата(fireman @ 21 Mar 2010, 13:48)
3) Долгая загрузка карты, я не знаю с чем это свзязанно, но процессор вроде не на 100% в этот момент грузится. Ещё можно сделать полосу выполнения сохранения, если это не будет кушать русурсы.

ресурсы грузит.. графику еще что то

Цитата(fireman @ 21 Mar 2010, 13:48)
5) Сохранение очень долгое(1-1.5минуты), при чём, если свернуть возможны вылеты, что уничтожает автосейв.

это настораживает, там сейвфайл примерно какого размера создается?

Цитата(fireman @ 21 Mar 2010, 13:48)
6) Не плохой возможностью было б реализовать реплей хода врага, как в героях 3. Учитывая, что автосейв долгий, отвлекаюсь на другие дела и соответственно не вижу хода сопрника.

поподробнее, что это непомню такого

Цитата(fireman @ 21 Mar 2010, 13:48)
8) Мне понравилась фича, что при покупке войск уже сразу выбранно на максимуме, ещё можно сделать, чтобы указатель был сразу на окей(или при зажатие какой-нибудь клавиши сразу выкупались все).

клавиши по умолчанию для диалогов, return положительный ответ, esc отрицательный ответ, так же для yes|no соответственно y|n.

Цитата(fireman @ 21 Mar 2010, 13:48)
9) Я не знаю, есть ли где файл с настройкой хоткеев. И вообще, кто делал для версии под смартами работу с телефонными клавишами? Сейчас, что бы указатель подчинялся надо нажать на зеленую клавшу(трубка), зажать ноль и опять на зеленую клавишу. В итоге нас слушается указатель, софт клавиши работают, как левый или правый клик мыши. Это удобно, и правильно, но например в том же аом были удобные хоткеи, как # = след ход,3 = миникарты и т.п. Это ускоряет процесс игры на телефоне рызы.

незнаю про специфику symbian, поддержка хоткеев реализована, через виртальные клавиши библиотеки SDL, включить debug = 0x12, зайти в экран highscore, понажимать клавиши, если повитс MessageBox записать коды, применить их в конфиге.
http://4pda.ru/forum/index.php?s=&showtopic=136704&view=findpost&p=4094248

Цитата(fireman @ 21 Mar 2010, 13:48)
10) Можно создать кнопку в городе "спустить всю армию вниз" Такая кнопка сделают удобнее игру, что на компе, что на телефоне.

думаю да, сделаю, непонятно правда куда на экране ее вставить..

Автор: fireman 22 Mar 2010, 11:23

1) Спасибо. Буду пытаться разобраться.
2) Я говорю версии, которые выходят в каких-то числах.
5) 11кб
6) В героях 3 можно посмотреть преведущий ход врага. То, есть, что происходило после нажатия на кнопку следующий ход. Удобная фича 3-ки. Особенно если на тебя нападали и не хочется переигрывать бои.
8) Так на телефоне, нету этих клавиш, но вообще удобно, когда играешь пользоваться только мышью. Тогда, если она на ок сразу, удобнее.

Автор: SandySandy 22 Mar 2010, 17:41

Да, мне прислали патч, для сборки под symbian, там всего изменений меньше десятка строк, я его добавил в основной проект, сейчас ответят что все нормально собирается и можно ставить еще один плюс в рабочей платформе smile.gif)

Автор: fireman 22 Mar 2010, 18:11

SandySandy, хоть у меня и не сенсор, но интересует вопрос, будет ли под них управление делаться. Тогда в выиграше будут и новые симбы и айфоны. Я на недели, начну лазить по айфон форумам и попытаюсь найти, человека, который под них порт сделает.

Автор: fireman 23 Mar 2010, 11:24

Баги:

http://img245.imageshack.us/img245/8188/freehmm2bug0.jpg
http://img717.imageshack.us/img717/8014/freehmm2bug.jpg
Возникает при нажатие, когда герой в городе на "лево" или "право"

Автор: tolich 23 Mar 2010, 12:10

@feanor: насколько я помню, в программе есть возможность делать нормальные скриншоты, а не вырезать что-то paint-ом.

Автор: fireman 23 Mar 2010, 21:04

Фанатик написал, что у него на телефоне сохранение 3-5 секунд. Странно, что у меня минута, полторы.

Автор: fireman 24 Mar 2010, 12:09

Наверно я туплю, но у меня не работает нормально моя конфигурация.

Вот fheroes2.cfg - http://stream.ifolder.ru/16956268
Вот stdout.txt - http://stream.ifolder.ru/16956280

Добавлено

Фанатик объяснил мне, почему не работает, оказывается надо было

Код
#
убрать

Автор: fireman 01 Apr 2010, 18:28

Заметил, что при заклинание дверь измерений. герой может перемещаться только по разведанной территории, и если он переместиться рядом с юнитами, то они нападут на него. В стандартной 2-ке иначе.

Был замечен такой глюк, когда я направлялся к хижине ведьмы, после перезагрузки не повторился http://img695.imageshack.us/img695/5564/freebag.jpg

Автор: fireman 03 Apr 2010, 17:13

В последнии дни проникся игрой, есть приятные моменты. Вот мои замечания.
1)Надо сделать, что бы анимация хода врага не зависела от общей анимации, а то он быстро "пролетает", что не успеваешь отследить.
2) Уже говорил про несколько автосейвов, хотя бы 7, но лучше опционально.(записывается каждый день, если больше )
3) Было бы не плохо, что бы в колодце можно было выкупать войска(как в Замке в героях3)
4) После того, как циклоп ударил и парализовал ему смогли ответить.
5) Как я понял АИ изменён, что на карте, что в бою. Летающие на всё поле, чаще бьют не стрелков, а тех кого дальше выставил, да и стрелки на них больше отвлекются.

Автор: fireman 05 Apr 2010, 14:48

Баг при растреле стенами последнего враж юнита не было победы, но после того, как я шагнул своим юнитам произошла. Второй раз выявить не пробывал, если повториться напишу. Плох тем, что так можно оживиться после враж проигроша.

Ещё один баг ( видео http://stream.ifolder.ru/17141235) . Короче сначала подходил ко мне враг и рядом был слабо защищёный город, он обошёл его и пошёл дальшу, я думал, что он испугался, но он напал на город, который лучше охранялся. Когда враг пошёл 2о раз, я сохранился, вышел и зашёл в игру, он повёл себя дальше, для чистоты эксперимента из первого города я удалил все войска. Если надо могу кинуть сэйв.

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

Автор: fireman 29 Apr 2010, 19:53

Порт фхмм пришёлся по душе многим владельцам телефонов.

Автор: Kref 14 Jun 2010, 23:07

Я хочу поработать с ИИ в героях 2.

У меня следующие вопросы:
1) По какому адресу находится основной сайт разработчиков fhomm 2 (free heroes 2)?

Я программист, но с С, C++ сталкивался довольно редко. Поэтому возник следующий вопрос:
2) Чем открыть src-файлы? Я поставил и запустил Visual C++ 2005, но он не видит те файлы, которые он мог бы открыть.

Автор: Shihad 15 Jun 2010, 04:20

Здесь и находится. http://sourceforge.net/projects/fheroes2/
.src? Не точка .tgz? Исходники - http://sourceforge.net/projects/fheroes2/files/fheroes2/fheroes2-src-r1895.tgz/download - в этом архиве. Я не знаю, чем он открывается в винде, но это обычный архив, полный обычных текстовых .cpp

Еще на ту же тему - но герои 3.
vcmi.eu
https://launchpad.net/openhomm

Автор: fireman 10 Oct 2010, 13:25

Как дела с движком?

Автор: SandySandy 12 Oct 2010, 13:56

Цитата(fireman @ 10 Oct 2010, 13:25) *
Как дела с движком?

в процессе развития
вышел новый релиз, обновился движок отрисовки, появился плавный скроллинг, и много еще чего rolleyes.gif

Автор: Zenofex 12 Oct 2010, 14:56

А я его на свой iPhone установил. Сейчас на мобилке во вторых Героев гамаю. Ура!!!! bud.gif

Автор: fireman 17 Oct 2010, 13:37

Zenofex, способом не поделитесь?

Автор: Z_Mike 24 Oct 2010, 11:49

Может быть кто-нибудь обратится к Anotherguests'у, чтобы он собрал новый билд Героев для Symbian? Проект развивается, а симбиановская версия так и осталась на уровне мартовской сборки. Хотя, конечно, может я плохо искал, но везде лежат старые версии. Если есть сайт где выкладываются обновлённые Герои - дайте ссыль плз.

Автор: Zenofex 24 Oct 2010, 12:03

fireman
Да все крайне просто. Я нашел на торренте готовую сборку свободного движка для айфоновской оси. Поставил, попробывал - работает нормально (на модели 3G). Поддерживает стандартные карты от Heroes II.

Если нужна точная ссылка, пиши в личку - дам. Хотя можно наверное и по почте послать, объем там около 22 Мб.

Автор: J2K 24 Oct 2010, 15:07

Цитата(Zenofex @ 24 Oct 2010, 13:03) *
fireman
Да все крайне просто. Я нашел на торренте готовую сборку свободного движка для айфоновской оси. Поставил, попробывал - работает нормально (на модели 3G). Поддерживает стандартные карты от Heroes II.

Если нужна точная ссылка, пиши в личку - дам. Хотя можно наверное и по почте послать, объем там около 22 Мб.


А при чем здесь Symbian? Symbian, это позволю напомнить умнофоны нокии, иногда сони эриксон с моторолой и почти помледний сименс. Хотелось бы именно под симбиан.

Автор: Berserker 24 Oct 2010, 15:18

Играл несколько партий. ИИ, в отличие от оригинала, в свободной версии абсолютно глур на всех уровнях сложности.

Автор: Zenofex 24 Oct 2010, 15:32

Цитата
А при чем здесь Symbian?


Я про Симбиан не говорил не слова (я знаю, что это за ось, был у меня когда-то нокиевский смартфон). Я говорил, что поставил сборку ФриХироес на свой айФон, а fireman спрашивал как. Мой ответ ему и адресован (о чем свидетельствует подпись сверху).

Автор: J2K 24 Oct 2010, 16:47

Извиняюсь, прошлую страницу не просмотрел.

Автор: fireman 27 Oct 2010, 16:31

Z_Mike, http://4pda.ru/forum/dl/post/597424/FHeroes2_s60v3.SISx - июньская (20.06.10). А так обращусь.

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

Автор: Zenofex 27 Oct 2010, 20:12

Вот ссылка на торрент
http://rutracker.org/forum/viewtopic.php?t=3193652

Автор: AKuHAK 18 Nov 2010, 01:58

Вот ссылка на андроид версию (вполне играбельную)

http://4pda.ru/forum/index.php?showtopic=199888

Автор: AlexSpl 10 Sep 2012, 13:05

На выходных разбирал формат заголовка карт Героев 2. Остался один непонятный момент: два байта перед названием карты в заголовке. Что это? Может быть, кто-нибудь задокументировал формат карт? Видел несколько описаний формата, но там сплошные вопросы (буквально).

Название и описание карты - это null-terminated strings: char Map.Name[60], char Map.Description[300]. Далее следует кол-во пользовательских слухов (Map.Rumors.Number, 1 байт) и событий (Map.Events.Number, 1 байт). Далее идут размеры карты DWORD Map.Size.X, Map.Size.Y. После чего идёт массив тайлов

TILE_STRUCT Map.Tile[Map.Size.Y][Map.Size.X], где sizeof(TILE_STRUCT) = 20.

Если бы кто подсказал формат TILE_STRUCT вообще было бы здорово.

Автор: gkain 17 Jul 2013, 22:36

Люди, а кто то играет в Хероес 2 для Андройд???
Как пользоваться "правой кнопкой" и как войска разделять????

Автор: Iv 18 Jul 2013, 08:27

Я играл, правда, давно. Правая кнопка настраивается в меню настроек при запуске игры. Кнопка настроек появляется вверху экрана при запуске игры. Я себе настраивал двойной тап вроде как ПКМ.

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

Автор: gkain 18 Jul 2013, 15:32

Цитата(Iv @ 18 Jul 2013, 09:27) *
Вот с разделением войск тоже намучился, благо, что только пару раз понадобилось

так как делать то?

Автор: Iv 18 Jul 2013, 16:09

Попробуй, выделив один отряд, не отрывая пальца от него, вторым пальцем ткнуть в пустой слот

Автор: gkain 19 Jul 2013, 12:43

Спосибо помогло )))))

Автор: fireman 23 Jul 2013, 14:01

Кстати под робота обновляют. Жаль Санди о своих успехах тут не пишет.

Автор: gkain 23 Jul 2013, 15:30

А можно ссылку на сайт, или чем там у него есть, и де можно узнать последних версиях????

Автор: Iv 23 Jul 2013, 15:49

Цитата(gkain @ 23 Jul 2013, 16:30) *
А можно ссылку на сайт, или чем там у него есть, и де можно узнать последних версиях????

Первое сообщение темы посмотреть лень, да?

Автор: Marcius 06 Jan 2014, 13:09

Короче я поставил fheroes2 на android.
Закинул файлы полной версии Героев 2 в папку с приложением, в файле fheroes2.cfg поставил ext музыку. Все работает, но:
Музыка перепутана, то-есть, мелодия замка рыцаря играет в замке мага и тд. Ландшафтные и прочие мелодии играют там, где надо.
Где и как можно вправить мелодии, чтобы они играли там, где надо?


Автор: Kastore 06 Jan 2014, 14:44

Спроси на http://4pda.ru/forum/index.php?showtopic=199888, например.

Автор: t800 30 Aug 2015, 07:42

Цитата(SandySandy @ 02 Feb 2009, 08:25) *
проект лежит здесь:
https://sourceforge.net/projects/fheroes2

Есть все утилиты для распаковки ресурсов.
Играет на любых разрешениях экрана (максимум как позволит карта), на ноутбуках 1280х800 например без проблем.
Играет оригинальная музыка midi.
В режиме боя много ошибок с отрисовкой, но обещаем поправить (пишется новый алгоритм battle).
Есть AI, но пока не нападает а только развивается.
Есть возможность грузить альтернативные спрайты png.
И для разнообразия можно грузить в hotsit, работает.

закачать win32 версию можно здесь:
http://sourceforge.net/project/showfiles.php?group_id=96859

для любителей альтернативных систем там же можно закачать исходники, и собрать самостоятельно.

Все пожелания высказываем здесь.


Здравствуйте я хочу изменить Free Heroes II сделать компании и сетевую игру. Как это сделать?

Автор: Orzie 30 Aug 2015, 07:45

Человека уже пять лет не было здесь.

Отвечу, впрочем, за него - никак не сделаешь.

Автор: t800 30 Aug 2015, 12:32

Цитата(Orzie @ 30 Aug 2015, 07:45) *
Человека уже пять лет не было здесь.

Отвечу, впрочем, за него - никак не сделаешь.


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






Автор: Vade Parvis 30 Aug 2015, 13:11


Автор: t800 30 Aug 2015, 13:25

Цитата(Vade Parvis @ 30 Aug 2015, 13:11) *


Зачем вы кошек показываете? Здесь тема про Free Heroes II. Ответили бы лучше про разработку.

Автор: t800 30 Aug 2015, 13:46

И еще у меня вопросы по сборке Free Heroes II из исходников под Ubuntu.

Я скачал какие-то исходники с http://sourceforge.net/projects/fheroes2/files/build-environment/mingw-build-env-win32-20111117.zip/

Но они под виндоз а мне нужны под Ubuntu. Уже собранная версия под Ubuntu есть а где взять ее исходники?
На http://sourceforge.net/projects/fheroes2/files/ я их не нашел.

Автор: t800 30 Aug 2015, 14:20

На сайте http://sourceforge.net/p/fheroes2/code/HEAD/tree/trunk/
по ссылке Download snapshot скачал папку fheroes2 и кажется это исходники.
Не могу понять что дальше делать? Как мне собрать игру из исходников под Ubuntu?
И где и что надо изменить чтобы вставить в игру камапанию?

Автор: Orzie 30 Aug 2015, 17:56

Программировать надо, дружок, программировать.

Автор: t800 31 Aug 2015, 07:56

Цитата(Orzie @ 30 Aug 2015, 17:56) *
Программировать надо, дружок, программировать.


Про программировать я понимаю, пишешь в файле команды а потом компьютер их выполняет.

Вот я нашел файл который делает меню новой игры fheroes2/src/fheroes2/game/game_newgame.cpp

Я сделал в файле game_newgame поиск по слову Сampain и нашел команды что делают кнопку компании.
Они есть но сейчас выключены значками //

//Button buttonCampainGame(top.x + 455, top.y + 110, ICN::BTNNEWGM, 2, 3);
//buttonCampainGame.Draw();

Вот они эти строчки

http://sourceforge.net/p/fheroes2/code/HEAD/tree/trunk/fheroes2/src/fheroes2/game/game_newgame.cpp#l175
http://sourceforge.net/p/fheroes2/code/HEAD/tree/trunk/fheroes2/src/fheroes2/game/game_newgame.cpp#l181

Я убрал значки // в этих строчках у себя в файле game_newgame и хочу проверить появится ли кнопка в игре

Как мне теперь собрать игру?

Автор: Orzie 31 Aug 2015, 08:20

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

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

Автор: Эроласт 31 Aug 2015, 13:33

Цитата
Как мне теперь собрать игру?

На линуксах программы обычно с помощью Makefile собирают. Попробуй в папке с проектом
Код
$ make all

Автор: t800 31 Aug 2015, 14:17

Цитата(Эроласт @ 31 Aug 2015, 13:33) *
Цитата
Как мне теперь собрать игру?

На линуксах программы обычно с помощью Makefile собирают. Попробуй в папке с проектом
Код
$ make all



Попробовал написать make all что-то заругалась:

Код
danya@danya:~/fheroes2-code-3277-trunk/fheroes2$ make all
make -C src WITH_AI=empty
make[1]: sdl-config: Команда не найдена
make[1]: Вход в каталог `/home/danya/fheroes2-code-3277-trunk/fheroes2/src'
make[1]: sdl-config: Команда не найдена
make[1]: libpng-config: Команда не найдена
make[1]: libpng-config: Команда не найдена
make -C xmlccwrap
make[2]: Вход в каталог `/home/danya/fheroes2-code-3277-trunk/fheroes2/src/xmlccwrap'
g++ -c -MD gzstream.cpp  -O2  -Wall -fsigned-char -DWITH_MIXER -DWITH_IMAGE  -DWITH_ZLIB -DWITH_TTF -DWITH_XML -DWITH_ZLIB -DWITH_ICONV
In file included from gzstream.cpp:29:0:
gzstream.h:35:18: фатальная ошибка: zlib.h: Нет такого файла или каталога
компиляция прервана.
make[2]: *** [gzstream.o] Ошибка 1
make[2]: Выход из каталога `/home/danya/fheroes2-code-3277-trunk/fheroes2/src/xmlccwrap'
make[1]: *** [all] Ошибка 2
make[1]: Выход из каталога `/home/danya/fheroes2-code-3277-trunk/fheroes2/src'
make: *** [all] Ошибка 2


Что делать?

Автор: Эроласт 31 Aug 2015, 15:08

Цитата
Команда не найдена

Ну так установи.

Если еще не ставил build-essentials - поставь сначала его, затем сделай make еще раз и ставь недостающее.

Автор: t800 31 Aug 2015, 15:34

Цитата(Эроласт @ 31 Aug 2015, 16:08) *
Цитата
Команда не найдена

Ну так установи.

Если еще не ставил build-essentials - поставь сначала его, затем сделай make еще раз и ставь недостающее.


Дал команду

Код
danya@danya:~$ sudo apt-get install sdl-config
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
E: Не удалось найти пакет sdl-config
danya@danya:~$


Дал команду

Код
danya@danya:~$ sudo apt-get install build-essentials
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
E: Не удалось найти пакет build-essentials


Что делать?

у меня Ubuntu 12.04

Автор: Эроласт 31 Aug 2015, 15:39

sudo apt-get update когда в последний раз делал?

Автор: t800 31 Aug 2015, 15:46

Цитата(Эроласт @ 31 Aug 2015, 16:39) *
sudo apt-get update когда в последний раз делал?


Не знаю. Ubuntu когда включаю она сама обновляется.

Автор: Эроласт 31 Aug 2015, 15:48

Ну так сделай.

Автор: t800 31 Aug 2015, 15:58

Написал в гугле sdl-config ubuntu 12.04 и нашел такую команду: sudo apt-get install libsdl1.2-dev

Дал команду

Код
sudo apt-get install libsdl1.2-dev


Теперь опять дал команду make all

Все равно ругается, но уже по другому

Код
danya@danya:~/fheroes2-code-3277-trunk/fheroes2$ make all
make -C src WITH_AI=empty
make[1]: Вход в каталог `/home/danya/fheroes2-code-3277-trunk/fheroes2/src'
make -C xmlccwrap
make[2]: Вход в каталог `/home/danya/fheroes2-code-3277-trunk/fheroes2/src/xmlccwrap'
make[2]: Цель `all' не требует выполнения команд.
make[2]: Выход из каталога `/home/danya/fheroes2-code-3277-trunk/fheroes2/src/xmlccwrap'
make -C engine
make[2]: Вход в каталог `/home/danya/fheroes2-code-3277-trunk/fheroes2/src/engine'
g++ -c -MD audio_mixer.cpp -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -O2  -Wall -fsigned-char -DWITH_MIXER -DWITH_IMAGE -I/usr/include/libpng12 -DWITH_ZLIB -DWITH_TTF -DWITH_XML -DWITH_ZLIB -DWITH_ICONV
In file included from engine.h:33:0,
                 from audio_mixer.cpp:25:
font.h:35:21: фатальная ошибка: SDL_ttf.h: Нет такого файла или каталога
компиляция прервана.
make[2]: *** [audio_mixer.o] Ошибка 1
make[2]: Выход из каталога `/home/danya/fheroes2-code-3277-trunk/fheroes2/src/engine'
make[1]: *** [all] Ошибка 2
make[1]: Выход из каталога `/home/danya/fheroes2-code-3277-trunk/fheroes2/src'
make: *** [all] Ошибка 2


Что ему не нравится?

Автор: Эроласт 31 Aug 2015, 16:12

Цитата
Что ему не нравится?

Цитата
фатальная ошибка: SDL_ttf.h: Нет такого файла или каталога
компиляция прервана.


build-essentials поставь.

Код
$ sudo apt-get update
$ sudo apt-get install build-essentials


Если не заработает - гугли что за SDL_ttf.h и где его взять. Как-нибудь так: https://www.google.com/search?q=SDL_ttf.h+no+such+file.

Автор: t800 31 Aug 2015, 16:47

Кажется получилось brags.gif brags.gif

Цитата(Эроласт @ 31 Aug 2015, 17:12) *
build-essentials поставь.

Код
$ sudo apt-get update
$ sudo apt-get install build-essentials


Так не получилось все равно написала

Код
sudo apt-get install build-essentials
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
E: Не удалось найти пакет build-essentials




Цитата
Если не заработает - гугли что за SDL_ttf.h и где его взять. Как-нибудь так: https://www.google.com/search?q=SDL_ttf.h+no+such+file.


Тогда я через ошибку SDL_ttf.h в гугле нашел такую команду: sudo apt-get install libsdl-ttf2.0-dev libsdl-mixer1.2-dev libsdl-image1.2-dev

Написал

Код
sudo apt-get install libsdl-ttf2.0-dev libsdl-mixer1.2-dev libsdl-image1.2-dev


Потом дал опять команду make all

Компьтер стал что-то долго делать. Десять минут писал какие то.

Код
d.o zzlib.o
a - audio_cdrom.o
a - audio.o
a - audio_mixer.o
a - audio_music.o
a - dir.o
a - display.o
a - engine.o
a - error.o
a - font.o
a - IMG_savepng.o
a - localevent.o
a - rand.o
a - rect.o
a - sdlnet.o
a - serialize.o
a - sprites.o
a - surface.o
a - system.o
a - thread.o
a - tinyconfig.o
a - tools.o
a - translations.o
a - xmi2mid.o
a - zzlib.o
make[2]: Выход из каталога `/home/danya/fheroes2-code-3277-trunk/fheroes2/src/engine'
make -C dist
make[2]: Вход в каталог `/home/danya/fheroes2-code-3277-trunk/fheroes2/src/dist'
cxx: agg.o
cxx: icn.o
cxx: m82.o
cxx: mus.o
cxx: sprite.o
cxx: til.o
cxx: xmi.o
cxx: ai_action.o
cxx: army_bar.o
cxx: army.o
cxx: army_troop.o
cxx: battle_action.o
cxx: battle_arena.o
cxx: battle_army.o
cxx: battle_board.o
cxx: battle_bridge.o
cxx: battle_catapult.o
cxx: battle_cell.o
cxx: battle_command.o
cxx: battle_dialogs.o
cxx: battle_grave.o
cxx: battle_interface.o
cxx: battle_main.o
cxx: battle_only.o
cxx: battle_tower.o
cxx: battle_troop.o
cxx: buildinginfo.o
cxx: captain.o
cxx: castle_building.o
cxx: castle.o
cxx: castle_dialog.o
cxx: castle_mageguild.o
cxx: castle_tavern.o
cxx: castle_town.o
cxx: castle_well.o
cxx: mageguild.o
cxx: dialog_adventure.o
cxx: dialog_arena.o
cxx: dialog_armyinfo.o
cxx: dialog_box.o
cxx: dialog_buyboat.o
cxx: dialog_chest.o
cxx: dialog_file.o
cxx: dialog_frameborder.o
cxx: dialog_gameinfo.o
cxx: dialog_giftresources.o
cxx: dialog_guardian.o
cxx: dialog_levelup.o
cxx: dialog_marketplace.o
cxx: dialog_message.o
cxx: dialog_quickinfo.o
cxx: dialog_recrut.o
cxx: dialog_resourceinfo.o
cxx: dialog_selectcount.o
cxx: dialog_selectfile.o
cxx: dialog_selectitems.o
cxx: dialog_selectscenario.o
cxx: dialog_settings.o
cxx: dialog_skillinfo.o
cxx: dialog_spellinfo.o
cxx: dialog_spriteinfo.o
cxx: dialog_system.o
cxx: dialog_thievesguild.o
cxx: difficulty.o
cxx: fheroes2.o
cxx: game.o
cxx: game_delays.o
cxx: game_highscores.o
cxx: game_hotkeys.o
cxx: game_interface.o
cxx: game_io.o
cxx: game_loadgame.o
cxx: game_mainmenu.o
cxx: game_newgame.o
cxx: game_over.o
cxx: game_scenarioinfo.o
cxx: game_startgame.o
cxx: game_static.o
cxx: button.o
cxx: cursor.o
cxx: interface_border.o
cxx: interface_buttons.o
cxx: interface_cpanel.o
cxx: interface_events.o
cxx: interface_focus.o
cxx: interface_gamearea.o
cxx: interface_icons.o
cxx: interface_radar.o
cxx: interface_status.o
cxx: splitter.o
cxx: statusbar.o
cxx: text.o
cxx: direction.o
cxx: heroes_action.o
cxx: heroes_base.o
cxx: heroes.o
cxx: heroes_dialog.o
cxx: heroes_indicator.o
cxx: heroes_meeting.o
cxx: heroes_move.o
cxx: heroes_recruits.o
cxx: heroes_spell.o
cxx: route.o
cxx: route_pathfind.o
cxx: skill.o
cxx: color.o
cxx: kingdom.o
cxx: kingdom_overview.o
cxx: luck.o
cxx: morale.o
cxx: payment.o
cxx: profit.o
cxx: puzzle.o
cxx: race.o
cxx: speed.o
cxx: week.o
cxx: world.o
cxx: world_loadmap.o
cxx: ground.o
cxx: maps_actions.o
cxx: maps.o
cxx: maps_fileinfo.o
cxx: maps_objects.o
cxx: maps_tiles.o
cxx: maps_tiles_quantity.o
cxx: mp2.o
cxx: position.o
cxx: visit.o
cxx: monster.o
cxx: mounts.o
cxx: objcrck.o
cxx: objdirt.o
cxx: objdsrt.o
cxx: objgras.o
cxx: objlava.o
cxx: objmult.o
cxx: objsnow.o
cxx: objswmp.o
cxx: objtown.o
cxx: objwatr.o
cxx: objxloc.o
cxx: trees.o
cxx: pocketpc_armyinfo.o
cxx: pocketpc_castle.o
cxx: pocketpc_dialog.o
cxx: pocketpc_heroes.o
cxx: pocketpc_kingdom.o
cxx: pocketpc_mainmenu.o
cxx: pocketpc_meeting.o
cxx: pocketpc_selectscenario.o
cxx: pocketpc_thievesguild.o
cxx: artifact.o
cxx: artifact_ultimate.o
cxx: maps_text.o
cxx: resource.o
cxx: spell_book.o
cxx: spell.o
cxx: spell_storage.o
cxx: gamedefs.o
cxx: players.o
cxx: settings.o
cxx: test.o
cxx: test_monstersprite.o
cxx: ai_empty.o


После чего создал мне файл fheroes2 brags.gif brags.gif brags.gif

Автор: Эроласт 31 Aug 2015, 17:23

Цитата
Так не получилось все равно

А, тьфу, s на конце лишняя, надо было
Код
$ sudo apt-get install build-essential

Ну да хрен с ним, если и без него работает.

Цитата
Компьтер стал что-то долго делать. Десять минут писал какие то.

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

Автор: t800 01 Sep 2015, 08:01

Кнопка компании появилась! brags.gif brags.gif




Но когда я не нее нажимаю кнопка нажимается но ничего не происходит sad.gif




Что делать?


Сейчас у меня файл game_newgame.cpp выглядит вот так:


Код
/***************************************************************************
*   Copyright (C) 2009 by Andrey Afletdinov <fheroes2@gmail.com>          *
*                                                                         *
*   Part of the Free Heroes2 Engine:                                      *
*   http://sourceforge.net/projects/fheroes2                              *
*                                                                         *
*   This program 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.                                   *
*                                                                         *
*   This program is distributed in the hope that it will be useful,       *
*   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
*   GNU General Public License for more details.                          *
*                                                                         *
*   You should have received a copy of the GNU General Public License     *
*   along with this program; if not, write to the                         *
*   Free Software Foundation, Inc.,                                       *
*   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
***************************************************************************/

#include "gamedefs.h"
#include "agg.h"
#include "dialog.h"
#include "text.h"
#include "cursor.h"
#include "settings.h"
#include "button.h"
#include "pocketpc.h"
#include "world.h"
#include "game.h"

int Game::NewStandard(void)
{
    Settings & conf = Settings::Get();
    conf.SetGameType(Game::TYPE_STANDARD);
    conf.SetPreferablyCountPlayers(0);
    return Game::SELECTSCENARIO;
}

int Game::NewBattleOnly(void)
{
    Settings & conf = Settings::Get();
    conf.SetGameType(Game::TYPE_BATTLEONLY);

    return Game::NEWMULTI;
}

int Game::NewHotSeat(void)
{
    Settings & conf = Settings::Get();
    conf.SetGameType(conf.GameType() | Game::TYPE_HOTSEAT);

    if(conf.GameType(Game::TYPE_BATTLEONLY))
    {
    conf.SetPreferablyCountPlayers(2);
    world.NewMaps(10, 10);
    return StartBattleOnly();
    }
    else
    {
    const u32 select = conf.QVGA() ? 2 : SelectCountPlayers();
    if(select)
    {
        conf.SetPreferablyCountPlayers(select);
        return Game::SELECTSCENARIO;
    }
    }
    return Game::MAINMENU;
}

int Game::NewCampain(void)
{
    Settings::Get().SetGameType(Game::TYPE_CAMPAIGN);
    VERBOSE("New Campain Game: under construction.");
    return Game::NEWGAME;
}

#ifdef NETWORK_ENABLE
int Game::NewNetwork(void)
{
    Settings & conf = Settings::Get();
    conf.SetGameType(conf.GameType() | Game::TYPE_NETWORK);

    // cursor
    Cursor & cursor = Cursor::Get();
    cursor.Hide();
    cursor.SetThemes(cursor.POINTER);

    Display & display = Display::Get();
    //Settings & conf = Settings::Get();

    // image background
    const Sprite &back = AGG::GetICN(ICN::HEROES, 0);
    const Point top((display.w() - back.w()) / 2, (display.h() - back.h()) / 2);
    back.Blit(top);

    const Sprite &panel = AGG::GetICN(ICN::REDBACK, 0);
    panel.Blit(top.x + 405, top.y + 5);

    LocalEvent & le = LocalEvent::Get();

    Button buttonHost(top.x + 455, top.y + 45, ICN::BTNNET, 0, 1);
    Button buttonGuest(top.x + 455, top.y + 110, ICN::BTNNET, 2, 3);
    Button buttonCancelGame(top.x + 455, top.y + 375, ICN::BTNMP, 8, 9);

    buttonHost.Draw();
    buttonGuest.Draw();
    buttonCancelGame.Draw();

    cursor.Show();
    display.Flip();

    // newgame loop
    while(le.HandleEvents())
    {
    le.MousePressLeft(buttonHost) ? buttonHost.PressDraw() : buttonHost.ReleaseDraw();
    le.MousePressLeft(buttonGuest) ? buttonGuest.PressDraw() : buttonGuest.ReleaseDraw();
    le.MousePressLeft(buttonCancelGame) ? buttonCancelGame.PressDraw() : buttonCancelGame.ReleaseDraw();

    //if(le.MouseClickLeft(buttonHost) || HotKeyPressEvent(EVENT_BUTTON_HOST)) return NetworkHost();
    //if(le.MouseClickLeft(buttonGuest) || HotKeyPressEvent(EVENT_BUTTON_GUEST)) return NetworkGuest();
    if(HotKeyPressEvent(EVENT_DEFAULT_EXIT) || le.MouseClickLeft(buttonCancelGame)) return MAINMENU;

        // right info
    if(le.MousePressRight(buttonHost)) Dialog::Message(_("Host"), _("The host sets up the game options. There can only be one host per network game."), Font::BIG);
    if(le.MousePressRight(buttonGuest)) Dialog::Message(_("Guest"), _("The guest waits for the host to set up the game, then is automatically added in. There can be multiple guests for TCP/IP games."), Font::BIG);
    if(le.MousePressRight(buttonCancelGame)) Dialog::Message(_("Cancel"), _("Cancel back to the main menu."), Font::BIG);
    }

    return Game::MAINMENU;
}
#endif

int Game::NewGame(void)
{
    Mixer::Pause();
    AGG::PlayMusic(MUS::MAINMENU);
    Settings & conf = Settings::Get();

    // reset last save name
    Game::SetLastSavename("");

    if(conf.QVGA()) return PocketPC::NewGame();

    // cursor
    Cursor & cursor = Cursor::Get();
    cursor.Hide();
    cursor.SetThemes(cursor.POINTER);

    Display & display = Display::Get();
    display.Fill(ColorBlack);

    // load game settings
    conf.BinaryLoad();

    // image background
    const Sprite &back = AGG::GetICN(ICN::HEROES, 0);
    const Point top((display.w() - back.w()) / 2, (display.h() - back.h()) / 2);
    back.Blit(top);

    const Sprite &panel = AGG::GetICN(ICN::REDBACK, 0);
    panel.Blit(top.x + 405, top.y + 5);

    LocalEvent & le = LocalEvent::Get();

    Button buttonStandartGame(top.x + 455, top.y + 45, ICN::BTNNEWGM, 0, 1);
    Button buttonMultiGame(top.x + 455, top.y + 110, ICN::BTNNEWGM, 4, 5);
    Button buttonSettings(top.x + 455, top.y + 240, ICN::BTNDCCFG, 4, 5);
    Button buttonCancelGame(top.x + 455, top.y + 375, ICN::BTNNEWGM, 6, 7);
    Button buttonBattleGame(top.x + 455, top.y + 175, ICN::BTNBATTLEONLY, 0, 1);


    Button buttonCampainGame(top.x + 455, top.y + 305, ICN::BTNNEWGM, 2, 3);
    //Button buttonMultiGame(top.x + 455, top.y + 175, ICN::BTNNEWGM, 4, 5);
    //Button buttonSettings(top.x + 455, top.y + 240, ICN::BTNDCCFG, 4, 5);
    //Button buttonCancelGame(top.x + 455, top.y + 375, ICN::BTNNEWGM, 6, 7);

    buttonStandartGame.Draw();
    buttonCampainGame.Draw();
    buttonMultiGame.Draw();
    buttonCancelGame.Draw();
    buttonSettings.Draw();

    if(conf.QVGA())
    buttonBattleGame.SetDisable(true);
    else
    buttonBattleGame.Draw();

    cursor.Show();
    display.Flip();

    // newgame loop
    while(le.HandleEvents())
    {
    le.MousePressLeft(buttonStandartGame) ? buttonStandartGame.PressDraw() : buttonStandartGame.ReleaseDraw();
    le.MousePressLeft(buttonCampainGame) ? buttonCampainGame.PressDraw() : buttonCampainGame.ReleaseDraw();
    le.MousePressLeft(buttonMultiGame) ? buttonMultiGame.PressDraw() : buttonMultiGame.ReleaseDraw();
    le.MousePressLeft(buttonCancelGame) ? buttonCancelGame.PressDraw() : buttonCancelGame.ReleaseDraw();
    le.MousePressLeft(buttonSettings) ? buttonSettings.PressDraw() : buttonSettings.ReleaseDraw();
    buttonBattleGame.isEnable() && le.MousePressLeft(buttonBattleGame) ? buttonBattleGame.PressDraw() : buttonBattleGame.ReleaseDraw();

    if(HotKeyPressEvent(EVENT_BUTTON_STANDARD) || le.MouseClickLeft(buttonStandartGame)) return NEWSTANDARD;
    if(HotKeyPressEvent(EVENT_BUTTON_CAMPAIN) || le.MouseClickLeft(buttonCampainGame)) return NEWCAMPAIN;
    if(HotKeyPressEvent(EVENT_BUTTON_MULTI) || le.MouseClickLeft(buttonMultiGame)) return NEWMULTI;
    if(HotKeyPressEvent(EVENT_BUTTON_SETTINGS) || le.MouseClickLeft(buttonSettings)){ Dialog::ExtSettings(false); cursor.Show(); display.Flip(); }
    if(HotKeyPressEvent(EVENT_DEFAULT_EXIT) || le.MouseClickLeft(buttonCancelGame)) return MAINMENU;

    if(buttonBattleGame.isEnable())
    if(HotKeyPressEvent(EVENT_BUTTON_BATTLEONLY) || le.MouseClickLeft(buttonBattleGame)) return NEWBATTLEONLY;

        // right info
    if(le.MousePressRight(buttonStandartGame)) Dialog::Message(_("Standard Game"), _("A single player game playing out a single map."), Font::BIG);
    if(le.MousePressRight(buttonCampainGame)) Dialog::Message(_("Campaign Game"), _("A single player game playing through a series of maps."), Font::BIG);
    if(le.MousePressRight(buttonMultiGame)) Dialog::Message(_("Multi-Player Game"), _("A multi-player game, with several human players completing against each other on a single map."), Font::BIG);
    if(le.MousePressRight(buttonSettings)) Dialog::Message(_("Settings"), _("FHeroes2 game settings."), Font::BIG);
    if(le.MousePressRight(buttonCancelGame)) Dialog::Message(_("Cancel"), _("Cancel back to the main menu."), Font::BIG);
    }

    return QUITGAME;
}

int Game::NewMulti(void)
{
    Settings & conf = Settings::Get();

    if(! (conf.GameType(Game::TYPE_BATTLEONLY)))
    conf.SetGameType(Game::TYPE_STANDARD);

    if(conf.QVGA()) return PocketPC::NewMulti();

    // cursor
    Cursor & cursor = Cursor::Get();
    cursor.Hide();
    cursor.SetThemes(cursor.POINTER);

    Display & display = Display::Get();

    // image background
    const Sprite &back = AGG::GetICN(ICN::HEROES, 0);
    const Point top((display.w() - back.w()) / 2, (display.h() - back.h()) / 2);
    back.Blit(top);

    const Sprite &panel = AGG::GetICN(ICN::REDBACK, 0);
    panel.Blit(top.x + 405, top.y + 5);

    LocalEvent & le = LocalEvent::Get();

    Button buttonHotSeat(top.x + 455, top.y + 45, ICN::BTNMP, 0, 1);
    Button buttonNetwork(top.x + 455, top.y + 110, ICN::BTNMP, 2, 3);
    Button buttonCancelGame(top.x + 455, top.y + 375, ICN::BTNMP, 8, 9);

    buttonHotSeat.Draw();
    buttonCancelGame.Draw();
    buttonNetwork.SetDisable(true);

    cursor.Show();
    display.Flip();

    // newgame loop
    while(le.HandleEvents())
    {
    le.MousePressLeft(buttonHotSeat) ? buttonHotSeat.PressDraw() : buttonHotSeat.ReleaseDraw();
    le.MousePressLeft(buttonCancelGame) ? buttonCancelGame.PressDraw() : buttonCancelGame.ReleaseDraw();

    if(le.MouseClickLeft(buttonHotSeat) || HotKeyPressEvent(EVENT_BUTTON_HOTSEAT)) return NEWHOTSEAT;
    if(HotKeyPressEvent(EVENT_DEFAULT_EXIT) || le.MouseClickLeft(buttonCancelGame)) return MAINMENU;

        // right info
    if(le.MousePressRight(buttonHotSeat)) Dialog::Message(_("Hot Seat"), _("Play a Hot Seat game, where 2 to 4 players play around the same computer, switching into the 'Hot Seat' when it is their turn."), Font::BIG);
    if(le.MousePressRight(buttonCancelGame)) Dialog::Message(_("Cancel"), _("Cancel back to the main menu."), Font::BIG);

#ifdef NETWORK_ENABLE
    if(buttonNetwork.isEnable())
    {
        le.MousePressLeft(buttonNetwork) ? buttonNetwork.PressDraw() : buttonNetwork.ReleaseDraw();
        if(le.MouseClickLeft(buttonNetwork) || HotKeyPressEvent(EVENT_BUTTON_NETWORK)) return NEWNETWORK;
        if(le.MousePressRight(buttonNetwork)) Dialog::Message(_("Network"), _("Play a network game, where 2 players use their own computers connected through a LAN (Local Area Network)."), Font::BIG);
    }
#endif
    }

    return QUITGAME;
}

u32 Game::SelectCountPlayers(void)
{
    // cursor
    Cursor & cursor = Cursor::Get();
    cursor.Hide();
    cursor.SetThemes(cursor.POINTER);

    Display & display = Display::Get();

    // image background
    const Sprite &back = AGG::GetICN(ICN::HEROES, 0);
    const Point top((display.w() - back.w()) / 2, (display.h() - back.h()) / 2);
    back.Blit(top);

    const Sprite &panel = AGG::GetICN(ICN::REDBACK, 0);
    panel.Blit(top.x + 405, top.y + 5);

    LocalEvent & le = LocalEvent::Get();

    Button button2Players(top.x + 455, top.y + 45, ICN::BTNHOTST, 0, 1);
    Button button3Players(top.x + 455, top.y + 110, ICN::BTNHOTST, 2, 3);
    Button button4Players(top.x + 455, top.y + 175, ICN::BTNHOTST, 4, 5);
    Button button5Players(top.x + 455, top.y + 240, ICN::BTNHOTST, 6, 7);
    Button button6Players(top.x + 455, top.y + 305, ICN::BTNHOTST, 8, 9);
    Button buttonCancel(top.x + 455, top.y + 375, ICN::BTNNEWGM, 6, 7);

    button2Players.Draw();
    button3Players.Draw();
    button4Players.Draw();
    button5Players.Draw();
    button6Players.Draw();
    buttonCancel.Draw();

    cursor.Show();
    display.Flip();

    // newgame loop
    while(le.HandleEvents())
    {
    le.MousePressLeft(button2Players) ? button2Players.PressDraw() : button2Players.ReleaseDraw();
    le.MousePressLeft(button3Players) ? button3Players.PressDraw() : button3Players.ReleaseDraw();
    le.MousePressLeft(button4Players) ? button4Players.PressDraw() : button4Players.ReleaseDraw();
    le.MousePressLeft(button5Players) ? button5Players.PressDraw() : button5Players.ReleaseDraw();
    le.MousePressLeft(button6Players) ? button6Players.PressDraw() : button6Players.ReleaseDraw();

    le.MousePressLeft(buttonCancel) ? buttonCancel.PressDraw() : buttonCancel.ReleaseDraw();

    if(le.MouseClickLeft(button2Players) || le.KeyPress(KEY_2)) return 2;
    if(le.MouseClickLeft(button3Players) || le.KeyPress(KEY_3)) return 3;
    if(le.MouseClickLeft(button4Players) || le.KeyPress(KEY_4)) return 4;
    if(le.MouseClickLeft(button5Players) || le.KeyPress(KEY_5)) return 5;
    if(le.MouseClickLeft(button6Players) || le.KeyPress(KEY_6)) return 6;

    if(HotKeyPressEvent(Game::EVENT_DEFAULT_EXIT) || le.MouseClickLeft(buttonCancel)) return 0;

        // right info
    if(le.MousePressRight(button2Players)) Dialog::Message(_("2 Players"), _("Play with 2 human players, and optionally, up, to 4 additional computer players."), Font::BIG);
    if(le.MousePressRight(button3Players)) Dialog::Message(_("3 Players"), _("Play with 3 human players, and optionally, up, to 3 additional computer players."), Font::BIG);
    if(le.MousePressRight(button4Players)) Dialog::Message(_("4 Players"), _("Play with 4 human players, and optionally, up, to 2 additional computer players."), Font::BIG);
    if(le.MousePressRight(button5Players)) Dialog::Message(_("5 Players"), _("Play with 5 human players, and optionally, up, to 1 additional computer players."), Font::BIG);
    if(le.MousePressRight(button6Players)) Dialog::Message(_("6 Players"), _("Play with 6 human players."), Font::BIG);
    if(le.MousePressRight(buttonCancel)) Dialog::Message(_("Cancel"), _("Cancel back to the main menu."), Font::BIG);
    }

    return 0;
}

Автор: Orzie 01 Sep 2015, 08:48

Она и не должна работать, лол. Я же предупреждал. Ты всего лишь вернул картинку в игру, но скорее всего, кода, который заставит её работать, в фрихероес в принципе нет.

Пиши автору, ищи его емейл на сайте проекта. Я сейчас в другом городе и не могу посмотреть свою переписку с ним.

Автор: t800 01 Sep 2015, 09:20

Цитата(Orzie @ 01 Sep 2015, 09:48) *
Пиши автору, ищи его емейл на сайте проекта. Я сейчас в другом городе и не могу посмотреть свою переписку с ним.


Я писал на fheroes2@gmail.com неделю назад еще никто не ответил.

Цитата(Orzie @ 01 Sep 2015, 09:48) *
Она и не должна работать, лол. Я же предупреждал. Ты всего лишь вернул картинку в игру, но скорее всего, кода, который заставит её работать, в фрихероес в принципе нет.


Я нарисовал карты по сценарию. Хочу сделать чтобы когда нажимаю кнопку компания сразу запускалась игра на первой карте, а картинки потом сделаю, вначале пусть сразу играет и чтобы когда игра закончится сразу игра на следующей карте шла. А автор на письмо не отвечает sad.gif

Автор: Эроласт 01 Sep 2015, 09:45

Цитата
Хочу сделать чтобы когда нажимаю кнопку компания сразу запускалась игра на первой карте

Изучай С++, реализуй, в чем проблемы-то? Компилировать вон уже научился)

Автор: t800 01 Sep 2015, 09:55

Цитата(Эроласт @ 01 Sep 2015, 10:45) *
Цитата
Хочу сделать чтобы когда нажимаю кнопку компания сразу запускалась игра на первой карте

Изучай С++, реализуй, в чем проблемы-то? Компилировать вон уже научился)


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

Автор: Эроласт 01 Sep 2015, 10:24

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

Автор: t800 01 Sep 2015, 11:18

Цитата(Эроласт @ 01 Sep 2015, 10:24) *
Ну, во-первых, просто команд (только давай по-нормальному: алгоритма) тебе будет недостаточно, надо еще знать, куда их вставлять; во-вторых, ни того, ни другого не узнать без изучения кода движка.


Вставлять в файл game_newgame.cpp он же новую игру запускает потому что называется newgame.

Там про команию есть такие команды

Код
int Game::NewCampain(void)
{
    Settings::Get().SetGameType(Game::TYPE_CAMPAIGN);
    VERBOSE("New Campain Game: under construction.");
    return Game::NEWGAME;
}


Я просмотрел это значит что программа говорит "Новая компания: в стадии строительства"
А надо чтобы не говорила "Новая компания: в стадии строительства" а просто запустила игру на моей карте.
Ей надо вместо команды VERBOSE("New Campain Game: under construction."); дать команду
сразу запустить новую игру на моей карте, просто я не знаю какой командой.

Автор: Эроласт 01 Sep 2015, 11:26

Цитата
надо чтобы не говорила "Новая компания: в стадии строительства" а просто запустила игру на моей карте.

Посмотри, как это реализовано в функции Game::NewStandard.

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

Автор: t800 01 Sep 2015, 11:35

Цитата(Эроласт @ 01 Sep 2015, 11:26) *
Цитата
надо чтобы не говорила "Новая компания: в стадии строительства" а просто запустила игру на моей карте.

Посмотри, как это реализовано в функции Game::NewStandard.

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


Герой же все равно сразу на карте прописан. Можно сделать чтобы после окончания первой игры сразу запускалась игра на второй карте. Правда с рейтингом не понятно что будет. Но это потом можно сделать когда картинки вставлять буду.

Автор: t800 01 Sep 2015, 15:03

Я сейчас хочу сделать так. Нажимаешь кнопку Компания. Сразу запускается игра с карты номер 1. Без выбора и без ничего. Просто Герой сразу на карте оказывается. Если игрок первую игру выигрывает то открывается игра на карте номер 2 и так далее. Должна же быть какая то команда чтобы запустила игру на карте. И чтобы если игрок игру на моей карте закончил сразу запустила игру на второй карте.

Автор: Эроласт 01 Sep 2015, 17:02

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

Причем, куда вставлять - это не просто файл, это еще и функция и порядок в функции.

Херней страдаешь, в общем. То, что ты пытаешься делать, называется программированием, а программировать ты не умеешь. Сперва научись.

Автор: t800 01 Sep 2015, 18:08

Цитата(Эроласт @ 01 Sep 2015, 17:02) *
Цитата
Ну, во-первых, просто команд (только давай по-нормальному: алгоритма) тебе будет недостаточно, надо еще знать, куда их вставлять; во-вторых, ни того, ни другого не узнать без изучения кода движка.

Причем, куда вставлять - это не просто файл, это еще и функция и порядок в функции.

Херней страдаешь, в общем. То, что ты пытаешься делать, называется программированием, а программировать ты не умеешь. Сперва научись.


Но вы ведь умеете. Подскажите куда что вставлять. Я посмотрю и попробую научится.

Автор: SaintDark 01 Sep 2015, 18:16

Цитата(t800 @ 02 Sep 2015, 01:08) *
Но вы ведь умеете. Подскажите куда что вставлять. Я посмотрю и попробую научится.


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

Автор: Эроласт 01 Sep 2015, 18:44

Цитата
Но вы ведь умеете. Подскажите куда что вставлять. Я посмотрю и попробую научится.

Умею. Но
Цитата
Ну, во-первых, просто команд (только давай по-нормальному: алгоритма) тебе будет недостаточно, надо еще знать, куда их вставлять; во-вторых, ни того, ни другого не узнать без изучения кода движка.


То есть, ты не понял, что такое программирование в принципе. Это не все равно, что скопировать в терминал убунты несколько команд из гугла. Программный код - это сложная система, где все взаимосвязано. Нельзя просто так взять и приписать к существующему коду новый функционал; это все равно, что ты сейчас притащишь партитуру симфонии и спросишь, какие ноты надо вставить, чтобы звучало повеселей.


Автор: t800 12 Sep 2015, 12:34

Немного разобрался в командах и как их изменять! brags.gif brags.gif brags.gif

Первое! Чтобы легко было менять команды это надо делать не через блокнотик.
А через редактор Anjuta потому что у него подсказки! brags.gif brags.gif brags.gif

Чтобы этот редактор поставить надо дать такую команду

Код
danya@danya:~$sudo apt-get install anjuta


И в этом реадакторе надо открыть MakeFile в папочке fheroes2 и редактор сразу увидит все исходые файлы и если файл открыть
редактор сам делает подсказки.

Я отрыл файл game_newgame.cpp и там где была команда int Game::NewCampain(void)
и вместо них написал такие команды которые я скопировал из файла game_loadgame.cpp
там эти команды загружают сохраненные игры.

Код
int Game::NewCampain(void)
{
  // Settings::Get().SetGameType(Game::TYPE_CAMPAIGN);
  // VERBOSE("New Campain Game: under construction.");
  // return Game::NEWCAMPAIN;
  
    Cursor & cursor = Cursor::Get();
    cursor.Hide();
    cursor.SetThemes(cursor.POINTER);

    Display & display = Display::Get();
    display.Fill(ColorBlack);

    // image background
    const Sprite &back = AGG::GetICN(ICN::HEROES, 0);
    const Point top((display.w() - back.w()) / 2, (display.h() - back.h()) / 2);
    back.Blit(top);

    cursor.Show();
    display.Flip();

    //std::string file = Dialog::SelectFileLoad();
    std::string file = Dialog::SelectFileCampainLoad();
    if(file.empty() || !Game::Load(file)) return MAINMENU;
    return STARTGAME;

}


Но только вместо команды Dialog::SelectFileLoad(); я написал Dialog::SelectFileCampainLoad();
И попробовал собрать игру. Это можно делать прямое в редакторе. Просто нажать Собрать Проект!
Но редактор собрать игру не смог а заругался что команда SelectFileCampainLoad() не описана в каком то
Dialog тогда я решил посмотреть где записана команда SelectFileLoad()

Для этого я дал такую команду

Код
danya@danya:~$ grep -rl 'SelectFileLoad' fheroes2-code-3277-trunk/fheroes2/src/
fheroes2-code-3277-trunk/fheroes2/src/fheroes2/game/game_loadgame.cpp
fheroes2-code-3277-trunk/fheroes2/src/fheroes2/game/game_newgame.cpp
fheroes2-code-3277-trunk/fheroes2/src/fheroes2/dialog/dialog.h
fheroes2-code-3277-trunk/fheroes2/src/fheroes2/dialog/dialog_selectfile.cpp


Потом открыл в редакторе dialog.h и dialog_selectfile.cpp
Нашел там команды SelectFileLoad

Код
std::string Dialog::SelectFileLoad(void)
{
    const std::string & lastfile = Game::GetLastSavename();
    return SelectFileListSimple(_("File to Load:"), (lastfile.size() ? lastfile : ""), false);
}


прото скопировал их и изменил FileLoad на FileCampainLoad

Код
std::string Dialog::SelectFileLoad(void)
{
    const std::string & lastfile = Game::GetLastSavename();
    return SelectFileListSimple(_("File to Load:"), (lastfile.size() ? lastfile : ""), false);
}


И еще я поменял надпись File to Load на Campain to Play
Код
std::string Dialog::SelectFileCampainLoad(void)
{
    const std::string & lastfile = Game::GetLastSavename();
    return SelectFileListSimple(_("Campain to Play:"), (lastfile.size() ? lastfile : ""), false);
}


И все получилось! Редактор перестал ругаться и собрал игру! brags.gif brags.gif brags.gif

И сейчас когда нажимаешь кнопку компании. Отображаются игры компании.
И можно запустить игры Компании T-800 brags.gif brags.gif brags.gif



Правда не могу понять что надо как сделать чтобы после окончания первого эпизода сразу запускался следующий
и чтобы нельзя было запустить до того как сыграл предыдущий потому что сейчас они все запускаются sad.gif

Автор: Orzie 12 Sep 2015, 19:02

Рад, что ты быстро учишься. Но слово Campaign пиши правильно, заклинаю тебя.

Автор: Эроласт 12 Sep 2015, 21:06

Цитата
Чтобы легко было менять команды это надо делать не через блокнотик. А через редактор Anjuta потому что у него подсказки!

Ну да. Это называется IDE, то есть, Integrated Development Environment. Anjuta не единственна в своем роде, существуют и другие подобные. Советую как-нибудь погуглить "linux c++ IDE" и поизучать варианты.

Цитата
после окончания первого эпизода сразу запускался следующий

Можно в файле `src\fheroes2\game\game_over.cpp` в функции GameOver::Result::LocalCheckGameOver поменять 338-339 строки на
Код
GameOver::DialogWins(result);

if (Settings::Get().GameType(Game::TYPE_CAMPAIGN))
{
    res = GAME::NEWCAMPAIN;
}
else
{
    res = Game::HIGHSCORES;
}

Тогда при завершении сценария будет сразу открываться меню выбора кампании.

Большего не подскажу: для этого надо весь код проекта изучать, а он большой и грязный.

Цитата
слово Campaign пиши правильно, заклинаю тебя

Аха. И, пожалуйста, "код", а не "команды". Команды - это в терминале.

---

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

Автор: t800 13 Sep 2015, 07:18

Цитата(Эроласт @ 12 Sep 2015, 22:06) *
Можно в файле `src\fheroes2\game\game_over.cpp` в функции GameOver::Result::LocalCheckGameOver поменять 338-339 строки на
Код
GameOver::DialogWins(result);

if (Settings::Get().GameType(Game::TYPE_CAMPAIGN))
{
    res = GAME::NEWCAMPAIN;
}
else
{
    res = Game::HIGHSCORES;
}

Тогда при завершении сценария будет сразу открываться меню выбора кампании.


Попробовал в game_over.cpp сделать как вы сказали. Не открывается меню выбора камании. no.gif no.gif

Выдает рейтинг а потом в главное меню.

Я Потом даже на всякий случай в game_newgame.cpp палочки перед кодом команды

//Settings::Get().SetGameType(Game::TYPE_CAMPAIGN);

убрал я и вот так сделал

Код
int Game::NewCampain(void)
{
   Settings::Get().SetGameType(Game::TYPE_CAMPAIGN);
  // VERBOSE("New Campain Game: under construction.");
  // return Game::NEWCAMPAIN;
  
    Cursor & cursor = Cursor::Get();
    cursor.Hide();
    cursor.SetThemes(cursor.POINTER);

    Display & display = Display::Get();
    display.Fill(ColorBlack);

    // image background
    const Sprite &back = AGG::GetICN(ICN::HEROES, 0);
    const Point top((display.w() - back.w()) / 2, (display.h() - back.h()) / 2);
    back.Blit(top);

    cursor.Show();
    display.Flip();

    //std::string file = Dialog::SelectFileLoad();
    std::string file = Dialog::SelectFileCampainLoad();
    if(file.empty() || !Game::Load(file)) return MAINMENU;
    return STARTGAME;

}


И все равно выдает рейтинг а потом в главное меню. dunno.gif


Автор: Эроласт 13 Sep 2015, 09:18

Цитата
в game_newgame.cpp палочки перед кодом команды

//Settings::Get().SetGameType(Game::TYPE_CAMPAIGN);

убрал

А, ну да, так и надо. Зачем ты их вообще туда ставил?)

Цитата
И все равно выдает рейтинг а потом в главное меню.

Тогда хз. По логике должно было заработать.
Цитата
для этого надо весь код проекта изучать, а он большой и грязный

Автор: t800 13 Sep 2015, 14:54

Цитата(Эроласт @ 13 Sep 2015, 10:18) *
Цитата
в game_newgame.cpp палочки перед кодом команды

//Settings::Get().SetGameType(Game::TYPE_CAMPAIGN);

убрал

А, ну да, так и надо. Зачем ты их вообще туда ставил?)

Цитата
И все равно выдает рейтинг а потом в главное меню.

Тогда хз. По логике должно было заработать.
Цитата
для этого надо весь код проекта изучать, а он большой и грязный



Я сделал поиск по TYPE_CAMPAIGN и нашел в файлике game.h такую команду

Код
enum { TYPE_MENU = 0, TYPE_STANDARD = 0x01, TYPE_CAMPAIGN = 0x02, TYPE_HOTSEAT = 0x04, TYPE_NETWORK = 0x08, TYPE_BATTLEONLY = 0x10, TYPE_LOADFILE = 0x80, TYPE_MULTI = TYPE_HOTSEAT | TYPE_NETWORK };

Решил поменять коде команды TYPE_CAMPAIGN на TYPE_STANDARD чтоб проверить что будет


Код
GameOver::DialogWins(result);

if (Settings::Get().GameType(Game::TYPE_STANDART))
{
    res = GAME::NEWCAMPAIN;
}
else
{
    res = Game::HIGHSCORES;
}


Собрал игру и она действительно открыла меню Кампании.



Я думаю что она считает что игра STANDART не CAMPAIGN Но не могу понять как она это определяет. Может это где-нибудь в самой карте надо прописать? Просто сейчас ведь эпизоды компании через зашрузку сейвов стандартных игр сделал. Как она вообще узнает что это STANDART? Эти цифирки TYPE_CAMPAIGN = 0x02 что они обозначают?
Может их куда-нибудь в сейв игры написать надо?

Автор: Лорд Хаарт 13 Sep 2015, 17:24

Цитата
Я сделал поиск по TYPE_CAMPAIGN и нашел в файлике game.h такую команду

Код
enum { TYPE_MENU = 0, TYPE_STANDARD = 0x01, TYPE_CAMPAIGN = 0x02, TYPE_HOTSEAT = 0x04, TYPE_NETWORK = 0x08, TYPE_BATTLEONLY = 0x10, TYPE_LOADFILE = 0x80, TYPE_MULTI = TYPE_HOTSEAT | TYPE_NETWORK };


Кажется мне, что это команда, делающая из разных переменных одно число, хранящее в двоичной записи в разных разрядах данные о разных характеристиках игры. Стандартная игра записана числом 1, загрузка сохранённой игры — шестнадцатеричным числом 80 (128 в десятичной записи, 10000000 в двоичной). Игра тут обращается к каждому двоичному знаку переменной, смотря, ноль там или единица, для разных параметров. Обычно такой формат используется, когда может быть несколько таких состояний одновременно (число 16 в шестнадцатеричной=22 в десятичной=10110 в двоичной обозначало бы игру, являющуюся battle-only, кампанией и хотситом одновременно; никаким другим сочетанием параметров такую сумму тут не получишь) — например, флаги существ в большинстве игр, так как проще завести одно такое число, чем по переменной на каждый флаг — но зафига он использован тут, не очень ясно.


Всем скептикам в теме (особенно вам двоим, вы знаете, кого я имею в виду: у человека есть мозги, энтузиазм, способность разбираться, он сейчас с нулём помощи на чистом методе тыка без мануалов ушёл потрясающе далеко. Чем твердить "учи язык", дайте ему ссылки на мануалы — вооружившись ими, Т-800, по-моему, горы свернёт. Лишь бы энтузиазм не пропал и талант не зарыли — с такими задатками и с хоть какими материалами для изучения через несколько лет легко получится второй Феанор.

P. S. Не удивлюсь, если кода на то, чтобы переходить от одного сценария кампании сразу к другому, а не выходить на экран победы, и чтобы карты кампаний не отображались как обычные, в проекте просто ещё нет и его придётся дописать самому.

Автор: SaintDark 13 Sep 2015, 18:02

Тут скорее не обозначение типа игры как таковой, а обозначение текущего состояния (сцены?!) экрана. Так, например, type_campaign - окно (выбора?!) кампании, scenario - сценария, battleonly - состояния битвы, loadfile - загрузки файла, multi -выбор режима. Все вышесказанное является догадками, не претендующими на безоговорочную истину.

Автор: Эроласт 13 Sep 2015, 18:36

Цитата
Я думаю что она считает что игра STANDART не CAMPAIGN Но не могу понять как она это определяет. Может это где-нибудь в самой карте надо прописать?

Вообще тип игры должен был установиться через Settings::Get().SetGameType(Game::TYPE_CAMPAIGN) в функции начала компании. Почему в итоге оказывается Game::TYPE_STANDARD вместо Game::CAMPAIGN - хз.

Цитата
Эти цифирки TYPE_CAMPAIGN = 0x02 что они обозначают?

Это шестнадцатиричный формат записи числа.



Цитата
н сейчас с нулём помощи на чистом методе тыка без мануалов ушёл потрясающе далеко

Запилить скопировать реализацию интерфейса начала кампании - это далеко?)

Цитата
дайте ему ссылки на мануалы

Что за мануалы?

Автор: t800 13 Sep 2015, 19:17

Цитата(Лорд Хаарт @ 13 Sep 2015, 18:24) *
Цитата
Я сделал поиск по TYPE_CAMPAIGN и нашел в файлике game.h такую команду

Код
enum { TYPE_MENU = 0, TYPE_STANDARD = 0x01, TYPE_CAMPAIGN = 0x02, TYPE_HOTSEAT = 0x04, TYPE_NETWORK = 0x08, TYPE_BATTLEONLY = 0x10, TYPE_LOADFILE = 0x80, TYPE_MULTI = TYPE_HOTSEAT | TYPE_NETWORK };


Кажется мне, что это команда, делающая из разных переменных одно число, хранящее в двоичной записи в разных разрядах данные о разных характеристиках игры. Стандартная игра записана числом 1, загрузка сохранённой игры — шестнадцатеричным числом 80 (128 в десятичной записи, 10000000 в двоичной). Игра тут обращается к каждому двоичному знаку переменной, смотря, ноль там или единица, для разных параметров. Обычно такой формат используется, когда может быть несколько таких состояний одновременно (число 16 в шестнадцатеричной=22 в десятичной=10110 в двоичной обозначало бы игру, являющуюся battle-only, кампанией и хотситом одновременно; никаким другим сочетанием параметров такую сумму тут не получишь) — например, флаги существ в большинстве игр, так как проще завести одно такое число, чем по переменной на каждый флаг — но зафига он использован тут, не очень ясно.


Получилось yahoo.gif yahoo.gif yahoo.gif

Сперва я сделал поиск по всем файлам на TYPE_CAMPAIGN и нигде кроме в game.h болше не нашел
Тогда я решил просто попробовать в файле newgame.cpp в код команды

Код
int Game::NewStandard(void)
{
    Settings & conf = Settings::Get();
    conf.SetGameType(Game::TYPE_STANDARD);
    conf.SetPreferablyCountPlayers(0);
    return Game::SELECTSCENARIO;
}


Вместо TYPE_STANDARD подставить TYPE_CAMPAIGN и посмотреть что получится.
Подставил. Собрал игру. Запустил Standart Game. Выиграл и попал в меню выбора Кампани!!!!!
Тогда я подумал наверно игра при создании кудато пишет в в savе файл этот TYPE_STANDARD = 0x01 или TYPE_CAMPAIGN = 0x02. А я эпизоды делал из сейвов стандартный карт когда они создавались как TYPE_STANDARD И просто решил их пересоздать заново теперь когда стандартная игра создается как TYPE_CAMPAIGN потом переименовал их в .сam удалил в папочке campain свои старые эпизоды и полжить туда новые в которых вместо TYPE_STANDARD игра поставила TYPE_CAMPAIGN. А потом я опять вернул на место TYPE_STANDARD в команде

Код
    conf.SetGameType(Game::TYPE_STANDARD);


И опять пересобрал игру. Запустил. И все заработало!!! yahoo.gif yahoo.gif yahoo.gif

И теперь когда выигрываешь сценарий кампании сразу попадаешь в меню выбора кампании.
А когда выигрываешь стандартную игру попадаешь в рейтинг. yahoo.gif yahoo.gif yahoo.gif


Автор: Эроласт 14 Sep 2015, 11:22

Если тип берется из сохранения - тогда да, все логично.

Попробуй в функции Game::NewCampain переставить строку "Settings::Get().SetGameType(Game::TYPE_CAMPAIGN);" в конец, перед операцией "return STARTGAME". Тогда тип должен будет принудительно меняться на TYPE_CAMPAIGN уже после загрузки сценария и можно будет использовать сейвы стандартных.

Автор: t800 14 Sep 2015, 14:08

Цитата(Эроласт @ 14 Sep 2015, 12:22) *
Если тип берется из сохранения - тогда да, все логично.

Попробуй в функции Game::NewCampain переставить строку "Settings::Get().SetGameType(Game::TYPE_CAMPAIGN);" в конец, перед операцией "return STARTGAME". Тогда тип должен будет принудительно меняться на TYPE_CAMPAIGN уже после загрузки сценария и можно будет использовать сейвы стандартных.


Получилось! yahoo.gif yahoo.gif

Поставил Settings::Get().SetGameType(Game::TYPE_CAMPAIGN);
перед командой return STARTGAME скопировал стандартный save
после выигрыша попал опять в команию а не в рейтинг yahoo.gif yahoo.gif

А почему опять в кампанию а не в выбор кампании? Разобрался с командой как можно сразу запускать игру кампании а не через меню. yahoo.gif yahoo.gif

Для этого надо в файле newgame.cpp

Команду

Код
std::string file = Dialog::SelectFileCampainLoad();


Поменять на

Код
std::string file = "files/campain/T-800 Epizode 1.sav";


Нажал на кнопку кампнии и сразу запустилась игра.

Потом в файле gameover.cpp я сделал вот так

Код
if (Settings::Get().GameType(Game::TYPE_CAMPAIGN))
{
    res = Game::NEXTCAMPAIN;
}
else
{
    res = Game::HIGHSCORES;
}
И попробовал собрать игру. Но она заругалась сказал что NEXTCAMPAIN нету в Game тогда я в файле newgame.cpp скпопировал код команд для кампании
и тут же вставил чуть ниже и поменял в его названии NewCampain на NextCampain отправил на сборку она опять заругалась что
NEXTCAMPAIN гдето нет. Тогда я сделал поиск на слову NEWCAMPAIN

Код
danya@danya:~/fheroes2-code-3277-trunk/fheroes2$ grep -rl 'NEWCAMPAIN' src/
src/fheroes2/game/fheroes2.cpp
src/fheroes2/game/game.h
src/fheroes2/game/game_newgame.cpp


И во файлах fheroes2.cpp game.h где строчки с командами NEWCAMPAIN скопировал ниже и поменял
в них NEWCAMPAIN на NEХTCAMPAIN, потом в файле newgame.cpp вернул на место команду
std::string file = Dialog::SelectFileCampainLoad();

В командах для NEXTCAMPAIN написал

Код
int Game::NextCampain(void)
{
   std::string file = "files/campain/T-800 Epizode 1.sav";
    if(file.empty() || !Game::Load(file)) return MAINMENU;
    return STARTGAME;
}


Потом собрал игру и все заработало сейчас после окончания первой игры компании сразу же запускается вторая! yahoo.gif yahoo.gif







И еще VDV_forever сказал когда доделаю кампании можно будет запустить турнир. cavalrykb.gif cavalrykb.gif cavalrykb.gif

И я подумал что для турнира наверное надо чтобы вычислялся рейтиг. А чтобы можно было сделать много сюжетных линии наверно надо чтобы игра следующие эпизоды не сама из себя брала как я сейчас сделал , чтобы из текстового файлика t800.txt который положить в папочку campain и чтобы в нем записавать имена сейвов в том порядке как их надо загружать так будет проще эпизоды добавлять и даже КАМПАНИИ! Чтобы так было: кампания называется T-800 берет из файлика T-800.txt , а если называется Chapaev то берет из файлика Chapaev.txt . Не подскажите какими командами это сделать?

Автор: Orzie 14 Sep 2015, 19:00

Цитата
И еще VDV_forever сказал когда доделаю кампании можно будет запустить турнир.

Не будет никаких турниров) У Дмитрия нет сейчас времени даже на обычный, не говоря уже о твоём моде "замени пару красивых игровых портретов на пару вырвиглазных рипов".
Даже новогодний вряд ли будет делаться в этом году.

Кампания твоя работает только в FreeHeroes, а на нём турниры немыслимы даже в теории. Даже если бы "турниры по кампаниям" вообще существовали, лол.

Автор: t800 14 Sep 2015, 19:56

Цитата(Orzie @ 14 Sep 2015, 20:00) *
Цитата
И еще VDV_forever сказал когда доделаю кампании можно будет запустить турнир.

Не будет никаких турниров) У Дмитрия нет сейчас времени даже на обычный, не говоря уже о твоём моде "замени пару красивых игровых портретов на пару вырвиглазных рипов".
Даже новогодний вряд ли будет делаться в этом году.

Кампания твоя работает только в FreeHeroes, а на нём турниры немыслимы даже в теории. Даже если бы "турниры по кампаниям" вообще существовали, лол.


Не знаю. Про турнир это VDV_forever так сказал. Я просто хотел сделать кампанию чтобы по сюжету книг была, а не для турниров. А рейтинг все равно надо сделать. Потому что не интересно играть когда не знаешь хорошо победил или плохо. И чтобы другии кампании можно было загружать тоже надо потому, что каждый раз заново игру собирать это не удобно. Удобно чтобы компании можно как карты было загружать. Слелал камапанию положил в папочку campain и она в игре появилась.

Автор: t800 14 Sep 2015, 20:48

Цитата(Orzie @ 14 Sep 2015, 20:00) *
Кампания твоя работает только в FreeHeroes, а на нём турниры немыслимы даже в теории.


Не знаю. Я погуглил во FreeHeroes люди играют

https://play.google.com/store/apps/details?id=net.sourceforge.fheroes2&hl=ru

И жалуются что кампании нет. А теперь кампании будут !!! barb_metal.gif
Надо только рейтинг сделать и загрузку сценариев из текстового файлика.

Автор: Orzie 14 Sep 2015, 21:28

Я тебе ещё раз говорю: FreeHeroes в текущем виде неиграбельна из-за тупого искусственного интеллекта, и турниров по этой причине на ней не будет.

Цитата
И жалуются что кампании нет. А теперь кампании будут !!!

Они хотят, эм, не твои кампании, а оригинальные.

Автор: t800 15 Sep 2015, 06:08

Цитата(Orzie @ 14 Sep 2015, 22:28) *
Цитата
И жалуются что кампании нет. А теперь кампании будут !!!

Они хотят, эм, не твои кампании, а оригинальные.


Думаешь им нужны оригинальные? Оригинальные кампании тоже можно загрузить.
Вот загрузил archi.gif roland.gif yahoo.gif yahoo.gif yahoo.gif


Для этого просто надо было переименовать файлы оригинальных кампаний из .НС2 сперва в .MP2 потом отрыть эпизоды через Standart Game пересохранить перенести сейвы в папочку campain и переименовать их в .саm и все получилось!

И можно играть оригинальные. Надо только рейтинг сделать и чтобы из файликов порядок сценариев брала.

Хотя я думаю что интересней играть кампании которые не знаешь! И в кампанию T-800 играть им будет интересней чем в оригиринальные. Потому что в оригинальные уже играли а в T-800 еще ни разу не играли.

Автор: Orzie 15 Sep 2015, 07:18

Давай не будем сравнивать наколенную поделку 11летнего мальчика и официальную кампанию. Я тебе что про самокритику говорил?

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

Автор: t800 15 Sep 2015, 15:30

Ну никак не могу разобоаться с командами чтобы игра порядок эпизодов брала из текстового файликиков t800.txt good1.txt и evil1.txt которые я положил в папочку campain с именами эпизодов no.gif no.gif

Вот например good1.txt

Код
CAMPG01.cam
CAMPG02.cam
CAMPG03.cam
CAMPG04.cam
CAMPG05B.cam
CAMPG05.cam
CAMPG06.cam
CAMPG07.cam
CAMPG08.cam
CAMPG09.cam
CAMPG10.cam
CAMPE11.cam


Не могу разобраться какие команды надо вставить в

Код
int Game::NextCampain(void)
{
   std::string file = "files/campain/T-800 Epizode 1.sav";
   if(file.empty() || !Game::Load(file)) return MAINMENU;
   return STARTGAME;
}


вместо std::string file = "files/campain/T-800 Epizode 1.sav";
чтобы игра брала список из файла смотрела какую игру она сейчас закончила
например CAMPG01.cam и загружала бы следующую по списку.

Автор: Эроласт 15 Sep 2015, 17:06

Гугли что-нибудь вроде "c++ работа с файлами" или "c++ read a file".
https://www.google.com/search?q=c%2B%2B+работа+с+файлами

Автор: t800 15 Sep 2015, 17:28

Цитата(Эроласт @ 15 Sep 2015, 17:06) *
Гугли что-нибудь вроде "c++ работа с файлами" или "c++ read a file".
https://www.google.com/search?q=c%2B%2B+работа+с+файлами


Нашел вот такие команды

Код
std::string item_name;
std::ifstream nameFile;

nameFile.open("files/campain/t800.txt");
while (nameFile >> item_name)
{
    std::getline(nameFile, item_name);
}
nameFile.close();


Попробовал вставить в


Код
int Game::NewCampain(void)
{

std::string item_name;
std::ifstream nameFile;

nameFile.open("files/campain/t800.txt");
while (nameFile >> item_name)
{
    std::getline(nameFile, item_name);
}
nameFile.close();

std::string file = item_name;
//std::string file = "files/campain/T-800 Epizode 1.sav";
if(file.empty() || !Game::Load(file)) return MAINMENU;
return STARTGAME;
    
}


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

Я даже попробовал только одну строчку в t800.txt отставить. Чтобы проверить возмет игра название из файлика
Все равно ничего не загружается. И выкидывает в главное меню. no.gif no.gif



Автор: t800 15 Sep 2015, 18:08

Cчас даже вот так сделал

Код
int Game::NewСampain(void)
{
std::string item_name;
std::ifstream nameFile;

nameFile.open("files/campain/t800.txt");
std::getline(nameFile, item_name);
nameFile.close();

std::string file = item_name;
//std::string file = "files/campain/T-800 Epizode 1.sav";

if(file.empty() || !Game::Load(file)) return MAINMENU;
return STARTGAME;
    
}



Все равно не загружает. В чем дело?

Автор: Эроласт 15 Sep 2015, 18:26

Компилятор никак ругается? "#include <iostream>" в самом верху файла есть? Каково содержание файла "files/campain/t800.txt"? Путь до него правильный?

Касательно кода, не используй излишние переменные и называй их по-нормальному:

Код
int Game::NewСampain(void)
{
    std::ifstream scenarioListFile;
    std::string scenarioFilePath;

    scenarioListFile.open("files/campain/t800.txt");
    std::getline(scenarioListFile, scenarioFilePath);
    scenarioListFile.close();

    if(scenarioFilePath.empty() || !Game::Load(scenarioFilePath)) return MAINMENU;
    return STARTGAME;
}

Автор: t800 15 Sep 2015, 19:02

Цитата(Эроласт @ 15 Sep 2015, 18:26) *
Компилятор никак ругается? "#include <iostream>" в самом верху файла есть? Каково содержание файла "files/campain/t800.txt"? Путь до него правильный?

Касательно кода, не используй излишние переменные и называй их по-нормальному:
Код
int Game::NewСampain(void)
{
    std::ifstream scenarioListFile;
    std::string scenarioFilePath;

    scenarioListFile.open("files/campain/t800.txt");
    std::getline(scenarioListFile, scenarioFilePath);
    scenarioListFile.close();

    if(scenarioFilePath.empty() || !Game::Load(scenarioFilePath)) return MAINMENU;
    return STARTGAME;
}



Нет не ругается. Игру собирает нормально.
Я никак и не называл. Я же команды из примера взял.



Цитата(Эроласт @ 15 Sep 2015, 18:26) *
Компилятор никак ругается? "#include <iostream>" в самом верху файла есть? Каково содержание файла "files/campain/t800.txt"? Путь до него правильный?


Получилось!!!!!!!!!!!! barb_metal.gif barb_metal.gif

Сперва вставил команды

Код
    std::ifstream scenarioListFile;
    std::string scenarioFilePath;

    scenarioListFile.open("files/campain/t800.txt");
    std::getline(scenarioListFile, scenarioFilePath);
    scenarioListFile.close();

    if(scenarioFilePath.empty() || !Game::Load(scenarioFilePath)) return MAINMENU;
    return STARTGAME;


Собрал игру. Запустил нажал на кпопку. И все равно попал в главное меню sad.gif

А потом нашел!!! brags.gif brags.gif

В файлике t800.txt !!!!!

Вместо

Код
test.cam


Написал

Код
files/campain/test.cam


И компания запустилась!!! brags.gif brags.gif brags.gif




Игра оказывается не там искала!

Теперь осталось только придумать как сделать чтобы игра нужную строчку в файлике искала, не только первую

Автор: t800 18 Sep 2015, 21:02

Кажется получилось! И чтобы игры брала имена из списка надо переименовать сейвы кампаний обратно в как назывались их карты. И записывать в файлах .txt названия файлов карт (сейвов переименованных в их карты) потому что при сейвах игра помнит имена исходных карт!!! А не сейвов. biting.gif

Команды такие

Код
    int Game::NextCampain(void)
    {
       std::string file;
       Settings & conf = Settings::Get();
       std::string savname = conf.MapsFile();
       std::string path = Settings::GetCampainDir();
       std::cout << path << " Путь\n";
       std::cout << savname << " Имя карты\n";
        std::string listname = StringLower(conf.MapsFile().substr(0,4)) + ".txt";
        std::cout << listname << " Имя списка\n";
        listname = System::ConcatePath(path,listname);
        std::cout << listname << " Имя списка с путем\n";
    
        std::ifstream scenarioListFile;
        std::string scenarioFileName;
    
        scenarioListFile.open(listname.c_str());
        while(getline(scenarioListFile, scenarioFileName))
       {
        if(savname == scenarioFileName)
          {
          getline(scenarioListFile, scenarioFileName);
          break;
          }
       }
      
       file = System::ConcatePath(path,scenarioFileName);
       std::cout << file << " Имя файла чтобы загружать\n";
      
    if(file.empty() || !Game::Load(file)) return MAINMENU;
    return STARTGAME;
    }






И еще я разобрался как смотреть имена в терминале!!! barb_metal.gif barb_metal.gif barb_metal.gif

для этого надо вставлять команды

Код
       std::cout << path << " Путь\n";
       std::cout << savname << " Имя карты\n";


И тогда когда нажимаешь в игре кнопки в терминале можно посмотреть какие файлы игра открывает!!!

Автор: t800 19 Sep 2015, 07:44

А как надо считать рейтинги для кампаний? Просто складывать обычный рейтинг для каждого из сценарие? Или как?

Автор: Эроласт 19 Sep 2015, 08:12

Цитата
надо вставлять команды

Я же уже говорил: термин "команды" в программировании не употребляется. Код, операции, алгоритм, но никак не "команды".

По поводу переменных. Если пишешь части слова вместе, без подчеркивания, то начинай каждое новое с большой буквы. Это называется camel case.

Автор: t800 20 Sep 2015, 09:40

Решил сделать рейтигин для кампаний! Открыл файлик highscores_game.cpp который его делает


Код
#include <algorithm>
#include <sstream>
#include <vector>
#include <string>
#include <cstring>
#include <ctime>

#include "system.h"
#include "gamedefs.h"
#include "text.h"
#include "agg.h"
#include "cursor.h"
#include "button.h"
#include "dialog.h"
#include "settings.h"
#include "world.h"
#include "zzlib.h"
#include "game.h"
#include "game_over.h"

#define HGS_ID    0xF1F3
#define HGS_MAX    10

struct hgs_t
{
    hgs_t() : days(0), rating(0) {};

    bool operator== (const hgs_t &) const;

    std::string    player;
    std::string    land;
    u32        localtime;
    u32        days;
    u32        rating;
};

StreamBase & operator<< (StreamBase & msg, const hgs_t & hgs)
{
    return msg << hgs.player << hgs.land << hgs.localtime << hgs.days << hgs.rating;
}

StreamBase & operator>> (StreamBase & msg, hgs_t & hgs)
{
    return msg >> hgs.player >> hgs.land >> hgs.localtime >> hgs.days >> hgs.rating;
}

bool hgs_t::operator== (const hgs_t & h) const
{
    return player == h.player && land == h.land && days == h.days;
}

bool RatingSort(const hgs_t & h1, const hgs_t & h2)
{
    return h1.rating > h2.rating;
}

class HGSData
{
public:
    HGSData() {}

    bool Load(const std::string &);
    bool Save(const std::string &);
    void ScoreRegistry(const std::string &, const std::string &, u32, u32);
    void RedrawList(s32, s32);
private:
    std::vector<hgs_t> list;
};

bool HGSData::Load(const std::string & fn)
{
    ZStreamFile hdata;
    if(! hdata.read(fn)) return false;

    hdata.setbigendian(true);
    u16 hgs_id = 0;

    hdata >> hgs_id;

#ifdef FORMAT_VERSION_3225
    // old stream ver. skip 4 byte
    if(hgs_id != HGS_ID)
    hdata >> hgs_id >> hgs_id;
#endif

    if(hgs_id == HGS_ID)
    {
    hdata >> list;
    return ! hdata.fail();
    }

    return false;
}

bool HGSData::Save(const std::string & fn)
{
    ZStreamFile hdata;
    hdata.setbigendian(true);
    hdata << static_cast<u16>(HGS_ID) << list;
    if(hdata.fail() || ! hdata.write(fn)) return false;

    return true;
}

void HGSData::ScoreRegistry(const std::string & p, const std::string & m, u32 r, u32 s)
{
    hgs_t h;

    h.player = p;
    h.land = m;
    h.localtime = std::time(NULL);
    h.days = r;
    h.rating = s;

    if(list.end() == std::find(list.begin(), list.end(), h))
    {
    list.push_back(h);
    std::sort(list.begin(), list.end(), RatingSort);
    if(list.size() > HGS_MAX) list.resize(HGS_MAX);
    }
}

void HGSData::RedrawList(s32 ox, s32 oy)
{
    const Settings & conf = Settings::Get();

    // image background
    const Sprite &back = AGG::GetICN(ICN::HSBKG, 0);
    back.Blit(ox, oy);

    const Sprite &head = AGG::GetICN(ICN::HISCORE, 6);
    if(conf.QVGA())
    head.Blit(ox + 25, oy + 15);
    else
    head.Blit(ox + 50, oy + 31);

    std::sort(list.begin(), list.end(), RatingSort);

    std::vector<hgs_t>::const_iterator it1 = list.begin();
    std::vector<hgs_t>::const_iterator it2 = list.end();

    Text text;
    text.Set(conf.QVGA() ? Font::SMALL : Font::BIG);

    for(; it1 != it2 && (it1 - list.begin() < HGS_MAX); ++it1)
    {
    const hgs_t & hgs = *it1;

    text.Set(hgs.player);
    text.Blit(ox + (conf.QVGA() ? 45 : 88), oy + (conf.QVGA() ? 33 : 70));

    text.Set(hgs.land);
    text.Blit(ox + (conf.QVGA() ? 170 : 260), oy + (conf.QVGA() ? 33 : 70));

    text.Set(GetString(hgs.days));
    text.Blit(ox + (conf.QVGA() ? 250 : 420), oy + (conf.QVGA() ? 33 : 70));

    text.Set(GetString(hgs.rating));
    text.Blit(ox + (conf.QVGA() ? 270 : 480), oy + (conf.QVGA() ? 33 : 70));

    oy += conf.QVGA() ? 20 : 40;
    }
}

int Game::HighScores(bool fill)
{
    Cursor & cursor = Cursor::Get();
    Display & display = Display::Get();
    const Settings & conf = Settings::Get();

    cursor.Hide();
    if(fill) display.Fill(ColorBlack);

#ifdef WITH_DEBUG
    if(IS_DEVEL() && world.CountDay())
    {
    std::string msg = std::string("Devepoper mode, not save! \n \n Your result: ") + GetString(GetGameOverScores());
    Dialog::Message("High Scores", msg, Font::BIG, Dialog::OK);
    return MAINMENU;
    }
#endif

    HGSData hgs;

    std::ostringstream stream;
    stream << System::ConcatePath(conf.GetSaveDir(), "fheroes2.hgs");

    cursor.SetThemes(cursor.POINTER);
    Mixer::Pause();
    AGG::PlayMusic(MUS::MAINMENU);
    hgs.Load(stream.str().c_str());

    const Sprite &back = AGG::GetICN(ICN::HSBKG, 0);

    cursor.Hide();
    const Point top((display.w() - back.w()) / 2, (display.h() - back.h()) / 2);

    hgs.RedrawList(top.x, top.y);

    LocalEvent & le = LocalEvent::Get();

    Button buttonCampain(top.x + (conf.QVGA() ? 0 : 9), top.y + (conf.QVGA() ? 100 : 315), ICN::HISCORE, 0, 1);
    Button buttonExit(top.x + back.w() - (conf.QVGA() ? 27 : 36), top.y + (conf.QVGA() ? 100 : 315), ICN::HISCORE, 4, 5);

    buttonCampain.Draw();
    buttonExit.Draw();

    cursor.Show();
    display.Flip();

    const u32 rating = GetGameOverScores();
    const u32 days = world.CountDay();
    GameOver::Result & gameResult = GameOver::Result::Get();

    if(rating && (gameResult.GetResult() & GameOver::WINS))
    {
    std::string player(_("Unknown Hero"));
    Dialog::InputString(_("Your Name"), player);
    cursor.Hide();
    if(player.empty()) player = _("Unknown Hero");
    hgs.ScoreRegistry(player, Settings::Get().CurrentFileInfo().name, days, rating);
    hgs.Save(stream.str().c_str());
    hgs.RedrawList(top.x, top.y);
    buttonCampain.Draw();
    buttonExit.Draw();
    cursor.Show();
    display.Flip();
    gameResult.Reset();
    }

    // highscores loop    {
    // key code info
        if(Settings::Get().Debug() == 0x12 && le.KeyPress())
            Dialog::Message("Key Press:", GetString(le.KeyValue()), Font::SMALL, Dialog::OK);
    le.MousePressLeft(buttonCampain) ? buttonCampain.PressDraw() : buttonCampain.ReleaseDraw();
    le.MousePressLeft(buttonExit) ? buttonExit.PressDraw() : buttonExit.ReleaseDraw();

    if(le.MouseClickLeft(buttonExit) || HotKeyCloseWindow) return MAINMENU;
    }

    return QUITGAME;
}


У меня впопрос как лучше сделать? Я хочу просто скопировать код команд начинася с

Код
#define HGS_ID    0xF1F3
#define HGS_MAX    10


И до

Код
// highscores loop


Вставить тут же в файл ниже. Везде где стоит HGS переименовать в HGSС , а везде где стоит hgs переименовать в hgsc и потом смотреть как надо менять код команд с HGSС и hgsc чтобы рейтиг кампаний зарабоатал. Так правильно будет?


И еще у меня вопрос что такое вот это
Код
#define HGS_ID    0xF1F3
#define HGS_MAX    10


И что оно делает? И если я это скопирую и переименую для камапании в

Код
#define HGSС_ID    0xF1F3
#define HGSС_MAX    10


Надо писать HGSС_ID 0xF1F3 или вместо 0xF1F3 надо будет что-то другое написать? И если другое то какое?

Автор: t800 20 Sep 2015, 19:46

Я сейчас скоприровал и переименовал все HGS в HGSС , а все hgs в hgsc и RatingSort в RatingSortСampain. Собрал игру при сборке не заругалалась. Теперь осталось понять как рейтинг компании надо считать.

Автор: t800 21 Sep 2015, 08:40

Сейчас сделал так в файлике gameover.cpp всместо

Цитата
res = Game::NEXTCAMPAIN;


Написал

Цитата
res = Game::HIGHSCORESCAMPAIN;


Собрал игру запустил. Выиграл одну карту из тестовой кампании и сразу попал в Рейтинг для кампании!




Автор: t800 21 Sep 2015, 09:18

Сейчас в highscores_game.cpp в


Код
int Game::HighScoresCampain(bool fill)
{
    Cursor & cursor = Cursor::Get();
    Display & display = Display::Get();
    const Settings & conf = Settings::Get();

    cursor.Hide();
    if(fill) display.Fill(ColorBlack);

#ifdef WITH_DEBUG
    if(IS_DEVEL() && world.CountDay())
    {
    std::string msg = std::string("Devepoper mode, not save! \n \n Your result: ") + GetString(GetGameOverScores());
    Dialog::Message("High Scores", msg, Font::BIG, Dialog::OK);
    return MAINMENU;
    }
#endif

    HGSCData hgsc;

    std::ostringstream stream;
    stream << System::ConcatePath(conf.GetSaveDir(), "fheroes2.hgsc");

    cursor.SetThemes(cursor.POINTER);
    Mixer::Pause();
    AGG::PlayMusic(MUS::MAINMENU);
    hgsc.Load(stream.str().c_str());

    const Sprite &back = AGG::GetICN(ICN::HSBKG, 0);

    cursor.Hide();
    const Point top((display.w() - back.w()) / 2, (display.h() - back.h()) / 2);

    hgsc.RedrawList(top.x, top.y);

    LocalEvent & le = LocalEvent::Get();

    Button buttonStandart(top.x + (conf.QVGA() ? 0 : 9), top.y + (conf.QVGA() ? 100 : 315), ICN::HISCORE, 2, 3);
    Button buttonExit(top.x + back.w() - (conf.QVGA() ? 27 : 36), top.y + (conf.QVGA() ? 100 : 315), ICN::HISCORE, 4, 5);

    buttonStandart.Draw();
    buttonExit.Draw();

    cursor.Show();
    display.Flip();

    const u32 rating = GetGameOverScores();
    const u32 days = world.CountDay();
    GameOver::Result & gameResult = GameOver::Result::Get();

    if(rating && (gameResult.GetResult() & GameOver::WINS))
    {
    std::string player(_("Unknown Hero"));
    Dialog::InputString(_("Your Name"), player);
    cursor.Hide();
    if(player.empty()) player = _("Unknown Hero");
    hgsc.ScoreRegistryC(player, Settings::Get().CurrentFileInfo().name, days, rating);
    hgsc.Save(stream.str().c_str());
    hgsc.RedrawList(top.x, top.y);
    buttonStandart.Draw();
    buttonExit.Draw();
    cursor.Show();
    display.Flip();
    gameResult.Reset();
    }

    // highscores loop
    while(le.HandleEvents())
    {
    // key code info
        if(Settings::Get().Debug() == 0x12 && le.KeyPress())
            Dialog::Message("Key Press:", GetString(le.KeyValue()), Font::SMALL, Dialog::OK);
    le.MousePressLeft(buttonStandart) ? buttonStandart.PressDraw() : buttonStandart.ReleaseDraw();
    le.MousePressLeft(buttonExit) ? buttonExit.PressDraw() : buttonExit.ReleaseDraw();

    if(le.MouseClickLeft(buttonStandart) || HotKeyCloseWindow) return HIGHSCORES;
    if(le.MouseClickLeft(buttonExit) || HotKeyCloseWindow) return MAINMENU;
    }

    return QUITGAME;
}


Поменял везде где было написано buttonCampain на buttonStandart и теперь у меня рейтинги переключаются!!! barb_metal.gif barb_metal.gif barb_metal.gif


Автор: t800 26 Sep 2015, 14:19

Никак не могу придумать как считать рейтинги для каманий.

В файле game_highscores.cpp в разделе int Game::HighScores


Код
int Game::HighScores(bool fill)
{
    Cursor & cursor = Cursor::Get();
    Display & display = Display::Get();
    const Settings & conf = Settings::Get();

    cursor.Hide();
    if(fill) display.Fill(ColorBlack);

#ifdef WITH_DEBUG
    if(IS_DEVEL() && world.CountDay())
    {
    std::string msg = std::string("Devepoper mode, not save! \n \n Your result: ") + GetString(GetGameOverScores());
    Dialog::Message("High Scores", msg, Font::BIG, Dialog::OK);
    return MAINMENU;
    }
#endif

    HGSData hgs;

    std::ostringstream stream;
    stream << System::ConcatePath(conf.GetSaveDir(), "fheroes2.hgs");

    cursor.SetThemes(cursor.POINTER);
    Mixer::Pause();
    AGG::PlayMusic(MUS::MAINMENU);
    hgs.Load(stream.str().c_str());

    const Sprite &back = AGG::GetICN(ICN::HSBKG, 0);

    cursor.Hide();
    const Point top((display.w() - back.w()) / 2, (display.h() - back.h()) / 2);

    hgs.RedrawList(top.x, top.y);

    LocalEvent & le = LocalEvent::Get();

    Button buttonCampain(top.x + (conf.QVGA() ? 0 : 9), top.y + (conf.QVGA() ? 100 : 315), ICN::HISCORE, 0, 1);
    Button buttonExit(top.x + back.w() - (conf.QVGA() ? 27 : 36), top.y + (conf.QVGA() ? 100 : 315), ICN::HISCORE, 4, 5);

    buttonCampain.Draw();
    buttonExit.Draw();

    cursor.Show();
    display.Flip();

    const u32 rating = GetGameOverScores();
    const u32 days = world.CountDay();
    GameOver::Result & gameResult = GameOver::Result::Get();

    std::cout  << days;
    std::cout  << " Дни \n";

    std::cout  << rating;
    std::cout  << " Рейтинг \n";

    
    if(rating && (gameResult.GetResult() & GameOver::WINS))
    {
    std::string player(_("Unknown Hero"));
    Dialog::InputString(_("Your Name"), player);
    cursor.Hide();
    if(player.empty()) player = _("Unknown Hero");
    hgs.ScoreRegistry(player, Settings::Get().CurrentFileInfo().name, days, rating);
    hgs.Save(stream.str().c_str());
    hgs.RedrawList(top.x, top.y);
    buttonCampain.Draw();
    buttonExit.Draw();
    cursor.Show();
    display.Flip();
    gameResult.Reset();
    }




Я нашел такие команды.

Цитата
const u32 rating = GetGameOverScores();
const u32 days = world.CountDay();



Я проверил что они делают оказываются он считаю рейтинг игры и число дней.

Код
    std::cout  << days;
    std::cout  << " Дни \n";

    std::cout  << rating;
std::cout  << " Рейтинг \n";


И подумал что можно наверно сделать так. Для каждой из кампаний сделать отдельный файлик куда игра будет записывать имя карты и число дней и рейтинг карты после выигрыша каржлдго из эпизодов. А потом если закончилась игра на последней карты. Их оттуда опять брать складывать все дни по всем картам и все рейтинг по всем картам и уже записывать с именем кампании в файл откуда она берет очки для все камапаний. Но я подумал а может можно это проще сделать? Без файликов?

Автор: t800 04 Nov 2015, 08:36

У меня каникулы до 12 ноября. Решил доделать рейтинги. Вчера узнал что в оригинальных героях количество дней сыгранных за предыдущий эпизод кампании сохраняется в сейвах в Campaign.Days Посмотеле в исходниках fheroes2 там конечно такого нет потому, что автор вообще кампанией не занимался. Все что он сделал касающегося кампании это сделал TYPE_CAMPAIGN вот он в game.h прописан котрый действительно сохраняется в сейвах

Код
void Init(void);

    const std::string & GetLastSavename(void);
    void        SetLastSavename(const std::string &);
    void        SetLoadVersion(int);
    int            GetLoadVersion(void);

    // type_t
    enum { TYPE_MENU = 0, TYPE_STANDARD = 0x01, TYPE_CAMPAIGN = 0x02, TYPE_HOTSEAT = 0x04, TYPE_NETWORK = 0x08, TYPE_BATTLEONLY = 0x10, TYPE_LOADFILE = 0x80, TYPE_MULTI = TYPE_HOTSEAT | TYPE_NETWORK };
    // distance_t
    enum { VIEW_TOWN  = 0, VIEW_CASTLE = 1, VIEW_HEROES = 2, VIEW_TELESCOPE = 3, VIEW_OBSERVATION_TOWER = 4, VIEW_MAGI_EYES = 5, VIEW_LIGHT_HOUSE = 6 };

    enum
    {
    EVENT_NONE,
    EVENT_BUTTON_NEWGAME,
    EVENT_BUTTON_LOADGAME,
    EVENT_BUTTON_HIGHSCORES,
    EVENT_BUTTON_CREDITS,
    EVENT_BUTTON_STANDARD,
    EVENT_BUTTON_CAMPAIN,
    EVENT_BUTTON_MULTI,
    EVENT_BUTTON_SETTINGS,
    EVENT_BUTTON_SELECT,
    EVENT_BUTTON_HOTSEAT,
    EVENT_BUTTON_NETWORK,
    EVENT_BUTTON_HOST,
    EVENT_BUTTON_GUEST,
    EVENT_BUTTON_BATTLEONLY,
    EVENT_DEFAULT_READY,
    EVENT_DEFAULT_EXIT,
    EVENT_DEFAULT_LEFT,
    EVENT_DEFAULT_RIGHT,
    EVENT_SYSTEM_FULLSCREEN,
    EVENT_SYSTEM_SCREENSHOT,
    EVENT_SYSTEM_DEBUG1,
    EVENT_SYSTEM_DEBUG2,
    EVENT_SLEEPHERO,
    EVENT_ENDTURN,
    EVENT_NEXTHERO,
    EVENT_NEXTTOWN,
    EVENT_CONTINUE,
    EVENT_SAVEGAME,
    EVENT_LOADGAME,
    EVENT_FILEOPTIONS,
    EVENT_PUZZLEMAPS,
    EVENT_INFOGAME,
    EVENT_DIGARTIFACT,
    EVENT_CASTSPELL,
    EVENT_DEFAULTACTION,
    EVENT_OPENFOCUS,
    EVENT_SYSTEMOPTIONS,
    EVENT_BATTLE_CASTSPELL,
    EVENT_BATTLE_RETREAT,
    EVENT_BATTLE_SURRENDER,
    EVENT_BATTLE_AUTOSWITCH,
    EVENT_BATTLE_OPTIONS,
    EVENT_BATTLE_HARDSKIP,
    EVENT_BATTLE_SOFTSKIP,
    EVENT_MOVELEFT,
    EVENT_MOVERIGHT,
    EVENT_MOVETOP,
    EVENT_MOVEBOTTOM,
    EVENT_MOVETOPLEFT,
    EVENT_MOVETOPRIGHT,
    EVENT_MOVEBOTTOMLEFT,
    EVENT_MOVEBOTTOMRIGHT,
    EVENT_SCROLLLEFT,
    EVENT_SCROLLRIGHT,
    EVENT_SCROLLUP,
    EVENT_SCROLLDOWN,
    EVENT_CTRLPANEL,
    EVENT_SHOWRADAR,
    EVENT_SHOWBUTTONS,
    EVENT_SHOWSTATUS,
    EVENT_SHOWICONS,
    EVENT_SWITCHGROUP,
    EVENT_EMULATETOGGLE,
    EVENT_LAST
    };


У меня вопрос а как мне создать Campaign.Days и чтобы они сохранялись в сейвах и складывались при смене эпизода?

Автор: t800 08 Nov 2015, 20:46

Решил делать рейтинги как в оригинальных героях чтобы игра сама сохраняла общие дни кампании в сейвах

Для этого открыл файл settings.cpp нашел там строчик с GameType
скоприровал их тут же ниже и везде где было GameType написал CampainDays
И сделал вот так:

Код
/* check game type */
bool Settings::(int f) const { return game_type & f; }
int Settings::GameType(void) const { return game_type; }

/* set game type */
void Settings::SetGameType(int type) { game_type = type; }

/*  T-800 */
bool Settings::(int f) const { return campain_days & f; }
int Settings::CampainDays(void) const { return campain_days; }

void Settings::SetCampainDays(int days) { campain_days = days; }
/* T-800 */


Запустил проект на сборку он заругался что CampainDays и SetCampainDays не отписаны в Settings тогда
я отрыл файл settings.h нашел где стоят строчки с GameType скопировал ниже и поменял на CampainDays

Код
    bool        GameType(int) const;
    int        GameType(void) const;
    void        SetGameType(int);
    /* T-800 */
    bool        CampainDays(int) const;
    int        CampainDays(void) const;
    void        SetCampainDays(int);
    /* T-800 */


После чего стал искать в каких еще файлах встречается GameType и нашел
в файле game_io.cpp

Код
bool Game::Load(const std::string & fn)
{
    DEBUG(DBG_GAME, DBG_INFO, fn);
    Settings & conf = Settings::Get();
    // loading info
    Game::ShowLoadMapsText();

    StreamFile fs;
    fs.setbigendian(true);

    if(! fs.open(fn, "rb"))
    {
    DEBUG(DBG_GAME, DBG_INFO, fn << ", error open");
    return false;
    }

    char major, minor;
    fs >> major >> minor;
    const u16 savid = (static_cast<u16>(major) << 8) | static_cast<u16>(minor);

    // check version sav file
    if(savid != SAV2ID2 && savid != SAV2ID3)
    {
    DEBUG(DBG_GAME, DBG_INFO, fn << ", incorrect SAV2ID");
    return false;
    }

    std::string strver;
    u16 binver = 0;
    HeaderSAV header;

#ifdef FORMAT_VERSION_3225
    if(savid == SAV2ID2)
    {
    // skip 4 byte
    u32 unused;
    fs >> unused;
    }
#endif

    // read raw info
    fs >> strver >> binver >> header;
    size_t offset = fs.tell();
    fs.close();

#ifndef WITH_ZLIB
    if(header.status & HeaderSAV::IS_COMPRESS)
    {
    DEBUG(DBG_GAME, DBG_INFO, fn << ", zlib: unsupported");
    return false;
    }
#endif

    ZStreamFile fz;
    fz.setbigendian(true);

    if(! fz.read(fn, offset))
    {
    DEBUG(DBG_GAME, DBG_INFO, ", uncompress: error");
    return false;
    }

    if((header.status & HeaderSAV::IS_LOYALTY) &&
    !conf.PriceLoyaltyVersion())
    Dialog::Message("Warning", _("This file is saved in the \"Price Loyalty\" version.\nSome items may be unavailable."), Font::BIG, Dialog::OK);

    //SaveMemToFile(std::vector<u8>(fz.data(), fz.data() + fz.size()), "gdata.bin");
    fz >> binver;

    // check version: false
    if(binver > CURRENT_FORMAT_VERSION || binver < LAST_FORMAT_VERSION)
    {
    std::ostringstream os;
    os << "usupported save format: " << binver << std::endl <<
         "game version: " << CURRENT_FORMAT_VERSION << std::endl <<
         "last version: " << LAST_FORMAT_VERSION;
    Dialog::Message("Error", os.str(), Font::BIG, Dialog::OK);
    return false;
    }

    DEBUG(DBG_GAME, DBG_TRACE, "load version: " << binver);
    SetLoadVersion(binver);
    u16 end_check = 0;

    fz >> World::Get() >> Settings::Get() >>
    GameOver::Result::Get() >> GameStatic::Data::Get() >> MonsterStaticData::Get() >> end_check;

    World::Get().PostFixLoad();

    if(fz.fail() || (end_check != SAV2ID2 && end_check != SAV2ID3))
    {
    DEBUG(DBG_GAME, DBG_WARN, "invalid load file: " << fn);
    return false;
    }

    SetLoadVersion(CURRENT_FORMAT_VERSION);

    Game::SetLastSavename(fn);
    conf.SetGameType(conf.GameType() | Game::TYPE_LOADFILE);
/* T-800*/

              conf.SetCampainDays(conf.CampainDay());
//           conf.SetCampainDays(200);
    std::cout  << conf.CampainDays();
    std::cout  << "Дни кампании при сохранении игры \n";
    std::cout  << Settings::Get().CampainDays();
    std::cout  << "Дни кампании при старте кампании \n";    
/* T-800*/
    
    return true;
}


Скопировал строчки с GameType ниже и поменял в них GameType на CampainDays и потом сделал вывод в терминал чтобы посмотреть что они выводят.

Код
/* T-800*/
        conf.SetCampainDays(conf.CampainDay());        
       // conf.SetCampainDays(200);
    std::cout  << conf.CampainDays();
    std::cout  << "Дни кампании при сохранении игры \n";
    std::cout  << Settings::Get().CampainDays();
    std::cout  << "Дни кампании при старте кампании \n";    
/* T-800*/


Сперва они выводили нули и было не понятно что это значит. Но тогда я решил попробовать
и в файл game_newgame.cpp

Код
int Game::NewCampain(void)
{
  // Settings::Get().SetGameType(Game::TYPE_CAMPAIGN);
  // Settings & conf = Settings::Get();
  // conf.SetGameType(Game::TYPE_CAMPAIGN);
  // VERBOSE("New Campain Game: under construction.");
  // return Game::NEWCAMPAIN;
  // Загрузка карты компании  
    Cursor & cursor = Cursor::Get();
    cursor.Hide();
    cursor.SetThemes(cursor.POINTER);

    Display & display = Display::Get();
    display.Fill(ColorBlack);

    // image background
    const Sprite &back = AGG::GetICN(ICN::HEROES, 0);
    const Point top((display.w() - back.w()) / 2, (display.h() - back.h()) / 2);
    back.Blit(top);

    cursor.Show();
    display.Flip();

    //std::string file = Dialog::SelectFileLoad();
    std::string file = Dialog::SelectFileCampainLoad();
    //std::string file = "files/campain/test.sav";
    Settings::Get().SetCampainDays(100);
    if(file.empty() || !Game::Load(file)) return MAINMENU;
    //Settings::Get().SetGameType(Game::TYPE_CAMPAIGN);
    //Settings::Get().SetCampainDays(500);
    std::cout  << Settings::Get().CampainDays();
    return STARTGAME;

}


Вставил строчку

Код
Settings::Get().SetCampainDays(100);


И тогда в терминале мнестали выдаваться 100 дней которые я прописал при старте кампании.Но одна проблема! Эти 100 дней почему то не сохраняются при сохранении игры, т.е. если я сохраню игру выйду и загружу из автосейва. То CampainDays будет 0 а не 100. Что делать?

Автор: t800 26 Jun 2016, 17:10

Фух! Наконец то закончил с Кампаниями для Free Heroes вроде все работает!



Если кто хочет можете протестировать и написать в этой теме (или в T-800 Мod ) что вы думаете о кампаниях и удачно ли это вышло.

Вот ссылка для скачивания на новый движок с настроеными кампаниями (T-800 и две оригинальные из Heroes2 за Роланда и Арчибальда) В архиве исходники и уже собранная игра под Ubuntu

http://wiki.kvkozyrev.org/fheroes/fheroes2_cam_v1.zip

(Примечание: Для запуска игры необходимы файлы heroes2.agg и heroes2x.agg из оригинальных Heroes2 - их надо положить в папку Data )

Насколько я понимаю также игру можно собрать под Windows и Андроид потому, что за основу я брал оригинальные исходники про которые было написано, что они собраются под Linux, Windows и Андроид

Автор: t800 27 Jun 2016, 22:39

Собрал fheroes2 c поддержкой кампаний под Windows у меня в Virtualbox на XP вроде работает.



Вот ссылка для скачивания http://wiki.kvkozyrev.org/fheroes/fheroes2cam-win32.zip

В архиве собранная игра под Windows с настроенными кампаниями (T-800 и две оригинальные из Heroes2 за Роланда и Арчибальда)

(Примечание: Для запуска игры необходимы файлы heroes2.agg и heroes2x.agg из оригинальных Heroes2 - их надо положить в папку Data)

Автор: t800 03 Jul 2016, 01:32

Собрал fheroes с поддержкой кампании для Андроид ( ставить можно на планшет или телефон)



Скачать инсталятор fheroes2 c поддержкой кампания под Андроид можно здесь

http://wiki.kvkozyrev.org/fheroes/fheroes2-campain-v1.apk

(Примечание: Инсталятор сам закачивает необходимые файлы heroes2.agg)

Автор: t800 03 Jul 2016, 17:55

Изменил меню в версии для Андроида для режима работы на телефонах. Теперь на телефоне пункт меню Кампаний присутствует. И компании работают и на телефоне.




Ссылка на инсталятор для игры на телефоне

http://wiki.kvkozyrev.org/fheroes/fheroes2-campain-v1.apk

Автор: hippocamus 03 Jul 2016, 22:33

Респект! Только - пожалуйста - "инсталятор".
Откуда неверное прочтение - непонятно, ведь даже на буржуйском - "installator".

Автор: t800 04 Jul 2016, 05:43

Цитата(hippocamus @ 04 Jul 2016, 01:33) *
Респект! Только - пожалуйста - "инсталятор".
Откуда неверное прочтение - непонятно, ведь даже на буржуйском - "installator".


Исправил.

Автор: tolich 04 Jul 2016, 08:22

Цитата(hippocamus @ 03 Jul 2016, 22:33) *
даже на буржуйском - "installator".
Во-первых, installer, во-вторых, a перед ll традиционно читается, как о.

Автор: t800 04 Jul 2016, 13:03

Хочу попробовтать добавить свою сборку fheroes2 T-800 mod под Андроид на Goole Play чтобы все могли
играть в кампании.

А то народ каждый качает старую сборку и ругается что там ничего не работает и нет кампаний.

https://play.google.com/store/people/details?id=114558898739544370255&hl=ru

А про новую ничего не знают. Кто-нибудь знает как добавить свою сборку в Google Play?

Просто я написал Gerhard Stein неделю и ссылку на свои исходники тоже выслал но он ничего не до сих пор не выложил.
Сейчас думаю наверно проще самому добавить чем ждать пока он выложит мою модификацию.

Автор: t800 05 Jul 2016, 07:56

Добавил версию для Андроид на Google Play

https://play.google.com/store/apps/details?id=wiki.kvkozyrev.org.fheroes2t800



Автор: fireman 27 Aug 2016, 02:44

t800, привет. Посмотрел, что ты сделал кампании. Молодец - это важная часть.

На счёт своих сборок freeheroes 2: я не нашёл в сборке под win исходных кодов или явной ссылки на них. Лицензия GPL2(по которой лицензируется freeheroes2) обязывает выкладывать их или предоставлять по запросу. Для большего удобства вас и других разработчиков - лучше взять за правило выкладывать вместе со сборками исходные коды к ней.

Тебе посоветовали использовать https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8F%D0%BC%D0%B8 и даже расписали https://sourceforge.net/p/fheroes2/discussion/335991/thread/1e60ccef/#0c5f. С такими системами намного проще. Ты хранишь весь исходный код в репозитории, все изменения внесённые тобой или кем-либо другим видны + есть история изменений. Советую почитать на эту тему, и все изменения самого движка делать как форк или заносить pull request


Автор: t800 27 Aug 2016, 11:26

Цитата(fireman @ 27 Aug 2016, 05:44) *
t800, привет. Посмотрел, что ты сделал кампании. Молодец - это важная часть.

На счёт своих сборок freeheroes 2: я не нашёл в сборке под win исходных кодов или явной ссылки на них. Лицензия GPL2(по которой лицензируется freeheroes2) обязывает выкладывать их или предоставлять по запросу. Для большего удобства вас и других разработчиков - лучше взять за правило выкладывать вместе со сборками исходные коды к ней.

Тебе посоветовали использовать https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8F%D0%BC%D0%B8 и даже расписали https://sourceforge.net/p/fheroes2/discussion/335991/thread/1e60ccef/#0c5f. С такими системами намного проще. Ты хранишь весь исходный код в репозитории, все изменения внесённые тобой или кем-либо другим видны + есть история изменений. Советую почитать на эту тему, и все изменения самого движка делать как форк или заносить pull request


Привет у сборок под Linux/Windows/Android одни и те же исходники (они кроссплатформенные) ссылка на исходники дана здесь в этой теме и на Google Play вот она эта ссылка http://wiki.kvkozyrev.org/forum/viewtopic.php?f=4&t=88#p473 Если тебе нужны исходники можешь по ссылке их скачать yes2.gif

Автор: fireman 27 Aug 2016, 12:39

Вот описание из гугл плэя

Код
Бесплатная реализация игры Герои Меча и Магии II с поддержкой Кампаний.

Free Heroes 2 (T-800 Mod) - это модифицированная версия движка с открытым кодом fheroes2. Основное в данной модификации - это долгожданная поддержка кампаний. В игре есть поддержка 2х оригинальных кампании (за Роланда и Арчибальда) а так же новая кампания T-800.

Установка игры: Поскольку Free Heroes2 (T-800 Mod) - это open source реализация игры Герои Меча и Магии II , то вам потребуются файлы c данными из оригинальной игры.

Которые вы можете загрузить вместе с DEMO версией Heroes2 из Меню Установки.

Если у вас есть Полная версия игры Heroes2 для PC (Dos или Windows версии) просто скопируйте файлы из оригинальной игры на SD карту в каталог app-data/wiki.kvkozyrev.org.fheroes2t800/

Инструкция по установке РУССКОЙ версии игры

https://www.youtube.com/watch?v=1EeDQO3UE_M

Если будут какие то вопросы по установке или настройке игры - обращайтесь! Всегда с удовольствием помогу.


Не вижу тут http://wiki.kvkozyrev.org/forum/viewtopic.php?f=4&t=88#p473

Автор: t800 27 Aug 2016, 12:41

Цитата(fireman @ 27 Aug 2016, 15:39) *
Вот описание из гугл плэя
Код
Бесплатная реализация игры Герои Меча и Магии II с поддержкой Кампаний.

Free Heroes 2 (T-800 Mod) - это модифицированная версия движка с открытым кодом fheroes2. Основное в данной модификации - это долгожданная поддержка кампаний. В игре есть поддержка 2х оригинальных кампании (за Роланда и Арчибальда) а так же новая кампания T-800.

Установка игры: Поскольку Free Heroes2 (T-800 Mod) - это open source реализация игры Герои Меча и Магии II , то вам потребуются файлы c данными из оригинальной игры.

Которые вы можете загрузить вместе с DEMO версией Heroes2 из Меню Установки.

Если у вас есть Полная версия игры Heroes2 для PC (Dos или Windows версии) просто скопируйте файлы из оригинальной игры на SD карту в каталог app-data/wiki.kvkozyrev.org.fheroes2t800/

Инструкция по установке РУССКОЙ версии игры

https://www.youtube.com/watch?v=1EeDQO3UE_M

Если будут какие то вопросы по установке или настройке игры - обращайтесь! Всегда с удовольствием помогу.


Не вижу тут http://wiki.kvkozyrev.org/forum/viewtopic.php?f=4&t=88#p473


Вы не там смотрите, смотри по ссылке на сайт разработчика (она не в описании а внизу страницы игры)

PS И еще там на странице в Google Play моя почта указана. Если кто не разберется как пройти по ссылке внизу страницы чтобы скачать исходники. Всегда может написать мне запрос и получить ее от меня на почту.

PPS Или написать запрос в комментариях к игре.

PPPS Так же в самой игре в разделе "Авторы" есть ссылка на мой сайт где можно скачать исходники, а так же указан мой е-mail чтобы можно было сделать запрос чтобы спросить как можно скачать исходники, если человек не разберется как качать по ссылке.

Исходники находятся в отрытом доступе. Любой кто захочет тот всегда может их скачать brags.gif

Автор: fireman 28 Aug 2016, 03:11

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

Автор: t800 28 Aug 2016, 05:12

Цитата(fireman @ 28 Aug 2016, 06:11) *
t800, это требует от людей совершить много усилий, это не прямая ссылка на сборке к исходникам. Всё же хороший тон - это явно указывать местоположение кода при выкладывание сборки.



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

Автор: tolich 30 Aug 2016, 08:11

Забавно, в поставке Google Play есть 2 моих карты (а именно Hopeless Battle и Doom Forever), которые в принципе не работают, как задумано, под FreeHeroes2 (потому что начальные армии должны быть заданы и события не обрабатываюся). А вот более устойчивая Knights of 40 Isles не попала.

Автор: t800 30 Aug 2016, 17:20

Цитата(tolich @ 30 Aug 2016, 11:11) *
Забавно, в поставке Google Play есть 2 моих карты (а именно Hopeless Battle и Doom Forever), которые в принципе не работают, как задумано, под FreeHeroes2 (потому что начальные армии должны быть заданы и события не обрабатываюся). А вот более устойчивая Knights of 40 Isles не попала.


На самом деле в поставке Google Play карт нет. Карты скачиваются как дополнения и в три пака можно закачать
почти все карты что есть для HMM2. И эти паки чистить надо от карты которые несовместимы. Там проблема даже не в том что какие то карты играют не правильно а в том, что с DEMO данными на которых почти все играют карты которые требуют heroes2x.agg просто вылетают причем не сразу а когда идет обращеник к какому-будь спрайту которого в heroe2.agg нет и по хорошему в движке надо дописать условие что в случае отсутвия файла heroes2x.agg чтобы MX2 карты в списке доступных не отражались, но это только в следующем выпуске на Google Play будет когда Кампанию Король Осминогов доделаю.

Автор: tolich 30 Aug 2016, 19:03

Они и не отображаются, оказывается. Хотя входят. И Avalon, и Knights40. То есть в менеджере файлов они есть, а в Новой Игре не отображаются.

Автор: fireman 16 May 2017, 06:29

Интересно, на сколько реально к freeheroes подрубить нейронку чтобы обучить АИ.

Автор: t800 16 May 2017, 09:29

Цитата(fireman @ 16 May 2017, 09:29) *
Интересно, на сколько реально к freeheroes подрубить нейронку чтобы обучить АИ.



А что такое нейронка?

Автор: t800 16 May 2017, 09:55

ЗЫ Сейчас попгулил про нейронки. Как понял это как feanor тени как в двойке подбирал.

Ну не знаю ИМХО глупости AI во fheroes2 не в том что его обучить трудно, а потому что он специально был сделан таким глупым.
Там в коде IA даже компьтерные герои делатcя на три вида: скутер, хунтер, тормоз и тупица

И так они и называется в коде:

Код
hero.Modes(AI::HEROES_SCOUTER)
hero.Modes(AI::HEROES_HUNTER)
hero.Modes(AI::HEROES_WAITING)
hero.Modes(AI::HEROES_STUPID)


Чтобы сделать AI умней ИМХО его просто надо переделать потому что сейчас копьютер умеет только либо идти вперед по дороге и собирать ресурсы как скутер,
бить монстров или игрока когда его войска во много раз слабее как хунтер, стоять на месте как тормоз, или бессмысленно ходить туда сюда как тупица.

ЗЫ И кстати не смотря на это куча людей не могут у него выиграть ne.gif

Автор: feanor 16 May 2017, 16:57

Цитата
Интересно, на сколько реально к freeheroes подрубить нейронку чтобы обучить АИ.
Чуть сложнее, чем сообразить, что нейронки вообще-то не об этом wink.gif

Автор: fireman 17 May 2017, 18:32

feanor, то есть то, что нейронки уже в https://geektimes.ru/post/262612/ и https://geektimes.ru/post/269990/ обыгрывают человека, а в https://nplus1.ru/news/2017/04/05/time-to-raise-my-apm способны играть на уровне опытных игроков - не об этом?

t800, да какая разница как сейчас, можно же запилить иначе. Если интересно с помощью чего, то вроде https://gym.openai.com/ штука заточена под АИ с помощью нейронок.

Автор: t800 17 May 2017, 19:27

Цитата(fireman @ 17 May 2017, 21:32) *
t800, да какая разница как сейчас, можно же запилить иначе. Если интересно с помощью чего, то вроде https://gym.openai.com/ штука заточена под АИ с помощью нейронок.



Я посмотрел через Google Переводчик по вашей ссылке помоему это какой эмулятор спортзала который считает как надо толкать тележки и совершать прыжки


Цитата
OpenAI Gym - инструментарий для разработки и сравнения алгоритмов обучения подкрепления. Он не делает предположений о структуре вашего агента и совместим с любой вычислительной вычислительной библиотекой, такой как TensorFlow или Theano. Вы можете использовать его из кода Python и вскоре из других языков.

OpenAI Gym состоит из двух частей:

  1. Библиотека с открытым исходным кодом спортзала : набор тестовых задач - среды - которые вы можете использовать для разработки алгоритмов обучения подкрепления. Эти среды имеют общий интерфейс, позволяющий вам писать общие алгоритмы.
  2. Служба https://translate.googleusercontent.com/translate_c?depth=1&hl=ru&rurl=translate.google.com&sl=en&sp=nmt4&tl=ru&u=https://gym.openai.com/&usg=ALkJrhhYRlobG7Fb9sf9nZaXlOY0JiijVQ : сайт и API, позволяющие людям эффективно сравнивать эффективность своих обученных агентов.

Основная цель спортзала - предоставить большую коллекцию сред, которые предоставляют общий интерфейс, и имеют версии, позволяющие проводить сравнения. Например, https://translate.googleusercontent.com/translate_c?depth=1&hl=ru&rurl=translate.google.com&sl=en&sp=nmt4&tl=ru&u=https://gym.openai.com/envs/Hopper-v1&usg=ALkJrhjt5PaEzsf6l8EP4PDSh4laoeUMbQ определяет среду, в которой целью является получение 2D-моделируемого робота для прыжка.


А про AI вот fheroes2, ИМХО чтобы кого-нибудь обучать, надо чтобы он мог обучаться, а AI во fheroes2 - это очень простой бот который только делает вид что он AI используя для этого 4 функции.

1) Идти по дороге и собирать ресурсы.
2) Нападать на монстров и героев в случае если его армия в несколько раз больше армии на которую нападает.
3) Стоять на месте
4) Бесмысленно бегать туда-сюда.

И вся работа AI сейчас состоит в переключениях между этими 4 функциями,

Автор: feanor 18 May 2017, 01:17

Цитата
feanor, то есть то, что нейронки уже в шахматы и го обыгрывают человека, а в старкрафт способны играть на уровне опытных игроков - не об этом?

Вася Пупкин сделал гигантскую статую слона из бутылок. Она заметно менее эстетична и функциональна, чем обычный памятник, но зато она сделана из бутылок, причем как раз модного в этом сезоне цвета!
Давайте без заголовков на уровне 10 журналистов из 10.

В первой статье речь идет о шахматной программе, которая смогла в скольких-то процентах случаев показывать эффективность..ну, в общем, показывать эффективность. Выбор наилучшего хода меньше чем в половине случаев, субоптимального еще в четверти..окау. Главное, неясно - зачем, в отличие от второго примера на шахматах неплохо себя показывают околоклассические методы.
В третьей - вовсе о том, что нейронка освоила микроконтроль и хитэндран. Но сама. Но хитэндран. Ути-пути моя прелесть, какая ты умненькая, на тебе косточку.

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

Короче, ИНС, естественно, хорошо работают там, где они хорошо работают: сопоставление с образцом, аппроксимация-экстраполяция, все такое. На гомогенных, естественно, данных.
А вот для искусственных интеллектов в игровом плане заметно лучше все-таки дрочить старые добрые алгоритмы из ведомства дискретной математики, поиск в графе стратегий etc. В конце концов, одно семейство нейросетей на аж многие миллиарды нейронов все еще пытается строить капитолий на первой неделе, что явно символизирует.

Автор: fireman 18 May 2017, 09:20

feanor
1) Но обучена всего за 72 часа. Зачем, может быть понятно в https://github.com/sbrugman/deep-learning-papers/blob/master/papers/deepchess-end-to-end-deep-neural-network-for-automatic-learning-in-chess.pdfстатье

Цитата
Having observed the playing style of DeepChess, we note that it plays very aggressively, often sacrificing pieces for long term positional gains (i.e., non-tactical gains).
This playing style resembles very much the playing style of human grandmasters.
While computer chess programs have long been criticized for being materialistic,
DeepChess demonstrates the very opposite by exhibiting an adventurous playing style with frequent positional sacrifices.

3) А разве не круто, что сама? Разве это не упрощает задачу по созданию АИ, если нейронка сама научится играть без какого либо обучения?
2) То есть проблема в том, что в паблике мало софта чтобы прямо сейчас сделать быстро и круто из-за закрытости технологий? Возможно эта проблема быстро решится и появится какое-то публичное АПИ к крутым нейросетям.

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

P.S. На сколько понимаю, ответ на мой вопрос, что на момент 2017 года малореально при ресурсах ,что есть у сообщества.

Автор: t800 18 May 2017, 10:16

Цитата(fireman @ 18 May 2017, 12:20) *
3) А разве не круто, что сама? Разве это не упрощает задачу по созданию АИ, если нейронка сама научится играть без какого либо обучения?


ИМХО сделать AI который нормально играл бы в fheroes2 проще - для этого достаточно посмотреть воостановленный код оригинальных героев и сделать что-то похожее, чем сделать AI на нейросети которая бы обучалась играть в fheroes2, потому что как это делать вообще не понятно и исходники которые про спортзал и про то как надо прыгать или толкать тележку ИМХО мало похожи на AI который мог бы играть в героев.

Автор: Nestor 18 May 2017, 12:01

Цитата
1) Но обучена всего за 72 часа. Зачем, может быть понятно в этой статье

Продолжительность обучения не фактор. Недопеченная ИНС будет, очевидно, принимать неоптимальные решения - но ровно также будет и сеть, которую перепекли. 100% успешных решений для выборки обучения при 50% для тестовой выборки - вполне реальная беда.
Цитата
2) То есть проблема в том, что в паблике мало софта чтобы прямо сейчас сделать быстро и круто из-за закрытости технологий? Возможно эта проблема быстро решится и появится какое-то публичное АПИ к крутым нейросетям.

Нет. Уже сейчас существует огромное количество энтузиастов, которые прикладывают ИНС к самым разным https://www.youtube.com/watch?v=NG-LATBZNBs. Ничего трансцендентного и недоступного в этой области нет. Вопрос лишь в том, нужно ли это (спойлер, в данной конкретной ситуации не нужно) и сколько нужно будет убить времени и сил для получения даже относительно среднего результата. Сфера применения у этого микроскопа лежит отнюдь не в забивании гвоздей.
Цитата
3) А разве не круто, что сама? Разве это не упрощает задачу по созданию АИ, если нейронка сама научится играть без какого либо обучения?

Нет. Нет.
Нет, не круто: все равно должны быть определены критерии успешности - и тут это отнюдь не простое "да, правильное фото - нет, не правильное фото" и не присваивание соответствующих тегов. И даже тогда существует сонм всевозможных проблем, не в последнюю очередь - никто не гарантирует изменения стратегии/тактики ИНС в нужном направлении.
Нет, не упрощает: Создать граф решений и подстроить под него проход, возможно даже сделать его индивидуализированным для разных "личностей" ИИ а-ля SMAC может оказаться задачей попроще, чем отбирать стратегии обучения, пропагации, совершенствования ИНС (и давайте не забудем о тестировании: в случае с "традиционными" методами мы сразу увидим результат и можем начать анализ нововведения. В случае с ИНС нам скорее всего придется проходить полный цикл обучения (и то, нельзя забывать, что в такой сложной системе как HoMM с немалой долей псевдорандома результаты далеко не обязательно будут идентичными)) и, конечно же, отбор критериев успешности.

Наконец, замечу, что от ИИ в компьютерных играх при их обычном применении никогда не требуется обыграть человека: "правильный ИИ должен не выигрывать, а красиво отдаваться". См. сюда же сказку Петра Бормора о разумных неписях.

Автор: feanor 18 May 2017, 13:38

Цитата
1) Но обучена всего за 72 часа.

Это не является потребительской ценностью. (Обращу так ж внимание, что 72 часа - не полное время разработки, а лишь время обучения).

Цитата
Зачем, может быть понятно в этой статье
Мы ждали киберпанка, а нас обуяли киберхипстеры. Души у них в традиционных шахматных ботах нет, ишь ты.

Цитата
3) А разве не круто, что сама? Разве это не упрощает задачу по созданию АИ, если нейронка сама научится играть без какого либо обучения?
Сама или не сама - опять же не является потребительской ценностью. Важно, что играет она паршивенько, а допилить её напильником нельзя.


Цитата
2) То есть проблема в том, что в паблике мало софта чтобы прямо сейчас сделать быстро и круто из-за закрытости технологий? Возможно эта проблема быстро решится и появится какое-то публичное АПИ к крутым нейросетям.

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

Цитата
P.S. На сколько понимаю, ответ на мой вопрос, что на момент 2017 года малореально при ресурсах ,что есть у сообщества.

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

Автор: Axolotl 18 May 2017, 14:25

Заранее извиняюсь если скажу глупость. А нельзя совмещать? Не в контексте Героев, а вообще нейросетей и ИИ. Возможно, в реалтайме.
Т.е. основа ИИ если будет алгоритмической, но некоторые его модули, в которых как раз нужен переколбас кучи не очевидных данных, будут или обучены с помощью нейросетей, или на ходу обрабатывать какие-то данные и на основе результата, опять же, уже будет действовать алгоритм. Ну и да, возможно и затем, чтобы подстраиваться к конкретным игрокам/тактикам и исходя из действий противника выбирать, скажем, какой-то из шаблонов поведения.

Автор: tolich 18 May 2017, 19:21

У нея внутре нейронка.©

Автор: feanor 20 May 2017, 22:57

Цитата
Заранее извиняюсь если скажу глупость. А нельзя совмещать? Не в контексте Героев, а вообще нейросетей и ИИ.
Ну тогда надо определять контекст, потому что к пониманию того, что такое "ИИ вообще" мы ненамного ближе, чем шестьдесят лет назад.

Автор: Axolotl 21 May 2017, 00:09

Цитата(feanor @ 21 May 2017, 02:57) *
Цитата
Заранее извиняюсь если скажу глупость. А нельзя совмещать? Не в контексте Героев, а вообще нейросетей и ИИ.
Ну тогда надо определять контекст, потому что к пониманию того, что такое "ИИ вообще" мы ненамного ближе, чем шестьдесят лет назад.


Не, не настолько далеко от героев. "Не в контексте Героев" имел в виду всего-лишь без учета нужности/локальных проблем реализации конкретно в данном упоминавшемся случае "прикручивания к Free Heroes", ну и не обязательно прям Герои – может любая другая стратежка. А так все в том же ключе игрового ИИ в TBS.

Автор: feanor 29 May 2017, 14:37

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

Автор: tolich 10 Aug 2021, 22:32

Тем временем, чуть не пропустил новость, что https://www.opennet.ru/opennews/art.shtml?num=55602.

Автор: hippocamus 10 Aug 2021, 22:55

Цитата(tolich @ 10 Aug 2021, 22:32) *
Тем временем, чуть не пропустил новость, что https://www.opennet.ru/opennews/art.shtml?num=55602.
А смысл?
Можно 50 лет воссоздавать уже созданное, но если оно не предполагает развития - то что с него толку?
Или они умеют и могут добавить фракции Ведьма, Еретик, Киборг из H3SW?
А если нет - то зачем оно вообще?

Автор: Haart of the Abyss 11 Aug 2021, 13:20

Цитата(hippocamus @ 10 Aug 2021, 23:55) *
Цитата(tolich @ 10 Aug 2021, 22:32) *
Тем временем, чуть не пропустил новость, что https://www.opennet.ru/opennews/art.shtml?num=55602.
А смысл?
Можно 50 лет воссоздавать уже созданное, но если оно не предполагает развития - то что с него толку?
Или они умеют и могут добавить фракции Ведьма, Еретик, Киборг из H3SW?
А если нет - то зачем оно вообще?


>Поддержка потенциально хоть каких расширений
>Открытый исходный код, что позволяет любому заинтересованному лицу запилить (на правах форка или, если оно будет оценено как подходящее к основной версии проекта, мёрджа) что угодно, от всех фишек троечного ХД-мода вместе взятых до Ведьмы, Еретика, Киборга и Чапаева с Годзиллой
>Нативная работа на разных платформах, от Винды и Андроида до Свитча
>Отсутствие проблем со, скажем, добавлением в отдельных картах портретов и замков из Героев 1
>Открытый и переработанный ИИ
>Интерфейсные улучшения, типа отображения особых свойств существ на экране существа (как в тройке), а не только в мануале, просмотра инвентаря во время боя и т. д.
>Багфиксы
>Расширенный функционал в редакторе, типа сообщений от существ (в двойке существовавших только в кампании, куда прошивались хардкодом) и прочего привычного по тройке, а в двойке недостающего
>Быстрая битва

Не, реально, зачем оно вообще? Нафиг держать ДФ2 в курсе, что проект не только уже порядочное время как ожил, но и выкатывает чуть ли не по обновлению в месяц? Что в нём уже работает весь функционал исходной игры, кроме части кампаний и намеренно не воссозданных багов (вроде такой горячей любви ИИ к стрелкам, что переставляя двухклеточный юнит, можно бесконечно гонять юнитов ИИ вверх-вниз)? Нафиг *оглядывается на ноль обсуждений Героев 5.5, например* вообще форуму знать, что не только тройку моддят? Это ж троечный форум, Хота есть, Succession Wars на тройке делают, Берс про Эру пишет, чего ещё людям надо?

*будет очень рад, что fheroes2 успеет достичь релиза ещё до того, как в Герои начнут играть дочки*

Автор: feanor 11 Aug 2021, 15:38

Цитата
Или они умеют и могут добавить фракции Ведьма, Еретик, Киборг из H3SW?

*мрачно*
Был бы рад, а то "фракции Ведьма, Еретик, Киборг из H3SW" пока даже в H3SW не умеют и не могут добавить.

Автор: sirDranik 18 Aug 2021, 16:36

Цитата(Haart of the Abyss @ 11 Aug 2021, 13:20) *
*будет очень рад, что fheroes2 успеет достичь релиза ещё до того, как в Герои начнут играть дочки*


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

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

Форум Invision Power Board (http://nulled.cc)
© Invision Power Services (http://nulled.cc)