Механизм случайных событий.
Добавлено: 06 фев 2012, 16:42
Есть такая проблема в современных играх, как "дикий рэндом".
Например, учёные могут обнаружить звезду, планету, или может произойти какое-то случайное событие, но если игрок начнёт с сейва, сохранённого ходом ранее, то этого скорее всего не произойдёт и может не произойти и 50 ходов и 100 и более. Казалось бы, если астрономы туда смотрят, работают так сказать в этом направлении, то они уже на пороге открытия. Откроют эту звезду не сегодня так завтра. Да и случайному событию есть какие-то предпосылки. Но нет.
Вот это, убивает реалистичность и бесит игрока гораздо сильнее чем строительство поселенца 200 лет. Строительство поселенца 200 лет, это игровые условности, которые принимаются как данность и уже не замечаются, а вот когда происходит нечто подобное со случайными событиями, игрок сразу понимает, что его жестоко надувают. Никакие учёные не заняты поиском звёзд и планет, и к случайному событию никаких предпосылок тоже не было. Просто формула рэндома сработала, выпало на кубиках так, а могло и не выпасть.
Во первых, это убивает атмосферу игры. Если игрок вжился во вселенную и процесс, это его за шкирку оттуда достаёт.
Во вторых, это порождает сейв/лоад. Игрок начинает с сейва, и переигрывает переход хода многократно, пока не произойдёт нужное событие. Оффтоп
Так как решить эту проблему?
Обычно, для этого используется bool переменная (true/false - Видим/Невидим - Произошло/Не произошло).
Так вот что я предлагаю. Я предлагаю использовать не bool переменную, а byte. И значения от 0 до 254 будут означать невидима, а значение 255 - видима (произошло/не произошло).
При этом, каждый ход по какой-то там формуле вычисляется (рэндомно) возможность обнаружения звезды, и если сработала эта вероятность, мы добавляем единичку (где-то может и больше). Так этот параметр накапливается, а по достижении 244, включается счётчик, который каждый ход добавляет единичку уже независимо ни от чего. Тогда такой ситуации как я описал выше уже не возникнет.
Если игрок начнёт с ближайшего сейва, то он всё равно обнаружит в этот же ход звезду. А если с более далёкого, ну всё равно, где-то в этом районе (по времени) она будет обнаружена. И чем дальше от этого момента, тем больше могут быть отличия, хотя всё равно такого дикого рэндома уже не будет.
И игрок будет вживаться в мир игры. Будет понимать что его учёные изучают, его телескопы ищут, и процесс идёт, данные накапливаются, а по достижении какого-то момента уже нужно лишь обобщить эти данные и всё готово. "МЫ ОТКРЫЛИ НЕОБЫЧНУЮ ЗВЕЗДУ! Она появляется каждый месяц семнадцатого числа, а двадцатого числа исчезает!!!"
Примерно так.
Оффтоп
Например, учёные могут обнаружить звезду, планету, или может произойти какое-то случайное событие, но если игрок начнёт с сейва, сохранённого ходом ранее, то этого скорее всего не произойдёт и может не произойти и 50 ходов и 100 и более. Казалось бы, если астрономы туда смотрят, работают так сказать в этом направлении, то они уже на пороге открытия. Откроют эту звезду не сегодня так завтра. Да и случайному событию есть какие-то предпосылки. Но нет.
Вот это, убивает реалистичность и бесит игрока гораздо сильнее чем строительство поселенца 200 лет. Строительство поселенца 200 лет, это игровые условности, которые принимаются как данность и уже не замечаются, а вот когда происходит нечто подобное со случайными событиями, игрок сразу понимает, что его жестоко надувают. Никакие учёные не заняты поиском звёзд и планет, и к случайному событию никаких предпосылок тоже не было. Просто формула рэндома сработала, выпало на кубиках так, а могло и не выпасть.
Во первых, это убивает атмосферу игры. Если игрок вжился во вселенную и процесс, это его за шкирку оттуда достаёт.
Во вторых, это порождает сейв/лоад. Игрок начинает с сейва, и переигрывает переход хода многократно, пока не произойдёт нужное событие. Оффтоп
Так как решить эту проблему?
Обычно, для этого используется bool переменная (true/false - Видим/Невидим - Произошло/Не произошло).
Так вот что я предлагаю. Я предлагаю использовать не bool переменную, а byte. И значения от 0 до 254 будут означать невидима, а значение 255 - видима (произошло/не произошло).
При этом, каждый ход по какой-то там формуле вычисляется (рэндомно) возможность обнаружения звезды, и если сработала эта вероятность, мы добавляем единичку (где-то может и больше). Так этот параметр накапливается, а по достижении 244, включается счётчик, который каждый ход добавляет единичку уже независимо ни от чего. Тогда такой ситуации как я описал выше уже не возникнет.
Если игрок начнёт с ближайшего сейва, то он всё равно обнаружит в этот же ход звезду. А если с более далёкого, ну всё равно, где-то в этом районе (по времени) она будет обнаружена. И чем дальше от этого момента, тем больше могут быть отличия, хотя всё равно такого дикого рэндома уже не будет.
И игрок будет вживаться в мир игры. Будет понимать что его учёные изучают, его телескопы ищут, и процесс идёт, данные накапливаются, а по достижении какого-то момента уже нужно лишь обобщить эти данные и всё готово. "МЫ ОТКРЫЛИ НЕОБЫЧНУЮ ЗВЕЗДУ! Она появляется каждый месяц семнадцатого числа, а двадцатого числа исчезает!!!"
Примерно так.
Оффтоп