I bet this has been beaten to death already, but I burned myself so many times that I need to create this topic before moving further.
TL;DR on Why not C++
I know how to program in C++, I've been programming in C++ for years. But I strongly believe that the most important rule of C++ is to not use C++ unless there is absolutely no other alternative. In C++, instead of creating programs, you create code. In C++ if your program crashes, you're left with a cryptic memory dump and no idea why it crashed. In C++ you have to cast magic spells in order to get simple functionality like callbacks working, and passing a pointer to an object as a parameter of such callback is another kind of nightmare. When you discover that the object got deleted by the time the callback gets handled, all hell breaks loose. In other words: I don't want C++.
Story About a Python and an Ogre
Recently I've been thinking on doing a 3D game that operates in only 2 dimensions (think of recent iterations of Civilization, or a fancy Arkanoid clone with models instead of sprites). I even have a "work in progress" of something simple that I pulled together in 2 weeks and it works. I used Python, Ogre3D and CEGUI. Right now, I have most of the functionality that I wanted, however I discovered that getting Python-Ogre to work on Linux is a bitch that hits you hard and where it hurts the most (in simple words: it's difficult).
Furthermore, I couldn't find any audio library that would be up-to-date and support 3D world positioning. Folks recommend OpenAL, but AFAIK development on Python bindings for that were discontinued. It's a shame because I worked with OpenAL before and I liked what I saw.
What I'd like to have
I'd like to create a game that operates in a 2D world, but uses 3D engine for rendering, as it gives more flexibility with various graphical effects. Besides, operating with 3D models is easier than operating with sprites.
- OpenSource compatible.
- OS independent (Linux/Windows)
- Interpreted language as the MAIN language of the program.
- I don't want to have to reinvent the wheel again with functionality like string trimming. Nor with regexes. Nor with dynamically resizeable byte arrays or simple IO operations (mkdir). Nor with timers of any sort. Nor with functions that discover where program configuration and save files should be located on a given OS. Nor with callbacks. All of these are solved by Python, or by Qt library in C++.
- I don't want to worry what will happen if my user tries to use his language diacritic signs in the name of the save file, or in anything. This problem is already solved by Python, so it's another reason to stick with it.
- 3D rendering engine that uses OpenGL, and is capable of rendering text, 3D models, animation, lighting, billboards and all the fancy stuff. Basically, I find Ogre3D sufficient for my rendering needs, though it's lacking when it comes to Python-Ogre and Linux.
- .OGG and .WAV support for audio. Audio positioning in a 3D world.
- Networking (again, Python has this basically built-in).
- Mouse operable GUI (I'm content with how CEGUI works with Ogre3D).
- JSON parsing. It's like XML but not stupid. It's also built in to Python.
So, what do you guys recommend?