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

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

DF2 :: ФОРУМЫ _ Heroes II _ Восстанавливаем PhilAI.CPP из Heroes2w.exe

Автор: t800 23 Aug 2016, 06:05

Все жалуются что AI во fheroes2 очень глупый и это действительно так потому что он очень примитивный.

Поэтому я решил что надо сделать для fheroes2 новый AI, но поскольку каким должен AI для Heroes2 я не знаю.
Я решил что когда не знаешь как это придумать надо спросить кого-нибудь кто знает как устроен AI в HMM2 рассказать как он устроен. И я попросил Швейка с форума Green Dragon рассказать мне как устоен AI в НMM2

И он мне рассказал следующее

Цитата("Швейк")
Я открыл Heroes2.exe в IDA сперва нажал сделать анализ, а затем нажал Produce File -> Сreate С file
а потом Produce File -> Сreate C header file

И IDA сделала для меня исходники Heroes2 barb_metal.gif

Вот они.

http://wiki.kvkozyrev.org/forum/download/file.php?id=32

http://wiki.kvkozyrev.org/forum/download/file.php?id=33


И первое что я обнаружил в файлах HEROES2W_Debug.h и HEROES2W_Debug.С

Это название как называется AI в Heroes2 он называется philAI и в оригинальных исходниках он лежал в
в файле PHILAI.CPP и этот AI сделал Phil ded.gif , причем оказывается heroes2.exe в случае когда AI
не знает что делать, он должен выдавать такое сообщение:

Код
"AI encountered object type %d and doesn't know how to deal with it.   Tell Phil";


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

Автор: feanor 23 Aug 2016, 10:03

Цитата
Но свои контакты почему то Phil указать забыл
Потому что в том калифорнийском офисе, я думаю, все и так знали, кто где сидит)

Цитата
И это очень жаль, потому что если бы он их указал тогда его можно было бы просто спросить какую команду надо куда писать
Двадцать лет прошло вообще-т)

Автор: t800 23 Aug 2016, 20:18

Хммм... no.gif ... Сегодня чатился по Hangouts c James Koppel (это который Iron Fist)

И он сказал мне что я не совсем понял no.gif

Цитата("James Koppel")
Anyway, here's the main important thing I can tell you
If you look at the decompiled Heroes II source code, you will have to cease all work on fheroes2
Otherwise, fheroes2 will stop being free
Because that's how the law around reverse-engineering works
The best you can do is get someone else to look at the decompiled code, and then write a description about how it works
This is called a "Chinese wall"
This isn't me telling you you can't look at our source. It's the law


Это про че это он?


Автор: feanor 23 Aug 2016, 20:56

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

Автор: t800 23 Aug 2016, 21:38

Цитата(feanor @ 23 Aug 2016, 23:56) *
Условно про то, что использование восстановленных алгоритмов из декомпилированного кода, типа, незаконно.
На самом-то деле это еще надо доказать, учитывая, что вообще-то в героях они не то чтобы ноу-хау.


Мда...

А еще он мне сказал что-то вроде поскольку fheroes2 GPL то в любой момент Andrey Afledinov может прийти и на меня наругаться и запретить его изменять и делать на нем сборки потому что это он владелец движка.

Цитата("James Koppel")
Also, fheroes2 is GPL'd, meaning that it is owned by a specific person (not sure who) I work in the same building as Richard Stallman, the founder of GNU and the creator of GPL. I get to hear about this several times a day


Это что действительно так?

Автор: tolich 23 Aug 2016, 21:49

https://ru.wikipedia.org/wiki/GNU_General_Public_License Я не знаю, как нужно извратить суть GPL, чтобы говорить такое.

Автор: hippocamus 24 Aug 2016, 00:39

Цитата(t800 @ 23 Aug 2016, 06:05) *
Поэтому я решил что надо сделать для fheroes2 новый AI, но поскольку каким должен AI для Heroes2 я не знаю.
Этим сказано чуть больше, чем всё...
Цитата(t800 @ 23 Aug 2016, 06:05) *
И IDA сделала для меня исходники Heroes2
Она не сделала исходники - она дизассемблировала код.

