Subversion Repositories Games.Descent

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 pmbaty 1
/*
2
 * This file is part of the DXX-Rebirth project <https://www.dxx-rebirth.com/>.
3
 * It is copyright by its individual contributors, as recorded in the
4
 * project's Git history.  See COPYING.txt at the top level for license
5
 * terms and a link to the Git history.
6
 */
7
 
8
/*
9
 *
10
 * Segment Loading Stuff
11
 *
12
 */
13
 
14
 
15
#include "segment.h"
16
#include "physfsx.h"
17
#include "physfs-serial.h"
18
 
19
namespace dcx {
20
 
21
#if 0
22
DEFINE_SERIAL_UDT_TO_MESSAGE(wallnum_t, w, (w.value));
23
ASSERT_SERIAL_UDT_MESSAGE_SIZE(wallnum_t, 2);
24
#endif
25
 
26
namespace {
27
 
28
struct composite_side
29
{
30
        const shared_side &sside;
31
        const unique_side &uside;
32
};
33
 
34
DEFINE_SERIAL_UDT_TO_MESSAGE(composite_side, s, (s.sside.wall_num, s.uside.tmap_num, s.uside.tmap_num2));
35
ASSERT_SERIAL_UDT_MESSAGE_SIZE(composite_side, 6);
36
 
37
}
38
 
39
void segment_side_wall_tmap_write(PHYSFS_File *fp, const shared_side &sside, const unique_side &uside)
40
{
41
        PHYSFSX_serialize_write(fp, composite_side{sside, uside});
42
}
43
 
44
}
45
 
46
#if defined(DXX_BUILD_DESCENT_II)
47
namespace dsx {
48
 
49
/*
50
 * reads a delta_light structure from a PHYSFS_File
51
 */
52
void delta_light_read(delta_light *dl, PHYSFS_File *fp)
53
{
54
        dl->segnum = PHYSFSX_readShort(fp);
55
        dl->sidenum = PHYSFSX_readByte(fp);
56
        PHYSFSX_readByte(fp);
57
        dl->vert_light[0] = PHYSFSX_readByte(fp);
58
        dl->vert_light[1] = PHYSFSX_readByte(fp);
59
        dl->vert_light[2] = PHYSFSX_readByte(fp);
60
        dl->vert_light[3] = PHYSFSX_readByte(fp);
61
}
62
 
63
 
64
/*
65
 * reads a dl_index structure from a PHYSFS_File
66
 */
67
void dl_index_read(dl_index *di, PHYSFS_File *fp)
68
{
69
        di->segnum = PHYSFSX_readShort(fp);
70
        di->sidenum = PHYSFSX_readByte(fp);
71
        di->count = PHYSFSX_readByte(fp);
72
        di->index = PHYSFSX_readShort(fp);
73
}
74
 
75
void segment2_write(const cscusegment s2, PHYSFS_File *fp)
76
{
77
        PHYSFSX_writeU8(fp, s2.s.special);
78
        PHYSFSX_writeU8(fp, s2.s.matcen_num);
79
        PHYSFSX_writeU8(fp, s2.s.station_idx);
80
        PHYSFSX_writeU8(fp, s2.s.s2_flags);
81
        PHYSFSX_writeFix(fp, s2.u.static_light);
82
}
83
 
84
void delta_light_write(const delta_light *dl, PHYSFS_File *fp)
85
{
86
        PHYSFS_writeSLE16(fp, dl->segnum);
87
        PHYSFSX_writeU8(fp, dl->sidenum);
88
        PHYSFSX_writeU8(fp, 0);
89
        PHYSFSX_writeU8(fp, dl->vert_light[0]);
90
        PHYSFSX_writeU8(fp, dl->vert_light[1]);
91
        PHYSFSX_writeU8(fp, dl->vert_light[2]);
92
        PHYSFSX_writeU8(fp, dl->vert_light[3]);
93
}
94
 
95
void dl_index_write(const dl_index *di, PHYSFS_File *fp)
96
{
97
        PHYSFS_writeSLE16(fp, di->segnum);
98
        PHYSFSX_writeU8(fp, di->sidenum);
99
        PHYSFSX_writeU8(fp, di->count);
100
        PHYSFS_writeSLE16(fp, di->index);
101
}
102
 
103
}
104
#endif