commit a7d5aa90e15d27cf6b365d814e35b304b9a89b53 Author: Linus Probert Date: Thu Nov 30 21:00:47 2017 +0100 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7f03d36 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/build/ +/tags diff --git a/.vimrc b/.vimrc new file mode 100644 index 0000000..d4273f4 --- /dev/null +++ b/.vimrc @@ -0,0 +1,3 @@ +nnoremap :Make -C build --no-print-directory -l +set makeprg=make\ -C\ build\ --no-print-directory\ -l +let g:syntastic_c_include_dirs = [ 'linkedlist' ] diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..a84a962 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,35 @@ +cmake_minimum_required (VERSION 3.2.0) + +SET(CMAKE_COLOR_MAKEFILE ON) + +project(breakhack C) + +add_subdirectory(linkedlist) +include_directories(linkedlist) +add_definitions("-Wall") + +# PROGRAMS: +add_executable(rpgfight + src/main + src/texture + src/screenresolution + src/sprite + src/util + src/player + ) + +target_link_libraries(rpgfight + linkedlist + -lSDL2 + -lSDL2_image + -lSDL2_mixer + -lSDL2_ttf + -lX11 + ) + +# TESTS: +enable_testing() + +add_executable(test_util test/check_util src/util) +target_link_libraries(test_util -lcheck) +add_test(test_util test_util) diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..bce361a --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) [year] [fullname] + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/README.md b/README.md new file mode 100644 index 0000000..384ec75 --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +Something in the ways of NETHACK +================================ + +A simple nethack similar game written in C using SDL2. + +Idea +---- +Randomly generated maps/rooms. Leveling system, permadeath, +multiple classes. Casual and fun for 10-15 minutes during a break +from regular work/play. + +I wanted to practice C and I'm comfortable using SDL2. The assets +are graciously taken from the web. More info in the README in the +assets folder. diff --git a/assets/Characters/Aquatic0.png b/assets/Characters/Aquatic0.png new file mode 100644 index 0000000..e8944fa Binary files /dev/null and b/assets/Characters/Aquatic0.png differ diff --git a/assets/Characters/Aquatic1.png b/assets/Characters/Aquatic1.png new file mode 100644 index 0000000..7312b52 Binary files /dev/null and b/assets/Characters/Aquatic1.png differ diff --git a/assets/Characters/Avian0.png b/assets/Characters/Avian0.png new file mode 100644 index 0000000..94641d0 Binary files /dev/null and b/assets/Characters/Avian0.png differ diff --git a/assets/Characters/Avian1.png b/assets/Characters/Avian1.png new file mode 100644 index 0000000..6540de7 Binary files /dev/null and b/assets/Characters/Avian1.png differ diff --git a/assets/Characters/Cat0.png b/assets/Characters/Cat0.png new file mode 100644 index 0000000..06242e6 Binary files /dev/null and b/assets/Characters/Cat0.png differ diff --git a/assets/Characters/Cat1.png b/assets/Characters/Cat1.png new file mode 100644 index 0000000..5b96495 Binary files /dev/null and b/assets/Characters/Cat1.png differ diff --git a/assets/Characters/Demon0.png b/assets/Characters/Demon0.png new file mode 100644 index 0000000..64b69e0 Binary files /dev/null and b/assets/Characters/Demon0.png differ diff --git a/assets/Characters/Demon1.png b/assets/Characters/Demon1.png new file mode 100644 index 0000000..7eae63d Binary files /dev/null and b/assets/Characters/Demon1.png differ diff --git a/assets/Characters/Dog0.png b/assets/Characters/Dog0.png new file mode 100644 index 0000000..c3da789 Binary files /dev/null and b/assets/Characters/Dog0.png differ diff --git a/assets/Characters/Dog1.png b/assets/Characters/Dog1.png new file mode 100644 index 0000000..a89b49f Binary files /dev/null and b/assets/Characters/Dog1.png differ diff --git a/assets/Characters/Elemental0.png b/assets/Characters/Elemental0.png new file mode 100644 index 0000000..eca03be Binary files /dev/null and b/assets/Characters/Elemental0.png differ diff --git a/assets/Characters/Elemental1.png b/assets/Characters/Elemental1.png new file mode 100644 index 0000000..00b1682 Binary files /dev/null and b/assets/Characters/Elemental1.png differ diff --git a/assets/Characters/Humanoid0.png b/assets/Characters/Humanoid0.png new file mode 100644 index 0000000..09eaeee Binary files /dev/null and b/assets/Characters/Humanoid0.png differ diff --git a/assets/Characters/Humanoid1.png b/assets/Characters/Humanoid1.png new file mode 100644 index 0000000..6d86b4e Binary files /dev/null and b/assets/Characters/Humanoid1.png differ diff --git a/assets/Characters/Misc0.png b/assets/Characters/Misc0.png new file mode 100644 index 0000000..c522530 Binary files /dev/null and b/assets/Characters/Misc0.png differ diff --git a/assets/Characters/Misc1.png b/assets/Characters/Misc1.png new file mode 100644 index 0000000..775bf32 Binary files /dev/null and b/assets/Characters/Misc1.png differ diff --git a/assets/Characters/Pest0.png b/assets/Characters/Pest0.png new file mode 100644 index 0000000..d66332c Binary files /dev/null and b/assets/Characters/Pest0.png differ diff --git a/assets/Characters/Pest1.png b/assets/Characters/Pest1.png new file mode 100644 index 0000000..e87c11b Binary files /dev/null and b/assets/Characters/Pest1.png differ diff --git a/assets/Characters/Plant0.png b/assets/Characters/Plant0.png new file mode 100644 index 0000000..bae88a4 Binary files /dev/null and b/assets/Characters/Plant0.png differ diff --git a/assets/Characters/Plant1.png b/assets/Characters/Plant1.png new file mode 100644 index 0000000..3db48bb Binary files /dev/null and b/assets/Characters/Plant1.png differ diff --git a/assets/Characters/Player0.png b/assets/Characters/Player0.png new file mode 100644 index 0000000..6e53b28 Binary files /dev/null and b/assets/Characters/Player0.png differ diff --git a/assets/Characters/Player1.png b/assets/Characters/Player1.png new file mode 100644 index 0000000..393d17e Binary files /dev/null and b/assets/Characters/Player1.png differ diff --git a/assets/Characters/Quadraped0.png b/assets/Characters/Quadraped0.png new file mode 100644 index 0000000..e5c4aa2 Binary files /dev/null and b/assets/Characters/Quadraped0.png differ diff --git a/assets/Characters/Quadraped1.png b/assets/Characters/Quadraped1.png new file mode 100644 index 0000000..50f7227 Binary files /dev/null and b/assets/Characters/Quadraped1.png differ diff --git a/assets/Characters/Reptile0.png b/assets/Characters/Reptile0.png new file mode 100644 index 0000000..ef33012 Binary files /dev/null and b/assets/Characters/Reptile0.png differ diff --git a/assets/Characters/Reptile1.png b/assets/Characters/Reptile1.png new file mode 100644 index 0000000..764afbe Binary files /dev/null and b/assets/Characters/Reptile1.png differ diff --git a/assets/Characters/Rodent0.png b/assets/Characters/Rodent0.png new file mode 100644 index 0000000..38d3fe0 Binary files /dev/null and b/assets/Characters/Rodent0.png differ diff --git a/assets/Characters/Rodent1.png b/assets/Characters/Rodent1.png new file mode 100644 index 0000000..e3a074e Binary files /dev/null and b/assets/Characters/Rodent1.png differ diff --git a/assets/Characters/Slime0.png b/assets/Characters/Slime0.png new file mode 100644 index 0000000..65a737f Binary files /dev/null and b/assets/Characters/Slime0.png differ diff --git a/assets/Characters/Slime1.png b/assets/Characters/Slime1.png new file mode 100644 index 0000000..8bcfb3f Binary files /dev/null and b/assets/Characters/Slime1.png differ diff --git a/assets/Characters/Undead0.png b/assets/Characters/Undead0.png new file mode 100644 index 0000000..3329fc5 Binary files /dev/null and b/assets/Characters/Undead0.png differ diff --git a/assets/Characters/Undead1.png b/assets/Characters/Undead1.png new file mode 100644 index 0000000..ba6bfdb Binary files /dev/null and b/assets/Characters/Undead1.png differ diff --git a/assets/Commissions/Engineer Clothes.png b/assets/Commissions/Engineer Clothes.png new file mode 100644 index 0000000..8fe46c5 Binary files /dev/null and b/assets/Commissions/Engineer Clothes.png differ diff --git a/assets/Commissions/Engineer.ase b/assets/Commissions/Engineer.ase new file mode 100644 index 0000000..faf0beb Binary files /dev/null and b/assets/Commissions/Engineer.ase differ diff --git a/assets/Commissions/Engineer.png b/assets/Commissions/Engineer.png new file mode 100644 index 0000000..e5ebc5f Binary files /dev/null and b/assets/Commissions/Engineer.png differ diff --git a/assets/Commissions/Icons.png b/assets/Commissions/Icons.png new file mode 100644 index 0000000..9dd72ca Binary files /dev/null and b/assets/Commissions/Icons.png differ diff --git a/assets/Commissions/Mage Clothes.png b/assets/Commissions/Mage Clothes.png new file mode 100644 index 0000000..2394651 Binary files /dev/null and b/assets/Commissions/Mage Clothes.png differ diff --git a/assets/Commissions/Mage.ase b/assets/Commissions/Mage.ase new file mode 100644 index 0000000..531bcbf Binary files /dev/null and b/assets/Commissions/Mage.ase differ diff --git a/assets/Commissions/Mage.png b/assets/Commissions/Mage.png new file mode 100644 index 0000000..ea461b2 Binary files /dev/null and b/assets/Commissions/Mage.png differ diff --git a/assets/Commissions/Paladin Clothes.png b/assets/Commissions/Paladin Clothes.png new file mode 100644 index 0000000..c96c918 Binary files /dev/null and b/assets/Commissions/Paladin Clothes.png differ diff --git a/assets/Commissions/Paladin.ase b/assets/Commissions/Paladin.ase new file mode 100644 index 0000000..142eb12 Binary files /dev/null and b/assets/Commissions/Paladin.ase differ diff --git a/assets/Commissions/Paladin.png b/assets/Commissions/Paladin.png new file mode 100644 index 0000000..260f1ff Binary files /dev/null and b/assets/Commissions/Paladin.png differ diff --git a/assets/Commissions/Rogue Clothes.png b/assets/Commissions/Rogue Clothes.png new file mode 100644 index 0000000..1d8d186 Binary files /dev/null and b/assets/Commissions/Rogue Clothes.png differ diff --git a/assets/Commissions/Rogue.ase b/assets/Commissions/Rogue.ase new file mode 100644 index 0000000..d26e834 Binary files /dev/null and b/assets/Commissions/Rogue.ase differ diff --git a/assets/Commissions/Rogue.png b/assets/Commissions/Rogue.png new file mode 100644 index 0000000..ca243c0 Binary files /dev/null and b/assets/Commissions/Rogue.png differ diff --git a/assets/Commissions/Template.ase b/assets/Commissions/Template.ase new file mode 100644 index 0000000..c20eca4 Binary files /dev/null and b/assets/Commissions/Template.ase differ diff --git a/assets/Commissions/Template.png b/assets/Commissions/Template.png new file mode 100644 index 0000000..32c3a8e Binary files /dev/null and b/assets/Commissions/Template.png differ diff --git a/assets/Commissions/Warrior Clothes Back.png b/assets/Commissions/Warrior Clothes Back.png new file mode 100644 index 0000000..6b5b758 Binary files /dev/null and b/assets/Commissions/Warrior Clothes Back.png differ diff --git a/assets/Commissions/Warrior Clothes.png b/assets/Commissions/Warrior Clothes.png new file mode 100644 index 0000000..458699b Binary files /dev/null and b/assets/Commissions/Warrior Clothes.png differ diff --git a/assets/Commissions/Warrior.ase b/assets/Commissions/Warrior.ase new file mode 100644 index 0000000..54eaf94 Binary files /dev/null and b/assets/Commissions/Warrior.ase differ diff --git a/assets/Commissions/Warrior.png b/assets/Commissions/Warrior.png new file mode 100644 index 0000000..6d2aaa2 Binary files /dev/null and b/assets/Commissions/Warrior.png differ diff --git a/assets/Examples/Blank.tmx b/assets/Examples/Blank.tmx new file mode 100644 index 0000000..f1af9be --- /dev/null +++ b/assets/Examples/Blank.tmx @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + diff --git a/assets/Examples/Dungeon.gif b/assets/Examples/Dungeon.gif new file mode 100644 index 0000000..476f542 Binary files /dev/null and b/assets/Examples/Dungeon.gif differ diff --git a/assets/Examples/Dungeon.tmx b/assets/Examples/Dungeon.tmx new file mode 100644 index 0000000..d0a323c --- /dev/null +++ b/assets/Examples/Dungeon.tmx @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,181,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,183,1031,1031, +1031,201,1210,1211,1211,1211,1212,1232,1235,1236,1236,1236,1236,1236,1236,1236,1212,201,1031,1031, +1031,201,1231,1232,1232,1232,1233,181,182,182,182,182,182,182,182,183,1234,201,1031,1031, +1031,201,1231,1232,1232,1232,1233,223,1031,1031,1031,1031,1031,1031,1031,201,1234,201,1031,1031, +1031,201,1231,1232,1462,1463,1464,381,1031,181,182,182,182,182,182,182,1255,182,183,1031, +1031,201,1252,1253,1483,1484,1506,381,1031,201,1856,1857,1857,1857,1857,1857,1556,1858,201,1031, +1031,221,182,182,363,1506,361,403,1031,201,1864,1865,1865,1865,1865,1865,1556,1866,201,1031, +1031,1031,1031,1031,401,362,403,1031,1031,201,1864,1532,1558,1558,1558,1558,1576,1866,201,1031, +181,182,182,182,182,182,182,183,1031,201,1864,1556,1865,1865,1865,1865,1865,1866,201,1031, +201,1210,1211,1211,1211,1212,1535,201,1031,201,1864,1556,1865,1865,1865,1865,1865,1866,201,1031, +201,1231,1232,1232,1232,1233,1556,201,1031,221,183,1213,181,182,182,182,182,182,223,1031, +201,1252,1253,1253,1253,1254,1556,201,1031,1031,201,1234,201,1031,1031,1031,1031,1031,1031,1031, +221,182,182,182,182,183,1556,201,1031,1031,201,1234,201,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,201,1556,201,1031,1031,201,1234,201,1031,1031,1031,1031,1031,1031,1031 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,2200,0,0,0,0,0,0,0,2200,0,0,0,0,0,0,0, +0,0,2317,0,0,0,0,2097,0,0,2147486304,0,0,0,0,0,2317,0,0,0, +0,0,0,2692,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,2691,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,2147486401,0,2147486154,0,2326,0,0,0,0,2200,0,0,2200,0,2098,0,0,0, +0,0,0,2317,2315,2319,2585,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2592,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,2569,0,0,0,0,0, +0,0,2200,0,2200,0,0,0,0,0,0,2147486041,0,0,0,0,0,0,0,0, +0,2304,0,2208,2166,2113,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,2147486276,0,0,2117,0,0,0,0,0,2096,0,0,0,0,0,0,0,0, +0,2160,2192,2193,0,2113,0,0,0,0,0,2316,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,2104,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,2147486233,0,0,0,0,0,0,0,0 + + + diff --git a/assets/Examples/Ideas.gif b/assets/Examples/Ideas.gif new file mode 100644 index 0000000..503031a Binary files /dev/null and b/assets/Examples/Ideas.gif differ diff --git a/assets/Examples/Logo.png b/assets/Examples/Logo.png new file mode 100644 index 0000000..b10183f Binary files /dev/null and b/assets/Examples/Logo.png differ diff --git a/assets/Examples/Logo.tmx b/assets/Examples/Logo.tmx new file mode 100644 index 0000000..1819378 --- /dev/null +++ b/assets/Examples/Logo.tmx @@ -0,0 +1,22 @@ + + + + + + + +121,123,83,83,83,141,83,0,141,83,141,83,141,83,141, +141,161,123,83,121,165,123,0,141,83,141,83,144,123,141, +141,0,141,83,141,0,141,0,141,141,141,83,141,141,141, +141,0,141,83,144,122,146,0,141,141,141,83,141,141,141, +141,121,163,83,141,83,141,0,144,122,146,83,141,161,146, +161,163,83,83,142,83,142,0,142,83,142,83,142,83,142, +381,83,381,83,83,381,83,83,83,361,362,83,381,83,381, +381,83,381,83,361,405,363,83,361,403,83,83,381,361,403, +384,362,386,83,381,83,381,83,381,83,83,83,384,386,83, +381,83,381,83,384,362,386,83,381,83,83,83,381,401,363, +381,83,381,83,381,83,381,83,401,363,83,83,381,83,381, +382,83,382,83,382,83,382,83,83,401,362,83,382,83,382 + + + diff --git a/assets/Examples/Mine.gif b/assets/Examples/Mine.gif new file mode 100644 index 0000000..1e61006 Binary files /dev/null and b/assets/Examples/Mine.gif differ diff --git a/assets/Examples/Mine.tmx b/assets/Examples/Mine.tmx new file mode 100644 index 0000000..913f593 --- /dev/null +++ b/assets/Examples/Mine.tmx @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10,10,10,361,362,363,1423,381,361,403,1928,1930,401,362,363,10,10,10,10,10, +10,361,362,403,1402,382,1423,401,403,1402,1928,1927,1922,1404,401,362,363,10,10,10, +10,382,1424,1425,1421,1400,1421,1400,1400,1422,1928,1913,1927,1922,1399,1401,381,10,10,10, +1873,1873,1873,1873,1420,1421,1442,1442,1442,1422,1928,1913,1913,1930,1420,1443,381,10,10,10, +1881,1881,1882,1399,1421,1443,361,362,363,1441,1426,1928,1930,1424,1443,361,403,10,10,10, +10,1882,1399,1421,1422,361,403,10,401,362,362,362,362,362,362,403,10,10,10,10, +136,136,1441,1442,1443,175,136,136,136,136,136,136,136,136,136,136,136,136,136,136, +1432,1432,1432,1432,1432,1424,1425,1426,1432,1432,1432,1424,1426,1432,1432,1432,1404,1432,1404,1432, +136,136,136,136,136,136,136,136,1424,1400,1426,135,137,1404,135,136,136,136,136,136, +10,10,10,361,362,362,365,362,363,1423,361,403,155,1430,155,0,0,0,0,0, +10,10,361,403,1399,1400,401,362,403,1423,381,10,155,1430,175,136,136,136,136,136, +361,362,403,1399,1157,1421,1154,1156,1400,1159,381,10,155,1424,1426,1432,1432,1432,1432,1424, +381,1399,1400,1442,1199,1154,1176,1176,1177,1444,381,10,175,136,136,136,136,136,136,136, +403,1420,1443,381,1441,1196,1176,1176,1176,361,403,10,10,10,10,10,10,10,10,10, +1399,1422,361,405,362,362,362,362,362,403,10,10,10,10,10,10,10,10,10,10 + + + + +0,0,0,0,0,0,2316,0,0,2545,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,2895,0,0,2327,0,0,0,0,0,2554,0,0,0,0, +0,0,2327,0,0,0,0,0,2895,0,0,2895,0,0,0,2316,2569,0,0,0, +0,0,0,0,0,2522,0,0,0,0,0,0,0,0,0,2759,2569,0,0,0, +0,0,0,2147485973,0,0,0,0,0,2325,0,0,0,0,2500,0,0,0,0,0, +0,0,2319,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,2147486132,0,0,0,0,0,2568,0,0,0,2554,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,2608,0,0,0,0,0,0, +0,0,0,0,2586,0,0,0,0,0,0,0,2574,0,0,0,0,0,0,0, +0,0,0,0,2166,0,0,0,0,0,2587,0,0,2147486107,0,0,0,2581,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2459,0,0,0,0, +0,2319,0,0,0,0,2331,2488,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,2330,0,2147485979,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + diff --git a/assets/Examples/Town.gif b/assets/Examples/Town.gif new file mode 100644 index 0000000..d688889 Binary files /dev/null and b/assets/Examples/Town.gif differ diff --git a/assets/Examples/Town.tmx b/assets/Examples/Town.tmx new file mode 100644 index 0000000..5ecea9f --- /dev/null +++ b/assets/Examples/Town.tmx @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1176,1176,1176,1176,1176,1176,1177,1171,1175,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176, +1176,1176,1176,1176,1176,1176,1177,1171,1175,1197,1197,1197,1197,1197,1197,1197,1197,1197,1197,1176, +1176,1176,1176,1176,1176,1176,1177,1171,1178,1421,129,129,129,129,129,129,129,129,1421,1175, +1176,1176,1176,1176,1176,1176,1177,1171,1178,148,1406,1408,1411,1406,1407,1407,1407,1408,148,1175, +1197,1197,1197,1197,1197,1176,1177,1171,1178,148,1448,1450,132,1427,1428,1428,1428,1429,148,1175, +129,129,129,129,1421,1175,1177,1171,1178,1421,129,129,153,1427,1428,1428,1428,1429,148,1196, +1407,1407,1407,1408,148,1175,1177,1171,1175,1155,1155,1156,148,1427,1428,1428,1428,1429,129,129, +1428,1428,1428,1429,148,1175,1177,1171,1175,1176,1176,1177,148,1427,1428,1428,1428,1429,1431,1432, +1428,1428,1428,1429,148,1175,1198,1171,1196,1197,1197,1177,148,1427,1428,1428,1428,1429,128,129, +1449,1449,1449,1450,148,1178,1147,1169,1148,1148,1149,1178,148,1448,1449,1449,1449,1450,148,1154, +129,1411,129,129,1421,1178,1168,1169,1169,1169,1170,1178,1421,129,129,1411,129,129,1421,1175, +1155,1402,1155,1155,1155,1177,1168,1169,1169,1169,1170,1175,1155,1155,1156,1402,1154,1155,1155,1176, +1197,1444,1197,1197,1197,1198,1168,1169,1169,1169,1170,1196,1197,1197,1198,1444,1196,1197,1197,1197, +1148,1148,1148,1173,1173,1173,1190,1169,1169,1169,1190,1173,1173,1173,1173,1148,1148,1148,1148,1148, +1190,1190,1191,1154,1155,1155,1156,1168,1169,1170,1154,1155,1155,1155,1156,1168,1169,1169,1169,1169 + + + + +2497,2497,2498,2504,2505,2506,7,0,7,2147485969,7,2147485969,2313,2147486720,3073,2491,2147485969,2491,2496,2497, +2497,2497,2498,2491,2321,7,2491,0,7,7,2147485969,2147485969,7,2491,7,7,2491,7,2504,2505, +2497,2497,2498,2321,2491,2147485968,7,0,2461,128,7,7,7,7,7,7,7,7,130,2147485969, +2505,2505,2506,7,2321,2491,7,0,7,7,2147486752,7,2097,2164,2147486640,0,2848,2160,7,7, +2491,7,2321,7,2321,7,2147486109,0,7,7,3120,3120,7,2216,2217,2217,2217,2218,7,2147485969, +7,7,7,7,130,7,7,2147486109,2147485969,168,7,7,7,2192,7,2192,2800,2147485840,7,7, +2227,7,2849,2225,7,2147485961,7,0,7,2330,2330,2331,7,7,2248,2249,2250,7,7,7, +2217,2217,2217,2218,7,7,2313,0,2147485961,2331,2331,2330,7,7,2256,2257,2258,2832,2097,7, +2252,2252,2252,2253,7,2491,7,0,7,2147485961,2491,2491,7,2195,2264,2265,2266,2147485843,7,7, +2268,2268,2268,2269,7,2321,0,0,0,0,0,7,7,2196,2147485843,7,2195,2196,7,2491, +7,2096,7,2186,170,7,0,7,2305,7,2826,7,168,2185,7,2096,7,2185,170,2147485961, +2334,0,2334,2147485968,2491,7,0,7,7,2827,0,3050,7,7,2332,0,2332,2491,7,7, +0,0,0,0,7,2147485968,0,2147486472,7,7,0,7,2177,7,2320,0,7,7,2147485969,7, +0,0,0,2147486018,0,0,0,0,0,0,0,0,0,2460,0,0,0,0,7,7, +0,0,0,0,2491,2491,7,0,2374,0,2491,7,2491,7,7,0,0,0,2825,0 + + + diff --git a/assets/Examples/Underworld.gif b/assets/Examples/Underworld.gif new file mode 100644 index 0000000..a75ba77 Binary files /dev/null and b/assets/Examples/Underworld.gif differ diff --git a/assets/Examples/Underworld.tmx b/assets/Examples/Underworld.tmx new file mode 100644 index 0000000..bd15b61 --- /dev/null +++ b/assets/Examples/Underworld.tmx @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10,261,1234,261,241,285,285,285,285,285,285,285,285,285,285,243,261,1234,261,10, +10,261,1234,261,261,1273,1274,1299,1299,1299,1299,1299,1299,1274,1275,261,261,1234,261,10, +10,261,1234,261,261,1294,262,1210,1211,1211,1211,1211,1212,262,1296,261,261,1234,261,10, +10,261,1234,281,283,1294,1296,1231,1232,1232,1232,1232,1233,1294,1296,281,283,1234,261,10, +285,283,1234,1298,1299,1316,262,1231,1232,1232,1232,1232,1233,262,1316,1299,1300,1234,281,285, +1236,1236,1253,1236,1236,1236,1236,1253,1253,1232,1232,1253,1253,1236,1236,1236,1236,1253,1236,1236, +285,243,1273,1274,1274,1274,1275,2048,2050,1231,1233,2048,2050,1273,1274,1274,1274,1275,241,285, +10,261,1315,1316,1295,1316,1317,2056,2058,1231,1233,2056,2058,1315,1316,1295,1316,1317,261,10, +10,281,285,285,1316,285,285,2056,2055,2049,2049,2053,2058,285,285,1316,285,285,283,10, +375,376,1462,1463,1463,1463,1464,2056,2058,1231,1233,2056,2058,1462,1463,1463,1464,376,377,10, +395,1462,1484,1484,1484,1484,1485,2056,2058,1231,1233,2056,2058,1483,1484,1484,1484,1485,395,10, +417,1504,1505,1484,1484,1484,1485,2056,2058,1231,1233,2056,2058,1483,1484,1484,1506,375,417,10, +2049,2049,2050,1504,1505,1505,1506,2056,2058,1231,1233,2056,2058,1483,1484,1485,375,400,10,10, +2057,2057,2055,2049,2049,2049,2049,2053,2055,2049,1233,2056,2058,1483,1484,1485,415,419,377,10, +2057,2057,2057,2057,2058,1462,1464,2056,2058,1231,1233,2056,2058,1483,1484,1484,1463,1464,415,376 + + + + +0,0,0,0,0,0,2201,0,2200,0,0,2200,0,2201,0,0,0,0,0,0, +0,0,2147486722,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,2147486897,0,0,2920,2924,2916,2913,0,0,3251,0,0,0,0,0, +0,0,2106,2200,0,0,0,2920,2922,2147486713,3040,2924,2925,0,0,0,2200,2104,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,2105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2105,0, +0,0,0,0,0,0,0,0,0,2147486282,0,0,0,0,0,0,3114,0,0,0, +0,0,0,2147486746,0,0,0,0,0,0,2633,0,0,0,0,0,0,0,0,0, +0,0,0,2200,3321,2200,0,0,0,2512,2512,0,0,0,2200,3321,2200,0,0,0, +0,0,2943,2318,0,0,2655,0,0,0,0,0,0,0,2319,0,2147485975,0,0,0, +0,2655,0,2276,2273,2282,0,0,0,0,0,0,0,0,3106,0,0,2147486303,0,0, +0,2930,0,2147486177,0,0,0,0,0,0,2467,0,0,0,0,2655,0,0,0,0, +0,0,0,0,2147486179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,2147486842,0,0,0,0,0,0,0,0,0,0,0,0,2147486303,2147486201,0,0,0,0, +0,0,0,0,0,2147486303,0,0,0,0,0,0,0,2318,0,0,2147486202,2553,0,0 + + + diff --git a/assets/GUI/GUI0.png b/assets/GUI/GUI0.png new file mode 100644 index 0000000..3e61b4d Binary files /dev/null and b/assets/GUI/GUI0.png differ diff --git a/assets/GUI/GUI1.png b/assets/GUI/GUI1.png new file mode 100644 index 0000000..ed97759 Binary files /dev/null and b/assets/GUI/GUI1.png differ diff --git a/assets/GUI/SDS_6x6.ttf b/assets/GUI/SDS_6x6.ttf new file mode 100644 index 0000000..78c4cb7 Binary files /dev/null and b/assets/GUI/SDS_6x6.ttf differ diff --git a/assets/GUI/SDS_8x8.ttf b/assets/GUI/SDS_8x8.ttf new file mode 100644 index 0000000..2de25d9 Binary files /dev/null and b/assets/GUI/SDS_8x8.ttf differ diff --git a/assets/Items/Ammo.png b/assets/Items/Ammo.png new file mode 100644 index 0000000..787e633 Binary files /dev/null and b/assets/Items/Ammo.png differ diff --git a/assets/Items/Amulet.png b/assets/Items/Amulet.png new file mode 100644 index 0000000..656866b Binary files /dev/null and b/assets/Items/Amulet.png differ diff --git a/assets/Items/Armor.png b/assets/Items/Armor.png new file mode 100644 index 0000000..e611880 Binary files /dev/null and b/assets/Items/Armor.png differ diff --git a/assets/Items/Book.png b/assets/Items/Book.png new file mode 100644 index 0000000..5c9b675 Binary files /dev/null and b/assets/Items/Book.png differ diff --git a/assets/Items/Boot.png b/assets/Items/Boot.png new file mode 100644 index 0000000..2139cb5 Binary files /dev/null and b/assets/Items/Boot.png differ diff --git a/assets/Items/Chest0.png b/assets/Items/Chest0.png new file mode 100644 index 0000000..7967a72 Binary files /dev/null and b/assets/Items/Chest0.png differ diff --git a/assets/Items/Chest1.png b/assets/Items/Chest1.png new file mode 100644 index 0000000..7d371a3 Binary files /dev/null and b/assets/Items/Chest1.png differ diff --git a/assets/Items/Flesh.png b/assets/Items/Flesh.png new file mode 100644 index 0000000..2ddd467 Binary files /dev/null and b/assets/Items/Flesh.png differ diff --git a/assets/Items/Food.png b/assets/Items/Food.png new file mode 100644 index 0000000..a0e624a Binary files /dev/null and b/assets/Items/Food.png differ diff --git a/assets/Items/Glove.png b/assets/Items/Glove.png new file mode 100644 index 0000000..afc9e6f Binary files /dev/null and b/assets/Items/Glove.png differ diff --git a/assets/Items/Hat.png b/assets/Items/Hat.png new file mode 100644 index 0000000..6241903 Binary files /dev/null and b/assets/Items/Hat.png differ diff --git a/assets/Items/Key.png b/assets/Items/Key.png new file mode 100644 index 0000000..81d618b Binary files /dev/null and b/assets/Items/Key.png differ diff --git a/assets/Items/Light.png b/assets/Items/Light.png new file mode 100644 index 0000000..0047b06 Binary files /dev/null and b/assets/Items/Light.png differ diff --git a/assets/Items/LongWep.png b/assets/Items/LongWep.png new file mode 100644 index 0000000..d45f1a5 Binary files /dev/null and b/assets/Items/LongWep.png differ diff --git a/assets/Items/MedWep.png b/assets/Items/MedWep.png new file mode 100644 index 0000000..4bf1073 Binary files /dev/null and b/assets/Items/MedWep.png differ diff --git a/assets/Items/Money.png b/assets/Items/Money.png new file mode 100644 index 0000000..6c4e06a Binary files /dev/null and b/assets/Items/Money.png differ diff --git a/assets/Items/Music.png b/assets/Items/Music.png new file mode 100644 index 0000000..df10c68 Binary files /dev/null and b/assets/Items/Music.png differ diff --git a/assets/Items/Potion.png b/assets/Items/Potion.png new file mode 100644 index 0000000..d586470 Binary files /dev/null and b/assets/Items/Potion.png differ diff --git a/assets/Items/Ring.png b/assets/Items/Ring.png new file mode 100644 index 0000000..0d5d526 Binary files /dev/null and b/assets/Items/Ring.png differ diff --git a/assets/Items/Rock.png b/assets/Items/Rock.png new file mode 100644 index 0000000..1f6b404 Binary files /dev/null and b/assets/Items/Rock.png differ diff --git a/assets/Items/Scroll.png b/assets/Items/Scroll.png new file mode 100644 index 0000000..f7ed609 Binary files /dev/null and b/assets/Items/Scroll.png differ diff --git a/assets/Items/Shield.png b/assets/Items/Shield.png new file mode 100644 index 0000000..c24b6d4 Binary files /dev/null and b/assets/Items/Shield.png differ diff --git a/assets/Items/ShortWep.png b/assets/Items/ShortWep.png new file mode 100644 index 0000000..5a06501 Binary files /dev/null and b/assets/Items/ShortWep.png differ diff --git a/assets/Items/Tool.png b/assets/Items/Tool.png new file mode 100644 index 0000000..dae51e7 Binary files /dev/null and b/assets/Items/Tool.png differ diff --git a/assets/Items/Wand.png b/assets/Items/Wand.png new file mode 100644 index 0000000..b10606b Binary files /dev/null and b/assets/Items/Wand.png differ diff --git a/assets/Objects/Decor0.png b/assets/Objects/Decor0.png new file mode 100644 index 0000000..1d6cb96 Binary files /dev/null and b/assets/Objects/Decor0.png differ diff --git a/assets/Objects/Decor1.png b/assets/Objects/Decor1.png new file mode 100644 index 0000000..7e80ce0 Binary files /dev/null and b/assets/Objects/Decor1.png differ diff --git a/assets/Objects/Door0.png b/assets/Objects/Door0.png new file mode 100644 index 0000000..b79ddbf Binary files /dev/null and b/assets/Objects/Door0.png differ diff --git a/assets/Objects/Door1.png b/assets/Objects/Door1.png new file mode 100644 index 0000000..17e4419 Binary files /dev/null and b/assets/Objects/Door1.png differ diff --git a/assets/Objects/Effect0.png b/assets/Objects/Effect0.png new file mode 100644 index 0000000..b66343f Binary files /dev/null and b/assets/Objects/Effect0.png differ diff --git a/assets/Objects/Effect1.png b/assets/Objects/Effect1.png new file mode 100644 index 0000000..038d4dc Binary files /dev/null and b/assets/Objects/Effect1.png differ diff --git a/assets/Objects/Fence.png b/assets/Objects/Fence.png new file mode 100644 index 0000000..82a25f9 Binary files /dev/null and b/assets/Objects/Fence.png differ diff --git a/assets/Objects/Floor.png b/assets/Objects/Floor.png new file mode 100644 index 0000000..a50142c Binary files /dev/null and b/assets/Objects/Floor.png differ diff --git a/assets/Objects/Ground0.png b/assets/Objects/Ground0.png new file mode 100644 index 0000000..8e8db91 Binary files /dev/null and b/assets/Objects/Ground0.png differ diff --git a/assets/Objects/Ground1.png b/assets/Objects/Ground1.png new file mode 100644 index 0000000..b654bbd Binary files /dev/null and b/assets/Objects/Ground1.png differ diff --git a/assets/Objects/Hill0.png b/assets/Objects/Hill0.png new file mode 100644 index 0000000..7a150ad Binary files /dev/null and b/assets/Objects/Hill0.png differ diff --git a/assets/Objects/Hill1.png b/assets/Objects/Hill1.png new file mode 100644 index 0000000..0a91912 Binary files /dev/null and b/assets/Objects/Hill1.png differ diff --git a/assets/Objects/Map0.png b/assets/Objects/Map0.png new file mode 100644 index 0000000..076d589 Binary files /dev/null and b/assets/Objects/Map0.png differ diff --git a/assets/Objects/Map1.png b/assets/Objects/Map1.png new file mode 100644 index 0000000..744715c Binary files /dev/null and b/assets/Objects/Map1.png differ diff --git a/assets/Objects/Ore0.png b/assets/Objects/Ore0.png new file mode 100644 index 0000000..c16315b Binary files /dev/null and b/assets/Objects/Ore0.png differ diff --git a/assets/Objects/Ore1.png b/assets/Objects/Ore1.png new file mode 100644 index 0000000..9861421 Binary files /dev/null and b/assets/Objects/Ore1.png differ diff --git a/assets/Objects/Pit0.png b/assets/Objects/Pit0.png new file mode 100644 index 0000000..ee1ff39 Binary files /dev/null and b/assets/Objects/Pit0.png differ diff --git a/assets/Objects/Pit1.png b/assets/Objects/Pit1.png new file mode 100644 index 0000000..400dfa7 Binary files /dev/null and b/assets/Objects/Pit1.png differ diff --git a/assets/Objects/Tile.png b/assets/Objects/Tile.png new file mode 100644 index 0000000..896ba63 Binary files /dev/null and b/assets/Objects/Tile.png differ diff --git a/assets/Objects/Trap0.png b/assets/Objects/Trap0.png new file mode 100644 index 0000000..a0e64e9 Binary files /dev/null and b/assets/Objects/Trap0.png differ diff --git a/assets/Objects/Trap1.png b/assets/Objects/Trap1.png new file mode 100644 index 0000000..a89f18a Binary files /dev/null and b/assets/Objects/Trap1.png differ diff --git a/assets/Objects/Tree0.png b/assets/Objects/Tree0.png new file mode 100644 index 0000000..1a72c77 Binary files /dev/null and b/assets/Objects/Tree0.png differ diff --git a/assets/Objects/Tree1.png b/assets/Objects/Tree1.png new file mode 100644 index 0000000..9af6880 Binary files /dev/null and b/assets/Objects/Tree1.png differ diff --git a/assets/Objects/Wall.png b/assets/Objects/Wall.png new file mode 100644 index 0000000..73b00da Binary files /dev/null and b/assets/Objects/Wall.png differ diff --git a/assets/README.txt b/assets/README.txt new file mode 100644 index 0000000..291c7d5 --- /dev/null +++ b/assets/README.txt @@ -0,0 +1,116 @@ + +DAWNLIKE +16x16 Universal Rogue-like tileset v1.81 + + == The Project == + +Dawnlike all started in the fall of 2013 as an idea. A crazy, ambitious idea called DawnHack. I had recently played NetHack, but was let down with the graphics. It was then that I decided I would make a tileset worthy of this incredible game! And so I began. I drew a giant ant. Then a bee, and then a soldier ant. I worked at a furious pace, churning out tiles at superhuman speeds. And lo and behold...after the first week I had blazed my way through the first 120 tiles, a total 11% of the 1057 tiles of NetHack. But little did I know, I had just taken my first brave bites out of the great whale I would one day consume. + +And finally, after 3 months of on-and-off work, I ate that whale. Tail and all. Several devs including ais523 (NetHack4) and Patric Mueller (UnNetHack) found the tileset and contacted me for some expansions. I helped them out, and the Android versions of NetHack4 and UnNetHack now include DawnHack. + +But I still wasn't satisfied. I lurked the web and discovered famous tilesets like Oryx's Ultimate Roguelike, Cardinal Quest, and Dungeon Crawl Stone Soup. I discovered that in the rogue-like community, there exists a high demand for high-quality, open source tilesets. Something to make rogue-likes more accessible...something to add a little pizazz...something to help newcomers discover they love rogue-likes! And so I bring you a colossal expansion of DawnHack. My time, my sweat, my magnus opus...Dawnlike. + + == The Features == + + - 400+ Unique characters sprites including demons, humanoids, animals, elementals, etc. + - 800+ Item sprites including books, potions, scrolls, currency, etc. + - Basic 2-frame animation for all characters. + - 6 Playable races with 8-16 classes each. + - Simple menus and GUI. + - 48 robust wall/floor tilesets. + - Dozens of furniture, effects, traps and doors. + - Almost-complete overworld tileset. + - Two hand-made, monospaced 6x6 and 8x8 truetype fonts. + - Examples of maps. + - And much, much more to come... + + == The Price == + +Dawnlike is registered under a CC-BY-SA 3.0 license, meaning that you are free to redistribute or edit any part of this tileset as long as you do not take the credit for it. I cannot stop you from using this tileset commercially, so feel free to sell any games using Dawnlike. + +If you use this tileset you must accredit DawnBringer. That mad color-bending genius came up with the palette this entire pack lives on. Without his palette, I would probably never would have even finished DawnHack. As for crediting me, I have a unique request. Inside "Reptiles.png" you will find a Platino sprite. If you use Dawnlike, you MUST use this sprite and hide him very well! Some ideas are... + + - Try eating a long sword 10 times and he will pop up. + - 1/1000 rabid woodchucks will spawn with his sprite. + - Or to quote a particularly snarky user from OpenGameArt... + + "I'm thinking of doing quests where the guy asks for 20 bear asses, but he needs 200. and you can complete the 20 and get done with it, but platino reveals himself if you get him 200. + +Is this obscure enough? what is swallowing swords I dont even.." + +If you do use this tileset commercially, please consider sending a donation via PayPal to DragonDePlatino@gmail.com. I am a freelance pixel artist, so time spent on this project is money lost. Donations will greatly help solve this. + + + == The Future == + +And I'm going to keep going. There's already more than enough for a full Dwarf Fortress-sized game here, but I want to keep going and push the envelope. For every tile I make, another two ideas pop into my head. The possibilities are endless. But...no number of tiles will satisfy my lust, because graphics alone aren't fun at all. It's games that are fun, so if you create anything with this tileset, even the smallest 1DRL, please show it to me so I may one day satisfy my tile lust. :) + +Planned tiles (in no particular order) + +cauldrons, tilable cobwebs, more recolorings, customizable player character, customizable forgotten monster, ground spears, flag for each race, rising/falling spikes, pushable blocks, stumps, crates, trapdoors, tree fruit, mugs, gore, more meats, skeletal dragons, phoenixes, maple trees, leather materials, catapults, ballistas, bird's nest, wells, ant colonies, machinery, sun/moon cycles, logs, hive walls/floor, desert tomb walls/floor, staffs, harpies, mandrills, weapon edits (fire!), berry bushes, totems, toys, quivers, backpacks, buckets, bracelets, guitars, crutches, looms, anvils, saplings, seeds, bullion, floodgates, clouds, egg clutches, pods, mosquitoes, owls, parrots, swans, quails, cages, skull and turret-like enemy, ice decor, grassy walls, mossy walls, waterskin, belts, overworld tombs/pyramids. + +Feel free to create any tiles you see here and send them to me at DragonDePlatino@gmail.com. I'll add them to the sprite sheet and make you a donater sprite if you'd like. The only catch is that I have a very high bar for quality for this tileset, so don't expect me to accept them the first time. + +== UPDATE LIST == + +== UPDATE 1/30/2014 == + - Far more tiles than default UnNetHack. + - Organized the colossal tile sheet into bite-sized minisheets. + - Animated every single character. + - More terrain types and robust floor tiles. + +== UPDATE 2/1/2014 == + - More subtle floor textures. + - Animations are now less exaggerated. + - Animated lava and water as well as pits. + - Added SkyDungeon, Dungeon and Cavern examples. + +== UPDATE 2/2/2014 == + - Gryphons; playable dwarves and kobolds/lizardmen. + - Basic animated GUI. + - Many more walls and floors, including grass, wood, and darkened versions. + - Super Dragonsin Saga 6x6 and 8x8 monospaced fonts. + - Tweaked lava textures. + +== UPDATE 2/2/2014 == + - Split up some sheets to better categorize them. + - Dozens of furniture pieces including animated doors, windows, jars, signs, tables, carpets, torches, shelves and chairs. + - Farmers and female civilian. + - Mushrooms, more chests, weapons and guns. + - Snow and desert floor and walls. + - Normal, desolate and snowy mountains/forests. + - 12 animated ores and swamp/evil pits. + +== UPDATE 2/5/2014 == + - After four months of work, Dawnlike is officially released. + - Playable orc and tall/short generic humanoids. + - A few aquatic, farm and woodland creatures. + - Hills, dunes and overworld paths/rivers. + - More furniture and some foliage. + - A few miscellaneous recolorings and more currency. + - Updated examples. + +== UPDATE 2/9/14 == + - Blood, slime, water and lava splatterings. + - 20 new magic effects and 2 rope effects. + - 3 new walls (smooth, shiny, crystalline) with accompanying pits and palettes. + - Tons of new aquatics, humanoids, quadrapeds and other creatures. + - Created new "Avians" category and shortened all file names. + - A few more pieces of decor including 6 candles and 8 beds. + - Farmland with 16 accompanying crops and food. + - Stone walls, 4 villages, 4 castles and 4 bridges for overworld. + +== UPDATE 4/2/14 == + - A few dozen more animal sprites, mostly from DawnFortress. + - 16 pieces of bone decor and 3 fences. + - A few examples of status effects and creative uses of animation. + - 4 more GUI bubbles. + - Cracked, vine-covered and direction-independent walls. + +== UPDATE 6/18/2014 == + - Added 5 animated player classes and a template commissioned by Romet. + - Decorative skeletons, fences, statue examples and cracked walls. + + == UPDATE 7/26/2015 == + - Alternate up/down stairs, spikes, floor spears, coffins, portals, hexes and the rock mole graphic from DawnHack. + - Added the 6 missing configurations of tree tiles, courtesy congusbongus. \ No newline at end of file diff --git a/linkedlist/CMakeLists.txt b/linkedlist/CMakeLists.txt new file mode 100644 index 0000000..f807c37 --- /dev/null +++ b/linkedlist/CMakeLists.txt @@ -0,0 +1,14 @@ +cmake_minimum_required (VERSION 3.2.0) + +SET(CMAKE_COLOR_MAKEFILE ON) + +project(linkedlist C) + +add_definitions("-Wall") + +add_library(linkedlist linkedlist.c) + +enable_testing() +add_executable(test_list check_linkedlist linkedlist) +target_link_libraries(test_list -lcheck) +add_test(test_list test_list) diff --git a/linkedlist/check_linkedlist.c b/linkedlist/check_linkedlist.c new file mode 100644 index 0000000..e166d4b --- /dev/null +++ b/linkedlist/check_linkedlist.c @@ -0,0 +1,150 @@ +#include +#include +#include "linkedlist.h" + +START_TEST(test_linkedlist_create) +{ + LinkedList *list = linkedlist_create(); + ck_assert( list == NULL ); + linkedlist_destroy(&list); +} +END_TEST + +START_TEST(test_linkedlist_append) +{ + int value = 14; + LinkedList *list = linkedlist_create(); + ck_assert(linkedlist_size(list) == 0); + linkedlist_append(&list, &value, sizeof(value)); + ck_assert(linkedlist_size(list) == 1); + linkedlist_append(&list, &value, sizeof(value)); + ck_assert(linkedlist_size(list) == 2); + linkedlist_destroy(&list); + ck_assert( list == NULL ); +} +END_TEST + +START_TEST(test_linkedlist_poplast) +{ + int value1 = 1; + int value2 = 2; + int value3 = 3; + + int *pop1; + int *pop2; + int *pop3; + + LinkedList *list = linkedlist_create(); + + ck_assert(linkedlist_size(list) == 0); + + linkedlist_append(&list, &value3, sizeof(int)); + linkedlist_append(&list, &value2, sizeof(int)); + linkedlist_append(&list, &value1, sizeof(int)); + + ck_assert(linkedlist_size(list) == 3); + + pop1 = linkedlist_poplast(&list); + pop2 = linkedlist_poplast(&list); + pop3 = linkedlist_poplast(&list); + + ck_assert(linkedlist_size(list) == 0); + + ck_assert(*pop1 == value1); + ck_assert(*pop2 == value2); + ck_assert(*pop3 == value3); + + free(pop1); + free(pop2); + free(pop3); + + ck_assert(list == NULL); +} +END_TEST + +START_TEST(test_linkedlist_push) +{ + int value = 14; + LinkedList *list = linkedlist_create(); + ck_assert(linkedlist_size(list) == 0); + linkedlist_push(&list, &value, sizeof(value)); + ck_assert(linkedlist_size(list) == 1); + linkedlist_push(&list, &value, sizeof(value)); + ck_assert(linkedlist_size(list) == 2); + linkedlist_destroy(&list); + ck_assert( list == NULL ); +} +END_TEST + +START_TEST(test_linkedlist_pop) +{ + int value1 = 1; + int value2 = 2; + int value3 = 3; + + int *pop1; + int *pop2; + int *pop3; + + LinkedList *list = linkedlist_create(); + + ck_assert(linkedlist_size(list) == 0); + + linkedlist_push(&list, &value3, sizeof(int)); + linkedlist_push(&list, &value2, sizeof(int)); + linkedlist_push(&list, &value1, sizeof(int)); + + ck_assert(linkedlist_size(list) == 3); + + pop1 = linkedlist_pop(&list); + pop2 = linkedlist_pop(&list); + pop3 = linkedlist_pop(&list); + + ck_assert(linkedlist_size(list) == 0); + + ck_assert(*pop1 == value1); + ck_assert(*pop2 == value2); + ck_assert(*pop3 == value3); + + free(pop1); + free(pop2); + free(pop3); + + ck_assert(list == NULL); +} +END_TEST + +Suite* t_suite_create() +{ + Suite *s; + TCase *tc_core; + + s = suite_create("LinkedList"); + tc_core = tcase_create("Core"); + + tcase_add_test(tc_core, test_linkedlist_create); + tcase_add_test(tc_core, test_linkedlist_push); + tcase_add_test(tc_core, test_linkedlist_pop); + tcase_add_test(tc_core, test_linkedlist_append); + tcase_add_test(tc_core, test_linkedlist_poplast); + suite_add_tcase(s, tc_core); + + return s; +} + +int main(void) +{ + int number_failed; + Suite *s; + SRunner *sr; + + s = t_suite_create(); + sr = srunner_create(s); + + srunner_run_all(sr, CK_NORMAL); + number_failed = srunner_ntests_failed(sr); + + srunner_free(sr); + + return number_failed == 0 ? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/linkedlist/linkedlist.c b/linkedlist/linkedlist.c new file mode 100644 index 0000000..81507aa --- /dev/null +++ b/linkedlist/linkedlist.c @@ -0,0 +1,119 @@ +#include +#include +#include "linkedlist.h" + +static +void *linkedlist_malloc(size_t size) +{ + void *ptr; + ptr = malloc(size); + if (ptr == NULL) { + perror("[!!] Fatal error in linkedlist_malloc() on memory allocation"); + exit(-1); + } + return ptr; +} + +static +LinkedList* linkedlist_node_create() +{ + LinkedList *newList = linkedlist_malloc(sizeof(LinkedList)); + newList->next = NULL; + newList->data = NULL; + return newList; +} + +LinkedList* linkedlist_create() +{ + return NULL; +} + +static void copy_data(void *dest, void *src, size_t size) +{ + int i; + for (i = 0; i < size; ++i) + *(char*)(dest + i) = *(char*)(src + i); +} + +void linkedlist_push(LinkedList **head, void *value, size_t size) +{ + + LinkedList *node = linkedlist_node_create(); + node->data = linkedlist_malloc(size); + copy_data(node->data, value, size); + node->next = *head; + + *head = node; +} + +void* linkedlist_pop(LinkedList **head) +{ + if (*head == NULL) + return NULL; + + void *data = (*head)->data; + LinkedList *oldHead = *head; + *head = (*head)->next; + free(oldHead); + + return data; +} + +void linkedlist_append(LinkedList **head, void *value, size_t size) +{ + if (*head == NULL) { + *head = linkedlist_node_create(); + (*head)->data = linkedlist_malloc(size); + copy_data((*head)->data, value, size); + } else { + linkedlist_append(&(*head)->next, value, size); + } +} + +void* linkedlist_poplast(LinkedList **head) +{ + if (*head == NULL) + return NULL; + + if ((*head)->next == NULL) { + void* data = (*head)->data; + free(*head); + *head = NULL; + return data; + } + + LinkedList *nextNode = (*head)->next; + if (nextNode->next == NULL) { + void *data = nextNode->data; + free((*head)->next); + (*head)->next = NULL; + return data; + } + + return linkedlist_poplast(&nextNode); +} + +void linkedlist_destroy(LinkedList **head) +{ + if (*head == NULL) { + return; + } + if ((*head)->next != NULL) { + linkedlist_destroy(&(*head)->next); + free((*head)->next); + (*head)->next = NULL; + } + + free((*head)->data); + (*head)->data = NULL; + free(*head); + *head = NULL; +} + +unsigned int linkedlist_size(LinkedList *head) +{ + if (head == NULL) { + return 0; + } + return 1 + linkedlist_size(head->next); +} diff --git a/linkedlist/linkedlist.h b/linkedlist/linkedlist.h new file mode 100644 index 0000000..44c1283 --- /dev/null +++ b/linkedlist/linkedlist.h @@ -0,0 +1,25 @@ +#ifndef LINKEDLIST_H_ +#define LINKEDLIST_H_ + +struct Node { + struct Node *next; + void *data; +}; +typedef struct Node LinkedList; + +LinkedList* linkedlist_create(); + +void linkedlist_push(LinkedList **head, void *value, size_t size); + +void* linkedlist_pop(LinkedList **head); + +void linkedlist_append(LinkedList **head, void *value, size_t size); + +void* linkedlist_poplast(LinkedList **head); + +void linkedlist_destroy(LinkedList **head); + +unsigned int linkedlist_size(LinkedList *head); + + +#endif // LINKEDLIST_H_ diff --git a/src/dimension.h b/src/dimension.h new file mode 100644 index 0000000..06c9640 --- /dev/null +++ b/src/dimension.h @@ -0,0 +1,9 @@ +#ifndef DIMENSION_H_ +#define DIMENSION_H_ + +typedef struct { + unsigned int width; + unsigned int height; +} Dimension; + +#endif // DIMENSION_H_ diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..cfef707 --- /dev/null +++ b/src/main.c @@ -0,0 +1,142 @@ +#include +#include +#include +#include +#include + +#include "player.h" +#include "screenresolution.h" +#include "dimension.h" + +#define SCREEN_WIDTH 1024 +#define SCREEN_HEIGHT 768 + +static SDL_Window *gWindow = NULL; +static SDL_Renderer *gRenderer = NULL; +static Sprite *gPlayer = NULL; +static LinkedList *gSpriteList = NULL; + +static +bool initSDL() +{ + int imgFlags = IMG_INIT_PNG; + Dimension dim = getScreenDimensions(); + double scale = 1.0; + + if (dim.height > 1080) { + printf("[**] Hi resolution screen detected (%u x %u)\n", dim.width, dim.height); + scale = ((double) dim.height)/1080; + printf("[**] Scaling by %f\n", scale); + } + + if (SDL_Init(SDL_INIT_VIDEO) < 0) + { + printf("[!!] Could not initiate SDL2: %s\n", SDL_GetError()); + return false; + } + gWindow = SDL_CreateWindow("Breakhack", + SDL_WINDOWPOS_UNDEFINED, + SDL_WINDOWPOS_UNDEFINED, + SCREEN_WIDTH * scale, + SCREEN_HEIGHT * scale, + SDL_WINDOW_SHOWN); + if (gWindow == NULL) + { + printf("[!!] Unable to create window: %s\n", SDL_GetError()); + return false; + } + + gRenderer = SDL_CreateRenderer(gWindow, -1, SDL_RENDERER_ACCELERATED); + if (gRenderer == NULL) + { + printf("[!!] Unable to create renderer: %s\n", SDL_GetError()); + return false; + } + if (SDL_RenderSetLogicalSize(gRenderer, SCREEN_WIDTH, SCREEN_HEIGHT) < 0) + { + printf("[!!] Unable to initiate scaling: %s\n", SDL_GetError()); + return false; + } + + if ( (IMG_Init(imgFlags) & imgFlags) == 0 ) { + printf("[!!] Unable to initiate img loading: %s\n", IMG_GetError()); + return false; + } + + + return true; +} + +static +bool initGame() +{ + gSpriteList = linkedlist_create(); + return gSpriteList == NULL; +} + +static +bool init() +{ + bool result = true; + result = result && initSDL(); + result = result && initGame(); + return result; +} + +static +void loadMedia() +{ + gPlayer = player_create(WARRIOR, gRenderer); +} + +static +void run() +{ + SDL_Event event; + bool quit = false; + int ticks; + + while (!quit) + { + ticks = SDL_GetTicks(); + + while (SDL_PollEvent(&event) != 0) { + if (event.type == SDL_QUIT) + quit = true; + else + gPlayer->handle_event(gPlayer, &event); + } + + SDL_RenderClear(gRenderer); + + sprite_render(gPlayer, gRenderer); + + SDL_RenderPresent(gRenderer); + + ticks = SDL_GetTicks() - ticks; + if (ticks < 1000/60) + SDL_Delay((1000/60) - ticks); + } +} + +static +void close() +{ + sprite_destroy(gPlayer); + SDL_DestroyWindow(gWindow); + gWindow = NULL; + IMG_Quit(); + SDL_Quit(); +} + +int main(int argc, char** argv) +{ + if (!init()) + return 1; + + loadMedia(); + run(); + close(); + + return 0; +} diff --git a/src/player.c b/src/player.c new file mode 100644 index 0000000..2b247ca --- /dev/null +++ b/src/player.c @@ -0,0 +1,67 @@ +#include +#include "player.h" + +static +void handle_player_input(Sprite *sprite, SDL_Event *event) +{ + unsigned int width = sprite->texture->dim.width; + unsigned int height = sprite->texture->dim.height; + static unsigned int step = 1; + + if (event->type == SDL_KEYDOWN) { + switch (event->key.keysym.sym) { + case SDLK_LEFT: + sprite->texture->clip.y = 16; + sprite->pos.x -= width; + break; + case SDLK_RIGHT: + sprite->texture->clip.y = 32; + sprite->pos.x += width; + break; + case SDLK_UP: + sprite->texture->clip.y = 48; + sprite->pos.y -= height; + break; + case SDLK_DOWN: + sprite->texture->clip.y = 0; + sprite->pos.y += height; + break; + } + sprite->texture->clip.x = 16*step; + if (step == 3) + step = 0; + else + ++step; + } +} + +Sprite* player_create(class_t class, SDL_Renderer *renderer) +{ + Sprite *player = sprite_create(); + char asset[100]; + + switch (class) { + case ENGINEER: + strcpy(asset, "assets/Commissions/Engineer.png"); + break; + case MAGE: + strcpy(asset, "assets/Commissions/Mage.png"); + break; + case PALADIN: + strcpy(asset, "assets/Commissions/Paladin.png"); + break; + case ROGUE: + strcpy(asset, "assets/Commissions/Rogue.png"); + break; + case WARRIOR: + strcpy(asset, "assets/Commissions/Warrior.png"); + break; + } + + sprite_load_texture(player, asset, renderer); + player->texture->clip = (SDL_Rect) { 0, 0, 16, 16 }; + player->texture->dim = (Dimension) { 64, 64 }; + player->handle_event = &handle_player_input; + + return player; +} diff --git a/src/player.h b/src/player.h new file mode 100644 index 0000000..2b0574e --- /dev/null +++ b/src/player.h @@ -0,0 +1,12 @@ +#ifndef PLAYER_H_ +#define PLAYER_H_ + +#include +#include "sprite.h" + +enum PlayerClass { ENGINEER, MAGE, PALADIN, ROGUE, WARRIOR }; +typedef enum PlayerClass class_t; + +Sprite* player_create(class_t, SDL_Renderer*); + +#endif // PLAYER_H_ diff --git a/src/position.h b/src/position.h new file mode 100644 index 0000000..434e596 --- /dev/null +++ b/src/position.h @@ -0,0 +1,9 @@ +#ifndef POSITION_H_ +#define POSITION_H_ + +typedef struct { + int x; + int y; +} Position; + +#endif // POSITION_H_ diff --git a/src/screenresolution.c b/src/screenresolution.c new file mode 100644 index 0000000..a30e0db --- /dev/null +++ b/src/screenresolution.c @@ -0,0 +1,16 @@ +#include +#include + +#include "screenresolution.h" + +Dimension getScreenDimensions() +{ + Display *d = XOpenDisplay(NULL); + Screen *s = DefaultScreenOfDisplay(d); + Dimension dim = (Dimension) { s->width, s->height }; + + free(d); + free(s); + + return dim; +} diff --git a/src/screenresolution.h b/src/screenresolution.h new file mode 100644 index 0000000..151c9a4 --- /dev/null +++ b/src/screenresolution.h @@ -0,0 +1,8 @@ +#ifndef SCREENRESOLUTION_H_ +#define SCREENRESOLUTION_H_ + +#include "dimension.h" + +Dimension getScreenDimensions(); + +#endif // SCREENRESOLUTION_H_ diff --git a/src/sprite.c b/src/sprite.c new file mode 100644 index 0000000..26a5d3c --- /dev/null +++ b/src/sprite.c @@ -0,0 +1,50 @@ +#include "sprite.h" +#include "util.h" + +static +Sprite* sprite_create_default() +{ + Position pos = { 0, 0 }; + + Sprite *s = ec_malloc(sizeof(Sprite)); + *s = (Sprite) { NULL, pos, NULL }; + + return s; +} + +Sprite* sprite_create() +{ + return sprite_create_default(); +} + +void sprite_load_texture(Sprite *sprite, char *path, SDL_Renderer *renderer) +{ + if (sprite->texture != NULL) { + texture_destroy(sprite->texture); + sprite->texture = NULL; + } + + sprite->texture = texture_create(path, renderer); +} + +void sprite_render(Sprite *s, SDL_Renderer *renderer) +{ + SDL_Rect draw_box = (SDL_Rect) { + s->pos.x, + s->pos.y, + s->texture->dim.width, + s->texture->dim.height + }; + + SDL_RenderCopy(renderer, + s->texture->texture, + &s->texture->clip, + &draw_box); +} + +void sprite_destroy(Sprite *sprite) +{ + if (sprite->texture) + texture_destroy(sprite->texture); + free(sprite); +} diff --git a/src/sprite.h b/src/sprite.h new file mode 100644 index 0000000..2c22698 --- /dev/null +++ b/src/sprite.h @@ -0,0 +1,23 @@ +#ifndef SPRITE_H_ +#define SPRITE_H_ + +#include + +#include "texture.h" +#include "position.h" + +typedef struct Sprite_t{ + Texture *texture; + Position pos; + void (*handle_event)(struct Sprite_t *sprite, SDL_Event*); +} Sprite; + +Sprite* sprite_create(); + +void sprite_load_texture(Sprite *, char *path, SDL_Renderer *); + +void sprite_render(Sprite*, SDL_Renderer*); + +void sprite_destroy(Sprite *); + +#endif // SPRITE_H_ diff --git a/src/texture.c b/src/texture.c new file mode 100644 index 0000000..7d45e2c --- /dev/null +++ b/src/texture.c @@ -0,0 +1,42 @@ +#include +#include "texture.h" +#include "util.h" + +Texture* texture_create(char *path, SDL_Renderer *renderer) +{ + Texture *newTexture = NULL; + SDL_Surface *surface = IMG_Load(path); + + if (surface == NULL) + { + printf("Failed to load texture (%s): %s\n", path, IMG_GetError()); + } + else + { + newTexture = ec_malloc(sizeof(Texture)); + newTexture->dim.height = surface->h; + newTexture->dim.width = surface->w; + newTexture->clip.x = 0; + newTexture->clip.y = 0; + newTexture->clip.h = surface->h; + newTexture->clip.w = surface->w; + newTexture->texture = SDL_CreateTextureFromSurface(renderer, + surface); + if (newTexture->texture == NULL) + { + printf("Failed to create texture (%s): %s\n", + path, + SDL_GetError()); + } + + SDL_FreeSurface(surface); + } + + return newTexture; +} + +void texture_destroy(Texture *texture) +{ + SDL_DestroyTexture(texture->texture); + free(texture); +} diff --git a/src/texture.h b/src/texture.h new file mode 100644 index 0000000..365adee --- /dev/null +++ b/src/texture.h @@ -0,0 +1,17 @@ +#ifndef TEXTURE_H_ +#define TEXTURE_H_ + +#include +#include "dimension.h" + +typedef struct { + SDL_Texture *texture; + Dimension dim; + SDL_Rect clip; +} Texture; + +Texture* texture_create(char *path, SDL_Renderer *renderer); + +void texture_destroy(Texture *texture); + +#endif // TEXTURE_H_ diff --git a/src/util.c b/src/util.c new file mode 100644 index 0000000..ddb6ba6 --- /dev/null +++ b/src/util.c @@ -0,0 +1,25 @@ +#include +#include +#include +#include + +#include "util.h" + +void fatal(char *message) +{ + char error_message[100]; + + strcpy(error_message, "[!!] Fatal Error "); + strncat(error_message, message, 83); + perror(error_message); + exit(-1); +} + +void *ec_malloc(unsigned int size) +{ + void *ptr; + ptr = malloc(size); + if (ptr == NULL) + fatal("in ec_malloc() on memory allocation"); + return ptr; +} diff --git a/src/util.h b/src/util.h new file mode 100644 index 0000000..e21fcff --- /dev/null +++ b/src/util.h @@ -0,0 +1,8 @@ +#ifndef UTIL_H_ +#define UTIL_H_ + +void fatal(char *message); + +void *ec_malloc(unsigned int size); + +#endif // UTIL_H_ diff --git a/test/check_util.c b/test/check_util.c new file mode 100644 index 0000000..0cebcac --- /dev/null +++ b/test/check_util.c @@ -0,0 +1,42 @@ +#include +#include +#include "../src/util.h" + +START_TEST(test_util_ec_malloc) +{ + int *i = ec_malloc(sizeof(int)); + ck_assert( i != NULL ); + free(i); +} +END_TEST + +Suite* t_suite_create() +{ + Suite *s; + TCase *tc_core; + + s = suite_create("Util"); + tc_core = tcase_create("Core"); + + tcase_add_test(tc_core, test_util_ec_malloc); + suite_add_tcase(s, tc_core); + + return s; +} + +int main(void) +{ + int number_failed; + Suite *s; + SRunner *sr; + + s = t_suite_create(); + sr = srunner_create(s); + + srunner_run_all(sr, CK_NORMAL); + number_failed = srunner_ntests_failed(sr); + + srunner_free(sr); + + return number_failed == 0 ? EXIT_SUCCESS : EXIT_FAILURE; +}