Twilight Princess
Decompilation of The Legend of Zelda: Twilight Princess
Loading...
Searching...
No Matches
angle_utils.h
Go to the documentation of this file.
1#ifndef _ANGLE_UTILS_H_
2#define _ANGLE_UTILS_H_
3
4#include "global.h"
5#include "types.h"
6
7#define VAR_ADD(x, y) ((x) += (y))
8#define VAR_SUB(x, y) ((x) -= (y))
9#define VAR_MULT(x, y) ((x) *= (y))
10
11#define VAR_ADD_CAST(x, y, t) ((x) += (t)(y))
12#define VAR_SUB_CAST(x, y, t) ((x) -= (t)(y))
13#define VAR_MULT_CAST(x, y, t) ((x) *= (t)(y))
14
15#define S8_ADD(x, y) VAR_ADD_CAST(x, y, s8)
16#define U8_ADD(x, y) VAR_ADD_CAST(x, y, u8)
17#define S16_ADD(x, y) VAR_ADD_CAST(x, y, s16)
18#define U16_ADD(x, y) VAR_ADD_CAST(x, y, u16)
19#define S32_ADD(x, y) VAR_ADD_CAST(x, y, s32)
20#define U32_ADD(x, y) VAR_ADD_CAST(x, y, u32)
21
22#define S8_SUB(x, y) VAR_SUB_CAST(x, y, s8)
23#define U8_SUB(x, y) VAR_SUB_CAST(x, y, u8)
24#define S16_SUB(x, y) VAR_SUB_CAST(x, y, s16)
25#define U16_SUB(x, y) VAR_SUB_CAST(x, y, u16)
26#define S32_SUB(x, y) VAR_SUB_CAST(x, y, s32)
27#define U32_SUB(x, y) VAR_SUB_CAST(x, y, u32)
28
29#define S8_MULT(x, y) VAR_MULT_CAST(x, y, s8)
30#define U8_MULT(x, y) VAR_MULT_CAST(x, y, u8)
31#define S16_MULT(x, y) VAR_MULT_CAST(x, y, s16)
32#define U16_MULT(x, y) VAR_MULT_CAST(x, y, u16)
33#define S32_MULT(x, y) VAR_MULT_CAST(x, y, s32)
34#define U32_MULT(x, y) VAR_MULT_CAST(x, y, u32)
35
36#define ANGLE_ADD S16_ADD
37#define ANGLE_SUB S16_SUB
38#define ANGLE_MULT S16_MULT
39
40// There are some angles that weren't sign-extended until the shield version
41#if !PLATFORM_SHIELD
42 #define S8_ADD_2 VAR_ADD
43 #define U8_ADD_2 VAR_ADD
44 #define S16_ADD_2 VAR_ADD
45 #define U16_ADD_2 VAR_ADD
46 #define S32_ADD_2 VAR_ADD
47 #define U32_ADD_2 VAR_ADD
48
49 #define S8_SUB_2 VAR_SUB
50 #define U8_SUB_2 VAR_SUB
51 #define S16_SUB_2 VAR_SUB
52 #define U16_SUB_2 VAR_SUB
53 #define S32_SUB_2 VAR_SUB
54 #define U32_SUB_2 VAR_SUB
55
56 #define S8_MULT_2 VAR_MULT
57 #define U8_MULT_2 VAR_MULT
58 #define S16_MULT_2 VAR_MULT
59 #define U16_MULT_2 VAR_MULT
60 #define S32_MULT_2 VAR_MULT
61 #define U32_MULT_2 VAR_MULT
62#else
63 #define S8_ADD_2 S8_ADD
64 #define U8_ADD_2 U8_ADD
65 #define S16_ADD_2 S16_ADD
66 #define U16_ADD_2 U16_ADD
67 #define S32_ADD_2 S32_ADD
68 #define U32_ADD_2 U32_ADD
69
70 #define S8_SUB_2 S8_SUB
71 #define U8_SUB_2 U8_SUB
72 #define S16_SUB_2 S16_SUB
73 #define U16_SUB_2 U16_SUB
74 #define S32_SUB_2 S32_SUB
75 #define U32_SUB_2 U32_SUB
76
77 #define S8_MULT_2 S8_MULT
78 #define U8_MULT_2 U8_MULT
79 #define S16_MULT_2 S16_MULT
80 #define U16_MULT_2 U16_MULT
81 #define S32_MULT_2 S32_MULT
82 #define U32_MULT_2 U32_MULT
83#endif
84
85#define ANGLE_ADD_2 S16_ADD_2
86#define ANGLE_SUB_2 S16_SUB_2
87#define ANGLE_MULT_2 S16_MULT_2
88
89#endif // !_ANGLE_UTILS_H_