Difference between revisions of "Myst RLST resources"

From A look inside The Link @ wiki
Jump to: navigation, search
(something more about flags)
m (precisation)
Line 51: Line 51:
 
Each case itself begins with a record type, followed by additional record contents (without common prefix). Only type 5 and 6 records used in a switch statement have been observed.
 
Each case itself begins with a record type, followed by additional record contents (without common prefix). Only type 5 and 6 records used in a switch statement have been observed.
  
Type 8 record specifies a list of subimages to draw over main WDIB. Particular subimage is chosen depending on the value of variable. This record also includes type 7 record at start (which in turn includes type 5 record and more).
+
Type 8 record is like type 7, but additionally it specifies a list of subimages to draw over main WDIB. The particular subimage is chosen depending on the value of variable. This record includes the type 7 record at start.
  
 
  <type_7_record> (var_index) {num_subs} [wdib_id <rectangle>]
 
  <type_7_record> (var_index) {num_subs} [wdib_id <rectangle>]

Revision as of 16:33, 16 September 2008

Myst
Mohawk Overview
CLRC EXIT HINT INIT
MJMP MSND PICT RLST
VIEW WDIB HELP RSFL
Scripts Variables

These contain Myst's hotspot descriptions.

The data is a list of records, each record describing one of the hotspots:

short record_count
variable records

The record length is variable, depending on the hotspot type. The record structure is:

unsigned short type
unsigned short flags
short left
short top
short right
short bottom
unsigned short destination
variable additional data
  • type seems to specify the hotspot action in a wide sense. Every value between 0 and 14 except for 9 has been observed. See below for the meaning.
  • flags seems to be a bit field. Observed values are 0, 1, 2, 3, 5, 6, 8 and 10. The value seems related to when the hotspot actions should be executed. For example, regular clickable hotspots usually have flags = 2 while hotspots that run background movies (e.g. the Channelwood windmill) have flags = 0. Bit 3 is suspected to flag Zip Mode hotspots.
  • The following 4 fields define the hotspot rectangle. Note that "weird" rectangles are found, like (-32000, -32000, 32000, 32000).
  • destination contains a destination card ID for hotspots that change card, or zero.
  • Additional data follows when type > 3 (complex hotspots), clearly representing lists of actions to perform. We have yet to figure out how to calculate the length of those complex records.

Hotspot types

Types from 0 to 4 are associated with "simple" hotspots that usually just change card. In these cases, type indicates the movement direction: forward, left, right, down and up respectively. There is no additional data in the hotspot record for these simple cases.

Type 5 hotspots seems to define some sort of action list to execute when the hotspot is clicked. The additional data takes this form:

{num_actions} [opcode (var_index) {num_values} [values]]

See the page about scripts for more info.

Type 6 hotspots play a video when activated. The record starts with a full type 5 record. Then comes a zero-terminated string (C string) which defines the path to the video file without extension. Note that after the string is read, input stream position should be padded to the next 2-byte boundary. Finally come 7 shorts whose purpose is still unknown.

Type 7 record serves as some kind of switch statement, executing one of several action lists (or cases) indexed by the value of a variable:

(var_index} {num_cases} [record_type <record_data>]

Each case itself begins with a record type, followed by additional record contents (without common prefix). Only type 5 and 6 records used in a switch statement have been observed.

Type 8 record is like type 7, but additionally it specifies a list of subimages to draw over main WDIB. The particular subimage is chosen depending on the value of variable. This record includes the type 7 record at start.

<type_7_record> (var_index) {num_subs} [wdib_id <rectangle>]

Here, each subimage record defines a source WDIB ID and a source rectangle inside this WDIB. Rectangle is defined in the usual (left, top, right, bottom) format, with one exception: empty rectangle is defined as the single short -1. This is probably the case when source rectangle equals destination rectangle. Also, wdib_id itself can be -1, this probably means original WDIB for this card should be used as source WDIB.

The remaining types are being investigated.

Case studies

Note: these are simply the data in little-endian shorts and line-broken where patterns are found. <l t b r> is the hotspot rect. count [entry]... are guesses at when there are lists of entries. The number in parentheses before the data is the card number (not the resource number).

The following hotspots replace part of the image (in this case <417 260 544 333>) with part of another image (in this case 3004 <0 0 127 73>) based on a variable (103 2 plays in here somewhere):