Цитата(t800 @ 23 Aug 2016, 06:05) *
И первое что я обнаружил в файлах HEROES2W_Debug.h и HEROES2W_Debug.С

Это название как называется AI в Heroes2 он называется philAI и в оригинальных исходниках он лежал в
в файле PHILAI.CPP и этот AI сделал Phil ded.gif
А, то есть у тебя есть исходники - и ты дизассемблируешь код, чтобы их лучше понять?
Ну что же, как говорят - у каждого додика - своя методика...

Автор: Эроласт 24 Aug 2016, 05:59

Цитата
Also, fheroes2 is GPL'd, meaning that it is owned by a specific person (not sure who)

Обладатель любой копии програмы под GPL считается её полноправным владельцем. В этом вся суть GPL.

Автор: t800 24 Aug 2016, 07:46

Цитата(hippocamus @ 24 Aug 2016, 03:39) *
Цитата(t800 @ 23 Aug 2016, 06:05) *
Поэтому я решил что надо сделать для fheroes2 новый AI, но поскольку каким должен AI для Heroes2 я не знаю.
Этим сказано чуть больше, чем всё...
Цитата(t800 @ 23 Aug 2016, 06:05) *
И IDA сделала для меня исходники Heroes2
Она не сделала исходники - она дизассемблировала код.


Ну вообще то IDA Швейку создала исходники на С а не на ассемлере только почему то одним файлом.
Но зато он понятный, а на ассемблере всякие MOV EAX и с ними Швейку трудно понять что AI делает.

Автор: t800 24 Aug 2016, 08:15

Цитата(Эроласт @ 24 Aug 2016, 08:59) *
Цитата
Also, fheroes2 is GPL'd, meaning that it is owned by a specific person (not sure who)

Обладатель любой копии програмы под GPL считается её полноправным владельцем. В этом вся суть GPL.


Не знаю вот он мне опять утром написал в Hangouts

Цитата("James Koppel")
I don't know what DF2 is. What did they say?
Here's the story: https://www.eff.org/issues/coders/reverse-engineering-faq
Also, FYI: https://en.wikipedia.org/wiki/Richard_Stallman
I've told you two separate things: First, fheroes2 is not "owned by everyone", although it is free to modify. Second, if you directly reverse-engineer something and then make something based on that, it becomes a derivative work





Автор: tolich 24 Aug 2016, 08:21

А на С сразу понял?

Автор: t800 24 Aug 2016, 08:59

Цитата(tolich @ 24 Aug 2016, 11:21) *
А на С сразу понял?


Ну на С оно понятней, а то с MOV и EAX вообще было не понятно что AI делает.

Но меня сейчас не это беспокоит. Просто James Koppel сказал что если я не хочу чтобы fheroes2 стали несвободным
надо построить "Китайсткую Стену" и сделать так кто-нибудь другой посмотрел как работает PhilAI и мне рассказал как он работает, а чтобы я сам в файл не смотрел иначе fheroes2 перестанут быть свободными. И поэтому я в файлы который выложил Швейк смотреть даже не стал.

Автор: t800 24 Aug 2016, 12:46

Всё! Проблема решена. На Green Dragon догорился со Швейком который написал что готов полностью разобратся в AI lupa.gif , и расказать всем как он работает. http://wiki.kvkozyrev.org/forum/viewtopic.php?f=4&t=102&p=571#p571 Швейк всё время шутит, но оказалось, что он и полностью разобратся может barb_metal.gif а я даже смотреть код HMM2 не буду. Я буду делать новый AI для fheroes2 только как мне будут это советовать. Вот.

Автор: t800 25 Aug 2016, 07:34

Фух...Совсем запутал меня James.. Сперва говорил чтобы я построил "Китайскую Стену" а теперь написал что мне можно смотреть код dunno.gif fp.gif ... Вообще запутался...

Цитата("James Koppel")
I suspect that the previous people who worked on fheroes2 have already looked at decompilations of HoMM II, meaning that, if you do look at them, it wouldn't be any more more illegal than it already is


