Giter Club home page Giter Club logo

alxm / faur Goto Github PK

View Code? Open in Web Editor NEW
80.0 4.0 11.0 4.73 MB

⚒️✨ My personal C games framework. 2D graphics, sound, inputs, states, ECS, and misc utils for data, files, math, memory, strings, time, and more. Builds for Linux, Windows, Web, and embedded devices.

Home Page: https://www.alxm.org

License: GNU General Public License v3.0

C 90.24% Python 3.69% C++ 1.67% Shell 0.02% Makefile 3.45% HTML 0.93%
c c99 caanoo gamedev gamedev-framework gp2x gp2x-wiz linux mingw pandora-console

faur's Introduction

Faur

Faur is my personal C framework for my hobby video games.

Features include software or accelerated 2D graphics, abstractions for inputs and sound, application state management, entity-component-system model, and utilities to help with data, files, math, memory, strings, time, and more.

Faur builds native on Linux and cross-compiles for Web, Windows, and some embedded devices like the GP2X and Gamebuino handhelds. The build system uses GNU Make 4.1 and Python 3.6 or later.

Install on Debian-based Linux

$ sudo apt install build-essential git python3 python3-pil
$ sudo apt install libsdl2-dev libsdl2-mixer-dev libpng-dev
$ git clone https://github.com/alxm/faur.git

Create New Project

$ faur/bin/faur-new --name hello
$ cd hello/build/make
$ make run FAUR_PATH=../../../faur

Hello, World screenshot

Move the square with the arrow keys or with a game controller.

Project Files

$ tree hello/

hello/
├── build/
│   └── make/
│       └── Makefile
└── src/
    └── main.c

hello/src/main.c

#include <faur.h>

void f_main(void)
{
    static struct {
        int x, y;
        FButton *up, *down, *left, *right;
    } context;

    F_STATE_INIT
    {
        context.x = f_screen_sizeGetWidth() / 2;
        context.y = f_screen_sizeGetHeight() / 2;

        context.up = f_button_new();
        f_button_bindKey(context.up, F_KEY_UP);
        f_button_bindButton(context.up, F_BUTTON_UP);

        context.down = f_button_new();
        f_button_bindKey(context.down, F_KEY_DOWN);
        f_button_bindButton(context.down, F_BUTTON_DOWN);

        context.left = f_button_new();
        f_button_bindKey(context.left, F_KEY_LEFT);
        f_button_bindButton(context.left, F_BUTTON_LEFT);

        context.right = f_button_new();
        f_button_bindKey(context.right, F_KEY_RIGHT);
        f_button_bindButton(context.right, F_BUTTON_RIGHT);
    }

    F_STATE_TICK
    {
        if(f_button_pressGet(context.up)) context.y--;
        if(f_button_pressGet(context.down)) context.y++;
        if(f_button_pressGet(context.left)) context.x--;
        if(f_button_pressGet(context.right)) context.x++;
    }

    F_STATE_DRAW
    {
        f_color_colorSetHex(0xaaff88);
        f_draw_fill();

        f_color_colorSetHex(0xffaa44);
        f_draw_rectangle(context.x - 40, context.y - 40, 80, 80);
    }

    F_STATE_FREE
    {
        f_button_free(context.up);
        f_button_free(context.down);
        f_button_free(context.left);
        f_button_free(context.right);
    }
}

hello/build/make/Makefile

F_CONFIG_APP_AUTHOR := <name>
F_CONFIG_APP_NAME := hello

include $(FAUR_PATH)/make/default.mk

Cross-Compile for Other Platforms

I started Faur by collecting my GP2X games' shared code into a static library. Over time I added support for more platforms:

Target Host Toolchain Dependencies More Info
Desktop
Linux (SDL 2) Linux OS build tools Debian: libsdl2-dev libsdl2-mixer-dev libpng-dev valgrind

Fedora: SDL2-devel SDL2_mixer-devel libpng-devel libubsan valgrind
Linux (SDL 1.2) Linux OS build tools Debian: libsdl1.2-dev libsdl-mixer1.2-dev libpng-dev valgrind

Fedora: sdl12-compat-devel SDL_mixer-devel libpng-devel libubsan valgrind
FreeBSD FreeBSD OS build tools gmake devel/sdl20 audio/sdl2_mixer Building on FreeBSD
Windows Linux MinGW-w64 Debian: mingw-w64 libz-mingw-w64-dev and local builds of SDL2 SDL2_mixer libpng

Fedora: mingw64-gcc mingw64-gcc-c++ mingw64-SDL2 mingw64-SDL2_mixer mingw64-libpng mingw64-zlib
Cross-compiling with MinGW
Web (Wasm) Linux Emscripten Emscripten Notes
Embedded Linux
GP2X, GP2X Wiz Linux Open2x SDK Debian: ia32-libs Open2x Project
Caanoo Linux GPH SDK Debian: ia32-libs Caanoo SDK for Linux
Open Pandora Linux Pandora SDK Debian: ia32-libs libxml2-utils Open Pandora Forums
Arduino
Gamebuino META Linux Arduino 1.8.13, Arduino SAMD Boards 1.8.11, Gamebuino META Boards 1.2.2 Arduino: Gamebuino META 1.3

Debian: ffmpeg

Fedora: ffmpeg-free
Gamebuino META Makefile
ODROID-GO Linux Arduino 1.8.13, Arduino-ESP32 1.0.6 Arduino: ODROID-GO 1.0.0

Debian: python3-serial python-is-python3

Fedora: python3-pyserial
ODROID Wiki

The default toolchain paths are in make/global/sdk.mk, and they can be overridden in a project Makefile or globally in ~/.config/faur/sdk.mk. To build for different targets, change include $(FAUR_PATH)/make/default.mk to use other files from $(FAUR_PATH)/make.

License

Copyright 2010-2024 Alex Margarit ([email protected])

Faur is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. The project is named after the old Romanian word faur, sometimes used in fables to mean wizard blacksmith. ⚒️✨

Contributing

This is my personal framework and ideas playground, a solo project. You are welcome to check it out and use it under the terms of the license, but I do not take pull requests to this repo.

faur's People

Contributors

alxm avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.