dosinabox / g2nr_unofficial_update

Исходники скриптов, релизы, хотфиксы и тестовые версии неофициального обновления для игры "Готика 2: Ночь Ворона".
https://worldofplayers.ru/threads/36817
The Unlicense
13 stars 1 forks source link

сложность игры и свитки #267

Closed Kor-Angar closed 3 years ago

Kor-Angar commented 4 years ago

играю в Готику 2 классик и местами она конечно Готики 2 НВ. особенно на свитках это чувствуется. в связи с этим вопрос, а нельзя ли в неоф. обновление опционально сделать что бы свитки требовали столько же маны сколько требуют и руны? технически это возможно?

Было бы интересно поиграть с такими настройками и в плане баланса (усложнения игры) и в плане "конона".

dosinabox commented 4 years ago

Это не получится сделать настройкой. Только отдельные скрипты. И как быть со свитками превращения? У них ведь нет рун.

Kor-Angar commented 4 years ago

Это не получится сделать настройкой. Только отдельные скрипты.

жаль

И как быть со свитками превращения? У них ведь нет рун.

посмотреть на стоимость в Готике 2 Классик

Kor-Angar commented 4 years ago


image

Kor-Angar commented 4 years ago

посмотреть на стоимость в Готике 2 Классик

Хотя расоход маны в Готике 2 классик ниже в 2-3 раза относительно Готики 2 НВ. поэтому наверное необходимое кол-во маны на свиток превращения можно увеличить. Например

  Готика 2 классик Готика 2 НВ Готика 2 НВ Готика 2 НВ
  _ Варинат 1 Варинат 2 Варинат 3
простые 5 маны 10 10 15
средния 10 маны 20 25 30
сложные 15 маны 30 45 50
KlingenGrossmeister commented 4 years ago

Третий вариант самый нормальный - заставит во второй главе обзавестись в Яркендаре бижутерией, либо бегать и собирать грибы, либо попытаться собрать хотя бы 10 старых каменных таблиц. Плюс нет возможности зачистить полХориниса варгом, огненным вараном и драконьим снеппером.

Kor-Angar commented 4 years ago

Третий вариант мягко говоря драконовский по расценкам :-) и герой наверное в первой главе 50 маны без прокачки не наберёт. Можно начать например с первого варианта, поиграть, а потом если что еще усложнить.

Kor-Angar commented 4 years ago

Это не получится сделать настройкой.

а если в файлы Spell_ххх.d добавить проверку на опцию xxxMode ?

если опция выключена цена идёт свитка, а если опция включена, то цена идёт единая и для свитка и для руны). На примере огненного дождя.

func int Spell_Logic_Firerain(var int manaInvested)
{
    if(Npc_GetActiveSpellIsScroll(self) && (self.attribute[ATR_MANA] >= SPL_Cost_Scroll) && (xxxMode == False))
    {
        return SPL_SENDCAST;
    }
    else if(self.attribute[ATR_MANA] >= SPL_Cost_Firerain)
    {
        return SPL_SENDCAST;
    }
    else
    {
        return SPL_SENDSTOP;
    };
};

func void Spell_Cast_Firerain()
{
    if((Npc_GetActiveSpellIsScroll(self))&& (xxxMode == False))
    {
        self.attribute[ATR_MANA] -= SPL_Cost_Scroll;
    }
    else
    {
        self.attribute[ATR_MANA] -= SPL_Cost_Firerain;
    };
    self.aivar[AIV_SelectSpell] += 1;
};

попробовал у себя, вроде скрипт сработал.

dosinabox commented 4 years ago

Это да, но как быть с описаниями свитков? У них всегда будет написано 5 маны, потому что эти значения - константы и записываются прямо в свойства созданных предметов.

Kor-Angar commented 4 years ago

пока это можно реализовать в тестовой версии: потестить, подумать, посмотреть. а там уже и видно как говорится будет :-)

Kor-Angar commented 4 years ago

смотри какая смешная проверка :-)

if((Npc_GetActiveSpellIsScroll(self) && (self.attribute[ATR_MANA] >= SPL_Cost_Scroll)) || (self.attribute[ATR_MANA] >= SPL_Cost_TrfSheep))
Kor-Angar commented 4 years ago

расходы маны на "забыть"(SPL_Cost_Charm) можно сделать такой же как и у сна 30.

сейчас SPL_Cost_Charm = 50 :-) при том что руны то нет :-))

Kor-Angar commented 4 years ago

гм... а в g2mdk-2.6 расход маны на свитки превращения стоит 10... а у Акеллы точно 5?

// *********************
// Alle Transform Spells
// *********************

const int SPL_Cost_TrfSheep         = 10;
const int SPL_Cost_TrfScavenger     = 10;
const int SPL_Cost_TrfGiantRat      = 10;
const int SPL_Cost_TrfGiantBug      = 10;
const int SPL_Cost_TrfWolf          = 10;

const int SPL_Cost_TrfLurker                = 10;
const int SPL_Cost_TrfSnapper       = 10;
const int SPL_Cost_TrfWaran         = 10;
const int SPL_Cost_TrfWarg          = 10;