8 1 < 31 276 163 333> 0 FFFF 0 103 2 3006 <0 0 132 57> 3005 FFFF
8 1 <417 260 544 333> 0 FFFF 0 103 2 3004 <0 0 127 73> 3003 FFFF

Case studies from Channelwood:

(CHANNEL 3001) 2
1 2   <1 0 110 332> 3002
2 2 <455 2 544 332> 3003
(CHANNEL 3002) 2
1 2   <0 1 100 332> 3005
2 2 <431 0 544 332> 3001
(CHANNEL 3003) 4
5 2 <213 90 343 290> 3494 2 [6 0 0] [24 0 1 {3494}] (the door)
1 2 <0 0 81 332> 3001 (left)
2 2 <463 0 544 332> 3005 (right)
8 1 <417 260 544 333> 0 FFFF 0 103 2 [3004 <0 0 127 73>] [3003 <FFFF>]
(CHANNEL 3005) 4
0 2 <76 152 196 330> 3012
1 2  <0   0 106 332> 3003
2 2 <438  0 544 332> 3002
8 1 <31 276 163 333> 0 FFFF 0 103 2 [3006 <0 0 132 57>] [3005 <FFFF>]
(CHANNEL 3012) 8
8 3 <101 243 214 343> 0 FFFF 1 5 (1 [3 103 1 {802}]) 103 2 [3013 <0 0 113 100>] [3012 <FFFF>]
5 2 <255 193 269 208> 0 1 [117 0 1 {0}]
5 2 <268 193 282 208> 0 1 [117 0 1 {1}]
5 2 <281 193 295 208> 0 1 [117 0 1 {2}]
5 2 <294 193 308 208> 0 1 [117 0 1 {3}]
8 1 <252 190 310 210> 0 FFFF 0 17 4 [3008 <0 0 58 20>] [3009 <0 0 58 20>] [3010 <0 0 58 20>] [3011 <0 0 58 20>]
0 4 <180 31 379 305> 0
5 2 <0 0 544 332> 0 1 [34 0 2 {3005 0}]
(MYST 4368) 3
8 3 <305 148 375 238> 0 FFFF 1 5 (1 [3 103 1 {802}]) 103 2 [FFFF <FFFF>] [4369 <0 0 70 90>]
7 2 <216 110 304 235> 0 106 5
  5 (1 [115 101 3 {4741 4370 4368}])
  5 (1 [115 101 3 {4741 4370 4368}])
  5 (1 [115 101 3 {4741 4370 4368}])
  5 (1 [115 101 3 {4741 4370 4368}])
  5 (0)
0 2 <0 0 544 332> 4345

Intro Case Study

(INTRO 1) 1
0 2 <-32000 -32000 32000 32000> 5

INTRO 1 is supposed to be the card which shows the opening movies and then switches to card 2.

(INTRO 2) 1
5 2 <245 202 304 253> 4 2 [37 0 0] [34 0 2 {3 11}]

INTRO 2 is the first interactive part of the game, the part where you can pick up the Myst book. The rect correctly corresponds to where the book is on screen. But, look at the "destination" -- 4. There is no VIEW/RLST 4! However, there is a WDIB 4 and it is the open book with the water. Where this should go is to card 3 and show the Myst book cover before showing image 4 and then playing the video. And, there is a 3 in this chunk, but I'm not sure if that's the purpose. I have no idea what commands 37/34 could be. There is a WDIB 11, but it's of D'ni, so I doubt it's that. ;)

(INTRO 3) 2
0 2 <-32000 -32000 32000 32000> 5
6 0 <312 70 441 159> 0 0 "\qtw\intro\intro2" 0x2848 0x2756 0 1 0 0 0

Note that this one has a string for the video (null-terminated). This obviously calls that video which is the Myst fly-by for the linking book. And, that rect perfectly matches where the video should be displayed on screen. However, this also clearly breaks the format specified above for "type 2 hotspots".

WDIB 3 is the cover of the Myst linking book. But, this doesn't match up with the video mentioned here which should be for WDIB 4 (or 10, they are identical)(the open linking book with the water image) and eventually ending at WDIB 12 (the open linking book with the dock image). The 5 after the very large numbers is the target card for the open linking book which seems correct. 0x2848 is 10,312 and 0x2756 is 10,070. The rate of the audio is 11,025. Not sure if this has any correlation.