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