Giter Site home page Giter Site logo

eduard-permyakov / permafrost-engine Goto Github PK

View Code? Open in Web Editor NEW
2.6K 58.0 109.0 287.08 MB

An OpenGL RTS game engine written in C

License: GNU General Public License v3.0

Makefile 0.13% Python 8.60% GLSL 2.88% C 88.26% Assembly 0.13%
opengl rendering-3d-graphics game-engine-3d game-engine c python rts rts-engine real-time-strategy

permafrost-engine's Introduction

Logo

Permafrost Engine is an OpenGL 3.3 Real Time Strategy game engine written in C. It is made in the image of old classics, but incorporating some modern ideas.

Engine Showcase

everglory-banner

EVERGLORY is the flagship game developed using Permafrost Engine.

Download the free (or donate what-you-want) demo on itch.io or on Steam. With the demo you also get access to all the scripts and assets powering the gameplay to learn from and modify as you wish.

screenshot-01 screenshot-02 screenshot-03 screenshot-04 screenshot-05 screenshot-06 screenshot-07 screenshot-08 screenshot-09 screenshot-10 screenshot-11 screenshot-12 screenshot-13

Engine Summary

  • OpenGL 3.3 programmable pipeline (more modern extensions used where available)
  • Custom ASCII model format with Blender export script
  • Skeletal animation with GPU skinning
  • Phong reflection model with materials
  • Directional light shadow mapping
  • Batched rendering with dynamic batches
  • Ringbuffer-based streaming of data to GPU
  • RTS camera, FPS camera
  • Rendering of tile-based map parsed from ASCII file
  • Water rendering (including reflection, refraction, soft edge effects)
  • Export/Import of game entites to/from ASCII files
  • Engine internals exposed to Python 2.7 for scripting
  • Event system
  • UI framework (Nuklear-based)
  • Efficient raycasting
  • Map/Scene editor
  • Pause/Resume system
  • Fast rendering of huge maps
  • Map navigation graph/grid generation
  • Implementation of 'boids' steering/flocking behaviours
  • Hierarchial flow field pathfinding
  • Handling of dynamic obstacles in pathfinding
  • Dynamic collision avoidance of multiple entities using Hybrid Reciprocal Velocity Obstacles and the ClearPath algorithm
  • Formation-based unit movement and placement
  • Optimal formation re-shuffling using the Hungarian Algorithm
  • Pathfinding of different kinds/sizes of units (using "navigation layers")
  • Pathfinding of Land, Water, and Air units
  • Movement and pathfinding computations accelerated with parallelism
  • Efficient spatial indexing using a quadtree
  • Efficient real-time tracking of entity membership to dynamic spatial regions
  • Audio system supporting positional effects and multiple channels of global effects
  • RTS minimap
  • RTS-style unit selection
  • RTS unit combat system
  • RTS fog-of-war system
  • RTS base-building mechanics
  • Configurable automation of workers and production
  • RTS resource gathering (and transporting) mechanics
  • RTS unit garrison and transport mechanics
  • Ranged combat using an efficient projectile physics simulation
  • Support for different resolutions and aspect ratios
  • Configurable graphics settings
  • Serialization and deserialization of the entire Python interpreter state
  • Saving and restoring of any engine session, including all Python-defined state
  • Multithreaded: simulation and rendering in a 2-stage pipeline
  • Advanced debug visualizations and profiling instrumentatation
  • Fiber system for putting work in lightweight tasks that are scheduled in userspace
  • Fiber-backed Python tasks, allowing cooperative multitasking logic in Python
  • Cross-platform (Linux and Windows)
  • Windows launcher to automatically capture a minidump and stdout, stderr logs on application error

Dependencies

  • SDL2 2.30.0
  • GLEW 2.2.0
  • python 2.7.17
  • openal-soft 1.21.1
  • stb_image.h, stb_image_resize.h
  • khash.h
  • nuklear.h

All dependencies can be built from source and distributed along with the game binary if desired. Python is built with a subset of the default modules and packaged with a trimmed-down stdlib.

Building Permafrost Engine

For Linux

  1. git clone https://github.com/eduard-permyakov/permafrost-engine.git
  2. cd permafrost-engine
  3. make deps (to build the shared library dependencies to ./lib)
  4. make pf

Now you can invoke make run to launch the demo or make run_editor to launch the map editor. Optionally, invoke make launchers to create the ./demo and ./editor binaries which don't require any arguments.

For Windows

