Files
RP412/tools/resbuild/recovered/VTVINT.SCP
T
CydandClaude Opus 5 8e2e00d8d3 The resource pipeline builds again
RPL4.RES is compiled from authored sources by RPL4TOOL -b, the original 1996
resource tool, which still builds in this tree. That pipeline did not work:
the tool aborted on the very first model, so the resource file could only be
consumed, never regenerated. Content could not be changed at all.

It died in PlugStream_FindEntryAndWriteObjectID resolving resource=
Translocation01 from AUDIO/PLYINT.SCP, a name defined in no file under
CONTENT/RP. The obvious suspect was the AWE32 soundbank path, since
AudioCard::LoadSBK is stubbed to return 1 by the Win32 port - but that is a
red herring. Supplying the banks changes nothing because nothing reads them
at build time. CreateStaticAudioStreamResource opens audio\static.scp, which
declares all 154 patch resources as plain text mapping each name to a bank
and patch number, and CONTENT/RP simply does not have that file. The sda4
developer drive does. Two more scripts included by 27 vehicles, VTVINT.SCP
and VTVEXT.SCP, were missing the same way. All three are kept in recovered/
because they are the keystone and are small.

No engine change was needed. The pipeline was missing content, not code.

build-res.ps1 assembles a build tree from the 4.10 content, those three
scripts, and the soundbanks and ~547 VIDEO files that RP412 ships complete
and the content tree does not. It never overwrites an authored file with a
shipped one, so archival content stays authoritative where it exists.

A model missing a skeleton is dropped SILENTLY - the tool logs and carries
on, producing a resource file with fewer models rather than failing. Check
the model count, which is why the script reports unresolved inputs.

-RestoreCutVehicles uncomments dark, blkspk and blktrn, three vehicles taken
out of the .bld after 4.10 shipped with their model ids left in place. All
three build clean and take the count from 42 to 45, exactly retail's, each
with its full subsystems, segments, damage zones and control mappings.

What this cannot do yet: eleven maps have no source. Five survive only on the
sda4 drive in a 1996 state older than retail, and otto, frstrm, burnt,
brewers, headoff and headmf are gone entirely - the .CAM cameras and .XST
existence boxes are here but the .MAP files are not. So a build from these
sources yields 45 models and zero maps against RP411's nine, and is not yet a
drop-in replacement for assets/RP411/RPL4.RES.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 17:12:00 -05:00

902 lines
17 KiB
Plaintext

#
#------------------------------------------------------------------
# VTV Audio Script
#------------------------------------------------------------------
#
#
#------------------------------------------------------------------
# AudioRenderTypes
#
# TransientAudioRenderType = 0
# SustainedAudioRenderType = 1
#
#------------------------------------------------------------------
# AudioSourcePriority
#
# MinAudioSourcePriority = 0
# LowAudioSourcePriority = 1
# MedAudioSourcePriority = 2
# HighAudioSourcePriority = 3
# MaxAudioSourcePriority = 4
#
#------------------------------------------------------------------
# AudioSourceMixPresence
#
# ManualAudioSourceMixPresence = 0
# MaxAudioSourceMixPresence = 1
# HighAudioSourceMixPresence = 2
# MedAudioSourceMixPresence = 3
# LowAudioSourceMixPresence = 4
# MinAudioSourceMixPresence = 5
#
#------------------------------------------------------------------
# AudioControlID
#
# NullAudioControlID = 0
# StartAudioControlID = 1
# StopAudioControlID = 2
# VolumeAudioControlID = 3
# PitchAudioControlID = 4
# BrightnessAudioControlID = 5
# AttackVolumeAudioControlID = 6
# AttackTimeAudioControlID = 7
# AudioControlIDCount = 8
#
#
#------------------------------------------------------------------
# Audio locations
#------------------------------------------------------------------
#
[L4AudioLocation]
location_offset=0.0,0.0,0.0
name=OriginLocation
#
#------------------------------------------------------------------
# Includes
#------------------------------------------------------------------
#
[include]
file=audio\colint.scp
file=audio\buttons.scp
file=audio\scoring.scp
#
#------------------------------------------------------------------
# Audio source components
#------------------------------------------------------------------
#
#
# Cockpit wind component
#
[DirectPatchSource]
location=OriginLocation
resource=CockpitWindDrone01
position=0
priority=1
mix_presence=0
volume_mix_level=0.9
pitch_mix_offset=0.0
brightness_mix_level=1.0
use_brightness_scale=1
use_attack_time_scale=0
has_compression_curve=0
compression_duration=0.0
name=CockpitWindComponent
#
# Cockpit turbulence component
#
[DirectPatchSource]
location=OriginLocation
resource=CockpitWindRush01
position=0
priority=1
mix_presence=3
volume_mix_level=1.0
pitch_mix_offset=0.0
brightness_mix_level=1.0
use_brightness_scale=1
use_attack_time_scale=0
has_compression_curve=0
compression_duration=0.0
name=CockpitTurbComponent
#
# Engine thrust component
#
[DirectPatchSource]
location=OriginLocation
resource=EngineThrustInt02
position=1
priority=1
mix_presence=3
volume_mix_level=1.0
pitch_mix_offset=0.0
brightness_mix_level=1.0
use_brightness_scale=1
use_attack_time_scale=0
has_compression_curve=0
compression_duration=0.0
name=EngineThrustComponent
#
# Scrape component
#
[Static3DPatchSource]
location=OriginLocation
resource=ScrapeInt01
priority=1
mix_presence=0
volume_mix_level=1.0
pitch_mix_offset=0.0
brightness_mix_level=1.0
use_brightness_scale=0
use_attack_time_scale=0
has_compression_curve=0
compression_duration=0.0
name=ScrapeComponent
#
# Booster component
#
[DirectPatchSource]
location=OriginLocation
resource=BoosterInt01
position=1
priority=3
mix_presence=2
volume_mix_level=0.95
pitch_mix_offset=0.0
brightness_mix_level=1.0
use_brightness_scale=0
use_attack_time_scale=0
has_compression_curve=1
compression_duration=6.0
name=BoosterComponent
#
# Booster loop component
#
[DirectPatchSource]
location=OriginLocation
resource=BoosterLoopInt01
position=1
priority=3
mix_presence=2
volume_mix_level=0.95
pitch_mix_offset=0.0
brightness_mix_level=1.0
use_brightness_scale=0
use_attack_time_scale=0
has_compression_curve=1
compression_duration=6.0
name=BoosterLoopComponent
#
# Death components
#
[DirectPatchSource]
location=OriginLocation
resource=DeathInt01
position=0
priority=4
mix_presence=1
volume_mix_level=0.95
pitch_mix_offset=0.0
brightness_mix_level=0.0
use_brightness_scale=0
use_attack_time_scale=0
has_compression_curve=0
compression_duration=0.0
name=DeathComponent01
[DirectPatchSource]
location=OriginLocation
resource=DeathInt02
position=1
priority=4
mix_presence=1
volume_mix_level=1.0
pitch_mix_offset=-200
brightness_mix_level=0.0
use_brightness_scale=0
use_attack_time_scale=0
has_compression_curve=0
compression_duration=0.0
name=DeathComponent02
#
# Horn component
#
[DirectPatchSource]
location=OriginLocation
resource=Horn01
position=0
priority=3
mix_presence=0
volume_mix_level=0.95
pitch_mix_offset=0.0
brightness_mix_level=1.0
use_brightness_scale=0
use_attack_time_scale=0
has_compression_curve=0
compression_duration=0.0
name=HornComponent
#
#------------------------------------------------------------------
# Non-trigger watchers
#------------------------------------------------------------------
#
#------------------------------------------------------------------
#
# Cockpit wind : linear velocity -> amplitude
#
[AudioMotionScale]
subsystem=Entity
attribute=LocalVelocity
motion_type=0
motion_value=3
audio_component=CockpitWindComponent
attribute_value_boundary1=5.0
attribute_value_boundary2=200.0
control_ID=3
control_value_boundary1=0.0
control_value_boundary2=1.0
exponent=0.3
dump_value=0
#
# Cockpit wind : linear velocity -> pitch
#
[AudioMotionScale]
subsystem=Entity
attribute=LocalVelocity
motion_type=0
motion_value=3
audio_component=CockpitWindComponent
attribute_value_boundary1=5.0
attribute_value_boundary2=300.0
control_ID=4
control_value_boundary1=-1800.0
control_value_boundary2=2800.0
exponent=0.3
dump_value=0
#
# Cockpit wind : linear velocity -> filter
#
[AudioMotionScale]
subsystem=Entity
attribute=LocalVelocity
motion_type=0
motion_value=3
audio_component=CockpitWindComponent
attribute_value_boundary1=5.0
attribute_value_boundary2=300.0
control_ID=5
control_value_boundary1=1.0
control_value_boundary2=0.4
exponent=2.0
dump_value=0
#------------------------------------------------------------------
#
# Cockpit turb : linear velocity -> amplitude
#
[AudioMotionScale]
subsystem=Entity
attribute=LocalVelocity
motion_type=0
motion_value=3
audio_component=CockpitTurbComponent
attribute_value_boundary1=70.0
attribute_value_boundary2=200.0
control_ID=3
control_value_boundary1=0.0
control_value_boundary2=1.0
exponent=0.2
dump_value=0
#
# Pitch Mixer : pitch mixer -> pitch
#
[AudioControlMixer]
audio_component=CockpitTurbComponent
first_input_control_ID=100
last_input_control_ID=102
output_control_ID=4
name=CockpitTurbPitchMixer
#
# Cockpit turb : linear velocity -> pitch mixer
#
[AudioMotionScale]
subsystem=Entity
attribute=LocalVelocity
motion_type=0
motion_value=3
audio_component=CockpitTurbPitchMixer
attribute_value_boundary1=70.0
attribute_value_boundary2=250.0
control_ID=100
control_value_boundary1=-100.0
control_value_boundary2=0.0
exponent=1.0
dump_value=0
#
# Cockpit turb : angular velocity -> pitch mixer
#
[AudioMotionScale]
subsystem=Entity
attribute=LocalVelocity
motion_type=1
motion_value=3
audio_component=CockpitTurbPitchMixer
attribute_value_boundary1=0.0
attribute_value_boundary2=0.3
control_ID=101
control_value_boundary1=-200.0
control_value_boundary2=0.0
exponent=1.0
dump_value=0
#
# Cockpit turb : filter smoother -> filter
#
[AudioControlSmoother]
audio_component=CockpitTurbComponent
number_of_samples=7
control_ID=5
name=CockpitTurbFilterSmoother
#
# Cockpit turb : angular velocity -> filter smoother
#
[AudioMotionScale]
subsystem=Entity
attribute=LocalVelocity
motion_type=1
motion_value=3
audio_component=CockpitTurbFilterSmoother
attribute_value_boundary1=0.0
attribute_value_boundary2=0.3
control_ID=5
control_value_boundary1=0.1
control_value_boundary2=0.8
exponent=0.4
dump_value=0
#------------------------------------------------------------------
#
# Engine thrust : amplitude smoother -> amplitude
#
[AudioControlSmoother]
audio_component=EngineThrustComponent
number_of_samples=20
control_ID=3
name=EngineThrustVolumeSmoother
#
# Engine thrust : amplitude mixer -> amplitude smoother
#
[AudioControlMixer]
audio_component=EngineThrustVolumeSmoother
first_input_control_ID=100
last_input_control_ID=103
output_control_ID=3
name=EngineThrustAmplitudeMixer
#
# Engine thrust : linear acceleration -> amplitude mixer
#
[AudioMotionScale]
subsystem=Entity
attribute=LocalAcceleration
motion_type=0
motion_value=3
audio_component=EngineThrustAmplitudeMixer
attribute_value_boundary1=0.1
attribute_value_boundary2=7.0
control_ID=100
control_value_boundary1=0.0
control_value_boundary2=1.0
exponent=0.4
dump_value=0
#
# Engine thrust : angular velocity -> amplitude mixer
#
[AudioMotionScale]
subsystem=Entity
attribute=LocalVelocity
motion_type=1
motion_value=3
audio_component=EngineThrustAmplitudeMixer
attribute_value_boundary1=0.0
attribute_value_boundary2=2.0
control_ID=101
control_value_boundary1=0.0
control_value_boundary2=1.0
exponent=1.0
dump_value=0
#
# Engine thrust : linear velocity -> amplitude mixer
#
[AudioMotionScale]
subsystem=Entity
attribute=LocalVelocity
motion_type=0
motion_value=3
audio_component=EngineThrustAmplitudeMixer
attribute_value_boundary1=10.0
attribute_value_boundary2=250.0
control_ID=102
control_value_boundary1=0.0
control_value_boundary2=-2.0
exponent=1.5
dump_value=0
#
# Engine thrust : height above terrain -> amplitude mixer
#
[AudioScalarScale]
subsystem=Entity
attribute=HeightAboveTerrain
audio_component=EngineThrustAmplitudeMixer
attribute_value_boundary1=0.0
attribute_value_boundary2=40.0
control_ID=103
control_value_boundary1=0.25
control_value_boundary2=-0.75
exponent=1.0
dump_value=0
#
# Engine thrust : pitch smoother -> pitch
#
[AudioControlSmoother]
audio_component=EngineThrustComponent
number_of_samples=30
control_ID=4
name=EngineThrustPitchSmoother
#
# Engine thrust : pitch mixer -> pitch smoother
#
[AudioControlMixer]
audio_component=EngineThrustPitchSmoother
first_input_control_ID=100
last_input_control_ID=102
output_control_ID=4
name=EngineThrustPitchMixer
#
# Engine thrust : linear acceleration -> pitch mixer
#
[AudioMotionScale]
subsystem=Entity
attribute=LocalAcceleration
motion_type=0
motion_value=3
audio_component=EngineThrustPitchMixer
attribute_value_boundary1=0.1
attribute_value_boundary2=7.0
control_ID=100
control_value_boundary1=-600.0
control_value_boundary2=200.0
exponent=1.0
dump_value=0
#
# Engine thrust : angular velocity -> pitch mixer
#
[AudioMotionScale]
subsystem=Entity
attribute=LocalVelocity
motion_type=1
motion_value=3
audio_component=EngineThrustPitchMixer
attribute_value_boundary1=0.0
attribute_value_boundary2=2.0
control_ID=101
control_value_boundary1=0.0
control_value_boundary2=200.0
exponent=1.0
dump_value=0
#
# Engine thrust : height above terrain -> pitch mixer
#
[AudioScalarScale]
subsystem=Entity
attribute=HeightAboveTerrain
audio_component=EngineThrustPitchMixer
attribute_value_boundary1=0.0
attribute_value_boundary2=40.0
control_ID=102
control_value_boundary1=-100.0
control_value_boundary2=100.0
exponent=1.0
dump_value=0
#
# Engine thrust : filter multiplier -> filter
#
[AudioControlMultiplier]
audio_component=EngineThrustComponent
first_input_control_ID=100
last_input_control_ID=101
output_control_ID=5
name=EngineThrustFilterMultiplier
#
# Engine thrust : hinge -> filter multiplier
#
[AudioHingeScale]
subsystem=Entity
attribute=ThrusterPitch
audio_component=EngineThrustFilterMultiplier
attribute_value_boundary1=-1.321
attribute_value_boundary2=1.321
control_ID=100
control_value_boundary1=1.0
control_value_boundary2=0.7
exponent=1.0
dump_value=0
#
# Engine thrust : filter smoother -> filter multiplier
#
[AudioControlSmoother]
audio_component=EngineThrustFilterMultiplier
number_of_samples=15
control_ID=101
name=EngineThrustFilterSmoother
#
# Engine thrust : linear acceleration -> filter smoother
#
[AudioMotionScale]
subsystem=Entity
attribute=LocalAcceleration
motion_type=0
motion_value=3
audio_component=EngineThrustFilterSmoother
attribute_value_boundary1=0.1
attribute_value_boundary2=7.0
control_ID=101
control_value_boundary1=0.5
control_value_boundary2=1.0
exponent=0.3
dump_value=0
#------------------------------------------------------------------
#
# Scrape : collision speed -> attack time
#
[!AudioScalarScale]
subsystem=Entity
attribute=CollisionSpeed
audio_component=ScrapeComponent
attribute_value_boundary1=0.0
attribute_value_boundary2=70.0
control_ID=7
control_value_boundary1=0.2
control_value_boundary2=0.1
exponent=1.0
dump_value=0
#
# Scrape : linear velocity -> amplitude
#
[AudioMotionScale]
subsystem=Entity
attribute=LocalVelocity
motion_type=0
motion_value=3
audio_component=ScrapeComponent
attribute_value_boundary1=0.0
attribute_value_boundary2=100.0
control_ID=3
control_value_boundary1=0.8
control_value_boundary2=1.0
exponent=0.2
dump_value=0
#
# Scrape : linear velocity -> pitch
#
[AudioMotionScale]
subsystem=Entity
attribute=LocalVelocity
motion_type=0
motion_value=3
audio_component=ScrapeComponent
attribute_value_boundary1=0.0
attribute_value_boundary2=200.0
control_ID=4
control_value_boundary1=-400.0
control_value_boundary2=400.0
exponent=0.5
dump_value=0
#------------------------------------------------------------------
#
# Booster : resource select
#
[AudioResourceSelector]
audio_source=BoosterComponent
audio_resource_index=BoosterIntIndex
control_ID=100
min_control_value=0.0
max_control_value=1.0
dump_value=0
name=BoosterResourceSelect
#
# Booster : Linear velocity -> resource select
#
[AudioMotionScale]
subsystem=Entity
attribute=LocalVelocity
motion_type=0
motion_value=3
audio_component=BoosterResourceSelect
attribute_value_boundary1=30.0
attribute_value_boundary2=150.0
control_ID=100
control_value_boundary1=0.0
control_value_boundary2=1.0
exponent=1.0
dump_value=0
#
# Boost Loop : filter smoother -> filter
#
[AudioControlSmoother]
audio_component=BoosterLoopComponent
number_of_samples=7
control_ID=5
name=BoosterLoopFilterSmoother
#
# Boost Loop : angular velocity -> filter smoother
#
[AudioMotionScale]
subsystem=Entity
attribute=LocalVelocity
motion_type=1
motion_value=3
audio_component=BoosterLoopFilterSmoother
attribute_value_boundary1=0.0
attribute_value_boundary2=0.3
control_ID=5
control_value_boundary1=0.1
control_value_boundary2=0.8
exponent=0.4
dump_value=0
#
#------------------------------------------------------------------
# Trigger watchers
#------------------------------------------------------------------
#
#
#------------------------------------------------------------------
# Wind trigger
#------------------------------------------------------------------
#
[AudioMotionTrigger]
subsystem=Entity
attribute=LocalVelocity
motion_type=0
motion_value=3
audio_component=CockpitWindComponent
attribute_value_threshold=5.0
control_ID_on=1
control_ID_off=2
control_value_on=0.0
control_value_off=0.0
inverse_trigger=0
dump_value=0
#
#------------------------------------------------------------------
# Turbulence trigger
#------------------------------------------------------------------
#
[AudioMotionTrigger]
subsystem=Entity
attribute=LocalVelocity
motion_type=0
motion_value=3
audio_component=CockpitTurbComponent
attribute_value_threshold=70.0
control_ID_on=1
control_ID_off=2
control_value_on=0.0
control_value_off=0.0
inverse_trigger=0
dump_value=0
#
#------------------------------------------------------------------
# Engine thrust trigger
#------------------------------------------------------------------
#
# HACK - seems to require this for when the entity first appears
[AudioControlSend]
audio_component=EngineThrustComponent
control_ID=1
control_value=0.0
[AudioStateTrigger]
subsystem=Entity
attribute=SimulationState
audio_component=EngineThrustComponent
trigger_state=0
inverse_trigger=0
control_ID=1
control_value=0.0
dump_value=0
[AudioStateTrigger]
subsystem=Entity
attribute=SimulationState
audio_component=EngineThrustComponent
trigger_state=2
inverse_trigger=0
control_ID=2
control_value=0.0
dump_value=0
#
#------------------------------------------------------------------
# Scrape trigger
#------------------------------------------------------------------
#
[L4AudioCollisionTrigger]
subsystem=Entity
attribute=CollisionState
normal_attribute=CollisionNormal
audio_component=ScrapeComponent
trigger_state=2
control_ID=1
control_value=0.0
dump_value=0
[AudioStateTrigger]
subsystem=Entity
attribute=CollisionState
audio_component=ScrapeComponent
trigger_state=2
inverse_trigger=1
control_ID=2
control_value=0.0
dump_value=0
#
#------------------------------------------------------------------
# Death trigger
#------------------------------------------------------------------
#
[AudioStateTrigger]
subsystem=Entity
attribute=SimulationState
audio_component=DeathComponent01
trigger_state=2
inverse_trigger=0
control_ID=1
control_value=0.0
dump_value=0
[AudioStateTrigger]
subsystem=Entity
attribute=SimulationState
audio_component=DeathComponent02
trigger_state=2
inverse_trigger=0
control_ID=1
control_value=0.0
dump_value=0
[AudioStateTrigger]
subsystem=Entity
attribute=SimulationState
audio_component=DeathComponent01
trigger_state=2
inverse_trigger=1
control_ID=2
control_value=0.0
dump_value=0
[AudioStateTrigger]
subsystem=Entity
attribute=SimulationState
audio_component=DeathComponent02
trigger_state=2
inverse_trigger=1
control_ID=2
control_value=0.0
dump_value=0
#
#------------------------------------------------------------------
# Horn trigger
#------------------------------------------------------------------
#
[AudioIntegerTrigger]
subsystem=ControlsMapper
attribute=HornBlast
audio_component=HornComponent
attribute_value_threshold=0.0
control_ID_on=1
control_ID_off=2
control_value_on=0.0
control_value_off=0.0
inverse_trigger=0
dump_value=0