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 |