@@ -48,6 +48,10 @@ m_numPoints(0),
4848m_sizePoints(0 ),
4949m_exportWithScripts(false ),
5050m_isWaterArea(false ),
51+ #if !(RTS_GENERALS && RETAIL_COMPATIBLE_CRC)
52+ m_shouldRender (true ),
53+ m_selected(false ),
54+ #endif
5155m_isRiver (FALSE ),
5256m_riverStart(0 )
5357{
@@ -140,6 +144,9 @@ Bool PolygonTrigger::ParsePolygonTriggersDataChunk(DataChunkInput &file, DataChu
140144 Bool isRiver;
141145 Int riverStart;
142146 AsciiString triggerName;
147+ #if !(RTS_GENERALS && RETAIL_COMPATIBLE_CRC)
148+ AsciiString layerName;
149+ #endif
143150 // Remove any existing polygon triggers, if any.
144151 PolygonTrigger::deleteTriggers (); // just in case.
145152 PolygonTrigger *pPrevTrig = nullptr ;
@@ -148,6 +155,11 @@ Bool PolygonTrigger::ParsePolygonTriggersDataChunk(DataChunkInput &file, DataChu
148155 while (count>0 ) {
149156 count--;
150157 triggerName = file.readAsciiString ();
158+ #if !(RTS_GENERALS && RETAIL_COMPATIBLE_CRC)
159+ if (info->version >= K_TRIGGERS_VERSION_4 ) {
160+ layerName = file.readAsciiString ();
161+ }
162+ #endif
151163 triggerID = file.readInt ();
152164 isWater = false ;
153165 if (info->version >= K_TRIGGERS_VERSION_2 ) {
@@ -163,6 +175,11 @@ Bool PolygonTrigger::ParsePolygonTriggersDataChunk(DataChunkInput &file, DataChu
163175 numPoints = file.readInt ();
164176 PolygonTrigger *pTrig = newInstance (PolygonTrigger)(numPoints+1 );
165177 pTrig->setTriggerName (triggerName);
178+ #if !(RTS_GENERALS && RETAIL_COMPATIBLE_CRC)
179+ if (info->version >= K_TRIGGERS_VERSION_4 ) {
180+ pTrig->setLayerName (layerName);
181+ }
182+ #endif
166183 pTrig->setWaterArea (isWater);
167184 pTrig->setRiver (isRiver);
168185 pTrig->setRiverStart (riverStart);
@@ -177,6 +194,14 @@ Bool PolygonTrigger::ParsePolygonTriggersDataChunk(DataChunkInput &file, DataChu
177194 loc.z = file.readInt ();
178195 pTrig->addPoint (loc);
179196 }
197+ #if !(RTS_GENERALS && RETAIL_COMPATIBLE_CRC)
198+ if (numPoints<2 ) {
199+ DEBUG_LOG ((" Deleting polygon trigger '%s' with %d points." ,
200+ pTrig->getTriggerName ().str (), numPoints));
201+ deleteInstance (pTrig);
202+ continue ;
203+ }
204+ #endif
180205 if (pPrevTrig) {
181206 pPrevTrig->setNextPoly (pTrig);
182207 } else {
@@ -224,7 +249,11 @@ Bool PolygonTrigger::ParsePolygonTriggersDataChunk(DataChunkInput &file, DataChu
224249*/
225250void PolygonTrigger::WritePolygonTriggersDataChunk (DataChunkOutput &chunkWriter)
226251{
252+ #if RTS_GENERALS && RETAIL_COMPATIBLE_CRC
227253 chunkWriter.openDataChunk (" PolygonTriggers" , K_TRIGGERS_VERSION_3 );
254+ #else
255+ chunkWriter.openDataChunk (" PolygonTriggers" , K_TRIGGERS_VERSION_4 );
256+ #endif
228257
229258 PolygonTrigger *pTrig;
230259 Int count = 0 ;
@@ -234,6 +263,9 @@ void PolygonTrigger::WritePolygonTriggersDataChunk(DataChunkOutput &chunkWriter)
234263 chunkWriter.writeInt (count);
235264 for (pTrig=PolygonTrigger::getFirstPolygonTrigger (); pTrig; pTrig = pTrig->getNext ()) {
236265 chunkWriter.writeAsciiString (pTrig->getTriggerName ());
266+ #if !(RTS_GENERALS && RETAIL_COMPATIBLE_CRC)
267+ chunkWriter.writeAsciiString (pTrig->getLayerName ());
268+ #endif
237269 chunkWriter.writeInt (pTrig->getID ());
238270 chunkWriter.writeByte (pTrig->isWaterArea ());
239271 chunkWriter.writeByte (pTrig->isRiver ());
0 commit comments