Pular para o conteúdo
Baixar

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.
{
"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.

{
"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.

{
"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.

{
"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.

{
"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 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.