Добавлен Clamp,
опубликован
Процесс разработки
Содержание:
Быть может, кто-то из тех, кто уже заметил появление нового проекта, задался вопросом "почему "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 очков герой бесславно умирает.
А теперь надо добавить определение, на какой диапазон переключился показатель зараженности и переключился ли вообще. Стоит помнить, что есть минимальное значение и фактически нету максимального, просто при пересечении планки в 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[]
Содержание
`
ОЖИДАНИЕ РЕКЛАМЫ...
Комментарии пока отсутcтвуют.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.