lsnes rr2-β24
[lsnes.git] / src / emulation / sky / level.hpp
blob6bf1103e168f7f48298760911901f23b723039ad
1 #ifndef _skycore__level__hpp__included__
2 #define _skycore__level__hpp__included__
4 #include <cstdint>
5 #include <iostream>
6 #include <cstring>
7 #include <vector>
8 #include "tile.hpp"
10 namespace sky
12 struct rom_level;
14 struct level
16 level();
17 level(rom_level& data);
18 int16_t get_gravity() { return gravity; }
19 int16_t get_o2_amount() { return o2_amount; }
20 uint16_t get_fuel_amount() { return fuel_amount; }
21 uint32_t get_palette_color(size_t idx, bool setC24 = false)
23 return (setC24 ? 0x1000000 : 0) | ((idx < 72) ? palette[idx] : 0);
25 tile at(uint32_t lpos, uint16_t hpos);
26 tile at_tile(int32_t l, int16_t h);
27 bool collides(uint32_t lpos, uint16_t hpos, int16_t vpos);
28 bool in_pipe(uint32_t lpos, uint16_t hpos, int16_t vpos);
29 uint32_t finish_line() { return 65536UL * length - 32768; }
30 uint32_t apparent_length() { return 65536UL * (length - 3); }
31 private:
32 int16_t length;
33 int16_t gravity;
34 int16_t o2_amount;
35 uint16_t fuel_amount;
36 uint32_t palette[72];
37 uint16_t tiles[32620];
40 struct rom_level
42 rom_level(const std::vector<char>& data, size_t offset, size_t length);
43 int16_t get_gravity() { return gravity; }
44 int16_t get_o2_amount() { return o2_amount; }
45 uint16_t get_fuel_amount() { return fuel_amount; }
46 uint16_t get_length() { return tiles.size() / 7; }
47 uint32_t get_palette_color(size_t idx) { return (idx < 72) ? palette[idx] : 0; }
48 tile get_tile(size_t idx) { return (idx < tiles.size()) ? tiles[idx] : tile(); }
49 void sha256_hash(uint8_t* buffer);
50 private:
51 int16_t gravity;
52 int16_t o2_amount;
53 uint16_t fuel_amount;
54 uint32_t palette[72];
55 std::vector<tile> tiles;
56 tile blank;
59 struct roads_lzs
61 roads_lzs();
62 ~roads_lzs();
63 roads_lzs(const std::vector<char>& file);
64 roads_lzs(const roads_lzs& l);
65 roads_lzs& operator=(const roads_lzs& l);
66 bool present(size_t idx) { return (idx < 31 && l[idx] != NULL); }
67 rom_level& operator[](size_t idx) { return *l[idx]; }
68 private:
69 rom_level* l[31];
72 #endif