[colobot] 19/377: Restored old Ceebot-Teen objects
Didier Raboud
odyx at moszumanska.debian.org
Wed Mar 30 13:33:53 UTC 2016
This is an automated email from the git hooks/post-receive script.
odyx pushed a commit to branch debian/master
in repository colobot.
commit 2cb2782c9d6fd83c9ce0f9fcf35633a54c99b9f7
Author: krzys-h <krzys_h at interia.pl>
Date: Mon Sep 28 22:08:04 2015 +0200
Restored old Ceebot-Teen objects
In preparations for new programming course
---
data | 2 +-
src/CMakeLists.txt | 1 +
src/graphics/engine/particle.cpp | 6 +-
src/graphics/engine/pyro.cpp | 27 +-
src/level/parser/parserparam.cpp | 90 ++++
src/object/auto/autokid.cpp | 204 +++++++++
src/object/auto/autokid.h | 48 +++
src/object/object_factory.cpp | 846 ++++++++++++++++++++++++++++++++++++++
src/object/object_factory.h | 1 +
src/object/object_type.h | 45 ++
src/object/old_object.cpp | 3 +-
src/object/task/taskterraform.cpp | 5 +-
src/script/cbottoken.cpp | 1 +
src/ui/controls/map.cpp | 26 +-
14 files changed, 1294 insertions(+), 11 deletions(-)
diff --git a/data b/data
index 14518ff..d90d0da 160000
--- a/data
+++ b/data
@@ -1 +1 @@
-Subproject commit 14518ff47694de5bf13a5f43826187cf3d8e40a1
+Subproject commit d90d0da944ad77e461dbc7b623491016f952fc21
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 5e445a9..5386509 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -147,6 +147,7 @@ set(BASE_SOURCES
object/auto/autoflag.cpp
object/auto/autohouston.cpp
object/auto/autojostle.cpp
+ object/auto/autokid.cpp
object/auto/autolabo.cpp
object/auto/automush.cpp
object/auto/autonest.cpp
diff --git a/src/graphics/engine/particle.cpp b/src/graphics/engine/particle.cpp
index afd9f4d..1903554 100644
--- a/src/graphics/engine/particle.cpp
+++ b/src/graphics/engine/particle.cpp
@@ -67,7 +67,9 @@ bool IsAlien(ObjectType type)
type == OBJECT_NEST ||
type == OBJECT_BULLET ||
type == OBJECT_EGG ||
- type == OBJECT_MOBILEtg );
+ type == OBJECT_MOBILEtg ||
+ type == OBJECT_TEEN28 ||
+ type == OBJECT_TEEN31 );
}
CParticle::CParticle(CEngine* engine)
@@ -3611,6 +3613,8 @@ CObject* CParticle::SearchObjectRay(Math::Vector pos, Math::Vector goal,
if ( type == PARTIRAY1 &&
oType != OBJECT_MOBILEtg &&
+ oType != OBJECT_TEEN28 &&
+ oType != OBJECT_TEEN31 &&
oType != OBJECT_ANT &&
oType != OBJECT_SPIDER &&
oType != OBJECT_BEE &&
diff --git a/src/graphics/engine/pyro.cpp b/src/graphics/engine/pyro.cpp
index 6803890..a0f962c 100644
--- a/src/graphics/engine/pyro.cpp
+++ b/src/graphics/engine/pyro.cpp
@@ -119,6 +119,12 @@ bool CPyro::Create(PyroType type, CObject* obj, float force)
m_lastParticleSmoke = 0.0f;
m_lightRank = -1;
+ if ( oType == OBJECT_TEEN28 ||
+ oType == OBJECT_TEEN31 )
+ {
+ m_pos.y = pos.y+1.0f;
+ }
+
// Seeking the position of the battery.
CObject* power = nullptr;
@@ -456,7 +462,9 @@ bool CPyro::Create(PyroType type, CObject* obj, float force)
m_type == PT_FRAGW ||
m_type == PT_SPIDER ||
m_type == PT_EGG ||
- (m_type == PT_EXPLOT && oType == OBJECT_MOBILEtg) )
+ (m_type == PT_EXPLOT && oType == OBJECT_MOBILEtg) ||
+ (m_type == PT_EXPLOT && oType == OBJECT_TEEN28 ) ||
+ (m_type == PT_EXPLOT && oType == OBJECT_TEEN31 ) )
{
for (int part = 0; part < OBJECTMAXPART; part++)
{
@@ -1414,7 +1422,8 @@ void CPyro::CreateTriangle(CObject* obj, ObjectType oType, int part)
oType == OBJECT_ATOMIC ||
oType == OBJECT_URANIUM ||
oType == OBJECT_TNT ||
- oType == OBJECT_BOMB )
+ oType == OBJECT_BOMB ||
+ oType == OBJECT_TEEN28)
{
percent = 0.75f;
}
@@ -1720,6 +1729,15 @@ void CPyro::BurnStart()
angle.y = 0.0f;
angle.z = (Math::Rand()-0.5f)*0.4f;
}
+ else if ( m_burnType == OBJECT_TEEN31 ) // basket?
+ {
+ pos.x = 0.0f;
+ pos.y = 0.0f;
+ pos.z = 0.0f;
+ angle.x = (Math::Rand()-0.5f)*0.8f;
+ angle.y = 0.0f;
+ angle.z = (Math::Rand()-0.5f)*0.2f;
+ }
else
{
pos.x = 0.0f;
@@ -2094,6 +2112,11 @@ void CPyro::BurnAddPart(int part, Math::Vector pos, Math::Vector angle)
void CPyro::BurnProgress()
{
+ if ( m_burnType == OBJECT_TEEN31 ) // basket?
+ {
+ m_object->SetScaleY(1.0f-m_progress*0.5f); // slight flattening
+ }
+
for (int i = 0; i < m_burnPartTotal; i++)
{
Math::Vector pos = m_burnPart[i].initialPos + m_progress*(m_burnPart[i].finalPos-m_burnPart[i].initialPos);
diff --git a/src/level/parser/parserparam.cpp b/src/level/parser/parserparam.cpp
index 1933f84..e6c361e 100644
--- a/src/level/parser/parserparam.cpp
+++ b/src/level/parser/parserparam.cpp
@@ -467,6 +467,51 @@ 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 == "Teen0" ) return OBJECT_TEEN0;
+ if (value == "Teen1" ) return OBJECT_TEEN1;
+ if (value == "Teen2" ) return OBJECT_TEEN2;
+ if (value == "Teen3" ) return OBJECT_TEEN3;
+ if (value == "Teen4" ) return OBJECT_TEEN4;
+ if (value == "Teen5" ) return OBJECT_TEEN5;
+ if (value == "Teen6" ) return OBJECT_TEEN6;
+ if (value == "Teen7" ) return OBJECT_TEEN7;
+ if (value == "Teen8" ) return OBJECT_TEEN8;
+ if (value == "Teen9" ) return OBJECT_TEEN9;
+ if (value == "Teen10" ) return OBJECT_TEEN10;
+ if (value == "Teen11" ) return OBJECT_TEEN11;
+ if (value == "Teen12" ) return OBJECT_TEEN12;
+ if (value == "Teen13" ) return OBJECT_TEEN13;
+ if (value == "Teen14" ) return OBJECT_TEEN14;
+ if (value == "Teen15" ) return OBJECT_TEEN15;
+ if (value == "Teen16" ) return OBJECT_TEEN16;
+ if (value == "Teen17" ) return OBJECT_TEEN17;
+ if (value == "Teen18" ) return OBJECT_TEEN18;
+ if (value == "Teen19" ) return OBJECT_TEEN19;
+ if (value == "Teen20" ) return OBJECT_TEEN20;
+ if (value == "Teen21" ) return OBJECT_TEEN21;
+ if (value == "Teen22" ) return OBJECT_TEEN22;
+ if (value == "Teen23" ) return OBJECT_TEEN23;
+ if (value == "Teen24" ) return OBJECT_TEEN24;
+ if (value == "Teen25" ) return OBJECT_TEEN25;
+ if (value == "Teen26" ) return OBJECT_TEEN26;
+ if (value == "Teen27" ) return OBJECT_TEEN27;
+ if (value == "Teen28" ) return OBJECT_TEEN28;
+ if (value == "Teen29" ) return OBJECT_TEEN29;
+ if (value == "Teen30" ) return OBJECT_TEEN30;
+ if (value == "Teen31" ) return OBJECT_TEEN31;
+ if (value == "Teen32" ) return OBJECT_TEEN32;
+ if (value == "Teen33" ) return OBJECT_TEEN33;
+ if (value == "Stone" ) return OBJECT_TEEN34;
+ if (value == "Teen35" ) return OBJECT_TEEN35;
+ if (value == "Teen36" ) return OBJECT_TEEN36;
+ if (value == "Teen37" ) return OBJECT_TEEN37;
+ if (value == "Teen38" ) return OBJECT_TEEN38;
+ if (value == "Teen39" ) return OBJECT_TEEN39;
+ if (value == "Teen40" ) return OBJECT_TEEN40;
+ if (value == "Teen41" ) return OBJECT_TEEN41;
+ if (value == "Teen42" ) return OBJECT_TEEN42;
+ if (value == "Teen43" ) return OBJECT_TEEN43;
+ if (value == "Teen44" ) return OBJECT_TEEN44;
if (value == "Quartz0" ) return OBJECT_QUARTZ0;
if (value == "Quartz1" ) return OBJECT_QUARTZ1;
if (value == "Quartz2" ) return OBJECT_QUARTZ2;
@@ -617,6 +662,51 @@ 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_TEEN0 ) return "Teen0";
+ if (value == OBJECT_TEEN1 ) return "Teen1";
+ if (value == OBJECT_TEEN2 ) return "Teen2";
+ if (value == OBJECT_TEEN3 ) return "Teen3";
+ if (value == OBJECT_TEEN4 ) return "Teen4";
+ if (value == OBJECT_TEEN5 ) return "Teen5";
+ if (value == OBJECT_TEEN6 ) return "Teen6";
+ if (value == OBJECT_TEEN7 ) return "Teen7";
+ if (value == OBJECT_TEEN8 ) return "Teen8";
+ if (value == OBJECT_TEEN9 ) return "Teen9";
+ if (value == OBJECT_TEEN10 ) return "Teen10";
+ if (value == OBJECT_TEEN11 ) return "Teen11";
+ if (value == OBJECT_TEEN12 ) return "Teen12";
+ if (value == OBJECT_TEEN13 ) return "Teen13";
+ if (value == OBJECT_TEEN14 ) return "Teen14";
+ if (value == OBJECT_TEEN15 ) return "Teen15";
+ if (value == OBJECT_TEEN16 ) return "Teen16";
+ if (value == OBJECT_TEEN17 ) return "Teen17";
+ if (value == OBJECT_TEEN18 ) return "Teen18";
+ if (value == OBJECT_TEEN19 ) return "Teen19";
+ if (value == OBJECT_TEEN20 ) return "Teen20";
+ if (value == OBJECT_TEEN21 ) return "Teen21";
+ if (value == OBJECT_TEEN22 ) return "Teen22";
+ if (value == OBJECT_TEEN23 ) return "Teen23";
+ if (value == OBJECT_TEEN24 ) return "Teen24";
+ if (value == OBJECT_TEEN25 ) return "Teen25";
+ if (value == OBJECT_TEEN26 ) return "Teen26";
+ if (value == OBJECT_TEEN27 ) return "Teen27";
+ if (value == OBJECT_TEEN28 ) return "Teen28";
+ if (value == OBJECT_TEEN29 ) return "Teen29";
+ if (value == OBJECT_TEEN30 ) return "Teen30";
+ if (value == OBJECT_TEEN31 ) return "Teen31";
+ if (value == OBJECT_TEEN32 ) return "Teen32";
+ if (value == OBJECT_TEEN33 ) return "Teen33";
+ if (value == OBJECT_TEEN34 ) return "Stone";
+ if (value == OBJECT_TEEN35 ) return "Teen35";
+ if (value == OBJECT_TEEN36 ) return "Teen36";
+ if (value == OBJECT_TEEN37 ) return "Teen37";
+ if (value == OBJECT_TEEN38 ) return "Teen38";
+ if (value == OBJECT_TEEN39 ) return "Teen39";
+ if (value == OBJECT_TEEN40 ) return "Teen40";
+ if (value == OBJECT_TEEN41 ) return "Teen41";
+ if (value == OBJECT_TEEN42 ) return "Teen42";
+ if (value == OBJECT_TEEN43 ) return "Teen43";
+ if (value == OBJECT_TEEN44 ) return "Teen44";
if (value == OBJECT_QUARTZ0 ) return "Quartz0";
if (value == OBJECT_QUARTZ1 ) return "Quartz1";
if (value == OBJECT_QUARTZ2 ) return "Quartz2";
diff --git a/src/object/auto/autokid.cpp b/src/object/auto/autokid.cpp
new file mode 100644
index 0000000..2cdf323
--- /dev/null
+++ b/src/object/auto/autokid.cpp
@@ -0,0 +1,204 @@
+/*
+ * This file is part of the Colobot: Gold Edition source code
+ * Copyright (C) 2001-2014, Daniel Roux, EPSITEC SA & TerranovaTeam
+ * http://epsiteс.ch; http://colobot.info; http://github.com/colobot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://gnu.org/licenses
+ */
+
+
+#include "object/auto/autokid.h"
+
+#include "graphics/engine/particle.h"
+#include "graphics/engine/water.h"
+
+#include "object/old_object.h"
+
+#include "sound/sound.h"
+
+#include <stdio.h>
+
+
+// Object's constructor.
+
+CAutoKid::CAutoKid(COldObject* object) : CAuto(object)
+{
+ m_soundChannel = -1;
+ Init();
+}
+
+// Object's constructor.
+
+CAutoKid::~CAutoKid()
+{
+ if ( m_soundChannel != -1 )
+ {
+ m_sound->FlushEnvelope(m_soundChannel);
+ m_sound->AddEnvelope(m_soundChannel, 0.0f, 1.0f, 1.0f, SOPER_STOP);
+ m_soundChannel = -1;
+ }
+}
+
+
+// Destroys the object.
+
+void CAutoKid::DeleteObject(bool bAll)
+{
+ CAuto::DeleteObject(bAll);
+}
+
+
+// Initialize the object.
+
+void CAutoKid::Init()
+{
+ Math::Vector pos;
+
+ m_speed = 1.0f/1.0f;
+ m_progress = 0.0f;
+ m_lastParticle = 0.0f;
+
+ if ( m_type == OBJECT_TEEN36 ) // trunk ?
+ {
+ pos = m_object->GetPosition();
+ m_speed = 1.0f/(1.0f+(Math::Mod(pos.x/10.0f-0.5f, 1.0f)*0.2f));
+ m_progress = Math::Mod(pos.x/10.0f, 1.0f);
+ }
+
+ if ( m_type == OBJECT_TEEN37 ) // boat?
+ {
+ pos = m_object->GetPosition();
+ m_speed = 1.0f/(1.0f+(Math::Mod(pos.x/10.0f-0.5f, 1.0f)*0.2f))*2.5f;
+ m_progress = Math::Mod(pos.x/10.0f, 1.0f);
+ }
+
+ if ( m_type == OBJECT_TEEN38 ) // fan?
+ {
+ if ( m_soundChannel == -1 )
+ {
+//? m_soundChannel = m_sound->Play(SOUND_MANIP, m_object->GetPosition(0), 1.0f, 0.5f, true);
+ m_bSilent = false;
+ }
+ }
+}
+
+
+// Management of an event.
+
+bool CAutoKid::EventProcess(const Event &event)
+{
+ Math::Vector vib, pos, speed;
+ Math::Point dim;
+
+ CAuto::EventProcess(event);
+
+ if ( m_soundChannel != -1 )
+ {
+ if ( m_engine->GetPause() )
+ {
+ if ( !m_bSilent )
+ {
+ m_sound->AddEnvelope(m_soundChannel, 0.0f, 0.5f, 0.1f, SOPER_CONTINUE);
+ m_bSilent = true;
+ }
+ }
+ else
+ {
+ if ( m_bSilent )
+ {
+ m_sound->AddEnvelope(m_soundChannel, 1.0f, 0.5f, 0.1f, SOPER_CONTINUE);
+ m_bSilent = false;
+ }
+ }
+ }
+
+ if ( m_engine->GetPause() ) return true;
+ if ( event.type != EVENT_FRAME ) return true;
+
+ m_progress += event.rTime*m_speed;
+
+ if ( m_type == OBJECT_TEEN36 ) // trunk?
+ {
+ vib.x = 0.0f;
+ vib.y = sinf(m_progress)*1.0f;
+ vib.z = 0.0f;
+ m_object->SetLinVibration(vib);
+
+ vib.x = 0.0f;
+ vib.y = 0.0f;
+ vib.z = sinf(m_progress*0.5f)*0.05f;
+ m_object->SetCirVibration(vib);
+
+ if ( m_lastParticle+m_engine->ParticleAdapt(0.15f) <= m_time )
+ {
+ m_lastParticle = m_time;
+
+ pos = m_object->GetPosition();
+ pos.y = m_water->GetLevel()+1.0f;
+ pos.x += (Math::Rand()-0.5f)*50.0f;
+ pos.z += (Math::Rand()-0.5f)*50.0f;
+ speed.y = 0.0f;
+ speed.x = 0.0f;
+ speed.z = 0.0f;
+ dim.x = 50.0f;
+ dim.y = dim.x;
+ m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIFLIC, 3.0f, 0.0f, 0.0f);
+ }
+ }
+
+ if ( m_type == OBJECT_TEEN37 ) // boat?
+ {
+ vib.x = 0.0f;
+ vib.y = sinf(m_progress)*1.0f;
+ vib.z = 0.0f;
+ m_object->SetLinVibration(vib);
+
+ vib.x = 0.0f;
+ vib.y = 0.0f;
+ vib.z = sinf(m_progress*0.5f)*0.15f;
+ m_object->SetCirVibration(vib);
+
+ if ( m_lastParticle+m_engine->ParticleAdapt(0.15f) <= m_time )
+ {
+ m_lastParticle = m_time;
+
+ pos = m_object->GetPosition();
+ pos.y = m_water->GetLevel()+1.0f;
+ pos.x += (Math::Rand()-0.5f)*20.0f;
+ pos.z += (Math::Rand()-0.5f)*20.0f;
+ speed.y = 0.0f;
+ speed.x = 0.0f;
+ speed.z = 0.0f;
+ dim.x = 20.0f;
+ dim.y = dim.x;
+ m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIFLIC, 3.0f, 0.0f, 0.0f);
+ }
+ }
+
+ if ( m_type == OBJECT_TEEN38 ) // fan?
+ {
+ m_object->SetPartRotationY(1, sinf(m_progress*0.6f)*0.4f);
+ m_object->SetPartRotationX(2, m_progress*5.0f);
+ }
+
+ return true;
+}
+
+
+// Returns an error due the state of the automation.
+
+Error CAutoKid::GetError()
+{
+ return ERR_OK;
+}
diff --git a/src/object/auto/autokid.h b/src/object/auto/autokid.h
new file mode 100644
index 0000000..605587c
--- /dev/null
+++ b/src/object/auto/autokid.h
@@ -0,0 +1,48 @@
+/*
+ * This file is part of the Colobot: Gold Edition source code
+ * Copyright (C) 2001-2014, Daniel Roux, EPSITEC SA & TerranovaTeam
+ * http://epsiteс.ch; http://colobot.info; http://github.com/colobot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://gnu.org/licenses
+ */
+
+// autokid.h
+
+#pragma once
+
+
+#include "object/auto/auto.h"
+
+
+class CAutoKid : public CAuto
+{
+public:
+ CAutoKid(COldObject* object);
+ ~CAutoKid();
+
+ void DeleteObject(bool bAll=false);
+
+ void Init();
+ bool EventProcess(const Event &event);
+ Error GetError();
+
+protected:
+
+protected:
+ float m_speed;
+ float m_progress;
+ float m_lastParticle;
+ int m_soundChannel;
+ bool m_bSilent;
+};
diff --git a/src/object/object_factory.cpp b/src/object/object_factory.cpp
index 484d6a2..b8f86f4 100644
--- a/src/object/object_factory.cpp
+++ b/src/object/object_factory.cpp
@@ -38,6 +38,7 @@
#include "object/auto/autoegg.h"
#include "object/auto/autoflag.h"
#include "object/auto/autojostle.h"
+#include "object/auto/autokid.h"
#include "object/auto/automush.h"
#include "object/auto/autoroot.h"
@@ -182,6 +183,53 @@ CObjectUPtr CObjectFactory::CreateObject(const ObjectCreateParams& params)
case OBJECT_MUSHROOM2:
return CreateMushroom(params);
+ case OBJECT_TEEN0:
+ case OBJECT_TEEN1:
+ case OBJECT_TEEN2:
+ case OBJECT_TEEN3:
+ case OBJECT_TEEN4:
+ case OBJECT_TEEN5:
+ case OBJECT_TEEN6:
+ case OBJECT_TEEN7:
+ case OBJECT_TEEN8:
+ case OBJECT_TEEN9:
+ case OBJECT_TEEN10:
+ case OBJECT_TEEN11:
+ case OBJECT_TEEN12:
+ case OBJECT_TEEN13:
+ case OBJECT_TEEN14:
+ case OBJECT_TEEN15:
+ case OBJECT_TEEN16:
+ case OBJECT_TEEN17:
+ case OBJECT_TEEN18:
+ case OBJECT_TEEN19:
+ case OBJECT_TEEN20:
+ case OBJECT_TEEN21:
+ case OBJECT_TEEN22:
+ case OBJECT_TEEN23:
+ case OBJECT_TEEN24:
+ case OBJECT_TEEN25:
+ case OBJECT_TEEN26:
+ case OBJECT_TEEN27:
+ case OBJECT_TEEN28:
+ case OBJECT_TEEN29:
+ case OBJECT_TEEN30:
+ case OBJECT_TEEN31:
+ case OBJECT_TEEN32:
+ case OBJECT_TEEN33:
+ case OBJECT_TEEN34:
+ case OBJECT_TEEN35:
+ case OBJECT_TEEN36:
+ case OBJECT_TEEN37:
+ case OBJECT_TEEN38:
+ case OBJECT_TEEN39:
+ case OBJECT_TEEN40:
+ case OBJECT_TEEN41:
+ case OBJECT_TEEN42:
+ case OBJECT_TEEN43:
+ case OBJECT_TEEN44:
+ return CreateTeen(params);
+
case OBJECT_QUARTZ0:
case OBJECT_QUARTZ1:
case OBJECT_QUARTZ2:
@@ -845,6 +893,798 @@ CObjectUPtr CObjectFactory::CreateMushroom(const ObjectCreateParams& params)
return std::move(obj);
}
+// Creates a toy placed on the ground.
+
+CObjectUPtr CObjectFactory::CreateTeen(const ObjectCreateParams& params)
+{
+ Math::Vector pos = params.pos;
+ float angle = params.angle;
+ float height = params.height;
+ ObjectType type = params.type;
+ int option = params.option;
+
+ COldObjectUPtr obj{new COldObject(params.id)};
+
+ obj->SetType(type);
+ obj->SetOption(option);
+
+ float fShadow = Math::Norm(1.0f-height/10.0f);
+ bool floorAdjust = true;
+
+ if ( type == OBJECT_TEEN0 ) // orange pencil lg=10
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen0.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 5.0f, 1.0f, 0.0f), 1.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 2.5f, 1.0f, 0.0f), 1.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 1.0f, 0.0f), 1.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-2.5f, 1.0f, 0.0f), 1.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-5.0f, 1.0f, 0.0f), 1.0f, SOUND_BOUMm, 0.45f));
+
+ obj->CreateShadowCircle(5.0f, 0.8f*fShadow, Gfx::ENG_SHADOW_WORM);
+ }
+
+ if ( type == OBJECT_TEEN1 ) // blue pencil lg=14
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen1.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 6.0f, 1.0f, 0.0f), 1.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 4.0f, 1.0f, 0.0f), 1.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 2.0f, 1.0f, 0.0f), 1.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 1.0f, 0.0f), 1.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-2.0f, 1.0f, 0.0f), 1.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-4.0f, 1.0f, 0.0f), 1.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-6.0f, 1.0f, 0.0f), 1.0f, SOUND_BOUMm, 0.45f));
+
+ obj->CreateShadowCircle(6.0f, 0.8f*fShadow, Gfx::ENG_SHADOW_WORM);
+ }
+
+ if ( type == OBJECT_TEEN2 ) // red pencil lg=16
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen2.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 7.0f, 1.0f, 0.0f), 1.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 4.7f, 1.0f, 0.0f), 1.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 2.3f, 1.0f, 0.0f), 1.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 1.0f, 0.0f), 1.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-2.3f, 1.0f, 0.0f), 1.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-4.7f, 1.0f, 0.0f), 1.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-7.0f, 1.0f, 0.0f), 1.0f, SOUND_BOUMm, 0.45f));
+
+ obj->CreateShadowCircle(6.0f, 0.8f*fShadow, Gfx::ENG_SHADOW_WORM);
+ }
+
+ if ( type == OBJECT_TEEN3 ) // jar with pencils
+ {
+ int rank = m_engine->CreateObject();
+//? m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_METAL);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen3.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 4.0f, 0.0f), 4.0f, SOUND_BOUMm, 0.45f));
+ obj->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 4.0f, 0.0f), 4.0f));
+ obj->CreateShadowCircle(6.0f, 0.5f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN4 ) // scissors
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen4.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-9.0f, 1.0f, 0.0f), 1.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-6.0f, 1.0f, 0.0f), 1.1f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-3.0f, 1.0f, 0.0f), 1.2f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 1.0f, 0.0f), 1.3f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 5.1f, 1.0f,-1.3f), 2.6f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 8.0f, 1.0f, 2.2f), 2.3f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 9.4f, 1.0f,-2.0f), 2.0f, SOUND_BOUMm, 0.45f));
+
+ obj->CreateShadowCircle(10.0f, 0.5f*fShadow, Gfx::ENG_SHADOW_WORM);
+ }
+
+ if ( type == OBJECT_TEEN5 ) // CD
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen5.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+ obj->SetFloorHeight(0.0f);
+ floorAdjust = false;
+
+ m_terrain->AddBuildingLevel(pos, 5.9f, 6.1f, 0.2f, 0.5f);
+ obj->CreateShadowCircle(8.0f, 0.2f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN6 ) // book 1
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen6.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-5.0f, 3.0f, 7.5f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 4.5f, 3.0f, 7.5f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-5.0f, 3.0f, 0.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 4.5f, 3.0f, 0.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-5.0f, 3.0f,-7.5f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 4.5f, 3.0f,-7.5f), 5.0f, SOUND_BOUMm, 0.45f));
+
+ obj->CreateShadowCircle(20.0f, 0.2f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN7 ) // book 2
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen7.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-5.0f, 3.0f, 7.5f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 4.5f, 3.0f, 7.5f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-5.0f, 3.0f, 0.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 4.5f, 3.0f, 0.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-5.0f, 3.0f,-7.5f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 4.5f, 3.0f,-7.5f), 5.0f, SOUND_BOUMm, 0.45f));
+
+ obj->CreateShadowCircle(20.0f, 0.2f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN8 ) // a stack of books 1
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen8.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-5.0f, 3.0f, 7.5f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 4.5f, 3.0f, 7.5f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-5.0f, 3.0f, 0.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 4.5f, 3.0f, 0.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-5.0f, 3.0f,-7.5f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 4.5f, 3.0f,-7.5f), 5.0f, SOUND_BOUMm, 0.45f));
+
+ obj->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 10.0f, 0.0f), 12.0f));
+ obj->CreateShadowCircle(20.0f, 0.2f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN9 ) // a stack of books 2
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen9.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-5.0f, 3.0f, 7.5f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 4.5f, 3.0f, 7.5f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-5.0f, 3.0f, 0.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 4.5f, 3.0f, 0.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-5.0f, 3.0f,-7.5f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 4.5f, 3.0f,-7.5f), 5.0f, SOUND_BOUMm, 0.45f));
+
+ obj->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 10.0f, 0.0f), 12.0f));
+ obj->CreateShadowCircle(20.0f, 0.2f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN10 ) // bookcase
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen10.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-26.0f, 3.0f, 0.0f), 6.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-15.0f, 3.0f,-4.0f), 6.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-15.0f, 3.0f, 5.0f), 6.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( -4.0f, 3.0f,-4.0f), 6.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( -4.0f, 3.0f, 5.0f), 6.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 6.0f, 3.0f,-4.0f), 6.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 6.0f, 3.0f, 4.0f), 6.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 14.0f, 3.0f,-3.0f), 6.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 14.0f, 3.0f, 2.0f), 6.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 24.0f, 3.0f, 5.0f), 6.0f, SOUND_BOUMm, 0.45f));
+
+ obj->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 6.0f, 0.0f), 20.0f));
+ obj->CreateShadowCircle(40.0f, 0.2f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN11 ) // lamp
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen11.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+ obj->SetFloorHeight(0.0f);
+
+ Math::Matrix* mat = obj->GetWorldMatrix(0);
+ pos = Math::Transform(*mat, Math::Vector(-56.0f, 22.0f, 0.0f));
+ m_particle->CreateParticle(pos, Math::Vector(0.0f, 0.0f, 0.0f), Math::Point(20.0f, 20.0f), Gfx::PARTISELY, 1.0f, 0.0f, 0.0f);
+
+ pos = Math::Transform(*mat, Math::Vector(-65.0f, 40.0f, 0.0f));
+ /* TODO: ?
+ Gfx::Color color;
+ color.r = 4.0f;
+ color.g = 2.0f;
+ color.b = 0.0f; // yellow-orange
+ color.a = 0.0f;
+ m_main->CreateSpot(pos, color);
+ */
+ }
+
+ if ( type == OBJECT_TEEN12 ) // coke
+ {
+ int rank = m_engine->CreateObject();
+//? m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_METAL);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen12.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 4.0f, 0.0f), 4.0f, SOUND_BOUMm, 0.45f));
+ obj->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 9.0f, 0.0f), 5.0f));
+ obj->CreateShadowCircle(4.5f, 1.0f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN13 ) // cardboard farm
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen13.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-10.0f, 4.0f,-7.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 4.0f,-7.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 10.0f, 4.0f,-7.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-10.0f, 4.0f, 0.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 4.0f, 0.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 10.0f, 4.0f, 0.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-10.0f, 4.0f, 7.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 4.0f, 7.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 10.0f, 4.0f, 7.0f), 5.0f, SOUND_BOUMm, 0.45f));
+
+ obj->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 5.0f, 0.0f), 15.0f));
+ obj->CreateShadowCircle(20.0f, 1.0f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN14 ) // open box
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen14.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-10.0f, 4.0f,-7.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 4.0f,-7.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 10.0f, 4.0f,-7.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-10.0f, 4.0f, 0.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 4.0f, 0.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 10.0f, 4.0f, 0.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-10.0f, 4.0f, 7.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 4.0f, 7.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 10.0f, 4.0f, 7.0f), 5.0f, SOUND_BOUMm, 0.45f));
+
+ obj->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 5.0f, 0.0f), 15.0f));
+ obj->CreateShadowCircle(20.0f, 1.0f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN15 ) // stack of cartons
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen15.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-10.0f, 4.0f,-7.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 4.0f,-7.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 10.0f, 4.0f,-7.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-10.0f, 4.0f, 0.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 4.0f, 0.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 10.0f, 4.0f, 0.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-10.0f, 4.0f, 7.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 4.0f, 7.0f), 5.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 10.0f, 4.0f, 7.0f), 5.0f, SOUND_BOUMm, 0.45f));
+
+ obj->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 5.0f, 0.0f), 15.0f));
+ obj->CreateShadowCircle(20.0f, 1.0f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN16 ) // watering can
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen16.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-8.0f, 4.0f, 0.0f), 12.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 8.0f, 4.0f, 0.0f), 12.0f, SOUND_BOUMm, 0.45f));
+
+ obj->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 13.0f, 0.0f), 20.0f));
+ obj->CreateShadowCircle(18.0f, 1.0f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN17 ) // wheel |
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen17.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 31.0f, 0.0f), 31.0f, SOUND_BOUMm, 0.45f));
+ obj->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 31.0f, 0.0f), 31.0f));
+ obj->CreateShadowCircle(24.0f, 0.5f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN18 ) // wheel /
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen18.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 31.0f, 0.0f), 31.0f, SOUND_BOUMm, 0.45f));
+ obj->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 31.0f, 0.0f), 31.0f));
+ obj->CreateShadowCircle(24.0f, 0.5f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN19 ) // wheel =
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen19.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 10.0f, 0.0f), 32.0f, SOUND_BOUMm, 0.45f));
+ obj->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 10.0f, 0.0f), 32.0f));
+ obj->CreateShadowCircle(33.0f, 1.0f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN20 ) // wall with shelf
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen20.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-175.0f, 0.0f, -5.0f), 4.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-175.0f, 0.0f, -35.0f), 4.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( -55.0f, 0.0f, -5.0f), 4.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( -55.0f, 0.0f, -35.0f), 4.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( -37.0f, 0.0f, -5.0f), 4.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( -37.0f, 0.0f, -35.0f), 4.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 83.0f, 0.0f, -5.0f), 4.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 83.0f, 0.0f, -35.0f), 4.0f, SOUND_BOUMm, 0.45f));
+ }
+
+ if ( type == OBJECT_TEEN21 ) // wall with window
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen21.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+ }
+
+ if ( type == OBJECT_TEEN22 ) // wall with door and shelf
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen22.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-135.0f, 0.0f, -5.0f), 4.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-135.0f, 0.0f, -35.0f), 4.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( -15.0f, 0.0f, -5.0f), 4.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( -15.0f, 0.0f, -35.0f), 4.0f, SOUND_BOUMm, 0.45f));
+ }
+
+ if ( type == OBJECT_TEEN23 ) // skateboard on wheels
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen23.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ if ( option == 1 ) // passage under the prohibited skateboard?
+ {
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-10.0f, 2.0f, 0.0f), 11.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 10.0f, 2.0f, 0.0f), 11.0f, SOUND_BOUMm, 0.45f));
+ }
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-23.0f, 2.0f, 7.0f), 3.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-23.0f, 2.0f, 0.0f), 3.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-23.0f, 2.0f,-7.0f), 3.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 23.0f, 2.0f, 7.0f), 3.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 23.0f, 2.0f, 0.0f), 3.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 23.0f, 2.0f,-7.0f), 3.0f, SOUND_BOUMm, 0.45f));
+
+ obj->CreateShadowCircle(35.0f, 0.8f*fShadow, Gfx::ENG_SHADOW_WORM);
+ }
+
+ if ( type == OBJECT_TEEN24 ) // skate /
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen24.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-12.0f, 0.0f, -3.0f), 3.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-12.0f, 0.0f, 3.0f), 3.0f, SOUND_BOUMm, 0.45f));
+ obj->CreateShadowCircle(20.0f, 0.2f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN25 ) // skate /
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen25.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-12.0f, 0.0f, -3.0f), 3.0f, SOUND_BOUMm, 0.45f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-12.0f, 0.0f, 3.0f), 3.0f, SOUND_BOUMm, 0.45f));
+ obj->CreateShadowCircle(20.0f, 0.2f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN26 ) // ceiling lamp
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen26.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+ obj->SetFloorHeight(0.0f);
+
+ Math::Matrix* mat = obj->GetWorldMatrix(0);
+ pos = Math::Transform(*mat, Math::Vector(0.0f, 50.0f, 0.0f));
+ m_particle->CreateParticle(pos, Math::Vector(0.0f, 0.0f, 0.0f), Math::Point(100.0f, 100.0f), Gfx::PARTISELY, 1.0f, 0.0f, 0.0f);
+
+ /* TODO: ?
+ pos = Math::Transform(*mat, Math::Vector(0.0f, 50.0f, 0.0f));
+ Gfx::Color color;
+ color.r = 4.0f;
+ color.g = 2.0f;
+ color.b = 0.0f; // yellow-orange
+ color.a = 0.0f;
+ m_main->CreateSpot(pos, color);
+ */
+ }
+
+ if ( type == OBJECT_TEEN27 ) // large plant?
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen27.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(0.0f, 0.0f, 0.0f), 4.0f, SOUND_BOUM, 0.10f));
+ obj->CreateShadowCircle(40.0f, 0.5f);
+ }
+
+ if ( type == OBJECT_TEEN28 ) // bottle?
+ {
+ int rank = m_engine->CreateObject();
+//? m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_METAL);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen28.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(0.0f, 2.0f, 0.0f), 5.0f, SOUND_BOUM, 0.10f));
+ obj->CreateShadowCircle(7.0f, 0.6f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN29 ) // bridge?
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen29.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+ floorAdjust = false;
+ }
+
+ if ( type == OBJECT_TEEN30 ) // jump?
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen30.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(0.0f, 4.0f, 0.0f), 15.0f, SOUND_BOUM, 0.10f));
+ obj->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 15.0f, 0.0f), 17.0f));
+ obj->CreateShadowCircle(20.0f, 1.0f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN31 ) // basket?
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen31.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-10.0f, 2.0f, 0.0f), 5.0f, SOUND_BOUM, 0.10f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 2.0f, 0.0f), 6.0f, SOUND_BOUM, 0.10f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 9.0f, 4.0f, 1.0f), 6.0f, SOUND_BOUM, 0.10f));
+
+ obj->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 0.0f, 0.0f), 10.0f));
+ obj->CreateShadowCircle(16.0f, 0.6f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN32 ) // chair?
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen32.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 17.5f, 1.0f, 17.5f), 3.5f, SOUND_BOUM, 0.10f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 17.5f, 1.0f, -17.5f), 3.5f, SOUND_BOUM, 0.10f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-17.5f, 1.0f, 17.5f), 3.5f, SOUND_BOUM, 0.10f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-17.5f, 1.0f, -17.5f), 3.5f, SOUND_BOUM, 0.10f));
+ obj->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 0.0f, 0.0f), 26.0f));
+ obj->CreateShadowCircle(35.0f, 0.3f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN33 ) // panel?
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen33.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(0.0f, 2.0f, 0.0f), 4.0f, SOUND_BOUM, 0.10f));
+ obj->CreateShadowCircle(10.0f, 0.3f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN34 ) // stone?
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen34.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(0.0f, 2.0f, 0.0f), 4.0f, SOUND_BOUM, 0.10f));
+ obj->CreateShadowCircle(3.0f, 1.0f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN35 ) // pipe?
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen35.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-40.0f, 5.0f, 0.0f), 10.0f, SOUND_BOUM, 0.10f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector(-20.0f, 5.0f, 0.0f), 10.0f, SOUND_BOUM, 0.10f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 5.0f, 0.0f), 10.0f, SOUND_BOUM, 0.10f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 20.0f, 5.0f, 0.0f), 10.0f, SOUND_BOUM, 0.10f));
+ obj->AddCrashSphere(CrashSphere(Math::Vector( 40.0f, 5.0f, 0.0f), 10.0f, SOUND_BOUM, 0.10f));
+ obj->CreateShadowCircle(40.0f, 0.8f*fShadow, Gfx::ENG_SHADOW_WORM);
+ }
+
+ if ( type == OBJECT_TEEN36 ) // trunk?
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen36.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+ floorAdjust = false;
+ }
+
+ if ( type == OBJECT_TEEN37 ) // boat?
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen37.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+ floorAdjust = false;
+ }
+
+ if ( type == OBJECT_TEEN38 ) // fan?
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen38a.mod", false, rank);
+ obj->SetPartPosition(0, pos);
+ obj->SetPartRotationY(0, angle);
+
+ rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
+ obj->SetObjectRank(1, rank);
+ obj->SetObjectParent(1, 0);
+ m_oldModelManager->AddModelReference("teen38b.mod", false, rank); // engine
+ obj->SetPartPosition(1, Math::Vector(0.0f, 30.0f, 0.0f));
+
+ rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
+ obj->SetObjectRank(2, rank);
+ obj->SetObjectParent(2, 1);
+ m_oldModelManager->AddModelReference("teen38c.mod", false, rank); // propeller
+ obj->SetPartPosition(2, Math::Vector(0.0f, 0.0f, 0.0f));
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(0.0f, 2.0f, 0.0f), 10.0f, SOUND_BOUM, 0.10f));
+ obj->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 2.0f, 0.0f), 10.0f));
+ obj->CreateShadowCircle(15.0f, 0.5f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN39 ) // potted plant?
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen39.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(0.0f, 2.0f, 0.0f), 8.5f, SOUND_BOUM, 0.10f));
+ obj->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 2.0f, 0.0f), 8.5f));
+ obj->CreateShadowCircle(10.0f, 1.0f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN40 ) // balloon?
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen40.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(0.0f, 5.0f, 0.0f), 11.0f, SOUND_BOUM, 0.10f));
+ obj->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 14.0f, 0.0f), 15.0f));
+ obj->CreateShadowCircle(15.0f, 0.7f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN41 ) // fence?
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen41.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+ }
+
+ if ( type == OBJECT_TEEN42 ) // clover?
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen42.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(0.0f, 2.0f, 0.0f), 2.0f, SOUND_BOUM, 0.10f));
+ obj->CreateShadowCircle(15.0f, 0.4f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN43 ) // clover?
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen43.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(0.0f, 2.0f, 0.0f), 2.0f, SOUND_BOUM, 0.10f));
+ obj->CreateShadowCircle(15.0f, 0.4f*fShadow);
+ }
+
+ if ( type == OBJECT_TEEN44 ) // car?
+ {
+ int rank = m_engine->CreateObject();
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+ obj->SetObjectRank(0, rank);
+ m_oldModelManager->AddModelReference("teen44.mod", false, rank);
+ obj->SetPosition(pos);
+ obj->SetRotationY(angle);
+
+ obj->AddCrashSphere(CrashSphere(Math::Vector(0.0f, 10.0f, 0.0f), 55.0f, SOUND_BOUM, 0.10f));
+ obj->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 10.0f, 0.0f), 55.0f));
+ obj->CreateShadowCircle(55.0f, 1.0f*fShadow);
+ }
+
+ pos = obj->GetPosition();
+ obj->SetPosition(pos); // to display the shadows immediately
+
+ if ( floorAdjust )
+ {
+ obj->SetFloorHeight(0.0f);
+ obj->FloorAdjust();
+ }
+
+ AddObjectAuto(obj.get());
+
+ pos = obj->GetPosition();
+ pos.y += height;
+ obj->SetPosition(pos);
+
+ return std::move(obj);
+}
+
// Creates a crystal placed on the ground.
CObjectUPtr CObjectFactory::CreateQuartz(const ObjectCreateParams& params)
@@ -1719,6 +2559,12 @@ void CObjectFactory::AddObjectAuto(COldObject* obj)
{
objAuto = MakeUnique<CAutoFlag>(obj);
}
+ if ( type == OBJECT_TEEN36 || // trunk?
+ type == OBJECT_TEEN37 || // boat?
+ type == OBJECT_TEEN38 ) // fan?
+ {
+ objAuto.reset(new CAutoKid(obj));
+ }
if (objAuto != nullptr)
{
diff --git a/src/object/object_factory.h b/src/object/object_factory.h
index c48b06d..eed5c81 100644
--- a/src/object/object_factory.h
+++ b/src/object/object_factory.h
@@ -62,6 +62,7 @@ private:
CObjectUPtr CreateBarrier(const ObjectCreateParams& params);
CObjectUPtr CreatePlant(const ObjectCreateParams& params);
CObjectUPtr CreateMushroom(const ObjectCreateParams& params);
+ CObjectUPtr CreateTeen(const ObjectCreateParams& params);
CObjectUPtr CreateQuartz(const ObjectCreateParams& params);
CObjectUPtr CreateRoot(const ObjectCreateParams& params);
CObjectUPtr CreateHome(const ObjectCreateParams& params);
diff --git a/src/object/object_type.h b/src/object/object_type.h
index ea4e8f3..2186665 100644
--- a/src/object/object_type.h
+++ b/src/object/object_type.h
@@ -165,6 +165,51 @@ enum ObjectType
OBJECT_RUINconvert = 610, //! < RuinConvert
OBJECT_RUINbase = 611, //! < RuinBaseCamp
OBJECT_RUINhead = 612, //! < RuinHeadCamp
+ OBJECT_TEEN0 = 620, //! < Teen0
+ OBJECT_TEEN1 = 621, //! < Teen1
+ OBJECT_TEEN2 = 622, //! < Teen2
+ OBJECT_TEEN3 = 623, //! < Teen3
+ OBJECT_TEEN4 = 624, //! < Teen4
+ OBJECT_TEEN5 = 625, //! < Teen5
+ OBJECT_TEEN6 = 626, //! < Teen6
+ OBJECT_TEEN7 = 627, //! < Teen7
+ OBJECT_TEEN8 = 628, //! < Teen8
+ OBJECT_TEEN9 = 629, //! < Teen9
+ OBJECT_TEEN10 = 630, //! < Teen10
+ OBJECT_TEEN11 = 631, //! < Teen11
+ OBJECT_TEEN12 = 632, //! < Teen12
+ OBJECT_TEEN13 = 633, //! < Teen13
+ OBJECT_TEEN14 = 634, //! < Teen14
+ OBJECT_TEEN15 = 635, //! < Teen15
+ OBJECT_TEEN16 = 636, //! < Teen16
+ OBJECT_TEEN17 = 637, //! < Teen17
+ OBJECT_TEEN18 = 638, //! < Teen18
+ OBJECT_TEEN19 = 639, //! < Teen19
+ OBJECT_TEEN20 = 640, //! < Teen20
+ OBJECT_TEEN21 = 641, //! < Teen21
+ OBJECT_TEEN22 = 642, //! < Teen22
+ OBJECT_TEEN23 = 643, //! < Teen23
+ OBJECT_TEEN24 = 644, //! < Teen24
+ OBJECT_TEEN25 = 645, //! < Teen25
+ OBJECT_TEEN26 = 646, //! < Teen26
+ OBJECT_TEEN27 = 647, //! < Teen27
+ OBJECT_TEEN28 = 648, //! < Teen28
+ OBJECT_TEEN29 = 649, //! < Teen29
+ OBJECT_TEEN30 = 650, //! < Teen30
+ OBJECT_TEEN31 = 651, //! < Teen31
+ OBJECT_TEEN32 = 652, //! < Teen32
+ OBJECT_TEEN33 = 653, //! < Teen33
+ OBJECT_TEEN34 = 654, //! < Stone (Teen34)
+ OBJECT_TEEN35 = 655, //! < Teen35
+ OBJECT_TEEN36 = 656, //! < Teen36
+ OBJECT_TEEN37 = 657, //! < Teen37
+ OBJECT_TEEN38 = 658, //! < Teen38
+ OBJECT_TEEN39 = 659, //! < Teen39
+ OBJECT_TEEN40 = 660, //! < Teen40
+ OBJECT_TEEN41 = 661, //! < Teen41
+ OBJECT_TEEN42 = 662, //! < Teen42
+ OBJECT_TEEN43 = 663, //! < Teen43
+ OBJECT_TEEN44 = 664, //! < Teen44
OBJECT_QUARTZ0 = 700, //! < Quartz0
OBJECT_QUARTZ1 = 701, //! < Quartz1
OBJECT_QUARTZ2 = 702, //! < Quartz2
diff --git a/src/object/old_object.cpp b/src/object/old_object.cpp
index 2df77bb..d327c7a 100644
--- a/src/object/old_object.cpp
+++ b/src/object/old_object.cpp
@@ -732,7 +732,8 @@ void COldObject::SetType(ObjectType type)
m_type == OBJECT_ANT ||
m_type == OBJECT_WORM ||
m_type == OBJECT_SPIDER ||
- m_type == OBJECT_BEE )
+ m_type == OBJECT_BEE ||
+ m_type == OBJECT_TEEN28 )
{
m_implementedInterfaces[static_cast<int>(ObjectInterfaceType::Damageable)] = true;
m_implementedInterfaces[static_cast<int>(ObjectInterfaceType::Destroyable)] = true;
diff --git a/src/object/task/taskterraform.cpp b/src/object/task/taskterraform.cpp
index 3b6e6ef..f761dba 100644
--- a/src/object/task/taskterraform.cpp
+++ b/src/object/task/taskterraform.cpp
@@ -363,11 +363,8 @@ bool CTaskTerraform::Terraform()
type = pObj->GetType();
if ( type == OBJECT_NULL ) continue;
- if ( false )
+ if ( type == OBJECT_TEEN34 ) // stone?
{
- // This was used by Ceebot-Teen to destroy objects hit by the Thumper
- // The old Teen objects are removed, but this code might be reused at some point, e.g. to add destruction of resources like empty batteries
-
dist = Math::Distance(m_terraPos, pObj->GetPosition());
if ( dist > 20.0f ) continue;
diff --git a/src/script/cbottoken.cpp b/src/script/cbottoken.cpp
index c01b0ec..dc491c5 100644
--- a/src/script/cbottoken.cpp
+++ b/src/script/cbottoken.cpp
@@ -54,6 +54,7 @@ const char* GetObjectName(ObjectType type)
if ( type == OBJECT_TARGET2 ) return "Target2";
if ( type == OBJECT_START ) return "StartArea";
if ( type == OBJECT_END ) return "GoalArea";
+ if ( type == OBJECT_TEEN34 ) return "Stone";
if ( type == OBJECT_STONE ) return "TitaniumOre";
if ( type == OBJECT_URANIUM ) return "UraniumOre";
if ( type == OBJECT_METAL ) return "Titanium";
diff --git a/src/ui/controls/map.cpp b/src/ui/controls/map.cpp
index 1e96404..c80c631 100644
--- a/src/ui/controls/map.cpp
+++ b/src/ui/controls/map.cpp
@@ -619,6 +619,18 @@ void CMap::DrawObject(Math::Point pos, float dir, ObjectType type, MapColor colo
dim.x *= 1.4f;
dim.y *= 1.4f;
}
+ if ( type == OBJECT_TEEN28 ) // bottle?
+ {
+ dim.x *= 3.0f;
+ dim.y *= 3.0f;
+ bHilite = true;
+ }
+ if ( type == OBJECT_TEEN34 ) // stone?
+ {
+ dim.x *= 2.0f;
+ dim.y *= 2.0f;
+ bHilite = true;
+ }
if ( color == MAPCOLOR_MOVE && bSelect )
{
@@ -868,6 +880,8 @@ void CMap::DrawObjectIcon(Math::Point pos, Math::Point dim, MapColor color,
if ( type == OBJECT_SPIDER ) icon = 31;
if ( type == OBJECT_BEE ) icon = 31;
if ( type == OBJECT_WORM ) icon = 31;
+ if ( type == OBJECT_TEEN28 ) icon = 48; // bottle
+ if ( type == OBJECT_TEEN34 ) icon = 48; // stone
if ( icon == -1 ) return;
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
@@ -1187,7 +1201,9 @@ void CMap::UpdateObject(CObject* pObj)
type == OBJECT_HUSTON ||
type == OBJECT_TARGET1 ||
type == OBJECT_START ||
- type == OBJECT_END ) // stationary object?
+ type == OBJECT_END || // stationary object?
+ type == OBJECT_TEEN28 || // bottle?
+ type == OBJECT_TEEN34 ) // stone?
{
color = MAPCOLOR_FIX;
}
@@ -1264,7 +1280,13 @@ void CMap::UpdateObject(CObject* pObj)
if (!m_fixImage.empty() && !m_bDebug) // map with still image?
{
- if ( color != MAPCOLOR_MOVE ) return;
+ if ( (type == OBJECT_TEEN28 ||
+ type == OBJECT_TEEN34 ) &&
+ m_mode == 0 ) return;
+
+ if ( type != OBJECT_TEEN28 &&
+ type != OBJECT_TEEN34 &&
+ color != MAPCOLOR_MOVE ) return;
}
if ( pObj->Implements(ObjectInterfaceType::Controllable) && dynamic_cast<CControllableObject*>(pObj)->GetSelect() )
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git
More information about the Pkg-games-commits
mailing list