const int SPL_Cost_TrfFireWaran     = 10;
const int SPL_Cost_TrfShadowbeast   = 10;
const int SPL_Cost_TrfDragonSnapper = 10;
UnresolvedExternal commented 4 years ago

Это да, но как быть с описаниями свитков? У них всегда будет написано 5 маны, потому что эти значения - константы и записываются прямо в свойства созданных предметов.

Что мешает записать туда результат вызова функции? Правда уже созданные свитки обновятся только после перезагрузки сейва.

dosinabox commented 4 years ago

На примере огненного дождя.

У заклинаний превращения нет SpellCast*.

Что мешает записать туда результат вызова функции?

Ничего, но если всё это только для теста, то проще просто изменить существующие константы.

dosinabox commented 4 years ago

гм... а в g2mdk-2.6 расход маны на свитки превращения стоит 10... а у Акеллы точно 5?

5 - стандартное требование маны для свитков (SPL_Cost_Scroll). 10 - требования для заклинаний превращения (SPL_Cost_Trf*). В игре они не используются, потому что рун превращения нет.

Kor-Angar commented 4 years ago

10 - требования для заклинаний превращения (SPL_Cost_Trf*). В игре они не используются, потому что рун превращения нет.

давай я просто опубликую код из g2mdk-2.6, что бы мы не множили сущности:-)

// *********************
// Alle Transform Spells
// *********************

const int SPL_Cost_TrfSheep         = 10;
const int SPL_Cost_TrfScavenger     = 10;
const int SPL_Cost_TrfGiantRat      = 10;
const int SPL_Cost_TrfGiantBug      = 10;
const int SPL_Cost_TrfWolf          = 10;
const int SPL_Cost_TrfWaran         = 10;
const int SPL_Cost_TrfSnapper       = 10;
const int SPL_Cost_TrfWarg          = 10;
const int SPL_Cost_TrfFireWaran     = 10;
const int SPL_Cost_TrfLurker        = 10;
const int SPL_Cost_TrfShadowbeast   = 10;
const int SPL_Cost_TrfDragonSnapper = 10;

// ------ Instanz fьr alle Transform-Sprьche ------
INSTANCE Spell_Transform (C_Spell_Proto)
{
    time_per_mana           = 0;
    spelltype               = SPELL_NEUTRAL;
    targetCollectAlgo       = TARGET_COLLECT_NONE;
    canTurnDuringInvest     = 0;
};

// ------ Schaf ------
func int Spell_Logic_TrfSheep (var int manaInvested)
{
    if ((Npc_GetActiveSpellIsScroll(self) && (self.attribute[ATR_MANA] >= SPL_Cost_Scroll)))
    || (self.attribute[ATR_MANA] >= SPL_Cost_TrfSheep)
    {
        self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_Cost_TrfSheep;

        Npc_SetActiveSpellInfo(self, Sheep);
        return SPL_SENDCAST;
    }
    else
    {
        return SPL_SENDSTOP;
    };
};

мы видим что в оригинальных скриптах заклинания превращения фактически отнимают 10 маны, т.к. в них не используется "SPL_Cost_Scroll". в этих скриптах такая же история https://github.com/dosinabox/g2nr_unofficial_update/blob/d6a0bc1ecebbb3aad43ba9278a9a11820a3ca03f/PrjGOTHIC/AI/Magic/Spells/Spell_Transform.d#L36 только значение SPL_Cost_Trf** изменено с 10 до 5.

dosinabox commented 4 years ago

Какое-то старое изменение. Одно из первых.

Исправлены несоответствия в стоимости использования заклинаний превращения (взято из DNdR Script Patch).

Kor-Angar commented 4 years ago

Привет. Так получится добавить опционально в тестовой версии? :)

dosinabox commented 4 years ago

Привет, завтра сделаю. Определись с вариантом.

Kor-Angar commented 4 years ago

Определись с вариантом.

если про свитки превращения то "вариант 2"

// *********************
// Alle Transform Spells
// *********************

const int SPL_Cost_TrfSheep         = 10;
const int SPL_Cost_TrfScavenger     = 10;
const int SPL_Cost_TrfGiantRat      = 10;
const int SPL_Cost_TrfGiantBug      = 10;
const int SPL_Cost_TrfWolf          = 10;

const int SPL_Cost_TrfLurker                = 25;
const int SPL_Cost_TrfSnapper       = 25;
const int SPL_Cost_TrfWaran         = 25;
const int SPL_Cost_TrfWarg          = 25;

const int SPL_Cost_TrfFireWaran     = 45;
const int SPL_Cost_TrfShadowbeast   = 45;
const int SPL_Cost_TrfDragonSnapper = 45;
dosinabox commented 4 years ago

Вот: https://dropmefiles.com/vyWpH

Если нужно, меняй в свежих скриптах эти константы, свитки теперь используют именно их:

