netlib.narod.ru | < Назад | Оглавление | Далее > |
Вы создаете и используете главный список персонажей (MCL) во многом также, как вы создаете и используете главный список предметов (MIL) для определения объектов в вашей игре. Перед тем, как использовать их в вашей игре, вам надо спроектировать каждый персонаж, вместе с его представлением (трехмерной сеткой) и функциональностью (способностями и атрибутами). Информация о персонаже хранится в структуре sCharacterDefinition.
MCL хранится таким же образом, как и MIL, в последовательном файле данных (рис. 12.12). Всякий раз, когда в игре нужен персонаж, ссылаются на MCL; каждому персонажу назначен уникальный номер для ссылки. Когда персонаж необходим, вы загружаете соответствующую структуру данных.
Рис. 12.12. Файл MCL разделен на секции (структуры), все одинакового размера, что делает проще позиционирование и загрузку конкретной структуры по ее ссылочному номеру
Теперь взглянем на структуру sCharacterDefinition:
typedef struct sCharacterDefinition { // Различные данные char Name[32]; // Название персонажа long Class; // Номер класса персонажа long Money; // Количество денег float Speed; // Скорость перемещения long MagicSpells; // Битовые флаги для отметки // известных заклинаний long MeshNum; // Номер сетки для загрузки // Способности long Agility; // Проворность long Attack; // Атака long Defense; // Защита long Resistance; // Сопротивляемость магии long Mental; // Интеллект // Атрибуты long HealthPoints; // Кол-во очков здоровья (максимум) long ManaPoints; // Кол-во очков манны (максимум) long ToHit; // Шансы попадания long Level; // Уровень опыта long Experience; // Очки опыта // Имущество char ItemFilename[MAX_PATH]; // Имя файла CharICS long Weapon; // Оружие из экипировки long Armor; // Доспех из экипировки long Shield; // Щит из экипировки long Accessory; // Аксессуар из экипировки // Данные бросаемого предмета long DropChance; // Вероятность выпадения предмета при гибели long DropItem; // Номер выпадающего при гибели предмета // Шансы и эффекты атаки/магии float Range; // Дистанция атаки float ChargeRate; // Обратный счетчик частоты атак long ToAttack; // Вероятность атаки long ToMagic; // Вероятность использования магии long EffectChance; // Вероятность осуществления эффекта атаки long Effects; // Битовые флаги эффекта атаки } sCharacterDefinition;
Точно также, как главный список предметов, MCL хранит только минимум информации о персонаже. Поскольку в игровом мире одновременно могут существовать несколько персонажей одного типа (например, 10 гоблинов), данные конкретного экземпляра хранятся отдельно. Эти данные экземпляра включают координаты персонажа, текущие значения очков здоровья и очков манны и т.д.
Структура sCharacterDefinition хранит шаблон, используемый, когда создается экземпляр персонажа. Этот шаблон охватывает все персонажи, включая PC.
Хотя структура хорошо прокомментирована, смысл некоторых вещей может быть сразу не понятен.В дополнение к способностям и атрибутам, о которых вы уже читали, у вас есть различные данные, имущество, бросаемый предмет, шансы и эффекты атаки/магии. Таблица 12.6 описывает, что эти переменные делают в определении персонажа.
Таблица 12.6. Различные переменные структуры sCharacterDefinition
Переменная | Описание |
Name | Название персонажа (ограничено 32 байтами, включая символ завершения строки) |
Class | Номер класса персонажа. Персонажам назначены классы и персонаж может использовать только предметы, помеченные как относящиеся к этому же классу. Также отдельные атаки и заклинания по-разному действуют на разные классы. |
Money | Количество денег, которое несет персонаж |
MagicSpells | Массив из двух переменных long, содержащих битовые флаги, определяющие заклинания, известные персонажу. Начиная с первого байта в массиве, младший бит представляет заклинание 0, второй бит представляет заклинание 1, и так, пока не будет достигнут шестьдесят четвертый бит, представляющий заклинание 63 |
MeshNum | Поддерживается внешний массив сеток, который определяет сетки и анимации, используемые для персонажей. Значение, хранимое в MeshNum, это индекс используемой сетки в этом массиве |
ItemFilename | Это имя файла системы управления имуществом персонажа, используемого для PC. NPC используют ICS только если они собираются торговать с игроком |
Weapon | Индекс в MIL оружия, которым в данный момент экипирован персонаж. Если значение –1, предмет экипировки отсутствует (то же самое применимо к последующим предметам экипировки) |
Armor | Индекс в MIL доспехов, которыми в данный момент экипирован персонаж |
Shield | То же, что Weapon и Armor. Индекс в списке предметов щита из текущей экипировки |
Accessory | Завершает набор индекс в списке предметов аксессуара из текущей экипировки персонажа |
DropChance | Процент вероятности того, что убитый персонаж выронит предмет |
DropItem | Номер бросаемого предмета, используемый, когда персонаж убит и определено (через DropChance), что он выронил предмет |
Range | У персонажей есть обычный диапазон атаки, распространяющийся до самого удаленного края ограничивающего объема. Значение диапазона атаки, чтобы быть эффективным, должно быть больше нуля |
ChargeRate | После того, как персонаж выполнил действие, такое как атака, использование предмета, экипирование предметом или произнесение заклинания, он некоторое время не может выполнять другие действия. ChargeRate задает скорость обратного отсчета времени, по истечении которого персонаж сможет выполнять другие действия |
ToAttack | У персонажей есть два варианта атаки — физическая и магическая. ToAttack задает процент вероятности того, что персонаж, получив шанс, использует физическую атаку |
ToMagic | ToMagic задает процент вероятности того, что, получив шанс, персонаж произнесет заклинание |
EffectChance | Если персонаж атакует, это процент вероятности того, что будет произведен ожидаемый магический эффект |
Effects | Эффекты атаки персонажа. Это набор битовых флагов, и вы решаете, что означает каждый разряд |
Сконфигурировать единственный персонаж так же просто, как заполнить анкету, но когда надо описать 100 персонажей, все быстро усложняется. Вам нужен MCL Editor.
К этому моменту вы, вероятно, уже пользовались редакторами, и этот столь же удобен, что и остальные. Если вы еще не сделали этого, запустите приложение MCLEdit (вы найдете его на прилагаемом к книге CD-ROM в каталоге \BookCode\Chap12\MCLEdit). На рис. 12.13 показано диалоговое окно MCL Editor.
Рис. 12.13. Диалоговое окно Master Character List Editor содержит список персонажей и несколько кнопок, которые позволяют вам добавлять новый персонаж к списку, очищать определение персонажа, редактировать, сохранять и загружать список персонажей
Работа с MCL Editor подобна работе с MSL Editor, обсуждавшимся ранее в этой главе, и с MIL Editor, обсуждавшимся в главе 11. MCL Editor может поддерживать до 256 персонажей, нумеруемых от 0 до 255. Каждый персонаж отображается в списке. Работая с MCL Editor, придерживайтесь следующих шагов:
Дважды щелкните по персонажу в списке или щелкните по кнопке New, чтобы было выведено диалоговое окно Modify Character, показанное на рис. 12.14.
Рис. 12.14. Диалоговое окно Modify Character заполнено различной информацией о персонаже, хранящейся в структуре sCharacterDefinition
В диалоговом окне Modify Character введите в каждое из полей соответствующую информацию о персонаже. Вы можете менять название персонажа, класс, очки здоровья, очки манны, уровень, опыт, деньги, значения способностей, известные заклинания и сетку.
Закончив заполнять информацию о персонаже в диалоговом окне Modify Character, щелкните OK. Вы вернетесь к диалоговому окну Master Character List Editor.
Щелкните по кнопке Save, чтобы перейти к диалоговому окну Save MCL File.
Введите имя файла и щелкните по кнопке Save, чтобы записать файл MCL на диск.
Чтобы загрузить файл, щелкните по кнопке Load (в диалоговом окне Master Character List Editor), введите имя файла и щелкните OK.
Вы уже читали о каждом фрагменте описания персонажа. Теперь пришло время ввести эту информацию в соответствующие места. Когда дело касается заклинаний, подсвеченные номера отмечают те заклинания, которые персонаж знает автоматически. Эти номера заклинаний напрямую относятся к вашему MSL, так что вы можете одновременно запустить MSL Editor и MCL Editor и расположить их окна рядом для сравнения информации.
Определение персонажа является по своей природе шаблоном, так что вам в действительности нужно загрузить определения и затем работать с ними на поэкземплярной основе. Это значит, что вы должны придумать контроллер, который загружает определения и отслеживает каждый экземпляр персонажа в вашей игре. Вам необходим класс контроллера персонажей.
netlib.narod.ru | < Назад | Оглавление | Далее > |