Skip to content

Spot cameras, locators and occluders

Robomodo RMEWorld and streamingApplies toSHRED

Besides spot chunks, splines and lights, the SCP blob holds three small kinds of placed object. All numbers are big-endian, and every matrix is a 64-byte row-major affine matrix with the translation in floats 12 to 14, finite and with the fourth column (0, 0, 0, 1). Proven · all 281 camera, 1 locator and 341 occluder matrices

A section holds count records of 48 bytes from its data offset, then count × 2 matrices of 64 bytes; its size is data_offset + count × 176. The disc has 10 sections, one in each level’s base SCP, with 281 records. Proven · all 10 sections

Spot camera record48 bytesSHRED42% known
ProvenObservedSourcedInferredUnknownNot described
OffsetSizeTypeFieldConfidenceNotes
0x04u32idObservedthe record's own id: 0x3666B710 in most records, 0x1A570D21 and others in two levels
0x44u32pool_leftoverUnknownallocator leftovers; varies
0x84u32spot_nameObservedsdbm of a spot name of the database: BigJumpOne, VertAirTwo, Chlg17_ObjSpot_Cam12_AnyTrick
0xC4u32pool_leftoverUnknown
0x104u32parentObserved
0x144f32valueUnknown53.638 in all 281 records
0x184u32flagUnknown1 in all 281 records
0x1C4u32frame_offsetProvenfrom the section's start, of a matrix in the array after the records
0x204u32second_frame_offsetProvenlikewise
0x2412u32[3]pool_leftoverUnknown

Both offsets lie in the matrix array in all 281 records. Proven · all 281 records The section’s loader copies the translations of the two matrices, and the record’s offset 20, into the object whose id the record holds. Observed · static reading of the executable That the records are cameras (the first matrix the camera’s frame, the second the frame of the point it looks at) is read from the spot names (..._Cam12_...) and from the pair of frames: the second matrix has the linear part diag(−1, 1, 1) in 159 of the 281 records and a rotation in the others. The function that uses them was not traced. Inferred

A section holds count records of 16 bytes then count matrices; its size is data_offset + count × 80. The disc has one section, in the echo base SCP, with one record. Proven · all 547 SCPs

Locator record16 bytesSHRED75% known
ProvenObservedSourcedInferredUnknownNot described
OffsetSizeTypeFieldConfidenceNotes
0x04u32classProvensdbm of RMLocator
0x44u32nameUnknownsdbm of the locator's name
0x84u32kindProvensdbm of Waypoint
0xC4u32matrix_offsetProvenfrom the section's start

The matrix is a scaled rotation whose translation is the origin to within 1e-4. What a waypoint is used for is unknown. Observed

A section holds count records of 16 bytes from its data offset. After them come, for each record in order, a 64-byte matrix and an outline of line segments; the matrices and outlines tile the section exactly. The disc has 9 sections in 9 SCPs with 341 records. Proven · all 9 sections

Occluder record16 bytesSHRED100% known
ProvenObservedSourcedInferredUnknownNot described
OffsetSizeTypeFieldConfidenceNotes
0x04u32nameObservedsdbm of RMOccluder or RMOccluder<N>, N below 1000, for 276 of the 341; the other 65 hash names that are not known
0x44u32matrix_offsetProvenfrom the section's start
0x84u32outline_offsetProventhe matrix's offset plus 64
0xC4u32flagsObservedthe low 16 bits give the outline's shape; the high 16 vary from record to record and are unknown

The outline is a list of segments, each two vec4 of x, y, z and w = 1. The low half of the flags says how many: 0x0800 is four segments (128 bytes, the outline of a rectangle; 269 records) and 0x1801 is twelve (384 bytes, the edges of a box; 72 records). No other low half occurs. Proven · all 341 records The outline points are in the matrix’s own space by the stored values (coordinates from −14.7 to 4.8 in a box of one SCP, ±4 in most), but the engine code that applies them was not found. Inferred The engine has no section handler for the type. The only consumer found is the Lua binding set_occluder_enabled, which names occluders; whether the renderer culls with them is not established. Observed · static reading of the executable

What are these objects used for?

The engine function that uses the spot cameras’ frames, the meaning of the camera value 53.638, the waypoint’s use and the occluder’s high flag half are open.