From d48fd199777cc17cf89d1e50d59852ad373de5b5 Mon Sep 17 00:00:00 2001 From: realtradam Date: Thu, 16 Dec 2021 23:49:44 -0500 Subject: initial --- app/components/sprite.rb | 21 + app/felflame.rb | 784 +++++++++++++++++++++++++++++++++ app/main.rb | 9 + app/scenes/scenes.rb | 4 + app/systems/render.rb | 7 + app/tick.rb | 4 + data/.gitkeep | 1 + fonts/.gitkeep | 1 + metadata/game_metadata.txt | 12 + metadata/icon.png | Bin 0 -> 157056 bytes metadata/ios_metadata.txt | 14 + sounds/.gitkeep | 1 + sprites/circle/black.png | Bin 0 -> 2511 bytes sprites/circle/blue.png | Bin 0 -> 4096 bytes sprites/circle/gray.png | Bin 0 -> 3719 bytes sprites/circle/green.png | Bin 0 -> 4105 bytes sprites/circle/indigo.png | Bin 0 -> 4430 bytes sprites/circle/orange.png | Bin 0 -> 4093 bytes sprites/circle/red.png | Bin 0 -> 4133 bytes sprites/circle/violet.png | Bin 0 -> 4383 bytes sprites/circle/white.png | Bin 0 -> 3463 bytes sprites/circle/yellow.png | Bin 0 -> 3408 bytes sprites/hexagon/black.png | Bin 0 -> 2202 bytes sprites/hexagon/blue.png | Bin 0 -> 2060 bytes sprites/hexagon/gray.png | Bin 0 -> 2011 bytes sprites/hexagon/green.png | Bin 0 -> 2064 bytes sprites/hexagon/indigo.png | Bin 0 -> 2169 bytes sprites/hexagon/orange.png | Bin 0 -> 2045 bytes sprites/hexagon/red.png | Bin 0 -> 2017 bytes sprites/hexagon/violet.png | Bin 0 -> 2166 bytes sprites/hexagon/white.png | Bin 0 -> 1627 bytes sprites/hexagon/yellow.png | Bin 0 -> 1656 bytes sprites/isometric/black.png | Bin 0 -> 2444 bytes sprites/isometric/blue.png | Bin 0 -> 2771 bytes sprites/isometric/gray.png | Bin 0 -> 2475 bytes sprites/isometric/green.png | Bin 0 -> 2785 bytes sprites/isometric/indigo.png | Bin 0 -> 2844 bytes sprites/isometric/orange.png | Bin 0 -> 2444 bytes sprites/isometric/red.png | Bin 0 -> 2469 bytes sprites/isometric/violet.png | Bin 0 -> 2852 bytes sprites/isometric/white.png | Bin 0 -> 2033 bytes sprites/isometric/yellow.png | Bin 0 -> 1449 bytes sprites/kenny/License.txt | 22 + sprites/kenny/Preview.png | Bin 0 -> 19720 bytes sprites/kenny/Sample.png | Bin 0 -> 48141 bytes sprites/kenny/Ships/ship_0000.png | Bin 0 -> 296 bytes sprites/kenny/Ships/ship_0001.png | Bin 0 -> 279 bytes sprites/kenny/Ships/ship_0002.png | Bin 0 -> 300 bytes sprites/kenny/Ships/ship_0003.png | Bin 0 -> 286 bytes sprites/kenny/Ships/ship_0004.png | Bin 0 -> 251 bytes sprites/kenny/Ships/ship_0005.png | Bin 0 -> 226 bytes sprites/kenny/Ships/ship_0006.png | Bin 0 -> 238 bytes sprites/kenny/Ships/ship_0007.png | Bin 0 -> 270 bytes sprites/kenny/Ships/ship_0008.png | Bin 0 -> 221 bytes sprites/kenny/Ships/ship_0009.png | Bin 0 -> 236 bytes sprites/kenny/Ships/ship_0010.png | Bin 0 -> 222 bytes sprites/kenny/Ships/ship_0011.png | Bin 0 -> 237 bytes sprites/kenny/Ships/ship_0012.png | Bin 0 -> 296 bytes sprites/kenny/Ships/ship_0013.png | Bin 0 -> 279 bytes sprites/kenny/Ships/ship_0014.png | Bin 0 -> 300 bytes sprites/kenny/Ships/ship_0015.png | Bin 0 -> 286 bytes sprites/kenny/Ships/ship_0016.png | Bin 0 -> 251 bytes sprites/kenny/Ships/ship_0017.png | Bin 0 -> 226 bytes sprites/kenny/Ships/ship_0018.png | Bin 0 -> 238 bytes sprites/kenny/Ships/ship_0019.png | Bin 0 -> 270 bytes sprites/kenny/Ships/ship_0020.png | Bin 0 -> 221 bytes sprites/kenny/Ships/ship_0021.png | Bin 0 -> 236 bytes sprites/kenny/Ships/ship_0022.png | Bin 0 -> 222 bytes sprites/kenny/Ships/ship_0023.png | Bin 0 -> 237 bytes sprites/kenny/Tilemap/ships.png | Bin 0 -> 2305 bytes sprites/kenny/Tilemap/ships_packed.png | Bin 0 -> 2255 bytes sprites/kenny/Tilemap/tiles.png | Bin 0 -> 3973 bytes sprites/kenny/Tilemap/tiles_packed.png | Bin 0 -> 3759 bytes sprites/kenny/Tiles/tile_0000.png | Bin 0 -> 135 bytes sprites/kenny/Tiles/tile_0001.png | Bin 0 -> 141 bytes sprites/kenny/Tiles/tile_0002.png | Bin 0 -> 135 bytes sprites/kenny/Tiles/tile_0003.png | Bin 0 -> 164 bytes sprites/kenny/Tiles/tile_0004.png | Bin 0 -> 170 bytes sprites/kenny/Tiles/tile_0005.png | Bin 0 -> 159 bytes sprites/kenny/Tiles/tile_0006.png | Bin 0 -> 159 bytes sprites/kenny/Tiles/tile_0007.png | Bin 0 -> 142 bytes sprites/kenny/Tiles/tile_0008.png | Bin 0 -> 147 bytes sprites/kenny/Tiles/tile_0009.png | Bin 0 -> 135 bytes sprites/kenny/Tiles/tile_0010.png | Bin 0 -> 162 bytes sprites/kenny/Tiles/tile_0011.png | Bin 0 -> 163 bytes sprites/kenny/Tiles/tile_0012.png | Bin 0 -> 160 bytes sprites/kenny/Tiles/tile_0013.png | Bin 0 -> 169 bytes sprites/kenny/Tiles/tile_0014.png | Bin 0 -> 160 bytes sprites/kenny/Tiles/tile_0015.png | Bin 0 -> 167 bytes sprites/kenny/Tiles/tile_0016.png | Bin 0 -> 169 bytes sprites/kenny/Tiles/tile_0017.png | Bin 0 -> 182 bytes sprites/kenny/Tiles/tile_0018.png | Bin 0 -> 181 bytes sprites/kenny/Tiles/tile_0019.png | Bin 0 -> 158 bytes sprites/kenny/Tiles/tile_0020.png | Bin 0 -> 142 bytes sprites/kenny/Tiles/tile_0021.png | Bin 0 -> 165 bytes sprites/kenny/Tiles/tile_0022.png | Bin 0 -> 156 bytes sprites/kenny/Tiles/tile_0023.png | Bin 0 -> 147 bytes sprites/kenny/Tiles/tile_0024.png | Bin 0 -> 173 bytes sprites/kenny/Tiles/tile_0025.png | Bin 0 -> 168 bytes sprites/kenny/Tiles/tile_0026.png | Bin 0 -> 176 bytes sprites/kenny/Tiles/tile_0027.png | Bin 0 -> 135 bytes sprites/kenny/Tiles/tile_0028.png | Bin 0 -> 200 bytes sprites/kenny/Tiles/tile_0029.png | Bin 0 -> 179 bytes sprites/kenny/Tiles/tile_0030.png | Bin 0 -> 159 bytes sprites/kenny/Tiles/tile_0031.png | Bin 0 -> 162 bytes sprites/kenny/Tiles/tile_0032.png | Bin 0 -> 174 bytes sprites/kenny/Tiles/tile_0033.png | Bin 0 -> 164 bytes sprites/kenny/Tiles/tile_0034.png | Bin 0 -> 160 bytes sprites/kenny/Tiles/tile_0035.png | Bin 0 -> 177 bytes sprites/kenny/Tiles/tile_0036.png | Bin 0 -> 163 bytes sprites/kenny/Tiles/tile_0037.png | Bin 0 -> 165 bytes sprites/kenny/Tiles/tile_0038.png | Bin 0 -> 164 bytes sprites/kenny/Tiles/tile_0039.png | Bin 0 -> 152 bytes sprites/kenny/Tiles/tile_0040.png | Bin 0 -> 145 bytes sprites/kenny/Tiles/tile_0041.png | Bin 0 -> 149 bytes sprites/kenny/Tiles/tile_0042.png | Bin 0 -> 99 bytes sprites/kenny/Tiles/tile_0043.png | Bin 0 -> 165 bytes sprites/kenny/Tiles/tile_0044.png | Bin 0 -> 164 bytes sprites/kenny/Tiles/tile_0045.png | Bin 0 -> 152 bytes sprites/kenny/Tiles/tile_0046.png | Bin 0 -> 145 bytes sprites/kenny/Tiles/tile_0047.png | Bin 0 -> 149 bytes sprites/kenny/Tiles/tile_0048.png | Bin 0 -> 156 bytes sprites/kenny/Tiles/tile_0049.png | Bin 0 -> 143 bytes sprites/kenny/Tiles/tile_0050.png | Bin 0 -> 127 bytes sprites/kenny/Tiles/tile_0051.png | Bin 0 -> 137 bytes sprites/kenny/Tiles/tile_0052.png | Bin 0 -> 154 bytes sprites/kenny/Tiles/tile_0053.png | Bin 0 -> 146 bytes sprites/kenny/Tiles/tile_0054.png | Bin 0 -> 164 bytes sprites/kenny/Tiles/tile_0055.png | Bin 0 -> 143 bytes sprites/kenny/Tiles/tile_0056.png | Bin 0 -> 127 bytes sprites/kenny/Tiles/tile_0057.png | Bin 0 -> 137 bytes sprites/kenny/Tiles/tile_0058.png | Bin 0 -> 154 bytes sprites/kenny/Tiles/tile_0059.png | Bin 0 -> 146 bytes sprites/kenny/Tiles/tile_0060.png | Bin 0 -> 175 bytes sprites/kenny/Tiles/tile_0061.png | Bin 0 -> 154 bytes sprites/kenny/Tiles/tile_0062.png | Bin 0 -> 169 bytes sprites/kenny/Tiles/tile_0063.png | Bin 0 -> 156 bytes sprites/kenny/Tiles/tile_0064.png | Bin 0 -> 164 bytes sprites/kenny/Tiles/tile_0065.png | Bin 0 -> 151 bytes sprites/kenny/Tiles/tile_0066.png | Bin 0 -> 178 bytes sprites/kenny/Tiles/tile_0067.png | Bin 0 -> 154 bytes sprites/kenny/Tiles/tile_0068.png | Bin 0 -> 169 bytes sprites/kenny/Tiles/tile_0069.png | Bin 0 -> 156 bytes sprites/kenny/Tiles/tile_0070.png | Bin 0 -> 164 bytes sprites/kenny/Tiles/tile_0071.png | Bin 0 -> 151 bytes sprites/kenny/Tiles/tile_0072.png | Bin 0 -> 177 bytes sprites/kenny/Tiles/tile_0073.png | Bin 0 -> 160 bytes sprites/kenny/Tiles/tile_0074.png | Bin 0 -> 154 bytes sprites/kenny/Tiles/tile_0075.png | Bin 0 -> 154 bytes sprites/kenny/Tiles/tile_0076.png | Bin 0 -> 151 bytes sprites/kenny/Tiles/tile_0077.png | Bin 0 -> 164 bytes sprites/kenny/Tiles/tile_0078.png | Bin 0 -> 171 bytes sprites/kenny/Tiles/tile_0079.png | Bin 0 -> 160 bytes sprites/kenny/Tiles/tile_0080.png | Bin 0 -> 154 bytes sprites/kenny/Tiles/tile_0081.png | Bin 0 -> 154 bytes sprites/kenny/Tiles/tile_0082.png | Bin 0 -> 151 bytes sprites/kenny/Tiles/tile_0083.png | Bin 0 -> 164 bytes sprites/kenny/Tiles/tile_0084.png | Bin 0 -> 188 bytes sprites/kenny/Tiles/tile_0085.png | Bin 0 -> 145 bytes sprites/kenny/Tiles/tile_0086.png | Bin 0 -> 167 bytes sprites/kenny/Tiles/tile_0087.png | Bin 0 -> 132 bytes sprites/kenny/Tiles/tile_0088.png | Bin 0 -> 162 bytes sprites/kenny/Tiles/tile_0089.png | Bin 0 -> 175 bytes sprites/kenny/Tiles/tile_0090.png | Bin 0 -> 182 bytes sprites/kenny/Tiles/tile_0091.png | Bin 0 -> 146 bytes sprites/kenny/Tiles/tile_0092.png | Bin 0 -> 167 bytes sprites/kenny/Tiles/tile_0093.png | Bin 0 -> 132 bytes sprites/kenny/Tiles/tile_0094.png | Bin 0 -> 162 bytes sprites/kenny/Tiles/tile_0095.png | Bin 0 -> 175 bytes sprites/kenny/Tiles/tile_0096.png | Bin 0 -> 172 bytes sprites/kenny/Tiles/tile_0097.png | Bin 0 -> 159 bytes sprites/kenny/Tiles/tile_0098.png | Bin 0 -> 166 bytes sprites/kenny/Tiles/tile_0099.png | Bin 0 -> 170 bytes sprites/kenny/Tiles/tile_0100.png | Bin 0 -> 144 bytes sprites/kenny/Tiles/tile_0101.png | Bin 0 -> 149 bytes sprites/kenny/Tiles/tile_0102.png | Bin 0 -> 172 bytes sprites/kenny/Tiles/tile_0103.png | Bin 0 -> 160 bytes sprites/kenny/Tiles/tile_0104.png | Bin 0 -> 157 bytes sprites/kenny/Tiles/tile_0105.png | Bin 0 -> 170 bytes sprites/kenny/Tiles/tile_0106.png | Bin 0 -> 147 bytes sprites/kenny/Tiles/tile_0107.png | Bin 0 -> 156 bytes sprites/kenny/Tiles/tile_0108.png | Bin 0 -> 176 bytes sprites/kenny/Tiles/tile_0109.png | Bin 0 -> 137 bytes sprites/kenny/Tiles/tile_0110.png | Bin 0 -> 132 bytes sprites/kenny/Tiles/tile_0111.png | Bin 0 -> 151 bytes sprites/kenny/Tiles/tile_0112.png | Bin 0 -> 151 bytes sprites/kenny/Tiles/tile_0113.png | Bin 0 -> 159 bytes sprites/kenny/Tiles/tile_0114.png | Bin 0 -> 176 bytes sprites/kenny/Tiles/tile_0115.png | Bin 0 -> 137 bytes sprites/kenny/Tiles/tile_0116.png | Bin 0 -> 134 bytes sprites/kenny/Tiles/tile_0117.png | Bin 0 -> 151 bytes sprites/kenny/Tiles/tile_0118.png | Bin 0 -> 135 bytes sprites/kenny/Tiles/tile_0119.png | Bin 0 -> 146 bytes sprites/kenny/Tilesheet (Ships).txt | 9 + sprites/kenny/Tilesheet (Tiles).txt | 9 + sprites/kenny/Visit Kenney.url | 2 + sprites/kenny/Visit Patreon.url | 2 + sprites/kenny/kenney_pixelshmup.zip | Bin 0 -> 127424 bytes sprites/misc/dragon-0.png | Bin 0 -> 12896 bytes sprites/misc/dragon-1.png | Bin 0 -> 2964 bytes sprites/misc/dragon-2.png | Bin 0 -> 3047 bytes sprites/misc/dragon-3.png | Bin 0 -> 2655 bytes sprites/misc/dragon-4.png | Bin 0 -> 2725 bytes sprites/misc/dragon-5.png | Bin 0 -> 2655 bytes sprites/misc/explosion-0.png | Bin 0 -> 267 bytes sprites/misc/explosion-1.png | Bin 0 -> 4585 bytes sprites/misc/explosion-2.png | Bin 0 -> 4675 bytes sprites/misc/explosion-3.png | Bin 0 -> 4724 bytes sprites/misc/explosion-4.png | Bin 0 -> 4773 bytes sprites/misc/explosion-5.png | Bin 0 -> 4742 bytes sprites/misc/explosion-6.png | Bin 0 -> 4665 bytes sprites/misc/explosion-sheet.png | Bin 0 -> 2584 bytes sprites/misc/lowrez-ship-blue.png | Bin 0 -> 109 bytes sprites/misc/lowrez-ship-red.png | Bin 0 -> 104 bytes sprites/misc/simple-mood-16x16.png | Bin 0 -> 14424 bytes sprites/misc/star.png | Bin 0 -> 711 bytes sprites/misc/tiny-star.png | Bin 0 -> 112 bytes sprites/square/black.png | Bin 0 -> 326 bytes sprites/square/blue.png | Bin 0 -> 329 bytes sprites/square/gray.png | Bin 0 -> 325 bytes sprites/square/green.png | Bin 0 -> 329 bytes sprites/square/indigo.png | Bin 0 -> 335 bytes sprites/square/orange.png | Bin 0 -> 335 bytes sprites/square/red.png | Bin 0 -> 335 bytes sprites/square/violet.png | Bin 0 -> 334 bytes sprites/square/white.png | Bin 0 -> 325 bytes sprites/square/yellow.png | Bin 0 -> 319 bytes sprites/tile/wall-0000.png | Bin 0 -> 93 bytes sprites/tile/wall-0001.png | Bin 0 -> 99 bytes sprites/tile/wall-0010.png | Bin 0 -> 98 bytes sprites/tile/wall-0011.png | Bin 0 -> 101 bytes sprites/tile/wall-0100.png | Bin 0 -> 98 bytes sprites/tile/wall-0101.png | Bin 0 -> 100 bytes sprites/tile/wall-0110.png | Bin 0 -> 100 bytes sprites/tile/wall-0111.png | Bin 0 -> 102 bytes sprites/tile/wall-1000.png | Bin 0 -> 99 bytes sprites/tile/wall-1001.png | Bin 0 -> 101 bytes sprites/tile/wall-1010.png | Bin 0 -> 100 bytes sprites/tile/wall-1011.png | Bin 0 -> 101 bytes sprites/tile/wall-1100.png | Bin 0 -> 101 bytes sprites/tile/wall-1101.png | Bin 0 -> 102 bytes sprites/tile/wall-1110.png | Bin 0 -> 101 bytes sprites/tile/wall-1111.png | Bin 0 -> 102 bytes 243 files changed, 902 insertions(+) create mode 100644 app/components/sprite.rb create mode 100644 app/felflame.rb create mode 100644 app/main.rb create mode 100644 app/scenes/scenes.rb create mode 100644 app/systems/render.rb create mode 100644 app/tick.rb create mode 100644 data/.gitkeep create mode 100644 fonts/.gitkeep create mode 100644 metadata/game_metadata.txt create mode 100644 metadata/icon.png create mode 100644 metadata/ios_metadata.txt create mode 100644 sounds/.gitkeep create mode 100644 sprites/circle/black.png create mode 100644 sprites/circle/blue.png create mode 100644 sprites/circle/gray.png create mode 100644 sprites/circle/green.png create mode 100644 sprites/circle/indigo.png create mode 100644 sprites/circle/orange.png create mode 100644 sprites/circle/red.png create mode 100644 sprites/circle/violet.png create mode 100644 sprites/circle/white.png create mode 100644 sprites/circle/yellow.png create mode 100644 sprites/hexagon/black.png create mode 100644 sprites/hexagon/blue.png create mode 100644 sprites/hexagon/gray.png create mode 100644 sprites/hexagon/green.png create mode 100644 sprites/hexagon/indigo.png create mode 100644 sprites/hexagon/orange.png create mode 100644 sprites/hexagon/red.png create mode 100644 sprites/hexagon/violet.png create mode 100644 sprites/hexagon/white.png create mode 100644 sprites/hexagon/yellow.png create mode 100644 sprites/isometric/black.png create mode 100644 sprites/isometric/blue.png create mode 100644 sprites/isometric/gray.png create mode 100644 sprites/isometric/green.png create mode 100644 sprites/isometric/indigo.png create mode 100644 sprites/isometric/orange.png create mode 100644 sprites/isometric/red.png create mode 100644 sprites/isometric/violet.png create mode 100644 sprites/isometric/white.png create mode 100644 sprites/isometric/yellow.png create mode 100644 sprites/kenny/License.txt create mode 100644 sprites/kenny/Preview.png create mode 100644 sprites/kenny/Sample.png create mode 100644 sprites/kenny/Ships/ship_0000.png create mode 100644 sprites/kenny/Ships/ship_0001.png create mode 100644 sprites/kenny/Ships/ship_0002.png create mode 100644 sprites/kenny/Ships/ship_0003.png create mode 100644 sprites/kenny/Ships/ship_0004.png create mode 100644 sprites/kenny/Ships/ship_0005.png create mode 100644 sprites/kenny/Ships/ship_0006.png create mode 100644 sprites/kenny/Ships/ship_0007.png create mode 100644 sprites/kenny/Ships/ship_0008.png create mode 100644 sprites/kenny/Ships/ship_0009.png create mode 100644 sprites/kenny/Ships/ship_0010.png create mode 100644 sprites/kenny/Ships/ship_0011.png create mode 100644 sprites/kenny/Ships/ship_0012.png create mode 100644 sprites/kenny/Ships/ship_0013.png create mode 100644 sprites/kenny/Ships/ship_0014.png create mode 100644 sprites/kenny/Ships/ship_0015.png create mode 100644 sprites/kenny/Ships/ship_0016.png create mode 100644 sprites/kenny/Ships/ship_0017.png create mode 100644 sprites/kenny/Ships/ship_0018.png create mode 100644 sprites/kenny/Ships/ship_0019.png create mode 100644 sprites/kenny/Ships/ship_0020.png create mode 100644 sprites/kenny/Ships/ship_0021.png create mode 100644 sprites/kenny/Ships/ship_0022.png create mode 100644 sprites/kenny/Ships/ship_0023.png create mode 100644 sprites/kenny/Tilemap/ships.png create mode 100644 sprites/kenny/Tilemap/ships_packed.png create mode 100644 sprites/kenny/Tilemap/tiles.png create mode 100644 sprites/kenny/Tilemap/tiles_packed.png create mode 100644 sprites/kenny/Tiles/tile_0000.png create mode 100644 sprites/kenny/Tiles/tile_0001.png create mode 100644 sprites/kenny/Tiles/tile_0002.png create mode 100644 sprites/kenny/Tiles/tile_0003.png create mode 100644 sprites/kenny/Tiles/tile_0004.png create mode 100644 sprites/kenny/Tiles/tile_0005.png create mode 100644 sprites/kenny/Tiles/tile_0006.png create mode 100644 sprites/kenny/Tiles/tile_0007.png create mode 100644 sprites/kenny/Tiles/tile_0008.png create mode 100644 sprites/kenny/Tiles/tile_0009.png create mode 100644 sprites/kenny/Tiles/tile_0010.png create mode 100644 sprites/kenny/Tiles/tile_0011.png create mode 100644 sprites/kenny/Tiles/tile_0012.png create mode 100644 sprites/kenny/Tiles/tile_0013.png create mode 100644 sprites/kenny/Tiles/tile_0014.png create mode 100644 sprites/kenny/Tiles/tile_0015.png create mode 100644 sprites/kenny/Tiles/tile_0016.png create mode 100644 sprites/kenny/Tiles/tile_0017.png create mode 100644 sprites/kenny/Tiles/tile_0018.png create mode 100644 sprites/kenny/Tiles/tile_0019.png create mode 100644 sprites/kenny/Tiles/tile_0020.png create mode 100644 sprites/kenny/Tiles/tile_0021.png create mode 100644 sprites/kenny/Tiles/tile_0022.png create mode 100644 sprites/kenny/Tiles/tile_0023.png create mode 100644 sprites/kenny/Tiles/tile_0024.png create mode 100644 sprites/kenny/Tiles/tile_0025.png create mode 100644 sprites/kenny/Tiles/tile_0026.png create mode 100644 sprites/kenny/Tiles/tile_0027.png create mode 100644 sprites/kenny/Tiles/tile_0028.png create mode 100644 sprites/kenny/Tiles/tile_0029.png create mode 100644 sprites/kenny/Tiles/tile_0030.png create mode 100644 sprites/kenny/Tiles/tile_0031.png create mode 100644 sprites/kenny/Tiles/tile_0032.png create mode 100644 sprites/kenny/Tiles/tile_0033.png create mode 100644 sprites/kenny/Tiles/tile_0034.png create mode 100644 sprites/kenny/Tiles/tile_0035.png create mode 100644 sprites/kenny/Tiles/tile_0036.png create mode 100644 sprites/kenny/Tiles/tile_0037.png create mode 100644 sprites/kenny/Tiles/tile_0038.png create mode 100644 sprites/kenny/Tiles/tile_0039.png create mode 100644 sprites/kenny/Tiles/tile_0040.png create mode 100644 sprites/kenny/Tiles/tile_0041.png create mode 100644 sprites/kenny/Tiles/tile_0042.png create mode 100644 sprites/kenny/Tiles/tile_0043.png create mode 100644 sprites/kenny/Tiles/tile_0044.png create mode 100644 sprites/kenny/Tiles/tile_0045.png create mode 100644 sprites/kenny/Tiles/tile_0046.png create mode 100644 sprites/kenny/Tiles/tile_0047.png create mode 100644 sprites/kenny/Tiles/tile_0048.png create mode 100644 sprites/kenny/Tiles/tile_0049.png create mode 100644 sprites/kenny/Tiles/tile_0050.png create mode 100644 sprites/kenny/Tiles/tile_0051.png create mode 100644 sprites/kenny/Tiles/tile_0052.png create mode 100644 sprites/kenny/Tiles/tile_0053.png create mode 100644 sprites/kenny/Tiles/tile_0054.png create mode 100644 sprites/kenny/Tiles/tile_0055.png create mode 100644 sprites/kenny/Tiles/tile_0056.png create mode 100644 sprites/kenny/Tiles/tile_0057.png create mode 100644 sprites/kenny/Tiles/tile_0058.png create mode 100644 sprites/kenny/Tiles/tile_0059.png create mode 100644 sprites/kenny/Tiles/tile_0060.png create mode 100644 sprites/kenny/Tiles/tile_0061.png create mode 100644 sprites/kenny/Tiles/tile_0062.png create mode 100644 sprites/kenny/Tiles/tile_0063.png create mode 100644 sprites/kenny/Tiles/tile_0064.png create mode 100644 sprites/kenny/Tiles/tile_0065.png create mode 100644 sprites/kenny/Tiles/tile_0066.png create mode 100644 sprites/kenny/Tiles/tile_0067.png create mode 100644 sprites/kenny/Tiles/tile_0068.png create mode 100644 sprites/kenny/Tiles/tile_0069.png create mode 100644 sprites/kenny/Tiles/tile_0070.png create mode 100644 sprites/kenny/Tiles/tile_0071.png create mode 100644 sprites/kenny/Tiles/tile_0072.png create mode 100644 sprites/kenny/Tiles/tile_0073.png create mode 100644 sprites/kenny/Tiles/tile_0074.png create mode 100644 sprites/kenny/Tiles/tile_0075.png create mode 100644 sprites/kenny/Tiles/tile_0076.png create mode 100644 sprites/kenny/Tiles/tile_0077.png create mode 100644 sprites/kenny/Tiles/tile_0078.png create mode 100644 sprites/kenny/Tiles/tile_0079.png create mode 100644 sprites/kenny/Tiles/tile_0080.png create mode 100644 sprites/kenny/Tiles/tile_0081.png create mode 100644 sprites/kenny/Tiles/tile_0082.png create mode 100644 sprites/kenny/Tiles/tile_0083.png create mode 100644 sprites/kenny/Tiles/tile_0084.png create mode 100644 sprites/kenny/Tiles/tile_0085.png create mode 100644 sprites/kenny/Tiles/tile_0086.png create mode 100644 sprites/kenny/Tiles/tile_0087.png create mode 100644 sprites/kenny/Tiles/tile_0088.png create mode 100644 sprites/kenny/Tiles/tile_0089.png create mode 100644 sprites/kenny/Tiles/tile_0090.png create mode 100644 sprites/kenny/Tiles/tile_0091.png create mode 100644 sprites/kenny/Tiles/tile_0092.png create mode 100644 sprites/kenny/Tiles/tile_0093.png create mode 100644 sprites/kenny/Tiles/tile_0094.png create mode 100644 sprites/kenny/Tiles/tile_0095.png create mode 100644 sprites/kenny/Tiles/tile_0096.png create mode 100644 sprites/kenny/Tiles/tile_0097.png create mode 100644 sprites/kenny/Tiles/tile_0098.png create mode 100644 sprites/kenny/Tiles/tile_0099.png create mode 100644 sprites/kenny/Tiles/tile_0100.png create mode 100644 sprites/kenny/Tiles/tile_0101.png create mode 100644 sprites/kenny/Tiles/tile_0102.png create mode 100644 sprites/kenny/Tiles/tile_0103.png create mode 100644 sprites/kenny/Tiles/tile_0104.png create mode 100644 sprites/kenny/Tiles/tile_0105.png create mode 100644 sprites/kenny/Tiles/tile_0106.png create mode 100644 sprites/kenny/Tiles/tile_0107.png create mode 100644 sprites/kenny/Tiles/tile_0108.png create mode 100644 sprites/kenny/Tiles/tile_0109.png create mode 100644 sprites/kenny/Tiles/tile_0110.png create mode 100644 sprites/kenny/Tiles/tile_0111.png create mode 100644 sprites/kenny/Tiles/tile_0112.png create mode 100644 sprites/kenny/Tiles/tile_0113.png create mode 100644 sprites/kenny/Tiles/tile_0114.png create mode 100644 sprites/kenny/Tiles/tile_0115.png create mode 100644 sprites/kenny/Tiles/tile_0116.png create mode 100644 sprites/kenny/Tiles/tile_0117.png create mode 100644 sprites/kenny/Tiles/tile_0118.png create mode 100644 sprites/kenny/Tiles/tile_0119.png create mode 100644 sprites/kenny/Tilesheet (Ships).txt create mode 100644 sprites/kenny/Tilesheet (Tiles).txt create mode 100644 sprites/kenny/Visit Kenney.url create mode 100644 sprites/kenny/Visit Patreon.url create mode 100644 sprites/kenny/kenney_pixelshmup.zip create mode 100644 sprites/misc/dragon-0.png create mode 100644 sprites/misc/dragon-1.png create mode 100644 sprites/misc/dragon-2.png create mode 100644 sprites/misc/dragon-3.png create mode 100644 sprites/misc/dragon-4.png create mode 100644 sprites/misc/dragon-5.png create mode 100644 sprites/misc/explosion-0.png create mode 100644 sprites/misc/explosion-1.png create mode 100644 sprites/misc/explosion-2.png create mode 100644 sprites/misc/explosion-3.png create mode 100644 sprites/misc/explosion-4.png create mode 100644 sprites/misc/explosion-5.png create mode 100644 sprites/misc/explosion-6.png create mode 100644 sprites/misc/explosion-sheet.png create mode 100644 sprites/misc/lowrez-ship-blue.png create mode 100644 sprites/misc/lowrez-ship-red.png create mode 100644 sprites/misc/simple-mood-16x16.png create mode 100644 sprites/misc/star.png create mode 100644 sprites/misc/tiny-star.png create mode 100644 sprites/square/black.png create mode 100644 sprites/square/blue.png create mode 100644 sprites/square/gray.png create mode 100644 sprites/square/green.png create mode 100644 sprites/square/indigo.png create mode 100644 sprites/square/orange.png create mode 100644 sprites/square/red.png create mode 100644 sprites/square/violet.png create mode 100644 sprites/square/white.png create mode 100644 sprites/square/yellow.png create mode 100644 sprites/tile/wall-0000.png create mode 100644 sprites/tile/wall-0001.png create mode 100644 sprites/tile/wall-0010.png create mode 100644 sprites/tile/wall-0011.png create mode 100644 sprites/tile/wall-0100.png create mode 100644 sprites/tile/wall-0101.png create mode 100644 sprites/tile/wall-0110.png create mode 100644 sprites/tile/wall-0111.png create mode 100644 sprites/tile/wall-1000.png create mode 100644 sprites/tile/wall-1001.png create mode 100644 sprites/tile/wall-1010.png create mode 100644 sprites/tile/wall-1011.png create mode 100644 sprites/tile/wall-1100.png create mode 100644 sprites/tile/wall-1101.png create mode 100644 sprites/tile/wall-1110.png create mode 100644 sprites/tile/wall-1111.png diff --git a/app/components/sprite.rb b/app/components/sprite.rb new file mode 100644 index 0000000..3af016d --- /dev/null +++ b/app/components/sprite.rb @@ -0,0 +1,21 @@ +FF::Cmp.new("Sprite", props: { + x: 640 - 50, + y: 360 - 50, + w: 100, + h: 100, + path: 'sprites/hexagon/red.png', + angle: 0, + a: 255, + r: 255, + g: 255, + b: 255, + source_x: 0, + source_y: 0, + source_w: -1, + source_h: -1, + flip_vertically: false, + flip_horizontally: false, + angle_anchor_x: 0.5, + angle_anchor_y: 1.0, + blendmode_enum: 1 +}) diff --git a/app/felflame.rb b/app/felflame.rb new file mode 100644 index 0000000..d7a3d07 --- /dev/null +++ b/app/felflame.rb @@ -0,0 +1,784 @@ +class FelFlame + class Entities + # Holds the unique ID of this entity + # @return [Integer] + attr_reader :id + + # A seperate attr_writer was made for documentation readability reasons. + # Yard will list attr_reader is readonly which is my intention. + # This value needs to be changable as it is set by other functions. + # @!visibility private + attr_writer :id + + # Creating a new Entity + # @param components [Components] Can be any number of components, identical duplicates will be automatically purged however different components from the same component manager are allowed. + # @return [Entity] + def initialize(*components) + # Assign new unique ID + new_id = self.class.data.find_index(&:nil?) + new_id = self.class.data.size if new_id.nil? + self.id = new_id + + # Add each component + add(*components) + + self.class.data[id] = self + end + + # A hash that uses component manager constant names as keys, and where the values of those keys are arrays that contain the {FelFlame::ComponentManager#id IDs} of the components attached to this entity. + # @return [Hash>] + def components + @components ||= {} + end + + # An alias for the {#id ID reader} + # @return [Integer] + def to_i + id + end + + # Removes this Entity from the list and purges all references to this Entity from other Components, as well as its {id ID} and data. + # @return [Boolean] +true+ + def delete + components.each do |component_manager, component_array| + component_array.each do |component| + component.entities.delete(self) + end + end + FelFlame::Entities.data[id] = nil + @components = {} + @id = nil + true + end + + # Add any number components to the Entity. + # @param components_to_add [Component] Any number of components created from any component manager + # @return [Boolean] +true+ + def add(*components_to_add) + components_to_add.each do |component| + if components[component.class].nil? + components[component.class] = [component] + component.entities.push self + check_systems component, :addition_triggers + elsif !components[component.class].include? component + components[component.class].push component + component.entities.push self + check_systems component, :addition_triggers + end + end + true + end + + # triggers every system associated with this component's trigger + # @return [Boolean] +true+ + # @!visibility private + def check_systems(component, trigger_type) + component_calls = component.class.send(trigger_type) + component.send(trigger_type).each do |system| + component_calls |= [system] + end + component_calls.sort_by(&:priority).reverse.each(&:call) + true + end + + # Remove a component from the Entity + # @param components_to_remove [Component] A component created from any component manager + # @return [Boolean] +true+ + def remove(*components_to_remove) + components_to_remove.each do |component| + check_systems component, :removal_triggers if component.entities.include? self + component.entities.delete self + components[component.class].delete component + end + true + end + + # Export all data into a JSON String which can then be saved into a file + # TODO: This function is not yet complete + # @return [String] A JSON formatted String + #def to_json() end + + class <] Array of all Entities that exist + # @!visibility private + def data + @data ||= [] + end + + # Gets an Entity from the given {id unique ID}. Usage is simular to how an Array lookup works + # + # @example + # # This gets the Entity with ID 7 + # FelFlame::Entities[7] + # @param entity_id [Integer] + # @return [Entity] returns the Entity that uses the given unique ID, nil if there is no Entity associated with the given ID + def [](entity_id) + data[entity_id] + end + + # Iterates over all entities. The data is compacted so that means index does not correlate to ID. + # You also call other enumerable methods instead of each, such as +each_with_index+ or +select+ + # @return [Enumerator] + def each(&block) + data.compact.each(&block) + end + + # Creates a new entity using the data from a JSON string + # TODO: This function is not yet complete + # @param json_string [String] A string that was exported originally using the {FelFlame::Entities#to_json to_json} function + # @param opts [Keywords] What values(its {FelFlame::Entities#id ID} or the {FelFlame::ComponentManager#id component IDs}) should be overwritten TODO: this might change + #def from_json(json_string, **opts) end + end + end +end +class FelFlame + class Components + @component_map = [] + class <] + def addition_triggers + @addition_triggers ||= [] + end + + # Stores references to systems that should be triggered when a + # component from this manager is removed. + # Do not edit this array as it is managed by FelFlame automatically. + # @return [Array] + def removal_triggers + @removal_triggers ||= [] + end + + # Stores references to systems that should be triggered when an + # attribute from this manager is changed. + # Do not edit this hash as it is managed by FelFlame automatically. + # @return [Hash>] + def attr_triggers + @attr_triggers ||= {} + end + + # Creates a new component and sets the values of the attributes given to it. If an attritbute is not passed then it will remain as the default. + # @param attrs [Keyword: Value] You can pass any number of Keyword-Value pairs + # @return [Component] + def initialize(**attrs) + # Prepare the object + # (this is a function created with metaprogramming + # in FelFlame::Components + set_defaults + + # Generate ID + new_id = self.class.data.find_index { |i| i.nil? } + new_id = self.class.data.size if new_id.nil? + @id = new_id + + # Fill params + attrs.each do |key, value| + send "#{key}=", value + end + + # Save Component + self.class.data[new_id] = self + end + + class <] + def addition_triggers + @addition_triggers ||= [] + end + + # Stores references to systems that should be triggered when this + # component is removed from an enitity. + # Do not edit this array as it is managed by FelFlame automatically. + # @return [Array] + def removal_triggers + @removal_triggers ||= [] + end + + # Stores references to systems that should be triggered when an + # attribute from this component changed. + # Do not edit this hash as it is managed by FelFlame automatically. + # @return [Hash] + def attr_triggers + @attr_triggers ||= {} + end + + # @return [Array] Array of all Components that belong to a given component manager + # @!visibility private + def data + @data ||= [] + end + + # Gets a Component from the given {id unique ID}. Usage is simular to how an Array lookup works. + # + # @example + # # this gets the 'Health' Component with ID 7 + # FelFlame::Components::Health[7] + # @param component_id [Integer] + # @return [Component] Returns the Component that uses the given unique {id ID}, nil if there is no Component associated with the given {id ID} + def [](component_id) + data[component_id] + end + + # Iterates over all components within the component manager. + # Special Enumerable methods like +map+ or +each_with_index+ are not implemented + # @return [Enumerator] + def each(&block) + data.compact.each(&block) + end + end + + # An alias for the {id ID Reader} + # @return [Integer] + def to_i + id + end + + # A list of entity ids that are linked to the component + # @return [Array] + def entities + @entities ||= [] + end + + # Update attribute values using a hash or keywords. + # @return [Hash] Hash of updated attributes + def update_attrs(**opts) + opts.each do |key, value| + send "#{key}=", value + end + end + + # Execute systems that have been added to execute on variable change + # @return [Boolean] +true+ + def attr_changed_trigger_systems(attr) + systems_to_execute = self.class.attr_triggers[attr] + systems_to_execute = [] if systems_to_execute.nil? + + systems_to_execute |= attr_triggers[attr] unless attr_triggers[attr].nil? + + systems_to_execute.sort_by(&:priority).reverse.each(&:call) + true + end + + # Removes this component from the list and purges all references to this Component from other Entities, as well as its {id ID} and data. + # @return [Boolean] +true+. + def delete + addition_triggers.each do |system| + system.clear_triggers component_or_manager: self + end + # This needs to be cloned because indices get deleted as + # the remove command is called, breaking the loop if it + # wasn't referencing a clone(will get Nil errors) + iter = entities.map(&:clone) + iter.each do |entity| + #FelFlame::Entities[entity_id].remove self #unless FelFlame::Entities[entity_id].nil? + entity.remove self + end + self.class.data[id] = nil + instance_variables.each do |var| + instance_variable_set(var, nil) + end + true + end + + # @return [Hash] A hash, where all the keys are attributes linked to their respective values. + def attrs + return_hash = instance_variables.each_with_object({}) do |key, final| + final[key.to_s.delete_prefix('@').to_sym] = instance_variable_get(key) + end + return_hash.delete(:attr_triggers) + return_hash + end + + # Export all data into a JSON String, which could then later be loaded or saved to a file + # TODO: This function is not yet complete + # @return [String] a JSON formatted String + #def to_json + # # should return a json or hash of all data in this component + #end + end +end +class FelFlame + class Systems + # How early this System should be executed in a list of Systems + attr_accessor :priority + + # The Constant name assigned to this System + attr_reader :const_name + + # Allows overwriting the storage of triggers, such as for clearing. + # This method should generally only need to be used internally and + # not by a game developer. + # @!visibility private + attr_writer :addition_triggers, :removal_triggers, :attr_triggers + + def priority=(priority) + @priority = priority + FelFlame::Stage.systems = FelFlame::Stage.systems.sort_by(&:priority) + end + # Stores references to components or their managers that trigger + # this component when a component or component from that manager + # is added to an entity. + # Do not edit this hash as it is managed by FelFlame automatically. + # @return [Array] + def addition_triggers + @addition_triggers ||= [] + end + + # Stores references to components or their managers that trigger + # this component when a component or component from that manager + # is removed from an entity. + # Do not edit this hash as it is managed by FelFlame automatically. + # @return [Array] + def removal_triggers + @removal_triggers ||= [] + end + + + # Stores references to systems that should be triggered when an + # attribute from this manager is changed + # Do not edit this hash as it is managed by FelFlame automatically. + # @return [Hash>] + def attr_triggers + @attr_triggers ||= {} + end + + class <