| English | Português (Brasil) |
O NES Pascal oferece cinco tipos embutidos. Cada um ocupa um byte, mas os tipos
são distintos e não são convertidos implicitamente. Também há
enumerações definidas pelo usuário, que são tipos nominais de um byte,
e records nomeados, que são tipos agregados nominais de layout fixo.
O runtime também predefine o record comum de quatro bytes nes_rect, usado
pelos helpers de colisão; ele não é um sexto
tipo escalar embutido.
nes_colornes_color ocupa um byte e representa um valor de paleta do NES. Seu intervalo
permitido é $00..$3F.
O mesmo intervalo é aplicado para atribuições escalares, chamadas de cor de fundo universal, paletas completas de fundo e sprites e cores de paleta individuais. Os valores nunca sofrem wrap ou máscara para se ajustarem ao intervalo.
Válido:
const
BackgroundColor: nes_color = $21;
Inválido:
const
BackgroundColor: nes_color = $80;
Diagnóstico esperado:
E4002 path/to/source.nsp:4:34
Value $80 is not valid for type nes_color.
Allowed range: $00..$3F.
bytebyte ocupa um byte e aceita valores hexadecimais de $00 até $FF.
const
Maximum: byte = $FF;
Um valor maior produz E4003.
booleanboolean ocupa um byte. false é representado por zero e true por um.
Nenhuma conversão de hexadecimal para booleano é permitida.
const
RenderingEnabled: boolean = true;
Atribuições e operandos de operadores devem obedecer às regras exatas de tipos descritas em Atribuições e Expressões.
spritesprite é um índice de OAM de hardware fortemente tipado. Ele ocupa um byte, mas seus
valores permitidos são $00..$3F, selecionando os 64 sprites de hardware do NES.
var
PlayerSprite: sprite;
begin
PlayerSprite := nes.sprite_create();
end;
Um valor acima de $3F produz E4008. sprite não é intercambiável implicitamente
com byte, não suporta aritmética ou inc/dec, e é passado diretamente para a
API de sprites de hardware. nes.sprite_create() produz
um valor de sprite estaticamente reservado; não é uma função geral nem uma alocação
dinâmica de objeto em runtime.
metaspritemetasprite é uma identidade opaca de um byte para um objeto lógico criado
estaticamente composto por vários sprites de hardware. Não é um índice de OAM
e nenhum literal hexadecimal pode ser convertido para ele.
var
Player: metasprite;
begin
nes.import_metasprite(player);
Player := nes.metasprite_create(player.idle_0);
end;
Cada local de criação possui uma identidade estável e slots de componentes de posse
estática. O tipo suporta atribuição e a API de metasprites,
mas não suporta aritmética, comparações, inc, dec, constantes ou parâmetros
de procedimento. E4009 rejeita valores numéricos em um contexto de metasprite.
Nomes de quadros e animações importados são tipos de símbolos internos em tempo de compilação, e não tipos embutidos declaráveis pelo usuário. Símbolos de quadros selecionam quadros manuais/de criação; símbolos de animação são aceitos apenas pela API de animação de sprites. Nenhum deles pode ser armazenado em uma variável ou sintetizado a partir de um byte.
Parâmetros de valor de procedimentos atualmente suportam apenas byte e boolean.
nes_color, sprite e metasprite permanecem tipos globais válidos, mas produzem
E4005 quando usados como tipo de parâmetro. nes_color e sprite também suportam
constantes tipadas; identidades de metasprite originam-se apenas de locais de criação.