Code Monkey home page Code Monkey logo

rigsofrods / rigs-of-rods Goto Github PK

View Code? Open in Web Editor NEW
970.0 77.0 173.0 218.88 MB

Main development repository for Rigs of Rods soft-body physics simulator

Home Page: https://www.rigsofrods.org

License: GNU General Public License v3.0

CMake 0.78% HTML 0.12% GLSL 0.76% Assembly 0.03% C++ 89.05% C 3.47% Objective-C 0.08% HLSL 1.06% 1C Enterprise 0.10% AngelScript 4.25% Shell 0.01% Python 0.31%
physics-simulation sandbox-game soft-bodies trucks trailers trains boats airplanes cars

rigs-of-rods's Introduction

Rigs of Rods

Join Discord downloads release contributors issues-pr last commit Translations Coverity Scan Status Build game

Rigs of Rods is a free/libre soft-body physics simulator mainly targeted at simulating vehicle physics. The soft-body physics system is based on mass-spring-damper theory.
For a simple overview of the features Rigs of Rods provides please refer to doc/Things you can do in Rigs of Rods.pdf

Trailer:

Rigs of Rods Trailer

Supported platforms:

  • Windows
  • Linux

Further documentation

Paths

$bin - compiled binaries
$res - resources/assets for the game
$user - user-created mods, configuration files, logs, screenshots

Windows:
$bin = source\bin
$res = source\bin\resources
$user = Documents\My Games\Rigs of Rods

Linux:
$bin = source/bin
$res = source/bin/resources
$user = ~/.rigsofrods

Controls

Available commands depend on the vehicle you are in. For a graphical overview refer to doc/keysheet.pdf
For an indepth view refer to this Documentation page or $user/config/input.map
Please note that certain vehicles come with their own specific commands not represented in the above sources. In this case see the vehicle's documentation or go to Menu -> Simulation -> Show vehicle description.
Rigs is Rods can also be played with Gamepads, Joysticks, Wheels and other controllers, including support for Force Feedback.

Basic controls:
key effect
arrow keys move, steer, accelerate, decelarate
mouse+rightclick rotate camera
mousewheel+rightclick camera zoom
C change camera perspective
T display vehicle stats
CTRL+T show vehicle description
BACKSPACE reset vehicle at current location
I reset vehicle to spawnpoint
TAB show minimap
ESC show menu
A/Z trucks: shift up/down
CTRL+HOME aircrafts: start engine
Page Up/Down aircrafts: increase/decrease throttle
F1/F2 helicopters: lift up/down
Print Screen create screenshot in $user/screenshots folder

Content/Mods

Rigs of Rods only comes with a very small selection of vehicles and terrains. For the best experience download some mods from the Rigs of Rods Mod Repository. The Showroom Subforum may contain additional content not found in the Mod Repository.
If you want to get going quickly have a look at the content packs which can be found in the Mod Repository as well.

Configuration files

  • Default location:
    $user/config/*
  • They are created by Rigs of Rods on first use

Command-line options

  • -map <mapname>
    • loads map <mapname> on startup. Example:
      • RoR.exe -map aspen
    • note: do not add .terrn2 file format extension
  • -truck <truckfile>
    • loads a truck on startup. Example:
      • RoR.exe -map oahu -truck semi.truck
      • RoR.exe -map oahu -truck an-12.airplane
  • -enter
    • enter selected truck by -truck option on startup
  • -setup
    • displays OGRE3D settings dialog instead of loading settings from ogre.cfg
  • -help
    • displays help for command line arguments

Compiling

For instructions refer to BUILDING.md

License of Rigs of Rods

Copyright (c) 2005-2013 Pierre-Michel Ricordel
Copyright (c) 2007-2013 Thomas Fischer
Copyright (c) 2009-2020 Rigs of Rods Contributors

Rigs of Rods went open source under GPLv2 or later on the 8th of February, 2009.

Rigs of Rods is now licensed under GPLv3 or later:

Rigs of Rods is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License version 3, as
published by the Free Software Foundation.

Rigs of Rods is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with Rigs of Rods. If not, see <http://www.gnu.org/licenses/>.

rigs-of-rods's People

Contributors

anotherfoxguy avatar antonid330 avatar aperion avatar bob-z avatar cryham avatar curiousmike56 avatar dependabot[bot] avatar gibbzy avatar goetterescu avatar hiradur avatar itserrvlad avatar joako360 avatar lisapple avatar maronghappy avatar mikadou avatar mxtapps avatar ohlidalp avatar paroj avatar quint-09 avatar santossi avatar ser82-png avatar siradam7th avatar speciesx avatar timgott avatar tritonas00 avatar ulteq avatar vido89 avatar vorot93 avatar weblate avatar zentro avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rigs-of-rods's Issues

Multiplayer not working correctly.

So I've been testing with Hotrod55 few multiplayer stuffs and all we can say is that our cars are spawned and stays at the edge of the map. This bug happens only when using the upstream version. But you can still see other players (0.38 most) fine, they move around in the map and they're not at the edge of the map. Only me and Hotrod55 are at the edge of the map and even tho we have the same versions, we still can't see each others.

I believe this is caused by the new parser not sending correct packets.

Steps:
Requirements: A friend that also has the same version or you can just start 2 instances of RoR;
1/ Start RoR Config -> Select any server
2/ Start RoR1 -> Select a map if needed -> select any vehicle
3/ Start RoR2 -> Select the same map -> don't spawn a vehicle.
4/ On RoR2, you will find the vehicle on the edge of the map. Same applies if you spawn a vehicle on RoR2 and watch it from RoR1.

Sounds Restart When Switching Cameras

When you change from an exterior camera view to a cinecam, whatever sounds are playing restart from the beginning. This is particularly noticeable (and annoying) on vehicles with sirens.
The only camera change that doesn't restart sounds is switching from the "TV cam" view to the "chase cam".
I believe this bug was introduced in 0.39.0.

Crash with XBOX360 controller connected (Linux)

Happens when entering a vehicle.

RoR console output:

LinuxForceFeedback(19) : Setting master gain to 1 => 65535
Texture: mv4speedo.dds: Loading 1 faces(PF_DXT1,256x256x1) with 8 custom mipmaps from Image. Internal format is PF_DXT1,256x256x1.
Texture: mv4tacho.dds: Loading 1 faces(PF_R8G8B8,256x256x1) with 8 custom mipmaps from Image. Internal format is PF_X8R8G8B8,256x256x1.
Texture: tractioncontrol-2.png: Loading 1 faces(PF_A8R8G8B8,64x64x1) with 0 generated mipmaps from Image. Internal format is PF_A8R8G8B8,64x64x1.
Texture: antilockbrake-2.png: Loading 1 faces(PF_A8R8G8B8,64x64x1) with 0 generated mipmaps from Image. Internal format is PF_A8R8G8B8,64x64x1.
terminate called after throwing an instance of 'OIS::Exception'
  what():  Unknown error creating effect (may be the device is full)->..
Aborted (core dumped)

gdb:

Core was generated by `./RoR'.
Program terminated with signal SIGABRT, Aborted.
#0  0x00007f4832552bb9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56  ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0  0x00007f4832552bb9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#1  0x00007f4832555fc8 in __GI_abort () at abort.c:89
#2  0x00007f4832e5e6b5 in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#3  0x00007f4832e5c836 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4  0x00007f4832e5c863 in std::terminate() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#5  0x00007f4832e5caa2 in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6  0x00007f48342e1975 in OIS::LinuxForceFeedback::_upload(ff_effect*, OIS::Effect const*) () from /usr/lib/x86_64-linux-gnu/libOIS-1.3.0.so
#7  0x00007f48342e2002 in OIS::LinuxForceFeedback::_updateConstantEffect(OIS::Effect const*) () from /usr/lib/x86_64-linux-gnu/libOIS-1.3.0.so
#8  0x00000000006d1190 in ForceFeedback::setForces(float, float, float, float, float) ()
#9  0x00000000005284ec in RoRFrameListener::frameStarted(Ogre::FrameEvent const&) ()
#10 0x00007f4834f4bf2c in Ogre::Root::_fireFrameStarted(Ogre::FrameEvent&) () from /usr/local/lib/libOgreMain.so.1.8.1
#11 0x00007f4834f4d7d1 in Ogre::Root::_fireFrameStarted() () from /usr/local/lib/libOgreMain.so.1.8.1
#12 0x00007f4834f4d8d9 in Ogre::Root::renderOneFrame() () from /usr/local/lib/libOgreMain.so.1.8.1
#13 0x00000000007a3704 in RoR::MainThread::EnterGameplayLoop() ()
#14 0x00000000007a88a0 in RoR::MainThread::Go() ()
#15 0x00000000004fee7e in main ()

Segfault when entering any vehicle (Linux)

snippet from RoR.log:

== Validating vehicle: Bus RVI Agora S
== Validating done OK
== Spawning vehicle: Bus RVI Agora S
ResourceTrueTypeFont 'DefaultDashFont' using texture size 256 x 256
ResourceTrueTypeFont 'DefaultDashFont' using real height 19 pixels
Freetype returned nullptr for character 1025 in font DefaultDashFont
Freetype returned nullptr for character 1040 in font DefaultDashFont
Freetype returned nullptr for character 1041 in font DefaultDashFont
Freetype returned nullptr for character 1042 in font DefaultDashFont
Freetype returned nullptr for character 1043 in font DefaultDashFont
Freetype returned nullptr for character 1044 in font DefaultDashFont

Freetype returned nullptr for character 1101 in font DefaultDashFont
Freetype returned nullptr for character 1102 in font DefaultDashFont
Freetype returned nullptr for character 1103 in font DefaultDashFont
Freetype returned nullptr for character 1105 in font DefaultDashFont
Freetype returned nullptr for character 8470 in font DefaultDashFont
Segmentation fault (core dumped)

Assertion fails for debug build (Linux)

RoR: rigsofrods-next-stable/source/main/utils/Singleton.h:83: static T* RoRSingletonNoCreation::getSingletonPtr() [with T = GUI_MainMenu]: Assertion `_instance' failed.

Custom Lighting for User-Defined Flares and Materialflares

This is a standalone feature request ticket for my ideas posted here: #21

As it stands, only "main lights" (flares with 'b', 'r/l', 'R', and 'f' tags) emit any kind of useable light and even then, the color and brightness is fixed.
User-defined flares with the 'u' tag only emit a dim white light, which isn't really useable at all.

My idea for flares is this:

  1. For the color of the light flares emit to be determined by the color of the flare texture itself
    and
  2. To have the option to set the brightness of the light coming from the flare (or to have no light coming from the flare) by entering a value at the end of the flare's line

Elaboration on point 1:
Keep in mind, user-defined flares often use Animated Textures to portray different flash patterns.
You can get creative with the animations, and in the past to I have been able to simulate warming up and fading of incandescent/halogen type bulbs, and even to have a flare strobe between different colors.
This means that the color light the flare emits would have to be assessed through every frame of the animation.

Elaboration on point 2:
My idea for this is that the brightness of the light should first be based on the alpha channel of the flare texture (this way the light coming from a simulated incandescent/halogen flare would also fade in/out with the animation).
I picture a multiplier-type value being used to adjust the brightness further.
Let's assume a solid color, no transparency flare texture is used. This would emit say 500 lumen (or whatever unit RoR would use) by default:
A default multiplier of 1 (or -1) would mean 500 lumen is emitted.
Let's say this flare is used just as an indicator light inside of the vehicle, and having it emit light would be a waste:
A multiplier of 0 would be entered, so the flare emits 0 lumen.
Now let's say this flare is a spotlight on an emergency vehicle, and needs to emit a bright light:
A multiplier of 4.5 would be entered and 2250 lumen would be emitted.
Etc.

I'm only into basic programming, so I've tried to break this down as detailed as I can for you guys who actually know what you're doing.
This is just an idea I've had for a while for how to make user-defined flares a bit more useful, and main lights a bit more customizable, so by no means do I expect this to be a priority since it would probably involve a lot of coding for a simple unimportant feature.

Before I wrap-up, I also mentioned Materialflares-- they emit no light at all.
Materialflares are limited to only two textures (on and off) and they usually don't use transparency or use a solid-color, so the flare's system for light color/brightness would not be very accurate if it was put in place here.
I don't know how materialflares could be made to emit light, but I just wanted to make mention of this fact.
Also, a feature called "Glow" used to exist which spiced up materialflares (http://www.rigsofrods.com/wiki/pages/Adding_Glow), but this broke at some point (loading a mesh with a glowing materialflare in 0.4.0.7 produces a black texture).
Even just bringing glow back would make materialflares a little more useful and take minimal effort.

Thanks for reading.

Segfault on exit (Linux)

Not much of an issue but may leave a bad impression ;)
When hitting the Quit button in the main menu:

Core was generated by `./RoR'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007fe91448913f in ?? () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
(gdb) bt
#0  0x00007fe91448913f in ?? () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
#1  0x00007fe918682bb8 in ?? () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#2  0x00007fe918682cfc in ?? () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#3  0x00007fe918682fcd in _XEventsQueued ()
   from /usr/lib/x86_64-linux-gnu/libX11.so.6
#4  0x00007fe91867512d in XPending ()
   from /usr/lib/x86_64-linux-gnu/libX11.so.6
#5  0x00007fe91b1685fc in OIS::LinuxMouse::_processXEvents() ()
   from /usr/lib/x86_64-linux-gnu/libOIS-1.3.0.so
#6  0x00007fe91b168982 in OIS::LinuxMouse::capture() ()
   from /usr/lib/x86_64-linux-gnu/libOIS-1.3.0.so
#7  0x0000000000749eb6 in InputEngine::Capture (this=0x340d780)
    at /home/-/Desktop/copy of rigsofrods-next-stable/source/main/utils/InputEngine.cpp:2134
#8  0x0000000000781ef1 in RoR::MainThread::MainMenuLoopUpdate (
    this=this@entry=0x7fffa1326ef0, seconds_since_last_frame=0,0500000007)
    at /home/-/Desktop/copy of rigsofrods-next-stable/source/main/main_sim/MainThread.cpp:1031
#9  0x0000000000782186 in RoR::MainThread::EnterMainMenuLoop (
    this=this@entry=0x7fffa1326ef0)
    at /home/-/Desktop/copy of rigsofrods-next-stable/source/main/main_sim/MainThread.cpp:861
#10 0x0000000000786bfd in RoR::MainThread::Go (this=this@entry=0x7fffa1326ef0)

When hitting exit from the drop down menu ingame:

Program received signal SIGSEGV, Segmentation fault.
0x00007fffefb6913f in ?? () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
(gdb) bt
#0  0x00007fffefb6913f in ?? () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
#1  0x00007ffff3d62bb8 in ?? () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#2  0x00007ffff3d62cfc in ?? () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#3  0x00007ffff3d62fcd in _XEventsQueued ()
   from /usr/lib/x86_64-linux-gnu/libX11.so.6
#4  0x00007ffff3d5512d in XPending ()
   from /usr/lib/x86_64-linux-gnu/libX11.so.6
#5  0x00007ffff68485fc in OIS::LinuxMouse::_processXEvents() ()
   from /usr/lib/x86_64-linux-gnu/libOIS-1.3.0.so
#6  0x00007ffff6848982 in OIS::LinuxMouse::capture() ()
   from /usr/lib/x86_64-linux-gnu/libOIS-1.3.0.so
#7  0x0000000000733bd0 in InputEngine::Capture() ()
#8  0x00000000005293ac in RoRFrameListener::frameStarted(Ogre::FrameEvent const&) ()
#9  0x00007ffff74aff2c in Ogre::Root::_fireFrameStarted(Ogre::FrameEvent&) ()
   from /usr/local/lib/libOgreMain.so.1.8.1
#10 0x00007ffff74b17d1 in Ogre::Root::_fireFrameStarted() ()
   from /usr/local/lib/libOgreMain.so.1.8.1
#11 0x00007ffff74b18d9 in Ogre::Root::renderOneFrame() ()
   from /usr/local/lib/libOgreMain.so.1.8.1
#12 0x00000000007695c0 in RoR::MainThread::EnterGameplayLoop() ()
#13 0x000000000076e2e3 in RoR::MainThread::Go() ()
#14 0x00000000005040f7 in main ()
(gdb) 

Reflections visible from last used terrain

When switching maps, the reflections from the first map and the "Last Lap" dialog is still shown.
screenshot_40
The first map I was playing on was F1 Test Track then switched to N-Labs, you can see the tree reflection from F1 track.
screenshot_41
Switched to another map, Mirror still shows F1's reflection.

Update setting file to use sections?

One could say that INI config files (Or a Linux equivalent) are more organized, thus, we can organize graphics settings alone, physics settings alone, etc..

Edit: I didn't know that they actually were inis. What we should do here is use sections.

free_truck variable acting weird

Yup, I've been looking at how to delete sounds and I've came up with this.
free_truck is simply acting weird. I've spawned a Vehicle ingame, free_truck = 1
Back to menu, the vehicle is destroyed, thus when loading an other map and an other truck it should be free_truck = 1 but no. It's free_truck = 2.
I tried to do free_truck--; on the code where the truck is deleted, then RoR goes weird (On second respawn, the vehicle is glitched).

P.S: Shouldn't free_truck mean the number of free slots?

I don't have a lot of time nor enough knowledge of RoR's spawning system for the moment to remake this but if anyone knows, would be great to fix it.

Move all screenshots to a folder instead

For the moment, all screenshots are saved at the root folder: My Documents/Rigs of rods 0.XX/
I believe that if we move them to: My Documents/Rigs of rods 0.XX/Screenshots/
It will be more organized and clearer.

Brakes Apply Too Suddenly

Unless you drive with a controller you probably haven't noticed this, but the brakes apply much too quickly.
Simply tapping the brake pedal on most vehicles will bring them to a stop, if not lurch them to a stop.
In contrast, fully depressing the brake pedal struggles to stop some vehicles.

Finding a brake force value that is a happy-medium is difficult when creating a vehicle:
Setting the value too high means the vehicle can stop quickly, but tapping the brake even lightly could lock up the wheels.
Setting the value too low makes the brakes apply smoothy, but good luck coming to a complete stop.

I would expect as the brake pedal is depressed, brake force at least increases proportionately, but this is not the case.
For some reason too much force is applied too early.

brake_force

Asynchronous loading of objects to avoid freeze

So I've been focusing on few multiplayer stuffs lately and I've noticed something. Each time a player loads a car, the game freezes. Each time I join a server that is heavily modded, the game freezes each time a new object is loaded on the map.
I thought that if we change all those loading to an other thread rather than the main one, it could improve things.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.