1 #include <string.h>
2 #include <stdlib.h>
3 #include <shadowdive/shadowdive.h>
4 #include "resources/bk.h"
5 
bk_create(bk * b,void * src)6 void bk_create(bk *b, void *src) {
7     sd_bk_file *sdbk = (sd_bk_file*)src;
8 
9     // File ID
10     b->file_id = sdbk->file_id;
11 
12     // Copy VGA image
13     surface_create_from_data(
14         &b->background,
15         SURFACE_TYPE_PALETTE,
16         sdbk->background->w,
17         sdbk->background->h,
18         sdbk->background->data);
19 
20     // Copy sound translation table
21     memcpy(b->sound_translation_table, sdbk->soundtable, 30);
22 
23     // Copy palettes
24     vector_create(&b->palettes, sizeof(palette));
25     for(int i = 0; i < sdbk->palette_count; i++) {
26         vector_append(&b->palettes, (palette*)sdbk->palettes[i]);
27     }
28 
29     // Copy info structs
30     hashmap_create(&b->infos, 7);
31     bk_info tmp_bk_info;
32     for(int i = 0; i < 50; i++) {
33         if(sdbk->anims[i] != NULL) {
34             bk_info_create(&tmp_bk_info, (void*)sdbk->anims[i], i);
35             hashmap_iput(&b->infos, i, &tmp_bk_info, sizeof(bk_info));
36         }
37     }
38 }
39 
bk_get_info(bk * b,int id)40 bk_info* bk_get_info(bk *b, int id) {
41     bk_info *val;
42     unsigned int tmp;
43     if(hashmap_iget(&b->infos, id, (void**)&val, &tmp) == 1) {
44         return NULL;
45     }
46     return val;
47 }
48 
bk_get_palette(bk * b,int id)49 palette* bk_get_palette(bk *b, int id) {
50     return vector_get(&b->palettes, id);
51 }
52 
bk_get_stl(bk * b)53 char* bk_get_stl(bk *b) {
54     return b->sound_translation_table;
55 }
56 
bk_free(bk * b)57 void bk_free(bk *b) {
58     surface_free(&b->background);
59     vector_free(&b->palettes);
60 
61     // Free info structs
62     iterator it;
63     hashmap_iter_begin(&b->infos, &it);
64     hashmap_pair *pair = NULL;
65     while((pair = iter_next(&it)) != NULL) {
66         bk_info_free((bk_info*)pair->val);
67     }
68     hashmap_free(&b->infos);
69 }
70