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

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

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

Кодерский уголок

Тема в разделе "Мастерская", создана пользователем Dimouse, 10 сен 2006.

  1. Dimouse King of Mice

    Dimouse

    Администратор Переводчик

    Регистрация:
    18 апр 2003
    Сообщения:
    34.667
    В соответствии с назначением раздела, в этой теме предполагается обсуждать конкретные вопросы, которые у вас возникают при создании своих программ (в частности - игр), помогать другим, размещать полезные ссылки на статьи и материалы, которые могут пригодиться другим.

    Что здесь не допускается:
    - беспорядочный флуд на всевозможные темы, в том числе общие обсуждения языков программирования без конкретики (карается по статье "флуд и оффтопик" *),
    - разжигания на темы "что лучше, Си или Си++ и чем они отличаются?", "какой язык программирования лучше X или Y?" и т.п. (карается по статье "флейм и участие в холиварах" *),
    - мерение пиписьками в стиле "я лучше программирую" или "ты не умеешь программировать" (карается по статье "оскорбление участников и их взглядов" *).

    Всё это допускается в специально созданной теме "Беседка для программистов или «Бутерброд с кодом».

    * по усмотрению модератора также возможно применение блокировки в данной теме.

    Оригинальное сообщение
     
    Последнее редактирование модератором: 24 ноя 2014
    CY8R4Y нравится это.
  2.  
  3. dead_man

    dead_man

    Регистрация:
    14 фев 2010
    Сообщения:
    101
    Из готовых программ под дос есть GSPLAY.

    Вот архив с моей реализацией на плюсах
     

    Вложения:

    • MIDIPL.zip
      Размер файла:
      93,3 КБ
      Просмотров:
      48
  4. igor_pavlov

    igor_pavlov

    Регистрация:
    8 апр 2012
    Сообщения:
    58
    А с чего ты взял, что линковка была статическая?
    Если знаешь сигнатуры функций, то можно.

    Но вообще, нужно больше подробностей: где и как собираешь, и какие файлы используешь.
     
  5. Zelya

    Zelya

    Регистрация:
    20 апр 2007
    Сообщения:
    722
    @igor_pavlov,
    Сначала я написал немного неправильно. Я думал, что при статической линковке DllMain не вызывается вобще. Но, согласно
    DllMain entry point (Process.h) - Win32 apps
    она вызывается всегда. А для меня интересен lpvReserved, который NULL для динамической линковки. Вооруженный этими знаниями, я нашел и место в ассемблере дллки, где она ломала данные при lpvReserved != 0, и подправил его. Так что временно я "собрал" для себя рабочую версию. Все же интересует, как сделать правильно.

    Собственно, делал через LoadLibraryA в сях и DllImport в дотНЕТ. Оба варианта - динамические. Хотелось бы сделать, как в оригинале, но не умею. Сигнатуры функций знаю, но как их использовать для статической линковки?
     
  6. igor_pavlov

    igor_pavlov

    Регистрация:
    8 апр 2012
    Сообщения:
    58
    @Zelya, использование dll всегда подразумевает, что линковка динамическая, но реализоваться она может двумя способами. Для первого надо создавать def-файл.
     
  7. AlexeiK

    AlexeiK

    Регистрация:
    11 ноя 2010
    Сообщения:
    78
    Народ, может кто хочет со мной на пару доделать MineBombers ?
    Я уже перекинул его на Unity
    alexeik/minebombers.unity
    Загрузка карты
    Навигация по карте

    Остаток:
    UI игрока
    UI Главное меню
    AI монстры
    UI переход между уровнями
     
  8. Pingvena

    Pingvena

    Регистрация:
    9 окт 2010
    Сообщения:
    262
  9. Tigoro

    Tigoro

    Регистрация:
    4 фев 2010
    Сообщения:
    2.937
    Есть трекерный плеер с собственным форматом, движок в нескольких играх использовался (1 или 2 упоминания попадались). Автор Russell Marks, 1995-1996 гг. Формат модуля плеера максимально упрощён; отдельно файл с паттернами (в виде текстового описания) и файлы-семплы к нему. Под линукс это чудо мне удалось ранее скомпилировать, изменив код в ответ на ошибки. Под DOS как пишет автор "You should be able to run it on MS-DOS by compiling with djgpp, but I haven't tried this". Если у кого-то есть настроенный DJGPP под dosbox, можете его выложить? Архивы кода с оригинальными пакетам плеера и с моей модификацией под линукс прилагаю на всякий.
     

    Вложения:

    • sod-player.zip
      Размер файла:
      2,9 МБ
      Просмотров:
      40
  10. MisterGrim Very old

    MisterGrim

    Legacy

    Регистрация:
    29 ноя 2007
    Сообщения:
    25.423
    DJGPP я бы не советовал под досбоксом гонять. Если в целях разработки.
     
  11. Tigoro

    Tigoro

    Регистрация:
    4 фев 2010
    Сообщения:
    2.937
    @MisterGrim, замечательно крашить будет? мдам...
     
  12. MisterGrim Very old

    MisterGrim

    Legacy

    Регистрация:
    29 ноя 2007
    Сообщения:
    25.423
    @Tigoro, я ж не призываю суровый компьютер с досом собирать для этого. DOS можно поставить и в виртуалку.
     
    Tigoro нравится это.
  13. AndreyBarmaley

    AndreyBarmaley

    Регистрация:
    20 фев 2021
    Сообщения:
    10
    предлагаю добавить поддержку в libmodplug, тогда все игры использующие SDL_Mixer смогут играть этот формат.
     
  14. Tigoro

    Tigoro

    Регистрация:
    4 фев 2010
    Сообщения:
    2.937
    хм, "извращение ради извращения" ) думаю формат того "не стоит": по сути это перечень условий воспроизведения самплов, в какой очередности, на каком канале, какая длительность; эффектов практически нет, громкость отсутствует (возможно, у меня так накривокодилось в бинарник)
     
  15. Ogr 2 лол

    Ogr 2

    Хелпер Переводчик

    Регистрация:
    25 мар 2008
    Сообщения:
    6.370
  16. Алексей Сафонов

    Алексей Сафонов

    Регистрация:
    18 дек 2010
    Сообщения:
    30
    ох ни че себе, мощный инструмент получился однако
     
  17. Revolter

    Revolter

    Регистрация:
    12 июл 2006
    Сообщения:
    2.801
    Товарищи программисты на C++, помогите, пожалуйста, воплотить давнюю мечту по созданию одной модификации для AVP2. Я реально ничего не умею кодить, только читать внятные названия функций на английском и комменты к ним, а так же копировать готовые участки в другие места и смотреть, что будет :)

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

    Кому не жалко времени, подскажите, пожалуйста, что нужно сделать и как оформить в смысле синтаксиса, чтобы реализовать проверку вида "если название текущей миссии - такое-то" в этом месте:

    Код:
    void ViewModeMGR::Init()
    {
        m_pData->m_CurrentVisionSet = g_pCharacterButeMgr->GetVisionSet(g_pGameClientShell->GetPlayerStats()->GetButeSet());
    
    
        SetVisionMode(m_pData, m_pData->m_InitialModeName);
        SetVisionSound();
    
        m_LastModeName = "Normal";
    
        g_cvarNVMinChargeLevel.Init(g_pLTClient, "NVMinChargeLevel", LTNULL, 50.0f);
    }
    
    Это из файла "ViewModeMGR.cpp", лежащего в папке "ClientShellDLL" от исходников к игре, доступных здесь. Он управляет включением режимов зрения для всех рас: инициализирует их, разрешает или запрещает переключаться на другие в зависимости от условий, описывает, где они лежат и какие у них атрибуты, и т.д.

    Как сделать -

    Код:
    if(если мы Хищник)
    {
    "Включаем режим HeatVision"
    }
    else
    {
    "Включаем стандартный режим зрения"
    
    - я разобрался, но в игре есть миссия, где маски у Хищника нет, поэтому в этом участке вместо "если мы Хищник" я хочу сделать на это проверку. Есть проверка на наличие биомаски, но она почему-то не срабатывает (вероятно, ViewModeMGR::Init() происходит до неё).

    В файле MissionMgr.cpp (из папки Shared), который управляет всем, что связано с параметрами уровней/миссий, есть вот такая вещь:

    Код:
    int CMissionMgr::GetSetFromName(char *szName) const
    {
        // Find out which character we're looking for
        for(int i = 0; i < m_nNumSets; i++)
        {
            if(!stricmp(szName, GetMissionName(i)))
                return i;
        }
    
        g_pInterface->CPrint("CMissionMgr: Could not find set %s! Defaulting to index zero!", szName);
    
        return 0;
    }
    
    И вот этот самый GetMissionName(), мне кажется, и мог бы решить вопрос. Но как его использовать во ViewModesMGR.cpp? Прописать в начало файла хидер (#ifndef __MISSION_MGR_H__
    #include "MissionMGR.h") я методом тыка уже догадался, всё работает, вот только запрос на проверку составить не могу...

    Наверное, нужно что-то типа if (_stricmp(g_pMissionMgr->GetMissionName(), "p4s1") == 0), но как это оформить - ума не приложу. Visual Studio 6 SP3 ругается на всё, что я подставляю между скобками после GetMissionName.

    Вот с этим моментом мне и нужна ваша помощь. Попробую и скомпилю/запущу любые варианты. Заранее спасибо!
    --- добавлено 5 авг 2021, предыдущее сообщение размещено: 5 авг 2021 ---
    Прикрепляю также файл с атрибутами миссий, откуда MissionMgr.cpp берёт информацию.
     

    Вложения:

    • Missions.TXT
      Размер файла:
      12,3 КБ
      Просмотров:
      92
  18. Ardash

    Ardash

    Переводчик

    Регистрация:
    5 окт 2017
    Сообщения:
    1.019
    GetMissionName - это функция класса CMissionMgr.
    Объектом данного класса является g_pMissionMgr

    То есть вызывать надо как-то так g_pMissionMgr->GetMissionName(i)
     
    Revolter нравится это.
  19. Revolter

    Revolter

    Регистрация:
    12 июл 2006
    Сообщения:
    2.801
    Вопрос решён :yahoo:

    С MissionMgr.cpp не получилось, но в итоге я всё-таки подключил проверку на наличие у Хищника биомаски к вызову "вернуть прежний режим зрения после катсцены" в файле GameClientShell.cpp (в единственной миссии, где маски нет, к счастью, как раз катсцена в начале).
     
  20. bvedargh

    bvedargh

    Регистрация:
    4 окт 2006
    Сообщения:
    154
    AndyFox, Solanacean, Daniel Craig и ещё 1-му нравится это.
  21. Solanacean

    Solanacean

    Регистрация:
    15 июн 2018
    Сообщения:
    76
    Ребята, ни у кого случайно не завалялись патчи для Borland C++ 5.0, 5.01 и 5.02? Те, что вот тут на странице, ссылки с которой не работают.
     
  22. oFF_rus .

    oFF_rus

    Хелпер

    Регистрация:
    25 фев 2007
    Сообщения:
    2.139
    Попробуй гуглить по именам файлов, плюс заменяй exe на zip (где-то могут выкладывать в архиве). Например:

    '+' - bc52p1.zip вместо bc52p1.exe
    ftp://ftp.zx.net.nz/pub/archive/ftp.borland.com/borlandcpp/devsupport/patches/ - там 50 по виду.
     
    Solanacean и bvedargh нравится это.
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление