dosinabox / g2_classic

Проект переноса чистого оригинала Готики 2 без аддона на движок Г2НВ версии 2.6 с максимальной адаптацией скриптов.
https://worldofplayers.ru/threads/41796
The Unlicense
4 stars 2 forks source link

Волна смерти #97

Closed dosinabox closed 2 years ago

dosinabox commented 2 years ago

В классике эффект был другой, надо попробовать восстановить: unknown unknown (1) unknown (2) unknown (3)

dosinabox commented 2 years ago

@Kor-Angar можешь подтвердить, что в 1.30 именно такой эффект? Пока не получается докопаться.

Kor-Angar commented 2 years ago

я если честно не помню. по моему где то было как на картинке у тебя. https://www.youtube.com/watch?v=epp0dMx5Vuo у меня почему то вторая полоска в готике 2 не отображается может просто глюк.

dosinabox commented 2 years ago

а запиши ещё видео с телепортами и лечением из классики, пожалуйста

dosinabox commented 2 years ago

о как

в г2а мана инвестируется мгновенно, что делает недоступным ключ визуального эффекта KEY_INVEST , а вот в Г2(оригинал) мана инвестируется постепенно за какое-то время тем самым позволяя использовать KEY_INVEST

dosinabox commented 2 years ago

Пока отложу волну смерти, что-то не получается. Зато можно безболезненно починить эффекты телепортов и сделать их как в Г1 и классике Г2:

func int Spell_Logic_TeleportFarm(var int manaInvested)
{
    if(manaInvested == 0)
    {
        return SPL_NEXTLEVEL;
    };
    if(manaInvested >= SPL_Cost_Teleport + 1)
    {
        return SPL_SENDCAST;
    };
    return SPL_RECEIVEINVEST;
};

func void Spell_Cast_TeleportFarm()
{
    B_PrintTeleportTooFarAway(NEWWORLD_ZEN);
    AI_Teleport(self,"BIGFARM");
};
Kor-Angar commented 2 years ago

а запиши ещё видео с телепортами и лечением из классики, пожалуйста

вечером поставлю немецкую версию 1.30 и запишу.

Зато можно безболезненно починить эффекты телепортов и сделать их как в Г1 и классике Г2:

там не всё так просто. пираньи в Г2 отказались от manaInvested для большей части заклинаний, из-за того что заклинания стали требовать много маны. а это значит, что для каждой группы заклинаний надо подбирать time_per_mana , то есть примерно угадать, потом проверить, потом скорректировать и окончательно утвердить.

используя старую систему для лечения и телепорта ты снизишь выживаемость героя. пока герой будет инвестировать 10 единиц маны, его орки разберут на кусочки. то же с лечением: заинвестировать такой объём маны на руне пала подразумевает что герой находится в безопасном месте. а в готики 2 уже все привыкли к "быстрому касту", то есть что можно подлечится недалеко от врага и тут же контратаковать. к тому же Invested лечение это когда за каждую вложенную ману герой получают какое то кол-во единиц жизни и в таком случае непонятно чем будут отличать легкое лечение, от среднего и тяжелого :-) то есть они будут хуже так как за единицу маны восстанавливают меньше жизней. значит опять нужно придумывать баланс и делать что бы они лечили больше и быстрее за единицу времени.

или возможно я просто не понял что ты имеешь ввиду :-)

Kor-Angar commented 2 years ago

делает недоступным ключ визуального эффекта KEY_INVEST

достаточно один раз сделать SPL_NEXTLEVEL. собственно вот у тебя в начале оно и идёт :-)

    if(manaInvested == 0)
    {
        return SPL_NEXTLEVEL;
    };
Kor-Angar commented 2 years ago

а вот в Г2(оригинал) мана инвестируется постепенно за какое-то время

надо смотреть про какие SpellLogic идёт речь. я такого не помню. твой код для классик чистый, без правок и в игре я не встречал отличий между НВ и классик.

Kor-Angar commented 2 years ago
классик НВ
image image

а в НВ и Классик код одинаковый

dosinabox commented 2 years ago

Может, кто-нибудь сделает плагин или патч, и не придется этим заниматься: https://worldofplayers.ru/threads/42298/post-1163067

dosinabox commented 2 years ago

пока герой будет инвестировать 10 единиц маны, его орки разберут на кусочки

При time_per_mana = 0 инвнстирование происходит мгновенно, скорость каста телепорта остается такой же. Остальные заклинания не смотрела.

Kor-Angar commented 2 years ago

А про что патч то? :-).  Есть заклинание контроля и телекинеза и прочее там набор анимацией. Есть анимации при 0 уровне, есть анимации при  уровне 1. Что патч будет делать? Кол-во заклинаний с некстлевел ограничено. Фактически не на что влиять не будет. Если у телепорт увеличить время инвестирования маны, ты увидишь, анимацию/эффект уровня 1, но ведь тогда будет нарушен баланс? :-) 7:38, 4 ноября 2022 г., dosinabox @.***>: Может, кто-нибудь сделает плагин или патч, и не придется этим заниматься: https://worldofplayers.ru/threads/42298/post-1163067

