Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ChaosMod: Enable (almost) all warnings for GCC/Clang & treat all of them #3708

Merged
merged 2 commits into from
Feb 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions ChaosMod/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
cmake_minimum_required(VERSION 3.13)

cmake_minimum_required(VERSION 3.31)
project(ChaosMod)

file(GLOB ROOT_SRC ${PROJECT_SOURCE_DIR}/*.cpp)
Expand All @@ -12,6 +11,7 @@ target_precompile_headers(ChaosMod PUBLIC stdafx.cpp)

set_target_properties(ChaosMod PROPERTIES SUFFIX ".asi")
set_target_properties(ChaosMod PROPERTIES CXX_STANDARD 20)
set_target_properties(ChaosMod PROPERTIES CXX_SCAN_FOR_MODULES OFF)

target_compile_definitions(ChaosMod PUBLIC $<$<CONFIG:Debug>:CHAOSDEBUG>)
target_compile_definitions(ChaosMod PUBLIC NDEBUG)
Expand All @@ -37,9 +37,9 @@ target_link_directories(ChaosMod PUBLIC ${PROJECT_SOURCE_DIR}/../vendor/lua)
target_link_libraries(ChaosMod PUBLIC ${link_libs})

if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
target_compile_options(ChaosMod PUBLIC -DUNICODE -D_UNICODE -DNOMINMAX /Zi /GT)
target_compile_options(ChaosMod PUBLIC /Zi /GT /W2 /WX -DUNICODE -D_UNICODE -DNOMINMAX -D_CRT_SECURE_NO_WARNINGS)
target_link_options(ChaosMod PUBLIC /DEBUG /OPT:REF /OPT:ICF)
else()
target_compile_options(ChaosMod PUBLIC -municode)
target_compile_options(ChaosMod PUBLIC -municode -flarge-source-files -Werror -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wno-unused-variable -Wno-maybe-uninitialized -Wno-array-bounds -Wno-unused-but-set-variable)
target_link_options(ChaosMod PUBLIC -static)
endif()
30 changes: 15 additions & 15 deletions ChaosMod/Components/CrossingChallenge.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
#include "Components/EffectDispatchTimer.h"
#include "Main.h"
#include "Memory/WeaponPool.h"
#include "Util/ScriptText.h"
#include "Util/OptionsManager.h"
#include "Util/ScriptText.h"

void CrossingChallenge::SetStartParams()
{
Expand All @@ -14,8 +14,8 @@ void CrossingChallenge::SetStartParams()
if (m_StartVehicleHash)
{
LoadModel(m_StartVehicleHash);
Vehicle vehicle = CREATE_VEHICLE(m_StartVehicleHash, m_StartLocation.x, m_StartLocation.y,
m_StartLocation.z, m_StartHeading, true, false, false);
Vehicle vehicle = CREATE_VEHICLE(m_StartVehicleHash, m_StartLocation.x, m_StartLocation.y, m_StartLocation.z,
m_StartHeading, true, false, false);
SET_PED_INTO_VEHICLE(player, vehicle, -1);
}

Expand Down Expand Up @@ -59,8 +59,8 @@ void CrossingChallenge::ControlRespawn()
SET_TIME_SCALE(1.f);
ANIMPOSTFX_STOP_ALL();
NETWORK_REQUEST_CONTROL_OF_ENTITY(player);
NETWORK_RESURRECT_LOCAL_PLAYER(m_StartLocation.x, m_StartLocation.y, m_StartLocation.z, m_StartHeading,
false, false, false);
NETWORK_RESURRECT_LOCAL_PLAYER(m_StartLocation.x, m_StartLocation.y, m_StartLocation.z, m_StartHeading, false,
false, false);
WAIT(2000);
if (vehicle)
{
Expand All @@ -86,15 +86,15 @@ void CrossingChallenge::ControlRespawn()
DISPLAY_HUD(true);
FREEZE_ENTITY_POSITION(player, false);

m_TickCount = 0;
m_TickCount = 0;
m_EffectsCount = 0;
m_TimerStarted = false;
}
}

static bool LoadScaleform(int &handle, bool &loading, const std::string &name)
{
if (!handle || !loading && !HAS_SCALEFORM_MOVIE_LOADED(handle))
if (!handle || (!loading && !HAS_SCALEFORM_MOVIE_LOADED(handle)))
{
handle = REQUEST_SCALEFORM_MOVIE(name.c_str());
loading = true;
Expand Down Expand Up @@ -200,12 +200,12 @@ void CrossingChallenge::SaveConfig()
m_ConfigFile.SetValue<float>("StartLocationX", m_StartLocation.x);
m_ConfigFile.SetValue<float>("StartLocationY", m_StartLocation.y);
m_ConfigFile.SetValue<float>("StartLocationZ", m_StartLocation.z);
m_ConfigFile.SetValue<float>("StartVehicle", m_StartVehicleHash);
m_ConfigFile.SetValue<Hash>("StartHeading", m_StartHeading);
m_ConfigFile.SetValue<Hash>("StartVehicle", m_StartVehicleHash);
m_ConfigFile.SetValue<float>("StartHeading", m_StartHeading);
m_ConfigFile.SetValue<float>("StartCameraHeading", m_StartCameraHeading);
m_ConfigFile.SetValue<float>("StartWeather1", m_StartWeatherType1);
m_ConfigFile.SetValue<Hash>("StartWeather1", m_StartWeatherType1);
m_ConfigFile.SetValue<Hash>("StartWeather2", m_StartWeatherType2);
m_ConfigFile.SetValue<Hash>("StartWeatherPercent", m_StartWeatherPercent);
m_ConfigFile.SetValue<float>("StartWeatherPercent", m_StartWeatherPercent);
m_ConfigFile.SetValue<int>("StartHours", m_ClockHours);
m_ConfigFile.SetValue<int>("StartMinutes", m_ClockMinutes);
m_ConfigFile.SetValue<int>("StartSeconds", m_ClockSeconds);
Expand All @@ -224,7 +224,7 @@ void CrossingChallenge::SaveConfig()

void CrossingChallenge::CaptureStart()
{
Ped player = PLAYER_PED_ID();
Ped player = PLAYER_PED_ID();

m_StartEnabled = true;
m_StartLocation = GET_ENTITY_COORDS(player, false);
Expand Down Expand Up @@ -413,7 +413,7 @@ void CrossingChallenge::ShowHelpButtons()
DRAW_SCALEFORM_MOVIE_FULLSCREEN(m_ButtonsScaleformHandle, 255, 255, 255, 255, 0);
}

static void HandleBlip(Blip& blip, Vector3 coords, int color, const std::string &name)
static void HandleBlip(Blip &blip, Vector3 coords, int color, const std::string &name)
{
if (!blip || !DOES_BLIP_EXIST(blip))
{
Expand Down Expand Up @@ -524,7 +524,7 @@ void CrossingChallenge::OnRun()
GetComponent<EffectDispatchTimer>()->SetTimerEnabled(true);
}

m_TickCount = 0;
m_TickCount = 0;
m_EffectsCount = 0;
m_TimerStarted = false;

Expand Down Expand Up @@ -553,7 +553,7 @@ void CrossingChallenge::OnRun()
ControlPassed();

int deltaTicks = GetTickCount64() - m_LastTick;
m_LastTick = GetTickCount64();
m_LastTick = GetTickCount64();
if (m_TimerStarted && deltaTicks < 1000)
m_TickCount += deltaTicks;

Expand Down
20 changes: 10 additions & 10 deletions ChaosMod/Components/DebugMenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ DebugMenu::DebugMenu() : Component()
std::sort(m_Effects.begin(), m_Effects.end(),
[](const DebugEffect &a, const DebugEffect &b)
{
for (int idx = 0;; idx++)
for (size_t idx = 0;; idx++)
{
if (idx >= a.EffectName.size())
return false;
Expand Down Expand Up @@ -83,16 +83,16 @@ void DebugMenu::OnRun()
GetComponent<EffectDispatcher>()->DispatchEffect(m_Effects[m_SelectedIdx].Id);
}

float y = .1f;
WORD remainingDrawItems = MAX_VIS_ITEMS;
float y = .1f;
size_t remainingDrawItems = MAX_VIS_ITEMS;

for (int i = 0; remainingDrawItems > 0; i++)
for (int64_t i = 0; remainingDrawItems > 0; i++)
{
short overflow = MAX_VIS_ITEMS / 2 - (m_Effects.size() - 1 - m_SelectedIdx);
int64_t bias = MAX_VIS_ITEMS / 2 - (m_Effects.size() - 1 - m_SelectedIdx);

if (i < 0 || i < m_SelectedIdx - remainingDrawItems / 2 - (overflow > 0 ? overflow : 0))
if (i < static_cast<int64_t>(m_SelectedIdx - remainingDrawItems / 2 - (bias > 0 ? bias : 0)))
continue;
else if (i >= m_Effects.size())
else if (i >= static_cast<int64_t>(m_Effects.size()))
break;

BEGIN_TEXT_COMMAND_DISPLAY_TEXT("STRING");
Expand Down Expand Up @@ -153,7 +153,7 @@ void DebugMenu::OnKeyInput(DWORD key, bool repeated, bool isUpNow, bool isCtrlPr

break;
case VK_DOWN:
if (++m_SelectedIdx >= m_Effects.size())
if (static_cast<size_t>(++m_SelectedIdx) >= m_Effects.size())
m_SelectedIdx = 0;

break;
Expand All @@ -167,7 +167,7 @@ void DebugMenu::OnKeyInput(DWORD key, bool repeated, bool isUpNow, bool isCtrlPr
if (searchChar++ == SCHAR_MAX)
searchChar = SCHAR_MIN;

for (int idx = 0; idx < m_Effects.size(); idx++)
for (size_t idx = 0; idx < m_Effects.size(); idx++)
{
if (std::tolower(m_Effects[idx].EffectName[0]) == searchChar)
{
Expand All @@ -192,7 +192,7 @@ void DebugMenu::OnKeyInput(DWORD key, bool repeated, bool isUpNow, bool isCtrlPr
if (searchChar-- == SCHAR_MIN)
searchChar = SCHAR_MAX;

for (int idx = 0; idx < m_Effects.size(); idx++)
for (size_t idx = 0; idx < m_Effects.size(); idx++)
{
if (std::tolower(m_Effects[idx].EffectName[0]) == searchChar)
{
Expand Down
11 changes: 5 additions & 6 deletions ChaosMod/Components/DebugMenu.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,9 @@

#include "Effects/EffectIdentifier.h"

#include <cstdint>
#include <vector>

using DWORD = unsigned long;

class DebugMenu : public Component
{
struct DebugEffect
Expand All @@ -25,11 +24,11 @@ class DebugMenu : public Component

bool m_IsEnabled;

int m_SelectedIdx = 0;
bool m_Visible = false;
int64_t m_SelectedIdx = 0;
bool m_Visible = false;

DWORD m_RepeatTime = 0;
bool m_DispatchEffect = false;
std::uint32_t m_RepeatTime = 0;
bool m_DispatchEffect = false;

public:
DebugMenu();
Expand Down
13 changes: 7 additions & 6 deletions ChaosMod/Components/EffectDispatchTimer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ EffectDispatchTimer::EffectDispatchTimer(const std::array<BYTE, 3> &timerColor)
m_DistanceChaosState.EnableDistanceBasedEffectDispatch = g_OptionsManager.GetConfigValue(
{ "EnableDistanceBasedEffectDispatch" }, OPTION_DEFAULT_DISTANCE_BASED_DISPATCH_ENABLED);
m_DistanceChaosState.DistanceToActivateEffect =
g_OptionsManager.GetConfigValue({ "DistanceToActivateEffect" }, OPTION_DEFAULT_EFFECT_SPAWN_DISTANCE);
g_OptionsManager.GetConfigValue<float>({ "DistanceToActivateEffect" }, OPTION_DEFAULT_EFFECT_SPAWN_DISTANCE);
m_DistanceChaosState.DistanceType = static_cast<DistanceChaosState::TravelledDistanceType>(
g_OptionsManager.GetConfigValue({ "DistanceType" }, OPTION_DEFAULT_DISTANCE_TYPE));
}
Expand Down Expand Up @@ -128,16 +128,17 @@ std::uint64_t EffectDispatchTimer::GetTimer() const

void EffectDispatchTimer::ResetTimer()
{
m_TimerPercentage = 0.f;
m_Timer = GetTickCount64();
m_TimerPercentage = 0.f;
m_Timer = GetTickCount64();
m_DistanceChaosState.SavedPosition = GET_ENTITY_COORDS(PLAYER_PED_ID(), false);
}

int EffectDispatchTimer::GetRemainingTimerTime() const
{
return std::ceil(m_EffectSpawnTime
/ (!ComponentExists<MetaModifiers>() ? 1.f : GetComponent<MetaModifiers>()->TimerSpeedModifier)
* (1.f - m_TimerPercentage));
return static_cast<int>(
std::ceil(m_EffectSpawnTime
/ (!ComponentExists<MetaModifiers>() ? 1.f : GetComponent<MetaModifiers>()->TimerSpeedModifier)
* (1.f - m_TimerPercentage)));
}

bool EffectDispatchTimer::ShouldDispatchEffectNow() const
Expand Down
14 changes: 6 additions & 8 deletions ChaosMod/Components/EffectDispatcher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,7 @@ static void _DispatchEffect(EffectDispatcher *effectDispatcher, const EffectDisp
// Reset weight of this effect (or every effect in group) to reduce chance of same effect (group) happening multiple
// times in a row
if (effectData.GroupType.empty())
{
effectData.Weight = effectData.WeightMult;
}
else
{
for (auto &effectData : filteredEffects)
Expand Down Expand Up @@ -132,7 +130,7 @@ static void _DispatchEffect(EffectDispatcher *effectDispatcher, const EffectDisp
if (!entry.Suffix.empty())
effectName << " " << entry.Suffix;

int effectDuration = 0;
float effectDuration = 0;
switch (effectData.TimedType)
{
case EffectTimedType::NotTimed:
Expand Down Expand Up @@ -199,15 +197,15 @@ static void _OnRunEffects(LPVOID data)
while (true)
{
auto curTime = GetTickCount64();
int deltaTime =
float deltaTime =
!ComponentExists<EffectDispatchTimer>()
? 0
: (curTime - lastTime)
* (ComponentExists<MetaModifiers>() ? GetComponent<MetaModifiers>()->EffectDurationModifier
: 1.f);
// The game was paused
if (deltaTime > 1000)
deltaTime = 0;
if (deltaTime > 1000.f)
deltaTime = 0.f;

lastTime = curTime;

Expand Down Expand Up @@ -279,7 +277,7 @@ void EffectDispatcher::OnRun()
DrawEffectTexts();
}

void EffectDispatcher::UpdateEffects(int deltaTime)
void EffectDispatcher::UpdateEffects(float deltaTime)
{
if (m_ClearEffectsState != ClearEffectsState::None)
{
Expand Down Expand Up @@ -396,7 +394,7 @@ void EffectDispatcher::UpdateEffects(int deltaTime)
}
}

void EffectDispatcher::UpdateMetaEffects(int deltaTime)
void EffectDispatcher::UpdateMetaEffects(float deltaTime)
{
if (!SharedState.MetaEffectsEnabled)
return;
Expand Down
4 changes: 2 additions & 2 deletions ChaosMod/Components/EffectDispatcher.h
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,8 @@ class EffectDispatcher : public Component
void DispatchRandomEffect(DispatchEffectFlags dispatchEffectFlags = DispatchEffectFlag_None,
const std::string &suffix = {});

void UpdateEffects(int deltaTime);
void UpdateMetaEffects(int deltaTime);
void UpdateEffects(float deltaTime);
void UpdateMetaEffects(float deltaTime);

void ClearEffect(const EffectIdentifier &effectId);
enum ClearEffectsFlags
Expand Down
19 changes: 11 additions & 8 deletions ChaosMod/Components/LuaScripts.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,9 @@ class LuaHolder
return _TryParseVector3(&m_Data, x, y, z) ? LuaVector3(x, y, z) : LuaVector3();
}

#if defined(__clang__) || defined(__GNUC__)
#pragma GCC diagnostic ignored "-Wstrict-aliasing"
#endif
return *reinterpret_cast<T *>(&m_Data);
}

Expand Down Expand Up @@ -804,7 +807,7 @@ LuaScripts::ParseScript(std::string scriptName, const std::string &script, Parse
else
{
effectData.TimedType = EffectTimedType::Custom;
effectData.CustomTime = (std::max)(1, *durationOpt);
effectData.CustomTime = static_cast<float>(std::max(1, *durationOpt));
}
}
else
Expand All @@ -817,7 +820,7 @@ LuaScripts::ParseScript(std::string scriptName, const std::string &script, Parse
{
effectData.TimedType = static_cast<EffectTimedType>(settingOverrides["TimedType"]);
}
catch (nlohmann::json::exception)
catch (nlohmann::json::exception &)
{
}
try
Expand All @@ -826,21 +829,21 @@ LuaScripts::ParseScript(std::string scriptName, const std::string &script, Parse
if (effectData.CustomTime > 0)
effectData.TimedType = EffectTimedType::Custom;
}
catch (nlohmann::json::exception)
catch (nlohmann::json::exception &)
{
}

const sol::optional<int> &weightMultOpt = effectInfo["WeightMultiplier"];
if (weightMultOpt)
{
effectData.WeightMult = (std::max)(1, *weightMultOpt);
effectData.WeightMult = static_cast<float>(std::max(1, *weightMultOpt));
effectData.Weight = effectData.WeightMult;
}
try
{
effectData.WeightMult = settingOverrides["WeightMult"];
}
catch (nlohmann::json::exception)
catch (nlohmann::json::exception &)
{
}

Expand All @@ -855,7 +858,7 @@ LuaScripts::ParseScript(std::string scriptName, const std::string &script, Parse
{
effectData.SetAttribute(EffectAttributes::ExcludedFromVoting, settingOverrides["ExcludedFromVoting"]);
}
catch (nlohmann::json::exception)
catch (nlohmann::json::exception &)
{
}

Expand Down Expand Up @@ -914,7 +917,7 @@ LuaScripts::ParseScript(std::string scriptName, const std::string &script, Parse
{
effectData.ShortcutKeycode = settingOverrides["ShortcutKeycode"];
}
catch (nlohmann::json::exception)
catch (nlohmann::json::exception &)
{
}

Expand All @@ -924,7 +927,7 @@ LuaScripts::ParseScript(std::string scriptName, const std::string &script, Parse
if (!name.empty())
effectData.CustomName = name;
}
catch (nlohmann::json::exception)
catch (nlohmann::json::exception &)
{
}

Expand Down
Loading