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

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

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

[Разработка][Черный Ворон] Сюрприз не удался

Автор: Zelya · 14 фев 2017 · ·
  1. По следам этой темы:
    www.old-games.ru/forum/threads/zx-spectrum-v-rossii-old-games-ru-podcast-46.73850

    А также по следам ее обсуждения, в частности легендарного "Черного Ворона", захотелось мне снова поиграть в этот симпатичный "Варкрафт для Спекки". Но взять эмуль и поиграть - это не наш метод, мы же не ищем легких путей в олдскул, правда? А почему бы не портировать эту игру под что-то современное? И не просто портировать, а любя перенести каждый чих внутренней логики, но при этом сделав картинку кастомизируемой. Благо Вячеслав выложил все сорсы же давно. И вобще, требую прочтения этих статей:

    http://pmg.org.ru/gamedev/epic1.htm
    http://pmg.org.ru/gamedev/epic2.htm

    Да-да, такая идея пришла мне в голову еще лет 5-8 назад. И я даже начел что-то там кропать на самой что ни на есть кроссплатформенной Сишке. Увы, со временем накапливались сложные для реализации моменты: где код, без дебага, не очевиден; где идут неявные вызовы; где накладываются внутренние циклы и прерывания. Больштнство этих нюансов потом легко рефакторятся, но для начала их нужно понять, потестить, правильно ли поняты и лишь потом рефакторить. Увы, на Сишке это было для меня уже слишком, и я бросил дело, едва начав.
    Но вот в декабре 2016-го, я взялся уже основательнее. Для начала, решив переписать все на дотНЕТ, который мне и более знакомый, и легче позволяет реализировать всякую муть, вроде вызова по рефлекшену или даже вирутальную мини-машину. Забегая наперед, скажу, что почти вся эта муть уже вычищена.
    Вобщем, если оценивать темп работ, то состоял он из четырех фаз:
    1. Медленно-медленно. Стартовые потуги, когда еще основные принципы кода не отложились "на корочку" и понять смысл каждой функции - адский труд. Все переписывлось в полуассеблерном стиле (функции регистров выполняли переменные). А, например, для декомпрессии архивов поначалу пришлось даже небольшой эмуль писать.
    2. Но вот основные типы данных уже усвоены, часто используемые функции (взять из массива, вычислить координату, отрисовать знакоместо) уже угадывались с первого взгляда, темп резко возрос, и в середине декабра созрели наполеоновские планы выпустить демо-режим до Нового Года. В "Черном Вороне" предусмотрена автоматическая игра-демка. Хотелось продемонстрировать ее во всей красе с тремя наборами графики: оригинал, Варкрафт 1 и очень хороший художник Bak. Увы, частично из-за отсутствия графики, а частично из-за некоторых проблем (вывод спрайтов для сторонней графики, обсчет стрел и т.д.) успеть так и не довелось. Результат, под конец 2016-го года был где-то такой:

    То есть демка, частично работала. Выводилась оригианльная графика, рукопашка работала. Но стрельба и поиск маршрута были забагованы. Вобщем, новогодний сюрприз не удался.
    3. Новогодний период сам по себе сказывается на потере темпа. Более того, решено было плюнуть на демку и пофиксить самые сложные баги. Очень медленно, но все же удалось в январе запустить поиск маршрута (вроде-бы работает, но я уме еще не доверяю на 100%), заставить стрелять во врагов (хотя отображение стрел еще хромает), подключить мышку и еще много мелочей, плохо заметных в демке, но сложных к отлавливанию.
    4. С одной стороны, к началу феврала движок находился в довольно высокойстепени готовности. Нет звука, нет экономики и глобального интеллекта. Недописаны куски кода по отработки всяких магий, сбора ресурсов, скролла и прочие мелочи. Есть известные злые баги. Но все же, это уже почти игра. Но внутрешняя кухня ужасная. В наследство от ассемблерного кода, все циклы оргнизовываются внутри самих функций. Прерывания эмулируются через, страшно сказать какую, сраку. Тут и там передаются адресса памяти, не имеющие смысла вне Спектрума, что конкретно мешает рефакторить код для использования внешних ресурсов. Пришлось остановить наращивание фич, и серьезно занятся рефаторингом. Чтобы всеми таймингами руковолила внешняя главная апликация, а не какая-то сумрачная функция внутри дивжка, нужно было "развернуть" все циклы. Проверить все задержки (последнее так до конца и не сделано). Тем не менее, после некторого времени, удалось убить все while(true) внутри движка. И теперь с чистой совестью можно взяться за дальшейшее отделение игровой логики от лееров управления и отображения. По состояние на сейчас, выглядит как-то так:

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

    Так как сюрприз не удался, а я вынужден взять некоторую паузу в разработке, выложил этот пост в паблик. Как-то так.
    Grongy, tRusty, Mlegion и 9 другим нравится это.

Комментарии

  1. Dimouse
    @Zelya, круто! Действительно мощная работа!
    Поиск пути А* делаешь?
    Карты (уровни?) будут поддерживаться из Черного ворона И Варкрафта?

    P.S. Тему лучше создать в Мастерской.
  2. alfy
    Респект! Исходники будут открыты?
  3. Zelya
    @Dimouse,
    Нет, в оригинале автор испольовал куда более простой обход. Я его полностью дублирую.
    Только Черный Ворон. Опять же, логика 100% порт оригинала, со всеми фичами и глюками.

    @alfy,
    Да, конечно. Основная идея сделать кастомизируемый движок, с примером использования. А уже его наполнять его контентом и, возможно, апгрейдить - это не мое.
  4. teChno_stereotype
    Прикольная вещь! Не совсем понял, язык С, а не С++? Интересно почитать про такие проекты.
  5. Zelya
    @teChno_stereotype,
    Оригинал - это диалект Z80 ассемблера, придуманный самим Вячеславом.
    Порт, поначалу был С++ проект в Visual Studio, но в реальности использовались возможности только С, никаких классов и т.п.
    Теперь это дотНЕТ. Поначалу все было public static, но теперь уже какая-то структура вырисовывается.
  6. nzeemin
    https://github.com/Zelya/br -- как я понял, вот это ваш первоначальный вариант?
    А новый где-то уже выложен?
  7. Zelya
    @nzeemin, Да, это оно. Только совсем уж какая-то ранняя версия, и залита позже, чем делалось. Я уже и забыл про нее. Это мне, вроде, нужно было Гит настроить, вот я и баловался.
    Новый, наверное, залью туда же, немного позже.
Чтобы оставить комментарий просто зарегистрируйтесь и станьте участником!
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление