Formato dos arquivos
Um projeto da Brasa é uma pasta comum, com arquivos de texto legíveis. As pastas são livres: a Brasa descobre o tipo de cada arquivo pela extensão.
| Arquivo | O que é |
|---|---|
project.brasa |
As configurações do projeto. Marca a pasta como um projeto. |
Nome.room.json |
Uma room. |
Nome.obj.json + Nome.hpp + Nome.cpp |
Um objeto: os dados e o código. Um objeto sem código tem só o .obj.json. |
nome.sprite.json + a imagem |
Um sprite. O "image" aponta para o PNG. |
nome.wav |
Um som. |
*.cpp, *.hpp soltos |
Código compartilhado, como o game.hpp. |
.brasa/ |
Arquivos gerados pelo Play (build). Pode apagar; não vai para o Git. |
.vscode/ |
Configuração do autocomplete, gerada pela Brasa. |
project.brasa
Seção intitulada “project.brasa”{ "formatVersion": 2, "name": "Primeiro Jogo", "width": 320, "height": 180, "windowScale": 3, "startRoom": "Main"}width e height são a resolução do jogo, startRoom é a room inicial e windowScale é a escala inicial da janela (ausente = automática).
fullscreen (true abre em tela cheia) e scale ("integer", "fit" para manter a proporção, ou "stretch") só aparecem quando são diferentes do padrão.
Dois campos opcionais guardam o resto das Configurações do projeto:
{ "input": { "esquerda": ["Left", "A", "Pad:Left", "Pad:LeftX-"], "atirar": ["Space", "Pad:A"] }, "globalObjects": ["Controle"]}input são as ações de entrada: cada nome com as suas teclas e botões. globalObjects é a lista dos objetos globais.
Objeto (.obj.json)
Seção intitulada “Objeto (.obj.json)”{ "sprite": "nave", "visible": true, "solid": false, "vars": [ { "name": "velocidade", "type": "number", "default": 2.0 } ]}O código fica no .hpp e no .cpp de mesmo nome, ao lado.
Estes campos só aparecem quando são diferentes do padrão: mask, flipX, persistent, gravity, gravityDirection, friction e maxFallSpeed.
vars são as variáveis do objeto. O type é number, int, bool, string, color, room, object, sprite ou sound. Uma cor é [vermelho, verde, azul, alfa], de 0 a 255.
Room (.room.json)
Seção intitulada “Room (.room.json)”{ "width": 320, "height": 180, "layers": [ { "type": "instances", "name": "Instancias", "depth": 0, "instances": [ { "object": "Player", "x": 160, "y": 150 } ] }, { "type": "tiles", "name": "Chao", "depth": 100, "tileset": "Terreno", "data": [ "0,0,0", "1,2,3" ] }, { "type": "background", "name": "Fundo", "depth": 200, "color": [16, 14, 32] } ]}layers são as camadas, da frente para trás. O type é instances, tiles, sprites ou background. Numa camada de tiles, data tem uma fileira por linha: 0 é vazio e n é o tile n - 1 do tileset.
Cada instância pode ter também scaleX, scaleY, angle e vars (os valores próprios das variáveis, por nome: "vars": { "velocidade": 3 }). Eles só aparecem no arquivo quando são diferentes do padrão. A câmera da room também fica salva aqui.
Tileset (.tileset.json)
Seção intitulada “Tileset (.tileset.json)”{ "sprite": "tiles", "collision": "ssss..s", "terrains": [ { "name": "grama", "at": 0 } ]}sprite é o sprite com os tiles (cada quadro é um tile). collision tem um caractere por tile: s é sólido e . é livre. terrains são os blocos 3 × 3 do pincel de terreno: at é o tile do canto de cima à esquerda.
Sprite (.sprite.json)
Seção intitulada “Sprite (.sprite.json)”{ "image": "nave.png", "frameW": 16, "frameH": 16, "frames": 2, "origin": [8.0, 8.0], "bbox": [3.0, 2.0, 10.0, 12.0]}origin é [x, y] dentro do quadro, e bbox é a caixa de colisão: [x, y, largura, altura].
O campo opcional "fps" (maior que 0 e no máximo 120) guarda a velocidade da animação em quadros por segundo, definida no editor de sprite. Com ele, o animSpeed do objeto vira um multiplicador; sem ele, o animSpeed conta em quadros por passo.
Projetos antigos
Seção intitulada “Projetos antigos”Projetos do formato antigo (com um assets/sprites.json central) são convertidos para o formato 2 quando você os abre no editor. Pela linha de comando, use brasa_cli migrate <pasta>: veja brasa_cli.
