Difference between revisions of "MAPINFO"

From Wulinshu
Jump to navigation Jump to search
 
(10 intermediate revisions by the same user not shown)
Line 3: Line 3:
[[Category:Files]]
[[Category:Files]]
[[Category:Map]]
[[Category:Map]]
The mapinfo is the main file for each scene map.
It contains many things such as the shenmue scene script, model loading and definition, collisions, light, weather, sound program setup and cutscenes.
===Nodes===
{| class="wikitable"
|-
! Signature !! Description
|-
| ATTR || empty
|-
| [[SNDP]] || Sound program
|-
| [[LGHT]] || Scene light
|-
| [[ECAM]] || Event camera
|-
| [[COLS]] || Collisions (SM1)
|-
| [[FLDD]] || Collision field (SM2)
|-
| [[DOOR]] || Doors
|-
| [[SCEX]] || Cutscenes
|-
| [[SCN3]] || Scene script v3
|-
| [[SCN4]] || Scene script v4
|-
| REGD || empty
|-
| [[WTHR]] || Weather
|-
| EVFD || empty
|-
| LSCN || empty
|-
| [[MAPR]] || unknown
|-
| [[MAPT]] || unknown
|-
| [[SCRL]] || unknown
|-
| [[CHRD]] || Character data (External models)
|-
| END || EOF
|}
===Memory Models===
===Memory Models===


Line 64: Line 111:


</sub>
</sub>
===ATTR (Attribute)===
Ignored.
===SNDP (Sound Program)===
[[(HLTaskFunc)sndCtrlSoundProgram]]
====SNDD====
====SNDA====
====SNDR====
====SNDM====
=====SMAP=====
{| class="wikitable"
|-
! Position !! Length !! Type !! Description
|-
| 0x00 || 0x04 || string || Identifier (SMAP)
|-
| 0x04 || 0x04 || string || Map name 1
|-
| 0x08 || 0x04 || string || Map name 2
|-
| 0x0C || 0x04 || uint || Size in bytes
|}
=====SBTS=====
{| class="wikitable"
|-
! Position !! Length !! Type !! Description
|-
| 0x00 || 0x04 || string || Identifier (SBTS)
|-
| 0x04 || 0x04 || string || Map name 1
|-
| 0x08 || 0x04 || string || Map name 2
|-
| 0x0C || 0x04 || uint || Size in bytes
|}
===LGHT (Light)===
[[(HLTaskFunc)LT_LightTask]]
Parent Node:
{| class="wikitable"
|-
! Position !! Length !! Type !! Description
|-
| 0x00 || 0x04 || string || Identifier (LGHT)
|-
| 0x04 || 0x04 || uint || Size in bytes
|-
| 0x08 || 0x04 || string || Unknown (Sub node name)
|-
| 0x0C || 0x04 || uint || Size relativ to 0x08
|}
Child Node:
{| class="wikitable"
|-
! Position !! Length !! Type !! Description
|-
| 0x00 || 0x04 || string || Identifier (LGHT)
|-
| 0x04 || 0x04 || uint || Size in bytes
|-
| 0x08 || 0x04 || float || Unknown
|-
| 0x0C || 0x02 || ushort || Entry count
|-
| 0x0E || 0x02 || short || Flag for something (cmp 3)
|-
| 0x10 || 0x04 || ? || Unknown
|-
| 0x14 || 0x04 || ? || Unknown
|}
Child Node Entry (32 bytes):
{| class="wikitable"
|-
! Position !! Length !! Type !! Description
|-
| 0x00 || 0x02 || short || Unused?
|-
| 0x02 || 0x01 || byte || Unknown (same value as 0x00 but used)
|-
| 0x04 || 0x01 || byte || Unknown
|-
| 0x06 || 0x01 || byte || Unused?
|-
| 0x08 || 0x14 || half floats || Unknown
|-
| 0x1E || 0x02 || short || Unknown
|}
===ECAM===
Event Cam.
Used when interacting with object (switching camera).
Has something to do with HPMa/HPMb.
===COLS (Collisions)===
{| class="wikitable"
|-
! Position !! Length !! Type !! Description
|-
| 0x00 || 0x04 || string || Identifier (COLS)
|-
| 0x04 || 0x04 || uint || Size in bytes
|}
Followed by 4 byte string identifier. Example: 0000
====COLI====
{| class="wikitable"
|-
! Position !! Length !! Type !! Description
|-
| 0x00 || 0x04 || string || Identifier (COLI)
|-
| 0x04 || 0x04 || uint || Size in bytes
|}
====HGHT====
====EVNT====
====UNDU====
====SOND====
====PROP====
=====WALK=====
===FLDD (Collision Field)===
Used often when moving around.
====PROP====
Header:
{| class="wikitable"
|-
! Position !! Length !! Type !! Description
|-
| 0x00 || 0x04 || string || Identifier (PROP)
|-
| 0x04 || 0x04 || uint || Content offset
|-
| 0x08 || 0x04 || uint || Footer offset
|}
Footer:
{| class="wikitable"
|-
! Position !! Length !! Type !! Description
|-
| 0x00 || 0x04 || uint || Positions offset
|-
| 0x04 || 0x0? || ? || Unknown offsets
|}
===DOOR===
===SCEX===
{| class="wikitable"
|-
! Position !! Length !! Type !! Description
|-
| 0x00 || 0x04 || string || Identifier (SCEX)
|-
| 0x04 || 0x04 || uint || Size in bytes
|-
| 0x08 || 0x04 || string || Scene name?
|-
| 0x0C || 0x04 || uint || Size in bytes (relative to 0x08)
|}
====TRCK====
https://tcrf.net/Shenmue/Source_Code#.5CSCENE.5C99.5CMS08.5CSEQCONV.C <br>
A track contains information for an cutscene.<br>
The track segment has no data itself, it just contains all the child segments which do contain the data.
{| class="wikitable"
|-
! Position !! Length !! Type !! Description
|-
| 0x00 || 0x04 || string || Identifier (TRCK)
|-
| 0x04 || 0x04 || uint || Size in bytes
|}
=====ASEQ=====
{| class="wikitable"
|-
! Position !! Length !! Type !! Description
|-
| 0x00 || 0x04 || string || Identifier (ASEQ)
|-
| 0x04 || 0x04 || uint || Size in bytes
|-
| 0x08 || 0x04 || ? || Some flags? (0x09 is 7 mostly)
|-
| 0x0C || 0x04 || uint? || Unknown
|-
| 0x10 || 0x10 || string || Some .qst file?
|-
| 0x20 || 0x4 || uint? || Unknown
|-
| 0x24 || 0x? || TOC ||
|}
Table of content entry (12 bytes)
{| class="wikitable"
|-
! Position !! Length !! Type !! Description
|-
| 0x00 || 0x01 || byte || Flag?
|-
| 0x01 || 0x01 || byte || Flag?
|-
| 0x02 || 0x02 || ? || Reserved?
|-
| 0x04 || 0x04 || string || Character name and other stuff (props?)
|-
| 0x08 || 0x04 || uint || Index
|}
=====ACAM=====
Probably camera animation.
=====AMOV=====
=====ASTR=====
====AUVW====
=====LGHC=====
=====RFBD=====
=====EYES=====
=====HAID=====
=====HADT=====
=====HAND=====
=====FACX=====
=====FADE=====
=====MBTK=====
=====FOBJ=====
=====FCLP=====
=====DOOR=====
=====LGHS=====
===SCN3===
===SCN4===
===REGD===
Empty.
===WTHR (Weather)===
Used by [[(HLTaskFunc)ExecuteWeather|WEXE]] ([[(HLTaskFunc)ExecuteWeather]])
{| class="wikitable"
|-
! Position !! Length !! Type !! Description
|-
| 0x00 || 0x04 || string || Identifier (WTHR)
|-
| 0x04 || 0x04 || uint || Size in bytes
|-
| 0x08 || 0x04 || uint || Unknown
|-
| 0x0C || 0x04 || uint || Entry count?
|-
| 0x10 || 0x04 || uint || Entry count?
|-
| 0x14 || 0x04 || uint || Reserved or Empty
|}
===EVFD===
Empty.
===LSCN===
Empty.
===MAPR===
===MAPT===
===SCRL===
{| class="wikitable"
|-
! Position !! Length !! Type !! Description
|-
| 0x00 || 0x04 || string || Identifier (SCRL)
|-
| 0x04 || 0x04 || uint || Size in bytes
|-
| 0x08 || 0x04 || uint || Either fully F or 0
|}
Only present 2 times in sm2, but in sm1 it's common.
===[[CHRD]] (Character Data)===
The CHRD segment contains models character properties that will be loaded for the mapinfo.
===END===

