netlib.narod.ru< Назад | Оглавление | Далее >

Построение главного списка персонажей

Вы создаете и используете главный список персонажей (MCL) во многом также, как вы создаете и используете главный список предметов (MIL) для определения объектов в вашей игре. Перед тем, как использовать их в вашей игре, вам надо спроектировать каждый персонаж, вместе с его представлением (трехмерной сеткой) и функциональностью (способностями и атрибутами). Информация о персонаже хранится в структуре sCharacterDefinition.

MCL хранится таким же образом, как и MIL, в последовательном файле данных (рис. 12.12). Всякий раз, когда в игре нужен персонаж, ссылаются на MCL; каждому персонажу назначен уникальный номер для ссылки. Когда персонаж необходим, вы загружаете соответствующую структуру данных.


Рис. 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;

 

ПРИМЕЧАНИЕ
Вы найдете структуру sCharacterDefinition во включаемом файле mcl.h, находящемся в исходных кодах программы Chars на прилагаемом к книге CD-ROM (загляните в \BookCode\Chap12\Chars).

Точно также, как главный список предметов, 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.

MCL Editor

К этому моменту вы, вероятно, уже пользовались редакторами, и этот столь же удобен, что и остальные. Если вы еще не сделали этого, запустите приложение MCLEdit (вы найдете его на прилагаемом к книге CD-ROM в каталоге \BookCode\Chap12\MCLEdit). На рис. 12.13 показано диалоговое окно MCL Editor.


Рис. 12.13. Диалоговое окно Master Character List Editor

Рис. 12.13. Диалоговое окно Master Character List Editor содержит список персонажей и несколько кнопок, которые позволяют вам добавлять новый персонаж к списку, очищать определение персонажа, редактировать, сохранять и загружать список персонажей


Работа с MCL Editor подобна работе с MSL Editor, обсуждавшимся ранее в этой главе, и с MIL Editor, обсуждавшимся в главе 11. MCL Editor может поддерживать до 256 персонажей, нумеруемых от 0 до 255. Каждый персонаж отображается в списке. Работая с MCL Editor, придерживайтесь следующих шагов:

  1. Дважды щелкните по персонажу в списке или щелкните по кнопке New, чтобы было выведено диалоговое окно Modify Character, показанное на рис. 12.14.


    Рис. 12.14. Диалоговое окно Modify Character

    Рис. 12.14. Диалоговое окно Modify Character заполнено различной информацией о персонаже, хранящейся в структуре sCharacterDefinition


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

  3. Закончив заполнять информацию о персонаже в диалоговом окне Modify Character, щелкните OK. Вы вернетесь к диалоговому окну Master Character List Editor.

  4. Щелкните по кнопке Save, чтобы перейти к диалоговому окну Save MCL File.

  5. Введите имя файла и щелкните по кнопке Save, чтобы записать файл MCL на диск.

  6. Чтобы загрузить файл, щелкните по кнопке Load (в диалоговом окне Master Character List Editor), введите имя файла и щелкните OK.

Вы уже читали о каждом фрагменте описания персонажа. Теперь пришло время ввести эту информацию в соответствующие места. Когда дело касается заклинаний, подсвеченные номера отмечают те заклинания, которые персонаж знает автоматически. Эти номера заклинаний напрямую относятся к вашему MSL, так что вы можете одновременно запустить MSL Editor и MCL Editor и расположить их окна рядом для сравнения информации.

Использование определений персонажей

Определение персонажа является по своей природе шаблоном, так что вам в действительности нужно загрузить определения и затем работать с ними на поэкземплярной основе. Это значит, что вы должны придумать контроллер, который загружает определения и отслеживает каждый экземпляр персонажа в вашей игре. Вам необходим класс контроллера персонажей.


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz