Só existe Miku

O resultado de trabalhar na biblioteca FSGL com OpenGL ES e código:

A seguir descreverei como tudo foi programado, vários problemas interessantes foram resolvidos.

Primeiro, inicializaremos o contexto OpenGL ES, conforme escrevi no post anterior. Além disso, consideraremos apenas a renderização e uma breve descrição do código.

A Matrix está observando você

Esta figura de Miku no vídeo consiste em triângulos. Para desenhar um triângulo no OpenGL, você precisa especificar três pontos com coordenadas x, y, z. em coordenadas 2D do contexto OpenGL.
Como precisamos desenhar uma figura contendo coordenadas 3D, precisamos usar uma matriz de projeção. Também precisamos girar, ampliar ou o que quisermos fazer com o modelo. Para tanto, é utilizada a matriz modelo. Não existe o conceito de câmera no OpenGL; na verdade, os objetos giram em torno de uma câmera estática; Para isso, é utilizada uma matriz de visualização.

Para simplificar a implementação do OpenGL ES – não contém dados de matriz. Você pode usar bibliotecas que adicionam funcionalidades ausentes, por exemplo, GLM.

Sombreadores

Para permitir que o desenvolvedor desenhe qualquer coisa, e de qualquer forma, o OpenGL ES deve implementar shaders de vértices e fragmentos. O vertex shader deve receber coordenadas de renderização como entrada, realizar transformações usando matrizes e passar as coordenadas para gl_Position. Fragmento ou pixel shader – já desenha cor/textura, aplica sobreposição, etc.

Eu escrevi shaders em GLSL. Na minha implementação atual, os shaders são integrados diretamente no código principal do aplicativo como strings C.

Buffers

O buffer de vértices contém as coordenadas dos vértices (vértices); este buffer também contém coordenadas para texturização e outros dados necessários para shaders. Depois de gerar o buffer de vértice, você precisa vincular o ponteiro aos dados do sombreador de vértice. Isso é feito com o comando glVertexAttribPointer, onde você precisa especificar o número de elementos, um ponteiro para o início dos dados e o tamanho do passo que será usado para percorrer o buffer. Na minha implementação, é feita a ligação de coordenadas de vértice e coordenadas de textura para o pixel shader. Porém, vale ressaltar que a transferência dos dados (coordenadas de textura) para o fragment shader é realizada através do vertex shader. Para conseguir isso, as coordenadas são declaradas usando variando.

Para que o OpenGL saiba em que ordem desenhar pontos para triângulos – você precisará de um buffer de índice (índice). O buffer de índice contém o número do vértice na matriz. Usando três desses índices, um triângulo é obtido.

Texturas

Primeiro você precisa carregar/gerar uma textura para OpenGL. Para isso utilizei SDL_LoadBMP, a textura é carregada a partir de um arquivo bmp. No entanto, é importante notar que apenas BMPs de 24 bits são adequados e as cores neles são armazenadas não na ordem RGB usual, mas em BGR. Ou seja, após o carregamento, é necessário substituir o canal vermelho por um azul.
As coordenadas de textura são especificadas no formato UV< /a>, ou seja, você só precisa transferir duas coordenadas. A saída da textura é feita no fragment shader. Para fazer isso, você precisa vincular a textura em um fragment shader.

Nada extra

Como, de acordo com nossas instruções, o OpenGL desenha de 3D a 2D – em seguida, implemente a profundidade e selecione triângulos invisíveis – você precisa usar seleção e um buffer de profundidade (Z-Buffer). Na minha implementação, consegui evitar a geração manual do buffer de profundidade usando dois comandos: glEnable(GL_DEPTH_TEST); e seleções glEnable(GL_CULL_FACE);
Certifique-se também de verificar se o plano próximo da matriz de projeção é maior que zero, porque verificar a profundidade com um plano próximo nulo não funcionará.

Renderização

Para preencher o buffer de vértice, buffer de índice com algo consciente, por exemplo o modelo Miku, você precisa carregar este modelo. Para isso usei a biblioteca assimp. Miku foi colocado em um arquivo no formato Wavefront OBJ, carregado usando assimp, e a conversão de dados de assimp para vértice e buffers de índice foi implementada.

A renderização ocorre em vários estágios:

  1. Gire Miku usando a rotação da matriz do modelo
  2. Limpando a tela e o buffer de profundidade
  3. Desenhar triângulos usando o comando glDrawElements.

Próxima etapa – Implementação de renderização em WebGL usando Emscripten.

Código fonte:
https://github.com/demensdeum/OpenGLES3-Experiments/tree/master/8-sdl-gles-obj-textured-assimp-miku
Modelo:
https://sketchfab.com/models/7310aaeb8370428e966bdcff414273e7

 

Projete

Tendo desenhado um bule vermelho em 3D, considero meu dever descrever brevemente como isso é feito.

O OpenGL moderno não desenha em 3D, apenas desenha triângulos, pontos, etc. em coordenadas de tela 2D.
Para produzir pelo menos algo usando OpenGL, você precisa fornecer um buffer de vértice, escrever um sombreador de vértice, adicionar todas as matrizes necessárias (projeção, modelo, visualização) ao sombreador de vértice,associar todos os dados de entrada com o shader, chame o método renderização em OpenGL. Parece simples?


Ok, o que é um buffer de vértice? Lista de coordenadas a serem desenhadas (x, y, z)
O vertex shader informa à GPU quais coordenadas desenhar.
O pixel shader informa o que desenhar (cor, textura, mesclagem, etc.)
As matrizes traduzem coordenadas 3D em coordenadas OpenGL 2D que podem ser renderizadas

Nos artigos a seguir fornecerei exemplos de código e resultados.

SDL2 – OpenGL ES

I love Panda3D game engine. But right now this engine is very hard to compile and debug on Microsoft Windows operation system. So as I said some time ago, I begin to develop my own graphics library. Right now it’s based on OpenGL ES and SDL2.
In this article I am going to tell how to initialize OpenGL ES context and how SDL2 helps in this task. We are going to show nothing.