Latest revision as of 19:13, 12 May 2019

The mapinfo is the main file for each scene map. It contains many things such as the shenmue scene script, model loading and definition, collisions, light, weather, sound program setup and cutscenes.

Nodes

Signature Description
ATTR empty
SNDP Sound program
LGHT Scene light
ECAM Event camera
COLS Collisions (SM1)
FLDD Collision field (SM2)
DOOR Doors
SCEX Cutscenes
SCN3 Scene script v3
SCN4 Scene script v4
REGD empty
WTHR Weather
EVFD empty
LSCN empty
MAPR unknown
MAPT unknown
SCRL unknown
CHRD Character data (External models)
END EOF

Memory Models

Could be the MAPINFO memory model:

Position Length Type Description
0x00 0x04 string Identifier (SCNC)
0x04 0x0? ? Variable size (contains pointers)
0x0? 0x04 string Identifier (USE ) //space at the end
0x0? 0x0? ? Variable size (contains pointers)

Found at qword_7FF717119290 (v1.03) in the code segment (CS). It is accessed when reading the TRCK segment.

   struct s1 {
       signed char[8] pad8;
       signed char f8; //bool set to 1 at end
       signed char[7] pad16;
       struct s0* f16;
       struct s2* f24; //ASEQ
       struct s2* f32; //ACAM
       struct s2* f40; //AMOV
       struct s2* f48; //ASTR
       struct s2* f56; //ALIP
       uint64_t f64;
       uint64_t f72;
       signed char[8] pad88;
       int32_t f88;
       int32_t f92;
       int32_t f96;
       int32_t f100;
       signed char[12] pad116;
       struct s2* f116;
       signed char[4] pad128;
       struct s2* f128;
       signed char[42376] pad42512;
       int32_t f42512;
       int16_t f42516;
   };
   struct s0 {
       signed char[4] pad4;
       int32_t f4;
       int32_t f8;
   };
   struct s2 {
       int32_t f0;
       int32_t f4;
       signed char[1] pad9;
       signed char f9;
       signed char[2] pad12;
       int32_t f12;
   };