Просмотр полной версии : Генератор случайных полей Last Battle под эмулятор ПС
Есть игра Last Battle в формате scl и trd. Пробовал запускать на эмуляторе zxmak. Все прекрасно работает, но хотелось бы генераторировать случайные поля прямо на PC :v2_cool:, чтоб програмка внедряла сгенерированные поля промо в код файла scl или trd.
Есть смысл заняться этой задачей? У меня уже есть определенные наработки.
Хотелось бы чтоб для начала вы, дорогие форумчане, поделились своим мнением и также информацией о структуре файлов scl и trd.
Здесь находится файлик генерации, генерирует просто картинки карт:
http://rndgen.narod.ru/soft/map.zip
Добавлено через 4 часа 50 минут
Судя из всего в файле scl имеется подсчет контрольной суммы, малейшие изменения вызывают ошибку. Кто с этим имел дело подскажите плиз.
Генератор карт "last battle" в trd образ для PC на базе WINDOWS:
http://www.rndgen.narod.ru/soft/lb_map_generator.zip
Программа умеет:
1). Находить в образе игру.
2). Создавать псевдослучайные карты "морского типа" по выбору от одного до шести (делается это в разы
быстрее чем на speccy) и записывать это в образ.
Немного пояснения.
По сравнению с вариантом для speccy в программе для PC достаточно усложнен механизм интерпретации
береговой линии, поэтому карты, которые получатся в результате действия программы не будут имеют одинарную береговую линию. Недостатком
программы можно назвать то, что береговая линия всегда полностью огибает контуры острова.
Карты записываются взамен стандартных. Можно было реализовать и в отгрузки, но тогда были бы
проблемы с чтением игровых отгрузок, поэтому пока как есть.
3). Может загружать и показывать карты в образах (только в меню выбора новых карт в игре).
По ходу пришлось решить еще и кучку вопросов по работе с файлами на PC (тот еще гемор, не знаю на что
потратилось больше времени на генератор карт или на решение всяких проблемных моментов при работе
с файлами на PC).
Есть еще много интересных задумок, которые интересно было бы сделать, но времени и стимула (судя по
активности на форуме) нет :(.
Надеюсь, что программа все же понравится всем, кто любит эту увлекательную игру.
Свои пожелания и замечания пишите в этом топике. Спасибо.
Shadow Maker
25.08.2008, 23:41
А почему нельзя сделать генератор на ассемблере спектрума? Смысла в патченье scl или trd не вижу - это неудобно очень - напатчил, сохранил, запустил... Надо запустил и играешь, без телодвижений. По поводу контрольной суммы почитай описание формата scl.
Карты кстати генерируются какие-то странные. Почему воды всегда так много? А суши вообще почти нет как правило.
А почему нельзя сделать генератор на ассемблере спектрума?
А на ассемблере спектрума уже есть, правда еще не отработан и немного тупуват, но работает :). Есть еще и на бейсикее (Работает, но тормознутый, около 20 мин на одно поле). Как конвертировать?
Добавлено через 8 минут
Карты кстати генерируются какие-то странные. Почему воды всегда так много? А суши вообще почти нет как правило.
Это не проблема, можна поменять, просто я большой любитель карт типа MERAPOD 2000 (есть возможность развернуться на море, от этого интереснее исследовать територии).
Добавлено через 14 минут
Смысла в патченье scl или trd не вижу - это неудобно очень - напатчил, сохранил, запустил... Надо запустил и играешь, без телодвижений.
Ленинград2, к которому подключен контроллер диска у меня глючный, толи гдето контакта нету, толи наводка какая, но факт такой что в нем запариваются данные в памяти, поэтому в Ласт Баттле долго не могу играть, нужно часто записываться, не удобно.
А на ассемблере спектрума уже есть, правда еще не отработан и немного тупуват, но работает :). Есть еще и на бейсикее (Работает, но тормознутый, около 20 мин на одно поле). Как конвертировать?
Добавлено через 8 минут
Это не проблема, можна поменять, просто я большой любитель карт типа MERAPOD 2000 (есть возможность развернуться на море, от этого интереснее исследовать територии).
Добавлено через 14 минут
Ленинград2, к которому подключен контроллер диска у меня глючный, толи гдето контакта нету, толи наводка какая, но факт такой что в нем запариваются данные в памяти, поэтому в Ласт Баттле долго не могу играть, нужно часто записываться, не удобно.
Ну ты ж играешь в Ласт Батл может и не на реале, но под эмулятором, в любом случае - на Спеке, так на нем и генератор имеет смысл делать, ибо не всеже эмуляторщики, а даже и эмуляторы бывают разные, у меня наример на КПК эмуль. Кстати, что за алгоритм, не поделишься?
Ну ты ж играешь в Ласт Батл может и не на реале, но под эмулятором, в любом случае - на Спеке, так на нем и генератор имеет смысл делать, ибо не всеже эмуляторщики, а даже и эмуляторы бывают разные, у меня наример на КПК эмуль. Кстати, что за алгоритм, не поделишься?
Карты могу генерировать только на реальном ленинграде2, генератор генерирует карту и потом забрасывает ее в файлы по выбору: ластбатле меп1 или меп2 (карты генерируются без роботов, просто месность, хотя есть возможность сделать доработку и с роботами :) ).
Какой именно интересует алгоритм? Генерации случайных чисел или метод построения карты на основе генирации случайных чисел?
Даже если конвертировать програмку для генерации то от этого будет мало толку, посколько программа, как было сказано закидывает массив в файлы карт мар1 и мар2 (в каждом файле по 6 карт), поэтому для эмулятора встает вопрос закидывать данные прямо в образ scl или trd.
Карты могу генерировать только на реальном ленинграде2, генератор генерирует карту и потом забрасывает ее в файлы по выбору: ластбатле меп1 или меп2 (карты генерируются без роботов, просто месность, хотя есть возможность сделать доработку и с роботами :) )....
Все что работает на реале, будет работать и в эмуляторе. Не понимаю в чем суть твоих затруднений, но твоя генерилка даже не сможет отличить на реале она запущена или на эмуле.
Добавлено через 4 минуты
...
Какой именно интересует алгоритм? Генерации случайных чисел или метод построения карты на основе генирации случайных чисел?
Даже если конвертировать програмку для генерации то от этого будет мало толку, посколько программа, как было сказано закидывает массив в файлы карт мар1 и мар2 (в каждом файле по 6 карт), поэтому для эмулятора встает вопрос закидывать данные прямо в образ scl или trd.
Ну случайных чисел нагенерить большого ума не нужно, хотя, если твой метод оригинальный, то плиз не сочти за попрошайничество. Но больше интересует алгоритм создания ландшафта, тут просто топорно высыпать случайные числа на карту не получится - надо что бы карта была удобоваримая, а не пятнистое абы-что в крапинку.
Все что работает на реале, будет работать и в эмуляторе. Не понимаю в чем суть твоих затруднений, но твоя генерилка даже не сможет отличить на реале она запущена или на эмуле.
Добавлено через 4 минуты
Эмулятор не позволяет менять образ диска
Ну случайных чисел нагенерить большого ума не нужно, хотя, если твой метод оригинальный, то плиз не сочти за попрошайничество. Но больше интересует алгоритм создания ландшафта, тут просто топорно высыпать случайные числа на карту не получится - надо что бы карта была удобоваримая, а не пятнистое абы-что в крапинку.
Принцип простой. Сначала генерируется определенное число точек (это количество островов, материков и т.д.). Потом вокруг этих точек программа как бы наращивает другие точки. У меня это реализовано по принципу, который я называю обход по карте (сначала первый ряд, потом второй). По ходу проверяется есть ли на карте кусочек острова или нет, если есть то программа добавляет или не добавляет в случайном порядке еще. Для того чтобы острова были больше можна менять вероятность добавления точек и также количество обходов.
Что касается генерации случайных чисел то тут не все гладко. Моя идея заключается в делении неделимых чисел. Проблема в том что при делении чисел в определенном периоде деления наступает повтор. :)
Эмулятор не позволяет менять образ диска
Эмулятор позволяет сохраняться на образ диска, дописывать, изменять и удалять файлы, а также сохранять изменения в образе диска. По-моему это как раз то что и требуется.
По поводу наращивания островов, у них же береговая линия, нужно же что бы линия была слитной, все изгибы и прочее. Как это у тебя делается?
Shadow Maker
01.09.2008, 16:52
Есть еще и на бейсикее (Работает, но тормознутый, около 20 мин на одно поле). Как конвертировать?
Выложи, посмотрим.
Эмулятор позволяет сохраняться на образ диска, дописывать, изменять и удалять файлы, а также сохранять изменения в образе диска. По-моему это как раз то что и требуется.
По поводу наращивания островов, у них же береговая линия, нужно же что бы линия была слитной, все изгибы и прочее. Как это у тебя делается?
Дайте пожалуйста ссылочку на такой эмулятор, так как ZXMAK такой манипуляции делать не хочет. И еще программу для трансформации файлов со спектрума в scl или trd формат. (пока нет программы трудность перекинуть на пс. Если не получится, то потом через мп3 перекину).
Алгоритм переделки намного проще чем генерация случайных чисел :).
Почему ты не пользуешься СуперМегаЭмулятором ZX-Unreal? Даже если ты испытываешь нежные чувства к ZXMAC, Унриал можешь держать в качестве запасного эмулятора, к тому же им пользуется большинство. Так вот Унриал пишет в образ файлы без проблем.
И что ты подразумеваешь под трасформацией? Перегон с реальных дискет в образы? Или конвертацию из scl в trd?
PS. Все алгоритмы кажутся простыми когда они уже известны и понятны, так что выложи Бэйсик, интересно же.
Перегон в образы.
Добавлено через 4 минуты
Выложу как только конвертирую.
Перегон в образы.
Вариантов несколько. Некоторые люди делают себе линк между Спеком и ПЦ, но это сложно, чаще всего ставится на ПЦ дисковод 5,25. С ним придется долго шаманить и бить в бубен над перемычками, положением на шлейфе, установки в БИОСе пока добьешься нормальной работы. Ну а потом берется что-нибудь типа утилит Медведева или вот deathsoft новую програмку для этого сделал, я не тестил еще, но должна быть получше. Вот ссылка http://dlcorp.ucoz.ru/forum/8-226-1
Кстати, добавлю, что у меня после всего удалость отформатировать только 3 дискеты, которые читались и писались и на спеке и на ПЦ. Я их использовал как промежуточные. Дискеты отформатированные в ТР-Досе не ПЦ не читались. Пока не заметил что дискеты отформатированные в программе RDS v3.1 читаются и пишутся хорошо и на ПЦ и на двух моих реалах. Возможно это исключительно мои грабли и тебе на них не придется наступать, просто имей в виду.
Ну а самым сладким вариантом было бы использовать SD карту, вот это был бы рулез.
С дисководом пока ничего не получается. Целый вечер парился, но не хочет форматировать в хр. Может нужна какая дополнительная утилита? В унреале почему-то не получается записать файл через звуковую карту, может там какие настройки есть, которые не вижу? (Я уже думал что перегоню через линейный вход звуковухи на пс, а там закину в образ, но на линейный вход унреал не реагирует :( ).
Вот через звуковую плату ни разу не пробовал, тут уж я не советчик.
Я у себя форматирую дискеты на реале в RDS v3.1, на пц мне удалось отформатировать только 3 дискеты уже и не помню какими утилитами, прочитай все ветки про дисководы в железе, там многие делились опытом. Для того что бы ХР могла работать с 5,25 дисководом нужно устанавливать ОБЯЗАТЕЛЬНО утилиту FdInstall.exe - она есть на VirtualTRD и идет с утилитами Медведева. Ну, и естественно дисковод должен работать под ХР как дисковод, у меня на готове была MS-DOSная дискета когда я свой настраивал.
чаще всего ставится на ПЦ дисковод 5,25. С ним придется долго шаманить и бить в бубен
Йа-йа!!! Натюрлих!!! :)
ТР-Дос дискеты я тоже читать ПЦ-дисковод не заставил, но перегоняю свободно. На реале форматирую с помощью TRMSHob, и пишу там же в Хобете. Потом всовываю диск в ПЦ-дисковод (5,25) и всё замечательно переношу на ПЦ-винт. По желанию ESN'ом (Spectrum Navigator) создаю scl и туда сую хобета-файлы.
Shadow Maker
04.09.2008, 13:57
Наиболее простой пусть для тебя - отформатировать дискету быстрым способом (не в тр-дос, а программой-форматилкой, типа FUT, RDS, короче чтобы не было интерлива), загрузиться с загрузочной дискеты в дос (или откуда угодно загрузиться в дос), после запустить утилиту Павлова AMD Copier. Это работает с вероятностью 90%.
А у меня АМД ну никак не читает. Зато только что разобрался как отформатировать дискету 5,25 на ПЦ в формате ТР ДОСа утилитой Медведева. Форматнул, записал один образ на дискету и на реале ее прочитал - все работает без проблем. Завтра на работе проверю на втором реале. Так что победить можно.
rnd.gen, у тебя с пятидюймового дисковода ХР-ха читает дискеты? (я имею ввиду МС-ДОСные). Ты драйвер FdInstall.exe устанавливал?
Shadow Maker
05.09.2008, 03:30
В досе не читает? Очень странно, если честно. В досе обычно всё путём. Это в винде её плющит.
rnd.gen, у тебя с пятидюймового дисковода ХР-ха читает дискеты? (я имею ввиду МС-ДОСные). Ты драйвер FdInstall.exe устанавливал?
FdInstall.exe еще не установил, но попробую. У меня нет мс досной дискети чтоб попробовать, а форматировать дисковод не хочет. Добился того что дисковод что то начал дергаться и крутиться и светодиодиг загорелся но форматировать не хочет.
В досе не читает? Очень странно, если честно. В досе обычно всё путём. Это в винде её плющит.
Вообще-то по Win98, но я думаю это не принципиально, или да?
Добавлено через 5 минут
FdInstall.exe еще не установил, но попробую. У меня нет мс досной дискети чтоб попробовать, а форматировать дисковод не хочет. Добился того что дисковод что то начал дергаться и крутиться и светодиодиг загорелся но форматировать не хочет.
Давай создадим ветку в разделе для начинающих, что-нибудь типа "Победить дисковод 5,25 и переписать диски из ТРДос в образы" и там по шагам будем продвигаться начиная от биоса и шлейфа и так вплоть до полной победы. Народ к обсуждению подтянется, и тема полезная останется в нужном разделе где ее и искать в первую очередь будут. А то тут офтопим.
Shadow Maker
05.09.2008, 14:49
Вообще-то по Win98, но я думаю это не принципиально, или да?
Принципиально. AMD работает без косяков только в досе чистом. В W98 еси тока очень повезет.
Вчера наконец смог отформатировать дискетку, правда в досе на 720кб.
Виндовс в упор не хочет форматировать. Мало того даже не видит если подключить дисковод как дисковод А. В виндовсе форматирует если А только из под доса и почемуто только на 160кб. Странно. Думаю скоро смогу выложить файлы.
Вообще-то по Win98, но я думаю это не принципиально, или да?
Добавлено через 5 минут
Давай создадим ветку в разделе для начинающих, что-нибудь типа "Победить дисковод 5,25 и переписать диски из ТРДос в образы" и там по шагам будем продвигаться начиная от биоса и шлейфа и так вплоть до полной победы. Народ к обсуждению подтянется, и тема полезная останется в нужном разделе где ее и искать в первую очередь будут. А то тут офтопим.
Всеми лапами за :).
Вариантов несколько. Некоторые люди делают себе линк между Спеком и ПЦ, но это сложно, чаще всего ставится на ПЦ дисковод 5,25. С ним придется долго шаманить и бить в бубен над перемычками, положением на шлейфе, установки в БИОСе пока добьешься нормальной работы. Ну а потом берется что-нибудь типа .
Долго пришлось шаманить и бить в бубен над перемычками, положением на шлейфе и установками биос, к тому же и дисковод оказался глючный (пришлось заменить). Но все заработало. Для конвертирования воспользовался фаром и плагинами к нему, скоро выложу ссылки всего.
Добавлено через 7 часов 22 минуты
Наконец то свершилось!
Уже думал что заброшу всю эту идею :(.
Вот ссылка (http://rndgen.narod.ru/index5.htm).
Пробовал запускать на унреале. Вроде работает.
Не понял в какой момент нужно нажимать "а" что бы режим был "не скрытый". И сколько нужно подождать что бы сгененировалось? Полез просмотреть программу и обнаружил что позабывал многое из басика. :)
Barmaley_m
15.09.2008, 22:29
Хочу вставить свои 5 копеек на тему генерации полей.
Во-первых, на асме на спеке писать - это лишний труд. Вместо собственно создания карт под Last Battle разработчик будет отвлекаться на изобретение велосипедов, вроде алгоритма генерации случайных чисел. Лучше написать на чем-нибудь легком на PC и визуально отладить. А чтобы не возиться с контрольными суммами scl, использовать формат trd.
О генерации случайных чисел: эта тема уже достаточно хорошо исследована теоретически. То есть известно определенное количество алгоритмов, каждый из них легче или труднее в реализации и имеет разные недостатки (такие, как период повторения). Теория довольно сложная. И вместо того, чтобы изучать ее или, того хуже, заново открывать (если это не самоцель), лучше взять какой-нибудь известный генератор случайных чисел, проще всего - линейный конгруэнтный. Легко реализуется и быстрый. И на задачах, вроде генерации полей, его недостатки проявляться не должны. Ну а если писать программу на PC, то лучше всего вообще не делать свой генератор ПСЧ, а пользоваться тем, который идет в стандартной библиотеке используемого языка программирования.
Ну а алгоритм генерации полей - я бы попробовал сгенерировать "матрицу шума" - двумерный массив случайных чисел с равномерным распределением, размерами равный размерам карты. Потом пропустить эту матрицу через фильтр низких частот (ФНЧ). В результате получится относительно плавная случайная поверхность. А потом отсечь эту поверхность плоскостью - "уровнем моря". Все, что над плоскостью, было бы сушей, а под ней - морем. Задавая уровень моря, можно варьировать плотность суши/воды на карте. Остается лишь одна трудность - генерация берега, это уже задача из области решения лабиринтов, но тоже решается стандартными методами.
Не понял в какой момент нужно нажимать "а" что бы режим был "не скрытый". И сколько нужно подождать что бы сгененировалось? Полез просмотреть программу и обнаружил что позабывал многое из басика. :)
"а" нужно нажимать вначале, потом можна нажать любую клавишу. Генерация функции rnd начинается перед нажатием клавиш и привязана к времени, тоесть рисунок карты зависит от того в какой момент времени нажата любая другая клавиша кроме "а". Первая отображаемая цифра - количество начальных точек, вторая -количество обходов по карте, третья цифра - положение в файле с 1-26 (насколько помню) соответсвует 1 карте, с 26 - второй и т.д. Если буква "а" не нажымалась, а нажалась любая другая клавиша: изображение и индикаторы отображаться не будут (в конце всеравно будет надпсь "ок").
Генерация закончена при выводе надписи "ок"(красными буквами).
Добавлено через 20 минут
Barmaley_m
Ваше мнение интересно, но в этом варианте использован стандартный бейсик вариант герератора и для того чтобы генерировать каждый последующий раз новую карту сделана привязка к нажатию клавиши. Так как процессор имеет достаточное быстродействие, то практически получается что попасть на клавишу в четко определенный момент времени очень трудно (хотя теоретически возможно), поэтому получается каждый раз новая карта.
С проблемой, о которой Вы упоминаете (повтор в периоде), я уже столкнулся когда делал генератор в машинных кодах. Пока не решил, чесно говоря нету времени. Теорию вероятности я когда-то учил но давно забыл, поэтому то что делалось - делалось только на основании того что некоторые числа неделимы, при этом теория вероятности вообще не рассматривалась :), хотя не мешало бы, но опять же дело во времени. Хотя, спасибо.
Хочу вставить свои 5 копеек на тему генерации полей.
Во-первых, на асме на спеке писать - это лишний труд. Вместо собственно создания карт под Last Battle разработчик будет отвлекаться на изобретение велосипедов, вроде алгоритма генерации случайных чисел. Лучше написать на чем-нибудь легком на PC и визуально отладить...
Класно ты рассуждаешь. Я на РС только две кнопки знаю Power и Reset, причем последнюю стараюсь вообще не нажимать. Ну еще на мышке кнопки использую, а клавиатуру вообще боюсь нажимать - и что я напрограммирую "на чем нибудь легком". Мне, кроме Спека, программировать больше ни на чем не судьба.
Добавлено через 1 минуту
Ну а алгоритм генерации полей - я бы попробовал сгенерировать "матрицу шума" - двумерный массив случайных чисел с равномерным распределением, размерами равный размерам карты. Потом пропустить эту матрицу через фильтр низких частот (ФНЧ). В результате получится относительно плавная случайная поверхность. А потом отсечь эту поверхность плоскостью - "уровнем моря". Все, что над плоскостью, было бы сушей, а под ней - морем. Задавая уровень моря, можно варьировать плотность суши/воды на карте. Остается лишь одна трудность - генерация берега, это уже задача из области решения лабиринтов, но тоже решается стандартными методами.
Подробности метода где почитать?
Добавлено через 8 минут
"а" нужно нажимать вначале...
"в начале" это до того как она запросит ввести число от 1 до 6 или уже после?
"в начале" это до того как она запросит ввести число от 1 до 6 или уже после?
После введения числа от 1 до 6.:)
Barmaley_m
16.09.2008, 17:04
Подробности метода где почитать?
Да я только что придумал этот метод, на коленке :) Подробности - у меня в голове. Спрашивай, что тебя интересует. То ли генерация матрицы MxN случайных чисел, то ли фильтрация (ФНЧ), то ли "отсечение уровня моря", то ли генерация берега.
После введения числа от 1 до 6.:)
что-то у меня под эмулятором не работает, ну в смысле не включается "открытый" режим, или я что-то не так понял. Поэкспериментирую - отпишусь.
Добавлено через 25 минут
Да я только что придумал этот метод, на коленке :) Подробности - у меня в голове. Спрашивай, что тебя интересует. То ли генерация матрицы MxN случайных чисел, то ли фильтрация (ФНЧ), то ли "отсечение уровня моря", то ли генерация берега.
Фильтрация ФНЧ!
По поводу случайных чисел мое ламерское мнение думает что проблем не будет если использовать не деление, а умножение (возведение в степени, вычисление логорифма и т.д.), а если еще перемешивать эти результаты с задержками нажатия клавиш пользователем, то вообще все должно быть красиво. Когда мне нужны были случайные числа, я создавал массив на 256 байт, брал один регистр и постоянно инкриминировал его значение и опрашивал клавиатуру или мышь. Как только была нажата какая-нибудь клавиша инкремент прекращался и этот регистр сохранялся в массиве, брался следующий элемент массива и так далеее. Массив адресовывался регистровой парой HL и я просто делал INC L, что позволяло постоянно двигаться по кругу. Прерывания были запрещены. У меня была тогда самопальная утилита для рисования анимированных спрайтов 2 на 2 знакоместа и вот в эту утилиту я и вставил процедуру случайных чисел. Процесс рисования был длительный и неравномерный и числа получались действительно случайными.
Но я так понимаю что для генерации ладшафта такой способ не годится. Если я понял верно, то в результате геренации должен получится как бы рельеф местности, который будет отсечен уровнем моря и разделен на сушу и воду, а для этого ландшафт должен быть достаточно плавным. Иначе может получиться (и чаще всего так и будет) друшлаг вместо материка. Так что это за волшебный метод ФНЧ? :v2_conf2:
что-то у меня под эмулятором не работает, ну в смысле не включается "открытый" режим, или я что-то не так понял. Поэкспериментирую - отпишусь.
Добавлено через 25 минут
Фильтрация ФНЧ!
По поводу случайных чисел мое ламерское мнение думает что проблем не будет если использовать не деление, а умножение (возведение в степени, вычисление логорифма и т.д.), а если еще перемешивать эти результаты с задержками нажатия клавиш пользователем, то вообще все должно быть красиво. Когда мне нужны были случайные числа, я создавал массив на 256 байт, брал один регистр и постоянно инкриминировал его значение и опрашивал клавиатуру или мышь. Как только была нажата какая-нибудь клавиша инкремент прекращался и этот регистр сохранялся в массиве, брался следующий элемент массива и так далеее. Массив адресовывался регистровой парой HL и я просто делал INC L, что позволяло постоянно двигаться по кругу. Прерывания были запрещены. У меня была тогда самопальная утилита для рисования анимированных спрайтов 2 на 2 знакоместа и вот в эту утилиту я и вставил процедуру случайных чисел. Процесс рисования был длительный и неравномерный и числа получались действительно случайными.
Но я так понимаю что для генерации ладшафта такой способ не годится. Если я понял верно, то в результате геренации должен получится как бы рельеф местности, который будет отсечен уровнем моря и разделен на сушу и воду, а для этого ландшафт должен быть достаточно плавным. Иначе может получиться (и чаще всего так и будет) друшлаг вместо материка. Так что это за волшебный метод ФНЧ? :v2_conf2:
Сначала выбирается номер карты, потом нужно нажать "а", потом любую другую клавишу и тогда должно нарисовать мини карту.
По поводу отделения суши от моря. Что-то Вы все очень усложняете, отделение суши от моря, фнч. Голову можна сломать. Все намного проще. Сушу можна просто наростить (или море :) ) и при этом ничего не нужно будет отделять и озер будет не много. У меня они получаются только когда 2 острова перекроют один другого, тогда есть вероятнось озера. Иначе никакого озера не будет.
В генерации карт суть проблемы не только в генерации случайных чисел, а и в том как правильно воспользоваться случайными числами чтобы вполне не случайно получились например острова :).
Barmaley_m
17.09.2008, 15:10
Фильтрация ФНЧ!
По поводу случайных чисел мое ламерское мнение думает что проблем не будет если использовать не деление, а умножение (возведение в степени, вычисление логорифма и т.д.),
Насчет случайных чисел повторюсь: зачем изобретать велосипед? Зачем попадать в ловушки, в которые ранее попадали другие? Вспомни закон Мерфи: "Сложные проблемы всегда имеют простые, легкие для понимания, неправильные решения".
Вот рекомендую почитать про генерацию псевдослучайных чисел вообще:
http://ru.wikipedia.org/wiki/%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D 1%80_%D0%BF%D1%81%D0%B5%D0%B2%D0%B4%D0%BE%D1%81%D0 %BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D1%8B%D1%85_%D1% 87%D0%B8%D1%81%D0%B5%D0%BB
И конкретно про один простой в реализации метод, который обеспечивает генерацию приемлемых для данной задачи случайных чисел:
http://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D0%B9_% D0%BA%D0%BE%D0%BD%D0%B3%D1%80%D1%83%D1%8D%D0%BD%D1 %82%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0% B4
---------
Теперь о фильтрации.
Простейший случай двумерного фильтра низких частот представляет собой обычное усреднение элемента матрицы с его соседями.
То есть если у нас имеется исходный двумерный массив A, и нужно построить отфильтрованный массив B, то каждый элемент B(i,j) будет равен среднему арифметическому соответствующего элемента A(i,j) и 8 его ближайших соседей.
Еще большей степени сглаживания можно добиться, если усреднять не 3х3 ближайших соседей, а 5х5 (по два элемента в каждую сторону) и более. При этом совсем не обязательно чтобы "маска усреднения" была симметричной. Можно брать одного соседа влево и двоих вправо, например. Это повлияет на фазовую характеристику фильтра и т.д., но у нас ведь исходные данные и результат являются случайным шумом, и мало ли, что там оно чуть-чуть по фазе будет сдвинуто - сущность результата от этого не поменяется.
Дальнейшее развитие идеи - это усреднение элемента с соседями не в равных пропорциях, а с разными весовыми коэффициентами. Например, брать 0.5 от самого элемента и по 0.0625 от каждого из соседей, и складывать вместе.
Тут уже идет речь о (малых размеров) матрице с коэффициентами фильтра. Для изотропного фильтра, действие которого одинаково во всех направлениях, эта матрица обладает центральной симметрией. Если она не обладает центральной симметрией, то действие фильтра может быть различным в разных направлениях. Например, более плавные изменения по горизонтали и более резкие - по вертикали.
Фильтры низких частот получаются обычно с коэффициентами, которые образуют как бы колокол. То есть с максимумом в центре и монотонным убыванием при движении к краям. Можно взять любую функцию с подобными свойствами - например, косинус, или параболу, или функцию Гаусса... Все они обеспечивают пропускание низких частот и подавление высоких, хотя и в разной степени, с разной эффективностью.
Фильтр высоких частот можно получить из фильтра низких частот, взяв все его коэффициенты с обратным знаком и прибавив после этого к центральному элементу матрицы фильтра единицу.
Обычно также следует стремиться к тому, чтобы сумма всех элементов матрицы ФНЧ была равна 1. Это несложно обеспечить, взяв произвольный набор коэффициентов, вычислив их сумму и разделив коэффициенты на полученное число. В противном случае происходит не только фильтрация, но и усиление/ослабление сигнала.
Для конкретной задачи генерации карт я рекомендую начать с простого усреднения соседних элементов, подобрав подходящее их количество. Более сложные фильтры вряд ли придется придумывать.
И вот еще что. По своим краям отфильтрованный массив-карта будет иметь значение, ведущее себя иначе, чем в центре. Это потому, что фильтр имеет "краевой эффект", протяженность которого равна половине длины матрицы фильтра. Чтобы побороть краевой эффект, достаточно взять размеры исходного массива с случайными числами немного больше, чем нужно, а после фильтрации края просто выбросить.
Судя по посещаемости никого не интересует генератор полей к Last Battle. Уже наверное никто даже под эмулятором не играет. :(
Судя по посещаемости никого не интересует генератор полей к Last Battle. Уже наверное никто даже под эмулятором не играет. :(
Играем. Полтора часа искал, наконец тут нашел редактор карт. Только проблема - карты в основном корявые получаются, три маленьких острова и огромное море, например.
А я хотел бы вслепую поиграть на картах подобных тем, что в игре.
Есть эмулятор получше у кого-нибудь?
Процедурные текстуры типа "плазма" в демах так и делаются. Причём даже можно не 3x3 соседа, а только соседа слева и соседа сверху. Естественно, прогонять всю карту несколько раз. Можно вообще фильтровать по очереди горизонтально и вертикально, 2x1.
Естественно, прогонять всю карту несколько раз. Можно вообще фильтровать по очереди горизонтально и вертикально, 2x1.
Спасибо, несколько прогонов помогло, острова больше стали и расплылись.
А как делать горизонтально и вертикально? Я просто выбирал номер карты и enter.
По горизонтали:
ld a,(hl)
add a,c
rra
ld c,(hl)
ld (hl),a
inc l
По вертикали то же самое, но inc h.
Можно и быстрее.
Andrew771
10.01.2013, 17:43
Всё уже написано! Берем тут исходники игры Эйфория, в которых есть генератор случайных карт: на Delphi и он же переписанный на асме Спектрума: http://zx.pk.ru/showpost.php?p=554273&postcount=130
Количество материков и типов суши можно задавать самому.
Все дело в том, что я не умею кодить. Совсем :rolleyes:
Я играть люблю.
Привет всем! Есть уже программка на РС, которая может сохранить все шесть полей в определенный образ trd :). Пока работает немного криво, но все-же работает. Как нибудь выложу :).
Привет. Подскажите пожалуйста, или лучше ткните носом, как организовано хранение информации на бета диске. Хочу сделать так, чтоб в образе trd моя программа могла по каталогу находить куда записывать сгенерированные поля (хочу сделать чтобы программа могла писать в любой образ trd, на котором есть игра). Пытался доставать файл из встроенных ресурсов, оно работает, но дольше. И еще, если честно, такой подход не профессиональный (работа только с одним образом). Подскажите пожалуйста чтоб не тратить время на поиск и разбор. Спасибо.
Black Cat / Era CG
31.07.2019, 12:09
Вот тут расписано все, но лучше скачать скан книги, там кривовато распознано немного https://zxpress.ru/book_articles.php?id=1862
Интересны мнения как лучше сделать. Сделать так чтоб программа доставала образ целого trd (мой) из самой себя если его нет, или сделать так чтоб программа могла просто работать с образом на котором есть LastBattle (или файл полей) ? Поделитесь пожалуйста своими соображениями.
Black Cat / Era CG
09.08.2019, 14:00
Ну так как в результате ты хочешь, на выходе иметь образ с Last Battle и новыми полями, значит надо, чтобы программа проверяла наличие игры в образе, и если не находила, то копировала его туда (с сообщением или без), а дальше уже с полученным образом работала. Не совсем понял, в чем вопрос?
Black Cat / Era CG, именно это я и имел ввиду. Достаточно интересная идея с тем чтоб игру в образ внедрить. Это конечно немного сложнее чем просто готовый образ создать но идея нравится :). Нужно проверить есть ли свободное место в образе диска, внедрить кучу файлов игры в образ. Для начала наверное попытаюсь просто проверить наличие в образе игры, если есть то перезалить поля. Кстати, образы trd бывают разные по длине в зависимости от того какие диски использовались например односторонние и простой плотности?
Black Cat / Era CG
09.08.2019, 17:32
Кстати, образы trd бывают разные по длине в зависимости от того какие диски использовались например односторонние и простой плотности?
Стандартный образ трд = 655360 байт, у нас не были распространены 40-дорожечные и односторонние, а за бугром - тр-дос. Однако встречаются образа и побольше, на 82-84 дорожек, а также трд-кастраты, обрезанные до последнего трека с инфой.
SoftLight
09.08.2019, 18:21
Я раньше тоже считал, что TRD обязаны быть 80 дорожек x 2 стороны x 16 секторов. Но потом на wos нашлись гении, которые стали писать тулзы, которые чикают нормальные файлы и плодят обрубки. SCL им не хватает как будто. Ну сколько сторон у диска это пофиг - ВГ93 не проставляет номер стороны при форматировании. Так что берем рамер файла и делим на 256x16 и получаем кол-во дорожек, по идее должно быть целым.
Всем привет!
Хочу порадовать всех любителей поиграть в Last Battle. Наконец то выкладываю нормальную рабочую программу для создания карт. Программа на английском, умеет работать с образами trd. Генерирует карты только островного типа (я думаю что это наиболее интересный тип карт). Интерфейс думаю понятный. Программа поставляется как есть, только один ехе файл. Все бесплатно :) (Хотя если кто бы закинул чего-то на конфеты, пыво, скумбрию, не откажусь :) ).
Ниже ссылка:
http://rndgen.narod.ru/index5.htm
Свои пожелания и замечания пишите сюда. Спасибо.
Отредактировал первый пост, добавил ссылку для скачивания, немного пояснений по программе.
Немного расстраивает полное отсутствие активности в теме :(.
Black Cat / Era CG
06.08.2020, 18:13
Немного расстраивает полное отсутствие активности в теме .
У тебя просто тут политики нет. Людям тут про спектрум неинтересно, они про политику любят! (Сарказм).
(Серьезно) Не обращай внимания, на форуме не только писатели, есть и читатели.
кто любит эту увлекательную игру.
сильно нечестную.
был разбор её потрохов. ИИ как такового нет.
комп читит и изначально знает размещение твоих юнитов.
сильно нечестную.
был разбор её потрохов. ИИ как такового нет.
комп читит и изначально знает размещение твоих юнитов.
в большинстве стратегий так. особенно на высоких уровнях сложности. )
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot