spelunky | open source Unity fan project of the original Spelunky game | Game Engine library

 by   oyvind-stromsvik C# Version: Current License: No License

kandi X-RAY | spelunky Summary

kandi X-RAY | spelunky Summary

spelunky is a C# library typically used in Gaming, Game Engine, Unity applications. spelunky has no bugs, it has no vulnerabilities and it has low support. You can download it from GitHub.

This is my open source Unity fan project of the original Spelunky game made by Derek Yu. I'm not calling it a remake because I have no intention of remaking the game 1:1, nor have I so far taken a single line of code from the actual GameMaker source files. I'm writing all the code myself and I'm making the game how I want it to be in a way that makes sense to me, adding and tweaking features where I see fit along the way. And where I'm using Spelunky as a source of inspiration I'm mainly using the Steam/Xbox 360 remake of the original rather than the original as I feel they look and feel a lot better than the original, for obvious reasons. I am however using the sprites from the original game as creating art is not my strong suit and the original game has fantastic sprites. Due to this fact the same rules and limitations apply to the sprites here as would to the original GameMaker source files. I've put all the sprites in their own folder in the project along with an amateurish license file that I've made, the purpose of which is to make it absolutely clear that Derek Yu / Mossmouth own the rights to the sprites, not me: And if you want to read more about the original game or take a look at the orginal GameMaker source files for yourself, it's all available here: I'd love it if people contributed with issues and pull requests. One of my primary goals with this project is to increase my programming knowledge, and a great way of achieving that would be if people improved on the things I've made or told me why they're not working or how they could be improved. I also have an accompaning WIP thread on the Unity forums for this project if you want to follow along:
Support
    Quality
      Security
        License
          Reuse

            kandi-support Support

              spelunky has a low active ecosystem.
              It has 7 star(s) with 2 fork(s). There are 3 watchers for this library.
              OutlinedDot
              It had no major release in the last 6 months.
              There are 5 open issues and 15 have been closed. On average issues are closed in 1 days. There are no pull requests.
              It has a neutral sentiment in the developer community.
              The latest version of spelunky is current.

            kandi-Quality Quality

              spelunky has 0 bugs and 0 code smells.

            kandi-Security Security

              spelunky has no vulnerabilities reported, and its dependent libraries have no vulnerabilities reported.
              spelunky code analysis shows 0 unresolved vulnerabilities.
              There are 0 security hotspots that need review.

            kandi-License License

              spelunky does not have a standard license declared.
              Check the repository for any license declaration and review the terms closely.
              OutlinedDot
              Without a license, all rights are reserved, and you cannot use the library in your applications.

            kandi-Reuse Reuse

              spelunky releases are not available. You will need to build from source code and install.

            Top functions reviewed by kandi - BETA

            kandi's functional review helps you automatically verify the functionalities of the libraries and avoid rework.
            Currently covering the most popular Java, JavaScript and Python libraries. See a Sample of spelunky
            Get all kandi verified functions for this library.

            spelunky Key Features

            No Key Features are available at this moment for spelunky.

            spelunky Examples and Code Snippets

            No Code Snippets are available at this moment for spelunky.

            Community Discussions

            QUESTION

            Is it okay to call SDL_RenderCopy() for each sprite?
            Asked 2021-Feb-21 at 07:57

            This is a followup to my question here: Is it okay to have a SDL_Surface and SDL_Texture for each sprite?

            I made an class called entity each having a SDL_Texture, which is set in the constructor and then a member function render() is called for every onscreen entity in a vector, which uses SDL_RenderCopy() to draw to the renderer.

            This render() function includes generating rectangles for each sprite based on their position/cameradata

            Is this okay? Is there a faster way?

            I made a testlevel with 96 sprites that each take up 2% of the screen with tons of overdraw and ft is 15ms (~65fps)at a resolution of1600x900. Seems a little slow for just some sprites, and my computer breathes much heavier then when playing a full game such as spelunky or isaac.

            ...

            ANSWER

            Answered 2021-Feb-20 at 23:49

            So, I've done some more testing by examining the memory/cpu usage of this program at full screen with a "demanding" level and managed to make it similar to other games by enforcing a framerate cap with SDL_Wait()

            Source https://stackoverflow.com/questions/66294817

            QUESTION

            How can I take an algorithm that works very well in a 2D space and adapt it for 3D environments?
            Asked 2020-May-05 at 00:37

            I liked the technique Spelunky used to generate the levels in the game, and I want to adapt it for a 3D space, so that I can use it to help me design something in that 3D space. I'm just not sure how to approach this kind of problem. I feel like a direct translation for this specific approach isn't possible, but I still want to have something that feels similar, with the same sort of winding path.

            ...

            ANSWER

            Answered 2020-May-05 at 00:27

            This is an interesting question due to some of the challenges that arise when you start moving algorithms into higher dimensions.

            Issue 1: Main Paths Occupy Little Volume

            Let's start with a simple mathematical observation. The level generation algorithm works by computing a random path from the top row of the world to the bottom row of the world. At each step, that path can either move left, right, or down, but never takes a step back onto where it starts from. Assuming these three options are equally likely, the first step on a particular level has a 2/3 chance of staying on the same level, and each subsequent step has at most a 1/2 chance of staying on the same level. (It's 50%, ignoring walls). That means that the expected number of tiles per level is going to be at most

            1 × (1/3) + (2/3) × (1 + 2) (since there's 1/3 chance to move down immediately, otherwise (2/3) chance to get one room, plus the number of rooms you get from a random process that halts with 50% probability at each step)

            = 2.5

            This is important, because it means that if your world were an n × n grid, you'd expect to have only about 2.5 "used" cells per level in the world for a total of roughly 2.5n "used" cells on the path. Given that the world is n × n, that means that a

            2.5n / n2 = 2.5 / n

            fraction of the cells of the world will be on the main path, so n has to be small for the fraction of the world not on the main path to not get too huge. The video you linked picks n = 4, giving, a fraction of 2.5 / 4 = 62.5% of the world will be on the main path. That's a good blend between "I'd like to make progress" and "I'd like my side quest, please." And remember, this number is an overestimate of the number of path cells versus side-quest cells.

            Now, let's do this in three dimensions. Same as before, we start in the top "slice," then randomly move forward, backward, left, right, or down at each step. That gives us at most a 4/5 chance of staying on our level with our first step, then from that point forward at most a 3/4 chance of staying on the level. (Again, this is an overestimate.) Doing the math again gives

            1 × 1/5 + (4/5) × (1 + 4)

            = 1/5 + (4/5) × 5

            = 4.2

            So that means that an average of 4.2 cells per level are going to be in the main path, for a total path length of 4.2n, on average, if we're overestimating. In an n × n × n world, this means that the fraction of "on-path" sites to "off-path" sites is

            4.2n / n3

            = 4.2 / n2

            This means that your world needs to be very small for the main path not to be a trivial fraction of the overall space. For example, picking n = 3 means that you'd have just under 50% of the world off the main path and available for exploration. Picking n = 4 would give you 75% of the world off the main path, and giving n = 5 would give you over 80% of the world off the main path.

            All of this is to say that, right off the bat, you'd need to reduce the size of your world so that a main-path-based algorithm doesn't leave the world mostly empty. That's not necessarily a bad thing, but it is something to be mindful of.

            Issue 2: Template Space Increases

            The next issue you're run into is building up your library of "templates" for room configurations. If you're in 2D space, there are four possible entrances and exits into each cell, and any subset of those four entrances (possibly, with the exception of a cell with no entrances at all) might require a template. That gives you

            24 - 1 = 15

            possible entrance/exit templates to work with, and that's just to cover the set of all possible options.

            In three dimensions, there are six possible entrances and exits from each cell, so there are

            26 - 1 = 63

            possible entrance/exit combinations to consider, so you'd need a lot of templates to account for this. You can likely reduce this by harnessing rotational symmetry, but this is an important point to keep in mind.

            Issue 3: Getting Stuck

            The video you linked mentions as a virtue of the 2D generation algorithm the fact that

            it creates fun and engaging levels that the player can't easily get stuck in.

            In 2D space, most cells, with a few exceptions, will be adjacent to the main path. In 3D space, most cells, with a few exceptions, will not be adjacent to the main path. Moreover, in 2D space, if you get lost, it's not hard to find your way back - there are only so many directions you can go, and you can see the whole world at once. In 3D, it's a lot easier to get lost, both because you can take steps that get you further off the main path than in 2D space and because, if you do get lost, there are more options to consider for how to backtrack. (Plus, you probably can't see the whole world at once in a 3D space.)

            You could likely address this by just not filling the full 3D space of cells with places to visit. Instead, only allow cells that are one or two steps off of the main path to be filled in with interesting side quests, since that way the player can't get too lost in the weeds.

            To Summarize

            These three points suggest that, for this approach to work in 3D, you'd likely need to do the following.

            1. Keep the world smaller than you think you might need it to be, since the ratio of on-path to off-path cells will get large otherwise.
            2. Alternatively, consider only filling in cells adjacent to the main path, leaving the other cells inaccessible, so that the player can quickly backtrack to where they were before.
            3. Be prepared to create a lot of templates, or to figure out how to use rotations to make your templates applicable in more places.

            Good luck!

            Source https://stackoverflow.com/questions/61603601

            QUESTION

            SendKeys with games: with some characters it works, but with some it doesn't
            Asked 2020-Mar-18 at 18:17

            I want to simulate input in games with SendKeys, but I have a hard time.

            If I use it with i.e. the letter T, while the cursor in Minecraft is in a textbox (in the main menu), it works, the letter T is written in the textbox.

            But with {ESC} it doesn't work. Nothing happens. If I press it manually, it backs to the previous menu. (as it should)

            With some applications ESC works:

            • It works with Discord, Sourcetree, Slack, Chrome, CS2D,

            • but for some reason it doesn't work with Minecraft, Spelunky, Half-Life.

            All of the applications mentioned above were in windowed mode.

            Another issue:

            • If I send 2 to Minecraft while in a text field, it works correctly, 2 is written.

            • But if I send it while I'm playing, there is no effect. (The character should switch to Item Slot #2)

            • Same with " " (whitespace). In text fields it works, but the character won't jump in the game.

            Code:

            ...

            ANSWER

            Answered 2020-Mar-18 at 18:17

            Do not use SendKeys.Send to messaging between processes working on different runtimes

            SendKeys.Send method is from System.Windows.Forms namespace.

            This means it is not a Windows Input simulator, but just a little helper for Windows Forms applications. There is no guarantee this method work with another process on different (not .NET) runtime system.

            Despite the fact that SendKeys.Send method uses native Windows API, it send key pressing message only of fixed period of time, so game frame handling may not have time to catch this message to manage it. So you may need for separate commands to send message about key down and key up events.

            Do not use SendKeys API for messaging with another processes, especially with games.
            Also, games can use protection system to rid of automatic bots that can blocks any messages from operation system programming input

            So, what you can use?

            First, you can try to use PostMessage of user32.dll system library:

            Source https://stackoverflow.com/questions/60578711

            Community Discussions, Code Snippets contain sources that include Stack Exchange Network

            Vulnerabilities

            No vulnerabilities reported

            Install spelunky

            You can download it from GitHub.

            Support

            For any new features, suggestions and bugs create an issue on GitHub. If you have any questions check and ask questions on community page Stack Overflow .
            Find more information at:

            Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items

            Find more libraries
            CLONE
          • HTTPS

            https://github.com/oyvind-stromsvik/spelunky.git

          • CLI

            gh repo clone oyvind-stromsvik/spelunky

          • sshUrl

            git@github.com:oyvind-stromsvik/spelunky.git

          • Stay Updated

            Subscribe to our newsletter for trending solutions and developer bootcamps

            Agree to Sign up and Terms & Conditions

            Share this Page

            share link

            Explore Related Topics

            Consider Popular Game Engine Libraries

            godot

            by godotengine

            phaser

            by photonstorm

            libgdx

            by libgdx

            aseprite

            by aseprite

            Babylon.js

            by BabylonJS

            Try Top Libraries by oyvind-stromsvik

            bootcamp-example-project

            by oyvind-stromsvikJavaScript

            reap-unofficial-unity-port

            by oyvind-stromsvikC#

            survival-shooter-extended

            by oyvind-stromsvikC#

            asteroids

            by oyvind-stromsvikC#

            the-car-tutorial

            by oyvind-stromsvikC#