Rev 5261 | Rev 5310 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5225 | alpine | 1 | #include "rsplatform.h" |
5298 | alpine | 2 | |
3 | #include "../rsgame.h" |
||
5243 | alpine | 4 | |
5225 | alpine | 5 | rs_app_t rs_app; |
5243 | alpine | 6 | |
7 | |||
8 | |||
9 | |||
5225 | alpine | 10 | // set this macro to zero (0) if bug is fixed |
11 | #define FIX_MENUETOS_LEGACY_ONE_PIXEL_BORDER_GAP_BUG (-1) |
||
5243 | alpine | 12 | |
5225 | alpine | 13 | // Fixed frame rate, set to 25 |
5243 | alpine | 14 | #define GAME_REQUIRED_FPS 25 |
15 | |||
16 | |||
17 | |||
18 | //extern char PATH[256]; |
||
19 | //extern char PARAM[256]; |
||
20 | |||
5225 | alpine | 21 | int window_width, window_height; |
5243 | alpine | 22 | |
5225 | alpine | 23 | int fps = 0; |
24 | int dt = 1; |
||
25 | int draw_dt = 1; |
||
26 | int area_width = 160; |
||
27 | int area_height = 160; |
||
5261 | alpine | 28 | |
29 | int low_performance_counter = 0; |
||
30 | |||
31 | int logic_halted = 0; |
||
5243 | alpine | 32 | |
5225 | alpine | 33 | int w_plus = 0; |
5243 | alpine | 34 | |
35 | |||
36 | |||
37 | |||
38 | |||
5225 | alpine | 39 | #define BIT_SET(var,mask) { var |= (mask); } |
40 | #define BIT_CLEAR(var,mask) { var &= ~(mask); } |
||
41 | #define BIT_TOGGLE(var,mask) { var ^= (mask); } |
||
5243 | alpine | 42 | |
5225 | alpine | 43 | #define IS_BIT_SET(var,mask) ( (var) & (mask) ) |
44 | #define IS_BIT_CLEARED(var,mask) (!( (var) & (mask) )) |
||
5243 | alpine | 45 | |
46 | |||
5225 | alpine | 47 | void BoardPuts(const char *s) |
48 | { |
||
5243 | alpine | 49 | unsigned int i = 0; |
50 | while(*(s + i)) |
||
51 | { |
||
52 | asm volatile ("int $0x40"::"a"(63), "b"(1), "c"(*(s + i))); |
||
53 | i++; |
||
54 | } |
||
5225 | alpine | 55 | } |
5243 | alpine | 56 | |
5225 | alpine | 57 | void board_write_integer(const char *s, int i) { |
5243 | alpine | 58 | |
59 | char tmp[16]; |
||
60 | |||
61 | |||
62 | |||
5225 | alpine | 63 | }; |
5243 | alpine | 64 | |
65 | |||
5225 | alpine | 66 | void kol_wnd_resize(unsigned w, unsigned h) |
67 | { |
||
5243 | alpine | 68 | asm volatile ("int $0x40"::"a"(67), "b"(-1), "c"(-1), "d"(w), "S"(h)); |
5225 | alpine | 69 | } |
5243 | alpine | 70 | |
71 | |||
72 | |||
73 | |||
5225 | alpine | 74 | void wnd_draw() |
75 | { |
||
5243 | alpine | 76 | |
77 | char tmp[] = "Fps:000 | Heliothryx Beta by Roman Shuvalov"; |
||
78 | |||
79 | kol_paint_start(); |
||
80 | |||
81 | tmp[4] = '0' + ( (fps/100) % 10 ); |
||
82 | tmp[5] = '0' + ( (fps/10) % 10 ); |
||
83 | tmp[6] = '0' + ( (fps) % 10 ); |
||
84 | |||
5261 | alpine | 85 | |
86 | if (!logic_halted) { |
||
87 | kol_wnd_define(100, 100, window_width, window_height, 0x74ddddff, 0x34ddddff, "Heliothryx"); |
||
88 | kol_wnd_caption(tmp); |
||
89 | GameProcess(); |
||
90 | } |
||
91 | else { |
||
92 | kol_wnd_define(100, 100, window_width, window_height, 0x34ddddff, 0x34ddddff, "Heliothryx"); |
||
93 | //kol_paint_bar(0, 0, window_width, window_height, 0xffffffff); |
||
94 | kol_paint_string(20, 20, "Performance is too low. Halted. ", 0x902222ff); |
||
95 | }; |
||
5243 | alpine | 96 | |
97 | kol_paint_end(); |
||
98 | |||
5225 | alpine | 99 | } |
5243 | alpine | 100 | |
101 | |||
102 | |||
103 | |||
5225 | alpine | 104 | /// =========================================================== |
5243 | alpine | 105 | |
5225 | alpine | 106 | void kol_main() |
107 | { |
||
5243 | alpine | 108 | |
109 | BoardPuts("Hello, Heliothryx!\n"); |
||
110 | |||
111 | int err; |
||
5225 | alpine | 112 | int version =-1; |
113 | |||
114 | if((err = InitSound(&version)) !=0 ){ |
||
115 | BoardPuts("Sound Error 1\n"); |
||
116 | }; |
||
117 | |||
118 | if( (SOUND_VERSION>(version&0xFFFF)) || |
||
119 | (SOUND_VERSION<(version >> 16))){ |
||
120 | BoardPuts("Sound Error 2\n"); |
||
121 | } |
||
5243 | alpine | 122 | |
123 | |||
124 | unsigned event; |
||
125 | unsigned key; |
||
126 | unsigned key_up; |
||
127 | |||
128 | unsigned btn; |
||
129 | unsigned pos, x, y; |
||
130 | int gx, gy; |
||
131 | |||
132 | //srand(kol_system_time_get()); |
||
133 | |||
134 | // kol_event_mask( 0xC0000027 ); // enable using of mouse |
||
135 | kol_event_mask(7); // keyboard only |
||
136 | |||
137 | kol_key_mode_set(1); |
||
138 | |||
139 | area_width = 640; |
||
140 | area_height = 360; |
||
141 | |||
142 | // Initializing variables |
||
143 | window_width = FIX_MENUETOS_LEGACY_ONE_PIXEL_BORDER_GAP_BUG + area_width + 10; // 2 x 5px border |
||
144 | window_height = FIX_MENUETOS_LEGACY_ONE_PIXEL_BORDER_GAP_BUG + kol_skin_height() + area_height + 5; // bottom 5px border |
||
145 | |||
146 | |||
147 | GameInit(); |
||
148 | |||
149 | wnd_draw(); |
||
150 | |||
151 | fps = 0; |
||
152 | |||
153 | unsigned int tick_start = kol_time_tick(); |
||
154 | unsigned int tick_current = tick_start; |
||
155 | unsigned int tick_last = tick_start; |
||
156 | |||
157 | unsigned int fps_counter = 0; |
||
158 | int wait_time; |
||
159 | int already_drawn = 0; |
||
160 | |||
161 | float xf; |
||
162 | float xfs; |
||
163 | int xfs_i; |
||
164 | |||
165 | while (1) { |
||
166 | tick_last = tick_current; |
||
167 | tick_current = kol_time_tick(); |
||
168 | dt = tick_current - tick_last; |
||
169 | tick_last = tick_current; |
||
170 | |||
171 | already_drawn = 0; |
||
172 | |||
173 | while (( event = kol_event_wait_time(1) )) { |
||
174 | |||
175 | switch (event) { |
||
176 | |||
177 | case 1: |
||
178 | wnd_draw(); // <--- need to clear event! |
||
179 | already_drawn = 1; |
||
180 | break; |
||
181 | |||
182 | case 2: |
||
183 | key = kol_key_get(); |
||
184 | key = (key & 0xff00)>>8; |
||
185 | key_up = key & 0x80; |
||
186 | key = key & 0x7F; |
||
5261 | alpine | 187 | |
188 | if (!logic_halted) { |
||
5243 | alpine | 189 | |
5261 | alpine | 190 | if (key_up) { |
5298 | alpine | 191 | GameKeyUp(key); |
5261 | alpine | 192 | } |
193 | else { |
||
194 | GameKeyDown(key); |
||
195 | }; |
||
196 | |||
5243 | alpine | 197 | }; |
198 | |||
199 | break; |
||
200 | |||
201 | case 3: |
||
202 | switch ((kol_btn_get() & 0xff00)>>8) |
||
203 | { |
||
204 | case 1: // close button |
||
205 | kol_exit(); |
||
206 | case 2: // 'new' button |
||
207 | //init_board(); |
||
208 | //wnd_draw(); |
||
209 | break; |
||
210 | } |
||
211 | break; |
||
212 | |||
213 | case 6: |
||
214 | btn = kol_mouse_btn(); // read mouse button |
||
215 | pos = kol_mouse_posw(); // read mouse position |
||
216 | x = pos / 65536; |
||
217 | y = pos % 65536; |
||
218 | if (x > window_width) |
||
219 | x=0; |
||
220 | if (y > window_height) |
||
221 | y=0; |
||
222 | |||
223 | |||
224 | break; |
||
225 | } |
||
226 | |||
227 | }; |
||
228 | |||
229 | |||
230 | if (!already_drawn) { |
||
231 | wnd_draw(); |
||
232 | }; |
||
233 | |||
234 | |||
235 | fps_counter++; |
||
236 | |||
237 | tick_current = kol_time_tick(); |
||
238 | |||
239 | if (tick_current > tick_start+100) { |
||
240 | fps = fps_counter; |
||
241 | fps_counter = 0; |
||
242 | tick_start += 100; |
||
243 | }; |
||
244 | |||
245 | draw_dt = tick_current - tick_last; |
||
246 | |||
247 | wait_time = (100/GAME_REQUIRED_FPS) - draw_dt; |
||
248 | if (wait_time <= 0) { |
||
249 | wait_time = 1; |
||
250 | }; |
||
251 | kol_sleep(wait_time); |
||
5261 | alpine | 252 | |
253 | if (draw_dt > 10) { |
||
254 | low_performance_counter++; |
||
255 | } |
||
256 | else { |
||
257 | low_performance_counter--; |
||
258 | if (low_performance_counter < 0) { |
||
259 | low_performance_counter = 0; |
||
260 | }; |
||
261 | }; |
||
262 | |||
263 | if (low_performance_counter > 6) { |
||
264 | logic_halted = 1; |
||
265 | window_width = 280; |
||
266 | window_height = 80; |
||
267 | kol_wnd_caption("Heliothryx"); |
||
268 | kol_wnd_resize(window_width, window_height); |
||
269 | }; |
||
5243 | alpine | 270 | |
271 | |||
272 | } |
||
273 | |||
274 | GameTerm(); |
||
275 | |||
276 | kol_exit(); |
||
5225 | alpine | 277 | }>=>--->(version> |