Pure C Game Engine

Related tags

Game Corange
Overview

Corange game engine

Version 0.8.0

Written in Pure C, SDL and OpenGL.

Running

Corange is a library, but to take a quick look at some of the things it does you can Look at some of the Demos. Warning: Some things shown are from a previous version and may not remain the same in this version.

Compiling

To compile on Windows you need MinGW and then you should be able to run "make" as usual. You will need to have installed SDL, SDL_Mixer and SDL_Net.

make

To compile on Linux you need to install SDL2. Then you should run "make"

sudo apt-get install libsdl2-dev
sudo apt-get install libsdl2-mixer-dev
sudo apt-get install libsdl2-net-dev
make

Overview

  • Small, Simple, Powerful, Cross platform
  • Clean and easy Asset, UI, Entity management
  • Modern Deferred renderer

Demos

I'm a graphics programmer by trade so apologies that most of the demos are graphical apps; they're just what I love!

  • renderers Shows off the various renderers with shaders, shadows, animation etc.
  • metaballs Uses OpenCL/OpenGL interop to do Metaball rendering.
  • noise Feedback based noise pattern on screen using shader. Can generate tileable perlin noise in software.
  • platformer Basic platforming game. Fairly well commented.
  • sea Renders a sea-like surface, a ship, and some collision detection.
  • scotland Demonstrates terrain system.
  • tessellation Demo showing tessellation shaders in OpenGL 4.

FAQ

  • How is that pronounced?

    Rhymes with Purple.

  • Why not C++?

    There are plenty of C++ engines which do what I've done here and better. Pure C game engines on the other hand are much rarer. Corange provided me an outlet to practice my C skills. Of course if you are just linking to it you can still program your game/executable using C++.

  • What stuff does it do?

    I've used it as a platform for trying out all sorts of techniques and effects. These features are not out-of-the-box or plug-in-and-play, but if you are a developer who has knowledge of what they are, you should be able to utilize what I have written. Some are WIP or rough around the edges.

    Deferred Rendering / UI Rendering / Text Rendering. Multiple Lights. Post effects. SSAO. Shadow Mapping. Color Correction. Skeletal Animation. Inverse Kinematics. Collision Detection. OpenCL support. Asset / Entity / UI Management. Terrain. File loaders including .dds, .wav, .bmp, .obj, .smd. Maths and Geometry. And More...

  • Can I use this for 2D stuff?

    Certainly. Though Corange doesn't provide a 2D renderer for you. That you can write yourself. Believe it or not, making a generalized 2D renderer can be exceedingly complicated when you have to optimise for different sprites, tile sets, dynamic objects and all sorts of other effects. You're better off writing the rendering code application specific.

  • Can I contact you about something?

    Yes - [email protected]

Using / Contributing

This is still mainly a personal project and so there are going to be lots of bugs, unfinished features and messy bits of code. The engine is heavily WIP and subject to sweeping changes. It isn't really viable to use without also being part of the project development and in communication with me. Rather than a full game engine like Unity, Corange is more of a framework and gives you access to features at about the same level as XNA.

I have a big backlog of Work in Progress changes I need to push up to the repository once they get to a reasonable point so if you are interested in those please contact me.

Saying that, it is a great excuse to practise your C and I very much welcome help. If the project appeals to you here are a couple of quick things that might help get you started.

  • First take a look at the demos. These give a brief overview of how Corange can be used. The platformer demo is probably the most commented.

  • There is no real documentation so your first port of call is the header files and your second is the c files. The code has very minimal comments but should be pretty clear most of the time.

  • Corange doesn't hide anything from you. OpenGL and SDL calls are in the namespace so you've got access to the basics. The corange_init and corange_finish functions are fairly short so it is even possible to not call them and only use the components you want.

  • Structs are typedefed without their pointer. The reason for this is a personal choice but there are also quite a few data types which are passed by value on the stack (vectors, matrices, spheres, boxes). I didn't want the notion of these to get confused.

  • Some important parts of the engine are the asset, UI and entity managers. These basically let you access and store assets (models, textures - objects in the file system) and entities (lights, cameras, engine objects) and UI elements. They clean up memory on destruction and let you get pointers from all parts of the code.

  • Corange mangles the namespace pretty badly, taking names such as "error", "warning", "vec2" and "image". It isn't a general purpose library. But I've still tried to decouple stuff so it should be possible to extract certain code if you need it.

Issues
  • Unable to compile in MSYS2 MINGW64

    Unable to compile in MSYS2 MINGW64

    I have installed SDL2 in latest version of MSYS2

    pacman -S mingw-w64-x86_64-SDL2 mingw-w64-x86_64-SDL2_net
    

    And I have issue the make command

    I am getting the below error

    $ make
    gcc src/casset.c -c -I ./include -std=gnu99 -Wall -Werror -Wno-unused -O3 -g -o obj/casset.o
    In file included from ./include/cengine.h:34,
                     from ./include/casset.h:24,
                     from src/casset.c:1:
    ./include/SDL2/SDL_local.h:116:28: error: 'glActiveTexture' redeclared as different kind of symbol
      116 |   extern GLACTIVETEXTUREFN glActiveTexture;
          |                            ^~~~~~~~~~~~~~~
    In file included from ./include/cengine.h:30,
                     from ./include/casset.h:24,
                     from src/casset.c:1:
    C:/msys64/mingw64/include/SDL2/SDL_opengl.h:1878:23: note: previous declaration of 'glActiveTexture' was here
     1878 | GLAPI void GLAPIENTRY glActiveTexture( GLenum texture );
          |                       ^~~~~~~~~~~~~~~
    In file included from ./include/cengine.h:34,
                     from ./include/casset.h:24,
                     from src/casset.c:1:
    ./include/SDL2/SDL_local.h:117:35: error: 'glCompressedTexImage2D' redeclared as different kind of symbol
      117 |   extern GLCOMPRESSEDTEXIMAGE2DFN glCompressedTexImage2D;
          |                                   ^~~~~~~~~~~~~~~~~~~~~~
    In file included from ./include/cengine.h:30,
                     from ./include/casset.h:24,
                     from src/casset.c:1:
    C:/msys64/mingw64/include/SDL2/SDL_opengl.h:1884:23: note: previous declaration of 'glCompressedTexImage2D' was here
     1884 | GLAPI void GLAPIENTRY glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data );
          |                       ^~~~~~~~~~~~~~~~~~~~~~
    In file included from ./include/cengine.h:34,
                     from ./include/casset.h:24,
                     from src/casset.c:1:
    ./include/SDL2/SDL_local.h:118:25: error: 'glTexImage3D' redeclared as different kind of symbol
      118 |   extern GLTEXIMAGE3DFN glTexImage3D;
          |                         ^~~~~~~~~~~~
    In file included from ./include/cengine.h:30,
                     from ./include/casset.h:24,
                     from src/casset.c:1:
    C:/msys64/mingw64/include/SDL2/SDL_opengl.h:1551:23: note: previous declaration of 'glTexImage3D' was here
     1551 | GLAPI void GLAPIENTRY glTexImage3D( GLenum target, GLint level,
          |                       ^~~~~~~~~~~~
    make: *** [Makefile:43: obj/casset.o] Error 1
    

    What could be the issue

    opened by dickensas 12
  • Compile issues Ubuntu

    Compile issues Ubuntu

    Unfortunately I have several issues compiling and executing the demos under Ubuntu:

    lut_gen:
    make cp ../../libcorange.so ./lib/libcorange.a gcc -g obj/lut_gen.o obj/spline.o -L./lib -lcorange -lGL -lSDLmain -lSDL -o lut_gen obj/lut_gen.o: file not recognized: File format not recognized collect2: ld returned 1 exit status make: *** [lut_gen] Error 1

    metaballs: make cp ../../libcorange.so ./lib/libcorange.a gcc -g obj/kernel.o obj/marching_cubes.o obj/metaballs.o obj/particles.o obj/volume_renderer.o -L./lib -lcorange -lGL -lSDLmain -lSDL -lOpenCL -o metaballs /usr/bin/ld: cannot find -lOpenCL collect2: ld returned 1 exit status make: *** [metaballs] Error 1

    noise: make cp ../../libcorange.so ./lib/libcorange.a gcc -g obj/noise.o obj/perlin_noise.o -L./lib -lcorange -lGL -lSDLmain -lSDL -o noise /usr/bin/ld: i386:x86-64 architecture of input file obj/noise.o' is incompatible with i386 output /usr/bin/ld: i386:x86-64 architecture of input fileobj/perlin_noise.o' is incompatible with i386 output collect2: ld returned 1 exit status make: *** [noise] Error 1

    I can compile platformers, renderers, scotland and sea but when I execute them I get these messages: [DEBUG] Starting Corange... [DEBUG] Creating Graphics Manager... [DEBUG] OpenGL Info [DEBUG] Vendor: NVIDIA Corporation [DEBUG] Renderer: GeForce 9200M GE/PCI/SSE2 [DEBUG] Version: 2.1.2 NVIDIA 173.14.30 [DEBUG] Shader Version: 1.20 NVIDIA via Cg compiler [DEBUG] Loading OpenGL Extensions... [ERROR] src/SDL/SDL_local.c:572 Failed to load OpenGL extension glGenerateMipmap

    opened by RicoP 8
  • MAX_PATH undeclared in cengine.h

    MAX_PATH undeclared in cengine.h

    I've just made a clone, the HEAD is at 841fcf6 and when running make I get the following error:

    [[email protected] 13-01-10 21:26 Code/Corange]> make
    gcc src/cengine.c -c -I ./include -std=gnu99 -Wall -Werror -Wno-unused -O3 -g -fPIC -o obj/cengine.o
    In file included from src/cengine.c:1:0:
    ./include/cengine.h:39:12: error: ‘MAX_PATH’ undeclared here (not in a function)
    make: *** [obj/cengine.o] Błąd 1
    
    opened by szabba 7
  • Multiple definition error on compiling

    Multiple definition error on compiling

    Hi I am new here and try to learn this light engine and practice my C in a more fun way, but now the compiling is not successful due to a lot of "multiple definition errors":

    gcc obj/cengine.o obj/cnet.o obj/cphysics.o obj/corange.o obj/casset.o obj/cui.o obj/centity.o obj/cgraphics.o obj/cjoystick.o obj/caudio.o obj/ui_style.o obj/ui_slider.o obj/ui_toast.o obj/ui_rectangle.o obj/ui_text.o obj/ui_option.o obj/ui_button.o obj/ui_listbox.o obj/ui_dialog.o obj/ui_textbox.o obj/ui_spinner.o obj/ui_browser.o obj/renderable.o obj/texture.o obj/music.o obj/lang.o obj/config.o obj/shader.o obj/animation.o obj/font.o obj/effect.o obj/terrain.o obj/material.o obj/cmesh.o obj/sound.o obj/image.o obj/skeleton.o obj/instance_object.o obj/landscape.o obj/animated_object.o obj/light.o obj/physics_object.o obj/particles.o obj/camera.o obj/static_object.o obj/dict.o obj/list.o obj/vertex_list.o obj/int_list.o obj/randf.o obj/vertex_hashtable.o obj/spline.o obj/renderer.o obj/sky.o obj/SDL_local.o -lSDL2 -lSDL2_mixer -lSDL2_net -shared -g -lGL -o libcorange.so /usr/bin/ld: obj/cnet.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/cnet.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/cnet.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/cnet.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/cnet.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/cnet.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/cphysics.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/cphysics.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/cphysics.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/cphysics.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/cphysics.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/cphysics.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/corange.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/corange.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/corange.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/corange.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/corange.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/corange.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/casset.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/casset.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/casset.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/casset.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/casset.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/casset.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/cui.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/cui.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/cui.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/cui.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/cui.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/cui.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/centity.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/centity.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/centity.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/centity.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/centity.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/centity.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/cgraphics.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/cgraphics.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/cgraphics.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/cgraphics.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/cgraphics.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/cgraphics.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/cjoystick.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/cjoystick.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/cjoystick.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/cjoystick.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/cjoystick.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/cjoystick.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/caudio.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/caudio.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/caudio.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/caudio.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/caudio.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/caudio.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/ui_style.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/ui_style.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/ui_style.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/ui_style.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/ui_style.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/ui_style.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/ui_slider.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/ui_slider.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/ui_slider.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/ui_slider.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/ui_slider.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/ui_slider.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/ui_toast.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/ui_toast.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/ui_toast.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/ui_toast.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/ui_toast.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/ui_toast.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/ui_rectangle.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/ui_rectangle.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/ui_rectangle.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/ui_rectangle.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/ui_rectangle.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/ui_rectangle.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/ui_text.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/ui_text.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/ui_text.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/ui_text.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/ui_text.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/ui_text.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/ui_option.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/ui_option.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/ui_option.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/ui_option.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/ui_option.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/ui_option.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/ui_button.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/ui_button.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/ui_button.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/ui_button.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/ui_button.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/ui_button.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/ui_listbox.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/ui_listbox.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/ui_listbox.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/ui_listbox.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/ui_listbox.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/ui_listbox.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/ui_dialog.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/ui_dialog.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/ui_dialog.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/ui_dialog.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/ui_dialog.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/ui_dialog.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/ui_textbox.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/ui_textbox.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/ui_textbox.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/ui_textbox.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/ui_textbox.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/ui_textbox.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/ui_spinner.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/ui_spinner.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/ui_spinner.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/ui_spinner.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/ui_spinner.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/ui_spinner.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/ui_browser.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/ui_browser.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/ui_browser.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/ui_browser.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/ui_browser.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/ui_browser.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/renderable.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/renderable.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/renderable.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/renderable.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/renderable.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/renderable.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/texture.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/texture.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/texture.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/texture.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/texture.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/texture.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/music.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/music.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/music.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/music.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/music.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/music.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/lang.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/lang.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/lang.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/lang.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/lang.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/lang.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/config.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/config.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/config.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/config.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/config.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/config.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/shader.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/shader.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/shader.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/shader.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/shader.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/shader.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/animation.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/animation.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/animation.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/animation.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/animation.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/animation.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/font.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/font.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/font.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/font.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/font.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/font.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/effect.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/effect.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/effect.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/effect.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/effect.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/effect.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/terrain.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/terrain.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/terrain.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/terrain.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/terrain.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/terrain.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/material.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/material.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/material.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/material.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/material.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/material.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/cmesh.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/cmesh.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/cmesh.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/cmesh.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/cmesh.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/cmesh.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/sound.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/sound.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/sound.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/sound.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/sound.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/sound.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/image.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/image.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/image.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/image.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/image.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/image.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/skeleton.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/skeleton.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/skeleton.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/skeleton.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/skeleton.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/skeleton.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/instance_object.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/instance_object.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/instance_object.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/instance_object.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/instance_object.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/instance_object.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/landscape.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/landscape.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/landscape.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/landscape.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/landscape.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/landscape.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/animated_object.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/animated_object.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/animated_object.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/animated_object.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/animated_object.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/animated_object.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/light.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/light.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/light.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/light.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/light.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/light.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/physics_object.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/physics_object.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/physics_object.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/physics_object.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/physics_object.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/physics_object.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/particles.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/particles.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/particles.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/particles.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/particles.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/particles.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/camera.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/camera.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/camera.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/camera.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/camera.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/camera.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/static_object.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/static_object.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/static_object.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/static_object.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/static_object.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/static_object.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/dict.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/dict.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/dict.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/dict.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/dict.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/dict.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/list.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/list.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/list.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/list.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/list.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/list.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/vertex_list.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/vertex_list.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/vertex_list.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/vertex_list.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/vertex_list.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/vertex_list.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/int_list.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/int_list.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/int_list.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/int_list.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/int_list.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/int_list.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/randf.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/randf.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/randf.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/randf.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/randf.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/randf.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/vertex_hashtable.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/vertex_hashtable.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/vertex_hashtable.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/vertex_hashtable.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/vertex_hashtable.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/vertex_hashtable.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/spline.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/spline.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/spline.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/spline.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/spline.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/spline.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/renderer.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/renderer.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/renderer.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/renderer.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/renderer.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/renderer.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/sky.o:/home/qs/Corange/./include/cengine.h:80: multiple definition ofdebug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here /usr/bin/ld: obj/sky.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/sky.o:/home/qs/Corange/./include/cengine.h:77: multiple definition ofwarning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here /usr/bin/ld: obj/sky.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/sky.o:/home/qs/Corange/./include/cengine.h:74: multiple definition oferror_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here /usr/bin/ld: obj/sky.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here collect2: error: ld returned 1 exit status make: *** [Makefile:37: libcorange.so] Error 1

    opened by IceGuye 6
  • SDL2/SDL_mixer.h: no such file ro directory

    SDL2/SDL_mixer.h: no such file ro directory

    I tried make with GCC 4.8.4 on my Ubuntu 14.10 box 64-bit, and I have SDL2 and SDL2-mixer and SDL2-net previously installed including libsdl2-dev. Is it simply renaming the file to something else? SDL_mixer to SDL2-mixer? PS: I bought your book, so I was pleasantly surprised to stumble upon Corange!

    In file included from ./include/casset.h:24:0,
                     from src/casset.c:1:
    ./include/cengine.h:32:28: fatal error: SDL2/SDL_mixer.h: No such file or directory
     #include <SDL2/SDL_mixer.h>
                                ^
    compilation terminated.
    make: *** [obj/casset.o] Error 1
    
    
    opened by rpherman 6
  • GCC 4.8.3 compile failure

    GCC 4.8.3 compile failure

    src/assets/config.c: In function ‘cfg_save_file’:
    src/assets/config.c:75:8: error: trampoline generated for nested function ‘write_entry’ [-Werror=trampolines]
       void write_entry(void* x) {
    
    

    Also fails on versions 4.7.3 and 4.9.2

    opened by ColinGilbert 6
  • Is the

    Is the "quadratic()" function being properly calculated?

    I recently asked another question about the "quadratic()" function, but I have another one about the implementation. This function obviously lets one use the quadratic formula, which is x = (-b +- sqrt(b^2 - 4 * a * c))/2a. Please see this Khan Academy if my quadratic formula is unclear. This is almost reflected in the code, but instead of "2a," it appears to divide the discriminant by just "2." Why is this? I'm fairly new to computer graphics math, so I am unsure if this is intentional or not.

    Here is the code from Corange that I'm asking about, with the parts I'm curious about followed by a comment. `bool quadratic(float a, float b, float c, float* t0, float* t1) {

    float descrim = bb - 4a*c;

    if (descrim < 0) {

    return false;
    

    } else {

    float d = sqrtf(descrim);
    float q = (b < 0) ? (-b - d) / 2.0 : (-b + d) / 2.0;//  Should "2.0" be changed to "2.0*a"?
    
    *t0 = q / a;
    *t1 = c / q;
    
    return true;
    

    }

    }`

    opened by d4v3y5c0n3s 5
  • ... how rotate camera? LoL )))

    ... how rotate camera? LoL )))

    Hi, Daniel, I suddenly found that I did not understand how to adjust the angle of the camera. I wrote a dynamic environment for a cubic map and for rendering in a cubic texture, I move the camera to the object position, but I don’t understand how to rotate the camera on six sides.

    Can you give one example, for example, turning the camera strictly up or down? And then I'll find out.

    I have attached a piece of code to understand what I'm trying to do. ??

    // prepare env cubemaps for surfaces
    static void renderer_render_target_cubemap(renderer * dr)
    {
        renderer_cubemap_dynamic_reset_counts(dr);
        vec3 cam_pos_save = dr->camera->position;
    
      for ( int j = 0; j < dr->render_objects_num; j++)
      {
        renderable * ren = NULL;
        if(dr->render_objects[j].type == RO_TYPE_STATIC)
        {
            dr->camera->position = dr->render_objects[j].static_object->position;
            ren = asset_hndl_ptr(&dr->render_objects[j].static_object->renderable);
    
        }else if(dr->render_objects[j].type == RO_TYPE_ANIMATED)
        {
            dr->camera->position = dr->render_objects[j].animated_object->position;
            ren = asset_hndl_ptr(&dr->render_objects[j].animated_object->renderable);
    
        }else if(dr->render_objects[j].type == RO_TYPE_INSTANCE)
        {
            //XXX: dynamic env only for one instance fix it!
            dr->camera->position = dr->render_objects[j].instance_object->instances[0].position;
            ren = asset_hndl_ptr(&dr->render_objects[j].instance_object->renderable);
    
        };
        GLint current_cube_texture = -1;
        for (int i = 0; i < ren->num_surfaces; ++i)
        {
           material_entry * me = material_get_entry(asset_hndl_ptr(&ren->material),i);
           if(material_entry_item(me,"envcube_dynamic").as_bool == false)
           {
                continue;
           }else{
               current_cube_texture = renderer_get_cubemap_dynamic_repare(dr);
           };
        for (int i = 0; i < 6; ++i)
        {
          
              swith(i)
              {      // help me this pleeeeeeeeeees ))))))))))))))))))))))
                     case 1:  dr->camera->target = /*????????*/ ;  break;
                     case 2:  dr->camera->target = /*????????*/ ; break;
                     case 3:  dr->camera->target = /*????????*/ ; break;
                     case 4:  dr->camera->target = /*????????*/ ; break;
                     case 5:  dr->camera->target = /*????????*/ ; break;
                     case 6:  dr->camera->target = /*????????*/ ; break;
              };
         
           dr->cubemap_dynamic_render_process = true; 
           render_shadows(dr);  
           render_clear(dr);    
           glPolygonMode( GL_FRONT_AND_BACK, dr->mode);
           render_gbuffer(dr);  
           glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
           render_ssao(dr);   
           render_skydome(dr);   
           render_skycube(dr); 
           render_compose(dr); 
           glPolygonMode( GL_FRONT_AND_BACK, dr->mode);
           render_sea(dr);    
           render_particles(dr);
           glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
           render_tonemap(dr);  
           render_post0(dr);    
           glBindFramebuffer(GL_FRAMEBUFFER, dr->cubemap_dynamic_fbo);
        glDrawBuffer(GL_COLOR_ATTACHMENT0 + i);
           glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
           glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i,
                                  GL_TEXTURE_CUBE_MAP_POSITIVE_X       + i,
                                  current_cube_texture, 0);
    
           render_post1(dr);    
        glBindFramebuffer(GL_FRAMEBUFFER, 0);
           dr->cubemap_dynamic_render_process = false;
    
        };
    
      };
     };
        dr->camera->position = cam_pos_save;
        renderer_set_camera(dr,dr->camera);
    }
    

    Next just render scene

    opened by fedor-elizarov 5
  • compilation failure

    compilation failure

    gcc src/SDL2/SDL_local.c -c -I ./include -std=gnu99 -Wall -Werror -Wno-unused -O3 -g -fPIC -o obj/SDL_local.o
    src/SDL2/SDL_local.c:16:0: error: "MAX_PATH" redefined [-Werror]
     #define MAX_PATH 512
     ^
    In file included from src/SDL2/SDL_local.c:1:0:
    ./include/SDL2/SDL_local.h:14:0: note: this is the location of the previous definition
       #define MAX_PATH PATH_MAX
     ^
    cc1: all warnings being treated as errors
    Makefile:46: recipe for target 'obj/SDL_local.o' failed
    make: *** [obj/SDL_local.o] Error 1
    
    opened by benwaffle 5
  • fixed minor typo where the

    fixed minor typo where the "GLUNIFORM2FVFN" extension had been used where it wasn't intended

    Previously, "GLUNIFORM2FVFN" had been used where "GLUNIFORM3FVFN" and "GLUNIFORM3FVFN" should have been used instead on lines 148 & 149.

    opened by d4v3y5c0n3s 4
  • Direction of a plane.

    Direction of a plane.

    Could you clarify if the direction of the planes in a box are pointing outward or inward?

    https://github.com/orangeduck/Corange/blob/3c99c2e25c338b27ee831406aaed0159ec3a77a2/include/cengine.h#L564

    opened by rainwoodman 4
  • ani files

    ani files

    I really like your engine :) Pure C ... nothing else to be said.

    One Question: https://github.com/orangeduck/Corange/blob/master/demos/rendering/assets/imrod/imrod.ani How did you create the .ani files ? Everything else is Wings 3D .. but Wings cant do .ani? correct me if I'm wrong.

    Best wishes molekel

    opened by molekel 1
  • Add RLE decode support for TGA image format

    Add RLE decode support for TGA image format

    Many image editors with exports apply RLE compression for TGA format. I initially could not understand why I had noise instead of images, it turned out that the images were compressed :D. There is slow (but simple) realization of unpacking.

    Plus for images with channels less than 3 I added duplication of the channels. This allows forcibly loading them, albeit with costs.

    The test program for unpacking works well.

    #include "corange.h"
    /*    TGA RLE Decode Test    */
    int main(int argc, char *argv[])
    {
        //load rle image and decode
        image * i = image_tga_load_file("./rle-image.tga");
        //write no rle image
        image_tga_save_file(i,"./output.tga");
    };
    

    I hope it will be useful

    IMPORTANT: If you used, for example, GIMP and created a compressed RLE TGA image in it, and then you unpacked it through the Corange back to the file files will not be the same bit in the bit. This is not an error just at the end there will not be 26 bytes of the image basement. This does not affect anything simply when saving the basement is not added. Therefore, the file size is always equal to 18 bytes header + Size X + Size Y * Number of channels.

    opened by fedor-elizarov 0
  • Why do the

    Why do the "mesh" and "model" types exist?

    In the "cengine" code, the types "mesh" and "model" are defined to handle 3D objects. That makes sense, but what puzzles me is why these types are never used in Corange itself. Instead, whenever the engine actually deals with 3D objects the "cmesh" type gets used instead. Furthermore, "cmesh" does not use "mesh" nor "model" internally to represent it's structure.

    My question is, why then do "mesh" and "model" exist at all? Should "cmesh" be changed to internally be based on "mesh"/"model"? I'm curious about the reason it was designed this way.

    opened by d4v3y5c0n3s 4
  • macOS Big Sur, $(make) fails

    macOS Big Sur, $(make) fails

    $ pwd
    /Users/XXX/tools/corange
    
    $ ls
    LICENCE.md  README.md   corange.ico demos       obj
    Makefile    assets_core corange.rc  include     src
    
    $ sudo make
    Password:
    gcc src/cengine.c -c -I ./include -std=gnu99 -Wall -Werror -Wno-unused -O3 -g -fPIC -o obj/cengine.o
    src/cengine.c:6:7: error: variable 'p' is used uninitialized whenever 'if' condition is true [-Werror,-Wsometimes-uninitialized]
      if (unlikely(strlen(path) >= PATH_MAX)) {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ./include/cengine.h:115:21: note: expanded from macro 'unlikely'
    #define unlikely(x) __builtin_expect((x),0)
                        ^~~~~~~~~~~~~~~~~~~~~~~
    src/cengine.c:12:10: note: uninitialized use occurs here
      return p;
             ^
    src/cengine.c:6:3: note: remove the 'if' if its condition is always false
      if (unlikely(strlen(path) >= PATH_MAX)) {
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    src/cengine.c:4:3: note: variable 'p' is declared here
      fpath p;
      ^
    1 error generated.
    make: *** [obj/cengine.o] Error 1
    

    Tried on Linux Mint last time, worked fine. Switched to Big Sur last month. Most important thing, I'm a noob.

    $ uname -a
    Darwin XXXMacBook-Air.local 20.4.0 Darwin Kernel Version 20.4.0: Thu Apr 22 21:46:47 PDT 2021; root:xnu-7195.101.2~1/RELEASE_X86_64 x86_64
    

    Could not compile

    $ pwd
    /Users/XXX/tools/corange/demos/sea
    
    $ ls
    Makefile assets   sea.c
    
    $ make
    gcc sea.c -I../../include -std=gnu99 -Wall -Werror -Wno-unused -O3 -g -lcorange -framework OpenGL -lSDL2main -lSDL2 -lSDL2_net -lSDL2_mixer -o sea
    sea.c:123:79: error: function definition is not allowed here
      collision collision_test_ellipsoid(void* x, vec3* position, vec3* velocity) {
                                                                                  ^
    sea.c:130:74: error: use of undeclared identifier 'collision_test_ellipsoid'
      collision_response_slide(g_dr, &test_ellipsoid.center, &test_velocity, collision_test_ellipsoid);
                                                                             ^
    sea.c:185:71: error: function definition is not allowed here
      collision collision_camera(void* x, vec3* position, vec3* velocity) {
                                                                          ^
    sea.c:189:59: error: use of undeclared identifier 'collision_camera'; did you mean 'collision_merge'?
      collision_response_slide(g_dr, &c->position, &velocity, collision_camera);
                                                              ^~~~~~~~~~~~~~~~
                                                              collision_merge
    ../../include/cphysics.h:21:11: note: 'collision_merge' declared here
    collision collision_merge(collision c0, collision c1);
              ^
    4 errors generated.
    make: *** [sea] Error 1
    

    And I have SDL2 installed:

    $ brew list | grep sdl
    sdl2
    sdl2_gfx
    sdl2_image
    sdl2_mixer
    sdl2_net
    sdl2_ttf
    
    $ clang --version
    Apple clang version 12.0.5 (clang-1205.0.22.9)
    Target: x86_64-apple-darwin20.4.0
    Thread model: posix
    InstalledDir: /Library/Developer/CommandLineTools/usr/bin
    

    send help uwu

    opened by anzhi0708 16
  • SDL currently breaks MinGW Compile (For some time now?) Temp Fix Herein

    SDL currently breaks MinGW Compile (For some time now?) Temp Fix Herein

    After following the trail of the includes through the sound advice offered here: https://github.com/orangeduck/Corange/issues/66

    I found myself in a chicken vs. egg dilemma. Apparently--although SDL targets MinGW with it's releases--this issue from 2016 is still encountered whether compiling on Linux for Windows, or on Windows for Windows, when using MinGW:

    https://discourse.libsdl.org/t/glactivetexture-declaration/22001

    For now, I've commented out the offending "GLAPI void GLAPIENTRY glActiveTexture( . . . . . ." , "GLAPI void GLAPIENTRY glCompressedTexImage2D( . . . . . .", "GLAPI void GLAPIENTRY glTexImage3D( . . . . . ." lines in SDL_opengl.h with success.

    I plan to follow the advice in the link above and wrap it all together in a block of

    #if !defined(__MINGW32__)
    [ . . . ]
    #endif
    

    as that is the verified preset #define flag on at least the Windows .exe version of MinGW.

    opened by choretortle 0
  • Why are there multiple definitions of quadratic()?

    Why are there multiple definitions of quadratic()?

    The exact same function "quadratic()" is defined in the exact same way in two places: in cengine.c and cphysics.h/cphysics.c. Is this intentional? I could probably fix this if it isn't.

    opened by d4v3y5c0n3s 2
Owner
Daniel Holden
Animation Researcher at Ubisoft Montreal. Writer / Programmer.
Daniel Holden
CLUSEK-RT is a complex game engine written in C++ and the successor of the CLUSEK game engine

CLUSEK-RT is a complex game engine written in C++ and the successor of the CLUSEK game engine. This engine has been designed with a cross-platform design in mind. Thanks to Vulkan API it delivers a next-gen experience with ray tracing to both Linux and Windows platforms

Jakub Biliński 27 Jun 12, 2022
Ground Engine is an easy to use Game Engine for 3D Game Development written in C++

Ground Engine is an easy to use Game Engine Framework for 3D Game Development written in C++. It's currently under development and its creation will b

 PardCode 51 Jun 10, 2022
Pure C Arcade game. Cross between pong and breakout, made it by accident

LameBall I accidentally made this game while testing some code. It's kind of a cross between Pong and Breakout, mixed with Squash/Racquetball. >> DOWN

Phil Bagshaw 2 Sep 17, 2021
Godot Engine – Multi-platform 2D and 3D game engine

Godot Engine 2D and 3D cross-platform game engine Godot Engine is a feature-packed, cross-platform game engine to create 2D and 3D games from a unifie

Godot Engine 49.8k Jun 22, 2022
Flax Engine – multi-platform 3D game engine

Flax Engine – multi-platform 3D game engine

Flax Engine 3.4k Jun 20, 2022
MAZE (My AmaZing Engine) - 🎮 Personal open-source cross-platform game engine

MAZE (My AmaZing Engine) is the self-written open-source cross-platform game engine in the active development stage. At the moment it is my main pet project, developed for the purpose of learning and preserving different game dev technologies.

Dmitriy Nosov 11 Jan 9, 2022
Rogy-Engine- - My 3D game engine source code.

Rogy-Engine Development My 3D game engine. (NOT THE FINAL VERSION- Windows only) Features: PBR shading and reflection probes with parallax correction.

AlaX 92 Jun 18, 2022
The Atomic Game Engine is a multi-platform 2D and 3D engine with a consistent API in C++, C#, JavaScript, and TypeScript

The Atomic Game Engine is a multi-platform 2D and 3D engine with a consistent API in C++, C#, JavaScript, and TypeScript

null 2.7k Jun 19, 2022
Hyperion Engine is a 3D game engine written in C++

Hyperion Engine About Hyperion Engine is a 3D game engine written in C++. We aim to make Hyperion be easy to understand and use, while still enabling

null 130 Jun 28, 2022
Pure C math library for 2D and 3D programming

MATHC MATHC is a simple math library for 2D and 3D programming. Features Vectors (2D, 3D and 4D) (integer type and floating-point type) Quaternions Ma

Felipe da Silva 592 Jun 23, 2022
DOSBox Pure is a new fork of DOSBox built for RetroArch/Libretro aiming for simplicity and ease of use.

DOSBox Pure is a fork of DOSBox, an emulator for DOS games, built for RetroArch/Libretro aiming for simplicity and ease of use.

Bernhard Schelling 451 Jun 26, 2022
Minetest is an open source voxel game engine with easy modding and game creation

Minetest is an open source voxel game engine with easy modding and game creation

Minetest 7.2k Jun 22, 2022
Stealthy way to hijack the existing game process handle within the game launcher (currently supports Steam and Battle.net). Achieve external game process read/write with minimum footprint.

Launcher Abuser Stealthy way to hijack the existing game process handle within the game launcher (currently supports Steam and Battle.net). Achieve ex

Ricardo Nacif 74 May 8, 2022
Game Boy, Game Boy Color, and Game Boy Advanced Emulator

SkyEmu SkyEmu is low level cycle accurate GameBoy, GameBoy Color and Game Boy Advance emulator that I have been developing in my spare time. Its prima

Sky 60 Jun 19, 2022
A high speed C++17 Vulkan game engine

Acid is an open-source, cross-platform game engine written in modern C++17 and structured to be fast, simple, and extremely modular. Vulkan is the sol

Equilibrium Games 1.3k Jun 22, 2022
The flexible game engine.

The flexible game engine. Crown is a general purpose and data-driven game engine, written in orthodox C++ with a minimalistic and data-oriented design

Daniele Bartolini 1.6k Jun 27, 2022
Open-source, cross-platform, C++ game engine for creating 2D/3D games.

GamePlay v3.0.0 GamePlay is an open-source, cross-platform, C++ game framework/engine for creating 2D/3D mobile and desktop games. Website Wiki API De

gameplay3d 3.7k Jun 28, 2022
Grit Game Engine

Grit Engine This is the central repository for the Grit Game Engine project. From here can be built the engine executable itself, the launcher, and va

Grit Game Engine 103 May 28, 2022
A lightweight game engine written in modern C++

Halley Game Engine A lightweight game engine written in C++17. It has been used to ship Wargroove, a turn-based strategy game, on Windows, Mac (experi

Rodrigo Braz Monteiro 3k Jun 19, 2022