Ладно оставлю все уж как есть. Пускай стоит "Китайская Стена" раз построили: Швейк смотрит код, пишет об этом статьи на Green Dragon для всех, а я буду делать AI только по подсказкам. ded.gif

Автор: tolich 25 Aug 2016, 08:10

http://studopedia.org/5-4380.html Так что, изучение файловых форматов по декомпилированной части программы допустимо. А распространение результата декомпиляции нет. И сходную программу писать нельзя.

Автор: t800 25 Aug 2016, 08:32

Цитата(tolich @ 25 Aug 2016, 11:10) *
http://studopedia.org/5-4380.html Так что, изучение файловых форматов по декомпилированной части программы допустимо. А распространение результата декомпиляции нет. И сходную программу писать нельзя.


Ну вроде James так сперва и объяснил. Что надо чтобы один человек декомпилировал и сделал описание как программа работает. И тот кто пишет похожую программу просто прочитал статью. И тогда все нормально.

Автор: tolich 25 Aug 2016, 08:46

Нет, не всё, потому что распространение информации, полученной путём декомпиляции, незаконно.

Автор: t800 25 Aug 2016, 08:58

Цитата(tolich @ 25 Aug 2016, 11:46) *
Нет, не всё, потому что распространение информации полученной путём декомпиляции, незаконно.


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

Цитата("James Koppel")
I've discussed this with lawyers at the start of the project. I don't want to get into the details. I will say that it is very intentional that Ironfist requires you already have a copy of the game


ЗЫ Хотя надо наверное написать Швейку чтобы про это он тоже написал, что читать статью можно только тем у кого уже есть честно приобретенная копия игры.

Автор: tolich 25 Aug 2016, 09:07

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

Автор: t800 25 Aug 2016, 09:19

Цитата(tolich @ 25 Aug 2016, 12:07) *
Законна декомпиляция части программы, отвечающей за работу с конкретным файлом или протоколом, для того, чтобы обеспечить взаимодействие другой программы с этим файлом или протоколом. Если информация о структуре файла или протоколе не может быть получена другим способом. Распространение тоже возможно только для обеспечения взаимодействия программ. Но ты же собираешься делать аналог, а это уже незаконно. Также незаконной становится и передача тебе этой информации.


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

Автор: feanor 25 Aug 2016, 09:23

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

Автор: t800 25 Aug 2016, 09:36

Цитата(feanor @ 25 Aug 2016, 12:23) *
Гнугпл головного мозга - страшная, неизлечимая болезнь с осложнениями в виде юридического фетишизма.
Им, например, формат icn тоже через китайскую стену рассказали? Вот пусть сами и доказывают.


Ну не знаю. Мне тоже сперва показалась странной эта "Китайская Стена". Просто я James Koppel несколько недель назад написал вопрос про то, что можно мне попробовать портировать его Iron Fist на fheroe2 он сказал, что можно, но поставил условия. Первое про "Китайскую Стену" второе про название порта, что порт может быть будет назваться по другому, а не Iron Fist, как будет точно называться решится когда порт будет готов может быть будет например Bone Foot назваться (но это я просто так думаю, что может быть так будет называться) потому что он мне просто написал:

Цитата("James Koppel")
As the time gets nearer, we can talk about what to do about using the Ironfist name


И почему портированный мод нельзя просто назвать Ironfist Mod для fheroes2 это если честно я тоже не понял.

А сейчас пока составлен такой план работ на год. Вот

1) Вставка монстров из замка Abyss и новая кампани King Octopus (Осень 2016)
2) Новый AI (Зима 2016-2017)
3) Портирование Iron Fist (Весна-Лето 2017)

Автор: t800 04 Sep 2016, 09:03

Швейк с форума Green Dragon опубликовал первую часть своей статьи.

Цитата("Швейк")
Сегодня продолжил разбираться с тем как работает PhilAI

Но прежде чем читать дальше мою статью про то как работает PhilAI.
Эту статью имеют право читать только:

Цитата

