Definitions
Mais ações
Números de ponto fixo
O ZDoom comumente representa números de ponto fixo como inteiros de 32 bits, com a parte inteira do número representado armazenada nos 16 bits superiores, e com a parte fracionária (em 65536 avos) armazenada nos 16 bits inferiores.
Em outras palavras, a representação em ponto fixo de um número = esse número * 65536.
Veja Fixed point numbers para mais informações.
Ângulos em byte
Este é um valor entre 0 e 255 representando uma direção e é usado com alguns line specials. Alguns valores úteis são:
| 96
Noroeste |
64
Norte |
32
Nordeste |
| 128
Oeste |
0
Leste | |
| 160
Sudoeste |
192
Sul |
224
Sudeste |
Ângulos de ponto fixo
Esses ângulos são semelhantes aos acima, mas o valor fica entre 0.0 e 1.0 e é representado como um fixed point number. Isso significa que o valor fica entre 0 e 65536, com 0 representando 0.0 e 65536 representando 1.0. Portanto, é possível representar esses ângulos como decimais (por exemplo, 0.5 é oeste, 0.25 é norte) e usar FixedMul e outros comandos neles.
Convertendo ângulos
Para converter ângulos de ponto fixo para ângulos em byte, você pode usar a seguinte fórmula:
byte_angle = fixed_point_angle >> 8
E para converter ângulos em byte para ângulos de ponto fixo, você usa o oposto:
fixed_point_angle = byte_angle << 8
Aqui estão algumas conversões entre diferentes representações de ângulo, em graus, ângulos em byte, ângulo de ponto fixo e interpretação integral do ponto fixo. O maior fator comum de 360 e 256 é 8, o que significa que apenas múltiplos de 45° podem ser representados com precisão por inteiros tanto em graus quanto em ângulos em byte ou ângulos de ponto fixo.
| Note: Ângulos que não podem ser representados internamente por um valor integral perderão precisão por arredondamento. Valores decimais nas colunas "Byte" e "Integer" estão presentes apenas para ilustrar a perda de precisão pois, por definição, eles não podem existir nessas representações. Se a coluna "Integer" não representar um inteiro real, então a representação em ponto fixo é igualmente impossível: por exemplo, 36° seria representado como 6553 em inteiro, não 6553.6; portanto, a representação em ponto fixo seria 0.0999908447265625 em vez de 0.1. |
| Degree | Circle fraction | Byte | Fixed | Integer | Build |
|---|---|---|---|---|---|
| 0° | 0/x | 0 | 0.0 | 0 | 0 |
| 0.0054931640625° | 1/65536 | 0.00390625 | 0.0000152587890625 | 1 | 0.03125 |
| 1° | 1/360 | 0.71 | 0.002777... | 182.0444444... | 5.688888... |
| 1.40625° | 1/256 | 1 | 0.00390625 | 256 | 8 |
| 2.8125° | 1/128 | 2 | 0.0078125 | 512 | 16 |
| 5° | 1/72 | 3.55 | 0.013888... | 910.222222... | 28.444444... |
| 5.625° | 1/64 | 4 | 0.015625 | 1024 | 32 |
| 10° | 1/36 | 7.11 | 0.027777... | 1820.444444... | 56.888888... |
| 11.25° | 1/32 | 8 | 0.03125 | 2048 | 64 |
| 15° | 1/24 | 10.67 | 0.041666... | 2730.666666... | 85.333333... |
| 22.5° | 1/16 | 16 | 0.0625 | 4096 | 128 |
| 30° | 1/12 | 21.3333... | 0.083333... | 5461.333333... | 170.666666... |
| 36° | 1/10 | 0.000390625 | 0.1 | 6553.6 | 204.8 |
| 45° | 1/8 | 32 | 0.125 | 8192 | 256 |
| 60° | 1/6 | 42.6666... | 0.166666... | 10922.666666... | 341.333333... |
| 72° | 1/5 | 51.2 | 0.2 | 13107.2 | 409.6 |
| 90° | 1/4 | 64 | 0.25 | 16384 | 512 |
| 120° | 1/3 | 85.333333... | 0.333333... | 21845.333333... | 682.666666... |
| 135° | 3/8 | 96 | 0.375 | 24576 | 768 |
| 144° | 2/5 | 102.4 | 0.4 | 26214.4 | 819.2 |
| 150° | 5/12 | 106.666666... | 0.416666... | 27306.666666... | 853.333333... |
| 180° | 1/2 | 128 | 0.5 | 32768 | 1024 |
| 210° | 7/12 | 149.333333... | 0.583333... | 38229.333333... | 1194.666666... |
| 216° | 3/5 | 153.6 | 0.6 | 39321.6 | 1228.8 |
| 225° | 5/8 | 160 | 0.625 | 40960 | 1280 |
| 240° | 2/3 | 170.666666... | 0.666666... | 43690.666666... | 1365.333333... |
| 270° | 3/4 | 192 | 0.75 | 49152 | 1536 |
| 288° | 4/5 | 204.8 | 0.8 | 52428.8 | 1638.4 |
| 300° | 5/6 | 213.333333... | 0.833333... | 54613.333333... | 1706.666666... |
| 315° | 7/8 | 224 | 0.875 | 57344 | 1792 |
| 330° | 11/12 | 234.666666... | 0.916666... | 60074.666666... | 1877.333333... |
| 360° | 1/1 | 256 | 1.0 | 65536 | 2048 |
Ângulos de sprite
Veja o artigo Sprite
Inclinações em byte
Inclinações podem ser representadas em forma de byte, pois elas têm apenas um intervalo de 180°, em vez de 360°. A inclinação é um valor entre -90 e 90 representando a inclinação vertical e é usada com alguns atores. O valor é, na verdade, representado em graus usando um byte com sinal; valores negativos são para cima, valores positivos são para baixo, 0 é nivelado. Alguns valores úteis são:
| -45
45° para cima |
-90
Direto para cima |
| 0
Nivelado | |
| 45
45° para baixo |
90
Direto para baixo |
Inclinações de ponto fixo
Algumas funções usam inclinação como um número de ponto fixo. Isso usa os mesmos valores de ângulo de ponto fixo que outros ângulos, então o intervalo fica entre -0.25 (para 90° para cima) e 0.25 (para 90° para baixo).
Unidades de tempo
- Tic
- Um intervalo de tempo de 1/35 de segundo. A lógica de atores (duração de estado) é baseada em tics.
- Octic
- Um intervalo de tempo de 1/8 de segundo. A lógica de setores (velocidade e espera para crushers, portas, elevadores, subida de escadas, etc.) é baseada em octics, assim como interpolation points para câmeras móveis e movimentadores de atores.
Portas do Doom vanilla esperam 150 tics, aproximadamente 34 octics ou 4.3 segundos. Plataformas do Doom vanilla esperam 105 tics, equivalente a 24 octics ou 3 segundos.
Precisão
Desde GZDoom v3.2.2, o temporizador mais preciso de 35 tics garante que 35 tics durem exatamente um segundo. Em versões anteriores, isso não é verdade, por causa de uma perda de precisão com divisão inteira. Nessas versões antigas (incluindo todas as versões oficiais do port pai ZDoom), a duração de um tic é de 28 milissegundos (em vez de 28.5714287514...), o que significa que 35 tics na verdade compõem apenas 0.98 segundos. Portanto, há na verdade 35.7142857142857... tics em um segundo. Da mesma forma, octics são derivados internamente de tics (um octic sendo 35 tics divididos por 8), e a duração de um octic é 122 milissegundos (em vez de 122.5 com base no tic, ou 125 com base no segundo), o que significa que 8 octics na verdade compõem apenas 0.976 segundos. Portanto, há 8.192721311475409... octics em um segundo.
Velocidade de movimento de setor
Muitos especiais recebem um argumento speed, que geralmente está em oitavos de uma unidade por tic. Ou seja, um valor de 8 significa mover uma unidade por tic, ou 35 unidades por segundo. Um valor de 0 geralmente não fará nada útil.
Como referência, as velocidades padrão de Doom e Boom são as seguintes. O Boom usa um conjunto padrão de velocidades "slow, normal, fast, turbo" para muitos especiais generalizados, mas elas têm significados diferentes para portas, plataformas (incluindo pisos, tetos e crushers móveis) e construção de escadas.
| Value | Boom doors | Boom platforms | Boom stairs | Doom |
|---|---|---|---|---|
| 2 | Lento | Escadas padrão | ||
| 4 | Normal | Plataformas de subida e perpétuas; donut | ||
| 8 | Lento | Pisos, tetos e crushers padrão | ||
| 16 | Lento | Normal | Rápido | Portas padrão; crushers rápidos |
| 32 | Normal | Rápido | Turbo | Plataformas padrão; pisos rápidos; escadas rápidas |
| 64 | Rápido | Turbo | Portas blazing; plataformas rápidas | |
| 128 | Turbo |