Ativa o menu
Alternar menu de preferências
Alternar menu pessoal
Não autenticado(a)
Your IP address will be publicly visible if you make any edits.

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/x 0 0.0 0 0
0.0054931640625° 1/65536 0.00390625 0.0000152587890625 1 0.03125
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
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