1. Лицо, правомерно владеющее экземпляром программы для ЭВМ или экземпляром базы данных (пользователь), вправе без разрешения автора или иного правообладателя и без выплаты дополнительного вознаграждения:
1) осуществлять действия, необходимые для функционирования программы для ЭВМ или базы данных (в том числе в ходе использования в соответствии с их назначением), включая запись и хранение в памяти ЭВМ (одной ЭВМ или одного пользователя сети), внесение в программу для ЭВМ или базу данных изменений исключительно в целях их функционирования на технических средствах пользователя, исправление явных ошибок, если иное не предусмотрено договором с правообладателем;
2) изготовить копию программы для ЭВМ или базы данных при условии, что эта копия предназначена только для архивных целей или для замены правомерно приобретенного экземпляра в случаях, когда такой экземпляр утерян, уничтожен или стал непригоден для использования. При этом копия программы для ЭВМ или базы данных не может быть использована в иных целях, чем цели, указанные в подпункте 1 настоящего пункта, и должна быть уничтожена, если владение экземпляром таких программы или базы данных перестало быть правомерным.
2. Лицо, правомерно владеющее экземпляром программы для ЭВМ, вправе без согласия правообладателя и без выплаты дополнительного вознаграждения изучать, исследовать или испытывать функционирование такой программы в целях определения идей и принципов, лежащих в основе любого элемента программы для ЭВМ, путем осуществления действий, предусмотренных подпунктом 1 пункта 1 настоящей статьи.
3. Лицо, правомерно владеющее экземпляром программы для ЭВМ, вправе без согласия правообладателя и без выплаты дополнительного вознаграждения воспроизвести и преобразовать объектный код в исходный текст (декомпилировать программу для ЭВМ) или поручить иным лицам осуществить эти действия, если они необходимы для достижения способности к взаимодействию независимо разработанной этим лицом программы для ЭВМ с другими программами, которые могут взаимодействовать с декомпилируемой программой, при соблюдении следующих условий:
1) информация, необходимая для достижения способности к взаимодействию, ранее не была доступна этому лицу из других источников;
2) указанные действия осуществляются в отношении только тех частей декомпилируемой программы для ЭВМ, которые необходимы для достижения способности к взаимодействию;
3) информация, полученная в результате декомпилирования, может использоваться лишь для достижения способности к взаимодействию независимо разработанной программы для ЭВМ с другими программами, не может передаваться иным лицам, за исключением случаев, когда это необходимо для достижения способности к взаимодействию независимо разработанной программы для ЭВМ с другими программами, а также не может использоваться для разработки программы для ЭВМ, по своему виду существенно схожей с декомпилируемой программой для ЭВМ, или для осуществления другого действия, нарушающего исключительное право на программу для ЭВМ.
4. Применение положений, предусмотренных настоящей статьей, не должно противоречить обычному использованию программы для ЭВМ или базы данных и не должно ущемлять необоснованным образом законные интересы автора или иного правообладателя.


Таким образом если вы не являетесь владельцем легальной копии Heroes2w.exe или собираетесь использовать информацию из статьи за исключением случаев, когда это необходимо для достижения способности к взаимодействию независимо разработанной программы для ЭВМ с другими программами, то вы должны немедленно покинуть данную тему и статью про то как работает PhiIAI не читать.



Цитата("Швейк")
А теперь про PhilAI. Информация для тех кто имеет право ее читать

PhilAI состоит из следующий функций

