From b4203610a0a463162a0ea51b97379edc8801994b Mon Sep 17 00:00:00 2001 From: Slyvtt Date: Sun, 5 Feb 2023 10:05:05 +0100 Subject: [PATCH] enemy shoots + scrolable background --- CMakeLists.txt | 3 + assets-cg/Levels/Level1.json | 44 ---------- assets-cg/Levels/Level2.json | 44 ---------- assets-cg/Levels/Tileset_Space.json | 14 --- .../Sprites/Bullets/bullet_enemy_blue.png | Bin 0 -> 118 bytes assets-cg/Sprites/Enemies/Lifebar.png | Bin 0 -> 239 bytes .../__pycache__/converters.cpython-310.pyc | Bin 1522 -> 0 bytes fxlink-image-2023.02.04-22h05-5.png | Bin 0 -> 18232 bytes fxlink-image-2023.02.04-22h06-1.png | Bin 0 -> 14626 bytes src/bullet.cpp | 39 +++++---- src/bullet.h | 12 ++- src/collections.cpp | 40 ++++++--- src/collections.h | 2 +- src/enemy.cpp | 80 ++++++++++++++++-- src/enemy.h | 4 + src/fast_trig.cpp | 61 +++++++++++++ src/fast_trig.h | 19 +++++ src/main.cpp | 73 +++++++++++++--- src/player.cpp | 34 ++++---- src/player.h | 2 +- src/starfieldshader.cpp | 2 +- 21 files changed, 309 insertions(+), 164 deletions(-) delete mode 100644 assets-cg/Levels/Level1.json delete mode 100644 assets-cg/Levels/Level2.json delete mode 100644 assets-cg/Levels/Tileset_Space.json create mode 100644 assets-cg/Sprites/Bullets/bullet_enemy_blue.png create mode 100644 assets-cg/Sprites/Enemies/Lifebar.png delete mode 100644 assets-cg/__pycache__/converters.cpython-310.pyc create mode 100644 fxlink-image-2023.02.04-22h05-5.png create mode 100644 fxlink-image-2023.02.04-22h06-1.png create mode 100644 src/fast_trig.cpp create mode 100644 src/fast_trig.h diff --git a/CMakeLists.txt b/CMakeLists.txt index a1a8fca..90cd411 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,6 +30,7 @@ add_custom_command( set(SOURCES src/main.cpp + src/fast_trig.cpp src/extrakeyboard.cpp src/collections.cpp @@ -57,10 +58,12 @@ set(ASSETS_cg assets-cg/Sprites/Bullets/bullet_normal.png assets-cg/Sprites/Bullets/bullet_blue.png assets-cg/Sprites/Bullets/bullet_laser.png + assets-cg/Sprites/Bullets/bullet_enemy_blue.png assets-cg/Sprites/Players/mainship1.png assets-cg/Sprites/Players/Satellite_Lvl1.png + assets-cg/Sprites/Enemies/Lifebar.png assets-cg/Sprites/Enemies/mainship2.png assets-cg/Sprites/Enemies/Enemy_Blue_Lvl1.png assets-cg/Sprites/Enemies/Enemy_Red_Lvl1.png diff --git a/assets-cg/Levels/Level1.json b/assets-cg/Levels/Level1.json deleted file mode 100644 index 4465c14..0000000 --- a/assets-cg/Levels/Level1.json +++ /dev/null @@ -1,44 +0,0 @@ -{ "compressionlevel":-1, - "height":14, - "infinite":false, - "layers":[ - { - "data":[0, 0, 0, 0, 1310, 0, 1310, 0, 0, 0, 0, 1310, 0, 1310, 0, 0, 0, 0, 1310, 0, 1310, 0, 0, 0, 759, 760, 759, 760, 759, 760, 0, 0, 0, 0, 1310, 0, 1310, 0, 0, 0, 0, 1310, 0, 1310, 0, 0, 0, 0, 1310, 0, 1310, 0, 0, 0, 759, 760, 759, 760, 759, 760, 0, 0, 0, 0, 1310, 0, 1310, 0, 0, 0, 0, 1310, 0, 1310, 0, 0, 0, 0, 1310, 0, 1310, 0, 0, 0, 759, 760, 759, 760, 759, 760, 0, 0, 0, 0, 2003, 2003, 2003, 0, 0, 0, 0, 2003, 2003, 2003, 0, 0, 0, 0, 2003, 2003, 2003, 0, 0, 0, 791, 792, 791, 792, 791, 792, 0, 0, 0, 0, 2003, 2003, 2003, 0, 0, 0, 0, 2003, 2003, 2003, 0, 0, 0, 0, 2003, 2003, 2003, 0, 0, 0, 791, 792, 791, 792, 791, 792, 0, 0, 0, 0, 2003, 2003, 2003, 0, 0, 0, 0, 2003, 2003, 2003, 0, 0, 0, 0, 2003, 2003, 2003, 0, 0, 0, 791, 792, 791, 792, 791, 792, 834, 842, 0, 0, 919, 77, 921, 0, 0, 0, 0, 919, 77, 921, 0, 0, 0, 0, 919, 77, 921, 0, 0, 0, 919, 77, 921, 919, 77, 921, 834, 842, 0, 0, 919, 77, 921, 0, 0, 0, 0, 919, 77, 921, 0, 0, 0, 0, 919, 77, 921, 0, 0, 0, 919, 77, 921, 919, 77, 921, 834, 842, 0, 0, 919, 77, 921, 0, 0, 0, 0, 919, 77, 921, 0, 0, 0, 0, 919, 77, 921, 0, 0, 0, 919, 77, 921, 919, 77, 921, 0, 810, 0, 0, 919, 77, 921, 601, 601, 877, 0, 919, 77, 921, 0, 601, 601, 0, 919, 77, 921, 0, 601, 601, 919, 77, 921, 919, 77, 921, 0, 810, 0, 0, 919, 77, 921, 601, 601, 877, 0, 919, 77, 921, 0, 601, 601, 0, 919, 77, 921, 0, 601, 601, 919, 77, 921, 919, 77, 921, 0, 810, 0, 0, 919, 77, 921, 601, 601, 877, 0, 919, 77, 921, 0, 601, 601, 0, 919, 77, 921, 0, 601, 601, 919, 77, 921, 919, 77, 921, 851, 0, 0, 0, 116, 533, 118, 601, 601, 907, 885, 116, 533, 118, 886, 601, 601, 885, 116, 533, 118, 0, 601, 601, 116, 533, 118, 116, 533, 118, 851, 0, 0, 0, 116, 533, 118, 601, 601, 907, 885, 116, 533, 118, 886, 601, 601, 885, 116, 533, 118, 0, 601, 601, 116, 533, 118, 116, 533, 118, 851, 0, 0, 0, 116, 533, 118, 601, 601, 907, 885, 116, 533, 118, 886, 601, 601, 885, 116, 533, 118, 0, 601, 601, 116, 533, 118, 116, 533, 118, 627, 628, 629, 630, 308, 213, 310, 601, 0, 629, 630, 308, 213, 310, 627, 628, 629, 630, 308, 213, 310, 0, 601, 0, 308, 213, 310, 308, 213, 310, 627, 628, 629, 630, 308, 213, 310, 601, 0, 629, 630, 308, 213, 310, 627, 628, 629, 630, 308, 213, 310, 0, 601, 0, 308, 213, 310, 308, 213, 310, 627, 628, 629, 630, 308, 213, 310, 601, 0, 629, 630, 308, 213, 310, 627, 628, 629, 630, 308, 213, 310, 0, 601, 0, 308, 213, 310, 308, 213, 310, 659, 660, 661, 662, 919, 77, 921, 601, 852, 661, 662, 919, 77, 921, 659, 660, 661, 662, 919, 77, 921, 0, 601, 0, 919, 77, 921, 919, 77, 921, 659, 660, 661, 662, 919, 77, 921, 601, 852, 661, 662, 919, 77, 921, 659, 660, 661, 662, 919, 77, 921, 0, 601, 0, 919, 77, 921, 919, 77, 921, 659, 660, 661, 662, 919, 77, 921, 601, 852, 661, 662, 919, 77, 921, 659, 660, 661, 662, 919, 77, 921, 0, 601, 0, 919, 77, 921, 919, 77, 921, 691, 692, 693, 694, 919, 77, 921, 691, 692, 819, 0, 919, 77, 921, 691, 692, 693, 694, 919, 77, 921, 0, 601, 0, 919, 77, 921, 919, 77, 921, 691, 692, 693, 694, 919, 77, 921, 691, 692, 819, 0, 919, 77, 921, 691, 692, 693, 694, 919, 77, 921, 0, 601, 0, 919, 77, 921, 919, 77, 921, 691, 692, 693, 694, 919, 77, 921, 691, 692, 819, 0, 919, 77, 921, 691, 692, 693, 694, 919, 77, 921, 0, 601, 0, 919, 77, 921, 919, 77, 921, 723, 724, 725, 726, 116, 533, 118, 723, 724, 0, 0, 1371, 0, 1370, 723, 724, 725, 726, 116, 533, 118, 0, 601, 0, 116, 533, 118, 116, 533, 118, 723, 724, 725, 726, 116, 533, 118, 723, 724, 0, 0, 1371, 0, 1370, 723, 724, 725, 726, 116, 533, 118, 0, 601, 0, 116, 533, 118, 116, 533, 118, 723, 724, 725, 726, 116, 533, 118, 723, 724, 0, 0, 1371, 0, 1370, 723, 724, 725, 726, 116, 533, 118, 0, 601, 0, 116, 533, 118, 116, 533, 118, 918, 0, 0, 917, 308, 213, 310, 918, 0, 0, 620, 621, 0, 618, 619, 0, 0, 917, 308, 213, 310, 0, 0, 0, 308, 213, 310, 308, 213, 310, 918, 0, 0, 917, 308, 213, 310, 918, 0, 0, 620, 621, 0, 618, 619, 0, 0, 917, 308, 213, 310, 0, 0, 0, 308, 213, 310, 308, 213, 310, 918, 0, 0, 917, 308, 213, 310, 918, 0, 0, 620, 621, 0, 618, 619, 0, 0, 917, 308, 213, 310, 0, 0, 0, 308, 213, 310, 308, 213, 310, 0, 0, 0, 0, 919, 77, 921, 0, 0, 0, 652, 653, 695, 650, 651, 0, 0, 0, 919, 77, 921, 0, 0, 0, 919, 77, 921, 919, 77, 921, 0, 0, 0, 0, 919, 77, 921, 0, 0, 0, 652, 653, 695, 650, 651, 0, 0, 0, 919, 77, 921, 0, 0, 0, 919, 77, 921, 919, 77, 921, 0, 0, 0, 0, 919, 77, 921, 0, 0, 0, 652, 653, 695, 650, 651, 0, 0, 0, 919, 77, 921, 0, 0, 0, 919, 77, 921, 919, 77, 921, 0, 0, 0, 0, 919, 77, 921, 0, 0, 811, 0, 0, 727, 0, 0, 810, 0, 0, 919, 77, 921, 0, 0, 0, 919, 77, 921, 919, 77, 921, 0, 0, 0, 0, 919, 77, 921, 0, 0, 811, 0, 0, 727, 0, 0, 810, 0, 0, 919, 77, 921, 0, 0, 0, 919, 77, 921, 919, 77, 921, 0, 0, 0, 0, 919, 77, 921, 0, 0, 811, 0, 0, 727, 0, 0, 810, 0, 0, 919, 77, 921, 0, 0, 0, 919, 77, 921, 919, 77, 921, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, 542, 509, 510, 542, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, 542, 509, 510, 542, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, 542, 509, 510, 542, 543, 0, 0, 0, 0, 524, 756, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 756, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 756, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 756, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 756, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 756, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "height":14, - "id":2, - "name":"Background", - "opacity":1, - "type":"tilelayer", - "visible":true, - "width":90, - "x":0, - "y":0 - }, - { - "data":[866, 1986, 1991, 1971, 976, 1011, 977, 1971, 741, 742, 1971, 976, 1011, 977, 1971, 741, 742, 1971, 976, 1011, 977, 1971, 1991, 1972, 0, 0, 0, 0, 0, 0, 866, 1986, 1991, 1971, 976, 1011, 977, 1971, 741, 742, 1971, 976, 1011, 977, 1971, 741, 742, 1971, 976, 1011, 977, 1971, 1991, 1972, 0, 0, 0, 0, 0, 0, 866, 1986, 1991, 1971, 976, 1011, 977, 1971, 741, 742, 1971, 976, 1011, 977, 1971, 741, 742, 1971, 976, 1011, 977, 1971, 1991, 1972, 0, 0, 0, 0, 0, 0, 898, 1986, 1991, 1974, 1498, 1497, 1499, 1973, 773, 774, 1974, 1498, 1497, 1499, 1973, 773, 774, 1974, 1498, 1497, 1499, 1973, 1991, 1972, 0, 0, 0, 0, 0, 0, 898, 1986, 1991, 1974, 1498, 1497, 1499, 1973, 773, 774, 1974, 1498, 1497, 1499, 1973, 773, 774, 1974, 1498, 1497, 1499, 1973, 1991, 1972, 0, 0, 0, 0, 0, 0, 898, 1986, 1991, 1974, 1498, 1497, 1499, 1973, 773, 774, 1974, 1498, 1497, 1499, 1973, 773, 774, 1974, 1498, 1497, 1499, 1973, 1991, 1972, 0, 0, 0, 0, 0, 0, 899, 2018, 2023, 2020, 0, 0, 0, 2002, 2003, 2003, 2020, 0, 0, 0, 2002, 2003, 2003, 2020, 0, 0, 0, 2002, 2023, 2004, 0, 0, 0, 0, 0, 0, 899, 2018, 2023, 2020, 0, 0, 0, 2002, 2003, 2003, 2020, 0, 0, 0, 2002, 2003, 2003, 2020, 0, 0, 0, 2002, 2023, 2004, 0, 0, 0, 0, 0, 0, 899, 2018, 2023, 2020, 0, 0, 0, 2002, 2003, 2003, 2020, 0, 0, 0, 2002, 2003, 2003, 2020, 0, 0, 0, 2002, 2023, 2004, 0, 0, 0, 0, 0, 0, 612, 908, 874, 877, 0, 0, 0, 908, 874, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 612, 908, 874, 877, 0, 0, 0, 908, 874, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 612, 908, 874, 877, 0, 0, 0, 908, 874, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 644, 0, 908, 907, 0, 0, 0, 0, 908, 0, 877, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 644, 0, 908, 907, 0, 0, 0, 0, 908, 0, 877, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 644, 0, 908, 907, 0, 0, 0, 0, 908, 0, 877, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1398, 569, 855, 908, 907, 0, 0, 1398, 569, 855, 854, 569, 1398, 0, 265, 569, 569, 855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1398, 569, 855, 908, 907, 0, 0, 1398, 569, 855, 854, 569, 1398, 0, 265, 569, 569, 855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1398, 569, 855, 908, 907, 0, 0, 1398, 569, 855, 854, 569, 1398, 0, 265, 569, 569, 855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 908, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 908, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 908, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1398, 855, 0, 0, 0, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1398, 855, 0, 0, 0, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1398, 855, 0, 0, 0, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 207, 537, 810, 0, 0, 0, 0, 0, 1398, 569, 855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 207, 537, 810, 0, 0, 0, 0, 0, 1398, 569, 855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 207, 537, 810, 0, 0, 0, 0, 0, 1398, 569, 855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 852, 0, 0, 0, 0, 0, 842, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 852, 0, 0, 0, 0, 0, 842, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 852, 0, 0, 0, 0, 0, 842, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 819, 0, 0, 0, 811, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 819, 0, 0, 0, 811, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 819, 0, 0, 0, 811, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 6, 38, 39, 0, 0, 0, 0, 265, 0, 0, 0, 0, 37, 38, 6, 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 6, 38, 39, 0, 0, 0, 0, 265, 0, 0, 0, 0, 37, 38, 6, 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 6, 38, 39, 0, 0, 0, 0, 265, 0, 0, 0, 0, 37, 38, 6, 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 503, 408, 504, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 503, 408, 504, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 503, 408, 504, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 503, 408, 504, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 503, 408, 504, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 503, 408, 504, 537, 0, 0, 0, 0, 0, 0, 0, 0], - "height":14, - "id":1, - "name":"Foreground", - "opacity":1, - "type":"tilelayer", - "visible":true, - "width":90, - "x":0, - "y":0 - }], - "nextlayerid":3, - "nextobjectid":1, - "orientation":"orthogonal", - "renderorder":"right-down", - "tiledversion":"1.8.0", - "tileheight":16, - "tilesets":[ - { - "firstgid":1, - "source":"Tileset_Space.tsx" - }], - "tilewidth":16, - "type":"map", - "version":"1.8", - "width":90 -} \ No newline at end of file diff --git a/assets-cg/Levels/Level2.json b/assets-cg/Levels/Level2.json deleted file mode 100644 index 97ab2ae..0000000 --- a/assets-cg/Levels/Level2.json +++ /dev/null @@ -1,44 +0,0 @@ -{ "compressionlevel":-1, - "height":30, - "infinite":false, - "layers":[ - { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 884, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 917, 883, 915, 918, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 915, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 885, 884, 883, 886, 0, 0, 0, 0, 915, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 915, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 915, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 915, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 884, 918, 917, 883, 886, 0, 0, 885, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 918, 0, 0, 917, 883, 886, 885, 884, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "height":30, - "id":2, - "name":"Background", - "opacity":1, - "type":"tilelayer", - "visible":true, - "width":96, - "x":0, - "y":0 - }, - { - "data":[1954, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1956, 741, 742, 741, 742, 1954, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1956, 741, 742, 741, 742, 1954, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1956, 741, 742, 741, 742, 1954, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1956, 741, 742, 741, 742, 1986, 1987, 1990, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 1989, 1987, 1988, 773, 774, 773, 774, 1986, 1987, 1990, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 1989, 1987, 1988, 773, 774, 773, 774, 1986, 1987, 1990, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 1989, 1987, 1988, 773, 774, 773, 774, 1986, 1987, 1990, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 1989, 1987, 1988, 773, 774, 773, 774, 2018, 2019, 2020, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2018, 2019, 2020, 1925, 1926, 1926, 1927, 2018, 2019, 2020, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2018, 2019, 2020, 1925, 1926, 1926, 1927, 2018, 2019, 2020, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2018, 2019, 2020, 1925, 1926, 1926, 1927, 2018, 2019, 2020, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2018, 2019, 2020, 1925, 1926, 1926, 1927, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, 628, 629, 630, 0, 0, 0, 0, 627, 628, 629, 630, 0, 0, 0, 0, 627, 628, 629, 630, 0, 0, 0, 0, 627, 628, 629, 630, 0, 0, 0, 0, 627, 628, 629, 630, 0, 0, 0, 0, 627, 628, 629, 630, 0, 0, 0, 0, 627, 628, 629, 630, 0, 0, 0, 0, 627, 628, 629, 630, 0, 0, 0, 0, 627, 628, 629, 630, 0, 0, 0, 0, 627, 628, 629, 630, 0, 0, 0, 0, 627, 628, 629, 630, 0, 0, 0, 0, 627, 628, 629, 630, 0, 0, 0, 0, 659, 660, 661, 662, 0, 0, 0, 0, 659, 660, 661, 662, 0, 0, 0, 0, 659, 660, 661, 662, 0, 0, 0, 0, 659, 660, 661, 662, 0, 0, 0, 0, 659, 660, 661, 662, 0, 0, 0, 0, 659, 660, 661, 662, 0, 0, 0, 0, 659, 660, 661, 662, 0, 0, 0, 0, 659, 660, 661, 662, 0, 0, 0, 0, 659, 660, 661, 662, 0, 0, 0, 0, 659, 660, 661, 662, 0, 0, 0, 0, 659, 660, 661, 662, 0, 0, 0, 0, 659, 660, 661, 662, 0, 0, 0, 0, 691, 692, 693, 694, 0, 0, 0, 0, 691, 692, 693, 694, 0, 0, 0, 0, 691, 692, 693, 694, 0, 0, 0, 0, 691, 692, 693, 694, 0, 0, 0, 0, 691, 692, 693, 694, 0, 0, 0, 0, 691, 692, 693, 694, 0, 0, 0, 0, 691, 692, 693, 694, 0, 0, 0, 0, 691, 692, 693, 694, 0, 0, 0, 0, 691, 692, 693, 694, 0, 0, 0, 0, 691, 692, 693, 694, 0, 0, 0, 0, 691, 692, 693, 694, 0, 0, 0, 0, 691, 692, 693, 694, 0, 0, 0, 0, 723, 724, 725, 726, 0, 0, 0, 0, 723, 724, 725, 726, 0, 0, 0, 0, 723, 724, 725, 726, 0, 0, 0, 0, 723, 724, 725, 726, 0, 0, 0, 0, 723, 724, 725, 726, 0, 0, 0, 0, 723, 724, 725, 726, 0, 0, 0, 0, 723, 724, 725, 726, 0, 0, 0, 0, 723, 724, 725, 726, 0, 0, 0, 0, 723, 724, 725, 726, 0, 0, 0, 0, 723, 724, 725, 726, 0, 0, 0, 0, 723, 724, 725, 726, 0, 0, 0, 0, 723, 724, 725, 726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, 628, 629, 630, 0, 0, 0, 0, 627, 628, 629, 630, 0, 0, 0, 0, 627, 628, 629, 630, 0, 0, 0, 0, 627, 628, 629, 630, 0, 0, 0, 0, 627, 628, 629, 630, 0, 0, 0, 0, 627, 628, 629, 630, 0, 0, 0, 0, 627, 628, 629, 630, 0, 0, 0, 0, 627, 628, 629, 630, 0, 0, 0, 0, 627, 628, 629, 630, 0, 0, 0, 0, 627, 628, 629, 630, 0, 0, 0, 0, 627, 628, 629, 630, 0, 0, 0, 0, 627, 628, 629, 630, 0, 0, 0, 0, 659, 660, 661, 662, 0, 0, 0, 0, 659, 660, 661, 662, 0, 0, 0, 0, 659, 660, 661, 662, 0, 0, 0, 0, 659, 660, 661, 662, 0, 0, 0, 0, 659, 660, 661, 662, 0, 0, 0, 0, 659, 660, 661, 662, 0, 0, 0, 0, 659, 660, 661, 662, 0, 0, 0, 0, 659, 660, 661, 662, 0, 0, 0, 0, 659, 660, 661, 662, 0, 0, 0, 0, 659, 660, 661, 662, 0, 0, 0, 0, 659, 660, 661, 662, 0, 0, 0, 0, 659, 660, 661, 662, 0, 0, 0, 0, 691, 692, 693, 694, 0, 0, 0, 0, 691, 692, 693, 694, 0, 0, 0, 0, 691, 692, 693, 694, 0, 0, 0, 0, 691, 692, 693, 694, 0, 0, 0, 0, 691, 692, 693, 694, 0, 0, 0, 0, 691, 692, 693, 694, 0, 0, 0, 0, 691, 692, 693, 694, 0, 0, 0, 0, 691, 692, 693, 694, 0, 0, 0, 0, 691, 692, 693, 694, 0, 0, 0, 0, 691, 692, 693, 694, 0, 0, 0, 0, 691, 692, 693, 694, 0, 0, 0, 0, 691, 692, 693, 694, 0, 0, 0, 0, 723, 724, 725, 726, 0, 0, 0, 0, 723, 724, 725, 726, 0, 0, 0, 0, 723, 724, 725, 726, 0, 0, 0, 0, 723, 724, 725, 726, 0, 0, 0, 0, 723, 724, 725, 726, 0, 0, 0, 0, 723, 724, 725, 726, 0, 0, 0, 0, 723, 724, 725, 726, 0, 0, 0, 0, 723, 724, 725, 726, 0, 0, 0, 0, 723, 724, 725, 726, 0, 0, 0, 0, 723, 724, 725, 726, 0, 0, 0, 0, 723, 724, 725, 726, 0, 0, 0, 0, 723, 724, 725, 726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1954, 1955, 1956, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1954, 1955, 1956, 1925, 1926, 1926, 1927, 1954, 1955, 1956, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1954, 1955, 1956, 1925, 1926, 1926, 1927, 1954, 1955, 1956, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1954, 1955, 1956, 1925, 1926, 1926, 1927, 1954, 1955, 1956, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1954, 1955, 1956, 1925, 1926, 1926, 1927, 1986, 1987, 1958, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1957, 1987, 1988, 741, 742, 741, 742, 1986, 1987, 1958, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1957, 1987, 1988, 741, 742, 741, 742, 1986, 1987, 1958, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1957, 1987, 1988, 741, 742, 741, 742, 1986, 1987, 1958, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1957, 1987, 1988, 741, 742, 741, 742, 2018, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2020, 773, 774, 773, 774, 2018, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2020, 773, 774, 773, 774, 2018, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2020, 773, 774, 773, 774, 2018, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2020, 773, 774, 773, 774], - "height":30, - "id":1, - "name":"Foreground", - "opacity":1, - "type":"tilelayer", - "visible":true, - "width":96, - "x":0, - "y":0 - }], - "nextlayerid":4, - "nextobjectid":1, - "orientation":"orthogonal", - "renderorder":"right-down", - "tiledversion":"1.8.0", - "tileheight":16, - "tilesets":[ - { - "firstgid":1, - "source":"Tileset_Space.tsx" - }], - "tilewidth":16, - "type":"map", - "version":"1.8", - "width":96 -} \ No newline at end of file diff --git a/assets-cg/Levels/Tileset_Space.json b/assets-cg/Levels/Tileset_Space.json deleted file mode 100644 index fd37d86..0000000 --- a/assets-cg/Levels/Tileset_Space.json +++ /dev/null @@ -1,14 +0,0 @@ -{ "columns":32, - "image":"tileset.png", - "imageheight":1024, - "imagewidth":512, - "margin":0, - "name":"Tileset_Space", - "spacing":0, - "tilecount":2048, - "tiledversion":"1.8.0", - "tileheight":16, - "tilewidth":16, - "type":"tileset", - "version":"1.8" -} \ No newline at end of file diff --git a/assets-cg/Sprites/Bullets/bullet_enemy_blue.png b/assets-cg/Sprites/Bullets/bullet_enemy_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..33456cb696888a782f9d855b5f4ddbd4535faf21 GIT binary patch literal 118 zcmeAS@N?(olHy`uVBq!ia0vp^>>$j+1|*LJg|$@D9``^ literal 0 HcmV?d00001 diff --git a/assets-cg/Sprites/Enemies/Lifebar.png b/assets-cg/Sprites/Enemies/Lifebar.png new file mode 100644 index 0000000000000000000000000000000000000000..1bb6f184d04f70f6d14ea860dca5b12b60ac9bea GIT binary patch literal 239 zcmVI>rq(Z+)hjdLOuxq%Y3q(P9_X-ABD}MqhP&uVTkKdxSwC`)Kr83aO->1 p=@iD4_EFe8IttcnH>N}YcmvF1JS;5)u(ALE002ovPDHLkV1lD>Vs`)l literal 0 HcmV?d00001 diff --git a/assets-cg/__pycache__/converters.cpython-310.pyc b/assets-cg/__pycache__/converters.cpython-310.pyc deleted file mode 100644 index a0c803ea85cc0023348e9756c93333abba6afaf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1522 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 #include + +enum +{ + BULLET_NORMAL, + BULLET_BLUE, + BULLET_LASER, + BULLET_ENEMY_BLUE, +}; + + class Bullet { public: - Bullet( uint16_t lx, uint16_t ly, uint8_t id ); + Bullet( uint16_t lx, uint16_t ly, int16_t dx, int16_t dy, uint8_t id ); ~Bullet(); void Update( float dt ); void Render(); diff --git a/src/collections.cpp b/src/collections.cpp index 92a3bb9..e808f51 100644 --- a/src/collections.cpp +++ b/src/collections.cpp @@ -5,9 +5,13 @@ extern std::vector MyParticles; + extern std::vector MyPlayerBullets; +extern std::vector MyEnemiesBullets; + extern std::vector MyEnemies; extern std::vector MyImpacts; + extern Player *MyPlayer; @@ -15,33 +19,34 @@ extern Player *MyPlayer; void Create_Player_Shoot( uint8_t id ) { - if (id==0) + if (id==BULLET_NORMAL) { - Bullet *b = new Bullet( (int) MyPlayer->x+21, (int) MyPlayer->y, id ); + Bullet *b = new Bullet( (int) MyPlayer->x+21, (int) MyPlayer->y, 6, 0, id ); MyPlayerBullets.push_back( b ); } - else if (id==1) + else if (id==BULLET_BLUE) { - Bullet *b1 = new Bullet( (int) MyPlayer->x, (int) MyPlayer->y-17, id ); + Bullet *b1 = new Bullet( (int) MyPlayer->x, (int) MyPlayer->y-17, 5, 0, id ); MyPlayerBullets.push_back( b1 ); - Bullet *b2 = new Bullet( (int) MyPlayer->x, (int) MyPlayer->y+17, id ); + Bullet *b2 = new Bullet( (int) MyPlayer->x, (int) MyPlayer->y+17, 5, 0, id ); MyPlayerBullets.push_back( b2 ); } - else if (id==2) + else if (id==BULLET_LASER) { - Bullet *b1 = new Bullet( (int) MyPlayer->x+21, (int) MyPlayer->y, id ); + Bullet *b1 = new Bullet( (int) MyPlayer->x+21, (int) MyPlayer->y, 3, 0, id ); MyPlayerBullets.push_back( b1 ); - Bullet *b2 = new Bullet( (int) MyPlayer->x, (int) MyPlayer->y-17, id ); + Bullet *b2 = new Bullet( (int) MyPlayer->x, (int) MyPlayer->y-17, 3, 0, id ); MyPlayerBullets.push_back( b2 ); - Bullet *b3 = new Bullet( (int) MyPlayer->x, (int) MyPlayer->y+17, id ); + Bullet *b3 = new Bullet( (int) MyPlayer->x, (int) MyPlayer->y+17, 3, 0, id ); MyPlayerBullets.push_back( b3 ); } } -void Create_Ennemies( void ) + +void Create_Enemies( void ) { Enemy* e1 = new Enemy( 348, 112, 0); e1->Set_Speed_Vector( 1, 1, -6 ); @@ -129,6 +134,21 @@ void Clean_Everything( void ) MyPlayerBullets.erase( MyPlayerBullets.begin() + i ); } MyPlayerBullets.clear(); + + for(unsigned int i=0; i +#include - +extern bopti_image_t img_Lifebar; extern bopti_image_t img_mainship2; extern bopti_image_t img_Enemy_Blue_Lvl1; extern bopti_image_t img_Enemy_Red_Lvl1; + +extern std::vector MyEnemiesBullets; + + + Enemy::Enemy( int16_t _x, int16_t _y, uint8_t _id ) { x = libnum::num( _x ); @@ -22,18 +28,21 @@ Enemy::Enemy( int16_t _x, int16_t _y, uint8_t _id ) width = img_mainship2.width/2; height = img_mainship2.height/2; speed = 1; + life = 400; } else if (ID==1) { width = img_Enemy_Blue_Lvl1.width/2; height = img_Enemy_Blue_Lvl1.height/2; speed = 2; + life = 200; } else if (ID==2) { width = img_Enemy_Red_Lvl1.width/2; height = img_Enemy_Red_Lvl1.height/2; speed = 2; + life = 100; } xmin = (int) x - width; @@ -43,9 +52,7 @@ Enemy::Enemy( int16_t _x, int16_t _y, uint8_t _id ) toberemoved = false; - if (ID==0) life = 400; - else if (ID==1) life = 200; - else if (ID==2) life = 100; + lastshottime = 0; } Enemy::~Enemy() @@ -75,14 +82,62 @@ void Enemy::Update( float dt ) ymin = (int) y - height; ymax = (int) y + height; + + uint32_t tempshoot = rtc_ticks(); + + if (Shoot_OK( tempshoot )) + { + if ( ID==0 ) + { + Bullet *b = new Bullet( xmin, (int) y, -3, 0, BULLET_ENEMY_BLUE ); + MyEnemiesBullets.push_back( b ); + } + else if ( ID==1 ) + { + Bullet *b1 = new Bullet( xmin, (int) y, -5, 0, BULLET_ENEMY_BLUE ); + MyEnemiesBullets.push_back( b1 ); + + Bullet *b2 = new Bullet( xmin, (int) y, -5, 0, BULLET_ENEMY_BLUE ); + MyEnemiesBullets.push_back( b2 ); + } + else if ( ID==2 ) + { + Bullet *b = new Bullet( xmin, (int) y, -1, 0, BULLET_ENEMY_BLUE ); + MyEnemiesBullets.push_back( b ); + } + + } + + if (life<=0) toberemoved=true; } void Enemy::Render( void ) { - if (ID==0) azrp_image_p8_effect(xmin, ymin, &img_mainship2, DIMAGE_NONE); - if (ID==1) azrp_image_p8_effect(xmin, ymin, &img_Enemy_Blue_Lvl1, DIMAGE_NONE); - if (ID==2) azrp_image_p8_effect(xmin, ymin, &img_Enemy_Red_Lvl1, DIMAGE_NONE); + azrp_subimage_p8_effect( (int) x - img_Lifebar.width/2, ymin - 10, &img_Lifebar, 0, 0, img_Lifebar.width, 7, DIMAGE_NONE ); + + int life0=100; + + if (ID==0) + { + azrp_image_p8_effect(xmin, ymin, &img_mainship2, DIMAGE_NONE); + life0 = 400; + } + else if (ID==1) + { + azrp_image_p8_effect(xmin, ymin, &img_Enemy_Blue_Lvl1, DIMAGE_NONE); + life0 = 200; + } + else if (ID==2) + { + azrp_image_p8_effect(xmin, ymin, &img_Enemy_Red_Lvl1, DIMAGE_NONE); + life0 = 100; + } + + if (life>life0*2/3) azrp_subimage_p8_effect((int) x - img_Lifebar.width/2, ymin - 9, &img_Lifebar, 0, 7, (img_Lifebar.width*life)/life0, 5, DIMAGE_NONE ); + else if (life>life0/3) azrp_subimage_p8_effect((int) x - img_Lifebar.width/2, ymin - 9, &img_Lifebar, 0, 12, (img_Lifebar.width*life)/life0, 5, DIMAGE_NONE ); + else azrp_subimage_p8_effect((int) x - img_Lifebar.width/2, ymin - 9, &img_Lifebar, 0, 17, (img_Lifebar.width*life)/life0, 5, DIMAGE_NONE ); + } @@ -102,4 +157,15 @@ void Enemy::Set_Speed_Vector( uint8_t _sp, uint8_t _xd, uint8_t _yd) speed = _sp; dirx = _xd; diry = _yd; +} + +bool Enemy::Shoot_OK( uint32_t tempshoot ) +{ + if(tempshoot-lastshottime>15) + { + lastshottime=tempshoot; + return true; + } + else return false; + } \ No newline at end of file diff --git a/src/enemy.h b/src/enemy.h index cbe9924..ced5fb9 100644 --- a/src/enemy.h +++ b/src/enemy.h @@ -37,6 +37,10 @@ class Enemy private: int8_t dirx, diry; // vector of the current direction of the ennemy (TODO : to implement more complex displacement pattern) + + uint32_t lastshottime; + + bool Shoot_OK( uint32_t tempshoot ); }; diff --git a/src/fast_trig.cpp b/src/fast_trig.cpp new file mode 100644 index 0000000..71379f9 --- /dev/null +++ b/src/fast_trig.cpp @@ -0,0 +1,61 @@ +#include "fast_trig.h" +#include "num/num.h" + + +static libnum::num cosTable[360]; +static libnum::num sinTable[360]; + + +void Fast_Trig_Init( void ) +{ + for(int u=0; u<360; u++) + { + cosTable[u] = libnum::num( cos( u * PI / 180 ) ); + sinTable[u] = libnum::num( sin( u * PI / 180 ) ); + } +} + + +libnum::num FastCos( int16_t angle ) +{ + if (angle>=0 and angle<360) return cosTable[ angle ]; + else + { + int16_t input = angle; + if (input<0) + { + while (input<0) input+=360; + return cosTable[ angle ]; + } + else + { + while (input>=360) input-=360; + return cosTable[ angle ]; + } + } +} + +libnum::num FastSin( int16_t angle ) +{ + if (angle>=0 and angle<360) return sinTable[ angle ]; + else + { + int16_t input = angle; + if (input<0) + { + while (input<0) input+=360; + return sinTable[ angle ]; + } + else + { + while (input>=360) input-=360; + return sinTable[ angle ]; + } + } +} + +libnum::num FastTan( int16_t angle ) +{ + //TODO : work on representation of infinite number for angle = 90 degrees or angle = 270 degrees + return libnum::num(0); +} \ No newline at end of file diff --git a/src/fast_trig.h b/src/fast_trig.h new file mode 100644 index 0000000..9bb2172 --- /dev/null +++ b/src/fast_trig.h @@ -0,0 +1,19 @@ +#ifndef FAST_TRIG_H +#define FAST_TRIG_H + + +#include +#include + + +#define PI 3.141592 + + +void Fast_Trig_Init( void ); + +libnum::num FastCos( int16_t angle ); +libnum::num FastSin( int16_t angle ); +libnum::num FastTan( int16_t angle ); + + +#endif diff --git a/src/main.cpp b/src/main.cpp index 1022d2f..f33b343 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,4 +1,4 @@ -#define DEBUG_MODE 0 +#define DEBUG_MODE 1 #include #include @@ -20,6 +20,7 @@ #include +#include "fast_trig.h" #include "extrakeyboard.h" #include "collections.h" @@ -72,6 +73,7 @@ kmalloc_gint_stats_t *extram_stats; std::vector MyParticles; std::vector MyPlayerBullets; +std::vector MyEnemiesBullets; std::vector MyEnemies; std::vector MyImpacts; @@ -138,6 +140,9 @@ static void update( float dt ) { MyEnemies[i]->Update( dt ); + // Check if there is a collision with the current enemy + //MyPlayer->Test_Collision( MyEnemies[i] ); + // Check if the property toberemoved has been set to "true" for particle deletion if (MyEnemies[i]->toberemoved == true) { @@ -181,6 +186,26 @@ static void update( float dt ) } } + for(unsigned int i=0; iUpdate( dt ); + + if(MyPlayer->Test_Impact(MyEnemiesBullets[i])==true) + { + //TODO : we can create a list of impacts here, to be rendered later on + Create_Impact( (int) MyEnemiesBullets[i]->x, (int) MyEnemiesBullets[i]->y ); + } + + + // Check if the property toberemoved has been set to "true" for particle deletion + if (MyEnemiesBullets[i]->toberemoved == true) + { + delete( MyEnemiesBullets[i] ); + MyEnemiesBullets.erase( MyEnemiesBullets.begin() + i ); + } + } + + MyBackground.Update( dt ); } @@ -199,6 +224,9 @@ static void render( void ) for(auto& b : MyPlayerBullets) b->Render(); + for(auto& b : MyEnemiesBullets) + b->Render(); + for(auto& e : MyEnemies) e->Render(); @@ -235,17 +263,17 @@ static void get_inputs( float dt ) if(MyKeyboard.IsKeyPressed(MYKEY_F1)) { - if (MyPlayer->Shoot_OK(tempshoot, 0)) Create_Player_Shoot(0); + if (MyPlayer->Shoot_OK(tempshoot, BULLET_NORMAL)) Create_Player_Shoot(0); } if(MyKeyboard.IsKeyPressed(MYKEY_F2)) { - if (MyPlayer->Shoot_OK(tempshoot, 1)) Create_Player_Shoot(1); + if (MyPlayer->Shoot_OK(tempshoot, BULLET_BLUE)) Create_Player_Shoot(1); } if(MyKeyboard.IsKeyPressedEvent(MYKEY_F3)) { - if (MyPlayer->Shoot_OK(tempshoot, 2)) Create_Player_Shoot(2); + if (MyPlayer->Shoot_OK(tempshoot, BULLET_LASER)) Create_Player_Shoot(2); } if (MyKeyboard.IsKeyPressed(MYKEY_SHIFT) && MyKeyboard.IsKeyHoldPressed(MYKEY_EXIT)) {exitToOS = true; }; @@ -286,7 +314,7 @@ bool AddMoreRAM( void ) extended_ram.name = "extram"; extended_ram.is_default = true; extended_ram.start = (void *)0x8c200000; - extended_ram.end = (void *)0x8c500000 ; + extended_ram.end = (void *)0x8c4e0000 ; kmalloc_init_arena(&extended_ram, true); kmalloc_add_arena(&extended_ram ); @@ -316,7 +344,7 @@ bool AddMoreRAM( void ) extended_ram.name = "extram"; extended_ram.is_default = true; extended_ram.start = (void *)0x88200000; - extended_ram.end = (void *)0x88500000 ; + extended_ram.end = (void *)0x884e0000 ; kmalloc_init_arena(&extended_ram, true); kmalloc_add_arena(&extended_ram ); @@ -329,15 +357,35 @@ void FreeMoreRAM( void ) memset(extended_ram.start, 0, (char *)extended_ram.end - (char *)extended_ram.start); } +/* +#define DBGCRSH 1 +#include +int a=0; +void debug_crash( int value ) +{ + dprint( 1, 1+a*10, C_BLACK, "point = %d : REACHED", value ); + a++; + dupdate(); + getkey(); +} -extern bopti_image_t img_Enemy_Red_Lvl1; - +void debug_crash_msg( char *chain ) +{ + dprint( 1, 1+a*10, C_BLACK, "point = %s : REACHED", chain ); + a++; + dupdate(); + getkey(); +} +*/ int main(void) { exitToOS = false; + Fast_Trig_Init(); + + _uram = kmalloc_get_arena("_uram"); bool canWeAllocate3Mb = AddMoreRAM(); @@ -354,11 +402,15 @@ int main(void) azrp_starfield_init( 250 ); - Create_Ennemies( ); - + Create_Enemies( ); MyPlayer = new Player( azrp_width/4, azrp_height/2, 0); +/* + #if(DBGCRSH) + debug_crash( 1 ); + #endif +*/ usb_interface_t const *interfaces[] = { &usb_ff_bulk, NULL }; usb_open(interfaces, GINT_CALL_NULL); @@ -398,6 +450,7 @@ int main(void) render(); azrp_update(); + } prof_leave(perf_render); diff --git a/src/player.cpp b/src/player.cpp index 6334d2b..db3eda2 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -3,17 +3,16 @@ #include "enemy.h" #include #include -#include +#include "fast_trig.h" #include "background.h" + +extern bopti_image_t img_Lifebar; extern bopti_image_t img_mainship1; extern bopti_image_t img_Satellite_Lvl1; extern Background MyBackground; -static int16_t cosTable[360], sinTable[360]; -#define PI 3.141592 - Player::Player( int16_t _x, int16_t _y, uint8_t _id ) { x = libnum::num(_x); @@ -42,12 +41,6 @@ Player::Player( int16_t _x, int16_t _y, uint8_t _id ) satAngle = 0; satRadius = 50; satSpeed = 2; - - for(int u=0; u<360; u++) - { - cosTable[u] = (int16_t) (satRadius*cos( u * PI / 180 )); - sinTable[u] = (int16_t) (satRadius*sin( u * PI / 180 )); - } } Player::~Player() @@ -72,6 +65,8 @@ void Player::Update( float dt ) void Player::Render( void ) { + azrp_subimage_p8_effect( (int) x - img_Lifebar.width/2, ymin - 10, &img_Lifebar, 0, 0, img_Lifebar.width, 7, DIMAGE_NONE ); + if (ID==0) azrp_image_p8_effect(xmin, ymin, &img_mainship1, DIMAGE_NONE); int w = img_Satellite_Lvl1.width/2; @@ -85,11 +80,18 @@ void Player::Render( void ) { int angle = (int) satAngle + u*incangle; angle = angle % 360; - int xsat = (int) x + cosTable[angle]; - int ysat = (int) y + sinTable[angle]; + int xsat = (int) (x + FastCos( angle ) * libnum::num( satRadius) ); + int ysat = (int) (y + FastSin( angle ) * libnum::num( satRadius) ); azrp_image_p8_effect(xsat-w, ysat-h, &img_Satellite_Lvl1, DIMAGE_NONE); } } + + int16_t life0=1000; + + if (life>life0*2/3) azrp_subimage_p8_effect((int) x - img_Lifebar.width/2, ymin - 9, &img_Lifebar, 0, 7, (img_Lifebar.width*life)/life0, 5, DIMAGE_NONE ); + else if (life>life0/3) azrp_subimage_p8_effect((int) x - img_Lifebar.width/2, ymin - 9, &img_Lifebar, 0, 12, (img_Lifebar.width*life)/life0, 5, DIMAGE_NONE ); + else azrp_subimage_p8_effect((int) x - img_Lifebar.width/2, ymin - 9, &img_Lifebar, 0, 17, (img_Lifebar.width*life)/life0, 5, DIMAGE_NONE ); + } @@ -104,7 +106,7 @@ bool Player::Test_Impact( Bullet *projectile ) else return false; } -bool Player::Test_Impact( Enemy *adverseship ) +bool Player::Test_Collision( Enemy *adverseship ) { if (adverseship->xmax >= xmin && adverseship->xmin <= xmax && adverseship->ymax >= ymin && adverseship->ymin <= ymax ) { @@ -122,7 +124,7 @@ void Player::Set_Speed( uint8_t _sp ) bool Player::Shoot_OK( uint32_t tempshoot, uint8_t shootID ) { - if (shootID==0) + if (shootID==BULLET_NORMAL) { if(tempshoot-lastshoot0>8) { @@ -131,7 +133,7 @@ bool Player::Shoot_OK( uint32_t tempshoot, uint8_t shootID ) } else return false; } - else if (shootID==1) + else if (shootID==BULLET_BLUE) { if(tempshoot-lastshoot1>15) { @@ -140,7 +142,7 @@ bool Player::Shoot_OK( uint32_t tempshoot, uint8_t shootID ) } else return false; } - else if (shootID==2) + else if (shootID==BULLET_LASER) { if(tempshoot-lastshoot2>2) { diff --git a/src/player.h b/src/player.h index 4a67e49..2681a03 100644 --- a/src/player.h +++ b/src/player.h @@ -22,7 +22,7 @@ class Player void Render( void ); bool Test_Impact( Bullet *projectile ); - bool Test_Impact( Enemy *adverseship ); + bool Test_Collision( Enemy *adverseship ); void Set_Speed( uint8_t _sp ); bool Shoot_OK( uint32_t tempshoot, uint8_t shootID ); diff --git a/src/starfieldshader.cpp b/src/starfieldshader.cpp index 5b41351..6000a1f 100644 --- a/src/starfieldshader.cpp +++ b/src/starfieldshader.cpp @@ -279,7 +279,7 @@ void azrp_starfield( void ) cmd.nbpixel = pixels.size(); cmd.data = pixels.data(); - for(int i=0; ix = (pixels[i]->x - pixels[i]->s) % 396; pixels[i]->frag = pixels[i]->y / 16;