King Nothing

First of all you need to install OpenGL ES3 – GLES 3 libraries. This operation is platform dependant, for Ubuntu Linux you can just type sudo apt-get install libgles2-mesa-dev. To work with OpenGL you need to initialize OpenGL context. There is many ways to do that, by using one of libraries – SDL2, GLFW, GLFM etc. Actually there is no one right way to initialize OpenGL context, but I chose SDL2 because it’s cross-platform solution, code will look same for Windows/*nix/HTML5/iOS/Android/etc.

To install sdl2 on Ubuntu use this command sudo apt-get install libsdl2-dev

So here is OpenGL context initialization code with SDL2:

    SDL_Window *window = SDL_CreateWindow(
            "SDL2 - OGLES",
            SDL_WINDOWPOS_UNDEFINED,
            SDL_WINDOWPOS_UNDEFINED,
            640,
            480,
            SDL_WINDOW_OPENGL
            );
	    

    SDL_GLContext glContext = SDL_GL_CreateContext(window);

After that, you can use any OpenGL calls in that context.

Here is example code for this article:
https://github.com/demensdeum/OpenGLES3-Experiments/tree/master/3sdl-gles
https://github.com/demensdeum/OpenGLES3-Experiments/blob/master/3sdl-gles/sdlgles.cpp

You can build and test it with command cmake . && make && ./SDLGles

Núcleo de Aço Flamejante

Captura de tela da versão mais recente de Death Mask:

Parece um milhão de dólares, né?

< /blockquote>

Renomear, dividir

A biblioteca Flame Steel Engine foi renomeada para Flame Steel Core, o Game Toolkit foi dividido em bibliotecas SDL, Panda3D (Desktop) e Web (ThreeJS). Se houver esferas de aço disponíveis para montagem usando as bibliotecas Flame Steel, você deverá primeiro selecionar e montar as que você precisa.

Github:

https://github.com/demensdeum/Death-Mask
https://github.com/demensdeum/FlameSteelCore
https://github.com/demensdeum/FlameSteelEngineGameToolkit
https://github.com/demensdeum/FlameSteelEngineGameToolkitDesktop

Obsoleto:

https://github.com/demensdeum/FlameSteelEngineGameToolkitSDL
https://github.com/demensdeum/FlameSteelEngineGameToolkitWeb

Hacking quântico RSA

Outro dia escrevi minha implementação do algoritmo de criptografia de chave pública RSA. Também fiz um hack simples desse algoritmo, então queria escrever uma breve nota sobre esse assunto. A resistência à violação do RSA é baseada em um problema de fatoração. Fatoração… Que palavra terrível…

Não é tão assustador assim

Na verdade, na primeira etapa da criação das chaves, pegamos dois números aleatórios, mas os números só devem ser divisíveis por si mesmos e um – Números primos.
Vamos chamá-los de p e q. A seguir devemos obter o número n = p *q. Ele será usado para geração adicional de chaves, as chaves, por sua vez, serão usadas para criptografar e descriptografar mensagens. Na versão final da chave privada e pública, o número n será transferido sem alterações.
Digamos que temos uma das chaves RSA e uma mensagem criptografada em mãos. Retiramos o número n da chave e iniciamos o hack.

Fatorar n

Fatoração – decomposição de um número em fatores primos. Primeiro, retiramos o número n da chave (em chaves reais você pode fazer isso usando openssl), digamos n = 35. Depois, fatoramos isso em fatores simples n = 35 = 5 * 7, este é e existem nossos p e q. Agora você pode regenerar as chaves usando o p, q recebido, descriptografar a mensagem e criptografá-la garantindo a visibilidade do autor original.

Qubits não são tão simples

É realmente possível quebrar qualquer RSA tão facilmente? Na verdade, não, os números p, q são considerados deliberadamente grandes, de modo que a tarefa de fatoração em computadores clássicos leva muito tempo (10 anos até certo ponto)< br/>Porém, usando o algoritmo quântico de Shor, é possível fatorar um número em um tempo muito curto. No momento, artigos sobre esse tema informam o momento de multiplicar um determinado número, ou seja, praticamente instantaneamente. Para que o algoritmo de Shor funcione, é necessário implementar computadores quânticos com grande número de qubits. Em 2001, a IBM fatorou o número 15 usando 7 qubits. Portanto, teremos que esperar muito tempo por esse momento, quando já teremos mudado para algoritmos de criptografia pós-quântica.

Toque curto

Peter Shore fala sobre seu algoritmo de fatoração

Para testar o algoritmo de Shor em um simulador quântico, você pode instalar ProjectQ, seus exemplos incluem uma implementação de shor.py que permite fatorar um número inserido pelo usuário. No simulador, o tempo de execução é deprimente, mas parece ser uma simulação divertida e lúdica do funcionamento de um computador quântico.

Artigos:
http://www.pagedon.com/rsa-explained-simply/my_programming/
http://southernpacificreview.com/2014/01/06/rsa-key-generation-example/
https://0day.work/how-i-recovered-your-private-key-or-why-small-keys-are-bad/

Implementação Python do RSA:
https://github.com/demensdeum/RSA-Python

Russian Quantum Hack and Number Generator

[Translation may be, some day]

Эта заметка увеличит длину вашего резюме на 5 см!

Без лишних слов о крутости квантовых компьютеров и всего такого, сегодня я покажу как сделать генератор чисел на реальном квантовом процессоре IBM.
Для этого мы будем использовать всего один кубит, фреймворк для разработки квантового ПО для python – ProjectQ, и 16 кубитовый процессор от IBM, онлайн доступ к которому открыт любому желающему по программе IBM Quantum Experience.

Установка ProjectQ

Для начала у вас должен быть Linux, Python и pip. Какие либо инструкции по установке этих базовых вещей приводить бесполезно, т.к. в любом случае инструкции устареют через неделю, поэтому просто найдите гайд по установке на официальном сайте. Далее устанавливаем ProjectQ, гайд по установке приведен в документации. На данный момент все свелось к установке пакета ProjectQ через pip, одной командой: python -m pip install –user projectq

Ставим кубит в суперпозицию

Создаем файл quantumNumberGenerator.py и берем пример генератора бинарного числа из документации ProjectQ, просто добавляем в него цикл на 32 шага, собираем бинарную строку и переводим в 32-битное число:

import projectq.setups.ibm
from projectq.ops import H, Measure
from projectq import MainEngine
from projectq.backends import IBMBackend

binaryString = ""

eng = MainEngine()

for i in range(1, 33):

 qubit = eng.allocate_qubit()

 H | qubit

 Measure | qubit

 eng.flush()

 binaryString = binaryString + str(int(qubit))

 print("Step " + str(i))

number = int(binaryString, 2)

print("\n--- Quantum 32-Bit Number Generator by demensdeum@gmail.com (2017) ---\n")
print("Binary: " + binaryString)
print("Number: " + str(number))
print("\n---")

Запускаем и получаем число из квантового симулятора с помощью команды python quantumNumberGenerator.py

Незнаю как вы, но я получил вывод и число 3974719468:

--- Quantum 32-Bit Number Generator by demensdeum@gmail.com (2017) ---

Binary: 11101100111010010110011111101100
Number: 3974719468

---

Хорошо, теперь мы запустим наш генератор на реальном квантовом процессоре IBM.

Хакаем IBM

Проходим регистрацию на сайте IBM Quantum Experience, подтверждаем email, в итоге должен остаться email и пароль для доступа.
Далее включаем айбиэмовский движок, меняем строку eng = MainEngine() -> eng = MainEngine(IBMBackend())
В теории после этого вы запускаете код снова и теперь он работает на реальном квантовом процессоре, используя один кубит. Однако после запуска вам придется 32 раза набрать свой email и пароль при каждой аллокации реального кубита. Обойти это можно прописав свой email и пароль прямо в библиотеки ProjectQ.

Заходим в папку где лежит фреймворк ProjectQ, ищем файл с помощью grep по строке IBM QE user (e-mail).
В итоге я исправил строки в файле projectq/backends/_ibm/_ibm_http_client.py:

email = input_fun('IBM QE user (e-mail) > ') -> email = "quantumPsycho@aport.ru"

password = getpass.getpass(prompt='IBM QE password > ') -> password = "ilovequbitsandicannotlie"

Напишите свой email и password со-но.

После этого IBM будет отправлять результаты работы с кубитом онлайн прямо в ваш скрипт, процесс генерации занимает около 20 секунд.

Возможно в дальнейшем я доберусь до работы квантового регистра, и возможно будет туториал, но это не обязательно.
Да прибудет с вами запутанность.

Статья на похожую тему:
Introducing the world’s first game for a quantum computer

Por que criar um motor de jogo em 2017?

Muitas pessoas me perguntam: por que criar um motor de jogo em 2017? Afinal, já existem tantas soluções prontas e gratuitas no mercado.

Preparei um artigo separado com uma visão geral do mercado atual de desenvolvimento de jogos, descrevendo os motivos que me levaram a criar o Flame Steel Engine:

Reasons to Make New Game Engine in 2017

Máscara da Morte

A partir de hoje, estou começando a desenvolver jogos roguelike em um cenário cyberpunk &#8211 ; Máscara Mortuária.
Na verdade, este deveria ser o primeiro jogo no novo motor Flame Steel, mas o motor teve que ser modificado antes que o 3D completo aparecesse.
O título original era “Flame Steel: Call Of The Death Mask”, então resolvi simplificar a tarefa e lançar apenas parte do jogo – “Flame Steel: Noite Zumbi”
No entanto, a ideia de criar um projeto normal e completo me assombrou, e o título também foi sobrecarregado com o nome do universo Flame Steel.
Para inspiração visual, pego o mangá Biomega e < a href="http://a.co/8yUUA5i" target="_blank">Culpa! o próprio universo Flame Steel é muito semelhante a Shadowrun no espaço.
Portanto, não se surpreenda se neste jogo você encontrar ummágico alienígena atirando em um lobisomem com balas mágicas de um revólver, apontadas com precisão a partir de um implante cibernético no olho.

O jogo está sendo desenvolvido sob a licença de código aberto do MIT no GitHub, usando o conjunto de ferramentas Flame Steel Engine e estruturas gratuitas.

GitHub:
https://github.com/demensdeum/Death-Mask

Bad Robots em WebGL baseado em ThreeJS

Hoje uma versão do jogo Bad Robots foi lançada em um renderizador WebGL experimental baseado na biblioteca ThreeJS.
Este é o primeiro jogo OpenGL (WebGL) no Flame Steel Engine.
Você pode jogar aqui:
http://demensdeum.com/games/BadRobotsGL/

O código-fonte do IOSystem baseado em ThreeJS está disponível aqui:
https://github.com/demensdeum/FlameSteelEngineGameToolkitWeb

Porting SDL C++ Game to HTML5 (Emscripten)

[Translation may be some day]

За последний год я написал простейший движок Flame Steel Engine и набор классов для игровой разработки Flame Steel Engine Game Toolkit. В данной статье я опишу как производил портирование движка и SDL игры Bad Robots на HTML 5, с использованием компилятора Emscripten.

Установка Hello World – Emscripten

Для начала нужно установить Emscripten. Простейшим вариантом оказалось использование скрипта emsdk для Linux. На официальном сайте данный тип установки называется как “Portable Emscripten SDK for Linux and OS X“. Внутри архива есть инструкция по установке с использованием скрипта. Я производил установку в директорию ~/emsdk/emsdk_portable.

После установки emscripten нужно проверить корректность работы компилятора, для этого создаем простейший hello_world.cpp и собираем его в hello_world.html с помощью команд:

source ~/emsdk/emsdk_portable/emsdk_env.sh
emcc hello_world.cpp -o hello_world.html

После компиляции в папке появится hello_world.html и вспомогательные файлы, откройте его в лучшем браузере Firefox, проверьте что все работает корректно.

Портирование кода игры

В javascript нежелательно вызывать бесконечный цикл – это приводит к зависанию браузера. На данный момент корректная стратегия – запрашивать один шаг цикла у браузера с помощью вызова window.requestAnimationFrame(callback)

В Emscripten данное обстоятельство решено с помощью вызова:

emscripten_set_main_loop(em_callback_func func, int fps, int simulate_infinite_loop);

Таким образом, нужно изменить код игры для корректного вызова метода emscripten. Для этого я сделал глобальный метод GLOBAL_fsegt_emscripten_gameLoop, в котором вызываю шаг цикла игрового контроллера. Главный игровой контроллер также вынесен в глобальную видимость:

#ifdef __EMSCRIPTEN__

void GLOBAL_fsegt_emscripten_gameLoop() {

GLOBAL_fsegt_emscripten_gameController->gameLoop();

}
#endif

Также для обработки специфических для Emscripten моментов, нужно использовать макрос __EMSCRIPTEN__.

Ресурсы и оптимизация

Emscripten поддерживает ресурсы и сборку с оптимизацией.

Для добавления изображений, музыки и прочего, положите все файлы в одну папку, например data. Далее в скрипт сборки добавьте:

emcc <файлы для сборки> –use-preload-plugins –preload-file data

Флаг –use-preload-plugins включает красивый прелоадер в углу экрана, –preload-file добавляет указанный ресурс в файл <имя проекта>.data
Код постоянно останавливался с ошибками доступа к ресурсам, пока я не включил оба этих флага. Также стоит заметить что для корректного доступа к ресурсам, желательно запускать игру на https (возможно и http) сервере, или отключить защиту локального доступа к файлам в вашем браузере.

Для включения оптимизации добавьте флаги:

-s TOTAL_MEMORY=67108864 -O3 -ffast-math

TOTAL_MEMORY – оперативная память в байтах(?) необходимая для корректной работы игры. Вы можете использовать флаг для динамического выделения памяти, но тогда часть оптимизаций работать не будет.

Производительность

Код javascript из C++ работает гораздо медленнее, даже со включенными оптимизациями. Поэтому если ваша цель это разработка для HTML5, то приготовьтесь к ручной оптимизации алгоритмов игры, паралелльному тестированию, также к написанию javascript кода вручную в особо узких местах. Для написания javascript кода используется макрос EM_ASM. Во время реализации рейкастера на emscripten, мне удалось добиться повышения fps с 2-4 до 30 с помощью прямого использования методов canvas.drawImage, в обход обертки SDL->Canvas, что почти приравнялось к написанию всего на javascript.

Поддержка SDL

На данный момент почти не работает SDL_TTF, поэтому отрисовка шрифта для Game Score в BadRobots очень проста. SDL_Image, SDL_Mixer работают корректно, в mixer я проверил только проигрывание музыки.

Исходный код Flame Steel Engine, Flame Steel Engine Game Toolkit, игры Bad Robots:

https://github.com/demensdeum/BadRobots
https://github.com/demensdeum/FlameSteelEngine
https://github.com/demensdeum/FlameSteelEngineGameToolkit

Статья на эту тему:

https://hacks.mozilla.org/2012/04/porting-me-my-shadow-to-the-web-c-to-javascriptcanvas-via-emscripten/

Robôs ruins – Jogo HTML5

O primeiro jogo no Flame Steel Engine.

http://demensdeum.com/games/BadRobots/BadRobots.html

Atire em todos os robôs na tela!

Autores:

Animação do robô – http://opengameart.org/content/xeon-ultimate-smash-friends
Música – Assassinos Kevin MacLeod (incompetech.com)

Código fonte:

https://github.com/demensdeum/BadRobots
https://github.com/demensdeum/FlameSteelEngine
https://github.com/demensdeum/FlameSteelEngineGameToolkit

Protótipo Flame Steel Zombie Night (atualizado)

Primeira versão do Flame Steel Zombie Night para Windows:

FlameSteelZombieNightPrototype2

Você pode correr, atirar e ganhar pontos. Atire com o mouse, corra para frente e para trás usando as setas do teclado.
Este é um protótipo do primeiro jogo no Flame Steel Engine, com uma única base de código para múltiplas plataformas.

Linda e vazia

Você acorda de manhã, sua mãe prepara uma refeição para você, seu pai lhe dá dinheiro para comprar Snickers e leva você para a escola. Você estuda em uma escola boa e rigorosa, sem valentões. Você é um excelente aluno. Você tem vários tutores em disciplinas para as quais não tem predisposição. Há um quadro de honra pendurado em sua escola, no qual você deve estar, junto com suas notas, de preferência no topo. Seu futuro é brilhante. todos os dias eles te dão presentes, doces, roupas da moda descoladas. Tudo parece bem, mas você entende como essa vida realmente é chata. Não há sentimento de luta, cada passo é predeterminado, planejado com vários anos de antecedência.

É assim que me sinto quando jogo qualquer jogo da Blizzard. Vejo muitas pessoas que não conseguem jogar jogos da velha escola, não conseguem jogar algo verdadeiramente original, não estereotipado (Deadly PremonitionouPapers Please), mas todo mundo adora jogos Nevasca.

Comecei a conhecer seus jogos no PC com Starcraft. Depois do jogo selvagem e arcadeCommand & ConquistaAchei a jogabilidade muito comedida e calmante. O limite no número de unidades, me aprofundando pessoalmente nas operações micro-nano, me faz dormir. O próximo foi um jogo clicker lindo, mas vazio – um jogo clicker lindo, mas vazio. Diablo 2. Bons gráficos, níveis gerados e jogabilidade zero, um passatempo absolutamente meditativo e vazio. No entanto, meus amigos estão firmemente entrincheirados em StarCraft e Diablo. No início dos anos 2000, o alucinante Warcraft 3 foi lançado. Eu realmente gostava da empresa única naquela época. No entanto, o multijogador é muito semelhante ao Starcraft e, portanto, muito enfadonho. Em seguida veio o igualmente lindo e vazio Starcraft 2. Joguei Hearthstone f2p – este jogo é como uma máquina caça-níqueis: no começo você ganha, você tem fé em si mesmo, mas depois os desenvolvedores chegam até você com uma oferta para comprar vários baralhos pelo preço de 500 ₽. Sua habilidade não decide nada, apenas decide quanto dinheiro será gasto em decks virtuais.

Comprei recentemente Overwatch, um jogo de tiro da Blizzard. Gostei da heroína Mei, cuja arte e cosplay foram bombardeados em todas as redes sociais, como resultado, a onda geral de publicidade nas comunidades geek me levou para a costa dos jogadores de Overwatch.

Meus medos eram justificados – excelentes gráficos, diferentes heróis com vozes e habilidades próprias. Nem um único travamento durante o jogo, tudo está no nível da Blizzard. E então, quero dizer que o jogo está novamente tão polido até na jogabilidade que simplesmente não é interessante de jogar. Há uma verdadeira escassez de conteúdos interessantes. momentos inesperados, ideias arriscadas, a empresa, como sempre, pegou apenas o melhor dos últimos anos e, lapidando-o, enviou-o para conquistar o mercado, não poupando numa boa promoção.

O único jogo da Blizzard que eu realmente gostei – Rock’n’Roll Racing. Realmente existe jogabilidade, mas suspeito que isso não se deva ao desenvolvedor, mas ao editor – O Interplay provavelmente o Interplay ajudou a Blizzard a tornar o jogo algo verdadeiramente jogável.

Visão de Jogos #2

Coluna Visão de jogos volátil.
Estou escrevendo breves resenhas dos jogos que joguei recentemente

wsunhd
SIM
aka Sara is Missing (Android, Monsoon Lab) – ты находишь телефон девушки по имени Сара. Внутри телефона есть встроенный помощник IRIS, она хочет найти свою хозяйку и просит тебя ей в этом помочь. Задача понять что творилось в голове Сары из ее переписки, фоточек и видео, найти где она находится. Игра очень оригинальная и достаточно пугающая. Минус в том что нет локализации на русский и другие языки, нет версии для iOS, хотя очевидно что интерфейс игры копирует продукцию Apple (IRIS – SIRI) Также игра очень короткая.
Avaliação 7/10

unnamed
The End of The World
(Android, Sean Wenham) – игра про расставание – парня бросила девушка, теперь он бродит в поисках вина и спит под мостом, вспоминая моменты когда они были вместе. Умилительные моменты воспоминаний, грустная музыка, переход в белое, в принципе отличная игра для женской аудитории и некоторых пацанов. Мне не понравилась бюджетная графика с претензией на оригинальность (напоминает Another World Эрика Шайи), нулевой геймплей, попытки выбить из игрока слезки, предсказуемость, десять минут прохождения. Любителям ванили рекомендую.
Avaliação: 5/10

unnamed

Magnata do Lobisomem< /strong> (Android, Joe Williamson) – um jogo sobre um lobisomem que come pessoas em um parque da cidade. Os gráficos e a jogabilidade aqui são divertidos – muito divertidos. cores infantis, cores claras sem tons escuros, falta de sangue e pessoas parecendo cupcakes redondos com animações engraçadas. As rodadas são curtas e simples, os únicos inimigos são os jornalistas com câmeras. Parece, parece e toca muito divertido. Dos pontos negativos – dificuldade baixa, assistindo anúncios de cancelamento de Game Over, mecanismo de retirada de pontos marcados para redes sociais não funciona.
Avaliação: 6/10

Visão de jogos nº 1

Coluna Visão de jogos volátil.
Neste artigo escreverei breves resenhas dos jogos que joguei recentemente.

jansen

Nem pense que esse cara tem emoções, ele apenas às vezes finge que tem.

Deus Ex Mankind Divided (PC, Square Enix) – um jogo sobre o meio-humano Adam Jensen que está de férias em Praga e salvando o mundo ao longo do caminho.
Bons gráficos, altos requisitos de sistema, enredo previsível, trabalho fora do padrão de artistas – tudo isso é muito útil. tudo está aqui. O jogo oferece muitas opções de passagem, por exemplo, consegui a conquista “pacifista” por não matar ninguém durante todo o jogo, inclusive chefes.
Gostei das referências da cultura pop “The VoidWhich Binds“, “IRON MADE in China” etc. Não gostei da enorme quantidade de texto – água, todos os tipos de e-mails armazenando senhas de portas e correspondência de caracteres, o texto está absolutamente vazio e sem interesse. No momento do jogo, o jogo travava constantemente no modo DirectX 12, os salvamentos automáticos estavam quebrados e os patches pareciam ainda estar sendo lançados. Decidi não jogar o DLC porque… Já estou jogando o jogo principal há cerca de 2 semanas, tendo saído da minha vida vazia habitual.
Avaliação 8/10

slayin

Matar (Android, FDG) – um extraordinário jogo de arcade em estilo pixel para celulares. Você precisa correr e matar monstros comprando equipamentos na loja. Gostei da arte desse jogo, gostei muito da música chiptune, parece um jogo de arcade para NES, controles fáceis. O jogo em si foi decepcionante porque a jogabilidade não ocorre além de uma cena na tela e a incapacidade de se mover por um grande nível.
Avaliação 5/10

swordxolan

Espada de Xolan (Android, Alper Sarıkaya) – jogo de plataformas arcade em estilo pixel para telefones celulares. Um cavaleiro ou samurai percorre o nível e salva as pessoas das jaulas de ferro. Jogabilidade bastante interessante, controles fáceis, níveis grandes. O orçamento geral do jogo, arte barata, som barato e música maluca são decepcionantes.
Avaliação 6/10

bardstale

O Bardo’ s Tale(Android, entretenimento inXile) – remasterização de RPG de ação para celulares. Um RPG fora do padrão com cenas e diálogos engraçados. No disco do jogo estava escrito “vire o disco para ver algo terrível”, na parte de trás havia um lado espelhado do disco. Eu perdi esse jogo no PC naquela época por causa de Neverwinter Nights, mas agora posso jogá-lo no meu celular no ônibus. Para um jogador moderno, há claramente uma falta de pontos sobre onde ir e o que fazer, mas é por isso que adoro jogos da velha escola, eles realmente precisam ser jogados. Também não há capacidade de salvar em nenhum ponto, o que é fundamental para um jogo para celular. Música, arte, gosto de tudo, mas acho os controles atuais na tela do celular inconvenientes. E, claro, este não é um jogo novo, mas simplesmente um relançamento em plataformas móveis, o que pessoalmente considero um grande ponto negativo.
Avaliação 7/10

Diluindo SEC


Commission: Mad Scientist by Culpeo-Fox on DeviantArt

Neste artigo descreverei aproximadamente o padrão ECS e minha implementação no Flame Steel Engine Game Toolkit. O padrão Entity Component System é usado em jogos, incl. no motor Unity. Cada objeto no jogo é uma Essência preenchida com Componentes.  Por que isso é necessário se existe POO?
Em seguida, altere as propriedades, comportamento e exibição de objetos diretamente durante a execução do jogo. Essas coisas não são encontradas em aplicativos do mundo real; a dinâmica de alteração de parâmetros, propriedades de objetos, exibição e som é mais característica de jogos do que de software de contabilidade.


Não passamos bananas

Digamos que temos uma classe de banana em nosso jogo. E o designer do jogo queria que as bananas fossem usadas como armas. Digamos que na arquitetura atual as bananas não tenham nada a ver com armas. Fazendo de uma banana uma arma? Fazer todos os itens armas?
A ECS oferece uma solução para este problema premente – Todos os objetos do jogo devem consistir em componentes. Anteriormente banana era a classe Banana, agora faremos ela, e todos os outros objetos, a classe Entity, adicionando componentes a eles. Digamos que uma banana agora consiste nos seguintes componentes:

  1. Componente de posição (coordenadas no mundo do jogo – x, y, z)
  2. Componente de rotação (coordenadas x, y, z)
  3. Componente calórico de uma banana (o personagem principal não deve engordar muito)
  4. Componente de imagem de banana

Agora estamos adicionando um novo componente para todas as bananas, que é um sinalizador de que elas podem ser usadas como arma – Componente de arma. Agora, quando o sistema do jogo vê que um jogador se aproximou de uma banana, ele verifica a presença de um componente de arma na banana e, se isso acontecer, arma o jogador com uma banana.
No meu jogo Flame Steel Call Of The Death Mask, o padrão ECS é usado por toda parte. Os objetos são compostos de componentes e os próprios componentes podem conter componentes. Em geral, dividir o objeto < – > o componente está faltando na minha implementação, mas isso é até uma vantagem.

screenshot_2016-09-24_14-33-43

A espingarda nesta captura de tela é um componente do jogador e, ao mesmo tempo, a segunda espingarda simplesmente fica pendurada no mapa do jogo como um objeto comum.
Nesta captura de tela, há dois sistemas em execução – renderizador de cena e renderizador de interface. O renderizador de cena funciona com o componente de imagem shotgun no mapa, o renderizador de interface funciona com o componente de imagem shotgun nas mãos do jogador.

Links relacionados:
https://habrahabr.ru/post/197920/
https://www.youtube.com/watch?v=NTWSeQtHZ9M

Arquitetura do kit de ferramentas do jogo Flame Steel Engine

Hoje falarei sobre a arquitetura do kit de ferramentas para desenvolvimento de jogos Flame Steel Engine Game Toolkit.
O Flame Steel Engine Game Toolkit permite que você crie jogos baseados no Flame Steel Engine:
flamesteelgametoolkitschematics

Todas as classes do Flame Steel Engine começam com o prefixo FSE (Flame Steel E motor) eFSEGT (FlameSteelEMotorG forte>ame Toolkit) para kit de ferramentas.
Cena do jogo, objetos e botões são subclasses de FSEObject e devem estar dentro da classe FSEGTGameData. Cada FSEObject deveimplementar a interface FSESerialize, isso permitirá que você salve/carregue dados do jogo e forneça um mecanismo de salvamento.
A classe FSEController funciona com objetos da classe FSEObject. O kit de ferramentas possui uma classe base de controlador de cena de jogo – FSEGTGameSceneController, você pode herdar esta classe para implementar a lógica do seu jogo.
IOSystem é um objeto da interface FSEGTIOSystem, esta interface contém FSEGTRenderer, FSEGTInputController, FSEGTUIRenderer forte>.FSEGTIOSystem deve implementar um renderizador, receber dados do teclado, joysticks (dispositivos de entrada) e fornecer renderização de elementos de interface para sistemas de entrada/saída desta plataforma.
No momento, foi implementado um renderizador, um controlador de teclado baseado na biblioteca SDL, está disponível na classe FSEGTIOSDLSystem

.

Flame Steel Engine Raycaster Demo
Flame Steel Engine Raycaster Demo

Planos futuros para criar um IOSystem baseado em OpenGL, a classe será chamada FSEGTIOGLSystem . Se você quiser criar um IOSystem baseado em qualquer plataforma, então você precisa usar a interface FSEGTIOSystem e implementar o renderizador FSEGTRenderer, FSEGTInputController para isso. plataforma.

Código fonte do Flame Steel Engine, kit de ferramentas, jogo:
https://github.com/demensdeum/FlameSteelCallOfTheDeathMask

Unity, por que Wasteland 2 não funciona no meu Ubuntu?

Tenho orgulho de ser um apoiador do jogo Wasteland 2. Hoje eu queria lançar ele no Ubuntu, mas não consegui. Porém, depois de uma hora pesquisando no Google, tudo deu certo. Acontece que o Unity tem alguns problemas sérios com o Linux, mas usando certas muletas o jogo pode ser iniciado:

ulimit -Sn 65536~/.local/share/Steam/steamapps/common/Wasteland\ 2\ Diretor\'s\ Cut/Linux/WL2

Receita daqui:
https://forums.inxile-entertainment.com/viewtopic.php?t=15505

Aço Flamejante: Olhos Rápidos do Courier

Seu nome era Revil e seu apelido era Quick Eyes. Os amigos do companheiro o chamavam de Shustryak. Um garoto ágil e criado nas ruas, ele sempre sabe o que é interessante e de quem pode conseguir. Por isso conquistou o respeito do meio criminoso de Alterra – 14.
Ele estava agora dentro do armazém da Native Farm United. Havia contêineres enormes ao redor, cheiro de produtos farmacêuticos.
– Por que você se levantou? Pegue e vá.
O balconista falava rosnando, parecia nervoso, mexia de um pé para o outro, era claro que ele estava com muito medo. Minha camisa está molhada de suor.
– Sou do serviço de segurança.
O rosto do balconista ficou pálido e ele cambaleou ainda mais.
– E agora?
– No chão – mãos atrás da cabeça!
O balconista franziu a testa, respirou fundo e puxou a mão para baixo. Nimble Eyes sentiu que algo estava errado – parece que ele estava pegando uma arma. Revil o surpreendeu com um golpe em seu rosto insolente, seu corpo caiu na frente dele com um estrondo.
– Eu pedi o bem…
Após revistar o balconista, Revil encontrou no lugar da arma um inalador comum usado por asmáticos. Ele também encontrou um cartão de acesso aos setores laboratoriais da empresa. Foi um achado de muita sorte.
A gangue Toxic Brothers o enviou para buscar um carregamento de substâncias ilegais – e ele foi enviado para pegar um carregamento de substâncias ilegais. endofomila. Mas Revil não se importava com os Irmãos e sua toxicidade, ele estava aqui por outro motivo – ele estava aqui por outro motivo. pretendia sortear seu bilhete da sorte.
As portas do elevador se abriram, Shustryak escolheu o andar indicado no mapa – quadragésimo segundo. O elevador se moveu lentamente. Revil estava pensando no que faria no setor laboratorial. Ele conhecia sistemas de segurança sofisticados, sistemas inteligentes de verificação de identidade, análise de ondas cerebrais e coisas do gênero.

Revil by Inc
Revil por Inc

Ele não estava sozinho aqui; um funcionário da empresa Lorian concordou em ajudá-lo a causar uma falha no sistema, e como resultado Revil teria dez minutos para executar seus planos.
No trigésimo terceiro andar, o elevador parou e um baque alto foi ouvido acima da cabeça de Revil – o som de um baque forte foi ouvido. algo caiu com estrondo no teto do elevador.
O ágil pegou a pistola, mas naquele momento tentáculos metálicos romperam o teto do elevador. Eles o enredaram, um som estridente foi ouvido e o teto do elevador foi virado para fora. O rosto de uma garota olhou para ele através do buraco, – olhos frios e vazios, no chão do rosto há uma placa de metal com indicadores vermelhos piscantes, deliberadamente não escondida sob a pele.
– Antes de morrer, me diga por que você veio aqui?
O ágil não conseguia se mover, os tentáculos de aço o apertavam cada vez mais e logo ele não conseguiria respirar.
– Eu vim pelo que me pertence por direito!
Um sorriso satisfeito apareceu no rosto da garota. Os indicadores piscaram alternadamente em verde e vermelho…

Aço Flamejante: Máscara do Chamado da Morte

Hoje estou anunciando três projetos de uma vez! Uau!
O primeiro projeto – a plataforma básica para desenvolvimento de aplicativos multiplataforma Flame Steel Engine. Segundo projeto – um conjunto de bibliotecas para a plataforma base Flame Steel Game Toolkit, destinada ao desenvolvimento de jogos. E o terceiro projeto – um jogo com níveis gerados em um cenário de fantasia cibernética Flame Steel: Call of The Death Mask.
O original está disponível sob a licença MIT, os ativos do jogo estarão disponíveis sob diferentes licenças (verifique cada arquivo separadamente)

Link para Github (C++, Eclipse):
https://github.com/demensdeum/FlameSteelCallOfTheDeathMask

Me perdendo

“Você não pode se tornar um mestre de tudo” – Frases como essa sempre me fazem rir. Todos caem nessa armadilha da especialização. usuários, programadores, chefes, clientes. “Eu quero isso como a Microsoft/Apple/Google”, “Por que não fazemos apenas um iPhone russo?”, “Por que não não é como no Word /uber/photoshop?” – Qualquer pessoa envolvida de alguma forma com TI já ouviu essas frases. Essas frases, repetidas pelos lábios de diferentes pessoas, soam ainda mais engraçadas.

Vou perguntar a você leitor – por que você precisa de outra palavra? Por que você precisa de outro Uber? Por que você precisa de outro photoshop? Por que você precisa “ser como um iPhone”?
Por que você se prende às interfaces e à abordagem de apenas uma empresa? Por que você se considera fã apenas dos produtos Apple/Google/Microsoft? Por que você não consegue abrir sua mente para abordagens alternativas para resolver problemas? Por que você não quer ser mais produtivo?

Muitos usuários da Microsoft não gostaram de como a empresa decidiu que todos precisavam atualizar para o Windows 10. As pessoas criticam as interfaces inconvenientes do iPhone, travamentos do sistema durante as atualizações, mudanças de design que não precisam, mas que ainda continuam a usar porque estão muito acostumados e têm um “iPhone” tem status na sociedade moderna.

Às vezes parece que se fosse pedido à Microsoft/Apple/Google que desistissem dos seus próprios filhos em troca de continuarem a trabalhar com os seus produtos, devido ao elevado apego a estes produtos, as pessoas facilmente desistiriam dos seus filhos.< /p>

Não seja eles, não se apegue a um produto, procure opções alternativas. Uma vez me ofereceram para desenvolver um sistema para corretores de imóveis, com interface em Microsoft Excel, e também houve ofertas para desenvolver um sistema de “quadro branco interativo” em Microsoft PowerPoint. Quando perguntei por que a Microsoft especificamente, eles me disseram que estavam “tão acostumados” quando perguntei se essas empresas licenciavam software da Microsoft, eles me responderam evasivamente, dizendo que se necessário, eles o fariam; então eles comprarão.

Leitor, recomendo que você estude as facetas do mundo da TI, pelo menos brevemente. Se você usou apenas o Microsoft Windows durante toda a sua vida, experimente o Apple OS X ou Linux. Se você usa apenas um iPhone, tente usar a versão mais recente do Android por pelo menos uma semana. No momento em que você passa para o lado de apenas uma empresa, fechando-se para os produtos das outras, nesse momento você se perde. Ele mesmo, como pessoa que pode decidir por si mesmo o que quer, como pessoa que pode escolher a ferramenta mais conveniente e produtiva para resolver um problema específico.

Programadores de apenas uma plataforma – outra dor de cabeça para mim pessoalmente e, acredito, para o setor de TI como um todo. Desenvolvedores que fazem aplicações que exportam apenas para *.doc ou apenas para *.pdf, desenvolvedores que estão vinculados a apenas um banco de dados comercial desatualizado (por exemplo, IBM Informix, ou Deus me livre Firebird), a apenas um tipo de hardware (todos esses programas que não funcionam para x86 no Android), é claro que entendo que vocês estão “acostumados”, mas pessoal, é hora de mudar.

No meu trabalho, costumo usar ferramentas impopulares, mas muito convenientes. Um dos exemplos – Foi necessário reduzir a resolução e compactar cerca de 100 fotos para download rápido em 3G e saída para iPad. Naquele dia ouvi uma das frases mais típicas  – “Teremos que converter todas as fotos manualmente no *Photoshop* para o formato desejado”. Ela me pareceu engraçada porque… Imaginei uma pessoa que iria refazer manualmente, como um servo de Deus, todas essas 100 fotos no Photoshop, ou tentar automatizá-las através de um mecanismo embutido. A questão aqui é justamente que a pessoa é tão apegada ao Photoshop que nem sequer suspeitou da existência de um conjunto de ferramentas gratuitas e abertas como o ImageMagick. O ImageMagick permite que você faça muitas coisas com imagens vetoriais e raster, inclusive sendo ideal para resolver um problema com 100 imagens em 5 minutos.

Seja dono de tudo, estude, experimente, não se torne escravo de uma corporação específica.

Ajudantes do Papai Noel de 16 bits

Recebi uma mensagem por e-mail:
“Ei, estamos abrindo uma game jam retrô aqui – bibitjam3!!! Você deveria fazer um jogo em uma plataforma retrô de 8 a 16 bits!!!”
Bah! Este é o meu sonho de infância & #8211; faça um jogo para Sega Mega Drive Two.
Pois bem, tentei fazer um brinquedo e até consegui:
rqr
Chamei o jogo de “Red Queen’s Knead”. A história é – “A Rainha Vermelha foi jogada em um labirinto mortal, agora ela matará todos em seu caminho para a liberdade.”
Você pode andar por aí, atacar a coisa verde com olhos vermelhos, abrir baús de tesouro e passar de cena em cena.
Este é obviamente o “nível de tentativa” pelo menos faça algo pelo shogi e pela competição.
Estou usando o kit de ferramentas SGDK – compilador para Motorola 68k baseado em GCC, bibliotecas para trabalhar com hardware Sega Mega.
Agora entendo que foi muito difícil & #8211; fazendo jogos há 20-30 anos. Por exemplo, cada bloco – deve ser dividido em pedaços de 8×8 pixels e desenhado em pedaços, um de cada vez. Além disso, a paleta de cada peça não deve exceder 16 cores! Agora, claro, é muito mais fácil.
Claro, você precisa criar um motor de jogo, som e gráficos para o jogo, como está agora.
Você pode jogar Red Queen usando o emulador Sega Genesis e a ROM do jogo:
http://demensdeum.com/games/redQueenRampageSegaGenesis/RedQueenRampage.zip
Se quiser ver as fontes:
http://demensdeum.com/games/redQueenRampageSegaGenesis/RedQueenRampageSource.zip

Tutorial: Criando um jogo no Android. Nós torcemos a terra. Rajawali

No princípio Deus criou o céu e a terra.

Este é o segundo vídeo em que estamos fazendo um jogo para Android. Vamos mover a terra!
Entre em contato comigo se tiver alguma dúvida ou se quiser acrescentar algo a este curso.
Vídeo baseado no artigo Configuração básica e configuração básica do Rajawali. Esfera (Maven):
http://www.clintonmedbery.com/basic-rajawali3d-tutorial-for-android/

Mecanismo Rajawali: https://github.com/Rajawali/Rajawali

Plano, comandos, links:
1. Instale VirtualBox Adiçõespara convidados

sudo apt-get install dkmssudo apt-get install linux-headers-$(uname -r)

2. Adicionar biblioteca Rajawali ao projeto
Arquivobuild.gradle (Projeto: Caverna do Demônio)
Adicione mavenCentral() < /span>para a seção buildscript/repositories
Adicione
maven { url< /span> “https://oss.sonatype.org/content/repositories/snapshots/” } para a seção todos os projetos/repositórios

Arquivo build.gradle (Módulo: app)
Adicionar compilar ‘org.rajawali3d:rajawali:1.0.306-SNAPSHOT@aar& #8217; para a seção dependências

3. Crie uma classe Renderer, inicialize a cena, adicione uma esfera e gire!
Código fonte da classe Renderer.java:
https://github.com/clintonmedbery/RajawaliBasicProject/blob/master/app/src/main/java/com/clintonmedbery/rajawalibasicproject/Renderer.java

4. Adicione a classe Renderer a MainActivity
Código fonte MainActivity.java:
https://github.com/clintonmedbery/RajawaliBasicProject/blob/master/app/src/main/java/com/clintonmedbery/rajawalibasicproject/MainActivity.java

Textura do solo:
http://www.clintonmedbery.com/wp-content/uploads/2015/04/earthtruecolor_nasa_big.jpg