Процесс разработки

Содержание:
Быть может, кто-то из тех, кто уже заметил появление нового проекта, задался вопросом "почему "Plague"? Что это такое и как оно связано с картой?" Независимо от того, возникал этот вопрос или нет, я на него отвечу.

Во-первых, таким название стало далеко не сразу. Сначала, когда я ещё только раздумывал над проектом, он носил кодовое имя "survivors", потом, ближе к началу работы я называл его "Infection". Совсем не банальные названия, не находите? Вот и мне пришла именно такая мысль, в результате чего я задумался и решил, что называться карта будет "Plague", по-русски - "Чума".
Естественно, название не высосано из пальца, оно отражает как общую атмосферу игры, так и важный элемент геймплея. Дело в том, что во время игры игрок постоянно будет рисковать заразиться этой самой чумой, и чем сильнее будет болезнь, тем тяжелее игроку будет действовать дальше. Нет, чума не убивает игрока, она даже не наносит ему урона или травм, если совсем уж не запустить, но снижает, причем значительно, его показатели.
Самые внимательные уже, наверное, соотнесли этот показатель с показателем радиации в Fallout. Да, это действительно аналог лучевой болезни из великой пост-ядерной дилогии, хотя всё же некоторые отличия имеют место быть. Во-первых, если игрок имеет хотя бы одно очко инфекции, то периодически этот показательно увеличивается независимо от того, угрожает инфекция игроку в данный момент или нет. Во-вторых, не всегда быть чистым от чумы будет выгодно - иногда может оказаться так, что из-за зависти к вашему здоровью какой-нибудь зомби нападет вместо того, чтобы дать квест. Ну и в-третьих, чем сильнее эффект болезни, тем больший эффект оказывают на игрока зелья и заклинания. Хотя тут есть и обратная сторона: шанс привыкания к зельям тоже заметно возрастает, как и негативный эффект после применения.
Впрочем, эти зависимости пишутся отдельно, в этих самых квестах и системах зелий/заклинаний, а сегодня я хотел бы просто разобрать то, как я описал саму систему хранения, начисления и влияния на характеристики этой самой чумы.
Для начала я обрисовал, что мне нужно: хранить текущее значение, то, в каком диапазоне оно лежит, эти самые диапазоны, их количество и названия.
    private int             PlagueLevelMax = 0
    private int     array   PlagueLevel
    private string  array   PlagueLevelName
    private int             PlagueLevelCurrent = 0
заполняем уровни инфекции
    private void init_levels_assistant(string name, int Plague)
    {
        PlagueLevelName  [PlagueLevelMax] = name
        PlagueLevel      [PlagueLevelMax] = Plague
        PlagueLevelMax   ++
    }

    private void init_levels()
    {
        init_levels_assistant("Neither",    0)      //0-199
        init_levels_assistant("Initial",    200)    //200-399
        init_levels_assistant("Progressive",400)    //400-599
        init_levels_assistant("Critical",   600)    //600-799
        init_levels_assistant("Deadly",     800)    //800-999
        init_levels_assistant("Lethal",     1000)   //1000
        init_levels_assistant("Lethal",     9001)   //ввиду некоторых особенностей определяющей функции
        PlagueLevelMax   --
    }
Таким образом мы запоминаем название каждого диапазона и получаем возможность к ним обращаться, используя индекс.
А теперь надо добавить определение, на какой диапазон переключился показатель зараженности и переключился ли вообще. Стоит помнить, что есть минимальное значение и фактически нету максимального, просто при пересечении планки в 1000 очков герой бесславно умирает.
код
lib Plague init Init uses Print, StatIncludes, Death
{
    private int             PlagueLevelMax = 0      //0~6
    private string  array   PlagueLevelName
    private int     array   PlagueLevel             //0~9000
    private int             PlagueInfection = 0     //0~9000

    private void InfectionEffects(int old, int new)
    {
        if(old == 1)
        {
            Stat[2] = Stat[2]+1
        }
        elseif(old == 2)
        {
            Stat[2] = Stat[2]+2
            Stat[5] = Stat[5]+1
        }
        elseif(old == 3)
        {
            Stat[0] = Stat[0]+1
            Stat[2] = Stat[2]+3
            Stat[5] = Stat[5]+2
        }
        elseif(old == 4)
        {
            Stat[0] = Stat[0]+2
            Stat[2] = Stat[2]+3
            Stat[5] = Stat[5]+2
        }
        if(new == 1)
        {
            Stat[2] = Stat[2]-1
        }
        elseif(new == 2)
        {
            Stat[2] = Stat[2]-2
            Stat[5] = Stat[5]-1
        }
        elseif(new == 3)
        {
            Stat[0] = Stat[0]-1
            Stat[2] = Stat[2]-3
            Stat[5] = Stat[5]-2
        }
        elseif(new == 4)
        {
            Stat[0] = Stat[0]-2
            Stat[2] = Stat[2]-3
            Stat[5] = Stat[5]-2
        }
        elseif(new == 5)
        {
            HeroDead(1)
        }
    }

    private void ChangeInfection(int howmany)
    {
        int cur = PlagueInfection
        int new = PlagueInfection + howmany
        int i = 0
        int j = 0
        PlagueInfection = iborder(PlagueLevel[0],new,PlagueLevel[PlagueLevelMax])
        loop
        {
            if((cur >= PlagueLevel[i]) && (cur < PlagueLevel[i+1]))
            {
                loop
                {
                    if((new >= PlagueLevel[j]) && (new < PlagueLevel[j+1]))
                    {
                        if(i != j)
                        {
                            InfectionEffects(PlagueLevelCurrent, j)
                            PlagueLevelCurrent = j
                            AddLog("Now your level of infection is assessed as \"" + CRed(PlagueLevelName[j]) + "\"")
                            break
                        }
                        break
                    }
                    j++
                    stop j == PlagueLevelMax
                }
            }
            i++
            stop i == PlagueLevelMax
        }
    }

    void AddPlague(int howmany)
    {
        ChangeInfection(howmany)
    }

    private void init_levels_assistant(string name, int Plague)
    {
        PlagueLevelName  [PlagueLevelMax] = name
        PlagueLevel      [PlagueLevelMax] = Plague
        PlagueLevelMax   ++
    }

    private void init_levels()
    {
        init_levels_assistant("Neither",    0)      //0-199
        init_levels_assistant("Initial",    200)    //200-399
        init_levels_assistant("Progressive",400)    //400-599
        init_levels_assistant("Critical",   600)    //600-799
        init_levels_assistant("Deadly",     800)    //800-999
        init_levels_assistant("Lethal",     1000)   //1000
        init_levels_assistant("Lethal",     9001)   //over9000
        PlagueLevelMax   --
    }

    private void Init()
    {
        init_levels()
    }
}
Подключаемые библиотеки я распишу позже, равно как и что есть что в переменных Stat[]

`
ОЖИДАНИЕ РЕКЛАМЫ...