—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: @.***> -- Отправлено из мобильного приложения Яндекс Почты

dosinabox commented 2 years ago

достаточно один раз сделать SPL_NEXTLEVEL. собственно вот у тебя в начале оно и идёт :-)

Помогло огненному дождю и телепорту. Волне смерти не помогло.

dosinabox commented 2 years ago

Можешь протестировать в бою огненный дождь с эффектом каста. Изменений в расходе маны и скорости каста быть не должно:

func int Spell_Logic_Firerain(var int manaInvested)
{
    if(Npc_GetActiveSpellIsScroll(self) && (self.attribute[ATR_MANA] >= SPL_Cost_Scroll))
    {
        if(manaInvested == 0)
        {
            return SPL_NEXTLEVEL;
        };
        return SPL_SENDCAST;
    }
    else if(self.attribute[ATR_MANA] >= SPL_Cost_Firerain)
    {
        if(manaInvested == 0)
        {
            return SPL_NEXTLEVEL;
        };
        return SPL_SENDCAST;
    };
    return SPL_SENDSTOP;
}; 
Kor-Angar commented 2 years ago

if(Npc_GetActiveSpellIsScroll(self) && (self.attribute[ATR_MANA] >= SPL_Cost_Scroll))

это код для НВ. в НВ проверять?

Kor-Angar commented 2 years ago

Spell_Logic_Firerain нету return SPL_RECEIVEINVEST;


исходя из прошлого опыта оно должно выглядеть как то так

func int Spell_Logic_Firerain(var int manaInvested)
{
// этот блок можны вынести в int функцию для всех подобных заклинаний что бы не повторяться.
// if (C_Spell_Logic_****(manaInvested, SPL_Cost_Firerain) == SPL_SENDSTOP)  { return SPL_SENDSTOP; };
// if (C_Spell_Logic_****(manaInvested, SPL_Cost_Firerain) == SPL_SENDCAST)  { return SPL_SENDCAST; };
    if (Npc_GetActiveSpellIsScroll(self))
    {
        if (self.attribute[ATR_MANA] < SPL_Cost_Scroll)
        && (manaInvested == 0)
        {
            return SPL_SENDSTOP;
        };
        if (manaInvested >= SPL_Cost_Scroll)
        {
            return SPL_SENDCAST;
        };
    };
    if (!Npc_GetActiveSpellIsScroll(self))
    {
        if (self.attribute[ATR_MANA] < SPL_Cost_Firerain)
        && (manaInvested == 0)
        {
            return SPL_SENDSTOP;
        };
        if (manaInvested >= SPL_Cost_Scroll)
        {
            return SPL_SENDCAST;
        };
    };

    if(manaInvested == 0)
    {
        manaInvested = 1;
        return SPL_NEXTLEVEL;
    };  

    return SPL_RECEIVEINVEST;
};

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

dosinabox commented 2 years ago

Усложняешь. Нам нужен только визуальный эффект при касте, не меняя механику. Для этого достаточно одного SPL_NEXTLEVEL при manaInvested == 0.

Kor-Angar commented 2 years ago

это я логическое мышление развиваю:-) в НВ проверять? в неоф. обновление? в классик?

dosinabox commented 2 years ago

в НВ проверять? в неоф. обновление? в классик?

Везде должно работать. Тогда для классики код немного другой:

func int Spell_Logic_Firerain(var int manaInvested)
{
    if(self.attribute[ATR_MANA] >= SPL_Cost_Firerain)
    {
        if(manaInvested == 0)
        {
            return SPL_NEXTLEVEL;
        };
        return SPL_SENDCAST;
    };
    return SPL_SENDSTOP;
}; 
Kor-Angar commented 2 years ago

в мод-классик работает. да и везде будет. я сразу не понял про какой именно эффект ты писала :-) https://www.youtube.com/watch?v=kv0jcz-aZ-E

у тебя и константа в классик оказывается есть :-) image

Kor-Angar commented 2 years ago

Помогло огненному дождю и телепорту. Волне смерти не помогло.

я бы увеличил для теста time_per_mana. возможно там всё так стримительно что то происходит и одно на другое накладывается или что то там еще. плюс надо проверятся с фиксом и без фикса на магию от Slavemaster

Kor-Angar commented 2 years ago

Может быть ещё и ледяную волну посмотреть и ещё какие то заклинания типа вызова. У них тоже вполне могут буть эффекты. Ило ты уже скрипты эффектов отсмотрела? :-) 19:44, 4 ноября 2022 г., dosinabox @.***>: Усложняешь. Нам нужен только визуальный эффект при касте, не меняя механику. Для этого достаточно одного SPL_NEXTLEVEL при manaInvested == 0.

