Complete disaster-recovery snapshot: engine/game source, game data assets, VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive. Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false, no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
239 lines
6.6 KiB
C++
239 lines
6.6 KiB
C++
//===========================================================================//
|
|
// File: AudioFXComponent_Tool.cpp //
|
|
// Project: MUNGA Brick: Win95 Video Renderer //
|
|
// Contents: Windows95 Layer Video Renderer //
|
|
//---------------------------------------------------------------------------//
|
|
// Date Who Modification //
|
|
// -------- --- ---------------------------------------------------------- //
|
|
// 03/24/99 SMJ Initial coding. //
|
|
//---------------------------------------------------------------------------//
|
|
// Copyright (C) 1997, Virtual World Entertainment, Inc. //
|
|
// All Rights reserved worldwide //
|
|
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL //
|
|
//===========================================================================//
|
|
|
|
#include "AdeptHeaders.hpp"
|
|
|
|
#include "AudioFXComponent.hpp"
|
|
#include "EntityClassData.hpp"
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
//
|
|
AudioFXComponent::ClassData*
|
|
AudioFXComponent::CreateFactoryRequest(
|
|
FactoryRequestParameters *parameters,
|
|
Entity::ClassData *class_data
|
|
)
|
|
{
|
|
Check_Object(parameters);
|
|
|
|
//
|
|
//-------------------------------------------------------------------------
|
|
// Allocate enough room for what we need to write out, then call our parent
|
|
//-------------------------------------------------------------------------
|
|
//
|
|
MemoryStream *component_stream = parameters->m_stream;
|
|
Check_Object(component_stream);
|
|
component_stream->AllocateBytes(sizeof(AudioFXComponent));
|
|
bool result = BaseClass::CreateFactoryRequest(parameters) != NULL;
|
|
|
|
//
|
|
//-----------------------
|
|
// Read the viewing state
|
|
//-----------------------
|
|
//
|
|
Page *page = parameters->m_page;
|
|
Check_Object(page);
|
|
|
|
//
|
|
//-------------------------------
|
|
// Find the type of audio to play
|
|
//-------------------------------
|
|
//
|
|
const char* type_name = "General";
|
|
page->GetEntry("ChannelType", &type_name);
|
|
int type = AudioRenderer::FindChannelType(type_name);
|
|
if (type<0)
|
|
{
|
|
PAUSE((
|
|
"%s: {[%s]ChannelType=%s}: not a legal channel type",
|
|
page->GetNotationFile()->GetFileName(),
|
|
page->GetName(),
|
|
type_name
|
|
));
|
|
result = false;
|
|
}
|
|
*component_stream << type;
|
|
|
|
//
|
|
//-------------------
|
|
// Find the wave file
|
|
//-------------------
|
|
//
|
|
const char* wav_file;
|
|
page->GetEntry("Sample", &wav_file, true);
|
|
MString handle_file(wav_file);
|
|
handle_file += "{handle}";
|
|
Resource hint(handle_file, true);
|
|
if (!hint.DoesResourceExist())
|
|
{
|
|
PAUSE((
|
|
"%s: {[%s]Sample=%s}: wave file isn't in an accessible .sounds file",
|
|
page->GetNotationFile()->GetFileName(),
|
|
page->GetName(),
|
|
wav_file
|
|
));
|
|
result = false;
|
|
*component_stream << ResourceID::Null;
|
|
}
|
|
else
|
|
*component_stream << hint.GetResourceID();
|
|
|
|
//
|
|
//------------------------
|
|
// Find the low-end sample
|
|
//------------------------
|
|
//
|
|
page->GetEntry("LowEndSample", &wav_file);
|
|
handle_file = wav_file;
|
|
handle_file += "{handle}";
|
|
Resource low_hint(handle_file, true);
|
|
if (!low_hint.DoesResourceExist())
|
|
{
|
|
PAUSE((
|
|
"%s: {[%s]LowEndSample=%s}: wave file isn't in an accessible .sounds file",
|
|
page->GetNotationFile()->GetFileName(),
|
|
page->GetName(),
|
|
wav_file
|
|
));
|
|
result = false;
|
|
*component_stream << ResourceID::Null;
|
|
}
|
|
else
|
|
*component_stream << low_hint.GetResourceID();
|
|
|
|
//
|
|
//------------------------------------------
|
|
// Make sure the wave file is enabled for 3D
|
|
//------------------------------------------
|
|
//
|
|
ResourceID sample_id;
|
|
int gos_type;
|
|
bool cached, is3d;
|
|
hint >> sample_id >> gos_type >> cached >> is3d;
|
|
if (!is3d)
|
|
{
|
|
PAUSE((
|
|
"%s: {[%s]Sample=%s}: .wav is not enabled for 3D",
|
|
page->GetNotationFile()->GetFileName(),
|
|
page->GetName(),
|
|
wav_file
|
|
));
|
|
result = false;
|
|
}
|
|
|
|
//
|
|
//-------------------------
|
|
// Audio command properties
|
|
//-------------------------
|
|
//
|
|
bool loop=false;
|
|
page->GetEntry("Loop", &loop);
|
|
int play_mode = (loop) ? gosAudio_Loop : gosAudio_PlayOnce;
|
|
*component_stream << play_mode;
|
|
|
|
Scalar pri = 1.0f;
|
|
page->GetEntry("Priority", &pri);
|
|
*component_stream << pri;
|
|
|
|
Scalar volume = 1.0f;
|
|
page->GetEntry("Volume", &volume);
|
|
*component_stream << volume;
|
|
|
|
Scalar delay=0.5f;
|
|
page->GetEntry("MinRestartDelay", &delay);
|
|
*component_stream << delay;
|
|
|
|
delay = 0.8f;
|
|
page->GetEntry("MaxReplaceDelay", &delay);
|
|
*component_stream << delay;
|
|
|
|
//
|
|
//---------------------------
|
|
// Spatial command properties
|
|
//---------------------------
|
|
//
|
|
Scalar bearing = 30.0f;
|
|
page->GetEntry("BearingDelta", &bearing);
|
|
bearing *= Stuff::Radians_Per_Degree;
|
|
*component_stream << bearing;
|
|
|
|
Scalar minRange = 10.0f;
|
|
page->GetEntry("MinRange", &minRange);
|
|
Scalar near_clip = 0.0f;
|
|
page->GetEntry("NearClip", &near_clip);
|
|
Scalar maxRange = 100.0f;
|
|
page->GetEntry("MaxRange", &maxRange);
|
|
Scalar far_clip = maxRange;
|
|
page->GetEntry("FarClip", &far_clip);
|
|
|
|
*component_stream << near_clip << minRange << maxRange << far_clip;
|
|
|
|
//
|
|
//---------------------------------
|
|
// Now read the component variables
|
|
//---------------------------------
|
|
//
|
|
int attribute_id = -1;
|
|
const char* attribute_name;
|
|
result = true;
|
|
if (page->GetEntry("Status", &attribute_name))
|
|
{
|
|
Check_Object(class_data);
|
|
const AttributeEntry *attribute_entry =
|
|
class_data->attributeTable.GetAttributeEntry(attribute_name);
|
|
if (attribute_entry == NULL)
|
|
{
|
|
PAUSE((
|
|
"%s: {[%s]Status=%s}: Unknown attribute!",
|
|
page->GetNotationFile()->GetFileName(),
|
|
page->GetName(),
|
|
attribute_name
|
|
));
|
|
result = false;
|
|
}
|
|
else
|
|
{
|
|
Check_Object(attribute_entry);
|
|
if (attribute_entry->attributeType != IntClassID)
|
|
{
|
|
PAUSE((
|
|
"%s: {[%s]Status=%s}: Attribute is not correct type!",
|
|
page->GetNotationFile()->GetFileName(),
|
|
page->GetName(),
|
|
attribute_name
|
|
));
|
|
result = false;
|
|
}
|
|
else
|
|
attribute_id = attribute_entry->attributeID;
|
|
}
|
|
}
|
|
*component_stream << attribute_id;
|
|
|
|
bool does_start_running = false;
|
|
page->GetEntry("StartsRunning", &does_start_running);
|
|
*component_stream << does_start_running;
|
|
|
|
Scalar frame_rate = 8.0f;
|
|
page->GetEntry("FrameRate", &frame_rate);
|
|
if (frame_rate > SMALL)
|
|
frame_rate = 1.0f/frame_rate;
|
|
else
|
|
frame_rate = 0.0f;
|
|
*component_stream << frame_rate;
|
|
|
|
Check_Object(DefaultData);
|
|
return (result) ? DefaultData : NULL;
|
|
}
|