diff options
Diffstat (limited to 'apps/plugins/rockboy/palette.c')
-rw-r--r-- | apps/plugins/rockboy/palette.c | 153 |
1 files changed, 0 insertions, 153 deletions
diff --git a/apps/plugins/rockboy/palette.c b/apps/plugins/rockboy/palette.c deleted file mode 100644 index 5c5083d247..0000000000 --- a/apps/plugins/rockboy/palette.c +++ /dev/null | |||
@@ -1,153 +0,0 @@ | |||
1 | |||
2 | |||
3 | #include "rockmacros.h" | ||
4 | #include "defs.h" | ||
5 | #include "fb.h" | ||
6 | #include "palette.h" | ||
7 | |||
8 | |||
9 | static byte palmap[32768]; | ||
10 | static byte pallock[256]; | ||
11 | static int palrev[256]; | ||
12 | |||
13 | /* Course color mapping, for when palette is exhausted. */ | ||
14 | static byte crsmap[4][32768]; | ||
15 | static int crsrev[4][256]; | ||
16 | static const int crsmask[4] = { 0x7BDE, 0x739C, 0x6318, 0x4210 }; | ||
17 | |||
18 | enum plstatus | ||
19 | { | ||
20 | pl_unused = 0, | ||
21 | pl_linger, | ||
22 | pl_active, | ||
23 | pl_locked | ||
24 | }; | ||
25 | |||
26 | /* | ||
27 | static byte bestmatch(int c) | ||
28 | { | ||
29 | byte n, best; | ||
30 | int r, g, b; | ||
31 | int r2, g2, b2, c2; | ||
32 | int err, besterr; | ||
33 | |||
34 | r = (c & 0x001F) << 3; | ||
35 | g = (c & 0x03E0) >> 2; | ||
36 | b = (c & 0x7C00) >> 7; | ||
37 | |||
38 | best = 0; | ||
39 | besterr = 1024; | ||
40 | for (n = 1; n; n++) | ||
41 | { | ||
42 | c2 = palrev[n]; | ||
43 | r2 = (c2 & 0x001F) << 3; | ||
44 | g2 = (c2 & 0x03E0) >> 2; | ||
45 | b2 = (c2 & 0x7C00) >> 7; | ||
46 | err = abs(r-r2) + abs(b-b2) + abs(g-g2); | ||
47 | if (err < besterr) | ||
48 | { | ||
49 | besterr = err; | ||
50 | best = n; | ||
51 | } | ||
52 | } | ||
53 | return best; | ||
54 | } | ||
55 | */ | ||
56 | |||
57 | static void makecourse(int c, byte n) | ||
58 | { | ||
59 | int i; | ||
60 | for (i = 0; i < 4; i++) | ||
61 | { | ||
62 | c &= crsmask[i]; | ||
63 | crsmap[i][c] = n; | ||
64 | crsrev[i][n] = c; | ||
65 | } | ||
66 | } | ||
67 | |||
68 | static byte findcourse(int c) | ||
69 | { | ||
70 | int i; | ||
71 | byte n; | ||
72 | for (i = 0; i < 4; i++) | ||
73 | { | ||
74 | c &= crsmask[i]; | ||
75 | n = crsmap[i][c]; | ||
76 | if (crsrev[i][n] == c) | ||
77 | return n; | ||
78 | } | ||
79 | return 0; | ||
80 | } | ||
81 | |||
82 | |||
83 | void pal_lock(byte n) | ||
84 | { | ||
85 | if (!n) return; | ||
86 | if (pallock[n] >= pl_locked) | ||
87 | pallock[n]++; | ||
88 | else pallock[n] = pl_locked; | ||
89 | } | ||
90 | |||
91 | byte pal_getcolor(int c, int r, int g, int b) | ||
92 | { | ||
93 | byte n; | ||
94 | static byte l; | ||
95 | n = palmap[c]; | ||
96 | if (n && pallock[n] && palrev[n] == c) | ||
97 | { | ||
98 | pal_lock(n); | ||
99 | return n; | ||
100 | } | ||
101 | for (n = l+1; n != l; n++) | ||
102 | { | ||
103 | if (!n || pallock[n] /* || n < 16 */) continue; | ||
104 | pal_lock(n); | ||
105 | palmap[c] = n; | ||
106 | palrev[n] = c; | ||
107 | makecourse(c, n); | ||
108 | vid_setpal(n, r, g, b); | ||
109 | return (l = n); | ||
110 | } | ||
111 | n = findcourse(c); | ||
112 | pal_lock(n); | ||
113 | return n; | ||
114 | } | ||
115 | |||
116 | void pal_release(byte n) | ||
117 | { | ||
118 | if (pallock[n] >= pl_locked) | ||
119 | pallock[n]--; | ||
120 | } | ||
121 | |||
122 | |||
123 | void pal_expire(void) | ||
124 | { | ||
125 | int i; | ||
126 | for (i = 0; i < 256; i++) | ||
127 | if (pallock[i] && pallock[i] < pl_locked) | ||
128 | pallock[i]--; | ||
129 | } | ||
130 | |||
131 | |||
132 | void pal_set332(void) | ||
133 | { | ||
134 | int i, r, g, b; | ||
135 | |||
136 | fb.indexed = 0; | ||
137 | fb.cc[0].r = 5; | ||
138 | fb.cc[1].r = 5; | ||
139 | fb.cc[2].r = 6; | ||
140 | fb.cc[0].l = 0; | ||
141 | fb.cc[1].l = 3; | ||
142 | fb.cc[2].l = 6; | ||
143 | |||
144 | i = 0; | ||
145 | for (b = 0; b < 4; b++) for (g = 0; g < 8; g++) for (r = 0; r < 8; r++) | ||
146 | vid_setpal(i++, (r<<5)|(r<<2)|(r>>1), | ||
147 | (g<<5)|(g<<2)|(g>>1), (b<<6)|(b<<4)|(b<<2)|b); | ||
148 | } | ||
149 | |||
150 | |||
151 | |||
152 | |||
153 | |||