const int SPL_Cost_TrfSheep = 5;
const int SPL_Cost_TrfScavenger = 5;
const int SPL_Cost_TrfGiantRat = 5;
const int SPL_Cost_TrfGiantBug = 5;
const int SPL_Cost_TrfWolf = 5;
const int SPL_Cost_TrfWaran = 5;
const int SPL_Cost_TrfSnapper = 5;
const int SPL_Cost_TrfWarg = 5;
const int SPL_Cost_TrfFireWaran = 5;
const int SPL_Cost_TrfLurker = 5;
const int SPL_Cost_TrfShadowbeast = 5;
const int SPL_Cost_TrfDragonSnapper = 5;
Kor-Angar commented 4 years ago

а как включить?

image

dosinabox commented 4 years ago

уже включено - константы изменены

Kor-Angar commented 4 years ago

А огненный дождь 5 маны отнимает 😀

Kor-Angar commented 4 years ago

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

Для этого мною было предложено ввести переменную, что бы это можно протестировать, сравнить, понять целесообразность, определить узкие моменты и прочее.

у тебя же почему то всё это свелось к свиткам превращения :-(

dosinabox commented 4 years ago

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

Kor-Angar commented 4 years ago

Ясно. Надо поспать 😀

Kor-Angar commented 3 years ago

поиграл я сегодня с правками на свитки. пока впечатления исключительно положительные. в начале игры герой ограничен в свитках и не может воспользоваться даже свитком заморозки. что бы его задействовать без прокачки маны за ЛП надо одеть два кольца и найти первые 50 грибов :-) в тоже время если герой планирует идти в маги и в начале игры готов вкладывать ЛП в ману получает наоборот на старте бонус: можно свитки использовать :-) ну и конечно же ни о каких огненных дождях в первой главе и речи не может идти :-)

Kor-Angar commented 3 years ago

сделал у себя константы в IT_Scrolls.d

const int SPL_SC_Cost_PalLight = 5;
const int SPL_SC_Cost_PalLightHeal = 5;
const int SPL_SC_Cost_PalHolyBolt = 5;

сделал func void SPL_SC_Cost которая меняла бы стоимость

func void SPL_SC_Cost()
{   
    if (ScrollMode == True)
    {
        SPL_SC_Cost_PalLight =  SPL_Cost_PalLight ;
        SPL_SC_Cost_PalLightHeal =  SPL_Cost_PalLightHeal ;
        SPL_SC_Cost_PalHolyBolt =   SPL_Cost_PalHolyBolt ;
    }
    else
    {
        SPL_SC_Cost_PalLight =  SPL_Cost_Scroll ;
        SPL_SC_Cost_PalLightHeal =  SPL_Cost_Scroll ;
        SPL_SC_Cost_PalHolyBolt =   SPL_Cost_Scroll ;
    };
};

подскажите пожалуйста куда лучше воткнуть вызов SPL_SC_Cost();

а то у меня ума нет и я её в SleepABit.d засунул, что наверное не очень правильно :-) хотя и работает :-)

dosinabox commented 3 years ago

сделал у себя константы в IT_Scrolls.d

Суть констант в том, что они определяются только один раз и дальше только используются без переопределений. Поэтому здесь нужны не const, а var. И изначально без определений, они будут позже:

var int SPL_SC_Cost_PalLight;
var int SPL_SC_Cost_PalLightHeal;
var int SPL_SC_Cost_PalHolyBolt;

подскажите пожалуйста куда лучше воткнуть вызов

У меня есть функция B_CheckDynamicText(), которая вызывается при каждой инициализации каждого мира (при переходе из другого или при загрузке сохранения). Добавляй свой код туда.

Kor-Angar commented 3 years ago

в итоге вызов SPL_SC_Cost() добавил в Startup.d под B_CheckDynamicText(),

Поэтому здесь нужны не const, а var

спасибо!

dosinabox commented 3 years ago

Заметь, что добавлять нужно четыре раза: в init каждого мира.

Kor-Angar commented 3 years ago

угу, я через поиск так сказать :-) вот только при старте игры не отображается на свитках сколько надо маны. image приходится сохранить игру, а потом загрузить. но я думаю в процессе осознаю что не так :-)

Kor-Angar commented 3 years ago

кстати а что это заклинание лечения нельзя произнести если жизни полные? :-)

dosinabox commented 3 years ago

кстати а что это заклинание лечения нельзя произнести если жизни полные? :-)

а зачем? в Г1 тоже нельзя.

Kor-Angar commented 3 years ago

в 4 главе у ледяного дракона у силовика ОнД маны не хватило на то что бы задействовать огненный дождь. видимо оттого что ОНД не получал бонус к мане за молитву + у меня не было амулету на ману (но был посох) + я не покупал эликсиры к мане.

в целом вот это действительно способно усложнить игру :-) не виртуально, а реально. при этом баланс то Пираней. и идея Пираней. и концепция тоже Пираней. и главное что теперь понятно, что никакой там левый НПС не может гипотетически просто взять свиток и что то там сделать. так как у него маны просто не хватит.. даже на банальный ледяной блок :-)


кстати а что это заклинание лечения нельзя произнести если жизни полные? :-)

а зачем? в Г1 тоже нельзя.

в Готике 1 у исцеления другая механика ;-)