project_cossacks

project_cossacks

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

Что планируется сделать:

  • Сохранить совместимость с версией 1_35.
  • Сделать возможность создавать комнаты на сервере без проброса портов.
  • Сделать улучшения, которые есть в патче Помор и других патчах.
  • Портировать некоторые улучшения из версий 1_42 и 1_52.

Называться эта версия будет 1_35 update 2025.

Ссылки

Оригинальные исходники

https://github.com/GSC-fake/Cossacks-back-to-war

Версия 1_42 2017

https://github.com/ereb-thanatos/cossacks-revamp-2017

Версия 1_52 2025

https://github.com/MisterCoderman/cossacks-2025

 

Сервер Аллигатора

http://cossacks-server.net/en.html

Исходники сервера Аллигатора

https://github.com/rloger/SimpleCossacksServer

 

Статьи Ereb'а, который сделал версию 1_42

https://habr.com/ru/articles/277067/

https://habr.com/ru/articles/328212/

 

Интервью Аллигатора

http://www.newlcn.com/blog.php?tid=291

 

Сайты по Казакам

http://www.newlcn.com/

http://rliga.com/

 

 

Полезные патчи:

https://cossacks-war.ru/cossacks/pomor

Сочитание клавиш shift+t  для выделения всех боевых юнитов.
В сетевой игре при нажатии паузы показывается ник нажавшего.
Игра Казаки, в чате возможно отправлять заготовленные сообщений (ctr+буква в режиме чата, всего двадцать шесть заготовок).

https://cossacks-war.ru/cossacks/echoes-of-war

http://evilnoob.at.ua/

 

Дневник разработчика-некроманта

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

А там используются WinApi, DirectX, DirectDraw, DirectPlay и другие технологии из 2000 года.

Буду разбираться.

251109

1_52

В исходных кодах активно используется WinApi

При запуске, игра попадает в меню.

\src\Main executable\Interface.cpp 488

PeekMessage

TranslateMessage(&msg);

DispatchMessage(&msg);

В меню генертся события, содержащие координаты мышки.

Эти функции описаны здесь

https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-translatemessage

https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-dispatchmessage

Вообще можно найти много инфы на MSDN

https://learn.microsoft.com/en-us/windows/win32/

https://learn.microsoft.com/en-us/windows/win32/api/

https://learn.microsoft.com/en-us/windows/win32/appuistart/designing-a-user-interface

Еще много старых сайтиков с инфой

https://firststeps.ru/mfc/winapi/r.php?52

https://vsokovikov.narod.ru/New_MSDN_API/Message_queue/fn_peekmessage.htm

http://www.directxtutorial.com/Lesson.aspx?lessonid=9-1-4

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

while (true)
{
 while (!::PeekMessage(&m_msgCur, NULL, NULL, NULL, PM_NOREMOVE)) 
 {
 // функция для работы пока нет сообщений
 }
 if (!::GetMessage(&m_msgCur, NULL, NULL, NULL)) break;
 ::TranslateMessage(&m_msgCur); 
 ::DispatchMessage(&m_msgCur);
}

 

hwnd

Type: HWND

A handle to the window whose window procedure receives the message. This member is NULL when the message is a thread message.

251110

-

251111

Закинул в chatgpt исходники сервера Аллигатора.

Его программа состоит из 3х проектов на perl.

Планирую для прикола переписать его сервер на C++

251112

Закинул в cursor ai исходники сервера Аллигатора и задал переписать их на C++ версию.

Оно даже запускается.

251113

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

ADDON_PROJECT_130/Ddex1.cpp

строка 3156 

word dwVersion=135;

Похоже это то место, где задается версия игры отображаемая в комнате на сервере.

251114

Сделал репозиторий для сравнение кода версий 1_35, 1_42 и 1_52.

Поскольку в версии 1_42 некоторые файлы были переименованы(изменен регистр некоторых букв), то пришлось привести имена файлов в версии 1_35 в соответтветие с версией 1_42. Это нужно для того чтобы git правильно отобразил сделанные изменения.

251115

При нажатии в меню кнопки сетевая игра вызывается функция

\src\Main executable\Interface.cpp:998

processMultiplayer