Code frameworks
Como o Fabled executa seu código
Acompanhe um projeto do código-fonte até o jogo: o que roda e quando, como o ledger funciona e o que um cenário prova.
Do código-fonte ao jogo
Seu projeto passa por cinco etapas. Só a última é o jogo. As etapas anteriores nunca mudam um personagem ao vivo.
- Escrever
Você edita os arquivos de código-fonte no editor de código-fonte. Nada roda ainda.
- Verificar
Verificar e visualizar compila suas edições atuais e executa todos os cenários, salvas ou não. Os problemas aparecem no painel Problemas. Nada é publicado.
- Salvar
Salvar projeto guarda o código-fonte como uma nova versão do seu jogo. Preparar só funciona com uma versão salva, então salve antes de preparar.
- Preparar
Preparar meu jogo cria Frameworks, Frames e conteúdo privados a partir da versão salva. O servidor verifica o projeto de novo, e o veredito dele é o que vale.
- Jogar
Um jogador cria um personagem a partir do seu Framework. O construtor o cria, e as ações o mudam.
O que roda e quando
| Parte | Quando roda | O que faz |
|---|---|---|
| Constructor | Uma vez, quando um Element é criado a partir do Framework. | Transforma as entradas nos valores iniciais. Nunca escreve. |
| Função de ledger | Quando o Element é criado, na ordem em que o schema declara as funções, e de novo depois de cada ação. | Deriva um valor a partir de valores salvos. Uma ação não pode escrevê-lo. |
| Ação | Quando um jogador usa um botão que a chama. | Escreve no ledger com ledger.set e ledger.add. |
| Frame | Sempre que a ficha é mostrada. | Lê valores salvos e os desenha. Seus botões chamam ações. |
| Cenário | Em Verificar e visualizar, nunca no jogo. | Cria um Element, executa ações e compara cada valor e cada escrita. |
O ledger
Os valores de um Element nunca são editados no lugar. Toda mudança é uma escrita no seu ledger. ledger.set troca um valor e ledger.add soma a ele. Os cenários listam essas escritas, então você vê exatamente o que uma regra faz.
Um valor derivado vem de uma função de ledger, então uma ação não pode escrevê-lo. A verificação recusa:
which is a non-writable state fieldO constructor ainda retorna um campo que uma função de ledger deriva, com um marcador como 0. A função de ledger troca o marcador quando o Element é criado. Um cenário compara seus expectedValues com os valores depois que as funções de ledger rodaram, então escreva ali o valor derivado, não o marcador.
As funções de ledger rodam na ordem em que o schema as declara, e cada uma vê os resultados das anteriores. Declare uma função depois das funções cujos campos ela lê. Aqui total lê base, mas é declarada primeiro, então lê o marcador:
{
"ledgerFunctions": [
{
"id": "total",
"name": "Total",
"field": "total",
"source": "rules/total.ts"
},
{
"id": "base",
"name": "Base",
"field": "base",
"source": "rules/base.ts"
}
]
}expectedValues.total: expected 11, constructor returned 1Use uma função de ledger para um valor que deve acompanhar outros campos e que nenhuma ação escreve. Use um valor do constructor para um número que o personagem possui e que as ações mudam, como hp. O constructor o calcula uma vez, então uma mudança posterior nos campos de origem não o move.
O que um cenário prova
- O construtor retorna os valores que você espera.
- Cada ação faz exatamente as escritas que você lista.
- Os valores derivados saem certos, também depois de uma ação.
- Todo arquivo é usado e o projeto inteiro compila.
Um cenário não prova a aparência de uma ficha nem a sensação de uma regra no jogo. Teste o jogo preparado para isso.

