Atonal 1 - Racing game preview

Hello everybody!

I am new to this forum, but I have worked with Panda3D for some weeks and, being more used to C++ engines, have found Panda3D + Python awesome. With IrrLicht I had some unexpected bugs (reflection maps not working, hard-to-implement shaders, etc), and Ogre3D was far too low-level (try to display just a line of text :stuck_out_tongue:). So…

I worked for months and months in my racing game, in particular with the track system and the car gameplay, in a way all the content would be loaded from config files (actually “.ini” files) and would be, for the track system, generated on-the-fly according to coordinates, length, width, torsion, and other parameters you gave to the track “sections”, and so “sub-sections” for the graphical and physical parts.

I have some interesting stuff to show today, because I think this game would be a pretty way to encourage Panda3D, which is an engine I fell in love with. :smiley: The game I have in project is called for now “1”, and is a 3D car racer where you complete challenges to gain more cars, more options, and so more… challenges. This game will feature 20 cars inspired from real-world (I would thank my mate for all that stuff she is making), and a large number of tracks, created in a simple way (I can’t promise you a track editor for the moment…), with the ability to change the appearence of the roads, wall, sceneries, and more (this is already possible!). I hope this project will come, but as I have two years of studies, I might be “more or less” present for this game.

Here is a Python example to create the track you will see on the video below. The arguments are auto-filled if equaling None, and you have respectively the absolute position, the relative length, the relative elevation, the absolute orientation, the relative angle from the orientation, the torsion, and last but not least the width at the section begins and ends.

        self.track = Track()
        self.track.addSection(None,100.0,None,None,  0.0,V2(20.0,20.0))
        self.track.addSection(None,100.0,None,None,  0.0,V2(20.0,20.0))
 
        self.track.addSection(None,100.0,None,None,-90.0,V2(20.0,20.0))
        self.track.addSection(None,100.0, 8.0,None,-90.0,V2(20.0,20.0))
        self.track.addSection(None,100.0,None,None,  0.0,V2(20.0,20.0))
        self.track.addSection(None,100.0,None,None, 90.0,V2(20.0,20.0))
        self.track.addSection(None,100.0,None,None,  0.0,V2(20.0,20.0))
        self.track.addSection(None,100.0,None,None,-90.0,V2(20.0,20.0))
        self.track.addSection(None,100.0,None,None,-90.0,V2(20.0,20.0))
        self.track.addSection(None,100.0,-4.0,None, 90.0,V2(20.0,20.0))
        self.track.addSection(None,100.0,None,None,-90.0,V2(20.0,20.0))
        self.track.addSection(None,100.0,None,None,  0.0,V2(20.0,20.0))
        self.track.addSection(None,100.0,-4.0,None,-90.0,V2(20.0,20.0))
        self.track.addSection(None,100.0,None,None,  0.0,V2(20.0,20.0))
        self.track.addSection(None,100.0,None,None,  0.0,V2(20.0,20.0))
        self.track.addSection(None,100.0,None,None,  0.0,V2(20.0,20.0))

Here is a video from Youtube:
http://youtu.be/6p0rLfG7Eec

Hope I didn’t waste your time, and please forgive my English, as my native language is French. :blush:

Also you can share your review, what you like, dislike, etc.

Thanks!

PS : the soundtrack you hear in the video is from me, under license CC BY-NC-ND 3.0

It’s very nice! Does your track engine allow for variable track width?

Looks cool. I like how you’re not worried about visuals and getting your game mechanics down first.

Can’t wait to see how it advances. :smiley:

Of course, yes. You can both let the track choose a “seamless” width for the section, and adjust the said width on the beginning or the end of the section.

Actually, the track is a generic container which displays nothing by itself. It just mainly owns sections. These sections are the “true” containers which build, from the coordinates and parameters you gave, some sub-sections which have for each one a road, four walls (back, front, left and right sides) and four sceneries (the same). So, here is an example to get a track section and modify the section width (it is quite Java/C++ style):

        self.track = Track()
        self.track.addSection(None,100.0,None,None,  0.0,V2(20.0,20.0))
        wSection = self.track.getSection(0)
        wSection.setWidth(V2(20,40))

…which gives…

Anyway thanks for your comments. :slight_smile: