an engineless RPG.
- About
- Demo
- Installation
- Features
- Tech stack
- Programming techniques
- Class hierarchy
- Acknowledgements
- References
- License
- Support
This repository contains the source code for a university project from the University of Engineering and Technology (VNU-UET). The project was completed as part of the Advanced Programming (2324II_INT2215_25) course, instructed by Nguyễn Việt Anh and Hoàng Thị Ngọc Trang. The project was taken independently by student Nguyễn Tư Đức (ID: 23021534).
demo-12-5-2024-compressed.mp4
None required.
git clone https://github.com/NTDuck/8964
cd 8964
mingw32-make
mingw32-make run
Compile-time and runtime errors are unlikely to occur.
sudo apt-get update
sudo apt-get install g++ make libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsdl2-mixer-dev zlib1g-dev
None required.
Same as Windows.
make
chmod +x ./build/8964
make run
Linux builds, due to unknown reasons, are more prone to runtime segmentation faults.
sudo pacman -Syu
sudo pacman -S gcc make sdl2 sdl2_image sdl2_ttf sdl2_mixer zlib
None required.
Same as Windows.
make
chmod +x ./build/8964
make run
Linux builds, due to unknown reasons, are more prone to runtime segmentation faults.
Official os-specific releases are not available, and compatibility layers (e.g. wine) are not tested.
ESC
, when held, exits the gameF1
, while in-game, returns to the menuF4
, while in-game, reloads the current levelF5
, while in-game, toggles between camera anglesF6
toggles grayscale
- Movement: press
W
(up),A
(left),S
(down), andD
(right) keys for navigation - Sprint: holding down
Shift
increases the player's speed - Interaction: press
E
to interact with certain objects and engage with in-game dialogues - Melee attack: press
Space
to execute a melee attack - Ranged attack: press
1
,2
,3
,4
, and5
to launch unique sets of projectiles
- Non-interactables do not offer any form of interaction
- Interactables, as the name suggests, can be interacted
- Teleporter entities, upon being trampled, immediately teleport the player to a different location
- Hostile entities, within a specified range, pursue and attempt to attack the player
- Surge projectiles are tile-bound projectiles
Encompass common graphical elements such as Buttons, Progress bars, and Dialogue boxes. Offer interactivity through mouse and/or keyboard inputs.
Encapsulate all operations within a game state, therefore facilitating modular design and fostering adherence to SoC.
-
level-prelude
-
level-prologue-movement
-
level-prologue-combat
-
level-suffering-empty-0
-
level-suffering-1-0
-
level-suffering-1-1
-
level-suffering-2-0
-
level-suffering-2-1
-
level-suffering-3-0
-
level-suffering-3-1
-
level-suffering-3-2
-
level-status-quo-0
-
level-status-quo-1
-
level-status-quo-2
-
level-status-quo-3
-
level-status-quo-4
-
level-roundtable-empty
-
level-roundtable-first-proposal
-
level-roundtable-second-proposal
-
level-roundtable-final-proposal
-
level-interlude
-
level-white-space
- SDL2 2.28.3, SDL_image 2.6.3, SDL_ttf 2.20.2, SDL_mixer 2.6.3
- JSON for Modern C++ 3.11.2
- pugixml 1.14
- zlib 1.3 (with Microsoft Github's precompiled zlib.dll)
- Tiled 1.10.2 for level generation
- KRMisha's Makefile for cross-platform compilation
- Sprite Sheet Packer for spritesheet concatenation
Compiler: MinGW GCC 13.2.0 (64-bit)
Build system: GNU Make 4.4.1
Version control: Git 2.40.0.windows.1
Uses OOP with CRTP and Explicit Template Instantiation.
- Custom hash functors and operator overloading
- LRU Cache using double-ended queue and hashmap
- Texture manipulation, grayscale conversion
- Zlib decompression
- Base64 decoding
- Hexadecimal to RGB conversion
- A* search algorithm, Dijkstra pathfinding algorithm, Greedy Best-First-Search algorithm (both reverted from A*)
- Supports manipulation & retrieval of JSON/XML data formats (in-memory & from files)
- Uses SFINAE and Parameter pack
- Uses preprocessor directives, macros, and templates extensively
- Uses a manual garbage collection system
- Supports distribution & retrieval of custom events
- Supports frame-independent animation
- Supports IDE-independent, cross-platform compilation
warning: outdated
We would like to credit certain assets used in this project. Licenses, if any, should be included in the links below.
- 1-bit Pulp-compliant Tileset
- Minimalistic Tileset Assets
- OMORI Game Assets
- Hana Caraka Base Character
- Hooded Protagonist
- Satyr
- Chick-Boy Animation Pack
- Plague Crow
- Dark Samurai (Prestige Inkshadow Yasuo)
- Red Hood
- Nightborne Warrior (Kassadin)
- OMORI OST
- Dearly Departed
- Persistent repetition of phrases
- Wilhelm Scream SFX
- Shoe on Wet Ground SFX, Heavy Clump on Gravel SFX
- Numerous BGM & SFX from OMORI
- Lucky Star PS2 Bonus Disc
We would also like to recognize reknowned games from which certain concepts and mechanics in this project drew inspiration, which include but are not limited to Elden Ring, Omori, Undertale, and The Coffin of Andy and Leyley.
- Cross-platform SDL2 installation & configuration
- C++ documentation
- SDL2 tutorial
- SDL2 documentation
- Stackoverflow
This project is licensed under the BSD-3-Clause license.
For support, please email [email protected].