A Scala-based interpretation of the original Helltakers game, ISCtaker challenges players to navigate puzzle-like levels filled with moving obstacles, locked doors, and quirky demons. With each level growing in complexity, you'll need skill and strategy to outmaneuver skeletons, push rocks out of the way, and ultimately reach your demon companion.
- Multiple Levels
Progress through increasingly challenging stages as you refine your puzzle-solving skills. - Unique Entities & Animations
Encounter various entities—skeletons, rocks, doors, and demons—each with their own behavior and animations. - Interactive Transitions
Enjoy seamless screen transitions and narrative interludes between levels. - Original Music & Sound Effects
Immerse yourself in the experience with engaging background music and fitting sound effects. - Keyboard-Based Controls
Use simple, intuitive keyboard commands to guide your character and navigate menus.
Experience the charming style and 3fps animations as you progress through each puzzle.
- Clone the repository:
git clone https://github.com/louis272/ISCtaker.git
- Open in IntelliJ IDEA (or any Scala-compatible IDE):
- Import the cloned repository as an existing project.
- Ensure that you have the correct Scala SDK or JDK configurations.
Tip: We used Scala SDK 2.13.14.
- Run/Debug the Project:
- Locate the main class or run configuration in your IDE.
- Press the run/debug button to start your journey.
Tip: If you prefer using the command line, you can use SBT (Scala Build Tool) to compile and run the game.
- Objective: Reach the demon in each level to progress.
- Movement: Use the arrow keys to move your character across the grid.
- Interactions:
- Press
R
to reset the current level if you get stuck. - Press
L
to reveal hints or advice. - Press
Esc
to hide these hints.
- Press
Use your moves carefully—some obstacles can be pushed or destroyed, while others require keys to bypass.
- Player
The hero you control. Maneuver across the grid, collect items, and solve puzzles. - Demon
Your level’s goal! Reach the demon to complete the stage and unlock new levels. - Skeleton
A pushable obstacle that can be destroyed. Maneuver skeletons to clear paths or create new routes. - Rock
An immovable obstacle that blocks your path but cannot be destroyed. - Door
Pass through only after unlocking with a collected key. - Key
A crucial item needed to unlock doors and progress further.
The ISCtaker project is structured to modularly handle different aspects of the game, ensuring readability, maintainability, and scalability. Here’s an overview:
This serves as the entry point of the game, initializing the game logic, levels, and graphical components. Key functions include:
- Game Loop: The main loop synchronizes game logic and renders frames using
FunGraphics
. - Event Handling: Captures player input to control movement, interactions, and special actions.
- Level Management: Handles loading, transitioning, and resetting levels, alongside rendering game elements dynamically.
- Audio Integration: Plays background music and sound effects corresponding to in-game events (e.g., moving objects, picking keys).
Defines the EntityRender
class for managing graphical representations of entities:
- Frames: Stores paths to sprite or animation frames for dynamic rendering.
- Scaling: Adjusts the size of entities based on their context in the game world.
Encapsulates the logic for individual levels, including:
- Grid Representation: Uses 2D arrays to define the layout of entities and traps.
- Attributes: Tracks maximum moves, player possession of keys, and the presence of dynamic traps.
- Initialization: Provides a method for setting up multiple levels with predefined configurations.
Handles audio playback using the Java Sound API:
- Loading: Reads audio files into a reusable
Clip
. - Playback Control: Methods for playing, stopping, and resetting audio during gameplay.
All graphical assets (sprites, backgrounds, etc.) are referenced by their file paths and rendered using FunGraphics
:
- Dynamic Rendering: Adjusts visuals based on entity state and game logic.
- Transitions and Effects: Includes visual transitions between levels and animations for player interactions.
The game logic is built around responding to player inputs and updating the game state accordingly:
- Collision Detection: Checks for valid moves based on the current grid state.
- Object Interactions: Handles pushing, destroying, and unlocking objects like rocks and doors.
- Trap Mechanics: Toggles the state of traps after player actions to increase challenge.
This modular structure ensures that each component can be individually tested and extended. For example, new levels or entities can be added with minimal changes to the existing codebase.
- @louis272 – Developer
- @Sebastian0211-vs – Developer
- Gaëtan Veuillet – Illustrator of all the “Mudry" Sprites
Contributions, bug reports, and feature requests are welcome! Here’s how you can help:
- Fork this repository.
- Create a branch for your feature/bugfix:
git checkout -b feature/super-cool-feature
- Commit your changes:
git commit -m "Add super cool feature"
- Push to your forked repository and submit a Pull Request.
Have questions or feedback? Feel free to reach out by creating an issue or submitting a pull request. We appreciate your interest in ISCtaker—thanks for playing!