Project

General

Profile

Statistics
| Revision:

root / proj / project / src / proj.c @ 369

History | View | Annotate | Download (20 KB)

1 144 up20180655
#include <lcom/lcf.h>
2
#include <lcom/proj.h>
3
#include <lcom/liblm.h>
4 351 up20180642
5
#include "proj.h"
6
7 185 up20180655
#include <math.h>
8 144 up20180655
9 149 up20180655
#include "proj_macros.h"
10 179 up20180642
#include "proj_func.h"
11 147 up20180655
12 153 up20180655
#include "interrupts_func.h"
13 270 up20180655
#include "makecode_map.h"
14 149 up20180655
15 192 up20180642
#include "crosshair.h"
16
#include "shooter.h"
17 303 up20180642
#include "zombie.h"
18 192 up20180642
#include "pistol.h"
19
#include "nothing.h"
20 237 up20180642
#include "bullet.h"
21 216 up20180642
#include "map1.h"
22 183 up20180642
23 351 up20180642
#include "hltp.h"
24 294 up20180642
25 226 up20180642
26 144 up20180655
int main(int argc, char* argv[]) {
27
28
    lcf_set_language("EN-US");
29
30 323 up20180642
    lcf_trace_calls("/home/lcom/labs/proj/trace.txt");
31 144 up20180655
32 323 up20180642
    lcf_log_output("/home/lcom/labs/proj/output.txt");
33 144 up20180655
34
    if (lcf_start(argc, argv)) return 1;
35
36
    lcf_cleanup();
37
38
    return 0;
39
}
40 147 up20180655
41 346 up20180642
#include "singleplayer.h"
42 311 up20180655
static int (multiplayer)(void);
43 346 up20180642
#include "chat.h"
44 149 up20180655
int(proj_main_loop)(int argc, char *argv[]) {
45 328 up20180642
    (void)argc; (void)argv;
46 170 up20180642
47
    int r;
48
49 313 up20180642
    if(font_init()){ printf("Failed to initialize fonts\n"); return 1; }
50 192 up20180642
51 261 up20180642
    /// subscribe interrupts
52
    if (subscribe_all()) { return 1; }
53 170 up20180642
54 297 up20180642
    /// initialize graphics
55
    if(graph_init(GRAPH_MODE)){
56
        printf("%s: failed to initalize graphics.\n", __func__);
57
        if (cleanup()) printf("%s: failed to cleanup.\n", __func__);
58
        return 1;
59
    }
60 152 up20180642
61 261 up20180642
    /// Load stuff
62
    {
63 297 up20180642
        graph_clear_screen();
64 314 up20180642
        text_t *txt = text_ctor(font_get_default(), "Loading...");
65 309 up20180642
        text_set_pos(txt, graph_get_XRes()/2, graph_get_YRes()/2);
66
        text_set_valign(txt, text_valign_center);
67
        text_set_halign(txt, text_halign_center);
68
        text_set_color(txt, TEXT_COLOR);
69 297 up20180642
        text_draw(txt);
70
        text_dtor(txt);
71
        graph_draw();
72 183 up20180642
73 261 up20180642
        bsp_crosshair = get_crosshair(); if(bsp_crosshair == NULL) printf("Failed to get crosshair\n");
74
        bsp_shooter   = get_shooter  (); if(bsp_shooter   == NULL) printf("Failed to get shooter\n");
75 303 up20180642
        bsp_zombie    = get_zombie   (); if(bsp_zombie    == NULL) printf("Failed to get zombie\n");
76 261 up20180642
        bsp_pistol    = get_pistol   (); if(bsp_pistol    == NULL) printf("Failed to get pistol\n");
77
        bsp_nothing   = get_nothing  (); if(bsp_nothing   == NULL) printf("Failed to get nothing\n");
78 362 up20180642
        bsp_bullet    = get_bullet   (); if(bsp_bullet    == NULL) printf("Failed to get bullet\n");
79
        map1          = get_map1     (); if(map1          == NULL) printf("Failed to get map1\n");
80 226 up20180642
81 261 up20180642
        sp_crosshair = sprite_ctor(bsp_crosshair); if(sp_crosshair == NULL) printf("Failed to get crosshair sprite\n");
82 362 up20180642
    }
83 226 up20180642
84 364 up20180642
    text_t *title     = text_ctor(font_get_default(), "LabWars");
85
    text_set_color(title, TEXT_COLOR);
86
    text_set_size(title, 70);
87
    text_set_pos(title, graph_get_XRes()/2, graph_get_YRes()*0.17);
88
    text_set_valign(title, text_valign_center);
89
    text_set_halign(title, text_halign_center);
90
91 314 up20180642
    menu_t *main_menu = menu_ctor(font_get_default());
92 299 up20180642
    menu_add_item(main_menu, "Single player");
93
    menu_add_item(main_menu, "Multiplayer");
94 297 up20180642
    menu_add_item(main_menu, "Chat");
95 362 up20180642
    menu_add_item(main_menu, "Exit");
96 234 up20180655
97 297 up20180642
    //uint32_t refresh_count_value = sys_hz() / REFRESH_RATE;
98
    uint8_t last_lb = 0;
99
    struct packet pp;
100
    keys_t *keys = get_key_presses();
101
102 261 up20180642
    /// loop stuff
103 297 up20180642
    int click = 0;
104 323 up20180642
    uint64_t int_vector = 0;
105 295 up20180642
    int good = true;
106
    while (good) {
107 261 up20180642
        /* Get a request message. */
108 307 up20180642
        if((r = get_interrupts_vector(&int_vector))) return r;
109 321 up20180642
        uint32_t n = 1;
110
        for (uint8_t i = 0; i < 32; i++, n <<= 1) {
111 307 up20180642
            if (int_vector & n) {
112
                interrupt_handler(i);
113
                switch (i) {
114
                    case TIMER0_IRQ:
115 192 up20180642
116 307 up20180642
                    graph_clear_screen();
117
                    switch(menu_update_state(main_menu, click)){
118
                        case -1: break;
119
                        case  0: singleplayer(); break; //campaign(); break;
120 311 up20180655
                        case  1: multiplayer() ; break;
121 307 up20180642
                        case  2: chat(); break;
122
                        case  3: good = false; break;
123
                    }
124
                    menu_draw(main_menu);
125 364 up20180642
                    text_draw(title);
126 192 up20180642
127 307 up20180642
                    click = 0;
128 202 up20180655
129 307 up20180642
                    sprite_set_pos(sp_crosshair, *get_mouse_X(), *get_mouse_Y());
130
                    sprite_draw(sp_crosshair);
131
                    graph_draw();
132 231 up20180655
133 307 up20180642
                    break;
134
                    case KBC_IRQ:
135 321 up20180642
                    if (keyboard_get_scancode()[0] == ESC_BREAK_CODE) good = false;
136 307 up20180642
                    case MOUSE_IRQ:
137 323 up20180642
                    if (mouse_get_counter_mouse_ih() >= 3) {
138
                        mouse_parse_packet(mouse_get_packet_mouse_ih(), &pp);
139 307 up20180642
                        update_mouse(&pp);
140
                        if (!click) click = last_lb ^ keys->lb_pressed && keys->lb_pressed;
141
                        last_lb = keys->lb_pressed;
142 323 up20180642
                        mouse_set_counter_mouse_ih(0);
143 261 up20180642
                    }
144 307 up20180642
                    break;
145
                    case COM1_IRQ: nctp_ih(); break;
146 305 up20180642
                }
147 147 up20180655
            }
148
        }
149 261 up20180642
    }
150 149 up20180655
151 364 up20180642
    text_dtor(title);
152
    menu_dtor(main_menu);
153
154 261 up20180642
    basic_sprite_dtor      (bsp_crosshair); bsp_crosshair = NULL;
155
    basic_sprite_dtor      (bsp_shooter  ); bsp_shooter   = NULL;
156 307 up20180642
    basic_sprite_dtor      (bsp_zombie   ); bsp_zombie    = NULL;
157 261 up20180642
    sprite_dtor            (sp_crosshair ); sp_crosshair  = NULL;
158
    basic_sprite_dtor      (bsp_pistol   ); bsp_pistol    = NULL;
159
    basic_sprite_dtor      (bsp_nothing  ); bsp_nothing   = NULL;
160
    map_dtor               (map1         ); map1          = NULL;
161 319 up20180642
    font_free();
162 243 up20180642
163 261 up20180642
    // Unsubscribe interrupts
164
    if (unsubscribe_all()) {
165
        if (cleanup())
166 305 up20180642
        printf("%s: failed to cleanup.\n", __func__);
167 261 up20180642
        return 1;
168
    }
169 188 up20180642
170 261 up20180642
    if (cleanup()) {
171
        printf("%s: failed to cleanup.\n", __func__);
172
        return 1;
173
    }
174 155 up20180655
175 149 up20180655
    return 0;
176 147 up20180655
}
177 294 up20180642
178 321 up20180642
static host_info_t     *host_info   = NULL;
179
static remote_info_t   *remote_info = NULL;
180
static bullet_info_t   *bullet_info = NULL;
181 308 up20180655
182 311 up20180655
static void multiplayer_process(const uint8_t *p, const size_t sz) {
183
    void *dest = NULL;
184
    hltp_type tp = hltp_interpret(p, sz, &dest);
185 342 up20180655
    if (dest == NULL) return;
186 311 up20180655
    switch(tp){
187
        case hltp_type_host:
188 320 up20180655
            host_info = (host_info_t*)dest;
189 311 up20180655
            break;
190
        case hltp_type_remote:
191 320 up20180655
            remote_info = (remote_info_t*)dest;
192 311 up20180655
            break;
193 320 up20180655
        case hltp_type_bullet:
194
            bullet_info = (bullet_info_t*)dest;
195
            break;
196 321 up20180642
        case hltp_type_invalid: break;
197
        case hltp_type_string : break;
198 311 up20180655
    }
199
}
200
static int (multiplayer_host)(void);
201
static int (multiplayer_remote)(void);
202
static int (multiplayer)(void) {
203
    int r;
204 308 up20180655
205 314 up20180642
    menu_t *main_menu = menu_ctor(font_get_default());
206 311 up20180655
    menu_add_item(main_menu, "Create");
207
    menu_add_item(main_menu, "Connect");
208
    menu_add_item(main_menu, "Back");
209 308 up20180655
210 311 up20180655
    //uint32_t refresh_count_value = sys_hz() / REFRESH_RATE;
211
    uint8_t last_lb = 0;
212
    struct packet pp;
213
    keys_t *keys = get_key_presses();
214 308 up20180655
215 311 up20180655
    /// loop stuff
216
    int click = 0;
217 323 up20180642
    uint64_t int_vector = 0;
218 311 up20180655
    int good = true;
219
    while (good) {
220
        /* Get a request message. */
221
        if((r = get_interrupts_vector(&int_vector))) return r;
222 321 up20180642
        uint32_t n = 1;
223
        for (uint8_t i = 0; i < 32; i++, n <<= 1) {
224 311 up20180655
            if (int_vector & n) {
225
                interrupt_handler(i);
226
                switch (i) {
227
                    case TIMER0_IRQ:
228 308 up20180655
229 311 up20180655
                    graph_clear_screen();
230
                    switch(menu_update_state(main_menu, click)){
231
                        case -1: break;
232
                        case  0: multiplayer_host(); break;
233
                        case  1: multiplayer_remote(); break;
234
                        case  2: good = false; break;
235
                    }
236
                    menu_draw(main_menu);
237
238
                    click = 0;
239
240
                    sprite_set_pos(sp_crosshair, *get_mouse_X(), *get_mouse_Y());
241
                    sprite_draw(sp_crosshair);
242
                    graph_draw();
243
244
                    break;
245
                    case KBC_IRQ:
246 366 up20180642
                    if(!keyboard_get_done()) break;
247 321 up20180642
                    if (keyboard_get_scancode()[0] == ESC_BREAK_CODE) good = false;
248 311 up20180655
                    case MOUSE_IRQ:
249 323 up20180642
                    if (mouse_get_counter_mouse_ih() >= 3) {
250
                        mouse_parse_packet(mouse_get_packet_mouse_ih(), &pp);
251 311 up20180655
                        update_mouse(&pp);
252
                        if (!click) click = last_lb ^ keys->lb_pressed && keys->lb_pressed;
253
                        last_lb = keys->lb_pressed;
254 323 up20180642
                        mouse_set_counter_mouse_ih(0);
255 311 up20180655
                    }
256
                    break;
257
                    case COM1_IRQ: nctp_ih(); break;
258
                }
259
            }
260
        }
261
    }
262
    return 0;
263 308 up20180655
}
264
265 311 up20180655
static int (multiplayer_host)(void) {
266 320 up20180655
    int r;
267 308 up20180655
268 311 up20180655
    nctp_dump();
269 320 up20180655
    nctp_set_processor(multiplayer_process);
270 311 up20180655
271 308 up20180655
    ent_set_scale(DEFAULT_SCALE);
272 345 up20180642
    text_timer_t *in_game_timer = text_timer_ctor(font_get_default());
273 308 up20180655
274
    list_t *shooter_list = list_ctor();
275
276 321 up20180642
    gunner_t *shooter1 = gunner_ctor(bsp_shooter, bsp_pistol, GUNNER_PLAYER, 1); if(shooter1 == NULL) printf("Failed to get shooter1\n");
277 308 up20180655
    gunner_set_spawn(shooter1, 75, 75);
278
279 321 up20180642
    gunner_t *shooter2 = gunner_ctor(bsp_shooter, bsp_pistol, GUNNER_PLAYER, 2); if(shooter2 == NULL) printf("Failed to get shooter2\n");
280 308 up20180655
    gunner_set_spawn(shooter2, 975, 75);
281
282
    list_insert(shooter_list, list_end(shooter_list), shooter1);
283
    list_insert(shooter_list, list_end(shooter_list), shooter2);
284
285
    do {
286
        get_random_spawn(map1, shooter1, shooter_list);
287
        get_random_spawn(map1, shooter2, shooter_list);
288 339 up20180642
    } while (gunner_distance(shooter1, shooter2) < 500);
289 308 up20180655
290 320 up20180655
    host_info = host_info_ctor(shooter1, shooter2);
291
    remote_info = remote_info_ctor();
292
    bullet_info = bullet_info_ctor();
293
294 308 up20180655
    list_t *bullet_list  = list_ctor();
295
296
    ent_set_origin(gunner_get_x(shooter1)-ent_get_XLength()/2.0,
297
    gunner_get_y(shooter1)-ent_get_YLength()/2.0);
298
299
    //uint32_t refresh_count_value = sys_hz() / REFRESH_RATE;
300
    uint8_t last_lb = 0;
301
    struct packet pp;
302
    keys_t *keys = get_key_presses();
303
    /// loop stuff
304 323 up20180642
    uint64_t int_vector = 0;
305 308 up20180655
    int good = true;
306 311 up20180655
    int state = 0; // -1 for remote win, 0 for draw, 1 for host win
307 320 up20180655
    list_node_t *p1, *p2; // player states
308
    int state_1, state_2;
309 311 up20180655
    while (good) {
310
        if ((r = get_interrupts_vector(&int_vector))) return r;
311 321 up20180642
        uint32_t n = 1;
312
        for (uint8_t i = 0; i < 32; i++, n <<= 1) {
313 320 up20180655
            if (int_vector & n) {
314
                interrupt_handler(i);
315
                switch (i) {
316
                    case TIMER0_IRQ:
317 345 up20180642
                    if (timer_get_no_interrupts() % 60 == 0) text_timer_update(in_game_timer);
318 320 up20180655
                    update_movement(map1, shooter1, keys, shooter_list);
319
                    update_movement(map1, shooter2, &(remote_info->remote_keys_pressed), shooter_list);
320 308 up20180655
321 320 up20180655
                    update_game_state(map1, shooter_list, bullet_list);
322 311 up20180655
323 320 up20180655
                    p1 = list_find(shooter_list, shooter1);
324
                    p2 = list_find(shooter_list, shooter2);
325 311 up20180655
326 320 up20180655
                    if ((state_1 = (p1 == list_end(shooter_list))) || (state_2 = (p2 == list_end(shooter_list)))) {
327
                        state = state_1 - state_2;
328
                        good = false;
329
                        break;
330
                    }
331 311 up20180655
332 320 up20180655
                    double angle = get_mouse_angle(shooter1);
333
                    gunner_set_angle(shooter1, angle - M_PI_2);
334 311 up20180655
335 320 up20180655
                    ent_set_origin(gunner_get_x(shooter1)-ent_get_XLength()/2.0,
336
                                   gunner_get_y(shooter1)-ent_get_YLength()/2.0);
337 311 up20180655
338 320 up20180655
                    gunner_set_angle(shooter2, remote_info->remote_angle);
339 369 up20180655
                    //build_host_structure(host_info, shooter1, shooter2);
340 320 up20180655
341 368 up20180655
                    //hltp_send_host_info(host_info);
342 320 up20180655
343
                    graph_clear_screen();
344
                    map_draw   (map1);
345
                    bullet_draw_list(bullet_list);
346
                    gunner_draw_list(shooter_list);
347
348
                    text_draw(in_game_timer->text);
349
350
                    sprite_set_pos(sp_crosshair, *get_mouse_X(), *get_mouse_Y());
351
                    sprite_draw(sp_crosshair);
352
                    graph_draw();
353
354
                    break;
355
                    case KBC_IRQ:
356 366 up20180642
                    if(!keyboard_get_done()) break;
357 321 up20180642
                    if (keyboard_get_scancode()[0] == ESC_BREAK_CODE) {
358 320 up20180655
                        good = false;
359
                    }
360
                    break;
361
                    case MOUSE_IRQ:
362 323 up20180642
                    if (mouse_get_counter_mouse_ih() >= 3) {
363
                        mouse_parse_packet(mouse_get_packet_mouse_ih(), &pp);
364 320 up20180655
                        update_mouse(&pp);
365
                        if (last_lb ^ keys->lb_pressed && keys->lb_pressed)
366
                        shoot_bullet(shooter1, bullet_list, bsp_bullet);
367
                        last_lb = keys->lb_pressed;
368 323 up20180642
                        mouse_set_counter_mouse_ih(0);
369 320 up20180655
                    }
370
                    break;
371
372
                    case COM1_IRQ:
373
                        nctp_ih();
374
                        if (bullet_info->new_bullet) {
375
                            shoot_bullet(shooter2, bullet_list, bsp_bullet);
376
                            bullet_info->new_bullet = false;
377
                        }
378
                        break;
379
                }
380 311 up20180655
            }
381
        }
382 320 up20180655
    }
383 311 up20180655
384 320 up20180655
    while(list_size(shooter_list) > 0){
385
        gunner_t *p = list_erase(shooter_list, list_begin(shooter_list));
386
        gunner_dtor(p);
387
    }
388
    if(list_dtor(shooter_list)) printf("COULD NOT DESTRUCT SHOOTER LIST\n");
389
390
    while(list_size(bullet_list) > 0){
391
        bullet_t *p = (bullet_t*)list_erase(bullet_list, list_begin(bullet_list));
392
        bullet_dtor(p);
393
    }
394
    if(list_dtor(bullet_list)) printf("COULD NOT DESTRUCT BULLET LIST\n");
395
396
    host_info_dtor(host_info);
397
    remote_info_dtor(remote_info);
398
    bullet_info_dtor(bullet_info);
399
400 330 up20180655
    nctp_set_processor(NULL);
401
402 345 up20180642
    text_timer_dtor(in_game_timer); in_game_timer = NULL;
403 320 up20180655
404 308 up20180655
    return 0;
405 311 up20180655
}
406 320 up20180655
static int (multiplayer_remote)(void) {
407 311 up20180655
    int r;
408 308 up20180655
409 311 up20180655
    nctp_dump();
410
    nctp_set_processor(multiplayer_process);
411
412
    ent_set_scale(DEFAULT_SCALE);
413 345 up20180642
    text_timer_t *in_game_timer = text_timer_ctor(font_get_default());
414 311 up20180655
415
    list_t *shooter_list = list_ctor();
416
417 321 up20180642
    gunner_t *shooter1 = gunner_ctor(bsp_shooter, bsp_pistol, GUNNER_PLAYER, 2); if(shooter1 == NULL) printf("Failed to get shooter1\n");
418 311 up20180655
    gunner_set_spawn(shooter1, 75, 75);
419
420 321 up20180642
    gunner_t *shooter2 = gunner_ctor(bsp_shooter, bsp_pistol, GUNNER_PLAYER, 1); if(shooter2 == NULL) printf("Failed to get shooter2\n");
421 311 up20180655
    gunner_set_spawn(shooter2, 975, 75);
422
423
    list_insert(shooter_list, list_end(shooter_list), shooter1);
424
    list_insert(shooter_list, list_end(shooter_list), shooter2);
425
426 320 up20180655
    host_info = host_info_ctor(shooter2, shooter1);
427
    remote_info = remote_info_ctor();
428
    bullet_info = bullet_info_ctor();
429 311 up20180655
430
    list_t *bullet_list  = list_ctor();
431
432
    ent_set_origin(gunner_get_x(shooter1)-ent_get_XLength()/2.0,
433
    gunner_get_y(shooter1)-ent_get_YLength()/2.0);
434
435
    //uint32_t refresh_count_value = sys_hz() / REFRESH_RATE;
436
    uint8_t last_lb = 0;
437
    struct packet pp;
438
    keys_t *keys = get_key_presses();
439
440
    /// loop stuff
441 323 up20180642
    uint64_t int_vector = 0;
442 311 up20180655
    int good = true;
443
    while (good) {
444
        if ((r = get_interrupts_vector(&int_vector))) return r;
445 321 up20180642
        uint32_t n = 1;
446
        for (uint8_t i = 0; i < 32; i++, n <<= 1) {
447 320 up20180655
            if (int_vector & n) {
448
                interrupt_handler(i);
449
                switch (i) {
450
                    case TIMER0_IRQ:
451 345 up20180642
                    if (timer_get_no_interrupts() % 60 == 0) text_timer_update(in_game_timer);
452 311 up20180655
453 326 up20180655
                    double angle = get_mouse_angle(shooter1) - M_PI_2;
454 311 up20180655
455 368 up20180655
                    build_remote_structure(remote_info, get_key_presses(), angle);
456
                    hltp_send_remote_info(remote_info);
457 311 up20180655
458 342 up20180655
459 330 up20180655
                    gunner_set_pos(shooter1, (double)host_info->remote_x, (double)host_info->remote_y);
460
                    gunner_set_angle(shooter1, (double)host_info->remote_angle);
461
                    gunner_set_health(shooter1, (double)host_info->remote_health);
462
                    gunner_set_curr_health(shooter1, (double)host_info->remote_current_health);
463 311 up20180655
464 330 up20180655
                    gunner_set_pos(shooter2, (double)host_info->host_x, (double)host_info->host_y);
465
                    gunner_set_angle(shooter2, (double)host_info->host_angle);
466
                    gunner_set_health(shooter2, (double)host_info->host_health);
467
                    gunner_set_curr_health(shooter2, (double)host_info->host_current_health);
468 311 up20180655
469 320 up20180655
                    ent_set_origin(gunner_get_x(shooter1)-ent_get_XLength()/2.0,
470
                                   gunner_get_y(shooter1)-ent_get_YLength()/2.0);
471 311 up20180655
472 342 up20180655
                    /*
473 321 up20180642
                    for (size_t j = 0; j < host_info->no_bullets; j++) {
474
                        if (host_info->bullets_shooter[j]) { // remote
475 330 up20180655
                            bullet_t *bullet = bullet_ctor(shooter1, bsp_bullet, (double)host_info->bullets_x[j], (double)host_info->bullets_y[j], (double)host_info->bullets_vx[j], (double)host_info->bullets_vy[j]);
476 320 up20180655
                            list_insert(bullet_list, list_end(bullet_list), bullet);
477
                        } else { // host
478 330 up20180655
                            bullet_t *bullet = bullet_ctor(shooter2, bsp_bullet, (double)host_info->bullets_x[j], (double)host_info->bullets_y[j], (double)host_info->bullets_vx[j], (double)host_info->bullets_vy[j]);
479 320 up20180655
                            list_insert(bullet_list, list_end(bullet_list), bullet);
480
                        }
481 342 up20180655
                    }*/
482 320 up20180655
483
                    graph_clear_screen();
484
                    map_draw   (map1);
485
                    bullet_draw_list(bullet_list);
486
                    gunner_draw_list(shooter_list);
487
488
                    text_draw(in_game_timer->text);
489
490
                    sprite_set_pos(sp_crosshair, *get_mouse_X(), *get_mouse_Y());
491
                    sprite_draw(sp_crosshair);
492
                    graph_draw();
493 342 up20180655
                    /*
494 320 up20180655
                    while(list_size(bullet_list) > 0){
495
                        bullet_t *p = (bullet_t*)list_erase(bullet_list, list_begin(bullet_list));
496
                        bullet_dtor(p);
497
                    }
498 342 up20180655
                    */
499 320 up20180655
500
                    break;
501
                    case KBC_IRQ:
502 366 up20180642
                    if(!keyboard_get_done()) break;
503 321 up20180642
                    if (keyboard_get_scancode()[0] == ESC_BREAK_CODE) {
504 320 up20180655
                        good = false;
505
                    }
506
                    break;
507
                    case MOUSE_IRQ:
508 323 up20180642
                    if (mouse_get_counter_mouse_ih() >= 3) {
509
                        mouse_parse_packet(mouse_get_packet_mouse_ih(), &pp);
510 320 up20180655
                        update_mouse(&pp);
511
                        if (last_lb ^ keys->lb_pressed && keys->lb_pressed) {
512
                            bullet_info->new_bullet = true;
513 369 up20180655
                            hltp_send_bullet_info(bullet_info);
514 320 up20180655
                        }
515
                        last_lb = keys->lb_pressed;
516 323 up20180642
                        mouse_set_counter_mouse_ih(0);
517 320 up20180655
                    }
518
                    break;
519
520 342 up20180655
                    case COM1_IRQ:
521
                        nctp_ih();
522
                        break;
523 320 up20180655
                }
524 311 up20180655
            }
525
        }
526 320 up20180655
    }
527 311 up20180655
528 320 up20180655
    while(list_size(shooter_list) > 0){
529
        gunner_t *p = list_erase(shooter_list, list_begin(shooter_list));
530
        gunner_dtor(p);
531
    }
532
    if(list_dtor(shooter_list)) printf("COULD NOT DESTRUCT SHOOTER LIST\n");
533
534
    while(list_size(bullet_list) > 0){
535
        bullet_t *p = (bullet_t*)list_erase(bullet_list, list_begin(bullet_list));
536
        bullet_dtor(p);
537
    }
538
    if(list_dtor(bullet_list)) printf("COULD NOT DESTRUCT BULLET LIST\n");
539
540
    host_info_dtor(host_info);
541
    remote_info_dtor(remote_info);
542
    bullet_info_dtor(bullet_info);
543
544 330 up20180655
    nctp_set_processor(NULL);
545
546 345 up20180642
    text_timer_dtor(in_game_timer); in_game_timer = NULL;
547 320 up20180655
548 311 up20180655
    return 0;
549
}