Restored old Ceebot-Teen objects

In preparations for new programming course
dev-time-step
krzys-h 2015-09-28 22:08:04 +02:00
parent 7a6e669a37
commit 2cb2782c9d
14 changed files with 1294 additions and 11 deletions

2
data

@ -1 +1 @@
Subproject commit 14518ff47694de5bf13a5f43826187cf3d8e40a1
Subproject commit d90d0da944ad77e461dbc7b623491016f952fc21

View File

@ -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

View File

@ -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 &&

View File

@ -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);

View File

@ -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";

204
src/object/auto/autokid.cpp Normal file
View File

@ -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;
}

48
src/object/auto/autokid.h Normal file
View File

@ -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;
};

View File

@ -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)
{

View File

@ -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);

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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";

View File

@ -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() )