Код
philAI::BuildBuilding(town *,int)    
philAI::BuildCreature(town *,int,int)
philAI::BuildHero(town *,int)
philAI::CanBuyBHC(BHC &)
philAI::CheckBerserk(void)      
philAI::CheckBuyStuff(void)      
philAI::CheckForCreatureUpgrades(void)  
philAI::CheckReload(void)                      
philAI::ChooseEvaluateBattle(armyGroup *,hero *,armyGroup *,hero *,int,int,int,int &,int &)
philAI::ChooseGoldOrExperience(int,int) .
philAI::ChooseToFightForArtifact(int,int,int)
philAI::ChooseToPayRansomOnHero(int)
philAI::CombatMonsterEvent(hero *,int,int *,mapCell *)
philAI::ComputeUpgradeValue(int,int)
philAI::ComputeValueOfFreeSS(hero *,int)
philAI::ComputeValueOfSS(hero *,int,int)          
philAI::CreaturesToBuy(int,int)                    
philAI::CreaturesToBuy(town *,int)                
philAI::DamageGroup(armyGroup *,hero *,hero *,float)
philAI::DetermineHeroToMove(int)              
philAI::DetermineTargetPosition(int &,int &,int,int &)  
philAI::DimensionDoorTo(int,int)                  
philAI::DoAI(int)      
philAI::DoAllHeroInteractions(void)        
philAI::DoAnywhereDDoorTownGate(int)
philAI::DoDimensionDoor(hero *)          
philAI::EvaluateArtifactEvent(int,int)    
philAI::EvaluateBarrier(mapCell *)        
philAI::EvaluateGenericSite(mapCell *)  
philAI::EvaluateHeroEvent(int,int,int,int,int *)                
philAI::EvaluateJail(mapCell *)              
philAI::EvaluateMineEvent(int,int,int,int *)                    
philAI::EvaluateMonsterEvent(int,int,int *)        
philAI::EvaluateOneTimeCreaturePurchase(int,int,int,int &,int &,int &)    
philAI::EvaluatePassword(mapCell *)    
philAI::EvaluateRecruitSite(mapCell *)  
philAI::EvaluateTownEvent(int,int,int,int,int *)  
philAI::FightEvent(hero *,mapCell *,int)            
philAI::FightValueOfStack(armyGroup *,hero *,int,int,int,int)                    
philAI::FutureDeflator(int * const)      
philAI::GetBestBHC(int,BHC &)          
philAI::GetBestBuilding(town *,BHC &,float &)  
philAI::GetBestCreature(town *,BHC &,float &)  
philAI::GetBestHero(town *,BHC &,float &)        
philAI::GetGameAIVars(void)              
philAI::GetGameAttentionValue(int)    
philAI::GetTurnAIVars(int)                  
philAI::GetTurnAttentionValue(int)      
philAI::GoodAdjacent(int *)                
philAI::HeroInteractionAtHero(hero *,hero *,int,int *)      
philAI::HeroInteractionAtTown(hero *,town *,int,int *)    
philAI::IncrementHourGlass(void)      
philAI::LikelihoodOfEnemyAttacking(town *,hero *,float &,float &,int &,int &,int &,float &)  
philAI::ManaRefreshValue(hero *,int)  
philAI::MaxBuyableCreatures(int)      
philAI::MeanRVOfUnexploredTerritory(int)        
philAI::NetValueOfArtifact(int,int,int,int)        
philAI::ProbableOutcomeOfBattle(armyGroup *,hero *,armyGroup *,hero *,armyGroup *,int,int,int,float &,int &,int &,int &,int &,int &)
philAI::QuickCombat(armyGroup *,hero *,armyGroup *,hero *,int,int,float &,float &)
philAI::RVConversion(int * const)                  
philAI::RVOfPosition(int,int,int,int,int,int,int,int,int,int)          
philAI::RedistributeTroops(armyGroup *,armyGroup *,int,int,int,int,int)            
philAI::SetupRelativeHeroStrengths(void)    
philAI::StrategicValueOfPosition(int,int,int,int,int *,int)          
philAI::TownEvent(mapCell *,hero *,int,int)
philAI::TurnCostResource(int)                    
philAI::TurnValueOfObelisk(int)                  
philAI::TurnsToBuy(int * const)                    
philAI::ValueOfBuyingBuilding(town *,int,int &,float &)            
philAI::ValueOfBuyingCreature(town *,int,int &,int,float &)      
philAI::ValueOfBuyingHero(town *,hero *,int &,float &)            
philAI::ValueOfEventAtPosition(int,int,int,int *)        
philAI::ValueOfTown(town *)                      
philAI::philAI(void)


А что делает каждая из функция, это я расскажу в следующий раз.

Форум Invision Power Board (http://nulled.cc)
© Invision Power Services (http://nulled.cc)