Strange Wood
Модератор: Jolly Roger
14/06/07
Загрузка работает. Есть глюк - при первоначальной отрисовке герой оказывается на краю карты. Или вероятно может оказаться вообще за пределами карты. Можно попробовать вызывать ValidateScroll при загрузке.
Надо выделить шаги при инициализации игры в отдельный метод. А также выделить все действия, выполняемые при отрисовке игровой ситуации, в отдельный метод. Все более напрашивается использование отдельного класса TGame.
Теперь хочу заняться предметами более плотно. Первая задача - загрузить описания предметов в игру. Думаю, надо ли для предмета дополнительно прописывать его ИД - некое число, по которому можно обращаться к предмету. Пока получается, что надо.
Попробовал погонять загрузку и сохранение на подземелье. Получилось. Обратил внимание на небольшую багофичу - при выполнении ValidateScroll карта центрируется на герое, хотя более правильным кажется смещение карты только в одном направлении - там где слишком близко к краю. Иначе получаются не слишком приятные скачки. Это оставлю на потом.
Загрузка предметов получается, но пока большая часть атрибутов просто игнорируется. Сделал правило - если атрибут не распознан, он игнорируется. Надо еще добавить вывод сообщения об этом в лог.
Сделал вывод сообщений в лог. При этом, если имя атрибута не распознано, значение игнорируется. Если правильное имя атрибута, но неправильное значение - выводится сообщение.
Следующий шаг - описание предмета флагами. Сейчас думаю - флаги хранить в битовом поле или нужно что-то более сложное? Пока вырисовываются следующие флаги:
- тип повреждения: укол, разрез, удар;
- материал - это отдельное поле
- горючесть - определяется материалом. Есть горючие (дерево, ткань, мех) и негорючие материалы (железо, камень). Как быть с составными предметами? Например, копье состоит из деревянного копьевища и железного наконечника.
- применение: в качестве веревки, палки, еды, дров, режущего оружия, ... Вот с этим пока больше всего непонятностей.
Пока для начала попробую оставить только атрибуты типа повреждения.
Что еще сделать в первую очередь для предметов - это:
а) размещение на карте;
б) инвентарь героя (хотя бы в самом примитивном виде);
в) подбирание и бросание предметов
Загрузка работает. Есть глюк - при первоначальной отрисовке герой оказывается на краю карты. Или вероятно может оказаться вообще за пределами карты. Можно попробовать вызывать ValidateScroll при загрузке.
Надо выделить шаги при инициализации игры в отдельный метод. А также выделить все действия, выполняемые при отрисовке игровой ситуации, в отдельный метод. Все более напрашивается использование отдельного класса TGame.
Теперь хочу заняться предметами более плотно. Первая задача - загрузить описания предметов в игру. Думаю, надо ли для предмета дополнительно прописывать его ИД - некое число, по которому можно обращаться к предмету. Пока получается, что надо.
Попробовал погонять загрузку и сохранение на подземелье. Получилось. Обратил внимание на небольшую багофичу - при выполнении ValidateScroll карта центрируется на герое, хотя более правильным кажется смещение карты только в одном направлении - там где слишком близко к краю. Иначе получаются не слишком приятные скачки. Это оставлю на потом.
Загрузка предметов получается, но пока большая часть атрибутов просто игнорируется. Сделал правило - если атрибут не распознан, он игнорируется. Надо еще добавить вывод сообщения об этом в лог.
Сделал вывод сообщений в лог. При этом, если имя атрибута не распознано, значение игнорируется. Если правильное имя атрибута, но неправильное значение - выводится сообщение.
Следующий шаг - описание предмета флагами. Сейчас думаю - флаги хранить в битовом поле или нужно что-то более сложное? Пока вырисовываются следующие флаги:
- тип повреждения: укол, разрез, удар;
- материал - это отдельное поле
- горючесть - определяется материалом. Есть горючие (дерево, ткань, мех) и негорючие материалы (железо, камень). Как быть с составными предметами? Например, копье состоит из деревянного копьевища и железного наконечника.
- применение: в качестве веревки, палки, еды, дров, режущего оружия, ... Вот с этим пока больше всего непонятностей.
Пока для начала попробую оставить только атрибуты типа повреждения.
Что еще сделать в первую очередь для предметов - это:
а) размещение на карте;
б) инвентарь героя (хотя бы в самом примитивном виде);
в) подбирание и бросание предметов
Первая заповедь фотолюбителя: Проявил себя - закрепи!
15/06/07
Начал делать предметы. Поскольку предполагается, что предметы могут образовывать кучки, включил в описание предмета поле Qty - количество. По умолчанию каждый предмет идет в одном экземпляре, за исключением случаев производства сразу нескольких предметов.
Начал делать инвентарь героя. Может, это не самый лучший вариант? Сначала сделать предметы на карте, а затем уже у героя? Если сначала у героя - то нужно сделать инвентарь, его просмотр, подбирание и бросание предметов.
Включил ID предмета в его объявление. Используется при поиске, есть ли в инвентаре уже такой предмет. Если есть - просто увеличивается его количество. Если нет - добавляется с количеством, которое было в кучке.
Начал делать предметы. Поскольку предполагается, что предметы могут образовывать кучки, включил в описание предмета поле Qty - количество. По умолчанию каждый предмет идет в одном экземпляре, за исключением случаев производства сразу нескольких предметов.
Начал делать инвентарь героя. Может, это не самый лучший вариант? Сначала сделать предметы на карте, а затем уже у героя? Если сначала у героя - то нужно сделать инвентарь, его просмотр, подбирание и бросание предметов.
Включил ID предмета в его объявление. Используется при поиске, есть ли в инвентаре уже такой предмет. Если есть - просто увеличивается его количество. Если нет - добавляется с количеством, которое было в кучке.
Первая заповедь фотолюбителя: Проявил себя - закрепи!
- Maelstrom
- Мастер
- Сообщения: 2062
- Зарегистрирован: 26 ноя 2006, 14:19
- Откуда: г. Усть-Кирдык
- Контактная информация:
3мя параметрами:Как быть с составными предметами? Например, копье состоит из деревянного копьевища и железного наконечника.
Primary_Material
Secodary_Material
Объёмное отношение первого материала ко второму.
А что тут сложного?применение: в качестве веревки, палки, еды, дров, режущего оружия, ... Вот с этим пока больше всего непонятностей.
Айв кнгенгах Йог-Сотот
Хм... При сгорании копья от него по идее остается железный наконечник. При сгорании топора - собственно железная часть (не знаю, как правильно называется).Maelstrom писал(а): 3мя параметрами:
Primary_Material
Secodary_Material
Объёмное отношение первого материала ко второму.
Соотношение материалов тут не поможет. Только если взять за правило, что при сгорании предмета от него остается слиток металла соответствующего веса. Или какого другого материала, который можно использовать только как сырье, а не готовую деталь.
Первая заповедь фотолюбителя: Проявил себя - закрепи!
Лезвием оно и называется)Dmiry писал(а): При сгорании топора - собственно железная часть (не знаю, как правильно называется).
Вообще у меня была такая идея (и незаконченная пока реализация):
Каждый итем, обладая своими свойствами, является одновременно инвентарём, содержащим другие итемы.
Т.е., например:
главный объект - винтовка.
в неё входят: обойма, содержащая в себе 20 итемов - патронов, оптика, штык и т.п.
Переходя к поставленному вопросу:
Допустим, есть объект копьё, содержащий в себе объекты древко и наконечник.
Тогда, при сгорании объекта копьё происходит проход по списку встроенных предметов, и, если некое свойство (огнеупорность) меньше обозначенного минимума, то данный предмет уничтожается. Далее - обратный проход - проверяем, а осталось ли хоть что нибудь, если нет - чистим битые ссылки.
ИМХО к рогаликам, заточенным на стрелковом оружие и т.п. вещах, такой метод очень удобно применять.
Последний раз редактировалось Bobiczdoh 15 июн 2007, 14:38, всего редактировалось 1 раз.
- Sanja
- Администратор
- Сообщения: 791
- Зарегистрирован: 24 ноя 2006, 12:25
- Откуда: Новосибирск
- Контактная информация:
Мда, и зачем такая детализация на таком раннем этапе?
Рано.- материал - это отдельное поле
- горючесть - определяется материалом. Есть горючие (дерево, ткань, мех) и негорючие материалы (железо, камень). Как быть с составными предметами? Например, копье состоит из деревянного копьевища и железного наконечника.
- применение: в качестве веревки, палки, еды, дров, режущего оружия, ... Вот с этим пока больше всего непонятностей.
- Максим Кич
- Администратор
- Сообщения: 1642
- Зарегистрирован: 03 дек 2006, 20:17
- Откуда: Витебск, Беларусь
- Контактная информация:
Вообще — это ты придумал хороший способ усложнить себе жизнь. Из наконечника, палки и верёвки, я так понимаю, можно будет собрать копьё? А если подвергнуть копьё воздействию кислотой, то что от него останется?Dmiry писал(а):Хм... При сгорании копья от него по идее остается железный наконечник. При сгорании топора - собственно железная часть (не знаю, как правильно называется).Maelstrom писал(а): 3мя параметрами:
Primary_Material
Secodary_Material
Объёмное отношение первого материала ко второму.
Соотношение материалов тут не поможет. Только если взять за правило, что при сгорании предмета от него остается слиток металла соответствующего веса. Или какого другого материала, который можно использовать только как сырье, а не готовую деталь.
Dump the screen? [y/n]
А я и не говорил, что все здесь написанное сразу идет в реализацию. Это не столько план действий, сколько мысли по поводу. Собственно, для того и пишется мой дневник, чтобы можно было писать все что думается, и реализовывать только то, что созреет.Рано.
Спасибо за идею, но я наверное пока воздержусь от такого. Сначала что-нибудь простое сделаемТогда, при сгорании объекта копьё происходит проход по списку встроенных предметов, и, если некое свойство (огнеупорность) меньше обозначенного минимума, то данный предмет уничтожается.
Теоретически ничего не останется. Но я не планировал делать кислотные атаки. В дневнике есть упоминание, что эта игра более всего похожа на URW.А если подвергнуть копьё воздействию кислотой, то что от него останется?
Первая заповедь фотолюбителя: Проявил себя - закрепи!
15/06/07
Подумал насчет предметов. Лучше сделаю следующим образом: ячейка инвентаря или клетка карты содержат 2 поля: ИД предмета и количество. ИД соответствует номеру предмета в массиве эталонных предметов. Описание эталонных предметов загружается из файла в упомянутый массив.
Изменил структуру списка эталонных предметов с TList на Array.
Несколько изменил структуру предмета. Теперь сам предмет не содержит количество. Вместо этого используется новый тип TItemStack. Этот тип содержит два поля: ItemID и Qty.
18.06.07
Сейчас займусь размещением предметов на карте. Изначально в любой ячейке карты может быть любое количество предметов. В каждую ячейку входит ИД предмета на карте. Это ссылка на элемент массива Items класса Map.
Будем считать несуществующий предмет - предмет с ИД=0. Или ссылку на предмет под номером 0.
Слегка изменил описание предмета в файле ITEM.TXT. Теперь название предмета идет как атрибут, а в заголовке предмета указывается его ИД. Сейчас надо написать алгоритм разбрасывания предметов по карте. Это будет проверка, что предметы правильно загружаются и рисуются. Кстати, в предмете у меня сейчас нет никакого упоминания про визуальное представление на карте. Надо добавить.
Начал делать рисование предметов. Не нравится механизм рисования. Сейчас все глифы загружаются в программу при старте. Паинтер получает команду рисования и рисует нужным глифом требуемое изображение. Надо ли разделять глифы для представления разных объектов на экране? Например, отдельно глифы для ячеек карты, отдельно для предметов, отдельно для монстров.
Подумал насчет предметов. Лучше сделаю следующим образом: ячейка инвентаря или клетка карты содержат 2 поля: ИД предмета и количество. ИД соответствует номеру предмета в массиве эталонных предметов. Описание эталонных предметов загружается из файла в упомянутый массив.
Изменил структуру списка эталонных предметов с TList на Array.
Несколько изменил структуру предмета. Теперь сам предмет не содержит количество. Вместо этого используется новый тип TItemStack. Этот тип содержит два поля: ItemID и Qty.
18.06.07
Сейчас займусь размещением предметов на карте. Изначально в любой ячейке карты может быть любое количество предметов. В каждую ячейку входит ИД предмета на карте. Это ссылка на элемент массива Items класса Map.
Будем считать несуществующий предмет - предмет с ИД=0. Или ссылку на предмет под номером 0.
Слегка изменил описание предмета в файле ITEM.TXT. Теперь название предмета идет как атрибут, а в заголовке предмета указывается его ИД. Сейчас надо написать алгоритм разбрасывания предметов по карте. Это будет проверка, что предметы правильно загружаются и рисуются. Кстати, в предмете у меня сейчас нет никакого упоминания про визуальное представление на карте. Надо добавить.
Начал делать рисование предметов. Не нравится механизм рисования. Сейчас все глифы загружаются в программу при старте. Паинтер получает команду рисования и рисует нужным глифом требуемое изображение. Надо ли разделять глифы для представления разных объектов на экране? Например, отдельно глифы для ячеек карты, отдельно для предметов, отдельно для монстров.
Первая заповедь фотолюбителя: Проявил себя - закрепи!
Т.е. ты отказался вообще от модификации предметов по ходу игры (освящение, расковывание и т.п.)?Dmiry писал(а):15/06/07
Подумал насчет предметов. Лучше сделаю следующим образом: ячейка инвентаря или клетка карты содержат 2 поля: ИД предмета и количество. ИД соответствует номеру предмета в массиве эталонных предметов. Описание эталонных предметов загружается из файла в упомянутый массив.
Модификация в голове пока остается. Первоначально реализую простую систему, дальше буду дополнять и переделывать.Bobiczdoh писал(а): Т.е. ты отказался вообще от модификации предметов по ходу игры (освящение, расковывание и т.п.)?
Пришла в голову такая мысль: при изменении материала меняется вес предмета. То есть надо хранить для материала его плотность, а для предмета - его объем. Тогда при изменении материала любым способом меняется вес предмета.
Первая заповедь фотолюбителя: Проявил себя - закрепи!
- Sanja
- Администратор
- Сообщения: 791
- Зарегистрирован: 24 ноя 2006, 12:25
- Откуда: Новосибирск
- Контактная информация:
В этом случае в игре будут существовать только эталонные вещи. Т.е. никакого износа, никаких наложенных эффектов, никаких улучшений. Память экономишь что ли?ИД соответствует номеру предмета в массиве эталонных предметов.
В RPGMaker раздельные (персонажи, анимации, картинки, поверхость и объекты, монстры и т.п.). В большинстве рогаликов единый файл. Просто количество используемых тайлов в первом больше на один-два порядка по сравнению со вторыми.Например, отдельно глифы для ячеек карты, отдельно для предметов, отдельно для монстров.
У меня сейчас каждый глиф хранится в отдельном файле. Но структура программы написана таким образом, что я могу менять систему загрузки изображений без переделки большей части программы.Sanja писал(а):В RPGMaker раздельные (персонажи, анимации, картинки, поверхость и объекты, монстры и т.п.). В большинстве рогаликов единый файл. Просто количество используемых тайлов в первом больше на один-два порядка по сравнению со вторыми.
Вопрос скорее в том, чтобы разделить каким-то образом те глифы, которые изображают клетки карты, монстров и героя, предметы. Не хочу валить в одну кучу достаточно разнородные картинки. Пока напрашивается сделать несколько подкаталогов в каталоге Images: Tiles, Monsters, Items и т.д. М.б. как вариант сделать один файл для тайлов карты, другой для предметов, третий для монстров.
Вопрос к другим разработчикам: я хочу обозначить объект в игре (тайлы, предметы, ...) числовым идентификатором. Этот идентификатор как лучше сделать? Константой, или загружать из файла? Если загружать - как определить, если я хочу нарисовать дерево - какой у него ИД?
Первая заповедь фотолюбителя: Проявил себя - закрепи!
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 34 гостя