HATPC remake
 
 
 
Go to file
En Yi 939fe7bc4e Allow boulder pushing when swimming 2023-08-17 21:10:11 +08:00
res Add test assets 2023-08-14 22:21:39 +08:00
scenes Allow boulder pushing when swimming 2023-08-17 21:10:11 +08:00
tests Add simple test for mempool 2023-08-13 14:54:10 +08:00
.gitignore Update gitignore 2023-05-28 14:58:10 +08:00
CMakeLists.txt Implement level pack loading and testing 2023-08-14 12:16:15 +08:00
Conventions.txt Attempt to apply code style consitency 2023-04-15 22:52:38 +08:00
LICENSE Add MIT license 2023-08-14 23:10:11 +08:00
README.md Add README 2023-05-28 15:18:03 +08:00
assets_test.c Add horizontal flip to sprites 2023-05-23 21:33:05 +08:00
build.sh Add convenience scripts 2023-03-11 22:50:17 +08:00
entManager_test.c Refactor Entity Tag out of EC 2023-05-29 21:41:17 +08:00
level_load_test.c Add test assets 2023-08-14 22:21:39 +08:00
lsan_supp.txt Add convenience scripts 2023-03-11 22:50:17 +08:00
main.c Add Sandbox button in main program 2023-08-14 21:54:25 +08:00
menu_test.c Slightly rework scene rendering 2023-05-07 16:25:03 +08:00
run.sh Add convenience scripts 2023-03-11 22:50:17 +08:00
run_tests.sh Add simple test for mempool 2023-08-13 14:54:10 +08:00
scene_test.c Add spikes sprite support 2023-08-16 21:21:55 +08:00
water_test.c Add test assets 2023-08-14 22:21:39 +08:00

README.md

Some Game Engine

An attempt to create a game with the ECS architecture in C. This is mostly a learning experience about what goes into a game engine.

The goal of the project is to make a game similar to Hannah and The Pirate Caves from Neopets. I thought that's a nice game to aim for, plus I have fond memories of it. It is not a full-on remake!

DISCLAIMER: There is no obligations tied to this project. For all I know, the project can just get abandoned at anytime. I WILL take my time with this project.

Implementation Notes

As mentioned, this is mostly a learning experience, so certain things are implemented for the sake of learning. However, there are certain things that I didn't bother with because dealing with them will open up another can of worms. Either that or I find it too large of a feature to implement on my own without hating my existance. For these, I will use libraries.

As this point of time (28/5/2023), these are the things I won't bother for now:

  • Game rendering: I remember dealing with OpenGL for a little bit and it being a not-so-pleasant experience. This is also a large topic on its own too.
  • Camera System: This is an interesting one. I would really like to implement this. However, this is sort of tied to game rendering, so no.
  • Windows and raw input handling: Not keen on this.
  • GUI: I'm not about to roll my own GUI library for this.
  • Data structures: Will only do it for specific reasons. Otherwise, use a library.

Libraries used:

  • raylib [link] + raygui [link]: MVP of this project. Basically the backbone of the game. I've use it for some past projects and it's always a pleasant experience. Can recommend!
  • sc [link]: For data structures. The library targets server backend usage, so it might not be the most suitable usage, and is likely to be replaced. However, it has been a good experience using this library, so no complaints from me.

Progress

The engine features:

  • An Entity-Component framework with an Entity Manager + memory pool that is specific for this project
  • AABB collision system + Grid-based Broad phase collision detection
  • Scene management and transition
  • Assets management and sprite transition

Game progress:

  • Simple main menu + sandbox scenes
  • Player movement
  • Tiles: Solid tiles, water, One-way platforms and ladders
  • Crates

Build Instruction

  1. Build and install raylib.
  2. Clone this repository.
  3. mkdir build && cd build && cmake ..
  4. Run: ./HATPC_remake

Depending on you raylib installation, you may need to specify its directory. Use the RAYLIB_DIR variable to indicate raylib's installation path when running the CMake:

cmake -DCMAKE_BUILD_TYPE=Release -DRAYLIB_DIR=/usr/local/lib ..

There are also other binaries generated for testing purposes. Feel free to try them out.

Note on assets

This repository will not contain the assets used in the game, such as fonts, art, and sfx. However, the program should still run without those. Assets are placed in the res/ directory.