diff --git a/data b/data index 3b99a621..41c03fda 160000 --- a/data +++ b/data @@ -1 +1 @@ -Subproject commit 3b99a62185c4aba3c6c7507dfbbbcf5bcbce3ba2 +Subproject commit 41c03fda84e6eab6cd105fffd77a26cde4c1fe12 diff --git a/src/level/parser/parserparam.cpp b/src/level/parser/parserparam.cpp index fb3c82f7..37773efa 100644 --- a/src/level/parser/parserparam.cpp +++ b/src/level/parser/parserparam.cpp @@ -467,6 +467,8 @@ ObjectType CLevelParserParam::ToObjectType(std::string value) if (value == "Barrier1" ) return OBJECT_BARRIER1; if (value == "Barrier2" ) return OBJECT_BARRIER2; if (value == "Barrier3" ) return OBJECT_BARRIER3; + if (value == "Barricade0" ) return OBJECT_BARRICADE0; + if (value == "Barricade1" ) return OBJECT_BARRICADE1; if (value == "Teen0" ) return OBJECT_TEEN0; if (value == "Teen1" ) return OBJECT_TEEN1; if (value == "Teen2" ) return OBJECT_TEEN2; @@ -662,6 +664,8 @@ const std::string CLevelParserParam::FromObjectType(ObjectType value) if (value == OBJECT_BARRIER1 ) return "Barrier1"; if (value == OBJECT_BARRIER2 ) return "Barrier2"; if (value == OBJECT_BARRIER3 ) return "Barrier3"; + if (value == OBJECT_BARRICADE0 ) return "Barricade0"; + if (value == OBJECT_BARRICADE1 ) return "Barricade1"; if (value == OBJECT_TEEN0 ) return "Teen0"; if (value == OBJECT_TEEN1 ) return "Teen1"; if (value == OBJECT_TEEN2 ) return "Teen2"; diff --git a/src/object/object_factory.cpp b/src/object/object_factory.cpp index 76e9d59d..0b16e171 100644 --- a/src/object/object_factory.cpp +++ b/src/object/object_factory.cpp @@ -149,6 +149,8 @@ CObjectUPtr CObjectFactory::CreateObject(const ObjectCreateParams& params) case OBJECT_BARRIER1: case OBJECT_BARRIER2: case OBJECT_BARRIER3: + case OBJECT_BARRICADE0: + case OBJECT_BARRICADE1: return CreateBarrier(params); case OBJECT_PLANT0: @@ -579,6 +581,48 @@ CObjectUPtr CObjectFactory::CreateBarrier(const ObjectCreateParams& params) obj->CreateShadowCircle(10.0f, 0.5f, Gfx::ENG_SHADOW_WORM); } + if ( type == OBJECT_BARRICADE0 ) + { + int rank = m_engine->CreateObject(); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); + obj->SetObjectRank(0, rank); + m_oldModelManager->AddModelReference("barricade0.mod", false, rank, obj->GetTeam()); + obj->SetPosition(pos); + obj->SetRotationY(angle); + + obj->AddCrashSphere(CrashSphere(Math::Vector( 3.5f, 3.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f)); + obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 3.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f)); + obj->AddCrashSphere(CrashSphere(Math::Vector(-3.5f, 3.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f)); + obj->AddCrashSphere(CrashSphere(Math::Vector( 3.5f, 6.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f)); + obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 6.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f)); + obj->AddCrashSphere(CrashSphere(Math::Vector(-3.5f, 6.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f)); + + obj->CreateShadowCircle(6.0f, 0.5f, Gfx::ENG_SHADOW_WORM); + } + + if ( type == OBJECT_BARRICADE1 ) + { + int rank = m_engine->CreateObject(); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); + obj->SetObjectRank(0, rank); + m_oldModelManager->AddModelReference("barricade1.mod", false, rank, obj->GetTeam()); + obj->SetPosition(pos); + obj->SetRotationY(angle); + + obj->AddCrashSphere(CrashSphere(Math::Vector( 8.5f, 3.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f)); + obj->AddCrashSphere(CrashSphere(Math::Vector( 3.5f, 3.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f)); + obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 3.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f)); + obj->AddCrashSphere(CrashSphere(Math::Vector(-3.5f, 3.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f)); + obj->AddCrashSphere(CrashSphere(Math::Vector(-8.5f, 3.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f)); + obj->AddCrashSphere(CrashSphere(Math::Vector( 8.5f, 6.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f)); + obj->AddCrashSphere(CrashSphere(Math::Vector( 3.5f, 6.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f)); + obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 6.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f)); + obj->AddCrashSphere(CrashSphere(Math::Vector(-3.5f, 6.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f)); + obj->AddCrashSphere(CrashSphere(Math::Vector(-8.5f, 6.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f)); + + obj->CreateShadowCircle(12.0f, 0.5f, Gfx::ENG_SHADOW_WORM); + } + pos = obj->GetPosition(); obj->SetPosition(pos); // to display the shadows immediately diff --git a/src/object/object_manager.cpp b/src/object/object_manager.cpp index 9483936a..a33a89fc 100644 --- a/src/object/object_manager.cpp +++ b/src/object/object_manager.cpp @@ -311,7 +311,9 @@ std::vector CObjectManager::RadarAll(CObject* pThis, Math::Vector this } if ( oType == OBJECT_BARRIER2 || - oType == OBJECT_BARRIER3 ) // barriers? + oType == OBJECT_BARRIER3 || + oType == OBJECT_BARRICADE0 || + oType == OBJECT_BARRICADE1 ) // barriers? { oType = OBJECT_BARRIER1; // any barrier } diff --git a/src/object/object_type.h b/src/object/object_type.h index 11d5763d..88c9587c 100644 --- a/src/object/object_type.h +++ b/src/object/object_type.h @@ -146,6 +146,8 @@ enum ObjectType OBJECT_BARRIER1 = 401, //!< Barrier1 OBJECT_BARRIER2 = 402, //!< Barrier2 OBJECT_BARRIER3 = 403, //!< Barrier3 + OBJECT_BARRICADE0 = 410, //!< Barricade0 + OBJECT_BARRICADE1 = 411, //!< Barricade1 OBJECT_MOTHER = 500, //!< AlienQueen OBJECT_EGG = 501, //!< AlienEgg OBJECT_ANT = 502, //!< AlienAnt diff --git a/src/object/old_object.cpp b/src/object/old_object.cpp index fb510d8d..0930f025 100644 --- a/src/object/old_object.cpp +++ b/src/object/old_object.cpp @@ -1047,7 +1047,7 @@ void COldObject::Read(CLevelParserLine* line) if (line->GetParam("pyro")->IsDefined()) m_engine->GetPyroManager()->Create(line->GetParam("pyro")->AsPyroType(), this); - SetBulletWall(line->GetParam("bulletWall")->AsBool(false)); + SetBulletWall(line->GetParam("bulletWall")->AsBool(IsBulletWallByDefault(m_type))); SetProxyActivate(line->GetParam("proxyActivate")->AsBool(false)); SetProxyDistance(line->GetParam("proxyDistance")->AsFloat(15.0f)*g_unit); @@ -3212,3 +3212,13 @@ bool COldObject::IsBulletWall() { return m_bulletWall; } + +bool COldObject::IsBulletWallByDefault(ObjectType type) +{ + if ( type == OBJECT_BARRICADE0 || + type == OBJECT_BARRICADE1 ) + { + return true; + } + return false; +} diff --git a/src/object/old_object.h b/src/object/old_object.h index bc2d0b0a..697e05db 100644 --- a/src/object/old_object.h +++ b/src/object/old_object.h @@ -311,6 +311,12 @@ protected: */ static bool IsSelectableByDefault(ObjectType type); + /** + * \brief Check if given object type should have bulletWall enabled by default + * \note This is a default value for the bulletWall= parameter and can still be overriden in the scene file + */ + static bool IsBulletWallByDefault(ObjectType type); + protected: Gfx::CEngine* m_engine; Gfx::CLightManager* m_lightMan;