├── .clang-tidy ├── .gitattributes ├── .github └── workflows │ ├── build.yaml │ └── release.yaml ├── .gitignore ├── .gitmodules ├── .redscript-ide ├── .vscode ├── c_cpp_properties.json ├── extensions.json ├── launch.json ├── settings.json └── tasks.json ├── CMakeLists.txt ├── cliff.toml ├── cmake ├── ConfigureDefaultOutputDirectories.cmake ├── CreateRED4extSignatures.cmake ├── CreateUninstallScript.cmake ├── FindAllRED4extAddresses.cmake ├── FindCodeware.cmake ├── FindDetours.cmake ├── FindFMOD.cmake ├── FindIndividualRED4extAddresses.cmake ├── FindInputLoader.cmake ├── FindPhysX3.cmake ├── FindSpdlog.cmake ├── PackFiles.cmake ├── PackRedscriptFiles.cmake └── TargetOutputDirectory.cmake ├── compile_commands.json ├── deps ├── fmod │ ├── include │ │ ├── fmod.cs │ │ ├── fmod.h │ │ ├── fmod.hpp │ │ ├── fmod_codec.h │ │ ├── fmod_common.h │ │ ├── fmod_dsp.cs │ │ ├── fmod_dsp.h │ │ ├── fmod_dsp_effects.h │ │ ├── fmod_errors.cs │ │ ├── fmod_errors.h │ │ ├── fmod_output.h │ │ ├── fmod_studio.cs │ │ ├── fmod_studio.h │ │ ├── fmod_studio.hpp │ │ ├── fmod_studio_common.h │ │ ├── fsbank.h │ │ └── fsbank_errors.h │ └── lib │ │ ├── x64 │ │ ├── fmod.dll │ │ ├── fmodL.dll │ │ ├── fmodL_vc.lib │ │ ├── fmod_vc.lib │ │ ├── fmodstudio.dll │ │ ├── fmodstudioL.dll │ │ ├── fmodstudioL_vc.lib │ │ ├── fmodstudio_vc.lib │ │ ├── fsbank.dll │ │ ├── fsbank_vc.lib │ │ ├── libfsbvorbis64.dll │ │ └── opus.dll │ │ └── x86 │ │ ├── fmod.dll │ │ ├── fmodL.dll │ │ ├── fmodL_vc.lib │ │ ├── fmod_vc.lib │ │ ├── fmodstudio.dll │ │ ├── fmodstudioL.dll │ │ ├── fmodstudioL_vc.lib │ │ ├── fmodstudio_vc.lib │ │ ├── fsbank.dll │ │ ├── fsbank_vc.lib │ │ ├── libfmod.a │ │ ├── libfmodL.a │ │ ├── libfmodstudio.a │ │ ├── libfmodstudioL.a │ │ ├── libfsbvorbis.dll │ │ └── opus.dll └── physx │ ├── PhysX3.hpp │ ├── PhysX3_x64.def │ ├── PhysX3_x64.exp │ └── PhysX3_x64.lib ├── experiments ├── CResource.reds ├── ColliderComponent.reds ├── ECookingPlatform.reds ├── EntityOrientationProvider.reds ├── FlightComponentPS.reds ├── FlightControllerUI.reds ├── FlightDevice.reds ├── FlightFx.reds ├── FlightHUDGameController.reds ├── ISerializable.reds ├── NewVehicles.reds ├── NoFallDeath.reds ├── PhysicalBodyInterface.reds ├── QuickHackFlightMalfunction.reds ├── arcadia.reds ├── camera_adjustments.yaml ├── flight_control.yaml ├── flight_effects.archive.xl ├── inkWidgetBuilder.reds ├── new_vehicle.lua ├── new_vehicles_notes.txt ├── no_death_fall.tweak ├── physicsICollider.reds ├── physicsISystemObject.reds ├── physicsSimulationType.reds ├── physicsSystemBody.reds ├── physicsSystemBodyParams.reds ├── physicsSystemJoint.reds ├── physicsSystemResource.reds ├── quickhack.tweak ├── quickhacks.yaml ├── statemachinenotes.tweak ├── vehicle.tweak ├── vehicleChassisComponent.reds └── vflightUIGameController.reds ├── let_there_be_flight.code-workspace ├── license.md ├── preview.png ├── readme.md ├── requirements.md ├── src ├── archive_xl │ └── let_there_be_flight.archive.xl ├── fmod_studio │ ├── API │ │ ├── fmod.dll │ │ ├── fmodL.dll │ │ ├── fmodstudio.dll │ │ └── fmodstudioL.dll │ ├── Assets │ │ ├── 2077-1.wav │ │ ├── 2077-2.wav │ │ ├── 2077-3.wav │ │ ├── 2077-4.wav │ │ ├── 2077-5.wav │ │ ├── 2077-6.wav │ │ ├── 2077-soft-1.wav │ │ ├── 2077-soft-2-5.wav │ │ ├── 2077-soft-2.wav │ │ ├── 2077-soft-3.wav │ │ ├── 2077-soft-4.wav │ │ ├── 2077-soft-5.wav │ │ ├── 2077-soft-6.wav │ │ ├── 2077.wav │ │ ├── 328525__humanoide9000__fork-scraping-metal-3.wav │ │ ├── 383794__deleted_user_7146007__metal-scraping-on-concrete.wav │ │ ├── audiogaming_audiomotors_demo_engine.agp │ │ ├── brake-1.wav │ │ ├── microwave-loop-louder.wav │ │ ├── microwave-loop.wav │ │ ├── speed-event.wav │ │ ├── thruster-scrape.wav │ │ ├── turntable-slow.wav │ │ ├── turntable.wav │ │ ├── vehicle3_off.wav │ │ ├── vehicle3_startup.wav │ │ ├── whirling.wav │ │ └── white.wav │ ├── Build │ │ └── Desktop │ │ │ ├── base_sounds.bank │ │ │ └── base_sounds.strings.bank │ ├── Metadata │ │ ├── Asset │ │ │ └── {0d578fee-7aad-4a8f-9570-e624d548a13b}.xml │ │ ├── AudioFile │ │ │ ├── {0897beae-f8cc-4b0d-9752-7d6ed708db6a}.xml │ │ │ ├── {1ee6a587-2c25-4f9d-abaf-514463e0b83e}.xml │ │ │ ├── {21425c9c-8039-4610-9b90-2dad956c61d4}.xml │ │ │ ├── {2743eee6-b0a5-451b-a4b0-ddb86a092a50}.xml │ │ │ ├── {3db66fc6-0226-4021-8b92-6266c0b731a6}.xml │ │ │ ├── {3f08d605-30fb-455d-9441-5e0884901a72}.xml │ │ │ ├── {4519b459-3373-454c-830c-721cc520e9cb}.xml │ │ │ ├── {61d246d6-a504-4720-8077-11a2d815aa0c}.xml │ │ │ ├── {696a09a3-ffa1-4533-971a-48d6ab1d3f82}.xml │ │ │ ├── {7a6066e5-73c9-42b4-bdf4-09b2772876c2}.xml │ │ │ ├── {7bbe72a2-6908-405a-ba3e-eb139b4681e8}.xml │ │ │ ├── {7f40f58d-e7c7-46b8-933b-9497f97f53f6}.xml │ │ │ ├── {800a9dd3-ea37-4672-9ff7-b9f2cbc0d2e9}.xml │ │ │ ├── {9337c468-2733-4a3e-9c2c-408c484c6cd2}.xml │ │ │ ├── {9b6ba586-f952-42c6-be3e-46a9eb54083b}.xml │ │ │ ├── {a196165b-56d3-4769-961a-90b984fa7ce6}.xml │ │ │ ├── {a332a24a-22cc-4cd3-9ca7-28d6587ab566}.xml │ │ │ ├── {a76c5154-d3bd-41d8-94c9-3af1362e4898}.xml │ │ │ ├── {a877bd5c-b65e-48ec-aedf-3b89adbdcd2a}.xml │ │ │ ├── {a9aeee42-a12e-4ec0-af7e-1d46886f979a}.xml │ │ │ ├── {b95f3cf2-116c-40bc-b12b-2aab82812139}.xml │ │ │ ├── {bb91d7b4-fa71-44bc-88bb-9d01bd01f15c}.xml │ │ │ ├── {e0ff0cf2-ce1f-4b38-8127-3d28d2e95fa0}.xml │ │ │ ├── {e2e7edc4-4efd-45c0-afe1-bc106715e75d}.xml │ │ │ ├── {e3378915-7b23-4539-ad81-d50fba2bf243}.xml │ │ │ ├── {e6bbe6b9-c71b-4a09-a316-c844089e61b2}.xml │ │ │ └── {eac9e785-ff1b-43d0-a495-b50c94cac782}.xml │ │ ├── Bank │ │ │ └── {cbee9f7a-37c7-4bcf-bdc7-2a802b3b0e2c}.xml │ │ ├── BankFolder │ │ │ └── {7176a4dc-0d17-4314-9f11-045448f4951b}.xml │ │ ├── DataFile │ │ │ └── {76e37d96-2043-4493-b502-f364d1e4b977}.xml │ │ ├── EffectPreset │ │ │ ├── {0b3998cc-1518-4300-8814-5ae06215091f}.xml │ │ │ ├── {4324449b-3438-41b6-8145-077fe2111175}.xml │ │ │ ├── {a20974f7-afa8-4979-a735-a14030e174de}.xml │ │ │ └── {f7c8bde9-5e4d-462d-b16c-78f125c9433d}.xml │ │ ├── EffectPresetFolder │ │ │ └── {7fce4d5b-875e-467f-a725-17f92cb538ca}.xml │ │ ├── EncodingSetting │ │ │ └── {8701b900-fd78-41e9-8731-150c88f70ab2}.xml │ │ ├── Event │ │ │ ├── {4e532abd-6f55-46f5-a907-0b3e4423b47a}.xml │ │ │ ├── {62e81e8b-b886-445c-a2e1-8bf74ba0a37a}.xml │ │ │ ├── {645b26cd-3360-4217-8b5f-8bdad2712642}.xml │ │ │ ├── {701a8161-9c07-4491-a5b5-9eeb93cc74bb}.xml │ │ │ ├── {d41d74f8-c1ac-440a-9a2b-0aaa2522918e}.xml │ │ │ ├── {e3b984e2-6292-4744-bd1b-df2cbad7b9a2}.xml │ │ │ └── {f65e06d0-8e1f-452b-9ead-5cae51a09eab}.xml │ │ ├── EventFolder │ │ │ └── {a5886b98-666c-4b61-b74a-2870bfedb918}.xml │ │ ├── Group │ │ │ ├── {5c36583b-ae34-484c-b7d3-e74a1122ea1d}.xml │ │ │ ├── {bb9c119f-4adb-4d99-9672-3d0697b6c9b1}.xml │ │ │ └── {c5ba25e4-5c31-452b-9ae9-1852aebcc3c2}.xml │ │ ├── Master.xml │ │ ├── Mixer.xml │ │ ├── ParameterPreset │ │ │ ├── {2c98701e-c0e4-4a86-a0a3-8907b0fbe647}.xml │ │ │ ├── {3652cd09-28a6-4bdd-8507-97c92f5e2d96}.xml │ │ │ ├── {56041d85-f2d7-4b92-8e05-aca5923a6798}.xml │ │ │ ├── {5e28a84f-41cb-4001-9d30-7f7977237a3e}.xml │ │ │ ├── {7168003f-8d52-48f7-a454-8ac60cd7f430}.xml │ │ │ ├── {750d42ef-4000-488c-aa92-e5177a8b5b73}.xml │ │ │ ├── {7862f857-7d19-4c5e-b84f-1ca47ff4b701}.xml │ │ │ ├── {7e7ec633-4bbb-4708-acf2-429f2874845c}.xml │ │ │ ├── {85ed5459-4a8c-4997-80fc-90b6dae08e20}.xml │ │ │ ├── {93311843-1289-4ac4-a45c-6e3ddfff1b95}.xml │ │ │ ├── {94dcf21e-f792-4c4d-bb52-5d2e732e7dbe}.xml │ │ │ ├── {a6cae2e6-b9ca-4712-ac24-40f766361e6d}.xml │ │ │ ├── {b0214a4f-eb5f-4495-8836-a1f98471f439}.xml │ │ │ ├── {b94b843a-5720-4f33-87c9-1453583572ae}.xml │ │ │ ├── {d37ac5b7-445a-48e0-9cd9-4984dbe2c11c}.xml │ │ │ ├── {dd266f8f-71d9-4ae8-a759-70b6b574ae24}.xml │ │ │ └── {f3d2881b-7e3a-4eed-a540-7992d7a466eb}.xml │ │ ├── ParameterPresetFolder │ │ │ └── {37bcb955-bb46-4db0-96d9-38f1f6d86753}.xml │ │ ├── Platform │ │ │ └── {0ee11a83-8046-4ceb-b9b2-e3e09dfb4b4e}.xml │ │ ├── ProfilerFolder │ │ │ └── {1b096068-1e59-4259-a752-78a09d1dd925}.xml │ │ ├── Return │ │ │ └── {bbbd536d-6663-488d-b5b9-f8b30a81506a}.xml │ │ ├── SandboxFolder │ │ │ └── {fe40636c-e07a-4315-a258-b6403f2d5b7e}.xml │ │ ├── SnapshotGroup │ │ │ └── {ac2e2209-4e46-455c-8b47-c54737760461}.xml │ │ ├── Tags.xml │ │ └── Workspace.xml │ └── flight_control.fspro ├── input_loader │ └── let_there_be_flight.xml ├── red4ext │ ├── .clang-format │ ├── .vscode │ │ └── c_cpp_properties.json │ ├── Addresses.hpp │ ├── Audio │ │ ├── FlightAudio.cpp │ │ ├── FlightAudio.hpp │ │ ├── FmodHelper.cpp │ │ └── FmodHelper.hpp │ ├── CMakeLists.txt │ ├── Camera │ │ ├── FlightCamera.cpp │ │ └── FlightCamera.hpp │ ├── Engine │ │ ├── Common.hpp │ │ ├── RTTIClass.hpp │ │ ├── RTTIEnum.hpp │ │ ├── RTTIExpansion.hpp │ │ ├── RTTIRegistrar.cpp │ │ └── RTTIRegistrar.hpp │ ├── EntityAddComponent.cpp │ ├── EntityAddComponent.hpp │ ├── Extensions │ │ ├── EffectSpawnerComponent.cpp │ │ ├── EntColliderComponent.cpp │ │ ├── FxResource.cpp │ │ ├── InkMaskWidget.cpp │ │ ├── InkShapeWidget.cpp │ │ ├── InkWidget.cpp │ │ ├── MaterialFx.cpp │ │ ├── MaterialFx.hpp │ │ ├── MeshComponent.cpp │ │ ├── MeshComponent.hpp │ │ ├── VehicleChassisComponent.cpp │ │ ├── VehicleDriveToPointEvent.cpp │ │ ├── VehicleObject.cpp │ │ ├── VehicleTPPCameraComponent.cpp │ │ └── WheeledObject.cpp │ ├── Flight │ │ ├── Component.cpp │ │ ├── Component.hpp │ │ ├── Log.cpp │ │ └── Log.hpp │ ├── FlightConfiguration.cpp │ ├── FlightConfiguration.hpp │ ├── FlightController.cpp │ ├── FlightController.hpp │ ├── FlightEvents.cpp │ ├── FlightEvents.hpp │ ├── FlightSettings.cpp │ ├── FlightSettings.hpp │ ├── FlightSystem.cpp │ ├── FlightSystem.hpp │ ├── FlightThruster.cpp │ ├── FlightThruster.hpp │ ├── FlightWeapons.cpp │ ├── FlightWeapons.hpp │ ├── Hooks │ │ ├── CreateStaticEffect.cpp │ │ ├── Entity_InitializeComponents.cpp │ │ ├── FPPCamera_Update.cpp │ │ ├── GetLocalizedText.cpp │ │ ├── GetMatrixFromOrientation.hpp │ │ ├── TPPCameraStats_Update.cpp │ │ ├── VehicleObject_ProcessWeapons.cpp │ │ ├── VisualEffects.cpp │ │ ├── vehicleTPPCameraComponent_GetLocationFromOffset.cpp │ │ ├── vehicleTPPCameraComponent_GetYaw.cpp │ │ ├── vehicleTPPCameraComponent_UpdatePitch.cpp │ │ ├── vehicleUnk570_WheelEffectUpdate.cpp │ │ └── vehicleUnk580_UpdateTireParameters.cpp │ ├── IFlightSystem.hpp │ ├── INIReader.h │ ├── LoadResRef.hpp │ ├── Main.cpp │ ├── Physics │ │ ├── VehiclePhysicsUpdate.cpp │ │ ├── VehiclePhysicsUpdate.hpp │ │ ├── VehicleSpeedUnlimiter.cpp │ │ └── VehicleSpeedUnlimiter.hpp │ ├── RuntimeClass.hpp │ ├── RuntimeProperties.cpp │ ├── ScriptDefinitions │ │ ├── ScriptDefinitions.hpp │ │ └── ScriptHost.hpp │ ├── Signatures.hpp │ ├── Utils │ │ ├── FileStream.cpp │ │ ├── FileStream.hpp │ │ ├── FlightModule.cpp │ │ ├── FlightModule.hpp │ │ ├── Utils.cpp │ │ └── Utils.hpp │ ├── stdafx.cpp │ └── stdafx.hpp ├── redscript │ ├── .vscode │ │ └── settings.json │ ├── Audio │ │ └── FlightAudio.reds │ ├── Compatibility │ │ ├── ImprovedMinimap.reds │ │ └── ModSettings.reds │ ├── Extensions │ │ ├── MeshComponent.reds │ │ ├── Transitions.reds │ │ ├── VehicleComponent.reds │ │ ├── VehicleObject.reds │ │ ├── blackboardDefinitions.reds │ │ ├── hudCarController.reds │ │ ├── inkBorder.reds │ │ ├── inkMask.reds │ │ ├── inkQuadShape.reds │ │ ├── inkWidget.reds │ │ ├── vehicleTPPCameraComponent.reds │ │ └── weaponRoster.reds │ ├── Flight │ │ ├── FlightComponent.reds │ │ ├── FlightConfiguration.reds │ │ ├── FlightController.reds │ │ ├── FlightEvents.reds │ │ ├── FlightInputDecisions.reds │ │ ├── FlightInputHints.reds │ │ ├── FlightLog.reds │ │ ├── FlightMode.reds │ │ ├── FlightModeAutomatic.reds │ │ ├── FlightModeDrone.reds │ │ ├── FlightModeDroneAntiGravity.reds │ │ ├── FlightModeFly.reds │ │ ├── FlightModeHover.reds │ │ ├── FlightModeHoverFly.reds │ │ ├── FlightMode_Standard.reds │ │ ├── FlightSettings.reds │ │ ├── FlightStats.reds │ │ ├── FlightSystem.reds │ │ ├── FlightThruster.reds │ │ ├── FlightThrusterFX.reds │ │ ├── FlightTransition.reds │ │ └── FlightTricks.reds │ ├── Module.reds.in │ ├── Quickhacks │ │ └── Quickhacks.reds │ ├── UI │ │ └── hudFlightController.reds │ ├── Utils │ │ ├── FlightUtils.reds │ │ ├── OperatorHelpers.reds │ │ └── PID.reds │ └── let_there_be_flight_redscript.code-workspace ├── tweaks │ ├── quickhacks.yaml │ ├── thrusters.yaml │ ├── vehicle_flight.tweak │ └── vehicle_flight.yaml └── wolvenkit │ ├── install_log.xml │ ├── let_there_be_flight.cpmodproj │ ├── packed │ └── archive │ │ └── pc │ │ └── mod │ │ └── let_there_be_flight.archive │ └── source │ ├── archive │ └── user │ │ └── jackhumbert │ │ ├── effects │ │ ├── aim.effect │ │ ├── engine.effect │ │ ├── flame.effect │ │ ├── ion_thruster.effect │ │ ├── ion_thruster_with_engine.effect │ │ ├── retro_thruster.effect │ │ ├── sparks.effect │ │ ├── thruster_mark.effect │ │ └── thruster_sparks.effect │ │ ├── localization │ │ ├── let_there_be_flight.en-us.json │ │ └── let_there_be_flight.es-es.json │ │ ├── materials │ │ └── aim.mi │ │ ├── meshes │ │ ├── aim.mesh │ │ ├── chassis.mesh │ │ ├── engine_corpo.mesh │ │ ├── engine_nomad.mesh │ │ ├── flight_ui.mesh │ │ ├── flight_ui_info.mesh │ │ ├── thruster_core_round.mesh │ │ └── thruster_trail_round.mesh │ │ ├── particles │ │ ├── aim.particle │ │ ├── ion_thruster_engine.particle │ │ └── ion_thruster_flame.particle │ │ ├── textures │ │ ├── engine_corpo_pattern_d.xbm │ │ ├── engine_corpo_pattern_n.xbm │ │ ├── flight_pitch.inkatlas │ │ ├── flight_pitch.xbm │ │ ├── flight_pitch_major.inkatlas │ │ ├── flight_pitch_major.xbm │ │ ├── flight_pitch_mask.inkatlas │ │ ├── flight_pitch_mask.xbm │ │ ├── flight_pitch_minor.inkatlas │ │ └── flight_pitch_minor.xbm │ │ └── widgets │ │ ├── flight_hud.inkwidget │ │ ├── flight_hud_animations.inkanim │ │ ├── flight_ui.bk.inkwidget │ │ ├── flight_ui.inkwidget │ │ └── hud_flight.inkhud │ └── raw │ ├── engine │ └── physics │ │ └── collision_groups.json.json │ ├── types │ └── FlyinInkGameController.cs │ └── user │ └── jackhumbert │ ├── localization │ ├── let_there_be_flight.en-us.json.json │ └── let_there_be_flight.es-es.json.json │ ├── meshes │ ├── aim.glb │ ├── chassis.glb │ ├── engine_corpo.glb │ ├── engine_nomad.glb │ ├── flight_ui.glb │ ├── flight_ui_info.glb │ ├── thruster_core_round.glb │ └── thruster_trail_round.glb │ ├── textures │ ├── engine_corpo_pattern_d.tga │ ├── engine_corpo_pattern_n.tga │ ├── flight_pitch.dds │ ├── flight_pitch.png │ ├── flight_pitch.tga │ ├── flight_pitch.tiff │ ├── flight_pitch_legends.png │ ├── flight_pitch_major.png │ ├── flight_pitch_mask.png │ ├── flight_pitch_minor.dds │ └── flight_pitch_minor.png │ └── widgets │ └── flight_hud.inkwidget.json └── todo.md /.gitattributes: -------------------------------------------------------------------------------- 1 | *.reds linguist-language=Swift 2 | # Auto detect text files and perform LF normalization 3 | * text=auto 4 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "src/redscript/codeware"] 2 | path = src/redscript/codeware 3 | url = git@github.com:jackhumbert/cp2077-codeware.git 4 | [submodule "deps/red4ext.sdk"] 5 | path = deps/red4ext.sdk 6 | url = git@github.com:jackhumbert/RED4ext.SDK.git 7 | branch = new-types 8 | [submodule "deps/cyberpunk_cmake"] 9 | path = deps/cyberpunk_cmake 10 | url = git@github.com:jackhumbert/cyberpunk_cmake.git 11 | [submodule "deps/mod_settings"] 12 | path = deps/mod_settings 13 | url = git@github.com:jackhumbert/mod_settings.git 14 | [submodule "deps/input_loader"] 15 | path = deps/input_loader 16 | url = git@github.com:jackhumbert/cyberpunk2077-input-loader.git 17 | [submodule "deps/red_lib"] 18 | path = deps/red_lib 19 | url = https://github.com/jackhumbert/cp2077-red-lib.git 20 | branch = jack 21 | [submodule "deps/spdlog"] 22 | path = deps/spdlog 23 | url = https://github.com/gabime/spdlog.git 24 | [submodule "deps/detours"] 25 | path = deps/detours 26 | url = https://github.com/microsoft/Detours.git 27 | [submodule "deps/archive_xl"] 28 | path = deps/archive_xl 29 | url = https://github.com/psiberx/cp2077-archive-xl 30 | [submodule "deps/tweak_xl"] 31 | path = deps/tweak_xl 32 | url = https://github.com/psiberx/cp2077-tweak-xl.git 33 | -------------------------------------------------------------------------------- /.redscript-ide: -------------------------------------------------------------------------------- 1 | redscript_dirs = [ 2 | "src/redscript", 3 | "deps/mod_settings/redscript" 4 | ] -------------------------------------------------------------------------------- /.vscode/c_cpp_properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "configurations": [ 3 | { 4 | "name": "Win32", 5 | "includePath": [ 6 | "${workspaceFolder}/src/red4ext", 7 | "${workspaceFolder}/deps/red4ext.sdk/include", 8 | "${workspaceFolder}/deps/fmod/include", 9 | "${workspaceFolder}/deps/spdlog/include" 10 | ], 11 | "defines": [ 12 | "WINVER=0x0601", 13 | "_WIN32_WINNT=0x0601", 14 | "_DEBUG", 15 | "UNICODE", 16 | "_UNICODE", 17 | "WIN32_LEAN_AND_MEAN", 18 | "_ITERATOR_DEBUG_LEVEL=0" 19 | ], 20 | "windowsSdkVersion": "10.0.22000.0", 21 | "compilerPath": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.34.31933\\bin\\Hostx64\\x64\\cl.exe", 22 | "cStandard": "c17", 23 | "cppStandard": "c++20", 24 | "intelliSenseMode": "windows-msvc-x64", 25 | "configurationProvider": "ms-vscode.cmake-tools", 26 | "browse": { 27 | "databaseFilename": "" 28 | } 29 | } 30 | ], 31 | "version": 4 32 | } -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "jackhumbert.redscript-syntax-highlighting" 4 | ] 5 | } -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "type": "cppvsdbg", 9 | "request": "launch", 10 | "name": "Debug", 11 | "preLaunchTask": "Install Mod", 12 | "program": "C:\\Program Files (x86)\\Steam\\steamapps\\common\\Cyberpunk 2077\\bin\\x64\\Cyberpunk2077.exe", 13 | "cwd": "C:\\Program Files (x86)\\Steam\\steamapps\\common\\Cyberpunk 2077\\", 14 | "visualizerFile": "${workspaceFolder}/deps/cyberpunk_cmake/.natvis", 15 | // "showDisplayString": true 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "redscript.buildPath": "build", 3 | "redscript.sourcePath": "src/redscript", 4 | "redscript.modFolderName": "flight_control", 5 | "files.exclude": { 6 | "packed": true, 7 | "**/.git": true, 8 | "**/.svn": true, 9 | "**/.hg": true, 10 | "**/CVS": true, 11 | "**/.DS_Store": true, 12 | "**/Thumbs.db": true 13 | }, 14 | "terminal.integrated.shellArgs.windows": ["-ExecutionPolicy", "Bypass"] 15 | } -------------------------------------------------------------------------------- /cliff.toml: -------------------------------------------------------------------------------- 1 | [changelog] 2 | header = """ 3 | # Changelog 4 | """ 5 | # template for the changelog body 6 | # https://tera.netlify.app/docs/#introduction 7 | body = """ 8 | {% if version %}\ 9 | ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} 10 | {% else %}\ 11 | ## [unreleased] 12 | {% endif %}\ 13 | {% for group, commits in commits | group_by(attribute="group") %} 14 | ### {{ group | upper_first }} 15 | {% for commit in commits %}\ 16 | - {% if commit.breaking %}[**breaking**] {% endif %}\ 17 | {{ commit.message | upper_first }} [{{ commit.scope }}] ({{ commit.id }}) 18 | {% endfor %}\ 19 | {% endfor %} 20 | ### Contributors 21 | {% for author in commits | map(attribute="author.name") | unique %}\ 22 | - {{ author }} 23 | {% endfor %}\n 24 | """ 25 | trim = true 26 | 27 | [git] 28 | # parse the commits based on https://www.conventionalcommits.org 29 | conventional_commits = true 30 | commit_parsers = [ 31 | { message = "^feat", group = "Features" }, 32 | { message = "^fix", group = "Bug Fixes" }, 33 | { message = "^doc", group = "Documentation" }, 34 | { message = "^perf", group = "Performance" }, 35 | { message = "^refactor", group = "Refactor" }, 36 | { message = "^style", group = "Styling" }, 37 | { message = "^test", group = "Testing" }, 38 | { message = "^chore", group = "Miscellaneous", skip = true }, 39 | { message = "^ci", group = "CI", skip = true }, 40 | { body = ".*security", group = "Security" } 41 | ] 42 | tag_pattern = "v[0-9]+.[0-9]+.[0-9]+" -------------------------------------------------------------------------------- /cmake/ConfigureDefaultOutputDirectories.cmake: -------------------------------------------------------------------------------- 1 | macro(configure_default_output_directories) 2 | set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/libs") 3 | set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/libs") 4 | set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") 5 | 6 | foreach(CONFIGURATION ${CMAKE_CONFIGURATION_TYPES}) 7 | string(TOUPPER ${CONFIGURATION} CONFIGURATION_UPPER) 8 | 9 | set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CONFIGURATION_UPPER} "${CMAKE_BINARY_DIR}/${CONFIGURATION}/libs") 10 | set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CONFIGURATION_UPPER} "${CMAKE_BINARY_DIR}/${CONFIGURATION}/libs") 11 | set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONFIGURATION_UPPER} "${CMAKE_BINARY_DIR}/${CONFIGURATION}/bin") 12 | endforeach() 13 | endmacro() 14 | -------------------------------------------------------------------------------- /cmake/CreateRED4extSignatures.cmake: -------------------------------------------------------------------------------- 1 | # Generate header of all RED4ext files 2 | 3 | set(ZOLTAN_ALL_SIGNATURES "${PROJECT_BINARY_DIR}/zoltan/Signatures.hpp") 4 | 5 | file(GLOB_RECURSE RED4EXT_ZOLTAN_HEADERS ${PROJECT_SOURCE_DIR}/deps/red4ext.sdk/include/RED4ext/*.hpp) 6 | list(FILTER RED4EXT_ZOLTAN_HEADERS EXCLUDE REGEX ".*-inl.hpp") 7 | list(FILTER RED4EXT_ZOLTAN_HEADERS EXCLUDE REGEX "VFTEnum.hpp") 8 | 9 | file(WRITE ${ZOLTAN_ALL_SIGNATURES} "") 10 | foreach(RED4EXT_ZOLTAN_HEADER ${RED4EXT_ZOLTAN_HEADERS}) 11 | file(RELATIVE_PATH IN_FILE_RELATIVE ${PROJECT_SOURCE_DIR}/deps/red4ext.sdk/include/ ${RED4EXT_ZOLTAN_HEADER}) 12 | file(APPEND ${ZOLTAN_ALL_SIGNATURES} "#include <${IN_FILE_RELATIVE}>\n") 13 | endforeach() -------------------------------------------------------------------------------- /cmake/CreateUninstallScript.cmake: -------------------------------------------------------------------------------- 1 | file(GLOB_RECURSE UNINSTALL_FILES "${LTBF_GAME_DIR}/*" LIST_DIRECTORIES false) 2 | # list(FILTER UNINSTALL_FILES EXCLUDE REGEX "uninstall") 3 | 4 | set(LTBF_INSTALLED_FILES_REL "") 5 | foreach(_FILE ${UNINSTALL_FILES}) 6 | file(RELATIVE_PATH _TEMPFILE "${LTBF_INSTALL_LOCATION}" "${_FILE}") 7 | file(TO_NATIVE_PATH "${_TEMPFILE}" REAL_FILE) 8 | list(APPEND LTBF_INSTALLED_FILES_REL "${REAL_FILE}") 9 | endforeach() 10 | 11 | list(JOIN LTBF_INSTALLED_FILES_REL " " LTBF_INSTALLED_FILES) 12 | 13 | file(GLOB_RECURSE UNINSTALL_FOLDERS "${LTBF_GAME_DIR}/*" LIST_DIRECTORIES true) 14 | list(FILTER UNINSTALL_FOLDERS INCLUDE REGEX "/let_there_be_flight/") 15 | 16 | set(LTBF_INSTALLED_FOLDERS_REL "") 17 | foreach(_FOLDER ${UNINSTALL_FOLDERS}) 18 | file(RELATIVE_PATH _TEMPFILE "${LTBF_INSTALL_LOCATION}" "${_FOLDER}") 19 | get_filename_component(_TEMPFOLDER ${_TEMPFILE} DIRECTORY) 20 | file(TO_NATIVE_PATH "${_TEMPFOLDER}" REAL_FOLDER) 21 | list(APPEND LTBF_INSTALLED_FOLDERS_REL "${REAL_FOLDER}") 22 | endforeach() 23 | 24 | list(REMOVE_DUPLICATES LTBF_INSTALLED_FOLDERS_REL) 25 | list(JOIN LTBF_INSTALLED_FOLDERS_REL " " LTBF_INSTALLED_FOLDERS) 26 | 27 | configure_file("${LTBF_UNINSTALL_BAT_IN}" "${LTBF_UNINSTALL_BAT_OUT}") -------------------------------------------------------------------------------- /cmake/FindAllRED4extAddresses.cmake: -------------------------------------------------------------------------------- 1 | # Experimental generation of all addresses in red4ext.sdk 2 | 3 | set(ZOLTAN_ALL_SIGNATURES "${PROJECT_BINARY_DIR}/zoltan/Signatures.hpp") 4 | #set(ZOLTAN_ALL_ADDRESSES "${PROJECT_BINARY_DIR}/zoltan/Addresses.hpp") 5 | set(ZOLTAN_ALL_ADDRESSES "${PROJECT_SOURCE_DIR}/deps/red4ext.sdk/include/RED4ext/Addresses-Found.hpp") 6 | 7 | execute_process( 8 | # ${LTBF_TOOLS_DIR}/zoltan-clang.exe 9 | COMMAND "C:/Users/Jack/Documents/cyberpunk/zoltan/target/debug/zoltan-clang.exe" 10 | # COMMAND ${LTBF_TOOLS_DIR}/zoltan-clang.exe 11 | "${ZOLTAN_ALL_SIGNATURES}" "${CYBERPUNK_2077_GAME_DIR}/bin/x64/Cyberpunk2077.exe" -f "std=c++20" -f "I${PROJECT_SOURCE_DIR}/deps/red4ext.sdk/include" --c-output "${ZOLTAN_ALL_ADDRESSES}") -------------------------------------------------------------------------------- /cmake/FindCodeware.cmake: -------------------------------------------------------------------------------- 1 | add_library(Codeware INTERFACE) 2 | set_target_properties(Codeware PROPERTIES FOLDER "Dependencies") 3 | 4 | #set_property(TARGET Codeware PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/deps/codeware/build/windows/x64/debug/Codeware.dll") 5 | #set_property(TARGET Codeware PROPERTY IMPORTED_IMPLIB "${PROJECT_SOURCE_DIR}/deps/codeware/build/windows/x64/debug/Codeware.lib") 6 | 7 | target_include_directories(Codeware INTERFACE "${PROJECT_SOURCE_DIR}/deps/codeware/lib") 8 | target_include_directories(Codeware INTERFACE "${PROJECT_SOURCE_DIR}/deps/codeware/vendor/nameof/include") -------------------------------------------------------------------------------- /cmake/FindDetours.cmake: -------------------------------------------------------------------------------- 1 | # project(Detours) 2 | 3 | add_library(Detours STATIC) 4 | set_target_properties(Detours PROPERTIES FOLDER "Dependencies") 5 | 6 | set(DETOURS_SRC_DIR "${PROJECT_SOURCE_DIR}/deps/detours/src") 7 | file(GLOB_RECURSE HEADER_FILES ${DETOURS_SRC_DIR}/*.h) 8 | file(GLOB_RECURSE SOURCE_FILES ${DETOURS_SRC_DIR}/*.cpp) 9 | 10 | # Remove "uimports.cpp" since it throws "detours.h version mismatch" error. 11 | list(REMOVE_ITEM SOURCE_FILES ${DETOURS_SRC_DIR}/uimports.cpp) 12 | 13 | target_include_directories(Detours PUBLIC ${DETOURS_SRC_DIR}) 14 | target_sources(Detours PRIVATE ${HEADER_FILES} ${SOURCE_FILES}) 15 | -------------------------------------------------------------------------------- /cmake/FindFMOD.cmake: -------------------------------------------------------------------------------- 1 | add_library(FMOD SHARED IMPORTED) 2 | set_target_properties(FMOD PROPERTIES FOLDER "Dependencies") 3 | 4 | set(FMOD_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/deps/fmod/include") 5 | set(FMOD_LIB_DIR "${PROJECT_SOURCE_DIR}/deps/fmod/lib") 6 | set(FMOD_GAME_DIR_DLL "${MOD_GAME_DIR_FMOD_FOLDER}/fmod.dll") 7 | set(FMOD_STUDIO_GAME_DIR_DLL "${MOD_GAME_DIR_FMOD_FOLDER}/fmodstudio.dll") 8 | 9 | set_property(TARGET FMOD PROPERTY IMPORTED_LOCATION "${FMOD_LIB_DIR}/x64/fmod.dll") 10 | # set_property(TARGET FMOD PROPERTY IMPORTED_LOCATION_DEBUG "${FMOD_LIB_DIR}/x64/fmodL.dll") 11 | set_property(TARGET FMOD PROPERTY IMPORTED_IMPLIB "${FMOD_LIB_DIR}/x64/fmod_vc.lib") 12 | # set_property(TARGET FMOD PROPERTY IMPORTED_IMPLIB_DEBUG "${FMOD_LIB_DIR}/x64/fmodL_vc.lib") 13 | # file(GLOB_RECURSE HEADER_FILES ${FMOD_INCLUDE_DIR}/*.h) 14 | # set_property(TARGET FMOD PROPERTY IMPORTED_IMPLIB ${FMOD_LIB_DIR}) 15 | 16 | add_library(FMODStudio SHARED IMPORTED) 17 | set_property(TARGET FMODStudio PROPERTY IMPORTED_LOCATION "${FMOD_LIB_DIR}/x64/fmodstudio.dll") 18 | # set_property(TARGET FMODStudio PROPERTY IMPORTED_LOCATION_DEBUG "${FMOD_LIB_DIR}/x64/fmodstudioL.dll") 19 | set_property(TARGET FMODStudio PROPERTY IMPORTED_IMPLIB "${FMOD_LIB_DIR}/x64/fmodstudio_vc.lib") 20 | # set_property(TARGET FMODStudio PROPERTY IMPORTED_IMPLIB_DEBUG "${FMOD_LIB_DIR}/x64/fmodstudioL_vc.lib") 21 | 22 | # add_custom_command( 23 | # OUTPUT ${FMOD_GAME_DIR_DLL} 24 | # DEPENDS ${FMOD_LIB_DIR}/x64/fmod.dll 25 | # COMMAND ${CMAKE_COMMAND} -E copy_if_different ${FMOD_LIB_DIR}/x64/fmod.dll ${MOD_GAME_DIR_FMOD_FOLDER} 26 | # ) 27 | configure_mod_file(deps/fmod/lib/x64/fmod.dll red4ext/plugins/${MOD_SLUG}/fmod.dll) 28 | configure_mod_file(deps/fmod/lib/x64/fmodstudio.dll red4ext/plugins/${MOD_SLUG}/fmodstudio.dll) 29 | 30 | # add_custom_target(fmod_dll DEPENDS ${FMOD_GAME_DIR_DLL}) 31 | 32 | # add_custom_command( 33 | # OUTPUT ${FMOD_STUDIO_GAME_DIR_DLL} 34 | # DEPENDS ${FMOD_LIB_DIR}/x64/fmodstudio.dll 35 | # COMMAND ${CMAKE_COMMAND} -E copy_if_different ${FMOD_LIB_DIR}/x64/fmodstudio.dll ${FMOD_STUDIO_GAME_DIR_DLL} 36 | # ) 37 | 38 | # add_custom_target(fmodstudio_dll DEPENDS ${FMOD_STUDIO_GAME_DIR_DLL}) 39 | 40 | target_link_libraries(FMOD INTERFACE FMODStudio) 41 | 42 | target_include_directories(FMOD INTERFACE ${FMOD_INCLUDE_DIR}) 43 | 44 | # include_directories(FMOD ${FMOD_INCLUDE_DIR}) 45 | # target_link_libraries(FMOD INTERFACE ${FMOD_LIB_DIR}) 46 | # target_link_directories(FMOD INTERFACE ${FMOD_LIB_DIR}) 47 | # find_library(FMOD SHARED IMPORTED ${FMOD_LIB_DIR}) 48 | -------------------------------------------------------------------------------- /cmake/FindIndividualRED4extAddresses.cmake: -------------------------------------------------------------------------------- 1 | # Experimental generation of all addresses in red4ext.sdk 2 | 3 | set(ZOLTAN_ALL_SIGNATURES "${PROJECT_BINARY_DIR}/zoltan/Signatures.hpp") 4 | set(ZOLTAN_ALL_ADDRESSES "${PROJECT_BINARY_DIR}/zoltan/Addresses.hpp") 5 | 6 | file(GLOB_RECURSE RED4EXT_ZOLTAN_HEADERS ${PROJECT_SOURCE_DIR}/deps/red4ext.sdk/include/RED4ext/*.hpp) 7 | list(FILTER RED4EXT_ZOLTAN_HEADERS EXCLUDE REGEX ".*-inl.hpp") 8 | list(FILTER RED4EXT_ZOLTAN_HEADERS EXCLUDE REGEX "VFTEnum.hpp") 9 | 10 | file(WRITE ${ZOLTAN_ALL_ADDRESSES} "") 11 | foreach(RED4EXT_ZOLTAN_HEADER ${RED4EXT_ZOLTAN_HEADERS}) 12 | file(RELATIVE_PATH IN_FILE_RELATIVE ${PROJECT_SOURCE_DIR}/deps/red4ext.sdk/include/ ${RED4EXT_ZOLTAN_HEADER}) 13 | get_filename_component(FOLDER ${IN_FILE_RELATIVE} DIRECTORY) 14 | get_filename_component(FILE ${IN_FILE_RELATIVE} NAME_WE) 15 | file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/zoltan/${FOLDER}") 16 | message(STATUS "${IN_FILE_RELATIVE}") 17 | execute_process( 18 | COMMAND ${LTBF_TOOLS_DIR}/zoltan-clang.exe "${RED4EXT_ZOLTAN_HEADER}" "${CYBERPUNK_2077_GAME_DIR}/bin/x64/Cyberpunk2077.exe" -f "std=c++20" -f "I${PROJECT_SOURCE_DIR}/deps/red4ext.sdk/include" --c-output "${PROJECT_BINARY_DIR}/zoltan/${FOLDER}/${FILE}-addr.hpp") 19 | file(APPEND ${ZOLTAN_ALL_ADDRESSES} "#include <${FOLDER}/${FILE}-addr.hpp>\n") 20 | endforeach() 21 | 22 | #execute_process( 23 | # COMMAND ${LTBF_TOOLS_DIR}/zoltan-clang.exe "${ZOLTAN_ALL_SIGNATURES}" "${CYBERPUNK_2077_GAME_DIR}/bin/x64/Cyberpunk2077.exe" -f "std=c++20" -f "I${PROJECT_SOURCE_DIR}/deps/red4ext.sdk/include" --c-output "${ZOLTAN_ALL_ADDRESSES}") -------------------------------------------------------------------------------- /cmake/FindInputLoader.cmake: -------------------------------------------------------------------------------- 1 | message(STATUS "Configuring Input Loader") 2 | list(APPEND CMAKE_MESSAGE_INDENT " ") 3 | add_subdirectory(${PROJECT_SOURCE_DIR}/deps/input_loader) 4 | list(POP_BACK CMAKE_MESSAGE_INDENT) -------------------------------------------------------------------------------- /cmake/FindPhysX3.cmake: -------------------------------------------------------------------------------- 1 | add_library(PhysX3 SHARED IMPORTED) 2 | set_target_properties(PhysX3 PROPERTIES FOLDER "Dependencies") 3 | 4 | set(PhysX3_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/deps/physx") 5 | set(PhysX3_LIB_DIR "${PROJECT_SOURCE_DIR}/deps/physx") 6 | set(PhysX3_GAME_DLL "${CYBERPUNK_2077_GAME_DIR}/bin/x64/PhysX3_x64.dll") 7 | 8 | set_property(TARGET PhysX3 PROPERTY IMPORTED_LOCATION "${PhysX3_GAME_DLL}") 9 | set_property(TARGET PhysX3 PROPERTY IMPORTED_IMPLIB "${PhysX3_LIB_DIR}/PhysX3_x64.lib") 10 | 11 | target_include_directories(PhysX3 INTERFACE "${PhysX3_INCLUDE_DIR}") 12 | target_include_directories(PhysX3 INTERFACE "${PROJECT_SOURCE_DIR}/deps/red4ext.sdk/include") 13 | 14 | -------------------------------------------------------------------------------- /cmake/FindSpdlog.cmake: -------------------------------------------------------------------------------- 1 | if(NOT DEFINED MOD_SPDLOG_LOADED) 2 | set(MOD_SPDLOG_LOADED TRUE) 3 | option(SPDLOG_ENABLE_PCH "" ON) 4 | option(SPDLOG_DISABLE_DEFAULT_LOGGER "" ON) 5 | option(SPDLOG_FMT_EXTERNAL "" OFF) 6 | option(SPDLOG_FMT_EXTERNAL_HO "" OFF) 7 | option(SPDLOG_NO_THREAD_ID "" ON) 8 | option(SPDLOG_WCHAR_FILENAMES "" ON) 9 | option(SPDLOG_WCHAR_SUPPORT "" ON) 10 | 11 | add_subdirectory(deps/spdlog) 12 | set_target_properties(spdlog PROPERTIES FOLDER "Dependencies") 13 | 14 | target_compile_definitions(spdlog PUBLIC 15 | _ITERATOR_DEBUG_LEVEL=0 16 | ) 17 | 18 | mark_as_advanced( 19 | SPDLOG_BUILD_ALL 20 | SPDLOG_BUILD_BENCH 21 | SPDLOG_BUILD_EXAMPLE 22 | SPDLOG_BUILD_EXAMPLE_HO 23 | SPDLOG_BUILD_SHARED 24 | SPDLOG_BUILD_TESTS 25 | SPDLOG_BUILD_TESTS_HO 26 | SPDLOG_BUILD_WARNINGS 27 | SPDLOG_CLOCK_COARSE 28 | SPDLOG_DISABLE_DEFAULT_LOGGER 29 | SPDLOG_ENABLE_PCH 30 | SPDLOG_FMT_EXTERNAL 31 | SPDLOG_FMT_EXTERNAL_HO 32 | SPDLOG_INSTALL 33 | SPDLOG_NO_ATOMIC_LEVELS 34 | SPDLOG_NO_EXCEPTIONS 35 | SPDLOG_NO_THREAD_ID 36 | SPDLOG_NO_TLS 37 | SPDLOG_PREVENT_CHILD_FD 38 | SPDLOG_SANITIZE_ADDRESS 39 | SPDLOG_TIDY 40 | SPDLOG_USE_STD_FORMAT 41 | SPDLOG_WCHAR_FILENAMES 42 | SPDLOG_WCHAR_SUPPORT 43 | ) 44 | endif() -------------------------------------------------------------------------------- /cmake/PackFiles.cmake: -------------------------------------------------------------------------------- 1 | # uses these variables: 2 | # COMMENT_SLUG 3 | # HEADER_FILE 4 | # PACKED_FILE 5 | # GLOB_EXT 6 | # SEARCH_FOLDER 7 | 8 | file(GLOB_RECURSE FILES ${SEARCH_FOLDER}/*.${GLOB_EXT}) 9 | 10 | string(TIMESTAMP CURRENT_TIMESTAMP "%Y-%m-%d %H:%M:%S UTC" UTC) 11 | 12 | file(STRINGS "${HEADER_FILE}" HEADER) 13 | string(CONFIGURE "${HEADER}" CONFIGURED_HEADER) 14 | 15 | file(WRITE ${PACKED_FILE} "") 16 | foreach(_LINE ${CONFIGURED_HEADER}) 17 | file(APPEND ${PACKED_FILE} "${COMMENT_SLUG} ${_LINE}\n") 18 | endforeach() 19 | file(APPEND ${PACKED_FILE} "\n${COMMENT_SLUG} This file was automatically generated on ${CURRENT_TIMESTAMP}\n\n") 20 | 21 | function(add_file IN_FILE OUT_FILE) 22 | file(READ ${IN_FILE} CONTENTS) 23 | file(RELATIVE_PATH IN_FILE_RELATIVE ${SEARCH_FOLDER} ${IN_FILE}) 24 | file(APPEND ${OUT_FILE} "${COMMENT_SLUG} ${IN_FILE_RELATIVE}\n\n") 25 | message(STATUS "${IN_FILE_RELATIVE}") 26 | file(APPEND ${OUT_FILE} "${CONTENTS}\n\n") 27 | endfunction() 28 | 29 | foreach(_FILE ${FILES}) 30 | add_file(${_FILE} ${PACKED_FILE}) 31 | endforeach() -------------------------------------------------------------------------------- /cmake/PackRedscriptFiles.cmake: -------------------------------------------------------------------------------- 1 | string(TIMESTAMP CURRENT_TIMESTAMP "%Y-%m-%dT%H:%M:%SZ UTC" UTC) 2 | 3 | file(WRITE ${LTBF_REDSCRIPT_PACKED_FILE} "// Generated on ${CURRENT_TIMESTAMP}\n\n") 4 | file(GLOB_RECURSE REDSCRIPT_FILES ${LTBF_REDSCRIPT_DIR}/*.reds) 5 | 6 | function(add_redscript_file IN_FILE OUT_FILE) 7 | file(READ ${IN_FILE} CONTENTS) 8 | file(RELATIVE_PATH IN_FILE_RELATIVE ${LTBF_REDSCRIPT_DIR} ${IN_FILE}) 9 | file(APPEND ${OUT_FILE} "// ${IN_FILE_RELATIVE}\n\n") 10 | message(STATUS "${IN_FILE_RELATIVE}") 11 | file(APPEND ${OUT_FILE} "${CONTENTS}\n\n") 12 | endfunction() 13 | 14 | foreach(REDSCRIPT_FILE ${REDSCRIPT_FILES}) 15 | add_redscript_file(${REDSCRIPT_FILE} ${LTBF_REDSCRIPT_PACKED_FILE}) 16 | endforeach() -------------------------------------------------------------------------------- /cmake/TargetOutputDirectory.cmake: -------------------------------------------------------------------------------- 1 | function(target_output_directory TARGET DIRECTORY) 2 | foreach(CONFIGURATION ${CMAKE_CONFIGURATION_TYPES}) 3 | string(TOUPPER ${CONFIGURATION} CONFIGURATION_UPPER) 4 | 5 | set_target_properties(${TARGET} 6 | PROPERTIES 7 | ARCHIVE_OUTPUT_DIRECTORY_${CONFIGURATION_UPPER} "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CONFIGURATION_UPPER}}/${DIRECTORY}" 8 | LIBRARY_OUTPUT_DIRECTORY_${CONFIGURATION_UPPER} "${CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CONFIGURATION_UPPER}}/${DIRECTORY}" 9 | RUNTIME_OUTPUT_DIRECTORY_${CONFIGURATION_UPPER} "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONFIGURATION_UPPER}}/${DIRECTORY}" 10 | ) 11 | endforeach() 12 | endfunction() 13 | -------------------------------------------------------------------------------- /deps/fmod/lib/x64/fmod.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x64/fmod.dll -------------------------------------------------------------------------------- /deps/fmod/lib/x64/fmodL.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x64/fmodL.dll -------------------------------------------------------------------------------- /deps/fmod/lib/x64/fmodL_vc.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x64/fmodL_vc.lib -------------------------------------------------------------------------------- /deps/fmod/lib/x64/fmod_vc.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x64/fmod_vc.lib -------------------------------------------------------------------------------- /deps/fmod/lib/x64/fmodstudio.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x64/fmodstudio.dll -------------------------------------------------------------------------------- /deps/fmod/lib/x64/fmodstudioL.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x64/fmodstudioL.dll -------------------------------------------------------------------------------- /deps/fmod/lib/x64/fmodstudioL_vc.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x64/fmodstudioL_vc.lib -------------------------------------------------------------------------------- /deps/fmod/lib/x64/fmodstudio_vc.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x64/fmodstudio_vc.lib -------------------------------------------------------------------------------- /deps/fmod/lib/x64/fsbank.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x64/fsbank.dll -------------------------------------------------------------------------------- /deps/fmod/lib/x64/fsbank_vc.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x64/fsbank_vc.lib -------------------------------------------------------------------------------- /deps/fmod/lib/x64/libfsbvorbis64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x64/libfsbvorbis64.dll -------------------------------------------------------------------------------- /deps/fmod/lib/x64/opus.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x64/opus.dll -------------------------------------------------------------------------------- /deps/fmod/lib/x86/fmod.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x86/fmod.dll -------------------------------------------------------------------------------- /deps/fmod/lib/x86/fmodL.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x86/fmodL.dll -------------------------------------------------------------------------------- /deps/fmod/lib/x86/fmodL_vc.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x86/fmodL_vc.lib -------------------------------------------------------------------------------- /deps/fmod/lib/x86/fmod_vc.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x86/fmod_vc.lib -------------------------------------------------------------------------------- /deps/fmod/lib/x86/fmodstudio.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x86/fmodstudio.dll -------------------------------------------------------------------------------- /deps/fmod/lib/x86/fmodstudioL.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x86/fmodstudioL.dll -------------------------------------------------------------------------------- /deps/fmod/lib/x86/fmodstudioL_vc.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x86/fmodstudioL_vc.lib -------------------------------------------------------------------------------- /deps/fmod/lib/x86/fmodstudio_vc.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x86/fmodstudio_vc.lib -------------------------------------------------------------------------------- /deps/fmod/lib/x86/fsbank.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x86/fsbank.dll -------------------------------------------------------------------------------- /deps/fmod/lib/x86/fsbank_vc.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x86/fsbank_vc.lib -------------------------------------------------------------------------------- /deps/fmod/lib/x86/libfmod.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x86/libfmod.a -------------------------------------------------------------------------------- /deps/fmod/lib/x86/libfmodL.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x86/libfmodL.a -------------------------------------------------------------------------------- /deps/fmod/lib/x86/libfmodstudio.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x86/libfmodstudio.a -------------------------------------------------------------------------------- /deps/fmod/lib/x86/libfmodstudioL.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x86/libfmodstudioL.a -------------------------------------------------------------------------------- /deps/fmod/lib/x86/libfsbvorbis.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x86/libfsbvorbis.dll -------------------------------------------------------------------------------- /deps/fmod/lib/x86/opus.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/fmod/lib/x86/opus.dll -------------------------------------------------------------------------------- /deps/physx/PhysX3_x64.exp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/physx/PhysX3_x64.exp -------------------------------------------------------------------------------- /deps/physx/PhysX3_x64.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/deps/physx/PhysX3_x64.lib -------------------------------------------------------------------------------- /experiments/CResource.reds: -------------------------------------------------------------------------------- 1 | public class CResource extends ISerializable { 2 | public let cookingPlatform: ECookingPlatform; 3 | } -------------------------------------------------------------------------------- /experiments/ColliderComponent.reds: -------------------------------------------------------------------------------- 1 | 2 | 3 | // native let colliders: array>; 4 | // native let shapes: array>; 5 | // native let simulationType: physicsSimulationType; 6 | // native let startInactive: Bool; 7 | // native let useCCD: Bool; 8 | // native let sendOnStoppedMovingEvents: Bool; 9 | @addField(ColliderComponent) 10 | native let massOverride: Float; 11 | @addField(ColliderComponent) 12 | native let volume: Float; 13 | @addField(ColliderComponent) 14 | native let mass: Float; 15 | @addField(ColliderComponent) 16 | native let inertia: Vector3; 17 | @addField(ColliderComponent) 18 | native let comOffset: Transform; 19 | // native let filterData: ref; 20 | @addField(ColliderComponent) 21 | native let isEnabled: Bool; 22 | // native let dynamicTrafficSetting: TrafficGenDynamicTrafficSetting; 23 | // native func CreatePhysicalBodyInterface(bodyIndex: Uint32) -> ref; 24 | -------------------------------------------------------------------------------- /experiments/ECookingPlatform.reds: -------------------------------------------------------------------------------- 1 | enum ECookingPlatform { 2 | PLATFORM_None = 0, 3 | PLATFORM_PC = 1, 4 | PLATFORM_XboxOne = 2, 5 | PLATFORM_PS4 = 3, 6 | PLATFORM_WindowsServer = 4, 7 | PLATFORM_LinuxServer = 5 8 | } -------------------------------------------------------------------------------- /experiments/EntityOrientationProvider.reds: -------------------------------------------------------------------------------- 1 | // public native class EntityOrientationProvider extends IOrientationProvider { 2 | // public native let slotComponent: wref; 3 | // public native let slotId: Int32; 4 | // public native let entity: wref; 5 | // public native let orientationEntitySpace: Quaternion; 6 | // public native func CalculateOrientation(out outOri: Quaternion); 7 | // } -------------------------------------------------------------------------------- /experiments/FlightDevice.reds: -------------------------------------------------------------------------------- 1 | // public class FlightDevice extends GameObject { 2 | // public let flightController: ref; 3 | 4 | // protected cb func OnRequestComponents(ri: EntityRequestComponentsInterface) -> Bool { 5 | // super.OnRequestComponents(ri); 6 | // EntityRequestComponentsInterface.RequestComponent(ri, n"updateComponent", n"UpdateComponent", false); 7 | // FlightLog.Info("[FlightDevice] OnRequestComponents"); 8 | // } 9 | 10 | // protected cb func OnTakeControl(ri: EntityResolveComponentsInterface) -> Bool { 11 | // super.OnTakeControl(ri); 12 | // FlightLog.Info("[FlightDevice] OnTakeControl"); 13 | // } 14 | 15 | // protected cb func OnGameAttached() -> Bool { 16 | // super.OnGameAttached(); 17 | // FlightLog.Info("[FlightDevice] OnGameAttached"); 18 | // } 19 | 20 | // protected cb func OnDetach() -> Bool { 21 | // super.OnDetach(); 22 | // FlightLog.Info("[FlightDevice] OnDetach"); 23 | // } 24 | // } -------------------------------------------------------------------------------- /experiments/ISerializable.reds: -------------------------------------------------------------------------------- 1 | public class ISerializable { 2 | 3 | } -------------------------------------------------------------------------------- /experiments/NewVehicles.reds: -------------------------------------------------------------------------------- 1 | // enum gamedataVehicleManufacturerNew { 2 | // Arch = 0, 3 | // Archer = 1, 4 | // Aurochs = 2, 5 | // Brennan = 3, 6 | // Chevillon = 4, 7 | // Delamain = 5, 8 | // Herrera = 6, 9 | // Kaukaz = 7, 10 | // Makigai = 8, 11 | // Militech = 9, 12 | // Mizutani = 10, 13 | // Porsche = 11, 14 | // Quadra = 12, 15 | // Rayfield = 13, 16 | // Seamurai = 14, 17 | // Thorton = 15, 18 | // Villefort = 16, 19 | // Yaiba = 17, 20 | // Zetatech = 18, 21 | // Peugeot = 19, 22 | // Count = 20, 23 | // Invalid = 21, 24 | // } 25 | 26 | // @addMethod(VehicleManufacturer_Record) 27 | // public final func TypeNew() -> gamedataVehicleManufacturerNew { 28 | // return this.Type() as Int32; 29 | // } -------------------------------------------------------------------------------- /experiments/NoFallDeath.reds: -------------------------------------------------------------------------------- 1 | // @wrapMethod(LocomotionAirDecisions) 2 | // protected final const func GetLandingType(const stateContext: ref) -> Int32 { 3 | // let landing = wrappedMethod(stateContext); 4 | // if landing == 5 { 5 | // return 3; 6 | // } else { 7 | // return landing; 8 | // } 9 | // } 10 | 11 | // @wrapMethod(LocomotionAirEvents) 12 | // public func OnEnter(stateContext: ref, scriptInterface: ref) -> Void { 13 | // wrappedMethod(stateContext, scriptInterface); 14 | // stateContext.SetPermanentFloatParameter(n"DeathLandingFallingSpeed", 100.0, true); 15 | // } 16 | -------------------------------------------------------------------------------- /experiments/PhysicalBodyInterface.reds: -------------------------------------------------------------------------------- 1 | @addField(PhysicalBodyInterface) 2 | native func GetAngularVelocity() -> Vector4; 3 | 4 | @addField(PhysicalBodyInterface) 5 | native func GetLinearVelocity() -> Vector4; 6 | 7 | @addField(PhysicalBodyInterface) 8 | native func GetLocalCenterOfMass() -> Vector4; 9 | 10 | @addField(PhysicalBodyInterface) 11 | native func GetMass() -> Float; -------------------------------------------------------------------------------- /experiments/QuickHackFlightMalfunction.reds: -------------------------------------------------------------------------------- 1 | public class QuickHackFlightMalfunction extends ActionBool { 2 | 3 | public final func SetProperties() -> Void { 4 | this.actionName = n"QuickHackFlightMalfunction"; 5 | this.prop = DeviceActionPropertyFunctions.SetUpProperty_Bool(n"QuickHackFlightMalfunction", true, n"LocKey#11337", n"LocKey#11337"); 6 | } 7 | 8 | public final func SetProperties(interaction: CName) -> Void { 9 | this.actionName = interaction; 10 | this.prop = DeviceActionPropertyFunctions.SetUpProperty_Bool(interaction, true, interaction, interaction); 11 | } 12 | 13 | public const func GetInteractionIcon() -> wref { 14 | return TweakDBInterface.GetChoiceCaptionIconPartRecord(t"ChoiceCaptionParts.DistractIcon"); 15 | } 16 | } 17 | 18 | public class VehicleFlightMalfunction extends ActionBool { 19 | public final func SetProperties() -> Void { 20 | this.actionName = n"FlightMalfunction"; 21 | this.prop = DeviceActionPropertyFunctions.SetUpProperty_Bool(this.actionName, true, n"UI-Settings-Group-Flight", n"UI-Settings-Group-Flight"); 22 | } 23 | } -------------------------------------------------------------------------------- /experiments/arcadia.reds: -------------------------------------------------------------------------------- 1 | 2 | // destroyedAppearanceName = vehicleRecord.DestroyedAppearance(); 3 | // this.TutorialCarDamageFact(); 4 | // GameObjectEffectHelper.StartEffectEvent(this.GetVehicle(), n"damage_engine_stage3", false); 5 | // this.DestroyVehicle(); 6 | // if IsNameValid(destroyedAppearanceName) { 7 | // this.GetVehicle().PrefetchAppearanceChange(destroyedAppearanceName); 8 | // }; 9 | 10 | // stuck on "Loading" 11 | // @wrapMethod(VehicleObject) 12 | // public const func CompileScannerChunks() -> Bool { 13 | // wrappedMethod(); 14 | // if Equals(this.GetRecord().GetID(), TDBID.Create("Vehicle.v_sport1_docworks_arcadia")) { 15 | // let scannerBlackboard: wref = GameInstance.GetBlackboardSystem(this.GetGame()).Get(GetAllBlackboardDefs().UI_ScannerModules); 16 | 17 | // let vehicleNameChunk = new ScannerVehicleName(); 18 | // vehicleNameChunk.Set("Turbo-R V-TECH \"Arcadia\""); 19 | // scannerBlackboard.SetVariant(GetAllBlackboardDefs().UI_ScannerModules.ScannerVehicleName, ToVariant(vehicleNameChunk)); 20 | 21 | // let infoChunk = new ScannerVehicleInfo(); 22 | // infoChunk.Set("The Pride of DocWorks Automotive. Built by the Aldecaldos after the raid on Mikoshi, the Quadra Turbo-R \"Arcadia\" is a triumph of automotive engineering. Featuring a MagLEV floating rear axle, armored body panels, CrystalDome windows, and a wholly-reworked engine, the Arcadia is the ultimate overland racer: able to tear through the air at 230mph, no matter the terrain."); 23 | // scannerBlackboard.SetVariant(GetAllBlackboardDefs().UI_ScannerModules.ScannerVehicleInfo, ToVariant(infoChunk)); 24 | // } 25 | // return true; 26 | // } 27 | -------------------------------------------------------------------------------- /experiments/flight_control.yaml: -------------------------------------------------------------------------------- 1 | # FlightControl.Vehicle.v_standard2_makigai_maimai_player.mass: 1431.0 2 | # FlightControl.Vehicle.v_sport2_quadra_type66_nomad_player.mass: 2515.2 3 | # FlightControl.Vehicle.v_sport2_quadra_type66_nomad_ncu_player.mass: 2515.2 4 | # FlightControl.Vehicle.v_sport2_quadra_type66_player.mass: 2374.4 5 | # FlightControl.Vehicle.v_sport2_quadra_type66_rogue.mass: 2374.4 6 | # FlightControl.Vehicle.v_sport2_quadra_type66_rowley.mass: 2374.4 7 | # FlightControl.Vehicle.v_sport2_quadra_type66_sampson.mass: 2374.4 8 | # FlightControl.Vehicle.v_sport2_quadra_type66_sport.mass: 2374.4 9 | # FlightControl.Vehicle.v_sport2_quadra_type66_quest.mass: 2374.4 10 | # FlightControl.Vehicle.v_sport2_quadra_type66_poor.mass: 2374.4 11 | # FlightControl.Vehicle.v_sport2_quadra_type66_avenger_player.mass: 2374.4 12 | # FlightControl.Vehicle.v_sportbike2_arch_jackie_player.mass: 379.8 13 | # FlightControl.Vehicle.v_sportbike2_arch_jackie_tuned.mass: 379.8 14 | # FlightControl.Vehicle.v_sportbike2_arch.mass: 379.8 15 | # FlightControl.Vehicle.v_sportbike2_arch_jackie.mass: 379.8 16 | 17 | # HUDPreset.Blackscreen.hudEntries: 18 | # - !append n"flight_hud" 19 | # HUDPreset.T3.hudEntries: 20 | # - !append n"flight_hud" 21 | # HUDPreset.T4.hudEntries: 22 | # - !append n"flight_hud" 23 | # HUDPreset.T5.hudEntries: 24 | # - !append n"flight_hud" 25 | # HUDPreset.crosshairs.hudEntries: 26 | # - !append n"car hud" 27 | # - !append n"flight_hud" -------------------------------------------------------------------------------- /experiments/flight_effects.archive.xl: -------------------------------------------------------------------------------- 1 | localization: 2 | onscreens: 3 | en-us: user\jackhumbert\localization\en-us.json -------------------------------------------------------------------------------- /experiments/no_death_fall.tweak: -------------------------------------------------------------------------------- 1 | flats: 2 | playerStateMachineBaseLocomotion.locomotionAir.deathLanding: 3 | type: Float 4 | value: 100 5 | playerStateMachineBaseLocomotionTakedown.grappleAir.deathLanding: 6 | type: Float 7 | value: 100 8 | playerStateMachineBaseLocomotionTier3.locomotionAirTier3.deathLanding: 9 | type: Float 10 | value: 100 11 | playerStateMachineBaseLocomotionTier4.locomotionAirTier4.deathLanding: 12 | type: Float 13 | value: 100 14 | playerStateMachineBaseLocomotionTier5.locomotionAirTier5.deathLanding: 15 | type: Float 16 | value: 100 17 | playerStateMachineLocomotion.airHover.deathLanding: 18 | type: Float 19 | value: 100 20 | playerStateMachineLocomotion.airThrusters.deathLanding: 21 | type: Float 22 | value: 100 23 | playerStateMachineLocomotion.chargeJump.deathLanding: 24 | type: Float 25 | value: 100 26 | playerStateMachineLocomotion.dodgeAir.deathLanding: 27 | type: Float 28 | value: 100 29 | playerStateMachineLocomotion.doubleJump.deathLanding: 30 | type: Float 31 | value: 100 32 | playerStateMachineLocomotion.fall.deathLanding: 33 | type: Float 34 | value: 100 35 | playerStateMachineLocomotion.hoverJump.deathLanding: 36 | type: Float 37 | value: 100 38 | playerStateMachineLocomotion.jump.deathLanding: 39 | type: Float 40 | value: 100 41 | playerStateMachineLocomotion.ladderCrouch.deathLanding: 42 | type: Float 43 | value: 100 44 | playerStateMachineLocomotion.ladderJump.deathLanding: 45 | type: Float 46 | value: 100 47 | playerStateMachineLocomotion.slideFall.deathLanding: 48 | type: Float 49 | value: 20 50 | -------------------------------------------------------------------------------- /experiments/physicsICollider.reds: -------------------------------------------------------------------------------- 1 | public class physicsICollider extends ISerializable { 2 | public let localToBody: Transform; 3 | public let material: CName; 4 | // public let materialApperanceOverrides: physicsApperanceMaterial; 5 | public let tag: CName; 6 | public let isImported: Bool; 7 | public let isQueryShapeOnly: Bool; 8 | public let volumeModifier: Float; 9 | // public let filterData: physicsFilterData; 10 | } -------------------------------------------------------------------------------- /experiments/physicsISystemObject.reds: -------------------------------------------------------------------------------- 1 | public class physicsISystemObject extends ISerializable { 2 | public let name: CName; 3 | } -------------------------------------------------------------------------------- /experiments/physicsSimulationType.reds: -------------------------------------------------------------------------------- 1 | enum physicsSimulationType { 2 | Static = 0, 3 | Dynamic = 1, 4 | Kinematic = 2, 5 | Invalid = 3 6 | } -------------------------------------------------------------------------------- /experiments/physicsSystemBody.reds: -------------------------------------------------------------------------------- 1 | public class physicsSystemBody extends physicsISystemObject { 2 | public let params: physicsSystemBodyParams; 3 | public let localToModel: Transform; 4 | public let collisionShapes: array; 5 | public let mappedBoneName: CName; 6 | public let mappedBoneToBody: Transform; 7 | public let isQueryBodyOnly: Bool; 8 | } -------------------------------------------------------------------------------- /experiments/physicsSystemBodyParams.reds: -------------------------------------------------------------------------------- 1 | public class physicsSystemBodyParams { 2 | public let simulationType: physicsSimulationType; 3 | public let linearDamping: Float; 4 | public let angularDamping: Float; 5 | public let solverIterationsCountPosition: Uint32; 6 | public let solverIterationsCountVelocity: Uint32; 7 | public let maxDepenetrationVelocity: Float; 8 | public let maxAngularVelocity: Float; 9 | public let maxContactImpulse: Float; 10 | public let mass: Float; 11 | public let inertia: Vector3; 12 | public let comOffset: Transform; 13 | } -------------------------------------------------------------------------------- /experiments/physicsSystemJoint.reds: -------------------------------------------------------------------------------- 1 | public class physicsSystemJoint extends physicsISystemObject { 2 | public let localToWorld: Matrix; 3 | // public let pinA: handle:physicsPhysicalJointPin; 4 | // public let pinB: handle:physicsPhysicalJointPin; 5 | // public let linearLimit: physicsPhysicsJointLinearLimit; 6 | // public let twistLimit: physicsPhysicsJointAngularLimitPair; 7 | // public let swingLimit: physicsPhysicsJointLimitConePair; 8 | // public let driveY: physicsPhysicsJointDrive; 9 | // public let driveX: physicsPhysicsJointDrive; 10 | // public let driveZ: physicsPhysicsJointDrive; 11 | // public let driveTwist: physicsPhysicsJointDrive; 12 | // public let driveSwing: physicsPhysicsJointDrive; 13 | // public let driveSLERP: physicsPhysicsJointDrive; 14 | // public let driveVelocity: physicsPhysicsJointDriveVelocity; 15 | public let drivePosition: Matrix; 16 | public let projectionEnabled: Bool; 17 | public let linearTolerance: Float; 18 | public let angularTolerance: Float; 19 | public let isBreakable: Bool; 20 | public let breakingForce: Float; 21 | public let breakingTorque: Float; 22 | } -------------------------------------------------------------------------------- /experiments/physicsSystemResource.reds: -------------------------------------------------------------------------------- 1 | public class physicsSystemResource extends CResource { 2 | public let bodies: array; 3 | public let joints: array; 4 | } -------------------------------------------------------------------------------- /experiments/vehicleChassisComponent.reds: -------------------------------------------------------------------------------- 1 | // public native class vehicleChassisComponent extends IPlacedComponent { 2 | // public native let collisionResource: ResRef; 3 | // public native let optionalPlayerOnlyCollisionResource: ResRef; 4 | // } -------------------------------------------------------------------------------- /license.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright 2021-2023 Jack Humbert 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/preview.png -------------------------------------------------------------------------------- /requirements.md: -------------------------------------------------------------------------------- 1 | ## Requirements 2 | * RED4ext 1.19.0+ 3 | * TweakXL 1.6.0+ 4 | * ArchiveXL 1.10.0+ 5 | * Redscript 0.5.16+ 6 | -------------------------------------------------------------------------------- /src/archive_xl/let_there_be_flight.archive.xl: -------------------------------------------------------------------------------- 1 | localization: 2 | onscreens: 3 | en-us: user\jackhumbert\localization\let_there_be_flight.en-us.json 4 | es-es: user\jackhumbert\localization\let_there_be_flight.es-es.json -------------------------------------------------------------------------------- /src/fmod_studio/API/fmod.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/API/fmod.dll -------------------------------------------------------------------------------- /src/fmod_studio/API/fmodL.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/API/fmodL.dll -------------------------------------------------------------------------------- /src/fmod_studio/API/fmodstudio.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/API/fmodstudio.dll -------------------------------------------------------------------------------- /src/fmod_studio/API/fmodstudioL.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/API/fmodstudioL.dll -------------------------------------------------------------------------------- /src/fmod_studio/Assets/2077-1.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/2077-1.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/2077-2.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/2077-2.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/2077-3.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/2077-3.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/2077-4.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/2077-4.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/2077-5.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/2077-5.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/2077-6.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/2077-6.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/2077-soft-1.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/2077-soft-1.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/2077-soft-2-5.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/2077-soft-2-5.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/2077-soft-2.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/2077-soft-2.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/2077-soft-3.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/2077-soft-3.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/2077-soft-4.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/2077-soft-4.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/2077-soft-5.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/2077-soft-5.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/2077-soft-6.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/2077-soft-6.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/2077.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/2077.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/328525__humanoide9000__fork-scraping-metal-3.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/328525__humanoide9000__fork-scraping-metal-3.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/383794__deleted_user_7146007__metal-scraping-on-concrete.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/383794__deleted_user_7146007__metal-scraping-on-concrete.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/audiogaming_audiomotors_demo_engine.agp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/audiogaming_audiomotors_demo_engine.agp -------------------------------------------------------------------------------- /src/fmod_studio/Assets/brake-1.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/brake-1.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/microwave-loop-louder.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/microwave-loop-louder.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/microwave-loop.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/microwave-loop.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/speed-event.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/speed-event.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/thruster-scrape.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/thruster-scrape.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/turntable-slow.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/turntable-slow.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/turntable.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/turntable.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/vehicle3_off.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/vehicle3_off.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/vehicle3_startup.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/vehicle3_startup.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/whirling.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/whirling.wav -------------------------------------------------------------------------------- /src/fmod_studio/Assets/white.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Assets/white.wav -------------------------------------------------------------------------------- /src/fmod_studio/Build/Desktop/base_sounds.bank: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Build/Desktop/base_sounds.bank -------------------------------------------------------------------------------- /src/fmod_studio/Build/Desktop/base_sounds.strings.bank: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/fmod_studio/Build/Desktop/base_sounds.strings.bank -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/Asset/{0d578fee-7aad-4a8f-9570-e624d548a13b}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{0897beae-f8cc-4b0d-9752-7d6ed708db6a}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2077-4.wav 6 | 7 | 8 | 44.0999985 9 | 10 | 11 | 2 12 | 13 | 14 | 8 15 | 16 | 17 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{1ee6a587-2c25-4f9d-abaf-514463e0b83e}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | whirling.wav 6 | 7 | 8 | true 9 | 10 | 11 | 44.0999985 12 | 13 | 14 | 2 15 | 16 | 17 | 12.5 18 | 19 | 20 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{21425c9c-8039-4610-9b90-2dad956c61d4}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | brake-1.wav 6 | 7 | 8 | 44.0999985 9 | 10 | 11 | 2 12 | 13 | 14 | 8 15 | 16 | 17 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{2743eee6-b0a5-451b-a4b0-ddb86a092a50}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 328525__humanoide9000__fork-scraping-metal-3.wav 6 | 7 | 8 | 48 9 | 10 | 11 | 2 12 | 13 | 14 | 7.6267083333333332 15 | 16 | 17 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{3db66fc6-0226-4021-8b92-6266c0b731a6}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2077-1.wav 6 | 7 | 8 | 44.0999985 9 | 10 | 11 | 2 12 | 13 | 14 | 8 15 | 16 | 17 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{3f08d605-30fb-455d-9441-5e0884901a72}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2077-6.wav 6 | 7 | 8 | 44.0999985 9 | 10 | 11 | 2 12 | 13 | 14 | 8 15 | 16 | 17 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{4519b459-3373-454c-830c-721cc520e9cb}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 383794__deleted_user_7146007__metal-scraping-on-concrete.wav 6 | 7 | 8 | true 9 | 10 | 11 | 48 12 | 13 | 14 | 2 15 | 16 | 17 | 15.666666666666666 18 | 19 | 20 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{61d246d6-a504-4720-8077-11a2d815aa0c}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2077-soft-4.wav 6 | 7 | 8 | 44.0999985 9 | 10 | 11 | 2 12 | 13 | 14 | 8 15 | 16 | 17 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{696a09a3-ffa1-4533-971a-48d6ab1d3f82}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2077-soft-6.wav 6 | 7 | 8 | 44.0999985 9 | 10 | 11 | 2 12 | 13 | 14 | 8 15 | 16 | 17 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{7a6066e5-73c9-42b4-bdf4-09b2772876c2}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2077-soft-3.wav 6 | 7 | 8 | 44.0999985 9 | 10 | 11 | 2 12 | 13 | 14 | 8 15 | 16 | 17 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{7bbe72a2-6908-405a-ba3e-eb139b4681e8}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | speed-event.wav 6 | 7 | 8 | 44.0999985 9 | 10 | 11 | 2 12 | 13 | 14 | 2 15 | 16 | 17 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{7f40f58d-e7c7-46b8-933b-9497f97f53f6}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | thruster-scrape.wav 6 | 7 | 8 | 48 9 | 10 | 11 | 1 12 | 13 | 14 | 5.3932708333333332 15 | 16 | 17 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{800a9dd3-ea37-4672-9ff7-b9f2cbc0d2e9}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2077.wav 6 | 7 | 8 | true 9 | 10 | 11 | 44.0999985 12 | 13 | 14 | 2 15 | 16 | 17 | 48 18 | 19 | 20 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{9337c468-2733-4a3e-9c2c-408c484c6cd2}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | turntable.wav 6 | 7 | 8 | true 9 | 10 | 11 | 44.0999985 12 | 13 | 14 | 2 15 | 16 | 17 | 5.2038548752834464 18 | 19 | 20 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{9b6ba586-f952-42c6-be3e-46a9eb54083b}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | vehicle3_off.wav 6 | 7 | 8 | 44.0999985 9 | 10 | 11 | 2 12 | 13 | 14 | 2.494761904761905 15 | 16 | 17 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{a196165b-56d3-4769-961a-90b984fa7ce6}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2077-2.wav 6 | 7 | 8 | 44.0999985 9 | 10 | 11 | 2 12 | 13 | 14 | 8 15 | 16 | 17 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{a332a24a-22cc-4cd3-9ca7-28d6587ab566}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2077-3.wav 6 | 7 | 8 | 44.0999985 9 | 10 | 11 | 2 12 | 13 | 14 | 8 15 | 16 | 17 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{a76c5154-d3bd-41d8-94c9-3af1362e4898}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | microwave-loop.wav 6 | 7 | 8 | true 9 | 10 | 11 | 44.0999985 12 | 13 | 14 | 2 15 | 16 | 17 | 4.5250793650793648 18 | 19 | 20 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{a877bd5c-b65e-48ec-aedf-3b89adbdcd2a}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2077-soft-5.wav 6 | 7 | 8 | 44.0999985 9 | 10 | 11 | 2 12 | 13 | 14 | 8 15 | 16 | 17 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{a9aeee42-a12e-4ec0-af7e-1d46886f979a}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | white.wav 6 | 7 | 8 | true 9 | 10 | 11 | 44.0999985 12 | 13 | 14 | 2 15 | 16 | 17 | 30 18 | 19 | 20 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{b95f3cf2-116c-40bc-b12b-2aab82812139}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | turntable-slow.wav 6 | 7 | 8 | true 9 | 10 | 11 | 44.0999985 12 | 13 | 14 | 2 15 | 16 | 17 | 6.3351247165532882 18 | 19 | 20 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{bb91d7b4-fa71-44bc-88bb-9d01bd01f15c}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | vehicle3_startup.wav 6 | 7 | 8 | 44.0999985 9 | 10 | 11 | 2 12 | 13 | 14 | 2.25 15 | 16 | 17 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{e0ff0cf2-ce1f-4b38-8127-3d28d2e95fa0}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2077-soft-2.wav 6 | 7 | 8 | 44.0999985 9 | 10 | 11 | 2 12 | 13 | 14 | 8 15 | 16 | 17 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{e2e7edc4-4efd-45c0-afe1-bc106715e75d}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2077-soft-1.wav 6 | 7 | 8 | 44.0999985 9 | 10 | 11 | 2 12 | 13 | 14 | 8 15 | 16 | 17 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{e3378915-7b23-4539-ad81-d50fba2bf243}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2077-soft-2-5.wav 6 | 7 | 8 | 44.0999985 9 | 10 | 11 | 2 12 | 13 | 14 | 8 15 | 16 | 17 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{e6bbe6b9-c71b-4a09-a316-c844089e61b2}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2077-5.wav 6 | 7 | 8 | 44.0999985 9 | 10 | 11 | 2 12 | 13 | 14 | 8 15 | 16 | 17 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/AudioFile/{eac9e785-ff1b-43d0-a495-b50c94cac782}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | microwave-loop-louder.wav 6 | 7 | 8 | true 9 | 10 | 11 | 44.0999985 12 | 13 | 14 | 2 15 | 16 | 17 | 5.8826077097505669 18 | 19 | 20 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/Bank/{cbee9f7a-37c7-4bcf-bdc7-2a802b3b0e2c}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | base_sounds 6 | 7 | 8 | true 9 | 10 | 11 | {7176a4dc-0d17-4314-9f11-045448f4951b} 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/BankFolder/{7176a4dc-0d17-4314-9f11-045448f4951b}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/DataFile/{76e37d96-2043-4493-b502-f364d1e4b977}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | audiogaming_audiomotors_demo_engine.agp 6 | 7 | 8 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/EffectPreset/{0b3998cc-1518-4300-8814-5ae06215091f}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Effect Chain 4 6 | 7 | 8 | {7fce4d5b-875e-467f-a725-17f92cb538ca} 9 | 10 | 11 | {39469173-f93f-4658-aaab-3fdff72ffd88} 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/EffectPreset/{4324449b-3438-41b6-8145-077fe2111175}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Effect Chain 6 | 7 | 8 | {7fce4d5b-875e-467f-a725-17f92cb538ca} 9 | 10 | 11 | {f01b94e7-44bb-47e3-bebf-04749d0aad41} 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/EffectPreset/{a20974f7-afa8-4979-a735-a14030e174de}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Effect Chain 2 6 | 7 | 8 | {7fce4d5b-875e-467f-a725-17f92cb538ca} 9 | 10 | 11 | {99505439-be96-44bb-b20a-93b377ad2ef0} 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/EffectPreset/{f7c8bde9-5e4d-462d-b16c-78f125c9433d}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Effect Chain 3 6 | 7 | 8 | {7fce4d5b-875e-467f-a725-17f92cb538ca} 9 | 10 | 11 | {d8961857-fe2a-45f9-ac6e-a91b18170395} 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/EffectPresetFolder/{7fce4d5b-875e-467f-a725-17f92cb538ca}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/EncodingSetting/{8701b900-fd78-41e9-8731-150c88f70ab2}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 3 6 | 7 | 8 | 100 9 | 10 | 11 | {0ee11a83-8046-4ceb-b9b2-e3e09dfb4b4e} 12 | 13 | 14 | {0ee11a83-8046-4ceb-b9b2-e3e09dfb4b4e} 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/EventFolder/{a5886b98-666c-4b61-b74a-2870bfedb918}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Master 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/Group/{5c36583b-ae34-484c-b7d3-e74a1122ea1d}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Engine 6 | 7 | 8 | {6b11fb64-0cfa-4d21-8a01-e6b858f07d15} 9 | 10 | 11 | {977894fc-7fc4-421f-a823-c6e363247934} 12 | 13 | 14 | {b12ab7b9-9af1-44c4-b376-501345234d0a} 15 | 16 | 17 | 18 | 19 | {3939161d-8643-425f-8600-ebe7a575036e} 20 | {c64a9106-7119-4c4f-8cb5-8c83bd50be67} 21 | 22 | 23 | 24 | 25 | 26 | -12 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/Group/{bb9c119f-4adb-4d99-9672-3d0697b6c9b1}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Warning 6 | 7 | 8 | {924701d4-ef40-4d4d-8ce9-e4cea65487df} 9 | 10 | 11 | {d49e3328-3a27-48a7-89c5-8edd0c3ac56a} 12 | 13 | 14 | {b12ab7b9-9af1-44c4-b376-501345234d0a} 15 | 16 | 17 | 18 | 19 | {c19ce30b-27a8-4f05-9156-b10b4016fb7d} 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/Group/{c5ba25e4-5c31-452b-9ae9-1852aebcc3c2}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Wind 6 | 7 | 8 | {7e5a0fe0-2d4e-406f-a8c4-86046f619595} 9 | 10 | 11 | {124316cf-1f5c-4217-a192-ba46f7fc5e04} 12 | 13 | 14 | {b12ab7b9-9af1-44c4-b376-501345234d0a} 15 | 16 | 17 | 18 | 19 | {dfa35826-14b0-4966-9bae-2503e2944137} 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/Master.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Master Bus 6 | 7 | 8 | {923eac64-e068-4fa8-971d-a2a88e14fe6c} 9 | 10 | 11 | {79175f0b-07af-4067-bcb7-d3da111939f5} 12 | 13 | 14 | {ddb99f2c-e02f-4b5e-9413-cc0fbab3f21f} 15 | 16 | 17 | 18 | 19 | {cd614aff-b674-4701-a281-a4bab63059a5} 20 | {0495ec40-9456-42ca-aece-40212edd1771} 21 | 22 | 23 | 24 | 25 | 2 26 | 27 | 28 | 29 | 30 | -12 31 | 32 | 33 | 7.80000019 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/Mixer.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {b12ab7b9-9af1-44c4-b376-501345234d0a} 6 | 7 | 8 | {ac2e2209-4e46-455c-8b47-c54737760461} 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/ParameterPreset/{2c98701e-c0e4-4a86-a0a3-8907b0fbe647}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Event Cone Angle 6 | 7 | 8 | {37bcb955-bb46-4db0-96d9-38f1f6d86753} 9 | 10 | 11 | {4e083a75-e12f-4844-9ac3-d51bbbde778e} 12 | 13 | 14 | 15 | 16 | 6 17 | 18 | 19 | 180 20 | 21 | 22 | 0 23 | 24 | 25 | false 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/ParameterPreset/{3652cd09-28a6-4bdd-8507-97c92f5e2d96}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | pitchDiff 6 | 7 | 8 | {37bcb955-bb46-4db0-96d9-38f1f6d86753} 9 | 10 | 11 | {ff9c9810-61ea-4951-8bb8-755a25063ae8} 12 | 13 | 14 | 15 | 16 | -180 17 | 18 | 19 | 180 20 | 21 | 22 | 0 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/ParameterPreset/{56041d85-f2d7-4b92-8e05-aca5923a6798}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | brake 6 | 7 | 8 | {37bcb955-bb46-4db0-96d9-38f1f6d86753} 9 | 10 | 11 | {de3ffe22-a10f-4662-8664-1397f3edf372} 12 | 13 | 14 | 15 | 16 | 0 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/ParameterPreset/{7168003f-8d52-48f7-a454-8ac60cd7f430}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | inside 6 | 7 | 8 | {37bcb955-bb46-4db0-96d9-38f1f6d86753} 9 | 10 | 11 | {fda8f1bd-6f16-4a05-bca4-7ad319895f32} 12 | 13 | 14 | 15 | 16 | 0 17 | 18 | 19 | 0.48999997973442078 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/ParameterPreset/{750d42ef-4000-488c-aa92-e5177a8b5b73}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | pitch 6 | 7 | 8 | {37bcb955-bb46-4db0-96d9-38f1f6d86753} 9 | 10 | 11 | {57b5e3ac-0ff4-406e-8cb5-4f69f6048af9} 12 | 13 | 14 | 15 | 16 | -1 17 | 18 | 19 | 0 20 | 21 | 22 | 3.7999999523162842 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/ParameterPreset/{7862f857-7d19-4c5e-b84f-1ca47ff4b701}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | sway 6 | 7 | 8 | {37bcb955-bb46-4db0-96d9-38f1f6d86753} 9 | 10 | 11 | {7dd3b729-19fe-4dd1-b85d-5de582a93fe9} 12 | 13 | 14 | 15 | 16 | -1 17 | 18 | 19 | 0 20 | 21 | 22 | 3.7999999523162842 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/ParameterPreset/{7e7ec633-4bbb-4708-acf2-429f2874845c}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | yaw 6 | 7 | 8 | {37bcb955-bb46-4db0-96d9-38f1f6d86753} 9 | 10 | 11 | {56c25c27-a165-4888-8239-9421b0a07e00} 12 | 13 | 14 | 15 | 16 | -1 17 | 18 | 19 | 0 20 | 21 | 22 | 1.7400000095367432 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/ParameterPreset/{85ed5459-4a8c-4997-80fc-90b6dae08e20}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | lift 6 | 7 | 8 | {37bcb955-bb46-4db0-96d9-38f1f6d86753} 9 | 10 | 11 | {2dedab9a-dede-4dbf-b319-82caa18357d3} 12 | 13 | 14 | 15 | 16 | -1 17 | 18 | 19 | 0 20 | 21 | 22 | 4 23 | 24 | 25 | 4 26 | 27 | 28 | true 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/ParameterPreset/{93311843-1289-4ac4-a45c-6e3ddfff1b95}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | speed 6 | 7 | 8 | {37bcb955-bb46-4db0-96d9-38f1f6d86753} 9 | 10 | 11 | {c5ab9198-78fe-4473-ab02-0304f0a3bffb} 12 | 13 | 14 | 15 | 16 | 300 17 | 18 | 19 | 0 20 | 21 | 22 | 1200 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/ParameterPreset/{94dcf21e-f792-4c4d-bb52-5d2e732e7dbe}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | surgeAcc 6 | 7 | 8 | {37bcb955-bb46-4db0-96d9-38f1f6d86753} 9 | 10 | 11 | {1828a323-9886-4d53-aa63-1ead81950158} 12 | 13 | 14 | 15 | 16 | 0 17 | 18 | 19 | 0.29999998211860657 20 | 21 | 22 | {ce325f39-294d-47d6-b8ee-7a3bffead876} 23 | 24 | 25 | 26 | 27 | cursorPosition 28 | 29 | 30 | {cf7b24d8-a1cf-405a-8545-914c7487e2c3} 31 | 32 | 33 | 34 | 35 | {904b5fac-d401-49ff-95f6-5412fcfc5ada} 36 | 37 | 38 | {82ebf49d-0373-426f-8d0c-c0e874d3ded3} 39 | {eacccb96-3360-47e7-9eb9-7c0db5cfed75} 40 | 41 | 42 | 43 | 44 | 0 45 | 46 | 47 | 0 48 | 49 | 50 | 51 | 52 | 1 53 | 54 | 55 | 1 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/ParameterPreset/{a6cae2e6-b9ca-4712-ac24-40f766361e6d}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | surge 6 | 7 | 8 | {37bcb955-bb46-4db0-96d9-38f1f6d86753} 9 | 10 | 11 | {904b5fac-d401-49ff-95f6-5412fcfc5ada} 12 | 13 | 14 | 15 | 16 | -1 17 | 18 | 19 | 0 20 | 21 | 22 | 3.2000000476837158 23 | 24 | 25 | 4 26 | 27 | 28 | true 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/ParameterPreset/{b0214a4f-eb5f-4495-8836-a1f98471f439}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | yawDiff 6 | 7 | 8 | {37bcb955-bb46-4db0-96d9-38f1f6d86753} 9 | 10 | 11 | {6c3ed88b-b289-4448-991c-afbe0ac4751e} 12 | 13 | 14 | 15 | 16 | -180 17 | 18 | 19 | 180 20 | 21 | 22 | 0 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/ParameterPreset/{b94b843a-5720-4f33-87c9-1453583572ae}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | water 6 | 7 | 8 | {37bcb955-bb46-4db0-96d9-38f1f6d86753} 9 | 10 | 11 | {aacc860e-2131-46c5-8d98-b3cc33497bd3} 12 | 13 | 14 | 15 | 16 | true 17 | 18 | 19 | 0 20 | 21 | 22 | 3.4000000953674316 23 | 24 | 25 | false 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/ParameterPreset/{d37ac5b7-445a-48e0-9cd9-4984dbe2c11c}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | scrape 6 | 7 | 8 | {37bcb955-bb46-4db0-96d9-38f1f6d86753} 9 | 10 | 11 | {82b2804a-4319-432d-bef6-c7e7bd10a334} 12 | 13 | 14 | 15 | 16 | 0 17 | 18 | 19 | 4.5999999046325684 20 | 21 | 22 | true 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/ParameterPreset/{dd266f8f-71d9-4ae8-a759-70b6b574ae24}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | damage 6 | 7 | 8 | {37bcb955-bb46-4db0-96d9-38f1f6d86753} 9 | 10 | 11 | {97683211-f26b-4998-8c67-955c668be6e3} 12 | 13 | 14 | 15 | 16 | 0 17 | 18 | 19 | 1.6000000238418579 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/ParameterPreset/{f3d2881b-7e3a-4eed-a540-7992d7a466eb}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | roll 6 | 7 | 8 | {37bcb955-bb46-4db0-96d9-38f1f6d86753} 9 | 10 | 11 | {e145a22a-0731-460a-ac97-33e31347e883} 12 | 13 | 14 | 15 | 16 | -1 17 | 18 | 19 | 0 20 | 21 | 22 | 3.7999999523162842 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/ParameterPresetFolder/{37bcb955-bb46-4db0-96d9-38f1f6d86753}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/Platform/{0ee11a83-8046-4ceb-b9b2-e3e09dfb4b4e}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 0 6 | 7 | 8 | Desktop 9 | 10 | 11 | Desktop 12 | 13 | 14 | 5 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/ProfilerFolder/{1b096068-1e59-4259-a752-78a09d1dd925}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/Return/{bbbd536d-6663-488d-b5b9-f8b30a81506a}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2 6 | 7 | 8 | Reverb 9 | 10 | 11 | {86653537-a1ec-4c4a-952e-62bd03a92adb} 12 | 13 | 14 | {e20c33bd-f6eb-40ac-8e02-491c9420edda} 15 | 16 | 17 | {b12ab7b9-9af1-44c4-b376-501345234d0a} 18 | 19 | 20 | 21 | 22 | {2c9e737c-72e5-42e3-a77e-73abdf08b6ba} 23 | {b5857bcf-b0ed-4650-83d2-1715f170aa62} 24 | 25 | 26 | 27 | 28 | 29 | 0 30 | 31 | 32 | -80 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/SandboxFolder/{fe40636c-e07a-4315-a258-b6403f2d5b7e}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/SnapshotGroup/{ac2e2209-4e46-455c-8b47-c54737760461}.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {ddb99f2c-e02f-4b5e-9413-cc0fbab3f21f} 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/Tags.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Master 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/fmod_studio/Metadata/Workspace.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {a5886b98-666c-4b61-b74a-2870bfedb918} 6 | 7 | 8 | {83ca7bd9-3c64-41b0-bc91-a9fd9fb10cd1} 9 | 10 | 11 | {7fce4d5b-875e-467f-a725-17f92cb538ca} 12 | 13 | 14 | {37bcb955-bb46-4db0-96d9-38f1f6d86753} 15 | 16 | 17 | {7176a4dc-0d17-4314-9f11-045448f4951b} 18 | 19 | 20 | {fe40636c-e07a-4315-a258-b6403f2d5b7e} 21 | 22 | 23 | {0d578fee-7aad-4a8f-9570-e624d548a13b} 24 | 25 | 26 | {ddb99f2c-e02f-4b5e-9413-cc0fbab3f21f} 27 | 28 | 29 | {1b096068-1e59-4259-a752-78a09d1dd925} 30 | 31 | 32 | {0ee11a83-8046-4ceb-b9b2-e3e09dfb4b4e} 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /src/fmod_studio/flight_control.fspro: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/red4ext/.clang-format: -------------------------------------------------------------------------------- 1 | --- 2 | # We'll use defaults from the LLVM style, but with 4 columns indentation. 3 | BasedOnStyle: LLVM 4 | IndentWidth: 2 5 | ColumnLimit: 120 -------------------------------------------------------------------------------- /src/red4ext/.vscode/c_cpp_properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "configurations": [ 3 | { 4 | "name": "Win32", 5 | "includePath": [ 6 | "${workspaceFolder}/**", 7 | "${workspaceFolder}/../../deps/**" 8 | ], 9 | "defines": [ 10 | "_DEBUG", 11 | "UNICODE", 12 | "_UNICODE" 13 | ], 14 | "windowsSdkVersion": "10.0.22000.0", 15 | "compilerPath": "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.34.31933/bin/Hostx64/x64/cl.exe", 16 | "cStandard": "c17", 17 | "cppStandard": "c++20", 18 | "intelliSenseMode": "windows-msvc-x64", 19 | "configurationProvider": "ms-vscode.cmake-tools" 20 | } 21 | ], 22 | "version": 4 23 | } -------------------------------------------------------------------------------- /src/red4ext/Audio/FlightAudio.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include "Engine/RTTIClass.hpp" 6 | #include "FmodHelper.hpp" 7 | #include 8 | 9 | class FlightAudio : public Engine::RTTIClass { 10 | public: 11 | static bool Load(RED4ext::CGameApplication *aApp); 12 | static bool Unload(RED4ext::CGameApplication *aApp); 13 | 14 | void UpdateVolume(); 15 | void Pause(); 16 | void Resume(); 17 | 18 | static FlightAudio* Get(); 19 | 20 | void UpdateListenerMatrix(RED4ext::Matrix matrix); 21 | void UpdateEventMatrix(RED4ext::CString emitterName, RED4ext::Matrix matrix); 22 | void UpdateParameter(RED4ext::CString name, float value); 23 | void Play(RED4ext::CString eventName); 24 | void Start(RED4ext::CString emitterName, RED4ext::CString eventName); 25 | void StartWithPitch(RED4ext::CString emitterName, RED4ext::CString eventName, float pitch); 26 | void Stop(RED4ext::CString emitterName); 27 | void UpdateEvent(RED4ext::CString emitterName, RED4ext::Matrix matrix, float eventVolume, 28 | RED4ext::Handle update); 29 | 30 | private: 31 | friend Descriptor; 32 | 33 | static void OnDescribe(Descriptor *aType, RED4ext::CRTTISystem *) { 34 | aType->AddFunction<&FlightAudio::UpdateListenerMatrix>("UpdateListenerMatrix"); 35 | aType->AddFunction<&FlightAudio::UpdateEventMatrix>("UpdateEventMatrix"); 36 | aType->AddFunction<&FlightAudio::UpdateParameter>("UpdateParameter"); 37 | aType->AddFunction<&FlightAudio::Play>("Play"); 38 | aType->AddFunction<&FlightAudio::Start>("Start"); 39 | aType->AddFunction<&FlightAudio::StartWithPitch>("StartWithPitch"); 40 | aType->AddFunction<&FlightAudio::Stop>("Stop"); 41 | aType->AddFunction<&FlightAudio::UpdateEvent>("UpdateEvent"); 42 | } 43 | }; -------------------------------------------------------------------------------- /src/red4ext/Audio/FmodHelper.cpp: -------------------------------------------------------------------------------- 1 | #include "FmodHelper.hpp" 2 | -------------------------------------------------------------------------------- /src/red4ext/Audio/FmodHelper.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | -------------------------------------------------------------------------------- /src/red4ext/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | include(Red4ext) 2 | 3 | target_link_libraries(let_there_be_flight.dll 4 | PUBLIC 5 | Detours 6 | FMOD 7 | RED4ext.SDK 8 | spdlog 9 | Codeware 10 | PhysX3 11 | ) -------------------------------------------------------------------------------- /src/red4ext/Camera/FlightCamera.hpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include "Utils/FlightModule.hpp" -------------------------------------------------------------------------------- /src/red4ext/Engine/RTTIEnum.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "Common.hpp" 4 | #include "RTTIRegistrar.hpp" 5 | 6 | #include 7 | 8 | namespace Engine 9 | { 10 | template 11 | requires std::is_enum_v 12 | class RTTIEnumSeq : RED4ext::CEnum, detail::TypeDescriptor 13 | { 14 | public: 15 | RTTIEnumSeq() : CEnum(0ull, sizeof(T), {}) 16 | { 17 | } 18 | 19 | void SetName(const char* aName) 20 | { 21 | RED4ext::CEnum::name = RED4ext::CNamePool::Add(aName); 22 | } 23 | 24 | void SetFlags(const RED4ext::CEnum::Flags& aFlags) 25 | { 26 | RED4ext::CEnum::flags = aFlags; 27 | } 28 | 29 | inline static void Register() 30 | { 31 | RED4ext::RTTIRegistrator::Add(&OnRegisterRTTI, &OnPostRegisterRTTI); 32 | } 33 | 34 | private: 35 | static void OnRegisterRTTI() 36 | { 37 | auto* type = new RTTIEnumSeq(); 38 | 39 | // T::OnRegister(); 40 | 41 | if (type->name.IsNone()) 42 | type->SetName(detail::ExtractShortTypeName()); 43 | 44 | auto* rtti = RED4ext::CRTTISystem::Get(); 45 | rtti->RegisterType(type); 46 | 47 | detail::TypeDescriptor::s_type = type; 48 | } 49 | 50 | static void OnPostRegisterRTTI() 51 | { 52 | } 53 | 54 | inline static RTTIRegistrar s_registrar{ &OnRegisterRTTI, &OnPostRegisterRTTI }; // NOLINT(cert-err58-cpp) 55 | }; 56 | } 57 | -------------------------------------------------------------------------------- /src/red4ext/Engine/RTTIRegistrar.cpp: -------------------------------------------------------------------------------- 1 | #include "RTTIRegistrar.hpp" 2 | 3 | namespace 4 | { 5 | std::vector s_pending; 6 | } 7 | 8 | Engine::RTTIRegistrar::RTTIRegistrar(CallbackFunc aRegFunc, CallbackFunc aBuildFunc) 9 | : m_registered(false) 10 | , m_regFunc(aRegFunc) 11 | , m_buildFunc(aBuildFunc) 12 | { 13 | s_pending.push_back(this); 14 | } 15 | 16 | void Engine::RTTIRegistrar::Register() 17 | { 18 | if (!m_registered) 19 | { 20 | RED4ext::RTTIRegistrator::Add(m_regFunc, m_buildFunc); 21 | m_registered = true; 22 | } 23 | } 24 | 25 | void Engine::RTTIRegistrar::RegisterPending() 26 | { 27 | for (const auto& pending : s_pending) 28 | pending->Register(); 29 | 30 | s_pending.clear(); 31 | } 32 | -------------------------------------------------------------------------------- /src/red4ext/Engine/RTTIRegistrar.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "Common.hpp" 4 | 5 | #include 6 | 7 | namespace Engine 8 | { 9 | /** 10 | * The registrar queues callbacks to register all at once on demand. 11 | * This serves two purposes: 12 | * - Auto discovery of used RTTI descriptors. 13 | * - Postpone until RTTI system is ready. 14 | */ 15 | class RTTIRegistrar 16 | { 17 | public: 18 | using CallbackFunc = RED4ext::RTTIRegistrator::CallbackFunc; 19 | 20 | RTTIRegistrar(CallbackFunc aRegFunc, CallbackFunc aBuildFunc); 21 | 22 | void Register(); 23 | static void RegisterPending(); 24 | 25 | private: 26 | bool m_registered; 27 | CallbackFunc m_regFunc; 28 | CallbackFunc m_buildFunc; 29 | }; 30 | } 31 | -------------------------------------------------------------------------------- /src/red4ext/EntityAddComponent.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | RED4ext::ent::PhysicalMeshComponent *CreateThrusterEngine(RED4ext::CName mesh, RED4ext::CName name, RED4ext::CName slot, 11 | RED4ext::CName bindName = "vehicle_slots"); 12 | 13 | void AddToController(RED4ext::ent::VisualControllerComponent *vcc, RED4ext::ent::MeshComponent *mc); -------------------------------------------------------------------------------- /src/red4ext/Extensions/EffectSpawnerComponent.cpp: -------------------------------------------------------------------------------- 1 | // #include "Utils/FlightModule.hpp" 2 | // #include "LoadResRef.hpp" 3 | // #include 4 | // #include 5 | // #include 6 | // #include 7 | 8 | // struct EffectSpawnerComponent : RED4ext::ent::EffectSpawnerComponent { 9 | // void AddEffect(RED4ext::CName typeName, RED4ext::CName effectName) { 10 | // RED4ext::CRTTISystem::Get() 11 | // } 12 | // }; 13 | 14 | // RTTI_EXPAND_CLASS(RED4ext::ent::EffectSpawnerComponent, { 15 | // RTTI_METHOD_FQN(EffectSpawnerComponent::AddEffect); 16 | // }); -------------------------------------------------------------------------------- /src/red4ext/Extensions/EntColliderComponent.cpp: -------------------------------------------------------------------------------- 1 | // #include "Red/TypeInfo/Macros/Definition.hpp" 2 | // #include 3 | // #include 4 | // #include 5 | // #include 6 | 7 | // struct EntColliderComponent : RED4ext::ent::ColliderComponent { 8 | // }; 9 | 10 | // RTTI_EXPAND_CLASS(RED4ext::ent::ColliderComponent, { 11 | // RTTI_ABSTRACT() 12 | // RTTI_PROPERTY_FQN(EntColliderComponent::mass); 13 | // RTTI_PROPERTY_FQN(EntColliderComponent::massOverride); 14 | // RTTI_PROPERTY_FQN(EntColliderComponent::inertia); 15 | // RTTI_PROPERTY_FQN(EntColliderComponent::comOffset); 16 | // }); -------------------------------------------------------------------------------- /src/red4ext/Extensions/FxResource.cpp: -------------------------------------------------------------------------------- 1 | #include "Utils/FlightModule.hpp" 2 | #include 3 | #include 4 | #include 5 | #include "LoadResRef.hpp" 6 | 7 | void CastResRefToFxResource(RED4ext::IScriptable *aContext, RED4ext::CStackFrame *aFrame, 8 | RED4ext::game::FxResource *aOut, int64_t a4) { 9 | RED4ext::red::ResourceReferenceScriptToken value; 10 | RED4ext::GetParameter(aFrame, &value); 11 | aFrame->code++; // skip ParamEnd 12 | 13 | //auto resHandle = new RED4ext::ResourceHandle(); 14 | //if (value.resource.path.hash != 0) { 15 | //RED4ext::CName fc = value.resource.path.hash; 16 | //value.resource.Resolve(); 17 | //LoadResRef((uint64_t *)&fc, resHandle, true); 18 | //} 19 | 20 | if (aOut) { 21 | aOut->effect.path = value.resource.path; 22 | //aOut->effect.Resolve(); 23 | } 24 | } 25 | 26 | struct FxResourceModule : FlightModule { 27 | void PostRegisterTypes() { 28 | auto rtti = RED4ext::CRTTISystem::Get(); 29 | auto f = RED4ext::CGlobalFunction::Create("Cast;ResRef;FxResource", "Cast;ResRef;FxResource", &CastResRefToFxResource); 30 | rtti->RegisterFunction(f); 31 | } 32 | }; 33 | 34 | REGISTER_FLIGHT_MODULE(FxResourceModule); -------------------------------------------------------------------------------- /src/red4ext/Extensions/InkMaskWidget.cpp: -------------------------------------------------------------------------------- 1 | #include "Utils/FlightModule.hpp" 2 | #include "LoadResRef.hpp" 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | struct InkMaskWidget : RED4ext::ink::MaskWidget { 11 | bool SetAtlasResource(RED4ext::ResRef value) { 12 | auto valid = false; 13 | RED4ext::ExecuteFunction("redResourceReferenceScriptToken", "IsValid", &valid, &value); 14 | if (valid) { 15 | this->textureAtlas.path = value.resource.path; 16 | } 17 | return valid; 18 | } 19 | }; 20 | 21 | RTTI_EXPAND_CLASS(RED4ext::ink::MaskWidget, { 22 | RTTI_METHOD_FQN(InkMaskWidget::SetAtlasResource); 23 | }); -------------------------------------------------------------------------------- /src/red4ext/Extensions/InkShapeWidget.cpp: -------------------------------------------------------------------------------- 1 | #include "Utils/FlightModule.hpp" 2 | #include "LoadResRef.hpp" 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | struct InkShapeWidget : RED4ext::ink::ShapeWidget { 10 | void SetShapeResource(RED4ext::ResRef& value) { 11 | this->shapeResource.path = value.resource.path; 12 | } 13 | }; 14 | 15 | RTTI_EXPAND_CLASS(RED4ext::ink::ShapeWidget, { 16 | RTTI_METHOD_FQN(InkShapeWidget::SetShapeResource); 17 | }); -------------------------------------------------------------------------------- /src/red4ext/Extensions/InkWidget.cpp: -------------------------------------------------------------------------------- 1 | #include "Utils/FlightModule.hpp" 2 | #include "LoadResRef.hpp" 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | struct InkWidget : RED4ext::ink::Widget { 12 | void CreateEffect(RED4ext::CName typeName, RED4ext::CName effectName) { 13 | // could be script class instead 14 | auto effect = reinterpret_cast(RED4ext::CRTTISystem::Get()->GetClass(typeName)->CreateInstance()); 15 | effect->effectName = effectName; 16 | this->effects.EmplaceBack(RED4ext::Handle(effect)); 17 | } 18 | 19 | bool SetBlurDimension(RED4ext::CName effectName, RED4ext::ink::EBlurDimension blurDimension) { 20 | bool found = false; 21 | for (auto& effect : this->effects) { 22 | if (effect->GetEffectType() == RED4ext::ink::EffectType::BoxBlur && effect->effectName == effectName) { 23 | auto blurEffect = reinterpret_cast(&effect); 24 | blurEffect->blurDimension = blurDimension; 25 | found = true; 26 | } 27 | } 28 | return found; 29 | } 30 | }; 31 | 32 | RTTI_EXPAND_CLASS(RED4ext::ink::Widget, { 33 | RTTI_METHOD_FQN(InkWidget::CreateEffect); 34 | RTTI_METHOD_FQN(InkWidget::SetBlurDimension); 35 | }); -------------------------------------------------------------------------------- /src/red4ext/Extensions/MaterialFx.cpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "MaterialFx.hpp" -------------------------------------------------------------------------------- /src/red4ext/Extensions/MaterialFx.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "stdafx.hpp" 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | using namespace RED4ext::vehicle; 11 | 12 | //struct MaterialResource { 13 | // Red::ResRef skidMarks; 14 | // Red::ResRef tireTracks; 15 | // bool loaded; 16 | //}; 17 | // 18 | //struct MaterialCondition { 19 | // MaterialResource particle; 20 | // MaterialResource decal; 21 | //}; 22 | // 23 | //struct MaterialFx { 24 | // MaterialCondition normal; 25 | // MaterialCondition wet; 26 | // MaterialCondition rain; 27 | //}; 28 | 29 | RTTI_DEFINE_CLASS(MaterialResource, { 30 | RTTI_PROPERTY(skidMarks); 31 | RTTI_PROPERTY(tireTracks); 32 | RTTI_PROPERTY(loaded); 33 | type->flags.hasNoDefaultObjectSerialization = true; 34 | }); 35 | 36 | RTTI_DEFINE_CLASS(MaterialCondition, { 37 | RTTI_PROPERTY(particle); 38 | RTTI_PROPERTY(decal); 39 | type->flags.hasNoDefaultObjectSerialization = true; 40 | }); 41 | 42 | RTTI_DEFINE_CLASS(MaterialFx, { 43 | RTTI_PROPERTY(normal); 44 | RTTI_PROPERTY(wet); 45 | RTTI_PROPERTY(rain); 46 | type->flags.hasNoDefaultObjectSerialization = true; 47 | }); -------------------------------------------------------------------------------- /src/red4ext/Extensions/MeshComponent.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "Engine/RTTIExpansion.hpp" 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | //#include "FlightConfiguration.hpp" 10 | 11 | class MeshComponent : public Engine::RTTIExpansion { 12 | public: 13 | void SetMesh(RED4ext::ResRef mesh); 14 | 15 | private: 16 | friend Descriptor; 17 | 18 | inline static void OnExpand(Descriptor *aType, RED4ext::CRTTISystem *) { 19 | aType->AddFunction<&MeshComponent::SetMesh>("SetMesh"); 20 | } 21 | }; 22 | 23 | 24 | class IPlacedComponent : public Engine::RTTIExpansion { 25 | public: 26 | void SetParentTransform(RED4ext::CName bindName, RED4ext::CName slotName); 27 | 28 | private: 29 | friend Descriptor; 30 | 31 | inline static void OnExpand(Descriptor *aType, RED4ext::CRTTISystem *) { 32 | aType->AddFunction<&IPlacedComponent::SetParentTransform>("SetParentTransform"); 33 | } 34 | }; 35 | 36 | /// Entity 37 | class Entity : public Engine::RTTIExpansion { 38 | public: 39 | /// AddComponent 40 | void AddComponent(RED4ext::Handle component); 41 | /// AddSlot 42 | void AddSlot(RED4ext::CName boneName, RED4ext::CName slotName, RED4ext::Vector3 relativePosition, 43 | RED4ext::Quaternion relativeRotation); 44 | private: 45 | friend Descriptor; 46 | 47 | inline static void OnExpand(Descriptor *aType, RED4ext::CRTTISystem *) { 48 | aType->AddFunction<&Entity::AddComponent>("AddComponent"); 49 | aType->AddFunction<&Entity::AddSlot>("AddSlot"); 50 | } 51 | }; 52 | -------------------------------------------------------------------------------- /src/red4ext/Extensions/VehicleChassisComponent.cpp: -------------------------------------------------------------------------------- 1 | // #include "Red/TypeInfo/Macros/Definition.hpp" 2 | // #include 3 | // #include 4 | // #include 5 | // #include 6 | // #include 7 | // #include 8 | // #include 9 | 10 | // struct VehicleChassisComponent : RED4ext::vehicle::ChassisComponent { 11 | // RED4ext::Transform GetComOffset() { 12 | // auto hpsb = this->collisionResource.Fetch().GetPtr()->bodies[0]; 13 | // return hpsb->params.comOffset; 14 | // } 15 | // RTTI_IMPL_TYPEINFO(VehicleChassisComponent); 16 | // RTTI_FWD_CONSTRUCTOR(); 17 | // // RTTI_IMPL_ALLOCATOR(); 18 | // }; 19 | 20 | // RTTI_DEFINE_CLASS(VehicleChassisComponent, "vehicleChassisComponent", { 21 | // // RTTI_ABSTRACT(); 22 | // RTTI_PARENT(RED4ext::ent::IPlacedComponent); 23 | // RTTI_METHOD(GetComOffset); 24 | // }); -------------------------------------------------------------------------------- /src/red4ext/Extensions/VehicleDriveToPointEvent.cpp: -------------------------------------------------------------------------------- 1 | // #include "Red/TypeInfo/Macros/Definition.hpp" 2 | // #include 3 | // #include 4 | // #include 5 | // #include 6 | 7 | // struct VehicleDriveToPointEvent : RED4ext::vehicle::DriveToPointEvent { 8 | // }; 9 | 10 | // RTTI_DEFINE_CLASS(VehicleDriveToPointEvent, "vehicleDriveToPointEvent", { 11 | // RTTI_PARENT(RED4ext::red::Event); 12 | // RTTI_PROPERTY(VehicleDriveToPointEvent::targetPos); 13 | // RTTI_PROPERTY(VehicleDriveToPointEvent::useTraffic); 14 | // RTTI_PROPERTY(VehicleDriveToPointEvent::speedInTraffic); 15 | // }); -------------------------------------------------------------------------------- /src/red4ext/Extensions/VehicleTPPCameraComponent.cpp: -------------------------------------------------------------------------------- 1 | // #include "Red/TypeInfo/Macros/Definition.hpp" 2 | // #include 3 | // #include 4 | // #include 5 | // #include 6 | 7 | // struct VehicleTPPCameraComponent : RED4ext::vehicle::TPPCameraComponent { 8 | // RTTI_IMPL_TYPEINFO(VehicleTPPCameraComponent); 9 | // RTTI_FWD_CONSTRUCTOR(); 10 | // // RTTI_IMPL_ALLOCATOR(); 11 | // }; 12 | 13 | // RTTI_DEFINE_CLASS(RED4ext::vehicle::TPPCameraComponent, "vehicleTPPCameraComponent", { 14 | // // RTTI_ABSTRACT(); 15 | // RTTI_PARENT(RED4ext::game::CameraComponent); 16 | // RTTI_PROPERTY(drivingDirectionCompensationSpeedCoef); 17 | // RTTI_PROPERTY(drivingDirectionCompensationAngleSmooth); 18 | // RTTI_PROPERTY(lockedCamera); 19 | // RTTI_PROPERTY(initialTransform); 20 | // RTTI_PROPERTY(pitch); 21 | // RTTI_PROPERTY(yaw); 22 | // RTTI_PROPERTY(data); 23 | // }); -------------------------------------------------------------------------------- /src/red4ext/Extensions/WheeledObject.cpp: -------------------------------------------------------------------------------- 1 | #include "Engine/RTTIExpansion.hpp" 2 | #include 3 | #include 4 | #include 5 | #include "Addresses.hpp" 6 | 7 | class WheeledObject : public Engine::RTTIExpansion { 8 | public: 9 | inline void ResetWheels() { 10 | auto physics = (RED4ext::vehicle::WheeledPhysics*)this->physics; 11 | // RED4ext::RelocFunc call(vehicleUnkD10_Reset_Addr); 12 | // call(physics->unkD10, physics->unkD10->numWheels); 13 | } 14 | inline float GetDampedSpringForce(int32_t wheelIndex) { 15 | return ((RED4ext::vehicle::WheeledPhysics*)this->physics)->insert2[wheelIndex].dampedSpringForce; 16 | } 17 | 18 | private: 19 | friend Descriptor; 20 | 21 | inline static void OnExpand(Descriptor *aType, RED4ext::CRTTISystem *) { 22 | aType->AddFunction<&WheeledObject::ResetWheels>("ResetWheels"); 23 | aType->AddFunction<&WheeledObject::GetDampedSpringForce>("GetDampedSpringForce"); 24 | } 25 | }; -------------------------------------------------------------------------------- /src/red4ext/Flight/Log.cpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | 14 | #include "Log.hpp" 15 | #include "stdafx.hpp" 16 | 17 | void FlightLog::Info(const RED4ext::CString value) { 18 | spdlog::info(value.c_str()); 19 | } 20 | 21 | void FlightLog::Warn(const RED4ext::CString value) { 22 | spdlog::warn(value.c_str()); 23 | } 24 | 25 | void FlightLog::Error(const RED4ext::CString value) { 26 | spdlog::error(value.c_str()); 27 | } 28 | 29 | void FlightLog::Probe(RED4ext::Handle image, RED4ext::red::ResourceReferenceScriptToken value) { 30 | 31 | } 32 | -------------------------------------------------------------------------------- /src/red4ext/Flight/Log.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "Utils/FlightModule.hpp" 3 | #include 4 | #include 5 | 6 | struct FlightLog : RED4ext::IScriptable { 7 | static void Info(RED4ext::CString value); 8 | static void Warn(RED4ext::CString value); 9 | static void Error(RED4ext::CString value); 10 | static void Probe(RED4ext::Handle image, RED4ext::red::ResourceReferenceScriptToken value); 11 | 12 | RTTI_IMPL_TYPEINFO(FlightLog); 13 | RTTI_IMPL_ALLOCATOR(); 14 | }; 15 | 16 | RTTI_DEFINE_CLASS(FlightLog, { 17 | RTTI_METHOD(Info); 18 | RTTI_METHOD(Warn); 19 | RTTI_METHOD(Error); 20 | RTTI_METHOD(Probe); 21 | }); -------------------------------------------------------------------------------- /src/red4ext/FlightController.cpp: -------------------------------------------------------------------------------- 1 | #include "FlightController.hpp" 2 | #include "Utils/FlightModule.hpp" 3 | 4 | #include "Utils/Utils.hpp" 5 | #include "stdafx.hpp" 6 | #include 7 | 8 | RED4ext::Handle handle; 9 | 10 | FlightController* FlightController::GetInstance() { 11 | if (!handle.instance) { 12 | spdlog::info("[RED4ext] New FlightController Instance"); 13 | auto instance = reinterpret_cast(RED4ext::CRTTISystem::Get()->GetClass("FlightController")->CreateInstance()); 14 | handle = RED4ext::Handle(instance); 15 | } 16 | 17 | return (FlightController*)handle.instance; 18 | } 19 | -------------------------------------------------------------------------------- /src/red4ext/FlightController.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | // #include 5 | #include 6 | #include 7 | 8 | struct FlightController : RED4ext::IScriptable { 9 | static FlightController *GetInstance(); 10 | 11 | bool enabled; 12 | bool active; 13 | int32_t mode; 14 | 15 | // virtual bool CanBeDestructed() override { return false; }; 16 | 17 | RTTI_IMPL_TYPEINFO(FlightController); 18 | RTTI_IMPL_ALLOCATOR(); 19 | }; 20 | 21 | RTTI_DEFINE_CLASS(FlightController, { 22 | RTTI_METHOD(GetInstance); 23 | RTTI_PROPERTY(enabled); 24 | RTTI_PROPERTY(active); 25 | RTTI_PROPERTY(mode); 26 | }); 27 | 28 | RED4EXT_ASSERT_SIZE(FlightController, 0x48); 29 | RED4EXT_ASSERT_OFFSET(FlightController, enabled, 0x40); 30 | RED4EXT_ASSERT_OFFSET(FlightController, active, 0x41); 31 | RED4EXT_ASSERT_OFFSET(FlightController, mode, 0x44); 32 | -------------------------------------------------------------------------------- /src/red4ext/FlightEvents.cpp: -------------------------------------------------------------------------------- 1 | #include "FlightEvents.hpp" -------------------------------------------------------------------------------- /src/red4ext/FlightEvents.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include "Red/TypeInfo/Macros/Definition.hpp" 7 | #include "Utils/FlightModule.hpp" 8 | #include 9 | 10 | namespace RED4ext::vehicle::flight { 11 | 12 | struct Event : RED4ext::red::Event { 13 | RED4ext::Handle vehicle; 14 | 15 | RTTI_IMPL_TYPEINFO(Event); 16 | RTTI_IMPL_ALLOCATOR(); 17 | }; 18 | 19 | struct PhysicsUpdateEvent : Event { 20 | float timeDelta = 0; 21 | 22 | RTTI_IMPL_TYPEINFO(PhysicsUpdateEvent); 23 | RTTI_IMPL_ALLOCATOR(); 24 | }; 25 | RED4EXT_ASSERT_OFFSET(PhysicsUpdateEvent, timeDelta, 0x50); 26 | RED4EXT_ASSERT_SIZE(PhysicsUpdateEvent, 0x58); 27 | //char (*__kaboom)[sizeof(PhysicsUpdateEvent)] = 1; 28 | //char (*__kaboom2)[offsetof(PhysicsUpdateEvent, timeDelta)] = 1; 29 | 30 | } // namespace vehicle::flight 31 | 32 | RTTI_DEFINE_CLASS(RED4ext::vehicle::flight::Event, "vehicleFlightEvent", { 33 | RTTI_PARENT(RED4ext::red::Event); 34 | RTTI_PROPERTY(vehicle); 35 | }); 36 | 37 | RTTI_DEFINE_CLASS(RED4ext::vehicle::flight::PhysicsUpdateEvent, "vehicleFlightPhysicsUpdateEvent", { 38 | RTTI_PARENT(vehicle::flight::Event); 39 | RTTI_PROPERTY(timeDelta); 40 | }); -------------------------------------------------------------------------------- /src/red4ext/FlightSettings.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | struct FlightSettings : RED4ext::IScriptable { 10 | static RED4ext::Handle GetInstance(); 11 | 12 | static float GetFloat(RED4ext::CString); 13 | static void SetFloat(RED4ext::CString, float); 14 | static RED4ext::Vector3 GetVector3(RED4ext::CString); 15 | static void SetVector3(RED4ext::CString, float, float, float); 16 | static void DebugBreak(); 17 | 18 | template 19 | static T GetProperty(RED4ext::CName name) { 20 | auto fs = GetInstance(); 21 | auto prop = fs->GetNativeType()->GetProperty(name); 22 | return prop->GetValue(fs); 23 | } 24 | 25 | RTTI_IMPL_TYPEINFO(FlightSettings); 26 | RTTI_IMPL_ALLOCATOR(); 27 | }; 28 | 29 | RTTI_DEFINE_CLASS(FlightSettings, { 30 | RTTI_METHOD(GetInstance); 31 | RTTI_METHOD(GetFloat); 32 | RTTI_METHOD(SetFloat); 33 | RTTI_METHOD(GetVector3); 34 | RTTI_METHOD(SetVector3); 35 | RTTI_METHOD(DebugBreak); 36 | }); -------------------------------------------------------------------------------- /src/red4ext/FlightThruster.cpp: -------------------------------------------------------------------------------- 1 | #include "FlightThruster.hpp" 2 | -------------------------------------------------------------------------------- /src/red4ext/FlightThruster.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include "Engine/RTTIClass.hpp" 5 | #include "Flight/Component.hpp" 6 | #include 7 | 8 | struct FlightComponent; 9 | 10 | class IFlightThruster : public Engine::RTTIClass { 11 | public: 12 | RED4ext::Handle flightComponent; 13 | RED4ext::CName boneName; 14 | RED4ext::CName slotName; 15 | RED4ext::Vector3 relativePosition = RED4ext::Vector3(0.0, 0.0, 0.0); 16 | alignas(0x10) RED4ext::Quaternion relativeRotation = RED4ext::Quaternion(0.0, 0.0, 0.0, 1.0); 17 | RED4ext::CName meshPath = "user\\jackhumbert\\meshes\\engine_corpo.mesh"; 18 | RED4ext::CName meshName = "Thruster"; 19 | RED4ext::Handle meshComponent; 20 | RED4ext::Handle vehicle; 21 | private: 22 | friend Descriptor; 23 | static void OnRegister(Descriptor *aType) { 24 | aType->flags.isAbstract = true; 25 | // aType->flags.b20000 = true; 26 | // aType->flags.isAlwaysTransient = true; 27 | } 28 | 29 | static void OnDescribe(Descriptor *aType, RED4ext::CRTTISystem *) {} 30 | }; 31 | RED4EXT_ASSERT_OFFSET(IFlightThruster, flightComponent, 0x40); 32 | RED4EXT_ASSERT_OFFSET(IFlightThruster, boneName, 0x50); 33 | RED4EXT_ASSERT_OFFSET(IFlightThruster, slotName, 0x58); 34 | RED4EXT_ASSERT_OFFSET(IFlightThruster, relativePosition, 0x60); 35 | RED4EXT_ASSERT_OFFSET(IFlightThruster, relativeRotation, 0x70); 36 | RED4EXT_ASSERT_OFFSET(IFlightThruster, meshPath, 0x80); 37 | RED4EXT_ASSERT_OFFSET(IFlightThruster, meshName, 0x88); 38 | RED4EXT_ASSERT_OFFSET(IFlightThruster, meshComponent, 0x90); 39 | RED4EXT_ASSERT_OFFSET(IFlightThruster, vehicle, 0xA0); -------------------------------------------------------------------------------- /src/red4ext/FlightWeapons.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace FlightWeapons { 6 | void AddWeapons(RED4ext::vehicle::BaseObject *vehicle); 7 | void AddWeaponSlots(RED4ext::ent::SlotComponent *sc); 8 | } // namespace FlightWeapons -------------------------------------------------------------------------------- /src/red4ext/Hooks/CreateStaticEffect.cpp: -------------------------------------------------------------------------------- 1 | #include "Addresses.hpp" 2 | #include "Utils/FlightModule.hpp" 3 | #include 4 | #include 5 | #include 6 | 7 | // #include "LoadResRef.hpp" 8 | 9 | // 1.52 RVA : 0x1478200 10 | // 1.6 RVA: 0x148ED00 / 21556480 11 | // 1.61 RVA: 0x148F3F0 12 | /// @pattern 48 89 5C 24 10 48 89 74 24 18 48 89 7C 24 20 48 89 4C 24 08 55 41 54 41 55 41 56 41 57 48 8D 6C 24 D0 48 81 EC 30 01 00 00 4C 8B AD 80 00 00 00 13 | // using CreateStaticEffect = uintptr_t (RED4ext::game::EffectSystem *, uintptr_t, uint64_t, uint64_t, uintptr_t, uintptr_t); 14 | 15 | // pre-2.0 16 | /// @pattern 48 89 5C 24 10 48 89 74 24 18 48 89 7C 24 20 48 89 4C 24 08 55 41 54 41 55 41 56 41 57 48 8D 6C 24 D0 48 81 17 | /// EC 30 01 00 00 4C 8B AD 80 00 00 00 18 | 19 | // 2.0 20 | /// @pattern 48 8B C4 48 89 58 08 48 89 70 10 48 89 78 18 4C 89 70 20 55 48 8D 68 B1 48 81 EC 90 00 00 00 48 21 | /// @nth 0/2 22 | uintptr_t CreateStaticEffect(RED4ext::game::EffectSystem *, uintptr_t, uint64_t, uint64_t, uintptr_t, uintptr_t); 23 | 24 | REGISTER_FLIGHT_HOOK(uintptr_t, CreateStaticEffect, RED4ext::game::EffectSystem *es, uintptr_t effectRef, 25 | uint64_t effectNameHash, uint64_t effectTagHash, uintptr_t instigator, uintptr_t weapon) { 26 | bool exists = false; 27 | for (const auto hash : es->effectNameHashes) { 28 | if (hash == effectNameHash) { 29 | exists = true; 30 | } 31 | } 32 | 33 | if (!exists) { 34 | // auto handle = new RED4ext::ResourceHandle(); 35 | // LoadResRef(&effectNameHash, handle, true); 36 | auto resource = RED4ext::RaRef(effectNameHash); 37 | es->effectNameHashes.EmplaceBack(effectNameHash); 38 | es->effectResources.EmplaceBack(resource); 39 | es->unkA0 = 1; // needs sorting maybe? 40 | } 41 | 42 | return CreateStaticEffect_Original(es, effectRef, effectNameHash, effectTagHash, instigator, weapon); 43 | } -------------------------------------------------------------------------------- /src/red4ext/Hooks/GetMatrixFromOrientation.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | // 1.52 RVA: 0x1C58B0 / 1857712 5 | // 1.6 RVA: 0x1C9A30 / 1874480 6 | // 2.0- 7 | /// @pattern 4C 8B DC 48 81 EC B8 00 00 00 0F 10 21 41 0F 29 73 E8 0F 28 DC 0F 59 DC C7 44 24 0C 00 00 00 00 8 | 9 | // 2.0+ 10 | /// @pattern 4C 8B DC 48 81 EC A8 00 00 00 0F 10 21 41 0F 29 73 E8 0F 28 DC 0F 59 DC 41 0F 29 7B D8 45 0F 29 11 | RED4ext::Matrix* __fastcall GetMatrixFromOrientation(RED4ext::Quaternion* q, RED4ext::Matrix* m) { 12 | RED4ext::RelocFunc call(GetMatrixFromOrientation_Addr); 13 | return call(q, m); 14 | } -------------------------------------------------------------------------------- /src/red4ext/Hooks/VehicleObject_ProcessWeapons.cpp: -------------------------------------------------------------------------------- 1 | #include "Addresses.hpp" 2 | #include "Flight/Component.hpp" 3 | #include "Utils/FlightModule.hpp" 4 | #include 5 | #include 6 | #include 7 | 8 | 9 | // processes weapon firing for vehicles - we can check the cycleTimer value after to see if something was fired 10 | // 1.5 added a byte in the middle of this pattern, which makes it hard to match with ? 11 | /// @pattern 48 8B C4 55 56 41 54 41 55 41 56 41 57 48 8D A8 12 | // void VehicleObject_ProcessWeapons(RED4ext::vehicle::BaseObject *vehicle, float timeDelta, unsigned int shootIndex); 13 | 14 | // REGISTER_FLIGHT_HOOK(void __fastcall, VehicleObject_ProcessWeapons, RED4ext::vehicle::BaseObject *vehicle, 15 | // float timeDelta, unsigned int shootIndex) { 16 | // VehicleObject_ProcessWeapons_Original(vehicle, timeDelta, shootIndex); 17 | // if (vehicle->weapons[shootIndex].cycleTimer == 0.0) { 18 | // RED4ext::Quaternion quat = {0.0, 0.0, 0.0, 1.0}; 19 | // auto ph = (RED4ext::ent::PlaceholderComponent *)vehicle->weapons[shootIndex].weaponObject.GetPtr()->placeholder; 20 | // if (ph) { 21 | // quat = ph->worldTransform.Orientation; 22 | // } 23 | 24 | // auto rtti = RED4ext::CRTTISystem::Get(); 25 | // auto fcc = rtti->GetClass("FlightComponent"); 26 | // auto fc = FlightComponent::Get(vehicle); 27 | // auto onFireWeapon = fcc->GetFunction("OnFireWeapon"); 28 | // RED4ext::CStackType args[3]; 29 | // args[0] = RED4ext::CStackType(rtti->GetType("Quaternion"), &quat); 30 | // args[1] = RED4ext::CStackType(rtti->GetType("TweakDBID"), &vehicle->weapons[shootIndex].item); 31 | // args[2] = RED4ext::CStackType(rtti->GetType("TweakDBID"), &vehicle->weapons[shootIndex].slot); 32 | // auto stack = RED4ext::CStack(fc, args, 3, nullptr, 0); 33 | // onFireWeapon->Execute(&stack); 34 | // } 35 | // } -------------------------------------------------------------------------------- /src/red4ext/Hooks/vehicleTPPCameraComponent_GetLocationFromOffset.cpp: -------------------------------------------------------------------------------- 1 | #include "Addresses.hpp" 2 | #include "Utils/FlightModule.hpp" 3 | #include "Flight/Component.hpp" 4 | #include "FlightSettings.hpp" 5 | #include 6 | #include 7 | #include 8 | 9 | // gets the location for the camera to look at 10 | 11 | // pre 2.0 12 | /// @pattern 48 8B C4 48 89 58 18 48 89 78 20 55 48 8D 68 D8 48 81 EC 20 01 00 00 0F 28 05 ? ? ? 01 0F 57 13 | 14 | // post 2.0 15 | /// @pattern 48 8B C4 48 89 58 08 48 89 78 10 55 48 8D A8 58 FF FF FF 48 81 EC A0 01 00 00 0F 28 05 EB 6A B9 16 | RED4ext::Vector4 *__fastcall GetLocationFromOffset(RED4ext::vehicle::TPPCameraComponent *camera, RED4ext::Vector4 *location, RED4ext::Vector3 *lookAtOffset); 17 | 18 | REGISTER_FLIGHT_HOOK(RED4ext::Vector4 *__fastcall, GetLocationFromOffset, 19 | RED4ext::vehicle::TPPCameraComponent *camera, RED4ext::Vector4 *location, 20 | RED4ext::Vector3 *offset) { 21 | auto v = new RED4ext::Vector4(); 22 | auto vehicle = camera->vehicle; 23 | auto fc = FlightComponent::Get(vehicle); 24 | if (fc && fc->active) { 25 | // ignore pitch adjustments 26 | // camera->pitch = camera->cameraPitch; 27 | camera->data.isInAir = false; 28 | if (FlightSettings::GetProperty("tppCameraCenterOnMass")) { 29 | *v = *vehicle->worldTransform.Position.ToVector4() + 30 | (vehicle->worldTransform.Orientation * vehicle->physicsData->centerOfMass); 31 | } else { 32 | *v = *GetLocationFromOffset_Original(camera, location, offset); 33 | } 34 | return v; 35 | } else { 36 | return GetLocationFromOffset_Original(camera, location, offset); 37 | } 38 | } -------------------------------------------------------------------------------- /src/red4ext/Hooks/vehicleTPPCameraComponent_GetYaw.cpp: -------------------------------------------------------------------------------- 1 | #include "Addresses.hpp" 2 | #include "Utils/FlightModule.hpp" 3 | #include "Flight/Component.hpp" 4 | #include 5 | #include 6 | 7 | // uses driving direction variables, a3 is unkTransform340 & update->locationFromOffset, and X from unkWorldPosition470 8 | 9 | // pre 2.0 10 | // 1.6 RVA: 0x1CF57B0 / 30365616 11 | /// @pattern 48 8B C4 F3 0F 11 58 20 53 56 57 48 81 EC 10 01 00 00 F3 0F 10 81 D8 04 00 00 49 8B F8 F3 0F 10 12 | 13 | // post 2.0 14 | /// @pattern 48 8B C4 48 89 58 08 48 89 70 10 48 89 78 18 55 48 8D 68 A9 48 81 EC 00 01 00 00 F3 0F 10 81 70 15 | void __fastcall GetYaw(RED4ext::vehicle::TPPCameraComponent *camera, float *yaw, RED4ext::Vector4 *a3, float isInAir); 16 | 17 | // ignores driving direction correction 18 | REGISTER_FLIGHT_HOOK(void __fastcall, GetYaw, RED4ext::vehicle::TPPCameraComponent *camera, 19 | float *yaw, RED4ext::Vector4 *position, float isInAir) { 20 | auto vehicle = camera->vehicle; 21 | auto fc = FlightComponent::Get(vehicle); 22 | if (fc && fc->active) { 23 | *yaw = 0.0; 24 | } else { 25 | GetYaw_Original(camera, yaw, position, isInAir); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/red4ext/Hooks/vehicleTPPCameraComponent_UpdatePitch.cpp: -------------------------------------------------------------------------------- 1 | #include "Addresses.hpp" 2 | #include "Utils/FlightModule.hpp" 3 | #include "Flight/Component.hpp" 4 | #include "FlightSettings.hpp" 5 | #include 6 | #include 7 | 8 | // ignores pitch slope adjustment 9 | // updates cameraDirection 10 | // updates cameraPitch from slopeAdjustment 11 | 12 | // pre 2.0 13 | // 1.6 RVA: 0x1CF5DB0 / 30367152 14 | // 1.61hf1 RVA: 0x1CF6870 / 30369904 15 | /// @pattern 48 8B C4 48 89 58 08 57 48 81 EC 90 00 00 00 F3 0F 10 05 ? ? ? 01 0F 57 ED 0F 29 70 E8 49 8B 16 | 17 | // post 2.0 18 | /// @pattern 48 8B C4 55 48 8D 68 A1 48 81 EC A0 00 00 00 F3 0F 10 05 C9 46 B9 02 4C 8B D1 0F 29 70 E8 4D 8B 19 | void __fastcall UpdatePitch(RED4ext::vehicle::TPPCameraComponent *camera, RED4ext::Vector4 *localPosition, RED4ext::Vector3 *cameraPosition, RED4ext::vehicle::TPPCameraUpdate *update); 20 | 21 | REGISTER_FLIGHT_HOOK(void __fastcall, UpdatePitch, 22 | RED4ext::vehicle::TPPCameraComponent *camera, RED4ext::Vector4 *localPosition, 23 | RED4ext::Vector3 *cameraPosition, RED4ext::vehicle::TPPCameraUpdate *update) { 24 | auto vehicle = camera->vehicle; 25 | auto fc = FlightComponent::Get(vehicle); 26 | if (fc && fc->active) { 27 | camera->cameraDirection = update->locationFromOffset; 28 | camera->cameraPitch = FlightSettings::GetProperty("tppCameraPitchOffset"); 29 | } else { 30 | UpdatePitch_Original(camera, localPosition, cameraPosition, update); 31 | } 32 | } -------------------------------------------------------------------------------- /src/red4ext/Hooks/vehicleUnk570_WheelEffectUpdate.cpp: -------------------------------------------------------------------------------- 1 | #include "Addresses.hpp" 2 | #include "Flight/Component.hpp" 3 | #include "Utils/FlightModule.hpp" 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | // pre 2.0 10 | // 1.6 RVA: 0x1D2A340 / 30581568 11 | /// @pattern 48 8B C4 89 50 10 55 48 8D A8 78 FE FF FF 48 81 EC 80 02 00 00 41 80 78 7C 00 48 89 58 20 48 89 12 | 13 | // post 2.0 14 | /// @pattern 48 8B C4 48 89 58 20 55 56 57 41 54 41 55 41 56 41 57 48 8D A8 28 FF FF FF 48 81 EC A0 01 00 00 15 | /// @nth 1/2 16 | void __fastcall WheelEffectUpdate(RED4ext::vehicle::Effects *effects, unsigned int wheelIndex, RED4ext::vehicle::Effects::Unk40 *unk40, float deltaTime); 17 | 18 | // make tire always skidding 19 | REGISTER_FLIGHT_HOOK(void __fastcall, WheelEffectUpdate, RED4ext::vehicle::Effects *effects, unsigned int wheelIndex, 20 | RED4ext::vehicle::Effects::Unk40 *unk40, float deltaTime) { 21 | auto fc = FlightComponent::Get(effects->vehicle); 22 | if (fc && fc->active) { 23 | unk40->wheelLongSlip = 2.0; 24 | } 25 | WheelEffectUpdate_Original(effects, wheelIndex, unk40, deltaTime); 26 | } -------------------------------------------------------------------------------- /src/red4ext/Hooks/vehicleUnk580_UpdateTireParameters.cpp: -------------------------------------------------------------------------------- 1 | #include "Utils/FlightModule.hpp" 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include "Flight/Component.hpp" 11 | #include "Addresses.hpp" 12 | #include 13 | 14 | using namespace RED4ext; 15 | 16 | // pre 2.0 17 | // 1.6 RVA: 0x1C62AE0 / 29764320 18 | /// @pattern 48 89 5C 24 10 48 89 6C 24 18 56 57 41 56 48 83 EC 70 48 8B 69 08 49 8B D8 4C 8B 01 48 8B F2 0F 19 | 20 | // post 2.0 21 | /// @pattern 48 8B C4 48 89 58 10 48 89 70 18 48 89 78 20 55 48 8B EC 48 83 EC 70 0F 29 70 E8 49 8B D8 4C 8B 22 | void __fastcall UpdateTireParameters(vehicle::TireParameterUpdate * tpu, vehicle::TireUpdate *tireUpdate, CName emitter); 23 | 24 | // stop tire skid sfx 25 | REGISTER_FLIGHT_HOOK(void __fastcall, UpdateTireParameters, 26 | vehicle::TireParameterUpdate *tpu, vehicle::TireUpdate * tireUpdate, CName emitter) { 27 | auto fc = FlightComponent::Get(tpu->acoustics->vehicle); 28 | if (fc && fc->active) { 29 | // float skidValue = tireUpdate->skidValue2; 30 | // if (tpu->acoustics->unk3D0) { 31 | // skidValue = tireUpdate->skidValue; 32 | // } 33 | // auto phys = (vehicle::WheeledPhysics*)tpu->acoustics->vehicle->physics; 34 | // spdlog::info("{}: {}", tpu->variables->wheelIndex, phys->insert2[tpu->variables->wheelIndex].dampedSpringForce); 35 | // fc->ExecuteFunction("HandleScraping", skidValue, tpu->variables->wheelIndex, tpu->variables->emitterName); 36 | // CGameEngine::Get()->audioThing->GetEmitterPosition(tpu->acoustics->vehicle->entityID, tpu->variables->emitterName); 37 | 38 | tireUpdate->skidValue = 0.0; 39 | tireUpdate->skidValue2 = 0.0; 40 | } 41 | UpdateTireParameters_Original(tpu, tireUpdate, emitter); 42 | } -------------------------------------------------------------------------------- /src/red4ext/IFlightSystem.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "Engine/RTTIClass.hpp" 4 | #include "Audio/FlightAudio.hpp" 5 | #include 6 | #include 7 | #include 8 | //#include "Flight/Component.hpp" 9 | 10 | struct FlightComponent; 11 | 12 | class IFlightSystem : public Engine::RTTIClass { 13 | public: 14 | virtual void RegisterComponent(RED4ext::WeakHandle) { }; 15 | virtual void UnregisterComponent(RED4ext::WeakHandle) { }; 16 | private: 17 | friend Descriptor; 18 | static void OnRegister(Descriptor *aType) { 19 | aType->flags = {.isAbstract = true, .isNative = true, .isImportOnly = true}; 20 | } 21 | 22 | static void OnDescribe(Descriptor *aType, RED4ext::CRTTISystem *) {} 23 | }; -------------------------------------------------------------------------------- /src/red4ext/LoadResRef.hpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include "Addresses.hpp" 4 | 5 | // 1.61 RVA: 0x204390 6 | // 1.62 RVA: 0x204A90 7 | /// @pattern 40 53 48 83 EC 30 33 C0 45 8A C8 4C 8D 44 24 20 48 89 44 24 20 89 44 24 28 48 8B DA 88 44 24 2C 8 | constexpr uintptr_t LoadResRefT = LoadResRefT_Addr; 9 | 10 | template 11 | RED4ext::RelocFunc *(*)(RED4ext::ResourcePath *, RED4ext::SharedPtr> *wrapper, bool sync)> 12 | LoadResRef(LoadResRefT_Addr); -------------------------------------------------------------------------------- /src/red4ext/Physics/VehiclePhysicsUpdate.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | struct FlightComponent; 9 | -------------------------------------------------------------------------------- /src/red4ext/Physics/VehicleSpeedUnlimiter.cpp: -------------------------------------------------------------------------------- 1 | #include "VehicleSpeedUnlimiter.hpp" 2 | 3 | // Vehicle Speed Unlimiter 4 | 5 | namespace vehicle { 6 | 7 | REGISTER_FLIGHT_HOOK(short, PhysicsStructUpdate, RED4ext::vehicle::PhysicsData *ps) { 8 | // apply force to linear velocity 9 | RED4ext::Vector3 unlimitedVelocity; 10 | unlimitedVelocity.X = ps->velocity.X + ps->force.X * ps->inverseMass; 11 | unlimitedVelocity.Y = ps->velocity.Y + ps->force.Y * ps->inverseMass; 12 | unlimitedVelocity.Z = ps->velocity.Z + ps->force.Z * ps->inverseMass; 13 | 14 | auto result = PhysicsStructUpdate_Original(ps); 15 | 16 | // ignore speed limit in og function 17 | if (result != FP_INFINITE) { 18 | ps->velocity = unlimitedVelocity; 19 | } 20 | 21 | return result; 22 | } 23 | 24 | } // namespace vehicle 25 | 26 | // 1.52 RVA: 0x1CE0FC0 / 30281664 27 | // 1.6 RVA: 0x1D0D770 / 30463856 28 | // 1.61 RVA: 0x1D0DB30 29 | /// @pattern 48 89 5C 24 08 57 48 83 EC 30 0F 29 74 24 20 48 8B DA 0F 10 32 48 8B F9 66 0F 3A 40 F6 7F 0F 28 30 | short PhysicsUnkStructVelocityUpdate(RED4ext::vehicle::PhysicsData *, RED4ext::Vector3 *); 31 | 32 | REGISTER_FLIGHT_HOOK(short, PhysicsUnkStructVelocityUpdate, RED4ext::vehicle::PhysicsData *vps, RED4ext::Vector3 *velocity) { 33 | auto result = PhysicsUnkStructVelocityUpdate_Original(vps, velocity); 34 | 35 | if (result != FP_INFINITE) { 36 | vps->velocity = *velocity; 37 | } 38 | 39 | return result; 40 | } -------------------------------------------------------------------------------- /src/red4ext/Physics/VehicleSpeedUnlimiter.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include "Utils/FlightModule.hpp" 7 | #include "Addresses.hpp" 8 | 9 | // Vehicle Speed Unlimiter 10 | 11 | namespace vehicle { 12 | 13 | // 1.6 RVA: 0x1D0E180 / 30466432 14 | // 1.61 RVA: 0x1D0E540 15 | /// @pattern 40 53 48 81 EC 80 00 00 00 F3 0F 10 41 40 48 8B D9 F3 0F 10 51 08 0F 28 C8 F3 0F 59 09 0F 29 74 16 | 17 | // 2.0 18 | /// @pattern 40 53 48 83 EC 50 F3 0F 10 41 40 48 8B D9 F3 0F 10 51 08 0F 28 C8 F3 0F 59 09 0F 29 74 24 40 F3 19 | short PhysicsStructUpdate(RED4ext::vehicle::PhysicsData *ps); 20 | constexpr const uintptr_t PhysicsStructUpdate_Addr = vehicle_PhysicsStructUpdate_Addr; 21 | 22 | } -------------------------------------------------------------------------------- /src/red4ext/RuntimeClass.hpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | template T *CreateWithVFT() { 5 | auto inst = new T(); 6 | return inst; 7 | } 8 | 9 | struct IRuntimeClass { 10 | static constexpr const uintptr_t VFT = 0x35E6D08 + 0xC00; 11 | static constexpr const size_t VFT_SIZE = 0x80; 12 | 13 | 14 | 15 | IRuntimeClass() { 16 | *(uintptr_t *)this = VFT + reinterpret_cast(GetModuleHandle(nullptr)); 17 | } 18 | 19 | template static T *CreateInstance() { 20 | uintptr_t* newVft = malloc(T::VFT_SIZE); 21 | auto inst = new T(); 22 | auto vft = *(uintptr_t)inst; 23 | for (auto vf = *vft; vf < vft + T::VFT_SIZE; vf += 8) { 24 | newVft = vf; 25 | newVft += 8; 26 | } 27 | return inst; 28 | } 29 | }; 30 | 31 | struct RuntimeClass : IRuntimeClass { 32 | RuntimeClass() : IRuntimeClass() { 33 | 34 | } 35 | }; -------------------------------------------------------------------------------- /src/red4ext/ScriptDefinitions/ScriptHost.hpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | struct ScriptFile { 4 | RED4ext::CName name; 5 | RED4ext::CString filename; 6 | }; 7 | 8 | enum EBreakpointState : unsigned __int8 { 9 | Continue = 0x0, 10 | StepOver = 0x1, 11 | StepInto = 0x2, 12 | StepOut = 0x3, 13 | Pause = 0x4, 14 | }; 15 | 16 | struct ScriptHost { 17 | // 1.52? RVA: 0x30E74C0 18 | //const uintptr_t VFT_RVA = 0x30E74C0; 19 | 20 | void sub_00(); // empty 21 | void sub_08(); // load 22 | 23 | // something with compiling scripts 24 | bool sub_10(RED4ext::CString*); 25 | void sub_18(); 26 | void sub_20(); 27 | 28 | // something with files 29 | void sub_28(); 30 | 31 | void sub_30(); // empty 32 | 33 | // if unk20 == 0 34 | void sub_38(); 35 | 36 | // sets unk24 37 | void sub_40(); 38 | 39 | // gets unk24 40 | void sub_48(); 41 | 42 | // something with (), 43 | void sub_50(RED4ext::CString *); 44 | 45 | // something else with (), 46 | void sub_58(bool *, RED4ext::CString *); 47 | 48 | void sub_60(); 49 | void sub_68(); 50 | void sub_70(); 51 | void sub_78(); 52 | void sub_80(); 53 | void sub_88(); 54 | void sub_90(); 55 | void sub_98(); 56 | 57 | void *vft2; 58 | RED4ext::DynArray unk10; 59 | uint32_t unk20; // state? 60 | uint16_t unk24; 61 | uint16_t unk26; 62 | uint64_t unk28; 63 | RED4ext::Map files; 64 | uint32_t breakpointThread; 65 | EBreakpointState breakpointState; 66 | uint8_t unk5D; 67 | uint8_t unk5E; 68 | uint8_t unk5F; 69 | uint64_t unk60; 70 | RED4ext::HashMap unk68; 71 | RED4ext::SharedMutex unk68MUTX; 72 | uint8_t unk99; 73 | uint8_t unk9A; 74 | uint8_t unk9B; 75 | uint8_t unk9C; 76 | uint8_t unk9D; 77 | uint8_t unk9E; 78 | uint8_t unk9F; 79 | void *psa; 80 | }; 81 | -------------------------------------------------------------------------------- /src/red4ext/Utils/FileStream.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | class FileStream : public RED4ext::BaseStream 4 | { 5 | public: 6 | FileStream(const std::filesystem::path& aPath, uint32_t aDesiredAccess, uint32_t aShareMode, 7 | uint32_t aCreationDisposition, uint32_t aFlagsAndAttributes); 8 | ~FileStream(); 9 | 10 | bool IsOpen() const; 11 | 12 | virtual void* ReadWrite(void* aBuffer, uint32_t aLength) override; 13 | virtual size_t GetPointerPosition() override; 14 | virtual size_t GetLength() override; 15 | 16 | virtual bool Seek(size_t aDistance) override; 17 | bool Seek(size_t aDistance, uint32_t aMoveMethod); 18 | 19 | virtual bool Flush() override; 20 | std::filesystem::path GetPath() const; 21 | 22 | private: 23 | HANDLE m_file; 24 | std::filesystem::path m_path; 25 | }; 26 | -------------------------------------------------------------------------------- /src/red4ext/Utils/FlightModule.cpp: -------------------------------------------------------------------------------- 1 | #include "FlightModule.hpp" 2 | 3 | //void FlightModule::Load(const RED4ext::Sdk *aSdk, RED4ext::PluginHandle aHandle) {} 4 | //void FlightModule::RegisterTypes() {} 5 | //void FlightModule::PostRegisterTypes() {} 6 | //void FlightModule::Unload(const RED4ext::Sdk *aSdk, RED4ext::PluginHandle aHandle) {} -------------------------------------------------------------------------------- /src/red4ext/Utils/Utils.cpp: -------------------------------------------------------------------------------- 1 | #include "stdafx.hpp" 2 | #include "Utils.hpp" 3 | 4 | #include 5 | #include 6 | 7 | void Utils::CreateLogger() 8 | { 9 | auto rootDir = GetRootDir(); 10 | auto red4extDir = rootDir / L"red4ext"; 11 | auto logsDir = red4extDir / L"logs"; 12 | spdlog::filename_t logFile = (logsDir / L"let_there_be_flight.log"); 13 | 14 | auto console = std::make_shared(); 15 | auto file = std::make_shared(logFile, true); 16 | 17 | spdlog::sinks_init_list sinks = {console, file}; 18 | 19 | auto logger = std::make_shared("", sinks); 20 | spdlog::set_default_logger(logger); 21 | 22 | logger->flush_on(spdlog::level::trace); 23 | spdlog::set_level(spdlog::level::trace); 24 | } 25 | 26 | std::filesystem::path Utils::GetRootDir() 27 | { 28 | constexpr auto pathLength = MAX_PATH + 1; 29 | 30 | // Try to get the executable path until we can fit the length of the path. 31 | std::wstring filename; 32 | do 33 | { 34 | filename.resize(filename.size() + pathLength, '\0'); 35 | 36 | auto length = GetModuleFileName(nullptr, filename.data(), static_cast(filename.size())); 37 | if (length > 0) 38 | { 39 | // Resize it to the real, std::filesystem::path" will use the string's length instead of recounting it. 40 | filename.resize(length); 41 | } 42 | } while (GetLastError() == ERROR_INSUFFICIENT_BUFFER); 43 | 44 | auto rootDir = std::filesystem::path(filename) 45 | .parent_path() // Resolve to "x64" directory. 46 | .parent_path() // Resolve to "bin" directory. 47 | .parent_path(); // Resolve to game root directory. 48 | 49 | return rootDir; 50 | } 51 | 52 | std::wstring Utils::ToWString(const char* aText) 53 | { 54 | auto length = strlen(aText); 55 | 56 | std::wstring result(L"", length); 57 | mbstowcs(result.data(), aText, length); 58 | 59 | return result; 60 | } 61 | -------------------------------------------------------------------------------- /src/red4ext/Utils/Utils.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | namespace Utils 5 | { 6 | void CreateLogger(); 7 | std::filesystem::path GetRootDir(); 8 | std::wstring ToWString(const char* aText); 9 | } 10 | -------------------------------------------------------------------------------- /src/red4ext/stdafx.cpp: -------------------------------------------------------------------------------- 1 | #include "stdafx.hpp" 2 | -------------------------------------------------------------------------------- /src/red4ext/stdafx.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | #include 14 | #include 15 | #include 16 | -------------------------------------------------------------------------------- /src/redscript/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "redscript.scriptCachePath": "C:\\Users\\Jack\\Documents\\cyberpunk\\flight_control\\prereqs.redscripts" 3 | } -------------------------------------------------------------------------------- /src/redscript/Compatibility/ImprovedMinimap.reds: -------------------------------------------------------------------------------- 1 | @if(!ModuleExists("ImprovedMinimapMain")) 2 | public func IMZ_Comp_SetBlackboardValue(gameInstance: GameInstance, enabled: Bool) { 3 | GameInstance.GetBlackboardSystem(gameInstance).Get(GetAllBlackboardDefs().UI_ActiveVehicleData).SetBool(GetAllBlackboardDefs().UI_ActiveVehicleData.IsPlayerMounted, enabled); 4 | } 5 | 6 | @if(ModuleExists("ImprovedMinimapMain")) 7 | public func IMZ_Comp_SetBlackboardValue(gameInstance: GameInstance, enabled: Bool) { 8 | GameInstance.GetBlackboardSystem(gameInstance).Get(GetAllBlackboardDefs().UI_System).SetBool(GetAllBlackboardDefs().UI_System.IsMounted_IMZ, enabled); 9 | } 10 | 11 | @if(!ModuleExists("ImprovedMinimapMain")) 12 | @addMethod(hudCarController) 13 | public func UpdateIMZSpeed(speed: Float, multiplier: Float) { } 14 | 15 | @if(ModuleExists("ImprovedMinimapMain")) 16 | @addMethod(hudCarController) 17 | public func UpdateIMZSpeed(speed: Float, multiplier: Float) { 18 | let value: Float = Cast(RoundF(speed * 2.0)) / 6.0; 19 | let resultingValue: Float = value * multiplier; 20 | GameInstance.GetBlackboardSystem(this.m_activeVehicle.GetGame()).Get(GetAllBlackboardDefs().UI_System).SetFloat(GetAllBlackboardDefs().UI_System.CurrentSpeed_IMZ, resultingValue); 21 | } 22 | -------------------------------------------------------------------------------- /src/redscript/Compatibility/ModSettings.reds: -------------------------------------------------------------------------------- 1 | @if(ModuleExists("ModSettingsModule")) 2 | public func LTBF_RegisterListener(listener: ref) { 3 | // ModSettings.RegisterListenerToClass(listener); 4 | } 5 | 6 | @if(!ModuleExists("ModSettingsModule")) 7 | public func LTBF_RegisterListener(listener: ref) { } 8 | 9 | @if(ModuleExists("ModSettingsModule")) 10 | public func LTBF_UnregisterListener(listener: ref) { 11 | // ModSettings.UnregisterListenerToClass(listener); 12 | } 13 | 14 | @if(!ModuleExists("ModSettingsModule")) 15 | public func LTBF_UnregisterListener(listener: ref) { } -------------------------------------------------------------------------------- /src/redscript/Extensions/blackboardDefinitions.reds: -------------------------------------------------------------------------------- 1 | public class VehicleFlightDef extends BlackboardDefinition { 2 | 3 | public let IsActive: BlackboardID_Bool; 4 | public let Mode: BlackboardID_Int; 5 | public let IsUIActive: BlackboardID_Bool; 6 | public let Orientation: BlackboardID_Quat; 7 | public let Force: BlackboardID_Vector4; 8 | public let Torque: BlackboardID_Vector4; 9 | public let Position: BlackboardID_Vector4; 10 | public let Pitch: BlackboardID_Float; 11 | public let Roll: BlackboardID_Float; 12 | 13 | public const func AutoCreateInSystem() -> Bool { 14 | return true; 15 | } 16 | } 17 | 18 | @addField(AllBlackboardDefinitions) 19 | public let VehicleFlight: ref; 20 | 21 | // @addField(VehicleDef) 22 | // public let IsFlightActive: BlackboardID_Bool; 23 | 24 | // @addField(VehicleDef) 25 | // public let FlightMode: BlackboardID_Int; 26 | 27 | // @addField(VehicleDef) 28 | // public let IsFlightUIActive: BlackboardID_Bool; 29 | 30 | // @addField(VehicleDef) 31 | // public let Orientation: BlackboardID_Quat; 32 | 33 | // @addField(VehicleDef) 34 | // public let Pitch: BlackboardID_Float; 35 | 36 | // @addField(VehicleDef) 37 | // public let Force: BlackboardID_Vector4; 38 | 39 | // @addField(VehicleDef) 40 | // public let Torque: BlackboardID_Vector4; 41 | 42 | // @addField(VehicleDef) 43 | // public let Position: BlackboardID_Vector4; -------------------------------------------------------------------------------- /src/redscript/Extensions/inkBorder.reds: -------------------------------------------------------------------------------- 1 | @addField(inkBorder) 2 | native let thickness: Float; 3 | 4 | @addMethod(inkBorder) 5 | public func SetThickness(thickness: Float) { 6 | this.thickness = thickness; 7 | } 8 | @addMethod(inkBorder) 9 | public func GetThickness() -> Float{ 10 | return this.thickness; 11 | } -------------------------------------------------------------------------------- /src/redscript/Extensions/inkMask.reds: -------------------------------------------------------------------------------- 1 | enum inkMaskDataSource { 2 | TextureAtlas = 0, 3 | DynamicTexture = 1 4 | } 5 | 6 | // public native class inkTextureAtlas { 7 | 8 | // } 9 | 10 | // @addField(inkMask) 11 | // native let textureAtlas: inkTextureAtlas; 12 | // @addField(inkMask) 13 | // native let texturePart: CName; 14 | @addField(inkMask) 15 | native let dynamicTextureMask: CName; 16 | 17 | @addMethod(inkMask) 18 | func SetDynamicTextureMask(value: CName) { 19 | this.dynamicTextureMask = value; 20 | } 21 | 22 | @addField(inkMask) 23 | native let dataSource: inkMaskDataSource; 24 | 25 | @addMethod(inkMask) 26 | func SetDataSource(value: inkMaskDataSource) { 27 | this.dataSource = value; 28 | } 29 | 30 | @addField(inkMask) 31 | let useNineSliceScale: Bool; 32 | 33 | @addField(inkMask) 34 | let nineSliceScale: inkMargin; 35 | 36 | @addMethod(inkMask) 37 | public func UsesNineSliceScale() -> Bool { 38 | return this.useNineSliceScale; 39 | } 40 | 41 | @addMethod(inkMask) 42 | public func SetNineSliceScale(enable: Bool) -> Void { 43 | this.useNineSliceScale = enable; 44 | } 45 | 46 | @addMethod(inkMask) 47 | public func GetNineSliceGrid() -> inkMargin { 48 | return this.nineSliceScale; 49 | } 50 | 51 | @addMethod(inkMask) 52 | public func SetNineSliceGrid(grid: inkMargin) -> Void { 53 | this.nineSliceScale = grid; 54 | } 55 | 56 | @addField(inkMask) 57 | native let invertMask: Bool; 58 | 59 | @addMethod(inkMask) 60 | func SetInvertMask(value: Bool) { 61 | this.invertMask = value; 62 | } 63 | 64 | @addField(inkMask) 65 | native let maskTransparency: Float; 66 | 67 | @addMethod(inkMask) 68 | func SetMaskTransparency(value: Float) { 69 | this.maskTransparency = value; 70 | } 71 | 72 | 73 | // @addMethod(inkMask) 74 | // func SetAtlasResource(textureAtlas: ResRef) { 75 | // this.textureAtlas = textureAtlas; 76 | // } 77 | @addMethod(inkMask) 78 | public native func SetAtlasResource(atlasResourcePath: ResRef) -> Bool; -------------------------------------------------------------------------------- /src/redscript/Extensions/inkQuadShape.reds: -------------------------------------------------------------------------------- 1 | public native class inkQuadShape extends inkBaseShapeWidget { 2 | // native let textureAtlas: ResRef; 3 | native let texturePart: CName; 4 | native let vertexList: array; 5 | 6 | // public func GetTextureAtlas() -> ResRef { 7 | // return this.textureAtlas; 8 | // } 9 | public func GetTexturePart() -> CName { 10 | return this.texturePart; 11 | } 12 | public func GetVertexList() -> array { 13 | return this.vertexList; 14 | } 15 | } -------------------------------------------------------------------------------- /src/redscript/Extensions/inkWidget.reds: -------------------------------------------------------------------------------- 1 | @addMethod(inkWidget) 2 | public native func CreateEffect(typeName: CName, effectName: CName) -> Void; 3 | 4 | enum inkEBlurDimension 5 | { 6 | Horizontal = 0, 7 | Vertical = 1 8 | } 9 | 10 | @addMethod(inkWidget) 11 | public native func SetBlurDimension(effectName: CName, blurDimension : inkEBlurDimension) -> Bool; -------------------------------------------------------------------------------- /src/redscript/Extensions/weaponRoster.reds: -------------------------------------------------------------------------------- 1 | // @addField(weaponRosterGameController) 2 | // let m_FlightStateBlackboardId: ref; 3 | 4 | // @wrapMethod(weaponRosterGameController) 5 | // private final func RegisterBB() -> Void { 6 | // wrappedMethod(); 7 | // let flightBB = FlightController.GetInstance().GetBlackboard(); 8 | // if IsDefined(flightBB) { 9 | // if !IsDefined(this.m_FlightStateBlackboardId) { 10 | // this.m_FlightStateBlackboardId = flightBB.RegisterListenerBool(GetAllBlackboardDefs().VehicleFlight.IsActive, this, n"OnFlightActivate"); 11 | // } 12 | // } 13 | // } 14 | 15 | // @wrapMethod(weaponRosterGameController) 16 | // private final func UnregisterBB() -> Void { 17 | // wrappedMethod(); 18 | // let flightBB = FlightController.GetInstance().GetBlackboard(); 19 | // if IsDefined(flightBB) { 20 | // if IsDefined(this.m_FlightStateBlackboardId) { 21 | // flightBB.UnregisterListenerBool(GetAllBlackboardDefs().VehicleFlight.IsActive, this.m_FlightStateBlackboardId); 22 | // } 23 | // } 24 | // } 25 | 26 | // @addMethod(weaponRosterGameController) 27 | // private cb func OnFlightActivate() -> Void { 28 | // this.PlayFold(); 29 | // } -------------------------------------------------------------------------------- /src/redscript/Flight/FlightEvents.reds: -------------------------------------------------------------------------------- 1 | public abstract class vehicleFlightEvent extends Event { 2 | // public native let vehicle: ref; 3 | } 4 | 5 | // public native class vehicleFlightPhysicsUpdateEvent extends vehicleFlightEvent { 6 | // public native let timeDelta: Float; 7 | // } 8 | 9 | public class VehicleFlightActivationEvent extends vehicleFlightEvent { 10 | } 11 | 12 | public class VehicleFlightDeactivationEvent extends vehicleFlightEvent { 13 | let silent: Bool; 14 | } 15 | 16 | public class VehicleFlightUIActivationEvent extends vehicleFlightEvent { 17 | public let m_activate: Bool; 18 | } 19 | 20 | 21 | public class VehicleFlightModeChangeEvent extends vehicleFlightEvent { 22 | let mode: Int32; 23 | } 24 | 25 | public class FlightFxCleanedUpEvent extends Event { 26 | public let delay: Float = 0.5; 27 | } 28 | -------------------------------------------------------------------------------- /src/redscript/Flight/FlightLog.reds: -------------------------------------------------------------------------------- 1 | public native class FlightLog { 2 | // defined in red4ext part 3 | public static native func Info(value: String) -> Void; 4 | public static native func Warn(value: String) -> Void; 5 | public static native func Error(value: String) -> Void; 6 | public static native func Probe(image: ref, atlasResourcePath: ResRef) -> Void; 7 | } -------------------------------------------------------------------------------- /src/redscript/Flight/FlightModeDroneAntiGravity.reds: -------------------------------------------------------------------------------- 1 | public class FlightModeDroneAntiGravity extends FlightModeDrone { 2 | 3 | @runtimeProperty("ModSettings.mod", "Let There Be Flight") 4 | @runtimeProperty("ModSettings.category", "UI-Settings-Flight-Mode-Settings") 5 | @runtimeProperty("ModSettings.displayName", "UI-Settings-Anti-Gravity-Drone-Mode-Enabled") 6 | public let agEnabled: Bool = false; 7 | 8 | public static func Create(component: ref) -> ref { 9 | let self = new FlightModeDroneAntiGravity(); 10 | self.Initialize(component); 11 | return self; 12 | } 13 | 14 | public func GetDescription() -> String = "Anti-Gravity Drone"; 15 | 16 | public func Update(timeDelta: Float) -> Void { 17 | super.Update(timeDelta); 18 | this.force += this.component.stats.d_localUp * (9.81000042) * this.gravityFactor; 19 | } 20 | } -------------------------------------------------------------------------------- /src/redscript/Flight/FlightModeFly.reds: -------------------------------------------------------------------------------- 1 | public class FlightModeFly extends FlightModeStandard { 2 | 3 | @runtimeProperty("ModSettings.mod", "Let There Be Flight") 4 | @runtimeProperty("ModSettings.category", "UI-Settings-Flight-Mode-Settings") 5 | @runtimeProperty("ModSettings.displayName", "UI-Settings-Fly-Mode-Enabled") 6 | public let enabled: Bool = false; 7 | 8 | public static func Create(component: ref) -> ref { 9 | let self = new FlightModeFly(); 10 | self.Initialize(component); 11 | return self; 12 | } 13 | 14 | public func GetDescription() -> String = "Fly"; 15 | 16 | public func Update(timeDelta: Float) -> Void { 17 | let idealNormal = FlightUtils.Up(); 18 | let liftForce: Float = FlightSettings.GetFloat("flyModeLiftFactor") * this.component.lift + (9.81000042) * this.gravityFactor; 19 | this.UpdateWithNormalLift(timeDelta, idealNormal, liftForce); 20 | } 21 | } -------------------------------------------------------------------------------- /src/redscript/Flight/FlightModeHover.reds: -------------------------------------------------------------------------------- 1 | public class FlightModeHover extends FlightModeStandard { 2 | 3 | @runtimeProperty("ModSettings.mod", "Let There Be Flight") 4 | @runtimeProperty("ModSettings.category", "UI-Settings-Flight-Mode-Settings") 5 | @runtimeProperty("ModSettings.displayName", "UI-Settings-Hover-Mode-Enabled") 6 | public let enabled: Bool = false; 7 | 8 | public static func Create(component: ref) -> ref { 9 | let self = new FlightModeHover(); 10 | self.Initialize(component); 11 | return self; 12 | } 13 | 14 | public func GetDescription() -> String = "Hover"; 15 | 16 | public func Activate() -> Void { 17 | let normal: Vector4; 18 | this.component.FindGround(normal); 19 | this.component.hoverHeight = MaxF(this.component.distance, FlightSettings.GetFloat("hoverModeMinHoverHeight")); 20 | } 21 | 22 | public func Update(timeDelta: Float) -> Void { 23 | this.component.hoverHeight = MaxF(FlightSettings.GetFloat("hoverModeMinHoverHeight"), this.component.hoverHeight); 24 | 25 | // let findWater: TraceResult; 26 | let heightDifference = 0.0; 27 | let normal: Vector4; 28 | let idealNormal = FlightUtils.Up(); 29 | 30 | // this.component.sqs.SyncRaycastByCollisionGroup(this.component.stats.d_position, this.component.stats.d_position - FlightSettings.GetFloat("lookDown"), n"Water", findWater, true, false); 31 | // if !TraceResult.IsValid(findWater) { 32 | if (this.component.FindGround(normal)) { 33 | heightDifference = this.component.hoverHeight - this.component.distance; 34 | idealNormal = normal; 35 | } 36 | // } 37 | 38 | this.UpdateWithNormalDistance(timeDelta, idealNormal, heightDifference); 39 | } 40 | } -------------------------------------------------------------------------------- /src/redscript/Flight/FlightTricks.reds: -------------------------------------------------------------------------------- 1 | public abstract class FlightTrick 2 | { 3 | public let suspendMode: Bool; 4 | public let force: Vector4; 5 | public let torque: Vector4; 6 | private let time: Float; 7 | private let component: ref; 8 | public func Initialize(component: ref, suspend: Bool) -> Void { 9 | this.component = component; 10 | this.suspendMode = suspend; 11 | } 12 | // returns true if finished 13 | public func Update(timeDelta: Float) -> Bool { 14 | this.time += timeDelta; 15 | return false; 16 | } 17 | } 18 | 19 | public class FlightTrickAileronRoll extends FlightTrick { 20 | private let direction: Float; 21 | public static func Create(component: ref, direction: Float) -> ref { 22 | let self = new FlightTrickAileronRoll(); 23 | self.Initialize(component, true); 24 | self.direction = direction; 25 | return self; 26 | } 27 | public func Update(timeDelta: Float) -> Bool { 28 | if this.time < 0.3 { 29 | this.force = this.component.stats.d_localUp * 9.81000042; 30 | if this.time < 0.3 { 31 | this.torque.Y = 75.0 * this.direction; 32 | } 33 | return super.Update(timeDelta); 34 | } else { 35 | return true; 36 | } 37 | } 38 | } -------------------------------------------------------------------------------- /src/redscript/Module.reds.in: -------------------------------------------------------------------------------- 1 | module LetThereBeFlight 2 | 3 | public func GetVersionString() -> String { 4 | return "v@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@"; 5 | } 6 | 7 | public func GetVersion() -> Int32 { 8 | return @PROJECT_VERSION_MAJOR@ * 10000 + @PROJECT_VERSION_MINOR@ * 100 + @PROJECT_VERSION_PATCH@; 9 | } -------------------------------------------------------------------------------- /src/redscript/Utils/FlightUtils.reds: -------------------------------------------------------------------------------- 1 | public class FlightUtils { 2 | public static func SqrtCurve(input: Float) -> Float { 3 | if input != 0.0 { 4 | return SqrtF(AbsF(input)) * AbsF(input) / input; 5 | } else { 6 | return 0.0; 7 | } 8 | } 9 | public static func IdentCurve(input: Float) -> Float { 10 | return input; 11 | } 12 | 13 | public static func Right() -> Vector4 = new Vector4(1.0, 0.0, 0.0, 0.0); 14 | public static func Left() -> Vector4 = new Vector4(-1.0, 0.0, 0.0, 0.0); 15 | public static func Forward() -> Vector4 = new Vector4(0.0, 1.0, 0.0, 0.0); 16 | public static func Backward() -> Vector4 = new Vector4(0.0, -1.0, 0.0, 0.0); 17 | public static func Up() -> Vector4 = new Vector4(0.0, 0.0, 1.0, 0.0); 18 | public static func Down() -> Vector4 = new Vector4(0.0, 0.0, -1.0, 0.0); 19 | 20 | public static func ElectricBlue() -> HDRColor = new HDRColor(0.368627, 0.964706, 1.0, 1.0) 21 | public static func Bittersweet() -> HDRColor = new HDRColor(1.1761, 0.3809, 0.3476, 1.0) 22 | public static func Dandelion() -> HDRColor = new HDRColor(1.1192, 0.8441, 0.2565, 1.0) 23 | public static func LightGreen() -> HDRColor = new HDRColor(0.113725, 0.929412, 0.513726, 1.0) 24 | public static func BlackPearl() -> HDRColor = new HDRColor(0.054902, 0.054902, 0.090196, 1.0) 25 | 26 | public static func RedOxide() -> HDRColor = new HDRColor(0.411765, 0.086275, 0.090196, 1.0) 27 | public static func Bordeaux() -> HDRColor = new HDRColor(0.262745, 0.086275, 0.094118, 1.0) 28 | 29 | public static func PureBlack() -> HDRColor = new HDRColor(0.0, 0.0, 0.0, 1.0) 30 | public static func PureWhite() -> HDRColor = new HDRColor(1.0, 1.0, 1.0, 1.0) 31 | } -------------------------------------------------------------------------------- /src/tweaks/vehicle_flight.tweak: -------------------------------------------------------------------------------- 1 | playerStateMachineInputContext.vehicleFlightContext : playerStateMachineInputContext.abstractVehicleContext 2 | { 3 | CName forceInputContext = "VehicleFlight"; 4 | } 5 | 6 | playerStateMachineDefinitions.InputContext { 7 | states += [ "vehicleFlightContext" ]; 8 | } 9 | 10 | player.vehicle 11 | { 12 | bool canEnterVehicleFlight = true; 13 | } 14 | 15 | playerStateMachineVehicle.drive { 16 | transitionTo += [ "flight" ]; 17 | transitionToCondition += [ "ToFlight" ]; 18 | } 19 | 20 | playerStateMachineVehicle.scene { 21 | transitionTo += [ "flight" ]; 22 | transitionToCondition += [ "ToFlight" ]; 23 | } 24 | 25 | photo_mode.general { 26 | onlyFPPPhotoModeInPlayerStates += [ "Vehicle.flight" ]; 27 | } 28 | 29 | playerStateMachineVehicle.drive : playerStateMachineVehicle.abstractSlotState 30 | { 31 | string stateBodyClassName = "VehicleFlight"; 32 | bool hasOnEnter = true; 33 | bool hasOnExit = true; 34 | bool hasEnterCondition = true; 35 | bool hasOnUpdate = true; 36 | CName onEnterCameraParamsName = "Vehicle"; 37 | CName onEnterCameraParamsNameSecondary = "Bike"; 38 | string[] transitionTo = 39 | [ 40 | "scene", "switchSeats", "driverCombatFirearms", "driverCombatMountedWeapons", "deathExiting", "collisionExiting", "coolExiting", "slideExiting", "speedExiting", "combatExiting", "exiting" 41 | ]; 42 | string[] transitionCondition = 43 | [ 44 | "", "=", "=", "=", "", "", "", "", "", "", "" 45 | ]; 46 | } 47 | 48 | playerStateMachineDefinitions.Vehicle 49 | { 50 | states += [ "flight"]; 51 | } -------------------------------------------------------------------------------- /src/wolvenkit/install_log.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | C:\Program Files (x86)\Steam\steamapps\common\Cyberpunk 2077\archive\pc\mod\let_there_be_flight.archive 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/wolvenkit/let_there_be_flight.cpmodproj: -------------------------------------------------------------------------------- 1 | Jack Humbertlet_there_be_flight -------------------------------------------------------------------------------- /src/wolvenkit/packed/archive/pc/mod/let_there_be_flight.archive: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/packed/archive/pc/mod/let_there_be_flight.archive -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/effects/aim.effect: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/effects/aim.effect -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/effects/engine.effect: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/effects/engine.effect -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/effects/flame.effect: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/effects/flame.effect -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/effects/ion_thruster.effect: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/effects/ion_thruster.effect -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/effects/ion_thruster_with_engine.effect: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/effects/ion_thruster_with_engine.effect -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/effects/retro_thruster.effect: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/effects/retro_thruster.effect -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/effects/sparks.effect: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/effects/sparks.effect -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/effects/thruster_mark.effect: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/effects/thruster_mark.effect -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/effects/thruster_sparks.effect: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/effects/thruster_sparks.effect -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/localization/let_there_be_flight.en-us.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/localization/let_there_be_flight.en-us.json -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/localization/let_there_be_flight.es-es.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/localization/let_there_be_flight.es-es.json -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/materials/aim.mi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/materials/aim.mi -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/meshes/aim.mesh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/meshes/aim.mesh -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/meshes/chassis.mesh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/meshes/chassis.mesh -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/meshes/engine_corpo.mesh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/meshes/engine_corpo.mesh -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/meshes/engine_nomad.mesh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/meshes/engine_nomad.mesh -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/meshes/flight_ui.mesh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/meshes/flight_ui.mesh -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/meshes/flight_ui_info.mesh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/meshes/flight_ui_info.mesh -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/meshes/thruster_core_round.mesh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/meshes/thruster_core_round.mesh -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/meshes/thruster_trail_round.mesh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/meshes/thruster_trail_round.mesh -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/particles/aim.particle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/particles/aim.particle -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/particles/ion_thruster_engine.particle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/particles/ion_thruster_engine.particle -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/particles/ion_thruster_flame.particle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/particles/ion_thruster_flame.particle -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/textures/engine_corpo_pattern_d.xbm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/textures/engine_corpo_pattern_d.xbm -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/textures/engine_corpo_pattern_n.xbm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/textures/engine_corpo_pattern_n.xbm -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/textures/flight_pitch.inkatlas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/textures/flight_pitch.inkatlas -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/textures/flight_pitch.xbm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/textures/flight_pitch.xbm -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/textures/flight_pitch_major.inkatlas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/textures/flight_pitch_major.inkatlas -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/textures/flight_pitch_major.xbm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/textures/flight_pitch_major.xbm -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/textures/flight_pitch_mask.inkatlas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/textures/flight_pitch_mask.inkatlas -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/textures/flight_pitch_mask.xbm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/textures/flight_pitch_mask.xbm -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/textures/flight_pitch_minor.inkatlas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/textures/flight_pitch_minor.inkatlas -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/textures/flight_pitch_minor.xbm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/textures/flight_pitch_minor.xbm -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/widgets/flight_hud.inkwidget: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/widgets/flight_hud.inkwidget -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/widgets/flight_hud_animations.inkanim: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/widgets/flight_hud_animations.inkanim -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/widgets/flight_ui.bk.inkwidget: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/widgets/flight_ui.bk.inkwidget -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/widgets/flight_ui.inkwidget: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/widgets/flight_ui.inkwidget -------------------------------------------------------------------------------- /src/wolvenkit/source/archive/user/jackhumbert/widgets/hud_flight.inkhud: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/archive/user/jackhumbert/widgets/hud_flight.inkhud -------------------------------------------------------------------------------- /src/wolvenkit/source/raw/engine/physics/collision_groups.json.json: -------------------------------------------------------------------------------- 1 | { 2 | "Header": { 3 | "WolvenKitVersion": "8.7.0", 4 | "WKitJsonVersion": "0.0.3", 5 | "GameVersion": 1600, 6 | "ExportedDateTime": "2023-03-24T00:38:13.3142287Z", 7 | "DataType": "CR2W", 8 | "ArchiveFileName": "C:\\Users\\Jack\\Documents\\cyberpunk\\flight_control\\src\\wolvenkit\\source\\archive\\engine\\physics\\collision_groups.json" 9 | }, 10 | "Data": { 11 | "Version": 195, 12 | "BuildVersion": 0, 13 | "RootChunk": { 14 | "$type": "JsonResource", 15 | "cookingPlatform": "PLATFORM_PC", 16 | "root": { 17 | "HandleId": "0", 18 | "Data": { 19 | "$type": "physicsCollisionFilterResource", 20 | "collisionGroups": { 21 | "Size": 19, 22 | "MaxSize": 64, 23 | "Elements": [ 24 | "Player", 25 | "AI", 26 | "Static", 27 | "Dynamic", 28 | "Vehicle", 29 | "Tank", 30 | "Destructible", 31 | "Terrain", 32 | "Collider", 33 | "Particle", 34 | "Ragdoll", 35 | "Ragdoll Inner", 36 | "Debris", 37 | "Cloth", 38 | "PlayerBlocker", 39 | "VehicleBlocker", 40 | "TankBlocker", 41 | "DestructibleCluster", 42 | "NPCBlocker" 43 | ] 44 | }, 45 | "collisionPresetJson": { 46 | "DepotPath": "engine\\physics\\collision_presets.json", 47 | "Flags": "Default" 48 | }, 49 | "overridesJson": { 50 | "DepotPath": "engine\\physics\\collision_overrides.json", 51 | "Flags": "Default" 52 | }, 53 | "queryGroups": { 54 | "Size": 11, 55 | "MaxSize": 64, 56 | "Elements": [ 57 | "Visibility", 58 | "Audible", 59 | "Interaction", 60 | "Shooting", 61 | "Water", 62 | "NetworkDevice", 63 | "NPCTraceObstacle", 64 | "PhotoModeCamera", 65 | "FoliageDestructible", 66 | "NPCNameplate", 67 | "NPCCollision" 68 | ] 69 | }, 70 | "queryPresetJson": { 71 | "DepotPath": "engine\\physics\\query_presets.json", 72 | "Flags": "Default" 73 | } 74 | } 75 | } 76 | }, 77 | "EmbeddedFiles": [] 78 | } 79 | } -------------------------------------------------------------------------------- /src/wolvenkit/source/raw/types/FlyinInkGameController.cs: -------------------------------------------------------------------------------- 1 | using static WolvenKit.RED4.Types.Enums; 2 | 3 | namespace WolvenKit.RED4.Types 4 | { 5 | public partial class FlyinInkGameController : DeviceInkGameControllerBase 6 | { 7 | [Ordinal(16)] 8 | [RED("stationNameWidget")] 9 | public inkTextWidgetReference StationNameWidget 10 | { 11 | get => GetPropertyValue(); 12 | set => SetPropertyValue(value); 13 | } 14 | 15 | [Ordinal(17)] 16 | [RED("stationLogoWidget")] 17 | public inkImageWidgetReference StationLogoWidget 18 | { 19 | get => GetPropertyValue(); 20 | set => SetPropertyValue(value); 21 | } 22 | 23 | public FlyinInkGameController() 24 | { 25 | StationNameWidget = new(); 26 | StationLogoWidget = new(); 27 | 28 | PostConstruct(); 29 | } 30 | 31 | partial void PostConstruct(); 32 | } 33 | } -------------------------------------------------------------------------------- /src/wolvenkit/source/raw/user/jackhumbert/meshes/aim.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/raw/user/jackhumbert/meshes/aim.glb -------------------------------------------------------------------------------- /src/wolvenkit/source/raw/user/jackhumbert/meshes/chassis.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/raw/user/jackhumbert/meshes/chassis.glb -------------------------------------------------------------------------------- /src/wolvenkit/source/raw/user/jackhumbert/meshes/engine_corpo.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/raw/user/jackhumbert/meshes/engine_corpo.glb -------------------------------------------------------------------------------- /src/wolvenkit/source/raw/user/jackhumbert/meshes/engine_nomad.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/raw/user/jackhumbert/meshes/engine_nomad.glb -------------------------------------------------------------------------------- /src/wolvenkit/source/raw/user/jackhumbert/meshes/flight_ui.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/raw/user/jackhumbert/meshes/flight_ui.glb -------------------------------------------------------------------------------- /src/wolvenkit/source/raw/user/jackhumbert/meshes/flight_ui_info.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/raw/user/jackhumbert/meshes/flight_ui_info.glb -------------------------------------------------------------------------------- /src/wolvenkit/source/raw/user/jackhumbert/meshes/thruster_core_round.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/raw/user/jackhumbert/meshes/thruster_core_round.glb -------------------------------------------------------------------------------- /src/wolvenkit/source/raw/user/jackhumbert/meshes/thruster_trail_round.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/raw/user/jackhumbert/meshes/thruster_trail_round.glb -------------------------------------------------------------------------------- /src/wolvenkit/source/raw/user/jackhumbert/textures/engine_corpo_pattern_d.tga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/raw/user/jackhumbert/textures/engine_corpo_pattern_d.tga -------------------------------------------------------------------------------- /src/wolvenkit/source/raw/user/jackhumbert/textures/engine_corpo_pattern_n.tga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/raw/user/jackhumbert/textures/engine_corpo_pattern_n.tga -------------------------------------------------------------------------------- /src/wolvenkit/source/raw/user/jackhumbert/textures/flight_pitch.dds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/raw/user/jackhumbert/textures/flight_pitch.dds -------------------------------------------------------------------------------- /src/wolvenkit/source/raw/user/jackhumbert/textures/flight_pitch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/raw/user/jackhumbert/textures/flight_pitch.png -------------------------------------------------------------------------------- /src/wolvenkit/source/raw/user/jackhumbert/textures/flight_pitch.tga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/raw/user/jackhumbert/textures/flight_pitch.tga -------------------------------------------------------------------------------- /src/wolvenkit/source/raw/user/jackhumbert/textures/flight_pitch.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/raw/user/jackhumbert/textures/flight_pitch.tiff -------------------------------------------------------------------------------- /src/wolvenkit/source/raw/user/jackhumbert/textures/flight_pitch_legends.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/raw/user/jackhumbert/textures/flight_pitch_legends.png -------------------------------------------------------------------------------- /src/wolvenkit/source/raw/user/jackhumbert/textures/flight_pitch_major.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/raw/user/jackhumbert/textures/flight_pitch_major.png -------------------------------------------------------------------------------- /src/wolvenkit/source/raw/user/jackhumbert/textures/flight_pitch_mask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/raw/user/jackhumbert/textures/flight_pitch_mask.png -------------------------------------------------------------------------------- /src/wolvenkit/source/raw/user/jackhumbert/textures/flight_pitch_minor.dds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/raw/user/jackhumbert/textures/flight_pitch_minor.dds -------------------------------------------------------------------------------- /src/wolvenkit/source/raw/user/jackhumbert/textures/flight_pitch_minor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackhumbert/let_there_be_flight/4117943a72afe3c6add8711da93226020ff0dc3f/src/wolvenkit/source/raw/user/jackhumbert/textures/flight_pitch_minor.png -------------------------------------------------------------------------------- /todo.md: -------------------------------------------------------------------------------- 1 | ? screen effect at high speed 2 | ? screen effect at high g 3 | * disable passenger exit until not in flight 4 | * special convos? --------------------------------------------------------------------------------