Anonymous

Changes

From Final Fantasy Inside

FF7/Field/Walkmesh

1,199 bytes added, 22:10, 25 November 2006
Section 5: Walkmesh (Kero)
Section 5 of field files is a stored walkmesh. A walkmesh is a mesh of polygons on which characters move, telling the engine for example how high it is, and using this the character can, for example, cross bridges with the real feeling that in the middle he is at a higher place than on the sides. It has very simple structure.
{| border="0" cellspacing="1" cellpadding="3" style="background: rgb(0,0,0)" align="center"
! style="background:rgb(0,255,0)" align="center" | Offset
! style="background:rgb(0,255,0)" align="center" | Name
! style="background:rgb(0,255,0)" align="center" | Data Type
! style="background:rgb(0,255,0)" align="center" | Description
|-
|style="background:rgb(0,255,0)" | 0x0000
|style="background:rgb(0,255,0)" | NoS
|style="background:rgb(0,255,0)" | DWORD [0x04]
|style="background:rgb(0,255,0)" | Number of Sectors
|-
|style="background:rgb(0,255,0)" | 0x0004
|style="background:rgb(0,255,0)" | Sector Pool (SP)
|style="background:rgb(0,255,0)" | WORD [3][4] * NoS
|style="background:rgb(0,255,0)" | The data pool of Secots
|-
|style="background:rgb(0,255,0)" | 0x0004 + 24 * NoS
|style="background:rgb(0,255,0)" | Sector Access Pool (SAP)
|style="background:rgb(0,255,0)" | WORD [3] * NoS
|style="background:rgb(0,255,0)" | Gate movement across Mesh Edges
|}
==== Section 5 Header ====
Startofs 0x00 Length 0x04
 The walkmesh information is preceeded by a DWORD (4 bytes) unsigned int, named '''NoS''' (, short for the Number of Sectors)in the walkmesh.
==== Sector pool ====
typedef struct {
short x,z,y,res; // short is a 2 bytes long byte signed integer } vertex_3s; // 3s == 3 shortalthough there are 4 this is for 32 bit data alignment in PSX
typedef struct {
vertex_3d vertex_3s v[3]; // a triangle has 3 vertices } sect_t; // Sector Type
In sector The pool of pool are consists of sectors, which are in fact just triangles and its with there vertex position. For each sector you have three 3 vertexs (3 vertex_3s). Just store them. It seems that res Res and z values are very often the same, but not alwaysfor z this is expected (think planes of data), I don't know whymore study is needed as to what res might be being used for. It seems that all The polygons are 'wound' clockwise. I didnt check it, but likely it is probably in order to know wheather used for determining if a point is in said triangle. If you give it in other direction, point will be detected outside if it is inside and vice versa.
==== Access pool ====
}
In The access pool you have is an array of access data (ID 's of polytriangles in the Mesh) in the mesh, the ID is the triangle you should go into be in if you cross linethat edge.
acces1 is for line from vertex 0 to 1
acces3 is for line from vertex 2 to 0
If acces1/2/3 the edge value is FFFF then you are not allowed to cross 0xFFFF, than this lineedge cannot be crossed (it's blocked). Acces The access pool and sector pool are have the same size (NoT)number of entries, so thus you will just use the same index value for both poolsof data to access the data for the same triangle. If The access don't translate you, it just says, you data merely informs one that if the PC object crosses this line the object should be here, in the indentified triangle. FF7 will halt running if you are not, then there is a problem. If you design polymesh where you cross line and in the '''access tells you that you should be in poly 12, but you are god know where then FF7 stops''' specified triangle.
Anonymous user