TooOld2Rock'nRoll 9bdd6bbdd2 Cleaning includes... 3 veckor sedan
..
doc bb3e912e75 update methods working in sync with thread 4 månader sedan
inc 9bdd6bbdd2 Cleaning includes... 3 veckor sedan
shaders ce60248cc4 finish replacing resources 1 år sedan
src 9bdd6bbdd2 Cleaning includes... 3 veckor sedan
COPYING 936c42f990 finish the first draft of the readme files 1 år sedan
Doxyfile 64828eabb9 updated readme files 11 månader sedan
Makefile bfbdfff7ab Shader program headers were being copied wrong. 1 månad sedan
README.md 474aa26724 LinkedList can handle templates, makes things easier, but require explicit instantiation of templates. 2 månader sedan

README.md

Arcade Fighter

The game engine that teaches! The game engine that teaches!

The Arcade Fighter Library is a studying project.

It is NOT in any way or form a stable and robust commercial game engine, it is offered as is with no guaranties. We may get there one day, but for now, it's simply not the objective of this project to offer a professional solution. It should fill all the needs for a complete and well round game though, just don't expect live support.

What we mean by a studying project is that it's meant for people studying programming (mainly C/C++), software engineering and game design in all its forms and levels. Maybe not well suited for complete beginners flying solo, but it offers a transparent box for the initiated to crawl through and play with. Our code tries to be easy to read and well documented as much as possible, we follow good practices and well established standards so you may follow too, all our sources for ideas and algorithms are stated at the classes headers for the ones wishing for a deep dive on specific subjects.

For now, we'll stay focused in being a "programmer's engine", since there is A LOT to be done just in that sense, but we will eventually implement some features and tools to make life more enjoyable for game designers and graphical artist. Although, in essence, this will still be a programmers oriented project.

The true power of this project though is way way other than building good games! No, to at all!

We intend on tricking you into learning and even to study of your own volition (gasp).

Dependencies

The following list of dependencies are for a clean Debian 12 installation, it should be very similar to any other distro.

Be sure the drivers for your graphics card are updated, check the OpenGl with glxinfo | grep "OpenGL version". The minimal version is 4.3 if you need asynchronous error logging for OpenGl, but it can be downgraded to a lesser version otherwise.

Accept any extra dependencies the package manager asks to download.

sudo apt-get install build-essential libsdl2-dev libglm-dev libfmt-dev

Optional packages:

sudo apt-get install git doxygen cpputest

ArcadeFighter also depends on glad to load OpenGL's bindings, a copy of glad is already provided for OpenGl Core 4.3. If you need to change the version or extend its properties, a new file can be generated at Glad² Generator.

How to use the project

Although this engine is perfectly capable of supporting any kind of 2D game, we chouse to focus on classic 2D style arcade fighting games.

The source code is well documented and the project file structure should be simple to follow for anyone with a little of C/C++ programming experience.

A much more rich HTML documentation can be generated using Doxygen, just go to the root of the library and run the command doxygen and you can access it through doc/ArcadeFighterDoc_index.html

We are assuming most people will try to build a fighting game in the stile of arcade games like Street Fighter, King of Fighters or Samurai Showdown. If you are starting with game development, take some time to follow the examples already provided and pay attention specially to the sub classes and base classes comment sections, there are many external resources that can help you in your present and future endeavors. Just play around until something breaks, try to modify the characters behavior, the sprite sheets, experiment with different game loop regimes and, eventually, build something yours just by substituting the content with your own.

More advanced users will probably just take a overlook at the ins and outs and discard the example altogether. The important bits are the startup sequence, the loading procedures and abstract methods in most base classes. The classes comment section has more specif examples of how to deal with each class isolated. In all honest, even classes like ArcadeFighter (the highest level class, abstracting all the other engine's functionalities) are just suggestions of how it could be done in your own game.

You are expected to compile the engine as a static library and link it with your project, but it is perfectly valid to compile everything together if you intend on modifying the engine frequently and extensively.

But! Those are just means to an end, we really want to trick you into being a better [programmer | architect | designer | artist | musician?] and this project offers lots and lots of opportunities for you to dive into any of those subjects at any time.

Compiling

This library was designed and developed using GNU/Linux and FOSS in mind, you can manage to compile and run under Windows within WSL in fairly the same manner and it is untested on OSX.

The following instructions are for building the stand alone ArcadeFighter Library.

The command make [-h | --help] should output a complete list of accepted options to use.

Calling make -j all will compile the Library and its dependencies, generating a static library file called libArcadeFighter.a. We recommend the use of the -j parameter to the make command as to speed up the build using all the available CPU cores/threads. If you don't know what to do with that file, check the ArcadeFighter Demo Makefile to have a better idea.

If you did not alter the code in any form and encountered errors during compilation, take a look at the previous list of dependencies and check they are all correctly installed in your system. If the error persists, check the troubleshooting list at the end.

Main Author

Most of ArcadeFighter was created by André Frazatto (AKA TooOld2Rock'nRoll)

Credits

This project would not be possible without people like Joey de Vries from LearnOpenGL and Bob Nystrom from Game Programming Patterns that generously donated their experience and time to build those resources and offer it online for free, helping to inspire countless others like myself.

License

The ArcadeFighter Demo is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

The ArcadeFighter Demo 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. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.

ArcadeFighter uses glad to load OpenGL's bindings. The generated code from glad is any of Public Domain, WTFPL or CC0.

ArcadeFighter uses the STB library to load image files. Sean Barrett's STB library is published under the MIT License or Public Domain.

ArcadeFighter rendering is derivative of Breakout. Breakout is free software: you can redistribute it and/or modify it under the terms of the CC BY 4.0 license as published by Creative Commons, either version 4 of the License, or (at your option) any later version.

ArcadeFighter uses CppUTest to implement and run Unit Tests. CppUTest framework is published under the BSD 3-Clause "New" or "Revised" License and requires that the following disclaimer is displayed in our project/documentation distribution:

Copyright (c) 2007, Michael Feathers, James Grenning and Bas Vodde All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

(If you don't understand the point of these licenses and don't understand the difference between Open Source and Free Open Source Software (or FOSS for short), this may be a good reading The GNU Project)

Contact

If your problem or subject can't be solved through one of our other social links, you can get in contact true , we just can't promise to return your e-mail in timely fashion.


This is README.md for the ArcadeFighter Library.