Странно смотрится: фэнтезя-фэнтезей, но есть бункер и ядерный удар.
После увиденного у меня один вопрос, а автор тестил свое демо? Потому что нельзя совершить такие очевидные ошибки, если ты играл в свое детище.
Которое при этом всего на минут 20 от силы, но столько косяков.
Спойлер Баг на баге:

1. Самое первое, что бросается в глаза: город, герой и хз что делать. Кто он в этом городе, зачем он сюда пришел и т.д. и т.п. Я люблю минимализм, но это уже перебор. Какая-то цель должна быть поставлена в игре сразу или нет? Надо все методом тыка проверять.
2. Из первого выходит вторая ошибка. НПС при касании героя начинают диалог. Чуть задел и снова текст. Так несколько раз в меня тыкалась какая-то девочка, задолбав своим диалогом. Зачем это сделано? Если я захочу поговорить с НПС я сам к нему подойду и нажму кнопку.
3. НПС перед бункером, который "шиндеру", опять же зачем он? Какой в нем смысл?
4. Часы отсчета в самом бункере улезают вправо за экран.
Спойлер Часы улетели:



5. После взрыва, экран проявляется до того, как герой портанется на другую карту. И видно этот телепорт. Неужели нельзя было сделать проявление экрана после тп? Ну криво же смотрится, некрасиво.
Спойлер С кем он говорит?:

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


6. При возвращении назад в бункер, вся еда восстанавливается. Я даже знаю причину, телепорт не перенастроен на новую карту бункера. Правильно, а зачем возвращаться?
7. А затем, что я хотел отдохнуть после боя с монстрами. Но все 4 кровати оказались неюзабельны.
8. Звук трещания сопровождает чуть ли не на каждой карте. И в бункере трещит и на мировой карте. Уши режет.
9. Это чисто мой бзик, но как же бесят меня энкаунтеры. Это прошлый век, наследие старых игр, когда из-за слабых мощностей приходилось так поступать. Сейчас в чем проблема сделать врагов видимыми на карте?
10. В сундуке 3 противоядия, а не стимулятора.
Спойлер Сундук врет!:



11. За все демо была только одна банка на хп, при этом герои шли по лужам отнимающим хп, сражались с врагами. И ни у кого нет магии хила. Зачем им здоровье?
12. И наконец, вишенка на торте. Как пройти в это место? Я не особо предвзят к маппингу, хотя к нему можно прицепится очень конкретно, но как это можно было сделать?
Спойлер Как добраться до лестницы?:



13. А это уже либо в шрифте нет нужных символов, либо стандартный баг эйса.
Спойлер Квадраты:


Спойлер Скрипт на удаление квадратов:

#================================================= ==============================================
# Text Cache & Custom Font Junk Symbol Fix
# Авторы: Mithran & Lone Wolf
# Версия: 1.0
# Тип: Исправление багов
# Описание:
# Исправляет кривое отображение текста и заменяет "квадратики" на пробелы.
# Особенности:
# Исправляет кривое отображение текст
# Кэширует текстовые данные, улучшая производительность
#================================================= ==============================================
class Bitmap
TEXT_TOP_BUFFER = 2
TEXT_SIDE_BUFFER = 8 # buffer in pixels to draw text away from
# the edge of the bitmap, to prevent certain characters from being cut off
SIMPLE_FIX = false # just adds the two pixels to prevent unnecessary squeeze
MAX_TEXT_DRAW_WIDTH = 640 # tests have shown the draw fails at around 640px
# if nil, no max width
NO_FIX = false # completely disables the fix, for testing comparison


alias draw_text_vxa draw_text
def draw_text(*args)
return draw_text_vxa(*args) if NO_FIX
if args[0].is_a?(Rect)
rect = args[0]
x, y, width, height = rect.x, rect.y, rect.width, rect.height
text = args[1].to_s.clone || ""
align = args[2] || 0
else
x, y, width, height = *args[0..3]
text = args[4].to_s.clone || ""
align = args[5] || 0
end
text_rect = self.text_size(text)
text_width = text_rect.width
text_height = text_rect.height
squeeze = text_width > width
if SIMPLE_FIX or (squeeze and (MAX_TEXT_DRAW_WIDTH and width <= MAX_TEXT_DRAW_WIDTH))
x -= align
# shift one pixels to the left if centering
# two if right right justified
# to offset the extra width given
return draw_text_vxa(x, y, width + 2, height, text, align)
else
# TextCache.canvas(font) # passing the font slows this down extremly, changed it to later
fontkey = self.font.to_a
case align
when 1; x += (width - text_width) / 2
when 2; x += width - text_width
end
y += (height - text_height) / 2 # horizontal center
buf = -TEXT_SIDE_BUFFER
text.each_char { |char|
letter = TextCache.letters(fontkey, char)
draw_text_vxa(x + buf, y, letter.rect.width + 2, letter.height, char) if SIMPLE_FIX
# swap with original method for debugging and simple fix
self.blt(x + buf, y, letter, letter.rect) unless SIMPLE_FIX
buf += letter.rect.width - TEXT_SIDE_BUFFER * 2
}
end
end
end

module TextCache
BUFFER_DRAW = 300 # for drawing characters, to make sure there is enough room

def self.canvas(font = nil)
@canvas = Bitmap.new(32, 32) if @canvas.nil? || @canvas.disposed?
#@canvas.font = font if font and font != @canvas.font
@canvas
end

def self.letters(font, char)
@cache ||= {}
key = font + [char]
if include?(key)
return @cache[key]
elsif char.empty?
return empty_bitmap
else
return new_letter(font, char)
end
end

def self.empty_bitmap # not used, added for completness in case the cache is accessed directly
@cache[:empty] = Bitmap.new(32, 32) unless include?(:empty)
@cache[:empty]
end

def self.new_letter(fontary, char)
font = create_font(fontary)
# get the font
canvas.font = font
rect = canvas.text_size(char * 3)
# get size of character between two other characters (for better kerning)
b = Bitmap.new((rect.width / 3) + Bitmap::TEXT_SIDE_BUFFER * 2, rect.height)
# create bitmap just big enough for one character
b.font = font
# get the font
b.draw_text_vxa(rect.x - b.text_size(" ").width + Bitmap::TEXT_SIDE_BUFFER, rect.y - Bitmap::TEXT_TOP_BUFFER, BUFFER_DRAW, rect.height + Bitmap::TEXT_TOP_BUFFER * 2, " #{char} ", 0)
# draw blank spaces before and after character, fix for cutting off the
# first pixel using draw_text
key = fontary + [char]
@cache[key] = b
end

def self.create_font(fontary)
font = Font.new(*fontary[0..1])
font.bold = fontary[2]
font.italic = fontary[3]
font.outline = fontary[4]
font.shadow = fontary[5]
font.color.set(*fontary[6..9])
font.out_color.set(*fontary[10..13])
font
end


def self.include?(key)
@cache[key] && !@cache[key].disposed?
end

def self.clear
@cache ||= {}
@cache.clear
GC.start
end

end

class Window_Base
alias rocess_normal_character_vxa rocess_normal_character
def process_normal_character(c, pos)
return unless c >= ' '
process_normal_character_vxa(c, pos)
end
end

class Font
# font's instance variables are not reflective, so this has to be defined explicitly
def to_a
[name, size, bold, italic, outline, shadow, color.red, color.green, color.blue, color.alpha, out_color.red, out_color.green, out_color.blue, out_color.alpha]
end

end