1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Пожалуйста, внимательно прочитайте правила раздела.
  3. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

Портировал игру Colonization Too

Тема в разделе "Мастерская", создана пользователем Jordan 63, 7 фев 2023.

  1. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    547
    Приветствую!

    Изменения.
    Обновил SDL2, TTF, Image до последних версий.
    Исправил пути на #include <SDL2/SDL> для сборки под linux

    Попалась на просторах интернета игра, реализующая Colonization 1994 года. Игра не доделана. Код жесткий.

    Пример. Весь код примерно такой. Но, он работает!
    Код:
    void GameEngine::workIndian(void)
    {
        int x, y, i, ii, k, dx, dy, steps=25, x1, y1;
        long mapnumold;
    
        for(i = 0; i < 300; i++)
        {
            k=(rand()%8)+1;
            m_pData->mapnum=m_pData->natives[i];
                
            m_pGfxEngine->ReCenter();
            m_pData->flag&=~m_pData->ReCenFlag;
                
            m_pData->oldloc=m_pData->scrnum;
            mapnumold=m_pData->mapnum;
                
            m_pGfxEngine->MoveUnit(k);
                
            if(m_pData->flag & m_pData->NoMoveFlag)
            {
                m_pData->flag &= ~m_pData->NoMoveFlag;
            }
            else
            {
                if(m_pMap->getTile(m_pData->mapnum)->getShrdstate(m_pData->nationTurn)==2 &&
                   m_pMap->getTile(mapnumold)->getShrdstate(m_pData->nationTurn)==2)
                {
                    m_pData->natives[i]=m_pData->mapnum;
                }
                else
                {
                    m_pGfxEngine->SetTerrain();
                    m_pGfxEngine->UpdateScreen0();
                    
                    m_pData->natives[i]=m_pData->mapnum;
    
                    m_pGfxEngine->DrawTILE(m_pGfxEngine->bck1,m_pGfxEngine->screen,0,0,
                    m_pData->tw,m_pData->th,
                    m_pData->stile[m_pData->oldloc][XPOS],
                    m_pData->stile[m_pData->oldloc][YPOS]-m_pData->yextra-5);
                    
                    dx=(m_pData->stile[m_pData->scrnum][XPOS]-
                            m_pData->stile[m_pData->oldloc][0])/25;
                    dy=(m_pData->stile[m_pData->scrnum][YPOS]-
                            m_pData->stile[m_pData->oldloc][1])/25;
                    x=m_pData->stile[m_pData->oldloc][0];
                    y=m_pData->stile[m_pData->oldloc][1]-m_pData->yextra-5;
          
                    for(ii=0;ii<steps;ii++)
                    {
                        m_pGfxEngine->DrawSURF(m_pGfxEngine->screen,m_pGfxEngine->bck1,x,y);
                        x+=dx;
                        y+=dy;
                        m_pGfxEngine->DrawTILE(m_pGfxEngine->bck1,m_pGfxEngine->screen,0,0,
                               m_pData->tw,m_pData->th,x,y);
                
                        if(m_pData->scrnum<11)
                        {
                          m_pGfxEngine->NationBox(x, y+m_pData->yextra+5, NATION_TRIBE, 3,
                          ORD_NONE);
                          m_pGfxEngine->DrawTILE(m_pGfxEngine->screen,m_pGfxEngine->tilesheet1,
                                x,y+m_pData->yextra+5,
                                m_pData->tw,m_pData->th-m_pData->yextra-5,m_pData->tilex[4],
                                m_pData->tiley[2]+m_pData->yextra+5);
                        }
                        else
                        {
                          m_pGfxEngine->NationBox(x, y, NATION_TRIBE, 3, ORD_NONE);
                          m_pGfxEngine->DrawTILE(m_pGfxEngine->screen,m_pGfxEngine->tilesheet1,
                                x,y,
                                 m_pData->tw,m_pData->th,m_pData->tilex[4],m_pData->tiley[2]);
                        }
                
                        if(m_pData->stile[m_pData->oldloc][0]<
                              m_pData->stile[m_pData->scrnum][XPOS])
                          {x1=x-dx;}
                        else
                          {x1=x+dx;}
                        
                        if(m_pData->stile[m_pData->oldloc][1]<
                              m_pData->stile[m_pData->scrnum][YPOS])
                          {y1=y-dy;}
                        else
                          {y1=y+dy;}
                        
                        m_pGfxEngine->UpdateScreen1(x1,y1,
                              m_pData->tw+dx,m_pData->th+dy+m_pData->yextra+5);
                        SDL_Delay(5);           
                    }               
                }
            } 
        }
        m_pGfxEngine->SetTerrain();
        m_pData->flag &= ~m_pData->VillageFlag;
    }
    Игра написана на С++ и SDL 1.2, датировка кода 2004 год.

    Что я сделал.
    1. Разместил исходники на гитхабе.
    2. Портировал под SDL2
    3. Собрал портированную версию.
    4. Решил поделиться.

    Собирал в студии 2022. Игра может вылетать:)

    Ссылка на исходники.
    Ссылка для скачивания.

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

    Вот скрин уже портированной версии.
    agithub.com_JordanCpp_coltoo_raw_master_screenshots_1.jpg

    Оригинальная ссылка на игру и исходники.

    Джордан, но зачем?
    Почему нет!:)
     
    Последнее редактирование: 9 фев 2023
    Михаил_128к, MrFlibble, AndyFox и 4 другим нравится это.
  2.  
  3. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    547
    По мере сил, буду рефакторить код. В текущем состоянии, очень тяжело развивать проект. Главное, устранить вылеты из игры. В оригинальной версии их нет.
     
  4. Tigoro AI General

    Tigoro

    Регистрация:
    4 фев 2010
    Сообщения:
    3.241
    Посмотрим что autogen.sh скажет ) если он не заглушкой, конечно.
     
  5. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    547
    Нужно в сорцах поменять #include <SDL.h> на #include <SDL/SDL.h>

    Чуть позже коммит сделаю и проверю на lubuntu
     
  6. Tigoro AI General

    Tigoro

    Регистрация:
    4 фев 2010
    Сообщения:
    3.241
    @Jordan 63, чего не будет хватать из файлов при компиляции, с этим разобраться не сложно. С другими ошибками может быть сложнее; на днях попробую, если сегодня не доберусь.
     
    Jordan 63 нравится это.
  7. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    547
    Поправил в исходниках include на #include <SDL2/SDL.h>

    И еще для linux добавить
    find_package(SDL2 REQUIRED)
    include_directories(${SDL2_INCLUDE_DIRS})
     
    Tigoro нравится это.
  8. Tigoro AI General

    Tigoro

    Регистрация:
    4 фев 2010
    Сообщения:
    3.241
    Пока не хочет. Требует SDL_types.h, хотя штатные библиотеки установлены вроде бы все.
    В общем, не сегодня уже потыкаю )
     
  9. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    547
    Исправил баг при загрузке игры и критический баг при постройке колонии.

    upload_2023-2-10_2-48-40.png
     
    MrFlibble, Minaro, AndyFox и ещё 1-му нравится это.
  10. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    547
    Хочу в игру встроить подобную графику.

    ae7.pngegg.com_pngimages_769_285_png_clipart__D0_98_D1_81_D1_88ce9e9650d43ee7f0b87f38333066bc3.png

    Для заставок.
    ahumanities.by_wp_content_uploads_2020_07_ispanskaya_kolonizacziya_ameriki_e1599850750249.jpg
    --- добавлено 10 фев 2023, предыдущее сообщение размещено: 10 фев 2023 ---
    Здания в колонии. И угл похож.
    [​IMG]
    --- добавлено 10 фев 2023 ---
    Музыку для фона добавить Вивальди времена года. Конфетка будет:)
     
    Minaro, Quester, AndyFox и ещё 1-му нравится это.
  11. Tigoro AI General

    Tigoro

    Регистрация:
    4 фев 2010
    Сообщения:
    3.241
    Благо файлы ресурсов открытые.
     
  12. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    547
    Открытые и текстовые. Но код требует серьёзного рефакторинга, код графики и геймплея смешан и завязан в узел:) Чего стоит gui часть.
    --- добавлено 10 фев 2023, предыдущее сообщение размещено: 10 фев 2023 ---
    Я ещё хочу портировать под свой фреймворк LDL. Но только после рефакторинга игры. И доделки собственно фреймворка.

    Я буду рефакторить и писать в тему о достигнутом. С текущей кодовой базой, почти невозможно развивать проект.
     
    MrFlibble, Tigoro и AndyFox нравится это.
  13. Tigoro AI General

    Tigoro

    Регистрация:
    4 фев 2010
    Сообщения:
    3.241
    Не хочет компилироваться под линукс, в лучшем случае ошибки в процессе компилирования выдает (как и с оригиналом кода).
    Под wine тоже не получилось запустить (библиотеки требует, докинуть сейчас неоткуда), но это решаемое.
     
  14. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    547
    Благодарю за содействие!

    Попробую у себя в виртуалке собрать.

    Начал рефакторить код. До рефакторинга пришлось посидеть 2 вечера, что бы вникнуть в код.
     
  15. Tigoro AI General

    Tigoro

    Регистрация:
    4 фев 2010
    Сообщения:
    3.241
    @Jordan 63, если получится скомпилировать без доп.действий, значит я что то упустил или не совсем совместимое для сборки установлено (что то слишком свежее и менее совместимое, дистрибутив не совсем стандартный)
     
    Последнее редактирование: 14 фев 2023
  16. MrFlibble

    MrFlibble

    Регистрация:
    23 мар 2008
    Сообщения:
    3.713
    @Jordan 63, а как там дела с ИИ обстоят? Или пока всё в таком зачаточном состоянии? В любом случае, удачи с доведением проекта до ума!
     
    Михаил_128к нравится это.
  17. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    547
    Примерно так:)

    Код:
    #include "ai.h"
    
    //Constructor, destructor
    AI::AI()
    {
    }
    
    AI::~AI()
    {
    }
    
    bool AI::Init(void)
    {
        return true;
    }
    Его нет. Хотя индейцы сами перемещаются, надо найти место в коде.

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

    Мне интересена задача причесать код.
     
    Последнее редактирование: 15 фев 2023
    Tigoro и MrFlibble нравится это.
  18. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    547
    Для отвязки графического движка от класса игры, пришлось затронуть половину кодовой базы. Но это правильно, графический движок не должен знать об игре, он должен рисовать примитивы, линии, окна, текст. В нем еще остался геймплейный функционал, буду переносить его в другие классы.

    Если интересно, о чем я.
     
    MrFlibble и Tigoro нравится это.
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление