Rigs of Rods 2023.09
Soft-body Physics Simulation
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Loading...
Searching...
No Matches
Application.cpp
Go to the documentation of this file.
1/*
2 This source file is part of Rigs of Rods
3 Copyright 2005-2012 Pierre-Michel Ricordel
4 Copyright 2007-2012 Thomas Fischer
5 Copyright 2013-2020 Petr Ohlidal
6
7 For more information see http://www.rigsofrods.org/
8
9 Rigs of Rods is free software: you can redistribute it and/or modify
10 it under the terms of the GNU General Public License version 3, as
11 published by the Free Software Foundation.
12
13 Rigs of Rods is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with Rigs of Rods. If not, see <http://www.gnu.org/licenses/>.
20*/
21
25
26#include "Application.h"
27
28#include "AppContext.h"
29#include "CacheSystem.h"
30#include "CameraManager.h"
31#include "Console.h"
32#include "ContentManager.h"
33#include "DiscordRpc.h"
34#include "GameContext.h"
35#include "GfxScene.h"
36#include "GUIManager.h"
37#include "InputEngine.h"
38#include "Language.h"
39#include "OutGauge.h"
40#include "OverlayWrapper.h"
41#include "MumbleIntegration.h"
42#include "Network.h"
43#include "ScriptEngine.h"
44#include "SoundScriptManager.h"
45#include "Terrain.h"
46#include "ThreadPool.h"
47
48namespace RoR {
49namespace App {
50
51// ------------------------------------------------------------------------------------------------
52// Global variables
53// ------------------------------------------------------------------------------------------------
54
55// Object instances
64static GUIManager* g_gui_manager = nullptr;
65static InputEngine* g_input_engine = nullptr;
67static MumbleIntegration* g_mumble = nullptr;
70static ScriptEngine* g_script_engine = nullptr;
72static Terrain* g_sim_terrain = nullptr;
73static ThreadPool* g_thread_pool = nullptr;
74#if USE_SOCKETW
76#endif
77
78// App
94
95// Simulation
113
114// Multiplayer
128
129// New remote API
131
132// Diagnostic
161
162// System
176
177// OS command line
189
190// Input - Output
209
210// Audio
227
228// Graphics
265
266// Flexbodies
274
275// GUI
283
284// Instance access
292MumbleIntegration* GetMumble () { return g_mumble; }
302#if USE_SOCKETW
303 Network* GetNetwork () { return &g_network; }
304#else
305 Network* GetNetwork () { return nullptr; }
306#endif
307
308// Factories
314
320
326
328{
329#ifdef USE_MUMBLE // The class is always forward-declared but only defined if USE_MUMBLE is defined
331 g_mumble = new MumbleIntegration();
332#endif // USE_MUMBLE
333}
334
340
346
352
354{
355#if USE_OPENAL
358#endif
359}
360
362{
363#if USE_ANGELSCRIPT
366#endif
367}
368
369// Cleanup
371{
372 delete g_overlay_wrapper;
373 g_overlay_wrapper = nullptr;
374}
375
377{
378 delete g_input_engine;
379 g_input_engine = nullptr;
380}
381
382} // namespace App
383
384// ------------------------------------------------------------------------------------------------
385// Global exception handling
386// ------------------------------------------------------------------------------------------------
387
388void HandleGenericException(const std::string& from, BitMask_t flags)
389{
390 try
391 {
392 throw; // rethrow
393 }
394 catch (Ogre::Exception& oex)
395 {
398 else if (flags & HANDLEGENERICEXCEPTION_LOGFILE)
399 LOG(fmt::format("{}: {}", from, oex.getDescription()));
400#ifdef USE_ANGELSCRIPT
403#endif
404 }
405 catch (std::exception& stex)
406 {
408 App::GetConsole()->putMessage(Console::CONSOLE_MSGTYPE_INFO, Console::CONSOLE_SYSTEM_ERROR, fmt::format("{}: {}", from, stex.what()));
409 else if (flags & HANDLEGENERICEXCEPTION_LOGFILE)
410 LOG(fmt::format("{}: {}", from, stex.what()));
411#ifdef USE_ANGELSCRIPT
414#endif
415 }
416 catch (...)
417 {
419 App::GetConsole()->putMessage(Console::CONSOLE_MSGTYPE_INFO, Console::CONSOLE_SYSTEM_ERROR, fmt::format("{}: Unknown exception", from));
420 else if (flags & HANDLEGENERICEXCEPTION_LOGFILE)
421 LOG(fmt::format("{}: Unknown exception", from));
422#ifdef USE_ANGELSCRIPT
425#endif
426 }
427}
428
433
434// ------------------------------------------------------------------------------------------------
435// Global logging
436// ------------------------------------------------------------------------------------------------
437
438void Log(const char* msg)
439{
440 Ogre::LogManager::getSingleton().logMessage(msg);
441}
442
443void LogFormat(const char* format, ...)
444{
445 char buffer[2000] = {};
446
447 va_list args;
448 va_start(args, format);
449 vsprintf(buffer, format, args);
450 va_end(args);
451
452 RoR::Log(buffer);
453}
454
455// ------------------------------------------------------------------------------------------------
456// Global enums
457// ------------------------------------------------------------------------------------------------
458
460{
461 switch (e)
462 {
463 case SimGearboxMode::AUTO: return _LC("SimGearboxMode", "Automatic shift");
464 case SimGearboxMode::SEMI_AUTO: return _LC("SimGearboxMode", "Manual shift with auto clutch");
465 case SimGearboxMode::MANUAL: return _LC("SimGearboxMode", "Fully manual: sequential shift");
466 case SimGearboxMode::MANUAL_STICK: return _LC("SimGearboxMode", "Fully manual: stick shift");
467 case SimGearboxMode::MANUAL_RANGES: return _LC("SimGearboxMode", "Fully manual: stick shift with ranges");
468 default: return "";
469 }
470}
471
473{
474 switch (e)
475 {
476 case GfxFlaresMode::NONE: return _LC("GfxFlaresMode", "None (fastest)");
477 case GfxFlaresMode::NO_LIGHTSOURCES: return _LC("GfxFlaresMode", "No light sources");
478 case GfxFlaresMode::CURR_VEHICLE_HEAD_ONLY: return _LC("GfxFlaresMode", "Only current vehicle, main lights");
479 case GfxFlaresMode::ALL_VEHICLES_HEAD_ONLY: return _LC("GfxFlaresMode", "All vehicles, main lights");
480 case GfxFlaresMode::ALL_VEHICLES_ALL_LIGHTS: return _LC("GfxFlaresMode", "All vehicles, all lights");
481 default: return "";
482 }
483}
484
486{
487 switch (e)
488 {
489 case GfxShadowType::NONE: return _LC("GfxShadowType", "Disabled");
490 case GfxShadowType::PSSM: return _LC("GfxShadowType", "PSSM");
491 default: return "";
492 }
493}
494
496{
497 switch (e)
498 {
499 case GfxSkyMode::SANDSTORM: return _LC("GfxSkyMode", "Sandstorm (fastest)");
500 case GfxSkyMode::CAELUM: return _LC("GfxSkyMode", "Caelum (best looking, slower)");
501 case GfxSkyMode::SKYX: return _LC("GfxSkyMode", "SkyX (best looking, slower)");
502 default: return "";
503 }
504}
505
507{
508 switch (e)
509 {
510 case GfxTexFilter::NONE: return _LC("GfxTexFilter", "None");
511 case GfxTexFilter::BILINEAR: return _LC("GfxTexFilter", "Bilinear");
512 case GfxTexFilter::TRILINEAR: return _LC("GfxTexFilter", "Trilinear");
513 case GfxTexFilter::ANISOTROPIC: return _LC("GfxTexFilter", "Anisotropic");
514 default: return "";
515 }
516}
517
519{
520 switch (e)
521 {
522 case GfxVegetation::NONE: return _LC("GfxVegetation", "None");
523 case GfxVegetation::x20PERC: return _LC("GfxVegetation", "20%");
524 case GfxVegetation::x50PERC: return _LC("GfxVegetation", "50%");
525 case GfxVegetation::FULL: return _LC("GfxVegetation", "Full");
526 default: return "";
527 }
528}
529
531{
532 switch (e)
533 {
534 case GfxWaterMode::NONE: return _LC("GfxWaterMode", "None");
535 case GfxWaterMode::BASIC: return _LC("GfxWaterMode", "Basic (fastest)");
536 case GfxWaterMode::REFLECT: return _LC("GfxWaterMode", "Reflection");
537 case GfxWaterMode::FULL_FAST: return _LC("GfxWaterMode", "Reflection + refraction (speed optimized)");
538 case GfxWaterMode::FULL_HQ: return _LC("GfxWaterMode", "Reflection + refraction (quality optimized)");
539 case GfxWaterMode::HYDRAX: return _LC("GfxWaterMode", "HydraX");
540 default: return "";
541 }
542}
543
545{
546 switch (e)
547 {
548 case GfxExtCamMode::NONE: return _LC("GfxExtCamMode", "None");
549 case GfxExtCamMode::STATIC: return _LC("GfxExtCamMode", "Static");
550 case GfxExtCamMode::PITCHING: return _LC("GfxExtCamMode", "Pitching");
551 default: return "";
552 }
553}
554
556{
557 switch (e)
558 {
559 case IoInputGrabMode::NONE: return _LC("IoInputGrabMode", "None");
560 case IoInputGrabMode::ALL: return _LC("IoInputGrabMode", "All");
561 case IoInputGrabMode::DYNAMIC: return _LC("IoInputGrabMode", "Dynamic");
562 default: return "";
563 }
564}
565
567{
568 switch (e)
569 {
570 case EfxReverbEngine::NONE: return _LC("EfxReverbEngine", "None (no reverb, fastest)");
571 case EfxReverbEngine::REVERB: return _LC("EfxReverbEngine", "REVERB");
572 case EfxReverbEngine::EAXREVERB: return _LC("EfxReverbEngine", "EAXREVERB (more realistic effects, slower)");
573 default: return "";
574 }
575}
576
578{
579 switch (e)
580 {
581 case SimResetMode::HARD: return _LC("SimResetMode", "Hard");
582 case SimResetMode::SOFT: return _LC("SimResetMode", "Soft");
583 default: return "";
584 }
585}
586
588{
589 switch (e)
590 {
591 case UiPreset::NOVICE: return _LC("UiPreset", "Novice");
592 case UiPreset::REGULAR: return _LC("UiPreset", "Regular");
593 case UiPreset::EXPERT: return _LC("UiPreset", "Expert");
594 case UiPreset::MINIMALLIST: return _LC("UiPreset", "Minimallist");
595 default: return "";
596 }
597}
598
599const char* MsgTypeToString(MsgType type)
600{
601 switch (type)
602 {
603 case MSG_APP_SHUTDOWN_REQUESTED : return "MSG_APP_SHUTDOWN_REQUESTED";
604 case MSG_APP_SCREENSHOT_REQUESTED : return "MSG_APP_SCREENSHOT_REQUESTED";
605 case MSG_APP_DISPLAY_FULLSCREEN_REQUESTED : return "MSG_APP_DISPLAY_FULLSCREEN_REQUESTED";
606 case MSG_APP_DISPLAY_WINDOWED_REQUESTED : return "MSG_APP_DISPLAY_WINDOWED_REQUESTED";
607 case MSG_APP_MODCACHE_LOAD_REQUESTED : return "MSG_APP_MODCACHE_LOAD_REQUESTED";
608 case MSG_APP_MODCACHE_UPDATE_REQUESTED : return "MSG_APP_MODCACHE_UPDATE_REQUESTED";
609 case MSG_APP_MODCACHE_PURGE_REQUESTED : return "MSG_APP_MODCACHE_PURGE_REQUESTED";
610 case MSG_APP_LOAD_SCRIPT_REQUESTED : return "MSG_APP_LOAD_SCRIPT_REQUESTED";
611 case MSG_APP_UNLOAD_SCRIPT_REQUESTED : return "MSG_APP_UNLOAD_SCRIPT_REQUESTED";
612 case MSG_APP_SCRIPT_THREAD_STATUS : return "MSG_APP_SCRIPT_THREAD_STATUS";
613 case MSG_APP_REINIT_INPUT_REQUESTED : return "MSG_APP_REINIT_INPUT_REQUESTED";
614
615 case MSG_NET_CONNECT_REQUESTED : return "MSG_NET_CONNECT_REQUESTED";
616 case MSG_NET_CONNECT_STARTED : return "MSG_NET_CONNECT_STARTED";
617 case MSG_NET_CONNECT_PROGRESS : return "MSG_NET_CONNECT_PROGRESS";
618 case MSG_NET_CONNECT_SUCCESS : return "MSG_NET_CONNECT_SUCCESS";
619 case MSG_NET_CONNECT_FAILURE : return "MSG_NET_CONNECT_FAILURE";
620 case MSG_NET_SERVER_KICK : return "MSG_NET_SERVER_KICK";
621 case MSG_NET_DISCONNECT_REQUESTED : return "MSG_NET_DISCONNECT_REQUESTED";
622 case MSG_NET_USER_DISCONNECT : return "MSG_NET_USER_DISCONNECT";
623 case MSG_NET_RECV_ERROR : return "MSG_NET_RECV_ERROR";
624 case MSG_NET_REFRESH_SERVERLIST_SUCCESS : return "MSG_NET_REFRESH_SERVERLIST_SUCCESS";
625 case MSG_NET_REFRESH_SERVERLIST_FAILURE : return "MSG_NET_REFRESH_SERVERLIST_FAILURE";
626 case MSG_NET_REFRESH_REPOLIST_SUCCESS : return "MSG_NET_REFRESH_REPOLIST_SUCCESS";
627 case MSG_NET_OPEN_RESOURCE_SUCCESS : return "MSG_NET_OPEN_RESOURCE_SUCCESS";
628 case MSG_NET_REFRESH_REPOLIST_FAILURE : return "MSG_NET_REFRESH_REPOLIST_FAILURE";
629 case MSG_NET_FETCH_AI_PRESETS_SUCCESS : return "MSG_NET_FETCH_AI_PRESETS_SUCCESS";
630 case MSG_NET_FETCH_AI_PRESETS_FAILURE : return "MSG_NET_FETCH_AI_PRESETS_FAILURE";
631 case MSG_NET_ADD_PEEROPTIONS_REQUESTED : return "MSG_NET_ADD_PEEROPTIONS_REQUESTED";
632 case MSG_NET_REMOVE_PEEROPTIONS_REQUESTED : return "MSG_NET_REMOVE_PEEROPTIONS_REQUESTED";
633 case MSG_NET_DOWNLOAD_REPOFILE_REQUESTED : return "MSG_NET_DOWNLOAD_REPOFILE_REQUESTED";
634 case MSG_NET_DOWNLOAD_REPOFILE_SUCCESS : return "MSG_NET_DOWNLOAD_REPOFILE_SUCCESS";
635 case MSG_NET_DOWNLOAD_REPOFILE_FAILURE : return "MSG_NET_DOWNLOAD_REPOFILE_FAILURE";
636 case MSG_NET_DOWNLOAD_REPOFILE_PROGRESS : return "MSG_NET_DOWNLOAD_REPOFILE_PROGRESS";
637
638 case MSG_SIM_PAUSE_REQUESTED : return "MSG_SIM_PAUSE_REQUESTED";
639 case MSG_SIM_UNPAUSE_REQUESTED : return "MSG_SIM_UNPAUSE_REQUESTED";
640 case MSG_SIM_LOAD_TERRN_REQUESTED : return "MSG_SIM_LOAD_TERRN_REQUESTED";
641 case MSG_SIM_LOAD_SAVEGAME_REQUESTED : return "MSG_SIM_LOAD_SAVEGAME_REQUESTED";
642 case MSG_SIM_UNLOAD_TERRN_REQUESTED : return "MSG_SIM_UNLOAD_TERRN_REQUESTED";
643 case MSG_SIM_SPAWN_ACTOR_REQUESTED : return "MSG_SIM_SPAWN_ACTOR_REQUESTED";
644 case MSG_SIM_MODIFY_ACTOR_REQUESTED : return "MSG_SIM_MODIFY_ACTOR_REQUESTED";
645 case MSG_SIM_DELETE_ACTOR_REQUESTED : return "MSG_SIM_DELETE_ACTOR_REQUESTED";
646 case MSG_SIM_SEAT_PLAYER_REQUESTED : return "MSG_SIM_SEAT_PLAYER_REQUESTED";
647 case MSG_SIM_TELEPORT_PLAYER_REQUESTED : return "MSG_SIM_TELEPORT_PLAYER_REQUESTED";
648 case MSG_SIM_HIDE_NET_ACTOR_REQUESTED : return "MSG_SIM_HIDE_NET_ACTOR_REQUESTED";
649 case MSG_SIM_UNHIDE_NET_ACTOR_REQUESTED : return "MSG_SIM_UNHIDE_NET_ACTOR_REQUESTED";
650 case MSG_SIM_MUTE_NET_ACTOR_REQUESTED : return "MSG_SIM_MUTE_NET_ACTOR_REQUESTED";
651 case MSG_SIM_UNMUTE_NET_ACTOR_REQUESTED : return "MSG_SIM_UNMUTE_NET_ACTOR_REQUESTED";
652 case MSG_SIM_SCRIPT_EVENT_TRIGGERED : return "MSG_SIM_SCRIPT_EVENT_TRIGGERED";
653 case MSG_SIM_SCRIPT_CALLBACK_QUEUED : return "MSG_SIM_SCRIPT_CALLBACK_QUEUED";
654 case MSG_SIM_ACTOR_LINKING_REQUESTED : return "MSG_SIM_ACTOR_LINKING_REQUESTED";
655 case MSG_SIM_ADD_FREEFORCE_REQUESTED : return "MSG_SIM_ADD_FREEFORCE_REQUESTED";
656 case MSG_SIM_MODIFY_FREEFORCE_REQUESTED : return "MSG_SIM_MODIFY_FREEFORCE_REQUESTED";
657 case MSG_SIM_REMOVE_FREEFORCE_REQUESTED : return "MSG_SIM_REMOVE_FREEFORCE_REQUESTED";
658
659 case MSG_GUI_OPEN_MENU_REQUESTED : return "MSG_GUI_OPEN_MENU_REQUESTED";
660 case MSG_GUI_CLOSE_MENU_REQUESTED : return "MSG_GUI_CLOSE_MENU_REQUESTED";
661 case MSG_GUI_OPEN_SELECTOR_REQUESTED : return "MSG_GUI_OPEN_SELECTOR_REQUESTED";
662 case MSG_GUI_CLOSE_SELECTOR_REQUESTED : return "MSG_GUI_CLOSE_SELECTOR_REQUESTED";
663 case MSG_GUI_MP_CLIENTS_REFRESH : return "MSG_GUI_MP_CLIENTS_REFRESH";
664 case MSG_GUI_SHOW_MESSAGE_BOX_REQUESTED : return "MSG_GUI_SHOW_MESSAGE_BOX_REQUESTED";
665 case MSG_GUI_HIDE_MESSAGE_BOX_REQUESTED : return "MSG_GUI_HIDE_MESSAGE_BOX_REQUESTED";
666 case MSG_GUI_REFRESH_TUNING_MENU_REQUESTED: return "MSG_GUI_REFRESH_TUNING_MENU_REQUESTED";
667
668 case MSG_EDI_MODIFY_GROUNDMODEL_REQUESTED : return "MSG_EDI_MODIFY_GROUNDMODEL_REQUESTED";
669 case MSG_EDI_ENTER_TERRN_EDITOR_REQUESTED : return "MSG_EDI_ENTER_TERRN_EDITOR_REQUESTED";
670 case MSG_EDI_LEAVE_TERRN_EDITOR_REQUESTED : return "MSG_EDI_LEAVE_TERRN_EDITOR_REQUESTED";
671 case MSG_EDI_SAVE_TERRN_CHANGES_REQUESTED : return "MSG_EDI_SAVE_TERRN_CHANGES_REQUESTED";
672 case MSG_EDI_LOAD_BUNDLE_REQUESTED : return "MSG_EDI_LOAD_BUNDLE_REQUESTED";
673 case MSG_EDI_RELOAD_BUNDLE_REQUESTED : return "MSG_EDI_RELOAD_BUNDLE_REQUESTED";
674 case MSG_EDI_UNLOAD_BUNDLE_REQUESTED : return "MSG_EDI_UNLOAD_BUNDLE_REQUESTED";
675 case MSG_EDI_CREATE_PROJECT_REQUESTED : return "MSG_EDI_CREATE_PROJECT_REQUESTED";
676 case MSG_EDI_MODIFY_PROJECT_REQUESTED : return "MSG_EDI_MODIFY_PROJECT_REQUESTED";
677 case MSG_EDI_DELETE_PROJECT_REQUESTED : return "MSG_EDI_DELETE_PROJECT_REQUESTED";
678 case MSG_EDI_ADD_FREEBEAMGFX_REQUESTED : return "MSG_EDI_ADD_FREEBEAMGFX_REQUESTED";
679 case MSG_EDI_MODIFY_FREEBEAMGFX_REQUESTED : return "MSG_EDI_MODIFY_FREEBEAMGFX_REQUESTED";
680 case MSG_EDI_DELETE_FREEBEAMGFX_REQUESTED : return "MSG_EDI_DELETE_FREEBEAMGFX_REQUESTED";
681
682 default: return "";
683 }
684}
685
687{
688 switch (val)
689 {
690 case TObjSpecialObject::TRUCK: return "truck";
691 case TObjSpecialObject::LOAD: return "load";
692 case TObjSpecialObject::MACHINE: return "machine";
693 case TObjSpecialObject::BOAT: return "boat";
694 case TObjSpecialObject::TRUCK2: return "truck2";
695 case TObjSpecialObject::GRID: return "grid";
696 case TObjSpecialObject::ROAD: return "road";
697 case TObjSpecialObject::ROAD_BORDER_LEFT: return "roadborderleft";
698 case TObjSpecialObject::ROAD_BORDER_RIGHT: return "roadborderright";
699 case TObjSpecialObject::ROAD_BORDER_BOTH: return "roadborderboth";
700 case TObjSpecialObject::ROAD_BRIDGE_NO_PILLARS: return "roadbridgenopillar";
701 case TObjSpecialObject::ROAD_BRIDGE: return "roadbridge";
702 default: return "";
703 }
704}
705
706} // namespace RoR
707
708namespace RigDef
709{
710
712{
713 // PLEASE maintain alphabetical order!
714
715 switch (keyword)
716 {
717 case Keyword::ADD_ANIMATION: return "add_animation";
718 case Keyword::AIRBRAKES: return "airbrakes";
719 case Keyword::ANIMATORS: return "animators";
720 case Keyword::ANTILOCKBRAKES: return "antilockbrakes";
721 case Keyword::AUTHOR: return "author";
722 case Keyword::AXLES: return "axles";
723 case Keyword::BEAMS: return "beams";
724 case Keyword::BRAKES: return "brakes";
725 case Keyword::CAB: return "cab";
726 case Keyword::CAMERAS: return "cameras";
727 case Keyword::CAMERARAIL: return "camerarail";
728 case Keyword::CINECAM: return "cinecam";
729 case Keyword::COLLISIONBOXES: return "collisionboxes";
730 case Keyword::COMMANDS: return "commands";
731 case Keyword::COMMANDS2: return "commands2";
732 case Keyword::COMMENT: return "comment";
733 case Keyword::CONTACTERS: return "contacters";
734 case Keyword::CRUISECONTROL: return "cruisecontrol";
735 case Keyword::DESCRIPTION: return "description";
736 case Keyword::DETACHER_GROUP: return "detacher_group";
737 case Keyword::DISABLEDEFAULTSOUNDS: return "disabledefaultsounds";
738 case Keyword::ENABLE_ADVANCED_DEFORMATION: return "enable_advanced_deformation";
739 case Keyword::END: return "end";
740 case Keyword::END_COMMENT: return "end_comment";
741 case Keyword::END_DESCRIPTION: return "end_description";
742 case Keyword::END_SECTION: return "end_section";
743 case Keyword::ENGINE: return "engine";
744 case Keyword::ENGOPTION: return "engoption";
745 case Keyword::ENGTURBO: return "engturbo";
746 case Keyword::EXHAUSTS: return "exhausts";
747 case Keyword::EXTCAMERA: return "extcamera";
748 case Keyword::FILEINFO: return "fileinfo";
749 case Keyword::FILEFORMATVERSION: return "fileformatversion";
750 case Keyword::FIXES: return "fixes";
751 case Keyword::FLARES: return "flares";
752 case Keyword::FLARES2: return "flares2";
753 case Keyword::FLARES3: return "flares3";
754 case Keyword::FLAREGROUPS_NO_IMPORT:return "flaregroups_no_import";
755 case Keyword::FLEXBODIES: return "flexbodies";
756 case Keyword::FLEXBODY_CAMERA_MODE: return "flexbody_camera_mode";
757 case Keyword::FLEXBODYWHEELS: return "flexbodywheels";
758 case Keyword::FORSET: return "forset";
759 case Keyword::FORWARDCOMMANDS: return "forwardcommands";
760 case Keyword::FUSEDRAG: return "fusedrag";
761 case Keyword::GLOBALS: return "globals";
762 case Keyword::GUID: return "guid";
763 case Keyword::GUISETTINGS: return "guisettings";
764 case Keyword::HELP: return "help";
765 case Keyword::HIDEINCHOOSER: return "hideinchooser";
766 case Keyword::HOOKGROUP: return "hookgroup";
767 case Keyword::HOOKS: return "hooks";
768 case Keyword::HYDROS: return "hydros";
769 case Keyword::IMPORTCOMMANDS: return "importcommands";
770 case Keyword::INTERAXLES: return "interaxles";
771 case Keyword::LOCKGROUPS: return "lockgroups";
772 case Keyword::LOCKGROUP_DEFAULT_NOLOCK: return "lockgroup_default_nolock";
773 case Keyword::MANAGEDMATERIALS: return "managedmaterials";
774 case Keyword::MATERIALFLAREBINDINGS: return "materialflarebindings";
775 case Keyword::MESHWHEELS: return "meshwheels";
776 case Keyword::MESHWHEELS2: return "meshwheels2";
777 case Keyword::MINIMASS: return "minimass";
778 case Keyword::NODES: return "nodes";
779 case Keyword::NODES2: return "nodes2";
780 case Keyword::PARTICLES: return "particles";
781 case Keyword::PISTONPROPS: return "pistonprops";
782 case Keyword::PROP_CAMERA_MODE: return "prop_camera_mode";
783 case Keyword::PROPS: return "props";
784 case Keyword::RAILGROUPS: return "railgroups";
785 case Keyword::RESCUER: return "rescuer";
786 case Keyword::RIGIDIFIERS: return "rigidifiers";
787 case Keyword::ROLLON: return "rollon";
788 case Keyword::ROPABLES: return "ropables";
789 case Keyword::ROPES: return "ropes";
790 case Keyword::ROTATORS: return "rotators";
791 case Keyword::ROTATORS2: return "rotators2";
792 case Keyword::SCREWPROPS: return "screwprops";
793 case Keyword::SECTION: return "section";
794 case Keyword::SECTIONCONFIG: return "sectionconfig";
795 case Keyword::SET_BEAM_DEFAULTS: return "set_beam_defaults";
796 case Keyword::SET_BEAM_DEFAULTS_SCALE: return "set_beam_defaults_scale";
797 case Keyword::SET_COLLISION_RANGE: return "set_collision_range";
798 case Keyword::SET_DEFAULT_MINIMASS: return "set_default_minimass";
799 case Keyword::SET_INERTIA_DEFAULTS: return "set_inertia_defaults";
800 case Keyword::SET_MANAGEDMATERIALS_OPTIONS: return "set_managedmaterials_options";
801 case Keyword::SET_NODE_DEFAULTS: return "set_node_defaults";
802 case Keyword::SET_SHADOWS: return "set_shadows";
803 case Keyword::SET_SKELETON_SETTINGS: return "set_skeleton_settings";
804 case Keyword::SHOCKS: return "shocks";
805 case Keyword::SHOCKS2: return "shocks2";
806 case Keyword::SHOCKS3: return "shocks3";
807 case Keyword::SLIDENODE_CONNECT_INSTANTLY: return "slidenode_connect_instantly";
808 case Keyword::SLIDENODES: return "slidenodes";
809 case Keyword::SLOPE_BRAKE: return "SlopeBrake";
810 case Keyword::SOUNDSOURCES: return "soundsources";
811 case Keyword::SOUNDSOURCES2: return "soundsources2";
812 case Keyword::SPEEDLIMITER: return "speedlimiter";
813 case Keyword::SUBMESH: return "submesh";
814 case Keyword::SUBMESH_GROUNDMODEL: return "submesh_groundmodel";
815 case Keyword::TEXCOORDS: return "texcoords";
816 case Keyword::TIES: return "ties";
817 case Keyword::TORQUECURVE: return "torquecurve";
818 case Keyword::TRACTIONCONTROL: return "tractioncontrol";
819 case Keyword::TRANSFERCASE: return "transfercase";
820 case Keyword::TRIGGERS: return "triggers";
821 case Keyword::TURBOJETS: return "turbojets";
822 case Keyword::TURBOPROPS: return "turboprops";
823 case Keyword::TURBOPROPS2: return "turboprops2";
824 case Keyword::VIDEOCAMERA: return "videocamera";
825 case Keyword::WHEELDETACHERS: return "wheeldetachers";
826 case Keyword::WHEELS: return "wheels";
827 case Keyword::WHEELS2: return "wheels2";
828 case Keyword::WINGS: return "wings";
829
830 default: return "";
831 }
832}
833
834} // namespace RigDef
quaternion Log() const
System integration layer; inspired by OgreBites::ApplicationContext.
Central state/object manager and communications hub.
#define ROR_ASSERT(_EXPR)
Definition Application.h:40
void LOG(const char *msg)
Legacy alias - formerly a macro.
uint32_t BitMask_t
Definition BitFlags.h:7
A database of user-installed content alias 'mods' (vehicles, terrains...)
Game state manager and message-queue provider.
Handles controller inputs from player.
#define _LC(ctx, str)
Definition Language.h:38
Central setup and event handler for input/windowing/rendering.
Definition AppContext.h:47
Quake-style console variable, defined in RoR.cfg or crated via Console UI and scripts.
Definition CVar.h:53
A content database MOTIVATION: RoR users usually have A LOT of content installed.
Global game console backend.
Definition Console.h:41
@ CONSOLE_MSGTYPE_INFO
Generic message.
Definition Console.h:60
void putMessage(MessageArea area, MessageType type, std::string const &msg, std::string icon="")
Definition Console.cpp:103
@ CONSOLE_SYSTEM_ERROR
Definition Console.h:52
Wrapper class, just for code consistency with other subsystems.
Definition DiscordRpc.h:31
Central game state manager.
Definition GameContext.h:96
Provides a 3D graphical representation of the simulation Idea: simulation runs at it's own constant r...
Definition GfxScene.h:47
Ogre::SceneManager * GetSceneManager()
Definition GfxScene.h:83
Manages controller configuration, evaluates input events.
This class represents the angelscript scripting interface.
void forwardExceptionAsScriptEvent(const std::string &from)
Forwards useful info from C++ try{}catch{} exceptions to script in the form of game event.
Facilitates execution of (small) tasks on separate threads.
Definition ThreadPool.h:105
static ThreadPool * DetectNumWorkersAndCreate()
Definition ThreadPool.h:107
const char * KeywordToString(RigDef::Keyword keyword)
@ SET_MANAGEDMATERIALS_OPTIONS
const char * MsgTypeToString(MsgType type)
MsgType
Global gameplay message loop, see struct Message in GameContext.h.
Definition Application.h:76
@ MSG_GUI_OPEN_MENU_REQUESTED
@ MSG_APP_MODCACHE_LOAD_REQUESTED
Definition Application.h:90
@ MSG_SIM_TELEPORT_PLAYER_REQUESTED
Payload = Ogre::Vector3* (owner)
@ MSG_NET_CONNECT_STARTED
Definition Application.h:99
@ MSG_APP_MODCACHE_PURGE_REQUESTED
Definition Application.h:92
@ MSG_NET_FETCH_AI_PRESETS_SUCCESS
Description = JSON string.
@ MSG_SIM_UNMUTE_NET_ACTOR_REQUESTED
Payload = ActorPtr* (owner)
@ MSG_NET_DOWNLOAD_REPOFILE_REQUESTED
Payload = RoR::RepoFileInstallRequest* (owner)
@ MSG_GUI_CLOSE_MENU_REQUESTED
@ MSG_NET_RECV_ERROR
@ MSG_EDI_ADD_FREEBEAMGFX_REQUESTED
Payload = RoR::FreeBeamGfxRequest* (owner)
@ MSG_NET_REMOVE_PEEROPTIONS_REQUESTED
Payload = RoR::PeerOptionsRequest* (owner)
@ MSG_SIM_PAUSE_REQUESTED
@ MSG_NET_DOWNLOAD_REPOFILE_SUCCESS
Payload = RoR::RepoFileInstallRequest* (owner)
@ MSG_SIM_UNPAUSE_REQUESTED
@ MSG_SIM_UNHIDE_NET_ACTOR_REQUESTED
Payload = ActorPtr* (owner)
@ MSG_SIM_HIDE_NET_ACTOR_REQUESTED
Payload = ActorPtr* (owner)
@ MSG_SIM_UNLOAD_TERRN_REQUESTED
@ MSG_EDI_UNLOAD_BUNDLE_REQUESTED
Payload = RoR::CacheEntryPtr* (owner)
@ MSG_NET_CONNECT_FAILURE
@ MSG_GUI_REFRESH_TUNING_MENU_REQUESTED
@ MSG_APP_MODCACHE_UPDATE_REQUESTED
Definition Application.h:91
@ MSG_APP_DISPLAY_WINDOWED_REQUESTED
Definition Application.h:89
@ MSG_NET_DISCONNECT_REQUESTED
@ MSG_NET_FETCH_AI_PRESETS_FAILURE
Description = message.
@ MSG_EDI_ENTER_TERRN_EDITOR_REQUESTED
@ MSG_SIM_ACTOR_LINKING_REQUESTED
Payload = RoR::ActorLinkingRequest* (owner)
@ MSG_SIM_SPAWN_ACTOR_REQUESTED
Payload = RoR::ActorSpawnRequest* (owner)
@ MSG_SIM_REMOVE_FREEFORCE_REQUESTED
Payload = RoR::FreeForceID_t* (owner)
@ MSG_SIM_SCRIPT_EVENT_TRIGGERED
Payload = RoR::ScriptEventArgs* (owner)
@ MSG_SIM_SCRIPT_CALLBACK_QUEUED
Payload = RoR::ScriptCallbackArgs* (owner)
@ MSG_GUI_OPEN_SELECTOR_REQUESTED
Payload = LoaderType* (owner), Description = GUID | empty.
@ MSG_APP_UNLOAD_SCRIPT_REQUESTED
Payload = RoR::ScriptUnitId_t* (owner)
Definition Application.h:94
@ MSG_SIM_SEAT_PLAYER_REQUESTED
Payload = RoR::ActorPtr (owner) | nullptr.
@ MSG_GUI_MP_CLIENTS_REFRESH
@ MSG_EDI_SAVE_TERRN_CHANGES_REQUESTED
@ MSG_NET_CONNECT_PROGRESS
@ MSG_EDI_LOAD_BUNDLE_REQUESTED
Payload = RoR::CacheEntryPtr* (owner)
@ MSG_APP_LOAD_SCRIPT_REQUESTED
Payload = RoR::LoadScriptRequest* (owner)
Definition Application.h:93
@ MSG_SIM_LOAD_SAVEGAME_REQUESTED
@ MSG_EDI_LEAVE_TERRN_EDITOR_REQUESTED
@ MSG_NET_ADD_PEEROPTIONS_REQUESTED
Payload = RoR::PeerOptionsRequest* (owner)
@ MSG_NET_CONNECT_SUCCESS
@ MSG_NET_USER_DISCONNECT
@ MSG_NET_CONNECT_REQUESTED
Definition Application.h:98
@ MSG_SIM_ADD_FREEFORCE_REQUESTED
Payload = RoR::FreeForceRequest* (owner)
@ MSG_NET_OPEN_RESOURCE_SUCCESS
Payload = GUI::ResourcesCollection* (owner)
@ MSG_GUI_HIDE_MESSAGE_BOX_REQUESTED
@ MSG_APP_SHUTDOWN_REQUESTED
Definition Application.h:86
@ MSG_APP_DISPLAY_FULLSCREEN_REQUESTED
Definition Application.h:88
@ MSG_EDI_MODIFY_FREEBEAMGFX_REQUESTED
Payload = RoR::FreeBeamGfxRequest* (owner)
@ MSG_GUI_CLOSE_SELECTOR_REQUESTED
@ MSG_EDI_MODIFY_GROUNDMODEL_REQUESTED
Payload = RoR::ground_model_t* (weak)
@ MSG_EDI_DELETE_FREEBEAMGFX_REQUESTED
Payload = RoR::FreeBeamGfxID_t* (owner)
@ MSG_NET_DOWNLOAD_REPOFILE_PROGRESS
Payload = int* (owner)
@ MSG_GUI_SHOW_MESSAGE_BOX_REQUESTED
Payload = MessageBoxConfig* (owner)
@ MSG_SIM_MODIFY_FREEFORCE_REQUESTED
Payload = RoR::FreeForceRequest* (owner)
@ MSG_NET_REFRESH_SERVERLIST_FAILURE
Payload = RoR::CurlFailInfo* (owner)
@ MSG_NET_REFRESH_REPOLIST_FAILURE
Payload = RoR::CurlFailInfo* (owner)
@ MSG_SIM_MUTE_NET_ACTOR_REQUESTED
Payload = ActorPtr* (owner)
@ MSG_EDI_CREATE_PROJECT_REQUESTED
Payload = RoR::CreateProjectRequest* (owner)
@ MSG_EDI_DELETE_PROJECT_REQUESTED
Payload = RoR::CacheEntryPtr* (owner)
@ MSG_EDI_MODIFY_PROJECT_REQUESTED
Payload = RoR::UpdateProjectRequest* (owner)
@ MSG_APP_SCRIPT_THREAD_STATUS
Payload = RoR::ScriptEventArgs* (owner)
Definition Application.h:95
@ MSG_SIM_LOAD_TERRN_REQUESTED
@ MSG_NET_REFRESH_REPOLIST_SUCCESS
Payload = GUI::ResourcesCollection* (owner)
@ MSG_NET_DOWNLOAD_REPOFILE_FAILURE
Payload = RoR::RepoFileInstallRequest* (owner)
@ MSG_SIM_DELETE_ACTOR_REQUESTED
Payload = RoR::ActorPtr* (owner)
@ MSG_NET_REFRESH_SERVERLIST_SUCCESS
Payload = GUI::MpServerInfoVec* (owner)
@ MSG_SIM_MODIFY_ACTOR_REQUESTED
Payload = RoR::ActorModifyRequest* (owner)
@ MSG_APP_SCREENSHOT_REQUESTED
Definition Application.h:87
@ MSG_NET_SERVER_KICK
@ MSG_APP_REINIT_INPUT_REQUESTED
Definition Application.h:96
@ MSG_EDI_RELOAD_BUNDLE_REQUESTED
Payload = RoR::CacheEntryPtr* (owner)
SimGearboxMode
std::string ToLocalizedString(SimGearboxMode e)
@ MANUAL_STICK
Fully manual: stick shift.
@ MANUAL_RANGES
Fully manual: stick shift with ranges.
@ SEMI_AUTO
Manual shift with auto clutch.
@ MANUAL
Fully manual: sequential shift.
@ AUTO
Automatic shift.
CVar * cli_server_host
CVar * mp_player_name
CVar * diag_warning_texture
CVar * gfx_sky_mode
CVar * io_ffb_enabled
CVar * mp_server_password
CVar * flexbody_defrag_const_penalty
CVar * gfx_polygon_mode
CVar * mp_api_url
ContentManager * GetContentManager()
AppContext * GetAppContext()
CVar * gfx_static_cam_fov_exp
static DiscordRpc g_discord_rpc
CVar * audio_force_listener_efx_preset
CVar * flexbody_defrag_prog_up_penalty
CVar * ui_show_live_repair_controls
bool
CVar * audio_efx_reverb_engine
CVar * sys_repo_attachments_dir
CVar * audio_menu_music
CVar * app_screenshot_format
CVar * gfx_sky_time_cycle
CVar * audio_enable_directed_sounds
CVar * mp_hide_own_net_label
CVar * io_outgauge_delay
CVar * gfx_water_mode
CVar * sim_state
CVar * mp_hide_net_labels
CVar * ui_show_vehicle_buttons
OverlayWrapper * GetOverlayWrapper()
InputEngine * GetInputEngine()
CVar * audio_enable_obstruction
static InputEngine * g_input_engine
CVar * sys_projects_dir
CVar * io_outgauge_mode
CVar * diag_auto_spawner_report
CVar * gfx_extcam_mode
CVar * sim_spawn_running
CVar * diag_actor_dump
CVar * remote_query_url
CVar * io_blink_lock_range
void CreateOverlayWrapper()
CVar * diag_log_beam_trigger
CVar * cli_resume_autosave
ThreadPool * GetThreadPool()
CVar * flexbody_defrag_reorder_texcoords
CVar * cli_custom_scripts
CVar * audio_doppler_factor
CVar * flexbody_defrag_prog_down_penalty
CVar * cli_force_cache_update
CVar * diag_rig_log_node_import
CVar * cli_preset_veh_config
CVar * diag_allow_window_resize
CVar * gfx_envmap_rate
static MumbleIntegration * g_mumble
CVar * app_num_workers
CVar * app_language
CVar * sys_logs_dir
CVar * app_skip_main_menu
CVar * cli_preset_veh_enter
CVar * io_invert_orbitcam
CVar * diag_rig_log_node_stats
CVar * ui_preset
enum RoR::UiPreset
CVar * gfx_fov_internal_default
CVar * sim_terrain_name
CVar * sim_replay_length
void CreateGuiManager()
CVar * gfx_sky_time_speed
CVar * sim_races_enabled
CVar * app_rendersys_override
CVar * io_outgauge_port
static CacheSystem g_cache_system
CVar * audio_default_efx_preset
CVar * sim_terrain_gui_name
CVar * audio_enable_reflection_panning
CameraManager * GetCameraManager()
CVar * audio_enable_creak
CVar * diag_preset_vehicle
CVar * gfx_sight_range
CVar * audio_sim_pause_disables_doppler_effect
CVar * sys_profiler_dir
CVar * app_country
CVar * audio_force_obstruction_inside_vehicles
CVar * mp_cyclethru_net_actors
Include remote actors when cycling through with CTRL + [ and CTRL + ].
CVar * gfx_anisotropy
SoundScriptManager * GetSoundScriptManager()
CVar * app_recent_scripts
CVar * mp_server_port
static ContentManager g_content_manager
CVar * app_force_cache_purge
CVar * gfx_particles_mode
OutGauge * GetOutGauge()
static GUIManager * g_gui_manager
CVar * diag_hide_wheels
CVar * diag_preset_spawn_pos
static GfxScene g_gfx_scene
static LanguageEngine g_language_engine
CVar * diag_truck_mass
CVar * io_ffb_stress_gain
void CreateScriptEngine()
CVar * diag_hide_nodes
CVar * audio_master_volume
void DestroyInputEngine()
GUIManager * GetGuiManager()
GameContext * GetGameContext()
CVar * gfx_camera_height
CVar * sys_config_dir
CVar * sim_tuning_enabled
CVar * diag_terrn_log_roads
CVar * sys_savegames_dir
CVar * sim_soft_reset_mode
CVar * io_ffb_center_gain
CVar * ui_hide_gui
bool; The 'hide GUI' hotkey state
CVar * gfx_auto_lod
GfxScene * GetGfxScene()
CVar * app_force_cache_update
CVar * io_analog_sensitivity
static CameraManager * g_camera_manager
CVar * app_state
static Terrain * g_sim_terrain
CVar * gfx_water_waves
CVar * cli_preset_spawn_pos
CVar * mp_chat_auto_hide
void CreateMumble()
CVar * diag_log_beam_deform
CVar * sim_no_collisions
CVar * gfx_fov_external
CVar * mp_state
CVar * audio_device_name
CVar * sim_realistic_commands
CVar * diag_preset_spawn_rot
CVar * gfx_window_videocams
CVar * sim_replay_stepping
CVar * sys_user_dir
void CreateGfxScene()
CVar * sys_cache_dir
CVar * sim_no_self_collisions
CVar * gfx_fps_limit
CVar * gfx_vegetation_mode
DiscordRpc * GetDiscordRpc()
CVar * sim_live_repair_interval
Hold EV_COMMON_REPAIR_TRUCK to enter LiveRepair mode. 0 or negative interval disables.
CVar * diag_envmap
CVar * diag_hide_wheel_info
CVar * cli_preset_terrain
CVar * gfx_declutter_map
CVar * diag_camera
CVar * audio_enable_efx
CVar * app_disable_online_api
Console * GetConsole()
CVar * io_outgauge_id
CVar * gfx_flares_mode
CVar * ui_default_boat_dash
string; name of the '.dashboard' file in modcache.
CVar * flexbody_defrag_enabled
CVar * app_config_long_names
CVar * ui_default_truck_dash
string; name of the '.dashboard' file in modcache.
CVar * gfx_fov_internal
CVar * sim_gearbox_mode
static AppContext g_app_context
CVar * io_ffb_master_gain
static ThreadPool * g_thread_pool
CVar * diag_simple_materials
CVar * mp_player_token
CVar * mp_pseudo_collisions
CVar * io_hydro_coupling
ScriptEngine * GetScriptEngine()
CVar * diag_hide_broken_beams
CVar * gfx_alt_actor_materials
static OutGauge g_out_gauge
CacheSystem * GetCacheSystem()
CVar * diag_preset_veh_enter
CVar * gfx_speedo_imperial
CVar * app_custom_scripts
CVar * ui_always_show_fullsize
CVar * gfx_enable_rtshaders
static ScriptEngine * g_script_engine
CVar * diag_use_mygui_logfile
void CreateCameraManager()
CVar * sim_quickload_dialog
CVar * gfx_envmap_enabled
static OverlayWrapper * g_overlay_wrapper
static Console g_console
CVar * flexbody_defrag_reorder_indices
CVar * diag_preset_terrain
CVar * sim_load_savegame
CVar * cli_preset_spawn_rot
CVar * gfx_reduce_shadows
CVar * diag_videocameras
CVar * audio_enable_occlusion
static Network g_network
CVar * audio_engine_controls_environmental_audio
CVar * gfx_surveymap_icons
CVar * io_ffb_camera_gain
CVar * io_outgauge_ip
CVar * diag_preset_veh_config
CVar * io_discord_rpc
void CreateThreadPool()
CVar * gfx_texture_filter
MumbleIntegration * GetMumble()
CVar * sys_screenshot_dir
void CreateInputEngine()
CVar * gfx_flexbody_cache
CVar * gfx_fov_external_default
CVar * sys_resources_dir
CVar * cli_preset_vehicle
CVar * diag_log_beam_break
CVar * io_input_grab_mode
CVar * gfx_enable_videocams
CVar * sim_replay_enabled
Network * GetNetwork()
CVar * io_arcade_controls
CVar * io_analog_smoothing
CVar * mp_server_host
CVar * gfx_shadow_quality
LanguageEngine * GetLanguageEngine()
void CreateSoundScriptManager()
CVar * sys_scripts_dir
CVar * sys_thumbnails_dir
static SoundScriptManager * g_sound_script_manager
static GameContext g_game_context
CVar * flexbody_defrag_invert_lookup
CVar * diag_log_console_echo
CVar * cli_server_port
CVar * gfx_fixed_cam_tracking
CVar * app_extra_mod_path
void DestroyOverlayWrapper()
CVar * gfx_shadow_type
CVar * sys_process_dir
CVar * gfx_skidmarks_mode
CVar * diag_hide_beam_stress
CVar * mp_join_on_startup
CVar * app_async_physics
GfxExtCamMode
void Log(const char *msg)
The ultimate, application-wide logging function. Adds a line (any length) in 'RoR....
GfxFlaresMode
@ CURR_VEHICLE_HEAD_ONLY
Only current vehicle, main lights.
@ ALL_VEHICLES_HEAD_ONLY
All vehicles, main lights.
@ NONE
None (fastest)
@ NO_LIGHTSOURCES
No light sources.
@ ALL_VEHICLES_ALL_LIGHTS
All vehicles, all lights.
void HandleGenericException(const std::string &from, BitMask_t flags)
EfxReverbEngine
void HandleMsgQueueException(MsgType from)
GfxShadowType
UiPreset
See UiPresets[] list in GUIManager.cpp (declared extern in GUIManager.h)
GfxWaterMode
@ FULL_FAST
Reflection + refraction (speed optimized)
@ FULL_HQ
Reflection + refraction (quality optimized)
@ BASIC
Basic (fastest)
@ REFLECT
Reflection.
IoInputGrabMode
GfxVegetation
void LogFormat(const char *format,...)
Improved logging utility. Uses fixed 2Kb buffer.
const char * TObjSpecialObjectToString(TObjSpecialObject val)
TObjSpecialObject
@ TRUCK2
Free position (not auto-adjusted to fit terrain or water surface)
@ CAELUM
Caelum (best looking, slower)
@ SANDSTORM
Sandstorm (fastest)
@ SKYX
SkyX (best looking, slower)
SimResetMode
GfxTexFilter
@ HANDLEGENERICEXCEPTION_LOGFILE
@ HANDLEGENERICEXCEPTION_SCRIPTEVENT
@ HANDLEGENERICEXCEPTION_CONSOLE