9го дня был на лекции от создателей игры Василиса и Баба Яга. Прям чего-то нового не услышал, но смог лично сказать девчонкам, что графика у них получается очень крутая. Трейлер в VK.
И еще раз утвердился в мысли, что интересные (нестандартные) проекты получаются у людей, которые имеют необычный бекграунд. То есть какой-то значительный опыт не из сферы геймдева. В данном случае - работа книжным иллюстратором, организация художественных постановок в театре кукол. Таким образом у этой творческой команды, создание игры - это дополнительный инструмент для самовыражения. А среди инди проектов этого года можно ожидать звездочку, которая будет светить вместе с другими, но мерцать чуть по-своему.
Игра на Steam
И еще раз утвердился в мысли, что интересные (нестандартные) проекты получаются у людей, которые имеют необычный бекграунд. То есть какой-то значительный опыт не из сферы геймдева. В данном случае - работа книжным иллюстратором, организация художественных постановок в театре кукол. Таким образом у этой творческой команды, создание игры - это дополнительный инструмент для самовыражения. А среди инди проектов этого года можно ожидать звездочку, которая будет светить вместе с другими, но мерцать чуть по-своему.
Игра на Steam
Telegram
Baba Yaga Games | Василиса и Баба Яга
Инди-студия из Санкт-Петербурга
Группа ВК: https://vk.com/babayaga_games
Добавь игру в вишлист, это чертовски важно для нас!
Steam: https://store.steampowered.com/app/3969610/Job_Fit_For_a_Devil
VK Play: https://vkplay.ru/play/game/chertova-sluzhba/
Группа ВК: https://vk.com/babayaga_games
Добавь игру в вишлист, это чертовски важно для нас!
Steam: https://store.steampowered.com/app/3969610/Job_Fit_For_a_Devil
VK Play: https://vkplay.ru/play/game/chertova-sluzhba/
❤5👍1
Как-то сталкивался с ситуацией, что некоторые даже сильно опытные разработчики не могли ответить на вопрос “Что такое .Net?”. Думаю дело тут в том, что многие привыкнув работать на уровне игр\приложений не задумываются на чем оно строится и за счёт чего работает. Пробежимся, краткая сводка, буквально на 30 секунд.
.Net - это платформа, которая позволяет писать, компилировать код и запускать приложения, написанные на C# и других языках. Содержит совокупность ресурсов отладки, набор программ для запуска приложений на разных платформах.
Раскроем:
- Поддержка языков программирования - C#, F#, Visual Basic, IL ассемблер
- Обширные библиотеки классов, основные из них можно перечислить:
- Компилятор на базе Roslyn, это опенсорс платформа, разрабатываемая Microsoft, что в ней для нас важного: компиляторы и средства для анализа кода.
- Компилятор - переводит исходный код ЯП в промежуточный IL-код и наборы метаданных. Затем IL-код будет выполняться в CLR.
- Различные фичи наподобие проверки синтаксиса и предложения по исправлению кода реализуются как раз за счёт использования Roslyn.
- Основная ягодка .Net - это CLR (Common Language Runtime), неотъемлемая часть платформы, в неё входит:
- Загрузчик сборок
- Функционал обработки исключений
- Управление потоками
- Управление памятью
- Сборщик мусора
- Механизм контроля совместимости типов
- JIT-компилятор (Just-in-Time), который работает с IL кодом и переводит его в исполняемый машинный код.
#техничка
@cat_and_code
.Net - это платформа, которая позволяет писать, компилировать код и запускать приложения, написанные на C# и других языках. Содержит совокупность ресурсов отладки, набор программ для запуска приложений на разных платформах.
Раскроем:
- Поддержка языков программирования - C#, F#, Visual Basic, IL ассемблер
- Обширные библиотеки классов, основные из них можно перечислить:
System, System.Collections, System.IO, System.Net, System.Linq, System.Threading. По этим неймспейсам вполне можно понять, что в них и что мы привыкли использовать как должное.- Компилятор на базе Roslyn, это опенсорс платформа, разрабатываемая Microsoft, что в ней для нас важного: компиляторы и средства для анализа кода.
- Компилятор - переводит исходный код ЯП в промежуточный IL-код и наборы метаданных. Затем IL-код будет выполняться в CLR.
- Различные фичи наподобие проверки синтаксиса и предложения по исправлению кода реализуются как раз за счёт использования Roslyn.
- Основная ягодка .Net - это CLR (Common Language Runtime), неотъемлемая часть платформы, в неё входит:
- Загрузчик сборок
- Функционал обработки исключений
- Управление потоками
- Управление памятью
- Сборщик мусора
- Механизм контроля совместимости типов
- JIT-компилятор (Just-in-Time), который работает с IL кодом и переводит его в исполняемый машинный код.
#техничка
@cat_and_code
🌚5👍1🔥1
Мне на одном из рабочих проектов понадобилось сильно сократить размер билда под WebGL. Специфика задачи еще была в том, что параллельно из игры нужно было выпилить часть больших фичей, поэтому получились не очень валидные данные ДО и ПОСЛЕ, но даже без удаления фичей вполне можно добиться x0.5 от начального размера. У меня результат 133 Мб → 36 Мб.
Топ по эффективности:
- Компрессия текстур. У меня на проекте она почти отсутствовала, текстуры либо не были пожаты вообще, либо были размеры текстур не кратные 4м и компрессия снова не работала. Так что привести все к размерам и выставить сжатие (для WebGL мы ставим RGB(A) Compressed BC7)
- Если вы можете себе позволить - уменьшение размера текстур. Мы выбрали компромисс, такой что на FullHD мониторе смотрится нормально, а на 4K уже так себе.
- Пережать атласы, так чтобы в них не было пустого места. За пустое место в них тоже приходится платить мегабайтами.
- Удаление и стриппинг шейдеров. Зависит от проекта, но иногда даёт десятки мегабайт.
- Формат компрессии билда - Brotli. Само по себе дало профит примерно в 10% от размера билда в Gzip.
- Удаление лишних шрифтов. Сам шрифт и ассеты связанные с ними весят много. Это снова компромисс, так как такой приём влияет на дизайн. У нас их было 15, оставили 3, профит ~12 Мб .
- Пожатие звуков. Здесь просто шакалим звуки на сколько можно, определяя на слух что получилось.
- Стриппинг кода. Зависит от проекта - мне дало всего 1.5 Мб, на другом проекте давало десятки Мб. (ProjectSettings → Player → (Под конкретной платформой включить галку Strip Engine Code и Managed Stripping Level поставить в High)
- Чистка менеджера пакетов и ручная чистка файла manifest. В том числе от модулей Unity. Например, можно дропнуть физику или тайлмапы, если вы их не используете.
Ну и главное правило: смотреть билд репорт. Иногда бывают сюрпризы. Например, вы можете обнаружить что какие-то мусорные префабы тянут за собой массу ресурсов в сборку.
#техничка
@cat_and_code
Топ по эффективности:
- Компрессия текстур. У меня на проекте она почти отсутствовала, текстуры либо не были пожаты вообще, либо были размеры текстур не кратные 4м и компрессия снова не работала. Так что привести все к размерам и выставить сжатие (для WebGL мы ставим RGB(A) Compressed BC7)
- Если вы можете себе позволить - уменьшение размера текстур. Мы выбрали компромисс, такой что на FullHD мониторе смотрится нормально, а на 4K уже так себе.
- Пережать атласы, так чтобы в них не было пустого места. За пустое место в них тоже приходится платить мегабайтами.
- Удаление и стриппинг шейдеров. Зависит от проекта, но иногда даёт десятки мегабайт.
- Формат компрессии билда - Brotli. Само по себе дало профит примерно в 10% от размера билда в Gzip.
- Удаление лишних шрифтов. Сам шрифт и ассеты связанные с ними весят много. Это снова компромисс, так как такой приём влияет на дизайн. У нас их было 15, оставили 3, профит ~12 Мб .
- Пожатие звуков. Здесь просто шакалим звуки на сколько можно, определяя на слух что получилось.
- Стриппинг кода. Зависит от проекта - мне дало всего 1.5 Мб, на другом проекте давало десятки Мб. (ProjectSettings → Player → (Под конкретной платформой включить галку Strip Engine Code и Managed Stripping Level поставить в High)
- Чистка менеджера пакетов и ручная чистка файла manifest. В том числе от модулей Unity. Например, можно дропнуть физику или тайлмапы, если вы их не используете.
Ну и главное правило: смотреть билд репорт. Иногда бывают сюрпризы. Например, вы можете обнаружить что какие-то мусорные префабы тянут за собой массу ресурсов в сборку.
#техничка
@cat_and_code
🔥9❤2🦄2👍1👏1
Поиграли в Индику?
Давайте пофилософствуем. В целом комментирование тайтла начинает утихать, но мне интересен тот “раскол”, который игра создала среди публики. Кто не играл, там повествование выстроено вокруг православной веры. И как я понимаю, это настолько поджигает некоторые… умы, что был шквал критики, статьи типа таких. И стоит заметить, что авторы засветились русофобскими высказываниями.
Слог приведённой статьи завораживает и вот это все с одной стороны, одна часть аудитории.
Продолжение следующим постом
Давайте пофилософствуем. В целом комментирование тайтла начинает утихать, но мне интересен тот “раскол”, который игра создала среди публики. Кто не играл, там повествование выстроено вокруг православной веры. И как я понимаю, это настолько поджигает некоторые… умы, что был шквал критики, статьи типа таких. И стоит заметить, что авторы засветились русофобскими высказываниями.
“Индика - это не игра, это русофобское политическое высказывание релокантов в попытке замарать грязью русскую культуру и православие.”
Слог приведённой статьи завораживает и вот это все с одной стороны, одна часть аудитории.
Продолжение следующим постом
😈4
Начало, это продолжение:
С другой у нас есть симулятор ходьбы, с затягивающим сюжетом, офигенным и очень продуманным визуальным стилем, с акцентами на архитектуру. Свежо выглядящая помесь стимпанка и эстетики России в сложный период начала 20го века. Вовлекающие диалоги, сам не замечаешь как начинаешь мысленно включаться в беседу и отвечать, то чёрту, то Индике. Добавим сюда очень крутую и подходящую актёрскую озвучку. Это все формирует часть аудитории, которая наслаждается игрой, за все то, что в ней появляется, когда ты нажал на кнопку “Играть” в Steam.
Что мне не понятно, оскорблённая часть аудитории, это
1) Глубоко верующие люди, которых задели логические тупики выстраиваемые чёртом? Или потому, что авторы позволяют себе сомневаться в каких-то религиозных догматах?
Не понимаю, как можно оскорбиться на это, потому что игра в основном просто ставит игрока перед каким-то вопросом один на один, но у тебя вполне может быть свой ответ, которого нет у Индики. Если ответа нет, то задумаешься на будущее, как это бывает когда читаешь книги, например.
Может быть какие-то неаккуратные выражения на тему религии? Не ставлю в один ряд, но но как проверенный временем пример. Неаккуратная фраза про религию: “Почём опиум для народа?” — мы же не презираем, а наоборот очень любим авторов книги “12 стульев”. Так что едва ли какие-то фразы могли бы вызвать такой резонанс.
Если говорить о сомнениях в веровании, которые игра могла бы посеять - тоже не серьёзно. Потому, что либо твоя вера крепка и тебе в целом не важно кто и что говорит вокруг. Пример есть в геймдеве, сцена с батюшкой в игре “Кужлёвка” (не раскрываю, лучше поиграйте). Либо может ты ещё сам ищешь какие-то ответы, но тогда какое право злиться на тех, кто задет вопросы?
2) Русофобская позиция авторов? Или потому, что авторы с таким мировоззрением позволяют себе выпускать творческие произведения на тему России?
Мы вычеркнем из памяти крылатые фразы фильма ДМБ, потому, что режиссёр иноагент? Или сейчас масса музыкантов уехала за границу, но их песни мы с детства слушали. Понимаю, как публика может не соглашаться с позициями этих авторов, но повод ли это перекладывать отношение к автору на продукты его творчества? Допустим нельзя на те которые были давно, а в текущее время, нужно более жёстко фильтровать весь контент, потому, что время такое. Но тогда тоже даже близко не дотягивает до информационно-культурной бомбы. Кто вообще бы заметил эту игру вне геймерского сообщества, если бы не стали появляться статьи, вроде приведённой выше? А может дело, в том, что игра слишком негативно показала альтернативную реальность России? Но тогда вообще не понятно, как например фильмы Балабанова не запрещены.
Таким образом получилась масса вопросов и противоречий, которые существуют одновременно. Явная иллюстрация того, что не стоит мыслить только черной или белой краской.
С другой у нас есть симулятор ходьбы, с затягивающим сюжетом, офигенным и очень продуманным визуальным стилем, с акцентами на архитектуру. Свежо выглядящая помесь стимпанка и эстетики России в сложный период начала 20го века. Вовлекающие диалоги, сам не замечаешь как начинаешь мысленно включаться в беседу и отвечать, то чёрту, то Индике. Добавим сюда очень крутую и подходящую актёрскую озвучку. Это все формирует часть аудитории, которая наслаждается игрой, за все то, что в ней появляется, когда ты нажал на кнопку “Играть” в Steam.
Что мне не понятно, оскорблённая часть аудитории, это
1) Глубоко верующие люди, которых задели логические тупики выстраиваемые чёртом? Или потому, что авторы позволяют себе сомневаться в каких-то религиозных догматах?
Не понимаю, как можно оскорбиться на это, потому что игра в основном просто ставит игрока перед каким-то вопросом один на один, но у тебя вполне может быть свой ответ, которого нет у Индики. Если ответа нет, то задумаешься на будущее, как это бывает когда читаешь книги, например.
Может быть какие-то неаккуратные выражения на тему религии? Не ставлю в один ряд, но но как проверенный временем пример. Неаккуратная фраза про религию: “Почём опиум для народа?” — мы же не презираем, а наоборот очень любим авторов книги “12 стульев”. Так что едва ли какие-то фразы могли бы вызвать такой резонанс.
Если говорить о сомнениях в веровании, которые игра могла бы посеять - тоже не серьёзно. Потому, что либо твоя вера крепка и тебе в целом не важно кто и что говорит вокруг. Пример есть в геймдеве, сцена с батюшкой в игре “Кужлёвка” (не раскрываю, лучше поиграйте). Либо может ты ещё сам ищешь какие-то ответы, но тогда какое право злиться на тех, кто задет вопросы?
2) Русофобская позиция авторов? Или потому, что авторы с таким мировоззрением позволяют себе выпускать творческие произведения на тему России?
Мы вычеркнем из памяти крылатые фразы фильма ДМБ, потому, что режиссёр иноагент? Или сейчас масса музыкантов уехала за границу, но их песни мы с детства слушали. Понимаю, как публика может не соглашаться с позициями этих авторов, но повод ли это перекладывать отношение к автору на продукты его творчества? Допустим нельзя на те которые были давно, а в текущее время, нужно более жёстко фильтровать весь контент, потому, что время такое. Но тогда тоже даже близко не дотягивает до информационно-культурной бомбы. Кто вообще бы заметил эту игру вне геймерского сообщества, если бы не стали появляться статьи, вроде приведённой выше? А может дело, в том, что игра слишком негативно показала альтернативную реальность России? Но тогда вообще не понятно, как например фильмы Балабанова не запрещены.
Таким образом получилась масса вопросов и противоречий, которые существуют одновременно. Явная иллюстрация того, что не стоит мыслить только черной или белой краской.
🗿3🤝2🫡1
У меня есть небольшой проект на гите с коллекцией шейдров, которые добавляю по мере личной необходимости. В целом все базовые, применимые и простые. В какой-то момент обнаружил, что не только мне они пригождаются. Так вот — недавно добавил стекло.
https://github.com/KotikovD/ShadersCollection
https://github.com/KotikovD/ShadersCollection
🔥11🐳3😍1
😁15
Выше был пост про то, “Что такое .Net”? И в комментариях прозвучало замечание, что может быть и не важно, если программист этого не знает, что это не мешает ему выдавать результат. Мне захотелось раскрыть свой ответ в отдельном посте. Может быть кто-то из коллег приведёт аргументы и переубедит меня.
Если бы я задал этот вопрос на собеседовании и не получил бы ответа, то крест на кандидате бы не ставил, конечно если он в целом в курсе основных составляющих платформы. Через этот вопрос как раз можно перейти к другим темам, например, про сборщик мусора.
Но почему я не согласен с позицией:- «не знает, ну и зачем оно в реальной жизни». Сначала несколько, на мой взгляд, аналогичных утверждений: зачем использовать IDisposable, без этого можно выдавать результат. Можно использовать только коллекции List и Dictionary и тоже выдавать результат. Можно не знать как устроен словарь и выдавать результат. Можно использовать для чисел только int и float и тоже выдавать результат. В общем такой список каждый может дополнить в комментариях или представить сам себе.
А теперь пример из другой сферы, допустим вы ищите водителя-механика в логистический парк, приглашаете соискателя и спрашивайте “Какие основные технические узлы есть у грузовика?”, а он вам отвечает “Я за рулём езжу, педали нажимаю, какая разница как он устроен? Груз довести смогу”. Вывод: кандидат неопытный водитель, жизнь его ещё не мотала поломками, на любой потенциальной заморочке с машиной ему нужна будет помощь + оправдывает своё незнание отрицая важность технической части. В целом задача любого работодателя выбрать сотрудника, чтобы он усиливал компанию, а не тянул назад. Да, в программировании не все так прямолинейно, но как правило если ты не интересуешься техническими вопросами, то не одним каким-то, а в целом не интересуешься.
И так, смотря какие задачи нужно делать, какого уровня эти задачи. Если окна собирать и в целом на «общую» игровую логику не сложного проекта под опекой старшего, то можно и без много каких знаний. Например, это джун и то при условии, что человек не отрицает важность технических дебрей, а стремится все это постичь, просто ещё не успел в силу каких-то причин.А иначе зачем такой джун вообще, который не стремится развиваться и отстаивает эту позицию?
Если стоят более серьёзные технические задачи + нормальная доля свободы на проекте, не могу себе представить специалиста, который отрицает какие-то прямые или косвенные технические знания. Выбирать более важное для изучения и что-то отсеивать - придётся, конечно, но это не отрицание. В любом случае человек любознательный и привыкший копать в глубь.
Поэтому и бывают такие вопросы на собесах, чтобы за ограниченное время успеть понять на сколько глубокий специалист и сопоставить его уровень с задачами проекта.
Согласны с такой позицией? Может быть вы сами применяете или сталкивались с другими подобными вопросами, поделитесь.
Если бы я задал этот вопрос на собеседовании и не получил бы ответа, то крест на кандидате бы не ставил, конечно если он в целом в курсе основных составляющих платформы. Через этот вопрос как раз можно перейти к другим темам, например, про сборщик мусора.
Но почему я не согласен с позицией:- «не знает, ну и зачем оно в реальной жизни». Сначала несколько, на мой взгляд, аналогичных утверждений: зачем использовать IDisposable, без этого можно выдавать результат. Можно использовать только коллекции List и Dictionary и тоже выдавать результат. Можно не знать как устроен словарь и выдавать результат. Можно использовать для чисел только int и float и тоже выдавать результат. В общем такой список каждый может дополнить в комментариях или представить сам себе.
А теперь пример из другой сферы, допустим вы ищите водителя-механика в логистический парк, приглашаете соискателя и спрашивайте “Какие основные технические узлы есть у грузовика?”, а он вам отвечает “Я за рулём езжу, педали нажимаю, какая разница как он устроен? Груз довести смогу”. Вывод: кандидат неопытный водитель, жизнь его ещё не мотала поломками, на любой потенциальной заморочке с машиной ему нужна будет помощь + оправдывает своё незнание отрицая важность технической части. В целом задача любого работодателя выбрать сотрудника, чтобы он усиливал компанию, а не тянул назад. Да, в программировании не все так прямолинейно, но как правило если ты не интересуешься техническими вопросами, то не одним каким-то, а в целом не интересуешься.
И так, смотря какие задачи нужно делать, какого уровня эти задачи. Если окна собирать и в целом на «общую» игровую логику не сложного проекта под опекой старшего, то можно и без много каких знаний. Например, это джун и то при условии, что человек не отрицает важность технических дебрей, а стремится все это постичь, просто ещё не успел в силу каких-то причин.
Если стоят более серьёзные технические задачи + нормальная доля свободы на проекте, не могу себе представить специалиста, который отрицает какие-то прямые или косвенные технические знания. Выбирать более важное для изучения и что-то отсеивать - придётся, конечно, но это не отрицание. В любом случае человек любознательный и привыкший копать в глубь.
Поэтому и бывают такие вопросы на собесах, чтобы за ограниченное время успеть понять на сколько глубокий специалист и сопоставить его уровень с задачами проекта.
Согласны с такой позицией? Может быть вы сами применяете или сталкивались с другими подобными вопросами, поделитесь.
👍4🔥3🤔3💊2🐳1
Простая, но полезная штука, замечаю, что не все пользуются. Блок try-catch умеет перехватывать разные ошибки, может быть много блоков catch. Идет сверху вниз, поэтому выше должны быть типизированные ошибки, а Exception последним.
Удобно для более подробного логирования или обработки штатных ситуаций, как в примере ниже. Пример, кстати, не идеальный, как можно улучшить?
#техничка
Удобно для более подробного логирования или обработки штатных ситуаций, как в примере ниже. Пример, кстати, не идеальный, как можно улучшить?
#техничка
try
{
// какой-то код с логикой
Profiler.BeginSample($"[AllocAnalyzer] Config: {configName}");
// еще код с логикой
await handler.ReadObjectsListFromConfigAsync(cancellationToken);
Profiler.EndSample();
}
// Обработка штатной отмены по cancellationToken
catch (OperationCanceledException)
{
Profiler.EndSample();
return;
}
catch (Exception e)
{
ConfigsDataLoader.HandleConfigException(e, configName);
return;
}
👍2🔥1👀1
Многие наверное в курсе, что Telegram вообще не даёт никакой новой аудитории через внутренний поиск, рекомендации или еще что-то. Поэтому единственное, что тут есть — это упоминания канала по ссылке, которую админы других каналов делают вручную.
Привет, всем новым подписчикам, рад что вы присоединились, может быть вам будет интересно 😄
На данный момент нас тут около 200 человек и вот примерно 40 новых подписчиков пришли благодаря следующему приему: ребята из Cookies Games сделали подборку каналов в виде папки и договорились о взаимном постинге этой самой папки во всех каналах. Получается достаточно рабочая реклама. Могу выделить несколько критериев:
- Продвигая небольшие каналы, подбираем такие же. Все примерно, 150-450 участников. Теоретический, далее можно повторять историю, меняя каналы и постепенно увеличивая их «размер»
- В выборке каналы живые, профильные, ведут их ради идеи. Это вообще главный критерий.Интересно как ребята вообще всех нас нашли и собрали?
- Такая реклама не раздражает, потому как подписчики тоже зачастую рады найти еще профильных каналов, но не понятно как.
Посмотрите, что есть в папке GameDev. Мне было приятно обнаружить как старых знакомых, так и найти новых. Можете кликнуть и посмотреть всех, ниже пара личных рекомендаций:
NuclearBand — взаимно следим друг за другом почти с момента когда я начал вести свой канал. Вайб примерно как у нас тут: мысли программиста, код, истории с работы.
[Не Кеша] — сейчас пытался понять, почему я сам читаю этот канал. но кажется, потому, что мне нравится сочетание крипоты и девлогов. Авторский стиль в общем)
Есть среди подписчиков админы каналов? Как вам такой прием? Поделитесь своими каналами в комментах.
Привет, всем новым подписчикам, рад что вы присоединились, может быть вам будет интересно 😄
На данный момент нас тут около 200 человек и вот примерно 40 новых подписчиков пришли благодаря следующему приему: ребята из Cookies Games сделали подборку каналов в виде папки и договорились о взаимном постинге этой самой папки во всех каналах. Получается достаточно рабочая реклама. Могу выделить несколько критериев:
- Продвигая небольшие каналы, подбираем такие же. Все примерно, 150-450 участников. Теоретический, далее можно повторять историю, меняя каналы и постепенно увеличивая их «размер»
- В выборке каналы живые, профильные, ведут их ради идеи. Это вообще главный критерий.
- Такая реклама не раздражает, потому как подписчики тоже зачастую рады найти еще профильных каналов, но не понятно как.
Посмотрите, что есть в папке GameDev. Мне было приятно обнаружить как старых знакомых, так и найти новых. Можете кликнуть и посмотреть всех, ниже пара личных рекомендаций:
NuclearBand — взаимно следим друг за другом почти с момента когда я начал вести свой канал. Вайб примерно как у нас тут: мысли программиста, код, истории с работы.
[Не Кеша] — сейчас пытался понять, почему я сам читаю этот канал. но кажется, потому, что мне нравится сочетание крипоты и девлогов. Авторский стиль в общем)
Есть среди подписчиков админы каналов? Как вам такой прием? Поделитесь своими каналами в комментах.
🔥2🥰1🤝1
Я предпочитаю инди игры и иногда пишу о них тут. Обычно в них можно найти нестандартные механики или сюжеты, не подходящие для больших продуктов. Пощупал игру Санёк. Мне кажется это идеальный пример, масса эмоций и нестандартного опыта всего за 2 игровых часа, но целых $ 8.5.
Добавил в желаемое давно, когда попробовал демку, купил только сейчас. Игра ставит себя как приключение в детство. Рекомендую посмотреть трейлер по ссылке выше перед чтением текста, чтобы уловить посыл игры. Я хочу перечислить личные неравнодушные моменты:
- Трейлер и демо настроили меня на крайнюю ностальгию и сведение олд скулл самым сильным образом. Почему-то сюжет после демо (то есть основная игра) много слабее, не знаю чего не хватило, возможно, я заскучал в длинных диалогах и долгих утомительных хождениях в поисках точек интерактива. По впечатлениям игра не ностальгическая, а детская. Можно провести время с ребенком лет 5-7: включаете игру, даете ему мышку и клаву, себе наливаете чай, далее он играет, а вы ему за жизнь рассказываете, как папа-мама жили, а не то что он теперь.
- Игра не поддерживает джойстик. Для меня это жирный минус. Но было бы можно это простить, если игра игралась бы только мышкой. Но нет, клава + мышь. Поддержать геймпад можно было на изи.
- Экстра неожиданная находка. Я нашел блокнотик с спискомнаших секретиков упражений, которые мы используем для разминки на работе. Привожу скрин из рабочего спец-чата, где бот напоминает что делать, а все кто сделал — ставят реакции.
-Игру пройти не смог. У меня поучилась уникальная концовка. Здесь спойлер: ближе к концу игры главного героя байтят пойти в страшный лес ночью на 100 шагов в глубину. По доброй логике игры ясно, что надо сгонять в лес, затем вернуться и получить звиздюлей от матери. Так вот я пошел, шагал минут 10, честно плутал во обе стороны и далее… ничего не произошло! Представьте как это долго (10 минут) с точки зрения геймплея, просто смотреть на идущего перса по лесу. Успел заучить визуальные паттерны этого леса. Думаю глюк, какой-то триггер не отработал. Получается, моя концовка: ослушался мать, повелся на байт других детей во дворе и напрочь заблудился в лесу с потерей перспектив, конец. Потрясное и неожиданное завершение, за 10 минут я как раз пережил все стадии выгорания надежд выбраться и принял неизбежное.
- Есть и киллер-фича игры — это внутриигровая консоль UnityIngameDebugConsole, которая открывается клавишей тильды. У меня даже форк на нее есть, как-то очень надо было чтобы она еще FPS выводила. Так я узнал, что я прошел 3238 шагов, что есть нул рефы в диалогах, дофига ворнингов на аудио и дотвин.
- Может быть жестко сужу, но игра не стоит 8.5 баксов, ни по каким критериям.
#игры
Добавил в желаемое давно, когда попробовал демку, купил только сейчас. Игра ставит себя как приключение в детство. Рекомендую посмотреть трейлер по ссылке выше перед чтением текста, чтобы уловить посыл игры. Я хочу перечислить личные неравнодушные моменты:
- Трейлер и демо настроили меня на крайнюю ностальгию и сведение олд скулл самым сильным образом. Почему-то сюжет после демо (то есть основная игра) много слабее, не знаю чего не хватило, возможно, я заскучал в длинных диалогах и долгих утомительных хождениях в поисках точек интерактива. По впечатлениям игра не ностальгическая, а детская. Можно провести время с ребенком лет 5-7: включаете игру, даете ему мышку и клаву, себе наливаете чай, далее он играет, а вы ему за жизнь рассказываете, как папа-мама жили, а не то что он теперь.
- Игра не поддерживает джойстик. Для меня это жирный минус. Но было бы можно это простить, если игра игралась бы только мышкой. Но нет, клава + мышь. Поддержать геймпад можно было на изи.
- Экстра неожиданная находка. Я нашел блокнотик с списком
-
- Есть и киллер-фича игры — это внутриигровая консоль UnityIngameDebugConsole, которая открывается клавишей тильды. У меня даже форк на нее есть, как-то очень надо было чтобы она еще FPS выводила. Так я узнал, что я прошел 3238 шагов, что есть нул рефы в диалогах, дофига ворнингов на аудио и дотвин.
- Может быть жестко сужу, но игра не стоит 8.5 баксов, ни по каким критериям.
#игры
😁4🔥2👀2
Ubisoft анонсировали первый шутер в игровой серии Assassin’s Creed.
Игра получит название «Assassin’s Creed: DON».
Простите, не удержался 😅
Игра получит название «Assassin’s Creed: DON».
Please open Telegram to view this post
VIEW IN TELEGRAM
😁9😱2❤1
Случай на работе. Пример из очень старой системы, далеко неидеального подхода, но тем интереснее. Кусок кода для загрузки данных пользователя.
Есть промежуточный класс-родитель, который сетапит загруженные сохранения у своих наследников.
Пример класса-наследника:
В LoadBit приходит obj — это уже загруженные данные или null если их не было, далее мы их либо сетапим в SetLoaded, либо ставим дефолтные значения через метод Reset. Что пошло не так написано ниже, но кому интересно, можете сначала подумать, как сломать метод LoadBit.
Изначально, было запланировано, что в метод может приходить object ожидаемого типа или null. И все было хорошо, пока не пришла пустая string (с таким успехом метод можно ломать любым другим типом, главное чтобы он был не такой как у Т). Возникает исключение и уход в catch на строке с жестким приведением типа var elem = (T) obj; без выполнения одного из методов — Reset или SetLoaded.
Кто пофиксит?)
#техничка
Есть промежуточный класс-родитель, который сетапит загруженные сохранения у своих наследников.
public abstract class Bit<T> : UserBit
{
protected sealed override void LoadBit(object obj)
{
try
{
var elem = (T)obj;
if (elem == null)
{
Reset();
return;
}
SetLoaded(elem);
}
catch (Exception e)
{
throw new Exception($"F");
}
}
protected abstract void SetLoaded(T elem);
protected abstract void Reset();
}
Пример класса-наследника:
public class ProfileBit : Bit<ProfileBit>
{
// поля дата-калсса
protected override void SetLoaded(ProfileBit elem)
{
// сетап загруженными значениями
}
protected override void Reset()
{
// сетап дефолтными значениями
}
}
В LoadBit приходит obj — это уже загруженные данные или null если их не было, далее мы их либо сетапим в SetLoaded, либо ставим дефолтные значения через метод Reset. Что пошло не так написано ниже, но кому интересно, можете сначала подумать, как сломать метод LoadBit.
Кто пофиксит?)
#техничка
👍1🤯1🐳1
Пример кода, который стреляет в ногу. Такая подстава называется “Null trap”. В данном случае есть класс, который хранит данные и имеет серию методов Get…что-то. Все написаны в стиле, попробуй найти данные, иначе верни null.
Вызывающий код не ждет, что метод может иметь наглость вернуть null. Отсюда и неочевидные ошибки. Конкретно эту мы поймали уже на релизе, когда игроки с определенным набором данных об нее дедлочились.
Как не делать таких подстав своим коллегам? Вариант для ленивых жопошников — атрибут CanBeNull. Так хотя бы IDE подсветит такой метод ворнингом и напишет “Possible 'System.NullReferenceException”. Его тоже можно не заметить, так как все не “красное” — часто пропускается взглядом.
Нормальный вариант, сделать метод явно указывающий, что данных может не быть, например так:
#техничка
public IEnumerable<int> GetFamily(string familyId)
{
return _monsterFamilies.Contains(familyId) ? _monsterFamilies[familyId] : null;
}
Вызывающий код не ждет, что метод может иметь наглость вернуть null. Отсюда и неочевидные ошибки. Конкретно эту мы поймали уже на релизе, когда игроки с определенным набором данных об нее дедлочились.
Как не делать таких подстав своим коллегам? Вариант для ленивых жопошников — атрибут CanBeNull. Так хотя бы IDE подсветит такой метод ворнингом и напишет “Possible 'System.NullReferenceException”. Его тоже можно не заметить, так как все не “красное” — часто пропускается взглядом.
[CanBeNull]
public IEnumerable<int> GetFamily(string familyId)
{…}
Нормальный вариант, сделать метод явно указывающий, что данных может не быть, например так:
public bool TryGetFamily(string familyId, out IEnumerable<int> result)
{
result = null;
if (_monsterFamilies.Contains(familyId))
result = _monsterFamilies[familyId];
return result != null;
}
#техничка
101🔥5❤🔥2