The source code can be built using the mingw-w64 cross-compilation toolchain (http://mingw-w64.org/doku.php) using largely the same steps as for Linux. Passing PLAT=WINDOWS to the make environment is the only required change.

The compliation can either be done on a Linux host, or natively on Windows using MSYS2 (https://www.msys2.org/).

  1. git clone https://github.com/eduard-permyakov/permafrost-engine.git
  2. cd permafrost-engine
  3. make deps PLAT=WINDOWS
  4. make pf PLAT=WINDOWS
  5. make launchers PLAT=WINDOWS

Alternatively, a Visual Studio 2022 solution file is provided in the root directory of the project.

License

Permafrost Engine is licensed under the GPLv3, with a special linking exception.

Devlog

Follow the development of Permafrost Engine and EVERGLORY on YouTube.

Indie RTS Devlog #1: Introducing Permafrost Engine

Indie RTS Devlog #2: Saving The Python Interpreter

Indie RTS Devlog #3: Group Pathfinding

EVERGLORY: Teaser Trailer #1

Indie RTS Devlog #4: Fog of War

Indie RTS Devlog #5: Performance Optimization

Indie RTS Devlog #6: Fibers, Async Jobs

Indie RTS Devlog #7: Main Menu UI, Loading Missions

Indie RTS Devlog #8: Python Tasks + Making Pong!

Indie RTS Devlog #9: Base Building

Indie RTS Devlog #10: Demo Gameplay

Indie RTS Devlog #11: Resource Gathering, Game Design

Indie RTS Devlog #12: Crafting Units

Indie RTS Devlog #13: Large Unit Pathfinding

Indie RTS Devlog #14: Projectiles, Big Battles

EVERGLORY - Official Trailer (2021 Indie RTS)

Indie RTS Devlog #15: Unit Formations

EVERGLORY (Indie RTS Game) - Pathfinding Showcase

Indie RTS Devlog #16: Land, Water, and Air

Indie RTS Devlog #17: Economy + NEW DEMO

Comments/Questions

Comments or questions regarding the project or the source code? E-mail: [email protected]. Discuss EVERGLORY and its' development on Discord. If you have a useful fix for a non-trivial engine issue, feel free to make a PR. Be warned that I will scrutinize every patch to make sure it meets my personal quality standards for the engine code. It you wish to evolve the engine in some way and want the changes to be upstreamed, then do get in touch to discuss it.

permafrost-engine's People

Contributors

draczer01 avatar eduard-permyakov avatar tujh-rf 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  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  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

permafrost-engine's Issues

SDL2 linker issue building

Following the build instructions for windows, and make pf PLAT=WINDOWS fails when building on windows. I get this error:
image

Other sources say this normally comes in the python-dev package, but that's not available for windows.

[Security] SDL2 used in this project is vulnerable

CVE-2021-33657 is a security vulnerability in SDL2, which is used in this project. The root cause of this CVE is that map which is allocated in Map1toN() or Map1to1 isn't always created as a full 256-entry map. A bmp image can cause heap buffer overflow in Blit1to3(), when the pixel value in pixel array src is equal or larger than the number of colors stored in map.
you can easily fix this vulnerability by applying this patch.

Can't move groups

In the demo, if I select more than one unit and attempt to move them by right-clicking, the process dies with an assertion failure:

pf: src/navigation//nav.c:1000: N_DesiredVelocity: Assertion `ret == id' failed.

I have no problems moving single units, and I think this problem occurs with any two or more units regardless of type.

Stuttering demo GIFs

flock.gif and pathfinding.gif stutter heavily as committed in c494267. This appears to be a capture error, not a playback issue: there are lots of blank frames in the GIFS (e.g., in flock.gif, frames 26-47, 49, 51, 54, 58...).

I was going to capture some replacements myself (and still might), but I'm having some trouble building the project (segfault compiling the Python dependency), so I thought I'd just create an issue for now.

OSX support

I'd love to try this out on my Mac. I think the code should run fine on a mac, but there doesn't seem to be any OSX support included in the makefile.

Assertion `SDL_ThreadID() == g_render_thread_id' failed.

Platform

Latest arch linux

Steps to reproduce
rm -r deps/SDL2
git clone --depth 1 https://github.com/libsdl-org/SDL/ deps/SDL2 (related to #29)
make deps -j16
make pf -j16
make run

Expected behavior
Game should run correctly

Actual behavior
Splash image with some armed dudes shows up, then the game crashes with

pf: src/render/gl_shader.c:670: _Bool R_GL_Shader_InitAll(const char *): Assertion `SDL_ThreadID() == g_render_thread_id' failed.

Some investigation

At gl_shader.c:670, g_render_thread_id equals 0 and SDL_ThreadID() equals 139936868296256.

Uninitialized variables treated as error

[CC]     obj/game/fog_of_war.o
[CC]     obj/game/clearpath.o
src/game/clearpath.c: In function ‘G_ClearPath_NewVelocity’:
src/game/clearpath.c:618:29: error: ‘ret.raw[1]’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
  618 |         s_debug_saved.v_new = ret;
      |         ~~~~~~~~~~~~~~~~~~~~^~~~~
src/game/clearpath.c:343:12: note: ‘ret.raw[1]’ was declared here
  343 |     vec2_t ret;
      |            ^~~
src/game/clearpath.c:618:29: error: ‘ret.raw[0]’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
  618 |         s_debug_saved.v_new = ret;
      |         ~~~~~~~~~~~~~~~~~~~~^~~~~
src/game/clearpath.c:343:12: note: ‘ret.raw[0]’ was declared here
  343 |     vec2_t ret;
      |            ^~~
cc1: all warnings being treated as errors
make: *** [Makefile:163: obj/game/clearpath.o] Error 1

Fedora, GCC 10.2.1

Python Wrapper

Awesome project! I have always liked playing Age of Empires and I admire your work by having a similar game.

I am currently interested in training agents to play the game. After looking into the project source code, I have noticed that the project uses python but it doesn't have a python wrapper like https://github.com/google-research/football where you can interact with the engine.

I think having a python wrapper will enable researchers to use the game to train agents to play the game and this will be a great environment to experiment on!

Are you planning to have a python wrapper implemented? Can the community try to tackle this? Thanks!

crash on start on linux

I get the following errors when trying to execute
make run or make run_editor

Failed to initialize GLEW Makefile:186: recipe for target 'run' failed make: *** [run] Segment violation

I have already compiled the dependencies and the pf engine

Windows build errors on filter descriptors

Attempting to build on windows, here's me trying to make deps:

C:\Dev\permafrost-engine>make deps PLAT=WINDOWS
mkdir -p ./lib
make -C ./deps/GLEW extensions
make[1]: Entering directory `C:/Dev/permafrost-engine/deps/GLEW'
make -C auto
make[2]: Entering directory `C:/Dev/permafrost-engine/deps/GLEW/auto'
--------------------------------------------------------------------
OpenGL descriptors
--------------------------------------------------------------------
rm -rf extensions/gl
cp -r glfixes/gl/specs/ANGLE OpenGL-Registry/extensions
cp -r glfixes/gl/specs/REGAL OpenGL-Registry/extensions
bin/update_ext.sh extensions/gl OpenGL-Registry/extensions blacklist
FIND: Parameter format not correct
--------------------------------------------------------------------
WGL descriptors
--------------------------------------------------------------------
rm -f extensions/gl/WGL_*
python bin/parse_xml.py OpenGL-Registry/xml/wgl.xml --api wgl --extensions extensions/gl
Found 298 enums, 146 commands, 1 features and 57 extensions.
--------------------------------------------------------------------
GLX descriptors
--------------------------------------------------------------------
rm -f extensions/gl/GLX_*
python bin/parse_xml.py OpenGL-Registry/xml/glx.xml --api glx --extensions extensions/gl
Found 294 enums, 134 commands, 5 features and 67 extensions.
--------------------------------------------------------------------
EGL descriptors
--------------------------------------------------------------------
python bin/parse_xml.py EGL-Registry/api/egl.xml --api egl --extensions extensions/gl
Found 655 enums, 154 commands, 6 features and 150 extensions.
--------------------------------------------------------------------
filter descriptors
--------------------------------------------------------------------
bin/filter_gl_ext.sh extensions/gl
grep: extensions/gl/GL_NV_texture_compression_vtc: No such file or directory
make[2]: *** [extensions/gl/.dummy] Error 2
make[2]: Leaving directory `C:/Dev/permafrost-engine/deps/GLEW/auto'
make[1]: *** [extensions] Error 2
make[1]: Leaving directory `C:/Dev/permafrost-engine/deps/GLEW'
make: *** [lib/glew32.dll] Error 2

no conf file or it is searched in the wrong directory

I get the following error when running

Could not load settings from file: .//pf.conf [status: 3]

I was able to solve this simply by creating a pf.conf file on the main directory, but since this was a blank file my guess is that no configuration is being loaded or that default values are being used, also I wasn't able to find any pf.conf file on the code

use malloc simlate VLA in M_AL_InitMapFromStream

when i modfiy
char texnames[header->num_materials][256];
to char (*texnames)[256] = (char(*)[256])malloc(header->num_materials * 256);
there‘re appear some confusing exception in stb,
then i use just a static arraychar texnames[64][256];things become okay;

Build with gmake

Hi,
i compiled with code with gmake but have issues in Makefile
Target system is FreeBSD

lol@ ~/D/permafrost-engine (master)> gmake deps PLAT=LINUX
mkdir -p ./lib
make -C ./deps/GLEW extensions
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 37: Missing dependency operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 38: Could not find config/Makefile.
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 39: Need an operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 40: Need an operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 41: Need an operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 50: Missing dependency operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 52: Need an operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 78: Missing dependency operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 80: Need an operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 82: Need an operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 113: Missing dependency operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 115: Missing dependency operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 116: warning: duplicate script for target "ifneq" ignored
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 114: warning: using previous script for "ifneq" defined here
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 117: Need an operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 118: Missing dependency operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 119: warning: duplicate script for target "ifneq" ignored
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 114: warning: using previous script for "ifneq" defined here
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 120: Need an operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 124: Missing dependency operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 125: warning: duplicate script for target "ifneq" ignored
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 114: warning: using previous script for "ifneq" defined here
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 126: warning: duplicate script for target "ifneq" ignored
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 114: warning: using previous script for "ifneq" defined here
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 127: Need an operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 128: Missing dependency operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 129: warning: duplicate script for target "ifneq" ignored
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 114: warning: using previous script for "ifneq" defined here
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 129: warning: duplicate script for target "(strip,)" ignored
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 119: warning: using previous script for "(strip,)" defined here
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 130: Need an operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 173: Missing dependency operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 175: Need an operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 177: Need an operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 184: Missing dependency operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 185: warning: duplicate script for target "ifneq" ignored
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 114: warning: using previous script for "ifneq" defined here
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 185: warning: duplicate script for target "(strip,)" ignored
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 119: warning: using previous script for "(strip,)" defined here
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 186: Need an operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 190: Missing dependency operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 191: warning: duplicate script for target "ifneq" ignored
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 114: warning: using previous script for "ifneq" defined here
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 191: warning: duplicate script for target "(strip,)" ignored
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 119: warning: using previous script for "(strip,)" defined here
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 192: Need an operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 211: Missing dependency operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 212: warning: duplicate script for target "(,)" ignored
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 116: warning: using previous script for "(,)" defined here
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 213: warning: duplicate script for target "(,)" ignored
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 116: warning: using previous script for "(,)" defined here
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 214: Need an operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 216: Need an operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 217: Missing dependency operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 218: warning: duplicate script for target "ifneq" ignored
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 114: warning: using previous script for "ifneq" defined here
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 218: warning: duplicate script for target "(ln)" ignored
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 126: warning: using previous script for "(ln)" defined here
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 218: warning: duplicate script for target "(-sf,)" ignored
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 126: warning: using previous script for "(-sf,)" defined here
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 219: Need an operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 222: Missing dependency operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 223: warning: duplicate script for target "ifeq" ignored
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 213: warning: using previous script for "ifeq" defined here
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 223: warning: duplicate script for target "(,)" ignored
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 116: warning: using previous script for "(,)" defined here
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 224: Need an operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 225: Missing dependency operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 226: warning: duplicate script for target "ifneq" ignored
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 114: warning: using previous script for "ifneq" defined here
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 226: warning: duplicate script for target "(ln)" ignored
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 126: warning: using previous script for "(ln)" defined here
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 226: warning: duplicate script for target "(-sf,)" ignored
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 126: warning: using previous script for "(-sf,)" defined here
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 227: Need an operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 250: Missing dependency operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 251: warning: duplicate script for target "ifeq" ignored
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 213: warning: using previous script for "ifeq" defined here
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 251: warning: duplicate script for target "(,)" ignored
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 116: warning: using previous script for "(,)" defined here
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 252: Need an operator
make[1]: "/permafrost-engine/deps/GLEW/Makefile" line 255: Need an operator
make[1]: Fatal errors encountered -- cannot continue
make[1]: stopped in /permafrost-engine/deps/GLEW
gmake: *** [Makefile:133: lib/libGLEW.so.2.2] Error 1

g_init_cameras missing return

static bool g_init_cameras(void)
{
for(int i = 0; i < NUM_CAMERAS; i++) {

    s_gs.cameras[i] = Camera_New();
    if(!s_gs.cameras[i]) {
        return false;
    }

    Camera_SetSpeed(s_gs.cameras[i], CAM_SPEED);
    Camera_SetSens (s_gs.cameras[i], 0.05f);
    g_reset_camera(s_gs.cameras[i]);
}

}

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.