• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток!
    Стартовал новый литературный конкурс от "Ордена Хранителей" - "Пираты Миртанского моря".
    Каждый может принять в нём участие и снискать славу и уважение, а в случае занятия призового места ещё и получить награду. Дерзайте
  • Дорогие друзья, год подходит к концу, и пришло время подвести его итоги и наградить достойных

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

Gothic ½ zSpell

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
  • Первое сообщение
  • #1
Вобщем решили мы с Gratt'ом написать спелл пак, и как всегда уперлись в топорность движка готы, те кто делал заклинания для игры, я думаю уже знакомы с тем какой это чертов геморой: куча каких то массивов, обязательное требование что бы имя эффекта имя спела, имена функций логики спелла совпадали друг с другом, массивы где нужно считать руками куда что выписывать, кошмар кароче.
Теперь же логика создания спела будет примерно такой:
Создаем заклинание, и рядом с ним с таким же именем создаем инстанцию C_SPELL_DATA, в которую пишем все необходимые данные, вроде имени инстанции, эффекта, типа используемой энергии, и тд.


При всем этом, старые спелы, с макс индексом 100(родные спелы готы) работают как и прежде, по прежним законам, для того что бы использовать новую систему, индекс должен быть выше 100. В дальнейшем для новой системы переработаю функции расхода маны, и все вот это вот, ибо то что сейчас мана из спеллов отжирается тупо скриптом, это кошмар.
Обсуждаем что добавить еще.

Вот готовимся к релизу промежуточной версии.
Актуальная версия лежит здесь
Конструктор заклинаний | zSpells

Для изучения содержимого - распаковать том zSpell.vdf с учетом иерархии файлов.
Список файлов тома:

System\Autorun\zParserExtender.dll - расширитель парсера для загрузки .d и .src в обход .dat файла.
System\Autorun\zSpell.dll - файл плагина, расширяющий возможности создания спелов
System\Autorun\zSpell.src - файл, определяющий правильный порядок загрузки .d скриптов из папки zSpell
System\Autorun\zSpell\zSpell_Ptorotypes.d - файл определений для новых спелов
System\Autorun\zSpell\Spell_Heal.d - пример циклической реализации спела восполнения здоровья System\Autorun\zSpell\Spell_PyroBlast.d - пример огненного шара System\Autorun\zSpell\zSpell_PFX.d - добавляет в игру несколько новых эффектов частиц для новых спелов
System\Autorun\zSpell\zSpell_VFX.d - добавляет в игру несколько новых визуальных эффектов для новых спелов Для добавления новых спелов можно воспользоваться программой Gothic Sourcer, либо добавить свои скрипты в папку System\Autorun. При использовании Gothic Sourcer, необходимо добавить в него функцию с сигнатурой: void Spl_InvestNext(instance).

И во вложении подробное описание всего скрипта заклинания
 

Вложения

  • SPell notes.D
    8,2 KB · Просмотры: 57
  • zSpell.7z
    1,1 MB · Просмотры: 63
Последнее редактирование модератором:

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Заклинания делать буду врятли, потому что теперь пришлось делать редактор частиц к своему шпейшеру
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
В тренде сейчас заклинание превращения в быдло, лол.
К слову, кто то уже пробовал юзать этот плаген?
 

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340
В тренде сейчас заклинание превращения в быдло, лол.
К слову, кто то уже пробовал юзать этот плаген?

Если заклинаний далеко за 100...в них что то менять придется чтобы адаптировать к новой системе? Добавьте плагин редактора частиц прямо в игру через марвин. Это будет рельно полезно сразу видеть в игре как меняется эффект, ибо спейсер это конечно хорошо, но это работа по большей части с миром. Логику работы спела на нпс/c нпс проще отлаживать в самой игре. Соурсы будут доступны на гитхабе?
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Редактор vfx в игру добавлять не буду. А индекс спелов сделаю от 1000. Чтоб не менять ничо
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.176
Благодарности
5.697
Баллы
910
Для тестирования новых возможностей плагина Парсера экстендера, добавил новое заклинание через твой плагин.
Все ок, но ману отнимает всего 1, а не 20.
Daedalus:
const int SPL_Mask            = 201;
const int SPL_Cost_Mask            = 20;
const int SPL_Damage_Mask         = 100;

instance Spell_Mask_data (C_SPL_DATA)
{
  instName     = "Mask";
  spellID      = SPL_Mask;
  spellName    = "Тест";
  spellAniName = "WND";
  visualFxName = "Mask";
  damage       = SPL_Damage_Mask;
  cost         = SPL_Cost_Mask;
  energyType   = ATR_MANA;
};

INSTANCE Spell_Mask (C_Spell_Proto)
{
    time_per_mana            = 0;
    damageType                = DAM_MAGIC;
};

INSTANCE ITRU_ZEMSTA_1(C_Item)
{
    name = NAME_Rune;
    mainflag =    ITEM_KAT_RUNE;
    flags =    0;
    visual = "ItRu_Water16.3ds";
    material = MAT_STONE;
    spell = SPL_Mask;
    wear = WEAR_EFFECT;
    effect = "SPELLFX_WEAKGLIMMER_RED";
    description = "Тест";   
    TEXT[1] = NAME_Manakosten;           
    COUNT[1] = SPL_Cost_Mask;   
    TEXT[2] = NAME_Damage;               
    COUNT[2] = SPL_Damage_Mask;
};

func int Spell_Logic_Mask(var int manaInvested)
{
    if(self.attribute[ATR_MANA] >= Spell_Mask_data.cost)
    {
        return SPL_SENDCAST;
    }
    else
    {
        return SPL_SENDSTOP;
    };    
};

func void Spell_Cast_Mask(var int spellLevel)
{
  self.aivar[AIV_SelectSpell] += 1;
};

func int Spell_ProcessMana_Release_Mask(var int manaInvested)
{
  return SPL_SENDCAST;
};
 
Сверху Снизу