—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: @.***> -- Отправлено из мобильного приложения Яндекс Почты

dosinabox commented 2 years ago

У призывов есть эффект землетрясения при касте, починить из скриптов не получилось. У некоторых остальных есть только небольшой источник света. Самое заметное и интересное - телепорты, огненный дождь, волна смерти. А запиши ещё сравнение лечения.

Kor-Angar commented 2 years ago

пиши пожалуйста версии. так как мы к ветке по классик и я не много теряюсь.

dosinabox commented 2 years ago

пиши пожалуйста версии. так как мы к ветке по классик и я не много теряюсь.

Варианты:

Kor-Angar commented 2 years ago

BorderlessWindow=1 ; ... включает оконный режим без рамки, - включено (1) или выключено (0), по-умолчанию: 0. ; рекомендуется включать только при возникновении проблем с работой игры в полноэкранном режиме.

G2Classic-SystemPack-1.8 G2Classic-SystemPack-1.8.zip

gothic2_fix-1.30.0.0 gothic2_fix-1.30.0.0.zip

Kor-Angar commented 2 years ago

трансляция. секретная ссылка https://youtu.be/QlRZs0yCXFk

dosinabox commented 2 years ago

достаточно один раз сделать SPL_NEXTLEVEL. собственно вот у тебя в начале оно и идёт :-)

if(manaInvested == 0)
{
  return SPL_NEXTLEVEL;
};

Подходит только телепортам и огненному дождю. Было установлено, что волна смерти, армия тьмы, превращения и лечения какое-то время "заряжаются" на уровне анимации. Экспериментально было установлено, что их нужно накачивать SPL_NEXTLEVEL до достижения manaInvested в 32. Интересно, зависит ли это число от количества кадров в секунду. Предлагаю тебе проверить у себя на движке 2.6, появятся ли эффекты:

Волна смерти:

func int Spell_Logic_Massdeath(var int manaInvested)
{
    Print(IntToString(manaInvested));
    if(manaInvested < 32)
    {
        return SPL_NEXTLEVEL;
    };
    if(Npc_GetActiveSpellIsScroll(self) && (self.attribute[ATR_MANA] >= SPL_Cost_Scroll))
    {
        return SPL_SENDCAST;
    }
    else if(self.attribute[ATR_MANA] >= SPL_Cost_MassDeath)
    {
        return SPL_SENDCAST;
    };
    return SPL_SENDSTOP;
};

Армия тьмы:

func int Spell_Logic_ArmyOfDarkness(var int manaInvested)
{
    Print(IntToString(manaInvested));
    if(manaInvested < 32)
    {
        return SPL_NEXTLEVEL;
    };
    if(Npc_GetActiveSpellIsScroll(self) && (self.attribute[ATR_MANA] >= SPL_Cost_Scroll))
    {
        return SPL_SENDCAST;
    }
    else if(self.attribute[ATR_MANA] >= SPL_Cost_ArmyOfDarkness)
    {
        return SPL_SENDCAST;
    };
    return SPL_SENDSTOP;
};

Превращения:

func int Spell_Logic_TrfSheep(var int manaInvested)
{
    Print(IntToString(manaInvested));
    if(manaInvested < 32)
    {
        return SPL_NEXTLEVEL;
    };
    if(self.attribute[ATR_MANA] >= SPL_Cost_TrfSheep)
    {
        B_StartMagicTransform();
        self.attribute[ATR_MANA] -= SPL_Cost_TrfSheep;
        Npc_SetActiveSpellInfo(self,SheepTransform);
        return SPL_SENDCAST;
    };
    return SPL_SENDSTOP;
};

Лечение:

func int Spell_Logic_FullHeal(var int manaInvested)
{
    Print(IntToString(manaInvested));
    if(manaInvested < 32)
    {
        return SPL_NEXTLEVEL;
    };
    if(Npc_GetActiveSpellIsScroll(self) && (self.attribute[ATR_MANA] >= SPL_Cost_Scroll))
    {
        return SPL_SENDCAST;
    }
    else if(self.attribute[ATR_MANA] >= SPL_Cost_FullHeal)
    {
        return SPL_SENDCAST;
    };
    return SPL_SENDSTOP;
};
Kor-Angar commented 2 years ago

хотел проверить эффект у заклинания. но не могу найти PfxInstMagic.

Kor-Angar commented 2 years ago

а я уже вот так пробовал :-) не сработало :-D Spell_ArmyOfDarkness.zip

dosinabox commented 2 years ago

хотел проверить эффект у заклинания. но не могу найти PfxInstMagic.

Это в PARTICLEFX.DAT: https://github.com/dosinabox/g2nr_unofficial_update/tree/master/PrjPARTICLEFX