diff --git a/CMakeLists.txt b/CMakeLists.txt index 20c5186a..ca072de9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,9 @@ project(OpenRW) set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11 -Wall" ) +# Make GLM use radians +add_definitions(-DGLM_FORCE_RADIANS) + add_subdirectory(datadump) add_subdirectory(rwgame) add_subdirectory(rwviewer) diff --git a/analyzer/main.cpp b/analyzer/main.cpp index 65d1fd9b..6d17b1d6 100644 --- a/analyzer/main.cpp +++ b/analyzer/main.cpp @@ -58,8 +58,8 @@ int main(int argc, char** argv) for (int i = 0; i < 16; i++) { uint8_t pixelIndex = 4 * (j*16 + i); - for (int y = 0; y < scaleUp; y++) { - for (int x = 0; x < scaleUp; x++) { + for (u_int32_t y = 0; y < scaleUp; y++) { + for (u_int32_t x = 0; x < scaleUp; x++) { img.setPixel((i*scaleUp)+x, (j*scaleUp)+y, { tex.body.palette[pixelIndex + 0], tex.body.palette[pixelIndex + 1], diff --git a/datadump/main.cpp b/datadump/main.cpp index 299c85c7..0cea7c40 100644 --- a/datadump/main.cpp +++ b/datadump/main.cpp @@ -163,7 +163,7 @@ void dumpModelFile(char* data) } } - for(int j = 0; j < geom.numtris; ++j) + for(size_t j = 0; j < geom.numtris; ++j) { auto tri = readStructure(data, dataI); std::cout << " Triangle " << std::dec diff --git a/rwengine/include/loaders/rwbinarystream.h b/rwengine/include/loaders/rwbinarystream.h index ff6c364d..d34c807b 100644 --- a/rwengine/include/loaders/rwbinarystream.h +++ b/rwengine/include/loaders/rwbinarystream.h @@ -71,7 +71,7 @@ namespace RW { BSTMatrix rotation; BSTVector3 position; - uint32_t index; + int32_t index; uint32_t matrixflags; // UNUSED BY ANYTHING. }; @@ -111,7 +111,7 @@ namespace RW }; }; - typedef glm::detail::tvec4 BSColor; + typedef glm::u8vec4 BSColor; struct BSGeometryColor { diff --git a/rwengine/include/render/Model.hpp b/rwengine/include/render/Model.hpp index b383eb17..79149230 100644 --- a/rwengine/include/render/Model.hpp +++ b/rwengine/include/render/Model.hpp @@ -86,7 +86,7 @@ public: struct Material { std::vector textures; - glm::detail::tvec4 colour; + glm::u8vec4 colour; uint8_t flags; diff --git a/rwengine/src/engine/GameData.cpp b/rwengine/src/engine/GameData.cpp index 5db7cae5..c072badb 100644 --- a/rwengine/src/engine/GameData.cpp +++ b/rwengine/src/engine/GameData.cpp @@ -188,7 +188,7 @@ void GameData::loadIMG(const std::string& name) std::string archivePath = datpath + name; if (imgLoader.load(archivePath)) { - for (int i = 0; i < imgLoader.getAssetCount(); i++) { + for (size_t i = 0; i < imgLoader.getAssetCount(); i++) { auto &asset = imgLoader.getAssetInfoByIndex(i); std::string filename = asset.name; diff --git a/rwengine/src/loaders/LoaderDFF.cpp b/rwengine/src/loaders/LoaderDFF.cpp index 6ef83bed..df569068 100644 --- a/rwengine/src/loaders/LoaderDFF.cpp +++ b/rwengine/src/loaders/LoaderDFF.cpp @@ -108,7 +108,7 @@ Model* LoaderDFF::loadFromMemory(char *data, GameData *gameData) } } - for (int j = 0; j < geometry.numtris; ++j) { + for (size_t j = 0; j < geometry.numtris; ++j) { readStructure(data, dataI); } @@ -245,7 +245,7 @@ Model* LoaderDFF::loadFromMemory(char *data, GameData *gameData) geom->subgeom[i].numIndices = plgHeader.numverts; geom->subgeom[i].start = sgstart; sgstart += plgHeader.numverts; - for (int j = 0; j < plgHeader.numverts; ++j) { + for (size_t j = 0; j < plgHeader.numverts; ++j) { geom->subgeom[i].indices[j] = extsec.readSubStructure(meshplgI); meshplgI += sizeof(uint32_t); } diff --git a/rwengine/src/loaders/LoaderIDE.cpp b/rwengine/src/loaders/LoaderIDE.cpp index fd1db9f4..f72aca16 100644 --- a/rwengine/src/loaders/LoaderIDE.cpp +++ b/rwengine/src/loaders/LoaderIDE.cpp @@ -47,6 +47,7 @@ bool LoaderIDE::load(const std::string &filename) std::stringstream strstream(line); switch (section) { + default: break; case OBJS: case TOBJ: { // Supports Type 1, 2 and 3 std::shared_ptr objs(new ObjectData); diff --git a/rwengine/src/loaders/LoaderIFP.cpp b/rwengine/src/loaders/LoaderIFP.cpp index 89ed6e75..be85bd28 100644 --- a/rwengine/src/loaders/LoaderIFP.cpp +++ b/rwengine/src/loaders/LoaderIFP.cpp @@ -59,7 +59,7 @@ bool LoaderIFP::loadFromMemory(char *data) ANPK* fileRoot = read(data, dataI); std::string listname = readString(data, dataI); - for( size_t a = 0; a < fileRoot->info.entries; ++a ) { + for( int a = 0; a < fileRoot->info.entries; ++a ) { // something about a name? /*NAME* n =*/ read(data, dataI); std::string animname = readString(data, dataI); @@ -72,7 +72,7 @@ bool LoaderIFP::loadFromMemory(char *data) DGAN* animroot = read(data, dataI); std::string infoname = readString(data, dataI); - for( size_t c = 0; c < animroot->info.entries; ++c ) { + for( int c = 0; c < animroot->info.entries; ++c ) { size_t start = data_offs; CPAN* cpan = read(data, dataI); ANIM* frames = read(data, dataI); @@ -90,7 +90,7 @@ bool LoaderIFP::loadFromMemory(char *data) if(type == "KR00") { bonedata->type = AnimationBone::R00; - for( size_t d = 0; d < frames->frames; ++d ) { + for( int d = 0; d < frames->frames; ++d ) { glm::quat q = glm::conjugate(*read(data, dataI)); time = *read(data,dataI); bonedata->frames.push_back({ @@ -103,7 +103,7 @@ bool LoaderIFP::loadFromMemory(char *data) } else if(type == "KRT0") { bonedata->type = AnimationBone::RT0; - for( size_t d = 0; d < frames->frames; ++d ) { + for( int d = 0; d < frames->frames; ++d ) { glm::quat q = glm::conjugate(*read(data, dataI)); glm::vec3 p = *read(data, dataI); time = *read(data,dataI); @@ -117,7 +117,7 @@ bool LoaderIFP::loadFromMemory(char *data) } else if(type == "KRTS") { bonedata->type = AnimationBone::RTS; - for( size_t d = 0; d < frames->frames; ++d ) { + for( int d = 0; d < frames->frames; ++d ) { glm::quat q = glm::conjugate(*read(data, dataI)); glm::vec3 p = *read(data, dataI); glm::vec3 s = *read(data, dataI); diff --git a/rwengine/src/objects/GTAVehicle.cpp b/rwengine/src/objects/GTAVehicle.cpp index 7a87e7e9..0e986da0 100644 --- a/rwengine/src/objects/GTAVehicle.cpp +++ b/rwengine/src/objects/GTAVehicle.cpp @@ -144,7 +144,7 @@ glm::quat GTAVehicle::getRotation() const void GTAVehicle::tick(float dt) { if(physVehicle) { - for(size_t w = 0; w < physVehicle->getNumWheels(); ++w) { + for(int w = 0; w < physVehicle->getNumWheels(); ++w) { btWheelInfo& wi = physVehicle->getWheelInfo(w); if( info->handling.driveType == VehicleHandlingInfo::All || (info->handling.driveType == VehicleHandlingInfo::Forward && wi.m_bIsFrontWheel) || diff --git a/rwengine/src/render/GTARenderer.cpp b/rwengine/src/render/GTARenderer.cpp index 23d8c15a..6d1c66ef 100644 --- a/rwengine/src/render/GTARenderer.cpp +++ b/rwengine/src/render/GTARenderer.cpp @@ -405,7 +405,6 @@ void GTARenderer::renderWorld() void GTARenderer::renderNamedFrame(Model* model, const glm::mat4 &matrix, const std::string& name) { - size_t n = 0; for (const ModelFrame* f : model->frames) { const std::string& fname = f->getName(); diff --git a/rwgame/State.hpp b/rwgame/State.hpp index 1cca1a2a..010a062f 100644 --- a/rwgame/State.hpp +++ b/rwgame/State.hpp @@ -62,6 +62,7 @@ struct State break; case sf::Event::KeyPressed: switch(e.key.code) { + default: break; case sf::Keyboard::Up: m->move(-1); break; @@ -140,4 +141,4 @@ struct StateManager } }; -#endif \ No newline at end of file +#endif diff --git a/rwgame/main.cpp b/rwgame/main.cpp index 03a8593c..e9537929 100644 --- a/rwgame/main.cpp +++ b/rwgame/main.cpp @@ -135,7 +135,7 @@ std::map> Commands = { } auto spawnpos = hit + normal; - auto vehicle = gta->createVehicle(it->first, spawnpos, glm::quat(glm::vec3(0.f, 0.f, -plyLook.x * PiOver180))); + gta->createVehicle(it->first, spawnpos, glm::quat(glm::vec3(0.f, 0.f, -plyLook.x * PiOver180))); } } }, diff --git a/rwviewer/DFFFramesTreeModel.cpp b/rwviewer/DFFFramesTreeModel.cpp index bb6854a6..69b8ab58 100644 --- a/rwviewer/DFFFramesTreeModel.cpp +++ b/rwviewer/DFFFramesTreeModel.cpp @@ -42,7 +42,7 @@ QModelIndex DFFFramesTreeModel::parent(const QModelIndex& child) const if(c->getParent()) { auto cp = c->getParent(); if(cp->getParent()) { - for(int i = 0; i < cp->getParent()->getChildren().size(); ++i) { + for(size_t i = 0; i < cp->getParent()->getChildren().size(); ++i) { if(cp->getParent()->getChildren()[i] == c->getParent()) { return createIndex(i, 0, c->getParent()); } diff --git a/tests/test_archive.cpp b/tests/test_archive.cpp index 7bf75642..15270190 100644 --- a/tests/test_archive.cpp +++ b/tests/test_archive.cpp @@ -8,7 +8,7 @@ BOOST_AUTO_TEST_CASE(test_open_archive) { LoaderIMG loader; - BOOST_REQUIRE( loader.load("test_data/models/gta3") ); + BOOST_REQUIRE( loader.load(Global::getGamePath() + "/models/gta3") ); BOOST_CHECK( loader.getAssetCount() > 0 ); diff --git a/tests/test_globals.hpp b/tests/test_globals.hpp index 3307f167..87fbae05 100644 --- a/tests/test_globals.hpp +++ b/tests/test_globals.hpp @@ -4,7 +4,7 @@ #include #include -// Many tests require OpenGL be functional, seems like a reasonable solution. +#define ENV_GAME_PATH_NAME ("OPENRW_GAME_PATH") class Global { @@ -16,7 +16,7 @@ public: wnd.create(sf::VideoMode(640, 360), "Testing"); glewExperimental = GL_TRUE; glewInit(); - e = new GameWorld("test_data"); + e = new GameWorld(getGamePath()); e->gameData.loadIMG("/models/gta3"); e->load(); @@ -31,6 +31,13 @@ public: wnd.close(); delete e; } + + static std::string getGamePath() + { + // TODO: Is this "the way to do it" on windows. + auto v = getenv(ENV_GAME_PATH_NAME); + return v ? v : ""; + } static Global& get() { diff --git a/tests/test_loaderdff.cpp b/tests/test_loaderdff.cpp index e4dd0f67..fe41a5dc 100644 --- a/tests/test_loaderdff.cpp +++ b/tests/test_loaderdff.cpp @@ -8,7 +8,7 @@ BOOST_AUTO_TEST_CASE(test_open_dff) { LoaderIMG loader; - BOOST_REQUIRE( loader.load("test_data/models/gta3") ); + BOOST_REQUIRE( loader.load(Global::getGamePath() + "/models/gta3") ); auto d = loader.loadToMemory("landstal.dff");