From 730d44ebeef430e2b910269dc622c4eaffc98a53 Mon Sep 17 00:00:00 2001 From: wgroeneveld Date: Thu, 29 Nov 2018 14:18:02 +0100 Subject: [PATCH] update readme --- README.md | 30 ++++++++++++++++++++++++++---- img/design.png | Bin 0 -> 25192 bytes 2 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 img/design.png diff --git a/README.md b/README.md index 727cfd6..5c12ea4 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,17 @@ auto paddle = SpriteBuilder() To leverage C++11's abilities combined with a clear object-oriented approach using abstraction to hide the hexadecimal addresses? That's the objective of this engine. -**Speed is NOT my primary concern**! I'm not a C(++) expert and I value clean readable code above speedy algorithms. This is just a concept. That said, feel free to fork or provide patches for sloppy work (that will be present). Thank you! +**Speed and size are NOT the primary concern**! We value clean readable code above speedy algorithms. This is just a proof-of-concept, intricate games with a lot of data will never work because memory limitations. That said, feel free to fork and/or provide patches. +The C++ cross-compiler and the GBA work, but create more metadata than the typical C cross-compiler. Take a look at the file size of the following binaries: + +``` +-rwxr-xr-x 1 staff 8320 Jul 25 13:54 main_c.gba +-rwxr-xr-x 1 staff 23328 Jul 22 20:36 main_cpp.gba +-rwxr-xr-x 1 staff 24032 Jul 25 13:55 main_cpp_stl.gba +``` + +The C++ ROM is 280% bigger than the C ROM, and if you include , even 288% bigger - from 8K to 23K! +Emulating big files is not a problem, and running them on the actual hardware is still possible using cartridges like the EZ-FLASH Omega. #### GBA sprite engine @@ -43,9 +53,13 @@ It's compiled as a static library for your convenience. Simply link with the lib A portion of [ToncLib](https://www.coranac.com/man/tonclib/main.htm) has been used as a low-level GBA accessor. If you know what you're doing, you can safely use those, headers are in ``. -BIOS methods and Sin/Cos lookup tables are also compiled. +BIOS methods and Sin/Cos lookup tables are also compiled in Assembly, as `sin_lut`. +Design overview: +![design](https://github.com/wgroeneveld/gba-sprite-engine/blob/master/img/design.png?raw=true) + +Colored blocks are to be implemented in your own game. See below, in section "implementing your game". ### Implementing your own GBA Game @@ -142,6 +156,8 @@ Each sprite has own raw data, so there's no shared sprite image (for the better) > ./../grit pic1.png pic2.png kul.png -ftc -pS -gB8 -O shared.c +Consult the [Grit list of cmdline options](https://www.coranac.com/man/grit/html/grit.htm) for more information. + #### Sound The engine supports **sounds** and **background music** using GBA's Active Sound channel A and B. It's a simple implementation meaning no mixing in either channels (but A and B are mixed). @@ -196,8 +212,14 @@ The demos will be in `cmake-build-debug/demox/demoname.gba`. Things you might need to change in `CMakeLists.txt` files: -1. I'm assuming your GBA cross compiler is in your `$PATH`. If it's not, add an absolute path to `SET(CMAKE_C_COMPILER arm-none-eabi-gcc)` etc. -2. I'm assuming your Google Test Library is compiled and in your `$GTEST_DIR` path. If not, add an absolute path to: `SET(GTEST_LIBRARY "/Users/jefklak/CLionProjects/googletest-release-1.8.0/googletest")`. The linker searches for 'ligbtest.a' and 'liggtest_main.a' - if you're on Linux it'll likely be a .so extension. +1. gba-sprite-engine assumes your GBA cross-compiler is in your `$PATH`. If it's not, add an absolute path to `SET(CMAKE_C_COMPILER arm-none-eabi-gcc)` etc. +2. gba-sprite-engine assumes your Google Test Library is compiled and in your `$GTEST_DIR` path. If not, add an absolute path to: `SET(GTEST_LIBRARY "/Users/jefklak/CLionProjects/googletest-release-1.8.0/googletest")`. The linker searches for 'ligbtest.a' and 'liggtest_main.a' - if you're on Linux it'll likely be a .so extension. + +##### Building using Windows + +Tested ander working under Windows 10. Use [MinGW](http://www.mingw.org) or Cygwin, and add the `-G "Unix Makefiles"` option to your `cmake ./../` command. + +Cygwin is also a possibility, but combined with CLion the Unix and Windows path structures will clash. If using an IDE like CLion, resort to using MinGW. #### Running unit tests diff --git a/img/design.png b/img/design.png new file mode 100644 index 0000000000000000000000000000000000000000..ab2c98c9fe07b7bd394455c3e6c62c6b39052dd2 GIT binary patch literal 25192 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%0ABcQ;_dKDzUEP({X=S0$l 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 moSJwc61bVxIGA;OvS4Iz;m!+z3*bLUKy