<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://fileformats.archiveteam.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://fileformats.archiveteam.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Foxtrot</id>
		<title>Just Solve the File Format Problem - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://fileformats.archiveteam.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Foxtrot"/>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/Special:Contributions/Foxtrot"/>
		<updated>2026-05-05T02:28:32Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.2</generator>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/XLTM</id>
		<title>XLTM</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/XLTM"/>
				<updated>2023-08-30T09:36:15Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: Created page with &amp;quot;{{FormatInfo |formattype=electronic |subcat=Document |subcat2=Spreadsheet |extensions={{ext|xltm}} }}  '''XLTM''' is the macro-enabled variant of XLTX, which in itself is ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|subcat=Document&lt;br /&gt;
|subcat2=Spreadsheet&lt;br /&gt;
|extensions={{ext|xltm}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''XLTM''' is the macro-enabled variant of [[XLTX]], which in itself is template variant of the [[Microsoft Excel]] spreadsheet format [[XLSX]].&lt;br /&gt;
&lt;br /&gt;
[[Category:XML based file formats]]&lt;br /&gt;
[[Category:Microsoft]]&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/VAG_(PlayStation)</id>
		<title>VAG (PlayStation)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/VAG_(PlayStation)"/>
				<updated>2023-08-29T08:49:31Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|subcat=Audio and Music&lt;br /&gt;
|extensions={{ext|vag}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Resident Evil (1997)]]&lt;br /&gt;
&lt;br /&gt;
'''VAG''' is the PlayStation single waveform data format for [[ADPCM|ADPCM-encoded data]] of sampled sounds.&lt;br /&gt;
&lt;br /&gt;
== Specification ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Variable		&lt;br /&gt;
! Type&lt;br /&gt;
|-&lt;br /&gt;
| Signature&lt;br /&gt;
| {{magic|VAGp}}&lt;br /&gt;
|-&lt;br /&gt;
| Version&lt;br /&gt;
| 4 bytes&lt;br /&gt;
|-&lt;br /&gt;
| Reserved&lt;br /&gt;
| 4 bytes&lt;br /&gt;
|-&lt;br /&gt;
| Data size&lt;br /&gt;
| 4 bytes&lt;br /&gt;
|-&lt;br /&gt;
| Sampling frequency&lt;br /&gt;
| 4 bytes&lt;br /&gt;
|-&lt;br /&gt;
| Name&lt;br /&gt;
| 16 bytes&lt;br /&gt;
|-&lt;br /&gt;
| Waveform data&lt;br /&gt;
| (remainder of data)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
* [https://psx.arthus.net/sdk/Psy-Q/DOCS/Devrefs/Filefrmt.pdf PlayStation file formats] on ''psx.arthus.net''&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/Audio_and_Music</id>
		<title>Audio and Music</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/Audio_and_Music"/>
				<updated>2023-08-29T08:46:52Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: /* Sony */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|thiscat=Audio and Music&lt;br /&gt;
|image=Music.jpg&lt;br /&gt;
|caption=Musical notation&lt;br /&gt;
}}&lt;br /&gt;
[[Electronic_File_Formats|Electronic Formats]] concerned with audio and musical data, including sound recording, instrument control, musical notation, etc.&lt;br /&gt;
&lt;br /&gt;
For additional multimedia formats that may contain audio, see [[Video]].&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
* For an excellent introduction to the issues around audio and video formats, see [http://www.avpreserve.com/blog/a-primer-on-codecs-for-moving-image-and-sound-archives-2/ A Primer on Codecs for Moving Image and Sound Archives - and 10 Recommendations for Codec Selection &amp;amp; Management] [http://www.avpreserve.com/wp-content/uploads/2010/04/AVPS_Codec_Primer.pdf PDF version]&lt;br /&gt;
* [http://www.garymcgath.com/streamingprotocols.html Basics of streaming protocols]&lt;br /&gt;
&lt;br /&gt;
== Album formats ==&lt;br /&gt;
(files containing entire music albums, with some track structure)&lt;br /&gt;
* [[Connected Media Experience]] (CME, CMX)&lt;br /&gt;
* [[iTunes LP]]&lt;br /&gt;
&lt;br /&gt;
== Audio and sequencer software ==&lt;br /&gt;
&lt;br /&gt;
* Ableton&lt;br /&gt;
** [[Ableton Live]]&lt;br /&gt;
* Adobe Audition&lt;br /&gt;
** [[Cool Edit / Audition Multi Track Session file]] (.ses)&lt;br /&gt;
** [[Audition]] (.sesx)&lt;br /&gt;
* Aldrin&lt;br /&gt;
** [[Creative Commons Module]] (.ccm)&lt;br /&gt;
* [[Audacity Project Format]] (.aup)&lt;br /&gt;
** [[Audacity AU]] (.au)&lt;br /&gt;
* Cakewalk&lt;br /&gt;
** [[Cakewalk Bundle (BUN)]] (.bun)&lt;br /&gt;
** [[Cakewalk Bundle (CWB)]] (.cwb)&lt;br /&gt;
** [[Cakewalk Dump Request Macro]] (.drm)&lt;br /&gt;
** [[Cakewalk Instrument Definition File]] (.ins)&lt;br /&gt;
** [[Cakewalk Project (CWP)]] (.cwp)&lt;br /&gt;
** [[Cakewalk Project (WRK)]] (.wrk)&lt;br /&gt;
** [[Cakewalk Sample Definition File]] (.sfz)&lt;br /&gt;
* [[CPS project]] (.cps)&lt;br /&gt;
* [[DeLuxe Music Score]]&lt;br /&gt;
* [[Digital Performer]]&lt;br /&gt;
* [[Dynamic Studio Professional module]]&lt;br /&gt;
* FruityLoops / FL Studio&lt;br /&gt;
** [[BeatCreator/BeatSlicer Grid File]] (.zgr)&lt;br /&gt;
** [[DrumSynth Preset]] (.ds)&lt;br /&gt;
** [[FL Studio Score File]] (.fsc)&lt;br /&gt;
** [[FL Studio State File]] (.fst)&lt;br /&gt;
** [[Humanize Preset]] (.fpr)&lt;br /&gt;
** [[Raw FL Studio Project]] (.flp)&lt;br /&gt;
** [[SimSynth Preset]] (.syn)&lt;br /&gt;
** [[Speech Preset]] (.speech)&lt;br /&gt;
* GarageBand (Mac)&lt;br /&gt;
** [[GarageBand project]] (.band, .gbproj)&lt;br /&gt;
** [[Magic GarageBand template]] (.wand)&lt;br /&gt;
** [[GarageBand MagicMentor template]] (.mwand)&lt;br /&gt;
* [[Hydrogen]] (.h2song, .h2pattern)&lt;br /&gt;
* [[iZotope RX]] (.rxdoc)&lt;br /&gt;
* Jeskola Buzz&lt;br /&gt;
** [[Jeskola Buzz machine]] (.dll)&lt;br /&gt;
** [[Jeskola Buzz machine preset]] (.prs, .prs.xml)&lt;br /&gt;
** [[Jeskola Buzz song]] (.bmx, .bmw)&lt;br /&gt;
* [[LMMS]] (Linux MultiMedia Studio) (.mmp, .mmpz)&lt;br /&gt;
* Logic Pro / Logic / Notator Logic&lt;br /&gt;
** [[Logic Pro project file]] (.logic, .logicx)&lt;br /&gt;
* [[Maestro]] (RISC OS)&lt;br /&gt;
* [[Make-A-Melody]] (''Big Blue Disk'' #42) (.mus)&lt;br /&gt;
* [[Nero SoundTrax]] (.npf)&lt;br /&gt;
* [[Nero WaveEditor]] (.nwf)&lt;br /&gt;
* Piston Collage / PxTone&lt;br /&gt;
** [[Piston Collage noise]] (.ptnoise)&lt;br /&gt;
** [[Piston Collage song]] (.ptcop, .pttune)&lt;br /&gt;
** [[Piston Collage voice]] (.ptvoice)&lt;br /&gt;
* Pro Tools&lt;br /&gt;
** [[Pro Tools (Mac)]] (.pt5, .p24, .pt4, .pt3)&lt;br /&gt;
** [[PTS]] (Pro Tools 5.1-6.9)&lt;br /&gt;
** [[PTF]] (Pro Tools 7-9) &lt;br /&gt;
** [[PTX (Pro Tools)|PTX]] (Pro Tools 10)&lt;br /&gt;
* Propellerhead (Reason, ReCycle)&lt;br /&gt;
** [[Propellerhead Reason NN-XT Patch File]] (.sx2)&lt;br /&gt;
** [[Propellerhead Reason Project File]] / song file (.reason, .rns, others)&lt;br /&gt;
** [[Propellerhead Reason ReFill Sound Bank]] (.rfl)&lt;br /&gt;
** [[Propellerhead ReCycle Loop File]] (.rex)&lt;br /&gt;
** [[Reason Studios REX2 Audio File]] (.rx2)&lt;br /&gt;
* [[Reaper Project]] (.rpp)&lt;br /&gt;
* [[Renoise]]&lt;br /&gt;
** [[Renoise song]] (.xrns)&lt;br /&gt;
** [[Renoise instrument]] (.xrni)&lt;br /&gt;
** [[Renoise DSP device-chain]] (.xrnt)&lt;br /&gt;
* [[ROXIO|Roxio]]&lt;br /&gt;
** [[DMSE]] (Sound Editor project) &lt;br /&gt;
** [[DMSA]] (Music Disc Creator project)&lt;br /&gt;
* SeaTone / PixTone&lt;br /&gt;
** [[PXT]] (.pxt)&lt;br /&gt;
* [[Sonic Foundry Acid]] (.acd)&lt;br /&gt;
* [[SoundDesigner II]] (.sd2)&lt;br /&gt;
* [[Soundtrack Pro]] (.stmp)&lt;br /&gt;
* Steinberg&lt;br /&gt;
** [[Cubase]]&lt;br /&gt;
*** [[ALL]] - A Steinberg [[Cubase]] VST file for saving songs (pre 2002).&lt;br /&gt;
*** [[ARR]]  - A Steinberg [[Cubase]] VST file for saving arrangements (pre 2002). &lt;br /&gt;
*** [[CPR]] - A Steinberg [[Cubase]] SX file for saving projects (2002 - ).&lt;br /&gt;
** [[Nuendo]]&lt;br /&gt;
*** [[NPR]] - A Steinberg [[Nuendo]] file for saving arrangements (2002 - ).&lt;br /&gt;
** [[WaveLab]]&lt;br /&gt;
*** [[MON]] (Audio montage)&lt;br /&gt;
* [[(Super) Studio Session song]] (.sss)&lt;br /&gt;
* [[Waveburner]] (.wb3)&lt;br /&gt;
&lt;br /&gt;
== Audio recording and sound waves ==&lt;br /&gt;
&lt;br /&gt;
* Lossless compression&lt;br /&gt;
** [[ATRAC Advanced Lossless]] (.aal)&lt;br /&gt;
** [[ADA]]  (Advanced Digital Audio)&lt;br /&gt;
** [[ALAC]] (Apple Lossless Audio Codec)&lt;br /&gt;
** [[APAC]] (Marian's A-pac)&lt;br /&gt;
** [[Dakx Wav]]&lt;br /&gt;
** [[Dolby TrueHD]]&lt;br /&gt;
** [[DTS-HD]] (Lossless variant of DTS- DTS-HD Master Audio)&lt;br /&gt;
** [[FLAC]] (Free Lossless Audio Codec)&lt;br /&gt;
** [[Kexis]] (.kxs)&lt;br /&gt;
** [[LA]] (Lossless Audio)&lt;br /&gt;
** [[LiteWave]]&lt;br /&gt;
** [[LPAC]] (Lossless Predictive Audio Coding)&lt;br /&gt;
** [[MKW]]&lt;br /&gt;
** [[MLP]] (Meridian Lossless Packing Audio)&lt;br /&gt;
** [[Monkey's Audio]] (.ape)&lt;br /&gt;
** [[MPEG-4 ALS]] (MPEG-4 Audio Lossless Coding)&lt;br /&gt;
** [[MPEG-4 SLS]] (MPEG-4 Scalable lossless coding mode)&lt;br /&gt;
** [[MQA]] (Master Quality Authenticated)&lt;br /&gt;
** [[OptimFROG]] (.ofr, .ofs)&lt;br /&gt;
** [[Perfect Clarity Audio]] (.pca)&lt;br /&gt;
** [[RALF]] (Real Lossless Audio Codec)&lt;br /&gt;
** [[RK Audio]] (.rka)&lt;br /&gt;
** [[Shorten]] (.shn)&lt;br /&gt;
** [[Sonarc]]&lt;br /&gt;
** [[Split2000]]&lt;br /&gt;
** [[TAK]] (.tak)&lt;br /&gt;
** [[True Audio]] (.tta)&lt;br /&gt;
** [[VocPack]]&lt;br /&gt;
** [[WavArc]]&lt;br /&gt;
** [[WavPack]] (.wv)&lt;br /&gt;
** [[WMA Lossless]] (Windows Media Audio 9 Lossless)&lt;br /&gt;
* Lossy compression&lt;br /&gt;
** [[AAC]] (Advanced Audio Coding)&lt;br /&gt;
** [[ADPCM|Adaptive differential pulse-code modulation]]&lt;br /&gt;
*** [[ACT]]&lt;br /&gt;
*** [[ADPCM-A]] (Yamaha)&lt;br /&gt;
*** [[ADPCM-B]] (Yamaha)&lt;br /&gt;
*** [[VOX]]&lt;br /&gt;
** [[Adaptive Multi-Rate WideBand Audio]]&lt;br /&gt;
** [[Adaptive Multi-Rate Audio]] (.amr)&lt;br /&gt;
** [[Archimedes VIDC audio]]&lt;br /&gt;
** ATRAC or [[Adaptive Transform Acoustic Coding]] (.aa3, .oma, .at3)&lt;br /&gt;
** [[Audible Audiobook]] (.aa, .aax)&lt;br /&gt;
** [[Audition Loop]] (.cel)&lt;br /&gt;
** [[CELT]] (.ogg)&lt;br /&gt;
** [[Digital Theater Systems]] (.dts)&lt;br /&gt;
** [[Dolby Digital]] (AC-3 or ATSC A/52)&lt;br /&gt;
** [[GSM]] (GSM 6.10 RPE-LTP)&lt;br /&gt;
** [[M4B]] (iTunes Audio Book)&lt;br /&gt;
** [[M4P]] (Fairplay DRM Encrypted [[M4A]])&lt;br /&gt;
** MP1: See [[MPEG Audio Layer I]]&lt;br /&gt;
** MP2: See [[MPEG Audio Layer II]]&lt;br /&gt;
** [[MP3]] (MPEG-1 / MPEG-2 Audio Layer III)&lt;br /&gt;
*** [[packMP3]]&lt;br /&gt;
*** [[MP3 wrapper]] - '''reversibly''' combine mp3 files into one playable mp3 (often used on filesharing services that banned other formats like zip/rar)&lt;br /&gt;
**** [[zip/rar.mp3]]&lt;br /&gt;
**** [[AlbumWrap (ALBW)]]&lt;br /&gt;
**** [[MooseWrap (DJWrap)]]&lt;br /&gt;
**** [[Mp3Wrap]]&lt;br /&gt;
**** [[Track Wrapper (TRKW)]]&lt;br /&gt;
**** [[MP3 Album Maker]]&lt;br /&gt;
**** [[M3A]]&lt;br /&gt;
** MPA (MPEG Audio): See [[MPEG Audio Layer II]]&lt;br /&gt;
** MP+ (MPEGplus Audio): See [[Musepack Audio]]&lt;br /&gt;
** MPEG-4 Audio: Can refer to various formats connected with [[MPEG-4]], including [[AAC]]. (.m4a, .m4b, .m4p, .m4r, .mp4, .aac)&lt;br /&gt;
** [[MPEG Audio Layer I]] (MP1)&lt;br /&gt;
** [[MPEG Audio Layer II]] (MP2; MPEG-1 Audio Layer II)&lt;br /&gt;
** [[Musepack Audio]] (.mpc)&lt;br /&gt;
** [[Opus]] (.opus)&lt;br /&gt;
** [[Quite OK Audio]] (.qoa)&lt;br /&gt;
** [[RealAudio]] (.ra)&lt;br /&gt;
** [[Speex]] (.spx)&lt;br /&gt;
** [[SWA]]&lt;br /&gt;
** [[Vorbis]] (.logg, .oga, .ogg)&lt;br /&gt;
** [[WMA]] (Windows Media Audio)&lt;br /&gt;
* Proprietary&lt;br /&gt;
** [[DCT]] (Dictation format by NCH Software)&lt;br /&gt;
** [[Digital Speech Standard]] (.dss)&lt;br /&gt;
** [[Digital Voice File]] (.dvf)&lt;br /&gt;
** [[IC Sound]] (.ics)&lt;br /&gt;
** [[iKlax]] (iKlax Media)&lt;br /&gt;
** [[Memory Stick Voice]] (.msv)&lt;br /&gt;
** [[Panasonic VM1]] (.vm1)&lt;br /&gt;
** [[Pono]]&lt;br /&gt;
** [[PXD]]&lt;br /&gt;
* Separated parts of tracks&lt;br /&gt;
** [[Stems]]&lt;br /&gt;
* Uncompressed audio&lt;br /&gt;
** [[AIFF|AIF / AIFF]] (Audio Interchange File Format)&lt;br /&gt;
** [[Berkeley/IRCAM/Carl Sound Format]] (.sf)&lt;br /&gt;
** [[BWF]] (Broadcast Wave Format; variant of WAV)&lt;br /&gt;
** [[DSD]] (Direct Stream Digital) (.dsf)&lt;br /&gt;
** [[RAW (Audio)|RAW]] (.raw, .pcm)&lt;br /&gt;
** [[RF64]] (extended variant of BWF)&lt;br /&gt;
** [[Sony Wave64]] (.w64)&lt;br /&gt;
** [[WAV]] (Waveform Audio File Format)&lt;br /&gt;
* Various encodings&lt;br /&gt;
** [[AIFC]] ([[AIFF]] Compressed)&lt;br /&gt;
** [[AU]] (Sun Microsystems audio format)&lt;br /&gt;
** [[Computerized Speech Lab NSP]] (.nsp)&lt;br /&gt;
** [[DiamondWare Digitized]] (.dwd)&lt;br /&gt;
** [[Bonk]] (lossy/lossless audio compression)&lt;br /&gt;
** [[INRS-Telecom file]] (.aud)&lt;br /&gt;
** [[SIFF]] (.son)&lt;br /&gt;
** [[SPPACK]] (.d)&lt;br /&gt;
** [[WVE (Psion)]]&lt;br /&gt;
&lt;br /&gt;
== Chiptune ==&lt;br /&gt;
&lt;br /&gt;
* [[SAM Coupé song]] (.cop, .sng)&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
&lt;br /&gt;
* [[X2A]] (Yamaha S70xs/S90xs keyboard workstations)&lt;br /&gt;
&lt;br /&gt;
== Container formats ==&lt;br /&gt;
&lt;br /&gt;
* [[AAF]] (Advanced Authoring Format)&lt;br /&gt;
* [[ASF]] (Advanced Systems Format)&lt;br /&gt;
* [[Core Audio Format]] (.caf)&lt;br /&gt;
* [[Extensible Music Format]] (.xmf)&lt;br /&gt;
* [[IFF]]&lt;br /&gt;
* [[Matroska Audio]] (.mka)&lt;br /&gt;
* [[MP4]] (MPEG-4 Part 14 media container)&lt;br /&gt;
* [[Ogg]] (.ogg, .oga, .ogx, .spx, .opus)&lt;br /&gt;
* [[OMF Interchange]] (Open Media Framework Interchange format)&lt;br /&gt;
* [[Qualcomm QCP]] (Purevoice)&lt;br /&gt;
* [[Rich Music Format]] (.rmf)&lt;br /&gt;
* [[RealMedia]] (.rm)&lt;br /&gt;
* [[WAV]]&lt;br /&gt;
* [[WebM]] (.webm) (also used for video)&lt;br /&gt;
&lt;br /&gt;
== Converters ==&lt;br /&gt;
&lt;br /&gt;
* [[Konvertor]]&lt;br /&gt;
&lt;br /&gt;
== Emulated music ==&lt;br /&gt;
&lt;br /&gt;
* [[2SF]] (Nintendo DS [[PSF]])&lt;br /&gt;
* [[3G2]] (3GPP, also a video format)&lt;br /&gt;
* [[3GP]] (3GPP, also a video format)&lt;br /&gt;
* [[Atari SoundHeader]] (SNDH)&lt;br /&gt;
* [[AY]] (Amstrad CPC / ZX Spectrum / ZXAYEMUL)&lt;br /&gt;
* [[AZX]] (ZX Spectrum)&lt;br /&gt;
* [[Custom Amiga Module]] (CUST)&lt;br /&gt;
* [[DSF]] (Dreamcast [[Portable Sound Format|PSF]])&lt;br /&gt;
* [[EPSGMOD]] (.epsgmod, Mod2PSG)&lt;br /&gt;
* [[Fuxoft AY Language]] (.fmx)&lt;br /&gt;
* [[Game Boy Sound]] (.gbs)&lt;br /&gt;
* [[GBR]] (Game Boy Sound)&lt;br /&gt;
* [[Gens Sound Record]] (GSR)&lt;br /&gt;
* [[GSF]] (Game Boy Advance [[PSF]])&lt;br /&gt;
* [[HES]] (Hudson Entertainment System)&lt;br /&gt;
* [[KSS]] (MSX)&lt;br /&gt;
* [[KSSX]] (Possible expansion of [[KSS]])&lt;br /&gt;
* [[MDX (X68000)|MDX]] (Sharp X68000 / MXDRV)&lt;br /&gt;
* [[NES Sound Format]] (.nsf)&lt;br /&gt;
* [[NES Sound Format Extended]] (.nsfe)&lt;br /&gt;
* [[NSD (audio)|NSD]]&lt;br /&gt;
* [[Portable Sound Format|PSF]] (Portable Sound Format)&lt;br /&gt;
* [[PSF1]] (Playstation [[PSF]])&lt;br /&gt;
* [[PSF2]] (Playstation 2 [[PSF]])&lt;br /&gt;
* [[QSF]] (Capcom Q-Sound [[PSF]])&lt;br /&gt;
* [[SC68]] (Atari ST / Atari STE / Amiga)&lt;br /&gt;
* [[SGC]] (Sega Master System / Game Gear / Colecovision)&lt;br /&gt;
* [[SID]] (Commodore 64)&lt;br /&gt;
* [[SPC (Audio)|SPC]] (Super Nintendo SPC700)&lt;br /&gt;
* [[SSF]] (Sega Saturn [[Portable Sound Format|PSF]])&lt;br /&gt;
* [[USF]] (Nintendo 64 [[Portable Sound Format|PSF]])&lt;br /&gt;
* [[YM]] (Amstrad CPC / Spectrum ZX / Atari ST)&lt;br /&gt;
&lt;br /&gt;
== Game audio and music ==&lt;br /&gt;
&lt;br /&gt;
(see also [[Game data files]])&lt;br /&gt;
&lt;br /&gt;
* [[4X IMA ADPCM]]&lt;br /&gt;
* Accolade&lt;br /&gt;
** [[Accolade MIDI File Format]]&lt;br /&gt;
* Adept Software&lt;br /&gt;
** [[God of Thunder Music Format]]&lt;br /&gt;
* [[AFC]] (AFX Audio File) -- used in Mass Effect 2&lt;br /&gt;
* Apogee&lt;br /&gt;
** [[Crystal Caves Sound format]]&lt;br /&gt;
* Atari&lt;br /&gt;
** [[Slight Atari Player]] (Atari POKEY)&lt;br /&gt;
* [[BAF]] (Blur ADPCM)&lt;br /&gt;
* [[BAKA]] (PCM 16 bit)&lt;br /&gt;
* Bandai&lt;br /&gt;
** [[WSR]] (WonderSwan / WonderSwan Color)&lt;br /&gt;
* [[BH2PCM]]&lt;br /&gt;
* [[BNSF]] (G.722.1)&lt;br /&gt;
* Cave Story&lt;br /&gt;
** [[Organya]]&lt;br /&gt;
* Commodore Amiga&lt;br /&gt;
** [[A.M. Composer v1.2]] (.amc)&lt;br /&gt;
** [[AC1D-DC1A Packer]] (.ac1d)&lt;br /&gt;
** [[Actionamics Sound Tool]] (.ast)&lt;br /&gt;
** [[AMOS Music Bank]] (.abk)&lt;br /&gt;
** [[AMOS Memory Bank#AMOS Samples Bank|AMOS Samples Bank]] (.abk)&lt;br /&gt;
** [[Art &amp;amp; Magic]] (.aam)&lt;br /&gt;
** [[Audio Sculpture]] (.as)&lt;br /&gt;
** [[Beathoven Synthesiser]] (.bss)&lt;br /&gt;
** [[Ben Daglish]] (.bd)&lt;br /&gt;
** [[Ben Daglish SID]] (.bds)&lt;br /&gt;
** [[Ben Replay]] (.ben)&lt;br /&gt;
** [[Channel Players]] (.chan)&lt;br /&gt;
** [[Cinemaware]] (.cin)&lt;br /&gt;
** [[Core Design]] (.core)&lt;br /&gt;
** [[CustomMade]] (.cm)&lt;br /&gt;
** [[Darius Zendeh]] (.dz)&lt;br /&gt;
** [[Dave Lowe]] (.dl)&lt;br /&gt;
** [[Dave Lowe New]] (.dln)&lt;br /&gt;
** [[David Hanney]] (.dh)&lt;br /&gt;
** [[David Whittaker]] (.dw)&lt;br /&gt;
** [[Desire]] (.dsr)&lt;br /&gt;
** [[Digital Illusions]] (.di)&lt;br /&gt;
** [[Digital Sonix &amp;amp; Chrome]] (.dsc)&lt;br /&gt;
** [[Digital Sound Creations]] (.han)&lt;br /&gt;
** [[Dirk Bialluch]] (.tpu)&lt;br /&gt;
** [[Dynamic Synthesizer]] (.dns)&lt;br /&gt;
** [[Editeur Musical Sequentiel]] (.ems)&lt;br /&gt;
** [[Follin Player II]] (.tf)&lt;br /&gt;
** [[Fred Editor]] (.fred)&lt;br /&gt;
** [[Fred Gray]] (.fg)&lt;br /&gt;
** [[Future Player]] (.fp)&lt;br /&gt;
** [[FWMP]] (.fw)&lt;br /&gt;
** [[Game Music Creator]] (.gmc)&lt;br /&gt;
** [[Gnu Player]] (.gp)&lt;br /&gt;
** [[Hippel]] (.hip)&lt;br /&gt;
** [[Hippel-COSO]] (.hipc)&lt;br /&gt;
** [[Hornet Packer]] (.hrt)&lt;br /&gt;
** [[Howie Davies]] (.hd)&lt;br /&gt;
** [[IFF-MAUD]]&lt;br /&gt;
** [[Images Music System]] (.ims)&lt;br /&gt;
** [[Infogrames INS]] (.ins)&lt;br /&gt;
** [[Janko Mrsic-Flogel]] (.jmf)&lt;br /&gt;
** [[Jason Brooke]] (.jcb)&lt;br /&gt;
** [[Jason Page]] (.jp)&lt;br /&gt;
** [[Jeroen Tel]] (.jt)&lt;br /&gt;
** [[Jesper Olsen]] (.jo)&lt;br /&gt;
** [[Jochen Hippel]] (.hip)&lt;br /&gt;
** [[Kefrens Sound Machine]] (.ksm)&lt;br /&gt;
** [[Kris Hatlelid]] (.kh)&lt;br /&gt;
** [[Leggless Music Editor]] (.lme)&lt;br /&gt;
** [[Magnetic Fields Packer]] (.mfp)&lt;br /&gt;
** [[Maniacs of Noise]] (.mon, .jt)&lt;br /&gt;
** [[Mark Cooksey]] (.mc)&lt;br /&gt;
** [[Mark II Sound-System]] (.mii, .mk2, .mkii)&lt;br /&gt;
** [[Martin Walker]] (.mw)&lt;br /&gt;
** [[MaxTrax]] (.mxtx)&lt;br /&gt;
** [[Mike Davies]] (.md)&lt;br /&gt;
** [[MMDC]] (Module packer)&lt;br /&gt;
** [[Mugician]] (.mug)&lt;br /&gt;
** [[Mugician II]] (.mug2)&lt;br /&gt;
** [[NoiseRunner]] (.nr)&lt;br /&gt;
** [[NovoTrade Packer]] (.ntp)&lt;br /&gt;
** [[Pierre Adane Packer]] (.pap)&lt;br /&gt;
** [[Power Music]] (.pm)&lt;br /&gt;
** [[Professional Sound Artists]] (.psa)&lt;br /&gt;
** [[Promizer 0.1]] (.pm01)&lt;br /&gt;
** [[Promizer 1.0c]] (.pm10)&lt;br /&gt;
** [[Promizer 1.8a]] (.pm18)&lt;br /&gt;
** [[Promizer 2.0]] (.pm20)&lt;br /&gt;
** [[Promizer 4.0]] (.pm40)&lt;br /&gt;
** [[ProPacker 1.0]] (.pp10)&lt;br /&gt;
** [[ProPacker 2.1]] (.pp21)&lt;br /&gt;
** [[ProPacker 3.0]] (.pp30)&lt;br /&gt;
** [[Prorunner]] (.prun1, .prun2)&lt;br /&gt;
** [[Richard Joseph]] or Vectordean (.rjp)&lt;br /&gt;
** [[Rob Hubbard]] (.rh, .rho)&lt;br /&gt;
** [[Ron Klaren]] (.rk)&lt;br /&gt;
** [[Sean Connolly]] (.scn)&lt;br /&gt;
** [[Sean Conran]] (.scr)&lt;br /&gt;
** [[Sidmon]] (.sid, .sid2)&lt;br /&gt;
** [[Silmarils]] (.mok)&lt;br /&gt;
** [[SKYT Packer]] (.skyt)&lt;br /&gt;
** [[Sonic Arranger]] (.sa)&lt;br /&gt;
** [[Sound Images]] (.tw)&lt;br /&gt;
** [[Sound Master]] (.sm)&lt;br /&gt;
** [[Sound Programming Language]] (.spl)&lt;br /&gt;
** [[Soundcontrol]] (.sct)&lt;br /&gt;
** [[Soundfactory]] (.psf)&lt;br /&gt;
** [[SoundPlayer]] (.sjs)&lt;br /&gt;
** [[Special FX]] (.jd)&lt;br /&gt;
** [[Speedy System]] (.ss)&lt;br /&gt;
** [[Steve Barrett]] (.sb)&lt;br /&gt;
** [[Jason Page|Steve Turner]] (.jpo)&lt;br /&gt;
* [[Star Trekker Packer]] (.stpk)&lt;br /&gt;
** [[Synth Dream]] (.sdr)&lt;br /&gt;
** [[Synth Pack]] (.osp)&lt;br /&gt;
** [[The Musical Enlightenment]] (.tme)&lt;br /&gt;
** [[The Player]] (.p22a, .p30a, .p40a, .p40b, .p50a, .p60a, .p61a)&lt;br /&gt;
** [[Titanics Player]] (.ttp)&lt;br /&gt;
** [[Tracker Packer 1]] (.tp1)&lt;br /&gt;
** [[Tracker Packer 2]] (.tp2)&lt;br /&gt;
** [[Tracker Packer 3]] (.tp3)&lt;br /&gt;
** [[Thomas Hermann]] (.thm)&lt;br /&gt;
** [[Wally Beben]] (.wb)&lt;br /&gt;
** [[Wanton Packer]] (.wn)&lt;br /&gt;
** [[XANN Packer]] (.xann)&lt;br /&gt;
** [[Zen Packer]] (.zen)&lt;br /&gt;
* CRI Middleware&lt;br /&gt;
** [[ADX]]&lt;br /&gt;
** [[AFS]] (container format for [[ADX]] / [[AHX (CRI)]])&lt;br /&gt;
** [[AHX (CRI)]]&lt;br /&gt;
** [[AIX]]&lt;br /&gt;
* [[DCS]] (ADPCM)&lt;br /&gt;
* [[Death Rally Archive]] (.bpa)&lt;br /&gt;
* [[DMSG]] (PCM 16 bit)&lt;br /&gt;
* [[EACS IMA ADPCM]] (.kcey)&lt;br /&gt;
* Electronic Arts&lt;br /&gt;
** [[8-Bit Sampled Voice]] (.8svx, .iff)&lt;br /&gt;
** [[Asylum Music Format]] (.amf, used in Crusader: No Remorse / Crusader: No Regret)&lt;br /&gt;
** [[Electronic Arts AS4 / ASF Music]] (.as4, .asf)&lt;br /&gt;
** [[Electronic Arts KSF Music]] (.ksf)&lt;br /&gt;
** [[Electronic Arts MUS]] (.mus)&lt;br /&gt;
** [[Electronic Arts SCxl]]&lt;br /&gt;
** [[Electronic Arts Sound Effects]] (.bnk, .crd)&lt;br /&gt;
** [[Electronic Arts Sound / Speech Files]] (.eas, .sph)&lt;br /&gt;
** [[IFF]] (Amiga 8SVX)&lt;br /&gt;
*** [[IFF-MAUD]]&lt;br /&gt;
** [[Sonix Music Driver]] (.smus)&lt;br /&gt;
* [[EMFF]] (ADPCM)&lt;br /&gt;
* Epic Megagames&lt;br /&gt;
** [[Epic Megagames MASI]] (.masi, .psm)&lt;br /&gt;
* [[Final Fantasy XI Music file]] (.bgw)&lt;br /&gt;
* [[FMOD Sample Bank]] (.fsb)&lt;br /&gt;
* [[Funcom ISS]]&lt;br /&gt;
* Galaxy Music System&lt;br /&gt;
** [[Galaxy Music System v4.0]]&lt;br /&gt;
** [[Galaxy Music System v5.0]] (.j2b)&lt;br /&gt;
* [[GCW]] (PCM 16 bit)&lt;br /&gt;
* [[Generic Header]] (.genh, Generic Header Creator)&lt;br /&gt;
* Herad Music System&lt;br /&gt;
** [[Herad Music System AGD]] (.agd)&lt;br /&gt;
** [[Herad Music System SDB]] (.sdb)&lt;br /&gt;
** [[Herad Music System SQX]] (.sqx)&lt;br /&gt;
* [[HIS]] (PCM 8 bit)&lt;br /&gt;
* id Software&lt;br /&gt;
** [[Doom MUS]]&lt;br /&gt;
** [[id Software DNF]] (.dnf)&lt;br /&gt;
** [[id Software Music Format]] (.imf)&lt;br /&gt;
** [[id Software WLF]] (.wlf)&lt;br /&gt;
* [[IMA ADPCM]] (.bar, .dvi, .hwas, .idvi, .ivaud, .myspd, .stma, .strm)&lt;br /&gt;
* [[Interplay ACM]] (.acm)&lt;br /&gt;
* [[Inverse Frequency Sound format]]&lt;br /&gt;
* [[iXMF]] (Interactive [[Extensible Music Format]])&lt;br /&gt;
* Ken Silverman&lt;br /&gt;
** [[Ken's Adlib Music]] (.ksm)&lt;br /&gt;
** [[Ken's Digital Music]] (.kdm)&lt;br /&gt;
** [[SM (Ken Silverman)]] (.sm)&lt;br /&gt;
** [[SND (Ken Silverman)]] (.snd)&lt;br /&gt;
* [[LOUDNESS Sound System]] (.lds)&lt;br /&gt;
* LucasArts&lt;br /&gt;
** [[LucasArts Adlib Audio]] (.laa)&lt;br /&gt;
** [[SCUMM]] (SCUMM)&lt;br /&gt;
* [[Martin Fernandez]] (.adlib)&lt;br /&gt;
* Microsoft&lt;br /&gt;
** [[0x0069]] (Xbox ADPCM)&lt;br /&gt;
** [[2DX]]&lt;br /&gt;
** [[2DX9]] (ADPCM)&lt;br /&gt;
** [[DE2]] (ADPCM)&lt;br /&gt;
** [[Xbox IMA ADPCM]] (.matx, .wavm, .wvs, .xmu, .xvas, .xwav)&lt;br /&gt;
* Mojang AB (Minecraft)&lt;br /&gt;
** [[Minecraft sounds.json]]&lt;br /&gt;
&lt;br /&gt;
* Origin Software&lt;br /&gt;
** [[Ultima 6 Music]] (.m)&lt;br /&gt;
* PC-98 and PC-88&lt;br /&gt;
** [[Professional Music Driver PMD]] (.m, .m2)&lt;br /&gt;
* Pixel&lt;br /&gt;
** [[PMD (Pixel)]]&lt;br /&gt;
* [[Pixel Painters]] (.fmf)&lt;br /&gt;
* [[Ragnarok Online 2 RMP]]&lt;br /&gt;
* [[Shadowlands]] (.cal)&lt;br /&gt;
* Sierra&lt;br /&gt;
** [[Sierra AGI]] (Sierra AGI)&lt;br /&gt;
** [[Sierra SCI]] (Used in Sierra PC games)&lt;br /&gt;
* [[Sound Images Generation 2]] (.sig)&lt;br /&gt;
* [[Sound Interface System]] (.lem)&lt;br /&gt;
* [[STOS memory bank]] (.mbk)&lt;br /&gt;
* [[Unreal Music Format]] (.umx)&lt;br /&gt;
* Union Logic Software Publishing&lt;br /&gt;
** [[Vinyl Goddess From Mars Instrument Format]]&lt;br /&gt;
** [[Vinyl Goddess From Mars Music Format]]&lt;br /&gt;
* [[Unique Development Studios]] (.uds)&lt;br /&gt;
* [[Video Game Music]] (.vgm, .vgz)&lt;br /&gt;
* Westwood Studios&lt;br /&gt;
** [[Westwood Studios ADL]] (.adl)&lt;br /&gt;
** [[Westwood Studios AUD]] (.aud)&lt;br /&gt;
* [[Whacky Wheels]] (.klm)&lt;br /&gt;
* [[XMP Game Module]] (.j2b)&lt;br /&gt;
&lt;br /&gt;
=== Nintendo ===&lt;br /&gt;
&lt;br /&gt;
* [[Advanced Mario Sequencer file]] (.mss)&lt;br /&gt;
* [[BRSTMPSM]] (Super Paper Mario)&lt;br /&gt;
* [[Donkey Konga 2 DSP]] (Donkey Konga 2)&lt;br /&gt;
* [[Mario Paint Composer]] (MPC)&lt;br /&gt;
* [[Mario Sequencer file]] (.msq)&lt;br /&gt;
* [[Nintendo GameCube / Wii AAAP]]&lt;br /&gt;
* [[Nintendo GameCube / Wii ADP]] (Nintendo Gamecube) (.adp)&lt;br /&gt;
* [[Nintendo GameCube / Wii AFC]] (Nintendo Gamecube)&lt;br /&gt;
* [[Nintendo GameCube / Wii AGSC]] (.agsc)&lt;br /&gt;
* [[Nintendo GameCube / Wii AMTS]]&lt;br /&gt;
* [[Nintendo GameCube / Wii ASN]] (Nintendo Gamecube)&lt;br /&gt;
* [[Nintendo GameCube / Wii ASR]] (Nintendo Wii)&lt;br /&gt;
* [[Nintendo GameCube / Wii AST]] (Nintendo Wii sound format)&lt;br /&gt;
* [[Nintendo GameCube / Wii BNS]]&lt;br /&gt;
* [[Nintendo GameCube / Wii BO2]]&lt;br /&gt;
* [[Nintendo GameCube / Wii BRSTM]] (Nintendo Wii streaming format)&lt;br /&gt;
* [[Nintendo GameCube / Wii CAPDSP]]&lt;br /&gt;
* [[Nintendo GameCube / Wii CFN]]&lt;br /&gt;
* [[Nintendo GameCube / Wii DDSP]]&lt;br /&gt;
* [[Nintendo GameCube / Wii DSP]]&lt;br /&gt;
* [[Nintendo GameCube / Wii GCA]] (Nintendo Wii)&lt;br /&gt;
* [[Nintendo GameCube / Wii GCM]]&lt;br /&gt;
* [[Nintendo GameCube / Wii GSP]]&lt;br /&gt;
* [[Nintendo GameCube / Wii HPS]]&lt;br /&gt;
* [[Nintendo GameCube / Wii IDSP]]&lt;br /&gt;
* [[Nintendo GameCube / Wii ISD]]&lt;br /&gt;
* [[Nintendo GameCube / Wii ISH]]&lt;br /&gt;
* [[Nintendo GameCube / Wii KRAW]] (Nintendo Wii)&lt;br /&gt;
* [[Nintendo GameCube / Wii LPS]]&lt;br /&gt;
* [[Nintendo GameCube / Wii MPDS]]&lt;br /&gt;
* [[Nintendo GameCube / Wii MPDSP]]&lt;br /&gt;
* [[Nintendo GameCube / Wii MSS]]&lt;br /&gt;
* [[Nintendo GameCube / Wii MUS]]&lt;br /&gt;
* [[Nintendo GameCube / Wii PDT]]&lt;br /&gt;
* [[Nintendo GameCube / Wii SDT]]&lt;br /&gt;
* [[Nintendo GameCube / Wii SMP]]&lt;br /&gt;
* [[Nintendo GameCube / Wii SNS]]&lt;br /&gt;
* [[Nintendo GameCube / Wii SPD]]&lt;br /&gt;
* [[Nintendo GameCube / Wii SPT]]&lt;br /&gt;
* [[Nintendo GameCube / Wii SSM]]&lt;br /&gt;
* [[Nintendo GameCube / Wii STM]]&lt;br /&gt;
* [[Nintendo GameCube / Wii STR]]&lt;br /&gt;
* [[Nintendo GameCube / Wii STS]]&lt;br /&gt;
* [[Nintendo GameCube / Wii SWD]]&lt;br /&gt;
* [[Nintendo GameCube / Wii THP]]&lt;br /&gt;
* [[Nintendo GameCube / Wii TYDSP]]&lt;br /&gt;
* [[Nintendo GameCube / Wii VJDSP]]&lt;br /&gt;
* [[Nintendo GameCube / Wii WAS]]&lt;br /&gt;
* [[Nintendo GameCube / Wii WSD]]&lt;br /&gt;
* [[Nintendo GameCube / Wii WSI]]&lt;br /&gt;
* [[Nintendo GameCube / Wii YDSP]]&lt;br /&gt;
* [[Nintendo GameCube / Wii YMF]]&lt;br /&gt;
* [[Nintendo GameCube / Wii ZWDSP]]&lt;br /&gt;
* [[SHI]] ([http://battleofthebits.org/lyceum/View/ShroomTool ShroomTool] Instrument, used for Mario Paint instruments)&lt;br /&gt;
* [[SHO]] (ShroomTool, used for Mario Paint sounds)&lt;br /&gt;
&lt;br /&gt;
=== Sony ===&lt;br /&gt;
&lt;br /&gt;
* [[ADS (PlayStation)]]&lt;br /&gt;
* [[ASS (PlayStation)]]&lt;br /&gt;
* [[AST (PlayStation)]]&lt;br /&gt;
* [[BG00 (PlayStation)]]&lt;br /&gt;
* [[BMDX (PlayStation)]]&lt;br /&gt;
* [[CCC (PlayStation)]]&lt;br /&gt;
* [[CNK (PlayStation)]]&lt;br /&gt;
* [[DXH (PlayStation)]]&lt;br /&gt;
* [[ENTH (PlayStation)]]&lt;br /&gt;
* [[FAG (PlayStation)]]&lt;br /&gt;
* [[FILP (PlayStation)]]&lt;br /&gt;
* [[FSB (PlayStation)]]&lt;br /&gt;
* [[GCM (PlayStation)]]&lt;br /&gt;
* [[GMS (PlayStation)]]&lt;br /&gt;
* [[HGC1 (PlayStation)]]&lt;br /&gt;
* [[I100 (PlayStation)]]&lt;br /&gt;
* [[I400 (PlayStation)]]&lt;br /&gt;
* [[I80 (PlayStation)]]&lt;br /&gt;
* [[IKM (PlayStation)]]&lt;br /&gt;
* [[ILD (PlayStation)]]&lt;br /&gt;
* [[IVB (PlayStation)]]&lt;br /&gt;
* [[JOE (PlayStation)]]&lt;br /&gt;
* [[KCES (PlayStation)]]&lt;br /&gt;
* [[KHV (PlayStation)]]&lt;br /&gt;
* [[LEG (PlayStation)]]&lt;br /&gt;
* [[MCG (PlayStation)]]&lt;br /&gt;
* [[MI4 (PlayStation)]]&lt;br /&gt;
* [[MIB (PlayStation)]]&lt;br /&gt;
* [[MIC (PlayStation)]]&lt;br /&gt;
* [[MIH (PlayStation)]]&lt;br /&gt;
* [[MIHB (PlayStation)]] (merged [[MIB|MIB (PlayStation)]] &amp;amp; [[MIH|MIH (PlayStation)]])&lt;br /&gt;
* [[MSA (PlayStation)]]&lt;br /&gt;
* [[MSVP (PlayStation)]]&lt;br /&gt;
* [[MUSC (PlayStation)]]&lt;br /&gt;
* [[NPSF (PlayStation)]]&lt;br /&gt;
* [[PNB (PlayStation)]]&lt;br /&gt;
* [[PSH (PlayStation)]]&lt;br /&gt;
* [[RKV (PlayStation)]]&lt;br /&gt;
* [[RND (PlayStation)]]&lt;br /&gt;
* [[RSTM (PlayStation)]]&lt;br /&gt;
* [[RWS (PlayStation)]]&lt;br /&gt;
* [[SFS (PlayStation)]]&lt;br /&gt;
* [[SIR (PlayStation)]]&lt;br /&gt;
* [[SL3 (PlayStation)]]&lt;br /&gt;
* [[SMPL (PlayStation)]]&lt;br /&gt;
* [[SND (PlayStation)]]&lt;br /&gt;
* [[SPU (PlayStation)]]&lt;br /&gt;
* [[STER (PlayStation)]]&lt;br /&gt;
* [[STH (PlayStation)]]&lt;br /&gt;
* [[STR (PlayStation)]]&lt;br /&gt;
* [[STS (PlayStation)]]&lt;br /&gt;
* [[SVAG (PlayStation)]]&lt;br /&gt;
* [[SVS (PlayStation)]]&lt;br /&gt;
* [[TEC (PlayStation)]]&lt;br /&gt;
* [[TK5 (PlayStation)]]&lt;br /&gt;
* [[VAS (PlayStation)]]&lt;br /&gt;
* [[VAG (PlayStation)]]&lt;br /&gt;
* [[VB2 (PlayStation &amp;amp; PS2)]]&lt;br /&gt;
* [[VGS (PlayStation)]]&lt;br /&gt;
* [[VIG (PlayStation)]]&lt;br /&gt;
* [[VPK (PlayStation)]]&lt;br /&gt;
* [[VS (PlayStation)]]&lt;br /&gt;
* [[VSF (PlayStation)]]&lt;br /&gt;
* [[WP2 (PlayStation)]]&lt;br /&gt;
* [[XA2 (PlayStation)]]&lt;br /&gt;
* [[XA30 (PlayStation)]]&lt;br /&gt;
* [[MI2 (PS2)]]&lt;br /&gt;
&lt;br /&gt;
== Identifiers of musical works, recordings, artists, etc. ==&lt;br /&gt;
* [[International Standard Musical Work Code]] (ISWC)&lt;br /&gt;
* [[International Standard Recording Code]] (ISRC)&lt;br /&gt;
* [[MusicBrainz Identifier]]&lt;br /&gt;
&lt;br /&gt;
== Metadata formats and related data ==&lt;br /&gt;
&lt;br /&gt;
* [[APE tag]]&lt;br /&gt;
* [[Argoknot]]&lt;br /&gt;
* Cue Sheet - See [[CUE and BIN]]&lt;br /&gt;
* [[ELAN Annotation Format]]&lt;br /&gt;
* [[Exif]]&lt;br /&gt;
* [[ID3]]&lt;br /&gt;
* [[MDZ]] - strictly not itself a music format, but a metadata file for other music files used by Open Cubic Player. See http://www.cubic.org/player/doc/node72.htm&lt;br /&gt;
* [[Monkey's Audio metadata]] (.apl)&lt;br /&gt;
* [[Vorbis comment]]&lt;br /&gt;
&lt;br /&gt;
== Music trackers ==&lt;br /&gt;
(For more on this subject, listen to [https://www.youtube.com/watch?v=v0nNuUKeh6o Jason Scott Talks His Way Out Of It: The Music Tracker Episode].)&lt;br /&gt;
&lt;br /&gt;
* [[1tracker module]] (.1tm)&lt;br /&gt;
* [[AHX (Abyss)]] (Abyss Highest eXperience)&lt;br /&gt;
* [[Aley's Module]] (.alm)&lt;br /&gt;
* [[All Sound Tracker module]] (.ast)&lt;br /&gt;
* [[Amiga Module]] (.mod)&lt;br /&gt;
* [[AProSys module]] (.aps)&lt;br /&gt;
* [[Archimedes Tracker module]] (.musx)&lt;br /&gt;
* [[Arkos Tracker]] (.aks)&lt;br /&gt;
* [[Art of Noise module]] (.aon)&lt;br /&gt;
* [[ASC Sound Master module]] (.asc)&lt;br /&gt;
* [[B's Pro Tracker module]] (.bpm, .bps)&lt;br /&gt;
* [[Beepola song]] (.bbsong)&lt;br /&gt;
* [[BeRoTracker module]] (.br)&lt;br /&gt;
* [[BoyScout Tracker module]] (.bsf)&lt;br /&gt;
* Brian Postma SoundMon&lt;br /&gt;
** [[Brian Postma SoundMon v1.x module]] (.bp)&lt;br /&gt;
** [[Brian Postma SoundMon v2.x &amp;amp; v3.x module]] (.bp3)&lt;br /&gt;
** [[BS]]&lt;br /&gt;
* Buzzic&lt;br /&gt;
** [[Buzzic v1.x]] (.buz)&lt;br /&gt;
** [[Buzzic v2.0]] (.buz2)&lt;br /&gt;
* Chaos Music Composer&lt;br /&gt;
** [[CM3]] ([[CMC]] &amp;quot;3/4&amp;quot;)&lt;br /&gt;
** [[CMC]] (Chaos Music Composer)&lt;br /&gt;
** [[CMR]] ([[CMC]] &amp;quot;Rzog&amp;quot;)&lt;br /&gt;
** [[CMS]] (Stereo Double [[CMC]])&lt;br /&gt;
** [[DMC]] (Double ChaosMusicComposer)&lt;br /&gt;
* [[Chuck Biscuits/Black Artist module]] (.cba)&lt;br /&gt;
* [[Coconizer module]]&lt;br /&gt;
* [[Composer 669 module]] (.669)&lt;br /&gt;
* [[craptracker ii module]] (.ct2)&lt;br /&gt;
* [[Custom Amiga Module]] (.cus. .custom)&lt;br /&gt;
* CyberTracker&lt;br /&gt;
** [[CyberTracker instrument]] (.ci)&lt;br /&gt;
** [[CyberTracker module]] (.ct)&lt;br /&gt;
* [[DeliTracker custom]] (.cust)&lt;br /&gt;
* [[DeltaMusic module]] (.dta)&lt;br /&gt;
* Delta Music Composer&lt;br /&gt;
** [[Delta Music Composer module]] (.dlt)&lt;br /&gt;
** [[Delta Music 2.0 module]] (.dl2)&lt;br /&gt;
* [[Desktop Tracker module]] (.dtt)&lt;br /&gt;
* DigiBooster / DigiBooster PRO&lt;br /&gt;
** [[DigiBooster v1.x module]] (.digi)&lt;br /&gt;
** [[DigiBooster PRO v2.x / DigiBooster 3 module]] (.dbm)&lt;br /&gt;
* [[Digital Symphony module]] (.dsym)&lt;br /&gt;
* Digitrakker&lt;br /&gt;
** [[Digitrakker instrument]] (.ist)&lt;br /&gt;
** [[Digitrakker module]] (.mdl)&lt;br /&gt;
** [[Digitrakker sample]] (.spl)&lt;br /&gt;
* [[DigiTrekker module]] (.dtm)&lt;br /&gt;
* [[Digital Tracker module]] (.dtm)&lt;br /&gt;
* [[DisorderTracker 2 module]] (.plm)&lt;br /&gt;
* [[Dual Module Player DSMI]] (.amf)&lt;br /&gt;
* [[Eureka Packer module]] (.eu)&lt;br /&gt;
* [[Extended MOD]] (.emd)&lt;br /&gt;
* [[Extreme's Tracker module]] (.ams)&lt;br /&gt;
* [[FAC Soundtracker]] (MSX, extension unknown)&lt;br /&gt;
* [[Face The Music module]] (.ftm)&lt;br /&gt;
* Famitracker&lt;br /&gt;
** [[FamiTracker module]] (.ftm)&lt;br /&gt;
** [[FamiTracker instrument]] (.fti)&lt;br /&gt;
* Farandole Composer&lt;br /&gt;
** [[Farandole Form 2.0]] (.f2r)&lt;br /&gt;
** [[Farandole Composer module]] (.far)&lt;br /&gt;
** [[Farandole Composer pattern]] (.fpt)&lt;br /&gt;
** [[Farandole Composer sample]] (.fsm, .usm)&lt;br /&gt;
* [[Fashion Tracker module]] (.ex)&lt;br /&gt;
* FastTracker / FastTracker 2&lt;br /&gt;
** [[FastTracker module]] (.ft, .ftc)&lt;br /&gt;
** [[Extended instrument]] (.xi)&lt;br /&gt;
** [[Extended Module]] (.xm)&lt;br /&gt;
* [[FC-M Packer module]] (.fcm)&lt;br /&gt;
* [[Flash Tracker module]] (.fls)&lt;br /&gt;
* [[Flex Tracker module]] (.flx)&lt;br /&gt;
* [[Fuchs Tracker]] (.fchs)&lt;br /&gt;
* [[FunkTracker module]] (.fnk)&lt;br /&gt;
* Future Composer&lt;br /&gt;
** [[Future Composer v1.x module]] (.fc)&lt;br /&gt;
** [[Future Composer v1.3 module]] (.fc13)&lt;br /&gt;
** [[Future Composer v1.4 module]] (.fc14)&lt;br /&gt;
* Future Composer (BSI)&lt;br /&gt;
** [[Future Composer (BSI) module]]&lt;br /&gt;
* [[Fuzzac Packer module]] (.fuzz)&lt;br /&gt;
* [[General Digital Music module]] (.gdm)&lt;br /&gt;
* [[GoatTracker module]] (.sng)&lt;br /&gt;
* [[Grave Composer module]] (.wow)&lt;br /&gt;
* Graoumf Tracker&lt;br /&gt;
** [[Graoumf Tracker module]] (.gtk)&lt;br /&gt;
** [[Graoumf Tracker 2 module]] (.gt2)&lt;br /&gt;
* [[Global Tracker v1.x module]] (.gtr)&lt;br /&gt;
* [[HeatSeeker Module Cruncher v1.0]] (.crb)&lt;br /&gt;
* [[Hively Tracker module]] (.hvl)&lt;br /&gt;
* [[Ice Tracker module]]&lt;br /&gt;
* [[Imago Orpheus module]] (.imf)&lt;br /&gt;
* Impulse Tracker&lt;br /&gt;
** [[Impulse Tracker module]] (.it, .itbz, .itgz, .itr, .itz)&lt;br /&gt;
** [[Impulse Tracker sample]] (.its)&lt;br /&gt;
* [[JAMCracker Pro module]] (.jam)&lt;br /&gt;
* jacker-tracker&lt;br /&gt;
** [[Jacker song]]&lt;br /&gt;
* klystrack&lt;br /&gt;
** [[klystrack instrument]] (.ki)&lt;br /&gt;
** [[klystrack module]] (.kt)&lt;br /&gt;
* [[KRIS Packer / ChipTracker module]] (.kris)&lt;br /&gt;
* Liquid Tracker&lt;br /&gt;
** [[Liquid Digitized Sample]] (.lds)&lt;br /&gt;
** [[Liquid Tracker module]] (.liq)&lt;br /&gt;
* MadTracker 2&lt;br /&gt;
** [[MadTracker 2 envelope]] (.mte)&lt;br /&gt;
** [[MadTracker 2 extension]] (.mtx)&lt;br /&gt;
** [[MadTracker 2 instrument]] (.mti)&lt;br /&gt;
** [[MadTracker 2 module]] (.mt2)&lt;br /&gt;
** [[MadTracker 2 pattern]] (.mtp)&lt;br /&gt;
** [[MadTracker 2 sample]] (.mts)&lt;br /&gt;
* maxYMiser&lt;br /&gt;
** [[maxYMiser instrument]] (.myi)&lt;br /&gt;
** [[maxYMiser module]] (.snd)&lt;br /&gt;
* [[Megatracker module]] (.mgt)&lt;br /&gt;
* [[MO3]] (MP3 / Vorbis compressed module)&lt;br /&gt;
* [[MOD Edit sample]] (.sam)&lt;br /&gt;
* [[Module Protector + noID]] (.mp)&lt;br /&gt;
* Microdeal Quartet&lt;br /&gt;
** [[4V]]&lt;br /&gt;
* [[MONOTONE]] (.mon, .pit, .frq)&lt;br /&gt;
* Moonblaster (MSX)&lt;br /&gt;
** [[Moonblaster music]] (.mbm)&lt;br /&gt;
** [[Moonblaster sample kit]] (.mbk)&lt;br /&gt;
* [[Multi Track Module]] (.mtm)&lt;br /&gt;
* Muse Tracker / Pornotracker&lt;br /&gt;
** [[Musetracker / Pornotracker instrument]] (.poi)&lt;br /&gt;
** [[Musetracker / Pornotracker module]] (.pom)&lt;br /&gt;
* Music Pro Tracker&lt;br /&gt;
** [[Music Pro Tracker DoublePlay]] (.mpd)&lt;br /&gt;
** [[Music Pro Tracker module (MD1)]] (.md1)&lt;br /&gt;
** [[Music Pro Tracker module (MD2)]] (.md2)&lt;br /&gt;
** [[Music Pro Tracker module (MPT)]] (.mpt)&lt;br /&gt;
* [[The Music Studio|Music Studio, The]] (Activision / Audio Light) (.sng, .song, .mss, .snd, .sound)&lt;br /&gt;
* [[Nerdtracker II module]] (.ned)&lt;br /&gt;
* [[NesTracker module]] (.nest)&lt;br /&gt;
* NoisePacker&lt;br /&gt;
** [[NoisePacker 2.x]] (.np2)&lt;br /&gt;
** [[NoisePacker 3.x]] (.np3)&lt;br /&gt;
* [[NoiseTracker module]] (.mod)&lt;br /&gt;
* [[Noisetrekker module]] (.ntk)&lt;br /&gt;
* OctaMED&lt;br /&gt;
** [[OctaMED module (MED)]] (.med)&lt;br /&gt;
** [[OctaMED module (MMD1)]] (.mmd1)&lt;br /&gt;
** [[OctaMED v2.00 module]] (.med3)&lt;br /&gt;
** [[OctaMED v2.10 module (MED4)]] (.med4)&lt;br /&gt;
** [[OctaMED v2.10 module (MMD0)]] (.mmd0)&lt;br /&gt;
** [[OctaMED v5 module]] (.mmd2)&lt;br /&gt;
** [[OctaMED SS module]] (.mmd3)&lt;br /&gt;
** [[MED Packer]] (.mmdc)&lt;br /&gt;
* Oktalyzer&lt;br /&gt;
** [[Oktalyzer module]] (.okt, .okta)&lt;br /&gt;
* [[Onyx Music File]] (.omf)&lt;br /&gt;
* [[Open MODPlug Tracker module]] (.mptm)&lt;br /&gt;
* [[Oracle module]] (.orc)&lt;br /&gt;
* [[Pha Packer]] (.pha)&lt;br /&gt;
* PlayerPRO&lt;br /&gt;
** [[Extended PlayerPRO module]] (.madx)&lt;br /&gt;
** [[PlayerPRO module]] (.mad)&lt;br /&gt;
* [[Polly Tracker module]]&lt;br /&gt;
* [[Poly Tracker module]] (.ptm)&lt;br /&gt;
* [[Polytone]] (.pol)&lt;br /&gt;
* [[Pro Sound Creator v1.xx]] (.psc, ZX Spectrum)&lt;br /&gt;
* [[Pro Sound Maker]] (.psm)&lt;br /&gt;
* Pro Tracker&lt;br /&gt;
** [[Pro Tracker v1.xx module]] (.pt1)&lt;br /&gt;
** [[Pro Tracker v2.xx module]] (.pt2)&lt;br /&gt;
** [[Pro Tracker v3.xx module]] (.pt3) &lt;br /&gt;
* [[Pro Tracker (MSX)]] (MSX-Music, extension unknown)&lt;br /&gt;
* [[Pumatracker module]] (.puma)&lt;br /&gt;
* [[Quadra Composer module]] (.emod)&lt;br /&gt;
* [[RASTER Music Tracker module]] (.rmt)&lt;br /&gt;
* Real Tracker&lt;br /&gt;
** [[Real Tracker instrument]] (.rti)&lt;br /&gt;
** [[Real Tracker module]] (.rtm)&lt;br /&gt;
** [[Real Tracker sample]] (.rts)&lt;br /&gt;
* [[Renoise]]&lt;br /&gt;
** [[Renoise|Renoise song (XRNS)]] (.xrns)&lt;br /&gt;
** [[Renoise|Renoise instrument (XRNS)]] (.xrni)&lt;br /&gt;
** [[Renoise|Renoise effect chain (XRNT)]] (.xrnt)&lt;br /&gt;
** [[Renoise Song (NTK)]] (.ntk)&lt;br /&gt;
** [[Renoise Song (PTK)]] (.ptk)&lt;br /&gt;
** [[Renoise Song (RNS)]] (.rns)&lt;br /&gt;
* [[SBStudio module]] (.pac, .son, .sou)&lt;br /&gt;
* SCC Blaffer NT&lt;br /&gt;
** [[SCC Blaffer NT music]] (.sbm, MSX)&lt;br /&gt;
** [[SCC Blaffer NT instrument kit]] (.sbk)&lt;br /&gt;
* Scream Tracker&lt;br /&gt;
** [[Scream Tracker Music Interface Kit module]]&lt;br /&gt;
** [[Scream Tracker 1 &amp;amp; 2 module]] (.stm)&lt;br /&gt;
** [[Scream Tracker 3 Adlib module]] (.as3m)&lt;br /&gt;
** [[Scream Tracker 3 module]] (.s3m)&lt;br /&gt;
** [[Scream Tracker 3 / DigiTracker sample]] (.s31)&lt;br /&gt;
** [[Scream Tracker 3 / DigiTracker sample]] (.smp)&lt;br /&gt;
* [[SMUS]]&lt;br /&gt;
* [[SoundFX module]] (.sfx, .sfx2)&lt;br /&gt;
* Sound Tracker&lt;br /&gt;
** [[Soundtracker v2.6 / Ice Tracker module]] (.mtn)&lt;br /&gt;
** [[SoundTracker v2.6 module]] (.st26)&lt;br /&gt;
** [[Sound Tracker / Super Sonic module]] (.stc)&lt;br /&gt;
** [[Sound Tracker Pro module]] (.stp)&lt;br /&gt;
* [[SoundSmith module]] (.mtp)&lt;br /&gt;
* Soundtrakker&lt;br /&gt;
** [[Soundtrakker 128 instrument]] (.ins)&lt;br /&gt;
** [[Soundtrakker 128 module]] (.128)&lt;br /&gt;
** [[Soundtrakker v1.x instrument]] (.ins)&lt;br /&gt;
** [[Soundtrakker v1.x module]] (.sng)&lt;br /&gt;
* [[SQ-Tracker module]] (.sqt)&lt;br /&gt;
* [[Starkos Tracker module]] (.sks)&lt;br /&gt;
* [[StarTrekker / Star Tracker module]] (.mod, .nt, .flt4)&lt;br /&gt;
* [[SunVox module]] (.sunvox)&lt;br /&gt;
* TFMX&lt;br /&gt;
** [[TFMX pattern data]] (.mdat)&lt;br /&gt;
** [[TFMX 7V pattern data]] (.mdat)&lt;br /&gt;
** [[TFMX Pro pattern data]] (.mdat)&lt;br /&gt;
** [[TFMX sample data]] (.smpl)&lt;br /&gt;
* Theta Music Composer&lt;br /&gt;
** [[Theta Music Composer 8-channel stereo module]] (.tm8)&lt;br /&gt;
** [[Theta Music Composer v1.x module]] (.tmc)&lt;br /&gt;
** [[Theta Music Composer v2.x module]] (.tm2)&lt;br /&gt;
* [[Trackerpacker 3 module]] (.tp3)&lt;br /&gt;
* [[Unic Tracker 1.0]] (.unic1)&lt;br /&gt;
* [[Unic Tracker 2.0]] (.unic2)&lt;br /&gt;
* [[Ultra Tracker]] (.ult)&lt;br /&gt;
* [[Velvet_Studio]] (.ams)&lt;br /&gt;
* [[VIC-TRACKER module]] (.vt)&lt;br /&gt;
* [[Vortex Tracker module]] (.vtx)&lt;br /&gt;
* X-Tracker&lt;br /&gt;
** [[D-Lusion Music File]] (.dmf)&lt;br /&gt;
** [[D-Lusion Sound File]] (.dms)&lt;br /&gt;
&lt;br /&gt;
== Musical instrument control ==&lt;br /&gt;
&lt;br /&gt;
* [[ELECTONE]] - For Yamaha Electone Range Electronic Organs&lt;br /&gt;
** [[BOO]] - Part of the [[ELECTONE]] format. &lt;br /&gt;
** [[EVT]] - Part of the [[ELECTONE]] format.&lt;br /&gt;
* MIDI &amp;amp; Clones&lt;br /&gt;
** [[Compact MIDI]]&lt;br /&gt;
** [[GMD]] ([[MIDI]] clone)&lt;br /&gt;
** [[Gravis Ultrasound patch]] (used by MIDI synthesizers)&lt;br /&gt;
** [[HMI]] ([[MIDI]] clone)&lt;br /&gt;
** [[HMP]] ([[MIDI]] clone)&lt;br /&gt;
** [[HMZ]] (Compressed [[MIDI]])&lt;br /&gt;
** [[KAR]] ([[MIDI]] Audio)&lt;br /&gt;
** [[MIDI]] (Musical Instrument Digital Interface)&lt;br /&gt;
*** [[MIDI Instrument Definition File]]&lt;br /&gt;
** [[MIDS]] ([[MIDI]] clone)&lt;br /&gt;
** [[MIZ]] (Compressed [[MIDI]])&lt;br /&gt;
** [[MSS (MIDI)|MSS]] ([[MIDI]] Clone)&lt;br /&gt;
** [[RIFF MIDI]]&lt;br /&gt;
** [[RIFF MIDS]]&lt;br /&gt;
** [[Sample Vision]] (.smp)&lt;br /&gt;
** [[Scalable Polyphony MIDI]]&lt;br /&gt;
** [[SFARK]] (SoundFont archive compressed file)&lt;br /&gt;
** [[SoundFont 1.0]] (.sbk)&lt;br /&gt;
** [[SoundFont 2.0]] (.sf2)&lt;br /&gt;
** [[Synthetic Music Application Format]]&lt;br /&gt;
** [[XMI (Extended MIDI)]]&lt;br /&gt;
** [[ZIPI]] (proposed MIDI replacement)&lt;br /&gt;
* Hardware specific&lt;br /&gt;
** AdLib Sound Cards&lt;br /&gt;
*** [[AdLib instrument]] (.ins)&lt;br /&gt;
*** [[AdLib instrument bank]] (.bnk)&lt;br /&gt;
*** [[AdLib MSCplay]] (.msc)&lt;br /&gt;
*** [[AdLib music]] (.mus)&lt;br /&gt;
*** Adlib Tracker&lt;br /&gt;
**** [[Adlib Tracker instrument]] (.ins)&lt;br /&gt;
**** [[Adlib Tracker module]] (.sng)&lt;br /&gt;
**** [[Adlib Tracker II instrument]] (.a2i)&lt;br /&gt;
**** [[Adlib Tracker II instrument|Adlib Tracker II instrument with fm-register macro]] (.a2f)&lt;br /&gt;
**** [[Adlib Tracker II instrument bank]] (.a2b)&lt;br /&gt;
**** [[Adlib Tracker II instrument bank|Adlib Tracker II instrument bank with macros]] (.a2w)&lt;br /&gt;
**** [[Adlib Tracker II module]] (.a2m)&lt;br /&gt;
**** [[Adlib Tracker II pattern]] (.a2p)&lt;br /&gt;
**** [[Adlib Tracker II module|Adlib Tracker II tiny module]] (.a2t)&lt;br /&gt;
*** [[AdLib Visual Composer / Roland Synthesizer song]] (.rol)&lt;br /&gt;
*** AMusic&lt;br /&gt;
**** [[AMusic module]] (.amd)&lt;br /&gt;
**** [[AMusic XMS]] (.xms)&lt;br /&gt;
*** [[Beni Tracker module]] (.pis)&lt;br /&gt;
*** [[Bob's Adlib Music]] (.bam)&lt;br /&gt;
*** Boom Tracker v4.0&lt;br /&gt;
**** [[Boom Tracker v4.0 instrument]] (.cif)&lt;br /&gt;
**** [[Boom Tracker v4.0 module]] (.cff)&lt;br /&gt;
*** [[DeFy Adlib Tracker module]] (.dtm)&lt;br /&gt;
*** [[Digital FM module]] (.dfm)&lt;br /&gt;
*** [[Drum Traker module]] (.dtl)&lt;br /&gt;
*** [[EdLib packed module]] (.d00)&lt;br /&gt;
*** [[Exotic AdLib module]] (.xad)&lt;br /&gt;
*** [[Extra Simple Music]] (.xsm)&lt;br /&gt;
*** [[Faust Music Creator module]] (.sng)&lt;br /&gt;
*** [[FM Tracker module]] (.fmt)&lt;br /&gt;
*** FM-Kingtracker&lt;br /&gt;
**** [[FM-Kingtracker bank]] (.fib)&lt;br /&gt;
**** [[FM-Kingtracker instrument]] (.fin)&lt;br /&gt;
**** [[FM-Kingtracker module]] (.fmk)&lt;br /&gt;
*** HSC AdLib Composer / HSC-Tracker&lt;br /&gt;
**** [[HSC AdLib Composer / HSC-Tracker module]] (.hsc)&lt;br /&gt;
**** [[HSC AdLib Composer / HSC-Tracker packed module]] (.hsp)&lt;br /&gt;
*** [[JBM Adlib Music]] (.jbl)&lt;br /&gt;
*** JCH&lt;br /&gt;
**** [[JCH-D00]] (.d00)&lt;br /&gt;
**** [[JCH-D01]] (.d01)&lt;br /&gt;
*** [[Johannes Bjerregård module]] (.jbm)&lt;br /&gt;
*** [[Master Tracker module]] (.mtr)&lt;br /&gt;
*** [[MK-Jamz audio]] (.mkj)&lt;br /&gt;
*** [[Mlat Adlib Tracker module]] (.mad)&lt;br /&gt;
*** [[MPU-401 Trakker module]] (.mtk)&lt;br /&gt;
*** [[Palladix module]] (.plx)&lt;br /&gt;
*** [[RAW (Adlib)|RAW]] (AdLib Sound Card)&lt;br /&gt;
*** [[Reality AdLib Tracker module]] (.rad)&lt;br /&gt;
*** [[SNG Player module]] (.sng)&lt;br /&gt;
*** Surprise! Adlib Tracker&lt;br /&gt;
**** [[Surprise! AdLib Tracker v1, 5, 6 module]] (.sat)&lt;br /&gt;
**** [[Surprise! Adlib Tracker v2.0]] (.sa2)&lt;br /&gt;
*** [[Twin TrackPlayer module]] (.dmo)&lt;br /&gt;
*** [[Vibrants module]] (.vib)&lt;br /&gt;
*** [[XMS-Tracker module]] (.xms)&lt;br /&gt;
** Akai&lt;br /&gt;
*** [[Akai S-series MESA multi file]] (.mlt)&lt;br /&gt;
*** [[Akai S-series MESA I program]] (.prg)&lt;br /&gt;
*** [[Akai S-series MESA II program]] (.s3p)&lt;br /&gt;
** [[Codisk Audio File]]&lt;br /&gt;
** Creative Labs&lt;br /&gt;
*** [[Creative Music Format]] (.cmf)&lt;br /&gt;
*** [[Creative Voice File]]&lt;br /&gt;
*** [[Sound Blaster Instrument]] (.sbi)&lt;br /&gt;
** [[Disney Sound Source]]&lt;br /&gt;
** [[DOSBox Raw OPL]] (.dro)&lt;br /&gt;
** [[Downloadable Sounds Banks]] (.dls)&lt;br /&gt;
** [[Ensoniq Concert Wavetable]] (.ecw)&lt;br /&gt;
** Gravis Ultrasound&lt;br /&gt;
*** [[UltraSound GF1 patch]] (.pat)&lt;br /&gt;
** [[Instrument Bank]] (Instrument Bank)&lt;br /&gt;
** [[Software Music Synthesis System]] (for 8080/Z-80 systems with S-100 bus)&lt;br /&gt;
** [[TRS-80 Orchestra-90]] (.orc)&lt;br /&gt;
** [[Voice Sequence]] (.vsq)&lt;br /&gt;
** Yamaha sound chips&lt;br /&gt;
*** [[Callus OPL Register Log]] (YM2151, .cym)&lt;br /&gt;
*** [[GYM]] (YM2612 / Sega Genesis)&lt;br /&gt;
* Software Synthesizers&lt;br /&gt;
** [[Farbrausch BR404 music]] (.bmf)&lt;br /&gt;
** [[iZotope iDrum]] (.idrum)&lt;br /&gt;
** Native Instruments&lt;br /&gt;
*** [[Native Instruments Reaktor ensemble]] (.ens)&lt;br /&gt;
** Steinberg VST Presets&lt;br /&gt;
*** [[FXB]] (Bank of presets)&lt;br /&gt;
*** [[FXP]] (single preset)&lt;br /&gt;
* [[E-Seq]] Yamaha (.fil, .esq)&lt;br /&gt;
&lt;br /&gt;
== Musical notation ==&lt;br /&gt;
&lt;br /&gt;
* [[Drum tablature]]&lt;br /&gt;
* [[Guitar tablatures]]&lt;br /&gt;
** [[ASCII tab]] (.tab, .btab, .txt)&lt;br /&gt;
** [[Guitar Pro]] (.gtp)&lt;br /&gt;
*** [[Guitar Pro 3]] (.gp3)&lt;br /&gt;
*** [[Guitar Pro 4]] (.gp4)&lt;br /&gt;
*** [[Guitar Pro 5]] (.gp5)&lt;br /&gt;
*** [[Guitar Pro 6]] (.gp6)&lt;br /&gt;
** [[KGuitar]] (.kg)&lt;br /&gt;
** [[Power Tab]] (.ptb)&lt;br /&gt;
** [[Progression]]&lt;br /&gt;
** [[Rich MIDI Tablature Format]] (.rmtf)&lt;br /&gt;
** [[TablEdit]] (.tef)&lt;br /&gt;
** [[VexTab]]&lt;br /&gt;
&lt;br /&gt;
* [[Musical notation]]&lt;br /&gt;
** [[ABC (musical notation)]]&lt;br /&gt;
** [[ANSI Music]]&lt;br /&gt;
** Capella&lt;br /&gt;
*** [[CAP]]&lt;br /&gt;
*** [[CapXML]] (.capx)&lt;br /&gt;
** [[ChordML]]&lt;br /&gt;
** [[ConcertWare]]&lt;br /&gt;
** Copyist&lt;br /&gt;
*** [[CP4]]&lt;br /&gt;
*** [[CP6]]&lt;br /&gt;
** [[Encore]] (.enc)&lt;br /&gt;
** [[Extended Notation Format]] (.enf)&lt;br /&gt;
** [[Extensible Music Notation Markup Language]]&lt;br /&gt;
** [[Finale]] (.etf, .mus, .musx)&lt;br /&gt;
** [[Forte]] (.fnf)&lt;br /&gt;
** Guido&lt;br /&gt;
*** [[GUIDO]]&lt;br /&gt;
*** [[GUIDO XML]]&lt;br /&gt;
** JMSL&lt;br /&gt;
*** [[JMSL]]&lt;br /&gt;
*** [[JMSL Score]]&lt;br /&gt;
** [[JScoreML]]&lt;br /&gt;
** [[LilyPond]]&lt;br /&gt;
** [[MEI]]&lt;br /&gt;
** [[MHTML]]&lt;br /&gt;
** [[MidiXML]]&lt;br /&gt;
** [[minimusic]]&lt;br /&gt;
** [[MPEG4-SMR]]&lt;br /&gt;
** [[Mup]]&lt;br /&gt;
** [[MuseScore]]&lt;br /&gt;
*** [[MSC]] -(old file format)&lt;br /&gt;
*** [[MSCX]] - [[XML file format]]&lt;br /&gt;
*** [[MSCZ]] - [[GZIP]] compressed [[MSCX]]&lt;br /&gt;
** [[Music Description Language]]&lt;br /&gt;
** [[Music Markup Language]]&lt;br /&gt;
** [[Music Time]] (.mus)&lt;br /&gt;
** [[Music Time Pro]] (.mts)&lt;br /&gt;
** [[Musical Notation Markup Language]]&lt;br /&gt;
** [[MusicML]]&lt;br /&gt;
** [[MusicWrite]] (.mwk)&lt;br /&gt;
** [[MusicXML]]&lt;br /&gt;
** [[MusicXML compressed]] (.mxl)&lt;br /&gt;
** [[Musink]] (.musink)&lt;br /&gt;
** [[MusiqueXML]]&lt;br /&gt;
** [[MusiXML]]&lt;br /&gt;
** [[Myriad Software]] (.msf)&lt;br /&gt;
** [[NeumesXML]]&lt;br /&gt;
** [[Neuratron Photoscore Format]] (.opt)&lt;br /&gt;
** [[Notation Interchange File Format]]&lt;br /&gt;
** [[NoteAbility Pro]]&lt;br /&gt;
** [[Noteworthy Composer and Music Publisher]] (.nwc)&lt;br /&gt;
** [[NoteWriter]]&lt;br /&gt;
** [[Notion]]&lt;br /&gt;
** [[NtEd]]&lt;br /&gt;
** [[Overture]] (.ove)&lt;br /&gt;
** [[PriMus]]&lt;br /&gt;
** [[Rhapsody Notation Program File]] (.rhp)&lt;br /&gt;
** [[Rhapsody 2/3]] (RISC OS.  Unrelated to the above &amp;quot;Rhapsody Notation Program File&amp;quot;)&lt;br /&gt;
** [[Rhapsody 4]] (RISC OS, .c00)&lt;br /&gt;
** [[Rosegarden]] (.rg)&lt;br /&gt;
** [[QuickScore Elite]] (.qsd)&lt;br /&gt;
** [[SCORE]] (.mus)&lt;br /&gt;
** [[Score Perfect]] (.spp)&lt;br /&gt;
** [[ScoreML]]&lt;br /&gt;
** [[ScoreWriter]] (.scw)&lt;br /&gt;
** [[Sibelius]]&lt;br /&gt;
** [[SMDL]]&lt;br /&gt;
** [[SongWrite]]&lt;br /&gt;
** [[Studio Session Song]] (.sss)&lt;br /&gt;
** [[Theta]]&lt;br /&gt;
** [[Tilia]]&lt;br /&gt;
** [[VexTab]]&lt;br /&gt;
** [[Virtual Musician Markup Language]]&lt;br /&gt;
** [[WEDELMUSIC]]&lt;br /&gt;
** [[XMF]]&lt;br /&gt;
** [[XMusic]]&lt;br /&gt;
** [[XScore]] (eXtensible Score Language)&lt;br /&gt;
&lt;br /&gt;
== Playlists, music libraries, music store downloaders ==&lt;br /&gt;
&lt;br /&gt;
* [[Amazon downloader file]] (.amz)&lt;br /&gt;
* [[B4S]] (Winamp 3 playlist)&lt;br /&gt;
* [[FPL]] (foobar2000 playlist)&lt;br /&gt;
* [[iTunes Music Library]]&lt;br /&gt;
* [[Kapsule]] (Kazaa XML Manifest)&lt;br /&gt;
* [[KPL]] (Kazaa Playlist Format)&lt;br /&gt;
* [[M3U]] (Multimedia Playlist Format)&lt;br /&gt;
* [[MAGMA]] ([[Magnet URI]])&lt;br /&gt;
* [[MOD4WIN Module List]] (.mol)&lt;br /&gt;
* [[MusicBee Library]] (.mbl)&lt;br /&gt;
* [[PLS]] (Multimedia Playlist)&lt;br /&gt;
* [[RAM (RealAudio)]]&lt;br /&gt;
* [[SMIL]] (W3C open standard)&lt;br /&gt;
* [[Windows Media Metafile]] (.asx, .wax, .wxv)&lt;br /&gt;
* [[Windows Media Playlist]] (.wpl)&lt;br /&gt;
* [[XML Sharable Playlist]]&lt;br /&gt;
&lt;br /&gt;
== Programming languages and APIs (audio/music-specific) ==&lt;br /&gt;
&lt;br /&gt;
* [[ChucK]] (.ck)&lt;br /&gt;
* [[Csound]] (.csd, .orc, .sco)&lt;br /&gt;
* Cycling 74 [[Max]] (.maxpat, .max)&lt;br /&gt;
* [[FAUST]] (.dsp)&lt;br /&gt;
* [[Music Macro Language]]&lt;br /&gt;
* Native Instruments [[Reaktor]] (.rkplr)&lt;br /&gt;
* [[Pure Data]] (.pd)&lt;br /&gt;
* [[Scala (music software)]] (.kbm, .scl, .cmd)&lt;br /&gt;
* [[SuperCollider]] (.scd, .sc)&lt;br /&gt;
* [[WaveGL]]&lt;br /&gt;
* [[Web Audio API]]&lt;br /&gt;
&lt;br /&gt;
== Ringtones ==&lt;br /&gt;
&lt;br /&gt;
* [[i Melody]]&lt;br /&gt;
* [[M4R]] (Apple iPhone Ringtones - see [[M4A]])&lt;br /&gt;
* [[Polyphonic ringtone]]&lt;br /&gt;
* [[RTTTL]]&lt;br /&gt;
&lt;br /&gt;
== Signal processing ==&lt;br /&gt;
&lt;br /&gt;
These aren't specific file formats, but generic mathematical methods used by other file formats.&lt;br /&gt;
&lt;br /&gt;
* [[A-law]]&lt;br /&gt;
* [[ADPCM]]&lt;br /&gt;
* [[DPCM]]&lt;br /&gt;
* [[LPCM]]&lt;br /&gt;
* [[Pulse code modulation]]&lt;br /&gt;
* [[µ-law]] (u-law)&lt;br /&gt;
&lt;br /&gt;
== Sound card related formats ==&lt;br /&gt;
&lt;br /&gt;
* [[CMS (Creative Music System)]]&lt;br /&gt;
&lt;br /&gt;
== Speech synthesis ==&lt;br /&gt;
&lt;br /&gt;
* [[Speech Synthesis Markup Language]] (SSML)&lt;br /&gt;
* [[TextGrid]]&lt;br /&gt;
* [[VoiceDescription]] (OS X)&lt;br /&gt;
&lt;br /&gt;
== Unclassified (need to move to other categories) ==&lt;br /&gt;
&lt;br /&gt;
* [[ACM]] (Audio Compression Manager)&lt;br /&gt;
* [[ADM]] (ADM Audio File)&lt;br /&gt;
* [[Audfprint fingerprint file]] (.afpk)&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[B1S]]&lt;br /&gt;
* [[BDSP]] (BotDetect Sound Package)&lt;br /&gt;
* [[BVG]]&lt;br /&gt;
* [[CBD2]]&lt;br /&gt;
* CLF&lt;br /&gt;
** [[Common Loudspeaker Format]]&lt;br /&gt;
** [[Common Instrument Format]]&lt;br /&gt;
* [[DeskMate Music]] (.sng)&lt;br /&gt;
* [[DeskMate Sound]] (.snd)&lt;br /&gt;
* [[DSM]] (DSIK Internal)&lt;br /&gt;
* [[DSPW]]&lt;br /&gt;
* [[DTK]]&lt;br /&gt;
* [[EUPHONY]] (FM Towns computer system)&lt;br /&gt;
* [[FFW]]&lt;br /&gt;
* [[First Rate Music Hall]] (.pck, MSX-Music song editor using [[Music Macro Language]])&lt;br /&gt;
* [[GBTS]]&lt;br /&gt;
* [[GCUB]]&lt;br /&gt;
* [[GSB]]&lt;br /&gt;
* [[HLWAV]]&lt;br /&gt;
* [[IAB]]&lt;br /&gt;
* [[IADP]]&lt;br /&gt;
* [[INT]] (RAW File)&lt;br /&gt;
* [[ISWS]]&lt;br /&gt;
* [[JSTM]]&lt;br /&gt;
* [[KOVS]]&lt;br /&gt;
* [[MA]] (Music Assembler)&lt;br /&gt;
* [[MNSTR]]&lt;br /&gt;
* [[MSF]]&lt;br /&gt;
* [[MTAF]]&lt;br /&gt;
* [[S98]] (NEC PC-98)&lt;br /&gt;
* [[SD]] (ESPS sampled data file)&lt;br /&gt;
* [[SGI (Sound Generator)|SGI]] (Sound Generator 3.0 instrument)&lt;br /&gt;
* [[SNG (SCC Musixx)|SNG]] (SCC Musixx)&lt;br /&gt;
* [[Sound Effect Editor]] (.see, MSX)&lt;br /&gt;
* [[SoundHelix XML]]&lt;br /&gt;
* [[TFMX]] (TFMX)&lt;br /&gt;
* [[Vivaldi]] (RISC OS)&lt;br /&gt;
* [[Zsound Music]]&lt;br /&gt;
&lt;br /&gt;
See the Open Cubic Player homepage for a list of demo formats: http://www.cubic.org/player/features.html&lt;br /&gt;
&lt;br /&gt;
See also [[Piano Rolls]] (which is under the [[Physical File Formats]]).&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://boingboing.net/2013/09/20/kickstarting-free-open-record.html Kickstarting free, open recordings of Bach's &amp;quot;Well-Tempered Clavier, Book 1&amp;quot;]&lt;br /&gt;
* [http://mpc-hc.org/ MPC-HC: media player for Windows handling just about all video/audio formats]&lt;br /&gt;
* [http://boingboing.net/2013/09/27/david-byrnes-how-music-wor.html How Music Works]&lt;br /&gt;
* [http://www.textfiles.com/programming/FORMATS/admusfmt.pro Some discussion of &amp;quot;advanced music formats&amp;quot; from 1994]&lt;br /&gt;
* [http://www.textfiles.com/programming/FORMATS/audiof23.txt FAQ on audio file formats (1992-07-09)]&lt;br /&gt;
* [http://boingboing.net/2013/11/03/this-must-be-the-8-bit-place.html Chiptune version of Talking Heads song]&lt;br /&gt;
* [http://www.youtube.com/watch?v=3Z2vU8M6CYI Beatles 3000: humorous video of how the future might misunderstand 20th century pop culture if artifacts decay as happened in the past]&lt;br /&gt;
* [http://publicdomainreview.tumblr.com/post/76437123224/chaoscontrolled123-luke-and-i-were-looking-at The Music Written on This Dude's Butt]&lt;br /&gt;
* [http://vimeo.com/58200103 &amp;quot;Eye of the tiger&amp;quot; played on a modified dot matrix printer]&lt;br /&gt;
* [http://chipflip.wordpress.com/2014/03/09/a-short-history-of-hardcore-chipmusic/ A Short History of Hardcore Chipmusic]&lt;br /&gt;
* [https://medium.com/message/you-need-to-hear-this-extremely-rare-recording-27619411e077 You Need to Hear This Extremely Rare Recording]&lt;br /&gt;
* [http://www.loc.gov/preservation/resources/rfs/audio.html Library of Congress Recommended Format Specifications: Audio Works]&lt;br /&gt;
* [http://betaboston.com/news/2014/07/17/in-a-bid-for-more-emotional-snacking-frito-lay-patents-culinary-theme-songs/ In a bid for more emotional snacking, Frito-Lay patents culinary theme songs]&lt;br /&gt;
* [http://www.theverge.com/2014/8/4/5968243/mit-turns-recorded-vibrations-back-into-speech-and-music Scientists reconstruct speech through soundproof glass by watching a bag of potato chips]&lt;br /&gt;
* [http://www.palmbeachpost.com/ap/ap/business/apple-releases-tool-to-remove-free-u2-album/nhNG9/ Apple releases tool to remove free U2 album] (which they gave you whether you wanted it or not)&lt;br /&gt;
* [https://github.com/AyrA/ExcelPlayer Excel sheet that plays video and audio]&lt;br /&gt;
* [http://webaudio.github.io/web-audio-api/ Web Audio API (W3C)]&lt;br /&gt;
* [http://www.wonderingsound.com/feature/why-collecting-music-matters/ Why Collecting Matters: Citizen Archivists and the Battle for Future Pasts]&lt;br /&gt;
* [http://mediaarea.net/en/MediaInfo MediaInfo: software that shows metadata for audio/video files]&lt;br /&gt;
* [http://www.bl.uk/projects/save-our-sounds Save our Sounds]&lt;br /&gt;
* [http://www.davidsystems.com/#tools David Systems tools: includes online loudness analysis of sound files]&lt;br /&gt;
* [http://createdigitalmusic.com/2015/07/next-web-standard-music-notation/ The next Web standard could be music notation]&lt;br /&gt;
* [https://www.youtube.com/watch?v=q_3d1x2VPxk How Oldschool Sound/Music worked] (video)&lt;br /&gt;
* [http://www.crutchfield.com/S-ulligiNLBZf/learn/learningcenter/home/hometheater_surround.html Understanding surround sound formats]&lt;br /&gt;
* [http://www.righto.com/2017/04/reverse-engineering-76477-space.html Reverse engineering the 76477 &amp;quot;Space Invaders&amp;quot; sound effect chip from die photos]&lt;br /&gt;
&lt;br /&gt;
[[Category:Audio and Music| ]]&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/Audio_and_Music</id>
		<title>Audio and Music</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/Audio_and_Music"/>
				<updated>2023-08-29T08:44:26Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: /* Game audio and music */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|thiscat=Audio and Music&lt;br /&gt;
|image=Music.jpg&lt;br /&gt;
|caption=Musical notation&lt;br /&gt;
}}&lt;br /&gt;
[[Electronic_File_Formats|Electronic Formats]] concerned with audio and musical data, including sound recording, instrument control, musical notation, etc.&lt;br /&gt;
&lt;br /&gt;
For additional multimedia formats that may contain audio, see [[Video]].&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
* For an excellent introduction to the issues around audio and video formats, see [http://www.avpreserve.com/blog/a-primer-on-codecs-for-moving-image-and-sound-archives-2/ A Primer on Codecs for Moving Image and Sound Archives - and 10 Recommendations for Codec Selection &amp;amp; Management] [http://www.avpreserve.com/wp-content/uploads/2010/04/AVPS_Codec_Primer.pdf PDF version]&lt;br /&gt;
* [http://www.garymcgath.com/streamingprotocols.html Basics of streaming protocols]&lt;br /&gt;
&lt;br /&gt;
== Album formats ==&lt;br /&gt;
(files containing entire music albums, with some track structure)&lt;br /&gt;
* [[Connected Media Experience]] (CME, CMX)&lt;br /&gt;
* [[iTunes LP]]&lt;br /&gt;
&lt;br /&gt;
== Audio and sequencer software ==&lt;br /&gt;
&lt;br /&gt;
* Ableton&lt;br /&gt;
** [[Ableton Live]]&lt;br /&gt;
* Adobe Audition&lt;br /&gt;
** [[Cool Edit / Audition Multi Track Session file]] (.ses)&lt;br /&gt;
** [[Audition]] (.sesx)&lt;br /&gt;
* Aldrin&lt;br /&gt;
** [[Creative Commons Module]] (.ccm)&lt;br /&gt;
* [[Audacity Project Format]] (.aup)&lt;br /&gt;
** [[Audacity AU]] (.au)&lt;br /&gt;
* Cakewalk&lt;br /&gt;
** [[Cakewalk Bundle (BUN)]] (.bun)&lt;br /&gt;
** [[Cakewalk Bundle (CWB)]] (.cwb)&lt;br /&gt;
** [[Cakewalk Dump Request Macro]] (.drm)&lt;br /&gt;
** [[Cakewalk Instrument Definition File]] (.ins)&lt;br /&gt;
** [[Cakewalk Project (CWP)]] (.cwp)&lt;br /&gt;
** [[Cakewalk Project (WRK)]] (.wrk)&lt;br /&gt;
** [[Cakewalk Sample Definition File]] (.sfz)&lt;br /&gt;
* [[CPS project]] (.cps)&lt;br /&gt;
* [[DeLuxe Music Score]]&lt;br /&gt;
* [[Digital Performer]]&lt;br /&gt;
* [[Dynamic Studio Professional module]]&lt;br /&gt;
* FruityLoops / FL Studio&lt;br /&gt;
** [[BeatCreator/BeatSlicer Grid File]] (.zgr)&lt;br /&gt;
** [[DrumSynth Preset]] (.ds)&lt;br /&gt;
** [[FL Studio Score File]] (.fsc)&lt;br /&gt;
** [[FL Studio State File]] (.fst)&lt;br /&gt;
** [[Humanize Preset]] (.fpr)&lt;br /&gt;
** [[Raw FL Studio Project]] (.flp)&lt;br /&gt;
** [[SimSynth Preset]] (.syn)&lt;br /&gt;
** [[Speech Preset]] (.speech)&lt;br /&gt;
* GarageBand (Mac)&lt;br /&gt;
** [[GarageBand project]] (.band, .gbproj)&lt;br /&gt;
** [[Magic GarageBand template]] (.wand)&lt;br /&gt;
** [[GarageBand MagicMentor template]] (.mwand)&lt;br /&gt;
* [[Hydrogen]] (.h2song, .h2pattern)&lt;br /&gt;
* [[iZotope RX]] (.rxdoc)&lt;br /&gt;
* Jeskola Buzz&lt;br /&gt;
** [[Jeskola Buzz machine]] (.dll)&lt;br /&gt;
** [[Jeskola Buzz machine preset]] (.prs, .prs.xml)&lt;br /&gt;
** [[Jeskola Buzz song]] (.bmx, .bmw)&lt;br /&gt;
* [[LMMS]] (Linux MultiMedia Studio) (.mmp, .mmpz)&lt;br /&gt;
* Logic Pro / Logic / Notator Logic&lt;br /&gt;
** [[Logic Pro project file]] (.logic, .logicx)&lt;br /&gt;
* [[Maestro]] (RISC OS)&lt;br /&gt;
* [[Make-A-Melody]] (''Big Blue Disk'' #42) (.mus)&lt;br /&gt;
* [[Nero SoundTrax]] (.npf)&lt;br /&gt;
* [[Nero WaveEditor]] (.nwf)&lt;br /&gt;
* Piston Collage / PxTone&lt;br /&gt;
** [[Piston Collage noise]] (.ptnoise)&lt;br /&gt;
** [[Piston Collage song]] (.ptcop, .pttune)&lt;br /&gt;
** [[Piston Collage voice]] (.ptvoice)&lt;br /&gt;
* Pro Tools&lt;br /&gt;
** [[Pro Tools (Mac)]] (.pt5, .p24, .pt4, .pt3)&lt;br /&gt;
** [[PTS]] (Pro Tools 5.1-6.9)&lt;br /&gt;
** [[PTF]] (Pro Tools 7-9) &lt;br /&gt;
** [[PTX (Pro Tools)|PTX]] (Pro Tools 10)&lt;br /&gt;
* Propellerhead (Reason, ReCycle)&lt;br /&gt;
** [[Propellerhead Reason NN-XT Patch File]] (.sx2)&lt;br /&gt;
** [[Propellerhead Reason Project File]] / song file (.reason, .rns, others)&lt;br /&gt;
** [[Propellerhead Reason ReFill Sound Bank]] (.rfl)&lt;br /&gt;
** [[Propellerhead ReCycle Loop File]] (.rex)&lt;br /&gt;
** [[Reason Studios REX2 Audio File]] (.rx2)&lt;br /&gt;
* [[Reaper Project]] (.rpp)&lt;br /&gt;
* [[Renoise]]&lt;br /&gt;
** [[Renoise song]] (.xrns)&lt;br /&gt;
** [[Renoise instrument]] (.xrni)&lt;br /&gt;
** [[Renoise DSP device-chain]] (.xrnt)&lt;br /&gt;
* [[ROXIO|Roxio]]&lt;br /&gt;
** [[DMSE]] (Sound Editor project) &lt;br /&gt;
** [[DMSA]] (Music Disc Creator project)&lt;br /&gt;
* SeaTone / PixTone&lt;br /&gt;
** [[PXT]] (.pxt)&lt;br /&gt;
* [[Sonic Foundry Acid]] (.acd)&lt;br /&gt;
* [[SoundDesigner II]] (.sd2)&lt;br /&gt;
* [[Soundtrack Pro]] (.stmp)&lt;br /&gt;
* Steinberg&lt;br /&gt;
** [[Cubase]]&lt;br /&gt;
*** [[ALL]] - A Steinberg [[Cubase]] VST file for saving songs (pre 2002).&lt;br /&gt;
*** [[ARR]]  - A Steinberg [[Cubase]] VST file for saving arrangements (pre 2002). &lt;br /&gt;
*** [[CPR]] - A Steinberg [[Cubase]] SX file for saving projects (2002 - ).&lt;br /&gt;
** [[Nuendo]]&lt;br /&gt;
*** [[NPR]] - A Steinberg [[Nuendo]] file for saving arrangements (2002 - ).&lt;br /&gt;
** [[WaveLab]]&lt;br /&gt;
*** [[MON]] (Audio montage)&lt;br /&gt;
* [[(Super) Studio Session song]] (.sss)&lt;br /&gt;
* [[Waveburner]] (.wb3)&lt;br /&gt;
&lt;br /&gt;
== Audio recording and sound waves ==&lt;br /&gt;
&lt;br /&gt;
* Lossless compression&lt;br /&gt;
** [[ATRAC Advanced Lossless]] (.aal)&lt;br /&gt;
** [[ADA]]  (Advanced Digital Audio)&lt;br /&gt;
** [[ALAC]] (Apple Lossless Audio Codec)&lt;br /&gt;
** [[APAC]] (Marian's A-pac)&lt;br /&gt;
** [[Dakx Wav]]&lt;br /&gt;
** [[Dolby TrueHD]]&lt;br /&gt;
** [[DTS-HD]] (Lossless variant of DTS- DTS-HD Master Audio)&lt;br /&gt;
** [[FLAC]] (Free Lossless Audio Codec)&lt;br /&gt;
** [[Kexis]] (.kxs)&lt;br /&gt;
** [[LA]] (Lossless Audio)&lt;br /&gt;
** [[LiteWave]]&lt;br /&gt;
** [[LPAC]] (Lossless Predictive Audio Coding)&lt;br /&gt;
** [[MKW]]&lt;br /&gt;
** [[MLP]] (Meridian Lossless Packing Audio)&lt;br /&gt;
** [[Monkey's Audio]] (.ape)&lt;br /&gt;
** [[MPEG-4 ALS]] (MPEG-4 Audio Lossless Coding)&lt;br /&gt;
** [[MPEG-4 SLS]] (MPEG-4 Scalable lossless coding mode)&lt;br /&gt;
** [[MQA]] (Master Quality Authenticated)&lt;br /&gt;
** [[OptimFROG]] (.ofr, .ofs)&lt;br /&gt;
** [[Perfect Clarity Audio]] (.pca)&lt;br /&gt;
** [[RALF]] (Real Lossless Audio Codec)&lt;br /&gt;
** [[RK Audio]] (.rka)&lt;br /&gt;
** [[Shorten]] (.shn)&lt;br /&gt;
** [[Sonarc]]&lt;br /&gt;
** [[Split2000]]&lt;br /&gt;
** [[TAK]] (.tak)&lt;br /&gt;
** [[True Audio]] (.tta)&lt;br /&gt;
** [[VocPack]]&lt;br /&gt;
** [[WavArc]]&lt;br /&gt;
** [[WavPack]] (.wv)&lt;br /&gt;
** [[WMA Lossless]] (Windows Media Audio 9 Lossless)&lt;br /&gt;
* Lossy compression&lt;br /&gt;
** [[AAC]] (Advanced Audio Coding)&lt;br /&gt;
** [[ADPCM|Adaptive differential pulse-code modulation]]&lt;br /&gt;
*** [[ACT]]&lt;br /&gt;
*** [[ADPCM-A]] (Yamaha)&lt;br /&gt;
*** [[ADPCM-B]] (Yamaha)&lt;br /&gt;
*** [[VOX]]&lt;br /&gt;
** [[Adaptive Multi-Rate WideBand Audio]]&lt;br /&gt;
** [[Adaptive Multi-Rate Audio]] (.amr)&lt;br /&gt;
** [[Archimedes VIDC audio]]&lt;br /&gt;
** ATRAC or [[Adaptive Transform Acoustic Coding]] (.aa3, .oma, .at3)&lt;br /&gt;
** [[Audible Audiobook]] (.aa, .aax)&lt;br /&gt;
** [[Audition Loop]] (.cel)&lt;br /&gt;
** [[CELT]] (.ogg)&lt;br /&gt;
** [[Digital Theater Systems]] (.dts)&lt;br /&gt;
** [[Dolby Digital]] (AC-3 or ATSC A/52)&lt;br /&gt;
** [[GSM]] (GSM 6.10 RPE-LTP)&lt;br /&gt;
** [[M4B]] (iTunes Audio Book)&lt;br /&gt;
** [[M4P]] (Fairplay DRM Encrypted [[M4A]])&lt;br /&gt;
** MP1: See [[MPEG Audio Layer I]]&lt;br /&gt;
** MP2: See [[MPEG Audio Layer II]]&lt;br /&gt;
** [[MP3]] (MPEG-1 / MPEG-2 Audio Layer III)&lt;br /&gt;
*** [[packMP3]]&lt;br /&gt;
*** [[MP3 wrapper]] - '''reversibly''' combine mp3 files into one playable mp3 (often used on filesharing services that banned other formats like zip/rar)&lt;br /&gt;
**** [[zip/rar.mp3]]&lt;br /&gt;
**** [[AlbumWrap (ALBW)]]&lt;br /&gt;
**** [[MooseWrap (DJWrap)]]&lt;br /&gt;
**** [[Mp3Wrap]]&lt;br /&gt;
**** [[Track Wrapper (TRKW)]]&lt;br /&gt;
**** [[MP3 Album Maker]]&lt;br /&gt;
**** [[M3A]]&lt;br /&gt;
** MPA (MPEG Audio): See [[MPEG Audio Layer II]]&lt;br /&gt;
** MP+ (MPEGplus Audio): See [[Musepack Audio]]&lt;br /&gt;
** MPEG-4 Audio: Can refer to various formats connected with [[MPEG-4]], including [[AAC]]. (.m4a, .m4b, .m4p, .m4r, .mp4, .aac)&lt;br /&gt;
** [[MPEG Audio Layer I]] (MP1)&lt;br /&gt;
** [[MPEG Audio Layer II]] (MP2; MPEG-1 Audio Layer II)&lt;br /&gt;
** [[Musepack Audio]] (.mpc)&lt;br /&gt;
** [[Opus]] (.opus)&lt;br /&gt;
** [[Quite OK Audio]] (.qoa)&lt;br /&gt;
** [[RealAudio]] (.ra)&lt;br /&gt;
** [[Speex]] (.spx)&lt;br /&gt;
** [[SWA]]&lt;br /&gt;
** [[Vorbis]] (.logg, .oga, .ogg)&lt;br /&gt;
** [[WMA]] (Windows Media Audio)&lt;br /&gt;
* Proprietary&lt;br /&gt;
** [[DCT]] (Dictation format by NCH Software)&lt;br /&gt;
** [[Digital Speech Standard]] (.dss)&lt;br /&gt;
** [[Digital Voice File]] (.dvf)&lt;br /&gt;
** [[IC Sound]] (.ics)&lt;br /&gt;
** [[iKlax]] (iKlax Media)&lt;br /&gt;
** [[Memory Stick Voice]] (.msv)&lt;br /&gt;
** [[Panasonic VM1]] (.vm1)&lt;br /&gt;
** [[Pono]]&lt;br /&gt;
** [[PXD]]&lt;br /&gt;
* Separated parts of tracks&lt;br /&gt;
** [[Stems]]&lt;br /&gt;
* Uncompressed audio&lt;br /&gt;
** [[AIFF|AIF / AIFF]] (Audio Interchange File Format)&lt;br /&gt;
** [[Berkeley/IRCAM/Carl Sound Format]] (.sf)&lt;br /&gt;
** [[BWF]] (Broadcast Wave Format; variant of WAV)&lt;br /&gt;
** [[DSD]] (Direct Stream Digital) (.dsf)&lt;br /&gt;
** [[RAW (Audio)|RAW]] (.raw, .pcm)&lt;br /&gt;
** [[RF64]] (extended variant of BWF)&lt;br /&gt;
** [[Sony Wave64]] (.w64)&lt;br /&gt;
** [[WAV]] (Waveform Audio File Format)&lt;br /&gt;
* Various encodings&lt;br /&gt;
** [[AIFC]] ([[AIFF]] Compressed)&lt;br /&gt;
** [[AU]] (Sun Microsystems audio format)&lt;br /&gt;
** [[Computerized Speech Lab NSP]] (.nsp)&lt;br /&gt;
** [[DiamondWare Digitized]] (.dwd)&lt;br /&gt;
** [[Bonk]] (lossy/lossless audio compression)&lt;br /&gt;
** [[INRS-Telecom file]] (.aud)&lt;br /&gt;
** [[SIFF]] (.son)&lt;br /&gt;
** [[SPPACK]] (.d)&lt;br /&gt;
** [[WVE (Psion)]]&lt;br /&gt;
&lt;br /&gt;
== Chiptune ==&lt;br /&gt;
&lt;br /&gt;
* [[SAM Coupé song]] (.cop, .sng)&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
&lt;br /&gt;
* [[X2A]] (Yamaha S70xs/S90xs keyboard workstations)&lt;br /&gt;
&lt;br /&gt;
== Container formats ==&lt;br /&gt;
&lt;br /&gt;
* [[AAF]] (Advanced Authoring Format)&lt;br /&gt;
* [[ASF]] (Advanced Systems Format)&lt;br /&gt;
* [[Core Audio Format]] (.caf)&lt;br /&gt;
* [[Extensible Music Format]] (.xmf)&lt;br /&gt;
* [[IFF]]&lt;br /&gt;
* [[Matroska Audio]] (.mka)&lt;br /&gt;
* [[MP4]] (MPEG-4 Part 14 media container)&lt;br /&gt;
* [[Ogg]] (.ogg, .oga, .ogx, .spx, .opus)&lt;br /&gt;
* [[OMF Interchange]] (Open Media Framework Interchange format)&lt;br /&gt;
* [[Qualcomm QCP]] (Purevoice)&lt;br /&gt;
* [[Rich Music Format]] (.rmf)&lt;br /&gt;
* [[RealMedia]] (.rm)&lt;br /&gt;
* [[WAV]]&lt;br /&gt;
* [[WebM]] (.webm) (also used for video)&lt;br /&gt;
&lt;br /&gt;
== Converters ==&lt;br /&gt;
&lt;br /&gt;
* [[Konvertor]]&lt;br /&gt;
&lt;br /&gt;
== Emulated music ==&lt;br /&gt;
&lt;br /&gt;
* [[2SF]] (Nintendo DS [[PSF]])&lt;br /&gt;
* [[3G2]] (3GPP, also a video format)&lt;br /&gt;
* [[3GP]] (3GPP, also a video format)&lt;br /&gt;
* [[Atari SoundHeader]] (SNDH)&lt;br /&gt;
* [[AY]] (Amstrad CPC / ZX Spectrum / ZXAYEMUL)&lt;br /&gt;
* [[AZX]] (ZX Spectrum)&lt;br /&gt;
* [[Custom Amiga Module]] (CUST)&lt;br /&gt;
* [[DSF]] (Dreamcast [[Portable Sound Format|PSF]])&lt;br /&gt;
* [[EPSGMOD]] (.epsgmod, Mod2PSG)&lt;br /&gt;
* [[Fuxoft AY Language]] (.fmx)&lt;br /&gt;
* [[Game Boy Sound]] (.gbs)&lt;br /&gt;
* [[GBR]] (Game Boy Sound)&lt;br /&gt;
* [[Gens Sound Record]] (GSR)&lt;br /&gt;
* [[GSF]] (Game Boy Advance [[PSF]])&lt;br /&gt;
* [[HES]] (Hudson Entertainment System)&lt;br /&gt;
* [[KSS]] (MSX)&lt;br /&gt;
* [[KSSX]] (Possible expansion of [[KSS]])&lt;br /&gt;
* [[MDX (X68000)|MDX]] (Sharp X68000 / MXDRV)&lt;br /&gt;
* [[NES Sound Format]] (.nsf)&lt;br /&gt;
* [[NES Sound Format Extended]] (.nsfe)&lt;br /&gt;
* [[NSD (audio)|NSD]]&lt;br /&gt;
* [[Portable Sound Format|PSF]] (Portable Sound Format)&lt;br /&gt;
* [[PSF1]] (Playstation [[PSF]])&lt;br /&gt;
* [[PSF2]] (Playstation 2 [[PSF]])&lt;br /&gt;
* [[QSF]] (Capcom Q-Sound [[PSF]])&lt;br /&gt;
* [[SC68]] (Atari ST / Atari STE / Amiga)&lt;br /&gt;
* [[SGC]] (Sega Master System / Game Gear / Colecovision)&lt;br /&gt;
* [[SID]] (Commodore 64)&lt;br /&gt;
* [[SPC (Audio)|SPC]] (Super Nintendo SPC700)&lt;br /&gt;
* [[SSF]] (Sega Saturn [[Portable Sound Format|PSF]])&lt;br /&gt;
* [[USF]] (Nintendo 64 [[Portable Sound Format|PSF]])&lt;br /&gt;
* [[YM]] (Amstrad CPC / Spectrum ZX / Atari ST)&lt;br /&gt;
&lt;br /&gt;
== Game audio and music ==&lt;br /&gt;
&lt;br /&gt;
(see also [[Game data files]])&lt;br /&gt;
&lt;br /&gt;
* [[4X IMA ADPCM]]&lt;br /&gt;
* Accolade&lt;br /&gt;
** [[Accolade MIDI File Format]]&lt;br /&gt;
* Adept Software&lt;br /&gt;
** [[God of Thunder Music Format]]&lt;br /&gt;
* [[AFC]] (AFX Audio File) -- used in Mass Effect 2&lt;br /&gt;
* Apogee&lt;br /&gt;
** [[Crystal Caves Sound format]]&lt;br /&gt;
* Atari&lt;br /&gt;
** [[Slight Atari Player]] (Atari POKEY)&lt;br /&gt;
* [[BAF]] (Blur ADPCM)&lt;br /&gt;
* [[BAKA]] (PCM 16 bit)&lt;br /&gt;
* Bandai&lt;br /&gt;
** [[WSR]] (WonderSwan / WonderSwan Color)&lt;br /&gt;
* [[BH2PCM]]&lt;br /&gt;
* [[BNSF]] (G.722.1)&lt;br /&gt;
* Cave Story&lt;br /&gt;
** [[Organya]]&lt;br /&gt;
* Commodore Amiga&lt;br /&gt;
** [[A.M. Composer v1.2]] (.amc)&lt;br /&gt;
** [[AC1D-DC1A Packer]] (.ac1d)&lt;br /&gt;
** [[Actionamics Sound Tool]] (.ast)&lt;br /&gt;
** [[AMOS Music Bank]] (.abk)&lt;br /&gt;
** [[AMOS Memory Bank#AMOS Samples Bank|AMOS Samples Bank]] (.abk)&lt;br /&gt;
** [[Art &amp;amp; Magic]] (.aam)&lt;br /&gt;
** [[Audio Sculpture]] (.as)&lt;br /&gt;
** [[Beathoven Synthesiser]] (.bss)&lt;br /&gt;
** [[Ben Daglish]] (.bd)&lt;br /&gt;
** [[Ben Daglish SID]] (.bds)&lt;br /&gt;
** [[Ben Replay]] (.ben)&lt;br /&gt;
** [[Channel Players]] (.chan)&lt;br /&gt;
** [[Cinemaware]] (.cin)&lt;br /&gt;
** [[Core Design]] (.core)&lt;br /&gt;
** [[CustomMade]] (.cm)&lt;br /&gt;
** [[Darius Zendeh]] (.dz)&lt;br /&gt;
** [[Dave Lowe]] (.dl)&lt;br /&gt;
** [[Dave Lowe New]] (.dln)&lt;br /&gt;
** [[David Hanney]] (.dh)&lt;br /&gt;
** [[David Whittaker]] (.dw)&lt;br /&gt;
** [[Desire]] (.dsr)&lt;br /&gt;
** [[Digital Illusions]] (.di)&lt;br /&gt;
** [[Digital Sonix &amp;amp; Chrome]] (.dsc)&lt;br /&gt;
** [[Digital Sound Creations]] (.han)&lt;br /&gt;
** [[Dirk Bialluch]] (.tpu)&lt;br /&gt;
** [[Dynamic Synthesizer]] (.dns)&lt;br /&gt;
** [[Editeur Musical Sequentiel]] (.ems)&lt;br /&gt;
** [[Follin Player II]] (.tf)&lt;br /&gt;
** [[Fred Editor]] (.fred)&lt;br /&gt;
** [[Fred Gray]] (.fg)&lt;br /&gt;
** [[Future Player]] (.fp)&lt;br /&gt;
** [[FWMP]] (.fw)&lt;br /&gt;
** [[Game Music Creator]] (.gmc)&lt;br /&gt;
** [[Gnu Player]] (.gp)&lt;br /&gt;
** [[Hippel]] (.hip)&lt;br /&gt;
** [[Hippel-COSO]] (.hipc)&lt;br /&gt;
** [[Hornet Packer]] (.hrt)&lt;br /&gt;
** [[Howie Davies]] (.hd)&lt;br /&gt;
** [[IFF-MAUD]]&lt;br /&gt;
** [[Images Music System]] (.ims)&lt;br /&gt;
** [[Infogrames INS]] (.ins)&lt;br /&gt;
** [[Janko Mrsic-Flogel]] (.jmf)&lt;br /&gt;
** [[Jason Brooke]] (.jcb)&lt;br /&gt;
** [[Jason Page]] (.jp)&lt;br /&gt;
** [[Jeroen Tel]] (.jt)&lt;br /&gt;
** [[Jesper Olsen]] (.jo)&lt;br /&gt;
** [[Jochen Hippel]] (.hip)&lt;br /&gt;
** [[Kefrens Sound Machine]] (.ksm)&lt;br /&gt;
** [[Kris Hatlelid]] (.kh)&lt;br /&gt;
** [[Leggless Music Editor]] (.lme)&lt;br /&gt;
** [[Magnetic Fields Packer]] (.mfp)&lt;br /&gt;
** [[Maniacs of Noise]] (.mon, .jt)&lt;br /&gt;
** [[Mark Cooksey]] (.mc)&lt;br /&gt;
** [[Mark II Sound-System]] (.mii, .mk2, .mkii)&lt;br /&gt;
** [[Martin Walker]] (.mw)&lt;br /&gt;
** [[MaxTrax]] (.mxtx)&lt;br /&gt;
** [[Mike Davies]] (.md)&lt;br /&gt;
** [[MMDC]] (Module packer)&lt;br /&gt;
** [[Mugician]] (.mug)&lt;br /&gt;
** [[Mugician II]] (.mug2)&lt;br /&gt;
** [[NoiseRunner]] (.nr)&lt;br /&gt;
** [[NovoTrade Packer]] (.ntp)&lt;br /&gt;
** [[Pierre Adane Packer]] (.pap)&lt;br /&gt;
** [[Power Music]] (.pm)&lt;br /&gt;
** [[Professional Sound Artists]] (.psa)&lt;br /&gt;
** [[Promizer 0.1]] (.pm01)&lt;br /&gt;
** [[Promizer 1.0c]] (.pm10)&lt;br /&gt;
** [[Promizer 1.8a]] (.pm18)&lt;br /&gt;
** [[Promizer 2.0]] (.pm20)&lt;br /&gt;
** [[Promizer 4.0]] (.pm40)&lt;br /&gt;
** [[ProPacker 1.0]] (.pp10)&lt;br /&gt;
** [[ProPacker 2.1]] (.pp21)&lt;br /&gt;
** [[ProPacker 3.0]] (.pp30)&lt;br /&gt;
** [[Prorunner]] (.prun1, .prun2)&lt;br /&gt;
** [[Richard Joseph]] or Vectordean (.rjp)&lt;br /&gt;
** [[Rob Hubbard]] (.rh, .rho)&lt;br /&gt;
** [[Ron Klaren]] (.rk)&lt;br /&gt;
** [[Sean Connolly]] (.scn)&lt;br /&gt;
** [[Sean Conran]] (.scr)&lt;br /&gt;
** [[Sidmon]] (.sid, .sid2)&lt;br /&gt;
** [[Silmarils]] (.mok)&lt;br /&gt;
** [[SKYT Packer]] (.skyt)&lt;br /&gt;
** [[Sonic Arranger]] (.sa)&lt;br /&gt;
** [[Sound Images]] (.tw)&lt;br /&gt;
** [[Sound Master]] (.sm)&lt;br /&gt;
** [[Sound Programming Language]] (.spl)&lt;br /&gt;
** [[Soundcontrol]] (.sct)&lt;br /&gt;
** [[Soundfactory]] (.psf)&lt;br /&gt;
** [[SoundPlayer]] (.sjs)&lt;br /&gt;
** [[Special FX]] (.jd)&lt;br /&gt;
** [[Speedy System]] (.ss)&lt;br /&gt;
** [[Steve Barrett]] (.sb)&lt;br /&gt;
** [[Jason Page|Steve Turner]] (.jpo)&lt;br /&gt;
* [[Star Trekker Packer]] (.stpk)&lt;br /&gt;
** [[Synth Dream]] (.sdr)&lt;br /&gt;
** [[Synth Pack]] (.osp)&lt;br /&gt;
** [[The Musical Enlightenment]] (.tme)&lt;br /&gt;
** [[The Player]] (.p22a, .p30a, .p40a, .p40b, .p50a, .p60a, .p61a)&lt;br /&gt;
** [[Titanics Player]] (.ttp)&lt;br /&gt;
** [[Tracker Packer 1]] (.tp1)&lt;br /&gt;
** [[Tracker Packer 2]] (.tp2)&lt;br /&gt;
** [[Tracker Packer 3]] (.tp3)&lt;br /&gt;
** [[Thomas Hermann]] (.thm)&lt;br /&gt;
** [[Wally Beben]] (.wb)&lt;br /&gt;
** [[Wanton Packer]] (.wn)&lt;br /&gt;
** [[XANN Packer]] (.xann)&lt;br /&gt;
** [[Zen Packer]] (.zen)&lt;br /&gt;
* CRI Middleware&lt;br /&gt;
** [[ADX]]&lt;br /&gt;
** [[AFS]] (container format for [[ADX]] / [[AHX (CRI)]])&lt;br /&gt;
** [[AHX (CRI)]]&lt;br /&gt;
** [[AIX]]&lt;br /&gt;
* [[DCS]] (ADPCM)&lt;br /&gt;
* [[Death Rally Archive]] (.bpa)&lt;br /&gt;
* [[DMSG]] (PCM 16 bit)&lt;br /&gt;
* [[EACS IMA ADPCM]] (.kcey)&lt;br /&gt;
* Electronic Arts&lt;br /&gt;
** [[8-Bit Sampled Voice]] (.8svx, .iff)&lt;br /&gt;
** [[Asylum Music Format]] (.amf, used in Crusader: No Remorse / Crusader: No Regret)&lt;br /&gt;
** [[Electronic Arts AS4 / ASF Music]] (.as4, .asf)&lt;br /&gt;
** [[Electronic Arts KSF Music]] (.ksf)&lt;br /&gt;
** [[Electronic Arts MUS]] (.mus)&lt;br /&gt;
** [[Electronic Arts SCxl]]&lt;br /&gt;
** [[Electronic Arts Sound Effects]] (.bnk, .crd)&lt;br /&gt;
** [[Electronic Arts Sound / Speech Files]] (.eas, .sph)&lt;br /&gt;
** [[IFF]] (Amiga 8SVX)&lt;br /&gt;
*** [[IFF-MAUD]]&lt;br /&gt;
** [[Sonix Music Driver]] (.smus)&lt;br /&gt;
* [[EMFF]] (ADPCM)&lt;br /&gt;
* Epic Megagames&lt;br /&gt;
** [[Epic Megagames MASI]] (.masi, .psm)&lt;br /&gt;
* [[Final Fantasy XI Music file]] (.bgw)&lt;br /&gt;
* [[FMOD Sample Bank]] (.fsb)&lt;br /&gt;
* [[Funcom ISS]]&lt;br /&gt;
* Galaxy Music System&lt;br /&gt;
** [[Galaxy Music System v4.0]]&lt;br /&gt;
** [[Galaxy Music System v5.0]] (.j2b)&lt;br /&gt;
* [[GCW]] (PCM 16 bit)&lt;br /&gt;
* [[Generic Header]] (.genh, Generic Header Creator)&lt;br /&gt;
* Herad Music System&lt;br /&gt;
** [[Herad Music System AGD]] (.agd)&lt;br /&gt;
** [[Herad Music System SDB]] (.sdb)&lt;br /&gt;
** [[Herad Music System SQX]] (.sqx)&lt;br /&gt;
* [[HIS]] (PCM 8 bit)&lt;br /&gt;
* id Software&lt;br /&gt;
** [[Doom MUS]]&lt;br /&gt;
** [[id Software DNF]] (.dnf)&lt;br /&gt;
** [[id Software Music Format]] (.imf)&lt;br /&gt;
** [[id Software WLF]] (.wlf)&lt;br /&gt;
* [[IMA ADPCM]] (.bar, .dvi, .hwas, .idvi, .ivaud, .myspd, .stma, .strm)&lt;br /&gt;
* [[Interplay ACM]] (.acm)&lt;br /&gt;
* [[Inverse Frequency Sound format]]&lt;br /&gt;
* [[iXMF]] (Interactive [[Extensible Music Format]])&lt;br /&gt;
* Ken Silverman&lt;br /&gt;
** [[Ken's Adlib Music]] (.ksm)&lt;br /&gt;
** [[Ken's Digital Music]] (.kdm)&lt;br /&gt;
** [[SM (Ken Silverman)]] (.sm)&lt;br /&gt;
** [[SND (Ken Silverman)]] (.snd)&lt;br /&gt;
* [[LOUDNESS Sound System]] (.lds)&lt;br /&gt;
* LucasArts&lt;br /&gt;
** [[LucasArts Adlib Audio]] (.laa)&lt;br /&gt;
** [[SCUMM]] (SCUMM)&lt;br /&gt;
* [[Martin Fernandez]] (.adlib)&lt;br /&gt;
* Microsoft&lt;br /&gt;
** [[0x0069]] (Xbox ADPCM)&lt;br /&gt;
** [[2DX]]&lt;br /&gt;
** [[2DX9]] (ADPCM)&lt;br /&gt;
** [[DE2]] (ADPCM)&lt;br /&gt;
** [[Xbox IMA ADPCM]] (.matx, .wavm, .wvs, .xmu, .xvas, .xwav)&lt;br /&gt;
* Mojang AB (Minecraft)&lt;br /&gt;
** [[Minecraft sounds.json]]&lt;br /&gt;
&lt;br /&gt;
* Origin Software&lt;br /&gt;
** [[Ultima 6 Music]] (.m)&lt;br /&gt;
* PC-98 and PC-88&lt;br /&gt;
** [[Professional Music Driver PMD]] (.m, .m2)&lt;br /&gt;
* Pixel&lt;br /&gt;
** [[PMD (Pixel)]]&lt;br /&gt;
* [[Pixel Painters]] (.fmf)&lt;br /&gt;
* [[Ragnarok Online 2 RMP]]&lt;br /&gt;
* [[Shadowlands]] (.cal)&lt;br /&gt;
* Sierra&lt;br /&gt;
** [[Sierra AGI]] (Sierra AGI)&lt;br /&gt;
** [[Sierra SCI]] (Used in Sierra PC games)&lt;br /&gt;
* [[Sound Images Generation 2]] (.sig)&lt;br /&gt;
* [[Sound Interface System]] (.lem)&lt;br /&gt;
* [[STOS memory bank]] (.mbk)&lt;br /&gt;
* [[Unreal Music Format]] (.umx)&lt;br /&gt;
* Union Logic Software Publishing&lt;br /&gt;
** [[Vinyl Goddess From Mars Instrument Format]]&lt;br /&gt;
** [[Vinyl Goddess From Mars Music Format]]&lt;br /&gt;
* [[Unique Development Studios]] (.uds)&lt;br /&gt;
* [[Video Game Music]] (.vgm, .vgz)&lt;br /&gt;
* Westwood Studios&lt;br /&gt;
** [[Westwood Studios ADL]] (.adl)&lt;br /&gt;
** [[Westwood Studios AUD]] (.aud)&lt;br /&gt;
* [[Whacky Wheels]] (.klm)&lt;br /&gt;
* [[XMP Game Module]] (.j2b)&lt;br /&gt;
&lt;br /&gt;
=== Nintendo ===&lt;br /&gt;
&lt;br /&gt;
* [[Advanced Mario Sequencer file]] (.mss)&lt;br /&gt;
* [[BRSTMPSM]] (Super Paper Mario)&lt;br /&gt;
* [[Donkey Konga 2 DSP]] (Donkey Konga 2)&lt;br /&gt;
* [[Mario Paint Composer]] (MPC)&lt;br /&gt;
* [[Mario Sequencer file]] (.msq)&lt;br /&gt;
* [[Nintendo GameCube / Wii AAAP]]&lt;br /&gt;
* [[Nintendo GameCube / Wii ADP]] (Nintendo Gamecube) (.adp)&lt;br /&gt;
* [[Nintendo GameCube / Wii AFC]] (Nintendo Gamecube)&lt;br /&gt;
* [[Nintendo GameCube / Wii AGSC]] (.agsc)&lt;br /&gt;
* [[Nintendo GameCube / Wii AMTS]]&lt;br /&gt;
* [[Nintendo GameCube / Wii ASN]] (Nintendo Gamecube)&lt;br /&gt;
* [[Nintendo GameCube / Wii ASR]] (Nintendo Wii)&lt;br /&gt;
* [[Nintendo GameCube / Wii AST]] (Nintendo Wii sound format)&lt;br /&gt;
* [[Nintendo GameCube / Wii BNS]]&lt;br /&gt;
* [[Nintendo GameCube / Wii BO2]]&lt;br /&gt;
* [[Nintendo GameCube / Wii BRSTM]] (Nintendo Wii streaming format)&lt;br /&gt;
* [[Nintendo GameCube / Wii CAPDSP]]&lt;br /&gt;
* [[Nintendo GameCube / Wii CFN]]&lt;br /&gt;
* [[Nintendo GameCube / Wii DDSP]]&lt;br /&gt;
* [[Nintendo GameCube / Wii DSP]]&lt;br /&gt;
* [[Nintendo GameCube / Wii GCA]] (Nintendo Wii)&lt;br /&gt;
* [[Nintendo GameCube / Wii GCM]]&lt;br /&gt;
* [[Nintendo GameCube / Wii GSP]]&lt;br /&gt;
* [[Nintendo GameCube / Wii HPS]]&lt;br /&gt;
* [[Nintendo GameCube / Wii IDSP]]&lt;br /&gt;
* [[Nintendo GameCube / Wii ISD]]&lt;br /&gt;
* [[Nintendo GameCube / Wii ISH]]&lt;br /&gt;
* [[Nintendo GameCube / Wii KRAW]] (Nintendo Wii)&lt;br /&gt;
* [[Nintendo GameCube / Wii LPS]]&lt;br /&gt;
* [[Nintendo GameCube / Wii MPDS]]&lt;br /&gt;
* [[Nintendo GameCube / Wii MPDSP]]&lt;br /&gt;
* [[Nintendo GameCube / Wii MSS]]&lt;br /&gt;
* [[Nintendo GameCube / Wii MUS]]&lt;br /&gt;
* [[Nintendo GameCube / Wii PDT]]&lt;br /&gt;
* [[Nintendo GameCube / Wii SDT]]&lt;br /&gt;
* [[Nintendo GameCube / Wii SMP]]&lt;br /&gt;
* [[Nintendo GameCube / Wii SNS]]&lt;br /&gt;
* [[Nintendo GameCube / Wii SPD]]&lt;br /&gt;
* [[Nintendo GameCube / Wii SPT]]&lt;br /&gt;
* [[Nintendo GameCube / Wii SSM]]&lt;br /&gt;
* [[Nintendo GameCube / Wii STM]]&lt;br /&gt;
* [[Nintendo GameCube / Wii STR]]&lt;br /&gt;
* [[Nintendo GameCube / Wii STS]]&lt;br /&gt;
* [[Nintendo GameCube / Wii SWD]]&lt;br /&gt;
* [[Nintendo GameCube / Wii THP]]&lt;br /&gt;
* [[Nintendo GameCube / Wii TYDSP]]&lt;br /&gt;
* [[Nintendo GameCube / Wii VJDSP]]&lt;br /&gt;
* [[Nintendo GameCube / Wii WAS]]&lt;br /&gt;
* [[Nintendo GameCube / Wii WSD]]&lt;br /&gt;
* [[Nintendo GameCube / Wii WSI]]&lt;br /&gt;
* [[Nintendo GameCube / Wii YDSP]]&lt;br /&gt;
* [[Nintendo GameCube / Wii YMF]]&lt;br /&gt;
* [[Nintendo GameCube / Wii ZWDSP]]&lt;br /&gt;
* [[SHI]] ([http://battleofthebits.org/lyceum/View/ShroomTool ShroomTool] Instrument, used for Mario Paint instruments)&lt;br /&gt;
* [[SHO]] (ShroomTool, used for Mario Paint sounds)&lt;br /&gt;
&lt;br /&gt;
=== Sony ===&lt;br /&gt;
&lt;br /&gt;
* [[Sony Playstation ADS]] (Sony Playstation)&lt;br /&gt;
* [[Sony Playstation ASS]] (Sony Playstation)&lt;br /&gt;
* [[Sony Playstation AST]]&lt;br /&gt;
* [[Sony Playstation BG00]]&lt;br /&gt;
* [[Sony Playstation BMDX]]&lt;br /&gt;
* [[Sony Playstation CCC]] (Sony Playstation)&lt;br /&gt;
* [[Sony Playstation CNK]]&lt;br /&gt;
* [[Sony Playstation DXH]] (Sony Playstation)&lt;br /&gt;
* [[Sony Playstation ENTH]]&lt;br /&gt;
* [[Sony Playstation FAG]] (Sony Playstation)&lt;br /&gt;
* [[Sony Playstation FILP]]&lt;br /&gt;
* [[Sony Playstation FSB]] (Sony Playstation)&lt;br /&gt;
* [[Sony Playstation GCM]]&lt;br /&gt;
* [[Sony Playstation GMS]] (Sony Playstation)&lt;br /&gt;
* [[Sony Playstation HGC1]]&lt;br /&gt;
* [[Sony Playstation I100]] (Sony Playstation)&lt;br /&gt;
* [[Sony Playstation I400]] (Sony Playstation)&lt;br /&gt;
* [[Sony Playstation I80]] (Sony Playstation)&lt;br /&gt;
* [[Sony Playstation IKM]]&lt;br /&gt;
* [[Sony Playstation ILD]] (Sony Playstation)&lt;br /&gt;
* [[Sony Playstation IVB]]&lt;br /&gt;
* [[Sony Playstation JOE]]&lt;br /&gt;
* [[Sony Playstation KCES]] (Sony Playstation)&lt;br /&gt;
* [[Sony Playstation KHV]] (Sony Playstation)&lt;br /&gt;
* [[Sony Playstation LEG]] (Sony Playstation)&lt;br /&gt;
* [[Sony Playstation MCG]]&lt;br /&gt;
* [[Sony Playstation MI4]] (Sony Playstation)&lt;br /&gt;
* [[Sony Playstation MIB]] (Sony Playstation)&lt;br /&gt;
* [[Sony Playstation MIC]] (Sony Playstation)&lt;br /&gt;
* [[Sony Playstation MIH]]&lt;br /&gt;
* [[Sony Playstation MIHB]] (merged [[Sony Playstation MIB|MIB]] &amp;amp; [[Sony Playstation MIH|MIH]])&lt;br /&gt;
* [[Sony Playstation MSA]]&lt;br /&gt;
* [[Sony Playstation MSVP]]&lt;br /&gt;
* [[Sony Playstation MUSC]]&lt;br /&gt;
* [[Sony Playstation NPSF]]&lt;br /&gt;
* [[Sony Playstation PNB]]&lt;br /&gt;
* [[Sony Playstation PSH]]&lt;br /&gt;
* [[Sony Playstation RKV]]&lt;br /&gt;
* [[Sony Playstation RND]]&lt;br /&gt;
* [[Sony Playstation RSTM]]&lt;br /&gt;
* [[Sony Playstation RWS]]&lt;br /&gt;
* [[Sony Playstation SFS]]&lt;br /&gt;
* [[Sony Playstation SIR]]&lt;br /&gt;
* [[Sony Playstation SL3]]&lt;br /&gt;
* [[Sony Playstation SMPL]]&lt;br /&gt;
* [[Sony Playstation SND]]&lt;br /&gt;
* [[Sony Playstation SPU]] (Sony Playstation)&lt;br /&gt;
* [[Sony Playstation STER]]&lt;br /&gt;
* [[Sony Playstation STH]]&lt;br /&gt;
* [[Sony Playstation STR]]&lt;br /&gt;
* [[Sony Playstation STS]]&lt;br /&gt;
* [[Sony Playstation SVAG]]&lt;br /&gt;
* [[Sony Playstation SVS]]&lt;br /&gt;
* [[Sony Playstation TEC]]&lt;br /&gt;
* [[Sony Playstation TK5]]&lt;br /&gt;
* [[Sony Playstation VAS]]&lt;br /&gt;
* [[Sony Playstation VAG]]&lt;br /&gt;
* [[Sony Playstation VB2]] (Playstation / PS2)&lt;br /&gt;
* [[Sony Playstation VGS]]&lt;br /&gt;
* [[Sony Playstation VIG]]&lt;br /&gt;
* [[Sony Playstation VPK]]&lt;br /&gt;
* [[Sony Playstation VS]]&lt;br /&gt;
* [[Sony Playstation VSF]]&lt;br /&gt;
* [[Sony Playstation WP2]]&lt;br /&gt;
* [[Sony Playstation XA2]]&lt;br /&gt;
* [[Sony Playstation XA30]]&lt;br /&gt;
* [[Sony Playstation 2 MI2]] (Sony Playstation 2)&lt;br /&gt;
&lt;br /&gt;
== Identifiers of musical works, recordings, artists, etc. ==&lt;br /&gt;
* [[International Standard Musical Work Code]] (ISWC)&lt;br /&gt;
* [[International Standard Recording Code]] (ISRC)&lt;br /&gt;
* [[MusicBrainz Identifier]]&lt;br /&gt;
&lt;br /&gt;
== Metadata formats and related data ==&lt;br /&gt;
&lt;br /&gt;
* [[APE tag]]&lt;br /&gt;
* [[Argoknot]]&lt;br /&gt;
* Cue Sheet - See [[CUE and BIN]]&lt;br /&gt;
* [[ELAN Annotation Format]]&lt;br /&gt;
* [[Exif]]&lt;br /&gt;
* [[ID3]]&lt;br /&gt;
* [[MDZ]] - strictly not itself a music format, but a metadata file for other music files used by Open Cubic Player. See http://www.cubic.org/player/doc/node72.htm&lt;br /&gt;
* [[Monkey's Audio metadata]] (.apl)&lt;br /&gt;
* [[Vorbis comment]]&lt;br /&gt;
&lt;br /&gt;
== Music trackers ==&lt;br /&gt;
(For more on this subject, listen to [https://www.youtube.com/watch?v=v0nNuUKeh6o Jason Scott Talks His Way Out Of It: The Music Tracker Episode].)&lt;br /&gt;
&lt;br /&gt;
* [[1tracker module]] (.1tm)&lt;br /&gt;
* [[AHX (Abyss)]] (Abyss Highest eXperience)&lt;br /&gt;
* [[Aley's Module]] (.alm)&lt;br /&gt;
* [[All Sound Tracker module]] (.ast)&lt;br /&gt;
* [[Amiga Module]] (.mod)&lt;br /&gt;
* [[AProSys module]] (.aps)&lt;br /&gt;
* [[Archimedes Tracker module]] (.musx)&lt;br /&gt;
* [[Arkos Tracker]] (.aks)&lt;br /&gt;
* [[Art of Noise module]] (.aon)&lt;br /&gt;
* [[ASC Sound Master module]] (.asc)&lt;br /&gt;
* [[B's Pro Tracker module]] (.bpm, .bps)&lt;br /&gt;
* [[Beepola song]] (.bbsong)&lt;br /&gt;
* [[BeRoTracker module]] (.br)&lt;br /&gt;
* [[BoyScout Tracker module]] (.bsf)&lt;br /&gt;
* Brian Postma SoundMon&lt;br /&gt;
** [[Brian Postma SoundMon v1.x module]] (.bp)&lt;br /&gt;
** [[Brian Postma SoundMon v2.x &amp;amp; v3.x module]] (.bp3)&lt;br /&gt;
** [[BS]]&lt;br /&gt;
* Buzzic&lt;br /&gt;
** [[Buzzic v1.x]] (.buz)&lt;br /&gt;
** [[Buzzic v2.0]] (.buz2)&lt;br /&gt;
* Chaos Music Composer&lt;br /&gt;
** [[CM3]] ([[CMC]] &amp;quot;3/4&amp;quot;)&lt;br /&gt;
** [[CMC]] (Chaos Music Composer)&lt;br /&gt;
** [[CMR]] ([[CMC]] &amp;quot;Rzog&amp;quot;)&lt;br /&gt;
** [[CMS]] (Stereo Double [[CMC]])&lt;br /&gt;
** [[DMC]] (Double ChaosMusicComposer)&lt;br /&gt;
* [[Chuck Biscuits/Black Artist module]] (.cba)&lt;br /&gt;
* [[Coconizer module]]&lt;br /&gt;
* [[Composer 669 module]] (.669)&lt;br /&gt;
* [[craptracker ii module]] (.ct2)&lt;br /&gt;
* [[Custom Amiga Module]] (.cus. .custom)&lt;br /&gt;
* CyberTracker&lt;br /&gt;
** [[CyberTracker instrument]] (.ci)&lt;br /&gt;
** [[CyberTracker module]] (.ct)&lt;br /&gt;
* [[DeliTracker custom]] (.cust)&lt;br /&gt;
* [[DeltaMusic module]] (.dta)&lt;br /&gt;
* Delta Music Composer&lt;br /&gt;
** [[Delta Music Composer module]] (.dlt)&lt;br /&gt;
** [[Delta Music 2.0 module]] (.dl2)&lt;br /&gt;
* [[Desktop Tracker module]] (.dtt)&lt;br /&gt;
* DigiBooster / DigiBooster PRO&lt;br /&gt;
** [[DigiBooster v1.x module]] (.digi)&lt;br /&gt;
** [[DigiBooster PRO v2.x / DigiBooster 3 module]] (.dbm)&lt;br /&gt;
* [[Digital Symphony module]] (.dsym)&lt;br /&gt;
* Digitrakker&lt;br /&gt;
** [[Digitrakker instrument]] (.ist)&lt;br /&gt;
** [[Digitrakker module]] (.mdl)&lt;br /&gt;
** [[Digitrakker sample]] (.spl)&lt;br /&gt;
* [[DigiTrekker module]] (.dtm)&lt;br /&gt;
* [[Digital Tracker module]] (.dtm)&lt;br /&gt;
* [[DisorderTracker 2 module]] (.plm)&lt;br /&gt;
* [[Dual Module Player DSMI]] (.amf)&lt;br /&gt;
* [[Eureka Packer module]] (.eu)&lt;br /&gt;
* [[Extended MOD]] (.emd)&lt;br /&gt;
* [[Extreme's Tracker module]] (.ams)&lt;br /&gt;
* [[FAC Soundtracker]] (MSX, extension unknown)&lt;br /&gt;
* [[Face The Music module]] (.ftm)&lt;br /&gt;
* Famitracker&lt;br /&gt;
** [[FamiTracker module]] (.ftm)&lt;br /&gt;
** [[FamiTracker instrument]] (.fti)&lt;br /&gt;
* Farandole Composer&lt;br /&gt;
** [[Farandole Form 2.0]] (.f2r)&lt;br /&gt;
** [[Farandole Composer module]] (.far)&lt;br /&gt;
** [[Farandole Composer pattern]] (.fpt)&lt;br /&gt;
** [[Farandole Composer sample]] (.fsm, .usm)&lt;br /&gt;
* [[Fashion Tracker module]] (.ex)&lt;br /&gt;
* FastTracker / FastTracker 2&lt;br /&gt;
** [[FastTracker module]] (.ft, .ftc)&lt;br /&gt;
** [[Extended instrument]] (.xi)&lt;br /&gt;
** [[Extended Module]] (.xm)&lt;br /&gt;
* [[FC-M Packer module]] (.fcm)&lt;br /&gt;
* [[Flash Tracker module]] (.fls)&lt;br /&gt;
* [[Flex Tracker module]] (.flx)&lt;br /&gt;
* [[Fuchs Tracker]] (.fchs)&lt;br /&gt;
* [[FunkTracker module]] (.fnk)&lt;br /&gt;
* Future Composer&lt;br /&gt;
** [[Future Composer v1.x module]] (.fc)&lt;br /&gt;
** [[Future Composer v1.3 module]] (.fc13)&lt;br /&gt;
** [[Future Composer v1.4 module]] (.fc14)&lt;br /&gt;
* Future Composer (BSI)&lt;br /&gt;
** [[Future Composer (BSI) module]]&lt;br /&gt;
* [[Fuzzac Packer module]] (.fuzz)&lt;br /&gt;
* [[General Digital Music module]] (.gdm)&lt;br /&gt;
* [[GoatTracker module]] (.sng)&lt;br /&gt;
* [[Grave Composer module]] (.wow)&lt;br /&gt;
* Graoumf Tracker&lt;br /&gt;
** [[Graoumf Tracker module]] (.gtk)&lt;br /&gt;
** [[Graoumf Tracker 2 module]] (.gt2)&lt;br /&gt;
* [[Global Tracker v1.x module]] (.gtr)&lt;br /&gt;
* [[HeatSeeker Module Cruncher v1.0]] (.crb)&lt;br /&gt;
* [[Hively Tracker module]] (.hvl)&lt;br /&gt;
* [[Ice Tracker module]]&lt;br /&gt;
* [[Imago Orpheus module]] (.imf)&lt;br /&gt;
* Impulse Tracker&lt;br /&gt;
** [[Impulse Tracker module]] (.it, .itbz, .itgz, .itr, .itz)&lt;br /&gt;
** [[Impulse Tracker sample]] (.its)&lt;br /&gt;
* [[JAMCracker Pro module]] (.jam)&lt;br /&gt;
* jacker-tracker&lt;br /&gt;
** [[Jacker song]]&lt;br /&gt;
* klystrack&lt;br /&gt;
** [[klystrack instrument]] (.ki)&lt;br /&gt;
** [[klystrack module]] (.kt)&lt;br /&gt;
* [[KRIS Packer / ChipTracker module]] (.kris)&lt;br /&gt;
* Liquid Tracker&lt;br /&gt;
** [[Liquid Digitized Sample]] (.lds)&lt;br /&gt;
** [[Liquid Tracker module]] (.liq)&lt;br /&gt;
* MadTracker 2&lt;br /&gt;
** [[MadTracker 2 envelope]] (.mte)&lt;br /&gt;
** [[MadTracker 2 extension]] (.mtx)&lt;br /&gt;
** [[MadTracker 2 instrument]] (.mti)&lt;br /&gt;
** [[MadTracker 2 module]] (.mt2)&lt;br /&gt;
** [[MadTracker 2 pattern]] (.mtp)&lt;br /&gt;
** [[MadTracker 2 sample]] (.mts)&lt;br /&gt;
* maxYMiser&lt;br /&gt;
** [[maxYMiser instrument]] (.myi)&lt;br /&gt;
** [[maxYMiser module]] (.snd)&lt;br /&gt;
* [[Megatracker module]] (.mgt)&lt;br /&gt;
* [[MO3]] (MP3 / Vorbis compressed module)&lt;br /&gt;
* [[MOD Edit sample]] (.sam)&lt;br /&gt;
* [[Module Protector + noID]] (.mp)&lt;br /&gt;
* Microdeal Quartet&lt;br /&gt;
** [[4V]]&lt;br /&gt;
* [[MONOTONE]] (.mon, .pit, .frq)&lt;br /&gt;
* Moonblaster (MSX)&lt;br /&gt;
** [[Moonblaster music]] (.mbm)&lt;br /&gt;
** [[Moonblaster sample kit]] (.mbk)&lt;br /&gt;
* [[Multi Track Module]] (.mtm)&lt;br /&gt;
* Muse Tracker / Pornotracker&lt;br /&gt;
** [[Musetracker / Pornotracker instrument]] (.poi)&lt;br /&gt;
** [[Musetracker / Pornotracker module]] (.pom)&lt;br /&gt;
* Music Pro Tracker&lt;br /&gt;
** [[Music Pro Tracker DoublePlay]] (.mpd)&lt;br /&gt;
** [[Music Pro Tracker module (MD1)]] (.md1)&lt;br /&gt;
** [[Music Pro Tracker module (MD2)]] (.md2)&lt;br /&gt;
** [[Music Pro Tracker module (MPT)]] (.mpt)&lt;br /&gt;
* [[The Music Studio|Music Studio, The]] (Activision / Audio Light) (.sng, .song, .mss, .snd, .sound)&lt;br /&gt;
* [[Nerdtracker II module]] (.ned)&lt;br /&gt;
* [[NesTracker module]] (.nest)&lt;br /&gt;
* NoisePacker&lt;br /&gt;
** [[NoisePacker 2.x]] (.np2)&lt;br /&gt;
** [[NoisePacker 3.x]] (.np3)&lt;br /&gt;
* [[NoiseTracker module]] (.mod)&lt;br /&gt;
* [[Noisetrekker module]] (.ntk)&lt;br /&gt;
* OctaMED&lt;br /&gt;
** [[OctaMED module (MED)]] (.med)&lt;br /&gt;
** [[OctaMED module (MMD1)]] (.mmd1)&lt;br /&gt;
** [[OctaMED v2.00 module]] (.med3)&lt;br /&gt;
** [[OctaMED v2.10 module (MED4)]] (.med4)&lt;br /&gt;
** [[OctaMED v2.10 module (MMD0)]] (.mmd0)&lt;br /&gt;
** [[OctaMED v5 module]] (.mmd2)&lt;br /&gt;
** [[OctaMED SS module]] (.mmd3)&lt;br /&gt;
** [[MED Packer]] (.mmdc)&lt;br /&gt;
* Oktalyzer&lt;br /&gt;
** [[Oktalyzer module]] (.okt, .okta)&lt;br /&gt;
* [[Onyx Music File]] (.omf)&lt;br /&gt;
* [[Open MODPlug Tracker module]] (.mptm)&lt;br /&gt;
* [[Oracle module]] (.orc)&lt;br /&gt;
* [[Pha Packer]] (.pha)&lt;br /&gt;
* PlayerPRO&lt;br /&gt;
** [[Extended PlayerPRO module]] (.madx)&lt;br /&gt;
** [[PlayerPRO module]] (.mad)&lt;br /&gt;
* [[Polly Tracker module]]&lt;br /&gt;
* [[Poly Tracker module]] (.ptm)&lt;br /&gt;
* [[Polytone]] (.pol)&lt;br /&gt;
* [[Pro Sound Creator v1.xx]] (.psc, ZX Spectrum)&lt;br /&gt;
* [[Pro Sound Maker]] (.psm)&lt;br /&gt;
* Pro Tracker&lt;br /&gt;
** [[Pro Tracker v1.xx module]] (.pt1)&lt;br /&gt;
** [[Pro Tracker v2.xx module]] (.pt2)&lt;br /&gt;
** [[Pro Tracker v3.xx module]] (.pt3) &lt;br /&gt;
* [[Pro Tracker (MSX)]] (MSX-Music, extension unknown)&lt;br /&gt;
* [[Pumatracker module]] (.puma)&lt;br /&gt;
* [[Quadra Composer module]] (.emod)&lt;br /&gt;
* [[RASTER Music Tracker module]] (.rmt)&lt;br /&gt;
* Real Tracker&lt;br /&gt;
** [[Real Tracker instrument]] (.rti)&lt;br /&gt;
** [[Real Tracker module]] (.rtm)&lt;br /&gt;
** [[Real Tracker sample]] (.rts)&lt;br /&gt;
* [[Renoise]]&lt;br /&gt;
** [[Renoise|Renoise song (XRNS)]] (.xrns)&lt;br /&gt;
** [[Renoise|Renoise instrument (XRNS)]] (.xrni)&lt;br /&gt;
** [[Renoise|Renoise effect chain (XRNT)]] (.xrnt)&lt;br /&gt;
** [[Renoise Song (NTK)]] (.ntk)&lt;br /&gt;
** [[Renoise Song (PTK)]] (.ptk)&lt;br /&gt;
** [[Renoise Song (RNS)]] (.rns)&lt;br /&gt;
* [[SBStudio module]] (.pac, .son, .sou)&lt;br /&gt;
* SCC Blaffer NT&lt;br /&gt;
** [[SCC Blaffer NT music]] (.sbm, MSX)&lt;br /&gt;
** [[SCC Blaffer NT instrument kit]] (.sbk)&lt;br /&gt;
* Scream Tracker&lt;br /&gt;
** [[Scream Tracker Music Interface Kit module]]&lt;br /&gt;
** [[Scream Tracker 1 &amp;amp; 2 module]] (.stm)&lt;br /&gt;
** [[Scream Tracker 3 Adlib module]] (.as3m)&lt;br /&gt;
** [[Scream Tracker 3 module]] (.s3m)&lt;br /&gt;
** [[Scream Tracker 3 / DigiTracker sample]] (.s31)&lt;br /&gt;
** [[Scream Tracker 3 / DigiTracker sample]] (.smp)&lt;br /&gt;
* [[SMUS]]&lt;br /&gt;
* [[SoundFX module]] (.sfx, .sfx2)&lt;br /&gt;
* Sound Tracker&lt;br /&gt;
** [[Soundtracker v2.6 / Ice Tracker module]] (.mtn)&lt;br /&gt;
** [[SoundTracker v2.6 module]] (.st26)&lt;br /&gt;
** [[Sound Tracker / Super Sonic module]] (.stc)&lt;br /&gt;
** [[Sound Tracker Pro module]] (.stp)&lt;br /&gt;
* [[SoundSmith module]] (.mtp)&lt;br /&gt;
* Soundtrakker&lt;br /&gt;
** [[Soundtrakker 128 instrument]] (.ins)&lt;br /&gt;
** [[Soundtrakker 128 module]] (.128)&lt;br /&gt;
** [[Soundtrakker v1.x instrument]] (.ins)&lt;br /&gt;
** [[Soundtrakker v1.x module]] (.sng)&lt;br /&gt;
* [[SQ-Tracker module]] (.sqt)&lt;br /&gt;
* [[Starkos Tracker module]] (.sks)&lt;br /&gt;
* [[StarTrekker / Star Tracker module]] (.mod, .nt, .flt4)&lt;br /&gt;
* [[SunVox module]] (.sunvox)&lt;br /&gt;
* TFMX&lt;br /&gt;
** [[TFMX pattern data]] (.mdat)&lt;br /&gt;
** [[TFMX 7V pattern data]] (.mdat)&lt;br /&gt;
** [[TFMX Pro pattern data]] (.mdat)&lt;br /&gt;
** [[TFMX sample data]] (.smpl)&lt;br /&gt;
* Theta Music Composer&lt;br /&gt;
** [[Theta Music Composer 8-channel stereo module]] (.tm8)&lt;br /&gt;
** [[Theta Music Composer v1.x module]] (.tmc)&lt;br /&gt;
** [[Theta Music Composer v2.x module]] (.tm2)&lt;br /&gt;
* [[Trackerpacker 3 module]] (.tp3)&lt;br /&gt;
* [[Unic Tracker 1.0]] (.unic1)&lt;br /&gt;
* [[Unic Tracker 2.0]] (.unic2)&lt;br /&gt;
* [[Ultra Tracker]] (.ult)&lt;br /&gt;
* [[Velvet_Studio]] (.ams)&lt;br /&gt;
* [[VIC-TRACKER module]] (.vt)&lt;br /&gt;
* [[Vortex Tracker module]] (.vtx)&lt;br /&gt;
* X-Tracker&lt;br /&gt;
** [[D-Lusion Music File]] (.dmf)&lt;br /&gt;
** [[D-Lusion Sound File]] (.dms)&lt;br /&gt;
&lt;br /&gt;
== Musical instrument control ==&lt;br /&gt;
&lt;br /&gt;
* [[ELECTONE]] - For Yamaha Electone Range Electronic Organs&lt;br /&gt;
** [[BOO]] - Part of the [[ELECTONE]] format. &lt;br /&gt;
** [[EVT]] - Part of the [[ELECTONE]] format.&lt;br /&gt;
* MIDI &amp;amp; Clones&lt;br /&gt;
** [[Compact MIDI]]&lt;br /&gt;
** [[GMD]] ([[MIDI]] clone)&lt;br /&gt;
** [[Gravis Ultrasound patch]] (used by MIDI synthesizers)&lt;br /&gt;
** [[HMI]] ([[MIDI]] clone)&lt;br /&gt;
** [[HMP]] ([[MIDI]] clone)&lt;br /&gt;
** [[HMZ]] (Compressed [[MIDI]])&lt;br /&gt;
** [[KAR]] ([[MIDI]] Audio)&lt;br /&gt;
** [[MIDI]] (Musical Instrument Digital Interface)&lt;br /&gt;
*** [[MIDI Instrument Definition File]]&lt;br /&gt;
** [[MIDS]] ([[MIDI]] clone)&lt;br /&gt;
** [[MIZ]] (Compressed [[MIDI]])&lt;br /&gt;
** [[MSS (MIDI)|MSS]] ([[MIDI]] Clone)&lt;br /&gt;
** [[RIFF MIDI]]&lt;br /&gt;
** [[RIFF MIDS]]&lt;br /&gt;
** [[Sample Vision]] (.smp)&lt;br /&gt;
** [[Scalable Polyphony MIDI]]&lt;br /&gt;
** [[SFARK]] (SoundFont archive compressed file)&lt;br /&gt;
** [[SoundFont 1.0]] (.sbk)&lt;br /&gt;
** [[SoundFont 2.0]] (.sf2)&lt;br /&gt;
** [[Synthetic Music Application Format]]&lt;br /&gt;
** [[XMI (Extended MIDI)]]&lt;br /&gt;
** [[ZIPI]] (proposed MIDI replacement)&lt;br /&gt;
* Hardware specific&lt;br /&gt;
** AdLib Sound Cards&lt;br /&gt;
*** [[AdLib instrument]] (.ins)&lt;br /&gt;
*** [[AdLib instrument bank]] (.bnk)&lt;br /&gt;
*** [[AdLib MSCplay]] (.msc)&lt;br /&gt;
*** [[AdLib music]] (.mus)&lt;br /&gt;
*** Adlib Tracker&lt;br /&gt;
**** [[Adlib Tracker instrument]] (.ins)&lt;br /&gt;
**** [[Adlib Tracker module]] (.sng)&lt;br /&gt;
**** [[Adlib Tracker II instrument]] (.a2i)&lt;br /&gt;
**** [[Adlib Tracker II instrument|Adlib Tracker II instrument with fm-register macro]] (.a2f)&lt;br /&gt;
**** [[Adlib Tracker II instrument bank]] (.a2b)&lt;br /&gt;
**** [[Adlib Tracker II instrument bank|Adlib Tracker II instrument bank with macros]] (.a2w)&lt;br /&gt;
**** [[Adlib Tracker II module]] (.a2m)&lt;br /&gt;
**** [[Adlib Tracker II pattern]] (.a2p)&lt;br /&gt;
**** [[Adlib Tracker II module|Adlib Tracker II tiny module]] (.a2t)&lt;br /&gt;
*** [[AdLib Visual Composer / Roland Synthesizer song]] (.rol)&lt;br /&gt;
*** AMusic&lt;br /&gt;
**** [[AMusic module]] (.amd)&lt;br /&gt;
**** [[AMusic XMS]] (.xms)&lt;br /&gt;
*** [[Beni Tracker module]] (.pis)&lt;br /&gt;
*** [[Bob's Adlib Music]] (.bam)&lt;br /&gt;
*** Boom Tracker v4.0&lt;br /&gt;
**** [[Boom Tracker v4.0 instrument]] (.cif)&lt;br /&gt;
**** [[Boom Tracker v4.0 module]] (.cff)&lt;br /&gt;
*** [[DeFy Adlib Tracker module]] (.dtm)&lt;br /&gt;
*** [[Digital FM module]] (.dfm)&lt;br /&gt;
*** [[Drum Traker module]] (.dtl)&lt;br /&gt;
*** [[EdLib packed module]] (.d00)&lt;br /&gt;
*** [[Exotic AdLib module]] (.xad)&lt;br /&gt;
*** [[Extra Simple Music]] (.xsm)&lt;br /&gt;
*** [[Faust Music Creator module]] (.sng)&lt;br /&gt;
*** [[FM Tracker module]] (.fmt)&lt;br /&gt;
*** FM-Kingtracker&lt;br /&gt;
**** [[FM-Kingtracker bank]] (.fib)&lt;br /&gt;
**** [[FM-Kingtracker instrument]] (.fin)&lt;br /&gt;
**** [[FM-Kingtracker module]] (.fmk)&lt;br /&gt;
*** HSC AdLib Composer / HSC-Tracker&lt;br /&gt;
**** [[HSC AdLib Composer / HSC-Tracker module]] (.hsc)&lt;br /&gt;
**** [[HSC AdLib Composer / HSC-Tracker packed module]] (.hsp)&lt;br /&gt;
*** [[JBM Adlib Music]] (.jbl)&lt;br /&gt;
*** JCH&lt;br /&gt;
**** [[JCH-D00]] (.d00)&lt;br /&gt;
**** [[JCH-D01]] (.d01)&lt;br /&gt;
*** [[Johannes Bjerregård module]] (.jbm)&lt;br /&gt;
*** [[Master Tracker module]] (.mtr)&lt;br /&gt;
*** [[MK-Jamz audio]] (.mkj)&lt;br /&gt;
*** [[Mlat Adlib Tracker module]] (.mad)&lt;br /&gt;
*** [[MPU-401 Trakker module]] (.mtk)&lt;br /&gt;
*** [[Palladix module]] (.plx)&lt;br /&gt;
*** [[RAW (Adlib)|RAW]] (AdLib Sound Card)&lt;br /&gt;
*** [[Reality AdLib Tracker module]] (.rad)&lt;br /&gt;
*** [[SNG Player module]] (.sng)&lt;br /&gt;
*** Surprise! Adlib Tracker&lt;br /&gt;
**** [[Surprise! AdLib Tracker v1, 5, 6 module]] (.sat)&lt;br /&gt;
**** [[Surprise! Adlib Tracker v2.0]] (.sa2)&lt;br /&gt;
*** [[Twin TrackPlayer module]] (.dmo)&lt;br /&gt;
*** [[Vibrants module]] (.vib)&lt;br /&gt;
*** [[XMS-Tracker module]] (.xms)&lt;br /&gt;
** Akai&lt;br /&gt;
*** [[Akai S-series MESA multi file]] (.mlt)&lt;br /&gt;
*** [[Akai S-series MESA I program]] (.prg)&lt;br /&gt;
*** [[Akai S-series MESA II program]] (.s3p)&lt;br /&gt;
** [[Codisk Audio File]]&lt;br /&gt;
** Creative Labs&lt;br /&gt;
*** [[Creative Music Format]] (.cmf)&lt;br /&gt;
*** [[Creative Voice File]]&lt;br /&gt;
*** [[Sound Blaster Instrument]] (.sbi)&lt;br /&gt;
** [[Disney Sound Source]]&lt;br /&gt;
** [[DOSBox Raw OPL]] (.dro)&lt;br /&gt;
** [[Downloadable Sounds Banks]] (.dls)&lt;br /&gt;
** [[Ensoniq Concert Wavetable]] (.ecw)&lt;br /&gt;
** Gravis Ultrasound&lt;br /&gt;
*** [[UltraSound GF1 patch]] (.pat)&lt;br /&gt;
** [[Instrument Bank]] (Instrument Bank)&lt;br /&gt;
** [[Software Music Synthesis System]] (for 8080/Z-80 systems with S-100 bus)&lt;br /&gt;
** [[TRS-80 Orchestra-90]] (.orc)&lt;br /&gt;
** [[Voice Sequence]] (.vsq)&lt;br /&gt;
** Yamaha sound chips&lt;br /&gt;
*** [[Callus OPL Register Log]] (YM2151, .cym)&lt;br /&gt;
*** [[GYM]] (YM2612 / Sega Genesis)&lt;br /&gt;
* Software Synthesizers&lt;br /&gt;
** [[Farbrausch BR404 music]] (.bmf)&lt;br /&gt;
** [[iZotope iDrum]] (.idrum)&lt;br /&gt;
** Native Instruments&lt;br /&gt;
*** [[Native Instruments Reaktor ensemble]] (.ens)&lt;br /&gt;
** Steinberg VST Presets&lt;br /&gt;
*** [[FXB]] (Bank of presets)&lt;br /&gt;
*** [[FXP]] (single preset)&lt;br /&gt;
* [[E-Seq]] Yamaha (.fil, .esq)&lt;br /&gt;
&lt;br /&gt;
== Musical notation ==&lt;br /&gt;
&lt;br /&gt;
* [[Drum tablature]]&lt;br /&gt;
* [[Guitar tablatures]]&lt;br /&gt;
** [[ASCII tab]] (.tab, .btab, .txt)&lt;br /&gt;
** [[Guitar Pro]] (.gtp)&lt;br /&gt;
*** [[Guitar Pro 3]] (.gp3)&lt;br /&gt;
*** [[Guitar Pro 4]] (.gp4)&lt;br /&gt;
*** [[Guitar Pro 5]] (.gp5)&lt;br /&gt;
*** [[Guitar Pro 6]] (.gp6)&lt;br /&gt;
** [[KGuitar]] (.kg)&lt;br /&gt;
** [[Power Tab]] (.ptb)&lt;br /&gt;
** [[Progression]]&lt;br /&gt;
** [[Rich MIDI Tablature Format]] (.rmtf)&lt;br /&gt;
** [[TablEdit]] (.tef)&lt;br /&gt;
** [[VexTab]]&lt;br /&gt;
&lt;br /&gt;
* [[Musical notation]]&lt;br /&gt;
** [[ABC (musical notation)]]&lt;br /&gt;
** [[ANSI Music]]&lt;br /&gt;
** Capella&lt;br /&gt;
*** [[CAP]]&lt;br /&gt;
*** [[CapXML]] (.capx)&lt;br /&gt;
** [[ChordML]]&lt;br /&gt;
** [[ConcertWare]]&lt;br /&gt;
** Copyist&lt;br /&gt;
*** [[CP4]]&lt;br /&gt;
*** [[CP6]]&lt;br /&gt;
** [[Encore]] (.enc)&lt;br /&gt;
** [[Extended Notation Format]] (.enf)&lt;br /&gt;
** [[Extensible Music Notation Markup Language]]&lt;br /&gt;
** [[Finale]] (.etf, .mus, .musx)&lt;br /&gt;
** [[Forte]] (.fnf)&lt;br /&gt;
** Guido&lt;br /&gt;
*** [[GUIDO]]&lt;br /&gt;
*** [[GUIDO XML]]&lt;br /&gt;
** JMSL&lt;br /&gt;
*** [[JMSL]]&lt;br /&gt;
*** [[JMSL Score]]&lt;br /&gt;
** [[JScoreML]]&lt;br /&gt;
** [[LilyPond]]&lt;br /&gt;
** [[MEI]]&lt;br /&gt;
** [[MHTML]]&lt;br /&gt;
** [[MidiXML]]&lt;br /&gt;
** [[minimusic]]&lt;br /&gt;
** [[MPEG4-SMR]]&lt;br /&gt;
** [[Mup]]&lt;br /&gt;
** [[MuseScore]]&lt;br /&gt;
*** [[MSC]] -(old file format)&lt;br /&gt;
*** [[MSCX]] - [[XML file format]]&lt;br /&gt;
*** [[MSCZ]] - [[GZIP]] compressed [[MSCX]]&lt;br /&gt;
** [[Music Description Language]]&lt;br /&gt;
** [[Music Markup Language]]&lt;br /&gt;
** [[Music Time]] (.mus)&lt;br /&gt;
** [[Music Time Pro]] (.mts)&lt;br /&gt;
** [[Musical Notation Markup Language]]&lt;br /&gt;
** [[MusicML]]&lt;br /&gt;
** [[MusicWrite]] (.mwk)&lt;br /&gt;
** [[MusicXML]]&lt;br /&gt;
** [[MusicXML compressed]] (.mxl)&lt;br /&gt;
** [[Musink]] (.musink)&lt;br /&gt;
** [[MusiqueXML]]&lt;br /&gt;
** [[MusiXML]]&lt;br /&gt;
** [[Myriad Software]] (.msf)&lt;br /&gt;
** [[NeumesXML]]&lt;br /&gt;
** [[Neuratron Photoscore Format]] (.opt)&lt;br /&gt;
** [[Notation Interchange File Format]]&lt;br /&gt;
** [[NoteAbility Pro]]&lt;br /&gt;
** [[Noteworthy Composer and Music Publisher]] (.nwc)&lt;br /&gt;
** [[NoteWriter]]&lt;br /&gt;
** [[Notion]]&lt;br /&gt;
** [[NtEd]]&lt;br /&gt;
** [[Overture]] (.ove)&lt;br /&gt;
** [[PriMus]]&lt;br /&gt;
** [[Rhapsody Notation Program File]] (.rhp)&lt;br /&gt;
** [[Rhapsody 2/3]] (RISC OS.  Unrelated to the above &amp;quot;Rhapsody Notation Program File&amp;quot;)&lt;br /&gt;
** [[Rhapsody 4]] (RISC OS, .c00)&lt;br /&gt;
** [[Rosegarden]] (.rg)&lt;br /&gt;
** [[QuickScore Elite]] (.qsd)&lt;br /&gt;
** [[SCORE]] (.mus)&lt;br /&gt;
** [[Score Perfect]] (.spp)&lt;br /&gt;
** [[ScoreML]]&lt;br /&gt;
** [[ScoreWriter]] (.scw)&lt;br /&gt;
** [[Sibelius]]&lt;br /&gt;
** [[SMDL]]&lt;br /&gt;
** [[SongWrite]]&lt;br /&gt;
** [[Studio Session Song]] (.sss)&lt;br /&gt;
** [[Theta]]&lt;br /&gt;
** [[Tilia]]&lt;br /&gt;
** [[VexTab]]&lt;br /&gt;
** [[Virtual Musician Markup Language]]&lt;br /&gt;
** [[WEDELMUSIC]]&lt;br /&gt;
** [[XMF]]&lt;br /&gt;
** [[XMusic]]&lt;br /&gt;
** [[XScore]] (eXtensible Score Language)&lt;br /&gt;
&lt;br /&gt;
== Playlists, music libraries, music store downloaders ==&lt;br /&gt;
&lt;br /&gt;
* [[Amazon downloader file]] (.amz)&lt;br /&gt;
* [[B4S]] (Winamp 3 playlist)&lt;br /&gt;
* [[FPL]] (foobar2000 playlist)&lt;br /&gt;
* [[iTunes Music Library]]&lt;br /&gt;
* [[Kapsule]] (Kazaa XML Manifest)&lt;br /&gt;
* [[KPL]] (Kazaa Playlist Format)&lt;br /&gt;
* [[M3U]] (Multimedia Playlist Format)&lt;br /&gt;
* [[MAGMA]] ([[Magnet URI]])&lt;br /&gt;
* [[MOD4WIN Module List]] (.mol)&lt;br /&gt;
* [[MusicBee Library]] (.mbl)&lt;br /&gt;
* [[PLS]] (Multimedia Playlist)&lt;br /&gt;
* [[RAM (RealAudio)]]&lt;br /&gt;
* [[SMIL]] (W3C open standard)&lt;br /&gt;
* [[Windows Media Metafile]] (.asx, .wax, .wxv)&lt;br /&gt;
* [[Windows Media Playlist]] (.wpl)&lt;br /&gt;
* [[XML Sharable Playlist]]&lt;br /&gt;
&lt;br /&gt;
== Programming languages and APIs (audio/music-specific) ==&lt;br /&gt;
&lt;br /&gt;
* [[ChucK]] (.ck)&lt;br /&gt;
* [[Csound]] (.csd, .orc, .sco)&lt;br /&gt;
* Cycling 74 [[Max]] (.maxpat, .max)&lt;br /&gt;
* [[FAUST]] (.dsp)&lt;br /&gt;
* [[Music Macro Language]]&lt;br /&gt;
* Native Instruments [[Reaktor]] (.rkplr)&lt;br /&gt;
* [[Pure Data]] (.pd)&lt;br /&gt;
* [[Scala (music software)]] (.kbm, .scl, .cmd)&lt;br /&gt;
* [[SuperCollider]] (.scd, .sc)&lt;br /&gt;
* [[WaveGL]]&lt;br /&gt;
* [[Web Audio API]]&lt;br /&gt;
&lt;br /&gt;
== Ringtones ==&lt;br /&gt;
&lt;br /&gt;
* [[i Melody]]&lt;br /&gt;
* [[M4R]] (Apple iPhone Ringtones - see [[M4A]])&lt;br /&gt;
* [[Polyphonic ringtone]]&lt;br /&gt;
* [[RTTTL]]&lt;br /&gt;
&lt;br /&gt;
== Signal processing ==&lt;br /&gt;
&lt;br /&gt;
These aren't specific file formats, but generic mathematical methods used by other file formats.&lt;br /&gt;
&lt;br /&gt;
* [[A-law]]&lt;br /&gt;
* [[ADPCM]]&lt;br /&gt;
* [[DPCM]]&lt;br /&gt;
* [[LPCM]]&lt;br /&gt;
* [[Pulse code modulation]]&lt;br /&gt;
* [[µ-law]] (u-law)&lt;br /&gt;
&lt;br /&gt;
== Sound card related formats ==&lt;br /&gt;
&lt;br /&gt;
* [[CMS (Creative Music System)]]&lt;br /&gt;
&lt;br /&gt;
== Speech synthesis ==&lt;br /&gt;
&lt;br /&gt;
* [[Speech Synthesis Markup Language]] (SSML)&lt;br /&gt;
* [[TextGrid]]&lt;br /&gt;
* [[VoiceDescription]] (OS X)&lt;br /&gt;
&lt;br /&gt;
== Unclassified (need to move to other categories) ==&lt;br /&gt;
&lt;br /&gt;
* [[ACM]] (Audio Compression Manager)&lt;br /&gt;
* [[ADM]] (ADM Audio File)&lt;br /&gt;
* [[Audfprint fingerprint file]] (.afpk)&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
* [[B1S]]&lt;br /&gt;
* [[BDSP]] (BotDetect Sound Package)&lt;br /&gt;
* [[BVG]]&lt;br /&gt;
* [[CBD2]]&lt;br /&gt;
* CLF&lt;br /&gt;
** [[Common Loudspeaker Format]]&lt;br /&gt;
** [[Common Instrument Format]]&lt;br /&gt;
* [[DeskMate Music]] (.sng)&lt;br /&gt;
* [[DeskMate Sound]] (.snd)&lt;br /&gt;
* [[DSM]] (DSIK Internal)&lt;br /&gt;
* [[DSPW]]&lt;br /&gt;
* [[DTK]]&lt;br /&gt;
* [[EUPHONY]] (FM Towns computer system)&lt;br /&gt;
* [[FFW]]&lt;br /&gt;
* [[First Rate Music Hall]] (.pck, MSX-Music song editor using [[Music Macro Language]])&lt;br /&gt;
* [[GBTS]]&lt;br /&gt;
* [[GCUB]]&lt;br /&gt;
* [[GSB]]&lt;br /&gt;
* [[HLWAV]]&lt;br /&gt;
* [[IAB]]&lt;br /&gt;
* [[IADP]]&lt;br /&gt;
* [[INT]] (RAW File)&lt;br /&gt;
* [[ISWS]]&lt;br /&gt;
* [[JSTM]]&lt;br /&gt;
* [[KOVS]]&lt;br /&gt;
* [[MA]] (Music Assembler)&lt;br /&gt;
* [[MNSTR]]&lt;br /&gt;
* [[MSF]]&lt;br /&gt;
* [[MTAF]]&lt;br /&gt;
* [[S98]] (NEC PC-98)&lt;br /&gt;
* [[SD]] (ESPS sampled data file)&lt;br /&gt;
* [[SGI (Sound Generator)|SGI]] (Sound Generator 3.0 instrument)&lt;br /&gt;
* [[SNG (SCC Musixx)|SNG]] (SCC Musixx)&lt;br /&gt;
* [[Sound Effect Editor]] (.see, MSX)&lt;br /&gt;
* [[SoundHelix XML]]&lt;br /&gt;
* [[TFMX]] (TFMX)&lt;br /&gt;
* [[Vivaldi]] (RISC OS)&lt;br /&gt;
* [[Zsound Music]]&lt;br /&gt;
&lt;br /&gt;
See the Open Cubic Player homepage for a list of demo formats: http://www.cubic.org/player/features.html&lt;br /&gt;
&lt;br /&gt;
See also [[Piano Rolls]] (which is under the [[Physical File Formats]]).&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://boingboing.net/2013/09/20/kickstarting-free-open-record.html Kickstarting free, open recordings of Bach's &amp;quot;Well-Tempered Clavier, Book 1&amp;quot;]&lt;br /&gt;
* [http://mpc-hc.org/ MPC-HC: media player for Windows handling just about all video/audio formats]&lt;br /&gt;
* [http://boingboing.net/2013/09/27/david-byrnes-how-music-wor.html How Music Works]&lt;br /&gt;
* [http://www.textfiles.com/programming/FORMATS/admusfmt.pro Some discussion of &amp;quot;advanced music formats&amp;quot; from 1994]&lt;br /&gt;
* [http://www.textfiles.com/programming/FORMATS/audiof23.txt FAQ on audio file formats (1992-07-09)]&lt;br /&gt;
* [http://boingboing.net/2013/11/03/this-must-be-the-8-bit-place.html Chiptune version of Talking Heads song]&lt;br /&gt;
* [http://www.youtube.com/watch?v=3Z2vU8M6CYI Beatles 3000: humorous video of how the future might misunderstand 20th century pop culture if artifacts decay as happened in the past]&lt;br /&gt;
* [http://publicdomainreview.tumblr.com/post/76437123224/chaoscontrolled123-luke-and-i-were-looking-at The Music Written on This Dude's Butt]&lt;br /&gt;
* [http://vimeo.com/58200103 &amp;quot;Eye of the tiger&amp;quot; played on a modified dot matrix printer]&lt;br /&gt;
* [http://chipflip.wordpress.com/2014/03/09/a-short-history-of-hardcore-chipmusic/ A Short History of Hardcore Chipmusic]&lt;br /&gt;
* [https://medium.com/message/you-need-to-hear-this-extremely-rare-recording-27619411e077 You Need to Hear This Extremely Rare Recording]&lt;br /&gt;
* [http://www.loc.gov/preservation/resources/rfs/audio.html Library of Congress Recommended Format Specifications: Audio Works]&lt;br /&gt;
* [http://betaboston.com/news/2014/07/17/in-a-bid-for-more-emotional-snacking-frito-lay-patents-culinary-theme-songs/ In a bid for more emotional snacking, Frito-Lay patents culinary theme songs]&lt;br /&gt;
* [http://www.theverge.com/2014/8/4/5968243/mit-turns-recorded-vibrations-back-into-speech-and-music Scientists reconstruct speech through soundproof glass by watching a bag of potato chips]&lt;br /&gt;
* [http://www.palmbeachpost.com/ap/ap/business/apple-releases-tool-to-remove-free-u2-album/nhNG9/ Apple releases tool to remove free U2 album] (which they gave you whether you wanted it or not)&lt;br /&gt;
* [https://github.com/AyrA/ExcelPlayer Excel sheet that plays video and audio]&lt;br /&gt;
* [http://webaudio.github.io/web-audio-api/ Web Audio API (W3C)]&lt;br /&gt;
* [http://www.wonderingsound.com/feature/why-collecting-music-matters/ Why Collecting Matters: Citizen Archivists and the Battle for Future Pasts]&lt;br /&gt;
* [http://mediaarea.net/en/MediaInfo MediaInfo: software that shows metadata for audio/video files]&lt;br /&gt;
* [http://www.bl.uk/projects/save-our-sounds Save our Sounds]&lt;br /&gt;
* [http://www.davidsystems.com/#tools David Systems tools: includes online loudness analysis of sound files]&lt;br /&gt;
* [http://createdigitalmusic.com/2015/07/next-web-standard-music-notation/ The next Web standard could be music notation]&lt;br /&gt;
* [https://www.youtube.com/watch?v=q_3d1x2VPxk How Oldschool Sound/Music worked] (video)&lt;br /&gt;
* [http://www.crutchfield.com/S-ulligiNLBZf/learn/learningcenter/home/hometheater_surround.html Understanding surround sound formats]&lt;br /&gt;
* [http://www.righto.com/2017/04/reverse-engineering-76477-space.html Reverse engineering the 76477 &amp;quot;Space Invaders&amp;quot; sound effect chip from die photos]&lt;br /&gt;
&lt;br /&gt;
[[Category:Audio and Music| ]]&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/VAG_(PlayStation)</id>
		<title>VAG (PlayStation)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/VAG_(PlayStation)"/>
				<updated>2023-08-29T08:39:31Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|subcat=Audio and Music&lt;br /&gt;
|extensions={{ext|vag}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Resident Evil (1997)]]&lt;br /&gt;
&lt;br /&gt;
'''VAG''' is the PlayStation single waveform data format for [[ADPCM|ADPCM-encoded data]] of sampled sounds.&lt;br /&gt;
&lt;br /&gt;
== Specification ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Variable		&lt;br /&gt;
! Type&lt;br /&gt;
|-&lt;br /&gt;
| Signature&lt;br /&gt;
| {{magic|VAGp}}&lt;br /&gt;
|-&lt;br /&gt;
| Version&lt;br /&gt;
| 4 bytes&lt;br /&gt;
|-&lt;br /&gt;
| Reserved&lt;br /&gt;
| 4 bytes&lt;br /&gt;
|-&lt;br /&gt;
| Data size&lt;br /&gt;
| 4 bytes&lt;br /&gt;
|-&lt;br /&gt;
| Sampling frequency&lt;br /&gt;
| 4 bytes&lt;br /&gt;
|-&lt;br /&gt;
| Name&lt;br /&gt;
| 16 bytes&lt;br /&gt;
|-&lt;br /&gt;
| Waveform data&lt;br /&gt;
| (remainder of data)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/VAG_(PlayStation)</id>
		<title>VAG (PlayStation)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/VAG_(PlayStation)"/>
				<updated>2023-08-29T08:38:15Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: Created page with &amp;quot;'''VAG''' is the PlayStation single waveform data format for ADPCM-encoded data of sampled sounds.  == Specification ==   {| class=&amp;quot;wikitable&amp;quot; ! Variable		 ! Type |-...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''VAG''' is the PlayStation single waveform data format for [[ADPCM|ADPCM-encoded data]] of sampled sounds.&lt;br /&gt;
&lt;br /&gt;
== Specification ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Variable		&lt;br /&gt;
! Type&lt;br /&gt;
|-&lt;br /&gt;
| Signature&lt;br /&gt;
| {{magic|VAGp}}&lt;br /&gt;
|-&lt;br /&gt;
| Version&lt;br /&gt;
| 4 bytes&lt;br /&gt;
|-&lt;br /&gt;
| Reserved&lt;br /&gt;
| 4 bytes&lt;br /&gt;
|-&lt;br /&gt;
| Data size&lt;br /&gt;
| 4 bytes&lt;br /&gt;
|-&lt;br /&gt;
| Sampling frequency&lt;br /&gt;
| 4 bytes&lt;br /&gt;
|-&lt;br /&gt;
| Name&lt;br /&gt;
| 16 bytes&lt;br /&gt;
|-&lt;br /&gt;
| Waveform data&lt;br /&gt;
| (remainder of data)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/VB_(Resident_Evil_1997)</id>
		<title>VB (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/VB_(Resident_Evil_1997)"/>
				<updated>2023-08-29T08:27:30Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|subcat=Game data files&lt;br /&gt;
|extensions={{ext|vb}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Resident Evil (1997)]]&lt;br /&gt;
&lt;br /&gt;
{{Restored|2017-09-10|https://web.archive.org/web/20170910150726/http://rewiki.regengedanken.de/wiki/.VB}}&lt;br /&gt;
&lt;br /&gt;
The '''.VB''' file format is used on the [[:Category:Resident Evil (1997)|PC port of Resident Evil (1997)]] to store audio. These files are PlayStation's [[VAG (PlayStation)|VAG format]] with a different extension.&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/VB_(Resident_Evil_1997)</id>
		<title>VB (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/VB_(Resident_Evil_1997)"/>
				<updated>2023-08-29T08:27:01Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: Created page with &amp;quot;{{FormatInfo |formattype=electronic |subcat=Game data files |extensions={{ext|vb}} }}  Category:Resident Evil (1997)  {{Restored|2017-09-10|https://web.archive.org/web/201...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|subcat=Game data files&lt;br /&gt;
|extensions={{ext|vb}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Resident Evil (1997)]]&lt;br /&gt;
&lt;br /&gt;
{{Restored|2017-09-10|https://web.archive.org/web/20170910150726/http://rewiki.regengedanken.de/wiki/.VB}}&lt;br /&gt;
&lt;br /&gt;
The '''.VB''' file format is used on the [[:Category:Resident Evil (1997)|PC port of Resident Evil (1997)]] to store audio. It is PlayStation's [[VAG (PlayStation)|VAG format]] with a different extension.&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/Template:Restored</id>
		<title>Template:Restored</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/Template:Restored"/>
				<updated>2023-08-29T08:17:31Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;border: 1px solid #BBB; background: #F5F5F5; padding: 8px; display: block; color: #6B6B6B; margin: 0 0 1rem; max-width: 75%;&amp;quot;&amp;gt;This content was first retrieved from the Internet Archive's Wayback Machine for the date {{{1}}} from the following URL: {{{2}}}&amp;lt;/span&amp;gt;&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/Color_format</id>
		<title>Color format</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/Color_format"/>
				<updated>2023-08-29T08:13:37Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''color format''', not to be confused with [[Color profiles]] or [[Graphics|Graphics formats]], describe the way in which data is stored within an image and specifically concerns the way that data is loaded by dedicated graphics hardware. The concept of a '''color format''' has an inconsistent nomenclature, often referred to as ''Pixel'', ''Texture'', ''Image'', or ''Graphics'' formats. In [[Direct3D]], these are known as ''Surface Formats''.&lt;br /&gt;
&lt;br /&gt;
Often, dedicated graphics hardware has a fixed range of supported '''color formats''', chosen to meet both industry needs of those which integrate with the hardware and whatever will offer the best performance or stability on said hardware.&lt;br /&gt;
&lt;br /&gt;
A color format is broken down into the number of bits reserved for each color, and the order of those bits, i.e. ''R8G8B8''. As color formats concern graphics hardware, they often specify the ''red'', ''blue'', ''green'' and ''alpha'' channels. Although, some formats exist for other graphics purposes, such as ''normal maps'' or ''depth maps''. &lt;br /&gt;
&lt;br /&gt;
The more bits which are allocated, the more potential colors can be reproduced with that format. However, this comes at the cost of size. As humans are more sensitive to changes in luminance than colour, and more sensitive to certain wave-lengths of light, some formats specifically under-allocate bits to certain channels as a compromise between visual fidelity and size.&lt;br /&gt;
&lt;br /&gt;
Whilst there is no standardisation of the letters when describing a format, the following are commonly used:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Letter&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| R&lt;br /&gt;
| ''Red''&lt;br /&gt;
|-&lt;br /&gt;
| G&lt;br /&gt;
| ''Green'' (or ''Grey'')&lt;br /&gt;
|-&lt;br /&gt;
| B&lt;br /&gt;
| ''Blue''&lt;br /&gt;
|-&lt;br /&gt;
| A&lt;br /&gt;
| ''Alpha''&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| L&lt;br /&gt;
| ''Luminance''&lt;br /&gt;
|-&lt;br /&gt;
| U, V, W &amp;amp; Q&lt;br /&gt;
| Bump or normal data&lt;br /&gt;
|-&lt;br /&gt;
| P&lt;br /&gt;
| Palette index (i.e. a ''P8'' denotes a palette of 256 colors)&lt;br /&gt;
|-&lt;br /&gt;
| X&lt;br /&gt;
| Padding bits (ignored but kept for alignment)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
The most simplest color format is '''R8G8B8''', signifying that 8-bits (a [[byte]]) are reserved for the ''red'', ''blue'', ''green'' channels, respectively. Totalling 24-bits per pixel. This allows each channel to range between 0-255 values, for a total of over 16 million potential colours.&lt;br /&gt;
&lt;br /&gt;
By comparison, the '''A8B8G8R8''' is similar to above, with an additional 8-bits for alpha information — totalling 32-bits per pixel. Whether the alpha is expected to be ''premultiplied'' or ''straight'' is determined by the hardware.&lt;br /&gt;
&lt;br /&gt;
== R5G6B5 ==&lt;br /&gt;
&lt;br /&gt;
'''R5G6B5''' was a common format for early 3D game consoles. Which allowed 5-bits for ''red'' and ''blue'', and 6-bits for ''green''. The additional ''green'' bits were owed to the human eye's higher-sensitivity to green light.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.khronos.org/opengl/wiki/Image_Format Image formats] on the OpenGL wiki&lt;br /&gt;
* [https://switchbrew.org/wiki/GPU_Texture_Formats GPU Texture formats] on the SwitchBrew wiki&lt;br /&gt;
* [https://learn.microsoft.com/en-us/previous-versions/windows/desktop/bb153344(v=vs.85) Direct3D Surfaces] and [https://learn.microsoft.com/en-us/previous-versions/ms859044(v=msdn.10)?redirectedfrom=MSDN Surface Format] documentation.&lt;br /&gt;
&lt;br /&gt;
[[Category:Elements of File Formats]]&lt;br /&gt;
[[Category:Graphics]]&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/PTC_(Resident_Evil_1997)</id>
		<title>PTC (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/PTC_(Resident_Evil_1997)"/>
				<updated>2023-08-29T08:12:49Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: /* Specification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|subcat=Game data files&lt;br /&gt;
|extensions={{ext|ptc}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Resident Evil (1997)]]&lt;br /&gt;
&lt;br /&gt;
{{Restored|2016-08-17|https://web.archive.org/web/20160817025436/http://rewiki.regengedanken.de/wiki/.PTC}}&lt;br /&gt;
&lt;br /&gt;
The '''.PTC''' file format is used on the [[:Category:Resident Evil (1997)|PC port of Resident Evil (1997)]] to store uncompressed images. &lt;br /&gt;
&lt;br /&gt;
== Specification ==&lt;br /&gt;
&lt;br /&gt;
The format is [[Color format|R8G8B8]] triplets stored sequentially. The dimensions of the picture have to be known in advance. The file has no header.&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/PTC_(Resident_Evil_1997)</id>
		<title>PTC (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/PTC_(Resident_Evil_1997)"/>
				<updated>2023-08-29T08:12:30Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|subcat=Game data files&lt;br /&gt;
|extensions={{ext|ptc}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Resident Evil (1997)]]&lt;br /&gt;
&lt;br /&gt;
{{Restored|2016-08-17|https://web.archive.org/web/20160817025436/http://rewiki.regengedanken.de/wiki/.PTC}}&lt;br /&gt;
&lt;br /&gt;
The '''.PTC''' file format is used on the [[:Category:Resident Evil (1997)|PC port of Resident Evil (1997)]] to store uncompressed images. &lt;br /&gt;
&lt;br /&gt;
== Specification ==&lt;br /&gt;
&lt;br /&gt;
The format is [[Color format|R8B8G8]] triplets stored sequentially. The dimensions of the picture have to be known in advance. The file has no header.&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/PTC_(Resident_Evil_1997)</id>
		<title>PTC (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/PTC_(Resident_Evil_1997)"/>
				<updated>2023-08-29T08:09:54Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: Created page with &amp;quot;{{FormatInfo |formattype=electronic |extensions={{ext|ptc}} }}  {{Restored|2016-08-17|https://web.archive.org/web/20160817025436/http://rewiki.regengedanken.de/wiki/.PTC}}  Th...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|extensions={{ext|ptc}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Restored|2016-08-17|https://web.archive.org/web/20160817025436/http://rewiki.regengedanken.de/wiki/.PTC}}&lt;br /&gt;
&lt;br /&gt;
The '''.PTC''' file format is used on the PC port of Resident Evil (1997) to store uncompressed images. &lt;br /&gt;
&lt;br /&gt;
== Specification ==&lt;br /&gt;
&lt;br /&gt;
The format is R8B8G8 triplets stored sequentially, the dimensions of the picture have to be known in advance. The file has no header.&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/Color_format</id>
		<title>Color format</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/Color_format"/>
				<updated>2023-08-25T17:37:23Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: /* See also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''color format''', not to be confused with [[Color profiles]] or [[Graphics|Graphics formats]], describe the way in which data is stored within an image and specifically concerns the way that data is loaded by dedicated graphics hardware. The concept of a '''color format''' has an inconsistent nomenclature, often referred to as ''Pixel'', ''Texture'', ''Image'', or ''Graphics'' formats. In [[Direct3D]], these are known as ''Surface Formats''.&lt;br /&gt;
&lt;br /&gt;
Often, dedicated graphics hardware has a fixed range of supported '''color formats''', chosen to meet both industry needs of those which integrate with the hardware and whatever will offer the best performance or stability on said hardware.&lt;br /&gt;
&lt;br /&gt;
A color format is broken down into the number of bits reserved for each color, and the order of those bits, i.e. ''R8G8B8''. As color formats concern graphics hardware, they often specify the ''red'', ''blue'', ''green'' and ''alpha'' channels. Although, some formats exist for other graphics purposes, such as ''normal maps'' or ''depth maps''. &lt;br /&gt;
&lt;br /&gt;
The more bits which are allocated, the more potential colors can be reproduced with that format. However, this comes at the cost of size. As humans are more sensitive to changes in luminance than colour, and more sensitive to certain wave-lengths of light, some formats specifically under-allocate bits to certain channels as a compromise between visual fidelity and size.&lt;br /&gt;
&lt;br /&gt;
Whilst there is no standardisation of the letters when describing a format, the following are commonly used:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Letter&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| R&lt;br /&gt;
| ''Red''&lt;br /&gt;
|-&lt;br /&gt;
| G&lt;br /&gt;
| ''Green'' (or ''Grey'')&lt;br /&gt;
|-&lt;br /&gt;
| B&lt;br /&gt;
| ''Blue''&lt;br /&gt;
|-&lt;br /&gt;
| A&lt;br /&gt;
| ''Alpha''&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| L&lt;br /&gt;
| ''Luminance''&lt;br /&gt;
|-&lt;br /&gt;
| U, V, W &amp;amp; Q&lt;br /&gt;
| Bump or normal data&lt;br /&gt;
|-&lt;br /&gt;
| P&lt;br /&gt;
| Palette index (i.e. a ''P8'' denotes a palette of 256 colors)&lt;br /&gt;
|-&lt;br /&gt;
| X&lt;br /&gt;
| Padding bits (ignored but kept for alignment)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
The most simplest color format is '''R8G8B8''', signifying that 8-bits (a [[byte]]) are reserved for the ''red'', ''blue'', ''green'' channels, respectively. Totalling 24-bits per pixel. This allows each channel to range between 0-255 values, for a total of over 16 million potential colours.&lt;br /&gt;
&lt;br /&gt;
By comparison, the '''A8B8G8R8''' is similar to above, with an additional 8-bits for alpha information — totalling 32-bits per pixel. Whether the alpha is expected to be ''premultiplied'' or ''straight'' is determined by the hardware.&lt;br /&gt;
&lt;br /&gt;
== R5G6B5 ==&lt;br /&gt;
&lt;br /&gt;
'''R5G6B5''' was a common format for early 3D game consoles. Which allowed 5-bits for ''red'' and ''blue'', and 6-bits for ''green''. The additional ''green'' bits were owed to the human eye's higher-sensitivity to green light.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.khronos.org/opengl/wiki/Image_Format Image formats] on the OpenGL wiki&lt;br /&gt;
* [https://switchbrew.org/wiki/GPU_Texture_Formats GPU Texture formats] on the SwitchBrew wiki&lt;br /&gt;
* [https://learn.microsoft.com/en-us/previous-versions/windows/desktop/bb153344(v=vs.85) Direct3D Surfaces] and [https://learn.microsoft.com/en-us/previous-versions/ms859044(v=msdn.10)?redirectedfrom=MSDN Surface Format] documentation.&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/Color_format</id>
		<title>Color format</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/Color_format"/>
				<updated>2023-08-25T17:37:06Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''color format''', not to be confused with [[Color profiles]] or [[Graphics|Graphics formats]], describe the way in which data is stored within an image and specifically concerns the way that data is loaded by dedicated graphics hardware. The concept of a '''color format''' has an inconsistent nomenclature, often referred to as ''Pixel'', ''Texture'', ''Image'', or ''Graphics'' formats. In [[Direct3D]], these are known as ''Surface Formats''.&lt;br /&gt;
&lt;br /&gt;
Often, dedicated graphics hardware has a fixed range of supported '''color formats''', chosen to meet both industry needs of those which integrate with the hardware and whatever will offer the best performance or stability on said hardware.&lt;br /&gt;
&lt;br /&gt;
A color format is broken down into the number of bits reserved for each color, and the order of those bits, i.e. ''R8G8B8''. As color formats concern graphics hardware, they often specify the ''red'', ''blue'', ''green'' and ''alpha'' channels. Although, some formats exist for other graphics purposes, such as ''normal maps'' or ''depth maps''. &lt;br /&gt;
&lt;br /&gt;
The more bits which are allocated, the more potential colors can be reproduced with that format. However, this comes at the cost of size. As humans are more sensitive to changes in luminance than colour, and more sensitive to certain wave-lengths of light, some formats specifically under-allocate bits to certain channels as a compromise between visual fidelity and size.&lt;br /&gt;
&lt;br /&gt;
Whilst there is no standardisation of the letters when describing a format, the following are commonly used:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Letter&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| R&lt;br /&gt;
| ''Red''&lt;br /&gt;
|-&lt;br /&gt;
| G&lt;br /&gt;
| ''Green'' (or ''Grey'')&lt;br /&gt;
|-&lt;br /&gt;
| B&lt;br /&gt;
| ''Blue''&lt;br /&gt;
|-&lt;br /&gt;
| A&lt;br /&gt;
| ''Alpha''&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| L&lt;br /&gt;
| ''Luminance''&lt;br /&gt;
|-&lt;br /&gt;
| U, V, W &amp;amp; Q&lt;br /&gt;
| Bump or normal data&lt;br /&gt;
|-&lt;br /&gt;
| P&lt;br /&gt;
| Palette index (i.e. a ''P8'' denotes a palette of 256 colors)&lt;br /&gt;
|-&lt;br /&gt;
| X&lt;br /&gt;
| Padding bits (ignored but kept for alignment)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
The most simplest color format is '''R8G8B8''', signifying that 8-bits (a [[byte]]) are reserved for the ''red'', ''blue'', ''green'' channels, respectively. Totalling 24-bits per pixel. This allows each channel to range between 0-255 values, for a total of over 16 million potential colours.&lt;br /&gt;
&lt;br /&gt;
By comparison, the '''A8B8G8R8''' is similar to above, with an additional 8-bits for alpha information — totalling 32-bits per pixel. Whether the alpha is expected to be ''premultiplied'' or ''straight'' is determined by the hardware.&lt;br /&gt;
&lt;br /&gt;
== R5G6B5 ==&lt;br /&gt;
&lt;br /&gt;
'''R5G6B5''' was a common format for early 3D game consoles. Which allowed 5-bits for ''red'' and ''blue'', and 6-bits for ''green''. The additional ''green'' bits were owed to the human eye's higher-sensitivity to green light.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.khronos.org/opengl/wiki/Image_Format Image formats] on the OpenGL wiki&lt;br /&gt;
* [https://switchbrew.org/wiki/GPU_Texture_Formats GPU Texture formats] on the SwitchBrew wiki&lt;br /&gt;
* [https://learn.microsoft.com/en-us/previous-versions/windows/desktop/bb153344(v=vs.85) Direct3D Surfaces] and [https://learn.microsoft.com/en-us/previous-versions/ms859044(v=msdn.10)?redirectedfrom=MSDN Surface Format] documentation.&lt;br /&gt;
≈&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/Color_format</id>
		<title>Color format</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/Color_format"/>
				<updated>2023-08-25T17:31:02Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''color format''', not to be confused with [[Color profiles]] or [[Graphics|Graphics formats]], describe the way in which data is stored within an image and specifically concerns the way that data is loaded by dedicated graphics hardware. The concept of a '''color format''' has an inconsistent nomenclature, often referred to as ''Pixel'', ''Texture'', ''Image'', or ''Graphics'' formats. In [[Direct3D]], these are known as ''Surface Formats''.&lt;br /&gt;
&lt;br /&gt;
Often, dedicated graphics hardware has a fixed range of supported '''color formats''', chosen to meet both industry needs of those which integrate with the hardware and whatever will offer the best performance or stability on said hardware.&lt;br /&gt;
&lt;br /&gt;
A color format is broken down into the number of bits reserved for each color, and the order of those bits, i.e. ''R8G8B8''. As color formats concern graphics hardware, they often specify the ''red'', ''blue'', ''green'' and ''alpha'' channels. Although, some formats exist for other graphics purposes, such as ''normal maps'' or ''depth maps''. &lt;br /&gt;
&lt;br /&gt;
The more bits which are allocated, the more potential colors can be reproduced with that format. However, this comes at the cost of size. As humans are more sensitive to changes in luminance than colour, and more sensitive to certain wave-lengths of light, some formats specifically under-allocate bits to certain channels as a compromise between visual fidelity and size.&lt;br /&gt;
&lt;br /&gt;
Whilst there is no standardisation of the letters when describing a format, the following are commonly used:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Letter&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| R&lt;br /&gt;
| ''Red''&lt;br /&gt;
|-&lt;br /&gt;
| G&lt;br /&gt;
| ''Green'' (or ''Grey'')&lt;br /&gt;
|-&lt;br /&gt;
| B&lt;br /&gt;
| ''Blue''&lt;br /&gt;
|-&lt;br /&gt;
| A&lt;br /&gt;
| ''Alpha''&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| L&lt;br /&gt;
| ''Luminance''&lt;br /&gt;
|-&lt;br /&gt;
| U, V, W &amp;amp; Q&lt;br /&gt;
| Bump or normal data&lt;br /&gt;
|-&lt;br /&gt;
| P&lt;br /&gt;
| Palette index (i.e. a ''P8'' denotes a palette of 256 colors)&lt;br /&gt;
|-&lt;br /&gt;
| X&lt;br /&gt;
| Padding bits (ignored but kept for alignment)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
The most simplest color format is '''R8G8B8''', signifying that 8-bits (a [[byte]]) are reserved for the ''red'', ''blue'', ''green'' channels, respectively. Totalling 24-bits per pixel. This allows each channel to range between 0-255 values, for a total of over 16 million potential colours.&lt;br /&gt;
&lt;br /&gt;
By comparison, the '''A8B8G8R8''' is similar to above, with an additional 8-bits for alpha information — totalling 32-bits per pixel. Whether the alpha is expected to be ''premultiplied'' or ''straight'' is determined by the hardware.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.khronos.org/opengl/wiki/Image_Format Image formats] on the OpenGL wiki&lt;br /&gt;
* [https://switchbrew.org/wiki/GPU_Texture_Formats GPU Texture formats] on the SwitchBrew wiki&lt;br /&gt;
* [https://learn.microsoft.com/en-us/previous-versions/windows/desktop/bb153344(v=vs.85) Direct3D Surfaces] and [https://learn.microsoft.com/en-us/previous-versions/ms859044(v=msdn.10)?redirectedfrom=MSDN Surface Format] documentation.&lt;br /&gt;
≈&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/Color_format</id>
		<title>Color format</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/Color_format"/>
				<updated>2023-08-25T17:30:24Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: Minor language&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''color format''', not to be confused with [[Color profiles]] or [[Graphics|Graphics formats]], describe the way in which data is stored within an image and specifically concerns the way that data is loaded by dedicated graphics hardware. The concept of a '''color format''' has an inconsistent nomenclature, often referred to as ''Pixel'', ''Texture'', ''Image'', or ''Graphics'' formats. In [[Direct3D]], these are known as ''Surface Formats''.&lt;br /&gt;
&lt;br /&gt;
Often, dedicated graphics hardware has a fixed range of supported '''color formats''', chosen to meet both industry needs of those which integrate with the hardware and whatever will offer the best performance or stability on said hardware.&lt;br /&gt;
&lt;br /&gt;
A color format is broken down into the number of bits reserved for each color, and the order of those bits, i.e. ''R8G8B8''. As color formats concern graphics hardware, they often are only concerned with the ''red'', ''blue'', ''green'' and ''alpha'' channels. Although, some formats exist for other display purposes, such as ''normal maps'' or ''depth maps''. &lt;br /&gt;
&lt;br /&gt;
The more bits which are allocated, the more potential colors can be reproduced with that format. However, this comes at the cost of size. As humans are more sensitive to changes in luminance than colour, and more sensitive to certain wave-lengths of light, some formats specifically under-allocate bits to certain channels as a compromise between visual fidelity and size.&lt;br /&gt;
&lt;br /&gt;
Whilst there is no standardisation of the letters when describing a format, the following are commonly used:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Letter&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| R&lt;br /&gt;
| ''Red''&lt;br /&gt;
|-&lt;br /&gt;
| G&lt;br /&gt;
| ''Green'' (or ''Grey'')&lt;br /&gt;
|-&lt;br /&gt;
| B&lt;br /&gt;
| ''Blue''&lt;br /&gt;
|-&lt;br /&gt;
| A&lt;br /&gt;
| ''Alpha''&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| L&lt;br /&gt;
| ''Luminance''&lt;br /&gt;
|-&lt;br /&gt;
| U, V, W &amp;amp; Q&lt;br /&gt;
| Bump or normal data&lt;br /&gt;
|-&lt;br /&gt;
| P&lt;br /&gt;
| Palette index (i.e. a ''P8'' denotes a palette of 256 colors)&lt;br /&gt;
|-&lt;br /&gt;
| X&lt;br /&gt;
| Padding bits (ignored but kept for alignment)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
The most simplest color format is '''R8G8B8''', signifying that 8-bits (a [[byte]]) are reserved for the ''red'', ''blue'', ''green'' channels, respectively. Totalling 24-bits per pixel. This allows each channel to range between 0-255 values, for a total of over 16 million potential colours.&lt;br /&gt;
&lt;br /&gt;
By comparison, the '''A8B8G8R8''' is similar to above, with an additional 8-bits for alpha information — totalling 32-bits per pixel. Whether the alpha is expected to be ''premultiplied'' or ''straight'' is determined by the hardware.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.khronos.org/opengl/wiki/Image_Format Image formats] on the OpenGL wiki&lt;br /&gt;
* [https://switchbrew.org/wiki/GPU_Texture_Formats GPU Texture formats] on the SwitchBrew wiki&lt;br /&gt;
* [https://learn.microsoft.com/en-us/previous-versions/windows/desktop/bb153344(v=vs.85) Direct3D Surfaces] and [https://learn.microsoft.com/en-us/previous-versions/ms859044(v=msdn.10)?redirectedfrom=MSDN Surface Format] documentation.&lt;br /&gt;
≈&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/Color_format</id>
		<title>Color format</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/Color_format"/>
				<updated>2023-08-25T17:29:54Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''color format''', not to be confused with [[Color profiles]] or [[Graphics|Graphics formats]], describe the way in which data is stored within an image and specifically concerns the way that data is loaded by dedicated graphics hardware. The concept of a '''color format''' has an inconsistent nomenclature, often referred to as ''Pixel'', ''Texture'', ''Image'', or ''Graphics'' formats. In [[Direct3D]], these are known as ''Surface Formats''.&lt;br /&gt;
&lt;br /&gt;
Often, dedicated graphics hardware has a fixed range of supported '''color formats''', chosen to meet both industry needs of those which integrate with the hardware and whatever will offer the best performance or stability on said hardware.&lt;br /&gt;
&lt;br /&gt;
A color format is broken down into the number of bits reserved for each color, and the order of those bytes, i.e. ''R8G8B8''. As color formats concern graphics hardware, they often are only concerned with the ''red'', ''blue'', ''green'' and ''alpha'' channels. Although, some formats exist for other display purposes, such as ''normal maps'' or ''depth maps''. &lt;br /&gt;
&lt;br /&gt;
The more bits which are allocated, the more potential colors can be reproduced with that format. However, this comes at the cost of size. As humans are more sensitive to changes in luminance than colour, and more sensitive to certain wave-lengths of light, some formats specifically under-allocate bits to certain channels as a compromise between visual fidelity and size.&lt;br /&gt;
&lt;br /&gt;
Whilst there is no standardisation of the letters when describing a format, the following are commonly used:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Letter&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| R&lt;br /&gt;
| ''Red''&lt;br /&gt;
|-&lt;br /&gt;
| G&lt;br /&gt;
| ''Green'' (or ''Grey'')&lt;br /&gt;
|-&lt;br /&gt;
| B&lt;br /&gt;
| ''Blue''&lt;br /&gt;
|-&lt;br /&gt;
| A&lt;br /&gt;
| ''Alpha''&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| L&lt;br /&gt;
| ''Luminance''&lt;br /&gt;
|-&lt;br /&gt;
| U, V, W &amp;amp; Q&lt;br /&gt;
| Bump or normal data&lt;br /&gt;
|-&lt;br /&gt;
| P&lt;br /&gt;
| Palette index (i.e. a ''P8'' denotes a palette of 256 colors)&lt;br /&gt;
|-&lt;br /&gt;
| X&lt;br /&gt;
| Padding bits (ignored but kept for alignment)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
The most simplest color format is '''R8G8B8''', signifying that 8-bits (a [[byte]]) are reserved for the ''red'', ''blue'', ''green'' channels, respectively. Totalling 24-bits per pixel. This allows each channel to range between 0-255 values, for a total of over 16 million potential colours.&lt;br /&gt;
&lt;br /&gt;
By comparison, the '''A8B8G8R8''' is similar to above, with an additional 8-bits for alpha information — totalling 32-bits per pixel. Whether the alpha is expected to be ''premultiplied'' or ''straight'' is determined by the hardware.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.khronos.org/opengl/wiki/Image_Format Image formats] on the OpenGL wiki&lt;br /&gt;
* [https://switchbrew.org/wiki/GPU_Texture_Formats GPU Texture formats] on the SwitchBrew wiki&lt;br /&gt;
* [https://learn.microsoft.com/en-us/previous-versions/windows/desktop/bb153344(v=vs.85) Direct3D Surfaces] and [https://learn.microsoft.com/en-us/previous-versions/ms859044(v=msdn.10)?redirectedfrom=MSDN Surface Format] documentation.&lt;br /&gt;
≈&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/Color_format</id>
		<title>Color format</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/Color_format"/>
				<updated>2023-08-25T17:29:42Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''color format''', not to be confused with [[Color profiles]] or [[Graphics|Graphics formats]], describe the way in which data is stored within an image and specifically concerns the way that data is loaded by dedicated graphics hardware. The concept of a '''color format''' has an inconsistent nomenclature, often referred to as ''Pixel'', ''Texture'', ''Image'', or ''Graphics'' formats. In [[Direct3D]], these are known as ''Surface Formats''.&lt;br /&gt;
&lt;br /&gt;
Often, dedicated graphics hardware has a fixed range of supported '''color formats''', chosen to meet both industry needs of those which integrate with the hardware and whatever will offer the best performance or stability on said hardware.&lt;br /&gt;
&lt;br /&gt;
A color format is broken down into the number of bits reserved for each color, and the order of those bytes, i.e. ''R8G8B8''. As color formats concern graphics hardware, they often are only concerned with the ''red'', ''blue'', ''green'' and ''alpha'' channels. Although, some formats exist for other display purposes, such as ''normal maps'' or ''depth maps''. &lt;br /&gt;
&lt;br /&gt;
The more bits which are allocated, the more potential colors can be reproduced with that format. However, this comes at the cost of size. As humans are more sensitive to changes in luminance than colour, and more sensitive to certain wave-lengths of light, some formats specifically under-allocate bits to certain channels as a compromise between visual fidelity and size.&lt;br /&gt;
&lt;br /&gt;
Whilst there is no standardisation of the letters when describing a format, the following are commonly used:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Letter&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| R&lt;br /&gt;
| ''Red''&lt;br /&gt;
|-&lt;br /&gt;
| G&lt;br /&gt;
| ''Green'' (or ''Grey'')&lt;br /&gt;
|-&lt;br /&gt;
| B&lt;br /&gt;
| ''Blue''&lt;br /&gt;
|-&lt;br /&gt;
| A&lt;br /&gt;
| ''Alpha''&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| L&lt;br /&gt;
| ''Luminance''&lt;br /&gt;
|-&lt;br /&gt;
| U, V, W &amp;amp; Q&lt;br /&gt;
| Bump or normal data&lt;br /&gt;
|-&lt;br /&gt;
| P&lt;br /&gt;
| Palette index (i.e. a ''P8'' denotes a palette of 256 colors)&lt;br /&gt;
|-&lt;br /&gt;
| X&lt;br /&gt;
| Padding bits (ignored but kept for byte alignment)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
The most simplest color format is '''R8G8B8''', signifying that 8-bits (a [[byte]]) are reserved for the ''red'', ''blue'', ''green'' channels, respectively. Totalling 24-bits per pixel. This allows each channel to range between 0-255 values, for a total of over 16 million potential colours.&lt;br /&gt;
&lt;br /&gt;
By comparison, the '''A8B8G8R8''' is similar to above, with an additional 8-bits for alpha information — totalling 32-bits per pixel. Whether the alpha is expected to be ''premultiplied'' or ''straight'' is determined by the hardware.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.khronos.org/opengl/wiki/Image_Format Image formats] on the OpenGL wiki&lt;br /&gt;
* [https://switchbrew.org/wiki/GPU_Texture_Formats GPU Texture formats] on the SwitchBrew wiki&lt;br /&gt;
* [https://learn.microsoft.com/en-us/previous-versions/windows/desktop/bb153344(v=vs.85) Direct3D Surfaces] and [https://learn.microsoft.com/en-us/previous-versions/ms859044(v=msdn.10)?redirectedfrom=MSDN Surface Format] documentation.&lt;br /&gt;
≈&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/Color_format</id>
		<title>Color format</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/Color_format"/>
				<updated>2023-08-25T17:09:47Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''color format''', not to be confused with [[Color profiles]] or [[Graphics|Graphics formats]], describe the way in which data is stored within an image and specifically concerns the way that data is loaded by dedicated graphics hardware. The concept of a '''color format''' has an inconsistent nomenclature, often referred to as ''Pixel'', ''Texture'', ''Image'', or ''Graphics'' formats. In [[Direct3D]], these are known as ''Surface Formats''.&lt;br /&gt;
&lt;br /&gt;
Often, dedicated graphics hardware has a fixed range of supported '''color formats''', chosen to meet both industry needs of those which integrate with the hardware and whatever will offer the best performance or stability on said hardware.&lt;br /&gt;
&lt;br /&gt;
A color format is broken down into the number of bits reserved for each color, and the order of those bytes. As color formats concern graphics hardware, they often are only concerned with the ''red'', ''blue'', ''green'' and ''alpha'' channels. Although, some formats exist for other display purposes, such as ''normal maps'' or ''depth maps''.&lt;br /&gt;
&lt;br /&gt;
The more bits which are allocated, the more potential colors can be reproduced with that format. However, this comes at the cost of size. As humans are more sensitive to changes in brightness than colour, and more sensitive to certain wave-lengths of light, some formats specifically under-allocate bits to certain channels as a compromise between visual fidelity and size.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
The most simplest color format is '''R8G8B8''', signifying that 8-bits (a [[byte]]) are reserved for the ''red'', ''blue'', ''green'' channels, respectively. Totalling 24-bits per pixel. This allows each channel to range between 0-255 values, for a total of over 16 million potential colours.&lt;br /&gt;
&lt;br /&gt;
By comparison, the '''A8B8G8R8''' is similar to above, with an 8-bits for alpha information — totalling 32-bits per pixel. Whether the alpha is expected to be ''premultiplied'' or ''straight'' is determined by the hardware.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.khronos.org/opengl/wiki/Image_Format Image formats] on the OpenGL wiki&lt;br /&gt;
* [https://switchbrew.org/wiki/GPU_Texture_Formats GPU Texture formats] on the SwitchBrew wiki&lt;br /&gt;
* [https://learn.microsoft.com/en-us/previous-versions/windows/desktop/bb153344(v=vs.85) Direct3D Surfaces] and [https://learn.microsoft.com/en-us/previous-versions/ms859044(v=msdn.10)?redirectedfrom=MSDN Surface Format] documentation.&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/Color_format</id>
		<title>Color format</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/Color_format"/>
				<updated>2023-08-25T17:07:36Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''color format''', not to be confused with [[Color profiles]] or [[Graphics|Graphics formats]], describe the way in which data is stored within an image and specifically concerns the way that data is loaded by dedicated graphics hardware. The concept of a '''color format''' has an inconsistent nomenclature, often referred to as ''Pixel'', ''Texture'', ''Image'', or ''Graphics'' formats. In [[Direct3D]], these are known as ''Surface Formats''.&lt;br /&gt;
&lt;br /&gt;
Often, dedicated graphics hardware has a fixed range of supported '''color formats''', chosen to meet both industry needs of those which integrate with the hardware and whatever will offer the best performance or stability on said hardware.&lt;br /&gt;
&lt;br /&gt;
A color format is broken down into the number of bits reserved for each color, and the order of those bytes. As color formats concern graphics hardware, they often are only concerned with the ''red'', ''blue'', ''green'' and ''alpha'' channels. Although, some formats exist for other display purposes, such as ''normal maps'' or ''depth maps''.&lt;br /&gt;
&lt;br /&gt;
The more bits which are allocated, the more potential colors can be reproduced with that format. However, this comes at the cost of size. As humans are more sensitive to changes in brightness than colour, and more sensitive to certain wave-lengths of light, some formats specifically under-allocate bits to certain channels as a compromise between visual fidelity and size.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
The most simplest color format is '''R8G8B8''', signifying that 8-bits (a [[byte]]) are reserved for the ''red'', ''blue'', ''green'' channels, respectively. Totalling 24-bits per pixel. This allows each channel to range between 0-255 values, for a total of over 16 million potential colours.&lt;br /&gt;
&lt;br /&gt;
By comparison, the '''A8B8G8R8''' is similar to above, with an 8-bits for alpha information — totalling 32-bits per pixel. Whether the alpha is expected to be ''premultiplied'' or ''straight'' is determined by the hardware.&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/Color_format</id>
		<title>Color format</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/Color_format"/>
				<updated>2023-08-25T17:06:45Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''color format''', not to be confused with [[Color profiles]] or [[Graphics|Graphics formats]], describe the way in which data is stored within an image and specifically concerns the way that data is loaded by dedicated graphics hardware. The concept of a '''color format''' has an inconsistent nomenclature, often referred to as ''Pixel'', ''Texture'', ''Image'', or ''Graphics'' formats. In [[Direct3D]], these are known as ''Surface Formats''.&lt;br /&gt;
&lt;br /&gt;
Often, dedicated graphics hardware has a fixed range of supported '''color formats''', chosen to meet both industry needs of those which integrate with the hardware and whatever will offer the best performance or stability on said hardware.&lt;br /&gt;
&lt;br /&gt;
A color format is broken down into the number of bits reserved for each color, and the order of those bytes. As color formats concern graphics hardware, they often are only concerned with the ''red'', ''blue'', ''green'' and ''alpha'' channels. Although, some formats exist for other display purposes, such as ''normal maps'' or ''depth maps''.&lt;br /&gt;
&lt;br /&gt;
The more bits which are allocated, the more potential colors can be reproduced with that format. However, this comes at the cost of size. As humans are more sensitive to changes in brightness than colour, and more sensitive to certain wave-lengths of light, some formats specifically under-allocate bits to certain channels as a compromise between visual fidelity and size.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
The most simplest color format is '''R8G8B8''', signifying that 8-bits (a [[byte]]) are reserved for the ''red'', ''blue'', ''green'' channels, respectively. Totalling 24-bits per pixel. This allows each channel to range between 0-255 values, for a total of over 16 million potential colours.&lt;br /&gt;
&lt;br /&gt;
By comparison, the '''A8B8G8R8''' is similar to above, with an 8-bits for alpha information — totalling 32-bits per pixel.&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/Color_format</id>
		<title>Color format</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/Color_format"/>
				<updated>2023-08-25T17:05:38Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: Created page with &amp;quot;A '''color format''', not to be confused with Color profiles or Graphics formats, describe the way in which data is stored within an image and specifically co...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''color format''', not to be confused with [[Color profiles]] or [[Graphics|Graphics formats]], describe the way in which data is stored within an image and specifically concerns the way that data is loaded by dedicated graphics hardware. The concept of a '''color format''' has an inconsistent nomenclature, often referred to as ''Pixel'', ''Texture'', ''Image'', or ''Graphics'' formats. In [[Direct3D]], these are known as ''Surface Formats''.&lt;br /&gt;
&lt;br /&gt;
Often, dedicated graphics hardware has a fixed range of supported '''color formats''', chosen to meet both industry needs of those which integrate with the hardware and whatever will offer the best performance or stability on said hardware.&lt;br /&gt;
&lt;br /&gt;
A color format is broken down into the number of bits reserved for each color, and the order of those bytes. As color formats concern graphics hardware, they often are only concerned with the ''red'', ''blue'', ''green'' and ''alpha'' channels. Although, some formats exist for other display purposes, such as ''normal maps'' or ''depth maps''.&lt;br /&gt;
&lt;br /&gt;
The more bits which are allocated, the more potential colors can be reproduced with that format. However, this comes at the cost of size. As humans are more sensitive to changes in brightness than colour, and more sensitive to certain wave-lengths of light, some formats specifically under-allocate bits to certain channels as a compromise between visual fidelity and size.&lt;br /&gt;
&lt;br /&gt;
Throughout history, particularly with regards to game console hardware, a trade-off &lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
The most simplest color format is '''R8G8B8''', signifying that 8-bits (a [[byte]]) are reserved for the ''red'', ''blue'', ''green'' channels, respectively. Totalling 24-bits per pixel. This allows each channel to range between 0-255 values, for a total of over 16 million potential colours.&lt;br /&gt;
&lt;br /&gt;
By comparison, the '''A8B8G8R8''' is similar to above, with an 8-bits for alpha information — totalling 32-bits per pixel.&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/TMD_(PlayStation)</id>
		<title>TMD (PlayStation)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/TMD_(PlayStation)"/>
				<updated>2023-08-25T16:13:12Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: Fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|subcat=3D and CAD/CAM Models&lt;br /&gt;
|extensions={{ext|tmd}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Restored|2016-05-09|https://web.archive.org/web/20160509002322/http://rewiki.regengedanken.de/wiki/.TMD}}&lt;br /&gt;
&lt;br /&gt;
The '''.TMD''' file format is the standard file format for 3D objects on PlayStation. It is also used by many PC ports of Playstation games, like Resident Evil, Resident Evil 2, Resident Evil 3.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
The values are stored in Little-Endian order.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
A TMD file can contain several 3D models. It starts with this header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
    unsigned long id; /* Constant = 0x41 */&lt;br /&gt;
    unsigned long unknown;&lt;br /&gt;
    unsigned long num_objects; /* Number of objects in file */&lt;br /&gt;
} tmd_header_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then are following the objects headers, as an array of tmd_object_t objects[num_objects].&lt;br /&gt;
&lt;br /&gt;
=== Object ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned long vertex_offset; /* Offset to vertex array coordinates */&lt;br /&gt;
	unsigned long vertex_count; /* Number of vertices */&lt;br /&gt;
	unsigned long normal_offset; /* Offset to normal array coordinates */&lt;br /&gt;
	unsigned long normal_count; /* Number of normals */&lt;br /&gt;
	unsigned long primitive_offset; /* Offsets to primitives */&lt;br /&gt;
	unsigned long primitive_count; /* Number of primitives */&lt;br /&gt;
	unsigned long unknown;&lt;br /&gt;
} tmd_object_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vertex, normal ===&lt;br /&gt;
&lt;br /&gt;
Vertices and normals share the same format to holds the 3D coordinate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	short x;&lt;br /&gt;
	short y;&lt;br /&gt;
	short z;&lt;br /&gt;
	short zero;&lt;br /&gt;
} tmd_vertex_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Primitives ===&lt;br /&gt;
&lt;br /&gt;
Each primitive starts with same header, and the rest depend on the primitive type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned char length; /* Length of following primitive in 32bit words */&lt;br /&gt;
	unsigned char unknown1;&lt;br /&gt;
	unsigned char type;	/* primitive type */&lt;br /&gt;
} tmd_prim_header_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Single color triangle (type 0x20,0x22) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned char r,g,b,unknown; /* R,G,B triangle color */&lt;br /&gt;
&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
} tmd_flattriangle_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Gouraud triangle (type 0x24) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned char r0,g0,b0,unk0; /* R,G,B vertex color */&lt;br /&gt;
        unsigned char r1,g1,b1,unk1;&lt;br /&gt;
        unsigned char r2,g2,b2,unk2;&lt;br /&gt;
&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
} tmd_gouraudtriangle_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Single color quad (type 0x28) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned char r,g,b,unknown; /* R,G,B quad color */&lt;br /&gt;
&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
	unsigned short v3;&lt;br /&gt;
} tmd_flatquad_t;&lt;br /&gt;
&lt;br /&gt;
==== Gouraud quad (type 0x2c) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned char r0,g0,b0,unk0; /* R,G,B vertex color */&lt;br /&gt;
        unsigned char r1,g1,b1,unk1;&lt;br /&gt;
        unsigned char r2,g2,b2,unk2;&lt;br /&gt;
        unsigned char r3,g3,b3,unk3;&lt;br /&gt;
&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
	unsigned short v3;&lt;br /&gt;
&lt;br /&gt;
	unsigned short unk5;&lt;br /&gt;
} tmd_gouraudquad_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Flat triangle with vertex normals (type 0x30) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned char r,g,b,unk; /* R,G,B triangle color */&lt;br /&gt;
&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short n1;&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short n2;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
} tmd_flattriangle2_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Textured triangle (type 0x34) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned short unknown1;&lt;br /&gt;
        unsigned char v0; /* textures coordinates */&lt;br /&gt;
        unsigned char u0;&lt;br /&gt;
        unsigned short unknown2;&lt;br /&gt;
        unsigned char v1;&lt;br /&gt;
        unsigned char u1;&lt;br /&gt;
        unsigned short unknown3;&lt;br /&gt;
        unsigned char v2;&lt;br /&gt;
        unsigned char u2;&lt;br /&gt;
&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short n1;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
	unsigned short n2;&lt;br /&gt;
} tmd_txtriangle_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Flat quad with vertex normals (type 0x38) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned char r,g,b,unk; /* R,G,B quad color */&lt;br /&gt;
&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short n1;&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short n2;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
	unsigned short n3;&lt;br /&gt;
	unsigned short v3;&lt;br /&gt;
} tmd_flatquad2_t;&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/TMD_(PlayStation)</id>
		<title>TMD (PlayStation)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/TMD_(PlayStation)"/>
				<updated>2023-08-25T16:12:32Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: Fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|subcat=3D and CAD/CAM Models&lt;br /&gt;
|extensions={{ext|tmd}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Restored|2016-05-09|https://web.archive.org/web/20160509002322/http://rewiki.regengedanken.de/wiki/.TMD}}&lt;br /&gt;
&lt;br /&gt;
The '''.TMD''' file format is the standard file format for 3D objects on PlayStation. It is also used by many PC ports of Playstation games, like Resident Evil, Resident Evil 2, Resident Evil 3.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
The values are stored in Little-Endian order.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
A TMD file can contain several 3D models. It starts with this header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
    unsigned long id; /* Constant = 0x41 */&lt;br /&gt;
    unsigned long unknown;&lt;br /&gt;
    unsigned long num_objects; /* Number of objects in file */&lt;br /&gt;
} tmd_header_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then are following the objects headers, as an array of tmd_object_t objects[num_objects].&lt;br /&gt;
&lt;br /&gt;
=== Object ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned long vertex_offset; /* Offset to vertex array coordinates */&lt;br /&gt;
	unsigned long vertex_count; /* Number of vertices */&lt;br /&gt;
	unsigned long normal_offset; /* Offset to normal array coordinates */&lt;br /&gt;
	unsigned long normal_count; /* Number of normals */&lt;br /&gt;
	unsigned long primitive_offset; /* Offsets to primitives */&lt;br /&gt;
	unsigned long primitive_count; /* Number of primitives */&lt;br /&gt;
	unsigned long unknown;&lt;br /&gt;
} tmd_object_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vertex, normal ===&lt;br /&gt;
&lt;br /&gt;
Vertices and normals share the same format to holds the 3D coordinate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	short x;&lt;br /&gt;
	short y;&lt;br /&gt;
	short z;&lt;br /&gt;
	short zero;&lt;br /&gt;
} tmd_vertex_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Primitives ===&lt;br /&gt;
&lt;br /&gt;
Each primitive starts with same header, and the rest depend on the primitive type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned char length; /* Length of following primitive in 32bit words */&lt;br /&gt;
	unsigned char unknown1;&lt;br /&gt;
	unsigned char type;	/* primitive type */&lt;br /&gt;
} tmd_prim_header_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Single color triangle (type 0x20,0x22) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned char r,g,b,unknown; /* R,G,B triangle color */&lt;br /&gt;
&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
} tmd_flattriangle_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gouraud triangle (type 0x24) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned char r0,g0,b0,unk0; /* R,G,B vertex color */&lt;br /&gt;
        unsigned char r1,g1,b1,unk1;&lt;br /&gt;
        unsigned char r2,g2,b2,unk2;&lt;br /&gt;
&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
} tmd_gouraudtriangle_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Single color quad (type 0x28) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned char r,g,b,unknown; /* R,G,B quad color */&lt;br /&gt;
&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
	unsigned short v3;&lt;br /&gt;
} tmd_flatquad_t;&lt;br /&gt;
&lt;br /&gt;
=== Gouraud quad (type 0x2c) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned char r0,g0,b0,unk0; /* R,G,B vertex color */&lt;br /&gt;
        unsigned char r1,g1,b1,unk1;&lt;br /&gt;
        unsigned char r2,g2,b2,unk2;&lt;br /&gt;
        unsigned char r3,g3,b3,unk3;&lt;br /&gt;
&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
	unsigned short v3;&lt;br /&gt;
&lt;br /&gt;
	unsigned short unk5;&lt;br /&gt;
} tmd_gouraudquad_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Flat triangle with vertex normals (type 0x30) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned char r,g,b,unk; /* R,G,B triangle color */&lt;br /&gt;
&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short n1;&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short n2;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
} tmd_flattriangle2_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Textured triangle (type 0x34) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned short unknown1;&lt;br /&gt;
        unsigned char v0; /* textures coordinates */&lt;br /&gt;
        unsigned char u0;&lt;br /&gt;
        unsigned short unknown2;&lt;br /&gt;
        unsigned char v1;&lt;br /&gt;
        unsigned char u1;&lt;br /&gt;
        unsigned short unknown3;&lt;br /&gt;
        unsigned char v2;&lt;br /&gt;
        unsigned char u2;&lt;br /&gt;
&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short n1;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
	unsigned short n2;&lt;br /&gt;
} tmd_txtriangle_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Flat quad with vertex normals (type 0x38) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned char r,g,b,unk; /* R,G,B quad color */&lt;br /&gt;
&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short n1;&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short n2;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
	unsigned short n3;&lt;br /&gt;
	unsigned short v3;&lt;br /&gt;
} tmd_flatquad2_t;&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/TMD_(PlayStation)</id>
		<title>TMD (PlayStation)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/TMD_(PlayStation)"/>
				<updated>2023-08-25T16:11:42Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|subcat=3D and CAD/CAM Models&lt;br /&gt;
|extensions={{ext|tmd}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Restored|2016-05-09|https://web.archive.org/web/20160509002322/http://rewiki.regengedanken.de/wiki/.TMD}}&lt;br /&gt;
&lt;br /&gt;
The '''.TMD''' file format is the standard file format for 3D objects on PlayStation. It is also used by many PC ports of Playstation games, like Resident Evil, Resident Evil 2, Resident Evil 3.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
The values are stored in Little-Endian order.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
A TMD file can contain several 3D models. It starts with this header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
    unsigned long id; /* Constant = 0x41 */&lt;br /&gt;
    unsigned long unknown;&lt;br /&gt;
    unsigned long num_objects; /* Number of objects in file */&lt;br /&gt;
} tmd_header_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then are following the objects headers, as an array of tmd_object_t objects[num_objects].&lt;br /&gt;
&lt;br /&gt;
=== Object ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned long vertex_offset; /* Offset to vertex array coordinates */&lt;br /&gt;
	unsigned long vertex_count; /* Number of vertices */&lt;br /&gt;
	unsigned long normal_offset; /* Offset to normal array coordinates */&lt;br /&gt;
	unsigned long normal_count; /* Number of normals */&lt;br /&gt;
	unsigned long primitive_offset; /* Offsets to primitives */&lt;br /&gt;
	unsigned long primitive_count; /* Number of primitives */&lt;br /&gt;
	unsigned long unknown;&lt;br /&gt;
} tmd_object_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vertex, normal ===&lt;br /&gt;
&lt;br /&gt;
Vertices and normals share the same format to holds the 3D coordinate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	short x;&lt;br /&gt;
	short y;&lt;br /&gt;
	short z;&lt;br /&gt;
	short zero;&lt;br /&gt;
} tmd_vertex_t;&lt;br /&gt;
&lt;br /&gt;
=== Primitives ===&lt;br /&gt;
&lt;br /&gt;
Each primitive starts with same header, and the rest depend on the primitive type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned char length; /* Length of following primitive in 32bit words */&lt;br /&gt;
	unsigned char unknown1;&lt;br /&gt;
	unsigned char type;	/* primitive type */&lt;br /&gt;
} tmd_prim_header_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Single color triangle (type 0x20,0x22) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned char r,g,b,unknown; /* R,G,B triangle color */&lt;br /&gt;
&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
} tmd_flattriangle_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gouraud triangle (type 0x24) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned char r0,g0,b0,unk0; /* R,G,B vertex color */&lt;br /&gt;
        unsigned char r1,g1,b1,unk1;&lt;br /&gt;
        unsigned char r2,g2,b2,unk2;&lt;br /&gt;
&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
} tmd_gouraudtriangle_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Single color quad (type 0x28) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned char r,g,b,unknown; /* R,G,B quad color */&lt;br /&gt;
&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
	unsigned short v3;&lt;br /&gt;
} tmd_flatquad_t;&lt;br /&gt;
&lt;br /&gt;
=== Gouraud quad (type 0x2c) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned char r0,g0,b0,unk0; /* R,G,B vertex color */&lt;br /&gt;
        unsigned char r1,g1,b1,unk1;&lt;br /&gt;
        unsigned char r2,g2,b2,unk2;&lt;br /&gt;
        unsigned char r3,g3,b3,unk3;&lt;br /&gt;
&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
	unsigned short v3;&lt;br /&gt;
&lt;br /&gt;
	unsigned short unk5;&lt;br /&gt;
} tmd_gouraudquad_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Flat triangle with vertex normals (type 0x30) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned char r,g,b,unk; /* R,G,B triangle color */&lt;br /&gt;
&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short n1;&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short n2;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
} tmd_flattriangle2_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Textured triangle (type 0x34) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned short unknown1;&lt;br /&gt;
        unsigned char v0; /* textures coordinates */&lt;br /&gt;
        unsigned char u0;&lt;br /&gt;
        unsigned short unknown2;&lt;br /&gt;
        unsigned char v1;&lt;br /&gt;
        unsigned char u1;&lt;br /&gt;
        unsigned short unknown3;&lt;br /&gt;
        unsigned char v2;&lt;br /&gt;
        unsigned char u2;&lt;br /&gt;
&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short n1;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
	unsigned short n2;&lt;br /&gt;
} tmd_txtriangle_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Flat quad with vertex normals (type 0x38) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned char r,g,b,unk; /* R,G,B quad color */&lt;br /&gt;
&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short n1;&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short n2;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
	unsigned short n3;&lt;br /&gt;
	unsigned short v3;&lt;br /&gt;
} tmd_flatquad2_t;&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/DOR_(Resident_Evil_1997)</id>
		<title>DOR (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/DOR_(Resident_Evil_1997)"/>
				<updated>2023-08-25T16:10:36Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: /* Offset 1: embedded TMD file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|extensions={{ext|dor}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Resident Evil (1997)]]&lt;br /&gt;
&lt;br /&gt;
{{Restored|2016-08-17|https://web.archive.org/web/20160817023457/http://rewiki.regengedanken.de/wiki/.DOR}}&lt;br /&gt;
&lt;br /&gt;
The '''.DOR''' file format is used by Resident Evil to store the animation of door, when the player changes room.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
The values are stored in Little-Endian order.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
A DOR file starts with this header, to store offsets to different objects, embedded in the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long unknown0;	/* Offset to ? */&lt;br /&gt;
	unsigned long tmd_offset;	/* Offset to embedded TMD file */&lt;br /&gt;
	unsigned long tim_offset;	/* Offset to embedded TIM file */&lt;br /&gt;
} dor_header_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Offset 0 ==&lt;br /&gt;
&lt;br /&gt;
''Unknown.''&lt;br /&gt;
&lt;br /&gt;
== Offset 1: embedded TMD file ==&lt;br /&gt;
&lt;br /&gt;
See: [[TMD (PlayStation)]]&lt;br /&gt;
&lt;br /&gt;
== Offset 2: embedded TIM file ==&lt;br /&gt;
&lt;br /&gt;
See: [[TIM (PlayStation graphics)]]&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/Category:Resident_Evil_(1997)</id>
		<title>Category:Resident Evil (1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/Category:Resident_Evil_(1997)"/>
				<updated>2023-08-25T16:10:05Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This category includes formats and specifications to the 1997 PC port of the survival-horror game, ''Resident Evil''. As this was a PC port of a Playstation original, some formats overlap with those on the Playstation.&lt;br /&gt;
&lt;br /&gt;
== Formats ==&lt;br /&gt;
&lt;br /&gt;
{{Restored|2017-11-14|https://web.archive.org/web/20171114080249/http://rewiki.regengedanken.de:80/wiki/Resident_Evil}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Extension&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[.BIN (Resident Evil 1997)|.BIN]]&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [[.BGZ (Resident Evil 1997)|.BGZ]]&lt;br /&gt;
| Background images (Gamecube version)&lt;br /&gt;
|-&lt;br /&gt;
| [[.BSS (Resident Evil 1997)|.BSS]]&lt;br /&gt;
| Background images (Playstation version)&lt;br /&gt;
|-&lt;br /&gt;
| [[.DAT (Resident Evil 1997)|.DAT]]&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [[DOR (Resident Evil 1997)|.DOR]]&lt;br /&gt;
| Door animation&lt;br /&gt;
|-&lt;br /&gt;
| [[EMD (Resident Evil 1997)|.EMD]]&lt;br /&gt;
| Enemy/player 3D model&lt;br /&gt;
|-&lt;br /&gt;
| [[.EMW (Resident Evil 1997)|.EMW]]&lt;br /&gt;
| Player 3D model with weapon?&lt;br /&gt;
|-&lt;br /&gt;
| [[.ESP (Resident Evil 1997)|.ESP]]&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [[.ETM (Resident Evil 1997)|.ETM]]&lt;br /&gt;
| Texture IMage, see .TIM&lt;br /&gt;
|-&lt;br /&gt;
| [[.HED (Resident Evil 1997)|.HED]]&lt;br /&gt;
| Unknown (Playstation version)&lt;br /&gt;
|-&lt;br /&gt;
| [[.HSB (Resident Evil 1997)|.HSB]]&lt;br /&gt;
| Unknown (Playstation version)&lt;br /&gt;
|-&lt;br /&gt;
| [[.IVM (Resident Evil 1997)|.IVM]]&lt;br /&gt;
| Texture IMage, see .TIM&lt;br /&gt;
|-&lt;br /&gt;
| [[.PAK (Resident Evil 1997)|.PAK]]&lt;br /&gt;
| Background images (PC version)&lt;br /&gt;
|-&lt;br /&gt;
| [[.PIX (Resident Evil 1997)|.PIX]]&lt;br /&gt;
| Raw 16 bits image&lt;br /&gt;
|-&lt;br /&gt;
| [[.PTC (Resident Evil 1997)|.PTC]]&lt;br /&gt;
| Raw 24-bit image&lt;br /&gt;
|-&lt;br /&gt;
| [[RDT (Resident Evil 1997)|.RDT]]&lt;br /&gt;
| Room description&lt;br /&gt;
|-&lt;br /&gt;
| [[.RGB (Resident Evil 1997)|.RGB]]&lt;br /&gt;
| Raw 24-bit image (Playstation version)&lt;br /&gt;
|-&lt;br /&gt;
| [[.STF (Resident Evil 1997)|.STF]]&lt;br /&gt;
| Unknown (Playstation version)&lt;br /&gt;
|-&lt;br /&gt;
| [[.STR (Resident Evil 1997)|.STR]]&lt;br /&gt;
| Movies (Playstation version)&lt;br /&gt;
|-&lt;br /&gt;
| [[TIM (PlayStation graphics)|.TIM]]&lt;br /&gt;
| Texture IMage&lt;br /&gt;
|-&lt;br /&gt;
| [[.VB (Resident Evil 1997)|.VB]]&lt;br /&gt;
| Waveform data format for ADPCM (Playstation version)&lt;br /&gt;
|-&lt;br /&gt;
| [[TMD (PlayStation)|.TMD]]&lt;br /&gt;
| 3D model&lt;br /&gt;
|-&lt;br /&gt;
| [[.XAS (Resident Evil 1997)|.XAS]]&lt;br /&gt;
| CD-ROM XA audio stream (Playstation version)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/TMD_(PlayStation)</id>
		<title>TMD (PlayStation)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/TMD_(PlayStation)"/>
				<updated>2023-08-25T16:09:10Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: Created page with &amp;quot;{{FormatInfo |formattype=electronic |subcat=3D and CAD/CAM Models |extensions={{ext|tmd}} }}  The '''.TMD''' file format is the standard file format for 3D objects on PlayStat...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|subcat=3D and CAD/CAM Models&lt;br /&gt;
|extensions={{ext|tmd}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The '''.TMD''' file format is the standard file format for 3D objects on PlayStation. It is also used by many PC ports of Playstation games, like Resident Evil, Resident Evil 2, Resident Evil 3.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
The values are stored in Little-Endian order.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
A TMD file can contain several 3D models. It starts with this header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
    unsigned long id; /* Constant = 0x41 */&lt;br /&gt;
    unsigned long unknown;&lt;br /&gt;
    unsigned long num_objects; /* Number of objects in file */&lt;br /&gt;
} tmd_header_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then are following the objects headers, as an array of tmd_object_t objects[num_objects].&lt;br /&gt;
&lt;br /&gt;
=== Object ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned long vertex_offset; /* Offset to vertex array coordinates */&lt;br /&gt;
	unsigned long vertex_count; /* Number of vertices */&lt;br /&gt;
	unsigned long normal_offset; /* Offset to normal array coordinates */&lt;br /&gt;
	unsigned long normal_count; /* Number of normals */&lt;br /&gt;
	unsigned long primitive_offset; /* Offsets to primitives */&lt;br /&gt;
	unsigned long primitive_count; /* Number of primitives */&lt;br /&gt;
	unsigned long unknown;&lt;br /&gt;
} tmd_object_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vertex, normal ===&lt;br /&gt;
&lt;br /&gt;
Vertices and normals share the same format to holds the 3D coordinate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	short x;&lt;br /&gt;
	short y;&lt;br /&gt;
	short z;&lt;br /&gt;
	short zero;&lt;br /&gt;
} tmd_vertex_t;&lt;br /&gt;
&lt;br /&gt;
=== Primitives ===&lt;br /&gt;
&lt;br /&gt;
Each primitive starts with same header, and the rest depend on the primitive type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned char length; /* Length of following primitive in 32bit words */&lt;br /&gt;
	unsigned char unknown1;&lt;br /&gt;
	unsigned char type;	/* primitive type */&lt;br /&gt;
} tmd_prim_header_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Single color triangle (type 0x20,0x22) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned char r,g,b,unknown; /* R,G,B triangle color */&lt;br /&gt;
&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
} tmd_flattriangle_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gouraud triangle (type 0x24) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned char r0,g0,b0,unk0; /* R,G,B vertex color */&lt;br /&gt;
        unsigned char r1,g1,b1,unk1;&lt;br /&gt;
        unsigned char r2,g2,b2,unk2;&lt;br /&gt;
&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
} tmd_gouraudtriangle_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Single color quad (type 0x28) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned char r,g,b,unknown; /* R,G,B quad color */&lt;br /&gt;
&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
	unsigned short v3;&lt;br /&gt;
} tmd_flatquad_t;&lt;br /&gt;
&lt;br /&gt;
=== Gouraud quad (type 0x2c) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned char r0,g0,b0,unk0; /* R,G,B vertex color */&lt;br /&gt;
        unsigned char r1,g1,b1,unk1;&lt;br /&gt;
        unsigned char r2,g2,b2,unk2;&lt;br /&gt;
        unsigned char r3,g3,b3,unk3;&lt;br /&gt;
&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
	unsigned short v3;&lt;br /&gt;
&lt;br /&gt;
	unsigned short unk5;&lt;br /&gt;
} tmd_gouraudquad_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Flat triangle with vertex normals (type 0x30) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned char r,g,b,unk; /* R,G,B triangle color */&lt;br /&gt;
&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short n1;&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short n2;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
} tmd_flattriangle2_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Textured triangle (type 0x34) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned short unknown1;&lt;br /&gt;
        unsigned char v0; /* textures coordinates */&lt;br /&gt;
        unsigned char u0;&lt;br /&gt;
        unsigned short unknown2;&lt;br /&gt;
        unsigned char v1;&lt;br /&gt;
        unsigned char u1;&lt;br /&gt;
        unsigned short unknown3;&lt;br /&gt;
        unsigned char v2;&lt;br /&gt;
        unsigned char u2;&lt;br /&gt;
&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short n1;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
	unsigned short n2;&lt;br /&gt;
} tmd_txtriangle_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Flat quad with vertex normals (type 0x38) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
        unsigned char r,g,b,unk; /* R,G,B quad color */&lt;br /&gt;
&lt;br /&gt;
	unsigned short n0; /* Normal index */&lt;br /&gt;
	unsigned short v0; /* Vertex index */&lt;br /&gt;
	unsigned short n1;&lt;br /&gt;
	unsigned short v1;&lt;br /&gt;
	unsigned short n2;&lt;br /&gt;
	unsigned short v2;&lt;br /&gt;
	unsigned short n3;&lt;br /&gt;
	unsigned short v3;&lt;br /&gt;
} tmd_flatquad2_t;&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/DOR_(Resident_Evil_1997)</id>
		<title>DOR (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/DOR_(Resident_Evil_1997)"/>
				<updated>2023-08-25T16:04:30Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|extensions={{ext|dor}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Resident Evil (1997)]]&lt;br /&gt;
&lt;br /&gt;
{{Restored|2016-08-17|https://web.archive.org/web/20160817023457/http://rewiki.regengedanken.de/wiki/.DOR}}&lt;br /&gt;
&lt;br /&gt;
The '''.DOR''' file format is used by Resident Evil to store the animation of door, when the player changes room.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
The values are stored in Little-Endian order.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
A DOR file starts with this header, to store offsets to different objects, embedded in the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long unknown0;	/* Offset to ? */&lt;br /&gt;
	unsigned long tmd_offset;	/* Offset to embedded TMD file */&lt;br /&gt;
	unsigned long tim_offset;	/* Offset to embedded TIM file */&lt;br /&gt;
} dor_header_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Offset 0 ==&lt;br /&gt;
&lt;br /&gt;
''Unknown.''&lt;br /&gt;
&lt;br /&gt;
== Offset 1: embedded TMD file ==&lt;br /&gt;
&lt;br /&gt;
See .TMD for further information.&lt;br /&gt;
&lt;br /&gt;
== Offset 2: embedded TIM file ==&lt;br /&gt;
&lt;br /&gt;
See: [[TIM (PlayStation graphics)]]&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/Category:Resident_Evil_(1997)</id>
		<title>Category:Resident Evil (1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/Category:Resident_Evil_(1997)"/>
				<updated>2023-08-25T16:03:54Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This category includes formats and specifications to the 1997 PC port of the survival-horror game, ''Resident Evil''. As this was a PC port of a Playstation original, some formats overlap with those on the Playstation.&lt;br /&gt;
&lt;br /&gt;
== Formats ==&lt;br /&gt;
&lt;br /&gt;
{{Restored|2017-11-14|https://web.archive.org/web/20171114080249/http://rewiki.regengedanken.de:80/wiki/Resident_Evil}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Extension&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[.BIN (Resident Evil 1997)|.BIN]]&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [[.BGZ (Resident Evil 1997)|.BGZ]]&lt;br /&gt;
| Background images (Gamecube version)&lt;br /&gt;
|-&lt;br /&gt;
| [[.BSS (Resident Evil 1997)|.BSS]]&lt;br /&gt;
| Background images (Playstation version)&lt;br /&gt;
|-&lt;br /&gt;
| [[.DAT (Resident Evil 1997)|.DAT]]&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [[DOR (Resident Evil 1997)|.DOR]]&lt;br /&gt;
| Door animation&lt;br /&gt;
|-&lt;br /&gt;
| [[EMD (Resident Evil 1997)|.EMD]]&lt;br /&gt;
| Enemy/player 3D model&lt;br /&gt;
|-&lt;br /&gt;
| [[.EMW (Resident Evil 1997)|.EMW]]&lt;br /&gt;
| Player 3D model with weapon?&lt;br /&gt;
|-&lt;br /&gt;
| [[.ESP (Resident Evil 1997)|.ESP]]&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [[.ETM (Resident Evil 1997)|.ETM]]&lt;br /&gt;
| Texture IMage, see .TIM&lt;br /&gt;
|-&lt;br /&gt;
| [[.HED (Resident Evil 1997)|.HED]]&lt;br /&gt;
| Unknown (Playstation version)&lt;br /&gt;
|-&lt;br /&gt;
| [[.HSB (Resident Evil 1997)|.HSB]]&lt;br /&gt;
| Unknown (Playstation version)&lt;br /&gt;
|-&lt;br /&gt;
| [[.IVM (Resident Evil 1997)|.IVM]]&lt;br /&gt;
| Texture IMage, see .TIM&lt;br /&gt;
|-&lt;br /&gt;
| [[.PAK (Resident Evil 1997)|.PAK]]&lt;br /&gt;
| Background images (PC version)&lt;br /&gt;
|-&lt;br /&gt;
| [[.PIX (Resident Evil 1997)|.PIX]]&lt;br /&gt;
| Raw 16 bits image&lt;br /&gt;
|-&lt;br /&gt;
| [[.PTC (Resident Evil 1997)|.PTC]]&lt;br /&gt;
| Raw 24-bit image&lt;br /&gt;
|-&lt;br /&gt;
| [[RDT (Resident Evil 1997)|.RDT]]&lt;br /&gt;
| Room description&lt;br /&gt;
|-&lt;br /&gt;
| [[.RGB (Resident Evil 1997)|.RGB]]&lt;br /&gt;
| Raw 24-bit image (Playstation version)&lt;br /&gt;
|-&lt;br /&gt;
| [[.STF (Resident Evil 1997)|.STF]]&lt;br /&gt;
| Unknown (Playstation version)&lt;br /&gt;
|-&lt;br /&gt;
| [[.STR (Resident Evil 1997)|.STR]]&lt;br /&gt;
| Movies (Playstation version)&lt;br /&gt;
|-&lt;br /&gt;
| [[TIM (PlayStation graphics)|.TIM]]&lt;br /&gt;
| Texture IMage&lt;br /&gt;
|-&lt;br /&gt;
| [[.VB (Resident Evil 1997)|.VB]]&lt;br /&gt;
| Waveform data format for ADPCM (Playstation version)&lt;br /&gt;
|-&lt;br /&gt;
| [[.TMD (Resident Evil 1997)|.TMD]]&lt;br /&gt;
| 3D model&lt;br /&gt;
|-&lt;br /&gt;
| [[.XAS (Resident Evil 1997)|.XAS]]&lt;br /&gt;
| CD-ROM XA audio stream (Playstation version)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/DOR_(Resident_Evil_1997)</id>
		<title>DOR (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/DOR_(Resident_Evil_1997)"/>
				<updated>2023-08-25T16:03:43Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: Created page with &amp;quot;{{FormatInfo |formattype=electronic |extensions={{ext|dor}} }}  Category:Resident Evil (1997)  {{Restored|2016-08-09|https://web.archive.org/web/20160809012215/http://rewi...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|extensions={{ext|dor}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Resident Evil (1997)]]&lt;br /&gt;
&lt;br /&gt;
{{Restored|2016-08-09|https://web.archive.org/web/20160809012215/http://rewiki.regengedanken.de/wiki/.EMD_(Resident_Evil)}}&lt;br /&gt;
&lt;br /&gt;
The '''.DOR''' file format is used by Resident Evil to store the animation of door, when the player changes room.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
The values are stored in Little-Endian order.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
A DOR file starts with this header, to store offsets to different objects, embedded in the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long unknown0;	/* Offset to ? */&lt;br /&gt;
	unsigned long tmd_offset;	/* Offset to embedded TMD file */&lt;br /&gt;
	unsigned long tim_offset;	/* Offset to embedded TIM file */&lt;br /&gt;
} dor_header_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Offset 0 ==&lt;br /&gt;
&lt;br /&gt;
''Unknown.''&lt;br /&gt;
&lt;br /&gt;
== Offset 1: embedded TMD file ==&lt;br /&gt;
&lt;br /&gt;
See .TMD for further information.&lt;br /&gt;
&lt;br /&gt;
== Offset 2: embedded TIM file ==&lt;br /&gt;
&lt;br /&gt;
See: [[TIM (PlayStation graphics)]]&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)</id>
		<title>RDT (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)"/>
				<updated>2023-08-25T15:57:08Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: /* Offset 10 (*.EDD) - Skeleton animation steps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|extensions={{ext|rdt}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Resident Evil (1997)]]&lt;br /&gt;
&lt;br /&gt;
{{Restored|2017-11-25|https://web.archive.org/web/20171125230810/http://rewiki.regengedanken.de/wiki/.RDT_(Resident_Evil)}}&lt;br /&gt;
&lt;br /&gt;
The '''.RDT''' file format is used to stored the description of a room in Resident Evil on Playstation or PC. It should contain the camera position (to correctly display 3D objects), the background images and sprites used to draw the scene, description of when to change camera, position of enemies when entering room, and so on...&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
The values are stored in Little-Endian order.&lt;br /&gt;
&lt;br /&gt;
The file is always named &amp;lt;code&amp;gt;roomSXX0.rdt&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;roomSXX1.rdt&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; is the game status/stage. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is the location number.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
&lt;br /&gt;
A RDT file starts with this header, to store count for different objects.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  char unknown0;&lt;br /&gt;
  char num_cameras; /* Number of cameras of the room */&lt;br /&gt;
  char num_sound_banks; /* Number of sound banks, stored at offset 18 ? */&lt;br /&gt;
  char unknown1[3];&lt;br /&gt;
  unsigned short unknown2[3];&lt;br /&gt;
&lt;br /&gt;
  /* An array of 3 elements of unknown structure */&lt;br /&gt;
  rdt_header_part_t unknown3[3];&lt;br /&gt;
} rdt_header_t;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  long unknown_pos_x; /* Unknown 3D position */&lt;br /&gt;
  long unknown_pos_y;&lt;br /&gt;
  long unknown_pos_z;&lt;br /&gt;
  unsigned long unknown0[2];&lt;br /&gt;
} rdt_header_part_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Object list ==&lt;br /&gt;
&lt;br /&gt;
Following the header, we have an array of 19 absolute offsets to various objects in the file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
! 0&lt;br /&gt;
| Camera switches (*.RVD)&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| Collision Boundaries for 3D Models (*.SCA)&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for item models)&lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for obstacles &amp;amp; moveable objects)&lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| Block data (*.BLK)&lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| Footstep sound zones (*.FLR)&lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| Initialization Script(s) (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 7&lt;br /&gt;
| Execution Script 0 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 8&lt;br /&gt;
| Execution Script 1 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 9&lt;br /&gt;
| Skeleton animation (*.EMR)&lt;br /&gt;
|-&lt;br /&gt;
! 10&lt;br /&gt;
| Skeleton animation steps (*.EDD)&lt;br /&gt;
|-&lt;br /&gt;
! 11&lt;br /&gt;
| Message text(s) (*.MSG)&lt;br /&gt;
|-&lt;br /&gt;
! 12&lt;br /&gt;
| RAW image (*.RAW), points to several RAW images used for example by Offset 2 for item images&lt;br /&gt;
|-&lt;br /&gt;
! 13&lt;br /&gt;
| Effect animation index (*.ESP)&lt;br /&gt;
|-&lt;br /&gt;
! 14&lt;br /&gt;
| Effect animation data (*.EFF); points to a list of relative offsets to read the EFF/ESP data (read backwards!)&lt;br /&gt;
|-&lt;br /&gt;
! 15&lt;br /&gt;
| Effect animation sprite image(s) (*.TIM); points to the last of those images used for effects&lt;br /&gt;
|-&lt;br /&gt;
! 16&lt;br /&gt;
| Sound attribute table (*.SND); points to a table which is 192 bytes in size&lt;br /&gt;
|-&lt;br /&gt;
! 17&lt;br /&gt;
| offset to a VAB header file (*.VH)&lt;br /&gt;
|-&lt;br /&gt;
! 18&lt;br /&gt;
| offset to VAB sound file (*.VB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Camera positions (*.RID) ===&lt;br /&gt;
&lt;br /&gt;
At absolute offset 0x94 in a file, you'll find an array of 'num_cameras' items with this structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	long masks_offset;	/* Offset to image mask definition */&lt;br /&gt;
	long tim_masks_offset;	/* Offset to TIM file that contains image masks, if not zero */&lt;br /&gt;
	long camera_from_x;	/* Position of the camera */&lt;br /&gt;
	long camera_from_y;&lt;br /&gt;
	long camera_from_z;&lt;br /&gt;
	long camera_to_x;	/* Where the camera is looking to */&lt;br /&gt;
	long camera_to_y;&lt;br /&gt;
	long camera_to_z;&lt;br /&gt;
	long unknown1[3];&lt;br /&gt;
} rdt_camera_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Camera masks (*.PRI) ====&lt;br /&gt;
&lt;br /&gt;
The masks_offset is an offset to an extra structure, which has following header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count_offsets;	/* Number of global offsets, or 0xffff for none */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
} rdt_masks_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you have 'rdt_mask_offset_t' items, which have a 8-byte length. Summing all 'count' fields should equal the 'count_masks' of the rdt_masks_t structure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count;	/* Number of masks, with which to use this structure */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short dst_x;	/* Destination position on background image/screen, to be added */&lt;br /&gt;
	unsigned short dst_y;&lt;br /&gt;
} rdt_mask_offset_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then you have 'rdt_[rect|square]_mask_t' items, which have either 12-byte (rectangular mask) or 8-byte length (square mask). The length is 12 if byte 7 (rdt_square_mask_t.size field) is zero, and 8 otherwise. The 'depth' value is the Z distance of the mask from the camera (low value=near, high value=far).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned char unknown;&lt;br /&gt;
	unsigned char size;	/* Width and height of mask */&lt;br /&gt;
} rdt_square_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned short zero;&lt;br /&gt;
	unsigned short width, height;	/* Dimensions of mask */&lt;br /&gt;
} rdt_rect_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 0 (*.RVD) - Camera zones/switches ===&lt;br /&gt;
&lt;br /&gt;
At offset 0, you'll find the list of camera switches for the current room. The list end with the first 4 bytes are 0xffffffff (i.e for cam0 and cam1 values).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short to; /* Camera number to switch to */&lt;br /&gt;
  unsigned short from; /* Camera number to switch from */&lt;br /&gt;
  short x1,y1; /* Zone the player must enter to switch camera */&lt;br /&gt;
  short x2,y2;&lt;br /&gt;
  short x3,y3;&lt;br /&gt;
  short x4,y4;&lt;br /&gt;
} rdt_camera_switch_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the 'to' value = 9, then it is a zone, defining the area in which the switches will work and 3D objects will be visible while this camera is used, else it is a camera switch.&lt;br /&gt;
&lt;br /&gt;
=== Offset 1 (*.SCA) - Collision Boundaries for 3D Models ===&lt;br /&gt;
&lt;br /&gt;
At offset 1, you'll find the boundary collision data for the current room.&lt;br /&gt;
&lt;br /&gt;
The first 24 bytes are the header which is using the following structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short Cx; /* Ceiling x value */&lt;br /&gt;
  unsigned short Cz; /* Ceiling z value */&lt;br /&gt;
  unsigned long counts[5]; /* Number of objects = sum of these 5 long values */&lt;br /&gt;
} rdt_sca_header_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Followed by the header, the individual boundary entries start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short x1; /* X of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z1; /* Z of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short x2; /* X of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z2; /* Z of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short type; /* type of the boundary plane/object (01=Standard; 03=Circle etc.) */&lt;br /&gt;
  unsigned short floor; /* floor value/ 256 = floor value for use in the game as height definition */ &lt;br /&gt;
} rdt_sca_obj_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this the data block ends with a 4 byte unsigned long holding the total size of the SCA data block in bytes.&lt;br /&gt;
&lt;br /&gt;
=== Offset 2 (*.TMD/*.TIM) - Item 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset2_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 3 (*.TMD/*.TIM) - Room 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset3_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 4 (*.BLK) - Block data ===&lt;br /&gt;
&lt;br /&gt;
It's unknown what this data is used for. It defines plane based areas that look like &amp;quot;inversed&amp;quot; collision boundaries.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
&lt;br /&gt;
typedef struct {&lt;br /&gt;
        unsigned short x1;          /* X of the top-left corner of the object */&lt;br /&gt;
        unsigned short z1;          /* Z of the top-left corner of the object */&lt;br /&gt;
        unsigned short x2;          /* X of the bottom-right corner of the object */&lt;br /&gt;
        unsigned short z2;          /* Z of the bottom-right corner of the object */&lt;br /&gt;
	unsigned short int Dir_bit;&lt;br /&gt;
	unsigned short int Abut;&lt;br /&gt;
} rdt_blk_obj_t;&lt;br /&gt;
&lt;br /&gt;
unsigned short int unknown;	/* unknown; follows after last structure */&lt;br /&gt;
&lt;br /&gt;
rdt_blk_obj_t Block[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 5 (*.FLR) - Floor/footstep sound areas ===&lt;br /&gt;
&lt;br /&gt;
This data defines the footstep sound areas and which sound to use. It is also related to the script opcode, 'Flr_set'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
typedef struct {&lt;br /&gt;
	signed short int x;         /* x coordinate where the area is drawn from */&lt;br /&gt;
        signed short int y;         /* y coordinate where the area is drawn from */&lt;br /&gt;
	signed short int x_width;   /* x width of the area */&lt;br /&gt;
        signed short int y_width;   /* y width of the area */&lt;br /&gt;
	unsigned short int sound;   /* footstep ID sound to use */&lt;br /&gt;
} rdt_flr_obj_t;&lt;br /&gt;
&lt;br /&gt;
rdt_flr_obj_t Floor[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 6 (*.SCD) - Scenario data ===&lt;br /&gt;
&lt;br /&gt;
This is the initialisation script for the room. It starts with an unsigned short giving the length of the script in bytes. Then follows the script, in bytecode-style.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Byte&lt;br /&gt;
| Instruction&lt;br /&gt;
| Length&lt;br /&gt;
| Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Nop&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| If&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0x01 */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
} script_if_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This structure is followed by one or several conditions for the if (condition) instruction. Any condition evaluated to false will end the if () block.&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| Else&lt;br /&gt;
| 2&lt;br /&gt;
| Follows: byte with ELSE block length. Note: it's either If/Endif, or If/Else; there is no If/Else/Endif sequence.&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| End If&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| BIT_TEST&lt;br /&gt;
| 4&lt;br /&gt;
| Bit test&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x04 */&lt;br /&gt;
	unsigned char object;&lt;br /&gt;
	unsigned char param;	/* Bits 7-5: Longword index in object, see array following */&lt;br /&gt;
				/* Bits 4-0: Bit number to test */&lt;br /&gt;
	unsigned char op;	/* Operation */&lt;br /&gt;
				/* 0x00:test bit is 0 */&lt;br /&gt;
				/* 0x01:test bit is 1 */&lt;br /&gt;
} script_bit_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| BIT_OP&lt;br /&gt;
| 4&lt;br /&gt;
| Bit operation&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x05 */&lt;br /&gt;
	unsigned char object;	/* Number of object to operate on, see array following */&lt;br /&gt;
	unsigned char param;	/* Bits 7-5: Longword index in object */&lt;br /&gt;
				/* Bits 4-0: Bit number to clear/set/change is (31-this field value) */&lt;br /&gt;
	unsigned char op;	/* Operation */&lt;br /&gt;
				/* 0x00:clear bit */&lt;br /&gt;
				/* 0x01:set bit */&lt;br /&gt;
				/* 0x02:change bit */&lt;br /&gt;
} script_bit_op_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| OBJ06_TEST&lt;br /&gt;
| 4&lt;br /&gt;
| Compare values&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x06 */&lt;br /&gt;
	unsigned char src;	/* Index in some object for source value */&lt;br /&gt;
				/* 0x00:Current stage */&lt;br /&gt;
				/* 0x01:Current room */&lt;br /&gt;
				/* 0x02:Current camera */&lt;br /&gt;
				/* 0x03:Stage and room */&lt;br /&gt;
				/* 0x04:Previous/next camera */&lt;br /&gt;
				/* 0x05:? */&lt;br /&gt;
				/* 0x06:? */&lt;br /&gt;
				/* 0x07:? Used in instruction 0x1a */&lt;br /&gt;
				/* 0x08:? Used in instruction 0x1c */&lt;br /&gt;
				/* 0x09:Flags for current camera */&lt;br /&gt;
	unsigned char func;	/* Compare function */&lt;br /&gt;
				/* 0x00:EQ */&lt;br /&gt;
				/* 0x01:LT */&lt;br /&gt;
				/* 0x02:LE */&lt;br /&gt;
				/* 0x03:GT */&lt;br /&gt;
				/* 0x04:GE */&lt;br /&gt;
				/* 0x05:NE */&lt;br /&gt;
	char param;		/* Raw value to compare against */&lt;br /&gt;
} script_obj06_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| OBJ07_TEST&lt;br /&gt;
| 6&lt;br /&gt;
| Compare values&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x07 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned char src;	/* Word index in some object for source value */&lt;br /&gt;
				/* (not the same object as instruction 0x06) */&lt;br /&gt;
	unsigned char func;	/* Compare function */&lt;br /&gt;
				/* 0x00:EQ */&lt;br /&gt;
				/* 0x01:LT */&lt;br /&gt;
				/* 0x02:LE */&lt;br /&gt;
				/* 0x03:GT */&lt;br /&gt;
				/* 0x04:GE */&lt;br /&gt;
				/* 0x05:NE */&lt;br /&gt;
	short param;		/* Raw value to compare against */&lt;br /&gt;
} script_obj07_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| STAGEROOMCAM_SET&lt;br /&gt;
| 4&lt;br /&gt;
| Set value for stage, room or camera&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x08 */&lt;br /&gt;
	unsigned char id;	/* 0: stage, 1: room, 2: camera */&lt;br /&gt;
	unsigned short value;&lt;br /&gt;
} script_stageroomcam_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| CUT_SET&lt;br /&gt;
| 2&lt;br /&gt;
| Switch to prev/next camera, set it as current camera&lt;br /&gt;
|-&lt;br /&gt;
| 0x0a&lt;br /&gt;
| CUT_SET&lt;br /&gt;
| 2&lt;br /&gt;
| Switch to current camera, set it as prev/next camera&lt;br /&gt;
|-&lt;br /&gt;
| 0x0b&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0c&lt;br /&gt;
| DOOR_SET&lt;br /&gt;
| 26&lt;br /&gt;
| TODO: find where next_camera is stored&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0c */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	short x,y,w,h;&lt;br /&gt;
	unsigned char unknown0[5];&lt;br /&gt;
	unsigned char next_stage_and_room;	/* bits 7,6,5: stage, 4,3,2,1,0: room */&lt;br /&gt;
	short next_x,next_y,next_z;&lt;br /&gt;
	short next_dir;&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
} script_door_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note: if stage=0, we must keep current stage, else switch stage.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0d&lt;br /&gt;
| ITEM_SET&lt;br /&gt;
| 18&lt;br /&gt;
| Pickable items, objects, obstacles&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0d */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	short x,y,w,h;&lt;br /&gt;
	unsigned char type;	/* 0x02: message, obstacle? */&lt;br /&gt;
				/* 0x07: trigger,event,movable object? */&lt;br /&gt;
				/* 0x08: box */&lt;br /&gt;
				/* 0x09: pickable object, trigger? */&lt;br /&gt;
				/* 0x10: typewriter */&lt;br /&gt;
	unsigned char unknown[7];&lt;br /&gt;
} script_item_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0e&lt;br /&gt;
| Nop&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0f&lt;br /&gt;
| ?&lt;br /&gt;
| 8&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0f */&lt;br /&gt;
	unsigned char bitmask;&lt;br /&gt;
	unsigned short unknown[3];&lt;br /&gt;
} script_inst0f_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| OBJ10_TEST&lt;br /&gt;
| 2&lt;br /&gt;
| Check if obj10 has value given as parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x10 */&lt;br /&gt;
	char value;&lt;br /&gt;
} script_obj10_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| OBJ11_TEST&lt;br /&gt;
| 2&lt;br /&gt;
| Check if obj11 has value given as parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x11 */&lt;br /&gt;
	char value;&lt;br /&gt;
} script_obj11_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| Item 0x12&lt;br /&gt;
| 10&lt;br /&gt;
| Typewriter? Stairs?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x12 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown0[2];&lt;br /&gt;
	short unknown1[3];&lt;br /&gt;
} script_inst12_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| Item 0x13&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x13 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown0[2];&lt;br /&gt;
} script_inst13_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x14 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned char param1;&lt;br /&gt;
	unsigned char param2;&lt;br /&gt;
} script_inst14_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| Volume set?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| ?&lt;br /&gt;
| 10&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ITEM_MODEL_SET&lt;br /&gt;
| 26&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x18 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown[24];&lt;br /&gt;
} script_item_model_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| OBJ19_SET&lt;br /&gt;
| 4&lt;br /&gt;
| Set value in obj19&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x09 */&lt;br /&gt;
	unsigned char src;	/* Index in some object */&lt;br /&gt;
	char value;		/* New value */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
} script_obj19_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1a&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1b&lt;br /&gt;
| EM_SET&lt;br /&gt;
| 22&lt;br /&gt;
| Entity (enemy, other character)&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1b */&lt;br /&gt;
	unsigned char model;&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned char killed;	/* 0xff for non enemy, else index in killed array to avoid respawn */&lt;br /&gt;
	unsigned char unknown1[2];&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
	unsigned short a;&lt;br /&gt;
	unsigned short unknown2;&lt;br /&gt;
	unsigned short x;&lt;br /&gt;
	unsigned short y;&lt;br /&gt;
	unsigned short z;&lt;br /&gt;
	unsigned char id;	/* ID of entity, used for example for EM_POS_SET */&lt;br /&gt;
	unsigned char unknown3[3];&lt;br /&gt;
} script_em_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1c */&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned short unknown1[2];&lt;br /&gt;
} script_inst1c_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1d&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1e&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1e */&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
} script_inst1e_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1f&lt;br /&gt;
| OM_SET&lt;br /&gt;
| 28&lt;br /&gt;
| Movable (crate, statue) or animated (lid) objects?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1f */&lt;br /&gt;
	unsigned char id;	/* Bits 5-0: Index in array stored at offset 2 of RDT file */&lt;br /&gt;
	unsigned char type;	/* 0x11: safe lid&amp;amp;nbsp;? */&lt;br /&gt;
	unsigned char unknown[25];&lt;br /&gt;
} script_om_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| PLAYER_POS_SET&lt;br /&gt;
| 14&lt;br /&gt;
| Change player position and direction&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x20 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short unknown0,angle,unknown1;&lt;br /&gt;
	unsigned short x,y,z;&lt;br /&gt;
} script_player_pos_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| EM_POS_SET&lt;br /&gt;
| 14&lt;br /&gt;
| Change entity position and direction&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x21 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned short dummy;&lt;br /&gt;
	unsigned short angle;&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short x,y,z;&lt;br /&gt;
} script_em_pos_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x23 */&lt;br /&gt;
	unsigned char flag;&lt;br /&gt;
} script_inst23_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x27&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| ?&lt;br /&gt;
| 4,6 or 8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| Select sound bank?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2a&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2b&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2d&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2f&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| ?&lt;br /&gt;
| 2 or 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| ?&lt;br /&gt;
| 8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| Set value for internal array&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x37 */&lt;br /&gt;
	unsigned char row;	/* row (0-7) column (0-31) for internal byte array */&lt;br /&gt;
	unsigned char col;&lt;br /&gt;
	unsigned char value;&lt;br /&gt;
} script_inst37_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3a&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3b&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3c&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3d&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3e&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3f&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| ?&lt;br /&gt;
| 16&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| ?&lt;br /&gt;
| 2+12*n+2*m (was 44)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| ?&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4a&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4b&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4c&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| Set value in OBJ06 ?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x4c */&lt;br /&gt;
	unsigned char unknown[3];&lt;br /&gt;
} script_inst4c_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4d&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4e&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4f&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Objects for bit operations ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object number&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Game status. Bit 23:Player character (0: Chris, 1: Jill, or vice versa).&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 7 (*.SCD) - Execution script for room ===&lt;br /&gt;
&lt;br /&gt;
This script is run regularly to update stuff in current room. It follows same structure as the one at offset 6.&lt;br /&gt;
&lt;br /&gt;
=== Offset 8, Script events ? ===&lt;br /&gt;
&lt;br /&gt;
This structure starts with a NULL terminated list of [[unsigned long]], which are offsets relative to start of this object. These offsets store also some bytecodes, different than those above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf6&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf7&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf7&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf8&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf8&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf9&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1 or 3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfa&amp;lt;/code&amp;gt;&lt;br /&gt;
| For&lt;br /&gt;
| 4&lt;br /&gt;
| Initialize a for loop. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfa */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short count;&lt;br /&gt;
} event_for_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfb&amp;lt;/code&amp;gt;&lt;br /&gt;
| Next&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set_Inst&lt;br /&gt;
| variable	&lt;br /&gt;
| Initialize bytecode instruction to execute later. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfc */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
	unsigned char bytecode_inst[];&lt;br /&gt;
} event_set_inst_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfd&amp;lt;/code&amp;gt;&lt;br /&gt;
| Exec_inst&lt;br /&gt;
| 1&lt;br /&gt;
| Execute bytecode instruction previously set with 0xfc instruction.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfe&amp;lt;/code&amp;gt;&lt;br /&gt;
| Sleep, process next event&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt;&lt;br /&gt;
| Disable event&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 9 (*.EMR) - Skeleton animation ===&lt;br /&gt;
&lt;br /&gt;
See File/Section 0 of [[EMD (Resident Evil 1997)]].&lt;br /&gt;
&lt;br /&gt;
=== Offset 10 (*.EDD) - Skeleton animation steps ===&lt;br /&gt;
&lt;br /&gt;
See File/Section 1 of [[EMD (Resident Evil 1997)]].&lt;br /&gt;
&lt;br /&gt;
=== Offset 11 (*.MSG) - Text messages ===&lt;br /&gt;
&lt;br /&gt;
First, you have an arrays of [[unsigned short]], which are relative offsets to the beginning of this object. So the number of items is the first offset/2 (if we are lucky that the first offset always has the lowest value).&lt;br /&gt;
&lt;br /&gt;
It contains the texts for cutscenes, dialogs, examining objects.&lt;br /&gt;
&lt;br /&gt;
Conversion table, from byte to ASCII value:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! 0&lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
! 7&lt;br /&gt;
! 8&lt;br /&gt;
! 9&lt;br /&gt;
! 10&lt;br /&gt;
! 11&lt;br /&gt;
! 12&lt;br /&gt;
! 13&lt;br /&gt;
! 14&lt;br /&gt;
! 15&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
|  &lt;br /&gt;
| .&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| (&lt;br /&gt;
| )&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
! 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| :&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| ,&lt;br /&gt;
| &amp;quot;&lt;br /&gt;
| !&lt;br /&gt;
| ?&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| A&lt;br /&gt;
| B&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
! 0x20&lt;br /&gt;
| D&lt;br /&gt;
| E&lt;br /&gt;
| F&lt;br /&gt;
| G&lt;br /&gt;
| H&lt;br /&gt;
| I&lt;br /&gt;
| J&lt;br /&gt;
| K&lt;br /&gt;
| L&lt;br /&gt;
| M&lt;br /&gt;
| N&lt;br /&gt;
| O&lt;br /&gt;
| P&lt;br /&gt;
| Q&lt;br /&gt;
| R&lt;br /&gt;
| S&lt;br /&gt;
|-&lt;br /&gt;
! 0x30&lt;br /&gt;
| T&lt;br /&gt;
| U&lt;br /&gt;
| V&lt;br /&gt;
| W&lt;br /&gt;
| X&lt;br /&gt;
| Y&lt;br /&gt;
| Z&lt;br /&gt;
| [&lt;br /&gt;
| /&lt;br /&gt;
| ]&lt;br /&gt;
| '&lt;br /&gt;
| -&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| a&lt;br /&gt;
| b&lt;br /&gt;
| c&lt;br /&gt;
|-&lt;br /&gt;
! 0x40&lt;br /&gt;
| d&lt;br /&gt;
| e&lt;br /&gt;
| f&lt;br /&gt;
| g&lt;br /&gt;
| h&lt;br /&gt;
| i&lt;br /&gt;
| j&lt;br /&gt;
| k&lt;br /&gt;
| l&lt;br /&gt;
| m&lt;br /&gt;
| n&lt;br /&gt;
| o&lt;br /&gt;
| p&lt;br /&gt;
| q&lt;br /&gt;
| r&lt;br /&gt;
| s&lt;br /&gt;
|-&lt;br /&gt;
! 0x50&lt;br /&gt;
| t&lt;br /&gt;
| u&lt;br /&gt;
| v&lt;br /&gt;
| w&lt;br /&gt;
| x&lt;br /&gt;
| y&lt;br /&gt;
| z&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Codes above 0x57 may also be different given the language, for characters with trema, accents and the like. The complete character table to use resides in the image file &amp;lt;code&amp;gt;horr/[country]/data/fontus.tim&amp;lt;/code&amp;gt;, in the second zone of the image.&lt;br /&gt;
&lt;br /&gt;
There are also some formatting codes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| End of text&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| Carriage return&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| Pause&lt;br /&gt;
|-&lt;br /&gt;
! 0x08&lt;br /&gt;
| Yes/No question&lt;br /&gt;
|-&lt;br /&gt;
! 0x74&lt;br /&gt;
| &amp;quot;S.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x75&lt;br /&gt;
| &amp;quot;T.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x76&lt;br /&gt;
| &amp;quot;A.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x77&lt;br /&gt;
| &amp;quot;R.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x79&lt;br /&gt;
| &amp;quot;. &amp;quot; string&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)</id>
		<title>RDT (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)"/>
				<updated>2023-08-25T15:57:01Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: /* Offset 9 (*.EMR) - Skeleton animation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|extensions={{ext|rdt}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Resident Evil (1997)]]&lt;br /&gt;
&lt;br /&gt;
{{Restored|2017-11-25|https://web.archive.org/web/20171125230810/http://rewiki.regengedanken.de/wiki/.RDT_(Resident_Evil)}}&lt;br /&gt;
&lt;br /&gt;
The '''.RDT''' file format is used to stored the description of a room in Resident Evil on Playstation or PC. It should contain the camera position (to correctly display 3D objects), the background images and sprites used to draw the scene, description of when to change camera, position of enemies when entering room, and so on...&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
The values are stored in Little-Endian order.&lt;br /&gt;
&lt;br /&gt;
The file is always named &amp;lt;code&amp;gt;roomSXX0.rdt&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;roomSXX1.rdt&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; is the game status/stage. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is the location number.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
&lt;br /&gt;
A RDT file starts with this header, to store count for different objects.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  char unknown0;&lt;br /&gt;
  char num_cameras; /* Number of cameras of the room */&lt;br /&gt;
  char num_sound_banks; /* Number of sound banks, stored at offset 18 ? */&lt;br /&gt;
  char unknown1[3];&lt;br /&gt;
  unsigned short unknown2[3];&lt;br /&gt;
&lt;br /&gt;
  /* An array of 3 elements of unknown structure */&lt;br /&gt;
  rdt_header_part_t unknown3[3];&lt;br /&gt;
} rdt_header_t;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  long unknown_pos_x; /* Unknown 3D position */&lt;br /&gt;
  long unknown_pos_y;&lt;br /&gt;
  long unknown_pos_z;&lt;br /&gt;
  unsigned long unknown0[2];&lt;br /&gt;
} rdt_header_part_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Object list ==&lt;br /&gt;
&lt;br /&gt;
Following the header, we have an array of 19 absolute offsets to various objects in the file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
! 0&lt;br /&gt;
| Camera switches (*.RVD)&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| Collision Boundaries for 3D Models (*.SCA)&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for item models)&lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for obstacles &amp;amp; moveable objects)&lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| Block data (*.BLK)&lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| Footstep sound zones (*.FLR)&lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| Initialization Script(s) (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 7&lt;br /&gt;
| Execution Script 0 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 8&lt;br /&gt;
| Execution Script 1 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 9&lt;br /&gt;
| Skeleton animation (*.EMR)&lt;br /&gt;
|-&lt;br /&gt;
! 10&lt;br /&gt;
| Skeleton animation steps (*.EDD)&lt;br /&gt;
|-&lt;br /&gt;
! 11&lt;br /&gt;
| Message text(s) (*.MSG)&lt;br /&gt;
|-&lt;br /&gt;
! 12&lt;br /&gt;
| RAW image (*.RAW), points to several RAW images used for example by Offset 2 for item images&lt;br /&gt;
|-&lt;br /&gt;
! 13&lt;br /&gt;
| Effect animation index (*.ESP)&lt;br /&gt;
|-&lt;br /&gt;
! 14&lt;br /&gt;
| Effect animation data (*.EFF); points to a list of relative offsets to read the EFF/ESP data (read backwards!)&lt;br /&gt;
|-&lt;br /&gt;
! 15&lt;br /&gt;
| Effect animation sprite image(s) (*.TIM); points to the last of those images used for effects&lt;br /&gt;
|-&lt;br /&gt;
! 16&lt;br /&gt;
| Sound attribute table (*.SND); points to a table which is 192 bytes in size&lt;br /&gt;
|-&lt;br /&gt;
! 17&lt;br /&gt;
| offset to a VAB header file (*.VH)&lt;br /&gt;
|-&lt;br /&gt;
! 18&lt;br /&gt;
| offset to VAB sound file (*.VB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Camera positions (*.RID) ===&lt;br /&gt;
&lt;br /&gt;
At absolute offset 0x94 in a file, you'll find an array of 'num_cameras' items with this structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	long masks_offset;	/* Offset to image mask definition */&lt;br /&gt;
	long tim_masks_offset;	/* Offset to TIM file that contains image masks, if not zero */&lt;br /&gt;
	long camera_from_x;	/* Position of the camera */&lt;br /&gt;
	long camera_from_y;&lt;br /&gt;
	long camera_from_z;&lt;br /&gt;
	long camera_to_x;	/* Where the camera is looking to */&lt;br /&gt;
	long camera_to_y;&lt;br /&gt;
	long camera_to_z;&lt;br /&gt;
	long unknown1[3];&lt;br /&gt;
} rdt_camera_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Camera masks (*.PRI) ====&lt;br /&gt;
&lt;br /&gt;
The masks_offset is an offset to an extra structure, which has following header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count_offsets;	/* Number of global offsets, or 0xffff for none */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
} rdt_masks_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you have 'rdt_mask_offset_t' items, which have a 8-byte length. Summing all 'count' fields should equal the 'count_masks' of the rdt_masks_t structure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count;	/* Number of masks, with which to use this structure */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short dst_x;	/* Destination position on background image/screen, to be added */&lt;br /&gt;
	unsigned short dst_y;&lt;br /&gt;
} rdt_mask_offset_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then you have 'rdt_[rect|square]_mask_t' items, which have either 12-byte (rectangular mask) or 8-byte length (square mask). The length is 12 if byte 7 (rdt_square_mask_t.size field) is zero, and 8 otherwise. The 'depth' value is the Z distance of the mask from the camera (low value=near, high value=far).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned char unknown;&lt;br /&gt;
	unsigned char size;	/* Width and height of mask */&lt;br /&gt;
} rdt_square_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned short zero;&lt;br /&gt;
	unsigned short width, height;	/* Dimensions of mask */&lt;br /&gt;
} rdt_rect_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 0 (*.RVD) - Camera zones/switches ===&lt;br /&gt;
&lt;br /&gt;
At offset 0, you'll find the list of camera switches for the current room. The list end with the first 4 bytes are 0xffffffff (i.e for cam0 and cam1 values).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short to; /* Camera number to switch to */&lt;br /&gt;
  unsigned short from; /* Camera number to switch from */&lt;br /&gt;
  short x1,y1; /* Zone the player must enter to switch camera */&lt;br /&gt;
  short x2,y2;&lt;br /&gt;
  short x3,y3;&lt;br /&gt;
  short x4,y4;&lt;br /&gt;
} rdt_camera_switch_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the 'to' value = 9, then it is a zone, defining the area in which the switches will work and 3D objects will be visible while this camera is used, else it is a camera switch.&lt;br /&gt;
&lt;br /&gt;
=== Offset 1 (*.SCA) - Collision Boundaries for 3D Models ===&lt;br /&gt;
&lt;br /&gt;
At offset 1, you'll find the boundary collision data for the current room.&lt;br /&gt;
&lt;br /&gt;
The first 24 bytes are the header which is using the following structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short Cx; /* Ceiling x value */&lt;br /&gt;
  unsigned short Cz; /* Ceiling z value */&lt;br /&gt;
  unsigned long counts[5]; /* Number of objects = sum of these 5 long values */&lt;br /&gt;
} rdt_sca_header_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Followed by the header, the individual boundary entries start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short x1; /* X of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z1; /* Z of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short x2; /* X of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z2; /* Z of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short type; /* type of the boundary plane/object (01=Standard; 03=Circle etc.) */&lt;br /&gt;
  unsigned short floor; /* floor value/ 256 = floor value for use in the game as height definition */ &lt;br /&gt;
} rdt_sca_obj_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this the data block ends with a 4 byte unsigned long holding the total size of the SCA data block in bytes.&lt;br /&gt;
&lt;br /&gt;
=== Offset 2 (*.TMD/*.TIM) - Item 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset2_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 3 (*.TMD/*.TIM) - Room 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset3_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 4 (*.BLK) - Block data ===&lt;br /&gt;
&lt;br /&gt;
It's unknown what this data is used for. It defines plane based areas that look like &amp;quot;inversed&amp;quot; collision boundaries.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
&lt;br /&gt;
typedef struct {&lt;br /&gt;
        unsigned short x1;          /* X of the top-left corner of the object */&lt;br /&gt;
        unsigned short z1;          /* Z of the top-left corner of the object */&lt;br /&gt;
        unsigned short x2;          /* X of the bottom-right corner of the object */&lt;br /&gt;
        unsigned short z2;          /* Z of the bottom-right corner of the object */&lt;br /&gt;
	unsigned short int Dir_bit;&lt;br /&gt;
	unsigned short int Abut;&lt;br /&gt;
} rdt_blk_obj_t;&lt;br /&gt;
&lt;br /&gt;
unsigned short int unknown;	/* unknown; follows after last structure */&lt;br /&gt;
&lt;br /&gt;
rdt_blk_obj_t Block[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 5 (*.FLR) - Floor/footstep sound areas ===&lt;br /&gt;
&lt;br /&gt;
This data defines the footstep sound areas and which sound to use. It is also related to the script opcode, 'Flr_set'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
typedef struct {&lt;br /&gt;
	signed short int x;         /* x coordinate where the area is drawn from */&lt;br /&gt;
        signed short int y;         /* y coordinate where the area is drawn from */&lt;br /&gt;
	signed short int x_width;   /* x width of the area */&lt;br /&gt;
        signed short int y_width;   /* y width of the area */&lt;br /&gt;
	unsigned short int sound;   /* footstep ID sound to use */&lt;br /&gt;
} rdt_flr_obj_t;&lt;br /&gt;
&lt;br /&gt;
rdt_flr_obj_t Floor[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 6 (*.SCD) - Scenario data ===&lt;br /&gt;
&lt;br /&gt;
This is the initialisation script for the room. It starts with an unsigned short giving the length of the script in bytes. Then follows the script, in bytecode-style.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Byte&lt;br /&gt;
| Instruction&lt;br /&gt;
| Length&lt;br /&gt;
| Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Nop&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| If&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0x01 */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
} script_if_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This structure is followed by one or several conditions for the if (condition) instruction. Any condition evaluated to false will end the if () block.&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| Else&lt;br /&gt;
| 2&lt;br /&gt;
| Follows: byte with ELSE block length. Note: it's either If/Endif, or If/Else; there is no If/Else/Endif sequence.&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| End If&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| BIT_TEST&lt;br /&gt;
| 4&lt;br /&gt;
| Bit test&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x04 */&lt;br /&gt;
	unsigned char object;&lt;br /&gt;
	unsigned char param;	/* Bits 7-5: Longword index in object, see array following */&lt;br /&gt;
				/* Bits 4-0: Bit number to test */&lt;br /&gt;
	unsigned char op;	/* Operation */&lt;br /&gt;
				/* 0x00:test bit is 0 */&lt;br /&gt;
				/* 0x01:test bit is 1 */&lt;br /&gt;
} script_bit_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| BIT_OP&lt;br /&gt;
| 4&lt;br /&gt;
| Bit operation&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x05 */&lt;br /&gt;
	unsigned char object;	/* Number of object to operate on, see array following */&lt;br /&gt;
	unsigned char param;	/* Bits 7-5: Longword index in object */&lt;br /&gt;
				/* Bits 4-0: Bit number to clear/set/change is (31-this field value) */&lt;br /&gt;
	unsigned char op;	/* Operation */&lt;br /&gt;
				/* 0x00:clear bit */&lt;br /&gt;
				/* 0x01:set bit */&lt;br /&gt;
				/* 0x02:change bit */&lt;br /&gt;
} script_bit_op_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| OBJ06_TEST&lt;br /&gt;
| 4&lt;br /&gt;
| Compare values&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x06 */&lt;br /&gt;
	unsigned char src;	/* Index in some object for source value */&lt;br /&gt;
				/* 0x00:Current stage */&lt;br /&gt;
				/* 0x01:Current room */&lt;br /&gt;
				/* 0x02:Current camera */&lt;br /&gt;
				/* 0x03:Stage and room */&lt;br /&gt;
				/* 0x04:Previous/next camera */&lt;br /&gt;
				/* 0x05:? */&lt;br /&gt;
				/* 0x06:? */&lt;br /&gt;
				/* 0x07:? Used in instruction 0x1a */&lt;br /&gt;
				/* 0x08:? Used in instruction 0x1c */&lt;br /&gt;
				/* 0x09:Flags for current camera */&lt;br /&gt;
	unsigned char func;	/* Compare function */&lt;br /&gt;
				/* 0x00:EQ */&lt;br /&gt;
				/* 0x01:LT */&lt;br /&gt;
				/* 0x02:LE */&lt;br /&gt;
				/* 0x03:GT */&lt;br /&gt;
				/* 0x04:GE */&lt;br /&gt;
				/* 0x05:NE */&lt;br /&gt;
	char param;		/* Raw value to compare against */&lt;br /&gt;
} script_obj06_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| OBJ07_TEST&lt;br /&gt;
| 6&lt;br /&gt;
| Compare values&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x07 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned char src;	/* Word index in some object for source value */&lt;br /&gt;
				/* (not the same object as instruction 0x06) */&lt;br /&gt;
	unsigned char func;	/* Compare function */&lt;br /&gt;
				/* 0x00:EQ */&lt;br /&gt;
				/* 0x01:LT */&lt;br /&gt;
				/* 0x02:LE */&lt;br /&gt;
				/* 0x03:GT */&lt;br /&gt;
				/* 0x04:GE */&lt;br /&gt;
				/* 0x05:NE */&lt;br /&gt;
	short param;		/* Raw value to compare against */&lt;br /&gt;
} script_obj07_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| STAGEROOMCAM_SET&lt;br /&gt;
| 4&lt;br /&gt;
| Set value for stage, room or camera&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x08 */&lt;br /&gt;
	unsigned char id;	/* 0: stage, 1: room, 2: camera */&lt;br /&gt;
	unsigned short value;&lt;br /&gt;
} script_stageroomcam_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| CUT_SET&lt;br /&gt;
| 2&lt;br /&gt;
| Switch to prev/next camera, set it as current camera&lt;br /&gt;
|-&lt;br /&gt;
| 0x0a&lt;br /&gt;
| CUT_SET&lt;br /&gt;
| 2&lt;br /&gt;
| Switch to current camera, set it as prev/next camera&lt;br /&gt;
|-&lt;br /&gt;
| 0x0b&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0c&lt;br /&gt;
| DOOR_SET&lt;br /&gt;
| 26&lt;br /&gt;
| TODO: find where next_camera is stored&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0c */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	short x,y,w,h;&lt;br /&gt;
	unsigned char unknown0[5];&lt;br /&gt;
	unsigned char next_stage_and_room;	/* bits 7,6,5: stage, 4,3,2,1,0: room */&lt;br /&gt;
	short next_x,next_y,next_z;&lt;br /&gt;
	short next_dir;&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
} script_door_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note: if stage=0, we must keep current stage, else switch stage.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0d&lt;br /&gt;
| ITEM_SET&lt;br /&gt;
| 18&lt;br /&gt;
| Pickable items, objects, obstacles&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0d */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	short x,y,w,h;&lt;br /&gt;
	unsigned char type;	/* 0x02: message, obstacle? */&lt;br /&gt;
				/* 0x07: trigger,event,movable object? */&lt;br /&gt;
				/* 0x08: box */&lt;br /&gt;
				/* 0x09: pickable object, trigger? */&lt;br /&gt;
				/* 0x10: typewriter */&lt;br /&gt;
	unsigned char unknown[7];&lt;br /&gt;
} script_item_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0e&lt;br /&gt;
| Nop&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0f&lt;br /&gt;
| ?&lt;br /&gt;
| 8&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0f */&lt;br /&gt;
	unsigned char bitmask;&lt;br /&gt;
	unsigned short unknown[3];&lt;br /&gt;
} script_inst0f_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| OBJ10_TEST&lt;br /&gt;
| 2&lt;br /&gt;
| Check if obj10 has value given as parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x10 */&lt;br /&gt;
	char value;&lt;br /&gt;
} script_obj10_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| OBJ11_TEST&lt;br /&gt;
| 2&lt;br /&gt;
| Check if obj11 has value given as parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x11 */&lt;br /&gt;
	char value;&lt;br /&gt;
} script_obj11_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| Item 0x12&lt;br /&gt;
| 10&lt;br /&gt;
| Typewriter? Stairs?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x12 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown0[2];&lt;br /&gt;
	short unknown1[3];&lt;br /&gt;
} script_inst12_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| Item 0x13&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x13 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown0[2];&lt;br /&gt;
} script_inst13_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x14 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned char param1;&lt;br /&gt;
	unsigned char param2;&lt;br /&gt;
} script_inst14_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| Volume set?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| ?&lt;br /&gt;
| 10&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ITEM_MODEL_SET&lt;br /&gt;
| 26&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x18 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown[24];&lt;br /&gt;
} script_item_model_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| OBJ19_SET&lt;br /&gt;
| 4&lt;br /&gt;
| Set value in obj19&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x09 */&lt;br /&gt;
	unsigned char src;	/* Index in some object */&lt;br /&gt;
	char value;		/* New value */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
} script_obj19_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1a&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1b&lt;br /&gt;
| EM_SET&lt;br /&gt;
| 22&lt;br /&gt;
| Entity (enemy, other character)&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1b */&lt;br /&gt;
	unsigned char model;&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned char killed;	/* 0xff for non enemy, else index in killed array to avoid respawn */&lt;br /&gt;
	unsigned char unknown1[2];&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
	unsigned short a;&lt;br /&gt;
	unsigned short unknown2;&lt;br /&gt;
	unsigned short x;&lt;br /&gt;
	unsigned short y;&lt;br /&gt;
	unsigned short z;&lt;br /&gt;
	unsigned char id;	/* ID of entity, used for example for EM_POS_SET */&lt;br /&gt;
	unsigned char unknown3[3];&lt;br /&gt;
} script_em_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1c */&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned short unknown1[2];&lt;br /&gt;
} script_inst1c_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1d&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1e&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1e */&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
} script_inst1e_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1f&lt;br /&gt;
| OM_SET&lt;br /&gt;
| 28&lt;br /&gt;
| Movable (crate, statue) or animated (lid) objects?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1f */&lt;br /&gt;
	unsigned char id;	/* Bits 5-0: Index in array stored at offset 2 of RDT file */&lt;br /&gt;
	unsigned char type;	/* 0x11: safe lid&amp;amp;nbsp;? */&lt;br /&gt;
	unsigned char unknown[25];&lt;br /&gt;
} script_om_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| PLAYER_POS_SET&lt;br /&gt;
| 14&lt;br /&gt;
| Change player position and direction&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x20 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short unknown0,angle,unknown1;&lt;br /&gt;
	unsigned short x,y,z;&lt;br /&gt;
} script_player_pos_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| EM_POS_SET&lt;br /&gt;
| 14&lt;br /&gt;
| Change entity position and direction&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x21 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned short dummy;&lt;br /&gt;
	unsigned short angle;&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short x,y,z;&lt;br /&gt;
} script_em_pos_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x23 */&lt;br /&gt;
	unsigned char flag;&lt;br /&gt;
} script_inst23_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x27&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| ?&lt;br /&gt;
| 4,6 or 8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| Select sound bank?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2a&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2b&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2d&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2f&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| ?&lt;br /&gt;
| 2 or 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| ?&lt;br /&gt;
| 8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| Set value for internal array&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x37 */&lt;br /&gt;
	unsigned char row;	/* row (0-7) column (0-31) for internal byte array */&lt;br /&gt;
	unsigned char col;&lt;br /&gt;
	unsigned char value;&lt;br /&gt;
} script_inst37_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3a&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3b&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3c&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3d&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3e&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3f&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| ?&lt;br /&gt;
| 16&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| ?&lt;br /&gt;
| 2+12*n+2*m (was 44)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| ?&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4a&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4b&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4c&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| Set value in OBJ06 ?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x4c */&lt;br /&gt;
	unsigned char unknown[3];&lt;br /&gt;
} script_inst4c_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4d&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4e&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4f&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Objects for bit operations ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object number&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Game status. Bit 23:Player character (0: Chris, 1: Jill, or vice versa).&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 7 (*.SCD) - Execution script for room ===&lt;br /&gt;
&lt;br /&gt;
This script is run regularly to update stuff in current room. It follows same structure as the one at offset 6.&lt;br /&gt;
&lt;br /&gt;
=== Offset 8, Script events ? ===&lt;br /&gt;
&lt;br /&gt;
This structure starts with a NULL terminated list of [[unsigned long]], which are offsets relative to start of this object. These offsets store also some bytecodes, different than those above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf6&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf7&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf7&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf8&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf8&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf9&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1 or 3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfa&amp;lt;/code&amp;gt;&lt;br /&gt;
| For&lt;br /&gt;
| 4&lt;br /&gt;
| Initialize a for loop. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfa */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short count;&lt;br /&gt;
} event_for_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfb&amp;lt;/code&amp;gt;&lt;br /&gt;
| Next&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set_Inst&lt;br /&gt;
| variable	&lt;br /&gt;
| Initialize bytecode instruction to execute later. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfc */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
	unsigned char bytecode_inst[];&lt;br /&gt;
} event_set_inst_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfd&amp;lt;/code&amp;gt;&lt;br /&gt;
| Exec_inst&lt;br /&gt;
| 1&lt;br /&gt;
| Execute bytecode instruction previously set with 0xfc instruction.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfe&amp;lt;/code&amp;gt;&lt;br /&gt;
| Sleep, process next event&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt;&lt;br /&gt;
| Disable event&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 9 (*.EMR) - Skeleton animation ===&lt;br /&gt;
&lt;br /&gt;
See File/Section 0 of [[EMD (Resident Evil 1997)]].&lt;br /&gt;
&lt;br /&gt;
=== Offset 10 (*.EDD) - Skeleton animation steps ===&lt;br /&gt;
&lt;br /&gt;
See File/Section 1 of .EMD_(Resident_Evil)&lt;br /&gt;
&lt;br /&gt;
=== Offset 11 (*.MSG) - Text messages ===&lt;br /&gt;
&lt;br /&gt;
First, you have an arrays of [[unsigned short]], which are relative offsets to the beginning of this object. So the number of items is the first offset/2 (if we are lucky that the first offset always has the lowest value).&lt;br /&gt;
&lt;br /&gt;
It contains the texts for cutscenes, dialogs, examining objects.&lt;br /&gt;
&lt;br /&gt;
Conversion table, from byte to ASCII value:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! 0&lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
! 7&lt;br /&gt;
! 8&lt;br /&gt;
! 9&lt;br /&gt;
! 10&lt;br /&gt;
! 11&lt;br /&gt;
! 12&lt;br /&gt;
! 13&lt;br /&gt;
! 14&lt;br /&gt;
! 15&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
|  &lt;br /&gt;
| .&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| (&lt;br /&gt;
| )&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
! 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| :&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| ,&lt;br /&gt;
| &amp;quot;&lt;br /&gt;
| !&lt;br /&gt;
| ?&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| A&lt;br /&gt;
| B&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
! 0x20&lt;br /&gt;
| D&lt;br /&gt;
| E&lt;br /&gt;
| F&lt;br /&gt;
| G&lt;br /&gt;
| H&lt;br /&gt;
| I&lt;br /&gt;
| J&lt;br /&gt;
| K&lt;br /&gt;
| L&lt;br /&gt;
| M&lt;br /&gt;
| N&lt;br /&gt;
| O&lt;br /&gt;
| P&lt;br /&gt;
| Q&lt;br /&gt;
| R&lt;br /&gt;
| S&lt;br /&gt;
|-&lt;br /&gt;
! 0x30&lt;br /&gt;
| T&lt;br /&gt;
| U&lt;br /&gt;
| V&lt;br /&gt;
| W&lt;br /&gt;
| X&lt;br /&gt;
| Y&lt;br /&gt;
| Z&lt;br /&gt;
| [&lt;br /&gt;
| /&lt;br /&gt;
| ]&lt;br /&gt;
| '&lt;br /&gt;
| -&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| a&lt;br /&gt;
| b&lt;br /&gt;
| c&lt;br /&gt;
|-&lt;br /&gt;
! 0x40&lt;br /&gt;
| d&lt;br /&gt;
| e&lt;br /&gt;
| f&lt;br /&gt;
| g&lt;br /&gt;
| h&lt;br /&gt;
| i&lt;br /&gt;
| j&lt;br /&gt;
| k&lt;br /&gt;
| l&lt;br /&gt;
| m&lt;br /&gt;
| n&lt;br /&gt;
| o&lt;br /&gt;
| p&lt;br /&gt;
| q&lt;br /&gt;
| r&lt;br /&gt;
| s&lt;br /&gt;
|-&lt;br /&gt;
! 0x50&lt;br /&gt;
| t&lt;br /&gt;
| u&lt;br /&gt;
| v&lt;br /&gt;
| w&lt;br /&gt;
| x&lt;br /&gt;
| y&lt;br /&gt;
| z&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Codes above 0x57 may also be different given the language, for characters with trema, accents and the like. The complete character table to use resides in the image file &amp;lt;code&amp;gt;horr/[country]/data/fontus.tim&amp;lt;/code&amp;gt;, in the second zone of the image.&lt;br /&gt;
&lt;br /&gt;
There are also some formatting codes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| End of text&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| Carriage return&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| Pause&lt;br /&gt;
|-&lt;br /&gt;
! 0x08&lt;br /&gt;
| Yes/No question&lt;br /&gt;
|-&lt;br /&gt;
! 0x74&lt;br /&gt;
| &amp;quot;S.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x75&lt;br /&gt;
| &amp;quot;T.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x76&lt;br /&gt;
| &amp;quot;A.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x77&lt;br /&gt;
| &amp;quot;R.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x79&lt;br /&gt;
| &amp;quot;. &amp;quot; string&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/EMD_(Resident_Evil_1997)</id>
		<title>EMD (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/EMD_(Resident_Evil_1997)"/>
				<updated>2023-08-25T15:55:27Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: Created page with &amp;quot;{{FormatInfo |formattype=electronic |extensions={{ext|emd}} }}  Category:Resident Evil (1997)  {{Restored|2016-08-09|https://web.archive.org/web/20160809012215/http://rewi...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|extensions={{ext|emd}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Resident Evil (1997)]]&lt;br /&gt;
&lt;br /&gt;
{{Restored|2016-08-09|https://web.archive.org/web/20160809012215/http://rewiki.regengedanken.de/wiki/.EMD_(Resident_Evil)}}&lt;br /&gt;
&lt;br /&gt;
The '''.EMD''' file format is used by Resident Evil. It contains the description of 3D models of the game (enemies, player, etc...).&lt;br /&gt;
&lt;br /&gt;
== Structure == &lt;br /&gt;
&lt;br /&gt;
The values are stored in Little-Endian order.&lt;br /&gt;
&lt;br /&gt;
=== Directory ===&lt;br /&gt;
&lt;br /&gt;
There is a directory, which is stored at the end of the file, it contains 4 offsets. So its position is filesize-4*4 bytes.&lt;br /&gt;
&lt;br /&gt;
=== File/Section 0, skeleton ===&lt;br /&gt;
&lt;br /&gt;
This section starts with a header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short relpos_offset;/* Relative offset to emd1_skel_relpos[] array */&lt;br /&gt;
	unsigned short length; /* Relative offset to emd1_skel_data[] array, which is also length of relpos+armature+mesh numbers  */&lt;br /&gt;
	unsigned short count; /* Number of objects in relpos,data2,mesh arrays? */&lt;br /&gt;
	unsigned short size; /* Size of each element in emd1_skel_data[] array */&lt;br /&gt;
} emd1_skel_header_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If offset is more than 8, there are some extra stuff, namely data1,data2 and mesh arrays.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	short x;&lt;br /&gt;
	short y;&lt;br /&gt;
	short z;&lt;br /&gt;
} emd1_skel_relpos_t; /* Relative position of each mesh in the object */&lt;br /&gt;
&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short mesh_count; /* Number of meshes linked to this one */&lt;br /&gt;
	unsigned short offset; /* Relative offset to mesh numbers (emd1_skel_mesh[] array) */&lt;br /&gt;
} emd1_skel_armature_t;&lt;br /&gt;
&lt;br /&gt;
emd1_skel_relpos_t emd1_skel_relpos[count];&lt;br /&gt;
emd1_skel_armature_t emd1_skel_armature[count];&lt;br /&gt;
unsigned char emd1_skel_mesh[count]; /* Mesh number on which to apply relative position */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally an array of elements which have a size of emd1_skel_header.size bytes each.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	short x_offset;	/* distance from reference point */&lt;br /&gt;
	short y_offset;&lt;br /&gt;
	short z_offset;&lt;br /&gt;
&lt;br /&gt;
	short x_speed;	/* speed at which moving the model */&lt;br /&gt;
	short y_speed;&lt;br /&gt;
	short z_speed;&lt;br /&gt;
&lt;br /&gt;
	short angles[3*15];	/* angle for each bone/model around x,y,z axis */&lt;br /&gt;
&lt;br /&gt;
	short unknown;&lt;br /&gt;
} emd1_skel_anim_t;&lt;br /&gt;
&lt;br /&gt;
emd1_skel_anim_t emd1_skel_anim[];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== File/Section 1, animation steps ===&lt;br /&gt;
&lt;br /&gt;
This section starts with this header, a certain number of records composed of count and offsets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
    unsigned short count;  /* Count of indices to process from emd_sec1_data[] array */&lt;br /&gt;
    unsigned short offset; /* Byte offset to first index in emd_sec1_data[] array */&lt;br /&gt;
} emd_anim_header_t;&lt;br /&gt;
&lt;br /&gt;
emd_anim_header_t emd_anim_header[];&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Following this array, you'll find another array of unsigned long. Each value (animation frame number?) is an index in emd_sec2_data array in the skeleton section.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unsigned long emd_anim_skel_t[];    /* Bits 31-16:   Bitmasks for flags */&lt;br /&gt;
                                    /* Bits 15-0:    Number of frame to display ? */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you'll finally find the 'unsigned long' byte length of the section.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unsigned long length;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== File/Section 2, meshes ===&lt;br /&gt;
&lt;br /&gt;
The last object holds the 3D stuff. Maybe the rest of the file is use to store animations, and links between primitives.&lt;br /&gt;
&lt;br /&gt;
==== Header ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
    unsigned long length; /* Section length in bytes */&lt;br /&gt;
    unsigned long unknown;&lt;br /&gt;
    unsigned long obj_count; /* Number of objects in model */&lt;br /&gt;
} emd_model_header_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Objects ====&lt;br /&gt;
&lt;br /&gt;
The model is separated in 'obj_count' objects. Following the header is the description of each object, in the form of an array of 'model_object'. Each offset is relative to the first emd_model_object_t.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
    emd_model_triangles_t triangles;&lt;br /&gt;
} emd_model_object_t;&lt;br /&gt;
&lt;br /&gt;
typedef struct {&lt;br /&gt;
    unsigned long vertex_offset; /* Offset to vertex data, array of emd_vertex_t */&lt;br /&gt;
    unsigned long vertex_count;  /* Vertex count */&lt;br /&gt;
    unsigned long normal_offset; /* Offset to normal data, array of emd_vertex_t */&lt;br /&gt;
    unsigned long normal_count;  /* Normal count */&lt;br /&gt;
    unsigned long tri_offset; /* Offset to triangle data, array of emd_triangle_t */&lt;br /&gt;
    unsigned long tri_count;  /* Triangle count */&lt;br /&gt;
    unsigned long dummy;&lt;br /&gt;
} emd_model_triangles_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Index arrays ====&lt;br /&gt;
&lt;br /&gt;
Normal and vertex coordinates are saved in same format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
    signed short x; /* Coordinates */&lt;br /&gt;
    signed short y;&lt;br /&gt;
    signed short z;&lt;br /&gt;
    signed short zero;    &lt;br /&gt;
} emd_vertex_t; /* Normals have same format */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A triangle is stored in this format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
    unsigned long unknown; /* id 0x34000609 */&lt;br /&gt;
&lt;br /&gt;
    unsigned char tu0; /* u,v texture coordinates of vertex 0 */&lt;br /&gt;
    unsigned char tv0;&lt;br /&gt;
    unsigned short clutid; /* Texture clut id, bits 0-5 */&lt;br /&gt;
    unsigned char tu1;&lt;br /&gt;
    unsigned char tv1;&lt;br /&gt;
    unsigned short page;  /* Texture page */&lt;br /&gt;
    unsigned char tu2;&lt;br /&gt;
    unsigned char tv2;&lt;br /&gt;
    unsigned short dummy;&lt;br /&gt;
&lt;br /&gt;
    unsigned short n0; /* Index of normal data for vertex 0 */&lt;br /&gt;
    unsigned short v0; /* Index of vertex data for vertex 0 */&lt;br /&gt;
    unsigned short n1;&lt;br /&gt;
    unsigned short v1;    &lt;br /&gt;
    unsigned short n2;&lt;br /&gt;
    unsigned short v2;    &lt;br /&gt;
} emd_triangle_t; /* Triangle */&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== File/Section 3, texture ===&lt;br /&gt;
&lt;br /&gt;
And finally, an embedded [[TIM (PlayStation graphics)|TIM image]], which is the texture to apply to the model.&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/Category:Resident_Evil_(1997)</id>
		<title>Category:Resident Evil (1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/Category:Resident_Evil_(1997)"/>
				<updated>2023-08-25T15:50:41Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: /* Formats */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This category includes formats and specifications to the 1997 PC port of the survival-horror game, ''Resident Evil''. As this was a PC port of a Playstation original, some formats overlap with those on the Playstation.&lt;br /&gt;
&lt;br /&gt;
== Formats ==&lt;br /&gt;
&lt;br /&gt;
{{Restored|2017-11-14|https://web.archive.org/web/20171114080249/http://rewiki.regengedanken.de:80/wiki/Resident_Evil}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Extension&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[.BIN (Resident Evil 1997)|.BIN]]&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [[.BGZ (Resident Evil 1997)|.BGZ]]&lt;br /&gt;
| Background images (Gamecube version)&lt;br /&gt;
|-&lt;br /&gt;
| [[.BSS (Resident Evil 1997)|.BSS]]&lt;br /&gt;
| Background images (Playstation version)&lt;br /&gt;
|-&lt;br /&gt;
| [[.DAT (Resident Evil 1997)|.DAT]]&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [[.DOR (Resident Evil 1997)|.DOR]]&lt;br /&gt;
| Door animation&lt;br /&gt;
|-&lt;br /&gt;
| [[EMD (Resident Evil 1997)|.EMD]]&lt;br /&gt;
| Enemy/player 3D model&lt;br /&gt;
|-&lt;br /&gt;
| [[.EMW (Resident Evil 1997)|.EMW]]&lt;br /&gt;
| Player 3D model with weapon?&lt;br /&gt;
|-&lt;br /&gt;
| [[.ESP (Resident Evil 1997)|.ESP]]&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [[.ETM (Resident Evil 1997)|.ETM]]&lt;br /&gt;
| Texture IMage, see .TIM&lt;br /&gt;
|-&lt;br /&gt;
| [[.HED (Resident Evil 1997)|.HED]]&lt;br /&gt;
| Unknown (Playstation version)&lt;br /&gt;
|-&lt;br /&gt;
| [[.HSB (Resident Evil 1997)|.HSB]]&lt;br /&gt;
| Unknown (Playstation version)&lt;br /&gt;
|-&lt;br /&gt;
| [[.IVM (Resident Evil 1997)|.IVM]]&lt;br /&gt;
| Texture IMage, see .TIM&lt;br /&gt;
|-&lt;br /&gt;
| [[.PAK (Resident Evil 1997)|.PAK]]&lt;br /&gt;
| Background images (PC version)&lt;br /&gt;
|-&lt;br /&gt;
| [[.PIX (Resident Evil 1997)|.PIX]]&lt;br /&gt;
| Raw 16 bits image&lt;br /&gt;
|-&lt;br /&gt;
| [[.PTC (Resident Evil 1997)|.PTC]]&lt;br /&gt;
| Raw 24-bit image&lt;br /&gt;
|-&lt;br /&gt;
| [[RDT (Resident Evil 1997)|.RDT]]&lt;br /&gt;
| Room description&lt;br /&gt;
|-&lt;br /&gt;
| [[.RGB (Resident Evil 1997)|.RGB]]&lt;br /&gt;
| Raw 24-bit image (Playstation version)&lt;br /&gt;
|-&lt;br /&gt;
| [[.STF (Resident Evil 1997)|.STF]]&lt;br /&gt;
| Unknown (Playstation version)&lt;br /&gt;
|-&lt;br /&gt;
| [[.STR (Resident Evil 1997)|.STR]]&lt;br /&gt;
| Movies (Playstation version)&lt;br /&gt;
|-&lt;br /&gt;
| [[TIM (PlayStation graphics)|.TIM]]&lt;br /&gt;
| Texture IMage&lt;br /&gt;
|-&lt;br /&gt;
| [[.VB (Resident Evil 1997)|.VB]]&lt;br /&gt;
| Waveform data format for ADPCM (Playstation version)&lt;br /&gt;
|-&lt;br /&gt;
| [[.TMD (Resident Evil 1997)|.TMD]]&lt;br /&gt;
| 3D model&lt;br /&gt;
|-&lt;br /&gt;
| [[.XAS (Resident Evil 1997)|.XAS]]&lt;br /&gt;
| CD-ROM XA audio stream (Playstation version)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)</id>
		<title>RDT (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)"/>
				<updated>2023-08-25T15:50:23Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|extensions={{ext|rdt}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Resident Evil (1997)]]&lt;br /&gt;
&lt;br /&gt;
{{Restored|2017-11-25|https://web.archive.org/web/20171125230810/http://rewiki.regengedanken.de/wiki/.RDT_(Resident_Evil)}}&lt;br /&gt;
&lt;br /&gt;
The '''.RDT''' file format is used to stored the description of a room in Resident Evil on Playstation or PC. It should contain the camera position (to correctly display 3D objects), the background images and sprites used to draw the scene, description of when to change camera, position of enemies when entering room, and so on...&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
The values are stored in Little-Endian order.&lt;br /&gt;
&lt;br /&gt;
The file is always named &amp;lt;code&amp;gt;roomSXX0.rdt&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;roomSXX1.rdt&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; is the game status/stage. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is the location number.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
&lt;br /&gt;
A RDT file starts with this header, to store count for different objects.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  char unknown0;&lt;br /&gt;
  char num_cameras; /* Number of cameras of the room */&lt;br /&gt;
  char num_sound_banks; /* Number of sound banks, stored at offset 18 ? */&lt;br /&gt;
  char unknown1[3];&lt;br /&gt;
  unsigned short unknown2[3];&lt;br /&gt;
&lt;br /&gt;
  /* An array of 3 elements of unknown structure */&lt;br /&gt;
  rdt_header_part_t unknown3[3];&lt;br /&gt;
} rdt_header_t;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  long unknown_pos_x; /* Unknown 3D position */&lt;br /&gt;
  long unknown_pos_y;&lt;br /&gt;
  long unknown_pos_z;&lt;br /&gt;
  unsigned long unknown0[2];&lt;br /&gt;
} rdt_header_part_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Object list ==&lt;br /&gt;
&lt;br /&gt;
Following the header, we have an array of 19 absolute offsets to various objects in the file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
! 0&lt;br /&gt;
| Camera switches (*.RVD)&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| Collision Boundaries for 3D Models (*.SCA)&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for item models)&lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for obstacles &amp;amp; moveable objects)&lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| Block data (*.BLK)&lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| Footstep sound zones (*.FLR)&lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| Initialization Script(s) (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 7&lt;br /&gt;
| Execution Script 0 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 8&lt;br /&gt;
| Execution Script 1 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 9&lt;br /&gt;
| Skeleton animation (*.EMR)&lt;br /&gt;
|-&lt;br /&gt;
! 10&lt;br /&gt;
| Skeleton animation steps (*.EDD)&lt;br /&gt;
|-&lt;br /&gt;
! 11&lt;br /&gt;
| Message text(s) (*.MSG)&lt;br /&gt;
|-&lt;br /&gt;
! 12&lt;br /&gt;
| RAW image (*.RAW), points to several RAW images used for example by Offset 2 for item images&lt;br /&gt;
|-&lt;br /&gt;
! 13&lt;br /&gt;
| Effect animation index (*.ESP)&lt;br /&gt;
|-&lt;br /&gt;
! 14&lt;br /&gt;
| Effect animation data (*.EFF); points to a list of relative offsets to read the EFF/ESP data (read backwards!)&lt;br /&gt;
|-&lt;br /&gt;
! 15&lt;br /&gt;
| Effect animation sprite image(s) (*.TIM); points to the last of those images used for effects&lt;br /&gt;
|-&lt;br /&gt;
! 16&lt;br /&gt;
| Sound attribute table (*.SND); points to a table which is 192 bytes in size&lt;br /&gt;
|-&lt;br /&gt;
! 17&lt;br /&gt;
| offset to a VAB header file (*.VH)&lt;br /&gt;
|-&lt;br /&gt;
! 18&lt;br /&gt;
| offset to VAB sound file (*.VB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Camera positions (*.RID) ===&lt;br /&gt;
&lt;br /&gt;
At absolute offset 0x94 in a file, you'll find an array of 'num_cameras' items with this structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	long masks_offset;	/* Offset to image mask definition */&lt;br /&gt;
	long tim_masks_offset;	/* Offset to TIM file that contains image masks, if not zero */&lt;br /&gt;
	long camera_from_x;	/* Position of the camera */&lt;br /&gt;
	long camera_from_y;&lt;br /&gt;
	long camera_from_z;&lt;br /&gt;
	long camera_to_x;	/* Where the camera is looking to */&lt;br /&gt;
	long camera_to_y;&lt;br /&gt;
	long camera_to_z;&lt;br /&gt;
	long unknown1[3];&lt;br /&gt;
} rdt_camera_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Camera masks (*.PRI) ====&lt;br /&gt;
&lt;br /&gt;
The masks_offset is an offset to an extra structure, which has following header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count_offsets;	/* Number of global offsets, or 0xffff for none */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
} rdt_masks_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you have 'rdt_mask_offset_t' items, which have a 8-byte length. Summing all 'count' fields should equal the 'count_masks' of the rdt_masks_t structure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count;	/* Number of masks, with which to use this structure */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short dst_x;	/* Destination position on background image/screen, to be added */&lt;br /&gt;
	unsigned short dst_y;&lt;br /&gt;
} rdt_mask_offset_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then you have 'rdt_[rect|square]_mask_t' items, which have either 12-byte (rectangular mask) or 8-byte length (square mask). The length is 12 if byte 7 (rdt_square_mask_t.size field) is zero, and 8 otherwise. The 'depth' value is the Z distance of the mask from the camera (low value=near, high value=far).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned char unknown;&lt;br /&gt;
	unsigned char size;	/* Width and height of mask */&lt;br /&gt;
} rdt_square_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned short zero;&lt;br /&gt;
	unsigned short width, height;	/* Dimensions of mask */&lt;br /&gt;
} rdt_rect_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 0 (*.RVD) - Camera zones/switches ===&lt;br /&gt;
&lt;br /&gt;
At offset 0, you'll find the list of camera switches for the current room. The list end with the first 4 bytes are 0xffffffff (i.e for cam0 and cam1 values).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short to; /* Camera number to switch to */&lt;br /&gt;
  unsigned short from; /* Camera number to switch from */&lt;br /&gt;
  short x1,y1; /* Zone the player must enter to switch camera */&lt;br /&gt;
  short x2,y2;&lt;br /&gt;
  short x3,y3;&lt;br /&gt;
  short x4,y4;&lt;br /&gt;
} rdt_camera_switch_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the 'to' value = 9, then it is a zone, defining the area in which the switches will work and 3D objects will be visible while this camera is used, else it is a camera switch.&lt;br /&gt;
&lt;br /&gt;
=== Offset 1 (*.SCA) - Collision Boundaries for 3D Models ===&lt;br /&gt;
&lt;br /&gt;
At offset 1, you'll find the boundary collision data for the current room.&lt;br /&gt;
&lt;br /&gt;
The first 24 bytes are the header which is using the following structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short Cx; /* Ceiling x value */&lt;br /&gt;
  unsigned short Cz; /* Ceiling z value */&lt;br /&gt;
  unsigned long counts[5]; /* Number of objects = sum of these 5 long values */&lt;br /&gt;
} rdt_sca_header_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Followed by the header, the individual boundary entries start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short x1; /* X of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z1; /* Z of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short x2; /* X of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z2; /* Z of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short type; /* type of the boundary plane/object (01=Standard; 03=Circle etc.) */&lt;br /&gt;
  unsigned short floor; /* floor value/ 256 = floor value for use in the game as height definition */ &lt;br /&gt;
} rdt_sca_obj_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this the data block ends with a 4 byte unsigned long holding the total size of the SCA data block in bytes.&lt;br /&gt;
&lt;br /&gt;
=== Offset 2 (*.TMD/*.TIM) - Item 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset2_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 3 (*.TMD/*.TIM) - Room 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset3_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 4 (*.BLK) - Block data ===&lt;br /&gt;
&lt;br /&gt;
It's unknown what this data is used for. It defines plane based areas that look like &amp;quot;inversed&amp;quot; collision boundaries.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
&lt;br /&gt;
typedef struct {&lt;br /&gt;
        unsigned short x1;          /* X of the top-left corner of the object */&lt;br /&gt;
        unsigned short z1;          /* Z of the top-left corner of the object */&lt;br /&gt;
        unsigned short x2;          /* X of the bottom-right corner of the object */&lt;br /&gt;
        unsigned short z2;          /* Z of the bottom-right corner of the object */&lt;br /&gt;
	unsigned short int Dir_bit;&lt;br /&gt;
	unsigned short int Abut;&lt;br /&gt;
} rdt_blk_obj_t;&lt;br /&gt;
&lt;br /&gt;
unsigned short int unknown;	/* unknown; follows after last structure */&lt;br /&gt;
&lt;br /&gt;
rdt_blk_obj_t Block[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 5 (*.FLR) - Floor/footstep sound areas ===&lt;br /&gt;
&lt;br /&gt;
This data defines the footstep sound areas and which sound to use. It is also related to the script opcode, 'Flr_set'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
typedef struct {&lt;br /&gt;
	signed short int x;         /* x coordinate where the area is drawn from */&lt;br /&gt;
        signed short int y;         /* y coordinate where the area is drawn from */&lt;br /&gt;
	signed short int x_width;   /* x width of the area */&lt;br /&gt;
        signed short int y_width;   /* y width of the area */&lt;br /&gt;
	unsigned short int sound;   /* footstep ID sound to use */&lt;br /&gt;
} rdt_flr_obj_t;&lt;br /&gt;
&lt;br /&gt;
rdt_flr_obj_t Floor[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 6 (*.SCD) - Scenario data ===&lt;br /&gt;
&lt;br /&gt;
This is the initialisation script for the room. It starts with an unsigned short giving the length of the script in bytes. Then follows the script, in bytecode-style.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Byte&lt;br /&gt;
| Instruction&lt;br /&gt;
| Length&lt;br /&gt;
| Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Nop&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| If&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0x01 */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
} script_if_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This structure is followed by one or several conditions for the if (condition) instruction. Any condition evaluated to false will end the if () block.&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| Else&lt;br /&gt;
| 2&lt;br /&gt;
| Follows: byte with ELSE block length. Note: it's either If/Endif, or If/Else; there is no If/Else/Endif sequence.&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| End If&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| BIT_TEST&lt;br /&gt;
| 4&lt;br /&gt;
| Bit test&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x04 */&lt;br /&gt;
	unsigned char object;&lt;br /&gt;
	unsigned char param;	/* Bits 7-5: Longword index in object, see array following */&lt;br /&gt;
				/* Bits 4-0: Bit number to test */&lt;br /&gt;
	unsigned char op;	/* Operation */&lt;br /&gt;
				/* 0x00:test bit is 0 */&lt;br /&gt;
				/* 0x01:test bit is 1 */&lt;br /&gt;
} script_bit_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| BIT_OP&lt;br /&gt;
| 4&lt;br /&gt;
| Bit operation&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x05 */&lt;br /&gt;
	unsigned char object;	/* Number of object to operate on, see array following */&lt;br /&gt;
	unsigned char param;	/* Bits 7-5: Longword index in object */&lt;br /&gt;
				/* Bits 4-0: Bit number to clear/set/change is (31-this field value) */&lt;br /&gt;
	unsigned char op;	/* Operation */&lt;br /&gt;
				/* 0x00:clear bit */&lt;br /&gt;
				/* 0x01:set bit */&lt;br /&gt;
				/* 0x02:change bit */&lt;br /&gt;
} script_bit_op_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| OBJ06_TEST&lt;br /&gt;
| 4&lt;br /&gt;
| Compare values&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x06 */&lt;br /&gt;
	unsigned char src;	/* Index in some object for source value */&lt;br /&gt;
				/* 0x00:Current stage */&lt;br /&gt;
				/* 0x01:Current room */&lt;br /&gt;
				/* 0x02:Current camera */&lt;br /&gt;
				/* 0x03:Stage and room */&lt;br /&gt;
				/* 0x04:Previous/next camera */&lt;br /&gt;
				/* 0x05:? */&lt;br /&gt;
				/* 0x06:? */&lt;br /&gt;
				/* 0x07:? Used in instruction 0x1a */&lt;br /&gt;
				/* 0x08:? Used in instruction 0x1c */&lt;br /&gt;
				/* 0x09:Flags for current camera */&lt;br /&gt;
	unsigned char func;	/* Compare function */&lt;br /&gt;
				/* 0x00:EQ */&lt;br /&gt;
				/* 0x01:LT */&lt;br /&gt;
				/* 0x02:LE */&lt;br /&gt;
				/* 0x03:GT */&lt;br /&gt;
				/* 0x04:GE */&lt;br /&gt;
				/* 0x05:NE */&lt;br /&gt;
	char param;		/* Raw value to compare against */&lt;br /&gt;
} script_obj06_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| OBJ07_TEST&lt;br /&gt;
| 6&lt;br /&gt;
| Compare values&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x07 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned char src;	/* Word index in some object for source value */&lt;br /&gt;
				/* (not the same object as instruction 0x06) */&lt;br /&gt;
	unsigned char func;	/* Compare function */&lt;br /&gt;
				/* 0x00:EQ */&lt;br /&gt;
				/* 0x01:LT */&lt;br /&gt;
				/* 0x02:LE */&lt;br /&gt;
				/* 0x03:GT */&lt;br /&gt;
				/* 0x04:GE */&lt;br /&gt;
				/* 0x05:NE */&lt;br /&gt;
	short param;		/* Raw value to compare against */&lt;br /&gt;
} script_obj07_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| STAGEROOMCAM_SET&lt;br /&gt;
| 4&lt;br /&gt;
| Set value for stage, room or camera&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x08 */&lt;br /&gt;
	unsigned char id;	/* 0: stage, 1: room, 2: camera */&lt;br /&gt;
	unsigned short value;&lt;br /&gt;
} script_stageroomcam_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| CUT_SET&lt;br /&gt;
| 2&lt;br /&gt;
| Switch to prev/next camera, set it as current camera&lt;br /&gt;
|-&lt;br /&gt;
| 0x0a&lt;br /&gt;
| CUT_SET&lt;br /&gt;
| 2&lt;br /&gt;
| Switch to current camera, set it as prev/next camera&lt;br /&gt;
|-&lt;br /&gt;
| 0x0b&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0c&lt;br /&gt;
| DOOR_SET&lt;br /&gt;
| 26&lt;br /&gt;
| TODO: find where next_camera is stored&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0c */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	short x,y,w,h;&lt;br /&gt;
	unsigned char unknown0[5];&lt;br /&gt;
	unsigned char next_stage_and_room;	/* bits 7,6,5: stage, 4,3,2,1,0: room */&lt;br /&gt;
	short next_x,next_y,next_z;&lt;br /&gt;
	short next_dir;&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
} script_door_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note: if stage=0, we must keep current stage, else switch stage.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0d&lt;br /&gt;
| ITEM_SET&lt;br /&gt;
| 18&lt;br /&gt;
| Pickable items, objects, obstacles&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0d */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	short x,y,w,h;&lt;br /&gt;
	unsigned char type;	/* 0x02: message, obstacle? */&lt;br /&gt;
				/* 0x07: trigger,event,movable object? */&lt;br /&gt;
				/* 0x08: box */&lt;br /&gt;
				/* 0x09: pickable object, trigger? */&lt;br /&gt;
				/* 0x10: typewriter */&lt;br /&gt;
	unsigned char unknown[7];&lt;br /&gt;
} script_item_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0e&lt;br /&gt;
| Nop&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0f&lt;br /&gt;
| ?&lt;br /&gt;
| 8&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0f */&lt;br /&gt;
	unsigned char bitmask;&lt;br /&gt;
	unsigned short unknown[3];&lt;br /&gt;
} script_inst0f_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| OBJ10_TEST&lt;br /&gt;
| 2&lt;br /&gt;
| Check if obj10 has value given as parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x10 */&lt;br /&gt;
	char value;&lt;br /&gt;
} script_obj10_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| OBJ11_TEST&lt;br /&gt;
| 2&lt;br /&gt;
| Check if obj11 has value given as parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x11 */&lt;br /&gt;
	char value;&lt;br /&gt;
} script_obj11_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| Item 0x12&lt;br /&gt;
| 10&lt;br /&gt;
| Typewriter? Stairs?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x12 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown0[2];&lt;br /&gt;
	short unknown1[3];&lt;br /&gt;
} script_inst12_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| Item 0x13&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x13 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown0[2];&lt;br /&gt;
} script_inst13_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x14 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned char param1;&lt;br /&gt;
	unsigned char param2;&lt;br /&gt;
} script_inst14_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| Volume set?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| ?&lt;br /&gt;
| 10&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ITEM_MODEL_SET&lt;br /&gt;
| 26&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x18 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown[24];&lt;br /&gt;
} script_item_model_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| OBJ19_SET&lt;br /&gt;
| 4&lt;br /&gt;
| Set value in obj19&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x09 */&lt;br /&gt;
	unsigned char src;	/* Index in some object */&lt;br /&gt;
	char value;		/* New value */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
} script_obj19_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1a&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1b&lt;br /&gt;
| EM_SET&lt;br /&gt;
| 22&lt;br /&gt;
| Entity (enemy, other character)&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1b */&lt;br /&gt;
	unsigned char model;&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned char killed;	/* 0xff for non enemy, else index in killed array to avoid respawn */&lt;br /&gt;
	unsigned char unknown1[2];&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
	unsigned short a;&lt;br /&gt;
	unsigned short unknown2;&lt;br /&gt;
	unsigned short x;&lt;br /&gt;
	unsigned short y;&lt;br /&gt;
	unsigned short z;&lt;br /&gt;
	unsigned char id;	/* ID of entity, used for example for EM_POS_SET */&lt;br /&gt;
	unsigned char unknown3[3];&lt;br /&gt;
} script_em_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1c */&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned short unknown1[2];&lt;br /&gt;
} script_inst1c_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1d&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1e&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1e */&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
} script_inst1e_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1f&lt;br /&gt;
| OM_SET&lt;br /&gt;
| 28&lt;br /&gt;
| Movable (crate, statue) or animated (lid) objects?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1f */&lt;br /&gt;
	unsigned char id;	/* Bits 5-0: Index in array stored at offset 2 of RDT file */&lt;br /&gt;
	unsigned char type;	/* 0x11: safe lid&amp;amp;nbsp;? */&lt;br /&gt;
	unsigned char unknown[25];&lt;br /&gt;
} script_om_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| PLAYER_POS_SET&lt;br /&gt;
| 14&lt;br /&gt;
| Change player position and direction&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x20 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short unknown0,angle,unknown1;&lt;br /&gt;
	unsigned short x,y,z;&lt;br /&gt;
} script_player_pos_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| EM_POS_SET&lt;br /&gt;
| 14&lt;br /&gt;
| Change entity position and direction&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x21 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned short dummy;&lt;br /&gt;
	unsigned short angle;&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short x,y,z;&lt;br /&gt;
} script_em_pos_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x23 */&lt;br /&gt;
	unsigned char flag;&lt;br /&gt;
} script_inst23_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x27&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| ?&lt;br /&gt;
| 4,6 or 8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| Select sound bank?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2a&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2b&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2d&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2f&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| ?&lt;br /&gt;
| 2 or 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| ?&lt;br /&gt;
| 8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| Set value for internal array&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x37 */&lt;br /&gt;
	unsigned char row;	/* row (0-7) column (0-31) for internal byte array */&lt;br /&gt;
	unsigned char col;&lt;br /&gt;
	unsigned char value;&lt;br /&gt;
} script_inst37_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3a&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3b&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3c&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3d&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3e&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3f&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| ?&lt;br /&gt;
| 16&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| ?&lt;br /&gt;
| 2+12*n+2*m (was 44)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| ?&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4a&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4b&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4c&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| Set value in OBJ06 ?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x4c */&lt;br /&gt;
	unsigned char unknown[3];&lt;br /&gt;
} script_inst4c_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4d&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4e&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4f&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Objects for bit operations ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object number&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Game status. Bit 23:Player character (0: Chris, 1: Jill, or vice versa).&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 7 (*.SCD) - Execution script for room ===&lt;br /&gt;
&lt;br /&gt;
This script is run regularly to update stuff in current room. It follows same structure as the one at offset 6.&lt;br /&gt;
&lt;br /&gt;
=== Offset 8, Script events ? ===&lt;br /&gt;
&lt;br /&gt;
This structure starts with a NULL terminated list of [[unsigned long]], which are offsets relative to start of this object. These offsets store also some bytecodes, different than those above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf6&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf7&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf7&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf8&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf8&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf9&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1 or 3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfa&amp;lt;/code&amp;gt;&lt;br /&gt;
| For&lt;br /&gt;
| 4&lt;br /&gt;
| Initialize a for loop. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfa */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short count;&lt;br /&gt;
} event_for_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfb&amp;lt;/code&amp;gt;&lt;br /&gt;
| Next&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set_Inst&lt;br /&gt;
| variable	&lt;br /&gt;
| Initialize bytecode instruction to execute later. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfc */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
	unsigned char bytecode_inst[];&lt;br /&gt;
} event_set_inst_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfd&amp;lt;/code&amp;gt;&lt;br /&gt;
| Exec_inst&lt;br /&gt;
| 1&lt;br /&gt;
| Execute bytecode instruction previously set with 0xfc instruction.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfe&amp;lt;/code&amp;gt;&lt;br /&gt;
| Sleep, process next event&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt;&lt;br /&gt;
| Disable event&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 9 (*.EMR) - Skeleton animation ===&lt;br /&gt;
&lt;br /&gt;
See File/Section 0 of .EMD_(Resident_Evil)&lt;br /&gt;
&lt;br /&gt;
=== Offset 10 (*.EDD) - Skeleton animation steps ===&lt;br /&gt;
&lt;br /&gt;
See File/Section 1 of .EMD_(Resident_Evil)&lt;br /&gt;
&lt;br /&gt;
=== Offset 11 (*.MSG) - Text messages ===&lt;br /&gt;
&lt;br /&gt;
First, you have an arrays of [[unsigned short]], which are relative offsets to the beginning of this object. So the number of items is the first offset/2 (if we are lucky that the first offset always has the lowest value).&lt;br /&gt;
&lt;br /&gt;
It contains the texts for cutscenes, dialogs, examining objects.&lt;br /&gt;
&lt;br /&gt;
Conversion table, from byte to ASCII value:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! 0&lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
! 7&lt;br /&gt;
! 8&lt;br /&gt;
! 9&lt;br /&gt;
! 10&lt;br /&gt;
! 11&lt;br /&gt;
! 12&lt;br /&gt;
! 13&lt;br /&gt;
! 14&lt;br /&gt;
! 15&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
|  &lt;br /&gt;
| .&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| (&lt;br /&gt;
| )&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
! 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| :&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| ,&lt;br /&gt;
| &amp;quot;&lt;br /&gt;
| !&lt;br /&gt;
| ?&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| A&lt;br /&gt;
| B&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
! 0x20&lt;br /&gt;
| D&lt;br /&gt;
| E&lt;br /&gt;
| F&lt;br /&gt;
| G&lt;br /&gt;
| H&lt;br /&gt;
| I&lt;br /&gt;
| J&lt;br /&gt;
| K&lt;br /&gt;
| L&lt;br /&gt;
| M&lt;br /&gt;
| N&lt;br /&gt;
| O&lt;br /&gt;
| P&lt;br /&gt;
| Q&lt;br /&gt;
| R&lt;br /&gt;
| S&lt;br /&gt;
|-&lt;br /&gt;
! 0x30&lt;br /&gt;
| T&lt;br /&gt;
| U&lt;br /&gt;
| V&lt;br /&gt;
| W&lt;br /&gt;
| X&lt;br /&gt;
| Y&lt;br /&gt;
| Z&lt;br /&gt;
| [&lt;br /&gt;
| /&lt;br /&gt;
| ]&lt;br /&gt;
| '&lt;br /&gt;
| -&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| a&lt;br /&gt;
| b&lt;br /&gt;
| c&lt;br /&gt;
|-&lt;br /&gt;
! 0x40&lt;br /&gt;
| d&lt;br /&gt;
| e&lt;br /&gt;
| f&lt;br /&gt;
| g&lt;br /&gt;
| h&lt;br /&gt;
| i&lt;br /&gt;
| j&lt;br /&gt;
| k&lt;br /&gt;
| l&lt;br /&gt;
| m&lt;br /&gt;
| n&lt;br /&gt;
| o&lt;br /&gt;
| p&lt;br /&gt;
| q&lt;br /&gt;
| r&lt;br /&gt;
| s&lt;br /&gt;
|-&lt;br /&gt;
! 0x50&lt;br /&gt;
| t&lt;br /&gt;
| u&lt;br /&gt;
| v&lt;br /&gt;
| w&lt;br /&gt;
| x&lt;br /&gt;
| y&lt;br /&gt;
| z&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Codes above 0x57 may also be different given the language, for characters with trema, accents and the like. The complete character table to use resides in the image file &amp;lt;code&amp;gt;horr/[country]/data/fontus.tim&amp;lt;/code&amp;gt;, in the second zone of the image.&lt;br /&gt;
&lt;br /&gt;
There are also some formatting codes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| End of text&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| Carriage return&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| Pause&lt;br /&gt;
|-&lt;br /&gt;
! 0x08&lt;br /&gt;
| Yes/No question&lt;br /&gt;
|-&lt;br /&gt;
! 0x74&lt;br /&gt;
| &amp;quot;S.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x75&lt;br /&gt;
| &amp;quot;T.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x76&lt;br /&gt;
| &amp;quot;A.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x77&lt;br /&gt;
| &amp;quot;R.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x79&lt;br /&gt;
| &amp;quot;. &amp;quot; string&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)</id>
		<title>RDT (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)"/>
				<updated>2023-08-25T15:49:11Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: /* Camera masks (*.PRI) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|extensions={{ext|rdt}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Restored|2017-11-25|https://web.archive.org/web/20171125230810/http://rewiki.regengedanken.de/wiki/.RDT_(Resident_Evil)}}&lt;br /&gt;
&lt;br /&gt;
The '''.RDT''' file format is used to stored the description of a room in Resident Evil on Playstation or PC. It should contain the camera position (to correctly display 3D objects), the background images and sprites used to draw the scene, description of when to change camera, position of enemies when entering room, and so on...&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
The values are stored in Little-Endian order.&lt;br /&gt;
&lt;br /&gt;
The file is always named &amp;lt;code&amp;gt;roomSXX0.rdt&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;roomSXX1.rdt&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; is the game status/stage. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is the location number.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
&lt;br /&gt;
A RDT file starts with this header, to store count for different objects.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  char unknown0;&lt;br /&gt;
  char num_cameras; /* Number of cameras of the room */&lt;br /&gt;
  char num_sound_banks; /* Number of sound banks, stored at offset 18 ? */&lt;br /&gt;
  char unknown1[3];&lt;br /&gt;
  unsigned short unknown2[3];&lt;br /&gt;
&lt;br /&gt;
  /* An array of 3 elements of unknown structure */&lt;br /&gt;
  rdt_header_part_t unknown3[3];&lt;br /&gt;
} rdt_header_t;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  long unknown_pos_x; /* Unknown 3D position */&lt;br /&gt;
  long unknown_pos_y;&lt;br /&gt;
  long unknown_pos_z;&lt;br /&gt;
  unsigned long unknown0[2];&lt;br /&gt;
} rdt_header_part_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Object list ==&lt;br /&gt;
&lt;br /&gt;
Following the header, we have an array of 19 absolute offsets to various objects in the file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
! 0&lt;br /&gt;
| Camera switches (*.RVD)&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| Collision Boundaries for 3D Models (*.SCA)&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for item models)&lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for obstacles &amp;amp; moveable objects)&lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| Block data (*.BLK)&lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| Footstep sound zones (*.FLR)&lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| Initialization Script(s) (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 7&lt;br /&gt;
| Execution Script 0 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 8&lt;br /&gt;
| Execution Script 1 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 9&lt;br /&gt;
| Skeleton animation (*.EMR)&lt;br /&gt;
|-&lt;br /&gt;
! 10&lt;br /&gt;
| Skeleton animation steps (*.EDD)&lt;br /&gt;
|-&lt;br /&gt;
! 11&lt;br /&gt;
| Message text(s) (*.MSG)&lt;br /&gt;
|-&lt;br /&gt;
! 12&lt;br /&gt;
| RAW image (*.RAW), points to several RAW images used for example by Offset 2 for item images&lt;br /&gt;
|-&lt;br /&gt;
! 13&lt;br /&gt;
| Effect animation index (*.ESP)&lt;br /&gt;
|-&lt;br /&gt;
! 14&lt;br /&gt;
| Effect animation data (*.EFF); points to a list of relative offsets to read the EFF/ESP data (read backwards!)&lt;br /&gt;
|-&lt;br /&gt;
! 15&lt;br /&gt;
| Effect animation sprite image(s) (*.TIM); points to the last of those images used for effects&lt;br /&gt;
|-&lt;br /&gt;
! 16&lt;br /&gt;
| Sound attribute table (*.SND); points to a table which is 192 bytes in size&lt;br /&gt;
|-&lt;br /&gt;
! 17&lt;br /&gt;
| offset to a VAB header file (*.VH)&lt;br /&gt;
|-&lt;br /&gt;
! 18&lt;br /&gt;
| offset to VAB sound file (*.VB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Camera positions (*.RID) ===&lt;br /&gt;
&lt;br /&gt;
At absolute offset 0x94 in a file, you'll find an array of 'num_cameras' items with this structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	long masks_offset;	/* Offset to image mask definition */&lt;br /&gt;
	long tim_masks_offset;	/* Offset to TIM file that contains image masks, if not zero */&lt;br /&gt;
	long camera_from_x;	/* Position of the camera */&lt;br /&gt;
	long camera_from_y;&lt;br /&gt;
	long camera_from_z;&lt;br /&gt;
	long camera_to_x;	/* Where the camera is looking to */&lt;br /&gt;
	long camera_to_y;&lt;br /&gt;
	long camera_to_z;&lt;br /&gt;
	long unknown1[3];&lt;br /&gt;
} rdt_camera_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Camera masks (*.PRI) ====&lt;br /&gt;
&lt;br /&gt;
The masks_offset is an offset to an extra structure, which has following header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count_offsets;	/* Number of global offsets, or 0xffff for none */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
} rdt_masks_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you have 'rdt_mask_offset_t' items, which have a 8-byte length. Summing all 'count' fields should equal the 'count_masks' of the rdt_masks_t structure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count;	/* Number of masks, with which to use this structure */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short dst_x;	/* Destination position on background image/screen, to be added */&lt;br /&gt;
	unsigned short dst_y;&lt;br /&gt;
} rdt_mask_offset_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then you have 'rdt_[rect|square]_mask_t' items, which have either 12-byte (rectangular mask) or 8-byte length (square mask). The length is 12 if byte 7 (rdt_square_mask_t.size field) is zero, and 8 otherwise. The 'depth' value is the Z distance of the mask from the camera (low value=near, high value=far).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned char unknown;&lt;br /&gt;
	unsigned char size;	/* Width and height of mask */&lt;br /&gt;
} rdt_square_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned short zero;&lt;br /&gt;
	unsigned short width, height;	/* Dimensions of mask */&lt;br /&gt;
} rdt_rect_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 0 (*.RVD) - Camera zones/switches ===&lt;br /&gt;
&lt;br /&gt;
At offset 0, you'll find the list of camera switches for the current room. The list end with the first 4 bytes are 0xffffffff (i.e for cam0 and cam1 values).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short to; /* Camera number to switch to */&lt;br /&gt;
  unsigned short from; /* Camera number to switch from */&lt;br /&gt;
  short x1,y1; /* Zone the player must enter to switch camera */&lt;br /&gt;
  short x2,y2;&lt;br /&gt;
  short x3,y3;&lt;br /&gt;
  short x4,y4;&lt;br /&gt;
} rdt_camera_switch_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the 'to' value = 9, then it is a zone, defining the area in which the switches will work and 3D objects will be visible while this camera is used, else it is a camera switch.&lt;br /&gt;
&lt;br /&gt;
=== Offset 1 (*.SCA) - Collision Boundaries for 3D Models ===&lt;br /&gt;
&lt;br /&gt;
At offset 1, you'll find the boundary collision data for the current room.&lt;br /&gt;
&lt;br /&gt;
The first 24 bytes are the header which is using the following structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short Cx; /* Ceiling x value */&lt;br /&gt;
  unsigned short Cz; /* Ceiling z value */&lt;br /&gt;
  unsigned long counts[5]; /* Number of objects = sum of these 5 long values */&lt;br /&gt;
} rdt_sca_header_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Followed by the header, the individual boundary entries start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short x1; /* X of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z1; /* Z of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short x2; /* X of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z2; /* Z of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short type; /* type of the boundary plane/object (01=Standard; 03=Circle etc.) */&lt;br /&gt;
  unsigned short floor; /* floor value/ 256 = floor value for use in the game as height definition */ &lt;br /&gt;
} rdt_sca_obj_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this the data block ends with a 4 byte unsigned long holding the total size of the SCA data block in bytes.&lt;br /&gt;
&lt;br /&gt;
=== Offset 2 (*.TMD/*.TIM) - Item 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset2_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 3 (*.TMD/*.TIM) - Room 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset3_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 4 (*.BLK) - Block data ===&lt;br /&gt;
&lt;br /&gt;
It's unknown what this data is used for. It defines plane based areas that look like &amp;quot;inversed&amp;quot; collision boundaries.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
&lt;br /&gt;
typedef struct {&lt;br /&gt;
        unsigned short x1;          /* X of the top-left corner of the object */&lt;br /&gt;
        unsigned short z1;          /* Z of the top-left corner of the object */&lt;br /&gt;
        unsigned short x2;          /* X of the bottom-right corner of the object */&lt;br /&gt;
        unsigned short z2;          /* Z of the bottom-right corner of the object */&lt;br /&gt;
	unsigned short int Dir_bit;&lt;br /&gt;
	unsigned short int Abut;&lt;br /&gt;
} rdt_blk_obj_t;&lt;br /&gt;
&lt;br /&gt;
unsigned short int unknown;	/* unknown; follows after last structure */&lt;br /&gt;
&lt;br /&gt;
rdt_blk_obj_t Block[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 5 (*.FLR) - Floor/footstep sound areas ===&lt;br /&gt;
&lt;br /&gt;
This data defines the footstep sound areas and which sound to use. It is also related to the script opcode, 'Flr_set'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
typedef struct {&lt;br /&gt;
	signed short int x;         /* x coordinate where the area is drawn from */&lt;br /&gt;
        signed short int y;         /* y coordinate where the area is drawn from */&lt;br /&gt;
	signed short int x_width;   /* x width of the area */&lt;br /&gt;
        signed short int y_width;   /* y width of the area */&lt;br /&gt;
	unsigned short int sound;   /* footstep ID sound to use */&lt;br /&gt;
} rdt_flr_obj_t;&lt;br /&gt;
&lt;br /&gt;
rdt_flr_obj_t Floor[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 6 (*.SCD) - Scenario data ===&lt;br /&gt;
&lt;br /&gt;
This is the initialisation script for the room. It starts with an unsigned short giving the length of the script in bytes. Then follows the script, in bytecode-style.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Byte&lt;br /&gt;
| Instruction&lt;br /&gt;
| Length&lt;br /&gt;
| Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Nop&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| If&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0x01 */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
} script_if_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This structure is followed by one or several conditions for the if (condition) instruction. Any condition evaluated to false will end the if () block.&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| Else&lt;br /&gt;
| 2&lt;br /&gt;
| Follows: byte with ELSE block length. Note: it's either If/Endif, or If/Else; there is no If/Else/Endif sequence.&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| End If&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| BIT_TEST&lt;br /&gt;
| 4&lt;br /&gt;
| Bit test&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x04 */&lt;br /&gt;
	unsigned char object;&lt;br /&gt;
	unsigned char param;	/* Bits 7-5: Longword index in object, see array following */&lt;br /&gt;
				/* Bits 4-0: Bit number to test */&lt;br /&gt;
	unsigned char op;	/* Operation */&lt;br /&gt;
				/* 0x00:test bit is 0 */&lt;br /&gt;
				/* 0x01:test bit is 1 */&lt;br /&gt;
} script_bit_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| BIT_OP&lt;br /&gt;
| 4&lt;br /&gt;
| Bit operation&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x05 */&lt;br /&gt;
	unsigned char object;	/* Number of object to operate on, see array following */&lt;br /&gt;
	unsigned char param;	/* Bits 7-5: Longword index in object */&lt;br /&gt;
				/* Bits 4-0: Bit number to clear/set/change is (31-this field value) */&lt;br /&gt;
	unsigned char op;	/* Operation */&lt;br /&gt;
				/* 0x00:clear bit */&lt;br /&gt;
				/* 0x01:set bit */&lt;br /&gt;
				/* 0x02:change bit */&lt;br /&gt;
} script_bit_op_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| OBJ06_TEST&lt;br /&gt;
| 4&lt;br /&gt;
| Compare values&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x06 */&lt;br /&gt;
	unsigned char src;	/* Index in some object for source value */&lt;br /&gt;
				/* 0x00:Current stage */&lt;br /&gt;
				/* 0x01:Current room */&lt;br /&gt;
				/* 0x02:Current camera */&lt;br /&gt;
				/* 0x03:Stage and room */&lt;br /&gt;
				/* 0x04:Previous/next camera */&lt;br /&gt;
				/* 0x05:? */&lt;br /&gt;
				/* 0x06:? */&lt;br /&gt;
				/* 0x07:? Used in instruction 0x1a */&lt;br /&gt;
				/* 0x08:? Used in instruction 0x1c */&lt;br /&gt;
				/* 0x09:Flags for current camera */&lt;br /&gt;
	unsigned char func;	/* Compare function */&lt;br /&gt;
				/* 0x00:EQ */&lt;br /&gt;
				/* 0x01:LT */&lt;br /&gt;
				/* 0x02:LE */&lt;br /&gt;
				/* 0x03:GT */&lt;br /&gt;
				/* 0x04:GE */&lt;br /&gt;
				/* 0x05:NE */&lt;br /&gt;
	char param;		/* Raw value to compare against */&lt;br /&gt;
} script_obj06_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| OBJ07_TEST&lt;br /&gt;
| 6&lt;br /&gt;
| Compare values&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x07 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned char src;	/* Word index in some object for source value */&lt;br /&gt;
				/* (not the same object as instruction 0x06) */&lt;br /&gt;
	unsigned char func;	/* Compare function */&lt;br /&gt;
				/* 0x00:EQ */&lt;br /&gt;
				/* 0x01:LT */&lt;br /&gt;
				/* 0x02:LE */&lt;br /&gt;
				/* 0x03:GT */&lt;br /&gt;
				/* 0x04:GE */&lt;br /&gt;
				/* 0x05:NE */&lt;br /&gt;
	short param;		/* Raw value to compare against */&lt;br /&gt;
} script_obj07_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| STAGEROOMCAM_SET&lt;br /&gt;
| 4&lt;br /&gt;
| Set value for stage, room or camera&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x08 */&lt;br /&gt;
	unsigned char id;	/* 0: stage, 1: room, 2: camera */&lt;br /&gt;
	unsigned short value;&lt;br /&gt;
} script_stageroomcam_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| CUT_SET&lt;br /&gt;
| 2&lt;br /&gt;
| Switch to prev/next camera, set it as current camera&lt;br /&gt;
|-&lt;br /&gt;
| 0x0a&lt;br /&gt;
| CUT_SET&lt;br /&gt;
| 2&lt;br /&gt;
| Switch to current camera, set it as prev/next camera&lt;br /&gt;
|-&lt;br /&gt;
| 0x0b&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0c&lt;br /&gt;
| DOOR_SET&lt;br /&gt;
| 26&lt;br /&gt;
| TODO: find where next_camera is stored&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0c */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	short x,y,w,h;&lt;br /&gt;
	unsigned char unknown0[5];&lt;br /&gt;
	unsigned char next_stage_and_room;	/* bits 7,6,5: stage, 4,3,2,1,0: room */&lt;br /&gt;
	short next_x,next_y,next_z;&lt;br /&gt;
	short next_dir;&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
} script_door_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note: if stage=0, we must keep current stage, else switch stage.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0d&lt;br /&gt;
| ITEM_SET&lt;br /&gt;
| 18&lt;br /&gt;
| Pickable items, objects, obstacles&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0d */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	short x,y,w,h;&lt;br /&gt;
	unsigned char type;	/* 0x02: message, obstacle? */&lt;br /&gt;
				/* 0x07: trigger,event,movable object? */&lt;br /&gt;
				/* 0x08: box */&lt;br /&gt;
				/* 0x09: pickable object, trigger? */&lt;br /&gt;
				/* 0x10: typewriter */&lt;br /&gt;
	unsigned char unknown[7];&lt;br /&gt;
} script_item_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0e&lt;br /&gt;
| Nop&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0f&lt;br /&gt;
| ?&lt;br /&gt;
| 8&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0f */&lt;br /&gt;
	unsigned char bitmask;&lt;br /&gt;
	unsigned short unknown[3];&lt;br /&gt;
} script_inst0f_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| OBJ10_TEST&lt;br /&gt;
| 2&lt;br /&gt;
| Check if obj10 has value given as parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x10 */&lt;br /&gt;
	char value;&lt;br /&gt;
} script_obj10_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| OBJ11_TEST&lt;br /&gt;
| 2&lt;br /&gt;
| Check if obj11 has value given as parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x11 */&lt;br /&gt;
	char value;&lt;br /&gt;
} script_obj11_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| Item 0x12&lt;br /&gt;
| 10&lt;br /&gt;
| Typewriter? Stairs?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x12 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown0[2];&lt;br /&gt;
	short unknown1[3];&lt;br /&gt;
} script_inst12_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| Item 0x13&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x13 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown0[2];&lt;br /&gt;
} script_inst13_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x14 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned char param1;&lt;br /&gt;
	unsigned char param2;&lt;br /&gt;
} script_inst14_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| Volume set?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| ?&lt;br /&gt;
| 10&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ITEM_MODEL_SET&lt;br /&gt;
| 26&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x18 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown[24];&lt;br /&gt;
} script_item_model_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| OBJ19_SET&lt;br /&gt;
| 4&lt;br /&gt;
| Set value in obj19&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x09 */&lt;br /&gt;
	unsigned char src;	/* Index in some object */&lt;br /&gt;
	char value;		/* New value */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
} script_obj19_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1a&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1b&lt;br /&gt;
| EM_SET&lt;br /&gt;
| 22&lt;br /&gt;
| Entity (enemy, other character)&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1b */&lt;br /&gt;
	unsigned char model;&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned char killed;	/* 0xff for non enemy, else index in killed array to avoid respawn */&lt;br /&gt;
	unsigned char unknown1[2];&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
	unsigned short a;&lt;br /&gt;
	unsigned short unknown2;&lt;br /&gt;
	unsigned short x;&lt;br /&gt;
	unsigned short y;&lt;br /&gt;
	unsigned short z;&lt;br /&gt;
	unsigned char id;	/* ID of entity, used for example for EM_POS_SET */&lt;br /&gt;
	unsigned char unknown3[3];&lt;br /&gt;
} script_em_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1c */&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned short unknown1[2];&lt;br /&gt;
} script_inst1c_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1d&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1e&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1e */&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
} script_inst1e_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1f&lt;br /&gt;
| OM_SET&lt;br /&gt;
| 28&lt;br /&gt;
| Movable (crate, statue) or animated (lid) objects?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1f */&lt;br /&gt;
	unsigned char id;	/* Bits 5-0: Index in array stored at offset 2 of RDT file */&lt;br /&gt;
	unsigned char type;	/* 0x11: safe lid&amp;amp;nbsp;? */&lt;br /&gt;
	unsigned char unknown[25];&lt;br /&gt;
} script_om_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| PLAYER_POS_SET&lt;br /&gt;
| 14&lt;br /&gt;
| Change player position and direction&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x20 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short unknown0,angle,unknown1;&lt;br /&gt;
	unsigned short x,y,z;&lt;br /&gt;
} script_player_pos_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| EM_POS_SET&lt;br /&gt;
| 14&lt;br /&gt;
| Change entity position and direction&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x21 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned short dummy;&lt;br /&gt;
	unsigned short angle;&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short x,y,z;&lt;br /&gt;
} script_em_pos_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x23 */&lt;br /&gt;
	unsigned char flag;&lt;br /&gt;
} script_inst23_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x27&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| ?&lt;br /&gt;
| 4,6 or 8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| Select sound bank?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2a&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2b&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2d&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2f&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| ?&lt;br /&gt;
| 2 or 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| ?&lt;br /&gt;
| 8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| Set value for internal array&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x37 */&lt;br /&gt;
	unsigned char row;	/* row (0-7) column (0-31) for internal byte array */&lt;br /&gt;
	unsigned char col;&lt;br /&gt;
	unsigned char value;&lt;br /&gt;
} script_inst37_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3a&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3b&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3c&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3d&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3e&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3f&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| ?&lt;br /&gt;
| 16&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| ?&lt;br /&gt;
| 2+12*n+2*m (was 44)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| ?&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4a&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4b&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4c&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| Set value in OBJ06 ?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x4c */&lt;br /&gt;
	unsigned char unknown[3];&lt;br /&gt;
} script_inst4c_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4d&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4e&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4f&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Objects for bit operations ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object number&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Game status. Bit 23:Player character (0: Chris, 1: Jill, or vice versa).&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 7 (*.SCD) - Execution script for room ===&lt;br /&gt;
&lt;br /&gt;
This script is run regularly to update stuff in current room. It follows same structure as the one at offset 6.&lt;br /&gt;
&lt;br /&gt;
=== Offset 8, Script events ? ===&lt;br /&gt;
&lt;br /&gt;
This structure starts with a NULL terminated list of [[unsigned long]], which are offsets relative to start of this object. These offsets store also some bytecodes, different than those above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf6&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf7&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf7&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf8&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf8&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf9&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1 or 3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfa&amp;lt;/code&amp;gt;&lt;br /&gt;
| For&lt;br /&gt;
| 4&lt;br /&gt;
| Initialize a for loop. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfa */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short count;&lt;br /&gt;
} event_for_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfb&amp;lt;/code&amp;gt;&lt;br /&gt;
| Next&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set_Inst&lt;br /&gt;
| variable	&lt;br /&gt;
| Initialize bytecode instruction to execute later. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfc */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
	unsigned char bytecode_inst[];&lt;br /&gt;
} event_set_inst_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfd&amp;lt;/code&amp;gt;&lt;br /&gt;
| Exec_inst&lt;br /&gt;
| 1&lt;br /&gt;
| Execute bytecode instruction previously set with 0xfc instruction.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfe&amp;lt;/code&amp;gt;&lt;br /&gt;
| Sleep, process next event&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt;&lt;br /&gt;
| Disable event&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 9 (*.EMR) - Skeleton animation ===&lt;br /&gt;
&lt;br /&gt;
See File/Section 0 of .EMD_(Resident_Evil)&lt;br /&gt;
&lt;br /&gt;
=== Offset 10 (*.EDD) - Skeleton animation steps ===&lt;br /&gt;
&lt;br /&gt;
See File/Section 1 of .EMD_(Resident_Evil)&lt;br /&gt;
&lt;br /&gt;
=== Offset 11 (*.MSG) - Text messages ===&lt;br /&gt;
&lt;br /&gt;
First, you have an arrays of [[unsigned short]], which are relative offsets to the beginning of this object. So the number of items is the first offset/2 (if we are lucky that the first offset always has the lowest value).&lt;br /&gt;
&lt;br /&gt;
It contains the texts for cutscenes, dialogs, examining objects.&lt;br /&gt;
&lt;br /&gt;
Conversion table, from byte to ASCII value:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! 0&lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
! 7&lt;br /&gt;
! 8&lt;br /&gt;
! 9&lt;br /&gt;
! 10&lt;br /&gt;
! 11&lt;br /&gt;
! 12&lt;br /&gt;
! 13&lt;br /&gt;
! 14&lt;br /&gt;
! 15&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
|  &lt;br /&gt;
| .&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| (&lt;br /&gt;
| )&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
! 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| :&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| ,&lt;br /&gt;
| &amp;quot;&lt;br /&gt;
| !&lt;br /&gt;
| ?&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| A&lt;br /&gt;
| B&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
! 0x20&lt;br /&gt;
| D&lt;br /&gt;
| E&lt;br /&gt;
| F&lt;br /&gt;
| G&lt;br /&gt;
| H&lt;br /&gt;
| I&lt;br /&gt;
| J&lt;br /&gt;
| K&lt;br /&gt;
| L&lt;br /&gt;
| M&lt;br /&gt;
| N&lt;br /&gt;
| O&lt;br /&gt;
| P&lt;br /&gt;
| Q&lt;br /&gt;
| R&lt;br /&gt;
| S&lt;br /&gt;
|-&lt;br /&gt;
! 0x30&lt;br /&gt;
| T&lt;br /&gt;
| U&lt;br /&gt;
| V&lt;br /&gt;
| W&lt;br /&gt;
| X&lt;br /&gt;
| Y&lt;br /&gt;
| Z&lt;br /&gt;
| [&lt;br /&gt;
| /&lt;br /&gt;
| ]&lt;br /&gt;
| '&lt;br /&gt;
| -&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| a&lt;br /&gt;
| b&lt;br /&gt;
| c&lt;br /&gt;
|-&lt;br /&gt;
! 0x40&lt;br /&gt;
| d&lt;br /&gt;
| e&lt;br /&gt;
| f&lt;br /&gt;
| g&lt;br /&gt;
| h&lt;br /&gt;
| i&lt;br /&gt;
| j&lt;br /&gt;
| k&lt;br /&gt;
| l&lt;br /&gt;
| m&lt;br /&gt;
| n&lt;br /&gt;
| o&lt;br /&gt;
| p&lt;br /&gt;
| q&lt;br /&gt;
| r&lt;br /&gt;
| s&lt;br /&gt;
|-&lt;br /&gt;
! 0x50&lt;br /&gt;
| t&lt;br /&gt;
| u&lt;br /&gt;
| v&lt;br /&gt;
| w&lt;br /&gt;
| x&lt;br /&gt;
| y&lt;br /&gt;
| z&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Codes above 0x57 may also be different given the language, for characters with trema, accents and the like. The complete character table to use resides in the image file &amp;lt;code&amp;gt;horr/[country]/data/fontus.tim&amp;lt;/code&amp;gt;, in the second zone of the image.&lt;br /&gt;
&lt;br /&gt;
There are also some formatting codes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| End of text&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| Carriage return&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| Pause&lt;br /&gt;
|-&lt;br /&gt;
! 0x08&lt;br /&gt;
| Yes/No question&lt;br /&gt;
|-&lt;br /&gt;
! 0x74&lt;br /&gt;
| &amp;quot;S.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x75&lt;br /&gt;
| &amp;quot;T.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x76&lt;br /&gt;
| &amp;quot;A.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x77&lt;br /&gt;
| &amp;quot;R.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x79&lt;br /&gt;
| &amp;quot;. &amp;quot; string&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)</id>
		<title>RDT (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)"/>
				<updated>2023-08-25T15:48:24Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: /* Offset 0 (*.RVD) - Camera zones/switches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|extensions={{ext|rdt}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Restored|2017-11-25|https://web.archive.org/web/20171125230810/http://rewiki.regengedanken.de/wiki/.RDT_(Resident_Evil)}}&lt;br /&gt;
&lt;br /&gt;
The '''.RDT''' file format is used to stored the description of a room in Resident Evil on Playstation or PC. It should contain the camera position (to correctly display 3D objects), the background images and sprites used to draw the scene, description of when to change camera, position of enemies when entering room, and so on...&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
The values are stored in Little-Endian order.&lt;br /&gt;
&lt;br /&gt;
The file is always named &amp;lt;code&amp;gt;roomSXX0.rdt&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;roomSXX1.rdt&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; is the game status/stage. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is the location number.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
&lt;br /&gt;
A RDT file starts with this header, to store count for different objects.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  char unknown0;&lt;br /&gt;
  char num_cameras; /* Number of cameras of the room */&lt;br /&gt;
  char num_sound_banks; /* Number of sound banks, stored at offset 18 ? */&lt;br /&gt;
  char unknown1[3];&lt;br /&gt;
  unsigned short unknown2[3];&lt;br /&gt;
&lt;br /&gt;
  /* An array of 3 elements of unknown structure */&lt;br /&gt;
  rdt_header_part_t unknown3[3];&lt;br /&gt;
} rdt_header_t;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  long unknown_pos_x; /* Unknown 3D position */&lt;br /&gt;
  long unknown_pos_y;&lt;br /&gt;
  long unknown_pos_z;&lt;br /&gt;
  unsigned long unknown0[2];&lt;br /&gt;
} rdt_header_part_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Object list ==&lt;br /&gt;
&lt;br /&gt;
Following the header, we have an array of 19 absolute offsets to various objects in the file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
! 0&lt;br /&gt;
| Camera switches (*.RVD)&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| Collision Boundaries for 3D Models (*.SCA)&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for item models)&lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for obstacles &amp;amp; moveable objects)&lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| Block data (*.BLK)&lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| Footstep sound zones (*.FLR)&lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| Initialization Script(s) (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 7&lt;br /&gt;
| Execution Script 0 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 8&lt;br /&gt;
| Execution Script 1 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 9&lt;br /&gt;
| Skeleton animation (*.EMR)&lt;br /&gt;
|-&lt;br /&gt;
! 10&lt;br /&gt;
| Skeleton animation steps (*.EDD)&lt;br /&gt;
|-&lt;br /&gt;
! 11&lt;br /&gt;
| Message text(s) (*.MSG)&lt;br /&gt;
|-&lt;br /&gt;
! 12&lt;br /&gt;
| RAW image (*.RAW), points to several RAW images used for example by Offset 2 for item images&lt;br /&gt;
|-&lt;br /&gt;
! 13&lt;br /&gt;
| Effect animation index (*.ESP)&lt;br /&gt;
|-&lt;br /&gt;
! 14&lt;br /&gt;
| Effect animation data (*.EFF); points to a list of relative offsets to read the EFF/ESP data (read backwards!)&lt;br /&gt;
|-&lt;br /&gt;
! 15&lt;br /&gt;
| Effect animation sprite image(s) (*.TIM); points to the last of those images used for effects&lt;br /&gt;
|-&lt;br /&gt;
! 16&lt;br /&gt;
| Sound attribute table (*.SND); points to a table which is 192 bytes in size&lt;br /&gt;
|-&lt;br /&gt;
! 17&lt;br /&gt;
| offset to a VAB header file (*.VH)&lt;br /&gt;
|-&lt;br /&gt;
! 18&lt;br /&gt;
| offset to VAB sound file (*.VB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Camera positions (*.RID) ===&lt;br /&gt;
&lt;br /&gt;
At absolute offset 0x94 in a file, you'll find an array of 'num_cameras' items with this structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	long masks_offset;	/* Offset to image mask definition */&lt;br /&gt;
	long tim_masks_offset;	/* Offset to TIM file that contains image masks, if not zero */&lt;br /&gt;
	long camera_from_x;	/* Position of the camera */&lt;br /&gt;
	long camera_from_y;&lt;br /&gt;
	long camera_from_z;&lt;br /&gt;
	long camera_to_x;	/* Where the camera is looking to */&lt;br /&gt;
	long camera_to_y;&lt;br /&gt;
	long camera_to_z;&lt;br /&gt;
	long unknown1[3];&lt;br /&gt;
} rdt_camera_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Camera masks (*.PRI) ===&lt;br /&gt;
&lt;br /&gt;
The masks_offset is an offset to an extra structure, which has following header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count_offsets;	/* Number of global offsets, or 0xffff for none */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
} rdt_masks_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you have 'rdt_mask_offset_t' items, which have a 8-byte length. Summing all 'count' fields should equal the 'count_masks' of the rdt_masks_t structure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count;	/* Number of masks, with which to use this structure */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short dst_x;	/* Destination position on background image/screen, to be added */&lt;br /&gt;
	unsigned short dst_y;&lt;br /&gt;
} rdt_mask_offset_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then you have 'rdt_[rect|square]_mask_t' items, which have either 12-byte (rectangular mask) or 8-byte length (square mask). The length is 12 if byte 7 (rdt_square_mask_t.size field) is zero, and 8 otherwise. The 'depth' value is the Z distance of the mask from the camera (low value=near, high value=far).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned char unknown;&lt;br /&gt;
	unsigned char size;	/* Width and height of mask */&lt;br /&gt;
} rdt_square_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned short zero;&lt;br /&gt;
	unsigned short width, height;	/* Dimensions of mask */&lt;br /&gt;
} rdt_rect_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 0 (*.RVD) - Camera zones/switches ===&lt;br /&gt;
&lt;br /&gt;
At offset 0, you'll find the list of camera switches for the current room. The list end with the first 4 bytes are 0xffffffff (i.e for cam0 and cam1 values).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short to; /* Camera number to switch to */&lt;br /&gt;
  unsigned short from; /* Camera number to switch from */&lt;br /&gt;
  short x1,y1; /* Zone the player must enter to switch camera */&lt;br /&gt;
  short x2,y2;&lt;br /&gt;
  short x3,y3;&lt;br /&gt;
  short x4,y4;&lt;br /&gt;
} rdt_camera_switch_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the 'to' value = 9, then it is a zone, defining the area in which the switches will work and 3D objects will be visible while this camera is used, else it is a camera switch.&lt;br /&gt;
&lt;br /&gt;
=== Offset 1 (*.SCA) - Collision Boundaries for 3D Models ===&lt;br /&gt;
&lt;br /&gt;
At offset 1, you'll find the boundary collision data for the current room.&lt;br /&gt;
&lt;br /&gt;
The first 24 bytes are the header which is using the following structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short Cx; /* Ceiling x value */&lt;br /&gt;
  unsigned short Cz; /* Ceiling z value */&lt;br /&gt;
  unsigned long counts[5]; /* Number of objects = sum of these 5 long values */&lt;br /&gt;
} rdt_sca_header_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Followed by the header, the individual boundary entries start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short x1; /* X of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z1; /* Z of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short x2; /* X of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z2; /* Z of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short type; /* type of the boundary plane/object (01=Standard; 03=Circle etc.) */&lt;br /&gt;
  unsigned short floor; /* floor value/ 256 = floor value for use in the game as height definition */ &lt;br /&gt;
} rdt_sca_obj_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this the data block ends with a 4 byte unsigned long holding the total size of the SCA data block in bytes.&lt;br /&gt;
&lt;br /&gt;
=== Offset 2 (*.TMD/*.TIM) - Item 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset2_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 3 (*.TMD/*.TIM) - Room 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset3_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 4 (*.BLK) - Block data ===&lt;br /&gt;
&lt;br /&gt;
It's unknown what this data is used for. It defines plane based areas that look like &amp;quot;inversed&amp;quot; collision boundaries.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
&lt;br /&gt;
typedef struct {&lt;br /&gt;
        unsigned short x1;          /* X of the top-left corner of the object */&lt;br /&gt;
        unsigned short z1;          /* Z of the top-left corner of the object */&lt;br /&gt;
        unsigned short x2;          /* X of the bottom-right corner of the object */&lt;br /&gt;
        unsigned short z2;          /* Z of the bottom-right corner of the object */&lt;br /&gt;
	unsigned short int Dir_bit;&lt;br /&gt;
	unsigned short int Abut;&lt;br /&gt;
} rdt_blk_obj_t;&lt;br /&gt;
&lt;br /&gt;
unsigned short int unknown;	/* unknown; follows after last structure */&lt;br /&gt;
&lt;br /&gt;
rdt_blk_obj_t Block[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 5 (*.FLR) - Floor/footstep sound areas ===&lt;br /&gt;
&lt;br /&gt;
This data defines the footstep sound areas and which sound to use. It is also related to the script opcode, 'Flr_set'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
typedef struct {&lt;br /&gt;
	signed short int x;         /* x coordinate where the area is drawn from */&lt;br /&gt;
        signed short int y;         /* y coordinate where the area is drawn from */&lt;br /&gt;
	signed short int x_width;   /* x width of the area */&lt;br /&gt;
        signed short int y_width;   /* y width of the area */&lt;br /&gt;
	unsigned short int sound;   /* footstep ID sound to use */&lt;br /&gt;
} rdt_flr_obj_t;&lt;br /&gt;
&lt;br /&gt;
rdt_flr_obj_t Floor[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 6 (*.SCD) - Scenario data ===&lt;br /&gt;
&lt;br /&gt;
This is the initialisation script for the room. It starts with an unsigned short giving the length of the script in bytes. Then follows the script, in bytecode-style.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Byte&lt;br /&gt;
| Instruction&lt;br /&gt;
| Length&lt;br /&gt;
| Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Nop&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| If&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0x01 */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
} script_if_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This structure is followed by one or several conditions for the if (condition) instruction. Any condition evaluated to false will end the if () block.&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| Else&lt;br /&gt;
| 2&lt;br /&gt;
| Follows: byte with ELSE block length. Note: it's either If/Endif, or If/Else; there is no If/Else/Endif sequence.&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| End If&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| BIT_TEST&lt;br /&gt;
| 4&lt;br /&gt;
| Bit test&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x04 */&lt;br /&gt;
	unsigned char object;&lt;br /&gt;
	unsigned char param;	/* Bits 7-5: Longword index in object, see array following */&lt;br /&gt;
				/* Bits 4-0: Bit number to test */&lt;br /&gt;
	unsigned char op;	/* Operation */&lt;br /&gt;
				/* 0x00:test bit is 0 */&lt;br /&gt;
				/* 0x01:test bit is 1 */&lt;br /&gt;
} script_bit_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| BIT_OP&lt;br /&gt;
| 4&lt;br /&gt;
| Bit operation&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x05 */&lt;br /&gt;
	unsigned char object;	/* Number of object to operate on, see array following */&lt;br /&gt;
	unsigned char param;	/* Bits 7-5: Longword index in object */&lt;br /&gt;
				/* Bits 4-0: Bit number to clear/set/change is (31-this field value) */&lt;br /&gt;
	unsigned char op;	/* Operation */&lt;br /&gt;
				/* 0x00:clear bit */&lt;br /&gt;
				/* 0x01:set bit */&lt;br /&gt;
				/* 0x02:change bit */&lt;br /&gt;
} script_bit_op_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| OBJ06_TEST&lt;br /&gt;
| 4&lt;br /&gt;
| Compare values&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x06 */&lt;br /&gt;
	unsigned char src;	/* Index in some object for source value */&lt;br /&gt;
				/* 0x00:Current stage */&lt;br /&gt;
				/* 0x01:Current room */&lt;br /&gt;
				/* 0x02:Current camera */&lt;br /&gt;
				/* 0x03:Stage and room */&lt;br /&gt;
				/* 0x04:Previous/next camera */&lt;br /&gt;
				/* 0x05:? */&lt;br /&gt;
				/* 0x06:? */&lt;br /&gt;
				/* 0x07:? Used in instruction 0x1a */&lt;br /&gt;
				/* 0x08:? Used in instruction 0x1c */&lt;br /&gt;
				/* 0x09:Flags for current camera */&lt;br /&gt;
	unsigned char func;	/* Compare function */&lt;br /&gt;
				/* 0x00:EQ */&lt;br /&gt;
				/* 0x01:LT */&lt;br /&gt;
				/* 0x02:LE */&lt;br /&gt;
				/* 0x03:GT */&lt;br /&gt;
				/* 0x04:GE */&lt;br /&gt;
				/* 0x05:NE */&lt;br /&gt;
	char param;		/* Raw value to compare against */&lt;br /&gt;
} script_obj06_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| OBJ07_TEST&lt;br /&gt;
| 6&lt;br /&gt;
| Compare values&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x07 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned char src;	/* Word index in some object for source value */&lt;br /&gt;
				/* (not the same object as instruction 0x06) */&lt;br /&gt;
	unsigned char func;	/* Compare function */&lt;br /&gt;
				/* 0x00:EQ */&lt;br /&gt;
				/* 0x01:LT */&lt;br /&gt;
				/* 0x02:LE */&lt;br /&gt;
				/* 0x03:GT */&lt;br /&gt;
				/* 0x04:GE */&lt;br /&gt;
				/* 0x05:NE */&lt;br /&gt;
	short param;		/* Raw value to compare against */&lt;br /&gt;
} script_obj07_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| STAGEROOMCAM_SET&lt;br /&gt;
| 4&lt;br /&gt;
| Set value for stage, room or camera&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x08 */&lt;br /&gt;
	unsigned char id;	/* 0: stage, 1: room, 2: camera */&lt;br /&gt;
	unsigned short value;&lt;br /&gt;
} script_stageroomcam_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| CUT_SET&lt;br /&gt;
| 2&lt;br /&gt;
| Switch to prev/next camera, set it as current camera&lt;br /&gt;
|-&lt;br /&gt;
| 0x0a&lt;br /&gt;
| CUT_SET&lt;br /&gt;
| 2&lt;br /&gt;
| Switch to current camera, set it as prev/next camera&lt;br /&gt;
|-&lt;br /&gt;
| 0x0b&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0c&lt;br /&gt;
| DOOR_SET&lt;br /&gt;
| 26&lt;br /&gt;
| TODO: find where next_camera is stored&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0c */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	short x,y,w,h;&lt;br /&gt;
	unsigned char unknown0[5];&lt;br /&gt;
	unsigned char next_stage_and_room;	/* bits 7,6,5: stage, 4,3,2,1,0: room */&lt;br /&gt;
	short next_x,next_y,next_z;&lt;br /&gt;
	short next_dir;&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
} script_door_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note: if stage=0, we must keep current stage, else switch stage.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0d&lt;br /&gt;
| ITEM_SET&lt;br /&gt;
| 18&lt;br /&gt;
| Pickable items, objects, obstacles&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0d */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	short x,y,w,h;&lt;br /&gt;
	unsigned char type;	/* 0x02: message, obstacle? */&lt;br /&gt;
				/* 0x07: trigger,event,movable object? */&lt;br /&gt;
				/* 0x08: box */&lt;br /&gt;
				/* 0x09: pickable object, trigger? */&lt;br /&gt;
				/* 0x10: typewriter */&lt;br /&gt;
	unsigned char unknown[7];&lt;br /&gt;
} script_item_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0e&lt;br /&gt;
| Nop&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0f&lt;br /&gt;
| ?&lt;br /&gt;
| 8&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0f */&lt;br /&gt;
	unsigned char bitmask;&lt;br /&gt;
	unsigned short unknown[3];&lt;br /&gt;
} script_inst0f_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| OBJ10_TEST&lt;br /&gt;
| 2&lt;br /&gt;
| Check if obj10 has value given as parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x10 */&lt;br /&gt;
	char value;&lt;br /&gt;
} script_obj10_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| OBJ11_TEST&lt;br /&gt;
| 2&lt;br /&gt;
| Check if obj11 has value given as parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x11 */&lt;br /&gt;
	char value;&lt;br /&gt;
} script_obj11_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| Item 0x12&lt;br /&gt;
| 10&lt;br /&gt;
| Typewriter? Stairs?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x12 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown0[2];&lt;br /&gt;
	short unknown1[3];&lt;br /&gt;
} script_inst12_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| Item 0x13&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x13 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown0[2];&lt;br /&gt;
} script_inst13_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x14 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned char param1;&lt;br /&gt;
	unsigned char param2;&lt;br /&gt;
} script_inst14_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| Volume set?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| ?&lt;br /&gt;
| 10&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ITEM_MODEL_SET&lt;br /&gt;
| 26&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x18 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown[24];&lt;br /&gt;
} script_item_model_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| OBJ19_SET&lt;br /&gt;
| 4&lt;br /&gt;
| Set value in obj19&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x09 */&lt;br /&gt;
	unsigned char src;	/* Index in some object */&lt;br /&gt;
	char value;		/* New value */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
} script_obj19_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1a&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1b&lt;br /&gt;
| EM_SET&lt;br /&gt;
| 22&lt;br /&gt;
| Entity (enemy, other character)&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1b */&lt;br /&gt;
	unsigned char model;&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned char killed;	/* 0xff for non enemy, else index in killed array to avoid respawn */&lt;br /&gt;
	unsigned char unknown1[2];&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
	unsigned short a;&lt;br /&gt;
	unsigned short unknown2;&lt;br /&gt;
	unsigned short x;&lt;br /&gt;
	unsigned short y;&lt;br /&gt;
	unsigned short z;&lt;br /&gt;
	unsigned char id;	/* ID of entity, used for example for EM_POS_SET */&lt;br /&gt;
	unsigned char unknown3[3];&lt;br /&gt;
} script_em_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1c */&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned short unknown1[2];&lt;br /&gt;
} script_inst1c_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1d&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1e&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1e */&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
} script_inst1e_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1f&lt;br /&gt;
| OM_SET&lt;br /&gt;
| 28&lt;br /&gt;
| Movable (crate, statue) or animated (lid) objects?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1f */&lt;br /&gt;
	unsigned char id;	/* Bits 5-0: Index in array stored at offset 2 of RDT file */&lt;br /&gt;
	unsigned char type;	/* 0x11: safe lid&amp;amp;nbsp;? */&lt;br /&gt;
	unsigned char unknown[25];&lt;br /&gt;
} script_om_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| PLAYER_POS_SET&lt;br /&gt;
| 14&lt;br /&gt;
| Change player position and direction&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x20 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short unknown0,angle,unknown1;&lt;br /&gt;
	unsigned short x,y,z;&lt;br /&gt;
} script_player_pos_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| EM_POS_SET&lt;br /&gt;
| 14&lt;br /&gt;
| Change entity position and direction&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x21 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned short dummy;&lt;br /&gt;
	unsigned short angle;&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short x,y,z;&lt;br /&gt;
} script_em_pos_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x23 */&lt;br /&gt;
	unsigned char flag;&lt;br /&gt;
} script_inst23_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x27&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| ?&lt;br /&gt;
| 4,6 or 8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| Select sound bank?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2a&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2b&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2d&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2f&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| ?&lt;br /&gt;
| 2 or 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| ?&lt;br /&gt;
| 8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| Set value for internal array&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x37 */&lt;br /&gt;
	unsigned char row;	/* row (0-7) column (0-31) for internal byte array */&lt;br /&gt;
	unsigned char col;&lt;br /&gt;
	unsigned char value;&lt;br /&gt;
} script_inst37_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3a&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3b&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3c&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3d&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3e&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3f&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| ?&lt;br /&gt;
| 16&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| ?&lt;br /&gt;
| 2+12*n+2*m (was 44)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| ?&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4a&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4b&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4c&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| Set value in OBJ06 ?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x4c */&lt;br /&gt;
	unsigned char unknown[3];&lt;br /&gt;
} script_inst4c_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4d&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4e&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4f&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Objects for bit operations ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object number&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Game status. Bit 23:Player character (0: Chris, 1: Jill, or vice versa).&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 7 (*.SCD) - Execution script for room ===&lt;br /&gt;
&lt;br /&gt;
This script is run regularly to update stuff in current room. It follows same structure as the one at offset 6.&lt;br /&gt;
&lt;br /&gt;
=== Offset 8, Script events ? ===&lt;br /&gt;
&lt;br /&gt;
This structure starts with a NULL terminated list of [[unsigned long]], which are offsets relative to start of this object. These offsets store also some bytecodes, different than those above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf6&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf7&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf7&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf8&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf8&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf9&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1 or 3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfa&amp;lt;/code&amp;gt;&lt;br /&gt;
| For&lt;br /&gt;
| 4&lt;br /&gt;
| Initialize a for loop. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfa */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short count;&lt;br /&gt;
} event_for_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfb&amp;lt;/code&amp;gt;&lt;br /&gt;
| Next&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set_Inst&lt;br /&gt;
| variable	&lt;br /&gt;
| Initialize bytecode instruction to execute later. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfc */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
	unsigned char bytecode_inst[];&lt;br /&gt;
} event_set_inst_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfd&amp;lt;/code&amp;gt;&lt;br /&gt;
| Exec_inst&lt;br /&gt;
| 1&lt;br /&gt;
| Execute bytecode instruction previously set with 0xfc instruction.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfe&amp;lt;/code&amp;gt;&lt;br /&gt;
| Sleep, process next event&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt;&lt;br /&gt;
| Disable event&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 9 (*.EMR) - Skeleton animation ===&lt;br /&gt;
&lt;br /&gt;
See File/Section 0 of .EMD_(Resident_Evil)&lt;br /&gt;
&lt;br /&gt;
=== Offset 10 (*.EDD) - Skeleton animation steps ===&lt;br /&gt;
&lt;br /&gt;
See File/Section 1 of .EMD_(Resident_Evil)&lt;br /&gt;
&lt;br /&gt;
=== Offset 11 (*.MSG) - Text messages ===&lt;br /&gt;
&lt;br /&gt;
First, you have an arrays of [[unsigned short]], which are relative offsets to the beginning of this object. So the number of items is the first offset/2 (if we are lucky that the first offset always has the lowest value).&lt;br /&gt;
&lt;br /&gt;
It contains the texts for cutscenes, dialogs, examining objects.&lt;br /&gt;
&lt;br /&gt;
Conversion table, from byte to ASCII value:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! 0&lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
! 7&lt;br /&gt;
! 8&lt;br /&gt;
! 9&lt;br /&gt;
! 10&lt;br /&gt;
! 11&lt;br /&gt;
! 12&lt;br /&gt;
! 13&lt;br /&gt;
! 14&lt;br /&gt;
! 15&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
|  &lt;br /&gt;
| .&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| (&lt;br /&gt;
| )&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
! 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| :&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| ,&lt;br /&gt;
| &amp;quot;&lt;br /&gt;
| !&lt;br /&gt;
| ?&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| A&lt;br /&gt;
| B&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
! 0x20&lt;br /&gt;
| D&lt;br /&gt;
| E&lt;br /&gt;
| F&lt;br /&gt;
| G&lt;br /&gt;
| H&lt;br /&gt;
| I&lt;br /&gt;
| J&lt;br /&gt;
| K&lt;br /&gt;
| L&lt;br /&gt;
| M&lt;br /&gt;
| N&lt;br /&gt;
| O&lt;br /&gt;
| P&lt;br /&gt;
| Q&lt;br /&gt;
| R&lt;br /&gt;
| S&lt;br /&gt;
|-&lt;br /&gt;
! 0x30&lt;br /&gt;
| T&lt;br /&gt;
| U&lt;br /&gt;
| V&lt;br /&gt;
| W&lt;br /&gt;
| X&lt;br /&gt;
| Y&lt;br /&gt;
| Z&lt;br /&gt;
| [&lt;br /&gt;
| /&lt;br /&gt;
| ]&lt;br /&gt;
| '&lt;br /&gt;
| -&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| a&lt;br /&gt;
| b&lt;br /&gt;
| c&lt;br /&gt;
|-&lt;br /&gt;
! 0x40&lt;br /&gt;
| d&lt;br /&gt;
| e&lt;br /&gt;
| f&lt;br /&gt;
| g&lt;br /&gt;
| h&lt;br /&gt;
| i&lt;br /&gt;
| j&lt;br /&gt;
| k&lt;br /&gt;
| l&lt;br /&gt;
| m&lt;br /&gt;
| n&lt;br /&gt;
| o&lt;br /&gt;
| p&lt;br /&gt;
| q&lt;br /&gt;
| r&lt;br /&gt;
| s&lt;br /&gt;
|-&lt;br /&gt;
! 0x50&lt;br /&gt;
| t&lt;br /&gt;
| u&lt;br /&gt;
| v&lt;br /&gt;
| w&lt;br /&gt;
| x&lt;br /&gt;
| y&lt;br /&gt;
| z&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Codes above 0x57 may also be different given the language, for characters with trema, accents and the like. The complete character table to use resides in the image file &amp;lt;code&amp;gt;horr/[country]/data/fontus.tim&amp;lt;/code&amp;gt;, in the second zone of the image.&lt;br /&gt;
&lt;br /&gt;
There are also some formatting codes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| End of text&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| Carriage return&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| Pause&lt;br /&gt;
|-&lt;br /&gt;
! 0x08&lt;br /&gt;
| Yes/No question&lt;br /&gt;
|-&lt;br /&gt;
! 0x74&lt;br /&gt;
| &amp;quot;S.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x75&lt;br /&gt;
| &amp;quot;T.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x76&lt;br /&gt;
| &amp;quot;A.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x77&lt;br /&gt;
| &amp;quot;R.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x79&lt;br /&gt;
| &amp;quot;. &amp;quot; string&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)</id>
		<title>RDT (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)"/>
				<updated>2023-08-25T15:47:43Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: /* Offset 11 (*.MSG) - Text messages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|extensions={{ext|rdt}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Restored|2017-11-25|https://web.archive.org/web/20171125230810/http://rewiki.regengedanken.de/wiki/.RDT_(Resident_Evil)}}&lt;br /&gt;
&lt;br /&gt;
The '''.RDT''' file format is used to stored the description of a room in Resident Evil on Playstation or PC. It should contain the camera position (to correctly display 3D objects), the background images and sprites used to draw the scene, description of when to change camera, position of enemies when entering room, and so on...&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
The values are stored in Little-Endian order.&lt;br /&gt;
&lt;br /&gt;
The file is always named &amp;lt;code&amp;gt;roomSXX0.rdt&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;roomSXX1.rdt&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; is the game status/stage. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is the location number.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
&lt;br /&gt;
A RDT file starts with this header, to store count for different objects.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  char unknown0;&lt;br /&gt;
  char num_cameras; /* Number of cameras of the room */&lt;br /&gt;
  char num_sound_banks; /* Number of sound banks, stored at offset 18 ? */&lt;br /&gt;
  char unknown1[3];&lt;br /&gt;
  unsigned short unknown2[3];&lt;br /&gt;
&lt;br /&gt;
  /* An array of 3 elements of unknown structure */&lt;br /&gt;
  rdt_header_part_t unknown3[3];&lt;br /&gt;
} rdt_header_t;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  long unknown_pos_x; /* Unknown 3D position */&lt;br /&gt;
  long unknown_pos_y;&lt;br /&gt;
  long unknown_pos_z;&lt;br /&gt;
  unsigned long unknown0[2];&lt;br /&gt;
} rdt_header_part_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Object list ==&lt;br /&gt;
&lt;br /&gt;
Following the header, we have an array of 19 absolute offsets to various objects in the file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
! 0&lt;br /&gt;
| Camera switches (*.RVD)&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| Collision Boundaries for 3D Models (*.SCA)&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for item models)&lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for obstacles &amp;amp; moveable objects)&lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| Block data (*.BLK)&lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| Footstep sound zones (*.FLR)&lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| Initialization Script(s) (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 7&lt;br /&gt;
| Execution Script 0 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 8&lt;br /&gt;
| Execution Script 1 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 9&lt;br /&gt;
| Skeleton animation (*.EMR)&lt;br /&gt;
|-&lt;br /&gt;
! 10&lt;br /&gt;
| Skeleton animation steps (*.EDD)&lt;br /&gt;
|-&lt;br /&gt;
! 11&lt;br /&gt;
| Message text(s) (*.MSG)&lt;br /&gt;
|-&lt;br /&gt;
! 12&lt;br /&gt;
| RAW image (*.RAW), points to several RAW images used for example by Offset 2 for item images&lt;br /&gt;
|-&lt;br /&gt;
! 13&lt;br /&gt;
| Effect animation index (*.ESP)&lt;br /&gt;
|-&lt;br /&gt;
! 14&lt;br /&gt;
| Effect animation data (*.EFF); points to a list of relative offsets to read the EFF/ESP data (read backwards!)&lt;br /&gt;
|-&lt;br /&gt;
! 15&lt;br /&gt;
| Effect animation sprite image(s) (*.TIM); points to the last of those images used for effects&lt;br /&gt;
|-&lt;br /&gt;
! 16&lt;br /&gt;
| Sound attribute table (*.SND); points to a table which is 192 bytes in size&lt;br /&gt;
|-&lt;br /&gt;
! 17&lt;br /&gt;
| offset to a VAB header file (*.VH)&lt;br /&gt;
|-&lt;br /&gt;
! 18&lt;br /&gt;
| offset to VAB sound file (*.VB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Camera positions (*.RID) ===&lt;br /&gt;
&lt;br /&gt;
At absolute offset 0x94 in a file, you'll find an array of 'num_cameras' items with this structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	long masks_offset;	/* Offset to image mask definition */&lt;br /&gt;
	long tim_masks_offset;	/* Offset to TIM file that contains image masks, if not zero */&lt;br /&gt;
	long camera_from_x;	/* Position of the camera */&lt;br /&gt;
	long camera_from_y;&lt;br /&gt;
	long camera_from_z;&lt;br /&gt;
	long camera_to_x;	/* Where the camera is looking to */&lt;br /&gt;
	long camera_to_y;&lt;br /&gt;
	long camera_to_z;&lt;br /&gt;
	long unknown1[3];&lt;br /&gt;
} rdt_camera_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Camera masks (*.PRI) ===&lt;br /&gt;
&lt;br /&gt;
The masks_offset is an offset to an extra structure, which has following header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count_offsets;	/* Number of global offsets, or 0xffff for none */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
} rdt_masks_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you have 'rdt_mask_offset_t' items, which have a 8-byte length. Summing all 'count' fields should equal the 'count_masks' of the rdt_masks_t structure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count;	/* Number of masks, with which to use this structure */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short dst_x;	/* Destination position on background image/screen, to be added */&lt;br /&gt;
	unsigned short dst_y;&lt;br /&gt;
} rdt_mask_offset_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then you have 'rdt_[rect|square]_mask_t' items, which have either 12-byte (rectangular mask) or 8-byte length (square mask). The length is 12 if byte 7 (rdt_square_mask_t.size field) is zero, and 8 otherwise. The 'depth' value is the Z distance of the mask from the camera (low value=near, high value=far).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned char unknown;&lt;br /&gt;
	unsigned char size;	/* Width and height of mask */&lt;br /&gt;
} rdt_square_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned short zero;&lt;br /&gt;
	unsigned short width, height;	/* Dimensions of mask */&lt;br /&gt;
} rdt_rect_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 0 (*.RVD) - Camera zones/switches ===&lt;br /&gt;
&lt;br /&gt;
At offset 0, you'll find the list of camera switches for the current room. The list end with the first 4 bytes are 0xffffffff (i.e for cam0 and cam1 values).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short to; /* Camera number to switch to */&lt;br /&gt;
  unsigned short from; /* Camera number to switch from */&lt;br /&gt;
  short x1,y1; /* Zone the player must enter to switch camera */&lt;br /&gt;
  short x2,y2;&lt;br /&gt;
  short x3,y3;&lt;br /&gt;
  short x4,y4;&lt;br /&gt;
} rdt_camera_switch_t;&lt;br /&gt;
If the 'to' value = 9, then it is a zone, defining the area in which the switches will work and 3D objects will be visible while this camera is used, else it is a camera switch.&lt;br /&gt;
&lt;br /&gt;
=== Offset 1 (*.SCA) - Collision Boundaries for 3D Models ===&lt;br /&gt;
&lt;br /&gt;
At offset 1, you'll find the boundary collision data for the current room.&lt;br /&gt;
&lt;br /&gt;
The first 24 bytes are the header which is using the following structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short Cx; /* Ceiling x value */&lt;br /&gt;
  unsigned short Cz; /* Ceiling z value */&lt;br /&gt;
  unsigned long counts[5]; /* Number of objects = sum of these 5 long values */&lt;br /&gt;
} rdt_sca_header_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Followed by the header, the individual boundary entries start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short x1; /* X of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z1; /* Z of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short x2; /* X of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z2; /* Z of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short type; /* type of the boundary plane/object (01=Standard; 03=Circle etc.) */&lt;br /&gt;
  unsigned short floor; /* floor value/ 256 = floor value for use in the game as height definition */ &lt;br /&gt;
} rdt_sca_obj_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this the data block ends with a 4 byte unsigned long holding the total size of the SCA data block in bytes.&lt;br /&gt;
&lt;br /&gt;
=== Offset 2 (*.TMD/*.TIM) - Item 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset2_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 3 (*.TMD/*.TIM) - Room 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset3_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 4 (*.BLK) - Block data ===&lt;br /&gt;
&lt;br /&gt;
It's unknown what this data is used for. It defines plane based areas that look like &amp;quot;inversed&amp;quot; collision boundaries.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
&lt;br /&gt;
typedef struct {&lt;br /&gt;
        unsigned short x1;          /* X of the top-left corner of the object */&lt;br /&gt;
        unsigned short z1;          /* Z of the top-left corner of the object */&lt;br /&gt;
        unsigned short x2;          /* X of the bottom-right corner of the object */&lt;br /&gt;
        unsigned short z2;          /* Z of the bottom-right corner of the object */&lt;br /&gt;
	unsigned short int Dir_bit;&lt;br /&gt;
	unsigned short int Abut;&lt;br /&gt;
} rdt_blk_obj_t;&lt;br /&gt;
&lt;br /&gt;
unsigned short int unknown;	/* unknown; follows after last structure */&lt;br /&gt;
&lt;br /&gt;
rdt_blk_obj_t Block[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 5 (*.FLR) - Floor/footstep sound areas ===&lt;br /&gt;
&lt;br /&gt;
This data defines the footstep sound areas and which sound to use. It is also related to the script opcode, 'Flr_set'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
typedef struct {&lt;br /&gt;
	signed short int x;         /* x coordinate where the area is drawn from */&lt;br /&gt;
        signed short int y;         /* y coordinate where the area is drawn from */&lt;br /&gt;
	signed short int x_width;   /* x width of the area */&lt;br /&gt;
        signed short int y_width;   /* y width of the area */&lt;br /&gt;
	unsigned short int sound;   /* footstep ID sound to use */&lt;br /&gt;
} rdt_flr_obj_t;&lt;br /&gt;
&lt;br /&gt;
rdt_flr_obj_t Floor[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 6 (*.SCD) - Scenario data ===&lt;br /&gt;
&lt;br /&gt;
This is the initialisation script for the room. It starts with an unsigned short giving the length of the script in bytes. Then follows the script, in bytecode-style.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Byte&lt;br /&gt;
| Instruction&lt;br /&gt;
| Length&lt;br /&gt;
| Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Nop&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| If&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0x01 */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
} script_if_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This structure is followed by one or several conditions for the if (condition) instruction. Any condition evaluated to false will end the if () block.&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| Else&lt;br /&gt;
| 2&lt;br /&gt;
| Follows: byte with ELSE block length. Note: it's either If/Endif, or If/Else; there is no If/Else/Endif sequence.&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| End If&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| BIT_TEST&lt;br /&gt;
| 4&lt;br /&gt;
| Bit test&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x04 */&lt;br /&gt;
	unsigned char object;&lt;br /&gt;
	unsigned char param;	/* Bits 7-5: Longword index in object, see array following */&lt;br /&gt;
				/* Bits 4-0: Bit number to test */&lt;br /&gt;
	unsigned char op;	/* Operation */&lt;br /&gt;
				/* 0x00:test bit is 0 */&lt;br /&gt;
				/* 0x01:test bit is 1 */&lt;br /&gt;
} script_bit_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| BIT_OP&lt;br /&gt;
| 4&lt;br /&gt;
| Bit operation&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x05 */&lt;br /&gt;
	unsigned char object;	/* Number of object to operate on, see array following */&lt;br /&gt;
	unsigned char param;	/* Bits 7-5: Longword index in object */&lt;br /&gt;
				/* Bits 4-0: Bit number to clear/set/change is (31-this field value) */&lt;br /&gt;
	unsigned char op;	/* Operation */&lt;br /&gt;
				/* 0x00:clear bit */&lt;br /&gt;
				/* 0x01:set bit */&lt;br /&gt;
				/* 0x02:change bit */&lt;br /&gt;
} script_bit_op_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| OBJ06_TEST&lt;br /&gt;
| 4&lt;br /&gt;
| Compare values&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x06 */&lt;br /&gt;
	unsigned char src;	/* Index in some object for source value */&lt;br /&gt;
				/* 0x00:Current stage */&lt;br /&gt;
				/* 0x01:Current room */&lt;br /&gt;
				/* 0x02:Current camera */&lt;br /&gt;
				/* 0x03:Stage and room */&lt;br /&gt;
				/* 0x04:Previous/next camera */&lt;br /&gt;
				/* 0x05:? */&lt;br /&gt;
				/* 0x06:? */&lt;br /&gt;
				/* 0x07:? Used in instruction 0x1a */&lt;br /&gt;
				/* 0x08:? Used in instruction 0x1c */&lt;br /&gt;
				/* 0x09:Flags for current camera */&lt;br /&gt;
	unsigned char func;	/* Compare function */&lt;br /&gt;
				/* 0x00:EQ */&lt;br /&gt;
				/* 0x01:LT */&lt;br /&gt;
				/* 0x02:LE */&lt;br /&gt;
				/* 0x03:GT */&lt;br /&gt;
				/* 0x04:GE */&lt;br /&gt;
				/* 0x05:NE */&lt;br /&gt;
	char param;		/* Raw value to compare against */&lt;br /&gt;
} script_obj06_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| OBJ07_TEST&lt;br /&gt;
| 6&lt;br /&gt;
| Compare values&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x07 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned char src;	/* Word index in some object for source value */&lt;br /&gt;
				/* (not the same object as instruction 0x06) */&lt;br /&gt;
	unsigned char func;	/* Compare function */&lt;br /&gt;
				/* 0x00:EQ */&lt;br /&gt;
				/* 0x01:LT */&lt;br /&gt;
				/* 0x02:LE */&lt;br /&gt;
				/* 0x03:GT */&lt;br /&gt;
				/* 0x04:GE */&lt;br /&gt;
				/* 0x05:NE */&lt;br /&gt;
	short param;		/* Raw value to compare against */&lt;br /&gt;
} script_obj07_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| STAGEROOMCAM_SET&lt;br /&gt;
| 4&lt;br /&gt;
| Set value for stage, room or camera&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x08 */&lt;br /&gt;
	unsigned char id;	/* 0: stage, 1: room, 2: camera */&lt;br /&gt;
	unsigned short value;&lt;br /&gt;
} script_stageroomcam_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| CUT_SET&lt;br /&gt;
| 2&lt;br /&gt;
| Switch to prev/next camera, set it as current camera&lt;br /&gt;
|-&lt;br /&gt;
| 0x0a&lt;br /&gt;
| CUT_SET&lt;br /&gt;
| 2&lt;br /&gt;
| Switch to current camera, set it as prev/next camera&lt;br /&gt;
|-&lt;br /&gt;
| 0x0b&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0c&lt;br /&gt;
| DOOR_SET&lt;br /&gt;
| 26&lt;br /&gt;
| TODO: find where next_camera is stored&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0c */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	short x,y,w,h;&lt;br /&gt;
	unsigned char unknown0[5];&lt;br /&gt;
	unsigned char next_stage_and_room;	/* bits 7,6,5: stage, 4,3,2,1,0: room */&lt;br /&gt;
	short next_x,next_y,next_z;&lt;br /&gt;
	short next_dir;&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
} script_door_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note: if stage=0, we must keep current stage, else switch stage.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0d&lt;br /&gt;
| ITEM_SET&lt;br /&gt;
| 18&lt;br /&gt;
| Pickable items, objects, obstacles&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0d */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	short x,y,w,h;&lt;br /&gt;
	unsigned char type;	/* 0x02: message, obstacle? */&lt;br /&gt;
				/* 0x07: trigger,event,movable object? */&lt;br /&gt;
				/* 0x08: box */&lt;br /&gt;
				/* 0x09: pickable object, trigger? */&lt;br /&gt;
				/* 0x10: typewriter */&lt;br /&gt;
	unsigned char unknown[7];&lt;br /&gt;
} script_item_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0e&lt;br /&gt;
| Nop&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0f&lt;br /&gt;
| ?&lt;br /&gt;
| 8&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0f */&lt;br /&gt;
	unsigned char bitmask;&lt;br /&gt;
	unsigned short unknown[3];&lt;br /&gt;
} script_inst0f_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| OBJ10_TEST&lt;br /&gt;
| 2&lt;br /&gt;
| Check if obj10 has value given as parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x10 */&lt;br /&gt;
	char value;&lt;br /&gt;
} script_obj10_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| OBJ11_TEST&lt;br /&gt;
| 2&lt;br /&gt;
| Check if obj11 has value given as parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x11 */&lt;br /&gt;
	char value;&lt;br /&gt;
} script_obj11_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| Item 0x12&lt;br /&gt;
| 10&lt;br /&gt;
| Typewriter? Stairs?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x12 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown0[2];&lt;br /&gt;
	short unknown1[3];&lt;br /&gt;
} script_inst12_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| Item 0x13&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x13 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown0[2];&lt;br /&gt;
} script_inst13_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x14 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned char param1;&lt;br /&gt;
	unsigned char param2;&lt;br /&gt;
} script_inst14_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| Volume set?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| ?&lt;br /&gt;
| 10&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ITEM_MODEL_SET&lt;br /&gt;
| 26&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x18 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown[24];&lt;br /&gt;
} script_item_model_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| OBJ19_SET&lt;br /&gt;
| 4&lt;br /&gt;
| Set value in obj19&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x09 */&lt;br /&gt;
	unsigned char src;	/* Index in some object */&lt;br /&gt;
	char value;		/* New value */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
} script_obj19_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1a&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1b&lt;br /&gt;
| EM_SET&lt;br /&gt;
| 22&lt;br /&gt;
| Entity (enemy, other character)&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1b */&lt;br /&gt;
	unsigned char model;&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned char killed;	/* 0xff for non enemy, else index in killed array to avoid respawn */&lt;br /&gt;
	unsigned char unknown1[2];&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
	unsigned short a;&lt;br /&gt;
	unsigned short unknown2;&lt;br /&gt;
	unsigned short x;&lt;br /&gt;
	unsigned short y;&lt;br /&gt;
	unsigned short z;&lt;br /&gt;
	unsigned char id;	/* ID of entity, used for example for EM_POS_SET */&lt;br /&gt;
	unsigned char unknown3[3];&lt;br /&gt;
} script_em_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1c */&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned short unknown1[2];&lt;br /&gt;
} script_inst1c_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1d&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1e&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1e */&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
} script_inst1e_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1f&lt;br /&gt;
| OM_SET&lt;br /&gt;
| 28&lt;br /&gt;
| Movable (crate, statue) or animated (lid) objects?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1f */&lt;br /&gt;
	unsigned char id;	/* Bits 5-0: Index in array stored at offset 2 of RDT file */&lt;br /&gt;
	unsigned char type;	/* 0x11: safe lid&amp;amp;nbsp;? */&lt;br /&gt;
	unsigned char unknown[25];&lt;br /&gt;
} script_om_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| PLAYER_POS_SET&lt;br /&gt;
| 14&lt;br /&gt;
| Change player position and direction&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x20 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short unknown0,angle,unknown1;&lt;br /&gt;
	unsigned short x,y,z;&lt;br /&gt;
} script_player_pos_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| EM_POS_SET&lt;br /&gt;
| 14&lt;br /&gt;
| Change entity position and direction&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x21 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned short dummy;&lt;br /&gt;
	unsigned short angle;&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short x,y,z;&lt;br /&gt;
} script_em_pos_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x23 */&lt;br /&gt;
	unsigned char flag;&lt;br /&gt;
} script_inst23_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x27&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| ?&lt;br /&gt;
| 4,6 or 8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| Select sound bank?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2a&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2b&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2d&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2f&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| ?&lt;br /&gt;
| 2 or 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| ?&lt;br /&gt;
| 8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| Set value for internal array&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x37 */&lt;br /&gt;
	unsigned char row;	/* row (0-7) column (0-31) for internal byte array */&lt;br /&gt;
	unsigned char col;&lt;br /&gt;
	unsigned char value;&lt;br /&gt;
} script_inst37_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3a&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3b&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3c&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3d&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3e&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3f&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| ?&lt;br /&gt;
| 16&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| ?&lt;br /&gt;
| 2+12*n+2*m (was 44)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| ?&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4a&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4b&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4c&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| Set value in OBJ06 ?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x4c */&lt;br /&gt;
	unsigned char unknown[3];&lt;br /&gt;
} script_inst4c_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4d&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4e&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4f&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Objects for bit operations ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object number&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Game status. Bit 23:Player character (0: Chris, 1: Jill, or vice versa).&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 7 (*.SCD) - Execution script for room ===&lt;br /&gt;
&lt;br /&gt;
This script is run regularly to update stuff in current room. It follows same structure as the one at offset 6.&lt;br /&gt;
&lt;br /&gt;
=== Offset 8, Script events ? ===&lt;br /&gt;
&lt;br /&gt;
This structure starts with a NULL terminated list of [[unsigned long]], which are offsets relative to start of this object. These offsets store also some bytecodes, different than those above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf6&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf7&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf7&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf8&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf8&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf9&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1 or 3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfa&amp;lt;/code&amp;gt;&lt;br /&gt;
| For&lt;br /&gt;
| 4&lt;br /&gt;
| Initialize a for loop. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfa */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short count;&lt;br /&gt;
} event_for_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfb&amp;lt;/code&amp;gt;&lt;br /&gt;
| Next&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set_Inst&lt;br /&gt;
| variable	&lt;br /&gt;
| Initialize bytecode instruction to execute later. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfc */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
	unsigned char bytecode_inst[];&lt;br /&gt;
} event_set_inst_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfd&amp;lt;/code&amp;gt;&lt;br /&gt;
| Exec_inst&lt;br /&gt;
| 1&lt;br /&gt;
| Execute bytecode instruction previously set with 0xfc instruction.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfe&amp;lt;/code&amp;gt;&lt;br /&gt;
| Sleep, process next event&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt;&lt;br /&gt;
| Disable event&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 9 (*.EMR) - Skeleton animation ===&lt;br /&gt;
&lt;br /&gt;
See File/Section 0 of .EMD_(Resident_Evil)&lt;br /&gt;
&lt;br /&gt;
=== Offset 10 (*.EDD) - Skeleton animation steps ===&lt;br /&gt;
&lt;br /&gt;
See File/Section 1 of .EMD_(Resident_Evil)&lt;br /&gt;
&lt;br /&gt;
=== Offset 11 (*.MSG) - Text messages ===&lt;br /&gt;
&lt;br /&gt;
First, you have an arrays of [[unsigned short]], which are relative offsets to the beginning of this object. So the number of items is the first offset/2 (if we are lucky that the first offset always has the lowest value).&lt;br /&gt;
&lt;br /&gt;
It contains the texts for cutscenes, dialogs, examining objects.&lt;br /&gt;
&lt;br /&gt;
Conversion table, from byte to ASCII value:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! 0&lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
! 7&lt;br /&gt;
! 8&lt;br /&gt;
! 9&lt;br /&gt;
! 10&lt;br /&gt;
! 11&lt;br /&gt;
! 12&lt;br /&gt;
! 13&lt;br /&gt;
! 14&lt;br /&gt;
! 15&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
|  &lt;br /&gt;
| .&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| (&lt;br /&gt;
| )&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
! 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| :&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| ,&lt;br /&gt;
| &amp;quot;&lt;br /&gt;
| !&lt;br /&gt;
| ?&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| A&lt;br /&gt;
| B&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
! 0x20&lt;br /&gt;
| D&lt;br /&gt;
| E&lt;br /&gt;
| F&lt;br /&gt;
| G&lt;br /&gt;
| H&lt;br /&gt;
| I&lt;br /&gt;
| J&lt;br /&gt;
| K&lt;br /&gt;
| L&lt;br /&gt;
| M&lt;br /&gt;
| N&lt;br /&gt;
| O&lt;br /&gt;
| P&lt;br /&gt;
| Q&lt;br /&gt;
| R&lt;br /&gt;
| S&lt;br /&gt;
|-&lt;br /&gt;
! 0x30&lt;br /&gt;
| T&lt;br /&gt;
| U&lt;br /&gt;
| V&lt;br /&gt;
| W&lt;br /&gt;
| X&lt;br /&gt;
| Y&lt;br /&gt;
| Z&lt;br /&gt;
| [&lt;br /&gt;
| /&lt;br /&gt;
| ]&lt;br /&gt;
| '&lt;br /&gt;
| -&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| a&lt;br /&gt;
| b&lt;br /&gt;
| c&lt;br /&gt;
|-&lt;br /&gt;
! 0x40&lt;br /&gt;
| d&lt;br /&gt;
| e&lt;br /&gt;
| f&lt;br /&gt;
| g&lt;br /&gt;
| h&lt;br /&gt;
| i&lt;br /&gt;
| j&lt;br /&gt;
| k&lt;br /&gt;
| l&lt;br /&gt;
| m&lt;br /&gt;
| n&lt;br /&gt;
| o&lt;br /&gt;
| p&lt;br /&gt;
| q&lt;br /&gt;
| r&lt;br /&gt;
| s&lt;br /&gt;
|-&lt;br /&gt;
! 0x50&lt;br /&gt;
| t&lt;br /&gt;
| u&lt;br /&gt;
| v&lt;br /&gt;
| w&lt;br /&gt;
| x&lt;br /&gt;
| y&lt;br /&gt;
| z&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Codes above 0x57 may also be different given the language, for characters with trema, accents and the like. The complete character table to use resides in the image file &amp;lt;code&amp;gt;horr/[country]/data/fontus.tim&amp;lt;/code&amp;gt;, in the second zone of the image.&lt;br /&gt;
&lt;br /&gt;
There are also some formatting codes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| End of text&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| Carriage return&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| Pause&lt;br /&gt;
|-&lt;br /&gt;
! 0x08&lt;br /&gt;
| Yes/No question&lt;br /&gt;
|-&lt;br /&gt;
! 0x74&lt;br /&gt;
| &amp;quot;S.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x75&lt;br /&gt;
| &amp;quot;T.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x76&lt;br /&gt;
| &amp;quot;A.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x77&lt;br /&gt;
| &amp;quot;R.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x79&lt;br /&gt;
| &amp;quot;. &amp;quot; string&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)</id>
		<title>RDT (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)"/>
				<updated>2023-08-25T15:46:41Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: /* Offset 10 (*.EDD) - Skeleton animation steps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|extensions={{ext|rdt}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Restored|2017-11-25|https://web.archive.org/web/20171125230810/http://rewiki.regengedanken.de/wiki/.RDT_(Resident_Evil)}}&lt;br /&gt;
&lt;br /&gt;
The '''.RDT''' file format is used to stored the description of a room in Resident Evil on Playstation or PC. It should contain the camera position (to correctly display 3D objects), the background images and sprites used to draw the scene, description of when to change camera, position of enemies when entering room, and so on...&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
The values are stored in Little-Endian order.&lt;br /&gt;
&lt;br /&gt;
The file is always named &amp;lt;code&amp;gt;roomSXX0.rdt&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;roomSXX1.rdt&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; is the game status/stage. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is the location number.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
&lt;br /&gt;
A RDT file starts with this header, to store count for different objects.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  char unknown0;&lt;br /&gt;
  char num_cameras; /* Number of cameras of the room */&lt;br /&gt;
  char num_sound_banks; /* Number of sound banks, stored at offset 18 ? */&lt;br /&gt;
  char unknown1[3];&lt;br /&gt;
  unsigned short unknown2[3];&lt;br /&gt;
&lt;br /&gt;
  /* An array of 3 elements of unknown structure */&lt;br /&gt;
  rdt_header_part_t unknown3[3];&lt;br /&gt;
} rdt_header_t;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  long unknown_pos_x; /* Unknown 3D position */&lt;br /&gt;
  long unknown_pos_y;&lt;br /&gt;
  long unknown_pos_z;&lt;br /&gt;
  unsigned long unknown0[2];&lt;br /&gt;
} rdt_header_part_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Object list ==&lt;br /&gt;
&lt;br /&gt;
Following the header, we have an array of 19 absolute offsets to various objects in the file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
! 0&lt;br /&gt;
| Camera switches (*.RVD)&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| Collision Boundaries for 3D Models (*.SCA)&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for item models)&lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for obstacles &amp;amp; moveable objects)&lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| Block data (*.BLK)&lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| Footstep sound zones (*.FLR)&lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| Initialization Script(s) (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 7&lt;br /&gt;
| Execution Script 0 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 8&lt;br /&gt;
| Execution Script 1 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 9&lt;br /&gt;
| Skeleton animation (*.EMR)&lt;br /&gt;
|-&lt;br /&gt;
! 10&lt;br /&gt;
| Skeleton animation steps (*.EDD)&lt;br /&gt;
|-&lt;br /&gt;
! 11&lt;br /&gt;
| Message text(s) (*.MSG)&lt;br /&gt;
|-&lt;br /&gt;
! 12&lt;br /&gt;
| RAW image (*.RAW), points to several RAW images used for example by Offset 2 for item images&lt;br /&gt;
|-&lt;br /&gt;
! 13&lt;br /&gt;
| Effect animation index (*.ESP)&lt;br /&gt;
|-&lt;br /&gt;
! 14&lt;br /&gt;
| Effect animation data (*.EFF); points to a list of relative offsets to read the EFF/ESP data (read backwards!)&lt;br /&gt;
|-&lt;br /&gt;
! 15&lt;br /&gt;
| Effect animation sprite image(s) (*.TIM); points to the last of those images used for effects&lt;br /&gt;
|-&lt;br /&gt;
! 16&lt;br /&gt;
| Sound attribute table (*.SND); points to a table which is 192 bytes in size&lt;br /&gt;
|-&lt;br /&gt;
! 17&lt;br /&gt;
| offset to a VAB header file (*.VH)&lt;br /&gt;
|-&lt;br /&gt;
! 18&lt;br /&gt;
| offset to VAB sound file (*.VB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Camera positions (*.RID) ===&lt;br /&gt;
&lt;br /&gt;
At absolute offset 0x94 in a file, you'll find an array of 'num_cameras' items with this structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	long masks_offset;	/* Offset to image mask definition */&lt;br /&gt;
	long tim_masks_offset;	/* Offset to TIM file that contains image masks, if not zero */&lt;br /&gt;
	long camera_from_x;	/* Position of the camera */&lt;br /&gt;
	long camera_from_y;&lt;br /&gt;
	long camera_from_z;&lt;br /&gt;
	long camera_to_x;	/* Where the camera is looking to */&lt;br /&gt;
	long camera_to_y;&lt;br /&gt;
	long camera_to_z;&lt;br /&gt;
	long unknown1[3];&lt;br /&gt;
} rdt_camera_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Camera masks (*.PRI) ===&lt;br /&gt;
&lt;br /&gt;
The masks_offset is an offset to an extra structure, which has following header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count_offsets;	/* Number of global offsets, or 0xffff for none */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
} rdt_masks_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you have 'rdt_mask_offset_t' items, which have a 8-byte length. Summing all 'count' fields should equal the 'count_masks' of the rdt_masks_t structure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count;	/* Number of masks, with which to use this structure */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short dst_x;	/* Destination position on background image/screen, to be added */&lt;br /&gt;
	unsigned short dst_y;&lt;br /&gt;
} rdt_mask_offset_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then you have 'rdt_[rect|square]_mask_t' items, which have either 12-byte (rectangular mask) or 8-byte length (square mask). The length is 12 if byte 7 (rdt_square_mask_t.size field) is zero, and 8 otherwise. The 'depth' value is the Z distance of the mask from the camera (low value=near, high value=far).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned char unknown;&lt;br /&gt;
	unsigned char size;	/* Width and height of mask */&lt;br /&gt;
} rdt_square_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned short zero;&lt;br /&gt;
	unsigned short width, height;	/* Dimensions of mask */&lt;br /&gt;
} rdt_rect_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 0 (*.RVD) - Camera zones/switches ===&lt;br /&gt;
&lt;br /&gt;
At offset 0, you'll find the list of camera switches for the current room. The list end with the first 4 bytes are 0xffffffff (i.e for cam0 and cam1 values).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short to; /* Camera number to switch to */&lt;br /&gt;
  unsigned short from; /* Camera number to switch from */&lt;br /&gt;
  short x1,y1; /* Zone the player must enter to switch camera */&lt;br /&gt;
  short x2,y2;&lt;br /&gt;
  short x3,y3;&lt;br /&gt;
  short x4,y4;&lt;br /&gt;
} rdt_camera_switch_t;&lt;br /&gt;
If the 'to' value = 9, then it is a zone, defining the area in which the switches will work and 3D objects will be visible while this camera is used, else it is a camera switch.&lt;br /&gt;
&lt;br /&gt;
=== Offset 1 (*.SCA) - Collision Boundaries for 3D Models ===&lt;br /&gt;
&lt;br /&gt;
At offset 1, you'll find the boundary collision data for the current room.&lt;br /&gt;
&lt;br /&gt;
The first 24 bytes are the header which is using the following structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short Cx; /* Ceiling x value */&lt;br /&gt;
  unsigned short Cz; /* Ceiling z value */&lt;br /&gt;
  unsigned long counts[5]; /* Number of objects = sum of these 5 long values */&lt;br /&gt;
} rdt_sca_header_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Followed by the header, the individual boundary entries start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short x1; /* X of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z1; /* Z of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short x2; /* X of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z2; /* Z of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short type; /* type of the boundary plane/object (01=Standard; 03=Circle etc.) */&lt;br /&gt;
  unsigned short floor; /* floor value/ 256 = floor value for use in the game as height definition */ &lt;br /&gt;
} rdt_sca_obj_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this the data block ends with a 4 byte unsigned long holding the total size of the SCA data block in bytes.&lt;br /&gt;
&lt;br /&gt;
=== Offset 2 (*.TMD/*.TIM) - Item 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset2_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 3 (*.TMD/*.TIM) - Room 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset3_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 4 (*.BLK) - Block data ===&lt;br /&gt;
&lt;br /&gt;
It's unknown what this data is used for. It defines plane based areas that look like &amp;quot;inversed&amp;quot; collision boundaries.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
&lt;br /&gt;
typedef struct {&lt;br /&gt;
        unsigned short x1;          /* X of the top-left corner of the object */&lt;br /&gt;
        unsigned short z1;          /* Z of the top-left corner of the object */&lt;br /&gt;
        unsigned short x2;          /* X of the bottom-right corner of the object */&lt;br /&gt;
        unsigned short z2;          /* Z of the bottom-right corner of the object */&lt;br /&gt;
	unsigned short int Dir_bit;&lt;br /&gt;
	unsigned short int Abut;&lt;br /&gt;
} rdt_blk_obj_t;&lt;br /&gt;
&lt;br /&gt;
unsigned short int unknown;	/* unknown; follows after last structure */&lt;br /&gt;
&lt;br /&gt;
rdt_blk_obj_t Block[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 5 (*.FLR) - Floor/footstep sound areas ===&lt;br /&gt;
&lt;br /&gt;
This data defines the footstep sound areas and which sound to use. It is also related to the script opcode, 'Flr_set'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
typedef struct {&lt;br /&gt;
	signed short int x;         /* x coordinate where the area is drawn from */&lt;br /&gt;
        signed short int y;         /* y coordinate where the area is drawn from */&lt;br /&gt;
	signed short int x_width;   /* x width of the area */&lt;br /&gt;
        signed short int y_width;   /* y width of the area */&lt;br /&gt;
	unsigned short int sound;   /* footstep ID sound to use */&lt;br /&gt;
} rdt_flr_obj_t;&lt;br /&gt;
&lt;br /&gt;
rdt_flr_obj_t Floor[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 6 (*.SCD) - Scenario data ===&lt;br /&gt;
&lt;br /&gt;
This is the initialisation script for the room. It starts with an unsigned short giving the length of the script in bytes. Then follows the script, in bytecode-style.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Byte&lt;br /&gt;
| Instruction&lt;br /&gt;
| Length&lt;br /&gt;
| Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Nop&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| If&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0x01 */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
} script_if_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This structure is followed by one or several conditions for the if (condition) instruction. Any condition evaluated to false will end the if () block.&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| Else&lt;br /&gt;
| 2&lt;br /&gt;
| Follows: byte with ELSE block length. Note: it's either If/Endif, or If/Else; there is no If/Else/Endif sequence.&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| End If&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| BIT_TEST&lt;br /&gt;
| 4&lt;br /&gt;
| Bit test&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x04 */&lt;br /&gt;
	unsigned char object;&lt;br /&gt;
	unsigned char param;	/* Bits 7-5: Longword index in object, see array following */&lt;br /&gt;
				/* Bits 4-0: Bit number to test */&lt;br /&gt;
	unsigned char op;	/* Operation */&lt;br /&gt;
				/* 0x00:test bit is 0 */&lt;br /&gt;
				/* 0x01:test bit is 1 */&lt;br /&gt;
} script_bit_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| BIT_OP&lt;br /&gt;
| 4&lt;br /&gt;
| Bit operation&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x05 */&lt;br /&gt;
	unsigned char object;	/* Number of object to operate on, see array following */&lt;br /&gt;
	unsigned char param;	/* Bits 7-5: Longword index in object */&lt;br /&gt;
				/* Bits 4-0: Bit number to clear/set/change is (31-this field value) */&lt;br /&gt;
	unsigned char op;	/* Operation */&lt;br /&gt;
				/* 0x00:clear bit */&lt;br /&gt;
				/* 0x01:set bit */&lt;br /&gt;
				/* 0x02:change bit */&lt;br /&gt;
} script_bit_op_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| OBJ06_TEST&lt;br /&gt;
| 4&lt;br /&gt;
| Compare values&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x06 */&lt;br /&gt;
	unsigned char src;	/* Index in some object for source value */&lt;br /&gt;
				/* 0x00:Current stage */&lt;br /&gt;
				/* 0x01:Current room */&lt;br /&gt;
				/* 0x02:Current camera */&lt;br /&gt;
				/* 0x03:Stage and room */&lt;br /&gt;
				/* 0x04:Previous/next camera */&lt;br /&gt;
				/* 0x05:? */&lt;br /&gt;
				/* 0x06:? */&lt;br /&gt;
				/* 0x07:? Used in instruction 0x1a */&lt;br /&gt;
				/* 0x08:? Used in instruction 0x1c */&lt;br /&gt;
				/* 0x09:Flags for current camera */&lt;br /&gt;
	unsigned char func;	/* Compare function */&lt;br /&gt;
				/* 0x00:EQ */&lt;br /&gt;
				/* 0x01:LT */&lt;br /&gt;
				/* 0x02:LE */&lt;br /&gt;
				/* 0x03:GT */&lt;br /&gt;
				/* 0x04:GE */&lt;br /&gt;
				/* 0x05:NE */&lt;br /&gt;
	char param;		/* Raw value to compare against */&lt;br /&gt;
} script_obj06_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| OBJ07_TEST&lt;br /&gt;
| 6&lt;br /&gt;
| Compare values&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x07 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned char src;	/* Word index in some object for source value */&lt;br /&gt;
				/* (not the same object as instruction 0x06) */&lt;br /&gt;
	unsigned char func;	/* Compare function */&lt;br /&gt;
				/* 0x00:EQ */&lt;br /&gt;
				/* 0x01:LT */&lt;br /&gt;
				/* 0x02:LE */&lt;br /&gt;
				/* 0x03:GT */&lt;br /&gt;
				/* 0x04:GE */&lt;br /&gt;
				/* 0x05:NE */&lt;br /&gt;
	short param;		/* Raw value to compare against */&lt;br /&gt;
} script_obj07_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| STAGEROOMCAM_SET&lt;br /&gt;
| 4&lt;br /&gt;
| Set value for stage, room or camera&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x08 */&lt;br /&gt;
	unsigned char id;	/* 0: stage, 1: room, 2: camera */&lt;br /&gt;
	unsigned short value;&lt;br /&gt;
} script_stageroomcam_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| CUT_SET&lt;br /&gt;
| 2&lt;br /&gt;
| Switch to prev/next camera, set it as current camera&lt;br /&gt;
|-&lt;br /&gt;
| 0x0a&lt;br /&gt;
| CUT_SET&lt;br /&gt;
| 2&lt;br /&gt;
| Switch to current camera, set it as prev/next camera&lt;br /&gt;
|-&lt;br /&gt;
| 0x0b&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0c&lt;br /&gt;
| DOOR_SET&lt;br /&gt;
| 26&lt;br /&gt;
| TODO: find where next_camera is stored&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0c */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	short x,y,w,h;&lt;br /&gt;
	unsigned char unknown0[5];&lt;br /&gt;
	unsigned char next_stage_and_room;	/* bits 7,6,5: stage, 4,3,2,1,0: room */&lt;br /&gt;
	short next_x,next_y,next_z;&lt;br /&gt;
	short next_dir;&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
} script_door_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note: if stage=0, we must keep current stage, else switch stage.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0d&lt;br /&gt;
| ITEM_SET&lt;br /&gt;
| 18&lt;br /&gt;
| Pickable items, objects, obstacles&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0d */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	short x,y,w,h;&lt;br /&gt;
	unsigned char type;	/* 0x02: message, obstacle? */&lt;br /&gt;
				/* 0x07: trigger,event,movable object? */&lt;br /&gt;
				/* 0x08: box */&lt;br /&gt;
				/* 0x09: pickable object, trigger? */&lt;br /&gt;
				/* 0x10: typewriter */&lt;br /&gt;
	unsigned char unknown[7];&lt;br /&gt;
} script_item_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0e&lt;br /&gt;
| Nop&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0f&lt;br /&gt;
| ?&lt;br /&gt;
| 8&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0f */&lt;br /&gt;
	unsigned char bitmask;&lt;br /&gt;
	unsigned short unknown[3];&lt;br /&gt;
} script_inst0f_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| OBJ10_TEST&lt;br /&gt;
| 2&lt;br /&gt;
| Check if obj10 has value given as parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x10 */&lt;br /&gt;
	char value;&lt;br /&gt;
} script_obj10_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| OBJ11_TEST&lt;br /&gt;
| 2&lt;br /&gt;
| Check if obj11 has value given as parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x11 */&lt;br /&gt;
	char value;&lt;br /&gt;
} script_obj11_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| Item 0x12&lt;br /&gt;
| 10&lt;br /&gt;
| Typewriter? Stairs?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x12 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown0[2];&lt;br /&gt;
	short unknown1[3];&lt;br /&gt;
} script_inst12_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| Item 0x13&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x13 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown0[2];&lt;br /&gt;
} script_inst13_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x14 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned char param1;&lt;br /&gt;
	unsigned char param2;&lt;br /&gt;
} script_inst14_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| Volume set?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| ?&lt;br /&gt;
| 10&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ITEM_MODEL_SET&lt;br /&gt;
| 26&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x18 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown[24];&lt;br /&gt;
} script_item_model_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| OBJ19_SET&lt;br /&gt;
| 4&lt;br /&gt;
| Set value in obj19&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x09 */&lt;br /&gt;
	unsigned char src;	/* Index in some object */&lt;br /&gt;
	char value;		/* New value */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
} script_obj19_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1a&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1b&lt;br /&gt;
| EM_SET&lt;br /&gt;
| 22&lt;br /&gt;
| Entity (enemy, other character)&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1b */&lt;br /&gt;
	unsigned char model;&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned char killed;	/* 0xff for non enemy, else index in killed array to avoid respawn */&lt;br /&gt;
	unsigned char unknown1[2];&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
	unsigned short a;&lt;br /&gt;
	unsigned short unknown2;&lt;br /&gt;
	unsigned short x;&lt;br /&gt;
	unsigned short y;&lt;br /&gt;
	unsigned short z;&lt;br /&gt;
	unsigned char id;	/* ID of entity, used for example for EM_POS_SET */&lt;br /&gt;
	unsigned char unknown3[3];&lt;br /&gt;
} script_em_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1c */&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned short unknown1[2];&lt;br /&gt;
} script_inst1c_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1d&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1e&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1e */&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
} script_inst1e_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1f&lt;br /&gt;
| OM_SET&lt;br /&gt;
| 28&lt;br /&gt;
| Movable (crate, statue) or animated (lid) objects?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1f */&lt;br /&gt;
	unsigned char id;	/* Bits 5-0: Index in array stored at offset 2 of RDT file */&lt;br /&gt;
	unsigned char type;	/* 0x11: safe lid&amp;amp;nbsp;? */&lt;br /&gt;
	unsigned char unknown[25];&lt;br /&gt;
} script_om_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| PLAYER_POS_SET&lt;br /&gt;
| 14&lt;br /&gt;
| Change player position and direction&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x20 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short unknown0,angle,unknown1;&lt;br /&gt;
	unsigned short x,y,z;&lt;br /&gt;
} script_player_pos_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| EM_POS_SET&lt;br /&gt;
| 14&lt;br /&gt;
| Change entity position and direction&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x21 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned short dummy;&lt;br /&gt;
	unsigned short angle;&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short x,y,z;&lt;br /&gt;
} script_em_pos_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x23 */&lt;br /&gt;
	unsigned char flag;&lt;br /&gt;
} script_inst23_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x27&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| ?&lt;br /&gt;
| 4,6 or 8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| Select sound bank?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2a&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2b&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2d&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2f&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| ?&lt;br /&gt;
| 2 or 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| ?&lt;br /&gt;
| 8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| Set value for internal array&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x37 */&lt;br /&gt;
	unsigned char row;	/* row (0-7) column (0-31) for internal byte array */&lt;br /&gt;
	unsigned char col;&lt;br /&gt;
	unsigned char value;&lt;br /&gt;
} script_inst37_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3a&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3b&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3c&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3d&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3e&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3f&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| ?&lt;br /&gt;
| 16&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| ?&lt;br /&gt;
| 2+12*n+2*m (was 44)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| ?&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4a&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4b&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4c&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| Set value in OBJ06 ?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x4c */&lt;br /&gt;
	unsigned char unknown[3];&lt;br /&gt;
} script_inst4c_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4d&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4e&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4f&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Objects for bit operations ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object number&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Game status. Bit 23:Player character (0: Chris, 1: Jill, or vice versa).&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 7 (*.SCD) - Execution script for room ===&lt;br /&gt;
&lt;br /&gt;
This script is run regularly to update stuff in current room. It follows same structure as the one at offset 6.&lt;br /&gt;
&lt;br /&gt;
=== Offset 8, Script events ? ===&lt;br /&gt;
&lt;br /&gt;
This structure starts with a NULL terminated list of [[unsigned long]], which are offsets relative to start of this object. These offsets store also some bytecodes, different than those above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf6&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf7&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf7&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf8&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf8&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf9&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1 or 3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfa&amp;lt;/code&amp;gt;&lt;br /&gt;
| For&lt;br /&gt;
| 4&lt;br /&gt;
| Initialize a for loop. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfa */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short count;&lt;br /&gt;
} event_for_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfb&amp;lt;/code&amp;gt;&lt;br /&gt;
| Next&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set_Inst&lt;br /&gt;
| variable	&lt;br /&gt;
| Initialize bytecode instruction to execute later. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfc */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
	unsigned char bytecode_inst[];&lt;br /&gt;
} event_set_inst_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfd&amp;lt;/code&amp;gt;&lt;br /&gt;
| Exec_inst&lt;br /&gt;
| 1&lt;br /&gt;
| Execute bytecode instruction previously set with 0xfc instruction.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfe&amp;lt;/code&amp;gt;&lt;br /&gt;
| Sleep, process next event&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt;&lt;br /&gt;
| Disable event&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 9 (*.EMR) - Skeleton animation ===&lt;br /&gt;
&lt;br /&gt;
See File/Section 0 of .EMD_(Resident_Evil)&lt;br /&gt;
&lt;br /&gt;
=== Offset 10 (*.EDD) - Skeleton animation steps ===&lt;br /&gt;
&lt;br /&gt;
See File/Section 1 of .EMD_(Resident_Evil)&lt;br /&gt;
&lt;br /&gt;
=== Offset 11 (*.MSG) - Text messages ===&lt;br /&gt;
&lt;br /&gt;
First, you have an arrays of [[unsigned short]], which are relative offsets to the beginning of this object. So the number of items is the first offset/2 (if we are lucky that the first offset always has the lowest value).&lt;br /&gt;
&lt;br /&gt;
It contains the texts for cutscenes, dialogs, examining objects.&lt;br /&gt;
&lt;br /&gt;
Conversion table, from byte to ASCII value:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! 0&lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
! 7&lt;br /&gt;
! 8&lt;br /&gt;
! 9&lt;br /&gt;
! 10&lt;br /&gt;
! 11&lt;br /&gt;
! 12&lt;br /&gt;
! 13&lt;br /&gt;
! 14&lt;br /&gt;
! 15&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
|  &lt;br /&gt;
| .&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| (&lt;br /&gt;
| )&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
! 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| :&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| ,&lt;br /&gt;
| &amp;quot;&lt;br /&gt;
| !&lt;br /&gt;
| ?&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| A&lt;br /&gt;
| B&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
! 0x20&lt;br /&gt;
| D&lt;br /&gt;
| E&lt;br /&gt;
| F&lt;br /&gt;
| G&lt;br /&gt;
| H&lt;br /&gt;
| I&lt;br /&gt;
| J&lt;br /&gt;
| K&lt;br /&gt;
| L&lt;br /&gt;
| M&lt;br /&gt;
| N&lt;br /&gt;
| O&lt;br /&gt;
| P&lt;br /&gt;
| Q&lt;br /&gt;
| R&lt;br /&gt;
| S&lt;br /&gt;
|-&lt;br /&gt;
! 0x30&lt;br /&gt;
| T&lt;br /&gt;
| U&lt;br /&gt;
| V&lt;br /&gt;
| W&lt;br /&gt;
| X&lt;br /&gt;
| Y&lt;br /&gt;
| Z&lt;br /&gt;
| [&lt;br /&gt;
| /&lt;br /&gt;
| ]&lt;br /&gt;
| '&lt;br /&gt;
| -&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| a&lt;br /&gt;
| b&lt;br /&gt;
| c&lt;br /&gt;
|-&lt;br /&gt;
! 0x40&lt;br /&gt;
| d&lt;br /&gt;
| e&lt;br /&gt;
| f&lt;br /&gt;
| g&lt;br /&gt;
| h&lt;br /&gt;
| i&lt;br /&gt;
| j&lt;br /&gt;
| k&lt;br /&gt;
| l&lt;br /&gt;
| m&lt;br /&gt;
| n&lt;br /&gt;
| o&lt;br /&gt;
| p&lt;br /&gt;
| q&lt;br /&gt;
| r&lt;br /&gt;
| s&lt;br /&gt;
|-&lt;br /&gt;
! 0x50&lt;br /&gt;
| t&lt;br /&gt;
| u&lt;br /&gt;
| v&lt;br /&gt;
| w&lt;br /&gt;
| x&lt;br /&gt;
| y&lt;br /&gt;
| z&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Codes above 0x57 may also be different given the language, for characters with trema, accents and the like.&lt;br /&gt;
&lt;br /&gt;
There are also some formatting codes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| End of text&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| Carriage return&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| Pause&lt;br /&gt;
|-&lt;br /&gt;
! 0x08&lt;br /&gt;
| Yes/No question&lt;br /&gt;
|-&lt;br /&gt;
! 0x74&lt;br /&gt;
| &amp;quot;S.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x75&lt;br /&gt;
| &amp;quot;T.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x76&lt;br /&gt;
| &amp;quot;A.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x77&lt;br /&gt;
| &amp;quot;R.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x79&lt;br /&gt;
| &amp;quot;. &amp;quot; string&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)</id>
		<title>RDT (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)"/>
				<updated>2023-08-25T15:46:35Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: /* Offset 9 (*.EMR) - Skeleton animation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|extensions={{ext|rdt}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Restored|2017-11-25|https://web.archive.org/web/20171125230810/http://rewiki.regengedanken.de/wiki/.RDT_(Resident_Evil)}}&lt;br /&gt;
&lt;br /&gt;
The '''.RDT''' file format is used to stored the description of a room in Resident Evil on Playstation or PC. It should contain the camera position (to correctly display 3D objects), the background images and sprites used to draw the scene, description of when to change camera, position of enemies when entering room, and so on...&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
The values are stored in Little-Endian order.&lt;br /&gt;
&lt;br /&gt;
The file is always named &amp;lt;code&amp;gt;roomSXX0.rdt&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;roomSXX1.rdt&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; is the game status/stage. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is the location number.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
&lt;br /&gt;
A RDT file starts with this header, to store count for different objects.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  char unknown0;&lt;br /&gt;
  char num_cameras; /* Number of cameras of the room */&lt;br /&gt;
  char num_sound_banks; /* Number of sound banks, stored at offset 18 ? */&lt;br /&gt;
  char unknown1[3];&lt;br /&gt;
  unsigned short unknown2[3];&lt;br /&gt;
&lt;br /&gt;
  /* An array of 3 elements of unknown structure */&lt;br /&gt;
  rdt_header_part_t unknown3[3];&lt;br /&gt;
} rdt_header_t;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  long unknown_pos_x; /* Unknown 3D position */&lt;br /&gt;
  long unknown_pos_y;&lt;br /&gt;
  long unknown_pos_z;&lt;br /&gt;
  unsigned long unknown0[2];&lt;br /&gt;
} rdt_header_part_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Object list ==&lt;br /&gt;
&lt;br /&gt;
Following the header, we have an array of 19 absolute offsets to various objects in the file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
! 0&lt;br /&gt;
| Camera switches (*.RVD)&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| Collision Boundaries for 3D Models (*.SCA)&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for item models)&lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for obstacles &amp;amp; moveable objects)&lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| Block data (*.BLK)&lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| Footstep sound zones (*.FLR)&lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| Initialization Script(s) (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 7&lt;br /&gt;
| Execution Script 0 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 8&lt;br /&gt;
| Execution Script 1 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 9&lt;br /&gt;
| Skeleton animation (*.EMR)&lt;br /&gt;
|-&lt;br /&gt;
! 10&lt;br /&gt;
| Skeleton animation steps (*.EDD)&lt;br /&gt;
|-&lt;br /&gt;
! 11&lt;br /&gt;
| Message text(s) (*.MSG)&lt;br /&gt;
|-&lt;br /&gt;
! 12&lt;br /&gt;
| RAW image (*.RAW), points to several RAW images used for example by Offset 2 for item images&lt;br /&gt;
|-&lt;br /&gt;
! 13&lt;br /&gt;
| Effect animation index (*.ESP)&lt;br /&gt;
|-&lt;br /&gt;
! 14&lt;br /&gt;
| Effect animation data (*.EFF); points to a list of relative offsets to read the EFF/ESP data (read backwards!)&lt;br /&gt;
|-&lt;br /&gt;
! 15&lt;br /&gt;
| Effect animation sprite image(s) (*.TIM); points to the last of those images used for effects&lt;br /&gt;
|-&lt;br /&gt;
! 16&lt;br /&gt;
| Sound attribute table (*.SND); points to a table which is 192 bytes in size&lt;br /&gt;
|-&lt;br /&gt;
! 17&lt;br /&gt;
| offset to a VAB header file (*.VH)&lt;br /&gt;
|-&lt;br /&gt;
! 18&lt;br /&gt;
| offset to VAB sound file (*.VB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Camera positions (*.RID) ===&lt;br /&gt;
&lt;br /&gt;
At absolute offset 0x94 in a file, you'll find an array of 'num_cameras' items with this structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	long masks_offset;	/* Offset to image mask definition */&lt;br /&gt;
	long tim_masks_offset;	/* Offset to TIM file that contains image masks, if not zero */&lt;br /&gt;
	long camera_from_x;	/* Position of the camera */&lt;br /&gt;
	long camera_from_y;&lt;br /&gt;
	long camera_from_z;&lt;br /&gt;
	long camera_to_x;	/* Where the camera is looking to */&lt;br /&gt;
	long camera_to_y;&lt;br /&gt;
	long camera_to_z;&lt;br /&gt;
	long unknown1[3];&lt;br /&gt;
} rdt_camera_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Camera masks (*.PRI) ===&lt;br /&gt;
&lt;br /&gt;
The masks_offset is an offset to an extra structure, which has following header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count_offsets;	/* Number of global offsets, or 0xffff for none */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
} rdt_masks_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you have 'rdt_mask_offset_t' items, which have a 8-byte length. Summing all 'count' fields should equal the 'count_masks' of the rdt_masks_t structure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count;	/* Number of masks, with which to use this structure */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short dst_x;	/* Destination position on background image/screen, to be added */&lt;br /&gt;
	unsigned short dst_y;&lt;br /&gt;
} rdt_mask_offset_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then you have 'rdt_[rect|square]_mask_t' items, which have either 12-byte (rectangular mask) or 8-byte length (square mask). The length is 12 if byte 7 (rdt_square_mask_t.size field) is zero, and 8 otherwise. The 'depth' value is the Z distance of the mask from the camera (low value=near, high value=far).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned char unknown;&lt;br /&gt;
	unsigned char size;	/* Width and height of mask */&lt;br /&gt;
} rdt_square_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned short zero;&lt;br /&gt;
	unsigned short width, height;	/* Dimensions of mask */&lt;br /&gt;
} rdt_rect_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 0 (*.RVD) - Camera zones/switches ===&lt;br /&gt;
&lt;br /&gt;
At offset 0, you'll find the list of camera switches for the current room. The list end with the first 4 bytes are 0xffffffff (i.e for cam0 and cam1 values).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short to; /* Camera number to switch to */&lt;br /&gt;
  unsigned short from; /* Camera number to switch from */&lt;br /&gt;
  short x1,y1; /* Zone the player must enter to switch camera */&lt;br /&gt;
  short x2,y2;&lt;br /&gt;
  short x3,y3;&lt;br /&gt;
  short x4,y4;&lt;br /&gt;
} rdt_camera_switch_t;&lt;br /&gt;
If the 'to' value = 9, then it is a zone, defining the area in which the switches will work and 3D objects will be visible while this camera is used, else it is a camera switch.&lt;br /&gt;
&lt;br /&gt;
=== Offset 1 (*.SCA) - Collision Boundaries for 3D Models ===&lt;br /&gt;
&lt;br /&gt;
At offset 1, you'll find the boundary collision data for the current room.&lt;br /&gt;
&lt;br /&gt;
The first 24 bytes are the header which is using the following structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short Cx; /* Ceiling x value */&lt;br /&gt;
  unsigned short Cz; /* Ceiling z value */&lt;br /&gt;
  unsigned long counts[5]; /* Number of objects = sum of these 5 long values */&lt;br /&gt;
} rdt_sca_header_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Followed by the header, the individual boundary entries start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short x1; /* X of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z1; /* Z of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short x2; /* X of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z2; /* Z of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short type; /* type of the boundary plane/object (01=Standard; 03=Circle etc.) */&lt;br /&gt;
  unsigned short floor; /* floor value/ 256 = floor value for use in the game as height definition */ &lt;br /&gt;
} rdt_sca_obj_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this the data block ends with a 4 byte unsigned long holding the total size of the SCA data block in bytes.&lt;br /&gt;
&lt;br /&gt;
=== Offset 2 (*.TMD/*.TIM) - Item 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset2_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 3 (*.TMD/*.TIM) - Room 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset3_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 4 (*.BLK) - Block data ===&lt;br /&gt;
&lt;br /&gt;
It's unknown what this data is used for. It defines plane based areas that look like &amp;quot;inversed&amp;quot; collision boundaries.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
&lt;br /&gt;
typedef struct {&lt;br /&gt;
        unsigned short x1;          /* X of the top-left corner of the object */&lt;br /&gt;
        unsigned short z1;          /* Z of the top-left corner of the object */&lt;br /&gt;
        unsigned short x2;          /* X of the bottom-right corner of the object */&lt;br /&gt;
        unsigned short z2;          /* Z of the bottom-right corner of the object */&lt;br /&gt;
	unsigned short int Dir_bit;&lt;br /&gt;
	unsigned short int Abut;&lt;br /&gt;
} rdt_blk_obj_t;&lt;br /&gt;
&lt;br /&gt;
unsigned short int unknown;	/* unknown; follows after last structure */&lt;br /&gt;
&lt;br /&gt;
rdt_blk_obj_t Block[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 5 (*.FLR) - Floor/footstep sound areas ===&lt;br /&gt;
&lt;br /&gt;
This data defines the footstep sound areas and which sound to use. It is also related to the script opcode, 'Flr_set'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
typedef struct {&lt;br /&gt;
	signed short int x;         /* x coordinate where the area is drawn from */&lt;br /&gt;
        signed short int y;         /* y coordinate where the area is drawn from */&lt;br /&gt;
	signed short int x_width;   /* x width of the area */&lt;br /&gt;
        signed short int y_width;   /* y width of the area */&lt;br /&gt;
	unsigned short int sound;   /* footstep ID sound to use */&lt;br /&gt;
} rdt_flr_obj_t;&lt;br /&gt;
&lt;br /&gt;
rdt_flr_obj_t Floor[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 6 (*.SCD) - Scenario data ===&lt;br /&gt;
&lt;br /&gt;
This is the initialisation script for the room. It starts with an unsigned short giving the length of the script in bytes. Then follows the script, in bytecode-style.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Byte&lt;br /&gt;
| Instruction&lt;br /&gt;
| Length&lt;br /&gt;
| Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Nop&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| If&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0x01 */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
} script_if_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This structure is followed by one or several conditions for the if (condition) instruction. Any condition evaluated to false will end the if () block.&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| Else&lt;br /&gt;
| 2&lt;br /&gt;
| Follows: byte with ELSE block length. Note: it's either If/Endif, or If/Else; there is no If/Else/Endif sequence.&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| End If&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| BIT_TEST&lt;br /&gt;
| 4&lt;br /&gt;
| Bit test&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x04 */&lt;br /&gt;
	unsigned char object;&lt;br /&gt;
	unsigned char param;	/* Bits 7-5: Longword index in object, see array following */&lt;br /&gt;
				/* Bits 4-0: Bit number to test */&lt;br /&gt;
	unsigned char op;	/* Operation */&lt;br /&gt;
				/* 0x00:test bit is 0 */&lt;br /&gt;
				/* 0x01:test bit is 1 */&lt;br /&gt;
} script_bit_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| BIT_OP&lt;br /&gt;
| 4&lt;br /&gt;
| Bit operation&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x05 */&lt;br /&gt;
	unsigned char object;	/* Number of object to operate on, see array following */&lt;br /&gt;
	unsigned char param;	/* Bits 7-5: Longword index in object */&lt;br /&gt;
				/* Bits 4-0: Bit number to clear/set/change is (31-this field value) */&lt;br /&gt;
	unsigned char op;	/* Operation */&lt;br /&gt;
				/* 0x00:clear bit */&lt;br /&gt;
				/* 0x01:set bit */&lt;br /&gt;
				/* 0x02:change bit */&lt;br /&gt;
} script_bit_op_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| OBJ06_TEST&lt;br /&gt;
| 4&lt;br /&gt;
| Compare values&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x06 */&lt;br /&gt;
	unsigned char src;	/* Index in some object for source value */&lt;br /&gt;
				/* 0x00:Current stage */&lt;br /&gt;
				/* 0x01:Current room */&lt;br /&gt;
				/* 0x02:Current camera */&lt;br /&gt;
				/* 0x03:Stage and room */&lt;br /&gt;
				/* 0x04:Previous/next camera */&lt;br /&gt;
				/* 0x05:? */&lt;br /&gt;
				/* 0x06:? */&lt;br /&gt;
				/* 0x07:? Used in instruction 0x1a */&lt;br /&gt;
				/* 0x08:? Used in instruction 0x1c */&lt;br /&gt;
				/* 0x09:Flags for current camera */&lt;br /&gt;
	unsigned char func;	/* Compare function */&lt;br /&gt;
				/* 0x00:EQ */&lt;br /&gt;
				/* 0x01:LT */&lt;br /&gt;
				/* 0x02:LE */&lt;br /&gt;
				/* 0x03:GT */&lt;br /&gt;
				/* 0x04:GE */&lt;br /&gt;
				/* 0x05:NE */&lt;br /&gt;
	char param;		/* Raw value to compare against */&lt;br /&gt;
} script_obj06_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| OBJ07_TEST&lt;br /&gt;
| 6&lt;br /&gt;
| Compare values&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x07 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned char src;	/* Word index in some object for source value */&lt;br /&gt;
				/* (not the same object as instruction 0x06) */&lt;br /&gt;
	unsigned char func;	/* Compare function */&lt;br /&gt;
				/* 0x00:EQ */&lt;br /&gt;
				/* 0x01:LT */&lt;br /&gt;
				/* 0x02:LE */&lt;br /&gt;
				/* 0x03:GT */&lt;br /&gt;
				/* 0x04:GE */&lt;br /&gt;
				/* 0x05:NE */&lt;br /&gt;
	short param;		/* Raw value to compare against */&lt;br /&gt;
} script_obj07_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| STAGEROOMCAM_SET&lt;br /&gt;
| 4&lt;br /&gt;
| Set value for stage, room or camera&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x08 */&lt;br /&gt;
	unsigned char id;	/* 0: stage, 1: room, 2: camera */&lt;br /&gt;
	unsigned short value;&lt;br /&gt;
} script_stageroomcam_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| CUT_SET&lt;br /&gt;
| 2&lt;br /&gt;
| Switch to prev/next camera, set it as current camera&lt;br /&gt;
|-&lt;br /&gt;
| 0x0a&lt;br /&gt;
| CUT_SET&lt;br /&gt;
| 2&lt;br /&gt;
| Switch to current camera, set it as prev/next camera&lt;br /&gt;
|-&lt;br /&gt;
| 0x0b&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0c&lt;br /&gt;
| DOOR_SET&lt;br /&gt;
| 26&lt;br /&gt;
| TODO: find where next_camera is stored&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0c */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	short x,y,w,h;&lt;br /&gt;
	unsigned char unknown0[5];&lt;br /&gt;
	unsigned char next_stage_and_room;	/* bits 7,6,5: stage, 4,3,2,1,0: room */&lt;br /&gt;
	short next_x,next_y,next_z;&lt;br /&gt;
	short next_dir;&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
} script_door_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note: if stage=0, we must keep current stage, else switch stage.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0d&lt;br /&gt;
| ITEM_SET&lt;br /&gt;
| 18&lt;br /&gt;
| Pickable items, objects, obstacles&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0d */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	short x,y,w,h;&lt;br /&gt;
	unsigned char type;	/* 0x02: message, obstacle? */&lt;br /&gt;
				/* 0x07: trigger,event,movable object? */&lt;br /&gt;
				/* 0x08: box */&lt;br /&gt;
				/* 0x09: pickable object, trigger? */&lt;br /&gt;
				/* 0x10: typewriter */&lt;br /&gt;
	unsigned char unknown[7];&lt;br /&gt;
} script_item_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0e&lt;br /&gt;
| Nop&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0f&lt;br /&gt;
| ?&lt;br /&gt;
| 8&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0f */&lt;br /&gt;
	unsigned char bitmask;&lt;br /&gt;
	unsigned short unknown[3];&lt;br /&gt;
} script_inst0f_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| OBJ10_TEST&lt;br /&gt;
| 2&lt;br /&gt;
| Check if obj10 has value given as parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x10 */&lt;br /&gt;
	char value;&lt;br /&gt;
} script_obj10_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| OBJ11_TEST&lt;br /&gt;
| 2&lt;br /&gt;
| Check if obj11 has value given as parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x11 */&lt;br /&gt;
	char value;&lt;br /&gt;
} script_obj11_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| Item 0x12&lt;br /&gt;
| 10&lt;br /&gt;
| Typewriter? Stairs?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x12 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown0[2];&lt;br /&gt;
	short unknown1[3];&lt;br /&gt;
} script_inst12_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| Item 0x13&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x13 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown0[2];&lt;br /&gt;
} script_inst13_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x14 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned char param1;&lt;br /&gt;
	unsigned char param2;&lt;br /&gt;
} script_inst14_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| Volume set?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| ?&lt;br /&gt;
| 10&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ITEM_MODEL_SET&lt;br /&gt;
| 26&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x18 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown[24];&lt;br /&gt;
} script_item_model_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| OBJ19_SET&lt;br /&gt;
| 4&lt;br /&gt;
| Set value in obj19&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x09 */&lt;br /&gt;
	unsigned char src;	/* Index in some object */&lt;br /&gt;
	char value;		/* New value */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
} script_obj19_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1a&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1b&lt;br /&gt;
| EM_SET&lt;br /&gt;
| 22&lt;br /&gt;
| Entity (enemy, other character)&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1b */&lt;br /&gt;
	unsigned char model;&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned char killed;	/* 0xff for non enemy, else index in killed array to avoid respawn */&lt;br /&gt;
	unsigned char unknown1[2];&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
	unsigned short a;&lt;br /&gt;
	unsigned short unknown2;&lt;br /&gt;
	unsigned short x;&lt;br /&gt;
	unsigned short y;&lt;br /&gt;
	unsigned short z;&lt;br /&gt;
	unsigned char id;	/* ID of entity, used for example for EM_POS_SET */&lt;br /&gt;
	unsigned char unknown3[3];&lt;br /&gt;
} script_em_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1c */&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned short unknown1[2];&lt;br /&gt;
} script_inst1c_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1d&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1e&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1e */&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
} script_inst1e_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1f&lt;br /&gt;
| OM_SET&lt;br /&gt;
| 28&lt;br /&gt;
| Movable (crate, statue) or animated (lid) objects?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1f */&lt;br /&gt;
	unsigned char id;	/* Bits 5-0: Index in array stored at offset 2 of RDT file */&lt;br /&gt;
	unsigned char type;	/* 0x11: safe lid&amp;amp;nbsp;? */&lt;br /&gt;
	unsigned char unknown[25];&lt;br /&gt;
} script_om_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| PLAYER_POS_SET&lt;br /&gt;
| 14&lt;br /&gt;
| Change player position and direction&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x20 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short unknown0,angle,unknown1;&lt;br /&gt;
	unsigned short x,y,z;&lt;br /&gt;
} script_player_pos_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| EM_POS_SET&lt;br /&gt;
| 14&lt;br /&gt;
| Change entity position and direction&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x21 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned short dummy;&lt;br /&gt;
	unsigned short angle;&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short x,y,z;&lt;br /&gt;
} script_em_pos_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x23 */&lt;br /&gt;
	unsigned char flag;&lt;br /&gt;
} script_inst23_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x27&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| ?&lt;br /&gt;
| 4,6 or 8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| Select sound bank?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2a&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2b&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2d&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2f&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| ?&lt;br /&gt;
| 2 or 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| ?&lt;br /&gt;
| 8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| Set value for internal array&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x37 */&lt;br /&gt;
	unsigned char row;	/* row (0-7) column (0-31) for internal byte array */&lt;br /&gt;
	unsigned char col;&lt;br /&gt;
	unsigned char value;&lt;br /&gt;
} script_inst37_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3a&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3b&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3c&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3d&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3e&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3f&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| ?&lt;br /&gt;
| 16&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| ?&lt;br /&gt;
| 2+12*n+2*m (was 44)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| ?&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4a&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4b&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4c&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| Set value in OBJ06 ?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x4c */&lt;br /&gt;
	unsigned char unknown[3];&lt;br /&gt;
} script_inst4c_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4d&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4e&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4f&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Objects for bit operations ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object number&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Game status. Bit 23:Player character (0: Chris, 1: Jill, or vice versa).&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 7 (*.SCD) - Execution script for room ===&lt;br /&gt;
&lt;br /&gt;
This script is run regularly to update stuff in current room. It follows same structure as the one at offset 6.&lt;br /&gt;
&lt;br /&gt;
=== Offset 8, Script events ? ===&lt;br /&gt;
&lt;br /&gt;
This structure starts with a NULL terminated list of [[unsigned long]], which are offsets relative to start of this object. These offsets store also some bytecodes, different than those above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf6&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf7&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf7&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf8&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf8&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf9&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1 or 3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfa&amp;lt;/code&amp;gt;&lt;br /&gt;
| For&lt;br /&gt;
| 4&lt;br /&gt;
| Initialize a for loop. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfa */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short count;&lt;br /&gt;
} event_for_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfb&amp;lt;/code&amp;gt;&lt;br /&gt;
| Next&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set_Inst&lt;br /&gt;
| variable	&lt;br /&gt;
| Initialize bytecode instruction to execute later. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfc */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
	unsigned char bytecode_inst[];&lt;br /&gt;
} event_set_inst_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfd&amp;lt;/code&amp;gt;&lt;br /&gt;
| Exec_inst&lt;br /&gt;
| 1&lt;br /&gt;
| Execute bytecode instruction previously set with 0xfc instruction.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfe&amp;lt;/code&amp;gt;&lt;br /&gt;
| Sleep, process next event&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt;&lt;br /&gt;
| Disable event&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 9 (*.EMR) - Skeleton animation ===&lt;br /&gt;
&lt;br /&gt;
See File/Section 0 of .EMD_(Resident_Evil)&lt;br /&gt;
&lt;br /&gt;
=== Offset 10 (*.EDD) - Skeleton animation steps ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 11 (*.MSG) - Text messages ===&lt;br /&gt;
&lt;br /&gt;
First, you have an arrays of [[unsigned short]], which are relative offsets to the beginning of this object. So the number of items is the first offset/2 (if we are lucky that the first offset always has the lowest value).&lt;br /&gt;
&lt;br /&gt;
It contains the texts for cutscenes, dialogs, examining objects.&lt;br /&gt;
&lt;br /&gt;
Conversion table, from byte to ASCII value:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! 0&lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
! 7&lt;br /&gt;
! 8&lt;br /&gt;
! 9&lt;br /&gt;
! 10&lt;br /&gt;
! 11&lt;br /&gt;
! 12&lt;br /&gt;
! 13&lt;br /&gt;
! 14&lt;br /&gt;
! 15&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
|  &lt;br /&gt;
| .&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| (&lt;br /&gt;
| )&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
! 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| :&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| ,&lt;br /&gt;
| &amp;quot;&lt;br /&gt;
| !&lt;br /&gt;
| ?&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| A&lt;br /&gt;
| B&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
! 0x20&lt;br /&gt;
| D&lt;br /&gt;
| E&lt;br /&gt;
| F&lt;br /&gt;
| G&lt;br /&gt;
| H&lt;br /&gt;
| I&lt;br /&gt;
| J&lt;br /&gt;
| K&lt;br /&gt;
| L&lt;br /&gt;
| M&lt;br /&gt;
| N&lt;br /&gt;
| O&lt;br /&gt;
| P&lt;br /&gt;
| Q&lt;br /&gt;
| R&lt;br /&gt;
| S&lt;br /&gt;
|-&lt;br /&gt;
! 0x30&lt;br /&gt;
| T&lt;br /&gt;
| U&lt;br /&gt;
| V&lt;br /&gt;
| W&lt;br /&gt;
| X&lt;br /&gt;
| Y&lt;br /&gt;
| Z&lt;br /&gt;
| [&lt;br /&gt;
| /&lt;br /&gt;
| ]&lt;br /&gt;
| '&lt;br /&gt;
| -&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| a&lt;br /&gt;
| b&lt;br /&gt;
| c&lt;br /&gt;
|-&lt;br /&gt;
! 0x40&lt;br /&gt;
| d&lt;br /&gt;
| e&lt;br /&gt;
| f&lt;br /&gt;
| g&lt;br /&gt;
| h&lt;br /&gt;
| i&lt;br /&gt;
| j&lt;br /&gt;
| k&lt;br /&gt;
| l&lt;br /&gt;
| m&lt;br /&gt;
| n&lt;br /&gt;
| o&lt;br /&gt;
| p&lt;br /&gt;
| q&lt;br /&gt;
| r&lt;br /&gt;
| s&lt;br /&gt;
|-&lt;br /&gt;
! 0x50&lt;br /&gt;
| t&lt;br /&gt;
| u&lt;br /&gt;
| v&lt;br /&gt;
| w&lt;br /&gt;
| x&lt;br /&gt;
| y&lt;br /&gt;
| z&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Codes above 0x57 may also be different given the language, for characters with trema, accents and the like.&lt;br /&gt;
&lt;br /&gt;
There are also some formatting codes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| End of text&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| Carriage return&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| Pause&lt;br /&gt;
|-&lt;br /&gt;
! 0x08&lt;br /&gt;
| Yes/No question&lt;br /&gt;
|-&lt;br /&gt;
! 0x74&lt;br /&gt;
| &amp;quot;S.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x75&lt;br /&gt;
| &amp;quot;T.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x76&lt;br /&gt;
| &amp;quot;A.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x77&lt;br /&gt;
| &amp;quot;R.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x79&lt;br /&gt;
| &amp;quot;. &amp;quot; string&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)</id>
		<title>RDT (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)"/>
				<updated>2023-08-25T15:46:14Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: /* Offset 11 (*.MSG) - Text messages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|extensions={{ext|rdt}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Restored|2017-11-25|https://web.archive.org/web/20171125230810/http://rewiki.regengedanken.de/wiki/.RDT_(Resident_Evil)}}&lt;br /&gt;
&lt;br /&gt;
The '''.RDT''' file format is used to stored the description of a room in Resident Evil on Playstation or PC. It should contain the camera position (to correctly display 3D objects), the background images and sprites used to draw the scene, description of when to change camera, position of enemies when entering room, and so on...&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
The values are stored in Little-Endian order.&lt;br /&gt;
&lt;br /&gt;
The file is always named &amp;lt;code&amp;gt;roomSXX0.rdt&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;roomSXX1.rdt&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; is the game status/stage. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is the location number.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
&lt;br /&gt;
A RDT file starts with this header, to store count for different objects.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  char unknown0;&lt;br /&gt;
  char num_cameras; /* Number of cameras of the room */&lt;br /&gt;
  char num_sound_banks; /* Number of sound banks, stored at offset 18 ? */&lt;br /&gt;
  char unknown1[3];&lt;br /&gt;
  unsigned short unknown2[3];&lt;br /&gt;
&lt;br /&gt;
  /* An array of 3 elements of unknown structure */&lt;br /&gt;
  rdt_header_part_t unknown3[3];&lt;br /&gt;
} rdt_header_t;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  long unknown_pos_x; /* Unknown 3D position */&lt;br /&gt;
  long unknown_pos_y;&lt;br /&gt;
  long unknown_pos_z;&lt;br /&gt;
  unsigned long unknown0[2];&lt;br /&gt;
} rdt_header_part_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Object list ==&lt;br /&gt;
&lt;br /&gt;
Following the header, we have an array of 19 absolute offsets to various objects in the file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
! 0&lt;br /&gt;
| Camera switches (*.RVD)&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| Collision Boundaries for 3D Models (*.SCA)&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for item models)&lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for obstacles &amp;amp; moveable objects)&lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| Block data (*.BLK)&lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| Footstep sound zones (*.FLR)&lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| Initialization Script(s) (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 7&lt;br /&gt;
| Execution Script 0 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 8&lt;br /&gt;
| Execution Script 1 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 9&lt;br /&gt;
| Skeleton animation (*.EMR)&lt;br /&gt;
|-&lt;br /&gt;
! 10&lt;br /&gt;
| Skeleton animation steps (*.EDD)&lt;br /&gt;
|-&lt;br /&gt;
! 11&lt;br /&gt;
| Message text(s) (*.MSG)&lt;br /&gt;
|-&lt;br /&gt;
! 12&lt;br /&gt;
| RAW image (*.RAW), points to several RAW images used for example by Offset 2 for item images&lt;br /&gt;
|-&lt;br /&gt;
! 13&lt;br /&gt;
| Effect animation index (*.ESP)&lt;br /&gt;
|-&lt;br /&gt;
! 14&lt;br /&gt;
| Effect animation data (*.EFF); points to a list of relative offsets to read the EFF/ESP data (read backwards!)&lt;br /&gt;
|-&lt;br /&gt;
! 15&lt;br /&gt;
| Effect animation sprite image(s) (*.TIM); points to the last of those images used for effects&lt;br /&gt;
|-&lt;br /&gt;
! 16&lt;br /&gt;
| Sound attribute table (*.SND); points to a table which is 192 bytes in size&lt;br /&gt;
|-&lt;br /&gt;
! 17&lt;br /&gt;
| offset to a VAB header file (*.VH)&lt;br /&gt;
|-&lt;br /&gt;
! 18&lt;br /&gt;
| offset to VAB sound file (*.VB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Camera positions (*.RID) ===&lt;br /&gt;
&lt;br /&gt;
At absolute offset 0x94 in a file, you'll find an array of 'num_cameras' items with this structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	long masks_offset;	/* Offset to image mask definition */&lt;br /&gt;
	long tim_masks_offset;	/* Offset to TIM file that contains image masks, if not zero */&lt;br /&gt;
	long camera_from_x;	/* Position of the camera */&lt;br /&gt;
	long camera_from_y;&lt;br /&gt;
	long camera_from_z;&lt;br /&gt;
	long camera_to_x;	/* Where the camera is looking to */&lt;br /&gt;
	long camera_to_y;&lt;br /&gt;
	long camera_to_z;&lt;br /&gt;
	long unknown1[3];&lt;br /&gt;
} rdt_camera_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Camera masks (*.PRI) ===&lt;br /&gt;
&lt;br /&gt;
The masks_offset is an offset to an extra structure, which has following header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count_offsets;	/* Number of global offsets, or 0xffff for none */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
} rdt_masks_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you have 'rdt_mask_offset_t' items, which have a 8-byte length. Summing all 'count' fields should equal the 'count_masks' of the rdt_masks_t structure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count;	/* Number of masks, with which to use this structure */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short dst_x;	/* Destination position on background image/screen, to be added */&lt;br /&gt;
	unsigned short dst_y;&lt;br /&gt;
} rdt_mask_offset_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then you have 'rdt_[rect|square]_mask_t' items, which have either 12-byte (rectangular mask) or 8-byte length (square mask). The length is 12 if byte 7 (rdt_square_mask_t.size field) is zero, and 8 otherwise. The 'depth' value is the Z distance of the mask from the camera (low value=near, high value=far).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned char unknown;&lt;br /&gt;
	unsigned char size;	/* Width and height of mask */&lt;br /&gt;
} rdt_square_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned short zero;&lt;br /&gt;
	unsigned short width, height;	/* Dimensions of mask */&lt;br /&gt;
} rdt_rect_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 0 (*.RVD) - Camera zones/switches ===&lt;br /&gt;
&lt;br /&gt;
At offset 0, you'll find the list of camera switches for the current room. The list end with the first 4 bytes are 0xffffffff (i.e for cam0 and cam1 values).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short to; /* Camera number to switch to */&lt;br /&gt;
  unsigned short from; /* Camera number to switch from */&lt;br /&gt;
  short x1,y1; /* Zone the player must enter to switch camera */&lt;br /&gt;
  short x2,y2;&lt;br /&gt;
  short x3,y3;&lt;br /&gt;
  short x4,y4;&lt;br /&gt;
} rdt_camera_switch_t;&lt;br /&gt;
If the 'to' value = 9, then it is a zone, defining the area in which the switches will work and 3D objects will be visible while this camera is used, else it is a camera switch.&lt;br /&gt;
&lt;br /&gt;
=== Offset 1 (*.SCA) - Collision Boundaries for 3D Models ===&lt;br /&gt;
&lt;br /&gt;
At offset 1, you'll find the boundary collision data for the current room.&lt;br /&gt;
&lt;br /&gt;
The first 24 bytes are the header which is using the following structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short Cx; /* Ceiling x value */&lt;br /&gt;
  unsigned short Cz; /* Ceiling z value */&lt;br /&gt;
  unsigned long counts[5]; /* Number of objects = sum of these 5 long values */&lt;br /&gt;
} rdt_sca_header_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Followed by the header, the individual boundary entries start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short x1; /* X of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z1; /* Z of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short x2; /* X of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z2; /* Z of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short type; /* type of the boundary plane/object (01=Standard; 03=Circle etc.) */&lt;br /&gt;
  unsigned short floor; /* floor value/ 256 = floor value for use in the game as height definition */ &lt;br /&gt;
} rdt_sca_obj_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this the data block ends with a 4 byte unsigned long holding the total size of the SCA data block in bytes.&lt;br /&gt;
&lt;br /&gt;
=== Offset 2 (*.TMD/*.TIM) - Item 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset2_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 3 (*.TMD/*.TIM) - Room 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset3_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 4 (*.BLK) - Block data ===&lt;br /&gt;
&lt;br /&gt;
It's unknown what this data is used for. It defines plane based areas that look like &amp;quot;inversed&amp;quot; collision boundaries.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
&lt;br /&gt;
typedef struct {&lt;br /&gt;
        unsigned short x1;          /* X of the top-left corner of the object */&lt;br /&gt;
        unsigned short z1;          /* Z of the top-left corner of the object */&lt;br /&gt;
        unsigned short x2;          /* X of the bottom-right corner of the object */&lt;br /&gt;
        unsigned short z2;          /* Z of the bottom-right corner of the object */&lt;br /&gt;
	unsigned short int Dir_bit;&lt;br /&gt;
	unsigned short int Abut;&lt;br /&gt;
} rdt_blk_obj_t;&lt;br /&gt;
&lt;br /&gt;
unsigned short int unknown;	/* unknown; follows after last structure */&lt;br /&gt;
&lt;br /&gt;
rdt_blk_obj_t Block[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 5 (*.FLR) - Floor/footstep sound areas ===&lt;br /&gt;
&lt;br /&gt;
This data defines the footstep sound areas and which sound to use. It is also related to the script opcode, 'Flr_set'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
typedef struct {&lt;br /&gt;
	signed short int x;         /* x coordinate where the area is drawn from */&lt;br /&gt;
        signed short int y;         /* y coordinate where the area is drawn from */&lt;br /&gt;
	signed short int x_width;   /* x width of the area */&lt;br /&gt;
        signed short int y_width;   /* y width of the area */&lt;br /&gt;
	unsigned short int sound;   /* footstep ID sound to use */&lt;br /&gt;
} rdt_flr_obj_t;&lt;br /&gt;
&lt;br /&gt;
rdt_flr_obj_t Floor[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 6 (*.SCD) - Scenario data ===&lt;br /&gt;
&lt;br /&gt;
This is the initialisation script for the room. It starts with an unsigned short giving the length of the script in bytes. Then follows the script, in bytecode-style.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Byte&lt;br /&gt;
| Instruction&lt;br /&gt;
| Length&lt;br /&gt;
| Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Nop&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| If&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0x01 */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
} script_if_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This structure is followed by one or several conditions for the if (condition) instruction. Any condition evaluated to false will end the if () block.&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| Else&lt;br /&gt;
| 2&lt;br /&gt;
| Follows: byte with ELSE block length. Note: it's either If/Endif, or If/Else; there is no If/Else/Endif sequence.&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| End If&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| BIT_TEST&lt;br /&gt;
| 4&lt;br /&gt;
| Bit test&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x04 */&lt;br /&gt;
	unsigned char object;&lt;br /&gt;
	unsigned char param;	/* Bits 7-5: Longword index in object, see array following */&lt;br /&gt;
				/* Bits 4-0: Bit number to test */&lt;br /&gt;
	unsigned char op;	/* Operation */&lt;br /&gt;
				/* 0x00:test bit is 0 */&lt;br /&gt;
				/* 0x01:test bit is 1 */&lt;br /&gt;
} script_bit_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| BIT_OP&lt;br /&gt;
| 4&lt;br /&gt;
| Bit operation&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x05 */&lt;br /&gt;
	unsigned char object;	/* Number of object to operate on, see array following */&lt;br /&gt;
	unsigned char param;	/* Bits 7-5: Longword index in object */&lt;br /&gt;
				/* Bits 4-0: Bit number to clear/set/change is (31-this field value) */&lt;br /&gt;
	unsigned char op;	/* Operation */&lt;br /&gt;
				/* 0x00:clear bit */&lt;br /&gt;
				/* 0x01:set bit */&lt;br /&gt;
				/* 0x02:change bit */&lt;br /&gt;
} script_bit_op_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| OBJ06_TEST&lt;br /&gt;
| 4&lt;br /&gt;
| Compare values&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x06 */&lt;br /&gt;
	unsigned char src;	/* Index in some object for source value */&lt;br /&gt;
				/* 0x00:Current stage */&lt;br /&gt;
				/* 0x01:Current room */&lt;br /&gt;
				/* 0x02:Current camera */&lt;br /&gt;
				/* 0x03:Stage and room */&lt;br /&gt;
				/* 0x04:Previous/next camera */&lt;br /&gt;
				/* 0x05:? */&lt;br /&gt;
				/* 0x06:? */&lt;br /&gt;
				/* 0x07:? Used in instruction 0x1a */&lt;br /&gt;
				/* 0x08:? Used in instruction 0x1c */&lt;br /&gt;
				/* 0x09:Flags for current camera */&lt;br /&gt;
	unsigned char func;	/* Compare function */&lt;br /&gt;
				/* 0x00:EQ */&lt;br /&gt;
				/* 0x01:LT */&lt;br /&gt;
				/* 0x02:LE */&lt;br /&gt;
				/* 0x03:GT */&lt;br /&gt;
				/* 0x04:GE */&lt;br /&gt;
				/* 0x05:NE */&lt;br /&gt;
	char param;		/* Raw value to compare against */&lt;br /&gt;
} script_obj06_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| OBJ07_TEST&lt;br /&gt;
| 6&lt;br /&gt;
| Compare values&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x07 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned char src;	/* Word index in some object for source value */&lt;br /&gt;
				/* (not the same object as instruction 0x06) */&lt;br /&gt;
	unsigned char func;	/* Compare function */&lt;br /&gt;
				/* 0x00:EQ */&lt;br /&gt;
				/* 0x01:LT */&lt;br /&gt;
				/* 0x02:LE */&lt;br /&gt;
				/* 0x03:GT */&lt;br /&gt;
				/* 0x04:GE */&lt;br /&gt;
				/* 0x05:NE */&lt;br /&gt;
	short param;		/* Raw value to compare against */&lt;br /&gt;
} script_obj07_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| STAGEROOMCAM_SET&lt;br /&gt;
| 4&lt;br /&gt;
| Set value for stage, room or camera&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x08 */&lt;br /&gt;
	unsigned char id;	/* 0: stage, 1: room, 2: camera */&lt;br /&gt;
	unsigned short value;&lt;br /&gt;
} script_stageroomcam_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| CUT_SET&lt;br /&gt;
| 2&lt;br /&gt;
| Switch to prev/next camera, set it as current camera&lt;br /&gt;
|-&lt;br /&gt;
| 0x0a&lt;br /&gt;
| CUT_SET&lt;br /&gt;
| 2&lt;br /&gt;
| Switch to current camera, set it as prev/next camera&lt;br /&gt;
|-&lt;br /&gt;
| 0x0b&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0c&lt;br /&gt;
| DOOR_SET&lt;br /&gt;
| 26&lt;br /&gt;
| TODO: find where next_camera is stored&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0c */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	short x,y,w,h;&lt;br /&gt;
	unsigned char unknown0[5];&lt;br /&gt;
	unsigned char next_stage_and_room;	/* bits 7,6,5: stage, 4,3,2,1,0: room */&lt;br /&gt;
	short next_x,next_y,next_z;&lt;br /&gt;
	short next_dir;&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
} script_door_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note: if stage=0, we must keep current stage, else switch stage.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0d&lt;br /&gt;
| ITEM_SET&lt;br /&gt;
| 18&lt;br /&gt;
| Pickable items, objects, obstacles&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0d */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	short x,y,w,h;&lt;br /&gt;
	unsigned char type;	/* 0x02: message, obstacle? */&lt;br /&gt;
				/* 0x07: trigger,event,movable object? */&lt;br /&gt;
				/* 0x08: box */&lt;br /&gt;
				/* 0x09: pickable object, trigger? */&lt;br /&gt;
				/* 0x10: typewriter */&lt;br /&gt;
	unsigned char unknown[7];&lt;br /&gt;
} script_item_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0e&lt;br /&gt;
| Nop&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0f&lt;br /&gt;
| ?&lt;br /&gt;
| 8&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0f */&lt;br /&gt;
	unsigned char bitmask;&lt;br /&gt;
	unsigned short unknown[3];&lt;br /&gt;
} script_inst0f_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| OBJ10_TEST&lt;br /&gt;
| 2&lt;br /&gt;
| Check if obj10 has value given as parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x10 */&lt;br /&gt;
	char value;&lt;br /&gt;
} script_obj10_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| OBJ11_TEST&lt;br /&gt;
| 2&lt;br /&gt;
| Check if obj11 has value given as parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x11 */&lt;br /&gt;
	char value;&lt;br /&gt;
} script_obj11_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| Item 0x12&lt;br /&gt;
| 10&lt;br /&gt;
| Typewriter? Stairs?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x12 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown0[2];&lt;br /&gt;
	short unknown1[3];&lt;br /&gt;
} script_inst12_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| Item 0x13&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x13 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown0[2];&lt;br /&gt;
} script_inst13_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x14 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned char param1;&lt;br /&gt;
	unsigned char param2;&lt;br /&gt;
} script_inst14_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| Volume set?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| ?&lt;br /&gt;
| 10&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ITEM_MODEL_SET&lt;br /&gt;
| 26&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x18 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown[24];&lt;br /&gt;
} script_item_model_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| OBJ19_SET&lt;br /&gt;
| 4&lt;br /&gt;
| Set value in obj19&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x09 */&lt;br /&gt;
	unsigned char src;	/* Index in some object */&lt;br /&gt;
	char value;		/* New value */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
} script_obj19_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1a&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1b&lt;br /&gt;
| EM_SET&lt;br /&gt;
| 22&lt;br /&gt;
| Entity (enemy, other character)&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1b */&lt;br /&gt;
	unsigned char model;&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned char killed;	/* 0xff for non enemy, else index in killed array to avoid respawn */&lt;br /&gt;
	unsigned char unknown1[2];&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
	unsigned short a;&lt;br /&gt;
	unsigned short unknown2;&lt;br /&gt;
	unsigned short x;&lt;br /&gt;
	unsigned short y;&lt;br /&gt;
	unsigned short z;&lt;br /&gt;
	unsigned char id;	/* ID of entity, used for example for EM_POS_SET */&lt;br /&gt;
	unsigned char unknown3[3];&lt;br /&gt;
} script_em_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1c */&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned short unknown1[2];&lt;br /&gt;
} script_inst1c_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1d&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1e&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1e */&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
} script_inst1e_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1f&lt;br /&gt;
| OM_SET&lt;br /&gt;
| 28&lt;br /&gt;
| Movable (crate, statue) or animated (lid) objects?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1f */&lt;br /&gt;
	unsigned char id;	/* Bits 5-0: Index in array stored at offset 2 of RDT file */&lt;br /&gt;
	unsigned char type;	/* 0x11: safe lid&amp;amp;nbsp;? */&lt;br /&gt;
	unsigned char unknown[25];&lt;br /&gt;
} script_om_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| PLAYER_POS_SET&lt;br /&gt;
| 14&lt;br /&gt;
| Change player position and direction&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x20 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short unknown0,angle,unknown1;&lt;br /&gt;
	unsigned short x,y,z;&lt;br /&gt;
} script_player_pos_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| EM_POS_SET&lt;br /&gt;
| 14&lt;br /&gt;
| Change entity position and direction&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x21 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned short dummy;&lt;br /&gt;
	unsigned short angle;&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short x,y,z;&lt;br /&gt;
} script_em_pos_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x23 */&lt;br /&gt;
	unsigned char flag;&lt;br /&gt;
} script_inst23_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x27&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| ?&lt;br /&gt;
| 4,6 or 8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| Select sound bank?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2a&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2b&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2d&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2f&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| ?&lt;br /&gt;
| 2 or 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| ?&lt;br /&gt;
| 8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| Set value for internal array&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x37 */&lt;br /&gt;
	unsigned char row;	/* row (0-7) column (0-31) for internal byte array */&lt;br /&gt;
	unsigned char col;&lt;br /&gt;
	unsigned char value;&lt;br /&gt;
} script_inst37_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3a&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3b&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3c&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3d&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3e&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3f&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| ?&lt;br /&gt;
| 16&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| ?&lt;br /&gt;
| 2+12*n+2*m (was 44)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| ?&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4a&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4b&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4c&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| Set value in OBJ06 ?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x4c */&lt;br /&gt;
	unsigned char unknown[3];&lt;br /&gt;
} script_inst4c_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4d&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4e&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4f&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Objects for bit operations ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object number&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Game status. Bit 23:Player character (0: Chris, 1: Jill, or vice versa).&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 7 (*.SCD) - Execution script for room ===&lt;br /&gt;
&lt;br /&gt;
This script is run regularly to update stuff in current room. It follows same structure as the one at offset 6.&lt;br /&gt;
&lt;br /&gt;
=== Offset 8, Script events ? ===&lt;br /&gt;
&lt;br /&gt;
This structure starts with a NULL terminated list of [[unsigned long]], which are offsets relative to start of this object. These offsets store also some bytecodes, different than those above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf6&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf7&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf7&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf8&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf8&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf9&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1 or 3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfa&amp;lt;/code&amp;gt;&lt;br /&gt;
| For&lt;br /&gt;
| 4&lt;br /&gt;
| Initialize a for loop. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfa */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short count;&lt;br /&gt;
} event_for_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfb&amp;lt;/code&amp;gt;&lt;br /&gt;
| Next&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set_Inst&lt;br /&gt;
| variable	&lt;br /&gt;
| Initialize bytecode instruction to execute later. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfc */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
	unsigned char bytecode_inst[];&lt;br /&gt;
} event_set_inst_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfd&amp;lt;/code&amp;gt;&lt;br /&gt;
| Exec_inst&lt;br /&gt;
| 1&lt;br /&gt;
| Execute bytecode instruction previously set with 0xfc instruction.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfe&amp;lt;/code&amp;gt;&lt;br /&gt;
| Sleep, process next event&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt;&lt;br /&gt;
| Disable event&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 9 (*.EMR) - Skeleton animation ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 10 (*.EDD) - Skeleton animation steps ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 11 (*.MSG) - Text messages ===&lt;br /&gt;
&lt;br /&gt;
First, you have an arrays of [[unsigned short]], which are relative offsets to the beginning of this object. So the number of items is the first offset/2 (if we are lucky that the first offset always has the lowest value).&lt;br /&gt;
&lt;br /&gt;
It contains the texts for cutscenes, dialogs, examining objects.&lt;br /&gt;
&lt;br /&gt;
Conversion table, from byte to ASCII value:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! 0&lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
! 7&lt;br /&gt;
! 8&lt;br /&gt;
! 9&lt;br /&gt;
! 10&lt;br /&gt;
! 11&lt;br /&gt;
! 12&lt;br /&gt;
! 13&lt;br /&gt;
! 14&lt;br /&gt;
! 15&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
|  &lt;br /&gt;
| .&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| (&lt;br /&gt;
| )&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
! 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| :&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| ,&lt;br /&gt;
| &amp;quot;&lt;br /&gt;
| !&lt;br /&gt;
| ?&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| A&lt;br /&gt;
| B&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
! 0x20&lt;br /&gt;
| D&lt;br /&gt;
| E&lt;br /&gt;
| F&lt;br /&gt;
| G&lt;br /&gt;
| H&lt;br /&gt;
| I&lt;br /&gt;
| J&lt;br /&gt;
| K&lt;br /&gt;
| L&lt;br /&gt;
| M&lt;br /&gt;
| N&lt;br /&gt;
| O&lt;br /&gt;
| P&lt;br /&gt;
| Q&lt;br /&gt;
| R&lt;br /&gt;
| S&lt;br /&gt;
|-&lt;br /&gt;
! 0x30&lt;br /&gt;
| T&lt;br /&gt;
| U&lt;br /&gt;
| V&lt;br /&gt;
| W&lt;br /&gt;
| X&lt;br /&gt;
| Y&lt;br /&gt;
| Z&lt;br /&gt;
| [&lt;br /&gt;
| /&lt;br /&gt;
| ]&lt;br /&gt;
| '&lt;br /&gt;
| -&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| a&lt;br /&gt;
| b&lt;br /&gt;
| c&lt;br /&gt;
|-&lt;br /&gt;
! 0x40&lt;br /&gt;
| d&lt;br /&gt;
| e&lt;br /&gt;
| f&lt;br /&gt;
| g&lt;br /&gt;
| h&lt;br /&gt;
| i&lt;br /&gt;
| j&lt;br /&gt;
| k&lt;br /&gt;
| l&lt;br /&gt;
| m&lt;br /&gt;
| n&lt;br /&gt;
| o&lt;br /&gt;
| p&lt;br /&gt;
| q&lt;br /&gt;
| r&lt;br /&gt;
| s&lt;br /&gt;
|-&lt;br /&gt;
! 0x50&lt;br /&gt;
| t&lt;br /&gt;
| u&lt;br /&gt;
| v&lt;br /&gt;
| w&lt;br /&gt;
| x&lt;br /&gt;
| y&lt;br /&gt;
| z&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background: #CCC; color: #FFF;&amp;quot;&amp;gt;?&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Codes above 0x57 may also be different given the language, for characters with trema, accents and the like.&lt;br /&gt;
&lt;br /&gt;
There are also some formatting codes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| End of text&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| Carriage return&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| Pause&lt;br /&gt;
|-&lt;br /&gt;
! 0x08&lt;br /&gt;
| Yes/No question&lt;br /&gt;
|-&lt;br /&gt;
! 0x74&lt;br /&gt;
| &amp;quot;S.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x75&lt;br /&gt;
| &amp;quot;T.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x76&lt;br /&gt;
| &amp;quot;A.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x77&lt;br /&gt;
| &amp;quot;R.&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
! 0x79&lt;br /&gt;
| &amp;quot;. &amp;quot; string&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)</id>
		<title>RDT (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)"/>
				<updated>2023-08-25T15:34:28Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: /* Offset 6 (*.SCD) - Scenario data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|extensions={{ext|rdt}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Restored|2017-11-25|https://web.archive.org/web/20171125230810/http://rewiki.regengedanken.de/wiki/.RDT_(Resident_Evil)}}&lt;br /&gt;
&lt;br /&gt;
The '''.RDT''' file format is used to stored the description of a room in Resident Evil on Playstation or PC. It should contain the camera position (to correctly display 3D objects), the background images and sprites used to draw the scene, description of when to change camera, position of enemies when entering room, and so on...&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
The values are stored in Little-Endian order.&lt;br /&gt;
&lt;br /&gt;
The file is always named &amp;lt;code&amp;gt;roomSXX0.rdt&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;roomSXX1.rdt&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; is the game status/stage. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is the location number.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
&lt;br /&gt;
A RDT file starts with this header, to store count for different objects.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  char unknown0;&lt;br /&gt;
  char num_cameras; /* Number of cameras of the room */&lt;br /&gt;
  char num_sound_banks; /* Number of sound banks, stored at offset 18 ? */&lt;br /&gt;
  char unknown1[3];&lt;br /&gt;
  unsigned short unknown2[3];&lt;br /&gt;
&lt;br /&gt;
  /* An array of 3 elements of unknown structure */&lt;br /&gt;
  rdt_header_part_t unknown3[3];&lt;br /&gt;
} rdt_header_t;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  long unknown_pos_x; /* Unknown 3D position */&lt;br /&gt;
  long unknown_pos_y;&lt;br /&gt;
  long unknown_pos_z;&lt;br /&gt;
  unsigned long unknown0[2];&lt;br /&gt;
} rdt_header_part_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Object list ==&lt;br /&gt;
&lt;br /&gt;
Following the header, we have an array of 19 absolute offsets to various objects in the file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
! 0&lt;br /&gt;
| Camera switches (*.RVD)&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| Collision Boundaries for 3D Models (*.SCA)&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for item models)&lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for obstacles &amp;amp; moveable objects)&lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| Block data (*.BLK)&lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| Footstep sound zones (*.FLR)&lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| Initialization Script(s) (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 7&lt;br /&gt;
| Execution Script 0 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 8&lt;br /&gt;
| Execution Script 1 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 9&lt;br /&gt;
| Skeleton animation (*.EMR)&lt;br /&gt;
|-&lt;br /&gt;
! 10&lt;br /&gt;
| Skeleton animation steps (*.EDD)&lt;br /&gt;
|-&lt;br /&gt;
! 11&lt;br /&gt;
| Message text(s) (*.MSG)&lt;br /&gt;
|-&lt;br /&gt;
! 12&lt;br /&gt;
| RAW image (*.RAW), points to several RAW images used for example by Offset 2 for item images&lt;br /&gt;
|-&lt;br /&gt;
! 13&lt;br /&gt;
| Effect animation index (*.ESP)&lt;br /&gt;
|-&lt;br /&gt;
! 14&lt;br /&gt;
| Effect animation data (*.EFF); points to a list of relative offsets to read the EFF/ESP data (read backwards!)&lt;br /&gt;
|-&lt;br /&gt;
! 15&lt;br /&gt;
| Effect animation sprite image(s) (*.TIM); points to the last of those images used for effects&lt;br /&gt;
|-&lt;br /&gt;
! 16&lt;br /&gt;
| Sound attribute table (*.SND); points to a table which is 192 bytes in size&lt;br /&gt;
|-&lt;br /&gt;
! 17&lt;br /&gt;
| offset to a VAB header file (*.VH)&lt;br /&gt;
|-&lt;br /&gt;
! 18&lt;br /&gt;
| offset to VAB sound file (*.VB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Camera positions (*.RID) ===&lt;br /&gt;
&lt;br /&gt;
At absolute offset 0x94 in a file, you'll find an array of 'num_cameras' items with this structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	long masks_offset;	/* Offset to image mask definition */&lt;br /&gt;
	long tim_masks_offset;	/* Offset to TIM file that contains image masks, if not zero */&lt;br /&gt;
	long camera_from_x;	/* Position of the camera */&lt;br /&gt;
	long camera_from_y;&lt;br /&gt;
	long camera_from_z;&lt;br /&gt;
	long camera_to_x;	/* Where the camera is looking to */&lt;br /&gt;
	long camera_to_y;&lt;br /&gt;
	long camera_to_z;&lt;br /&gt;
	long unknown1[3];&lt;br /&gt;
} rdt_camera_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Camera masks (*.PRI) ===&lt;br /&gt;
&lt;br /&gt;
The masks_offset is an offset to an extra structure, which has following header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count_offsets;	/* Number of global offsets, or 0xffff for none */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
} rdt_masks_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you have 'rdt_mask_offset_t' items, which have a 8-byte length. Summing all 'count' fields should equal the 'count_masks' of the rdt_masks_t structure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count;	/* Number of masks, with which to use this structure */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short dst_x;	/* Destination position on background image/screen, to be added */&lt;br /&gt;
	unsigned short dst_y;&lt;br /&gt;
} rdt_mask_offset_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then you have 'rdt_[rect|square]_mask_t' items, which have either 12-byte (rectangular mask) or 8-byte length (square mask). The length is 12 if byte 7 (rdt_square_mask_t.size field) is zero, and 8 otherwise. The 'depth' value is the Z distance of the mask from the camera (low value=near, high value=far).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned char unknown;&lt;br /&gt;
	unsigned char size;	/* Width and height of mask */&lt;br /&gt;
} rdt_square_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned short zero;&lt;br /&gt;
	unsigned short width, height;	/* Dimensions of mask */&lt;br /&gt;
} rdt_rect_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 0 (*.RVD) - Camera zones/switches ===&lt;br /&gt;
&lt;br /&gt;
At offset 0, you'll find the list of camera switches for the current room. The list end with the first 4 bytes are 0xffffffff (i.e for cam0 and cam1 values).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short to; /* Camera number to switch to */&lt;br /&gt;
  unsigned short from; /* Camera number to switch from */&lt;br /&gt;
  short x1,y1; /* Zone the player must enter to switch camera */&lt;br /&gt;
  short x2,y2;&lt;br /&gt;
  short x3,y3;&lt;br /&gt;
  short x4,y4;&lt;br /&gt;
} rdt_camera_switch_t;&lt;br /&gt;
If the 'to' value = 9, then it is a zone, defining the area in which the switches will work and 3D objects will be visible while this camera is used, else it is a camera switch.&lt;br /&gt;
&lt;br /&gt;
=== Offset 1 (*.SCA) - Collision Boundaries for 3D Models ===&lt;br /&gt;
&lt;br /&gt;
At offset 1, you'll find the boundary collision data for the current room.&lt;br /&gt;
&lt;br /&gt;
The first 24 bytes are the header which is using the following structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short Cx; /* Ceiling x value */&lt;br /&gt;
  unsigned short Cz; /* Ceiling z value */&lt;br /&gt;
  unsigned long counts[5]; /* Number of objects = sum of these 5 long values */&lt;br /&gt;
} rdt_sca_header_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Followed by the header, the individual boundary entries start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short x1; /* X of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z1; /* Z of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short x2; /* X of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z2; /* Z of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short type; /* type of the boundary plane/object (01=Standard; 03=Circle etc.) */&lt;br /&gt;
  unsigned short floor; /* floor value/ 256 = floor value for use in the game as height definition */ &lt;br /&gt;
} rdt_sca_obj_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this the data block ends with a 4 byte unsigned long holding the total size of the SCA data block in bytes.&lt;br /&gt;
&lt;br /&gt;
=== Offset 2 (*.TMD/*.TIM) - Item 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset2_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 3 (*.TMD/*.TIM) - Room 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset3_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 4 (*.BLK) - Block data ===&lt;br /&gt;
&lt;br /&gt;
It's unknown what this data is used for. It defines plane based areas that look like &amp;quot;inversed&amp;quot; collision boundaries.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
&lt;br /&gt;
typedef struct {&lt;br /&gt;
        unsigned short x1;          /* X of the top-left corner of the object */&lt;br /&gt;
        unsigned short z1;          /* Z of the top-left corner of the object */&lt;br /&gt;
        unsigned short x2;          /* X of the bottom-right corner of the object */&lt;br /&gt;
        unsigned short z2;          /* Z of the bottom-right corner of the object */&lt;br /&gt;
	unsigned short int Dir_bit;&lt;br /&gt;
	unsigned short int Abut;&lt;br /&gt;
} rdt_blk_obj_t;&lt;br /&gt;
&lt;br /&gt;
unsigned short int unknown;	/* unknown; follows after last structure */&lt;br /&gt;
&lt;br /&gt;
rdt_blk_obj_t Block[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 5 (*.FLR) - Floor/footstep sound areas ===&lt;br /&gt;
&lt;br /&gt;
This data defines the footstep sound areas and which sound to use. It is also related to the script opcode, 'Flr_set'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
typedef struct {&lt;br /&gt;
	signed short int x;         /* x coordinate where the area is drawn from */&lt;br /&gt;
        signed short int y;         /* y coordinate where the area is drawn from */&lt;br /&gt;
	signed short int x_width;   /* x width of the area */&lt;br /&gt;
        signed short int y_width;   /* y width of the area */&lt;br /&gt;
	unsigned short int sound;   /* footstep ID sound to use */&lt;br /&gt;
} rdt_flr_obj_t;&lt;br /&gt;
&lt;br /&gt;
rdt_flr_obj_t Floor[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 6 (*.SCD) - Scenario data ===&lt;br /&gt;
&lt;br /&gt;
This is the initialisation script for the room. It starts with an unsigned short giving the length of the script in bytes. Then follows the script, in bytecode-style.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Byte&lt;br /&gt;
| Instruction&lt;br /&gt;
| Length&lt;br /&gt;
| Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Nop&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| If&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0x01 */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
} script_if_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This structure is followed by one or several conditions for the if (condition) instruction. Any condition evaluated to false will end the if () block.&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| Else&lt;br /&gt;
| 2&lt;br /&gt;
| Follows: byte with ELSE block length. Note: it's either If/Endif, or If/Else; there is no If/Else/Endif sequence.&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| End If&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| BIT_TEST&lt;br /&gt;
| 4&lt;br /&gt;
| Bit test&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x04 */&lt;br /&gt;
	unsigned char object;&lt;br /&gt;
	unsigned char param;	/* Bits 7-5: Longword index in object, see array following */&lt;br /&gt;
				/* Bits 4-0: Bit number to test */&lt;br /&gt;
	unsigned char op;	/* Operation */&lt;br /&gt;
				/* 0x00:test bit is 0 */&lt;br /&gt;
				/* 0x01:test bit is 1 */&lt;br /&gt;
} script_bit_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| BIT_OP&lt;br /&gt;
| 4&lt;br /&gt;
| Bit operation&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x05 */&lt;br /&gt;
	unsigned char object;	/* Number of object to operate on, see array following */&lt;br /&gt;
	unsigned char param;	/* Bits 7-5: Longword index in object */&lt;br /&gt;
				/* Bits 4-0: Bit number to clear/set/change is (31-this field value) */&lt;br /&gt;
	unsigned char op;	/* Operation */&lt;br /&gt;
				/* 0x00:clear bit */&lt;br /&gt;
				/* 0x01:set bit */&lt;br /&gt;
				/* 0x02:change bit */&lt;br /&gt;
} script_bit_op_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| OBJ06_TEST&lt;br /&gt;
| 4&lt;br /&gt;
| Compare values&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x06 */&lt;br /&gt;
	unsigned char src;	/* Index in some object for source value */&lt;br /&gt;
				/* 0x00:Current stage */&lt;br /&gt;
				/* 0x01:Current room */&lt;br /&gt;
				/* 0x02:Current camera */&lt;br /&gt;
				/* 0x03:Stage and room */&lt;br /&gt;
				/* 0x04:Previous/next camera */&lt;br /&gt;
				/* 0x05:? */&lt;br /&gt;
				/* 0x06:? */&lt;br /&gt;
				/* 0x07:? Used in instruction 0x1a */&lt;br /&gt;
				/* 0x08:? Used in instruction 0x1c */&lt;br /&gt;
				/* 0x09:Flags for current camera */&lt;br /&gt;
	unsigned char func;	/* Compare function */&lt;br /&gt;
				/* 0x00:EQ */&lt;br /&gt;
				/* 0x01:LT */&lt;br /&gt;
				/* 0x02:LE */&lt;br /&gt;
				/* 0x03:GT */&lt;br /&gt;
				/* 0x04:GE */&lt;br /&gt;
				/* 0x05:NE */&lt;br /&gt;
	char param;		/* Raw value to compare against */&lt;br /&gt;
} script_obj06_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| OBJ07_TEST&lt;br /&gt;
| 6&lt;br /&gt;
| Compare values&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x07 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned char src;	/* Word index in some object for source value */&lt;br /&gt;
				/* (not the same object as instruction 0x06) */&lt;br /&gt;
	unsigned char func;	/* Compare function */&lt;br /&gt;
				/* 0x00:EQ */&lt;br /&gt;
				/* 0x01:LT */&lt;br /&gt;
				/* 0x02:LE */&lt;br /&gt;
				/* 0x03:GT */&lt;br /&gt;
				/* 0x04:GE */&lt;br /&gt;
				/* 0x05:NE */&lt;br /&gt;
	short param;		/* Raw value to compare against */&lt;br /&gt;
} script_obj07_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| STAGEROOMCAM_SET&lt;br /&gt;
| 4&lt;br /&gt;
| Set value for stage, room or camera&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x08 */&lt;br /&gt;
	unsigned char id;	/* 0: stage, 1: room, 2: camera */&lt;br /&gt;
	unsigned short value;&lt;br /&gt;
} script_stageroomcam_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| CUT_SET&lt;br /&gt;
| 2&lt;br /&gt;
| Switch to prev/next camera, set it as current camera&lt;br /&gt;
|-&lt;br /&gt;
| 0x0a&lt;br /&gt;
| CUT_SET&lt;br /&gt;
| 2&lt;br /&gt;
| Switch to current camera, set it as prev/next camera&lt;br /&gt;
|-&lt;br /&gt;
| 0x0b&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0c&lt;br /&gt;
| DOOR_SET&lt;br /&gt;
| 26&lt;br /&gt;
| TODO: find where next_camera is stored&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0c */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	short x,y,w,h;&lt;br /&gt;
	unsigned char unknown0[5];&lt;br /&gt;
	unsigned char next_stage_and_room;	/* bits 7,6,5: stage, 4,3,2,1,0: room */&lt;br /&gt;
	short next_x,next_y,next_z;&lt;br /&gt;
	short next_dir;&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
} script_door_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note: if stage=0, we must keep current stage, else switch stage.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0d&lt;br /&gt;
| ITEM_SET&lt;br /&gt;
| 18&lt;br /&gt;
| Pickable items, objects, obstacles&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0d */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	short x,y,w,h;&lt;br /&gt;
	unsigned char type;	/* 0x02: message, obstacle? */&lt;br /&gt;
				/* 0x07: trigger,event,movable object? */&lt;br /&gt;
				/* 0x08: box */&lt;br /&gt;
				/* 0x09: pickable object, trigger? */&lt;br /&gt;
				/* 0x10: typewriter */&lt;br /&gt;
	unsigned char unknown[7];&lt;br /&gt;
} script_item_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0e&lt;br /&gt;
| Nop&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0f&lt;br /&gt;
| ?&lt;br /&gt;
| 8&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0f */&lt;br /&gt;
	unsigned char bitmask;&lt;br /&gt;
	unsigned short unknown[3];&lt;br /&gt;
} script_inst0f_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| OBJ10_TEST&lt;br /&gt;
| 2&lt;br /&gt;
| Check if obj10 has value given as parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x10 */&lt;br /&gt;
	char value;&lt;br /&gt;
} script_obj10_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| OBJ11_TEST&lt;br /&gt;
| 2&lt;br /&gt;
| Check if obj11 has value given as parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x11 */&lt;br /&gt;
	char value;&lt;br /&gt;
} script_obj11_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| Item 0x12&lt;br /&gt;
| 10&lt;br /&gt;
| Typewriter? Stairs?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x12 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown0[2];&lt;br /&gt;
	short unknown1[3];&lt;br /&gt;
} script_inst12_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| Item 0x13&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x13 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown0[2];&lt;br /&gt;
} script_inst13_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x14 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned char param1;&lt;br /&gt;
	unsigned char param2;&lt;br /&gt;
} script_inst14_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| Volume set?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| ?&lt;br /&gt;
| 10&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ITEM_MODEL_SET&lt;br /&gt;
| 26&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x18 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown[24];&lt;br /&gt;
} script_item_model_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| OBJ19_SET&lt;br /&gt;
| 4&lt;br /&gt;
| Set value in obj19&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x09 */&lt;br /&gt;
	unsigned char src;	/* Index in some object */&lt;br /&gt;
	char value;		/* New value */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
} script_obj19_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1a&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1b&lt;br /&gt;
| EM_SET&lt;br /&gt;
| 22&lt;br /&gt;
| Entity (enemy, other character)&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1b */&lt;br /&gt;
	unsigned char model;&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned char killed;	/* 0xff for non enemy, else index in killed array to avoid respawn */&lt;br /&gt;
	unsigned char unknown1[2];&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
	unsigned short a;&lt;br /&gt;
	unsigned short unknown2;&lt;br /&gt;
	unsigned short x;&lt;br /&gt;
	unsigned short y;&lt;br /&gt;
	unsigned short z;&lt;br /&gt;
	unsigned char id;	/* ID of entity, used for example for EM_POS_SET */&lt;br /&gt;
	unsigned char unknown3[3];&lt;br /&gt;
} script_em_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1c */&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned short unknown1[2];&lt;br /&gt;
} script_inst1c_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1d&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1e&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1e */&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
} script_inst1e_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1f&lt;br /&gt;
| OM_SET&lt;br /&gt;
| 28&lt;br /&gt;
| Movable (crate, statue) or animated (lid) objects?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1f */&lt;br /&gt;
	unsigned char id;	/* Bits 5-0: Index in array stored at offset 2 of RDT file */&lt;br /&gt;
	unsigned char type;	/* 0x11: safe lid&amp;amp;nbsp;? */&lt;br /&gt;
	unsigned char unknown[25];&lt;br /&gt;
} script_om_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| PLAYER_POS_SET&lt;br /&gt;
| 14&lt;br /&gt;
| Change player position and direction&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x20 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short unknown0,angle,unknown1;&lt;br /&gt;
	unsigned short x,y,z;&lt;br /&gt;
} script_player_pos_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| EM_POS_SET&lt;br /&gt;
| 14&lt;br /&gt;
| Change entity position and direction&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x21 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned short dummy;&lt;br /&gt;
	unsigned short angle;&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short x,y,z;&lt;br /&gt;
} script_em_pos_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x23 */&lt;br /&gt;
	unsigned char flag;&lt;br /&gt;
} script_inst23_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x27&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| ?&lt;br /&gt;
| 4,6 or 8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| Select sound bank?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2a&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2b&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2d&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2f&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| ?&lt;br /&gt;
| 2 or 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| ?&lt;br /&gt;
| 8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| Set value for internal array&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x37 */&lt;br /&gt;
	unsigned char row;	/* row (0-7) column (0-31) for internal byte array */&lt;br /&gt;
	unsigned char col;&lt;br /&gt;
	unsigned char value;&lt;br /&gt;
} script_inst37_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3a&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3b&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3c&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3d&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3e&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3f&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| ?&lt;br /&gt;
| 16&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| ?&lt;br /&gt;
| 2+12*n+2*m (was 44)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| ?&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4a&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4b&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4c&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| Set value in OBJ06 ?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x4c */&lt;br /&gt;
	unsigned char unknown[3];&lt;br /&gt;
} script_inst4c_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4d&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4e&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4f&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Objects for bit operations ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object number&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Game status. Bit 23:Player character (0: Chris, 1: Jill, or vice versa).&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 7 (*.SCD) - Execution script for room ===&lt;br /&gt;
&lt;br /&gt;
This script is run regularly to update stuff in current room. It follows same structure as the one at offset 6.&lt;br /&gt;
&lt;br /&gt;
=== Offset 8, Script events ? ===&lt;br /&gt;
&lt;br /&gt;
This structure starts with a NULL terminated list of [[unsigned long]], which are offsets relative to start of this object. These offsets store also some bytecodes, different than those above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf6&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf7&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf7&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf8&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf8&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf9&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1 or 3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfa&amp;lt;/code&amp;gt;&lt;br /&gt;
| For&lt;br /&gt;
| 4&lt;br /&gt;
| Initialize a for loop. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfa */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short count;&lt;br /&gt;
} event_for_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfb&amp;lt;/code&amp;gt;&lt;br /&gt;
| Next&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set_Inst&lt;br /&gt;
| variable	&lt;br /&gt;
| Initialize bytecode instruction to execute later. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfc */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
	unsigned char bytecode_inst[];&lt;br /&gt;
} event_set_inst_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfd&amp;lt;/code&amp;gt;&lt;br /&gt;
| Exec_inst&lt;br /&gt;
| 1&lt;br /&gt;
| Execute bytecode instruction previously set with 0xfc instruction.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfe&amp;lt;/code&amp;gt;&lt;br /&gt;
| Sleep, process next event&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt;&lt;br /&gt;
| Disable event&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 9 (*.EMR) - Skeleton animation ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 10 (*.EDD) - Skeleton animation steps ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 11 (*.MSG) - Text messages ===&lt;br /&gt;
&lt;br /&gt;
First, you have an arrays of 'unsigned short', which are relative offsets to the beginning of this object. So the number of items is the first offset/2 (if we are lucky that the first offset always has the lowest value).&lt;br /&gt;
&lt;br /&gt;
It contains the texts for cutscenes, dialogs, examining objects.&lt;br /&gt;
&lt;br /&gt;
Conversion table, from byte to ASCII value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0x00-0x0f: &amp;quot; .___()_____0123&amp;quot;&lt;br /&gt;
0x10-0x1f: &amp;quot;456789:_,&amp;quot;!?_ABC&amp;quot;&lt;br /&gt;
0x20-0x2f: &amp;quot;DEFGHIJKLMNOPQRS&amp;quot;&lt;br /&gt;
0x30-0x3f: &amp;quot;TUVWXYZ[/]'-_abc&amp;quot;&lt;br /&gt;
0x40-0x4f: &amp;quot;defghijklmnopqrs&amp;quot;&lt;br /&gt;
0x50-0x5f: &amp;quot;tuvwxyz_________&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note: not all characters have been found (i.e. the ones with '_').&lt;br /&gt;
Codes above 0x57 may also be different given the language, for characters with trema, accents and the like.&lt;br /&gt;
There are also some formatting codes:&lt;br /&gt;
&lt;br /&gt;
0x01: End of text&lt;br /&gt;
0x02: Carriage return&lt;br /&gt;
0x03: Pause&lt;br /&gt;
0x08: Yes/No question&lt;br /&gt;
0x74: &amp;quot;S.&amp;quot; string&lt;br /&gt;
0x75: &amp;quot;T.&amp;quot; string&lt;br /&gt;
0x76: &amp;quot;A.&amp;quot; string&lt;br /&gt;
0x77: &amp;quot;R.&amp;quot; string&lt;br /&gt;
0x79: &amp;quot;. &amp;quot; string&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)</id>
		<title>RDT (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)"/>
				<updated>2023-08-25T15:32:57Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: /* Offset 6 (*.SCD) - Scenario data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|extensions={{ext|rdt}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Restored|2017-11-25|https://web.archive.org/web/20171125230810/http://rewiki.regengedanken.de/wiki/.RDT_(Resident_Evil)}}&lt;br /&gt;
&lt;br /&gt;
The '''.RDT''' file format is used to stored the description of a room in Resident Evil on Playstation or PC. It should contain the camera position (to correctly display 3D objects), the background images and sprites used to draw the scene, description of when to change camera, position of enemies when entering room, and so on...&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
The values are stored in Little-Endian order.&lt;br /&gt;
&lt;br /&gt;
The file is always named &amp;lt;code&amp;gt;roomSXX0.rdt&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;roomSXX1.rdt&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; is the game status/stage. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is the location number.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
&lt;br /&gt;
A RDT file starts with this header, to store count for different objects.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  char unknown0;&lt;br /&gt;
  char num_cameras; /* Number of cameras of the room */&lt;br /&gt;
  char num_sound_banks; /* Number of sound banks, stored at offset 18 ? */&lt;br /&gt;
  char unknown1[3];&lt;br /&gt;
  unsigned short unknown2[3];&lt;br /&gt;
&lt;br /&gt;
  /* An array of 3 elements of unknown structure */&lt;br /&gt;
  rdt_header_part_t unknown3[3];&lt;br /&gt;
} rdt_header_t;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  long unknown_pos_x; /* Unknown 3D position */&lt;br /&gt;
  long unknown_pos_y;&lt;br /&gt;
  long unknown_pos_z;&lt;br /&gt;
  unsigned long unknown0[2];&lt;br /&gt;
} rdt_header_part_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Object list ==&lt;br /&gt;
&lt;br /&gt;
Following the header, we have an array of 19 absolute offsets to various objects in the file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
! 0&lt;br /&gt;
| Camera switches (*.RVD)&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| Collision Boundaries for 3D Models (*.SCA)&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for item models)&lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for obstacles &amp;amp; moveable objects)&lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| Block data (*.BLK)&lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| Footstep sound zones (*.FLR)&lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| Initialization Script(s) (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 7&lt;br /&gt;
| Execution Script 0 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 8&lt;br /&gt;
| Execution Script 1 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 9&lt;br /&gt;
| Skeleton animation (*.EMR)&lt;br /&gt;
|-&lt;br /&gt;
! 10&lt;br /&gt;
| Skeleton animation steps (*.EDD)&lt;br /&gt;
|-&lt;br /&gt;
! 11&lt;br /&gt;
| Message text(s) (*.MSG)&lt;br /&gt;
|-&lt;br /&gt;
! 12&lt;br /&gt;
| RAW image (*.RAW), points to several RAW images used for example by Offset 2 for item images&lt;br /&gt;
|-&lt;br /&gt;
! 13&lt;br /&gt;
| Effect animation index (*.ESP)&lt;br /&gt;
|-&lt;br /&gt;
! 14&lt;br /&gt;
| Effect animation data (*.EFF); points to a list of relative offsets to read the EFF/ESP data (read backwards!)&lt;br /&gt;
|-&lt;br /&gt;
! 15&lt;br /&gt;
| Effect animation sprite image(s) (*.TIM); points to the last of those images used for effects&lt;br /&gt;
|-&lt;br /&gt;
! 16&lt;br /&gt;
| Sound attribute table (*.SND); points to a table which is 192 bytes in size&lt;br /&gt;
|-&lt;br /&gt;
! 17&lt;br /&gt;
| offset to a VAB header file (*.VH)&lt;br /&gt;
|-&lt;br /&gt;
! 18&lt;br /&gt;
| offset to VAB sound file (*.VB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Camera positions (*.RID) ===&lt;br /&gt;
&lt;br /&gt;
At absolute offset 0x94 in a file, you'll find an array of 'num_cameras' items with this structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	long masks_offset;	/* Offset to image mask definition */&lt;br /&gt;
	long tim_masks_offset;	/* Offset to TIM file that contains image masks, if not zero */&lt;br /&gt;
	long camera_from_x;	/* Position of the camera */&lt;br /&gt;
	long camera_from_y;&lt;br /&gt;
	long camera_from_z;&lt;br /&gt;
	long camera_to_x;	/* Where the camera is looking to */&lt;br /&gt;
	long camera_to_y;&lt;br /&gt;
	long camera_to_z;&lt;br /&gt;
	long unknown1[3];&lt;br /&gt;
} rdt_camera_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Camera masks (*.PRI) ===&lt;br /&gt;
&lt;br /&gt;
The masks_offset is an offset to an extra structure, which has following header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count_offsets;	/* Number of global offsets, or 0xffff for none */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
} rdt_masks_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you have 'rdt_mask_offset_t' items, which have a 8-byte length. Summing all 'count' fields should equal the 'count_masks' of the rdt_masks_t structure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count;	/* Number of masks, with which to use this structure */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short dst_x;	/* Destination position on background image/screen, to be added */&lt;br /&gt;
	unsigned short dst_y;&lt;br /&gt;
} rdt_mask_offset_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then you have 'rdt_[rect|square]_mask_t' items, which have either 12-byte (rectangular mask) or 8-byte length (square mask). The length is 12 if byte 7 (rdt_square_mask_t.size field) is zero, and 8 otherwise. The 'depth' value is the Z distance of the mask from the camera (low value=near, high value=far).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned char unknown;&lt;br /&gt;
	unsigned char size;	/* Width and height of mask */&lt;br /&gt;
} rdt_square_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned short zero;&lt;br /&gt;
	unsigned short width, height;	/* Dimensions of mask */&lt;br /&gt;
} rdt_rect_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 0 (*.RVD) - Camera zones/switches ===&lt;br /&gt;
&lt;br /&gt;
At offset 0, you'll find the list of camera switches for the current room. The list end with the first 4 bytes are 0xffffffff (i.e for cam0 and cam1 values).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short to; /* Camera number to switch to */&lt;br /&gt;
  unsigned short from; /* Camera number to switch from */&lt;br /&gt;
  short x1,y1; /* Zone the player must enter to switch camera */&lt;br /&gt;
  short x2,y2;&lt;br /&gt;
  short x3,y3;&lt;br /&gt;
  short x4,y4;&lt;br /&gt;
} rdt_camera_switch_t;&lt;br /&gt;
If the 'to' value = 9, then it is a zone, defining the area in which the switches will work and 3D objects will be visible while this camera is used, else it is a camera switch.&lt;br /&gt;
&lt;br /&gt;
=== Offset 1 (*.SCA) - Collision Boundaries for 3D Models ===&lt;br /&gt;
&lt;br /&gt;
At offset 1, you'll find the boundary collision data for the current room.&lt;br /&gt;
&lt;br /&gt;
The first 24 bytes are the header which is using the following structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short Cx; /* Ceiling x value */&lt;br /&gt;
  unsigned short Cz; /* Ceiling z value */&lt;br /&gt;
  unsigned long counts[5]; /* Number of objects = sum of these 5 long values */&lt;br /&gt;
} rdt_sca_header_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Followed by the header, the individual boundary entries start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short x1; /* X of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z1; /* Z of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short x2; /* X of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z2; /* Z of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short type; /* type of the boundary plane/object (01=Standard; 03=Circle etc.) */&lt;br /&gt;
  unsigned short floor; /* floor value/ 256 = floor value for use in the game as height definition */ &lt;br /&gt;
} rdt_sca_obj_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this the data block ends with a 4 byte unsigned long holding the total size of the SCA data block in bytes.&lt;br /&gt;
&lt;br /&gt;
=== Offset 2 (*.TMD/*.TIM) - Item 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset2_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 3 (*.TMD/*.TIM) - Room 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset3_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 4 (*.BLK) - Block data ===&lt;br /&gt;
&lt;br /&gt;
It's unknown what this data is used for. It defines plane based areas that look like &amp;quot;inversed&amp;quot; collision boundaries.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
&lt;br /&gt;
typedef struct {&lt;br /&gt;
        unsigned short x1;          /* X of the top-left corner of the object */&lt;br /&gt;
        unsigned short z1;          /* Z of the top-left corner of the object */&lt;br /&gt;
        unsigned short x2;          /* X of the bottom-right corner of the object */&lt;br /&gt;
        unsigned short z2;          /* Z of the bottom-right corner of the object */&lt;br /&gt;
	unsigned short int Dir_bit;&lt;br /&gt;
	unsigned short int Abut;&lt;br /&gt;
} rdt_blk_obj_t;&lt;br /&gt;
&lt;br /&gt;
unsigned short int unknown;	/* unknown; follows after last structure */&lt;br /&gt;
&lt;br /&gt;
rdt_blk_obj_t Block[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 5 (*.FLR) - Floor/footstep sound areas ===&lt;br /&gt;
&lt;br /&gt;
This data defines the footstep sound areas and which sound to use. It is also related to the script opcode, 'Flr_set'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
typedef struct {&lt;br /&gt;
	signed short int x;         /* x coordinate where the area is drawn from */&lt;br /&gt;
        signed short int y;         /* y coordinate where the area is drawn from */&lt;br /&gt;
	signed short int x_width;   /* x width of the area */&lt;br /&gt;
        signed short int y_width;   /* y width of the area */&lt;br /&gt;
	unsigned short int sound;   /* footstep ID sound to use */&lt;br /&gt;
} rdt_flr_obj_t;&lt;br /&gt;
&lt;br /&gt;
rdt_flr_obj_t Floor[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 6 (*.SCD) - Scenario data ===&lt;br /&gt;
&lt;br /&gt;
This is the initialisation script for the room. It starts with an unsigned short giving the length of the script in bytes. Then follows the script, in bytecode-style.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Byte&lt;br /&gt;
| Instruction&lt;br /&gt;
| Length&lt;br /&gt;
| Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Nop&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| If&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0x01 */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
} script_if_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This structure is followed by one or several conditions for the if (condition) instruction. Any condition evaluated to false will end the if () block.&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| Else&lt;br /&gt;
| 2&lt;br /&gt;
| Follows: byte with ELSE block length. Note: it's either If/Endif, or If/Else; there is no If/Else/Endif sequence.&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| End If&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| BIT_TEST&lt;br /&gt;
| 4&lt;br /&gt;
| Bit test&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x04 */&lt;br /&gt;
	unsigned char object;&lt;br /&gt;
	unsigned char param;	/* Bits 7-5: Longword index in object, see array following */&lt;br /&gt;
				/* Bits 4-0: Bit number to test */&lt;br /&gt;
	unsigned char op;	/* Operation */&lt;br /&gt;
				/* 0x00:test bit is 0 */&lt;br /&gt;
				/* 0x01:test bit is 1 */&lt;br /&gt;
} script_bit_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| BIT_OP&lt;br /&gt;
| 4&lt;br /&gt;
| Bit operation&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x05 */&lt;br /&gt;
	unsigned char object;	/* Number of object to operate on, see array following */&lt;br /&gt;
	unsigned char param;	/* Bits 7-5: Longword index in object */&lt;br /&gt;
				/* Bits 4-0: Bit number to clear/set/change is (31-this field value) */&lt;br /&gt;
	unsigned char op;	/* Operation */&lt;br /&gt;
				/* 0x00:clear bit */&lt;br /&gt;
				/* 0x01:set bit */&lt;br /&gt;
				/* 0x02:change bit */&lt;br /&gt;
} script_bit_op_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| OBJ06_TEST&lt;br /&gt;
| 4&lt;br /&gt;
| Compare values&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x06 */&lt;br /&gt;
	unsigned char src;	/* Index in some object for source value */&lt;br /&gt;
				/* 0x00:Current stage */&lt;br /&gt;
				/* 0x01:Current room */&lt;br /&gt;
				/* 0x02:Current camera */&lt;br /&gt;
				/* 0x03:Stage and room */&lt;br /&gt;
				/* 0x04:Previous/next camera */&lt;br /&gt;
				/* 0x05:? */&lt;br /&gt;
				/* 0x06:? */&lt;br /&gt;
				/* 0x07:? Used in instruction 0x1a */&lt;br /&gt;
				/* 0x08:? Used in instruction 0x1c */&lt;br /&gt;
				/* 0x09:Flags for current camera */&lt;br /&gt;
	unsigned char func;	/* Compare function */&lt;br /&gt;
				/* 0x00:EQ */&lt;br /&gt;
				/* 0x01:LT */&lt;br /&gt;
				/* 0x02:LE */&lt;br /&gt;
				/* 0x03:GT */&lt;br /&gt;
				/* 0x04:GE */&lt;br /&gt;
				/* 0x05:NE */&lt;br /&gt;
	char param;		/* Raw value to compare against */&lt;br /&gt;
} script_obj06_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| OBJ07_TEST&lt;br /&gt;
| 6&lt;br /&gt;
| Compare values&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x07 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned char src;	/* Word index in some object for source value */&lt;br /&gt;
				/* (not the same object as instruction 0x06) */&lt;br /&gt;
	unsigned char func;	/* Compare function */&lt;br /&gt;
				/* 0x00:EQ */&lt;br /&gt;
				/* 0x01:LT */&lt;br /&gt;
				/* 0x02:LE */&lt;br /&gt;
				/* 0x03:GT */&lt;br /&gt;
				/* 0x04:GE */&lt;br /&gt;
				/* 0x05:NE */&lt;br /&gt;
	short param;		/* Raw value to compare against */&lt;br /&gt;
} script_obj07_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| STAGEROOMCAM_SET&lt;br /&gt;
| 4&lt;br /&gt;
| Set value for stage, room or camera&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x08 */&lt;br /&gt;
	unsigned char id;	/* 0: stage, 1: room, 2: camera */&lt;br /&gt;
	unsigned short value;&lt;br /&gt;
} script_stageroomcam_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| CUT_SET&lt;br /&gt;
| 2&lt;br /&gt;
| Switch to prev/next camera, set it as current camera&lt;br /&gt;
|-&lt;br /&gt;
| 0x0a&lt;br /&gt;
| CUT_SET&lt;br /&gt;
| 2&lt;br /&gt;
| Switch to current camera, set it as prev/next camera&lt;br /&gt;
|-&lt;br /&gt;
| 0x0b&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0c&lt;br /&gt;
| DOOR_SET&lt;br /&gt;
| 26&lt;br /&gt;
| TODO: find where next_camera is stored&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0c */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	short x,y,w,h;&lt;br /&gt;
	unsigned char unknown0[5];&lt;br /&gt;
	unsigned char next_stage_and_room;	/* bits 7,6,5: stage, 4,3,2,1,0: room */&lt;br /&gt;
	short next_x,next_y,next_z;&lt;br /&gt;
	short next_dir;&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
} script_door_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note: if stage=0, we must keep current stage, else switch stage.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0d&lt;br /&gt;
| ITEM_SET&lt;br /&gt;
| 18&lt;br /&gt;
| Pickable items, objects, obstacles&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0d */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	short x,y,w,h;&lt;br /&gt;
	unsigned char type;	/* 0x02: message, obstacle? */&lt;br /&gt;
				/* 0x07: trigger,event,movable object? */&lt;br /&gt;
				/* 0x08: box */&lt;br /&gt;
				/* 0x09: pickable object, trigger? */&lt;br /&gt;
				/* 0x10: typewriter */&lt;br /&gt;
	unsigned char unknown[7];&lt;br /&gt;
} script_item_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0e&lt;br /&gt;
| Nop&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0f&lt;br /&gt;
| ?&lt;br /&gt;
| 8&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0f */&lt;br /&gt;
	unsigned char bitmask;&lt;br /&gt;
	unsigned short unknown[3];&lt;br /&gt;
} script_inst0f_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| OBJ10_TEST&lt;br /&gt;
| 2&lt;br /&gt;
| Check if obj10 has value given as parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x10 */&lt;br /&gt;
	char value;&lt;br /&gt;
} script_obj10_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| OBJ11_TEST&lt;br /&gt;
| 2&lt;br /&gt;
| Check if obj11 has value given as parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x11 */&lt;br /&gt;
	char value;&lt;br /&gt;
} script_obj11_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| Item 0x12&lt;br /&gt;
| 10&lt;br /&gt;
| Typewriter? Stairs?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x12 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown0[2];&lt;br /&gt;
	short unknown1[3];&lt;br /&gt;
} script_inst12_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| Item 0x13&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x13 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown0[2];&lt;br /&gt;
} script_inst13_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x14 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned char param1;&lt;br /&gt;
	unsigned char param2;&lt;br /&gt;
} script_inst14_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| Volume set?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| ?&lt;br /&gt;
| 10&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ITEM_MODEL_SET&lt;br /&gt;
| 26&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x18 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned char unknown[24];&lt;br /&gt;
} script_item_model_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| OBJ19_SET&lt;br /&gt;
| 4&lt;br /&gt;
| Set value in obj19&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x09 */&lt;br /&gt;
	unsigned char src;	/* Index in some object */&lt;br /&gt;
	char value;		/* New value */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
} script_obj19_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1a&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1b&lt;br /&gt;
| EM_SET&lt;br /&gt;
| 22&lt;br /&gt;
| Entity (enemy, other character)&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1b */&lt;br /&gt;
	unsigned char model;&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned char killed;	/* 0xff for non enemy, else index in killed array to avoid respawn */&lt;br /&gt;
	unsigned char unknown1[2];&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
	unsigned short a;&lt;br /&gt;
	unsigned short unknown2;&lt;br /&gt;
	unsigned short x;&lt;br /&gt;
	unsigned short y;&lt;br /&gt;
	unsigned short z;&lt;br /&gt;
	unsigned char id;	/* ID of entity, used for example for EM_POS_SET */&lt;br /&gt;
	unsigned char unknown3[3];&lt;br /&gt;
} script_em_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1c */&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned short unknown1[2];&lt;br /&gt;
} script_inst1c_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1d&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1e&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1e */&lt;br /&gt;
	unsigned char unknown0;&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
} script_inst1e_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1f&lt;br /&gt;
| OM_SET&lt;br /&gt;
| 28&lt;br /&gt;
| Movable (crate, statue) or animated (lid) objects?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x1f */&lt;br /&gt;
	unsigned char id;	/* Bits 5-0: Index in array stored at offset 2 of RDT file */&lt;br /&gt;
	unsigned char type;	/* 0x11: safe lid&amp;amp;nbsp;? */&lt;br /&gt;
	unsigned char unknown[25];&lt;br /&gt;
} script_om_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| PLAYER_POS_SET&lt;br /&gt;
| 14&lt;br /&gt;
| Change player position and direction&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x20 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short unknown0,angle,unknown1;&lt;br /&gt;
	unsigned short x,y,z;&lt;br /&gt;
} script_player_pos_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| EM_POS_SET&lt;br /&gt;
| 14&lt;br /&gt;
| Change entity position and direction&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x21 */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	unsigned short dummy;&lt;br /&gt;
	unsigned short angle;&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short x,y,z;&lt;br /&gt;
} script_em_pos_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x23 */&lt;br /&gt;
	unsigned char flag;&lt;br /&gt;
} script_inst23_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x27&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| ?&lt;br /&gt;
| 4,6 or 8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| Select sound bank?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2a&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2b&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2d&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2f&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| ?&lt;br /&gt;
| 2 or 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| ?&lt;br /&gt;
| 8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| Set value for internal array&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x37 */&lt;br /&gt;
	unsigned char row;	/* row (0-7) column (0-31) for internal byte array */&lt;br /&gt;
	unsigned char col;&lt;br /&gt;
	unsigned char value;&lt;br /&gt;
} script_inst37_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3a&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3b&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3c&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3d&lt;br /&gt;
| ?&lt;br /&gt;
| 12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3e&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3f&lt;br /&gt;
| ?&lt;br /&gt;
| 6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| ?&lt;br /&gt;
| 16&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| ?&lt;br /&gt;
| 2+12*n+2*m (was 44)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| ?&lt;br /&gt;
| 14&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4a&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4b&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4c&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| Set value in OBJ06 ?&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x4c */&lt;br /&gt;
	unsigned char unknown[3];&lt;br /&gt;
} script_inst4c_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4d&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4e&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4f&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| ?&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 7 (*.SCD) - Execution script for room ===&lt;br /&gt;
&lt;br /&gt;
This script is run regularly to update stuff in current room. It follows same structure as the one at offset 6.&lt;br /&gt;
&lt;br /&gt;
=== Offset 8, Script events ? ===&lt;br /&gt;
&lt;br /&gt;
This structure starts with a NULL terminated list of [[unsigned long]], which are offsets relative to start of this object. These offsets store also some bytecodes, different than those above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf6&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf7&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf7&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf8&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf8&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf9&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1 or 3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfa&amp;lt;/code&amp;gt;&lt;br /&gt;
| For&lt;br /&gt;
| 4&lt;br /&gt;
| Initialize a for loop. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfa */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short count;&lt;br /&gt;
} event_for_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfb&amp;lt;/code&amp;gt;&lt;br /&gt;
| Next&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set_Inst&lt;br /&gt;
| variable	&lt;br /&gt;
| Initialize bytecode instruction to execute later. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfc */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
	unsigned char bytecode_inst[];&lt;br /&gt;
} event_set_inst_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfd&amp;lt;/code&amp;gt;&lt;br /&gt;
| Exec_inst&lt;br /&gt;
| 1&lt;br /&gt;
| Execute bytecode instruction previously set with 0xfc instruction.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfe&amp;lt;/code&amp;gt;&lt;br /&gt;
| Sleep, process next event&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt;&lt;br /&gt;
| Disable event&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 9 (*.EMR) - Skeleton animation ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 10 (*.EDD) - Skeleton animation steps ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 11 (*.MSG) - Text messages ===&lt;br /&gt;
&lt;br /&gt;
First, you have an arrays of 'unsigned short', which are relative offsets to the beginning of this object. So the number of items is the first offset/2 (if we are lucky that the first offset always has the lowest value).&lt;br /&gt;
&lt;br /&gt;
It contains the texts for cutscenes, dialogs, examining objects.&lt;br /&gt;
&lt;br /&gt;
Conversion table, from byte to ASCII value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0x00-0x0f: &amp;quot; .___()_____0123&amp;quot;&lt;br /&gt;
0x10-0x1f: &amp;quot;456789:_,&amp;quot;!?_ABC&amp;quot;&lt;br /&gt;
0x20-0x2f: &amp;quot;DEFGHIJKLMNOPQRS&amp;quot;&lt;br /&gt;
0x30-0x3f: &amp;quot;TUVWXYZ[/]'-_abc&amp;quot;&lt;br /&gt;
0x40-0x4f: &amp;quot;defghijklmnopqrs&amp;quot;&lt;br /&gt;
0x50-0x5f: &amp;quot;tuvwxyz_________&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note: not all characters have been found (i.e. the ones with '_').&lt;br /&gt;
Codes above 0x57 may also be different given the language, for characters with trema, accents and the like.&lt;br /&gt;
There are also some formatting codes:&lt;br /&gt;
&lt;br /&gt;
0x01: End of text&lt;br /&gt;
0x02: Carriage return&lt;br /&gt;
0x03: Pause&lt;br /&gt;
0x08: Yes/No question&lt;br /&gt;
0x74: &amp;quot;S.&amp;quot; string&lt;br /&gt;
0x75: &amp;quot;T.&amp;quot; string&lt;br /&gt;
0x76: &amp;quot;A.&amp;quot; string&lt;br /&gt;
0x77: &amp;quot;R.&amp;quot; string&lt;br /&gt;
0x79: &amp;quot;. &amp;quot; string&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)</id>
		<title>RDT (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)"/>
				<updated>2023-08-25T15:29:29Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: /* Offset 6 (*.SCD) - Scenario data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|extensions={{ext|rdt}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Restored|2017-11-25|https://web.archive.org/web/20171125230810/http://rewiki.regengedanken.de/wiki/.RDT_(Resident_Evil)}}&lt;br /&gt;
&lt;br /&gt;
The '''.RDT''' file format is used to stored the description of a room in Resident Evil on Playstation or PC. It should contain the camera position (to correctly display 3D objects), the background images and sprites used to draw the scene, description of when to change camera, position of enemies when entering room, and so on...&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
The values are stored in Little-Endian order.&lt;br /&gt;
&lt;br /&gt;
The file is always named &amp;lt;code&amp;gt;roomSXX0.rdt&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;roomSXX1.rdt&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; is the game status/stage. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is the location number.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
&lt;br /&gt;
A RDT file starts with this header, to store count for different objects.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  char unknown0;&lt;br /&gt;
  char num_cameras; /* Number of cameras of the room */&lt;br /&gt;
  char num_sound_banks; /* Number of sound banks, stored at offset 18 ? */&lt;br /&gt;
  char unknown1[3];&lt;br /&gt;
  unsigned short unknown2[3];&lt;br /&gt;
&lt;br /&gt;
  /* An array of 3 elements of unknown structure */&lt;br /&gt;
  rdt_header_part_t unknown3[3];&lt;br /&gt;
} rdt_header_t;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  long unknown_pos_x; /* Unknown 3D position */&lt;br /&gt;
  long unknown_pos_y;&lt;br /&gt;
  long unknown_pos_z;&lt;br /&gt;
  unsigned long unknown0[2];&lt;br /&gt;
} rdt_header_part_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Object list ==&lt;br /&gt;
&lt;br /&gt;
Following the header, we have an array of 19 absolute offsets to various objects in the file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
! 0&lt;br /&gt;
| Camera switches (*.RVD)&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| Collision Boundaries for 3D Models (*.SCA)&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for item models)&lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for obstacles &amp;amp; moveable objects)&lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| Block data (*.BLK)&lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| Footstep sound zones (*.FLR)&lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| Initialization Script(s) (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 7&lt;br /&gt;
| Execution Script 0 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 8&lt;br /&gt;
| Execution Script 1 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 9&lt;br /&gt;
| Skeleton animation (*.EMR)&lt;br /&gt;
|-&lt;br /&gt;
! 10&lt;br /&gt;
| Skeleton animation steps (*.EDD)&lt;br /&gt;
|-&lt;br /&gt;
! 11&lt;br /&gt;
| Message text(s) (*.MSG)&lt;br /&gt;
|-&lt;br /&gt;
! 12&lt;br /&gt;
| RAW image (*.RAW), points to several RAW images used for example by Offset 2 for item images&lt;br /&gt;
|-&lt;br /&gt;
! 13&lt;br /&gt;
| Effect animation index (*.ESP)&lt;br /&gt;
|-&lt;br /&gt;
! 14&lt;br /&gt;
| Effect animation data (*.EFF); points to a list of relative offsets to read the EFF/ESP data (read backwards!)&lt;br /&gt;
|-&lt;br /&gt;
! 15&lt;br /&gt;
| Effect animation sprite image(s) (*.TIM); points to the last of those images used for effects&lt;br /&gt;
|-&lt;br /&gt;
! 16&lt;br /&gt;
| Sound attribute table (*.SND); points to a table which is 192 bytes in size&lt;br /&gt;
|-&lt;br /&gt;
! 17&lt;br /&gt;
| offset to a VAB header file (*.VH)&lt;br /&gt;
|-&lt;br /&gt;
! 18&lt;br /&gt;
| offset to VAB sound file (*.VB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Camera positions (*.RID) ===&lt;br /&gt;
&lt;br /&gt;
At absolute offset 0x94 in a file, you'll find an array of 'num_cameras' items with this structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	long masks_offset;	/* Offset to image mask definition */&lt;br /&gt;
	long tim_masks_offset;	/* Offset to TIM file that contains image masks, if not zero */&lt;br /&gt;
	long camera_from_x;	/* Position of the camera */&lt;br /&gt;
	long camera_from_y;&lt;br /&gt;
	long camera_from_z;&lt;br /&gt;
	long camera_to_x;	/* Where the camera is looking to */&lt;br /&gt;
	long camera_to_y;&lt;br /&gt;
	long camera_to_z;&lt;br /&gt;
	long unknown1[3];&lt;br /&gt;
} rdt_camera_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Camera masks (*.PRI) ===&lt;br /&gt;
&lt;br /&gt;
The masks_offset is an offset to an extra structure, which has following header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count_offsets;	/* Number of global offsets, or 0xffff for none */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
} rdt_masks_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you have 'rdt_mask_offset_t' items, which have a 8-byte length. Summing all 'count' fields should equal the 'count_masks' of the rdt_masks_t structure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count;	/* Number of masks, with which to use this structure */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short dst_x;	/* Destination position on background image/screen, to be added */&lt;br /&gt;
	unsigned short dst_y;&lt;br /&gt;
} rdt_mask_offset_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then you have 'rdt_[rect|square]_mask_t' items, which have either 12-byte (rectangular mask) or 8-byte length (square mask). The length is 12 if byte 7 (rdt_square_mask_t.size field) is zero, and 8 otherwise. The 'depth' value is the Z distance of the mask from the camera (low value=near, high value=far).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned char unknown;&lt;br /&gt;
	unsigned char size;	/* Width and height of mask */&lt;br /&gt;
} rdt_square_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned short zero;&lt;br /&gt;
	unsigned short width, height;	/* Dimensions of mask */&lt;br /&gt;
} rdt_rect_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 0 (*.RVD) - Camera zones/switches ===&lt;br /&gt;
&lt;br /&gt;
At offset 0, you'll find the list of camera switches for the current room. The list end with the first 4 bytes are 0xffffffff (i.e for cam0 and cam1 values).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short to; /* Camera number to switch to */&lt;br /&gt;
  unsigned short from; /* Camera number to switch from */&lt;br /&gt;
  short x1,y1; /* Zone the player must enter to switch camera */&lt;br /&gt;
  short x2,y2;&lt;br /&gt;
  short x3,y3;&lt;br /&gt;
  short x4,y4;&lt;br /&gt;
} rdt_camera_switch_t;&lt;br /&gt;
If the 'to' value = 9, then it is a zone, defining the area in which the switches will work and 3D objects will be visible while this camera is used, else it is a camera switch.&lt;br /&gt;
&lt;br /&gt;
=== Offset 1 (*.SCA) - Collision Boundaries for 3D Models ===&lt;br /&gt;
&lt;br /&gt;
At offset 1, you'll find the boundary collision data for the current room.&lt;br /&gt;
&lt;br /&gt;
The first 24 bytes are the header which is using the following structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short Cx; /* Ceiling x value */&lt;br /&gt;
  unsigned short Cz; /* Ceiling z value */&lt;br /&gt;
  unsigned long counts[5]; /* Number of objects = sum of these 5 long values */&lt;br /&gt;
} rdt_sca_header_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Followed by the header, the individual boundary entries start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short x1; /* X of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z1; /* Z of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short x2; /* X of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z2; /* Z of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short type; /* type of the boundary plane/object (01=Standard; 03=Circle etc.) */&lt;br /&gt;
  unsigned short floor; /* floor value/ 256 = floor value for use in the game as height definition */ &lt;br /&gt;
} rdt_sca_obj_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this the data block ends with a 4 byte unsigned long holding the total size of the SCA data block in bytes.&lt;br /&gt;
&lt;br /&gt;
=== Offset 2 (*.TMD/*.TIM) - Item 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset2_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 3 (*.TMD/*.TIM) - Room 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset3_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 4 (*.BLK) - Block data ===&lt;br /&gt;
&lt;br /&gt;
It's unknown what this data is used for. It defines plane based areas that look like &amp;quot;inversed&amp;quot; collision boundaries.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
&lt;br /&gt;
typedef struct {&lt;br /&gt;
        unsigned short x1;          /* X of the top-left corner of the object */&lt;br /&gt;
        unsigned short z1;          /* Z of the top-left corner of the object */&lt;br /&gt;
        unsigned short x2;          /* X of the bottom-right corner of the object */&lt;br /&gt;
        unsigned short z2;          /* Z of the bottom-right corner of the object */&lt;br /&gt;
	unsigned short int Dir_bit;&lt;br /&gt;
	unsigned short int Abut;&lt;br /&gt;
} rdt_blk_obj_t;&lt;br /&gt;
&lt;br /&gt;
unsigned short int unknown;	/* unknown; follows after last structure */&lt;br /&gt;
&lt;br /&gt;
rdt_blk_obj_t Block[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 5 (*.FLR) - Floor/footstep sound areas ===&lt;br /&gt;
&lt;br /&gt;
This data defines the footstep sound areas and which sound to use. It is also related to the script opcode, 'Flr_set'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
typedef struct {&lt;br /&gt;
	signed short int x;         /* x coordinate where the area is drawn from */&lt;br /&gt;
        signed short int y;         /* y coordinate where the area is drawn from */&lt;br /&gt;
	signed short int x_width;   /* x width of the area */&lt;br /&gt;
        signed short int y_width;   /* y width of the area */&lt;br /&gt;
	unsigned short int sound;   /* footstep ID sound to use */&lt;br /&gt;
} rdt_flr_obj_t;&lt;br /&gt;
&lt;br /&gt;
rdt_flr_obj_t Floor[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 6 (*.SCD) - Scenario data ===&lt;br /&gt;
&lt;br /&gt;
This is the initialisation script for the room. It starts with an unsigned short giving the length of the script in bytes. Then follows the script, in bytecode-style.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Byte&lt;br /&gt;
| Instruction&lt;br /&gt;
| Length&lt;br /&gt;
| Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Nop&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| If&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0x01 */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
} script_if_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This structure is followed by one or several conditions for the if (condition) instruction. Any condition evaluated to false will end the if () block.&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| Else&lt;br /&gt;
| 2&lt;br /&gt;
| Follows: byte with ELSE block length. Note: it's either If/Endif, or If/Else; there is no If/Else/Endif sequence.&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| End If&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| BIT_TEST&lt;br /&gt;
| 4&lt;br /&gt;
| Bit test&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x04 */&lt;br /&gt;
	unsigned char object;&lt;br /&gt;
	unsigned char param;	/* Bits 7-5: Longword index in object, see array following */&lt;br /&gt;
				/* Bits 4-0: Bit number to test */&lt;br /&gt;
	unsigned char op;	/* Operation */&lt;br /&gt;
				/* 0x00:test bit is 0 */&lt;br /&gt;
				/* 0x01:test bit is 1 */&lt;br /&gt;
} script_bit_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| BIT_OP&lt;br /&gt;
| 4&lt;br /&gt;
| Bit operation&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x05 */&lt;br /&gt;
	unsigned char object;	/* Number of object to operate on, see array following */&lt;br /&gt;
	unsigned char param;	/* Bits 7-5: Longword index in object */&lt;br /&gt;
				/* Bits 4-0: Bit number to clear/set/change is (31-this field value) */&lt;br /&gt;
	unsigned char op;	/* Operation */&lt;br /&gt;
				/* 0x00:clear bit */&lt;br /&gt;
				/* 0x01:set bit */&lt;br /&gt;
				/* 0x02:change bit */&lt;br /&gt;
} script_bit_op_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| OBJ06_TEST&lt;br /&gt;
| 4&lt;br /&gt;
| Compare values&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x06 */&lt;br /&gt;
	unsigned char src;	/* Index in some object for source value */&lt;br /&gt;
				/* 0x00:Current stage */&lt;br /&gt;
				/* 0x01:Current room */&lt;br /&gt;
				/* 0x02:Current camera */&lt;br /&gt;
				/* 0x03:Stage and room */&lt;br /&gt;
				/* 0x04:Previous/next camera */&lt;br /&gt;
				/* 0x05:? */&lt;br /&gt;
				/* 0x06:? */&lt;br /&gt;
				/* 0x07:? Used in instruction 0x1a */&lt;br /&gt;
				/* 0x08:? Used in instruction 0x1c */&lt;br /&gt;
				/* 0x09:Flags for current camera */&lt;br /&gt;
	unsigned char func;	/* Compare function */&lt;br /&gt;
				/* 0x00:EQ */&lt;br /&gt;
				/* 0x01:LT */&lt;br /&gt;
				/* 0x02:LE */&lt;br /&gt;
				/* 0x03:GT */&lt;br /&gt;
				/* 0x04:GE */&lt;br /&gt;
				/* 0x05:NE */&lt;br /&gt;
	char param;		/* Raw value to compare against */&lt;br /&gt;
} script_obj06_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| OBJ07_TEST&lt;br /&gt;
| 6&lt;br /&gt;
| Compare values&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x07 */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned char src;	/* Word index in some object for source value */&lt;br /&gt;
				/* (not the same object as instruction 0x06) */&lt;br /&gt;
	unsigned char func;	/* Compare function */&lt;br /&gt;
				/* 0x00:EQ */&lt;br /&gt;
				/* 0x01:LT */&lt;br /&gt;
				/* 0x02:LE */&lt;br /&gt;
				/* 0x03:GT */&lt;br /&gt;
				/* 0x04:GE */&lt;br /&gt;
				/* 0x05:NE */&lt;br /&gt;
	short param;		/* Raw value to compare against */&lt;br /&gt;
} script_obj07_test_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| STAGEROOMCAM_SET&lt;br /&gt;
| 4&lt;br /&gt;
| Set value for stage, room or camera&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x08 */&lt;br /&gt;
	unsigned char id;	/* 0: stage, 1: room, 2: camera */&lt;br /&gt;
	unsigned short value;&lt;br /&gt;
} script_stageroomcam_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| CUT_SET&lt;br /&gt;
| 2&lt;br /&gt;
| Switch to prev/next camera, set it as current camera&lt;br /&gt;
|-&lt;br /&gt;
| 0x0a&lt;br /&gt;
| CUT_SET&lt;br /&gt;
| 2&lt;br /&gt;
| Switch to current camera, set it as prev/next camera&lt;br /&gt;
|-&lt;br /&gt;
| 0x0b&lt;br /&gt;
| ?&lt;br /&gt;
| 4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0c&lt;br /&gt;
| DOOR_SET&lt;br /&gt;
| 26&lt;br /&gt;
| TODO: find where next_camera is stored&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0c */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	short x,y,w,h;&lt;br /&gt;
	unsigned char unknown0[5];&lt;br /&gt;
	unsigned char next_stage_and_room;	/* bits 7,6,5: stage, 4,3,2,1,0: room */&lt;br /&gt;
	short next_x,next_y,next_z;&lt;br /&gt;
	short next_dir;&lt;br /&gt;
	unsigned short unknown1;&lt;br /&gt;
} script_door_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note: if stage=0, we must keep current stage, else switch stage.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0d&lt;br /&gt;
| ITEM_SET&lt;br /&gt;
| 18&lt;br /&gt;
| Pickable items, objects, obstacles&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0d */&lt;br /&gt;
	unsigned char id;&lt;br /&gt;
	short x,y,w,h;&lt;br /&gt;
	unsigned char type;	/* 0x02: message, obstacle? */&lt;br /&gt;
				/* 0x07: trigger,event,movable object? */&lt;br /&gt;
				/* 0x08: box */&lt;br /&gt;
				/* 0x09: pickable object, trigger? */&lt;br /&gt;
				/* 0x10: typewriter */&lt;br /&gt;
	unsigned char unknown[7];&lt;br /&gt;
} script_item_set_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0e&lt;br /&gt;
| Nop&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0f&lt;br /&gt;
| ?&lt;br /&gt;
| 8&lt;br /&gt;
| &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode;	/* 0x0f */&lt;br /&gt;
	unsigned char bitmask;&lt;br /&gt;
	unsigned short unknown[3];&lt;br /&gt;
} script_inst0f_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 7 (*.SCD) - Execution script for room ===&lt;br /&gt;
&lt;br /&gt;
This script is run regularly to update stuff in current room. It follows same structure as the one at offset 6.&lt;br /&gt;
&lt;br /&gt;
=== Offset 8, Script events ? ===&lt;br /&gt;
&lt;br /&gt;
This structure starts with a NULL terminated list of [[unsigned long]], which are offsets relative to start of this object. These offsets store also some bytecodes, different than those above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf6&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf7&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf7&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf8&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf8&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf9&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1 or 3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfa&amp;lt;/code&amp;gt;&lt;br /&gt;
| For&lt;br /&gt;
| 4&lt;br /&gt;
| Initialize a for loop. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfa */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short count;&lt;br /&gt;
} event_for_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfb&amp;lt;/code&amp;gt;&lt;br /&gt;
| Next&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set_Inst&lt;br /&gt;
| variable	&lt;br /&gt;
| Initialize bytecode instruction to execute later. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfc */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
	unsigned char bytecode_inst[];&lt;br /&gt;
} event_set_inst_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfd&amp;lt;/code&amp;gt;&lt;br /&gt;
| Exec_inst&lt;br /&gt;
| 1&lt;br /&gt;
| Execute bytecode instruction previously set with 0xfc instruction.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfe&amp;lt;/code&amp;gt;&lt;br /&gt;
| Sleep, process next event&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt;&lt;br /&gt;
| Disable event&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 9 (*.EMR) - Skeleton animation ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 10 (*.EDD) - Skeleton animation steps ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 11 (*.MSG) - Text messages ===&lt;br /&gt;
&lt;br /&gt;
First, you have an arrays of 'unsigned short', which are relative offsets to the beginning of this object. So the number of items is the first offset/2 (if we are lucky that the first offset always has the lowest value).&lt;br /&gt;
&lt;br /&gt;
It contains the texts for cutscenes, dialogs, examining objects.&lt;br /&gt;
&lt;br /&gt;
Conversion table, from byte to ASCII value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0x00-0x0f: &amp;quot; .___()_____0123&amp;quot;&lt;br /&gt;
0x10-0x1f: &amp;quot;456789:_,&amp;quot;!?_ABC&amp;quot;&lt;br /&gt;
0x20-0x2f: &amp;quot;DEFGHIJKLMNOPQRS&amp;quot;&lt;br /&gt;
0x30-0x3f: &amp;quot;TUVWXYZ[/]'-_abc&amp;quot;&lt;br /&gt;
0x40-0x4f: &amp;quot;defghijklmnopqrs&amp;quot;&lt;br /&gt;
0x50-0x5f: &amp;quot;tuvwxyz_________&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note: not all characters have been found (i.e. the ones with '_').&lt;br /&gt;
Codes above 0x57 may also be different given the language, for characters with trema, accents and the like.&lt;br /&gt;
There are also some formatting codes:&lt;br /&gt;
&lt;br /&gt;
0x01: End of text&lt;br /&gt;
0x02: Carriage return&lt;br /&gt;
0x03: Pause&lt;br /&gt;
0x08: Yes/No question&lt;br /&gt;
0x74: &amp;quot;S.&amp;quot; string&lt;br /&gt;
0x75: &amp;quot;T.&amp;quot; string&lt;br /&gt;
0x76: &amp;quot;A.&amp;quot; string&lt;br /&gt;
0x77: &amp;quot;R.&amp;quot; string&lt;br /&gt;
0x79: &amp;quot;. &amp;quot; string&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)</id>
		<title>RDT (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)"/>
				<updated>2023-08-25T15:12:51Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: /* Offset 6 (*.SCD) - Scenario data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|extensions={{ext|rdt}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Restored|2017-11-25|https://web.archive.org/web/20171125230810/http://rewiki.regengedanken.de/wiki/.RDT_(Resident_Evil)}}&lt;br /&gt;
&lt;br /&gt;
The '''.RDT''' file format is used to stored the description of a room in Resident Evil on Playstation or PC. It should contain the camera position (to correctly display 3D objects), the background images and sprites used to draw the scene, description of when to change camera, position of enemies when entering room, and so on...&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
The values are stored in Little-Endian order.&lt;br /&gt;
&lt;br /&gt;
The file is always named &amp;lt;code&amp;gt;roomSXX0.rdt&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;roomSXX1.rdt&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; is the game status/stage. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is the location number.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
&lt;br /&gt;
A RDT file starts with this header, to store count for different objects.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  char unknown0;&lt;br /&gt;
  char num_cameras; /* Number of cameras of the room */&lt;br /&gt;
  char num_sound_banks; /* Number of sound banks, stored at offset 18 ? */&lt;br /&gt;
  char unknown1[3];&lt;br /&gt;
  unsigned short unknown2[3];&lt;br /&gt;
&lt;br /&gt;
  /* An array of 3 elements of unknown structure */&lt;br /&gt;
  rdt_header_part_t unknown3[3];&lt;br /&gt;
} rdt_header_t;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  long unknown_pos_x; /* Unknown 3D position */&lt;br /&gt;
  long unknown_pos_y;&lt;br /&gt;
  long unknown_pos_z;&lt;br /&gt;
  unsigned long unknown0[2];&lt;br /&gt;
} rdt_header_part_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Object list ==&lt;br /&gt;
&lt;br /&gt;
Following the header, we have an array of 19 absolute offsets to various objects in the file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
! 0&lt;br /&gt;
| Camera switches (*.RVD)&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| Collision Boundaries for 3D Models (*.SCA)&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for item models)&lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for obstacles &amp;amp; moveable objects)&lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| Block data (*.BLK)&lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| Footstep sound zones (*.FLR)&lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| Initialization Script(s) (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 7&lt;br /&gt;
| Execution Script 0 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 8&lt;br /&gt;
| Execution Script 1 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 9&lt;br /&gt;
| Skeleton animation (*.EMR)&lt;br /&gt;
|-&lt;br /&gt;
! 10&lt;br /&gt;
| Skeleton animation steps (*.EDD)&lt;br /&gt;
|-&lt;br /&gt;
! 11&lt;br /&gt;
| Message text(s) (*.MSG)&lt;br /&gt;
|-&lt;br /&gt;
! 12&lt;br /&gt;
| RAW image (*.RAW), points to several RAW images used for example by Offset 2 for item images&lt;br /&gt;
|-&lt;br /&gt;
! 13&lt;br /&gt;
| Effect animation index (*.ESP)&lt;br /&gt;
|-&lt;br /&gt;
! 14&lt;br /&gt;
| Effect animation data (*.EFF); points to a list of relative offsets to read the EFF/ESP data (read backwards!)&lt;br /&gt;
|-&lt;br /&gt;
! 15&lt;br /&gt;
| Effect animation sprite image(s) (*.TIM); points to the last of those images used for effects&lt;br /&gt;
|-&lt;br /&gt;
! 16&lt;br /&gt;
| Sound attribute table (*.SND); points to a table which is 192 bytes in size&lt;br /&gt;
|-&lt;br /&gt;
! 17&lt;br /&gt;
| offset to a VAB header file (*.VH)&lt;br /&gt;
|-&lt;br /&gt;
! 18&lt;br /&gt;
| offset to VAB sound file (*.VB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Camera positions (*.RID) ===&lt;br /&gt;
&lt;br /&gt;
At absolute offset 0x94 in a file, you'll find an array of 'num_cameras' items with this structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	long masks_offset;	/* Offset to image mask definition */&lt;br /&gt;
	long tim_masks_offset;	/* Offset to TIM file that contains image masks, if not zero */&lt;br /&gt;
	long camera_from_x;	/* Position of the camera */&lt;br /&gt;
	long camera_from_y;&lt;br /&gt;
	long camera_from_z;&lt;br /&gt;
	long camera_to_x;	/* Where the camera is looking to */&lt;br /&gt;
	long camera_to_y;&lt;br /&gt;
	long camera_to_z;&lt;br /&gt;
	long unknown1[3];&lt;br /&gt;
} rdt_camera_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Camera masks (*.PRI) ===&lt;br /&gt;
&lt;br /&gt;
The masks_offset is an offset to an extra structure, which has following header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count_offsets;	/* Number of global offsets, or 0xffff for none */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
} rdt_masks_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you have 'rdt_mask_offset_t' items, which have a 8-byte length. Summing all 'count' fields should equal the 'count_masks' of the rdt_masks_t structure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count;	/* Number of masks, with which to use this structure */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short dst_x;	/* Destination position on background image/screen, to be added */&lt;br /&gt;
	unsigned short dst_y;&lt;br /&gt;
} rdt_mask_offset_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then you have 'rdt_[rect|square]_mask_t' items, which have either 12-byte (rectangular mask) or 8-byte length (square mask). The length is 12 if byte 7 (rdt_square_mask_t.size field) is zero, and 8 otherwise. The 'depth' value is the Z distance of the mask from the camera (low value=near, high value=far).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned char unknown;&lt;br /&gt;
	unsigned char size;	/* Width and height of mask */&lt;br /&gt;
} rdt_square_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned short zero;&lt;br /&gt;
	unsigned short width, height;	/* Dimensions of mask */&lt;br /&gt;
} rdt_rect_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 0 (*.RVD) - Camera zones/switches ===&lt;br /&gt;
&lt;br /&gt;
At offset 0, you'll find the list of camera switches for the current room. The list end with the first 4 bytes are 0xffffffff (i.e for cam0 and cam1 values).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short to; /* Camera number to switch to */&lt;br /&gt;
  unsigned short from; /* Camera number to switch from */&lt;br /&gt;
  short x1,y1; /* Zone the player must enter to switch camera */&lt;br /&gt;
  short x2,y2;&lt;br /&gt;
  short x3,y3;&lt;br /&gt;
  short x4,y4;&lt;br /&gt;
} rdt_camera_switch_t;&lt;br /&gt;
If the 'to' value = 9, then it is a zone, defining the area in which the switches will work and 3D objects will be visible while this camera is used, else it is a camera switch.&lt;br /&gt;
&lt;br /&gt;
=== Offset 1 (*.SCA) - Collision Boundaries for 3D Models ===&lt;br /&gt;
&lt;br /&gt;
At offset 1, you'll find the boundary collision data for the current room.&lt;br /&gt;
&lt;br /&gt;
The first 24 bytes are the header which is using the following structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short Cx; /* Ceiling x value */&lt;br /&gt;
  unsigned short Cz; /* Ceiling z value */&lt;br /&gt;
  unsigned long counts[5]; /* Number of objects = sum of these 5 long values */&lt;br /&gt;
} rdt_sca_header_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Followed by the header, the individual boundary entries start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short x1; /* X of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z1; /* Z of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short x2; /* X of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z2; /* Z of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short type; /* type of the boundary plane/object (01=Standard; 03=Circle etc.) */&lt;br /&gt;
  unsigned short floor; /* floor value/ 256 = floor value for use in the game as height definition */ &lt;br /&gt;
} rdt_sca_obj_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this the data block ends with a 4 byte unsigned long holding the total size of the SCA data block in bytes.&lt;br /&gt;
&lt;br /&gt;
=== Offset 2 (*.TMD/*.TIM) - Item 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset2_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 3 (*.TMD/*.TIM) - Room 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset3_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 4 (*.BLK) - Block data ===&lt;br /&gt;
&lt;br /&gt;
It's unknown what this data is used for. It defines plane based areas that look like &amp;quot;inversed&amp;quot; collision boundaries.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
&lt;br /&gt;
typedef struct {&lt;br /&gt;
        unsigned short x1;          /* X of the top-left corner of the object */&lt;br /&gt;
        unsigned short z1;          /* Z of the top-left corner of the object */&lt;br /&gt;
        unsigned short x2;          /* X of the bottom-right corner of the object */&lt;br /&gt;
        unsigned short z2;          /* Z of the bottom-right corner of the object */&lt;br /&gt;
	unsigned short int Dir_bit;&lt;br /&gt;
	unsigned short int Abut;&lt;br /&gt;
} rdt_blk_obj_t;&lt;br /&gt;
&lt;br /&gt;
unsigned short int unknown;	/* unknown; follows after last structure */&lt;br /&gt;
&lt;br /&gt;
rdt_blk_obj_t Block[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 5 (*.FLR) - Floor/footstep sound areas ===&lt;br /&gt;
&lt;br /&gt;
This data defines the footstep sound areas and which sound to use. It is also related to the script opcode, 'Flr_set'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
typedef struct {&lt;br /&gt;
	signed short int x;         /* x coordinate where the area is drawn from */&lt;br /&gt;
        signed short int y;         /* y coordinate where the area is drawn from */&lt;br /&gt;
	signed short int x_width;   /* x width of the area */&lt;br /&gt;
        signed short int y_width;   /* y width of the area */&lt;br /&gt;
	unsigned short int sound;   /* footstep ID sound to use */&lt;br /&gt;
} rdt_flr_obj_t;&lt;br /&gt;
&lt;br /&gt;
rdt_flr_obj_t Floor[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 6 (*.SCD) - Scenario data ===&lt;br /&gt;
&lt;br /&gt;
This is the initialization script for the room. It starts with an unsigned short giving the length of the script in bytes. Then follows the script, in bytecode-style.&lt;br /&gt;
&lt;br /&gt;
=== Offset 7 (*.SCD) - Execution script for room ===&lt;br /&gt;
&lt;br /&gt;
This script is run regularly to update stuff in current room. It follows same structure as the one at offset 6.&lt;br /&gt;
&lt;br /&gt;
=== Offset 8, Script events ? ===&lt;br /&gt;
&lt;br /&gt;
This structure starts with a NULL terminated list of [[unsigned long]], which are offsets relative to start of this object. These offsets store also some bytecodes, different than those above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf6&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf7&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf7&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf8&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf8&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf9&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1 or 3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfa&amp;lt;/code&amp;gt;&lt;br /&gt;
| For&lt;br /&gt;
| 4&lt;br /&gt;
| Initialize a for loop. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfa */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short count;&lt;br /&gt;
} event_for_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfb&amp;lt;/code&amp;gt;&lt;br /&gt;
| Next&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set_Inst&lt;br /&gt;
| variable	&lt;br /&gt;
| Initialize bytecode instruction to execute later. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfc */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
	unsigned char bytecode_inst[];&lt;br /&gt;
} event_set_inst_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfd&amp;lt;/code&amp;gt;&lt;br /&gt;
| Exec_inst&lt;br /&gt;
| 1&lt;br /&gt;
| Execute bytecode instruction previously set with 0xfc instruction.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfe&amp;lt;/code&amp;gt;&lt;br /&gt;
| Sleep, process next event&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt;&lt;br /&gt;
| Disable event&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 9 (*.EMR) - Skeleton animation ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 10 (*.EDD) - Skeleton animation steps ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 11 (*.MSG) - Text messages ===&lt;br /&gt;
&lt;br /&gt;
First, you have an arrays of 'unsigned short', which are relative offsets to the beginning of this object. So the number of items is the first offset/2 (if we are lucky that the first offset always has the lowest value).&lt;br /&gt;
&lt;br /&gt;
It contains the texts for cutscenes, dialogs, examining objects.&lt;br /&gt;
&lt;br /&gt;
Conversion table, from byte to ASCII value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0x00-0x0f: &amp;quot; .___()_____0123&amp;quot;&lt;br /&gt;
0x10-0x1f: &amp;quot;456789:_,&amp;quot;!?_ABC&amp;quot;&lt;br /&gt;
0x20-0x2f: &amp;quot;DEFGHIJKLMNOPQRS&amp;quot;&lt;br /&gt;
0x30-0x3f: &amp;quot;TUVWXYZ[/]'-_abc&amp;quot;&lt;br /&gt;
0x40-0x4f: &amp;quot;defghijklmnopqrs&amp;quot;&lt;br /&gt;
0x50-0x5f: &amp;quot;tuvwxyz_________&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note: not all characters have been found (i.e. the ones with '_').&lt;br /&gt;
Codes above 0x57 may also be different given the language, for characters with trema, accents and the like.&lt;br /&gt;
There are also some formatting codes:&lt;br /&gt;
&lt;br /&gt;
0x01: End of text&lt;br /&gt;
0x02: Carriage return&lt;br /&gt;
0x03: Pause&lt;br /&gt;
0x08: Yes/No question&lt;br /&gt;
0x74: &amp;quot;S.&amp;quot; string&lt;br /&gt;
0x75: &amp;quot;T.&amp;quot; string&lt;br /&gt;
0x76: &amp;quot;A.&amp;quot; string&lt;br /&gt;
0x77: &amp;quot;R.&amp;quot; string&lt;br /&gt;
0x79: &amp;quot;. &amp;quot; string&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)</id>
		<title>RDT (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)"/>
				<updated>2023-08-25T15:12:20Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: /* Offset 7 (*.SCD) - Execution script for room */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|extensions={{ext|rdt}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Restored|2017-11-25|https://web.archive.org/web/20171125230810/http://rewiki.regengedanken.de/wiki/.RDT_(Resident_Evil)}}&lt;br /&gt;
&lt;br /&gt;
The '''.RDT''' file format is used to stored the description of a room in Resident Evil on Playstation or PC. It should contain the camera position (to correctly display 3D objects), the background images and sprites used to draw the scene, description of when to change camera, position of enemies when entering room, and so on...&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
The values are stored in Little-Endian order.&lt;br /&gt;
&lt;br /&gt;
The file is always named &amp;lt;code&amp;gt;roomSXX0.rdt&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;roomSXX1.rdt&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; is the game status/stage. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is the location number.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
&lt;br /&gt;
A RDT file starts with this header, to store count for different objects.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  char unknown0;&lt;br /&gt;
  char num_cameras; /* Number of cameras of the room */&lt;br /&gt;
  char num_sound_banks; /* Number of sound banks, stored at offset 18 ? */&lt;br /&gt;
  char unknown1[3];&lt;br /&gt;
  unsigned short unknown2[3];&lt;br /&gt;
&lt;br /&gt;
  /* An array of 3 elements of unknown structure */&lt;br /&gt;
  rdt_header_part_t unknown3[3];&lt;br /&gt;
} rdt_header_t;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  long unknown_pos_x; /* Unknown 3D position */&lt;br /&gt;
  long unknown_pos_y;&lt;br /&gt;
  long unknown_pos_z;&lt;br /&gt;
  unsigned long unknown0[2];&lt;br /&gt;
} rdt_header_part_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Object list ==&lt;br /&gt;
&lt;br /&gt;
Following the header, we have an array of 19 absolute offsets to various objects in the file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
! 0&lt;br /&gt;
| Camera switches (*.RVD)&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| Collision Boundaries for 3D Models (*.SCA)&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for item models)&lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for obstacles &amp;amp; moveable objects)&lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| Block data (*.BLK)&lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| Footstep sound zones (*.FLR)&lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| Initialization Script(s) (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 7&lt;br /&gt;
| Execution Script 0 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 8&lt;br /&gt;
| Execution Script 1 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 9&lt;br /&gt;
| Skeleton animation (*.EMR)&lt;br /&gt;
|-&lt;br /&gt;
! 10&lt;br /&gt;
| Skeleton animation steps (*.EDD)&lt;br /&gt;
|-&lt;br /&gt;
! 11&lt;br /&gt;
| Message text(s) (*.MSG)&lt;br /&gt;
|-&lt;br /&gt;
! 12&lt;br /&gt;
| RAW image (*.RAW), points to several RAW images used for example by Offset 2 for item images&lt;br /&gt;
|-&lt;br /&gt;
! 13&lt;br /&gt;
| Effect animation index (*.ESP)&lt;br /&gt;
|-&lt;br /&gt;
! 14&lt;br /&gt;
| Effect animation data (*.EFF); points to a list of relative offsets to read the EFF/ESP data (read backwards!)&lt;br /&gt;
|-&lt;br /&gt;
! 15&lt;br /&gt;
| Effect animation sprite image(s) (*.TIM); points to the last of those images used for effects&lt;br /&gt;
|-&lt;br /&gt;
! 16&lt;br /&gt;
| Sound attribute table (*.SND); points to a table which is 192 bytes in size&lt;br /&gt;
|-&lt;br /&gt;
! 17&lt;br /&gt;
| offset to a VAB header file (*.VH)&lt;br /&gt;
|-&lt;br /&gt;
! 18&lt;br /&gt;
| offset to VAB sound file (*.VB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Camera positions (*.RID) ===&lt;br /&gt;
&lt;br /&gt;
At absolute offset 0x94 in a file, you'll find an array of 'num_cameras' items with this structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	long masks_offset;	/* Offset to image mask definition */&lt;br /&gt;
	long tim_masks_offset;	/* Offset to TIM file that contains image masks, if not zero */&lt;br /&gt;
	long camera_from_x;	/* Position of the camera */&lt;br /&gt;
	long camera_from_y;&lt;br /&gt;
	long camera_from_z;&lt;br /&gt;
	long camera_to_x;	/* Where the camera is looking to */&lt;br /&gt;
	long camera_to_y;&lt;br /&gt;
	long camera_to_z;&lt;br /&gt;
	long unknown1[3];&lt;br /&gt;
} rdt_camera_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Camera masks (*.PRI) ===&lt;br /&gt;
&lt;br /&gt;
The masks_offset is an offset to an extra structure, which has following header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count_offsets;	/* Number of global offsets, or 0xffff for none */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
} rdt_masks_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you have 'rdt_mask_offset_t' items, which have a 8-byte length. Summing all 'count' fields should equal the 'count_masks' of the rdt_masks_t structure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count;	/* Number of masks, with which to use this structure */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short dst_x;	/* Destination position on background image/screen, to be added */&lt;br /&gt;
	unsigned short dst_y;&lt;br /&gt;
} rdt_mask_offset_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then you have 'rdt_[rect|square]_mask_t' items, which have either 12-byte (rectangular mask) or 8-byte length (square mask). The length is 12 if byte 7 (rdt_square_mask_t.size field) is zero, and 8 otherwise. The 'depth' value is the Z distance of the mask from the camera (low value=near, high value=far).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned char unknown;&lt;br /&gt;
	unsigned char size;	/* Width and height of mask */&lt;br /&gt;
} rdt_square_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned short zero;&lt;br /&gt;
	unsigned short width, height;	/* Dimensions of mask */&lt;br /&gt;
} rdt_rect_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 0 (*.RVD) - Camera zones/switches ===&lt;br /&gt;
&lt;br /&gt;
At offset 0, you'll find the list of camera switches for the current room. The list end with the first 4 bytes are 0xffffffff (i.e for cam0 and cam1 values).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short to; /* Camera number to switch to */&lt;br /&gt;
  unsigned short from; /* Camera number to switch from */&lt;br /&gt;
  short x1,y1; /* Zone the player must enter to switch camera */&lt;br /&gt;
  short x2,y2;&lt;br /&gt;
  short x3,y3;&lt;br /&gt;
  short x4,y4;&lt;br /&gt;
} rdt_camera_switch_t;&lt;br /&gt;
If the 'to' value = 9, then it is a zone, defining the area in which the switches will work and 3D objects will be visible while this camera is used, else it is a camera switch.&lt;br /&gt;
&lt;br /&gt;
=== Offset 1 (*.SCA) - Collision Boundaries for 3D Models ===&lt;br /&gt;
&lt;br /&gt;
At offset 1, you'll find the boundary collision data for the current room.&lt;br /&gt;
&lt;br /&gt;
The first 24 bytes are the header which is using the following structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short Cx; /* Ceiling x value */&lt;br /&gt;
  unsigned short Cz; /* Ceiling z value */&lt;br /&gt;
  unsigned long counts[5]; /* Number of objects = sum of these 5 long values */&lt;br /&gt;
} rdt_sca_header_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Followed by the header, the individual boundary entries start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short x1; /* X of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z1; /* Z of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short x2; /* X of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z2; /* Z of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short type; /* type of the boundary plane/object (01=Standard; 03=Circle etc.) */&lt;br /&gt;
  unsigned short floor; /* floor value/ 256 = floor value for use in the game as height definition */ &lt;br /&gt;
} rdt_sca_obj_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this the data block ends with a 4 byte unsigned long holding the total size of the SCA data block in bytes.&lt;br /&gt;
&lt;br /&gt;
=== Offset 2 (*.TMD/*.TIM) - Item 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset2_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 3 (*.TMD/*.TIM) - Room 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset3_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 4 (*.BLK) - Block data ===&lt;br /&gt;
&lt;br /&gt;
It's unknown what this data is used for. It defines plane based areas that look like &amp;quot;inversed&amp;quot; collision boundaries.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
&lt;br /&gt;
typedef struct {&lt;br /&gt;
        unsigned short x1;          /* X of the top-left corner of the object */&lt;br /&gt;
        unsigned short z1;          /* Z of the top-left corner of the object */&lt;br /&gt;
        unsigned short x2;          /* X of the bottom-right corner of the object */&lt;br /&gt;
        unsigned short z2;          /* Z of the bottom-right corner of the object */&lt;br /&gt;
	unsigned short int Dir_bit;&lt;br /&gt;
	unsigned short int Abut;&lt;br /&gt;
} rdt_blk_obj_t;&lt;br /&gt;
&lt;br /&gt;
unsigned short int unknown;	/* unknown; follows after last structure */&lt;br /&gt;
&lt;br /&gt;
rdt_blk_obj_t Block[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 5 (*.FLR) - Floor/footstep sound areas ===&lt;br /&gt;
&lt;br /&gt;
This data defines the footstep sound areas and which sound to use. It is also related to the script opcode, 'Flr_set'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
typedef struct {&lt;br /&gt;
	signed short int x;         /* x coordinate where the area is drawn from */&lt;br /&gt;
        signed short int y;         /* y coordinate where the area is drawn from */&lt;br /&gt;
	signed short int x_width;   /* x width of the area */&lt;br /&gt;
        signed short int y_width;   /* y width of the area */&lt;br /&gt;
	unsigned short int sound;   /* footstep ID sound to use */&lt;br /&gt;
} rdt_flr_obj_t;&lt;br /&gt;
&lt;br /&gt;
rdt_flr_obj_t Floor[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 6 (*.SCD) - Scenario data ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 7 (*.SCD) - Execution script for room ===&lt;br /&gt;
&lt;br /&gt;
This script is run regularly to update stuff in current room. It follows same structure as the one at offset 6.&lt;br /&gt;
&lt;br /&gt;
=== Offset 8, Script events ? ===&lt;br /&gt;
&lt;br /&gt;
This structure starts with a NULL terminated list of [[unsigned long]], which are offsets relative to start of this object. These offsets store also some bytecodes, different than those above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf6&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf7&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf7&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf8&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf8&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf9&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1 or 3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfa&amp;lt;/code&amp;gt;&lt;br /&gt;
| For&lt;br /&gt;
| 4&lt;br /&gt;
| Initialize a for loop. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfa */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short count;&lt;br /&gt;
} event_for_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfb&amp;lt;/code&amp;gt;&lt;br /&gt;
| Next&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set_Inst&lt;br /&gt;
| variable	&lt;br /&gt;
| Initialize bytecode instruction to execute later. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfc */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
	unsigned char bytecode_inst[];&lt;br /&gt;
} event_set_inst_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfd&amp;lt;/code&amp;gt;&lt;br /&gt;
| Exec_inst&lt;br /&gt;
| 1&lt;br /&gt;
| Execute bytecode instruction previously set with 0xfc instruction.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfe&amp;lt;/code&amp;gt;&lt;br /&gt;
| Sleep, process next event&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt;&lt;br /&gt;
| Disable event&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 9 (*.EMR) - Skeleton animation ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 10 (*.EDD) - Skeleton animation steps ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 11 (*.MSG) - Text messages ===&lt;br /&gt;
&lt;br /&gt;
First, you have an arrays of 'unsigned short', which are relative offsets to the beginning of this object. So the number of items is the first offset/2 (if we are lucky that the first offset always has the lowest value).&lt;br /&gt;
&lt;br /&gt;
It contains the texts for cutscenes, dialogs, examining objects.&lt;br /&gt;
&lt;br /&gt;
Conversion table, from byte to ASCII value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0x00-0x0f: &amp;quot; .___()_____0123&amp;quot;&lt;br /&gt;
0x10-0x1f: &amp;quot;456789:_,&amp;quot;!?_ABC&amp;quot;&lt;br /&gt;
0x20-0x2f: &amp;quot;DEFGHIJKLMNOPQRS&amp;quot;&lt;br /&gt;
0x30-0x3f: &amp;quot;TUVWXYZ[/]'-_abc&amp;quot;&lt;br /&gt;
0x40-0x4f: &amp;quot;defghijklmnopqrs&amp;quot;&lt;br /&gt;
0x50-0x5f: &amp;quot;tuvwxyz_________&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note: not all characters have been found (i.e. the ones with '_').&lt;br /&gt;
Codes above 0x57 may also be different given the language, for characters with trema, accents and the like.&lt;br /&gt;
There are also some formatting codes:&lt;br /&gt;
&lt;br /&gt;
0x01: End of text&lt;br /&gt;
0x02: Carriage return&lt;br /&gt;
0x03: Pause&lt;br /&gt;
0x08: Yes/No question&lt;br /&gt;
0x74: &amp;quot;S.&amp;quot; string&lt;br /&gt;
0x75: &amp;quot;T.&amp;quot; string&lt;br /&gt;
0x76: &amp;quot;A.&amp;quot; string&lt;br /&gt;
0x77: &amp;quot;R.&amp;quot; string&lt;br /&gt;
0x79: &amp;quot;. &amp;quot; string&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)</id>
		<title>RDT (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)"/>
				<updated>2023-08-25T15:12:06Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: /* Offset 8, Script events ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|extensions={{ext|rdt}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Restored|2017-11-25|https://web.archive.org/web/20171125230810/http://rewiki.regengedanken.de/wiki/.RDT_(Resident_Evil)}}&lt;br /&gt;
&lt;br /&gt;
The '''.RDT''' file format is used to stored the description of a room in Resident Evil on Playstation or PC. It should contain the camera position (to correctly display 3D objects), the background images and sprites used to draw the scene, description of when to change camera, position of enemies when entering room, and so on...&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
The values are stored in Little-Endian order.&lt;br /&gt;
&lt;br /&gt;
The file is always named &amp;lt;code&amp;gt;roomSXX0.rdt&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;roomSXX1.rdt&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; is the game status/stage. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is the location number.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
&lt;br /&gt;
A RDT file starts with this header, to store count for different objects.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  char unknown0;&lt;br /&gt;
  char num_cameras; /* Number of cameras of the room */&lt;br /&gt;
  char num_sound_banks; /* Number of sound banks, stored at offset 18 ? */&lt;br /&gt;
  char unknown1[3];&lt;br /&gt;
  unsigned short unknown2[3];&lt;br /&gt;
&lt;br /&gt;
  /* An array of 3 elements of unknown structure */&lt;br /&gt;
  rdt_header_part_t unknown3[3];&lt;br /&gt;
} rdt_header_t;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  long unknown_pos_x; /* Unknown 3D position */&lt;br /&gt;
  long unknown_pos_y;&lt;br /&gt;
  long unknown_pos_z;&lt;br /&gt;
  unsigned long unknown0[2];&lt;br /&gt;
} rdt_header_part_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Object list ==&lt;br /&gt;
&lt;br /&gt;
Following the header, we have an array of 19 absolute offsets to various objects in the file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
! 0&lt;br /&gt;
| Camera switches (*.RVD)&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| Collision Boundaries for 3D Models (*.SCA)&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for item models)&lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for obstacles &amp;amp; moveable objects)&lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| Block data (*.BLK)&lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| Footstep sound zones (*.FLR)&lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| Initialization Script(s) (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 7&lt;br /&gt;
| Execution Script 0 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 8&lt;br /&gt;
| Execution Script 1 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 9&lt;br /&gt;
| Skeleton animation (*.EMR)&lt;br /&gt;
|-&lt;br /&gt;
! 10&lt;br /&gt;
| Skeleton animation steps (*.EDD)&lt;br /&gt;
|-&lt;br /&gt;
! 11&lt;br /&gt;
| Message text(s) (*.MSG)&lt;br /&gt;
|-&lt;br /&gt;
! 12&lt;br /&gt;
| RAW image (*.RAW), points to several RAW images used for example by Offset 2 for item images&lt;br /&gt;
|-&lt;br /&gt;
! 13&lt;br /&gt;
| Effect animation index (*.ESP)&lt;br /&gt;
|-&lt;br /&gt;
! 14&lt;br /&gt;
| Effect animation data (*.EFF); points to a list of relative offsets to read the EFF/ESP data (read backwards!)&lt;br /&gt;
|-&lt;br /&gt;
! 15&lt;br /&gt;
| Effect animation sprite image(s) (*.TIM); points to the last of those images used for effects&lt;br /&gt;
|-&lt;br /&gt;
! 16&lt;br /&gt;
| Sound attribute table (*.SND); points to a table which is 192 bytes in size&lt;br /&gt;
|-&lt;br /&gt;
! 17&lt;br /&gt;
| offset to a VAB header file (*.VH)&lt;br /&gt;
|-&lt;br /&gt;
! 18&lt;br /&gt;
| offset to VAB sound file (*.VB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Camera positions (*.RID) ===&lt;br /&gt;
&lt;br /&gt;
At absolute offset 0x94 in a file, you'll find an array of 'num_cameras' items with this structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	long masks_offset;	/* Offset to image mask definition */&lt;br /&gt;
	long tim_masks_offset;	/* Offset to TIM file that contains image masks, if not zero */&lt;br /&gt;
	long camera_from_x;	/* Position of the camera */&lt;br /&gt;
	long camera_from_y;&lt;br /&gt;
	long camera_from_z;&lt;br /&gt;
	long camera_to_x;	/* Where the camera is looking to */&lt;br /&gt;
	long camera_to_y;&lt;br /&gt;
	long camera_to_z;&lt;br /&gt;
	long unknown1[3];&lt;br /&gt;
} rdt_camera_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Camera masks (*.PRI) ===&lt;br /&gt;
&lt;br /&gt;
The masks_offset is an offset to an extra structure, which has following header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count_offsets;	/* Number of global offsets, or 0xffff for none */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
} rdt_masks_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you have 'rdt_mask_offset_t' items, which have a 8-byte length. Summing all 'count' fields should equal the 'count_masks' of the rdt_masks_t structure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count;	/* Number of masks, with which to use this structure */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short dst_x;	/* Destination position on background image/screen, to be added */&lt;br /&gt;
	unsigned short dst_y;&lt;br /&gt;
} rdt_mask_offset_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then you have 'rdt_[rect|square]_mask_t' items, which have either 12-byte (rectangular mask) or 8-byte length (square mask). The length is 12 if byte 7 (rdt_square_mask_t.size field) is zero, and 8 otherwise. The 'depth' value is the Z distance of the mask from the camera (low value=near, high value=far).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned char unknown;&lt;br /&gt;
	unsigned char size;	/* Width and height of mask */&lt;br /&gt;
} rdt_square_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned short zero;&lt;br /&gt;
	unsigned short width, height;	/* Dimensions of mask */&lt;br /&gt;
} rdt_rect_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 0 (*.RVD) - Camera zones/switches ===&lt;br /&gt;
&lt;br /&gt;
At offset 0, you'll find the list of camera switches for the current room. The list end with the first 4 bytes are 0xffffffff (i.e for cam0 and cam1 values).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short to; /* Camera number to switch to */&lt;br /&gt;
  unsigned short from; /* Camera number to switch from */&lt;br /&gt;
  short x1,y1; /* Zone the player must enter to switch camera */&lt;br /&gt;
  short x2,y2;&lt;br /&gt;
  short x3,y3;&lt;br /&gt;
  short x4,y4;&lt;br /&gt;
} rdt_camera_switch_t;&lt;br /&gt;
If the 'to' value = 9, then it is a zone, defining the area in which the switches will work and 3D objects will be visible while this camera is used, else it is a camera switch.&lt;br /&gt;
&lt;br /&gt;
=== Offset 1 (*.SCA) - Collision Boundaries for 3D Models ===&lt;br /&gt;
&lt;br /&gt;
At offset 1, you'll find the boundary collision data for the current room.&lt;br /&gt;
&lt;br /&gt;
The first 24 bytes are the header which is using the following structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short Cx; /* Ceiling x value */&lt;br /&gt;
  unsigned short Cz; /* Ceiling z value */&lt;br /&gt;
  unsigned long counts[5]; /* Number of objects = sum of these 5 long values */&lt;br /&gt;
} rdt_sca_header_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Followed by the header, the individual boundary entries start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short x1; /* X of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z1; /* Z of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short x2; /* X of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z2; /* Z of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short type; /* type of the boundary plane/object (01=Standard; 03=Circle etc.) */&lt;br /&gt;
  unsigned short floor; /* floor value/ 256 = floor value for use in the game as height definition */ &lt;br /&gt;
} rdt_sca_obj_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this the data block ends with a 4 byte unsigned long holding the total size of the SCA data block in bytes.&lt;br /&gt;
&lt;br /&gt;
=== Offset 2 (*.TMD/*.TIM) - Item 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset2_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 3 (*.TMD/*.TIM) - Room 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset3_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 4 (*.BLK) - Block data ===&lt;br /&gt;
&lt;br /&gt;
It's unknown what this data is used for. It defines plane based areas that look like &amp;quot;inversed&amp;quot; collision boundaries.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
&lt;br /&gt;
typedef struct {&lt;br /&gt;
        unsigned short x1;          /* X of the top-left corner of the object */&lt;br /&gt;
        unsigned short z1;          /* Z of the top-left corner of the object */&lt;br /&gt;
        unsigned short x2;          /* X of the bottom-right corner of the object */&lt;br /&gt;
        unsigned short z2;          /* Z of the bottom-right corner of the object */&lt;br /&gt;
	unsigned short int Dir_bit;&lt;br /&gt;
	unsigned short int Abut;&lt;br /&gt;
} rdt_blk_obj_t;&lt;br /&gt;
&lt;br /&gt;
unsigned short int unknown;	/* unknown; follows after last structure */&lt;br /&gt;
&lt;br /&gt;
rdt_blk_obj_t Block[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 5 (*.FLR) - Floor/footstep sound areas ===&lt;br /&gt;
&lt;br /&gt;
This data defines the footstep sound areas and which sound to use. It is also related to the script opcode, 'Flr_set'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
typedef struct {&lt;br /&gt;
	signed short int x;         /* x coordinate where the area is drawn from */&lt;br /&gt;
        signed short int y;         /* y coordinate where the area is drawn from */&lt;br /&gt;
	signed short int x_width;   /* x width of the area */&lt;br /&gt;
        signed short int y_width;   /* y width of the area */&lt;br /&gt;
	unsigned short int sound;   /* footstep ID sound to use */&lt;br /&gt;
} rdt_flr_obj_t;&lt;br /&gt;
&lt;br /&gt;
rdt_flr_obj_t Floor[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 6 (*.SCD) - Scenario data ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 7 (*.SCD) - Execution script for room ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 8, Script events ? ===&lt;br /&gt;
&lt;br /&gt;
This structure starts with a NULL terminated list of [[unsigned long]], which are offsets relative to start of this object. These offsets store also some bytecodes, different than those above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf6&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf7&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf7&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf8&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf8&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf9&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1 or 3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfa&amp;lt;/code&amp;gt;&lt;br /&gt;
| For&lt;br /&gt;
| 4&lt;br /&gt;
| Initialize a for loop. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfa */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short count;&lt;br /&gt;
} event_for_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfb&amp;lt;/code&amp;gt;&lt;br /&gt;
| Next&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set_Inst&lt;br /&gt;
| variable	&lt;br /&gt;
| Initialize bytecode instruction to execute later. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfc */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
	unsigned char bytecode_inst[];&lt;br /&gt;
} event_set_inst_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfd&amp;lt;/code&amp;gt;&lt;br /&gt;
| Exec_inst&lt;br /&gt;
| 1&lt;br /&gt;
| Execute bytecode instruction previously set with 0xfc instruction.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfe&amp;lt;/code&amp;gt;&lt;br /&gt;
| Sleep, process next event&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt;&lt;br /&gt;
| Disable event&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 9 (*.EMR) - Skeleton animation ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 10 (*.EDD) - Skeleton animation steps ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 11 (*.MSG) - Text messages ===&lt;br /&gt;
&lt;br /&gt;
First, you have an arrays of 'unsigned short', which are relative offsets to the beginning of this object. So the number of items is the first offset/2 (if we are lucky that the first offset always has the lowest value).&lt;br /&gt;
&lt;br /&gt;
It contains the texts for cutscenes, dialogs, examining objects.&lt;br /&gt;
&lt;br /&gt;
Conversion table, from byte to ASCII value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0x00-0x0f: &amp;quot; .___()_____0123&amp;quot;&lt;br /&gt;
0x10-0x1f: &amp;quot;456789:_,&amp;quot;!?_ABC&amp;quot;&lt;br /&gt;
0x20-0x2f: &amp;quot;DEFGHIJKLMNOPQRS&amp;quot;&lt;br /&gt;
0x30-0x3f: &amp;quot;TUVWXYZ[/]'-_abc&amp;quot;&lt;br /&gt;
0x40-0x4f: &amp;quot;defghijklmnopqrs&amp;quot;&lt;br /&gt;
0x50-0x5f: &amp;quot;tuvwxyz_________&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note: not all characters have been found (i.e. the ones with '_').&lt;br /&gt;
Codes above 0x57 may also be different given the language, for characters with trema, accents and the like.&lt;br /&gt;
There are also some formatting codes:&lt;br /&gt;
&lt;br /&gt;
0x01: End of text&lt;br /&gt;
0x02: Carriage return&lt;br /&gt;
0x03: Pause&lt;br /&gt;
0x08: Yes/No question&lt;br /&gt;
0x74: &amp;quot;S.&amp;quot; string&lt;br /&gt;
0x75: &amp;quot;T.&amp;quot; string&lt;br /&gt;
0x76: &amp;quot;A.&amp;quot; string&lt;br /&gt;
0x77: &amp;quot;R.&amp;quot; string&lt;br /&gt;
0x79: &amp;quot;. &amp;quot; string&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)</id>
		<title>RDT (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)"/>
				<updated>2023-08-25T15:11:58Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: /* Offset 8, Script events ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|extensions={{ext|rdt}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Restored|2017-11-25|https://web.archive.org/web/20171125230810/http://rewiki.regengedanken.de/wiki/.RDT_(Resident_Evil)}}&lt;br /&gt;
&lt;br /&gt;
The '''.RDT''' file format is used to stored the description of a room in Resident Evil on Playstation or PC. It should contain the camera position (to correctly display 3D objects), the background images and sprites used to draw the scene, description of when to change camera, position of enemies when entering room, and so on...&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
The values are stored in Little-Endian order.&lt;br /&gt;
&lt;br /&gt;
The file is always named &amp;lt;code&amp;gt;roomSXX0.rdt&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;roomSXX1.rdt&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; is the game status/stage. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is the location number.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
&lt;br /&gt;
A RDT file starts with this header, to store count for different objects.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  char unknown0;&lt;br /&gt;
  char num_cameras; /* Number of cameras of the room */&lt;br /&gt;
  char num_sound_banks; /* Number of sound banks, stored at offset 18 ? */&lt;br /&gt;
  char unknown1[3];&lt;br /&gt;
  unsigned short unknown2[3];&lt;br /&gt;
&lt;br /&gt;
  /* An array of 3 elements of unknown structure */&lt;br /&gt;
  rdt_header_part_t unknown3[3];&lt;br /&gt;
} rdt_header_t;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  long unknown_pos_x; /* Unknown 3D position */&lt;br /&gt;
  long unknown_pos_y;&lt;br /&gt;
  long unknown_pos_z;&lt;br /&gt;
  unsigned long unknown0[2];&lt;br /&gt;
} rdt_header_part_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Object list ==&lt;br /&gt;
&lt;br /&gt;
Following the header, we have an array of 19 absolute offsets to various objects in the file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
! 0&lt;br /&gt;
| Camera switches (*.RVD)&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| Collision Boundaries for 3D Models (*.SCA)&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for item models)&lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for obstacles &amp;amp; moveable objects)&lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| Block data (*.BLK)&lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| Footstep sound zones (*.FLR)&lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| Initialization Script(s) (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 7&lt;br /&gt;
| Execution Script 0 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 8&lt;br /&gt;
| Execution Script 1 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 9&lt;br /&gt;
| Skeleton animation (*.EMR)&lt;br /&gt;
|-&lt;br /&gt;
! 10&lt;br /&gt;
| Skeleton animation steps (*.EDD)&lt;br /&gt;
|-&lt;br /&gt;
! 11&lt;br /&gt;
| Message text(s) (*.MSG)&lt;br /&gt;
|-&lt;br /&gt;
! 12&lt;br /&gt;
| RAW image (*.RAW), points to several RAW images used for example by Offset 2 for item images&lt;br /&gt;
|-&lt;br /&gt;
! 13&lt;br /&gt;
| Effect animation index (*.ESP)&lt;br /&gt;
|-&lt;br /&gt;
! 14&lt;br /&gt;
| Effect animation data (*.EFF); points to a list of relative offsets to read the EFF/ESP data (read backwards!)&lt;br /&gt;
|-&lt;br /&gt;
! 15&lt;br /&gt;
| Effect animation sprite image(s) (*.TIM); points to the last of those images used for effects&lt;br /&gt;
|-&lt;br /&gt;
! 16&lt;br /&gt;
| Sound attribute table (*.SND); points to a table which is 192 bytes in size&lt;br /&gt;
|-&lt;br /&gt;
! 17&lt;br /&gt;
| offset to a VAB header file (*.VH)&lt;br /&gt;
|-&lt;br /&gt;
! 18&lt;br /&gt;
| offset to VAB sound file (*.VB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Camera positions (*.RID) ===&lt;br /&gt;
&lt;br /&gt;
At absolute offset 0x94 in a file, you'll find an array of 'num_cameras' items with this structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	long masks_offset;	/* Offset to image mask definition */&lt;br /&gt;
	long tim_masks_offset;	/* Offset to TIM file that contains image masks, if not zero */&lt;br /&gt;
	long camera_from_x;	/* Position of the camera */&lt;br /&gt;
	long camera_from_y;&lt;br /&gt;
	long camera_from_z;&lt;br /&gt;
	long camera_to_x;	/* Where the camera is looking to */&lt;br /&gt;
	long camera_to_y;&lt;br /&gt;
	long camera_to_z;&lt;br /&gt;
	long unknown1[3];&lt;br /&gt;
} rdt_camera_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Camera masks (*.PRI) ===&lt;br /&gt;
&lt;br /&gt;
The masks_offset is an offset to an extra structure, which has following header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count_offsets;	/* Number of global offsets, or 0xffff for none */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
} rdt_masks_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you have 'rdt_mask_offset_t' items, which have a 8-byte length. Summing all 'count' fields should equal the 'count_masks' of the rdt_masks_t structure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count;	/* Number of masks, with which to use this structure */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short dst_x;	/* Destination position on background image/screen, to be added */&lt;br /&gt;
	unsigned short dst_y;&lt;br /&gt;
} rdt_mask_offset_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then you have 'rdt_[rect|square]_mask_t' items, which have either 12-byte (rectangular mask) or 8-byte length (square mask). The length is 12 if byte 7 (rdt_square_mask_t.size field) is zero, and 8 otherwise. The 'depth' value is the Z distance of the mask from the camera (low value=near, high value=far).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned char unknown;&lt;br /&gt;
	unsigned char size;	/* Width and height of mask */&lt;br /&gt;
} rdt_square_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned short zero;&lt;br /&gt;
	unsigned short width, height;	/* Dimensions of mask */&lt;br /&gt;
} rdt_rect_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 0 (*.RVD) - Camera zones/switches ===&lt;br /&gt;
&lt;br /&gt;
At offset 0, you'll find the list of camera switches for the current room. The list end with the first 4 bytes are 0xffffffff (i.e for cam0 and cam1 values).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short to; /* Camera number to switch to */&lt;br /&gt;
  unsigned short from; /* Camera number to switch from */&lt;br /&gt;
  short x1,y1; /* Zone the player must enter to switch camera */&lt;br /&gt;
  short x2,y2;&lt;br /&gt;
  short x3,y3;&lt;br /&gt;
  short x4,y4;&lt;br /&gt;
} rdt_camera_switch_t;&lt;br /&gt;
If the 'to' value = 9, then it is a zone, defining the area in which the switches will work and 3D objects will be visible while this camera is used, else it is a camera switch.&lt;br /&gt;
&lt;br /&gt;
=== Offset 1 (*.SCA) - Collision Boundaries for 3D Models ===&lt;br /&gt;
&lt;br /&gt;
At offset 1, you'll find the boundary collision data for the current room.&lt;br /&gt;
&lt;br /&gt;
The first 24 bytes are the header which is using the following structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short Cx; /* Ceiling x value */&lt;br /&gt;
  unsigned short Cz; /* Ceiling z value */&lt;br /&gt;
  unsigned long counts[5]; /* Number of objects = sum of these 5 long values */&lt;br /&gt;
} rdt_sca_header_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Followed by the header, the individual boundary entries start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short x1; /* X of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z1; /* Z of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short x2; /* X of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z2; /* Z of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short type; /* type of the boundary plane/object (01=Standard; 03=Circle etc.) */&lt;br /&gt;
  unsigned short floor; /* floor value/ 256 = floor value for use in the game as height definition */ &lt;br /&gt;
} rdt_sca_obj_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this the data block ends with a 4 byte unsigned long holding the total size of the SCA data block in bytes.&lt;br /&gt;
&lt;br /&gt;
=== Offset 2 (*.TMD/*.TIM) - Item 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset2_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 3 (*.TMD/*.TIM) - Room 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset3_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 4 (*.BLK) - Block data ===&lt;br /&gt;
&lt;br /&gt;
It's unknown what this data is used for. It defines plane based areas that look like &amp;quot;inversed&amp;quot; collision boundaries.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
&lt;br /&gt;
typedef struct {&lt;br /&gt;
        unsigned short x1;          /* X of the top-left corner of the object */&lt;br /&gt;
        unsigned short z1;          /* Z of the top-left corner of the object */&lt;br /&gt;
        unsigned short x2;          /* X of the bottom-right corner of the object */&lt;br /&gt;
        unsigned short z2;          /* Z of the bottom-right corner of the object */&lt;br /&gt;
	unsigned short int Dir_bit;&lt;br /&gt;
	unsigned short int Abut;&lt;br /&gt;
} rdt_blk_obj_t;&lt;br /&gt;
&lt;br /&gt;
unsigned short int unknown;	/* unknown; follows after last structure */&lt;br /&gt;
&lt;br /&gt;
rdt_blk_obj_t Block[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 5 (*.FLR) - Floor/footstep sound areas ===&lt;br /&gt;
&lt;br /&gt;
This data defines the footstep sound areas and which sound to use. It is also related to the script opcode, 'Flr_set'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
typedef struct {&lt;br /&gt;
	signed short int x;         /* x coordinate where the area is drawn from */&lt;br /&gt;
        signed short int y;         /* y coordinate where the area is drawn from */&lt;br /&gt;
	signed short int x_width;   /* x width of the area */&lt;br /&gt;
        signed short int y_width;   /* y width of the area */&lt;br /&gt;
	unsigned short int sound;   /* footstep ID sound to use */&lt;br /&gt;
} rdt_flr_obj_t;&lt;br /&gt;
&lt;br /&gt;
rdt_flr_obj_t Floor[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 6 (*.SCD) - Scenario data ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 7 (*.SCD) - Execution script for room ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 8, Script events ? ===&lt;br /&gt;
&lt;br /&gt;
This structure starts with a NULL terminated list of [[unsigned long]], which are offsets relative to start of this object. These offsets store also some bytecodes, different than those above.&lt;br /&gt;
&lt;br /&gt;
=== Offset 8, Script events ? ===&lt;br /&gt;
&lt;br /&gt;
This structure starts with a NULL terminated list of [[unsigned long]], which are offsets relative to start of this object. These offsets store also some bytecodes, different than those above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf6&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf7&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf7&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf8&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf8&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf9&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1 or 3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfa&amp;lt;/code&amp;gt;&lt;br /&gt;
| For&lt;br /&gt;
| 4&lt;br /&gt;
| Initialize a for loop. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfa */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short count;&lt;br /&gt;
} event_for_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfb&amp;lt;/code&amp;gt;&lt;br /&gt;
| Next&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set_Inst&lt;br /&gt;
| variable	&lt;br /&gt;
| Initialize bytecode instruction to execute later. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfc */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
	unsigned char bytecode_inst[];&lt;br /&gt;
} event_set_inst_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfd&amp;lt;/code&amp;gt;&lt;br /&gt;
| Exec_inst&lt;br /&gt;
| 1&lt;br /&gt;
| Execute bytecode instruction previously set with 0xfc instruction.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfe&amp;lt;/code&amp;gt;&lt;br /&gt;
| Sleep, process next event&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt;&lt;br /&gt;
| Disable event&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 9 (*.EMR) - Skeleton animation ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 10 (*.EDD) - Skeleton animation steps ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 11 (*.MSG) - Text messages ===&lt;br /&gt;
&lt;br /&gt;
First, you have an arrays of 'unsigned short', which are relative offsets to the beginning of this object. So the number of items is the first offset/2 (if we are lucky that the first offset always has the lowest value).&lt;br /&gt;
&lt;br /&gt;
It contains the texts for cutscenes, dialogs, examining objects.&lt;br /&gt;
&lt;br /&gt;
Conversion table, from byte to ASCII value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0x00-0x0f: &amp;quot; .___()_____0123&amp;quot;&lt;br /&gt;
0x10-0x1f: &amp;quot;456789:_,&amp;quot;!?_ABC&amp;quot;&lt;br /&gt;
0x20-0x2f: &amp;quot;DEFGHIJKLMNOPQRS&amp;quot;&lt;br /&gt;
0x30-0x3f: &amp;quot;TUVWXYZ[/]'-_abc&amp;quot;&lt;br /&gt;
0x40-0x4f: &amp;quot;defghijklmnopqrs&amp;quot;&lt;br /&gt;
0x50-0x5f: &amp;quot;tuvwxyz_________&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note: not all characters have been found (i.e. the ones with '_').&lt;br /&gt;
Codes above 0x57 may also be different given the language, for characters with trema, accents and the like.&lt;br /&gt;
There are also some formatting codes:&lt;br /&gt;
&lt;br /&gt;
0x01: End of text&lt;br /&gt;
0x02: Carriage return&lt;br /&gt;
0x03: Pause&lt;br /&gt;
0x08: Yes/No question&lt;br /&gt;
0x74: &amp;quot;S.&amp;quot; string&lt;br /&gt;
0x75: &amp;quot;T.&amp;quot; string&lt;br /&gt;
0x76: &amp;quot;A.&amp;quot; string&lt;br /&gt;
0x77: &amp;quot;R.&amp;quot; string&lt;br /&gt;
0x79: &amp;quot;. &amp;quot; string&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)</id>
		<title>RDT (Resident Evil 1997)</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/wiki/RDT_(Resident_Evil_1997)"/>
				<updated>2023-08-25T15:11:48Z</updated>
		
		<summary type="html">&lt;p&gt;Foxtrot: /* Offset 8, Script events ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|extensions={{ext|rdt}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Restored|2017-11-25|https://web.archive.org/web/20171125230810/http://rewiki.regengedanken.de/wiki/.RDT_(Resident_Evil)}}&lt;br /&gt;
&lt;br /&gt;
The '''.RDT''' file format is used to stored the description of a room in Resident Evil on Playstation or PC. It should contain the camera position (to correctly display 3D objects), the background images and sprites used to draw the scene, description of when to change camera, position of enemies when entering room, and so on...&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
The values are stored in Little-Endian order.&lt;br /&gt;
&lt;br /&gt;
The file is always named &amp;lt;code&amp;gt;roomSXX0.rdt&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;roomSXX1.rdt&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; is the game status/stage. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is the location number.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
&lt;br /&gt;
A RDT file starts with this header, to store count for different objects.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  char unknown0;&lt;br /&gt;
  char num_cameras; /* Number of cameras of the room */&lt;br /&gt;
  char num_sound_banks; /* Number of sound banks, stored at offset 18 ? */&lt;br /&gt;
  char unknown1[3];&lt;br /&gt;
  unsigned short unknown2[3];&lt;br /&gt;
&lt;br /&gt;
  /* An array of 3 elements of unknown structure */&lt;br /&gt;
  rdt_header_part_t unknown3[3];&lt;br /&gt;
} rdt_header_t;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  long unknown_pos_x; /* Unknown 3D position */&lt;br /&gt;
  long unknown_pos_y;&lt;br /&gt;
  long unknown_pos_z;&lt;br /&gt;
  unsigned long unknown0[2];&lt;br /&gt;
} rdt_header_part_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Object list ==&lt;br /&gt;
&lt;br /&gt;
Following the header, we have an array of 19 absolute offsets to various objects in the file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
! 0&lt;br /&gt;
| Camera switches (*.RVD)&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| Collision Boundaries for 3D Models (*.SCA)&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for item models)&lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| TMD/TIM; points to 2 offsets which are: offset to a TMD file, and offset to a TIM file (used for obstacles &amp;amp; moveable objects)&lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| Block data (*.BLK)&lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| Footstep sound zones (*.FLR)&lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| Initialization Script(s) (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 7&lt;br /&gt;
| Execution Script 0 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 8&lt;br /&gt;
| Execution Script 1 (*.SCD)&lt;br /&gt;
|-&lt;br /&gt;
! 9&lt;br /&gt;
| Skeleton animation (*.EMR)&lt;br /&gt;
|-&lt;br /&gt;
! 10&lt;br /&gt;
| Skeleton animation steps (*.EDD)&lt;br /&gt;
|-&lt;br /&gt;
! 11&lt;br /&gt;
| Message text(s) (*.MSG)&lt;br /&gt;
|-&lt;br /&gt;
! 12&lt;br /&gt;
| RAW image (*.RAW), points to several RAW images used for example by Offset 2 for item images&lt;br /&gt;
|-&lt;br /&gt;
! 13&lt;br /&gt;
| Effect animation index (*.ESP)&lt;br /&gt;
|-&lt;br /&gt;
! 14&lt;br /&gt;
| Effect animation data (*.EFF); points to a list of relative offsets to read the EFF/ESP data (read backwards!)&lt;br /&gt;
|-&lt;br /&gt;
! 15&lt;br /&gt;
| Effect animation sprite image(s) (*.TIM); points to the last of those images used for effects&lt;br /&gt;
|-&lt;br /&gt;
! 16&lt;br /&gt;
| Sound attribute table (*.SND); points to a table which is 192 bytes in size&lt;br /&gt;
|-&lt;br /&gt;
! 17&lt;br /&gt;
| offset to a VAB header file (*.VH)&lt;br /&gt;
|-&lt;br /&gt;
! 18&lt;br /&gt;
| offset to VAB sound file (*.VB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Camera positions (*.RID) ===&lt;br /&gt;
&lt;br /&gt;
At absolute offset 0x94 in a file, you'll find an array of 'num_cameras' items with this structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	long masks_offset;	/* Offset to image mask definition */&lt;br /&gt;
	long tim_masks_offset;	/* Offset to TIM file that contains image masks, if not zero */&lt;br /&gt;
	long camera_from_x;	/* Position of the camera */&lt;br /&gt;
	long camera_from_y;&lt;br /&gt;
	long camera_from_z;&lt;br /&gt;
	long camera_to_x;	/* Where the camera is looking to */&lt;br /&gt;
	long camera_to_y;&lt;br /&gt;
	long camera_to_z;&lt;br /&gt;
	long unknown1[3];&lt;br /&gt;
} rdt_camera_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Camera masks (*.PRI) ===&lt;br /&gt;
&lt;br /&gt;
The masks_offset is an offset to an extra structure, which has following header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count_offsets;	/* Number of global offsets, or 0xffff for none */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
} rdt_masks_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you have 'rdt_mask_offset_t' items, which have a 8-byte length. Summing all 'count' fields should equal the 'count_masks' of the rdt_masks_t structure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned short count;	/* Number of masks, with which to use this structure */&lt;br /&gt;
	unsigned short unknown;&lt;br /&gt;
	unsigned short dst_x;	/* Destination position on background image/screen, to be added */&lt;br /&gt;
	unsigned short dst_y;&lt;br /&gt;
} rdt_mask_offset_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then you have 'rdt_[rect|square]_mask_t' items, which have either 12-byte (rectangular mask) or 8-byte length (square mask). The length is 12 if byte 7 (rdt_square_mask_t.size field) is zero, and 8 otherwise. The 'depth' value is the Z distance of the mask from the camera (low value=near, high value=far).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned char unknown;&lt;br /&gt;
	unsigned char size;	/* Width and height of mask */&lt;br /&gt;
} rdt_square_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned char src_x;	/* Source position in horr/usa/objspr/ospSSRRC.pak image file */&lt;br /&gt;
	unsigned char src_y;&lt;br /&gt;
	unsigned char dst_x;	/* Destination position on background image/screen */&lt;br /&gt;
	unsigned char dst_y;&lt;br /&gt;
	unsigned short depth;	/* Distance/16 from camera */&lt;br /&gt;
	unsigned short zero;&lt;br /&gt;
	unsigned short width, height;	/* Dimensions of mask */&lt;br /&gt;
} rdt_rect_mask_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 0 (*.RVD) - Camera zones/switches ===&lt;br /&gt;
&lt;br /&gt;
At offset 0, you'll find the list of camera switches for the current room. The list end with the first 4 bytes are 0xffffffff (i.e for cam0 and cam1 values).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short to; /* Camera number to switch to */&lt;br /&gt;
  unsigned short from; /* Camera number to switch from */&lt;br /&gt;
  short x1,y1; /* Zone the player must enter to switch camera */&lt;br /&gt;
  short x2,y2;&lt;br /&gt;
  short x3,y3;&lt;br /&gt;
  short x4,y4;&lt;br /&gt;
} rdt_camera_switch_t;&lt;br /&gt;
If the 'to' value = 9, then it is a zone, defining the area in which the switches will work and 3D objects will be visible while this camera is used, else it is a camera switch.&lt;br /&gt;
&lt;br /&gt;
=== Offset 1 (*.SCA) - Collision Boundaries for 3D Models ===&lt;br /&gt;
&lt;br /&gt;
At offset 1, you'll find the boundary collision data for the current room.&lt;br /&gt;
&lt;br /&gt;
The first 24 bytes are the header which is using the following structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short Cx; /* Ceiling x value */&lt;br /&gt;
  unsigned short Cz; /* Ceiling z value */&lt;br /&gt;
  unsigned long counts[5]; /* Number of objects = sum of these 5 long values */&lt;br /&gt;
} rdt_sca_header_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Followed by the header, the individual boundary entries start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
  unsigned short x1; /* X of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z1; /* Z of the top-left corner of the boundary plane/object */&lt;br /&gt;
  unsigned short x2; /* X of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short z2; /* Z of the bottom-right corner of the boundary plane/object */&lt;br /&gt;
  unsigned short type; /* type of the boundary plane/object (01=Standard; 03=Circle etc.) */&lt;br /&gt;
  unsigned short floor; /* floor value/ 256 = floor value for use in the game as height definition */ &lt;br /&gt;
} rdt_sca_obj_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this the data block ends with a 4 byte unsigned long holding the total size of the SCA data block in bytes.&lt;br /&gt;
&lt;br /&gt;
=== Offset 2 (*.TMD/*.TIM) - Item 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset2_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 3 (*.TMD/*.TIM) - Room 3D model &amp;amp; texture pointers ===&lt;br /&gt;
&lt;br /&gt;
This is an array of N structures of the following format, used by script instruction OM_SET (0x1f).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	unsigned long tmd_offset;&lt;br /&gt;
	unsigned long tim_offset;&lt;br /&gt;
} rdt_offset3_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 4 (*.BLK) - Block data ===&lt;br /&gt;
&lt;br /&gt;
It's unknown what this data is used for. It defines plane based areas that look like &amp;quot;inversed&amp;quot; collision boundaries.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
&lt;br /&gt;
typedef struct {&lt;br /&gt;
        unsigned short x1;          /* X of the top-left corner of the object */&lt;br /&gt;
        unsigned short z1;          /* Z of the top-left corner of the object */&lt;br /&gt;
        unsigned short x2;          /* X of the bottom-right corner of the object */&lt;br /&gt;
        unsigned short z2;          /* Z of the bottom-right corner of the object */&lt;br /&gt;
	unsigned short int Dir_bit;&lt;br /&gt;
	unsigned short int Abut;&lt;br /&gt;
} rdt_blk_obj_t;&lt;br /&gt;
&lt;br /&gt;
unsigned short int unknown;	/* unknown; follows after last structure */&lt;br /&gt;
&lt;br /&gt;
rdt_blk_obj_t Block[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 5 (*.FLR) - Floor/footstep sound areas ===&lt;br /&gt;
&lt;br /&gt;
This data defines the footstep sound areas and which sound to use. It is also related to the script opcode, 'Flr_set'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned short int Amount;	/* Amount of elements */&lt;br /&gt;
typedef struct {&lt;br /&gt;
	signed short int x;         /* x coordinate where the area is drawn from */&lt;br /&gt;
        signed short int y;         /* y coordinate where the area is drawn from */&lt;br /&gt;
	signed short int x_width;   /* x width of the area */&lt;br /&gt;
        signed short int y_width;   /* y width of the area */&lt;br /&gt;
	unsigned short int sound;   /* footstep ID sound to use */&lt;br /&gt;
} rdt_flr_obj_t;&lt;br /&gt;
&lt;br /&gt;
rdt_flr_obj_t Floor[Amount];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Offset 6 (*.SCD) - Scenario data ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 7 (*.SCD) - Execution script for room ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 8, Script events ? ===&lt;br /&gt;
&lt;br /&gt;
This structure starts with a NULL terminated list of [[unsigned long]], which are offsets relative to start of this object. These offsets store also some bytecodes, different than those above.&lt;br /&gt;
&lt;br /&gt;
=== Offset 8, Script events ? ===&lt;br /&gt;
&lt;br /&gt;
This structure starts with a NULL terminated list of [[unsigned long]], which are offsets relative to start of this object. These offsets store also some bytecodes, different than those above.&lt;br /&gt;
&lt;br /&gt;
=== Offset 8, Script events ? ===&lt;br /&gt;
&lt;br /&gt;
This structure starts with a NULL terminated list of [[unsigned long]], which are offsets relative to start of this object. These offsets store also some bytecodes, different than those above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Instruction&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf6&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf7&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf7&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf8&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1&lt;br /&gt;
| Init some stuff related to instruction 0xf8&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xf9&amp;lt;/code&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| 1 or 3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfa&amp;lt;/code&amp;gt;&lt;br /&gt;
| For&lt;br /&gt;
| 4&lt;br /&gt;
| Initialize a for loop. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfa */&lt;br /&gt;
	unsigned char dummy;&lt;br /&gt;
	unsigned short count;&lt;br /&gt;
} event_for_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfb&amp;lt;/code&amp;gt;&lt;br /&gt;
| Next&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;0xfc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set_Inst&lt;br /&gt;
| variable	&lt;br /&gt;
| Initialize bytecode instruction to execute later. &amp;lt;pre&amp;gt;typedef struct {&lt;br /&gt;
	unsigned char opcode; /* 0xfc */&lt;br /&gt;
	unsigned char block_length;&lt;br /&gt;
	unsigned char bytecode_inst[];&lt;br /&gt;
} event_set_inst_t;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfd&amp;lt;/code&amp;gt;&lt;br /&gt;
| Exec_inst&lt;br /&gt;
| 1&lt;br /&gt;
| Execute bytecode instruction previously set with 0xfc instruction.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xfe&amp;lt;/code&amp;gt;&lt;br /&gt;
| Sleep, process next event&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt;&lt;br /&gt;
| Disable event&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Offset 9 (*.EMR) - Skeleton animation ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 10 (*.EDD) - Skeleton animation steps ===&lt;br /&gt;
&lt;br /&gt;
=== Offset 11 (*.MSG) - Text messages ===&lt;br /&gt;
&lt;br /&gt;
First, you have an arrays of 'unsigned short', which are relative offsets to the beginning of this object. So the number of items is the first offset/2 (if we are lucky that the first offset always has the lowest value).&lt;br /&gt;
&lt;br /&gt;
It contains the texts for cutscenes, dialogs, examining objects.&lt;br /&gt;
&lt;br /&gt;
Conversion table, from byte to ASCII value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0x00-0x0f: &amp;quot; .___()_____0123&amp;quot;&lt;br /&gt;
0x10-0x1f: &amp;quot;456789:_,&amp;quot;!?_ABC&amp;quot;&lt;br /&gt;
0x20-0x2f: &amp;quot;DEFGHIJKLMNOPQRS&amp;quot;&lt;br /&gt;
0x30-0x3f: &amp;quot;TUVWXYZ[/]'-_abc&amp;quot;&lt;br /&gt;
0x40-0x4f: &amp;quot;defghijklmnopqrs&amp;quot;&lt;br /&gt;
0x50-0x5f: &amp;quot;tuvwxyz_________&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note: not all characters have been found (i.e. the ones with '_').&lt;br /&gt;
Codes above 0x57 may also be different given the language, for characters with trema, accents and the like.&lt;br /&gt;
There are also some formatting codes:&lt;br /&gt;
&lt;br /&gt;
0x01: End of text&lt;br /&gt;
0x02: Carriage return&lt;br /&gt;
0x03: Pause&lt;br /&gt;
0x08: Yes/No question&lt;br /&gt;
0x74: &amp;quot;S.&amp;quot; string&lt;br /&gt;
0x75: &amp;quot;T.&amp;quot; string&lt;br /&gt;
0x76: &amp;quot;A.&amp;quot; string&lt;br /&gt;
0x77: &amp;quot;R.&amp;quot; string&lt;br /&gt;
0x79: &amp;quot;. &amp;quot; string&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Foxtrot</name></author>	</entry>

	</feed>