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

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

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

Пишу цикл статей по разработке игры Arcanum, как будто на дворе 1995 год

Тема в разделе "Hard & Soft", создана пользователем Jordan 63, 9 сен 2025.

  1. Jordan 63

    Jordan 63

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

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

    Раннее я уже написал 3 статьи.
    Пилим движок Arcanum. Урок 01. Начало
    Пилим движок Arcanum. Урок 02. Работа с файлами игры, рисуем первый спрайт
    Пилим движок Arcanum. Урок 03. Работа с памятью, используем полиморфные аллокаторы

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

    Данная дата это выход Windows 95, началась эра 32 битного кода, игр, графики OpenGL, DirectX.

    Проект будет кроссплатформенным, но будет разрабатываться на железе и софте тех лет и я буду описывать не только разработку, но и свои впечатления. У меня нет настолько старого железа, потому буду использовать эмулятор 86box.

    Программы и инструменты разработки аутентичны времени: Windows 95 First Edition, Visual C++ 4.0 и под Linux slackware 3.0 gcc 2.76 (добавили поддержку С++)
    Весь проект будет написан на С++.

    Так же цель не только разрабатывать движок, а закрыть свой гештальт по теме ретро тех лет. Как разработчики разрабатывали, с какими проблемами сталкивались, как их решали. А так же конечно оптимизация, люблю, умею, практикую:) Очень интересна тема истории ИТ.

    Сейчас цель собрать именно аутентичный ПК в 86box, что бы каждая виртуальная железка соответствовала своему времени. Можно собрать конечно топ ПК 1995 года, но мне интересны более реалистичные сборки. То, что массово было в ходу, а не процессор по цене 5000$

    Я спросил ИИ собери несколько аутентичных конфигурации. Можете оценить насколько они правдивы на 1995 год?

    И буду рад, советам, предложения и критике.

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

    Так же проект будет поддерживать и современные системы windows и linux, через библиотеку SDL2.

    Заранее выражаю благодарность, так как знаю, что все мы на одной волне на этом форуме!
     
    Последнее редактирование: 9 сен 2025
    Birm, DJKrolik, smahutta и 7 другим нравится это.
  2. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    660
    Ещё затрону такие технологии как старые версии DrectX, OpenGL.

    И я понимаю, что нужно будет много оптимизировать, что бы отрисовать на железе +- 100 mhz, 2D графику уровня Arcanum, но есть шанс так как вся графика в 256 цветах. Что снижает требования.

    Как пример fallout 2 работал на очень скромном железе.
    --- добавлено 9 сен 2025, предыдущее сообщение размещено: 9 сен 2025 ---
    Чуть больше технической информации.

    Проект пишется на С++ под железо 1995 года, но это не значит, что я буду использовать ассемблер или какие-то хаки. Код будет высокоуровневый иначе не смогу нормаль но портировать под разные ос и компиляторы. Сейчас используются namespace и шаблоны. Пишу свои небольшие реализации основных контейнеров, vector, string, хеш таблица.

    Так же планирую порт под 32-двух битный DOS (используется DPMI), используя OpenWatcom 1.9 и оригинальный компилятор Watcom.

    Максимально упростил исходные коды. Пишу минимальное API: рендер, звук, текст. А уже каждый порт реализует свою реализацию, SDL2, DirectX, WinAPI. В итоге, 95% кода общий.
    --- добавлено 9 сен 2025 ---
    Многие наработки по движку со временем переедут в библиотеку LDL.

    Особенно DOS реализация. Я ещё реализую над LDL SDL3 API, совместимое по интерфейсу.

    Можно будет или с минимальной переделкой или вообще без переделки использую 2d графическое API переносить на старые системы игры и софт.

    Пример кода, который совместим с оригинальным SDL3 и LDL.

    Код:
    // Copyright 2023-present Evgeny Zoshchuk (JordanCpp).
    // Distributed under the Boost Software License, Version 1.0.
    // (See accompanying file LICENSE_1_0.txt or copy at
    // https://www.boost.org/LICENSE_1_0.txt)
    
    #include <SDL3/SDL.h>
    
    int main()
    {
        SDL_Init(0);
    
        SDL_Window* window     = SDL_CreateWindow(__FILE__, 800, 600, 0);
        SDL_Renderer* renderer = SDL_CreateRenderer(window, NULL);
    
        bool running = true;
    
        SDL_Surface* surface = SDL_CreateSurface(800, 600, SDL_PIXELFORMAT_RGB24);
    
        while (running)
        {
            SDL_Event event;
    
            SDL_SetRenderDrawColor(renderer, 0, 162, 232, 0);
    
            while (SDL_PollEvent(&event))
            {
                if (event.type == SDL_EVENT_QUIT)
                {
                    running = false;
                }
            }
    
            SDL_RenderClear(renderer);
            SDL_RenderPresent(renderer);
        }
    
        SDL_DestroySurface(surface);
    
        SDL_DestroyRenderer(renderer);
        SDL_DestroyWindow(window);
    
        SDL_Quit();
    
        return 0;
    }
    Но это немного другой проект.
    --- добавлено 9 сен 2025 ---
    В итоге склоняюсь к такой конфигурации 1995 года.

    Процессор: Pentium 75-100 mhz
    ОЗУ: 8-16 мб (но насколько это было реально для 1995?)
    Hdd: 1 Гб
    Видеокарта: S3 Trio 2 мб
    Звуковая карта: Creative Sound Blaster 16
    --- добавлено 9 сен 2025 ---
    И на такой конфигурации могут работать следующие игры.

    Age of empires 1 (1997)
    Fallout 1 и 2 (1997-1998)
    Герои меча и магии 3 (1998)

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

    Если смогли тогда, значит возможно и сейчас.

    Вот я понаписал, какой то блог получился:))
     
    Gamerun и Dar_Morar нравится это.
  3. Goblinit

    Goblinit

    Регистрация:
    18 мар 2011
    Сообщения:
    4.418
    Почти такой и был, но:
    Pentium 150
    RAM 32Mb
    Sound: ESS 1868
    это стоило 1000 баксов.
    --- добавлено 9 сен 2025, предыдущее сообщение размещено: 9 сен 2025 ---
    Arcanum бы это не потянуло. Невозможно было бы просто играть, даже если бы запустился. Герои 3 шли ооочень небыстро. В остальном правда
     
  4. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    660
    Да абсолютно согласен, Arcanum'у нужно минимум 300 mhz и то будет подрагивать при интенсивной анимации. Но тем и интереснее имея знания и опыт реализовать быстрее, что бы новый движок начался шевелиться.

    Это как с выше реализуемой библиотекой LDL, софт рендер может работать начиная с windows 95 и 33 mhz, 2-4 мб ОЗУ. Хотя самой библиотеке нужно около 300 КБ динамической памяти для старта.

    Так как все равно не получится реализовать движок 1 к 1, нет информации по форматам карт, многие реализации с нуля к примеру на форуме арканум клуб, почили и исходников не оставили. От кого их прятали?

    Поэтому сделаю основу, изометрический движок, анимация, управление и далее уже геймплей.
    --- добавлено 9 сен 2025, предыдущее сообщение размещено: 9 сен 2025 ---
    Спасибо, буду ориентироваться на +- такую конфигурацию.
    --- добавлено 9 сен 2025 ---
    С технической стороны интересно, впихнуть, невпихуемое:)
     
    Gamerun нравится это.
  5. Kristobal Hozevich Hunta Реликтовый гоминид

    Kristobal Hozevich Hunta

    Регистрация:
    24 апр 2006
    Сообщения:
    1.349
    Проходил Арканум на i810 со встройкой.
    Проблем не помню, один восторг.
     
  6. Mov AX 0xDEAD

    Mov AX 0xDEAD

    Регистрация:
    24 апр 2023
    Сообщения:
    345
    DirectX ускоряет 2D графику на соответствующем железе, во всяких DOS этого нет, все спрайты выводить через процессор, т.е. по API возможна большая разница в скорости. Про OpenGL не в курсе, но подозреваю что в 2d оно медленное, так как сначала загоняются текстуы, которые видеодрайвером где-то потом хранятся и только потом расчитывается картинка.
    Но в большей части зависит от самой игры, сколько спрайтов одновременно может быть на экране, если слишком много, то все будет тормозить на любом API.
     
  7. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    660
    Так и есть. Для игр той эпохи был только один вариант. Создать буфер по размеру экрана, все рисовать в него и потом выводить на экран. DirectX и GL позволяет чуть ускорить вывод этого буфера. Так же оптимизировать перенос пикселей в буфер. И в целом можно добиться плавности.

    Пример age of empires 1. Тайловая карта, много разных юнитов, постоянно пишут в буфер новые спрайты. Для вывода используют DirectX.

    Главная оптимизация это буфер в один байт на пиксель, вместо 3 или 4 байт для rgb и rgba.
    --- добавлено 10 сен 2025, предыдущее сообщение размещено: 10 сен 2025 ---
    Вывод буфера и рисование на нем, переносимо на все что угодно, где есть ОЗУ и экран;)

    Отличие только в обработке событий и окон в зависимости от ос.
    --- добавлено 10 сен 2025 ---
    Именно, поэтому следует оптимизировать копирование пикселей в буфер, но есть проблема в виде цветового ключа или прозрачности, если нужно просто перенести пиксели в буфер, то это копирование по строкам, если есть цветовой ключ, то нужно проверить каждый пиксель и попиксельно скопировать.

    100 mhz это не мало для разрешения 800x600 и 256 цветов.

    Я читал о разработке игры age of empires 1. И в статье разработчик хвалился, что им удалось очень сильно оптимизировать софт рендер и получить разрешение выше 640x480 на том же железе.
    --- добавлено 10 сен 2025 ---
    Главные оптимизации по рендеру.
    1. Буфер с 256 цветами.
    2. Ускорение переноса буфера с directx и GL.
    3. Рисовать только, то что попадает в кадр. Как примеру тайловпя карта 100x100. Применяем вычисления и рисуем только то, что находится в текущий момент на экране, обычно пару десятков тайлов, объектов, несколько десятков анимаций. Очень сильная экономия ресурсов цпу.
    5. Обычно геймплейный код упрощен, самая нагрузка это софт рендер.
    6. Минимизация алокаций памяти.
    --- добавлено 10 сен 2025 ---
    Текущая реализация:

    Для SDL2, копируем буфер в текстуру, выводим текстуру на экран.
    Для winapi, копируем каждый кадр с помощью SetDIBitsToDevice.
    Для Linux тоже самое, с помощью xlib.
    Для DOS, логика такая же. Буфер копируем в память видеокарты по адресу.

    Софт рендер один для всех систем.

    Сейчас я делаю основу. Просто работу с окном, событиями и вывод буфера.

    Получается что зависимый код для каждой платформы, примерно +- 500 строк на систему. Это мизер. Я намеренно упрощаю код, минимум абстракций и т.д
    --- добавлено 10 сен 2025 ---
    Для вывода текста применю те же знания древних:)

    Изображение с символами, как в оригинальном Arcanum и fallout. Это ещё примерно 100 строк кода.

    Больше кода это реализация звука, именно чтение wav и mp3. Но есть уже готовые библиотеки, писать с нуля это для меня уже слишком накладно.

    В итоге, на систему получается графика + текст + звук 1000 строк кода. Поэтому, раньше так просто могли портировать 2d игры. На консоли, другие операционные системы.

    Это вполне реально и у меня появились знания после написания LDL.

    Главное все делать просто и кроссплатформенно. Вот как то так.
     
    Последнее редактирование: 10 сен 2025
    KRL_IRK, Oldfrag, Gamerun и ещё 1-му нравится это.
  8. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    660
    Прогресс.

    Установил в 86box windows 95 и Visual C++ 4.0

    Виртуальное железо: Pentium 75 mhz, 16 мб ОЗУ. Hdd 1 Гб. S3 Virdge.

    В итоге создал проект, сделал основу движка и добавил рендер на winapi.

    Проект из студии собирается и запускается. Пока просто вывод окна + вывод буфера с цветом из палитры.

    Впечатления конечно у меня яркие от написания код на vc 4.0

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

    Скорость сборки проекта довольно быстрая на таком процессоре около 7 секунд с нуля. После инкрементальная сборка занимает секунд 2-3. Сейчас и кода мало конечно. Поймал себя на мысли, что ничего не отвлекает. Только я и код. Никаких гуглений, почти вакуум:))

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

    Потихоньку оформляю это в статью.
    --- добавлено 11 сен 2025, предыдущее сообщение размещено: 11 сен 2025 ---
    Используюя старые системы сборки, приходится создавать каждый файл отдельно и уже его добавлять в проект. В современных студиях все делается намного проще.
    --- добавлено 11 сен 2025 ---
    Я за вечер привык и у меня не размывалось внимание, это прям убер фича.
     
    Последнее редактирование: 11 сен 2025
    Oldfrag и Gamerun нравится это.
  9. Gaznak

    Gaznak

    Регистрация:
    14 мар 2023
    Сообщения:
    1.262
    Вот, человек настоящим Делом занят, а не плодит йобибайты пустопорожних "дискуссий" на тему "чья вкусовщина вкуснее". Уважаю.
     
  10. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    660
    Спасибо на добром слове:)

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

    Я запускаю 86box, разворачиваю на полный экран, привод эмулятора будет ссылаться на внешний привод основного ПК. Никаких образов дисков, все запишу на cd болванки.
    Windows 95 именно той версии которая вышла в 1995, vc 4.0 сопутствующие программы именно на 1995 год.

    Я с нуля установлю в 86box windows,софт через реальные записанные cd. Никакого интернета и гуглений. Буду использовать msdn Library на cd диске, это справочная документация для windows разработчиков. То есть я намеренно ограничиваю себя для полного погружения именно в то время и как бы программировали в 1995 году.
    Урежу hdd до 500 мб. Это не позволит мне поставить 100500 программ. А перенесет во время малых дисков, где нужно было выбирать, что установить.

    Важен даже не результат, а процесс. Окунуться и понять, как ощущалось программирование в то время.

    Поэтому максимальное возможное погружение. Благо сейчас все доступно.

    Если у вас есть мысли, как сделать погружение в ту эпоху ещё более аутентично, буду рад вашим предложениям.
    --- добавлено 12 сен 2025, предыдущее сообщение размещено: 12 сен 2025 ---
    Экспериментальная археология. К примеру есть археологи которые воссоздают, к примеру предметы тех лет, именно теми доисторическими инструментами. Сталкиваются с проблемами и начинают приходить к тем решениям к которым пришли люди древности.

    Только в моем случае это цифровая история.
    --- добавлено 12 сен 2025 ---
    Чем мне нравится наш форум. Что никто не напишет, что это дичь и бездарная трата времени. А наоборот дадут совет.

    Игры и софт тех лет это тоже цифровая история ИТ. Crysis это уже история, чуть более современная, но уже прошло с выхода почти 20 лет.
    --- добавлено 12 сен 2025 ---
    Самый ценный урок который я получил при программировании без интернета, месенджера, это полная концентрация. К примеру при сборке проекта, я не просто ждал пока проект скомпилируется, а размышлял о коде, продумывал следующие шаги. Даже создание каждого исходного файла отдельно даёт контроль. Ты более четко начинаешь продумывать архитектуру кода. Не идёшь путем экспериментов, а четко обдумываешь шаги.

    И тебя не отвлекают разными оповещениями, типа обновите Windows, обновите visual studio и т.д

    Я даже завел блокнот, что бы делать заметки.
     
  11. Mov AX 0xDEAD

    Mov AX 0xDEAD

    Регистрация:
    24 апр 2023
    Сообщения:
    345
    Ты изобрел велосипед, если ничего не отвлекает - повышается КПД работы :)
     
  12. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    660
    За более пятилетний опыт работы на удалёнке, привык, что во вне много шума. Психика перестроилась. И для меня вернуться к тому обычному порядку, как что то новое.
     
  13. VintRus

    VintRus

    Регистрация:
    13 сен 2017
    Сообщения:
    876
    Пища к размышлению. Архитектура AMD K10 умеет превращаться в K7(условный Pentium 3) при помощи утилиты Phenom Tweaker. Процессор легко можно замедлить до 800МГц через Биос. На встройке с чипсетом 740G/690G хорошая обратная совместимость с DirectX 7. Ну и на K10 у первой появился набор инструкций popcnt, что позволяет без труда на них устанавливать Windows 11. Получается универсальный конфиг который работает с Windows 2000 по Windows 11 без костылей
     

    Вложения:

    Последнее редактирование: 12 сен 2025
  14. MaTocoB

    MaTocoB

    Регистрация:
    6 окт 2008
    Сообщения:
    327
    Она может превращаться в Pentium-66
    AMD_Phenom_II_X4_980.png
     
  15. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    660
    У меня есть ПК на athlon x4 640. Дале если его всего урезать. Проблемы с установкой windows 98x останутся.

    Есть ретро ПК на celeron 1700 mhz сокет 478. Слишком мощный, в биосе понизить частоту нельзя.
     
  16. oSg-A.DREN

    oSg-A.DREN

    Регистрация:
    25 мар 2025
    Сообщения:
    668
    Какого плана?
     
  17. MaTocoB

    MaTocoB

    Регистрация:
    6 окт 2008
    Сообщения:
    327
    Тут нужна полная конфигурация. Материнские платы на поздних чипсетах стали всё дальше отходить от базовой архитектуры IBM PC AT.
     
  18. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    660
    ПК athlon x4 640, мат плата Biostar TA880G HD.

    Ide нет, только sata. Лечить драйвером. ОЗУ физические две планки по 4 Гб.

    Возможно поставить windows 9x?
    Если можно урезать частоту до 100, 400, 800 то можно симулировать производительность тех процессоров. Конечно эти мегагерцы будут быстрее из-за Кеша, архитектуры, но все равно приятно.
     
    Последнее редактирование: 12 сен 2025
  19. oSg-A.DREN

    oSg-A.DREN

    Регистрация:
    25 мар 2025
    Сообщения:
    668
    Драйверов чипсета нет.
     
  20. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    660
    Ну тогда только windows xp и урезание частоты процессора. Тоже удобно и ПК будет при деле. А то сейчас стоит без дела.
    --- добавлено 12 сен 2025, предыдущее сообщение размещено: 12 сен 2025 ---
    У меня сейчас не стоит задачи собрать ретро ПК. Ретро ПК есть.
    Для железа прям старинного есть 86box.
    --- добавлено 12 сен 2025 ---
    Если такая утилита есть для athlon x4 640. То данный ПК можно тоже превратить в ретро машину. Я только не помню, есть ли драйвера видеокарты под xp. Даже если нет. Есть pci-e geforce 6600 GT.

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